From 392b76515f40376b6d36f40a114850ef63650384 Mon Sep 17 00:00:00 2001
From: zjf <zhangjf@probim.com.cn>
Date: Mon, 06 Mar 2023 15:05:22 +0800
Subject: [PATCH] 第一次提交

---
 IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.h                                                  |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CAseDLPNTableRecord.h                                                |   56 
 IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.m                                                  |  317 
 IphoneBIMe/IphoneBIMe/Classes/Common/PBComon.h                                                                                    |   63 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.h                                                                   |   15 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockConstraintParameters.h                          |  141 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiBaseVectorizer.h                                                |  849 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@2x.png           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcadPalette.h                                                        |  547 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawStream.h                                                    |   45 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiXform.h                                                         |  115 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.h                                                          |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@2x.png                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.m                                               |  355 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.m                                                          |   70 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@3x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.m                                                                   |   31 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFilter.h                                                           |   81 
 IphoneBIMe/IphoneBIMe/STAR_bim365_com_cn.cer                                                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.h                                     |   15 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMaterial.h                                                         |  462 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.m                                     |   89 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiContextualColors.h                                              |  261 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@2x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/Contents.json                                                  |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@3x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@3x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@2x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImage.h                                                   |  484 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/loading_10@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@2x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.h                                               |   28 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBExamineImageTableViewCell.h                                              |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/Contents.json                                                            |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/OdFileBuf.h                                                        |  598 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorWithId.h                                                      |   51 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewport.h                                                      |  256 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExport.h                                                        |   44 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/Contents.json                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockXYParameter.h                                   |   76 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Examine_play_20@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete.png                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotativeObjectPE.h                                               |  143 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSequenceEnd.h                                                      |   86 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Contents.json                                                                  |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.h                                |   15 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.m                                                      |  279 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxMultiCast.h                                                        |  358 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmResources.h                                                     |   56 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.m                                |  227 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.h                                                      |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/Contents.json                                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m                                    |   90 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdModuleNames.h                                                      |  124 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdBaseUserIO.h                                                    |  142 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h                                    |   62 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTable.h                                                         |   86 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Examine_play_0@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.h                                                       |   36 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolComponent.h                                          |  119 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.m                                     |   59 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.m                                                             |  239 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.h                                     |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.m                                                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRotatedDimension.h                                                 |  200 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSweep.h                                                |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.m                                                  |  109 
 IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.h                                                                       |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPalette.h                                                       |  395 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/Contents.json                                                   |   22 
 IphoneBIMe/IphoneBIMe/Base.lproj/Main.storyboard                                                                                  |   29 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.h                                          |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTableRecord.h                                              |  370 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.h                                                             |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/Contents.json                                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.m                                          |  136 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/Contents.json                                             |   22 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.m                                                                 |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.m                                              |  143 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.h                                                                 |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/DwgViewController.storyboard                                       |   29 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTable.h                                                |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.m                                        |  226 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.h                                        |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/RegExport.h                                                      |   45 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweepOptions.h                                                     |  355 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/C3dModelerDefines.h                                  |   45 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/Contents.json                                                     |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve2d.h                                                   |  558 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrNode.h                                                          |   41 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.h                                                  |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.m                                                          |   98 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.h                                              |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.h                                                          |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.m                                    |  133 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dVertex.h                                                         |  256 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnLSPE.h                                                          |  166 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.m                                                 |  104 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.m                                                         | 2461 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetView.h                                                     |   62 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.h                                                         |  347 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCone.h                                                     |  327 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.h                                    |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@2x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@3x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.h                                                 |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Contents.json                                                                      |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepFaceTraverser.h                                             |   89 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/ModelDocObjExports.h                                     |   37 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextData.h                                                |  771 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/scan_icon@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MaterialResolver.h                                                   |   43 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@3x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@3x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.h                                                  |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@3x.png          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.m                                                  |   66 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Contents.json                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatchPE.h                                                          |   59 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry.h                                                    | 1875 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironmentTraitsData.h                                         | 1147 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseMaterialView.h                                              |  379 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/loading_17@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.h                                                       |   64 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrep.h                                                          |   74 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexEdgeTraverser.h                                           |   81 
 IphoneBIMe/IphoneBIMe/issueAdd2.plist                                                                                             |  114 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.m                                                       |   87 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlanarEnt.h                                                     |  252 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometryRecorderPlayer.h                                        |   50 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiametricDimension.h                                               |  154 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentationData.h                            |   46 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.m                                                 |   71 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldGeometry.h                                                 |   83 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsHighlightData.h                                                 |  179 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMemory.h                                                           |  147 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/AppDelegate.h                                                                                               |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_GL.h                                                              |  124 
 IphoneBIMe/IphoneBIMe/AppDelegate.m                                                                                               |  262 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextCollection.h                                          |  211 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@3x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelPlaneDef.h                                 |   63 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@2x.png                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@2x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@2x.png                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@2x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdString.h                                                           | 1126 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExport.h                                                           |   59 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceWithHolesIterator.h                                    |   83 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStreamBuf.h                                                        |  173 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLayerTraitsData.h                                               |  354 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSynergy.h                                              |  190 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.h                                                       |   29 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.h                                                                |   76 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@3x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.m                                              |   91 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iStrConv.h                                                         |   30 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@3x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.h                                              |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.h                                                 |   47 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.m                                                                |  193 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDummyGeometry.h                                                 |  994 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@2x.png |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.h                                     |   16 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@2x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.m                                     |  144 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometryCreator.h                                             |  142 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImageLoader.h                                             |   78 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockElement.h                                       |  105 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModelerExport.h                                        |   48 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextIterator.h                                                     |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShTorus.h                                                |   61 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3d.h                                                       |  689 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/Contents.json                                                                        |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTrace.h                                                            |  270 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultimap.h                                                         |  115 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.m                                                            |  131 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.h                                                            |   16 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@3x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.m                                                                           |   38 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColor.h                                                            |  285 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTableRecord.h                                                   |  238 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.m                                                          |   70 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.h                                                                           |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TextDefs.h                                                           |   53 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.h                                                              |   41 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/Contents.json                                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.m                                                              |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/marker.zip                                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShFillet.h                                               |   65 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.h                                                          |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.h                                                             |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.h                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetype.h                                                      |  222 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdBinaryData.h                                                       |   80 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.h                                                         |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyEntity.h                                                      |  376 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.m                                                         |  158 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.m                                      |  562 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.m                                                             |   70 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Contents.json                                             |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Contents.json                                               |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSInternalComponent.h                                        |   94 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x-1.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsData.h                                           |  364 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayReference.h                                                |  284 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.h                                                                        |   24 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CloneFilers.h                                                        |  115 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BoolArray.h                                                          |   39 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.m                                                                        |   37 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Examine_play_11@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialFilter.h                                                    |  272 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.h                                             |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCPointArray.h                                                  |   35 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@3x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Contents.json                                                 |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.m                                             |  578 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPop.h                                                         |   31 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSSet.h                                                             |  294 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParamValueSet.h                                 |  100 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLeader.h                                                           |  744 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.m                                                        |  338 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerHistory.h                                                     |   83 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@2x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt3d.h                                               |  365 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionManager.h                                                   |  107 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.h                                                        |   27 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@3x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@3x.png                                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/Contents.json                                                     |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDTypeLibReg.h                                                       |   36 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/Contents.json                                             |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/bussiness_video@3x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@3x.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@2x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@3x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@3x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxIterator.h                                                         |   80 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@3x.png                                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@3x.png               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Contents.json                                      |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@2x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Contents.json                                                  |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.m                                       |   46 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexLoopTraverser.h                                           |   89 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCalloutBlocks.h                                                 |   57 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.h                                       |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RefCountImpl.h                                                       |  103 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor.png                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.h                                                      |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Contents.json                                                  |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/Contents.json                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.m                                           |  441 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.m                                                      |  110 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.h                                           |   38 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepImage.h                                         |   95 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNamedPath.h                                                        |  106 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweptSurface.h                                                     |  126 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDVersion.h                                                          |  158 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/loading_8@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveExport.h                                                       |   43 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan.png                                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFaceLoopTraverser.h                                             |   87 
 IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.m                                                                     |  135 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.h                                                                     |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.h                                         |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis.png                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@2x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine2d.h                                                        |  108 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxNames.h                                                            |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.m                                         |  220 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelectProc.h                                                    |  110 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LyLayerFilter.h                                                      |  376 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.m                                                                      |  161 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.h                                                                      |   16 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ColorMapping.h                                                       |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.h                                                    |   81 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@3x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTraitsCache.h                                                   |  140 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@2x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@3x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSpatialFilter.h                                                 |   97 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDwgIO.h                                                     |  351 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l.png                                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeKnotVector.h                                                    |  374 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTableRecord.h                                              |  543 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.m                                         |  127 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDetailViewStyle.h                                                  |  395 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@2x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.h                                         |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ViewportDefs.h                                                       |   58 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@2x.png           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Contents.json                                                          |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.m                                                   |  220 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.h                                              |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3d.h                                                       |  362 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveSurfInt.h                                                  |  269 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.m                                              |  217 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSystemServices.h                                                   |  387 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/Root.plist                                                       |   61 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@2x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleTraitsData.h                                         |   78 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLightNode.h                                                     |   93 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Contents.json                                         |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.h                                                   |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red.png                                                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplexShellTraverser.h                                         |   88 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.m                                              |  105 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Examine_play_4@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.h                                              |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMeshVertex.h                                               |   83 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategory.h                                                  |   52 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.h                                                       |   51 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObject.h                                                           | 1157 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaParameters.h                                           |  109 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttributeDefinition.h                                              |  182 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.h                                                         |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@2x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.m                                                         |   85 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.h                                        |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGsManager.h                                                        |  177 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.m                                        |  952 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/Contents.json                                    |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Contents.json                                         |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/Contents.json                                            |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@3x.png                                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFaceRecord.h                                                       |  138 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odole.h                                                              |   93 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransformed.h                                                   |  107 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.h                                                    |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCodePage.h                                                         |   82 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.m                                                    |  163 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/loading_13@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt32Array.h                                                        |   38 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@3x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@2x.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOleFrame.h                                                         |   58 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandlerBase.h                                                 |  161 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetViews.h                                                    |   57 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMlineStyle.h                                                       |  371 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.m                                                                |  338 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@2x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRenderSettings.h                                                   | 1284 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h                                      |  156 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsCullingVolume.h                                                 |  431 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.h                                                       |   37 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Contents.json                                     |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Contents.json                                     |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@3x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFaceEdgeDataTraitsSaver.h                                       |  524 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.h                                                                |   48 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAlignedDimension.h                                                 |  149 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiModelToViewProc.h                                               |  149 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelDocViewStyle.h                                                |  218 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay3d.h                                                         |  102 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartClsIdPtr.h                                                      |  314 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdHeap.h                                                             |  130 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Contents.json                                                                 |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.h                                            |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@2x.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale2d.h                                                       |  265 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVbaProject.h                                                       |   80 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorContext.h                                                     |   93 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialItem.h                                                  |  744 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult.png                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@3x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialTraitsData.h                                            |  769 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.m                                            |  111 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdMapping.h                                                        |  399 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockIterator.h                                                    |  189 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipperEx.h                                                |  201 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/Contents.json                                                  |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/Contents.json                                                                           |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.m                                         |  250 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.h                                         |   31 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.m                                                        |  150 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@3x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepComplexTraverser.h                                          |   86 
 IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.h                                                        |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@3x.png                                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrHit.h                                                           |   73 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjExports.h                             |   36 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStrokePatternComponent.h                                   |  172 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3d.h                                                      |  561 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterVariables.h                                                  |  246 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSet.h                                                      |  110 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt2d.h                                                    |   68 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxThreadPoolService.h                                                |  820 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.m                                       |  412 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/Contents.json                                         |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.h                                       |   14 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@3x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@3x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/1122.png                                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSystemServices.h                                                   |   83 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTableRecord.h                                                 |  773 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.m                                         |   48 
 IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.m                                                              |  122 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/Contents.json                                                         |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.m                                                              |   13 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.h                                         |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.h                                                              |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.h                                                              |   29 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Contents.json                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTableRecord.h                                              |  602 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.h                                                                        |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialIndex.h                                                     |  115 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettings.h                                                     |  718 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@2x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariantValue.h                                                     |  135 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.h                                            |   13 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.m                                                                        |   37 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFiler.h                                                            | 1427 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/Contents.json                                                                       |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsNode.h                                                          |  273 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/Tf.h                                                              |  332 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.m                                            |  156 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@2x.png               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfResult.h                                                        |   44 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContext.h                                                    |   91 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.m                                       |  536 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.h                                       |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuickHeapAllocator.h                                                 |   40 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExTtfFileNameByDescriptor.h                                        |  173 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTable.h                                                    |   82 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve2d.h                                               |  153 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFace.h                                                             |  206 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientation.h                                   |   69 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVariant.h                                                       |  378 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfKey.h                                                      |   30 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@3x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdResult.h                                                           |   46 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFont.h                                                             |  604 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Contents.json                                    |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftedSurface.h                                                    |  161 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/avgpc.h                                                           |  189 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc2d.h                                                    |  305 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockFlipParameter.h                                 |   66 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Contents.json                                 |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/StdAfx.h                                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandler.h                                                     |  256 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaneSurface.h                                                     |  105 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/Contents.json                                                  |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.h                                   |   42 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLayerNode.h                                                     |  189 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.m                                   |   45 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdLispEngine.h                                                    |  107 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MessageDefs.h                                                        |  490 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdGUID.h                                                             |   35 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@2x.png           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMatchProperties.h                                                  |  104 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dSolid.h                                                          | 1261 
 IphoneBIMe/IphoneBIMe/STAR_probim_cn.cer                                                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.m                                                     |  318 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.m                                   |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCRectArray.h                                                   |   35 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEnum.h                                                          |   43 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.h                                                     |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/XRefMan.h                                                            |  218 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.h                                   |   16 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSCompoundComponent.h                                        |   92 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicLinker.h                                                      |  179 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.h                                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete.png                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrTraverser.h                                                     |  107 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.m                                                                |  211 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DebugStuff.h                                                         |  277 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg3d.h                                                     |  150 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRootExport.h                                                       |   47 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbArgbColor.h                                        |   83 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TPtr.h                                                               |  157 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line备份.png                                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImageDef.h                                                   |  430 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.h                                                  |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.m                                                |  118 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.m                                                  |  341 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock1PtParameter.h                                  |   52 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategories.h                                                |   58 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@2x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.m                                         |  141 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/BackNavItem.xib                                                                        |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.h                                         |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.h                                                |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrecord.h                                                          |  233 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSourceMgr.h                                     |   66 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTable.h                                                       |  248 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/Contents.json                                                               |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolyline.h                                                       |  377 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutPaperPE.h                                                    |   98 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@2x.png                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewBorder.h                                           |  304 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.m                                             |  187 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.h                                            |   26 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@2x.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.h                                                 |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.m                                                 |   56 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.h                                             |   43 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawImpl.h                                                      |   66 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.m                                            |  314 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiDefaultContext.h                                                   |  152 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolylineVertex.h                                                 |  120 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Examine_play_9@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline3d.h                                                    |   96 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time.png                                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.h                                                                          |   27 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve3d.h                                                |  166 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@2x.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalWatchers.h                                                     |  249 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.m                                                                          |  440 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/Gi.h                                                              |  578 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiContextForDbDatabase.h                                             |  333 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@3x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeView.h                                             |  179 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewportProperties.h                                            |   90 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.m                                                         |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/Contents.json                                                         |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.h                                                         |  130 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.m                                           |  263 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@3x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.m                                                          |  172 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.h                                           |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/ErrorDefs.h                                                       |   99 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.h                                                          |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/Contents.json                                                       |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@2x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@2x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMPolygon.h                                                         |  294 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.h                                                       |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@3x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Contents.json                                                                         |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@2x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExSystemServices.h                                                 |   78 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.m                                                       |  210 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@3x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Contents.json                                             |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntervalArray.h                                                 |   37 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.m                                                                       |   34 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeAugPolyline3d.h                                                 |  193 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/BBox.h                                                            |  187 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.h                                                                       |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@2x.png                                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn.png                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm.png                                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@2x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.m                                                           |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultiset.h                                                         |  114 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.h                                         |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/loading_7@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.h                                                               |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmEntityColorArray.h                                                 |   39 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.h                                                            |   53 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.m                                                               |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.m                                                            |   50 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/Contents.json                            |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Contents.json                                          |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExport.h                                                        |   41 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.m                                         |  589 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.h                                                           |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.m                                                             |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSelectionReactor.h                                              |  229 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.m                                              |   68 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@3x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IntArray.h                                                           |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleData.h                                               |  720 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLine.h                                                             |  472 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dElement2dTraverser.h                                      |   82 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHelix.h                                                            |  186 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveLight.h                                                        |  378 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEntityNode.h                                                    |  973 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.h                                      |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.h                                                             |   77 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.h                                              |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.m                                      |   72 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm.png                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Contents.json                                   |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImage.h                                                      |  451 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.m                                                                      |  149 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbClass.h                                                            |  120 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.m                                                          |   13 
 IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.h                                                                      |   46 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewport.h                                |  199 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.h                                                          |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseDatabase.h                                                     |  506 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIndex.h                                                            |  523 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DDTypeLibReg.h                                                       |   36 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidator.h                                            |  449 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/Registrar.h                                                      |   93 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockActions.h                                       |  237 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudColorMap.h                               |  213 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayPreDef.h                                                      |   36 
 IphoneBIMe/IphoneBIMe/examineAdd4.plist                                                                                           |  132 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFastExtCalc.h                                                   |  269 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.m                                                          |   94 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@3x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDbObjectReference.h                                             |   51 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorGeometry.h                                              |  707 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFileDepMgr.h                                                       |  213 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.m                                                               |  182 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition3d.h                                                    |   88 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.h                                                               |   27 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTable.h                                                       |   95 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdToolKit.h                                                          |   40 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLookUpParameter.h                               |   56 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.h                                                          |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoPrismIntersector.h                                         |   85 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMesh.h                                                     |  210 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@3x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@3x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.h                                                                |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepShellTraverser.h                                            |   86 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSource.h                                        |  175 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/PrefixHeader.pch                                                                                            |  112 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Entities.h                                                           |   89 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.h                                                                          |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@3x.png                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsPageParams.h                                                    |  149 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.m                                                                          |   44 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewProps.h                                                     |  324 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/GeVariant.h                                                       |  166 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBoolean.h                                              |   65 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.m                                                                |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMline.h                                                            |  344 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraitsData.h                                               |  383 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleSoftReference.h                                              |  102 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartPtr.h                                                           |  395 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.h                                                  |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@2x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.m                                                  |  169 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEnums.h                                                         |  131 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelerGeometry.h                                                  |   27 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoPositionMarker.h                                                |  257 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@3x.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@3x.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandStack.h                                                  |  538 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@3x.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOrdinateDimension.h                                                |  168 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudEx.h                                     |  377 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafile.h                                                      |   70 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.m                                       |   44 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.h                                       |   27 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/Contents.json                                     |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPerspectivePreprocessor.h                                       |   82 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Contents.json                                                |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.m                                        |  132 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLibVersion.h                                                    |  145 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/Contents.json                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDToStr.h                                                           |   48 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMText.h                                                            | 1112 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.m                                              |  288 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDynBlockReference.h                                                |  279 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShRevolve.h                                              |   71 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPyramid.h                                              |   65 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/Contents.json                                      |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit.png                                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimension.h                                                        |  784 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.h                                                       |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.h                                        |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetyper.h                                                   |   50 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.m                                                       |  122 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnitsFormatter.h                                                   |  335 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/location.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg.png                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@3x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Contents.json                                          |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFontServices.h                                                     |   87 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.h                                              |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdUserIO.h                                                        |  494 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@2x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/Contents.json                                                      |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.h                                                  |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Examine_play_8@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe.xcworkspace/contents.xcworkspacedata                                                                        |   10 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectReactor.h                                                    |  271 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.m                                                  |   68 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc.png                                        |    0 
 IphoneBIMe/IphoneBIMe.xcodeproj/xcshareddata/xcschemes/IphoneBIMe.xcscheme                                                        |   78 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoop.h                                                          |   64 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiShapePlane.h                                                    |  128 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Contents.json                                        |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentation.h                                |   95 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay2d.h                                                         |  100 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStack.h                                                            |  115 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Examine_play_14@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/Contents.json                                                             |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance.png                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line备份@3x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select.png                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPattern.h                                                       |   84 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudCropping.h                               |  154 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.h                                                       |   80 
 IphoneBIMe/IphoneBIMe/loading_alone.json                                                                                          |    1 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawCancelException.h                                           |   50 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/Contents.json                                   |   22 
 IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.h                                                                           |   40 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.h                                     |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.m                                     |  114 
 IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.m                                                                           |  200 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertex.h                                                        |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.h                                                 |   25 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock2d.h                                                  |  170 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeClipBoundary2d.h                                                |  108 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@2x.png                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayout.h                                                           |  346 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudClipping.h                               |  156 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/Contents.json                                                                      |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegion.h                                                           |  382 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockPurgePreventer.h                         |   49 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.h                                                          |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.m                                                           |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCylinder.h                                                 |  317 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/Contents.json                                                       |   92 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityIntersectionPE.h                                             |   80 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/Contents.json                                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.h                                                           |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@3x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.m                                                          |   38 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeout.h                                                          |   75 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.m                                                 |  386 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@3x.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.h                                         |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.h                                                                |   27 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.h                                             |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.m                                             |  106 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@2x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.h                                               |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/Contents.json                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.m                                                                |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.m                                               |  366 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.m                                         |  117 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.m                              |  209 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFiler.h                                                         |  381 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.h                              |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.m                                                |  245 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldDraw.h                                                     |   62 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RawByteData.h                                                        |   73 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.h                                                |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.h                                            |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dArray.h                                                 |   36 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Headers/Shape.h                                              |   27 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Contents.json                                         |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@3x.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.m                                                                               |  694 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.m                                            |  115 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.m                                              |  200 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.m                                                |  252 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/Contents.json                                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheet.h                                                         |   87 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.h                                                |   16 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAlloc.h                                                            |   78 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.h                                              |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBRecordingView.h                                              |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyExt.h                                                         |   92 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt3d.h                                                   |  188 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiUtils.h                                                         |   58 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiSpatialIndex.h                                                  |  221 
 IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.h                                                                               |  237 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.h                                                     |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@2x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@2x.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayMemAlloc.h                                                    |  894 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.h                                           |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxOverrule.h                                                         |  111 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.m                                                     |  583 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.m                                           |   39 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEntryPoint.h                                            |   60 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Contents.json                               |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlaneProjector.h                                                |  112 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiCommonDraw.h                                                    |  653 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Modules/module.modulemap                                     |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Contents.json                                          |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve2d.h                                                 |  127 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/choose_selected_bg.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFill.h                                                          |  314 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn.png                                                  |    0 
 IphoneBIMe/IphoneBIMe.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist                                                           |    8 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all.png                                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShCylinder.h                                             |   97 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_5.5@3x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Contents.json                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdList.h                                                             |   63 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.h                                                              |   18 
 IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.h                                                                                   |   16 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Examine_play_17@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.m                                                              |   36 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background.png                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@2x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star.png                                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiProceduralGenerator.h                                           |  414 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockProxyNode.h                              |   42 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@2x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@1x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/Contents.json                                                              |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.m                                                                                   |  213 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfPlatforms.h                                                |   36 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableContent.h                                                     |   92 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopEdgeTraverser.h                                             |  131 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironment.h                                                   |  543 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTableRecord.h                                                |  156 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RemoteGeomProxy.h                                                    |  246 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaAppServices.h                                                  |   47 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLocalDrawableDesc.h                                             |   84 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/include.dsp                                                          | 1281 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@2x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3PointAngularDimension.h                                           |  160 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyle.h                                                   | 1350 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.m                                     |   94 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@3x.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockNode.h                                                     |  379 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@2x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/hztxt.shx                                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.h                                     |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Contents.json                                        |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometrySimplifier.h                                            |  810 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelector.h                                                      |   57 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@2x.png          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Contents.json                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt2d.h                                                   |  207 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale3d.h                                                       |  256 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Info.plist                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.m                                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsDataSaver.h                                      |   91 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.m                                                                        |  117 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SSet.h                                                               |  251 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Examine_play_15@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.h                                                                       |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocation.h                                          |   63 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.h                                                                        |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/examineAdd5.plist                                                                                           |  230 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/DistributionSummary.plist                          |   94 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/Contents.json                                                         |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/Contents.json                                                        |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimension.h                                                  |  145 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymUtl.h                                                           |  309 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDLinkerReactor.h                                                   |  104 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@3x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.h                                                           |   78 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCircle.h                                                           |  485 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2d.h                                                       |  306 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@3x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.m                                                           |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.h                                                           |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@2x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.m                                                           |  321 
 IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.m                                                |   46 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.m                                             |  107 
 IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.h                                                |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DimVarDefs.h                                                         | 1146 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.h                                             |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftOptions.h                                                      |  400 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ISatConverter.h                                          |   73 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/Contents.json                                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/Gs.h                                                              | 1364 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@2x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/Contents.json                                                                 |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDxfIO.h                                                     |  349 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVoidPointerArray.h                                              |   38 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThreadsCounter.h                                                     |  285 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/Contents.json                                      |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsRenderSettingsProperties.h                                      |  117 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.h                                                                 |   27 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAnnoScaleSet.h                                                  |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.h                                                                   |   26 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewSymbol.h                                           |  153 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.h                                                    |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.m                                                                 |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeometryFromProxy.h                                                  |   65 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.m                                                    |  323 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFrame.h                                                            |   57 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@3x.png                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ResBuf.h                                                             | 1427 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderStyle.h                                                     |  957 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve3d.h                                               |  188 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.m                                                                   |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.m                                                           |  160 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@3x.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/Contents.json                                           |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@2x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Rp/RasterProcessor.h                                                 |  120 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.m                                                       |  542 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDouble2dArray.h                                                 |   38 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@2x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.h                                                           |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSet.h                                                   |   55 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.mm                                               | 1295 
 IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMDefines.h                                                                              |  421 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/Contents.json                                         |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine3d.h                                                        |  108 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepBlockReference.h                                |   85 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@2x.png                                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOle2Frame.h                                                        |  439 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRay.h                                                              |  382 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_NotThatKindOfClass.h                                           |   50 
 IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.h                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.m                                                           |  141 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.m                                        |  140 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.h                                        |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetype.h                                                    |  571 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.h                                                |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.m                                                |   86 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Contents.json                                  |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Contents.json                                            |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderBreaks.h                                                    |   46 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2dArray.h                                                 |   36 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/Contents.json                                                 |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@3x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dPolyline.h                                                       |  505 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdSetLocale.h                                                        |  122 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.h                                                          |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@3x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Contents.json                                            |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@2x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.m                                                       |  152 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_InvalidInput.h                                                 |   37 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetypeRedir.h                                                 |   63 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@2x.png          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.m                                            |  165 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.m                                                          |   17 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@3x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x-1.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatch.h                                                            | 1238 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.h                                            |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.m                                                       |  262 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@2x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@3x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurface.h                                                       |  220 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.h                                   |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Examine_play_3@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockReference.h                                                   |  630 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiImage.h                                                         |  279 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVisualStyle.h                                                      |  332 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.m                                   |  222 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/Contents.json                                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.h                                                       |   60 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@2x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@2x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubDMesh.h                                                         |  286 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.h                                                           |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/Contents.json                                                     |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Contents.json                                  |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3d.h                                                      |  626 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRectIntersDetector.h                                            |   87 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.h                                                       |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHlrResults.h                                                    |   73 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.h                                                                  |   49 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockAlignmentParameter.h                            |   53 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.m                                                                  |  280 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelerModule.h                                      |   56 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.h                                                     |   46 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/Contents.json                                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerState.h                                                       |  460 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/Contents.json                                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyline.h                                                         |  598 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmComponent.h                                                     |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMaterial.h                                                     |  992 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2d.h                                                     |  163 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/Contents.json                                                            |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.h                                            |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatform.h                                                         |  959 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.m                                                     |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.m                                            |   57 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.h                                |  169 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@2x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.h                                                                         |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.h                                                          |   15 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudIntensityStyle.h                         |  154 
 IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.m                                                                         |   55 
 IphoneBIMe/IphoneBIMe/examineAdd2.plist                                                                                           |  258 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@2x.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/loading_9@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.m                                |  616 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.h                                                                |   16 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.m                                                                |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StaticRxObject.h                                                     |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.m                                                          |  106 
 IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.h                                                                          |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/Contents.json                                                         |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.m                                                     |  209 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShChamfer.h                                              |   63 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Contents.json                                            |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStreamImpl.h                                                   |  446 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.h                                                |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@3x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/TtfDescriptor.h                                                   |  217 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@3x.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Examine_play_16@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMutex.h                                                            |  419 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.h                                                              |   77 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@3x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.m                                    |  160 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/Contents.json                                                       |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.m                                                              |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Contents.json                                         |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbDetailSymbol.h                                         |  173 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ApLongTransactions.h                                                 |  153 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.h                                    |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FlatMemStream.h                                                      |  203 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.m                                                |   60 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbVpTabRec.h                                |  116 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.h                                                                        |  113 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/en.lproj/Root.strings                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatterImpl.h                                               |  139 
 IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.m                                                                        |  521 
 IphoneBIMe/IphoneBIMe/Base.lproj/LaunchScreen.storyboard                                                                          |   29 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.m                                   |  168 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdVector.h                                                           | 1172 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Contents.json                             |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@2x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh.h                                                          |   34 
 IphoneBIMe/IphoneBIMe/examineAdd3.plist                                                                                           |  132 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.m                                             |   84 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EmbeddedASMEntPE.h                                                   |   37 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.h                                             |   14 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.h                                                     |   52 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMeshVertex.h                                                |  101 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.h                                             |   40 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockVisibilityParameter.h                           |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.h                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Contents.json                                                     |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObjectReactor.h                                                 |  306 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64.h                                                              |  256 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.h                                                                   |   41 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarDefs.h                                                         | 3981 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.m                                             |  158 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.m                                           |  315 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@2x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/VLObject.h                                                           |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.h                                   |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@3x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.m                                                                   |  350 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int16Array.h                                                         |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.h                                                       |   37 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2dNodeTraverser.h                                        |  125 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionViewStyle.h                                                 |  617 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.h              |   45 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrExport.h                                                        |   48 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmExport.h                                                        |   41 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.m                                      |  135 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.h                                      |   16 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@2x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.m              |  272 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.h                                             |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataLink.h                                                         |  195 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@2x.png               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLongTransaction.h                                                  |  235 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.m                                             |  453 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/LineWtIndex.h                                                     |  140 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_x_portrait@3x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GiBaseVectorizerImpl.h                                            |  315 
 IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.m                                                                          |  122 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiStack.h                                                         |   34 
 IphoneBIMe/IphoneBIMe/examineAdd1.plist                                                                                           |  146 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxRasterServices.h                                                   |  246 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTypedId.h                                                          |   63 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@3x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportData.h                                             |  370 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEllipse.h                                                          |  750 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBackground.h                                                       |  332 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@2x.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockGrips.h                                         |  241 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfaceCurve2dTo3d.h                                            |   76 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.xib                                                       |  108 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Contents.json                                        |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSolid.h                                                            |  253 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExport.h                                                        |   54 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@2x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/loading_14@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetyper.h                                                     |   89 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEmptyGeometry.h                                                 |  217 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/Contents.json                                                     |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StdStrings.h                                                         |   86 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select.png                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.m                                              |  330 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFilerV100Impl.h                                                 |  443 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.h                                              |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/main.m                                                                                                      |   15 
 IphoneBIMe/IphoneBIMe/Classes/Category/PBAdditonal.h                                                                              |   15 
 IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.h                                                         |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.h                                                              |   51 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.h                                     |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition2d.h                                                    |   83 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@2x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.m                                                              |   13 
 IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.m                                                         |   33 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrTriangulationParams.h                                           |  145 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Contents.json                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.m                                     |  143 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.h                                        |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.m                                        |  206 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterial.h                                                      | 1790 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline2d.h                                                    |   92 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAnsiString.h                                                       |  739 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGrip.h                                                             |  756 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbScale.h                                                            |  278 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseCollection.h                                               |   56 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.h                                                     |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.m                                                     |  356 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@2x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@2x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLight.h                                                         |  117 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@3x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewport.h                                                         | 1068 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbImage.h                                                            |   71 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdgeLoopTraverser.h                                             |   89 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseSubentId.h                                                     |  255 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt64Array.h                                                        |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiesel.h                                                           |   82 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Examine_play_13@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@2x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSectionDefinition.h                             |   72 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@2x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line.png                                                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersistProxy.h                                                  |   52 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/Contents.json                                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNoiseGenerator.h                                                |  129 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/Contents.json                                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.m                                              |   84 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@3x.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@2x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RcsFileServices/RxRcsFileServices.h                                  |  115 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.m                                                       |   53 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.h                                              |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPathNode.h                                                      |   51 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.h                                                       |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@3x.png              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.h                                        |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.h                                   |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.m                                        |  314 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odaxwrap.h                                                           |  167 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.m                                   |  362 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Examine_play_18@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@3x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepInventorSource.h                                |   83 
 IphoneBIMe/IphoneBIMe/examineAdd6.plist                                                                                           |  272 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopVertexTraverser.h                                           |   98 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/Contents.json                                                          |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.h                                          |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.m                                          |  454 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepEdgeTraverser.h                                             |   84 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerMarkers.h                                                     |   51 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.h                          |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock3d.h                                                  |  221 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.m                          |   42 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.h                                                            |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFormattedTableData.h                                               |  384 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdBuffer.h                                                         |  139 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.h                                              |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@2x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.m                                     |  122 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMapperItem.h                                                    |  875 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.h                                                     |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/Contents.json                                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.h                                     |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.m                                                     |  436 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveRender.h                                                       |  232 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.m                                                            |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Contents.json                                                   |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@2x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@2x.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshControl.h                                                   |  121 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.h                                      |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.m                                               |  180 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepCutDefinition.h                                 |   63 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.m                                      |   68 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/NextCodeDefs.h                                                       |   81 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.h                                               |   17 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.h                                                         |   51 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAuditInfo.h                                                        |  236 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Contents.json                                                       |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Contents.json                                                                               |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/Contents.json                                                         |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/Contents.json                                            |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/Contents.json                                            |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.m                                                         | 1744 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@3x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@2x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@3x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsProperties.h                                                    |  182 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseReactor.h                                                  |  279 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock2PtParameter.h                                  |   71 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelGeomExport.h                                    |   48 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSPointComponent.h                                           |  168 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.h                                                |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLight.h                                                            |  185 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.m                                                |   68 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSurface.h                                                          |  673 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerIndex.h                                                       |   85 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSun.h                                                              |  121 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTable.h                                                            | 4984 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArray.h                                                            | 1515 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.h                                         |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/txt.shx                                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.m                                         |  166 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/Contents.json                                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.h                                                      |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/loading_12@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@3x.png                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.h                                              |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Examine_play_2@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.h                                     |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.m                                                      |   91 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStream.h                                                       |   87 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.m                                              |   49 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@2x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloud.h                                       |  405 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.m                                     |  102 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@3x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Contents.json                                                 |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotGenerator.h                                                 |  158 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewLocalId.h                                                   |  132 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.h                                        |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.h                                          |   16 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.m                                          |  140 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.m                                        |   55 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@3x.png           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbJoinEntityPE.h                                                     |   80 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTableRecord.h                                             |  483 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Contents.json                                     |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdFunctionIO.h                                                    |   49 
 IphoneBIMe/IphoneBIMe/loading_refresh.json                                                                                        |    1 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Contents.json                                       |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar.png                                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxInit.h                                                             |   35 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@3x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@3x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/OdPolyPolygon3d.h                                                 |  113 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialNode.h                                                  |  137 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbSurface.h                                                   |  336 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RootExport.h                                                         |   48 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.m                              |  209 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurve.h                                                            |  408 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerTools.h                                                       |  113 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.h                                                    |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIdGraph.h                                                    |   60 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@3x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2d.h                                                     |   47 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.h                                   |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.m                                                    |  413 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.m                                   |  385 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPolarParameter.h                                |   68 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete.png                                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/Contents.json                                                  |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentMaterial.h                                       |   60 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyObject.h                                                      |  169 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.h                              |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@3x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawableHolder.h                                                |   56 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNurbSurface.h                                                      |  702 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPageController.h                                                   |  184 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.m                                                           |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.m                                                              |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Contents.json                                        |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDoubleArray.h                                                   |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.h                                                     |   34 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@3x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGripPoints.h                                                       |  283 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.h                                                              |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SlotManager.h                                                        |  237 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.h                                                           |   78 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@3x.png                                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.h                                                                      |   28 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObjectImpl.h                                                       |  127 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.h                                  |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Contents.json                                        |   23 
 IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.m                                                                      |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplex.h                                                       |   58 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.m                                  |  153 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtents.h                                                       |   36 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.m                                                     |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExGiRasterImage.h                                                  |  441 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDbRootLinkage.h                                                 |  263 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.m                                                    |  344 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefGraph.h                                                        |  264 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@2x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@2x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.h                                                    |   41 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.m                                                     |  108 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.h                                                     |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotStyleDefs.h                                                 |  309 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdValue.h                                                            |  268 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SharedPtr.h                                                          |  184 
 IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.m                                       |  227 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.h                                                             |   30 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSpatialQuery.h                                                  |   79 
 IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.h                                       |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity2d.h                                                      |  166 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.m                                                             |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/loading_1@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tables.h                                                             |   50 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/Contents.json                                                 |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizer.h                                                |  517 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2LineAngularDimension.h                                            |  147 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawableImpl.h                                                  |   64 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/Contents.json                                                     |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer/BrepRendererImpl.h                                      |   80 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@3x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Contents.json                                        |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Examine_play_7@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowserConfig.h                                                  |   42 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Contents.json                                              |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@3x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@3x.png           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@2x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@2x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.h                                                       |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModel.h                                                     |  429 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@2x.png                                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.m                                                       |  168 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public.png                                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHLRemover.h                                                     |   86 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Contents.json                                                   |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockBasepointParameter.h                            |   50 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@2x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.h                                                 |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.m                                        |  378 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSObject.h                                                   |  106 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt2d.h                                                   |  163 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.m                                                 |   62 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.h                                        |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbAssocPersSubentManager.h                                 |  115 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2dArray.h                                                 |   40 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.h                                                      |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcAlignedText.h                                                   |  479 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/bussiness_person@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/Contents.json                                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepDetailDefinition.h                              |   88 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppProgressMeter.h                                             |  100 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.m                                                      |   49 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue.png                                                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@3x.png                                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ChunkAllocator.h                                                     |  182 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppServices.h                                                  |  727 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@3x.png               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis.png                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@3x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int8Array.h                                                          |   37 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@3x.png                                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbAssocProjectedEntityPersSubentIdHolder.h               |  108 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.h                                         |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.m                                         |  397 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExPrintConsole.h                                                   |   34 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.h                                                       |   33 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaceHolder.h                                                      |   73 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@3x.png                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTable.h                                                      |   69 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.m                                                    |  236 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/Contents.json                                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StringArray.h                                                        |   35 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.h                                                    |   27 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@2x.png                                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dStack.h                                                 |   39 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@2x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@2x.png                                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.h                                                               |  179 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2d.h                                                      |  476 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.h                                                            |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RText.h                                                              |  175 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNonEntityTraits.h                                               |  258 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/OdDgnLSExport.h                                                |   39 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTable.h                                                   |   95 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.m                                                            |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@3x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Contents.json                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents3d.h                                                     |  411 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ABExport.h                                               |   41 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjModule.h                              |   46 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsModel.h                                                         |  243 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.m                                            |  200 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve3d.h                                                 |  135 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.h                                            |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@3x.png                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/Contents.json                                            |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeoutVariables.h                                                 |   97 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Contents.json                                                                      |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPropertiesTable.h                               |   66 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.m                                                                         |   39 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@2x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.h                                                                         |   14 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@2x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.m                                                          |  227 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.m                                 |   51 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.h                                 |   14 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.h                                                          |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@2x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSetMgr.h                                                   |   68 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@3x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolvedSurface.h                                                  |  205 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.h                                                               |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/Contents.json                                                              |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@2x.png                                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement.h                                                       |   44 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockBegin.h                                                       |  194 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawable.h                                                      |  287 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceSource.h                              |   75 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManager.h                                        |   72 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraitsData.h                                            |  255 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/choose_nor_bg.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXline.h                                                            |  369 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.h                                                           |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRep.h                                              |  144 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.m                                                           |   92 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Contents.json                                   |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Contents.json                                               |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnSurface.h                                                |  257 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackgroundProperties.h                                          |   93 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SaveState.h                                                          |  122 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystem.h                                            |  572 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/Contents.json                                                              |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseHostAppServices.h                                              |  551 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafiler.h                                                     |  191 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@2x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.h                                                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.m                                                                       |  278 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Examine_play_19@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.h                                         |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.h                                          |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ErrorDefs.h                                                          |  482 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuasiVarDefs.h                                                       |  231 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.h                              |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeQuaternion.h                                                    |  184 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news.png                                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTimeStamp.h                                                        |  429 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.m                                          |  179 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/Contents.json                                                            |  116 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.m                                                               |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbPlotSettings.h                                |  180 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.m                              |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.m                                         |  362 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@2x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve2d.h                                            |  157 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@3x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.h                                                       |   46 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModule.h                                                           |  113 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@2x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.h                                                  |   12 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/loading_15@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnidirectionalList.h                                               |  545 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityOverrule.h                                                   |  549 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.m                                                  |  160 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess2.h                                                         |  162 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DrxError.h                                                           |  136 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/Contents.json                                                                           |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve2d.h                                              |  115 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryWithDefault.h                                            |   78 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAllocExport.h                                                      |   49 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionary.h                                                       |  337 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Contents.json                                               |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int32Array.h                                                         |   37 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.m                                             |  116 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@2x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBitMap.h                                                        |   84 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable.png    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.h                                             |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer.h                                                       |  139 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialCache.h                                                 |   99 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalBoundedSurface.h                                        |  239 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.h                                                               |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefObjectId.h                                                     |  100 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.m                                                               |  282 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc2d.h                                                     |  373 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLinearParameter.h                               |   57 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@2x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShWedge.h                                                |   63 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorArray.h                                                       |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsContainerNode.h                                                 |  708 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Contents.json                                                       |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjPtrArray.h                                                      |   35 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBody.h                                                             |  357 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudHostPE.h                                 |  209 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPrimitive.h                                            |   57 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@2x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@3x.png          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipper.h                                                  |   81 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubentId.h                                                         |  124 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Contents.json                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShell.h                                                         |   64 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfDatabase.h                                                      |   54 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/Root.plist                                                           |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbColor.h                                                            |  142 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.h                                                    |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/Contents.json                                                  |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/Ge.h                                                              |  323 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaApplication.h                                                  |   56 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.h                                                             |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.m                                                    |  149 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharConverter.h                                                    |  229 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/Contents.json                                                |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/Contents.json                                                             |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.m                                                           |  172 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_end_sound.caf                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.h                                     |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GsMarkerArray.h                                                      |   34 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.h                                                           |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.m                                     |  191 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.m                                                             |  522 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportGeometry.h                                              |  259 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.h                                             |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/Contents.json                                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.m                                       |  169 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Contents.json                                     |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@2x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@2x.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Contents.json                                         |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.m                                             |  403 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoData.h                                                          |  575 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.m                                                       |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.m                                         |  400 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPush.h                                                        |   32 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@3x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedData.h                                                       |   66 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.h                                         |   27 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.h                                                       |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.h                                       |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbErrorInvalidSysvar.h                                               |   97 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@2x.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDeviation.h                                                     |   95 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@3x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt3d.h                                                   |  198 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.h                                                                  |   16 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSectionGeometry.h                                               |  133 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExHostAppServices.h                                                |  125 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.m                                                                  |   41 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/Contents.json                                                   |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerDefs.h                                                        |  118 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/loading_6@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDictionary.h                                                       |  367 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAbstractClipBoundary.h                                          |  202 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@3x.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.m                                     |  459 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.h                                     |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Contents.json                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshEntity.h                                                    |  102 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportDraw.h                                                  |  100 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFileReference.h                                                 |   52 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@2x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerFilter.h                                                      |  120 
 IphoneBIMe/IphoneBIMe/IphoneBIMe.entitlements                                                                                     |    8 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Contents.json                                        |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManagerImpl.h                                    |   66 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@2x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCylinder.h                                                      |  273 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVisualStyleProperties.h                                         |   85 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@3x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVertex.h                                                           |   81 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeShell.h                                                         |  242 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseInclude.h                                                   |  461 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/diagnostics.h                                                        |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectId.h                                                         |  534 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayDefinition.h                                               |  184 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeGbl.h                                                           |  303 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.m                                           |  100 
 IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/contents.xcworkspacedata                                                      |    7 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShModelerHistoryImpl.h                                   |   84 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPublishOptions.h                                                |   74 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveBoundary.h                                                 |  195 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/Contents.json                                              |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatter.h                                                   |  103 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModeler.h                                              |   64 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/en.lproj/Root.strings                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveDefs.h                                                         |  300 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.h                                                                |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCompoundObjectId.h                                                 |  108 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoController.h                                                   |  107 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfSurfInt.h                                                   |  313 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.h                                           |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.m                                                                |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedTableData.h                                                  |  427 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@2x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntArray.h                                                      |   38 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryVar.h                                                    |  107 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/_CodeSignature/CodeResources                                 |  135 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSetPlotSettingsPE.h                                                |   61 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@3x.png |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidatorPE.h                                          |  104 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@3x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCommandContext.h                                                   |   91 
 IphoneBIMe/IphoneBIMe/Info.plist                                                                                                  |  127 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.h                                              |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaCommon.h                                                          |   89 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTable.h                                                        |   66 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.m                                              |  123 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemFileStreamImpl.h                                                  |  948 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/Contents.json                                                 |   22 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.m                                                                      |   35 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEmptyMetafileCache.h                                            |  131 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCodeDelegate.h                                                          |   30 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.h                                                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.h                                       |   30 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.m                                       |   78 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.h                                               |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.m                                      |  173 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/lame                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@3x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@2x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@3x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnUnderlayHost.h                                                  |   45 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve3d.h                                                   |  623 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.h                                      |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntity.h                                                           | 1287 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.m                                                    |  200 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.m                                               |  340 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.h                                                    |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.h                                                                |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraits.h                                                |  236 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wc.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Contents.json                                 |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@2x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.m                                                             |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.m                                                           |   13 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.h                                                                           |   19 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.m                                                                |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@2x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShLoft.h                                                 |   65 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.h                                                             |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSComponent.h                                                |   73 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTable.h                                                    |   99 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Contents.json                                 |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@3x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThumbnailImage.h                                                     |  121 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.h                                       |   60 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.m                                       |  161 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSectionSymbol.h                                        |  204 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdge.h                                                          |  115 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimData.h                                                          |  429 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCone.h                                                          |  301 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@3x.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSortentsTable.h                                                    |  241 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectOverrule.h                                                   |  132 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.h                                                           |   32 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt16Array.h                                                        |   37 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcDimension.h                                                     |  244 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2d.h                                                        |   32 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.m                                                            |   71 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.h                                                            |   46 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AbstractViewPE.h                                                     |  563 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.m                                                  |  222 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbStubPtrArray.h                                                     |   40 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@2x.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArc.h                                                              |  574 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@3x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@3x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@3x.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGroup.h                                                            |  454 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdError.h                                                            |   88 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.m                                                  |  256 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@3x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.h                                                  |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.m                                                              |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@2x.png                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.m                                                    |  272 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xs_max_portrait.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.h                                                    |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Contents.json                                                                       |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlane.h                                                         |  193 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharMapper.h                                                       |  311 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/delete_task@2x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEvents.h                                                        |   80 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewTabRec.h                              |  109 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFieldValue.h                                                       |   84 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.h                                                              |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Examine_play_1@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSphere.h                                                        |  256 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Examine_play_6@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Objects.h                                                            |   56 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.h                                                                |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/loading_11@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterWrappers.h                                                |  516 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.h                                                  |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.m                                                                |  142 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3dArray.h                                                  |   40 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Contents.json                                        |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMesh.h                                                      |  393 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersist.h                                                       |   71 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@3x.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransientManager.h                                              |  174 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSafeTransaction.h                                                  |  116 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAudit.h                                                            |   94 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModule.h                                                    |  196 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/Contents.json                                     |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.m                                                          |  225 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarInfo.h                                                         |   83 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPoint.h                                                            |  293 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbShape.h                                                            |  280 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocations.h                                         |   59 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Examine_play_12@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientationDef.h                                |   62 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.h                                                          |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Contents.json                                  |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotData.h                                                 |  199 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandContext.h                                                |   71 
 IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.xib                                                                         |   62 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolveOptions.h                                                   |  153 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ps/PlotStyles.h                                                      |  543 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.h                                              |   30 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.m                                                   |  379 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDefEx.h                                  |  252 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.m                                              |   28 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.m                                                                      |   50 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockReferenceNode.h                                            |  488 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BaseObjectPtr.h                                                      |   75 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/Contents.json                                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt8Array.h                                                         |   38 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.h                                                   |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.m                                                |   75 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Contents.json                                                                |    6 
 IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.h                                                                      |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmNamedDbObjectReference.h                                        |   87 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IdArrays.h                                                           |   61 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/Contents.json                                      |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@2x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolReference.h                                          |  277 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParameter.h                                     |  104 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmObjectId.h                                                      |   58 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@3x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.h                                                |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistory.h                                              |   95 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/Contents.json                                                |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabase.h                                                         | 2238 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDxfIO.h                                                            |  188 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/Contents.json                                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.h                                              |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.h                                                             |   17 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.m                                |  400 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleDefs.h                                                       |   44 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.m                                                             |   39 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.m                                              |  121 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxProtocolReactor.h                                                  |  281 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.h                                |   48 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Contents.json                                    |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.h                                            |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.m                                                  |   95 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepVertexTraverser.h                                           |   87 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@2x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.m                                            |  891 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSphere.h                                               |   59 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dControl.h                                                 |   85 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorBase.h                                                        | 1611 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.h                                                  |   17 
 IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist                                         |    8 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/TD_3DSolidHistoryDef.h                                     |   40 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceIterator.h                                             |  128 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.h                                                      |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutManager.h                                                    |  279 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xr_portrait.png                                              |    0 
 IphoneBIMe/Podfile                                                                                                                |   24 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt3d.h                                                    |   65 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.m                                                      |  273 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPointParameter.h                                |   64 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.m                                                          |   71 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/loading_5@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.h                                           |   13 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.h                                                   |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown.png                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewImpl.h                                                      |  880 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.h                                                          |   25 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Contents.json                                                                         |    6 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleStorage.h                                                         |  174 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/Contents.json                                                 |   22 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@2x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.m                                                   |  173 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@3x.png           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Contents.json                                                                         |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2dPtrArray.h                                               |   47 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDate.h                                                             |   91 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.h                                             |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.m                                           |  281 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmTransparencyArray.h                                                |   36 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.m                                             |   44 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/Contents.json                                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometry.h                                                      | 1286 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@2x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSpunSurf.h                                                      |   91 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxEvent.h                                                            |  628 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMapping.h                                                      |   77 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@2x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@3x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfExportService.h                                                   |   63 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.m                                                 |   98 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time.png                                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@2x.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbConstraintsInterfacePE.h                             |   43 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.m                                    |   34 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.h                                                 |   51 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@2x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.h                                    |   25 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.h                                              |   27 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Contents.json                                           |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.m                                              |  369 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityWithGrData.h                                                 |   56 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@3x.png                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/SiVolume.h                                                        |  241 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@2x.png                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoDisablerAuto.h                                                 |   63 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Contents.json                                                                         |    6 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow.png                                                                |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h                              |   28 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@3x.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEntity.h                                                        |  153 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.m                                                               |   23 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.h                                                               |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfVariant.h                                                       |  118 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundedPlane.h                                                  |  117 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time.png                                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIterator.h                                                   |  135 
 IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.m                                                   |  104 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.h                                             |   20 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVectPerformance.h                                               |   94 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTableRecord.h                                          |  459 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Contents.json                                              |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@2x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.mm                                             |  610 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.m                                         |  173 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDefs.h                                                             |   46 
 IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.h                                                   |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPath.h                                                             |   62 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.m                                             |  195 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayHost.h                                                     |  177 
 IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.h                                         |   29 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/loading_16@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@3x.png                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHandle.h                                                           |  201 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity3d.h                                                      |  173 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt2d.h                                               |  353 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.h                                       |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.m                                       |  129 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@3x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/examineAdd.plist                                                                                            |  146 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaDefs.h                                                            |  521 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/Contents.json                                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalGraph.h                                                        | 1099 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h                                            |   71 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/Contents.json                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m                                            |  165 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/Contents.json                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDef.h                                    |  236 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2d.h                                                       |  528 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@2x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@2x.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@3x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTransactionReactor.h                                               |  177 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@3x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line备份@2x.png                                                             |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.h                                         |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/Contents.json                                                   |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTextStyle.h                                                     |  558 
 IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.m                                                                            |   70 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.m                                                |  615 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DoubleArray.h                                                        |   39 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.h                                                |   99 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/Contents.json                                                   |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.m                                         |  103 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewPropsDef.h                                                  |   65 
 IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.h                                                                            |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@3x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpline.h                                                           |  587 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/Contents.json                                                              |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.h                                         |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2dArray.h                                                |   42 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@3x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.m                                         |  668 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMInsertBlock.h                                                     |  237 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObject.h                                                        |  369 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBMPDevice.h                                                     |   33 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@3x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.h                                  |   14 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBrep.h                                                 |   59 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.m                                  |   84 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariant.h                                                          | 1157 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/Contents.json                                         |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAppEntityGrips.h                                                   |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeader.h                                                          | 1493 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTableRecord.h                                                 |  571 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@2x.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtAccum.h                                                      |  115 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorNode.h                                                  |  107 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalSurface.h                                               |  211 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination.png                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@3x.png                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Contents.json                                                 |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorConnector.h                                             |   64 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.m                                                               |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked.png                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/Contents.json                                         |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoDataPE.h                                                        |  129 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepStandard.h                                      |   87 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.h                                                               |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.m                                       |   62 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.m                                           |  363 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/Contents.json                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@2x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.h                                       |   15 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@3x.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUtilAds.h                                                          |   62 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMotionPath.h                                                       |   74 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformStreamer.h                                                 |  385 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHyperlink.h                                                        |  363 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDispatchImpl.h                                                     |  336 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Contents.json                                             |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.h                                                         |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_1024@1x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSMisc.h                                                     |   51 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.h                                           |   16 
 IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.m                                                         |   97 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTable.h                                                    |  203 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@2x.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/ExportOptions.plist                                |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDefs.h                                                          |  308 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPersSubentManager.h                                                |   68 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.m                                                |  262 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@3x.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@2x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/Contents.json                                                     |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@2x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRotationParameter.h                             |   65 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@2x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCamera.h                                                           |   84 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.mm                                                   |  767 
 IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.m                                                                              | 2175 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.h                                                |   18 
 IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.h                                                                              |  368 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents2d.h                                                     |  315 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/Packaging.log                                      | 1914 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextManager.h                                             |   97 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPatternManager.h                                                |  152 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistoryNode.h                                          |   75 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSubset.h                                                        |   95 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@2x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dFilter.h                                                  |   86 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystemPE.h                                          |  178 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.m                                                  |   24 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Contents.json                                  |   21 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.h                                                  |   17 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@3x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Contents.json                                          |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@2x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTrueTypeFontBase.h                                                 |   55 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockEnd.h                                                         |  146 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/loading_4@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotationScale.h                                                  |  206 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Contents.json                                       |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObject.h                                                           | 1749 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png                                    |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/Contents.json                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess.h                                                          |  228 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/loading_2@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExtAccum.h                                                      |  272 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSXData.h                                                    |   48 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Contents.json                                         |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.m                                                               |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveScene.h                                                        |  141 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEmbranchment.h                                          |   59 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionablePE.h                                                    |   47 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.h                                                               |   32 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/Contents.json                                             |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSDefinition.h                                               |  208 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaSTL.h                                                             |  830 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTol.h                                                           |  109 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.m                                                         |   93 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.m                                                               |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetSurface.h                                                 |  167 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve3d.h                                              |  122 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentColor.h                                          |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.h                                        |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EditorImpl.h                                                         |  215 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.h                                                 |   20 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeInterval.h                                                      |  397 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.h                                                               |   70 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.m                                        |   77 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.h                                                         |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LoadReasons.h                                                        |   52 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.m                                                 |  205 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64Array.h                                                         |   37 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurvePE.h                                                          |  188 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@3x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@2x.png                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/adinit.dat                                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Examine_play_5@3x.png                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3dPtrArray.h                                               |   48 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSets.h                                                  |   51 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_4.7@2x.png                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.h                                                                   |   17 
 IphoneBIMe/IphoneBIMe/issueAdd.plist                                                                                              |   78 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/Contents.json                                                     |   21 
 IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.m                                                                   |   88 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbField.h                                                            |  519 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.h                                                   |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.m                                                   |  191 
 IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.m                                                                      |   12 
 IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.h                                                                      |   15 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbViewport.h                                    |  180 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Contents.json                                           |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@2x.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLibraryInfo.h                                                      |   74 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Contents.json                                          |   22 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/scan_img@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/summinfo.h                                                           |  242 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.m                                                          |   64 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@3x.png                               |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.h                                   |   22 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_qq.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraits.h                                                   |  898 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.m                                   |  283 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2dArray.h                                                  |   39 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.h                                                          |   29 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@2x.png              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set.png                                                                |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.m                                  |  326 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShExtrusion.h                                            |   75 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.m                                        |  131 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project.png                                                    |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.h                                                |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@3x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceViewSelSet.h                          |   63 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepProjectionDef.h                                 |   63 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc3d.h                                                    |  429 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.m                                                            |   61 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAcisIO.h                                                           |   41 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataTable.h                                                        |  258 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/Contents.json                                                    |   21 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@3x.png                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.h                                  |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc.h                                                      |  114 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@3x.png                                                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@3x.png                                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDynamicModule.h                                                    |  698 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiExtents.h                                                       |  157 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@2x.png                                                                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdRound.h                                                            |   80 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg.png                                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.h                                                   |   17 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc3d.h                                                     |  408 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check.png                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@2x.png                                               |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow.png                                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackground.h                                                    |   97 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCustomProperty.h                                                |   91 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve3d.h                                            |  148 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2d.h                                                      |  425 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@3x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.h                                                            |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@2x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@3x.png                                          |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.h                                        |   14 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStroke.h                                                   |  230 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.h                                                    |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@2x.png                                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.m                                                    |  256 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.m                                                   |  229 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTableRecord.h                                                  |  198 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.m                                                          |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.m                                        |  399 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.h                                        |   19 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@3x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.h                                   |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@2x.png                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.h                                                          |   69 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@3x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@3x.png                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimAssoc.h                                                         |  544 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.m                                   |  170 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttribute.h                                                        |  172 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.h                                                       |   35 
 IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.h                                                                          |   13 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Contents.json                                            |   22 
 IphoneBIMe/IphoneBIMe/loading_push.json                                                                                           |    1 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@3x.png                                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.m                                          |  164 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.m                                                       |   13 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSecurity.h                                                         |  180 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.h                                                      |   23 
 IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.m                                                                          |   35 
 IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.h                                          |   17 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.m                                                      |   51 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDatabase.h                                                      |   81 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.m                                                     |  125 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUserIO.h                                                           |  117 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbManagerSubentData.h                                      |  248 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.m                                                        |  364 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Contents.json                                    |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForAbstractViewTabRec.h                        |  131 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.h                                     |   22 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Editor.h                                                             |  893 
 IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.h                                                        |   37 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTorus.h                                                         |  333 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDwgIO.h                                                            |  188 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFiler.h                                                         |   89 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@2x.png                     |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextInterface.h                                           |  107 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.m                                                |  159 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@2x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimensionLarge.h                                             |  171 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.h                                                |   18 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FdField.h                                                            |  442 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTable.h                                                      |  294 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfExport.h                                                        |   43 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbText.h                                                             |  431 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.m                                                   |  446 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSysRegistry.h                                                      |   36 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBox.h                                                  |   63 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBreakData.h                                                        |  110 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired.png                                                            |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/Contents.json                                                 |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.h                                             |  133 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Shape                                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.m                                             |  439 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h                                      |  147 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip.png                                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGraph.h                                                            |  672 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFace.h                                                          |  153 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTableRecord.h                                                |   81 
 IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@2x.png                                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3dArray.h                                                 |   40 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrExport.h                                                        |   48 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/Headers/lame.h               | 1324 
 IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.h                                                   |   13 
 IphoneBIMe/IphoneBIMe.xcodeproj/project.pbxproj                                                                                   | 5237 +
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Examine_play_10@3x.png                        |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeDevice.h                                           |  440 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableStyle.h                                                       | 1113 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/Contents.json                                                        |   23 
 IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m                                      |  615 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/loading_3@2x.png                                                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@3x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect.png                                                        |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@2x.png                                      |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformSettings.h                                                 |  875 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select.png                                              |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve2d.h                                                |  170 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@3x.png                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchObject.h                                         |  134 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiClipBoundary.h                                                  |   61 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection.png                                  |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@2x.png                         |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png                             |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@2x.png                                                       |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSection.h                                                          |  354 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.cpp                                                             |  651 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/Contents.json                                    |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/include.dsp                                                  | 1281 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@3x.png                                                     |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@3x.png                              |    0 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@2x.png                 |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeImpInterval.h                                                   |   31 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/Contents.json                                               |   23 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/Contents.json                                       |   23 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPolyline.h                                                      |  155 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFcf.h                                                              |  434 
 IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.m                                     |  697 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExtrudedSurface.h                                                  |  161 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.m                                                    |  104 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShellFaceTraverser.h                                            |   90 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@3x.png                                           |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSegmentChain2d.h                                                |  114 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.h                                                    |   18 
 IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png                                   |    0 
 IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.h                                                     |   17 
 2,800 files changed, 312,293 insertions(+), 0 deletions(-)

diff --git a/IphoneBIMe/IphoneBIMe.xcodeproj/project.pbxproj b/IphoneBIMe/IphoneBIMe.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..318ab1b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe.xcodeproj/project.pbxproj
@@ -0,0 +1,5237 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 48;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		2C01A388211182F600D75B3F /* PBDocBaseController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C01A387211182F600D75B3F /* PBDocBaseController.mm */; };
+		2C01A38B211189E400D75B3F /* PBDocListController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C01A38A211189E400D75B3F /* PBDocListController.m */; };
+		2C01A38E2111AB6300D75B3F /* PBDocPrivilegeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C01A38D2111AB6300D75B3F /* PBDocPrivilegeModel.m */; };
+		2C01A3912111AC8100D75B3F /* PBPreviewDocViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C01A3902111AC8100D75B3F /* PBPreviewDocViewController.m */; };
+		2C023F0C2109D37F00E92E89 /* PBMoreTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C023F0B2109D37F00E92E89 /* PBMoreTabViewController.m */; };
+		2C027FD62106D9A600A2E663 /* PBLoadModelDisplayController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C027FD52106D9A600A2E663 /* PBLoadModelDisplayController.m */; };
+		2C027FDC2106DB0100A2E663 /* PBDrawingsShowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C027FDB2106DB0100A2E663 /* PBDrawingsShowController.m */; };
+		2C027FDF2106DB6000A2E663 /* PBViewPointDetailsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C027FDE2106DB6000A2E663 /* PBViewPointDetailsController.m */; };
+		2C03ED782181C01200846554 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C03ED772181C01200846554 /* libsqlite3.tbd */; };
+		2C03ED7A2181C01E00846554 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C03ED792181C01D00846554 /* CoreGraphics.framework */; };
+		2C05747F22169EF900C7A2D5 /* PBAddRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C05747E22169EF900C7A2D5 /* PBAddRecordViewController.m */; };
+		2C06890322769D790026B30F /* JHAES.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C06890222769D790026B30F /* JHAES.m */; };
+		2C07FAC52133E720005C67D6 /* images.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2C07FAC22133E71F005C67D6 /* images.bundle */; };
+		2C07FAC62133E720005C67D6 /* YJProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C07FAC42133E71F005C67D6 /* YJProgressHUD.m */; };
+		2C0F1128250B807900A510DE /* PBArtifactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0F1127250B807900A510DE /* PBArtifactsViewController.m */; };
+		2C0F1134250F1E9E00A510DE /* PBRetrieveView1.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0F1133250F1E9E00A510DE /* PBRetrieveView1.m */; };
+		2C0F11372510BE2A00A510DE /* PBScreeningCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0F11362510BE2A00A510DE /* PBScreeningCell.m */; };
+		2C0F113A2511EBC800A510DE /* PBAddExamineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0F11392511EBC800A510DE /* PBAddExamineViewController.m */; };
+		2C0F113C2514553E00A510DE /* examineAdd1.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C0F113B2514553E00A510DE /* examineAdd1.plist */; };
+		2C0F113F2518A7E300A510DE /* PBArtifactsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0F113E2518A7E300A510DE /* PBArtifactsModel.m */; };
+		2C0F11422519FD9600A510DE /* PBArtifactsInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0F11412519FD9600A510DE /* PBArtifactsInfoModel.m */; };
+		2C0F1145251C95C500A510DE /* PBChooseArtifactsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C0F1144251C95C500A510DE /* PBChooseArtifactsCell.m */; };
+		2C1267C2210AC3FF00FC7DFE /* PBAlertController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1267C1210AC3FF00FC7DFE /* PBAlertController.m */; };
+		2C1267C5210AD0A200FC7DFE /* PBMoreFunctionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1267C4210AD0A200FC7DFE /* PBMoreFunctionView.m */; };
+		2C144D2021ABC6550011557A /* PBExamineBaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C144D1F21ABC6550011557A /* PBExamineBaseController.m */; };
+		2C144D2821ABCF2E0011557A /* PBExamineListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C144D2721ABCF2E0011557A /* PBExamineListTableViewCell.m */; };
+		2C144D2E21ABF4800011557A /* PBExamineListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C144D2D21ABF4800011557A /* PBExamineListModel.m */; };
+		2C15512C22268D9900CBFF00 /* WKAvoidKeyboardViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C15512B22268D9900CBFF00 /* WKAvoidKeyboardViewController.m */; };
+		2C1551352227CF2B00CBFF00 /* PBApplyInspectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1551342227CF2B00CBFF00 /* PBApplyInspectionViewController.m */; };
+		2C16401528C39A7A001DFF31 /* PBMaterialPlanModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C16401428C39A7A001DFF31 /* PBMaterialPlanModel.m */; };
+		2C16401828C39A93001DFF31 /* PBSiteMaterialModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C16401728C39A93001DFF31 /* PBSiteMaterialModel.m */; };
+		2C165639212BAE1A007CA9FD /* issueAdd.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C165638212BAE1A007CA9FD /* issueAdd.plist */; };
+		2C16563C212C1D75007CA9FD /* PBPersonModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C16563B212C1D75007CA9FD /* PBPersonModel.m */; };
+		2C1784C6246BC6BF00EE56D8 /* PBPointAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1784C5246BC6BF00EE56D8 /* PBPointAnnotation.m */; };
+		2C197D3421786717008B8DDA /* DwgViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C197D3321786717008B8DDA /* DwgViewController.storyboard */; };
+		2C1AC3EF211ABB0700D3C412 /* PBDropdownMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1AC3EE211ABB0700D3C412 /* PBDropdownMenu.m */; };
+		2C1AC3F2211AF87600D3C412 /* PBIssueListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1AC3F1211AF87500D3C412 /* PBIssueListTableViewCell.m */; };
+		2C1AC3F5211AF9CB00D3C412 /* PBIssueListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1AC3F4211AF9CB00D3C412 /* PBIssueListModel.m */; };
+		2C1AC3F8211AFAE900D3C412 /* PBIssueNavModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1AC3F7211AFAE900D3C412 /* PBIssueNavModel.m */; };
+		2C1F54F02105727100079C9E /* PBModelCategoryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F54EF2105727100079C9E /* PBModelCategoryViewController.m */; };
+		2C1F54F321059EBA00079C9E /* PBViewsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F54F221059EBA00079C9E /* PBViewsModel.m */; };
+		2C1F54F62105A11F00079C9E /* PBDrawingsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F54F52105A11F00079C9E /* PBDrawingsModel.m */; };
+		2C1F54F92105A1EF00079C9E /* PBViewPointModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F54F82105A1EF00079C9E /* PBViewPointModel.m */; };
+		2C1F54FC2105B95D00079C9E /* PBTextTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F54FB2105B95D00079C9E /* PBTextTableViewCell.m */; };
+		2C1F54FF2105B96700079C9E /* PBImageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F54FE2105B96700079C9E /* PBImageTableViewCell.m */; };
+		2C20C53C2123D4CF0006469C /* PBChooseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20C53B2123D4CF0006469C /* PBChooseTableViewCell.m */; };
+		2C20C53F212413340006469C /* PBChooseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20C53E212413340006469C /* PBChooseView.m */; };
+		2C20E9AE20FC40C100A18732 /* PBLoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9AD20FC40C100A18732 /* PBLoginViewController.m */; };
+		2C20E9BD20FC49B600A18732 /* NSString+PBCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9B120FC49B600A18732 /* NSString+PBCategory.m */; };
+		2C20E9BE20FC49B600A18732 /* UIBarButtonItem+PBCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9B420FC49B600A18732 /* UIBarButtonItem+PBCategory.m */; };
+		2C20E9BF20FC49B600A18732 /* UIButton+ZJFAdditon.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9B620FC49B600A18732 /* UIButton+ZJFAdditon.m */; };
+		2C20E9C020FC49B600A18732 /* UIColor+ZJFAdditon.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9B820FC49B600A18732 /* UIColor+ZJFAdditon.m */; };
+		2C20E9C120FC49B600A18732 /* UILabel+ZJFAdditon.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9BA20FC49B600A18732 /* UILabel+ZJFAdditon.m */; };
+		2C20E9C220FC49B600A18732 /* UIView+PBCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9BC20FC49B600A18732 /* UIView+PBCategory.m */; };
+		2C20E9C720FC848900A18732 /* PBProjectModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C20E9C620FC848900A18732 /* PBProjectModel.m */; };
+		2C242DC4213CDF9F00DB4C04 /* PBAddCommentsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C242DC3213CDF9F00DB4C04 /* PBAddCommentsController.m */; };
+		2C26B7CA25ECDC0B00AAE3D2 /* PBBrowseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C26B7C925ECDC0B00AAE3D2 /* PBBrowseViewController.m */; };
+		2C2A51922126A57C004E1BAF /* PBEditPersonView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A51912126A57C004E1BAF /* PBEditPersonView.m */; };
+		2C2A51952126B2D9004E1BAF /* PBEditPersonCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A51942126B2D9004E1BAF /* PBEditPersonCollectionViewCell.m */; };
+		2C2A51982126CA63004E1BAF /* PBRoleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A51972126CA63004E1BAF /* PBRoleTableViewCell.m */; };
+		2C2A6EF620F88F1000218D5C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A6EF520F88F1000218D5C /* AppDelegate.m */; };
+		2C2A6EFC20F88F1000218D5C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C2A6EFA20F88F1000218D5C /* Main.storyboard */; };
+		2C2A6EFE20F88F1000218D5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2C2A6EFD20F88F1000218D5C /* Assets.xcassets */; };
+		2C2A6F0120F88F1000218D5C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2C2A6EFF20F88F1000218D5C /* LaunchScreen.storyboard */; };
+		2C2A6F0420F88F1000218D5C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A6F0320F88F1000218D5C /* main.m */; };
+		2C2A6F1220F894DA00218D5C /* PBProjectListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A6F1120F894DA00218D5C /* PBProjectListViewController.m */; };
+		2C2A6F1520F89E3F00218D5C /* PBProjectTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A6F1420F89E3F00218D5C /* PBProjectTableViewCell.m */; };
+		2C2A6F1A20F8A6B100218D5C /* PBNetworkTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2A6F1920F8A6B100218D5C /* PBNetworkTools.m */; };
+		2C2BAFE621882A5200701C56 /* PBDocShareView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2BAFE521882A5200701C56 /* PBDocShareView.m */; };
+		2C2C1203213E3A650031A71B /* PBCommentsFooterView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2C1202213E3A650031A71B /* PBCommentsFooterView.m */; };
+		2C2CB6652125632400E35BB5 /* PBPersonTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2CB6642125632400E35BB5 /* PBPersonTableViewCell.m */; };
+		2C2CB6682125735700E35BB5 /* PBPersonCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C2CB6672125735700E35BB5 /* PBPersonCollectionViewCell.m */; };
+		2C2E1D0521C3841D00310E81 /* STAR_bim365_com_cn.cer in Resources */ = {isa = PBXBuildFile; fileRef = 2C2E1D0321C3841D00310E81 /* STAR_bim365_com_cn.cer */; };
+		2C2E1D0621C3841D00310E81 /* STAR_probim_cn.cer in Resources */ = {isa = PBXBuildFile; fileRef = 2C2E1D0421C3841D00310E81 /* STAR_probim_cn.cer */; };
+		2C2F24C621F9B53B00549388 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C2F24C521F9B53B00549388 /* Photos.framework */; };
+		2C301BBD21E6EB52006A7F0A /* PBIssueImageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C301BBC21E6EB52006A7F0A /* PBIssueImageTableViewCell.m */; };
+		2C301BC321E741E5006A7F0A /* PBIssueHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C301BC221E741E5006A7F0A /* PBIssueHeaderView.m */; };
+		2C301BC621E74D56006A7F0A /* PBIssueModelListController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C301BC521E74D56006A7F0A /* PBIssueModelListController.m */; };
+		2C301BC921E8341B006A7F0A /* PBPositionTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C301BC821E8341B006A7F0A /* PBPositionTableViewCell.m */; };
+		2C301BCC21E8405F006A7F0A /* PBIssueViewPointDetailsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C301BCB21E8405F006A7F0A /* PBIssueViewPointDetailsController.m */; };
+		2C316D182202CBBC009C90FD /* PBRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C316D172202CBBC009C90FD /* PBRecordViewController.m */; };
+		2C316D1B2202E11C009C90FD /* PBRecordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C316D1A2202E11C009C90FD /* PBRecordModel.m */; };
+		2C316D1E2202E73A009C90FD /* PBRecordTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C316D1D2202E73A009C90FD /* PBRecordTableViewCell.m */; };
+		2C35A045212EBFB300C8E51B /* PBCommentsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C35A044212EBFB300C8E51B /* PBCommentsController.m */; };
+		2C381596213F84CA00763B0B /* PBAgreementViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C381595213F84CA00763B0B /* PBAgreementViewController.m */; };
+		2C391301212FD8CE0055665C /* PBIssueDetailModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C391300212FD8CE0055665C /* PBIssueDetailModel.m */; };
+		2C3DC804211C16AC00DC1CB6 /* PBNetworkModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3DC803211C16AC00DC1CB6 /* PBNetworkModel.m */; };
+		2C3E76B2214A4F15005075AA /* PBImageShowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3E76B1214A4F15005075AA /* PBImageShowViewController.m */; };
+		2C3EB3B52500E3A1005BF2DF /* PBVideoListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3EB3B42500E3A0005BF2DF /* PBVideoListTableViewCell.m */; };
+		2C3EB3B825063118005BF2DF /* PBScreeningView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C3EB3B725063117005BF2DF /* PBScreeningView.m */; };
+		2C4472162175C83E002A9110 /* txt.shx in Resources */ = {isa = PBXBuildFile; fileRef = 2C4472122175C83D002A9110 /* txt.shx */; };
+		2C4472172175C83E002A9110 /* marker.zip in Resources */ = {isa = PBXBuildFile; fileRef = 2C4472132175C83D002A9110 /* marker.zip */; };
+		2C4472182175C83E002A9110 /* hztxt.shx in Resources */ = {isa = PBXBuildFile; fileRef = 2C4472142175C83D002A9110 /* hztxt.shx */; };
+		2C4472192175C83E002A9110 /* adinit.dat in Resources */ = {isa = PBXBuildFile; fileRef = 2C4472152175C83D002A9110 /* adinit.dat */; };
+		2C4475A32175C8F0002A9110 /* include.dsp in Resources */ = {isa = PBXBuildFile; fileRef = 2C44727D2175C8A4002A9110 /* include.dsp */; };
+		2C4475B22175C924002A9110 /* stdafx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C4475AE2175C923002A9110 /* stdafx.cpp */; };
+		2C4475B32175C924002A9110 /* DwgViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2C4475AF2175C923002A9110 /* DwgViewController.mm */; };
+		2C460019214BB4FE00D4202C /* PBMessageController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C460018214BB4FE00D4202C /* PBMessageController.m */; };
+		2C481287214F79E100153B80 /* PBUnReadTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C481286214F79E100153B80 /* PBUnReadTableViewCell.m */; };
+		2C48128A214F90E100153B80 /* PBUnReadMesModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C481289214F90E100153B80 /* PBUnReadMesModel.m */; };
+		2C4F590C2138E71900690DD3 /* SDBrowserImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C4F59062138E71900690DD3 /* SDBrowserImageView.m */; };
+		2C4F590D2138E71900690DD3 /* SDPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C4F59082138E71900690DD3 /* SDPhotoBrowser.m */; };
+		2C4F590E2138E71900690DD3 /* SDWaitingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C4F590B2138E71900690DD3 /* SDWaitingView.m */; };
+		2C4F59112139190100690DD3 /* PBCommentsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C4F59102139190100690DD3 /* PBCommentsModel.m */; };
+		2C4FED43211453B000D5306A /* PBDocSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C4FED42211453B000D5306A /* PBDocSearchController.m */; };
+		2C5067F620FD935100D5F47A /* PBMineView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5067F520FD935100D5F47A /* PBMineView.m */; };
+		2C5067FA20FDB30600D5F47A /* MenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5067F920FDB30600D5F47A /* MenuView.m */; };
+		2C511FA1212A61E1009A3A0E /* PBDateTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C511FA0212A61E1009A3A0E /* PBDateTableViewCell.m */; };
+		2C511FA4212A72AD009A3A0E /* PBEditDateView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C511FA3212A72AD009A3A0E /* PBEditDateView.m */; };
+		2C511FCC212AAE8B009A3A0E /* NSDate+PBCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C511FCB212AAE8B009A3A0E /* NSDate+PBCategory.m */; };
+		2C52CEF3212280C90008317C /* PBTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C52CEF2212280C90008317C /* PBTableHeaderView.m */; };
+		2C52CEF62122A8580008317C /* PBInputTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C52CEF52122A8580008317C /* PBInputTableViewCell.m */; };
+		2C52CEF92122AD390008317C /* PBIssueAddModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C52CEF82122AD390008317C /* PBIssueAddModel.m */; };
+		2C52CEFC2122B1BD0008317C /* PBEditTextController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C52CEFB2122B1BD0008317C /* PBEditTextController.m */; };
+		2C533A3B21E84598009E6D08 /* PBIssueDrawingsShowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C533A3A21E84598009E6D08 /* PBIssueDrawingsShowController.m */; };
+		2C533A4121E8481D009E6D08 /* PBIssuePositionTypeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C533A4021E8481D009E6D08 /* PBIssuePositionTypeController.m */; };
+		2C54495D211037F3005D6F63 /* PBDocModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C54495C211037F3005D6F63 /* PBDocModel.m */; };
+		2C54496021103D81005D6F63 /* PBDocListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C54495F21103D81005D6F63 /* PBDocListTableViewCell.m */; };
+		2C55AE89212D65470042290F /* PBImageCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C55AE88212D65470042290F /* PBImageCollectionViewCell.m */; };
+		2C5AA47A24FDFC3A00981543 /* PBBlankTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5AA47924FDFC3A00981543 /* PBBlankTableViewCell.m */; };
+		2C5DCED52154F16600A68B28 /* PBChangePWController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5DCED42154F16600A68B28 /* PBChangePWController.m */; };
+		2C5DCEDE2154FDBE00A68B28 /* GTMBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5DCEDA2154FDBE00A68B28 /* GTMBase64.m */; };
+		2C5DCEDF2154FDBE00A68B28 /* PGGCryptoDES.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5DCEDD2154FDBE00A68B28 /* PGGCryptoDES.m */; };
+		2C5F1AF82121584300157314 /* PBIssueBaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5F1AF72121584300157314 /* PBIssueBaseController.m */; };
+		2C5F1B01212166B300157314 /* PBIssueSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C5F1B00212166B300157314 /* PBIssueSearchController.m */; };
+		2C65AEC624EB78C7000347D7 /* PBCheckTaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AEC524EB78C7000347D7 /* PBCheckTaskViewController.m */; };
+		2C65AEC924EBA0D3000347D7 /* PBListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AEC824EBA0D3000347D7 /* PBListTableViewCell.m */; };
+		2C65AECC24EBC882000347D7 /* PBCheckViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AECB24EBC882000347D7 /* PBCheckViewController.m */; };
+		2C65AECE24EBD00A000347D7 /* examineAdd4.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C65AECD24EBD00A000347D7 /* examineAdd4.plist */; };
+		2C65AED124ED001B000347D7 /* PBExamineDetailController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AED024ED001B000347D7 /* PBExamineDetailController.m */; };
+		2C65AED624ED2887000347D7 /* PBCheckTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AED524ED2887000347D7 /* PBCheckTableViewCell.m */; };
+		2C65AED924EE6FA0000347D7 /* PBRoleModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AED824EE6F9F000347D7 /* PBRoleModel.m */; };
+		2C65AEDC24F39BAB000347D7 /* PBExamineListToCheckCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AEDB24F39BAB000347D7 /* PBExamineListToCheckCell.m */; };
+		2C65AEDF24F4FD92000347D7 /* PBVideoCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AEDE24F4FD92000347D7 /* PBVideoCollectionViewCell.m */; };
+		2C65AEE224F5F941000347D7 /* PBVideoPlayViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C65AEE124F5F941000347D7 /* PBVideoPlayViewController.m */; };
+		2C66CBED216C811B0039C19A /* PBProjectPower.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C66CBEC216C811B0039C19A /* PBProjectPower.m */; };
+		2C69964A2435C7820015EE17 /* PBStructureViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C6996492435C7820015EE17 /* PBStructureViewController.m */; };
+		2C69964D2435DCCB0015EE17 /* PBStructureTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C69964C2435DCCB0015EE17 /* PBStructureTableViewCell.m */; };
+		2C6BF928211972370030F318 /* PBPromptView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C6BF927211972370030F318 /* PBPromptView.m */; };
+		2C77D96B21AD334600AEB02C /* PBResultModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C77D96A21AD334600AEB02C /* PBResultModel.m */; };
+		2C77F7862182BD9B002BF912 /* PBShareView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C77F7852182BD9B002BF912 /* PBShareView.m */; };
+		2C77F7882182ECCA002BF912 /* PBShareBtn.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2C77F7872182ECCA002BF912 /* PBShareBtn.xib */; };
+		2C77F78B2182ED06002BF912 /* PBShareBtn.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C77F78A2182ED06002BF912 /* PBShareBtn.m */; };
+		2C77F78E21830830002BF912 /* PBShareCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C77F78D21830830002BF912 /* PBShareCell.m */; };
+		2C85434D21AE894100F570A0 /* PBExamineSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C85434C21AE894100F570A0 /* PBExamineSearchController.m */; };
+		2C85435021AE8A1300F570A0 /* PBAddExamineController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C85434F21AE8A1300F570A0 /* PBAddExamineController.m */; };
+		2C8DD16E247BAB6A009B6C26 /* PBProjectInfoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DD16D247BAB6A009B6C26 /* PBProjectInfoView.m */; };
+		2C8DD188247F704C009B6C26 /* LinPullBottomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DD17D247F704C009B6C26 /* LinPullBottomViewController.m */; };
+		2C8DD189247F704C009B6C26 /* LinPullTopViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DD17E247F704C009B6C26 /* LinPullTopViewController.m */; };
+		2C8DD18A247F704C009B6C26 /* LinPullMainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DD182247F704C009B6C26 /* LinPullMainViewController.m */; };
+		2C8DD18B247F704C009B6C26 /* JYPulleyScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DD184247F704C009B6C26 /* JYPulleyScrollView.m */; };
+		2C8DD18C247F704C009B6C26 /* JYPulleyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DD185247F704C009B6C26 /* JYPulleyViewController.m */; };
+		2C8DD196247F7B95009B6C26 /* UIImageView+CSCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C8DD195247F7B95009B6C26 /* UIImageView+CSCategory.m */; };
+		2C91965E24C93DA500F00EE8 /* PBSetViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91965D24C93DA400F00EE8 /* PBSetViewController.m */; };
+		2C91966124CEBA4700F00EE8 /* PBScanningViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91966024CEBA4600F00EE8 /* PBScanningViewController.m */; };
+		2C91967124D0093800F00EE8 /* PBModelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91967024D0093800F00EE8 /* PBModelViewController.m */; };
+		2C91967424D17F7A00F00EE8 /* PBModelLeftTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91967324D17F7A00F00EE8 /* PBModelLeftTableViewCell.m */; };
+		2C91967724D17FC700F00EE8 /* PBRightTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91967624D17FC700F00EE8 /* PBRightTableViewCell.m */; };
+		2C91967A24D40D3800F00EE8 /* PBModelSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91967924D40D3700F00EE8 /* PBModelSearchController.m */; };
+		2C91E5EA21C0F091000D3312 /* examineAdd.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C91E5E921C0F091000D3312 /* examineAdd.plist */; };
+		2C91E5ED21C238FD000D3312 /* PBExamineAddModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91E5EC21C238FD000D3312 /* PBExamineAddModel.m */; };
+		2C91E5F121C254FD000D3312 /* PBExamineInputTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91E5F021C254FD000D3312 /* PBExamineInputTableViewCell.m */; };
+		2C91E5F721C2562D000D3312 /* PBOneChooseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91E5F621C2562D000D3312 /* PBOneChooseTableViewCell.m */; };
+		2C91E5FA21C2563C000D3312 /* PBTwoChooseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91E5F921C2563C000D3312 /* PBTwoChooseTableViewCell.m */; };
+		2C91E5FD21C25650000D3312 /* PBMoreChooseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91E5FC21C25650000D3312 /* PBMoreChooseTableViewCell.m */; };
+		2C91E60021C25F8A000D3312 /* PBEditTimeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91E5FF21C25F8A000D3312 /* PBEditTimeTableViewCell.m */; };
+		2C91E60321C26531000D3312 /* PBTextShowTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C91E60221C26531000D3312 /* PBTextShowTableViewCell.m */; };
+		2C9567562552801F00001080 /* PBExamineListPicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C9567552552801F00001080 /* PBExamineListPicCell.m */; };
+		2C9567592553E8EC00001080 /* PBExamineListTwoPicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C9567582553E8EC00001080 /* PBExamineListTwoPicCell.m */; };
+		2C95675F2553F57B00001080 /* PBExamineListMorePicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C95675E2553F57B00001080 /* PBExamineListMorePicCell.m */; };
+		2C96B95525CA92E800218DF5 /* loading_push.json in Resources */ = {isa = PBXBuildFile; fileRef = 2C96B95225CA92E700218DF5 /* loading_push.json */; };
+		2C96B95625CA92E800218DF5 /* loading_refresh.json in Resources */ = {isa = PBXBuildFile; fileRef = 2C96B95325CA92E700218DF5 /* loading_refresh.json */; };
+		2C96B95725CA92E800218DF5 /* loading_alone.json in Resources */ = {isa = PBXBuildFile; fileRef = 2C96B95425CA92E700218DF5 /* loading_alone.json */; };
+		2C96B95A25CAA42E00218DF5 /* PBRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C96B95925CAA42E00218DF5 /* PBRefreshGifHeader.m */; };
+		2C982EA025FB752400D5B6EA /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C4475B92175C94E002A9110 /* GLKit.framework */; };
+		2C982EA225FB758100D5B6EA /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C4475B72175C942002A9110 /* OpenGLES.framework */; };
+		2C992DE128C4AAE7007AE4BC /* PBMateralTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C992DE028C4AAE7007AE4BC /* PBMateralTableViewCell.m */; };
+		2C9A701D255A353000F00A60 /* PBComponentHierarchyView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C9A701C255A353000F00A60 /* PBComponentHierarchyView.m */; };
+		2C9C3081259ACBCE003809E8 /* PBRecordImageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C9C3080259ACBCE003809E8 /* PBRecordImageTableViewCell.m */; };
+		2CA07075246A78F900F9D6D1 /* PBMapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CA07074246A78F900F9D6D1 /* PBMapViewController.m */; };
+		2CA07078246B991500F9D6D1 /* PBAnnotationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CA07077246B991500F9D6D1 /* PBAnnotationView.m */; };
+		2CAB58492570F67300101631 /* PBTextInputTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB58482570F67300101631 /* PBTextInputTableViewCell.m */; };
+		2CAB58512574BCD000101631 /* PBTopTitleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB58502574BCD000101631 /* PBTopTitleTableViewCell.m */; };
+		2CAB58542574D36600101631 /* PBTimeChooseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB58532574D36600101631 /* PBTimeChooseTableViewCell.m */; };
+		2CAB58572574F6E100101631 /* PBEditTimeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB58562574F6E100101631 /* PBEditTimeView.m */; };
+		2CAB585A2578CDCA00101631 /* PBPersonChooseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB58592578CDCA00101631 /* PBPersonChooseTableViewCell.m */; };
+		2CAB585D2579E21A00101631 /* PBPersonListView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB585C2579E21A00101631 /* PBPersonListView.m */; };
+		2CAB58602579E86300101631 /* PBPersonListCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB585F2579E86300101631 /* PBPersonListCollectionViewCell.m */; };
+		2CAB586C257F4E4000101631 /* PBArtifactsListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB586B257F4E4000101631 /* PBArtifactsListTableViewCell.m */; };
+		2CAB586F257F5BD500101631 /* PBAritifactsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB586E257F5BD500101631 /* PBAritifactsTableViewCell.m */; };
+		2CAB58732583264800101631 /* examineAdd3.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2CAB58722583264800101631 /* examineAdd3.plist */; };
+		2CAB5876258768EE00101631 /* PBRadioTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB5875258768EE00101631 /* PBRadioTableViewCell.m */; };
+		2CAB587925876CCB00101631 /* PBInstructionsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB587825876CCB00101631 /* PBInstructionsTableViewCell.m */; };
+		2CAB587C25889B2800101631 /* PBStatusTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB587B25889B2800101631 /* PBStatusTableViewCell.m */; };
+		2CAB587F2588B3B900101631 /* PBCheckHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB587E2588B3B900101631 /* PBCheckHeaderView.m */; };
+		2CAB5881258CB43300101631 /* examineAdd5.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2CAB5880258CB43300101631 /* examineAdd5.plist */; };
+		2CAB588425908D0000101631 /* PBCheckInfoTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB588325908D0000101631 /* PBCheckInfoTableViewCell.m */; };
+		2CAB588725919E9700101631 /* PBCheckImageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB588625919E9700101631 /* PBCheckImageTableViewCell.m */; };
+		2CAB588A2594989D00101631 /* PBRecordInputTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CAB58892594989C00101631 /* PBRecordInputTableViewCell.m */; };
+		2CB70E1625A43EE000EDF368 /* PBPersonListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E1525A43EE000EDF368 /* PBPersonListViewController.m */; };
+		2CB70E1925A4475000EDF368 /* PBPersonVCTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E1825A4475000EDF368 /* PBPersonVCTableViewCell.m */; };
+		2CB70E1C25A55DC700EDF368 /* PBRoleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E1B25A55DC700EDF368 /* PBRoleViewController.m */; };
+		2CB70E2225A59BD600EDF368 /* PBPersonRoleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E2125A59BD500EDF368 /* PBPersonRoleTableViewCell.m */; };
+		2CB70E2525A5A6DA00EDF368 /* PBRolePersonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E2425A5A6DA00EDF368 /* PBRolePersonViewController.m */; };
+		2CB70E2825A6DA5200EDF368 /* PBUserModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E2725A6DA5200EDF368 /* PBUserModel.m */; };
+		2CB70E2B25A6F96A00EDF368 /* PBMultiSelectPersonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E2A25A6F96A00EDF368 /* PBMultiSelectPersonCell.m */; };
+		2CB70E3125A80F1900EDF368 /* PBUserCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E3025A80F1900EDF368 /* PBUserCollectionViewCell.m */; };
+		2CB70E3425A83A7C00EDF368 /* PBSelectedPersonController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E3325A83A7C00EDF368 /* PBSelectedPersonController.m */; };
+		2CB70E3725B0138500EDF368 /* PBSeleceArtifactsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E3625B0138500EDF368 /* PBSeleceArtifactsViewController.m */; };
+		2CB70E3A25B0172C00EDF368 /* PBSelectArtifactsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E3925B0172C00EDF368 /* PBSelectArtifactsCell.m */; };
+		2CB70E3D25B989C900EDF368 /* NSDictionary+log.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB70E3C25B989C800EDF368 /* NSDictionary+log.m */; };
+		2CB72E90210EAD260020BD39 /* BackNavItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2CB72E8F210EAD260020BD39 /* BackNavItem.xib */; };
+		2CB72E93210EAEF60020BD39 /* PBBackNavItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CB72E92210EAEF60020BD39 /* PBBackNavItem.m */; };
+		2CBA3F22253D847E005047D6 /* PBListDataTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBA3F21253D847E005047D6 /* PBListDataTableViewCell.m */; };
+		2CBB3FC3248A3C63003D3089 /* PBProjectSearchView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB3FC2248A3C63003D3089 /* PBProjectSearchView.m */; };
+		2CBB3FDA248A45C8003D3089 /* MSSAutoresizeLabelFlow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB3FC5248A45C8003D3089 /* MSSAutoresizeLabelFlow.m */; };
+		2CBB3FDC248A45C8003D3089 /* MSSAutoresizeLabelFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB3FC8248A45C8003D3089 /* MSSAutoresizeLabelFlowLayout.m */; };
+		2CBB3FE3248A45C8003D3089 /* MSSAutoresizeLabelFlowCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB3FD6248A45C8003D3089 /* MSSAutoresizeLabelFlowCell.m */; };
+		2CBB3FE4248A45C8003D3089 /* MSSAutoresizeLabelFlowConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB3FD7248A45C8003D3089 /* MSSAutoresizeLabelFlowConfig.m */; };
+		2CBB3FE8249355A0003D3089 /* PBEnterpriseCodeController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB3FE72493559F003D3089 /* PBEnterpriseCodeController.m */; };
+		2CBB3FEE2493634F003D3089 /* PBCodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CBB3FED2493634F003D3089 /* PBCodeTableViewCell.m */; };
+		2CC012BA2417420000A39754 /* PBEditLableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC012B9241741FF00A39754 /* PBEditLableView.m */; };
+		2CC012BF2418E46000A39754 /* PBTagModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC012BE2418E46000A39754 /* PBTagModel.m */; };
+		2CC012C12420AFA700A39754 /* PBAddIssueController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2CC012C02420AFA700A39754 /* PBAddIssueController.mm */; };
+		2CC012C42421C47600A39754 /* PBCommentsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC012C32421C47600A39754 /* PBCommentsCell.m */; };
+		2CC012C72421CCDD00A39754 /* PBImageCommentsCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC012C62421CCDD00A39754 /* PBImageCommentsCell.m */; };
+		2CC012CA2425CC8E00A39754 /* Shape.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CC012C82425CBA300A39754 /* Shape.framework */; };
+		2CC012CB2425CC8E00A39754 /* Shape.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2CC012C82425CBA300A39754 /* Shape.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		2CC4043321DDBDEC00372C54 /* PBRecordingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC4043221DDBDEC00372C54 /* PBRecordingView.m */; };
+		2CC4043821DDDFA000372C54 /* lame.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CC4043721DDDFA000372C54 /* lame.framework */; };
+		2CC4043B21DDDFAD00372C54 /* ConvertAudioFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC4043921DDDFAD00372C54 /* ConvertAudioFile.m */; };
+		2CC4043E21DE02E200372C54 /* PBAVPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC4043D21DE02E200372C54 /* PBAVPlayerManager.m */; };
+		2CC5C63921AFE8C400F5976D /* PBExamineTableHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CC5C63821AFE8C400F5976D /* PBExamineTableHeaderView.m */; };
+		2CD6F9CF21EF0139008231A3 /* PBOpenViewPointController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CD6F9CE21EF0139008231A3 /* PBOpenViewPointController.m */; };
+		2CD6F9D221EF014D008231A3 /* PBOpenDrawController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CD6F9D121EF014D008231A3 /* PBOpenDrawController.m */; };
+		2CD6F9D521F16AFA008231A3 /* PBPublishCommentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CD6F9D421F16AFA008231A3 /* PBPublishCommentCell.m */; };
+		2CD83F9C2106FADF006111C7 /* PBDrawingsInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CD83F9B2106FADF006111C7 /* PBDrawingsInfoModel.m */; };
+		2CD83F9F21072345006111C7 /* PBViewPointDetailCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CD83F9E21072345006111C7 /* PBViewPointDetailCell.m */; };
+		2CDE0D4221D0A883002A453C /* PBTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDE0D4121D0A883002A453C /* PBTestViewController.m */; };
+		2CDE0D4521D0D043002A453C /* PBTwoChooseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDE0D4421D0D043002A453C /* PBTwoChooseView.m */; };
+		2CDE0D4821D33093002A453C /* PBTimeChooseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDE0D4721D33093002A453C /* PBTimeChooseView.m */; };
+		2CDE0D4B21D4A547002A453C /* PBDrawingposModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDE0D4A21D4A547002A453C /* PBDrawingposModel.m */; };
+		2CDFB0F721CCF0EC00DD8015 /* PBItemizedViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDFB0F621CCF0EC00DD8015 /* PBItemizedViewController.m */; };
+		2CF1510622BB70DC0098C0F1 /* examineAdd2.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2CF1510522BB70DC0098C0F1 /* examineAdd2.plist */; };
+		2CF1510822BB712C0098C0F1 /* issueAdd2.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2CF1510722BB712B0098C0F1 /* issueAdd2.plist */; };
+		2CF4E84A20FEE0B10048E369 /* PBNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF4E84920FEE0B10048E369 /* PBNavigationController.m */; };
+		2CF4E84E20FF29810048E369 /* PBTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF4E84D20FF29810048E369 /* PBTabBarController.m */; };
+		2CF4E85A20FF32440048E369 /* PBModelListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF4E85920FF32440048E369 /* PBModelListViewController.m */; };
+		2CF4E86020FF32760048E369 /* PBIssueListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF4E85F20FF32760048E369 /* PBIssueListViewController.m */; };
+		2CF4E86320FF328A0048E369 /* PBExamineListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF4E86220FF328A0048E369 /* PBExamineListViewController.m */; };
+		2CF9BDFF21C77C1A00A2536E /* PBChooseModelViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF9BDFE21C77C1A00A2536E /* PBChooseModelViewController.m */; };
+		2CF9BE0221C77F1B00A2536E /* PBPositioningTypeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF9BE0121C77F1B00A2536E /* PBPositioningTypeViewController.m */; };
+		2CF9BE0521C8977600A2536E /* PBEViewPointDetailsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF9BE0421C8977600A2536E /* PBEViewPointDetailsController.m */; };
+		2CF9BE0821C8C0CF00A2536E /* PBEDrawingsShowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF9BE0721C8C0CF00A2536E /* PBEDrawingsShowController.m */; };
+		2CF9BE0E21C9F6A600A2536E /* PBOneChooseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF9BE0D21C9F6A600A2536E /* PBOneChooseView.m */; };
+		2CF9BE1121CB929C00A2536E /* PBDivisionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CF9BE1021CB929C00A2536E /* PBDivisionViewController.m */; };
+		2CFB177721018C1F00B6BF1A /* PBPhaseLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CFB177621018C1F00B6BF1A /* PBPhaseLabel.m */; };
+		2CFB177B2101CB0E00B6BF1A /* PBModelsModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CFB177A2101CB0E00B6BF1A /* PBModelsModel.m */; };
+		2CFB177E2101CC1200B6BF1A /* PBModelsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CFB177D2101CC1200B6BF1A /* PBModelsTableViewCell.m */; };
+		2CFD790624C02CA9006B6E75 /* PBInputCodeTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CFD790524C02CA8006B6E75 /* PBInputCodeTableViewCell.m */; };
+		4C385C912988F3DF00D9F626 /* SGScanViewConfigure.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C742988F3DF00D9F626 /* SGScanViewConfigure.m */; };
+		4C385C922988F3DF00D9F626 /* SGScanView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C752988F3DF00D9F626 /* SGScanView.m */; };
+		4C385C932988F3DF00D9F626 /* SGQRCode.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4C385C782988F3DF00D9F626 /* SGQRCode.bundle */; };
+		4C385C942988F3DF00D9F626 /* SGWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C7A2988F3DF00D9F626 /* SGWeakProxy.m */; };
+		4C385C952988F3DF00D9F626 /* SGTorch.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C7D2988F3DF00D9F626 /* SGTorch.m */; };
+		4C385C962988F3DF00D9F626 /* SGQRCodeLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C7F2988F3DF00D9F626 /* SGQRCodeLog.m */; };
+		4C385C972988F3DF00D9F626 /* SGScanCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C822988F3DF00D9F626 /* SGScanCode.m */; };
+		4C385C982988F3DF00D9F626 /* SGGenerateQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C852988F3DF00D9F626 /* SGGenerateQRCode.m */; };
+		4C385C992988F3DF00D9F626 /* SGSoundEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C872988F3DF00D9F626 /* SGSoundEffect.m */; };
+		4C385C9A2988F3DF00D9F626 /* SGPermissionCamera.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C8A2988F3DF00D9F626 /* SGPermissionCamera.m */; };
+		4C385C9B2988F3DF00D9F626 /* SGPermission.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C8B2988F3DF00D9F626 /* SGPermission.m */; };
+		4C385C9C2988F3DF00D9F626 /* SGPermissionPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C8C2988F3DF00D9F626 /* SGPermissionPhoto.m */; };
+		4C385C9F2988F49F00D9F626 /* QQQRCodeVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385C9E2988F49E00D9F626 /* QQQRCodeVC.m */; };
+		4C385CA2298A068E00D9F626 /* PBNewPersonTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385CA1298A068E00D9F626 /* PBNewPersonTableViewCell.m */; };
+		4C385CA52991FC2E00D9F626 /* PBVideoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385CA42991FC2E00D9F626 /* PBVideoViewController.m */; };
+		4C385CA829922F5300D9F626 /* PBWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C385CA729922F5300D9F626 /* PBWebViewController.m */; };
+		4C82DC15290B7407007A9400 /* HJCycleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C82DC14290B7407007A9400 /* HJCycleView.m */; };
+		4C82DC18290B7479007A9400 /* CycleCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C82DC17290B7479007A9400 /* CycleCollectionViewCell.m */; };
+		4C84885328FE98250095E7C3 /* PBPanoramaListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84885228FE98250095E7C3 /* PBPanoramaListViewController.m */; };
+		4C84885628FE9B6E0095E7C3 /* PBPanoramaBaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84885528FE9B6E0095E7C3 /* PBPanoramaBaseController.m */; };
+		4C84885C28FEA9EA0095E7C3 /* PBPanoramaTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84885B28FEA9EA0095E7C3 /* PBPanoramaTableViewCell.m */; };
+		4C84885F28FEAC270095E7C3 /* PBPanoramaModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84885E28FEAC270095E7C3 /* PBPanoramaModel.m */; };
+		4C84886228FFD04A0095E7C3 /* PBPanoramaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84886128FFD04A0095E7C3 /* PBPanoramaViewController.m */; };
+		4C84886528FFE9810095E7C3 /* PBAddPanoramaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84886428FFE9810095E7C3 /* PBAddPanoramaViewController.m */; };
+		4C84886829012EB10095E7C3 /* PBViewPointScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84886729012EB10095E7C3 /* PBViewPointScrollView.m */; };
+		4C84886B290152750095E7C3 /* PBScrollStageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84886A290152750095E7C3 /* PBScrollStageView.m */; };
+		4C84886E2901528A0095E7C3 /* PBScrollModelView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84886D2901528A0095E7C3 /* PBScrollModelView.m */; };
+		4C8488712901529C0095E7C3 /* PBScrollVpView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8488702901529C0095E7C3 /* PBScrollVpView.m */; };
+		4C84887729029E800095E7C3 /* PBPanoramaItemModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C84887629029E800095E7C3 /* PBPanoramaItemModel.m */; };
+		4C861A13283E3701002555A2 /* LXFPhotoLibraryManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C861A12283E3701002555A2 /* LXFPhotoLibraryManager.m */; };
+		4C861A17283E3732002555A2 /* LXFCameraButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C861A16283E3732002555A2 /* LXFCameraButton.m */; };
+		4C861A1D283E3761002555A2 /* LXFCameraController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C861A18283E3761002555A2 /* LXFCameraController.xib */; };
+		4C861A1E283E3761002555A2 /* LXFCameraController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C861A19283E3761002555A2 /* LXFCameraController.m */; };
+		4C861A1F283E3761002555A2 /* PBResultVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C861A1B283E3761002555A2 /* PBResultVideo.m */; };
+		4C90992028D80F0B004B30C4 /* IQTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90990128D80F0B004B30C4 /* IQTextView.m */; };
+		4C90992128D80F0B004B30C4 /* IQToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90990528D80F0B004B30C4 /* IQToolbar.m */; };
+		4C90992228D80F0B004B30C4 /* IQTitleBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90990728D80F0B004B30C4 /* IQTitleBarButtonItem.m */; };
+		4C90992328D80F0B004B30C4 /* IQBarButtonItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90990828D80F0B004B30C4 /* IQBarButtonItem.m */; };
+		4C90992428D80F0B004B30C4 /* IQUIView+IQKeyboardToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90990928D80F0B004B30C4 /* IQUIView+IQKeyboardToolbar.m */; };
+		4C90992528D80F0B004B30C4 /* IQPreviousNextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90990A28D80F0B004B30C4 /* IQPreviousNextView.m */; };
+		4C90992628D80F0B004B30C4 /* IQKeyboardManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90991328D80F0B004B30C4 /* IQKeyboardManager.m */; };
+		4C90992728D80F0B004B30C4 /* IQNSArray+Sort.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90991528D80F0B004B30C4 /* IQNSArray+Sort.m */; };
+		4C90992828D80F0B004B30C4 /* IQUITextFieldView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90991728D80F0B004B30C4 /* IQUITextFieldView+Additions.m */; };
+		4C90992928D80F0B004B30C4 /* IQUIScrollView+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90991828D80F0B004B30C4 /* IQUIScrollView+Additions.m */; };
+		4C90992A28D80F0B004B30C4 /* IQUIView+Hierarchy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90991928D80F0B004B30C4 /* IQUIView+Hierarchy.m */; };
+		4C90992B28D80F0B004B30C4 /* IQUIViewController+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90991D28D80F0B004B30C4 /* IQUIViewController+Additions.m */; };
+		4C90992C28D80F0B004B30C4 /* IQKeyboardReturnKeyHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90991F28D80F0B004B30C4 /* IQKeyboardReturnKeyHandler.m */; };
+		4C90992F28D94F51004B30C4 /* PBTaskHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C90992E28D94F51004B30C4 /* PBTaskHeaderView.m */; };
+		4C93503328CB12E300476008 /* PBScheduleImgTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C93503228CB12E300476008 /* PBScheduleImgTableViewCell.m */; };
+		4C93503628CB170600476008 /* PBImgAndNameCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C93503528CB170600476008 /* PBImgAndNameCollectionViewCell.m */; };
+		4C93503928CB377100476008 /* PBImageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C93503828CB377100476008 /* PBImageModel.m */; };
+		4CD610A428AE486700BBBF67 /* PBScheduleBaseController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610A328AE486700BBBF67 /* PBScheduleBaseController.m */; };
+		4CD610A728AE4A3300BBBF67 /* PBScheduleListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610A628AE4A3300BBBF67 /* PBScheduleListViewController.m */; };
+		4CD610AA28B331D000BBBF67 /* PBScheduleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610A928B331D000BBBF67 /* PBScheduleTableViewCell.m */; };
+		4CD610AD28B35BAE00BBBF67 /* PBScheduleListModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610AC28B35BAE00BBBF67 /* PBScheduleListModel.m */; };
+		4CD610B028B36C2000BBBF67 /* PBSchedulePlanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610AF28B36C2000BBBF67 /* PBSchedulePlanViewController.m */; };
+		4CD610B328B38AD100BBBF67 /* PBSchedulePlanTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610B228B38AD100BBBF67 /* PBSchedulePlanTableViewCell.m */; };
+		4CD610B628B475D000BBBF67 /* PBSchedulePlanModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610B528B475D000BBBF67 /* PBSchedulePlanModel.m */; };
+		4CD610B928B4BA6A00BBBF67 /* PBScheduleModuleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610B828B4BA6A00BBBF67 /* PBScheduleModuleViewController.m */; };
+		4CD610BC28B4C0F300BBBF67 /* PBModuleTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610BB28B4C0F300BBBF67 /* PBModuleTableViewCell.m */; };
+		4CD610BF28B5BB8300BBBF67 /* PBTaskScheduleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610BE28B5BB8300BBBF67 /* PBTaskScheduleViewController.m */; };
+		4CD610C228B5BBBB00BBBF67 /* PBSitePerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610C128B5BBBB00BBBF67 /* PBSitePerViewController.m */; };
+		4CD610C528B5BC3A00BBBF67 /* PBSiteMechanicalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610C428B5BC3A00BBBF67 /* PBSiteMechanicalViewController.m */; };
+		4CD610C828B5BC5C00BBBF67 /* PBSiteMaterialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610C728B5BC5C00BBBF67 /* PBSiteMaterialViewController.m */; };
+		4CD610CB28B5BC7300BBBF67 /* PBSafetyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610CA28B5BC7300BBBF67 /* PBSafetyViewController.m */; };
+		4CD610CE28B5BCA100BBBF67 /* PBSuperviseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610CD28B5BCA100BBBF67 /* PBSuperviseViewController.m */; };
+		4CD610D128B5D42300BBBF67 /* PBScheduleHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610D028B5D42300BBBF67 /* PBScheduleHeaderView.m */; };
+		4CD610D428B619C700BBBF67 /* PBPlanTaskTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610D328B619C700BBBF67 /* PBPlanTaskTableViewCell.m */; };
+		4CD610D728B77BC500BBBF67 /* PBTaskScheduleModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610D628B77BC500BBBF67 /* PBTaskScheduleModel.m */; };
+		4CD610DA28B8997A00BBBF67 /* PBChooseOneTaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610D928B8997A00BBBF67 /* PBChooseOneTaskViewController.m */; };
+		4CD610DD28BC64A600BBBF67 /* PBunPlanTaskTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610DC28BC64A600BBBF67 /* PBunPlanTaskTableViewCell.m */; };
+		4CD610E328BDAC1000BBBF67 /* PBSitePerTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610E228BDAC1000BBBF67 /* PBSitePerTableViewCell.m */; };
+		4CD610E628BDAD2200BBBF67 /* PBSitePerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610E528BDAD2200BBBF67 /* PBSitePerModel.m */; };
+		4CD610E928BDAEBB00BBBF67 /* PBPerPlanModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610E828BDAEBB00BBBF67 /* PBPerPlanModel.m */; };
+		4CD610EC28BDDF2400BBBF67 /* PBChooseType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610EB28BDDF2400BBBF67 /* PBChooseType.m */; };
+		4CD610EF28BF593600BBBF67 /* PBSafetyTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610EE28BF593600BBBF67 /* PBSafetyTableViewCell.m */; };
+		4CD610F228BF656C00BBBF67 /* PBSafetyModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610F128BF656C00BBBF67 /* PBSafetyModel.m */; };
+		4CD610FB28C0522700BBBF67 /* PBSuperviseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610FA28C0522700BBBF67 /* PBSuperviseModel.m */; };
+		4CD610FE28C052B900BBBF67 /* PBSuperviseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD610FD28C052B900BBBF67 /* PBSuperviseTableViewCell.m */; };
+		4CD6110128C5A18400BBBF67 /* PBSchedulesElementTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6110028C5A18400BBBF67 /* PBSchedulesElementTableViewCell.m */; };
+		4CD6110428C5CE6100BBBF67 /* PBMechanicalPlanModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6110328C5CE6100BBBF67 /* PBMechanicalPlanModel.m */; };
+		4CD6110728C5CE7200BBBF67 /* PBSiteMechanicalModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD6110628C5CE7200BBBF67 /* PBSiteMechanicalModel.m */; };
+		4CEFA89528D0519A00EC7336 /* PBPreScheduleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEFA89428D0519A00EC7336 /* PBPreScheduleViewController.m */; };
+		4CEFA89A28D1721900EC7336 /* PBBussinessViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CEFA89928D1721900EC7336 /* PBBussinessViewController.m */; };
+		8304961427859AEF0032219C /* PBEAddImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 8304961327859AEF0032219C /* PBEAddImageView.m */; };
+		830496172786C7AF0032219C /* PBTaskViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 830496152786C7AF0032219C /* PBTaskViewController.m */; };
+		8304961A2786D86D0032219C /* PBETaskModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 830496182786D86D0032219C /* PBETaskModel.m */; };
+		8304961D2786D8F20032219C /* PBETaskInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8304961B2786D8F10032219C /* PBETaskInfoModel.m */; };
+		830496202787D8120032219C /* PBChooseTasksCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8304961F2787D8120032219C /* PBChooseTasksCell.m */; };
+		8304962327881A340032219C /* PBSelectTaskCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8304962227881A340032219C /* PBSelectTaskCell.m */; };
+		83A3DBB027BBA99A0012C539 /* examineAdd6.plist in Resources */ = {isa = PBXBuildFile; fileRef = 83A3DBAF27BBA9990012C539 /* examineAdd6.plist */; };
+		83A3DBB327BCA81F0012C539 /* PBCheckBoxTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 83A3DBB227BCA81E0012C539 /* PBCheckBoxTableViewCell.m */; };
+		EA52BE6D1B2A59329A352FD6 /* libPods-IphoneBIMe.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 268D8549B01E06D59A6B6950 /* libPods-IphoneBIMe.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		2C26054521800C690017C0B1 /* Embed Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				2CC012CB2425CC8E00A39754 /* Shape.framework in Embed Frameworks */,
+			);
+			name = "Embed Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		268D8549B01E06D59A6B6950 /* libPods-IphoneBIMe.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-IphoneBIMe.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+		2C01A386211182F600D75B3F /* PBDocBaseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDocBaseController.h; sourceTree = "<group>"; };
+		2C01A387211182F600D75B3F /* PBDocBaseController.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = PBDocBaseController.mm; sourceTree = "<group>"; };
+		2C01A389211189E400D75B3F /* PBDocListController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDocListController.h; sourceTree = "<group>"; };
+		2C01A38A211189E400D75B3F /* PBDocListController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDocListController.m; sourceTree = "<group>"; };
+		2C01A38C2111AB6300D75B3F /* PBDocPrivilegeModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDocPrivilegeModel.h; sourceTree = "<group>"; };
+		2C01A38D2111AB6300D75B3F /* PBDocPrivilegeModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDocPrivilegeModel.m; sourceTree = "<group>"; };
+		2C01A38F2111AC8100D75B3F /* PBPreviewDocViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPreviewDocViewController.h; sourceTree = "<group>"; };
+		2C01A3902111AC8100D75B3F /* PBPreviewDocViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPreviewDocViewController.m; sourceTree = "<group>"; };
+		2C023F0A2109D37F00E92E89 /* PBMoreTabViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMoreTabViewController.h; sourceTree = "<group>"; };
+		2C023F0B2109D37F00E92E89 /* PBMoreTabViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMoreTabViewController.m; sourceTree = "<group>"; };
+		2C027FD42106D9A600A2E663 /* PBLoadModelDisplayController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBLoadModelDisplayController.h; sourceTree = "<group>"; };
+		2C027FD52106D9A600A2E663 /* PBLoadModelDisplayController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBLoadModelDisplayController.m; sourceTree = "<group>"; };
+		2C027FDA2106DB0100A2E663 /* PBDrawingsShowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDrawingsShowController.h; sourceTree = "<group>"; };
+		2C027FDB2106DB0100A2E663 /* PBDrawingsShowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDrawingsShowController.m; sourceTree = "<group>"; };
+		2C027FDD2106DB6000A2E663 /* PBViewPointDetailsController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBViewPointDetailsController.h; sourceTree = "<group>"; };
+		2C027FDE2106DB6000A2E663 /* PBViewPointDetailsController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBViewPointDetailsController.m; sourceTree = "<group>"; };
+		2C03ED772181C01200846554 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
+		2C03ED792181C01D00846554 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		2C05747D22169EF900C7A2D5 /* PBAddRecordViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAddRecordViewController.h; sourceTree = "<group>"; };
+		2C05747E22169EF900C7A2D5 /* PBAddRecordViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAddRecordViewController.m; sourceTree = "<group>"; };
+		2C06890122769D790026B30F /* JHAES.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JHAES.h; sourceTree = "<group>"; };
+		2C06890222769D790026B30F /* JHAES.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JHAES.m; sourceTree = "<group>"; };
+		2C07FAC22133E71F005C67D6 /* images.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = images.bundle; sourceTree = "<group>"; };
+		2C07FAC32133E71F005C67D6 /* YJProgressHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YJProgressHUD.h; sourceTree = "<group>"; };
+		2C07FAC42133E71F005C67D6 /* YJProgressHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YJProgressHUD.m; sourceTree = "<group>"; };
+		2C0F1126250B807900A510DE /* PBArtifactsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBArtifactsViewController.h; sourceTree = "<group>"; };
+		2C0F1127250B807900A510DE /* PBArtifactsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBArtifactsViewController.m; sourceTree = "<group>"; };
+		2C0F1132250F1E9E00A510DE /* PBRetrieveView1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRetrieveView1.h; sourceTree = "<group>"; };
+		2C0F1133250F1E9E00A510DE /* PBRetrieveView1.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRetrieveView1.m; sourceTree = "<group>"; };
+		2C0F11352510BE2A00A510DE /* PBScreeningCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScreeningCell.h; sourceTree = "<group>"; };
+		2C0F11362510BE2A00A510DE /* PBScreeningCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScreeningCell.m; sourceTree = "<group>"; };
+		2C0F11382511EBC800A510DE /* PBAddExamineViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAddExamineViewController.h; sourceTree = "<group>"; };
+		2C0F11392511EBC800A510DE /* PBAddExamineViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAddExamineViewController.m; sourceTree = "<group>"; };
+		2C0F113B2514553E00A510DE /* examineAdd1.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = examineAdd1.plist; sourceTree = "<group>"; };
+		2C0F113D2518A7E300A510DE /* PBArtifactsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBArtifactsModel.h; sourceTree = "<group>"; };
+		2C0F113E2518A7E300A510DE /* PBArtifactsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBArtifactsModel.m; sourceTree = "<group>"; };
+		2C0F11402519FD9600A510DE /* PBArtifactsInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBArtifactsInfoModel.h; sourceTree = "<group>"; };
+		2C0F11412519FD9600A510DE /* PBArtifactsInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBArtifactsInfoModel.m; sourceTree = "<group>"; };
+		2C0F1143251C95C500A510DE /* PBChooseArtifactsCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBChooseArtifactsCell.h; sourceTree = "<group>"; };
+		2C0F1144251C95C500A510DE /* PBChooseArtifactsCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBChooseArtifactsCell.m; sourceTree = "<group>"; };
+		2C1267C0210AC3FF00FC7DFE /* PBAlertController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAlertController.h; sourceTree = "<group>"; };
+		2C1267C1210AC3FF00FC7DFE /* PBAlertController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAlertController.m; sourceTree = "<group>"; };
+		2C1267C3210AD0A200FC7DFE /* PBMoreFunctionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMoreFunctionView.h; sourceTree = "<group>"; };
+		2C1267C4210AD0A200FC7DFE /* PBMoreFunctionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMoreFunctionView.m; sourceTree = "<group>"; };
+		2C144D1E21ABC6550011557A /* PBExamineBaseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineBaseController.h; sourceTree = "<group>"; };
+		2C144D1F21ABC6550011557A /* PBExamineBaseController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineBaseController.m; sourceTree = "<group>"; };
+		2C144D2621ABCF2E0011557A /* PBExamineListTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineListTableViewCell.h; sourceTree = "<group>"; };
+		2C144D2721ABCF2E0011557A /* PBExamineListTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineListTableViewCell.m; sourceTree = "<group>"; };
+		2C144D2C21ABF4800011557A /* PBExamineListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineListModel.h; sourceTree = "<group>"; };
+		2C144D2D21ABF4800011557A /* PBExamineListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineListModel.m; sourceTree = "<group>"; };
+		2C15512A22268D9900CBFF00 /* WKAvoidKeyboardViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKAvoidKeyboardViewController.h; sourceTree = "<group>"; };
+		2C15512B22268D9900CBFF00 /* WKAvoidKeyboardViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WKAvoidKeyboardViewController.m; sourceTree = "<group>"; };
+		2C1551332227CF2B00CBFF00 /* PBApplyInspectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBApplyInspectionViewController.h; sourceTree = "<group>"; };
+		2C1551342227CF2B00CBFF00 /* PBApplyInspectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBApplyInspectionViewController.m; sourceTree = "<group>"; };
+		2C16401328C39A7A001DFF31 /* PBMaterialPlanModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMaterialPlanModel.h; sourceTree = "<group>"; };
+		2C16401428C39A7A001DFF31 /* PBMaterialPlanModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMaterialPlanModel.m; sourceTree = "<group>"; };
+		2C16401628C39A93001DFF31 /* PBSiteMaterialModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSiteMaterialModel.h; sourceTree = "<group>"; };
+		2C16401728C39A93001DFF31 /* PBSiteMaterialModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSiteMaterialModel.m; sourceTree = "<group>"; };
+		2C165638212BAE1A007CA9FD /* issueAdd.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = issueAdd.plist; sourceTree = "<group>"; };
+		2C16563A212C1D75007CA9FD /* PBPersonModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonModel.h; sourceTree = "<group>"; };
+		2C16563B212C1D75007CA9FD /* PBPersonModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonModel.m; sourceTree = "<group>"; };
+		2C1784C4246BC6BF00EE56D8 /* PBPointAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPointAnnotation.h; sourceTree = "<group>"; };
+		2C1784C5246BC6BF00EE56D8 /* PBPointAnnotation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPointAnnotation.m; sourceTree = "<group>"; };
+		2C197D3321786717008B8DDA /* DwgViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = DwgViewController.storyboard; sourceTree = "<group>"; };
+		2C1AC3ED211ABB0700D3C412 /* PBDropdownMenu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDropdownMenu.h; sourceTree = "<group>"; };
+		2C1AC3EE211ABB0700D3C412 /* PBDropdownMenu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDropdownMenu.m; sourceTree = "<group>"; };
+		2C1AC3F0211AF87500D3C412 /* PBIssueListTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueListTableViewCell.h; sourceTree = "<group>"; };
+		2C1AC3F1211AF87500D3C412 /* PBIssueListTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueListTableViewCell.m; sourceTree = "<group>"; };
+		2C1AC3F3211AF9CB00D3C412 /* PBIssueListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueListModel.h; sourceTree = "<group>"; };
+		2C1AC3F4211AF9CB00D3C412 /* PBIssueListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueListModel.m; sourceTree = "<group>"; };
+		2C1AC3F6211AFAE900D3C412 /* PBIssueNavModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueNavModel.h; sourceTree = "<group>"; };
+		2C1AC3F7211AFAE900D3C412 /* PBIssueNavModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueNavModel.m; sourceTree = "<group>"; };
+		2C1F54EE2105727100079C9E /* PBModelCategoryViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBModelCategoryViewController.h; sourceTree = "<group>"; };
+		2C1F54EF2105727100079C9E /* PBModelCategoryViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBModelCategoryViewController.m; sourceTree = "<group>"; };
+		2C1F54F121059EBA00079C9E /* PBViewsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBViewsModel.h; sourceTree = "<group>"; };
+		2C1F54F221059EBA00079C9E /* PBViewsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBViewsModel.m; sourceTree = "<group>"; };
+		2C1F54F42105A11F00079C9E /* PBDrawingsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDrawingsModel.h; sourceTree = "<group>"; };
+		2C1F54F52105A11F00079C9E /* PBDrawingsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDrawingsModel.m; sourceTree = "<group>"; };
+		2C1F54F72105A1EF00079C9E /* PBViewPointModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBViewPointModel.h; sourceTree = "<group>"; };
+		2C1F54F82105A1EF00079C9E /* PBViewPointModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBViewPointModel.m; sourceTree = "<group>"; };
+		2C1F54FA2105B95D00079C9E /* PBTextTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTextTableViewCell.h; sourceTree = "<group>"; };
+		2C1F54FB2105B95D00079C9E /* PBTextTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTextTableViewCell.m; sourceTree = "<group>"; };
+		2C1F54FD2105B96700079C9E /* PBImageTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBImageTableViewCell.h; sourceTree = "<group>"; };
+		2C1F54FE2105B96700079C9E /* PBImageTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBImageTableViewCell.m; sourceTree = "<group>"; };
+		2C20C53A2123D4CF0006469C /* PBChooseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBChooseTableViewCell.h; sourceTree = "<group>"; };
+		2C20C53B2123D4CF0006469C /* PBChooseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBChooseTableViewCell.m; sourceTree = "<group>"; };
+		2C20C53D212413340006469C /* PBChooseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBChooseView.h; sourceTree = "<group>"; };
+		2C20C53E212413340006469C /* PBChooseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBChooseView.m; sourceTree = "<group>"; };
+		2C20E9AC20FC40C100A18732 /* PBLoginViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBLoginViewController.h; sourceTree = "<group>"; };
+		2C20E9AD20FC40C100A18732 /* PBLoginViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBLoginViewController.m; sourceTree = "<group>"; };
+		2C20E9B020FC49B600A18732 /* NSString+PBCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+PBCategory.h"; sourceTree = "<group>"; };
+		2C20E9B120FC49B600A18732 /* NSString+PBCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+PBCategory.m"; sourceTree = "<group>"; };
+		2C20E9B220FC49B600A18732 /* PBAdditonal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBAdditonal.h; sourceTree = "<group>"; };
+		2C20E9B320FC49B600A18732 /* UIBarButtonItem+PBCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIBarButtonItem+PBCategory.h"; sourceTree = "<group>"; };
+		2C20E9B420FC49B600A18732 /* UIBarButtonItem+PBCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIBarButtonItem+PBCategory.m"; sourceTree = "<group>"; };
+		2C20E9B520FC49B600A18732 /* UIButton+ZJFAdditon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+ZJFAdditon.h"; sourceTree = "<group>"; };
+		2C20E9B620FC49B600A18732 /* UIButton+ZJFAdditon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+ZJFAdditon.m"; sourceTree = "<group>"; };
+		2C20E9B720FC49B600A18732 /* UIColor+ZJFAdditon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+ZJFAdditon.h"; sourceTree = "<group>"; };
+		2C20E9B820FC49B600A18732 /* UIColor+ZJFAdditon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIColor+ZJFAdditon.m"; sourceTree = "<group>"; };
+		2C20E9B920FC49B600A18732 /* UILabel+ZJFAdditon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UILabel+ZJFAdditon.h"; sourceTree = "<group>"; };
+		2C20E9BA20FC49B600A18732 /* UILabel+ZJFAdditon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+ZJFAdditon.m"; sourceTree = "<group>"; };
+		2C20E9BB20FC49B600A18732 /* UIView+PBCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+PBCategory.h"; sourceTree = "<group>"; };
+		2C20E9BC20FC49B600A18732 /* UIView+PBCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+PBCategory.m"; sourceTree = "<group>"; };
+		2C20E9C420FC49EB00A18732 /* PBComon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBComon.h; sourceTree = "<group>"; };
+		2C20E9C520FC848900A18732 /* PBProjectModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBProjectModel.h; sourceTree = "<group>"; };
+		2C20E9C620FC848900A18732 /* PBProjectModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBProjectModel.m; sourceTree = "<group>"; };
+		2C242DC2213CDF9F00DB4C04 /* PBAddCommentsController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAddCommentsController.h; sourceTree = "<group>"; };
+		2C242DC3213CDF9F00DB4C04 /* PBAddCommentsController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAddCommentsController.m; sourceTree = "<group>"; };
+		2C26B7C825ECDC0B00AAE3D2 /* PBBrowseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBBrowseViewController.h; sourceTree = "<group>"; };
+		2C26B7C925ECDC0B00AAE3D2 /* PBBrowseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBBrowseViewController.m; sourceTree = "<group>"; };
+		2C2A51902126A57C004E1BAF /* PBEditPersonView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEditPersonView.h; sourceTree = "<group>"; };
+		2C2A51912126A57C004E1BAF /* PBEditPersonView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEditPersonView.m; sourceTree = "<group>"; };
+		2C2A51932126B2D9004E1BAF /* PBEditPersonCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEditPersonCollectionViewCell.h; sourceTree = "<group>"; };
+		2C2A51942126B2D9004E1BAF /* PBEditPersonCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEditPersonCollectionViewCell.m; sourceTree = "<group>"; };
+		2C2A51962126CA63004E1BAF /* PBRoleTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRoleTableViewCell.h; sourceTree = "<group>"; };
+		2C2A51972126CA63004E1BAF /* PBRoleTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRoleTableViewCell.m; sourceTree = "<group>"; };
+		2C2A6EF120F88F1000218D5C /* IphoneBIMe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = IphoneBIMe.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		2C2A6EF420F88F1000218D5C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		2C2A6EF520F88F1000218D5C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+		2C2A6EFB20F88F1000218D5C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		2C2A6EFD20F88F1000218D5C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		2C2A6F0020F88F1000218D5C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+		2C2A6F0220F88F1000218D5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		2C2A6F0320F88F1000218D5C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		2C2A6F1020F894DA00218D5C /* PBProjectListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBProjectListViewController.h; sourceTree = "<group>"; };
+		2C2A6F1120F894DA00218D5C /* PBProjectListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBProjectListViewController.m; sourceTree = "<group>"; };
+		2C2A6F1320F89E3F00218D5C /* PBProjectTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBProjectTableViewCell.h; sourceTree = "<group>"; };
+		2C2A6F1420F89E3F00218D5C /* PBProjectTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBProjectTableViewCell.m; sourceTree = "<group>"; };
+		2C2A6F1620F8A1BF00218D5C /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = "<group>"; };
+		2C2A6F1820F8A6B100218D5C /* PBNetworkTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBNetworkTools.h; sourceTree = "<group>"; };
+		2C2A6F1920F8A6B100218D5C /* PBNetworkTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBNetworkTools.m; sourceTree = "<group>"; };
+		2C2BAFE421882A5200701C56 /* PBDocShareView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDocShareView.h; sourceTree = "<group>"; };
+		2C2BAFE521882A5200701C56 /* PBDocShareView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDocShareView.m; sourceTree = "<group>"; };
+		2C2C1201213E3A650031A71B /* PBCommentsFooterView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCommentsFooterView.h; sourceTree = "<group>"; };
+		2C2C1202213E3A650031A71B /* PBCommentsFooterView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCommentsFooterView.m; sourceTree = "<group>"; };
+		2C2CB6632125632400E35BB5 /* PBPersonTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonTableViewCell.h; sourceTree = "<group>"; };
+		2C2CB6642125632400E35BB5 /* PBPersonTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonTableViewCell.m; sourceTree = "<group>"; };
+		2C2CB6662125735700E35BB5 /* PBPersonCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonCollectionViewCell.h; sourceTree = "<group>"; };
+		2C2CB6672125735700E35BB5 /* PBPersonCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonCollectionViewCell.m; sourceTree = "<group>"; };
+		2C2E1D0321C3841D00310E81 /* STAR_bim365_com_cn.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = STAR_bim365_com_cn.cer; sourceTree = "<group>"; };
+		2C2E1D0421C3841D00310E81 /* STAR_probim_cn.cer */ = {isa = PBXFileReference; lastKnownFileType = file; path = STAR_probim_cn.cer; sourceTree = "<group>"; };
+		2C2F24C521F9B53B00549388 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; };
+		2C301BBB21E6EB52006A7F0A /* PBIssueImageTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueImageTableViewCell.h; sourceTree = "<group>"; };
+		2C301BBC21E6EB52006A7F0A /* PBIssueImageTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueImageTableViewCell.m; sourceTree = "<group>"; };
+		2C301BC121E741E5006A7F0A /* PBIssueHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueHeaderView.h; sourceTree = "<group>"; };
+		2C301BC221E741E5006A7F0A /* PBIssueHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueHeaderView.m; sourceTree = "<group>"; };
+		2C301BC421E74D56006A7F0A /* PBIssueModelListController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueModelListController.h; sourceTree = "<group>"; };
+		2C301BC521E74D56006A7F0A /* PBIssueModelListController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueModelListController.m; sourceTree = "<group>"; };
+		2C301BC721E8341B006A7F0A /* PBPositionTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPositionTableViewCell.h; sourceTree = "<group>"; };
+		2C301BC821E8341B006A7F0A /* PBPositionTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPositionTableViewCell.m; sourceTree = "<group>"; };
+		2C301BCA21E8405F006A7F0A /* PBIssueViewPointDetailsController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueViewPointDetailsController.h; sourceTree = "<group>"; };
+		2C301BCB21E8405F006A7F0A /* PBIssueViewPointDetailsController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueViewPointDetailsController.m; sourceTree = "<group>"; };
+		2C316D162202CBBC009C90FD /* PBRecordViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRecordViewController.h; sourceTree = "<group>"; };
+		2C316D172202CBBC009C90FD /* PBRecordViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRecordViewController.m; sourceTree = "<group>"; };
+		2C316D192202E11C009C90FD /* PBRecordModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRecordModel.h; sourceTree = "<group>"; };
+		2C316D1A2202E11C009C90FD /* PBRecordModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRecordModel.m; sourceTree = "<group>"; };
+		2C316D1C2202E73A009C90FD /* PBRecordTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRecordTableViewCell.h; sourceTree = "<group>"; };
+		2C316D1D2202E73A009C90FD /* PBRecordTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRecordTableViewCell.m; sourceTree = "<group>"; };
+		2C35A043212EBFB300C8E51B /* PBCommentsController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCommentsController.h; sourceTree = "<group>"; };
+		2C35A044212EBFB300C8E51B /* PBCommentsController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCommentsController.m; sourceTree = "<group>"; };
+		2C381594213F84CA00763B0B /* PBAgreementViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAgreementViewController.h; sourceTree = "<group>"; };
+		2C381595213F84CA00763B0B /* PBAgreementViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAgreementViewController.m; sourceTree = "<group>"; };
+		2C3912FF212FD8CE0055665C /* PBIssueDetailModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueDetailModel.h; sourceTree = "<group>"; };
+		2C391300212FD8CE0055665C /* PBIssueDetailModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueDetailModel.m; sourceTree = "<group>"; };
+		2C3DC802211C16AC00DC1CB6 /* PBNetworkModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBNetworkModel.h; sourceTree = "<group>"; };
+		2C3DC803211C16AC00DC1CB6 /* PBNetworkModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBNetworkModel.m; sourceTree = "<group>"; };
+		2C3E76B0214A4F15005075AA /* PBImageShowViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBImageShowViewController.h; sourceTree = "<group>"; };
+		2C3E76B1214A4F15005075AA /* PBImageShowViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBImageShowViewController.m; sourceTree = "<group>"; };
+		2C3EB3B32500E3A0005BF2DF /* PBVideoListTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBVideoListTableViewCell.h; sourceTree = "<group>"; };
+		2C3EB3B42500E3A0005BF2DF /* PBVideoListTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBVideoListTableViewCell.m; sourceTree = "<group>"; };
+		2C3EB3B625063117005BF2DF /* PBScreeningView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScreeningView.h; sourceTree = "<group>"; };
+		2C3EB3B725063117005BF2DF /* PBScreeningView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScreeningView.m; sourceTree = "<group>"; };
+		2C4472122175C83D002A9110 /* txt.shx */ = {isa = PBXFileReference; lastKnownFileType = file; path = txt.shx; sourceTree = "<group>"; };
+		2C4472132175C83D002A9110 /* marker.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = marker.zip; sourceTree = "<group>"; };
+		2C4472142175C83D002A9110 /* hztxt.shx */ = {isa = PBXFileReference; lastKnownFileType = file; path = hztxt.shx; sourceTree = "<group>"; };
+		2C4472152175C83D002A9110 /* adinit.dat */ = {isa = PBXFileReference; lastKnownFileType = file; path = adinit.dat; sourceTree = "<group>"; };
+		2C44721C2175C897002A9110 /* Error_NotThatKindOfClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Error_NotThatKindOfClass.h; sourceTree = "<group>"; };
+		2C44721D2175C897002A9110 /* DbLoftedSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLoftedSurface.h; sourceTree = "<group>"; };
+		2C44721E2175C897002A9110 /* OdResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdResult.h; sourceTree = "<group>"; };
+		2C44721F2175C897002A9110 /* QuickHeapAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickHeapAllocator.h; sourceTree = "<group>"; };
+		2C4472202175C897002A9110 /* Db2LineAngularDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Db2LineAngularDimension.h; sourceTree = "<group>"; };
+		2C4472212175C898002A9110 /* OdError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdError.h; sourceTree = "<group>"; };
+		2C4472222175C898002A9110 /* Int16Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int16Array.h; sourceTree = "<group>"; };
+		2C4472232175C898002A9110 /* DbAnnotativeObjectPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAnnotativeObjectPE.h; sourceTree = "<group>"; };
+		2C4472242175C898002A9110 /* DbHelix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbHelix.h; sourceTree = "<group>"; };
+		2C4472252175C898002A9110 /* DbBackground.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBackground.h; sourceTree = "<group>"; };
+		2C4472262175C898002A9110 /* DbVbaProject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbVbaProject.h; sourceTree = "<group>"; };
+		2C4472282175C899002A9110 /* BBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BBox.h; sourceTree = "<group>"; };
+		2C4472292175C899002A9110 /* SiExtents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SiExtents.h; sourceTree = "<group>"; };
+		2C44722A2175C899002A9110 /* SiShapePlane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SiShapePlane.h; sourceTree = "<group>"; };
+		2C44722B2175C899002A9110 /* SiSpatialIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SiSpatialIndex.h; sourceTree = "<group>"; };
+		2C44722C2175C899002A9110 /* TD_PackPush.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TD_PackPush.h; sourceTree = "<group>"; };
+		2C44722D2175C899002A9110 /* DbLayoutPaperPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayoutPaperPE.h; sourceTree = "<group>"; };
+		2C44722E2175C899002A9110 /* DbEntityWithGrData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbEntityWithGrData.h; sourceTree = "<group>"; };
+		2C44722F2175C899002A9110 /* IntArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntArray.h; sourceTree = "<group>"; };
+		2C4472302175C899002A9110 /* OdMultiset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdMultiset.h; sourceTree = "<group>"; };
+		2C4472312175C89A002A9110 /* DbDimStyleTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDimStyleTableRecord.h; sourceTree = "<group>"; };
+		2C4472322175C89A002A9110 /* OdSetLocale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdSetLocale.h; sourceTree = "<group>"; };
+		2C4472332175C89A002A9110 /* DbTextIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTextIterator.h; sourceTree = "<group>"; };
+		2C4472342175C89A002A9110 /* OdStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdStack.h; sourceTree = "<group>"; };
+		2C4472352175C89A002A9110 /* OdTrueTypeFontBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdTrueTypeFontBase.h; sourceTree = "<group>"; };
+		2C4472362175C89B002A9110 /* DbFiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFiler.h; sourceTree = "<group>"; };
+		2C4472372175C89B002A9110 /* RxDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxDictionary.h; sourceTree = "<group>"; };
+		2C4472382175C89B002A9110 /* OdHeap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdHeap.h; sourceTree = "<group>"; };
+		2C4472392175C89B002A9110 /* DbSystemServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSystemServices.h; sourceTree = "<group>"; };
+		2C44723A2175C89B002A9110 /* DbMatchProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMatchProperties.h; sourceTree = "<group>"; };
+		2C44723B2175C89B002A9110 /* RxDynamicModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxDynamicModule.h; sourceTree = "<group>"; };
+		2C44723C2175C89C002A9110 /* DbAudit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAudit.h; sourceTree = "<group>"; };
+		2C44723D2175C89C002A9110 /* odaxwrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = odaxwrap.h; sourceTree = "<group>"; };
+		2C44723E2175C89C002A9110 /* RxSysRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxSysRegistry.h; sourceTree = "<group>"; };
+		2C44723F2175C89C002A9110 /* OdBinaryData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdBinaryData.h; sourceTree = "<group>"; };
+		2C4472402175C89C002A9110 /* DbPlaneSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPlaneSurface.h; sourceTree = "<group>"; };
+		2C4472412175C89C002A9110 /* summinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = summinfo.h; sourceTree = "<group>"; };
+		2C4472422175C89D002A9110 /* ThreadsCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThreadsCounter.h; sourceTree = "<group>"; };
+		2C4472432175C89D002A9110 /* TDTypeLibReg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TDTypeLibReg.h; sourceTree = "<group>"; };
+		2C4472442175C89D002A9110 /* DbLinkedTableData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLinkedTableData.h; sourceTree = "<group>"; };
+		2C4472452175C89D002A9110 /* ApLongTransactions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApLongTransactions.h; sourceTree = "<group>"; };
+		2C4472462175C89D002A9110 /* Db2dVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Db2dVertex.h; sourceTree = "<group>"; };
+		2C4472472175C89D002A9110 /* DbViewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewport.h; sourceTree = "<group>"; };
+		2C4472482175C89E002A9110 /* OleStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OleStorage.h; sourceTree = "<group>"; };
+		2C44724A2175C89E002A9110 /* ErrorDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ErrorDefs.h; sourceTree = "<group>"; };
+		2C44724B2175C89E002A9110 /* GeVariant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeVariant.h; sourceTree = "<group>"; };
+		2C44724C2175C89E002A9110 /* Tf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tf.h; sourceTree = "<group>"; };
+		2C44724D2175C89E002A9110 /* TfDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TfDatabase.h; sourceTree = "<group>"; };
+		2C44724E2175C89E002A9110 /* TfExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TfExport.h; sourceTree = "<group>"; };
+		2C44724F2175C89E002A9110 /* TfObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TfObject.h; sourceTree = "<group>"; };
+		2C4472502175C89E002A9110 /* TfObjectReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TfObjectReactor.h; sourceTree = "<group>"; };
+		2C4472512175C89E002A9110 /* TfResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TfResult.h; sourceTree = "<group>"; };
+		2C4472522175C89E002A9110 /* TfVariant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TfVariant.h; sourceTree = "<group>"; };
+		2C4472532175C89E002A9110 /* DbSymUtl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSymUtl.h; sourceTree = "<group>"; };
+		2C4472542175C89E002A9110 /* RxDispatchImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxDispatchImpl.h; sourceTree = "<group>"; };
+		2C4472552175C89E002A9110 /* RxDLinkerReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxDLinkerReactor.h; sourceTree = "<group>"; };
+		2C4472562175C89F002A9110 /* RxModuleDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxModuleDefs.h; sourceTree = "<group>"; };
+		2C4472572175C89F002A9110 /* ResBuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResBuf.h; sourceTree = "<group>"; };
+		2C4472582175C89F002A9110 /* UInt8Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UInt8Array.h; sourceTree = "<group>"; };
+		2C4472592175C89F002A9110 /* DbBlockBegin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockBegin.h; sourceTree = "<group>"; };
+		2C44725B2175C89F002A9110 /* BrepRendererImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrepRendererImpl.h; sourceTree = "<group>"; };
+		2C44725C2175C8A0002A9110 /* DbPlotSettingsValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPlotSettingsValidator.h; sourceTree = "<group>"; };
+		2C44725D2175C8A0002A9110 /* DbOrdinateDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbOrdinateDimension.h; sourceTree = "<group>"; };
+		2C44725F2175C8A0002A9110 /* ABExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ABExport.h; sourceTree = "<group>"; };
+		2C4472602175C8A0002A9110 /* ISatConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ISatConverter.h; sourceTree = "<group>"; };
+		2C4472612175C8A0002A9110 /* OdErrorWithId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdErrorWithId.h; sourceTree = "<group>"; };
+		2C4472622175C8A0002A9110 /* DbFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFrame.h; sourceTree = "<group>"; };
+		2C4472632175C8A0002A9110 /* DbRevolveOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRevolveOptions.h; sourceTree = "<group>"; };
+		2C4472652175C8A1002A9110 /* AveDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AveDefs.h; sourceTree = "<group>"; };
+		2C4472662175C8A1002A9110 /* AveExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AveExport.h; sourceTree = "<group>"; };
+		2C4472672175C8A1002A9110 /* AveLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AveLight.h; sourceTree = "<group>"; };
+		2C4472682175C8A1002A9110 /* AveMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AveMapping.h; sourceTree = "<group>"; };
+		2C4472692175C8A1002A9110 /* AveMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AveMaterial.h; sourceTree = "<group>"; };
+		2C44726A2175C8A1002A9110 /* AveRender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AveRender.h; sourceTree = "<group>"; };
+		2C44726B2175C8A1002A9110 /* AveScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AveScene.h; sourceTree = "<group>"; };
+		2C44726C2175C8A1002A9110 /* HatchPatternManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HatchPatternManager.h; sourceTree = "<group>"; };
+		2C44726D2175C8A1002A9110 /* OdAuditInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdAuditInfo.h; sourceTree = "<group>"; };
+		2C44726E2175C8A1002A9110 /* DbPlaceHolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPlaceHolder.h; sourceTree = "<group>"; };
+		2C44726F2175C8A1002A9110 /* OdFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdFont.h; sourceTree = "<group>"; };
+		2C4472702175C8A2002A9110 /* OdRound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdRound.h; sourceTree = "<group>"; };
+		2C4472712175C8A2002A9110 /* DbRootExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRootExport.h; sourceTree = "<group>"; };
+		2C4472722175C8A2002A9110 /* RxThreadPoolService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxThreadPoolService.h; sourceTree = "<group>"; };
+		2C4472732175C8A2002A9110 /* OdAllocExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdAllocExport.h; sourceTree = "<group>"; };
+		2C4472742175C8A2002A9110 /* DbIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbIndex.h; sourceTree = "<group>"; };
+		2C4472752175C8A3002A9110 /* DbMText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMText.h; sourceTree = "<group>"; };
+		2C4472762175C8A3002A9110 /* DbAbstractViewportDataForDbVpTabRec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractViewportDataForDbVpTabRec.h; sourceTree = "<group>"; };
+		2C4472772175C8A3002A9110 /* CloneFilers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CloneFilers.h; sourceTree = "<group>"; };
+		2C4472782175C8A3002A9110 /* TDVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TDVersion.h; sourceTree = "<group>"; };
+		2C4472792175C8A3002A9110 /* OdModuleNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdModuleNames.h; sourceTree = "<group>"; };
+		2C44727A2175C8A3002A9110 /* ThumbnailImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThumbnailImage.h; sourceTree = "<group>"; };
+		2C44727B2175C8A4002A9110 /* DbViewTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewTable.h; sourceTree = "<group>"; };
+		2C44727C2175C8A4002A9110 /* OdErrorContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdErrorContext.h; sourceTree = "<group>"; };
+		2C44727D2175C8A4002A9110 /* include.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = include.dsp; sourceTree = "<group>"; };
+		2C44727E2175C8A4002A9110 /* OdValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdValue.h; sourceTree = "<group>"; };
+		2C44727F2175C8A4002A9110 /* OdArrayPreDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdArrayPreDef.h; sourceTree = "<group>"; };
+		2C4472802175C8A5002A9110 /* LoadReasons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadReasons.h; sourceTree = "<group>"; };
+		2C4472812175C8A5002A9110 /* RxOverrule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxOverrule.h; sourceTree = "<group>"; };
+		2C4472822175C8A5002A9110 /* DbRay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRay.h; sourceTree = "<group>"; };
+		2C4472832175C8A5002A9110 /* DbGripPoints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGripPoints.h; sourceTree = "<group>"; };
+		2C4472842175C8A5002A9110 /* SharedPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedPtr.h; sourceTree = "<group>"; };
+		2C4472852175C8A6002A9110 /* DbObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObject.h; sourceTree = "<group>"; };
+		2C4472862175C8A6002A9110 /* DbField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbField.h; sourceTree = "<group>"; };
+		2C4472872175C8A6002A9110 /* PdfExportService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdfExportService.h; sourceTree = "<group>"; };
+		2C4472882175C8A6002A9110 /* DbRasterImageDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRasterImageDef.h; sourceTree = "<group>"; };
+		2C4472892175C8A6002A9110 /* DbPlotSettingsValidatorPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPlotSettingsValidatorPE.h; sourceTree = "<group>"; };
+		2C44728A2175C8A7002A9110 /* DbPolyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPolyline.h; sourceTree = "<group>"; };
+		2C44728B2175C8A7002A9110 /* DbModelerGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbModelerGeometry.h; sourceTree = "<group>"; };
+		2C44728C2175C8A7002A9110 /* DbHatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbHatch.h; sourceTree = "<group>"; };
+		2C44728D2175C8A7002A9110 /* FdField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FdField.h; sourceTree = "<group>"; };
+		2C44728E2175C8A7002A9110 /* DbSpline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSpline.h; sourceTree = "<group>"; };
+		2C44728F2175C8A8002A9110 /* ModelerHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelerHistory.h; sourceTree = "<group>"; };
+		2C4472902175C8A8002A9110 /* DbObjectContextManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectContextManager.h; sourceTree = "<group>"; };
+		2C4472912175C8A8002A9110 /* DbShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShape.h; sourceTree = "<group>"; };
+		2C4472922175C8A8002A9110 /* DbGeoData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGeoData.h; sourceTree = "<group>"; };
+		2C4472932175C8A8002A9110 /* DbPlotSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPlotSettings.h; sourceTree = "<group>"; };
+		2C4472942175C8A8002A9110 /* OdCharMapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdCharMapper.h; sourceTree = "<group>"; };
+		2C4472962175C8A9002A9110 /* DbAssocPersSubentManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAssocPersSubentManager.h; sourceTree = "<group>"; };
+		2C4472972175C8A9002A9110 /* DbManagerSubentData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbManagerSubentData.h; sourceTree = "<group>"; };
+		2C4472982175C8A9002A9110 /* DbShBoolean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShBoolean.h; sourceTree = "<group>"; };
+		2C4472992175C8A9002A9110 /* DbShBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShBox.h; sourceTree = "<group>"; };
+		2C44729A2175C8A9002A9110 /* DbShBrep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShBrep.h; sourceTree = "<group>"; };
+		2C44729B2175C8A9002A9110 /* DbShChamfer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShChamfer.h; sourceTree = "<group>"; };
+		2C44729C2175C8A9002A9110 /* DbShCylinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShCylinder.h; sourceTree = "<group>"; };
+		2C44729D2175C8A9002A9110 /* DbShExtrusion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShExtrusion.h; sourceTree = "<group>"; };
+		2C44729E2175C8A9002A9110 /* DbShFillet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShFillet.h; sourceTree = "<group>"; };
+		2C44729F2175C8A9002A9110 /* DbShHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShHistory.h; sourceTree = "<group>"; };
+		2C4472A02175C8A9002A9110 /* DbShHistoryNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShHistoryNode.h; sourceTree = "<group>"; };
+		2C4472A12175C8A9002A9110 /* DbShLoft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShLoft.h; sourceTree = "<group>"; };
+		2C4472A22175C8A9002A9110 /* DbShModelerHistoryImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShModelerHistoryImpl.h; sourceTree = "<group>"; };
+		2C4472A32175C8A9002A9110 /* DbShPrimitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShPrimitive.h; sourceTree = "<group>"; };
+		2C4472A42175C8A9002A9110 /* DbShPyramid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShPyramid.h; sourceTree = "<group>"; };
+		2C4472A52175C8A9002A9110 /* DbShRevolve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShRevolve.h; sourceTree = "<group>"; };
+		2C4472A62175C8A9002A9110 /* DbShSphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShSphere.h; sourceTree = "<group>"; };
+		2C4472A72175C8A9002A9110 /* DbShSubentColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShSubentColor.h; sourceTree = "<group>"; };
+		2C4472A82175C8A9002A9110 /* DbShSubentMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShSubentMaterial.h; sourceTree = "<group>"; };
+		2C4472A92175C8A9002A9110 /* DbShSweep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShSweep.h; sourceTree = "<group>"; };
+		2C4472AA2175C8A9002A9110 /* DbShTorus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShTorus.h; sourceTree = "<group>"; };
+		2C4472AB2175C8A9002A9110 /* DbShWedge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbShWedge.h; sourceTree = "<group>"; };
+		2C4472AC2175C8A9002A9110 /* TD_3DSolidHistoryDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TD_3DSolidHistoryDef.h; sourceTree = "<group>"; };
+		2C4472AD2175C8A9002A9110 /* Db3PointAngularDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Db3PointAngularDimension.h; sourceTree = "<group>"; };
+		2C4472AE2175C8A9002A9110 /* DbGeEdgesDxfIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGeEdgesDxfIO.h; sourceTree = "<group>"; };
+		2C4472AF2175C8A9002A9110 /* DbSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSection.h; sourceTree = "<group>"; };
+		2C4472B02175C8A9002A9110 /* DbTextStyleTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTextStyleTableRecord.h; sourceTree = "<group>"; };
+		2C4472B12175C8AA002A9110 /* RemoteGeomProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteGeomProxy.h; sourceTree = "<group>"; };
+		2C4472B22175C8AA002A9110 /* DbDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDatabase.h; sourceTree = "<group>"; };
+		2C4472B32175C8AA002A9110 /* AcadPalette.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AcadPalette.h; sourceTree = "<group>"; };
+		2C4472B42175C8AA002A9110 /* DbWipeoutVariables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbWipeoutVariables.h; sourceTree = "<group>"; };
+		2C4472B52175C8AB002A9110 /* DbHostAppProgressMeter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbHostAppProgressMeter.h; sourceTree = "<group>"; };
+		2C4472B62175C8AB002A9110 /* Int32Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int32Array.h; sourceTree = "<group>"; };
+		2C4472B72175C8AB002A9110 /* SlotManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlotManager.h; sourceTree = "<group>"; };
+		2C4472B82175C8AB002A9110 /* DbLongTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLongTransaction.h; sourceTree = "<group>"; };
+		2C4472B92175C8AB002A9110 /* TextDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextDefs.h; sourceTree = "<group>"; };
+		2C4472BA2175C8AB002A9110 /* DbXrefObjectId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbXrefObjectId.h; sourceTree = "<group>"; };
+		2C4472BB2175C8AC002A9110 /* OdCodePage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdCodePage.h; sourceTree = "<group>"; };
+		2C4472BC2175C8AC002A9110 /* DbLinetypeTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLinetypeTableRecord.h; sourceTree = "<group>"; };
+		2C4472BD2175C8AC002A9110 /* DbCompoundObjectId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbCompoundObjectId.h; sourceTree = "<group>"; };
+		2C4472BE2175C8AC002A9110 /* RefCountImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RefCountImpl.h; sourceTree = "<group>"; };
+		2C4472BF2175C8AC002A9110 /* MemFileStreamImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemFileStreamImpl.h; sourceTree = "<group>"; };
+		2C4472C02175C8AD002A9110 /* RxObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxObject.h; sourceTree = "<group>"; };
+		2C4472C12175C8AD002A9110 /* Db3dPolylineVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Db3dPolylineVertex.h; sourceTree = "<group>"; };
+		2C4472C32175C8AD002A9110 /* wrExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrExport.h; sourceTree = "<group>"; };
+		2C4472C42175C8AD002A9110 /* wrTriangulationParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wrTriangulationParams.h; sourceTree = "<group>"; };
+		2C4472C52175C8AD002A9110 /* DbDiesel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDiesel.h; sourceTree = "<group>"; };
+		2C4472C62175C8AD002A9110 /* OdFontServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdFontServices.h; sourceTree = "<group>"; };
+		2C4472C82175C8AE002A9110 /* PlotStyles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlotStyles.h; sourceTree = "<group>"; };
+		2C4472C92175C8AE002A9110 /* StdStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StdStrings.h; sourceTree = "<group>"; };
+		2C4472CA2175C8AE002A9110 /* DebugStuff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugStuff.h; sourceTree = "<group>"; };
+		2C4472CB2175C8AE002A9110 /* ModelerGeometryCreator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelerGeometryCreator.h; sourceTree = "<group>"; };
+		2C4472CC2175C8AE002A9110 /* OdUnidirectionalList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdUnidirectionalList.h; sourceTree = "<group>"; };
+		2C4472CD2175C8AF002A9110 /* DbViewTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewTableRecord.h; sourceTree = "<group>"; };
+		2C4472CE2175C8AF002A9110 /* DbEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbEntity.h; sourceTree = "<group>"; };
+		2C4472CF2175C8AF002A9110 /* DbCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbCamera.h; sourceTree = "<group>"; };
+		2C4472D02175C8AF002A9110 /* DbLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayout.h; sourceTree = "<group>"; };
+		2C4472D12175C8AF002A9110 /* MaterialResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaterialResolver.h; sourceTree = "<group>"; };
+		2C4472D22175C8AF002A9110 /* DbUnderlayReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUnderlayReference.h; sourceTree = "<group>"; };
+		2C4472D42175C8B0002A9110 /* DbAssocProjectedEntityPersSubentIdHolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAssocProjectedEntityPersSubentIdHolder.h; sourceTree = "<group>"; };
+		2C4472D52175C8B0002A9110 /* DbDetailSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDetailSymbol.h; sourceTree = "<group>"; };
+		2C4472D62175C8B0002A9110 /* DbSectionSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSectionSymbol.h; sourceTree = "<group>"; };
+		2C4472D72175C8B0002A9110 /* DbSynergy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSynergy.h; sourceTree = "<group>"; };
+		2C4472D82175C8B0002A9110 /* DbViewBorder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewBorder.h; sourceTree = "<group>"; };
+		2C4472D92175C8B0002A9110 /* DbViewRep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRep.h; sourceTree = "<group>"; };
+		2C4472DA2175C8B0002A9110 /* DbViewRepBlockReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepBlockReference.h; sourceTree = "<group>"; };
+		2C4472DB2175C8B0002A9110 /* DbViewRepCutDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepCutDefinition.h; sourceTree = "<group>"; };
+		2C4472DC2175C8B0002A9110 /* DbViewRepDetailDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepDetailDefinition.h; sourceTree = "<group>"; };
+		2C4472DD2175C8B0002A9110 /* DbViewRepImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepImage.h; sourceTree = "<group>"; };
+		2C4472DE2175C8B0002A9110 /* DbViewRepInventorSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepInventorSource.h; sourceTree = "<group>"; };
+		2C4472DF2175C8B0002A9110 /* DbViewRepModelPlaneDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepModelPlaneDef.h; sourceTree = "<group>"; };
+		2C4472E02175C8B0002A9110 /* DbViewRepModelSpaceSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepModelSpaceSource.h; sourceTree = "<group>"; };
+		2C4472E12175C8B0002A9110 /* DbViewRepModelSpaceViewSelSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepModelSpaceViewSelSet.h; sourceTree = "<group>"; };
+		2C4472E22175C8B0002A9110 /* DbViewRepOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepOrientation.h; sourceTree = "<group>"; };
+		2C4472E32175C8B0002A9110 /* DbViewRepOrientationDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepOrientationDef.h; sourceTree = "<group>"; };
+		2C4472E42175C8B0002A9110 /* DbViewRepProjectionDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepProjectionDef.h; sourceTree = "<group>"; };
+		2C4472E52175C8B0002A9110 /* DbViewRepSectionDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepSectionDefinition.h; sourceTree = "<group>"; };
+		2C4472E62175C8B0002A9110 /* DbViewRepSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepSource.h; sourceTree = "<group>"; };
+		2C4472E72175C8B0002A9110 /* DbViewRepSourceMgr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepSourceMgr.h; sourceTree = "<group>"; };
+		2C4472E82175C8B0002A9110 /* DbViewRepStandard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewRepStandard.h; sourceTree = "<group>"; };
+		2C4472E92175C8B0002A9110 /* DbViewSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewSymbol.h; sourceTree = "<group>"; };
+		2C4472EA2175C8B0002A9110 /* ModelDocObjExports.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelDocObjExports.h; sourceTree = "<group>"; };
+		2C4472EB2175C8B0002A9110 /* RxSketchManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxSketchManager.h; sourceTree = "<group>"; };
+		2C4472EC2175C8B0002A9110 /* RxSketchManagerImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxSketchManagerImpl.h; sourceTree = "<group>"; };
+		2C4472ED2175C8B0002A9110 /* RxSketchObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxSketchObject.h; sourceTree = "<group>"; };
+		2C4472EE2175C8B0002A9110 /* DbArcAlignedText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbArcAlignedText.h; sourceTree = "<group>"; };
+		2C4472EF2175C8B0002A9110 /* DbPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPoint.h; sourceTree = "<group>"; };
+		2C4472F02175C8B0002A9110 /* DbLoftOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLoftOptions.h; sourceTree = "<group>"; };
+		2C4472F12175C8B0002A9110 /* Db3dSolid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Db3dSolid.h; sourceTree = "<group>"; };
+		2C4472F22175C8B1002A9110 /* OdFileDepMgr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdFileDepMgr.h; sourceTree = "<group>"; };
+		2C4472F32175C8B1002A9110 /* DbBaseDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBaseDatabase.h; sourceTree = "<group>"; };
+		2C4472F52175C8B1002A9110 /* SpaModeler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpaModeler.h; sourceTree = "<group>"; };
+		2C4472F62175C8B1002A9110 /* SpaModelerExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpaModelerExport.h; sourceTree = "<group>"; };
+		2C4472F72175C8B1002A9110 /* SpaParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpaParameters.h; sourceTree = "<group>"; };
+		2C4472F82175C8B1002A9110 /* DbBlockTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockTableRecord.h; sourceTree = "<group>"; };
+		2C4472F92175C8B1002A9110 /* DbPolygonMeshVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPolygonMeshVertex.h; sourceTree = "<group>"; };
+		2C4472FA2175C8B2002A9110 /* DbDgnUnderlayHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDgnUnderlayHost.h; sourceTree = "<group>"; };
+		2C4472FB2175C8B2002A9110 /* DbExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbExport.h; sourceTree = "<group>"; };
+		2C4472FC2175C8B2002A9110 /* DbSun.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSun.h; sourceTree = "<group>"; };
+		2C4472FD2175C8B2002A9110 /* RootExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RootExport.h; sourceTree = "<group>"; };
+		2C4472FE2175C8B2002A9110 /* DbUnitsFormatterImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUnitsFormatterImpl.h; sourceTree = "<group>"; };
+		2C4472FF2175C8B3002A9110 /* OdMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdMemory.h; sourceTree = "<group>"; };
+		2C4473002175C8B3002A9110 /* DbStubPtrArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbStubPtrArray.h; sourceTree = "<group>"; };
+		2C4473012175C8B3002A9110 /* DbDimStyleTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDimStyleTable.h; sourceTree = "<group>"; };
+		2C4473022175C8B3002A9110 /* DbFieldValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFieldValue.h; sourceTree = "<group>"; };
+		2C4473032175C8B3002A9110 /* DbXrefGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbXrefGraph.h; sourceTree = "<group>"; };
+		2C4473042175C8B4002A9110 /* DbDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDimension.h; sourceTree = "<group>"; };
+		2C4473052175C8B4002A9110 /* DbDimAssoc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDimAssoc.h; sourceTree = "<group>"; };
+		2C4473062175C8B4002A9110 /* DbVisualStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbVisualStyle.h; sourceTree = "<group>"; };
+		2C4473072175C8B4002A9110 /* DbRadialDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRadialDimension.h; sourceTree = "<group>"; };
+		2C4473082175C8B4002A9110 /* OdPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdPath.h; sourceTree = "<group>"; };
+		2C4473092175C8B5002A9110 /* DbSpatialFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSpatialFilter.h; sourceTree = "<group>"; };
+		2C44730A2175C8B5002A9110 /* DbPersSubentManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPersSubentManager.h; sourceTree = "<group>"; };
+		2C44730B2175C8B5002A9110 /* GiContextForDbDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiContextForDbDatabase.h; sourceTree = "<group>"; };
+		2C44730C2175C8B5002A9110 /* DbGsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGsManager.h; sourceTree = "<group>"; };
+		2C44730D2175C8B5002A9110 /* DbSSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSSet.h; sourceTree = "<group>"; };
+		2C44730E2175C8B6002A9110 /* OdaCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdaCommon.h; sourceTree = "<group>"; };
+		2C44730F2175C8B6002A9110 /* DbBlockReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockReference.h; sourceTree = "<group>"; };
+		2C4473102175C8B6002A9110 /* DimVarDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DimVarDefs.h; sourceTree = "<group>"; };
+		2C4473112175C8B6002A9110 /* DbObjectId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectId.h; sourceTree = "<group>"; };
+		2C4473122175C8B6002A9110 /* DbGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGraph.h; sourceTree = "<group>"; };
+		2C4473132175C8B7002A9110 /* OdaSTL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdaSTL.h; sourceTree = "<group>"; };
+		2C4473142175C8B7002A9110 /* DbSymbolTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSymbolTableRecord.h; sourceTree = "<group>"; };
+		2C4473152175C8B7002A9110 /* DbImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbImage.h; sourceTree = "<group>"; };
+		2C4473162175C8B7002A9110 /* DbClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbClass.h; sourceTree = "<group>"; };
+		2C4473172175C8B7002A9110 /* Objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Objects.h; sourceTree = "<group>"; };
+		2C4473182175C8B7002A9110 /* OdUtilAds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdUtilAds.h; sourceTree = "<group>"; };
+		2C44731A2175C8B8002A9110 /* BrBrep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrBrep.h; sourceTree = "<group>"; };
+		2C44731B2175C8B8002A9110 /* BrBrepComplexTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrBrepComplexTraverser.h; sourceTree = "<group>"; };
+		2C44731C2175C8B8002A9110 /* BrBrepEdgeTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrBrepEdgeTraverser.h; sourceTree = "<group>"; };
+		2C44731D2175C8B8002A9110 /* BrBrepFaceTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrBrepFaceTraverser.h; sourceTree = "<group>"; };
+		2C44731E2175C8B8002A9110 /* BrBrepShellTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrBrepShellTraverser.h; sourceTree = "<group>"; };
+		2C44731F2175C8B8002A9110 /* BrBrepVertexTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrBrepVertexTraverser.h; sourceTree = "<group>"; };
+		2C4473202175C8B8002A9110 /* BrComplex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrComplex.h; sourceTree = "<group>"; };
+		2C4473212175C8B8002A9110 /* BrComplexShellTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrComplexShellTraverser.h; sourceTree = "<group>"; };
+		2C4473222175C8B8002A9110 /* BrEdge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrEdge.h; sourceTree = "<group>"; };
+		2C4473232175C8B8002A9110 /* BrEdgeLoopTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrEdgeLoopTraverser.h; sourceTree = "<group>"; };
+		2C4473242175C8B8002A9110 /* BrElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrElement.h; sourceTree = "<group>"; };
+		2C4473252175C8B8002A9110 /* BrElement2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrElement2d.h; sourceTree = "<group>"; };
+		2C4473262175C8B8002A9110 /* BrElement2dNodeTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrElement2dNodeTraverser.h; sourceTree = "<group>"; };
+		2C4473272175C8B8002A9110 /* BrEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrEntity.h; sourceTree = "<group>"; };
+		2C4473282175C8B8002A9110 /* BrEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrEnums.h; sourceTree = "<group>"; };
+		2C4473292175C8B8002A9110 /* BrExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrExport.h; sourceTree = "<group>"; };
+		2C44732A2175C8B8002A9110 /* BrFace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrFace.h; sourceTree = "<group>"; };
+		2C44732B2175C8B8002A9110 /* BrFaceLoopTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrFaceLoopTraverser.h; sourceTree = "<group>"; };
+		2C44732C2175C8B8002A9110 /* BrHit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrHit.h; sourceTree = "<group>"; };
+		2C44732D2175C8B8002A9110 /* BrLoop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrLoop.h; sourceTree = "<group>"; };
+		2C44732E2175C8B8002A9110 /* BrLoopEdgeTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrLoopEdgeTraverser.h; sourceTree = "<group>"; };
+		2C44732F2175C8B8002A9110 /* BrLoopVertexTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrLoopVertexTraverser.h; sourceTree = "<group>"; };
+		2C4473302175C8B8002A9110 /* BrMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrMesh.h; sourceTree = "<group>"; };
+		2C4473312175C8B8002A9110 /* BrMesh2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrMesh2d.h; sourceTree = "<group>"; };
+		2C4473322175C8B8002A9110 /* BrMesh2dControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrMesh2dControl.h; sourceTree = "<group>"; };
+		2C4473332175C8B8002A9110 /* BrMesh2dElement2dTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrMesh2dElement2dTraverser.h; sourceTree = "<group>"; };
+		2C4473342175C8B8002A9110 /* BrMesh2dFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrMesh2dFilter.h; sourceTree = "<group>"; };
+		2C4473352175C8B8002A9110 /* BrMeshControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrMeshControl.h; sourceTree = "<group>"; };
+		2C4473362175C8B8002A9110 /* BrMeshEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrMeshEntity.h; sourceTree = "<group>"; };
+		2C4473372175C8B8002A9110 /* BrNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrNode.h; sourceTree = "<group>"; };
+		2C4473382175C8B8002A9110 /* BrShell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrShell.h; sourceTree = "<group>"; };
+		2C4473392175C8B8002A9110 /* BrShellFaceTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrShellFaceTraverser.h; sourceTree = "<group>"; };
+		2C44733A2175C8B8002A9110 /* BrTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrTraverser.h; sourceTree = "<group>"; };
+		2C44733B2175C8B8002A9110 /* BrVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrVertex.h; sourceTree = "<group>"; };
+		2C44733C2175C8B8002A9110 /* BrVertexEdgeTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrVertexEdgeTraverser.h; sourceTree = "<group>"; };
+		2C44733D2175C8B8002A9110 /* BrVertexLoopTraverser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrVertexLoopTraverser.h; sourceTree = "<group>"; };
+		2C44733E2175C8B8002A9110 /* DbGeEdgesDwgIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGeEdgesDwgIO.h; sourceTree = "<group>"; };
+		2C44733F2175C8B8002A9110 /* DbSolid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSolid.h; sourceTree = "<group>"; };
+		2C4473402175C8B8002A9110 /* DbScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbScale.h; sourceTree = "<group>"; };
+		2C4473422175C8B9002A9110 /* Gi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gi.h; sourceTree = "<group>"; };
+		2C4473432175C8B9002A9110 /* GiAbstractClipBoundary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiAbstractClipBoundary.h; sourceTree = "<group>"; };
+		2C4473442175C8B9002A9110 /* GiAnnoScaleSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiAnnoScaleSet.h; sourceTree = "<group>"; };
+		2C4473452175C8B9002A9110 /* GiBaseVectorizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiBaseVectorizer.h; sourceTree = "<group>"; };
+		2C4473462175C8B9002A9110 /* GiClipBoundary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiClipBoundary.h; sourceTree = "<group>"; };
+		2C4473472175C8B9002A9110 /* GiCommonDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiCommonDraw.h; sourceTree = "<group>"; };
+		2C4473482175C8B9002A9110 /* GiContextualColors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiContextualColors.h; sourceTree = "<group>"; };
+		2C4473492175C8B9002A9110 /* GiConveyorConnector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiConveyorConnector.h; sourceTree = "<group>"; };
+		2C44734A2175C8B9002A9110 /* GiConveyorEmbranchment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiConveyorEmbranchment.h; sourceTree = "<group>"; };
+		2C44734B2175C8B9002A9110 /* GiConveyorEntryPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiConveyorEntryPoint.h; sourceTree = "<group>"; };
+		2C44734C2175C8B9002A9110 /* GiConveyorGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiConveyorGeometry.h; sourceTree = "<group>"; };
+		2C44734D2175C8B9002A9110 /* GiConveyorNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiConveyorNode.h; sourceTree = "<group>"; };
+		2C44734E2175C8B9002A9110 /* GiDeviation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDeviation.h; sourceTree = "<group>"; };
+		2C44734F2175C8B9002A9110 /* GiDgLinetype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDgLinetype.h; sourceTree = "<group>"; };
+		2C4473502175C8B9002A9110 /* GiDgLinetyper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDgLinetyper.h; sourceTree = "<group>"; };
+		2C4473512175C8B9002A9110 /* GiDrawable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDrawable.h; sourceTree = "<group>"; };
+		2C4473522175C8B9002A9110 /* GiDrawableImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDrawableImpl.h; sourceTree = "<group>"; };
+		2C4473532175C8B9002A9110 /* GiDrawImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDrawImpl.h; sourceTree = "<group>"; };
+		2C4473542175C8B9002A9110 /* GiDrawStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDrawStream.h; sourceTree = "<group>"; };
+		2C4473552175C8B9002A9110 /* GiDummyGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDummyGeometry.h; sourceTree = "<group>"; };
+		2C4473562175C8B9002A9110 /* GiEmptyGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiEmptyGeometry.h; sourceTree = "<group>"; };
+		2C4473572175C8B9002A9110 /* GiEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiEnvironment.h; sourceTree = "<group>"; };
+		2C4473582175C8B9002A9110 /* GiEnvironmentTraitsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiEnvironmentTraitsData.h; sourceTree = "<group>"; };
+		2C4473592175C8B9002A9110 /* GiExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiExport.h; sourceTree = "<group>"; };
+		2C44735A2175C8B9002A9110 /* GiExtAccum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiExtAccum.h; sourceTree = "<group>"; };
+		2C44735B2175C8B9002A9110 /* GiExtents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiExtents.h; sourceTree = "<group>"; };
+		2C44735C2175C8B9002A9110 /* GiFaceEdgeDataTraitsSaver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiFaceEdgeDataTraitsSaver.h; sourceTree = "<group>"; };
+		2C44735D2175C8B9002A9110 /* GiFastExtCalc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiFastExtCalc.h; sourceTree = "<group>"; };
+		2C44735E2175C8B9002A9110 /* GiFill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiFill.h; sourceTree = "<group>"; };
+		2C44735F2175C8B9002A9110 /* GiGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiGeometry.h; sourceTree = "<group>"; };
+		2C4473602175C8B9002A9110 /* GiGeometryRecorderPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiGeometryRecorderPlayer.h; sourceTree = "<group>"; };
+		2C4473612175C8B9002A9110 /* GiGeometrySimplifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiGeometrySimplifier.h; sourceTree = "<group>"; };
+		2C4473622175C8B9002A9110 /* GiHLRemover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiHLRemover.h; sourceTree = "<group>"; };
+		2C4473632175C8B9002A9110 /* GiHlrResults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiHlrResults.h; sourceTree = "<group>"; };
+		2C4473642175C8B9002A9110 /* GiImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiImage.h; sourceTree = "<group>"; };
+		2C4473652175C8B9002A9110 /* GiLayerTraitsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiLayerTraitsData.h; sourceTree = "<group>"; };
+		2C4473662175C8B9002A9110 /* GiLightTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiLightTraits.h; sourceTree = "<group>"; };
+		2C4473672175C8B9002A9110 /* GiLightTraitsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiLightTraitsData.h; sourceTree = "<group>"; };
+		2C4473682175C8B9002A9110 /* GiLinetype.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiLinetype.h; sourceTree = "<group>"; };
+		2C4473692175C8B9002A9110 /* GiLinetyper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiLinetyper.h; sourceTree = "<group>"; };
+		2C44736A2175C8B9002A9110 /* GiLinetypeRedir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiLinetypeRedir.h; sourceTree = "<group>"; };
+		2C44736B2175C8B9002A9110 /* GiLocalDrawableDesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiLocalDrawableDesc.h; sourceTree = "<group>"; };
+		2C44736C2175C8B9002A9110 /* GiMapperItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiMapperItem.h; sourceTree = "<group>"; };
+		2C44736D2175C8B9002A9110 /* GiMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiMaterial.h; sourceTree = "<group>"; };
+		2C44736E2175C8B9002A9110 /* GiMaterialItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiMaterialItem.h; sourceTree = "<group>"; };
+		2C44736F2175C8B9002A9110 /* GiMaterialTraitsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiMaterialTraitsData.h; sourceTree = "<group>"; };
+		2C4473702175C8B9002A9110 /* GiMetafile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiMetafile.h; sourceTree = "<group>"; };
+		2C4473712175C8B9002A9110 /* GiMetafiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiMetafiler.h; sourceTree = "<group>"; };
+		2C4473722175C8B9002A9110 /* GiModelToViewProc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiModelToViewProc.h; sourceTree = "<group>"; };
+		2C4473732175C8B9002A9110 /* GiNoiseGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiNoiseGenerator.h; sourceTree = "<group>"; };
+		2C4473742175C8B9002A9110 /* GiNonEntityTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiNonEntityTraits.h; sourceTree = "<group>"; };
+		2C4473752175C8B9002A9110 /* GiOrthoClipper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiOrthoClipper.h; sourceTree = "<group>"; };
+		2C4473762175C8B9002A9110 /* GiOrthoClipperEx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiOrthoClipperEx.h; sourceTree = "<group>"; };
+		2C4473772175C8B9002A9110 /* GiOrthoPrismIntersector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiOrthoPrismIntersector.h; sourceTree = "<group>"; };
+		2C4473782175C8B9002A9110 /* GiPalette.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiPalette.h; sourceTree = "<group>"; };
+		2C4473792175C8B9002A9110 /* GiPathNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiPathNode.h; sourceTree = "<group>"; };
+		2C44737A2175C8B9002A9110 /* GiPerspectivePreprocessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiPerspectivePreprocessor.h; sourceTree = "<group>"; };
+		2C44737B2175C8B9002A9110 /* GiPlaneProjector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiPlaneProjector.h; sourceTree = "<group>"; };
+		2C44737C2175C8B9002A9110 /* GiPlotGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiPlotGenerator.h; sourceTree = "<group>"; };
+		2C44737D2175C8B9002A9110 /* GiPlotStyleDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiPlotStyleDefs.h; sourceTree = "<group>"; };
+		2C44737E2175C8B9002A9110 /* GiPolyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiPolyline.h; sourceTree = "<group>"; };
+		2C44737F2175C8B9002A9110 /* GiProceduralGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiProceduralGenerator.h; sourceTree = "<group>"; };
+		2C4473802175C8B9002A9110 /* GiRasterImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiRasterImage.h; sourceTree = "<group>"; };
+		2C4473812175C8B9002A9110 /* GiRasterImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiRasterImageLoader.h; sourceTree = "<group>"; };
+		2C4473822175C8B9002A9110 /* GiRasterWrappers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiRasterWrappers.h; sourceTree = "<group>"; };
+		2C4473832175C8B9002A9110 /* GiRectIntersDetector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiRectIntersDetector.h; sourceTree = "<group>"; };
+		2C4473842175C8B9002A9110 /* GiSectionGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiSectionGeometry.h; sourceTree = "<group>"; };
+		2C4473852175C8B9002A9110 /* GiSelector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiSelector.h; sourceTree = "<group>"; };
+		2C4473862175C8B9002A9110 /* GiSelectProc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiSelectProc.h; sourceTree = "<group>"; };
+		2C4473872175C8B9002A9110 /* GiShellFaceIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiShellFaceIterator.h; sourceTree = "<group>"; };
+		2C4473882175C8B9002A9110 /* GiShellFaceWithHolesIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiShellFaceWithHolesIterator.h; sourceTree = "<group>"; };
+		2C4473892175C8B9002A9110 /* GiSpatialFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiSpatialFilter.h; sourceTree = "<group>"; };
+		2C44738A2175C8B9002A9110 /* GiStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiStack.h; sourceTree = "<group>"; };
+		2C44738B2175C8B9002A9110 /* GiSubEntityTraitsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiSubEntityTraitsData.h; sourceTree = "<group>"; };
+		2C44738C2175C8B9002A9110 /* GiSubEntityTraitsDataSaver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiSubEntityTraitsDataSaver.h; sourceTree = "<group>"; };
+		2C44738D2175C8B9002A9110 /* GiTextStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiTextStyle.h; sourceTree = "<group>"; };
+		2C44738E2175C8B9002A9110 /* GiTraitsCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiTraitsCache.h; sourceTree = "<group>"; };
+		2C44738F2175C8B9002A9110 /* GiTransformed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiTransformed.h; sourceTree = "<group>"; };
+		2C4473902175C8B9002A9110 /* GiTransientManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiTransientManager.h; sourceTree = "<group>"; };
+		2C4473912175C8B9002A9110 /* GiUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiUtils.h; sourceTree = "<group>"; };
+		2C4473922175C8B9002A9110 /* GiVariant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiVariant.h; sourceTree = "<group>"; };
+		2C4473932175C8B9002A9110 /* GiViewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiViewport.h; sourceTree = "<group>"; };
+		2C4473942175C8B9002A9110 /* GiViewportDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiViewportDraw.h; sourceTree = "<group>"; };
+		2C4473952175C8B9002A9110 /* GiViewportGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiViewportGeometry.h; sourceTree = "<group>"; };
+		2C4473962175C8B9002A9110 /* GiViewportTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiViewportTraits.h; sourceTree = "<group>"; };
+		2C4473972175C8B9002A9110 /* GiViewportTraitsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiViewportTraitsData.h; sourceTree = "<group>"; };
+		2C4473982175C8B9002A9110 /* GiVisualStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiVisualStyle.h; sourceTree = "<group>"; };
+		2C4473992175C8B9002A9110 /* GiVisualStyleData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiVisualStyleData.h; sourceTree = "<group>"; };
+		2C44739A2175C8B9002A9110 /* GiVisualStyleTraitsData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiVisualStyleTraitsData.h; sourceTree = "<group>"; };
+		2C44739B2175C8B9002A9110 /* GiWorldDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiWorldDraw.h; sourceTree = "<group>"; };
+		2C44739C2175C8B9002A9110 /* GiWorldGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiWorldGeometry.h; sourceTree = "<group>"; };
+		2C44739D2175C8B9002A9110 /* GiXform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiXform.h; sourceTree = "<group>"; };
+		2C44739E2175C8B9002A9110 /* OdPolyPolygon3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdPolyPolygon3d.h; sourceTree = "<group>"; };
+		2C44739F2175C8B9002A9110 /* TtfDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TtfDescriptor.h; sourceTree = "<group>"; };
+		2C4473A02175C8B9002A9110 /* DbPolyFaceMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPolyFaceMesh.h; sourceTree = "<group>"; };
+		2C4473A12175C8B9002A9110 /* DbUndoController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUndoController.h; sourceTree = "<group>"; };
+		2C4473A22175C8B9002A9110 /* DbText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbText.h; sourceTree = "<group>"; };
+		2C4473A32175C8BA002A9110 /* DbAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAttribute.h; sourceTree = "<group>"; };
+		2C4473A42175C8BA002A9110 /* DbAlignedDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAlignedDimension.h; sourceTree = "<group>"; };
+		2C4473A52175C8BA002A9110 /* DbMLeaderStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMLeaderStyle.h; sourceTree = "<group>"; };
+		2C4473A62175C8BA002A9110 /* DbDictionaryWithDefault.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDictionaryWithDefault.h; sourceTree = "<group>"; };
+		2C4473A72175C8BA002A9110 /* DbUnderlayDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUnderlayDefinition.h; sourceTree = "<group>"; };
+		2C4473A82175C8BB002A9110 /* DbUCSTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUCSTableRecord.h; sourceTree = "<group>"; };
+		2C4473A92175C8BB002A9110 /* DbBreakData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBreakData.h; sourceTree = "<group>"; };
+		2C4473AA2175C8BB002A9110 /* DbFormattedTableData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFormattedTableData.h; sourceTree = "<group>"; };
+		2C4473AB2175C8BB002A9110 /* DbUnitsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUnitsFormatter.h; sourceTree = "<group>"; };
+		2C4473AC2175C8BB002A9110 /* DbIdBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbIdBuffer.h; sourceTree = "<group>"; };
+		2C4473AD2175C8BC002A9110 /* RxModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxModule.h; sourceTree = "<group>"; };
+		2C4473AF2175C8BC002A9110 /* RxRcsFileServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxRcsFileServices.h; sourceTree = "<group>"; };
+		2C4473B02175C8BC002A9110 /* LyLayerFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LyLayerFilter.h; sourceTree = "<group>"; };
+		2C4473B12175C8BC002A9110 /* UInt64Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UInt64Array.h; sourceTree = "<group>"; };
+		2C4473B22175C8BC002A9110 /* Error_InvalidInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Error_InvalidInput.h; sourceTree = "<group>"; };
+		2C4473B32175C8BD002A9110 /* DbFace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFace.h; sourceTree = "<group>"; };
+		2C4473B42175C8BD002A9110 /* DDTypeLibReg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTypeLibReg.h; sourceTree = "<group>"; };
+		2C4473B52175C8BD002A9110 /* BoolArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoolArray.h; sourceTree = "<group>"; };
+		2C4473B62175C8BD002A9110 /* OdAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdAlloc.h; sourceTree = "<group>"; };
+		2C4473B72175C8BD002A9110 /* SaveState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SaveState.h; sourceTree = "<group>"; };
+		2C4473B82175C8BE002A9110 /* EditorImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditorImpl.h; sourceTree = "<group>"; };
+		2C4473B92175C8BE002A9110 /* DbDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDate.h; sourceTree = "<group>"; };
+		2C4473BB2175C8BE002A9110 /* DbArgbColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbArgbColor.h; sourceTree = "<group>"; };
+		2C4473BC2175C8BE002A9110 /* DbPointCloud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloud.h; sourceTree = "<group>"; };
+		2C4473BD2175C8BE002A9110 /* DbPointCloudClipping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudClipping.h; sourceTree = "<group>"; };
+		2C4473BE2175C8BE002A9110 /* DbPointCloudColorMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudColorMap.h; sourceTree = "<group>"; };
+		2C4473BF2175C8BE002A9110 /* DbPointCloudCropping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudCropping.h; sourceTree = "<group>"; };
+		2C4473C02175C8BE002A9110 /* DbPointCloudDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudDef.h; sourceTree = "<group>"; };
+		2C4473C12175C8BE002A9110 /* DbPointCloudDefEx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudDefEx.h; sourceTree = "<group>"; };
+		2C4473C22175C8BE002A9110 /* DbPointCloudEx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudEx.h; sourceTree = "<group>"; };
+		2C4473C32175C8BE002A9110 /* DbPointCloudHostPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudHostPE.h; sourceTree = "<group>"; };
+		2C4473C42175C8BE002A9110 /* DbPointCloudIntensityStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudIntensityStyle.h; sourceTree = "<group>"; };
+		2C4473C52175C8BE002A9110 /* DbPointCloudObjExports.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudObjExports.h; sourceTree = "<group>"; };
+		2C4473C62175C8BE002A9110 /* DbPointCloudObjModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPointCloudObjModule.h; sourceTree = "<group>"; };
+		2C4473C72175C8BE002A9110 /* DbHatchPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbHatchPE.h; sourceTree = "<group>"; };
+		2C4473C82175C8BE002A9110 /* OdAnsiString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdAnsiString.h; sourceTree = "<group>"; };
+		2C4473C92175C8BF002A9110 /* DbSymbolTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSymbolTable.h; sourceTree = "<group>"; };
+		2C4473CA2175C8BF002A9110 /* DbAbstractViewTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractViewTableRecord.h; sourceTree = "<group>"; };
+		2C4473CB2175C8BF002A9110 /* DbTextStyleTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTextStyleTable.h; sourceTree = "<group>"; };
+		2C4473CC2175C8BF002A9110 /* XRefMan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XRefMan.h; sourceTree = "<group>"; };
+		2C4473CD2175C8BF002A9110 /* MemoryStreamImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryStreamImpl.h; sourceTree = "<group>"; };
+		2C4473CE2175C8C0002A9110 /* IdArrays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IdArrays.h; sourceTree = "<group>"; };
+		2C4473CF2175C8C0002A9110 /* DbLeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLeader.h; sourceTree = "<group>"; };
+		2C4473D02175C8C0002A9110 /* RxObjectImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxObjectImpl.h; sourceTree = "<group>"; };
+		2C4473D12175C8C0002A9110 /* DbUnderlayHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUnderlayHost.h; sourceTree = "<group>"; };
+		2C4473D22175C8C1002A9110 /* OdaDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdaDefs.h; sourceTree = "<group>"; };
+		2C4473D32175C8C1002A9110 /* MemoryStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryStream.h; sourceTree = "<group>"; };
+		2C4473D42175C8C1002A9110 /* DbEllipse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbEllipse.h; sourceTree = "<group>"; };
+		2C4473D52175C8C1002A9110 /* DbDataLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDataLink.h; sourceTree = "<group>"; };
+		2C4473D62175C8C1002A9110 /* OdArrayMemAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdArrayMemAlloc.h; sourceTree = "<group>"; };
+		2C4473D72175C8C2002A9110 /* DbDictionaryVar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDictionaryVar.h; sourceTree = "<group>"; };
+		2C4473D82175C8C2002A9110 /* DbObjectContextInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectContextInterface.h; sourceTree = "<group>"; };
+		2C4473D92175C8C2002A9110 /* OdArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdArray.h; sourceTree = "<group>"; };
+		2C4473DA2175C8C2002A9110 /* RawByteData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RawByteData.h; sourceTree = "<group>"; };
+		2C4473DB2175C8C2002A9110 /* DbDetailViewStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDetailViewStyle.h; sourceTree = "<group>"; };
+		2C4473DC2175C8C2002A9110 /* DbAbstractViewportData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractViewportData.h; sourceTree = "<group>"; };
+		2C4473DD2175C8C3002A9110 /* DbTypedId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTypedId.h; sourceTree = "<group>"; };
+		2C4473DE2175C8C3002A9110 /* DbPolyFaceMeshVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPolyFaceMeshVertex.h; sourceTree = "<group>"; };
+		2C4473DF2175C8C3002A9110 /* DbSectionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSectionManager.h; sourceTree = "<group>"; };
+		2C4473E02175C8C3002A9110 /* DbLinkedData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLinkedData.h; sourceTree = "<group>"; };
+		2C4473E12175C8C3002A9110 /* DbColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbColor.h; sourceTree = "<group>"; };
+		2C4473E22175C8C4002A9110 /* BaseObjectPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseObjectPtr.h; sourceTree = "<group>"; };
+		2C4473E32175C8C4002A9110 /* RxIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxIterator.h; sourceTree = "<group>"; };
+		2C4473E42175C8C4002A9110 /* RxVariant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxVariant.h; sourceTree = "<group>"; };
+		2C4473E62175C8C4002A9110 /* RasterProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RasterProcessor.h; sourceTree = "<group>"; };
+		2C4473E72175C8C4002A9110 /* TPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TPtr.h; sourceTree = "<group>"; };
+		2C4473E82175C8C5002A9110 /* ModelerMarkers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelerMarkers.h; sourceTree = "<group>"; };
+		2C4473E92175C8C5002A9110 /* DbLayoutManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayoutManager.h; sourceTree = "<group>"; };
+		2C4473EA2175C8C5002A9110 /* DbBlockTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockTable.h; sourceTree = "<group>"; };
+		2C4473EB2175C8C5002A9110 /* RText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RText.h; sourceTree = "<group>"; };
+		2C4473EC2175C8C5002A9110 /* SysVarDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SysVarDefs.h; sourceTree = "<group>"; };
+		2C4473ED2175C8C6002A9110 /* DbObjectContextCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectContextCollection.h; sourceTree = "<group>"; };
+		2C4473EE2175C8C6002A9110 /* DbViewportTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewportTable.h; sourceTree = "<group>"; };
+		2C4473F02175C8C6002A9110 /* EdBaseUserIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdBaseUserIO.h; sourceTree = "<group>"; };
+		2C4473F12175C8C6002A9110 /* EdCommandContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdCommandContext.h; sourceTree = "<group>"; };
+		2C4473F22175C8C6002A9110 /* EdCommandStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdCommandStack.h; sourceTree = "<group>"; };
+		2C4473F32175C8C6002A9110 /* EdFunctionIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdFunctionIO.h; sourceTree = "<group>"; };
+		2C4473F42175C8C6002A9110 /* EdLispEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdLispEngine.h; sourceTree = "<group>"; };
+		2C4473F52175C8C6002A9110 /* EdUserIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EdUserIO.h; sourceTree = "<group>"; };
+		2C4473F62175C8C6002A9110 /* DbBaseSubentId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBaseSubentId.h; sourceTree = "<group>"; };
+		2C4473F72175C8C6002A9110 /* BrepRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BrepRenderer.h; sourceTree = "<group>"; };
+		2C4473F82175C8C7002A9110 /* OdPlatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdPlatform.h; sourceTree = "<group>"; };
+		2C4473F92175C8C7002A9110 /* DbRotatedDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRotatedDimension.h; sourceTree = "<group>"; };
+		2C4473FA2175C8C7002A9110 /* RxInit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxInit.h; sourceTree = "<group>"; };
+		2C4473FB2175C8C7002A9110 /* DbArcDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbArcDimension.h; sourceTree = "<group>"; };
+		2C4473FC2175C8C8002A9110 /* DbOle2Frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbOle2Frame.h; sourceTree = "<group>"; };
+		2C4473FD2175C8C8002A9110 /* DbBlockIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockIterator.h; sourceTree = "<group>"; };
+		2C4473FE2175C8C8002A9110 /* OdDbGeoCoordinateSystemPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdDbGeoCoordinateSystemPE.h; sourceTree = "<group>"; };
+		2C4473FF2175C8C8002A9110 /* DbModelDocViewStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbModelDocViewStyle.h; sourceTree = "<group>"; };
+		2C4474002175C8C8002A9110 /* CAseDLPNTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAseDLPNTableRecord.h; sourceTree = "<group>"; };
+		2C4474012175C8C9002A9110 /* DbDatabaseReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDatabaseReactor.h; sourceTree = "<group>"; };
+		2C4474022175C8C9002A9110 /* DbJoinEntityPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbJoinEntityPE.h; sourceTree = "<group>"; };
+		2C4474042175C8C9002A9110 /* RegExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegExport.h; sourceTree = "<group>"; };
+		2C4474052175C8C9002A9110 /* Registrar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Registrar.h; sourceTree = "<group>"; };
+		2C4474062175C8C9002A9110 /* DbUserIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUserIO.h; sourceTree = "<group>"; };
+		2C4474072175C8C9002A9110 /* DbTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTrace.h; sourceTree = "<group>"; };
+		2C4474082175C8CA002A9110 /* Int8Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int8Array.h; sourceTree = "<group>"; };
+		2C4474092175C8CA002A9110 /* OdDToStr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdDToStr.h; sourceTree = "<group>"; };
+		2C44740A2175C8CA002A9110 /* DbUCSTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUCSTable.h; sourceTree = "<group>"; };
+		2C44740B2175C8CA002A9110 /* DbMLeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMLeader.h; sourceTree = "<group>"; };
+		2C44740C2175C8CA002A9110 /* ViewportDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewportDefs.h; sourceTree = "<group>"; };
+		2C44740D2175C8CA002A9110 /* DbObjectOverrule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectOverrule.h; sourceTree = "<group>"; };
+		2C44740E2175C8CB002A9110 /* DbAnnotationScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAnnotationScale.h; sourceTree = "<group>"; };
+		2C44740F2175C8CB002A9110 /* DrxError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrxError.h; sourceTree = "<group>"; };
+		2C4474102175C8CB002A9110 /* DbOleFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbOleFrame.h; sourceTree = "<group>"; };
+		2C4474122175C8CB002A9110 /* SmCalloutBlocks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmCalloutBlocks.h; sourceTree = "<group>"; };
+		2C4474132175C8CB002A9110 /* SmComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmComponent.h; sourceTree = "<group>"; };
+		2C4474142175C8CB002A9110 /* SmCustomProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmCustomProperty.h; sourceTree = "<group>"; };
+		2C4474152175C8CB002A9110 /* SmDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmDatabase.h; sourceTree = "<group>"; };
+		2C4474162175C8CB002A9110 /* SmDbObjectReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmDbObjectReference.h; sourceTree = "<group>"; };
+		2C4474172175C8CB002A9110 /* SmEnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmEnum.h; sourceTree = "<group>"; };
+		2C4474182175C8CB002A9110 /* SmEvents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmEvents.h; sourceTree = "<group>"; };
+		2C4474192175C8CB002A9110 /* SmExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmExport.h; sourceTree = "<group>"; };
+		2C44741A2175C8CB002A9110 /* SmFiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmFiler.h; sourceTree = "<group>"; };
+		2C44741B2175C8CB002A9110 /* SmFileReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmFileReference.h; sourceTree = "<group>"; };
+		2C44741C2175C8CB002A9110 /* SmNamedDbObjectReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmNamedDbObjectReference.h; sourceTree = "<group>"; };
+		2C44741D2175C8CB002A9110 /* SmObjectId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmObjectId.h; sourceTree = "<group>"; };
+		2C44741E2175C8CB002A9110 /* SmPersist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmPersist.h; sourceTree = "<group>"; };
+		2C44741F2175C8CB002A9110 /* SmPersistProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmPersistProxy.h; sourceTree = "<group>"; };
+		2C4474202175C8CB002A9110 /* SmProjectPointLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmProjectPointLocation.h; sourceTree = "<group>"; };
+		2C4474212175C8CB002A9110 /* SmProjectPointLocations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmProjectPointLocations.h; sourceTree = "<group>"; };
+		2C4474222175C8CB002A9110 /* SmPublishOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmPublishOptions.h; sourceTree = "<group>"; };
+		2C4474232175C8CB002A9110 /* SmResources.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmResources.h; sourceTree = "<group>"; };
+		2C4474242175C8CB002A9110 /* SmSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSheet.h; sourceTree = "<group>"; };
+		2C4474252175C8CB002A9110 /* SmSheetSelSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSheetSelSet.h; sourceTree = "<group>"; };
+		2C4474262175C8CB002A9110 /* SmSheetSelSets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSheetSelSets.h; sourceTree = "<group>"; };
+		2C4474272175C8CB002A9110 /* SmSheetSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSheetSet.h; sourceTree = "<group>"; };
+		2C4474282175C8CB002A9110 /* SmSheetSetMgr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSheetSetMgr.h; sourceTree = "<group>"; };
+		2C4474292175C8CB002A9110 /* SmSheetView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSheetView.h; sourceTree = "<group>"; };
+		2C44742A2175C8CB002A9110 /* SmSheetViews.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSheetViews.h; sourceTree = "<group>"; };
+		2C44742B2175C8CB002A9110 /* SmSubset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmSubset.h; sourceTree = "<group>"; };
+		2C44742C2175C8CB002A9110 /* SmViewCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmViewCategories.h; sourceTree = "<group>"; };
+		2C44742D2175C8CB002A9110 /* SmViewCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmViewCategory.h; sourceTree = "<group>"; };
+		2C44742E2175C8CB002A9110 /* DbTableStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTableStyle.h; sourceTree = "<group>"; };
+		2C44742F2175C8CC002A9110 /* DbLayerIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayerIndex.h; sourceTree = "<group>"; };
+		2C4474312175C8CC002A9110 /* DbLSComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSComponent.h; sourceTree = "<group>"; };
+		2C4474322175C8CC002A9110 /* DbLSCompoundComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSCompoundComponent.h; sourceTree = "<group>"; };
+		2C4474332175C8CC002A9110 /* DbLSDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSDefinition.h; sourceTree = "<group>"; };
+		2C4474342175C8CC002A9110 /* DbLSInternalComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSInternalComponent.h; sourceTree = "<group>"; };
+		2C4474352175C8CC002A9110 /* DbLSMisc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSMisc.h; sourceTree = "<group>"; };
+		2C4474362175C8CC002A9110 /* DbLSObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSObject.h; sourceTree = "<group>"; };
+		2C4474372175C8CC002A9110 /* DbLSPointComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSPointComponent.h; sourceTree = "<group>"; };
+		2C4474382175C8CC002A9110 /* DbLSStroke.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSStroke.h; sourceTree = "<group>"; };
+		2C4474392175C8CC002A9110 /* DbLSStrokePatternComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSStrokePatternComponent.h; sourceTree = "<group>"; };
+		2C44743A2175C8CC002A9110 /* DbLSSymbolComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSSymbolComponent.h; sourceTree = "<group>"; };
+		2C44743B2175C8CC002A9110 /* DbLSSymbolReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSSymbolReference.h; sourceTree = "<group>"; };
+		2C44743C2175C8CC002A9110 /* DbLSXData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLSXData.h; sourceTree = "<group>"; };
+		2C44743D2175C8CC002A9110 /* OdDgnLSExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdDgnLSExport.h; sourceTree = "<group>"; };
+		2C44743E2175C8CC002A9110 /* DbSweptSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSweptSurface.h; sourceTree = "<group>"; };
+		2C44743F2175C8CC002A9110 /* DbAttributeDefinition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAttributeDefinition.h; sourceTree = "<group>"; };
+		2C4474402175C8CC002A9110 /* DbSecurity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSecurity.h; sourceTree = "<group>"; };
+		2C4474412175C8CD002A9110 /* DbObjectIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectIterator.h; sourceTree = "<group>"; };
+		2C4474422175C8CD002A9110 /* CmEntityColorArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmEntityColorArray.h; sourceTree = "<group>"; };
+		2C4474432175C8CD002A9110 /* DbObjectContextData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectContextData.h; sourceTree = "<group>"; };
+		2C4474442175C8CD002A9110 /* OleItemHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OleItemHandler.h; sourceTree = "<group>"; };
+		2C4474452175C8CD002A9110 /* DbNurbSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbNurbSurface.h; sourceTree = "<group>"; };
+		2C4474462175C8CE002A9110 /* RxNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxNames.h; sourceTree = "<group>"; };
+		2C4474472175C8CE002A9110 /* DbProxyExt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbProxyExt.h; sourceTree = "<group>"; };
+		2C4474482175C8CE002A9110 /* ModelerTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelerTools.h; sourceTree = "<group>"; };
+		2C4474492175C8CE002A9110 /* StringArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringArray.h; sourceTree = "<group>"; };
+		2C44744A2175C8CE002A9110 /* ModelerGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelerGeometry.h; sourceTree = "<group>"; };
+		2C44744B2175C8CE002A9110 /* DbErrorInvalidSysvar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbErrorInvalidSysvar.h; sourceTree = "<group>"; };
+		2C44744C2175C8CF002A9110 /* DbAbstractPlotDataForDbPlotSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractPlotDataForDbPlotSettings.h; sourceTree = "<group>"; };
+		2C44744D2175C8CF002A9110 /* OdStreamBuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdStreamBuf.h; sourceTree = "<group>"; };
+		2C44744E2175C8CF002A9110 /* SmartPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmartPtr.h; sourceTree = "<group>"; };
+		2C44744F2175C8CF002A9110 /* DbAbstractViewTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractViewTable.h; sourceTree = "<group>"; };
+		2C4474502175C8CF002A9110 /* DbObjectContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectContext.h; sourceTree = "<group>"; };
+		2C4474522175C8D0002A9110 /* GiBaseVectorizerImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiBaseVectorizerImpl.h; sourceTree = "<group>"; };
+		2C4474532175C8D0002A9110 /* Gs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gs.h; sourceTree = "<group>"; };
+		2C4474542175C8D0002A9110 /* GsBackground.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBackground.h; sourceTree = "<group>"; };
+		2C4474552175C8D0002A9110 /* GsBackgroundProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBackgroundProperties.h; sourceTree = "<group>"; };
+		2C4474562175C8D0002A9110 /* GsBaseInclude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBaseInclude.h; sourceTree = "<group>"; };
+		2C4474572175C8D0002A9110 /* GsBaseMaterialView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBaseMaterialView.h; sourceTree = "<group>"; };
+		2C4474582175C8D0002A9110 /* GsBaseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBaseModel.h; sourceTree = "<group>"; };
+		2C4474592175C8D0002A9110 /* GsBaseModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBaseModule.h; sourceTree = "<group>"; };
+		2C44745A2175C8D0002A9110 /* GsBaseVectorizeDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBaseVectorizeDevice.h; sourceTree = "<group>"; };
+		2C44745B2175C8D0002A9110 /* GsBaseVectorizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBaseVectorizer.h; sourceTree = "<group>"; };
+		2C44745C2175C8D0002A9110 /* GsBaseVectorizeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBaseVectorizeView.h; sourceTree = "<group>"; };
+		2C44745D2175C8D0002A9110 /* GsBitMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBitMap.h; sourceTree = "<group>"; };
+		2C44745E2175C8D0002A9110 /* GsBlockNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBlockNode.h; sourceTree = "<group>"; };
+		2C44745F2175C8D0002A9110 /* GsBlockReferenceNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBlockReferenceNode.h; sourceTree = "<group>"; };
+		2C4474602175C8D0002A9110 /* GsBMPDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsBMPDevice.h; sourceTree = "<group>"; };
+		2C4474612175C8D0002A9110 /* GsContainerNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsContainerNode.h; sourceTree = "<group>"; };
+		2C4474622175C8D0002A9110 /* GsCullingVolume.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsCullingVolume.h; sourceTree = "<group>"; };
+		2C4474632175C8D0002A9110 /* GsDbRootLinkage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsDbRootLinkage.h; sourceTree = "<group>"; };
+		2C4474642175C8D0002A9110 /* GsDCPointArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsDCPointArray.h; sourceTree = "<group>"; };
+		2C4474652175C8D0002A9110 /* GsDCRectArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsDCRectArray.h; sourceTree = "<group>"; };
+		2C4474662175C8D0002A9110 /* GsDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsDefs.h; sourceTree = "<group>"; };
+		2C4474672175C8D0002A9110 /* GsDrawableHolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsDrawableHolder.h; sourceTree = "<group>"; };
+		2C4474682175C8D0002A9110 /* GsDrawCancelException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsDrawCancelException.h; sourceTree = "<group>"; };
+		2C4474692175C8D0002A9110 /* GsEmptyMetafileCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsEmptyMetafileCache.h; sourceTree = "<group>"; };
+		2C44746A2175C8D0002A9110 /* GsEntityNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsEntityNode.h; sourceTree = "<group>"; };
+		2C44746B2175C8D0002A9110 /* GsExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsExport.h; sourceTree = "<group>"; };
+		2C44746C2175C8D0002A9110 /* GsExtAccum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsExtAccum.h; sourceTree = "<group>"; };
+		2C44746D2175C8D0002A9110 /* GsFiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsFiler.h; sourceTree = "<group>"; };
+		2C44746E2175C8D0002A9110 /* GsFilerV100Impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsFilerV100Impl.h; sourceTree = "<group>"; };
+		2C44746F2175C8D0002A9110 /* GsHighlightData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsHighlightData.h; sourceTree = "<group>"; };
+		2C4474702175C8D0002A9110 /* GsLayerNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsLayerNode.h; sourceTree = "<group>"; };
+		2C4474712175C8D0002A9110 /* GsLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsLight.h; sourceTree = "<group>"; };
+		2C4474722175C8D0002A9110 /* GsLightNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsLightNode.h; sourceTree = "<group>"; };
+		2C4474732175C8D0002A9110 /* GsMaterialCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsMaterialCache.h; sourceTree = "<group>"; };
+		2C4474742175C8D0002A9110 /* GsMaterialNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsMaterialNode.h; sourceTree = "<group>"; };
+		2C4474752175C8D0002A9110 /* GsModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsModel.h; sourceTree = "<group>"; };
+		2C4474762175C8D0002A9110 /* GsNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsNode.h; sourceTree = "<group>"; };
+		2C4474772175C8D0002A9110 /* GsPageParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsPageParams.h; sourceTree = "<group>"; };
+		2C4474782175C8D0002A9110 /* GsProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsProperties.h; sourceTree = "<group>"; };
+		2C4474792175C8D0002A9110 /* GsRenderSettingsProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsRenderSettingsProperties.h; sourceTree = "<group>"; };
+		2C44747A2175C8D0002A9110 /* GsSelectionReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsSelectionReactor.h; sourceTree = "<group>"; };
+		2C44747B2175C8D0002A9110 /* GsSpatialQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsSpatialQuery.h; sourceTree = "<group>"; };
+		2C44747C2175C8D0002A9110 /* GsVectPerformance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsVectPerformance.h; sourceTree = "<group>"; };
+		2C44747D2175C8D0002A9110 /* GsViewImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsViewImpl.h; sourceTree = "<group>"; };
+		2C44747E2175C8D0002A9110 /* GsViewLocalId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsViewLocalId.h; sourceTree = "<group>"; };
+		2C44747F2175C8D0002A9110 /* GsViewportProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsViewportProperties.h; sourceTree = "<group>"; };
+		2C4474802175C8D0002A9110 /* GsViewProps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsViewProps.h; sourceTree = "<group>"; };
+		2C4474812175C8D0002A9110 /* GsViewPropsDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsViewPropsDef.h; sourceTree = "<group>"; };
+		2C4474822175C8D0002A9110 /* GsVisualStyleProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsVisualStyleProperties.h; sourceTree = "<group>"; };
+		2C4474832175C8D0002A9110 /* LineWtIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineWtIndex.h; sourceTree = "<group>"; };
+		2C4474842175C8D0002A9110 /* SiVolume.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SiVolume.h; sourceTree = "<group>"; };
+		2C4474852175C8D0002A9110 /* DbExtrudedSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbExtrudedSurface.h; sourceTree = "<group>"; };
+		2C4474862175C8D0002A9110 /* Int64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int64.h; sourceTree = "<group>"; };
+		2C4474872175C8D0002A9110 /* DbGeoPositionMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGeoPositionMarker.h; sourceTree = "<group>"; };
+		2C4474882175C8D0002A9110 /* RxDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxDefs.h; sourceTree = "<group>"; };
+		2C4474892175C8D1002A9110 /* OdDbGeoCoordinateSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdDbGeoCoordinateSystem.h; sourceTree = "<group>"; };
+		2C44748A2175C8D1002A9110 /* Db3dPolyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Db3dPolyline.h; sourceTree = "<group>"; };
+		2C44748B2175C8D1002A9110 /* DbBody.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBody.h; sourceTree = "<group>"; };
+		2C44748C2175C8D1002A9110 /* DbMInsertBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMInsertBlock.h; sourceTree = "<group>"; };
+		2C44748D2175C8D1002A9110 /* DbBaseHostAppServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBaseHostAppServices.h; sourceTree = "<group>"; };
+		2C44748E2175C8D2002A9110 /* DbLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLine.h; sourceTree = "<group>"; };
+		2C44748F2175C8D2002A9110 /* DbPolygonMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPolygonMesh.h; sourceTree = "<group>"; };
+		2C4474902175C8D2002A9110 /* DbMPolygon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMPolygon.h; sourceTree = "<group>"; };
+		2C4474912175C8D2002A9110 /* DbDimData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDimData.h; sourceTree = "<group>"; };
+		2C4474922175C8D2002A9110 /* DbEvalWatchers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbEvalWatchers.h; sourceTree = "<group>"; };
+		2C4474932175C8D3002A9110 /* DbAbstractPlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractPlotData.h; sourceTree = "<group>"; };
+		2C4474942175C8D3002A9110 /* FlatMemStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FlatMemStream.h; sourceTree = "<group>"; };
+		2C4474952175C8D3002A9110 /* DbWipeout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbWipeout.h; sourceTree = "<group>"; };
+		2C4474962175C8D3002A9110 /* DbDataTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDataTable.h; sourceTree = "<group>"; };
+		2C4474972175C8D3002A9110 /* DbObjPtrArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjPtrArray.h; sourceTree = "<group>"; };
+		2C4474982175C8D4002A9110 /* DbXline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbXline.h; sourceTree = "<group>"; };
+		2C4474992175C8D4002A9110 /* OleItemHandlerBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OleItemHandlerBase.h; sourceTree = "<group>"; };
+		2C44749A2175C8D4002A9110 /* TD_GL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TD_GL.h; sourceTree = "<group>"; };
+		2C44749B2175C8D4002A9110 /* EmbeddedASMEntPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmbeddedASMEntPE.h; sourceTree = "<group>"; };
+		2C44749C2175C8D5002A9110 /* DbGeoDataPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGeoDataPE.h; sourceTree = "<group>"; };
+		2C44749D2175C8D5002A9110 /* DbViewportTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbViewportTableRecord.h; sourceTree = "<group>"; };
+		2C44749F2175C8D5002A9110 /* avgpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avgpc.h; sourceTree = "<group>"; };
+		2C4474A02175C8D5002A9110 /* Ge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ge.h; sourceTree = "<group>"; };
+		2C4474A12175C8D5002A9110 /* GeAugPolyline3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeAugPolyline3d.h; sourceTree = "<group>"; };
+		2C4474A22175C8D5002A9110 /* GeBoundBlock2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeBoundBlock2d.h; sourceTree = "<group>"; };
+		2C4474A32175C8D5002A9110 /* GeBoundBlock3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeBoundBlock3d.h; sourceTree = "<group>"; };
+		2C4474A42175C8D5002A9110 /* GeBoundedPlane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeBoundedPlane.h; sourceTree = "<group>"; };
+		2C4474A52175C8D5002A9110 /* GeCircArc2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCircArc2d.h; sourceTree = "<group>"; };
+		2C4474A62175C8D5002A9110 /* GeCircArc3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCircArc3d.h; sourceTree = "<group>"; };
+		2C4474A72175C8D5002A9110 /* GeClipBoundary2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeClipBoundary2d.h; sourceTree = "<group>"; };
+		2C4474A82175C8D5002A9110 /* GeCompositeCurve2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCompositeCurve2d.h; sourceTree = "<group>"; };
+		2C4474A92175C8D5002A9110 /* GeCompositeCurve3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCompositeCurve3d.h; sourceTree = "<group>"; };
+		2C4474AA2175C8D5002A9110 /* GeCone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCone.h; sourceTree = "<group>"; };
+		2C4474AB2175C8D5002A9110 /* GeCubicSplineCurve2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCubicSplineCurve2d.h; sourceTree = "<group>"; };
+		2C4474AC2175C8D5002A9110 /* GeCubicSplineCurve3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCubicSplineCurve3d.h; sourceTree = "<group>"; };
+		2C4474AD2175C8D5002A9110 /* GeCurve2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurve2d.h; sourceTree = "<group>"; };
+		2C4474AE2175C8D5002A9110 /* GeCurve2dPtrArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurve2dPtrArray.h; sourceTree = "<group>"; };
+		2C4474AF2175C8D5002A9110 /* GeCurve3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurve3d.h; sourceTree = "<group>"; };
+		2C4474B02175C8D5002A9110 /* GeCurve3dPtrArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurve3dPtrArray.h; sourceTree = "<group>"; };
+		2C4474B12175C8D5002A9110 /* GeCurveBoundary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurveBoundary.h; sourceTree = "<group>"; };
+		2C4474B22175C8D5002A9110 /* GeCurveCurveInt2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurveCurveInt2d.h; sourceTree = "<group>"; };
+		2C4474B32175C8D5002A9110 /* GeCurveCurveInt3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurveCurveInt3d.h; sourceTree = "<group>"; };
+		2C4474B42175C8D5002A9110 /* GeCurveSurfInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCurveSurfInt.h; sourceTree = "<group>"; };
+		2C4474B52175C8D5002A9110 /* GeCylinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeCylinder.h; sourceTree = "<group>"; };
+		2C4474B62175C8D5002A9110 /* GeDouble2dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeDouble2dArray.h; sourceTree = "<group>"; };
+		2C4474B72175C8D5002A9110 /* GeDoubleArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeDoubleArray.h; sourceTree = "<group>"; };
+		2C4474B82175C8D5002A9110 /* GeEllipArc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeEllipArc.h; sourceTree = "<group>"; };
+		2C4474B92175C8D5002A9110 /* GeEllipArc2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeEllipArc2d.h; sourceTree = "<group>"; };
+		2C4474BA2175C8D5002A9110 /* GeEllipArc3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeEllipArc3d.h; sourceTree = "<group>"; };
+		2C4474BB2175C8D5002A9110 /* GeEllipCone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeEllipCone.h; sourceTree = "<group>"; };
+		2C4474BC2175C8D5002A9110 /* GeEllipCylinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeEllipCylinder.h; sourceTree = "<group>"; };
+		2C4474BD2175C8D5002A9110 /* GeEntity2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeEntity2d.h; sourceTree = "<group>"; };
+		2C4474BE2175C8D5002A9110 /* GeEntity3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeEntity3d.h; sourceTree = "<group>"; };
+		2C4474BF2175C8D5002A9110 /* GeExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeExport.h; sourceTree = "<group>"; };
+		2C4474C02175C8D5002A9110 /* GeExtents2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeExtents2d.h; sourceTree = "<group>"; };
+		2C4474C12175C8D5002A9110 /* GeExtents3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeExtents3d.h; sourceTree = "<group>"; };
+		2C4474C22175C8D5002A9110 /* GeExternalBoundedSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeExternalBoundedSurface.h; sourceTree = "<group>"; };
+		2C4474C32175C8D5002A9110 /* GeExternalCurve2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeExternalCurve2d.h; sourceTree = "<group>"; };
+		2C4474C42175C8D5002A9110 /* GeExternalCurve3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeExternalCurve3d.h; sourceTree = "<group>"; };
+		2C4474C52175C8D5002A9110 /* GeExternalSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeExternalSurface.h; sourceTree = "<group>"; };
+		2C4474C62175C8D5002A9110 /* GeGbl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeGbl.h; sourceTree = "<group>"; };
+		2C4474C72175C8D5002A9110 /* GeImpInterval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeImpInterval.h; sourceTree = "<group>"; };
+		2C4474C82175C8D5002A9110 /* GeIntArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeIntArray.h; sourceTree = "<group>"; };
+		2C4474C92175C8D5002A9110 /* GeInterval.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeInterval.h; sourceTree = "<group>"; };
+		2C4474CA2175C8D5002A9110 /* GeIntervalArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeIntervalArray.h; sourceTree = "<group>"; };
+		2C4474CB2175C8D5002A9110 /* GeKnotVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeKnotVector.h; sourceTree = "<group>"; };
+		2C4474CC2175C8D5002A9110 /* GeLibVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLibVersion.h; sourceTree = "<group>"; };
+		2C4474CD2175C8D5002A9110 /* GeLine2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLine2d.h; sourceTree = "<group>"; };
+		2C4474CE2175C8D5002A9110 /* GeLine3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLine3d.h; sourceTree = "<group>"; };
+		2C4474CF2175C8D5002A9110 /* GeLinearEnt2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLinearEnt2d.h; sourceTree = "<group>"; };
+		2C4474D02175C8D5002A9110 /* GeLinearEnt3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLinearEnt3d.h; sourceTree = "<group>"; };
+		2C4474D12175C8D5002A9110 /* GeLineSeg2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLineSeg2d.h; sourceTree = "<group>"; };
+		2C4474D22175C8D5002A9110 /* GeLineSeg2dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLineSeg2dArray.h; sourceTree = "<group>"; };
+		2C4474D32175C8D5002A9110 /* GeLineSeg3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeLineSeg3d.h; sourceTree = "<group>"; };
+		2C4474D42175C8D5002A9110 /* GeMatrix2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeMatrix2d.h; sourceTree = "<group>"; };
+		2C4474D52175C8D5002A9110 /* GeMatrix2dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeMatrix2dArray.h; sourceTree = "<group>"; };
+		2C4474D62175C8D5002A9110 /* GeMatrix3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeMatrix3d.h; sourceTree = "<group>"; };
+		2C4474D72175C8D5002A9110 /* GeMatrix3dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeMatrix3dArray.h; sourceTree = "<group>"; };
+		2C4474D82175C8D5002A9110 /* GeMatrix3dStack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeMatrix3dStack.h; sourceTree = "<group>"; };
+		2C4474D92175C8D5002A9110 /* GeNurbCurve2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeNurbCurve2d.h; sourceTree = "<group>"; };
+		2C4474DA2175C8D5002A9110 /* GeNurbCurve3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeNurbCurve3d.h; sourceTree = "<group>"; };
+		2C4474DB2175C8D5002A9110 /* GeNurbSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeNurbSurface.h; sourceTree = "<group>"; };
+		2C4474DC2175C8D5002A9110 /* GeOffsetCurve2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeOffsetCurve2d.h; sourceTree = "<group>"; };
+		2C4474DD2175C8D5002A9110 /* GeOffsetCurve3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeOffsetCurve3d.h; sourceTree = "<group>"; };
+		2C4474DE2175C8D5002A9110 /* GeOffsetSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeOffsetSurface.h; sourceTree = "<group>"; };
+		2C4474DF2175C8D5002A9110 /* GePlanarEnt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePlanarEnt.h; sourceTree = "<group>"; };
+		2C4474E02175C8D5002A9110 /* GePlane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePlane.h; sourceTree = "<group>"; };
+		2C4474E12175C8D5002A9110 /* GePoint2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePoint2d.h; sourceTree = "<group>"; };
+		2C4474E22175C8D5002A9110 /* GePoint2dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePoint2dArray.h; sourceTree = "<group>"; };
+		2C4474E32175C8D5002A9110 /* GePoint3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePoint3d.h; sourceTree = "<group>"; };
+		2C4474E42175C8D5002A9110 /* GePoint3dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePoint3dArray.h; sourceTree = "<group>"; };
+		2C4474E52175C8D5002A9110 /* GePointEnt2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePointEnt2d.h; sourceTree = "<group>"; };
+		2C4474E62175C8D5002A9110 /* GePointEnt3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePointEnt3d.h; sourceTree = "<group>"; };
+		2C4474E72175C8D5002A9110 /* GePointOnCurve2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePointOnCurve2d.h; sourceTree = "<group>"; };
+		2C4474E82175C8D5002A9110 /* GePointOnCurve3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePointOnCurve3d.h; sourceTree = "<group>"; };
+		2C4474E92175C8D5002A9110 /* GePointOnSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePointOnSurface.h; sourceTree = "<group>"; };
+		2C4474EA2175C8D5002A9110 /* GePolyline2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePolyline2d.h; sourceTree = "<group>"; };
+		2C4474EB2175C8D5002A9110 /* GePolyline3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePolyline3d.h; sourceTree = "<group>"; };
+		2C4474EC2175C8D5002A9110 /* GePosition2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePosition2d.h; sourceTree = "<group>"; };
+		2C4474ED2175C8D5002A9110 /* GePosition3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GePosition3d.h; sourceTree = "<group>"; };
+		2C4474EE2175C8D5002A9110 /* GeQuaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeQuaternion.h; sourceTree = "<group>"; };
+		2C4474EF2175C8D5002A9110 /* GeRay2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeRay2d.h; sourceTree = "<group>"; };
+		2C4474F02175C8D5002A9110 /* GeRay3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeRay3d.h; sourceTree = "<group>"; };
+		2C4474F12175C8D5002A9110 /* GeScale2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeScale2d.h; sourceTree = "<group>"; };
+		2C4474F22175C8D5002A9110 /* GeScale3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeScale3d.h; sourceTree = "<group>"; };
+		2C4474F32175C8D5002A9110 /* GeSegmentChain2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSegmentChain2d.h; sourceTree = "<group>"; };
+		2C4474F42175C8D5002A9110 /* GeShell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeShell.h; sourceTree = "<group>"; };
+		2C4474F52175C8D5002A9110 /* GeSphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSphere.h; sourceTree = "<group>"; };
+		2C4474F62175C8D5002A9110 /* GeSplineEnt2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSplineEnt2d.h; sourceTree = "<group>"; };
+		2C4474F72175C8D5002A9110 /* GeSplineEnt3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSplineEnt3d.h; sourceTree = "<group>"; };
+		2C4474F82175C8D5002A9110 /* GeSpunSurf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSpunSurf.h; sourceTree = "<group>"; };
+		2C4474F92175C8D5002A9110 /* GeSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSurface.h; sourceTree = "<group>"; };
+		2C4474FA2175C8D5002A9110 /* GeSurfaceCurve2dTo3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSurfaceCurve2dTo3d.h; sourceTree = "<group>"; };
+		2C4474FB2175C8D5002A9110 /* GeSurfSurfInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeSurfSurfInt.h; sourceTree = "<group>"; };
+		2C4474FC2175C8D5002A9110 /* GeTess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeTess.h; sourceTree = "<group>"; };
+		2C4474FD2175C8D5002A9110 /* GeTess2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeTess2.h; sourceTree = "<group>"; };
+		2C4474FE2175C8D5002A9110 /* GeTol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeTol.h; sourceTree = "<group>"; };
+		2C4474FF2175C8D5002A9110 /* GeTorus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeTorus.h; sourceTree = "<group>"; };
+		2C4475002175C8D5002A9110 /* GeVector2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeVector2d.h; sourceTree = "<group>"; };
+		2C4475012175C8D5002A9110 /* GeVector2dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeVector2dArray.h; sourceTree = "<group>"; };
+		2C4475022175C8D5002A9110 /* GeVector3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeVector3d.h; sourceTree = "<group>"; };
+		2C4475032175C8D5002A9110 /* GeVector3dArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeVector3dArray.h; sourceTree = "<group>"; };
+		2C4475042175C8D5002A9110 /* GeVoidPointerArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeVoidPointerArray.h; sourceTree = "<group>"; };
+		2C4475052175C8D5002A9110 /* Editor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Editor.h; sourceTree = "<group>"; };
+		2C4475062175C8D6002A9110 /* DbAbstractViewportDataForAbstractViewTabRec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractViewportDataForAbstractViewTabRec.h; sourceTree = "<group>"; };
+		2C4475072175C8D6002A9110 /* DbTransactionReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTransactionReactor.h; sourceTree = "<group>"; };
+		2C4475082175C8D6002A9110 /* DbSetPlotSettingsPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSetPlotSettingsPE.h; sourceTree = "<group>"; };
+		2C4475092175C8D6002A9110 /* DbMlineStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMlineStyle.h; sourceTree = "<group>"; };
+		2C44750A2175C8D6002A9110 /* GeometryFromProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeometryFromProxy.h; sourceTree = "<group>"; };
+		2C44750B2175C8D7002A9110 /* AbstractViewPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractViewPE.h; sourceTree = "<group>"; };
+		2C44750C2175C8D7002A9110 /* DbIdMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbIdMapping.h; sourceTree = "<group>"; };
+		2C44750D2175C8D7002A9110 /* RxSystemServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxSystemServices.h; sourceTree = "<group>"; };
+		2C44750E2175C8D7002A9110 /* GiDefaultContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GiDefaultContext.h; sourceTree = "<group>"; };
+		2C44750F2175C8D7002A9110 /* DbFcf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFcf.h; sourceTree = "<group>"; };
+		2C4475102175C8D8002A9110 /* DbAbstractViewportDataForDbViewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractViewportDataForDbViewport.h; sourceTree = "<group>"; };
+		2C4475112175C8D8002A9110 /* DbDiametricDimension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDiametricDimension.h; sourceTree = "<group>"; };
+		2C4475122175C8D8002A9110 /* DbSectionViewStyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSectionViewStyle.h; sourceTree = "<group>"; };
+		2C4475132175C8D8002A9110 /* DbLayerTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayerTable.h; sourceTree = "<group>"; };
+		2C4475142175C8D8002A9110 /* DbNamedPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbNamedPath.h; sourceTree = "<group>"; };
+		2C4475152175C8D9002A9110 /* SmartClsIdPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmartClsIdPtr.h; sourceTree = "<group>"; };
+		2C4475162175C8D9002A9110 /* DbSafeTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSafeTransaction.h; sourceTree = "<group>"; };
+		2C4475172175C8D9002A9110 /* DbTableContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTableContent.h; sourceTree = "<group>"; };
+		2C4475182175C8D9002A9110 /* DbSubDMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSubDMesh.h; sourceTree = "<group>"; };
+		2C4475192175C8D9002A9110 /* RxVariantValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxVariantValue.h; sourceTree = "<group>"; };
+		2C44751A2175C8DA002A9110 /* DbUndoDisablerAuto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbUndoDisablerAuto.h; sourceTree = "<group>"; };
+		2C44751B2175C8DA002A9110 /* DbCommandContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbCommandContext.h; sourceTree = "<group>"; };
+		2C44751C2175C8DA002A9110 /* DbDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDictionary.h; sourceTree = "<group>"; };
+		2C44751D2175C8DA002A9110 /* NextCodeDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NextCodeDefs.h; sourceTree = "<group>"; };
+		2C44751E2175C8DB002A9110 /* DbRasterImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRasterImage.h; sourceTree = "<group>"; };
+		2C44751F2175C8DB002A9110 /* ColorMapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorMapping.h; sourceTree = "<group>"; };
+		2C4475202175C8DB002A9110 /* DbObjectReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectReactor.h; sourceTree = "<group>"; };
+		2C4475212175C8DB002A9110 /* OdList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdList.h; sourceTree = "<group>"; };
+		2C4475222175C8DB002A9110 /* GsMarkerArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GsMarkerArray.h; sourceTree = "<group>"; };
+		2C4475232175C8DB002A9110 /* DbMLeaderBreaks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMLeaderBreaks.h; sourceTree = "<group>"; };
+		2C4475242175C8DC002A9110 /* DbHostAppServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbHostAppServices.h; sourceTree = "<group>"; };
+		2C4475252175C8DC002A9110 /* DbFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFilter.h; sourceTree = "<group>"; };
+		2C4475262175C8DC002A9110 /* ChunkAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChunkAllocator.h; sourceTree = "<group>"; };
+		2C4475272175C8DC002A9110 /* DbHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbHandle.h; sourceTree = "<group>"; };
+		2C4475282175C8DC002A9110 /* OdToolKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdToolKit.h; sourceTree = "<group>"; };
+		2C4475292175C8DD002A9110 /* RxProtocolReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxProtocolReactor.h; sourceTree = "<group>"; };
+		2C44752A2175C8DD002A9110 /* VLObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLObject.h; sourceTree = "<group>"; };
+		2C44752B2175C8DD002A9110 /* RxEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxEvent.h; sourceTree = "<group>"; };
+		2C44752C2175C8DD002A9110 /* DbMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMaterial.h; sourceTree = "<group>"; };
+		2C44752E2175C8DE002A9110 /* C3dModelerDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = C3dModelerDefines.h; sourceTree = "<group>"; };
+		2C44752F2175C8DE002A9110 /* ModelerModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelerModule.h; sourceTree = "<group>"; };
+		2C4475302175C8DE002A9110 /* ModelGeomExport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelGeomExport.h; sourceTree = "<group>"; };
+		2C4475312175C8DE002A9110 /* UInt16Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UInt16Array.h; sourceTree = "<group>"; };
+		2C4475322175C8DE002A9110 /* CmColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmColor.h; sourceTree = "<group>"; };
+		2C4475332175C8DE002A9110 /* DbHyperlink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbHyperlink.h; sourceTree = "<group>"; };
+		2C4475342175C8DE002A9110 /* DbArc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbArc.h; sourceTree = "<group>"; };
+		2C4475352175C8DF002A9110 /* DbCurve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbCurve.h; sourceTree = "<group>"; };
+		2C4475362175C8DF002A9110 /* CmColorBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmColorBase.h; sourceTree = "<group>"; };
+		2C4475372175C8DF002A9110 /* RxRasterServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxRasterServices.h; sourceTree = "<group>"; };
+		2C4475382175C8DF002A9110 /* DbLayerTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayerTableRecord.h; sourceTree = "<group>"; };
+		2C4475392175C8E0002A9110 /* QuasiVarDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuasiVarDefs.h; sourceTree = "<group>"; };
+		2C44753A2175C8E0002A9110 /* DbAppEntityGrips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAppEntityGrips.h; sourceTree = "<group>"; };
+		2C44753B2175C8E0002A9110 /* DbLinetypeTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLinetypeTable.h; sourceTree = "<group>"; };
+		2C44753C2175C8E0002A9110 /* DbRenderSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRenderSettings.h; sourceTree = "<group>"; };
+		2C44753D2175C8E0002A9110 /* DbGrip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGrip.h; sourceTree = "<group>"; };
+		2C44753E2175C8E1002A9110 /* DbFaceRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbFaceRecord.h; sourceTree = "<group>"; };
+		2C44753F2175C8E1002A9110 /* ModelerDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelerDefs.h; sourceTree = "<group>"; };
+		2C4475402175C8E1002A9110 /* DbXrecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbXrecord.h; sourceTree = "<group>"; };
+		2C4475412175C8E1002A9110 /* DbProxyObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbProxyObject.h; sourceTree = "<group>"; };
+		2C4475422175C8E2002A9110 /* DbSectionablePE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSectionablePE.h; sourceTree = "<group>"; };
+		2C4475432175C8E2002A9110 /* Tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tables.h; sourceTree = "<group>"; };
+		2C4475442175C8E2002A9110 /* DbDatabaseCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDatabaseCollection.h; sourceTree = "<group>"; };
+		2C4475452175C8E2002A9110 /* UInt32Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UInt32Array.h; sourceTree = "<group>"; };
+		2C4475462175C8E2002A9110 /* DbLibraryInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLibraryInfo.h; sourceTree = "<group>"; };
+		2C4475482175C8E3002A9110 /* DbBlock1PtParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlock1PtParameter.h; sourceTree = "<group>"; };
+		2C4475492175C8E3002A9110 /* DbBlock2PtParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlock2PtParameter.h; sourceTree = "<group>"; };
+		2C44754A2175C8E3002A9110 /* DbBlockActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockActions.h; sourceTree = "<group>"; };
+		2C44754B2175C8E3002A9110 /* DbBlockAlignmentParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockAlignmentParameter.h; sourceTree = "<group>"; };
+		2C44754C2175C8E3002A9110 /* DbBlockBasepointParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockBasepointParameter.h; sourceTree = "<group>"; };
+		2C44754D2175C8E3002A9110 /* DbBlockConstraintParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockConstraintParameters.h; sourceTree = "<group>"; };
+		2C44754E2175C8E3002A9110 /* DbBlockElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockElement.h; sourceTree = "<group>"; };
+		2C44754F2175C8E3002A9110 /* DbBlockFlipParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockFlipParameter.h; sourceTree = "<group>"; };
+		2C4475502175C8E3002A9110 /* DbBlockGrips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockGrips.h; sourceTree = "<group>"; };
+		2C4475512175C8E3002A9110 /* DbBlockLinearParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockLinearParameter.h; sourceTree = "<group>"; };
+		2C4475522175C8E3002A9110 /* DbBlockLookUpParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockLookUpParameter.h; sourceTree = "<group>"; };
+		2C4475532175C8E3002A9110 /* DbBlockParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockParameter.h; sourceTree = "<group>"; };
+		2C4475542175C8E3002A9110 /* DbBlockParamValueSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockParamValueSet.h; sourceTree = "<group>"; };
+		2C4475552175C8E3002A9110 /* DbBlockPointParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockPointParameter.h; sourceTree = "<group>"; };
+		2C4475562175C8E3002A9110 /* DbBlockPolarParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockPolarParameter.h; sourceTree = "<group>"; };
+		2C4475572175C8E3002A9110 /* DbBlockPropertiesTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockPropertiesTable.h; sourceTree = "<group>"; };
+		2C4475582175C8E3002A9110 /* DbBlockRepresentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockRepresentation.h; sourceTree = "<group>"; };
+		2C4475592175C8E3002A9110 /* DbBlockRepresentationData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockRepresentationData.h; sourceTree = "<group>"; };
+		2C44755A2175C8E3002A9110 /* DbBlockRotationParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockRotationParameter.h; sourceTree = "<group>"; };
+		2C44755B2175C8E3002A9110 /* DbBlockVisibilityParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockVisibilityParameter.h; sourceTree = "<group>"; };
+		2C44755C2175C8E3002A9110 /* DbBlockXYParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockXYParameter.h; sourceTree = "<group>"; };
+		2C44755D2175C8E3002A9110 /* DbConstraintsInterfacePE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbConstraintsInterfacePE.h; sourceTree = "<group>"; };
+		2C44755E2175C8E3002A9110 /* DbDynamicBlockProxyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDynamicBlockProxyNode.h; sourceTree = "<group>"; };
+		2C44755F2175C8E3002A9110 /* DbDynamicBlockPurgePreventer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDynamicBlockPurgePreventer.h; sourceTree = "<group>"; };
+		2C4475602175C8E3002A9110 /* DbProxyEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbProxyEntity.h; sourceTree = "<group>"; };
+		2C4475612175C8E3002A9110 /* DbBlockEnd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbBlockEnd.h; sourceTree = "<group>"; };
+		2C4475622175C8E3002A9110 /* DbMline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMline.h; sourceTree = "<group>"; };
+		2C4475632175C8E4002A9110 /* DbLayerState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayerState.h; sourceTree = "<group>"; };
+		2C4475642175C8E4002A9110 /* GeDxfIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeDxfIO.h; sourceTree = "<group>"; };
+		2C4475652175C8E4002A9110 /* ErrorDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ErrorDefs.h; sourceTree = "<group>"; };
+		2C4475662175C8E4002A9110 /* odole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = odole.h; sourceTree = "<group>"; };
+		2C4475672175C8E4002A9110 /* DbRegAppTableRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRegAppTableRecord.h; sourceTree = "<group>"; };
+		2C4475682175C8E5002A9110 /* MessageDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageDefs.h; sourceTree = "<group>"; };
+		2C4475692175C8E5002A9110 /* OdPlatformSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdPlatformSettings.h; sourceTree = "<group>"; };
+		2C44756A2175C8E5002A9110 /* DbAcisIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAcisIO.h; sourceTree = "<group>"; };
+		2C44756B2175C8E5002A9110 /* OdCharConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdCharConverter.h; sourceTree = "<group>"; };
+		2C44756C2175C8E6002A9110 /* DbAbstractViewportDataForDbViewTabRec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractViewportDataForDbViewTabRec.h; sourceTree = "<group>"; };
+		2C44756D2175C8E6002A9110 /* OdMultimap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdMultimap.h; sourceTree = "<group>"; };
+		2C44756E2175C8E6002A9110 /* OdString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdString.h; sourceTree = "<group>"; };
+		2C44756F2175C8E6002A9110 /* OdGUID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdGUID.h; sourceTree = "<group>"; };
+		2C4475702175C8E6002A9110 /* GeDwgIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeDwgIO.h; sourceTree = "<group>"; };
+		2C4475712175C8E7002A9110 /* diagnostics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = diagnostics.h; sourceTree = "<group>"; };
+		2C4475722175C8E7002A9110 /* OdVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdVector.h; sourceTree = "<group>"; };
+		2C4475732175C8E7002A9110 /* DbMotionPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbMotionPath.h; sourceTree = "<group>"; };
+		2C4475742175C8E7002A9110 /* DbDynBlockReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDynBlockReference.h; sourceTree = "<group>"; };
+		2C4475752175C8E7002A9110 /* DbRadialDimensionLarge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRadialDimensionLarge.h; sourceTree = "<group>"; };
+		2C4475762175C8E8002A9110 /* DbSweepOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSweepOptions.h; sourceTree = "<group>"; };
+		2C4475772175C8E8002A9110 /* DoubleArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DoubleArray.h; sourceTree = "<group>"; };
+		2C4475782175C8E8002A9110 /* DynamicLinker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicLinker.h; sourceTree = "<group>"; };
+		2C4475792175C8E8002A9110 /* DbSequenceEnd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSequenceEnd.h; sourceTree = "<group>"; };
+		2C44757A2175C8E8002A9110 /* TD_PackPop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TD_PackPop.h; sourceTree = "<group>"; };
+		2C44757B2175C8E9002A9110 /* SSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSet.h; sourceTree = "<group>"; };
+		2C44757C2175C8E9002A9110 /* DbTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbTable.h; sourceTree = "<group>"; };
+		2C44757D2175C8E9002A9110 /* DbEvalGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbEvalGraph.h; sourceTree = "<group>"; };
+		2C44757E2175C8E9002A9110 /* Db2dPolyline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Db2dPolyline.h; sourceTree = "<group>"; };
+		2C44757F2175C8EA002A9110 /* DbPageController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbPageController.h; sourceTree = "<group>"; };
+		2C4475802175C8EA002A9110 /* OdTimeStamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdTimeStamp.h; sourceTree = "<group>"; };
+		2C4475812175C8EA002A9110 /* DbVertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbVertex.h; sourceTree = "<group>"; };
+		2C4475822175C8EA002A9110 /* StaticRxObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StaticRxObject.h; sourceTree = "<group>"; };
+		2C4475832175C8EA002A9110 /* OdUnitsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdUnitsFormatter.h; sourceTree = "<group>"; };
+		2C4475852175C8EB002A9110 /* PdfKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdfKey.h; sourceTree = "<group>"; };
+		2C4475862175C8EB002A9110 /* PdfPlatforms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PdfPlatforms.h; sourceTree = "<group>"; };
+		2C4475872175C8EB002A9110 /* DbRasterVariables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRasterVariables.h; sourceTree = "<group>"; };
+		2C4475882175C8EB002A9110 /* DbLayerFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLayerFilter.h; sourceTree = "<group>"; };
+		2C4475892175C8EB002A9110 /* Int64Array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Int64Array.h; sourceTree = "<group>"; };
+		2C44758A2175C8EC002A9110 /* DbGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbGroup.h; sourceTree = "<group>"; };
+		2C44758B2175C8EC002A9110 /* DbRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRegion.h; sourceTree = "<group>"; };
+		2C44758C2175C8EC002A9110 /* DbSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSurface.h; sourceTree = "<group>"; };
+		2C44758D2175C8EC002A9110 /* DbAbstractPlotDataForDbViewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbAbstractPlotDataForDbViewport.h; sourceTree = "<group>"; };
+		2C44758E2175C8EC002A9110 /* Entities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Entities.h; sourceTree = "<group>"; };
+		2C44758F2175C8EC002A9110 /* DbEntityOverrule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbEntityOverrule.h; sourceTree = "<group>"; };
+		2C4475902175C8ED002A9110 /* DbCurvePE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbCurvePE.h; sourceTree = "<group>"; };
+		2C4475912175C8ED002A9110 /* OdMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdMutex.h; sourceTree = "<group>"; };
+		2C4475922175C8ED002A9110 /* DbEntityIntersectionPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbEntityIntersectionPE.h; sourceTree = "<group>"; };
+		2C4475932175C8ED002A9110 /* OdPlatformStreamer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdPlatformStreamer.h; sourceTree = "<group>"; };
+		2C4475942175C8ED002A9110 /* HatchPattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HatchPattern.h; sourceTree = "<group>"; };
+		2C4475952175C8EE002A9110 /* RxModuleSoftReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxModuleSoftReference.h; sourceTree = "<group>"; };
+		2C4475962175C8EE002A9110 /* RxMultiCast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RxMultiCast.h; sourceTree = "<group>"; };
+		2C4475972175C8EE002A9110 /* DbCircle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbCircle.h; sourceTree = "<group>"; };
+		2C4475982175C8EE002A9110 /* DbObjectIdGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbObjectIdGraph.h; sourceTree = "<group>"; };
+		2C4475992175C8EF002A9110 /* DbRegAppTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRegAppTable.h; sourceTree = "<group>"; };
+		2C44759A2175C8EF002A9110 /* CmTransparencyArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmTransparencyArray.h; sourceTree = "<group>"; };
+		2C44759B2175C8EF002A9110 /* DbSubentId.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSubentId.h; sourceTree = "<group>"; };
+		2C44759C2175C8EF002A9110 /* CmColorArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CmColorArray.h; sourceTree = "<group>"; };
+		2C44759D2175C8EF002A9110 /* DbSpatialIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSpatialIndex.h; sourceTree = "<group>"; };
+		2C44759E2175C8EF002A9110 /* DbSortentsTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbSortentsTable.h; sourceTree = "<group>"; };
+		2C44759F2175C8F0002A9110 /* DbRevolvedSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbRevolvedSurface.h; sourceTree = "<group>"; };
+		2C4475A02175C8F0002A9110 /* DbDgnLSPE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbDgnLSPE.h; sourceTree = "<group>"; };
+		2C4475A12175C8F0002A9110 /* SysVarInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SysVarInfo.h; sourceTree = "<group>"; };
+		2C4475A22175C8F0002A9110 /* DbLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DbLight.h; sourceTree = "<group>"; };
+		2C4475A42175C90B002A9110 /* iOdaApplication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iOdaApplication.h; sourceTree = "<group>"; };
+		2C4475A52175C90B002A9110 /* ExPrintConsole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExPrintConsole.h; sourceTree = "<group>"; };
+		2C4475A62175C90B002A9110 /* OdFileBuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OdFileBuf.h; sourceTree = "<group>"; };
+		2C4475A72175C90C002A9110 /* ExSystemServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExSystemServices.h; sourceTree = "<group>"; };
+		2C4475A82175C90C002A9110 /* StdAfx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StdAfx.h; sourceTree = "<group>"; };
+		2C4475A92175C90C002A9110 /* iStrConv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iStrConv.h; sourceTree = "<group>"; };
+		2C4475AA2175C90C002A9110 /* ExHostAppServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExHostAppServices.h; sourceTree = "<group>"; };
+		2C4475AB2175C90C002A9110 /* ExTtfFileNameByDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExTtfFileNameByDescriptor.h; sourceTree = "<group>"; };
+		2C4475AC2175C90C002A9110 /* iOdaAppServices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iOdaAppServices.h; sourceTree = "<group>"; };
+		2C4475AD2175C90D002A9110 /* ExGiRasterImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExGiRasterImage.h; sourceTree = "<group>"; };
+		2C4475AE2175C923002A9110 /* stdafx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stdafx.cpp; sourceTree = "<group>"; };
+		2C4475AF2175C923002A9110 /* DwgViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DwgViewController.mm; sourceTree = "<group>"; };
+		2C4475B02175C923002A9110 /* DwgViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DwgViewController.h; sourceTree = "<group>"; };
+		2C4475B12175C924002A9110 /* stdafx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdafx.h; sourceTree = "<group>"; };
+		2C4475B72175C942002A9110 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
+		2C4475B92175C94E002A9110 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
+		2C460016214BABFE00D4202C /* IphoneBIMe.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = IphoneBIMe.entitlements; sourceTree = "<group>"; };
+		2C460017214BB4FE00D4202C /* PBMessageController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMessageController.h; sourceTree = "<group>"; };
+		2C460018214BB4FE00D4202C /* PBMessageController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMessageController.m; sourceTree = "<group>"; };
+		2C481285214F79E100153B80 /* PBUnReadTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBUnReadTableViewCell.h; sourceTree = "<group>"; };
+		2C481286214F79E100153B80 /* PBUnReadTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBUnReadTableViewCell.m; sourceTree = "<group>"; };
+		2C481288214F90E100153B80 /* PBUnReadMesModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBUnReadMesModel.h; sourceTree = "<group>"; };
+		2C481289214F90E100153B80 /* PBUnReadMesModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBUnReadMesModel.m; sourceTree = "<group>"; };
+		2C4F59052138E71900690DD3 /* SDBrowserImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBrowserImageView.h; sourceTree = "<group>"; };
+		2C4F59062138E71900690DD3 /* SDBrowserImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDBrowserImageView.m; sourceTree = "<group>"; };
+		2C4F59072138E71900690DD3 /* SDPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowser.h; sourceTree = "<group>"; };
+		2C4F59082138E71900690DD3 /* SDPhotoBrowser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDPhotoBrowser.m; sourceTree = "<group>"; };
+		2C4F59092138E71900690DD3 /* SDPhotoBrowserConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowserConfig.h; sourceTree = "<group>"; };
+		2C4F590A2138E71900690DD3 /* SDWaitingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWaitingView.h; sourceTree = "<group>"; };
+		2C4F590B2138E71900690DD3 /* SDWaitingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDWaitingView.m; sourceTree = "<group>"; };
+		2C4F590F2139190100690DD3 /* PBCommentsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCommentsModel.h; sourceTree = "<group>"; };
+		2C4F59102139190100690DD3 /* PBCommentsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCommentsModel.m; sourceTree = "<group>"; };
+		2C4FED41211453B000D5306A /* PBDocSearchController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDocSearchController.h; sourceTree = "<group>"; };
+		2C4FED42211453B000D5306A /* PBDocSearchController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDocSearchController.m; sourceTree = "<group>"; };
+		2C5067F420FD935100D5F47A /* PBMineView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMineView.h; sourceTree = "<group>"; };
+		2C5067F520FD935100D5F47A /* PBMineView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMineView.m; sourceTree = "<group>"; };
+		2C5067F820FDB30600D5F47A /* MenuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MenuView.h; sourceTree = "<group>"; };
+		2C5067F920FDB30600D5F47A /* MenuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MenuView.m; sourceTree = "<group>"; };
+		2C511F9F212A61E1009A3A0E /* PBDateTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDateTableViewCell.h; sourceTree = "<group>"; };
+		2C511FA0212A61E1009A3A0E /* PBDateTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDateTableViewCell.m; sourceTree = "<group>"; };
+		2C511FA2212A72AD009A3A0E /* PBEditDateView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEditDateView.h; sourceTree = "<group>"; };
+		2C511FA3212A72AD009A3A0E /* PBEditDateView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEditDateView.m; sourceTree = "<group>"; };
+		2C511FCA212AAE8B009A3A0E /* NSDate+PBCategory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSDate+PBCategory.h"; sourceTree = "<group>"; };
+		2C511FCB212AAE8B009A3A0E /* NSDate+PBCategory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDate+PBCategory.m"; sourceTree = "<group>"; };
+		2C52CEED21227B880008317C /* PBAddIssueController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAddIssueController.h; sourceTree = "<group>"; };
+		2C52CEF1212280C90008317C /* PBTableHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTableHeaderView.h; sourceTree = "<group>"; };
+		2C52CEF2212280C90008317C /* PBTableHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTableHeaderView.m; sourceTree = "<group>"; };
+		2C52CEF42122A8580008317C /* PBInputTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBInputTableViewCell.h; sourceTree = "<group>"; };
+		2C52CEF52122A8580008317C /* PBInputTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBInputTableViewCell.m; sourceTree = "<group>"; };
+		2C52CEF72122AD390008317C /* PBIssueAddModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueAddModel.h; sourceTree = "<group>"; };
+		2C52CEF82122AD390008317C /* PBIssueAddModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueAddModel.m; sourceTree = "<group>"; };
+		2C52CEFA2122B1BD0008317C /* PBEditTextController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEditTextController.h; sourceTree = "<group>"; };
+		2C52CEFB2122B1BD0008317C /* PBEditTextController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEditTextController.m; sourceTree = "<group>"; };
+		2C533A3921E84598009E6D08 /* PBIssueDrawingsShowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueDrawingsShowController.h; sourceTree = "<group>"; };
+		2C533A3A21E84598009E6D08 /* PBIssueDrawingsShowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueDrawingsShowController.m; sourceTree = "<group>"; };
+		2C533A3F21E8481D009E6D08 /* PBIssuePositionTypeController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssuePositionTypeController.h; sourceTree = "<group>"; };
+		2C533A4021E8481D009E6D08 /* PBIssuePositionTypeController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssuePositionTypeController.m; sourceTree = "<group>"; };
+		2C54495B211037F3005D6F63 /* PBDocModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDocModel.h; sourceTree = "<group>"; };
+		2C54495C211037F3005D6F63 /* PBDocModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDocModel.m; sourceTree = "<group>"; };
+		2C54495E21103D81005D6F63 /* PBDocListTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDocListTableViewCell.h; sourceTree = "<group>"; };
+		2C54495F21103D81005D6F63 /* PBDocListTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDocListTableViewCell.m; sourceTree = "<group>"; };
+		2C55AE87212D65470042290F /* PBImageCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBImageCollectionViewCell.h; sourceTree = "<group>"; };
+		2C55AE88212D65470042290F /* PBImageCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBImageCollectionViewCell.m; sourceTree = "<group>"; };
+		2C5AA47824FDFC3A00981543 /* PBBlankTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBBlankTableViewCell.h; sourceTree = "<group>"; };
+		2C5AA47924FDFC3A00981543 /* PBBlankTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBBlankTableViewCell.m; sourceTree = "<group>"; };
+		2C5DCED32154F16600A68B28 /* PBChangePWController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBChangePWController.h; sourceTree = "<group>"; };
+		2C5DCED42154F16600A68B28 /* PBChangePWController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBChangePWController.m; sourceTree = "<group>"; };
+		2C5DCED92154FDBE00A68B28 /* GTMBase64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMBase64.h; sourceTree = "<group>"; };
+		2C5DCEDA2154FDBE00A68B28 /* GTMBase64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMBase64.m; sourceTree = "<group>"; };
+		2C5DCEDB2154FDBE00A68B28 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = "<group>"; };
+		2C5DCEDC2154FDBE00A68B28 /* PGGCryptoDES.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PGGCryptoDES.h; sourceTree = "<group>"; };
+		2C5DCEDD2154FDBE00A68B28 /* PGGCryptoDES.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PGGCryptoDES.m; sourceTree = "<group>"; };
+		2C5F1AF62121584300157314 /* PBIssueBaseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueBaseController.h; sourceTree = "<group>"; };
+		2C5F1AF72121584300157314 /* PBIssueBaseController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueBaseController.m; sourceTree = "<group>"; };
+		2C5F1AFF212166B300157314 /* PBIssueSearchController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueSearchController.h; sourceTree = "<group>"; };
+		2C5F1B00212166B300157314 /* PBIssueSearchController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueSearchController.m; sourceTree = "<group>"; };
+		2C65AEC424EB78C7000347D7 /* PBCheckTaskViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCheckTaskViewController.h; sourceTree = "<group>"; };
+		2C65AEC524EB78C7000347D7 /* PBCheckTaskViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCheckTaskViewController.m; sourceTree = "<group>"; };
+		2C65AEC724EBA0D3000347D7 /* PBListTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBListTableViewCell.h; sourceTree = "<group>"; };
+		2C65AEC824EBA0D3000347D7 /* PBListTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBListTableViewCell.m; sourceTree = "<group>"; };
+		2C65AECA24EBC882000347D7 /* PBCheckViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCheckViewController.h; sourceTree = "<group>"; };
+		2C65AECB24EBC882000347D7 /* PBCheckViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCheckViewController.m; sourceTree = "<group>"; };
+		2C65AECD24EBD00A000347D7 /* examineAdd4.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = examineAdd4.plist; sourceTree = "<group>"; };
+		2C65AECF24ED001B000347D7 /* PBExamineDetailController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineDetailController.h; sourceTree = "<group>"; };
+		2C65AED024ED001B000347D7 /* PBExamineDetailController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineDetailController.m; sourceTree = "<group>"; };
+		2C65AED424ED2886000347D7 /* PBCheckTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCheckTableViewCell.h; sourceTree = "<group>"; };
+		2C65AED524ED2887000347D7 /* PBCheckTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCheckTableViewCell.m; sourceTree = "<group>"; };
+		2C65AED724EE6F9F000347D7 /* PBRoleModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRoleModel.h; sourceTree = "<group>"; };
+		2C65AED824EE6F9F000347D7 /* PBRoleModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRoleModel.m; sourceTree = "<group>"; };
+		2C65AEDA24F39BAB000347D7 /* PBExamineListToCheckCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineListToCheckCell.h; sourceTree = "<group>"; };
+		2C65AEDB24F39BAB000347D7 /* PBExamineListToCheckCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineListToCheckCell.m; sourceTree = "<group>"; };
+		2C65AEDD24F4FD92000347D7 /* PBVideoCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBVideoCollectionViewCell.h; sourceTree = "<group>"; };
+		2C65AEDE24F4FD92000347D7 /* PBVideoCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBVideoCollectionViewCell.m; sourceTree = "<group>"; };
+		2C65AEE024F5F941000347D7 /* PBVideoPlayViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBVideoPlayViewController.h; sourceTree = "<group>"; };
+		2C65AEE124F5F941000347D7 /* PBVideoPlayViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBVideoPlayViewController.m; sourceTree = "<group>"; };
+		2C66CBEB216C811B0039C19A /* PBProjectPower.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBProjectPower.h; sourceTree = "<group>"; };
+		2C66CBEC216C811B0039C19A /* PBProjectPower.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBProjectPower.m; sourceTree = "<group>"; };
+		2C6996482435C7820015EE17 /* PBStructureViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBStructureViewController.h; sourceTree = "<group>"; };
+		2C6996492435C7820015EE17 /* PBStructureViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBStructureViewController.m; sourceTree = "<group>"; };
+		2C69964B2435DCCB0015EE17 /* PBStructureTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBStructureTableViewCell.h; sourceTree = "<group>"; };
+		2C69964C2435DCCB0015EE17 /* PBStructureTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBStructureTableViewCell.m; sourceTree = "<group>"; };
+		2C6BF926211972370030F318 /* PBPromptView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPromptView.h; sourceTree = "<group>"; };
+		2C6BF927211972370030F318 /* PBPromptView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPromptView.m; sourceTree = "<group>"; };
+		2C77D96921AD334600AEB02C /* PBResultModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBResultModel.h; sourceTree = "<group>"; };
+		2C77D96A21AD334600AEB02C /* PBResultModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBResultModel.m; sourceTree = "<group>"; };
+		2C77F7842182BD9B002BF912 /* PBShareView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBShareView.h; sourceTree = "<group>"; };
+		2C77F7852182BD9B002BF912 /* PBShareView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBShareView.m; sourceTree = "<group>"; };
+		2C77F7872182ECCA002BF912 /* PBShareBtn.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PBShareBtn.xib; sourceTree = "<group>"; };
+		2C77F7892182ED06002BF912 /* PBShareBtn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBShareBtn.h; sourceTree = "<group>"; };
+		2C77F78A2182ED06002BF912 /* PBShareBtn.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBShareBtn.m; sourceTree = "<group>"; };
+		2C77F78C21830830002BF912 /* PBShareCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBShareCell.h; sourceTree = "<group>"; };
+		2C77F78D21830830002BF912 /* PBShareCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBShareCell.m; sourceTree = "<group>"; };
+		2C85434B21AE894100F570A0 /* PBExamineSearchController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineSearchController.h; sourceTree = "<group>"; };
+		2C85434C21AE894100F570A0 /* PBExamineSearchController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineSearchController.m; sourceTree = "<group>"; };
+		2C85434E21AE8A1300F570A0 /* PBAddExamineController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAddExamineController.h; sourceTree = "<group>"; };
+		2C85434F21AE8A1300F570A0 /* PBAddExamineController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAddExamineController.m; sourceTree = "<group>"; };
+		2C8DD16C247BAB6A009B6C26 /* PBProjectInfoView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBProjectInfoView.h; sourceTree = "<group>"; };
+		2C8DD16D247BAB6A009B6C26 /* PBProjectInfoView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBProjectInfoView.m; sourceTree = "<group>"; };
+		2C8DD17D247F704C009B6C26 /* LinPullBottomViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinPullBottomViewController.m; sourceTree = "<group>"; };
+		2C8DD17E247F704C009B6C26 /* LinPullTopViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinPullTopViewController.m; sourceTree = "<group>"; };
+		2C8DD17F247F704C009B6C26 /* LinPullMainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinPullMainViewController.h; sourceTree = "<group>"; };
+		2C8DD180247F704C009B6C26 /* LinPullBottomViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinPullBottomViewController.h; sourceTree = "<group>"; };
+		2C8DD181247F704C009B6C26 /* LinPullTopViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinPullTopViewController.h; sourceTree = "<group>"; };
+		2C8DD182247F704C009B6C26 /* LinPullMainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinPullMainViewController.m; sourceTree = "<group>"; };
+		2C8DD184247F704C009B6C26 /* JYPulleyScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JYPulleyScrollView.m; sourceTree = "<group>"; };
+		2C8DD185247F704C009B6C26 /* JYPulleyViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JYPulleyViewController.m; sourceTree = "<group>"; };
+		2C8DD186247F704C009B6C26 /* JYPulleyScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JYPulleyScrollView.h; sourceTree = "<group>"; };
+		2C8DD187247F704C009B6C26 /* JYPulleyViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JYPulleyViewController.h; sourceTree = "<group>"; };
+		2C8DD194247F7B95009B6C26 /* UIImageView+CSCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+CSCategory.h"; sourceTree = "<group>"; };
+		2C8DD195247F7B95009B6C26 /* UIImageView+CSCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+CSCategory.m"; sourceTree = "<group>"; };
+		2C91965C24C93DA400F00EE8 /* PBSetViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSetViewController.h; sourceTree = "<group>"; };
+		2C91965D24C93DA400F00EE8 /* PBSetViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSetViewController.m; sourceTree = "<group>"; };
+		2C91965F24CEBA4600F00EE8 /* PBScanningViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScanningViewController.h; sourceTree = "<group>"; };
+		2C91966024CEBA4600F00EE8 /* PBScanningViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScanningViewController.m; sourceTree = "<group>"; };
+		2C91966F24D0093800F00EE8 /* PBModelViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBModelViewController.h; sourceTree = "<group>"; };
+		2C91967024D0093800F00EE8 /* PBModelViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBModelViewController.m; sourceTree = "<group>"; };
+		2C91967224D17F7A00F00EE8 /* PBModelLeftTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBModelLeftTableViewCell.h; sourceTree = "<group>"; };
+		2C91967324D17F7A00F00EE8 /* PBModelLeftTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBModelLeftTableViewCell.m; sourceTree = "<group>"; };
+		2C91967524D17FC700F00EE8 /* PBRightTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRightTableViewCell.h; sourceTree = "<group>"; };
+		2C91967624D17FC700F00EE8 /* PBRightTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRightTableViewCell.m; sourceTree = "<group>"; };
+		2C91967824D40D3700F00EE8 /* PBModelSearchController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PBModelSearchController.h; path = ../../Issue/ViewControllers/PBModelSearchController.h; sourceTree = "<group>"; };
+		2C91967924D40D3700F00EE8 /* PBModelSearchController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PBModelSearchController.m; path = ../../Issue/ViewControllers/PBModelSearchController.m; sourceTree = "<group>"; };
+		2C91E5E921C0F091000D3312 /* examineAdd.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = examineAdd.plist; sourceTree = "<group>"; };
+		2C91E5EB21C238FD000D3312 /* PBExamineAddModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineAddModel.h; sourceTree = "<group>"; };
+		2C91E5EC21C238FD000D3312 /* PBExamineAddModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineAddModel.m; sourceTree = "<group>"; };
+		2C91E5EF21C254FD000D3312 /* PBExamineInputTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineInputTableViewCell.h; sourceTree = "<group>"; };
+		2C91E5F021C254FD000D3312 /* PBExamineInputTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineInputTableViewCell.m; sourceTree = "<group>"; };
+		2C91E5F521C2562D000D3312 /* PBOneChooseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBOneChooseTableViewCell.h; sourceTree = "<group>"; };
+		2C91E5F621C2562D000D3312 /* PBOneChooseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBOneChooseTableViewCell.m; sourceTree = "<group>"; };
+		2C91E5F821C2563C000D3312 /* PBTwoChooseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTwoChooseTableViewCell.h; sourceTree = "<group>"; };
+		2C91E5F921C2563C000D3312 /* PBTwoChooseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTwoChooseTableViewCell.m; sourceTree = "<group>"; };
+		2C91E5FB21C25650000D3312 /* PBMoreChooseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMoreChooseTableViewCell.h; sourceTree = "<group>"; };
+		2C91E5FC21C25650000D3312 /* PBMoreChooseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMoreChooseTableViewCell.m; sourceTree = "<group>"; };
+		2C91E5FE21C25F8A000D3312 /* PBEditTimeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEditTimeTableViewCell.h; sourceTree = "<group>"; };
+		2C91E5FF21C25F8A000D3312 /* PBEditTimeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEditTimeTableViewCell.m; sourceTree = "<group>"; };
+		2C91E60121C26531000D3312 /* PBTextShowTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTextShowTableViewCell.h; sourceTree = "<group>"; };
+		2C91E60221C26531000D3312 /* PBTextShowTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTextShowTableViewCell.m; sourceTree = "<group>"; };
+		2C9567542552801F00001080 /* PBExamineListPicCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PBExamineListPicCell.h; path = AddExamineView/PBExamineListPicCell.h; sourceTree = "<group>"; };
+		2C9567552552801F00001080 /* PBExamineListPicCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PBExamineListPicCell.m; path = AddExamineView/PBExamineListPicCell.m; sourceTree = "<group>"; };
+		2C9567572553E8EC00001080 /* PBExamineListTwoPicCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineListTwoPicCell.h; sourceTree = "<group>"; };
+		2C9567582553E8EC00001080 /* PBExamineListTwoPicCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineListTwoPicCell.m; sourceTree = "<group>"; };
+		2C95675D2553F57B00001080 /* PBExamineListMorePicCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineListMorePicCell.h; sourceTree = "<group>"; };
+		2C95675E2553F57B00001080 /* PBExamineListMorePicCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineListMorePicCell.m; sourceTree = "<group>"; };
+		2C96B95225CA92E700218DF5 /* loading_push.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = loading_push.json; sourceTree = "<group>"; };
+		2C96B95325CA92E700218DF5 /* loading_refresh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = loading_refresh.json; sourceTree = "<group>"; };
+		2C96B95425CA92E700218DF5 /* loading_alone.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = loading_alone.json; sourceTree = "<group>"; };
+		2C96B95825CAA42E00218DF5 /* PBRefreshGifHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRefreshGifHeader.h; sourceTree = "<group>"; };
+		2C96B95925CAA42E00218DF5 /* PBRefreshGifHeader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRefreshGifHeader.m; sourceTree = "<group>"; };
+		2C992DDF28C4AAE7007AE4BC /* PBMateralTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMateralTableViewCell.h; sourceTree = "<group>"; };
+		2C992DE028C4AAE7007AE4BC /* PBMateralTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMateralTableViewCell.m; sourceTree = "<group>"; };
+		2C9A701B255A353000F00A60 /* PBComponentHierarchyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBComponentHierarchyView.h; sourceTree = "<group>"; };
+		2C9A701C255A353000F00A60 /* PBComponentHierarchyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBComponentHierarchyView.m; sourceTree = "<group>"; };
+		2C9C307F259ACBCD003809E8 /* PBRecordImageTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRecordImageTableViewCell.h; sourceTree = "<group>"; };
+		2C9C3080259ACBCE003809E8 /* PBRecordImageTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRecordImageTableViewCell.m; sourceTree = "<group>"; };
+		2CA07073246A78F900F9D6D1 /* PBMapViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMapViewController.h; sourceTree = "<group>"; };
+		2CA07074246A78F900F9D6D1 /* PBMapViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMapViewController.m; sourceTree = "<group>"; };
+		2CA07076246B991500F9D6D1 /* PBAnnotationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PBAnnotationView.h; path = ../Models/PBAnnotationView.h; sourceTree = "<group>"; };
+		2CA07077246B991500F9D6D1 /* PBAnnotationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = PBAnnotationView.m; path = ../Models/PBAnnotationView.m; sourceTree = "<group>"; };
+		2CAB58472570F67300101631 /* PBTextInputTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTextInputTableViewCell.h; sourceTree = "<group>"; };
+		2CAB58482570F67300101631 /* PBTextInputTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTextInputTableViewCell.m; sourceTree = "<group>"; };
+		2CAB584F2574BCD000101631 /* PBTopTitleTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTopTitleTableViewCell.h; sourceTree = "<group>"; };
+		2CAB58502574BCD000101631 /* PBTopTitleTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTopTitleTableViewCell.m; sourceTree = "<group>"; };
+		2CAB58522574D36600101631 /* PBTimeChooseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTimeChooseTableViewCell.h; sourceTree = "<group>"; };
+		2CAB58532574D36600101631 /* PBTimeChooseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTimeChooseTableViewCell.m; sourceTree = "<group>"; };
+		2CAB58552574F6E100101631 /* PBEditTimeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEditTimeView.h; sourceTree = "<group>"; };
+		2CAB58562574F6E100101631 /* PBEditTimeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEditTimeView.m; sourceTree = "<group>"; };
+		2CAB58582578CDCA00101631 /* PBPersonChooseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonChooseTableViewCell.h; sourceTree = "<group>"; };
+		2CAB58592578CDCA00101631 /* PBPersonChooseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonChooseTableViewCell.m; sourceTree = "<group>"; };
+		2CAB585B2579E21A00101631 /* PBPersonListView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonListView.h; sourceTree = "<group>"; };
+		2CAB585C2579E21A00101631 /* PBPersonListView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonListView.m; sourceTree = "<group>"; };
+		2CAB585E2579E86300101631 /* PBPersonListCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonListCollectionViewCell.h; sourceTree = "<group>"; };
+		2CAB585F2579E86300101631 /* PBPersonListCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonListCollectionViewCell.m; sourceTree = "<group>"; };
+		2CAB586A257F4E4000101631 /* PBArtifactsListTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBArtifactsListTableViewCell.h; sourceTree = "<group>"; };
+		2CAB586B257F4E4000101631 /* PBArtifactsListTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBArtifactsListTableViewCell.m; sourceTree = "<group>"; };
+		2CAB586D257F5BD500101631 /* PBAritifactsTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAritifactsTableViewCell.h; sourceTree = "<group>"; };
+		2CAB586E257F5BD500101631 /* PBAritifactsTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAritifactsTableViewCell.m; sourceTree = "<group>"; };
+		2CAB58722583264800101631 /* examineAdd3.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = examineAdd3.plist; sourceTree = "<group>"; };
+		2CAB5874258768EE00101631 /* PBRadioTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRadioTableViewCell.h; sourceTree = "<group>"; };
+		2CAB5875258768EE00101631 /* PBRadioTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRadioTableViewCell.m; sourceTree = "<group>"; };
+		2CAB587725876CCB00101631 /* PBInstructionsTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBInstructionsTableViewCell.h; sourceTree = "<group>"; };
+		2CAB587825876CCB00101631 /* PBInstructionsTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBInstructionsTableViewCell.m; sourceTree = "<group>"; };
+		2CAB587A25889B2800101631 /* PBStatusTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBStatusTableViewCell.h; sourceTree = "<group>"; };
+		2CAB587B25889B2800101631 /* PBStatusTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBStatusTableViewCell.m; sourceTree = "<group>"; };
+		2CAB587D2588B3B900101631 /* PBCheckHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCheckHeaderView.h; sourceTree = "<group>"; };
+		2CAB587E2588B3B900101631 /* PBCheckHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCheckHeaderView.m; sourceTree = "<group>"; };
+		2CAB5880258CB43300101631 /* examineAdd5.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = examineAdd5.plist; sourceTree = "<group>"; };
+		2CAB588225908D0000101631 /* PBCheckInfoTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCheckInfoTableViewCell.h; sourceTree = "<group>"; };
+		2CAB588325908D0000101631 /* PBCheckInfoTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCheckInfoTableViewCell.m; sourceTree = "<group>"; };
+		2CAB588525919E9600101631 /* PBCheckImageTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCheckImageTableViewCell.h; sourceTree = "<group>"; };
+		2CAB588625919E9700101631 /* PBCheckImageTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCheckImageTableViewCell.m; sourceTree = "<group>"; };
+		2CAB58882594989C00101631 /* PBRecordInputTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRecordInputTableViewCell.h; sourceTree = "<group>"; };
+		2CAB58892594989C00101631 /* PBRecordInputTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRecordInputTableViewCell.m; sourceTree = "<group>"; };
+		2CB70E1425A43EE000EDF368 /* PBPersonListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonListViewController.h; sourceTree = "<group>"; };
+		2CB70E1525A43EE000EDF368 /* PBPersonListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonListViewController.m; sourceTree = "<group>"; };
+		2CB70E1725A4475000EDF368 /* PBPersonVCTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonVCTableViewCell.h; sourceTree = "<group>"; };
+		2CB70E1825A4475000EDF368 /* PBPersonVCTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonVCTableViewCell.m; sourceTree = "<group>"; };
+		2CB70E1A25A55DC700EDF368 /* PBRoleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRoleViewController.h; sourceTree = "<group>"; };
+		2CB70E1B25A55DC700EDF368 /* PBRoleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRoleViewController.m; sourceTree = "<group>"; };
+		2CB70E2025A59BD500EDF368 /* PBPersonRoleTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPersonRoleTableViewCell.h; sourceTree = "<group>"; };
+		2CB70E2125A59BD500EDF368 /* PBPersonRoleTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPersonRoleTableViewCell.m; sourceTree = "<group>"; };
+		2CB70E2325A5A6DA00EDF368 /* PBRolePersonViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRolePersonViewController.h; sourceTree = "<group>"; };
+		2CB70E2425A5A6DA00EDF368 /* PBRolePersonViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRolePersonViewController.m; sourceTree = "<group>"; };
+		2CB70E2625A6DA5200EDF368 /* PBUserModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBUserModel.h; sourceTree = "<group>"; };
+		2CB70E2725A6DA5200EDF368 /* PBUserModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBUserModel.m; sourceTree = "<group>"; };
+		2CB70E2925A6F96A00EDF368 /* PBMultiSelectPersonCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMultiSelectPersonCell.h; sourceTree = "<group>"; };
+		2CB70E2A25A6F96A00EDF368 /* PBMultiSelectPersonCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMultiSelectPersonCell.m; sourceTree = "<group>"; };
+		2CB70E2F25A80F1900EDF368 /* PBUserCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBUserCollectionViewCell.h; sourceTree = "<group>"; };
+		2CB70E3025A80F1900EDF368 /* PBUserCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBUserCollectionViewCell.m; sourceTree = "<group>"; };
+		2CB70E3225A83A7C00EDF368 /* PBSelectedPersonController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSelectedPersonController.h; sourceTree = "<group>"; };
+		2CB70E3325A83A7C00EDF368 /* PBSelectedPersonController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSelectedPersonController.m; sourceTree = "<group>"; };
+		2CB70E3525B0138500EDF368 /* PBSeleceArtifactsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSeleceArtifactsViewController.h; sourceTree = "<group>"; };
+		2CB70E3625B0138500EDF368 /* PBSeleceArtifactsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSeleceArtifactsViewController.m; sourceTree = "<group>"; };
+		2CB70E3825B0172C00EDF368 /* PBSelectArtifactsCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSelectArtifactsCell.h; sourceTree = "<group>"; };
+		2CB70E3925B0172C00EDF368 /* PBSelectArtifactsCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSelectArtifactsCell.m; sourceTree = "<group>"; };
+		2CB70E3B25B989C800EDF368 /* NSDictionary+log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+log.h"; sourceTree = "<group>"; };
+		2CB70E3C25B989C800EDF368 /* NSDictionary+log.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+log.m"; sourceTree = "<group>"; };
+		2CB72E8F210EAD260020BD39 /* BackNavItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BackNavItem.xib; sourceTree = "<group>"; };
+		2CB72E91210EAEF60020BD39 /* PBBackNavItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBBackNavItem.h; sourceTree = "<group>"; };
+		2CB72E92210EAEF60020BD39 /* PBBackNavItem.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBBackNavItem.m; sourceTree = "<group>"; };
+		2CBA3F20253D847E005047D6 /* PBListDataTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBListDataTableViewCell.h; sourceTree = "<group>"; };
+		2CBA3F21253D847E005047D6 /* PBListDataTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBListDataTableViewCell.m; sourceTree = "<group>"; };
+		2CBB3FC1248A3C63003D3089 /* PBProjectSearchView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBProjectSearchView.h; sourceTree = "<group>"; };
+		2CBB3FC2248A3C63003D3089 /* PBProjectSearchView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBProjectSearchView.m; sourceTree = "<group>"; };
+		2CBB3FC5248A45C8003D3089 /* MSSAutoresizeLabelFlow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSAutoresizeLabelFlow.m; sourceTree = "<group>"; };
+		2CBB3FC8248A45C8003D3089 /* MSSAutoresizeLabelFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSAutoresizeLabelFlowLayout.m; sourceTree = "<group>"; };
+		2CBB3FCF248A45C8003D3089 /* MSSAutoresizeLabelFlowCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSAutoresizeLabelFlowCell.h; sourceTree = "<group>"; };
+		2CBB3FD0248A45C8003D3089 /* MSSAutoresizeLabelFlowConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSAutoresizeLabelFlowConfig.h; sourceTree = "<group>"; };
+		2CBB3FD1248A45C8003D3089 /* MSSAutoresizeLabelFlow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSAutoresizeLabelFlow.h; sourceTree = "<group>"; };
+		2CBB3FD4248A45C8003D3089 /* MSSAutoresizeLabelFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MSSAutoresizeLabelFlowLayout.h; sourceTree = "<group>"; };
+		2CBB3FD6248A45C8003D3089 /* MSSAutoresizeLabelFlowCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSAutoresizeLabelFlowCell.m; sourceTree = "<group>"; };
+		2CBB3FD7248A45C8003D3089 /* MSSAutoresizeLabelFlowConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MSSAutoresizeLabelFlowConfig.m; sourceTree = "<group>"; };
+		2CBB3FE62493559F003D3089 /* PBEnterpriseCodeController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEnterpriseCodeController.h; sourceTree = "<group>"; };
+		2CBB3FE72493559F003D3089 /* PBEnterpriseCodeController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEnterpriseCodeController.m; sourceTree = "<group>"; };
+		2CBB3FEC2493634F003D3089 /* PBCodeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCodeTableViewCell.h; sourceTree = "<group>"; };
+		2CBB3FED2493634F003D3089 /* PBCodeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCodeTableViewCell.m; sourceTree = "<group>"; };
+		2CC012B8241741FF00A39754 /* PBEditLableView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEditLableView.h; sourceTree = "<group>"; };
+		2CC012B9241741FF00A39754 /* PBEditLableView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEditLableView.m; sourceTree = "<group>"; };
+		2CC012BD2418E46000A39754 /* PBTagModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTagModel.h; sourceTree = "<group>"; };
+		2CC012BE2418E46000A39754 /* PBTagModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTagModel.m; sourceTree = "<group>"; };
+		2CC012C02420AFA700A39754 /* PBAddIssueController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PBAddIssueController.mm; sourceTree = "<group>"; };
+		2CC012C22421C47600A39754 /* PBCommentsCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBCommentsCell.h; sourceTree = "<group>"; };
+		2CC012C32421C47600A39754 /* PBCommentsCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBCommentsCell.m; sourceTree = "<group>"; };
+		2CC012C52421CCDD00A39754 /* PBImageCommentsCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBImageCommentsCell.h; sourceTree = "<group>"; };
+		2CC012C62421CCDD00A39754 /* PBImageCommentsCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBImageCommentsCell.m; sourceTree = "<group>"; };
+		2CC012C82425CBA300A39754 /* Shape.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Shape.framework; sourceTree = "<group>"; };
+		2CC4043121DDBDEC00372C54 /* PBRecordingView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBRecordingView.h; sourceTree = "<group>"; };
+		2CC4043221DDBDEC00372C54 /* PBRecordingView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBRecordingView.m; sourceTree = "<group>"; };
+		2CC4043721DDDFA000372C54 /* lame.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = lame.framework; sourceTree = "<group>"; };
+		2CC4043921DDDFAD00372C54 /* ConvertAudioFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConvertAudioFile.m; sourceTree = "<group>"; };
+		2CC4043A21DDDFAD00372C54 /* ConvertAudioFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConvertAudioFile.h; sourceTree = "<group>"; };
+		2CC4043C21DE02E200372C54 /* PBAVPlayerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAVPlayerManager.h; sourceTree = "<group>"; };
+		2CC4043D21DE02E200372C54 /* PBAVPlayerManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAVPlayerManager.m; sourceTree = "<group>"; };
+		2CC5C63721AFE8C400F5976D /* PBExamineTableHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineTableHeaderView.h; sourceTree = "<group>"; };
+		2CC5C63821AFE8C400F5976D /* PBExamineTableHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineTableHeaderView.m; sourceTree = "<group>"; };
+		2CD6F9CD21EF0139008231A3 /* PBOpenViewPointController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBOpenViewPointController.h; sourceTree = "<group>"; };
+		2CD6F9CE21EF0139008231A3 /* PBOpenViewPointController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBOpenViewPointController.m; sourceTree = "<group>"; };
+		2CD6F9D021EF014D008231A3 /* PBOpenDrawController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBOpenDrawController.h; sourceTree = "<group>"; };
+		2CD6F9D121EF014D008231A3 /* PBOpenDrawController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBOpenDrawController.m; sourceTree = "<group>"; };
+		2CD6F9D321F16AFA008231A3 /* PBPublishCommentCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPublishCommentCell.h; sourceTree = "<group>"; };
+		2CD6F9D421F16AFA008231A3 /* PBPublishCommentCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPublishCommentCell.m; sourceTree = "<group>"; };
+		2CD83F9A2106FADF006111C7 /* PBDrawingsInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDrawingsInfoModel.h; sourceTree = "<group>"; };
+		2CD83F9B2106FADF006111C7 /* PBDrawingsInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDrawingsInfoModel.m; sourceTree = "<group>"; };
+		2CD83F9D21072345006111C7 /* PBViewPointDetailCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBViewPointDetailCell.h; sourceTree = "<group>"; };
+		2CD83F9E21072345006111C7 /* PBViewPointDetailCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBViewPointDetailCell.m; sourceTree = "<group>"; };
+		2CDE0D4021D0A883002A453C /* PBTestViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTestViewController.h; sourceTree = "<group>"; };
+		2CDE0D4121D0A883002A453C /* PBTestViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTestViewController.m; sourceTree = "<group>"; };
+		2CDE0D4321D0D043002A453C /* PBTwoChooseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTwoChooseView.h; sourceTree = "<group>"; };
+		2CDE0D4421D0D043002A453C /* PBTwoChooseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTwoChooseView.m; sourceTree = "<group>"; };
+		2CDE0D4621D33093002A453C /* PBTimeChooseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTimeChooseView.h; sourceTree = "<group>"; };
+		2CDE0D4721D33093002A453C /* PBTimeChooseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTimeChooseView.m; sourceTree = "<group>"; };
+		2CDE0D4921D4A547002A453C /* PBDrawingposModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDrawingposModel.h; sourceTree = "<group>"; };
+		2CDE0D4A21D4A547002A453C /* PBDrawingposModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDrawingposModel.m; sourceTree = "<group>"; };
+		2CDFB0F521CCF0EC00DD8015 /* PBItemizedViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBItemizedViewController.h; sourceTree = "<group>"; };
+		2CDFB0F621CCF0EC00DD8015 /* PBItemizedViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBItemizedViewController.m; sourceTree = "<group>"; };
+		2CF1510522BB70DC0098C0F1 /* examineAdd2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = examineAdd2.plist; sourceTree = "<group>"; };
+		2CF1510722BB712B0098C0F1 /* issueAdd2.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = issueAdd2.plist; sourceTree = "<group>"; };
+		2CF4E84820FEE0B10048E369 /* PBNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBNavigationController.h; sourceTree = "<group>"; };
+		2CF4E84920FEE0B10048E369 /* PBNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBNavigationController.m; sourceTree = "<group>"; };
+		2CF4E84C20FF29810048E369 /* PBTabBarController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTabBarController.h; sourceTree = "<group>"; };
+		2CF4E84D20FF29810048E369 /* PBTabBarController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTabBarController.m; sourceTree = "<group>"; };
+		2CF4E85820FF32440048E369 /* PBModelListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBModelListViewController.h; sourceTree = "<group>"; };
+		2CF4E85920FF32440048E369 /* PBModelListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBModelListViewController.m; sourceTree = "<group>"; };
+		2CF4E85E20FF32760048E369 /* PBIssueListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBIssueListViewController.h; sourceTree = "<group>"; };
+		2CF4E85F20FF32760048E369 /* PBIssueListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBIssueListViewController.m; sourceTree = "<group>"; };
+		2CF4E86120FF328A0048E369 /* PBExamineListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBExamineListViewController.h; sourceTree = "<group>"; };
+		2CF4E86220FF328A0048E369 /* PBExamineListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBExamineListViewController.m; sourceTree = "<group>"; };
+		2CF9BDFD21C77C1A00A2536E /* PBChooseModelViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBChooseModelViewController.h; sourceTree = "<group>"; };
+		2CF9BDFE21C77C1A00A2536E /* PBChooseModelViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBChooseModelViewController.m; sourceTree = "<group>"; };
+		2CF9BE0021C77F1B00A2536E /* PBPositioningTypeViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPositioningTypeViewController.h; sourceTree = "<group>"; };
+		2CF9BE0121C77F1B00A2536E /* PBPositioningTypeViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPositioningTypeViewController.m; sourceTree = "<group>"; };
+		2CF9BE0321C8977600A2536E /* PBEViewPointDetailsController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEViewPointDetailsController.h; sourceTree = "<group>"; };
+		2CF9BE0421C8977600A2536E /* PBEViewPointDetailsController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEViewPointDetailsController.m; sourceTree = "<group>"; };
+		2CF9BE0621C8C0CF00A2536E /* PBEDrawingsShowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBEDrawingsShowController.h; sourceTree = "<group>"; };
+		2CF9BE0721C8C0CF00A2536E /* PBEDrawingsShowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBEDrawingsShowController.m; sourceTree = "<group>"; };
+		2CF9BE0C21C9F6A600A2536E /* PBOneChooseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBOneChooseView.h; sourceTree = "<group>"; };
+		2CF9BE0D21C9F6A600A2536E /* PBOneChooseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBOneChooseView.m; sourceTree = "<group>"; };
+		2CF9BE0F21CB929C00A2536E /* PBDivisionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBDivisionViewController.h; sourceTree = "<group>"; };
+		2CF9BE1021CB929C00A2536E /* PBDivisionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBDivisionViewController.m; sourceTree = "<group>"; };
+		2CFB177521018C1F00B6BF1A /* PBPhaseLabel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPhaseLabel.h; sourceTree = "<group>"; };
+		2CFB177621018C1F00B6BF1A /* PBPhaseLabel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPhaseLabel.m; sourceTree = "<group>"; };
+		2CFB17792101CB0E00B6BF1A /* PBModelsModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBModelsModel.h; sourceTree = "<group>"; };
+		2CFB177A2101CB0E00B6BF1A /* PBModelsModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBModelsModel.m; sourceTree = "<group>"; };
+		2CFB177C2101CC1200B6BF1A /* PBModelsTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBModelsTableViewCell.h; sourceTree = "<group>"; };
+		2CFB177D2101CC1200B6BF1A /* PBModelsTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBModelsTableViewCell.m; sourceTree = "<group>"; };
+		2CFD790424C02CA8006B6E75 /* PBInputCodeTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBInputCodeTableViewCell.h; sourceTree = "<group>"; };
+		2CFD790524C02CA8006B6E75 /* PBInputCodeTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBInputCodeTableViewCell.m; sourceTree = "<group>"; };
+		2E141B7B69B652435715D5BB /* Pods-IphoneBIMe.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IphoneBIMe.release.xcconfig"; path = "Pods/Target Support Files/Pods-IphoneBIMe/Pods-IphoneBIMe.release.xcconfig"; sourceTree = "<group>"; };
+		4C385C722988F3DF00D9F626 /* SGQRCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGQRCode.h; sourceTree = "<group>"; };
+		4C385C742988F3DF00D9F626 /* SGScanViewConfigure.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGScanViewConfigure.m; sourceTree = "<group>"; };
+		4C385C752988F3DF00D9F626 /* SGScanView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGScanView.m; sourceTree = "<group>"; };
+		4C385C762988F3DF00D9F626 /* SGScanViewConfigure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGScanViewConfigure.h; sourceTree = "<group>"; };
+		4C385C772988F3DF00D9F626 /* SGScanView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGScanView.h; sourceTree = "<group>"; };
+		4C385C782988F3DF00D9F626 /* SGQRCode.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SGQRCode.bundle; sourceTree = "<group>"; };
+		4C385C7A2988F3DF00D9F626 /* SGWeakProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGWeakProxy.m; sourceTree = "<group>"; };
+		4C385C7B2988F3DF00D9F626 /* SGWeakProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGWeakProxy.h; sourceTree = "<group>"; };
+		4C385C7D2988F3DF00D9F626 /* SGTorch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGTorch.m; sourceTree = "<group>"; };
+		4C385C7E2988F3DF00D9F626 /* SGTorch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGTorch.h; sourceTree = "<group>"; };
+		4C385C7F2988F3DF00D9F626 /* SGQRCodeLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGQRCodeLog.m; sourceTree = "<group>"; };
+		4C385C812988F3DF00D9F626 /* SGGenerateQRCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGGenerateQRCode.h; sourceTree = "<group>"; };
+		4C385C822988F3DF00D9F626 /* SGScanCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGScanCode.m; sourceTree = "<group>"; };
+		4C385C832988F3DF00D9F626 /* SGScanCodeDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGScanCodeDelegate.h; sourceTree = "<group>"; };
+		4C385C842988F3DF00D9F626 /* SGScanCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGScanCode.h; sourceTree = "<group>"; };
+		4C385C852988F3DF00D9F626 /* SGGenerateQRCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGGenerateQRCode.m; sourceTree = "<group>"; };
+		4C385C872988F3DF00D9F626 /* SGSoundEffect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGSoundEffect.m; sourceTree = "<group>"; };
+		4C385C882988F3DF00D9F626 /* SGSoundEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGSoundEffect.h; sourceTree = "<group>"; };
+		4C385C8A2988F3DF00D9F626 /* SGPermissionCamera.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGPermissionCamera.m; sourceTree = "<group>"; };
+		4C385C8B2988F3DF00D9F626 /* SGPermission.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGPermission.m; sourceTree = "<group>"; };
+		4C385C8C2988F3DF00D9F626 /* SGPermissionPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SGPermissionPhoto.m; sourceTree = "<group>"; };
+		4C385C8D2988F3DF00D9F626 /* SGPermissionCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGPermissionCamera.h; sourceTree = "<group>"; };
+		4C385C8E2988F3DF00D9F626 /* SGPermission.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGPermission.h; sourceTree = "<group>"; };
+		4C385C8F2988F3DF00D9F626 /* SGPermissionPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGPermissionPhoto.h; sourceTree = "<group>"; };
+		4C385C902988F3DF00D9F626 /* SGQRCodeLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGQRCodeLog.h; sourceTree = "<group>"; };
+		4C385C9D2988F49E00D9F626 /* QQQRCodeVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QQQRCodeVC.h; sourceTree = "<group>"; };
+		4C385C9E2988F49E00D9F626 /* QQQRCodeVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QQQRCodeVC.m; sourceTree = "<group>"; };
+		4C385CA0298A068E00D9F626 /* PBNewPersonTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBNewPersonTableViewCell.h; sourceTree = "<group>"; };
+		4C385CA1298A068E00D9F626 /* PBNewPersonTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBNewPersonTableViewCell.m; sourceTree = "<group>"; };
+		4C385CA32991FC2E00D9F626 /* PBVideoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBVideoViewController.h; sourceTree = "<group>"; };
+		4C385CA42991FC2E00D9F626 /* PBVideoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBVideoViewController.m; sourceTree = "<group>"; };
+		4C385CA629922F5300D9F626 /* PBWebViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBWebViewController.h; sourceTree = "<group>"; };
+		4C385CA729922F5300D9F626 /* PBWebViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBWebViewController.m; sourceTree = "<group>"; };
+		4C82DC13290B7407007A9400 /* HJCycleView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HJCycleView.h; sourceTree = "<group>"; };
+		4C82DC14290B7407007A9400 /* HJCycleView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HJCycleView.m; sourceTree = "<group>"; };
+		4C82DC16290B7479007A9400 /* CycleCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CycleCollectionViewCell.h; sourceTree = "<group>"; };
+		4C82DC17290B7479007A9400 /* CycleCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CycleCollectionViewCell.m; sourceTree = "<group>"; };
+		4C84885128FE98250095E7C3 /* PBPanoramaListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPanoramaListViewController.h; sourceTree = "<group>"; };
+		4C84885228FE98250095E7C3 /* PBPanoramaListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPanoramaListViewController.m; sourceTree = "<group>"; };
+		4C84885428FE9B6E0095E7C3 /* PBPanoramaBaseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPanoramaBaseController.h; sourceTree = "<group>"; };
+		4C84885528FE9B6E0095E7C3 /* PBPanoramaBaseController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPanoramaBaseController.m; sourceTree = "<group>"; };
+		4C84885A28FEA9EA0095E7C3 /* PBPanoramaTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPanoramaTableViewCell.h; sourceTree = "<group>"; };
+		4C84885B28FEA9EA0095E7C3 /* PBPanoramaTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPanoramaTableViewCell.m; sourceTree = "<group>"; };
+		4C84885D28FEAC270095E7C3 /* PBPanoramaModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPanoramaModel.h; sourceTree = "<group>"; };
+		4C84885E28FEAC270095E7C3 /* PBPanoramaModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPanoramaModel.m; sourceTree = "<group>"; };
+		4C84886028FFD04A0095E7C3 /* PBPanoramaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPanoramaViewController.h; sourceTree = "<group>"; };
+		4C84886128FFD04A0095E7C3 /* PBPanoramaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPanoramaViewController.m; sourceTree = "<group>"; };
+		4C84886328FFE9810095E7C3 /* PBAddPanoramaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBAddPanoramaViewController.h; sourceTree = "<group>"; };
+		4C84886428FFE9810095E7C3 /* PBAddPanoramaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBAddPanoramaViewController.m; sourceTree = "<group>"; };
+		4C84886629012EB10095E7C3 /* PBViewPointScrollView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBViewPointScrollView.h; sourceTree = "<group>"; };
+		4C84886729012EB10095E7C3 /* PBViewPointScrollView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBViewPointScrollView.m; sourceTree = "<group>"; };
+		4C848869290152750095E7C3 /* PBScrollStageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScrollStageView.h; sourceTree = "<group>"; };
+		4C84886A290152750095E7C3 /* PBScrollStageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScrollStageView.m; sourceTree = "<group>"; };
+		4C84886C2901528A0095E7C3 /* PBScrollModelView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScrollModelView.h; sourceTree = "<group>"; };
+		4C84886D2901528A0095E7C3 /* PBScrollModelView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScrollModelView.m; sourceTree = "<group>"; };
+		4C84886F2901529C0095E7C3 /* PBScrollVpView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScrollVpView.h; sourceTree = "<group>"; };
+		4C8488702901529C0095E7C3 /* PBScrollVpView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScrollVpView.m; sourceTree = "<group>"; };
+		4C84887529029E800095E7C3 /* PBPanoramaItemModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPanoramaItemModel.h; sourceTree = "<group>"; };
+		4C84887629029E800095E7C3 /* PBPanoramaItemModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPanoramaItemModel.m; sourceTree = "<group>"; };
+		4C861A11283E3701002555A2 /* LXFPhotoLibraryManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LXFPhotoLibraryManager.h; sourceTree = "<group>"; };
+		4C861A12283E3701002555A2 /* LXFPhotoLibraryManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LXFPhotoLibraryManager.m; sourceTree = "<group>"; };
+		4C861A15283E3732002555A2 /* LXFCameraButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LXFCameraButton.h; sourceTree = "<group>"; };
+		4C861A16283E3732002555A2 /* LXFCameraButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LXFCameraButton.m; sourceTree = "<group>"; };
+		4C861A18283E3761002555A2 /* LXFCameraController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LXFCameraController.xib; sourceTree = "<group>"; };
+		4C861A19283E3761002555A2 /* LXFCameraController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LXFCameraController.m; sourceTree = "<group>"; };
+		4C861A1A283E3761002555A2 /* PBResultVideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBResultVideo.h; sourceTree = "<group>"; };
+		4C861A1B283E3761002555A2 /* PBResultVideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBResultVideo.m; sourceTree = "<group>"; };
+		4C861A1C283E3761002555A2 /* LXFCameraController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LXFCameraController.h; sourceTree = "<group>"; };
+		4C90990128D80F0B004B30C4 /* IQTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQTextView.m; sourceTree = "<group>"; };
+		4C90990228D80F0B004B30C4 /* IQTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQTextView.h; sourceTree = "<group>"; };
+		4C90990428D80F0B004B30C4 /* IQUIView+IQKeyboardToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIView+IQKeyboardToolbar.h"; sourceTree = "<group>"; };
+		4C90990528D80F0B004B30C4 /* IQToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQToolbar.m; sourceTree = "<group>"; };
+		4C90990628D80F0B004B30C4 /* IQPreviousNextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQPreviousNextView.h; sourceTree = "<group>"; };
+		4C90990728D80F0B004B30C4 /* IQTitleBarButtonItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQTitleBarButtonItem.m; sourceTree = "<group>"; };
+		4C90990828D80F0B004B30C4 /* IQBarButtonItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQBarButtonItem.m; sourceTree = "<group>"; };
+		4C90990928D80F0B004B30C4 /* IQUIView+IQKeyboardToolbar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIView+IQKeyboardToolbar.m"; sourceTree = "<group>"; };
+		4C90990A28D80F0B004B30C4 /* IQPreviousNextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQPreviousNextView.m; sourceTree = "<group>"; };
+		4C90990B28D80F0B004B30C4 /* IQToolbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQToolbar.h; sourceTree = "<group>"; };
+		4C90990C28D80F0B004B30C4 /* IQBarButtonItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQBarButtonItem.h; sourceTree = "<group>"; };
+		4C90990D28D80F0B004B30C4 /* IQTitleBarButtonItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQTitleBarButtonItem.h; sourceTree = "<group>"; };
+		4C90990F28D80F0B004B30C4 /* IQKeyboardManagerConstantsInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardManagerConstantsInternal.h; sourceTree = "<group>"; };
+		4C90991028D80F0B004B30C4 /* IQKeyboardManagerConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardManagerConstants.h; sourceTree = "<group>"; };
+		4C90991128D80F0B004B30C4 /* IQKeyboardReturnKeyHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardReturnKeyHandler.h; sourceTree = "<group>"; };
+		4C90991228D80F0B004B30C4 /* IQKeyboardManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IQKeyboardManager.h; sourceTree = "<group>"; };
+		4C90991328D80F0B004B30C4 /* IQKeyboardManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQKeyboardManager.m; sourceTree = "<group>"; };
+		4C90991528D80F0B004B30C4 /* IQNSArray+Sort.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQNSArray+Sort.m"; sourceTree = "<group>"; };
+		4C90991628D80F0B004B30C4 /* IQUIViewController+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIViewController+Additions.h"; sourceTree = "<group>"; };
+		4C90991728D80F0B004B30C4 /* IQUITextFieldView+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUITextFieldView+Additions.m"; sourceTree = "<group>"; };
+		4C90991828D80F0B004B30C4 /* IQUIScrollView+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIScrollView+Additions.m"; sourceTree = "<group>"; };
+		4C90991928D80F0B004B30C4 /* IQUIView+Hierarchy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIView+Hierarchy.m"; sourceTree = "<group>"; };
+		4C90991A28D80F0B004B30C4 /* IQNSArray+Sort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQNSArray+Sort.h"; sourceTree = "<group>"; };
+		4C90991B28D80F0B004B30C4 /* IQUIScrollView+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIScrollView+Additions.h"; sourceTree = "<group>"; };
+		4C90991C28D80F0B004B30C4 /* IQUITextFieldView+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUITextFieldView+Additions.h"; sourceTree = "<group>"; };
+		4C90991D28D80F0B004B30C4 /* IQUIViewController+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "IQUIViewController+Additions.m"; sourceTree = "<group>"; };
+		4C90991E28D80F0B004B30C4 /* IQUIView+Hierarchy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IQUIView+Hierarchy.h"; sourceTree = "<group>"; };
+		4C90991F28D80F0B004B30C4 /* IQKeyboardReturnKeyHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IQKeyboardReturnKeyHandler.m; sourceTree = "<group>"; };
+		4C90992D28D94F51004B30C4 /* PBTaskHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTaskHeaderView.h; sourceTree = "<group>"; };
+		4C90992E28D94F51004B30C4 /* PBTaskHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTaskHeaderView.m; sourceTree = "<group>"; };
+		4C93503128CB12E300476008 /* PBScheduleImgTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScheduleImgTableViewCell.h; sourceTree = "<group>"; };
+		4C93503228CB12E300476008 /* PBScheduleImgTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScheduleImgTableViewCell.m; sourceTree = "<group>"; };
+		4C93503428CB170600476008 /* PBImgAndNameCollectionViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBImgAndNameCollectionViewCell.h; sourceTree = "<group>"; };
+		4C93503528CB170600476008 /* PBImgAndNameCollectionViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBImgAndNameCollectionViewCell.m; sourceTree = "<group>"; };
+		4C93503728CB377100476008 /* PBImageModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBImageModel.h; sourceTree = "<group>"; };
+		4C93503828CB377100476008 /* PBImageModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBImageModel.m; sourceTree = "<group>"; };
+		4CD610A228AE486700BBBF67 /* PBScheduleBaseController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScheduleBaseController.h; sourceTree = "<group>"; };
+		4CD610A328AE486700BBBF67 /* PBScheduleBaseController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScheduleBaseController.m; sourceTree = "<group>"; };
+		4CD610A528AE4A3300BBBF67 /* PBScheduleListViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScheduleListViewController.h; sourceTree = "<group>"; };
+		4CD610A628AE4A3300BBBF67 /* PBScheduleListViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScheduleListViewController.m; sourceTree = "<group>"; };
+		4CD610A828B331D000BBBF67 /* PBScheduleTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScheduleTableViewCell.h; sourceTree = "<group>"; };
+		4CD610A928B331D000BBBF67 /* PBScheduleTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScheduleTableViewCell.m; sourceTree = "<group>"; };
+		4CD610AB28B35BAE00BBBF67 /* PBScheduleListModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScheduleListModel.h; sourceTree = "<group>"; };
+		4CD610AC28B35BAE00BBBF67 /* PBScheduleListModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScheduleListModel.m; sourceTree = "<group>"; };
+		4CD610AE28B36C2000BBBF67 /* PBSchedulePlanViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSchedulePlanViewController.h; sourceTree = "<group>"; };
+		4CD610AF28B36C2000BBBF67 /* PBSchedulePlanViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSchedulePlanViewController.m; sourceTree = "<group>"; };
+		4CD610B128B38AD100BBBF67 /* PBSchedulePlanTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSchedulePlanTableViewCell.h; sourceTree = "<group>"; };
+		4CD610B228B38AD100BBBF67 /* PBSchedulePlanTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSchedulePlanTableViewCell.m; sourceTree = "<group>"; };
+		4CD610B428B475D000BBBF67 /* PBSchedulePlanModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSchedulePlanModel.h; sourceTree = "<group>"; };
+		4CD610B528B475D000BBBF67 /* PBSchedulePlanModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSchedulePlanModel.m; sourceTree = "<group>"; };
+		4CD610B728B4BA6A00BBBF67 /* PBScheduleModuleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScheduleModuleViewController.h; sourceTree = "<group>"; };
+		4CD610B828B4BA6A00BBBF67 /* PBScheduleModuleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScheduleModuleViewController.m; sourceTree = "<group>"; };
+		4CD610BA28B4C0F300BBBF67 /* PBModuleTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBModuleTableViewCell.h; sourceTree = "<group>"; };
+		4CD610BB28B4C0F300BBBF67 /* PBModuleTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBModuleTableViewCell.m; sourceTree = "<group>"; };
+		4CD610BD28B5BB8300BBBF67 /* PBTaskScheduleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTaskScheduleViewController.h; sourceTree = "<group>"; };
+		4CD610BE28B5BB8300BBBF67 /* PBTaskScheduleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTaskScheduleViewController.m; sourceTree = "<group>"; };
+		4CD610C028B5BBBB00BBBF67 /* PBSitePerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSitePerViewController.h; sourceTree = "<group>"; };
+		4CD610C128B5BBBB00BBBF67 /* PBSitePerViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSitePerViewController.m; sourceTree = "<group>"; };
+		4CD610C328B5BC3A00BBBF67 /* PBSiteMechanicalViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSiteMechanicalViewController.h; sourceTree = "<group>"; };
+		4CD610C428B5BC3A00BBBF67 /* PBSiteMechanicalViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSiteMechanicalViewController.m; sourceTree = "<group>"; };
+		4CD610C628B5BC5C00BBBF67 /* PBSiteMaterialViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSiteMaterialViewController.h; sourceTree = "<group>"; };
+		4CD610C728B5BC5C00BBBF67 /* PBSiteMaterialViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSiteMaterialViewController.m; sourceTree = "<group>"; };
+		4CD610C928B5BC7300BBBF67 /* PBSafetyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSafetyViewController.h; sourceTree = "<group>"; };
+		4CD610CA28B5BC7300BBBF67 /* PBSafetyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSafetyViewController.m; sourceTree = "<group>"; };
+		4CD610CC28B5BCA100BBBF67 /* PBSuperviseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSuperviseViewController.h; sourceTree = "<group>"; };
+		4CD610CD28B5BCA100BBBF67 /* PBSuperviseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSuperviseViewController.m; sourceTree = "<group>"; };
+		4CD610CF28B5D42300BBBF67 /* PBScheduleHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBScheduleHeaderView.h; sourceTree = "<group>"; };
+		4CD610D028B5D42300BBBF67 /* PBScheduleHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBScheduleHeaderView.m; sourceTree = "<group>"; };
+		4CD610D228B619C700BBBF67 /* PBPlanTaskTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPlanTaskTableViewCell.h; sourceTree = "<group>"; };
+		4CD610D328B619C700BBBF67 /* PBPlanTaskTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPlanTaskTableViewCell.m; sourceTree = "<group>"; };
+		4CD610D528B77BC500BBBF67 /* PBTaskScheduleModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBTaskScheduleModel.h; sourceTree = "<group>"; };
+		4CD610D628B77BC500BBBF67 /* PBTaskScheduleModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBTaskScheduleModel.m; sourceTree = "<group>"; };
+		4CD610D828B8997A00BBBF67 /* PBChooseOneTaskViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBChooseOneTaskViewController.h; sourceTree = "<group>"; };
+		4CD610D928B8997A00BBBF67 /* PBChooseOneTaskViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBChooseOneTaskViewController.m; sourceTree = "<group>"; };
+		4CD610DB28BC64A600BBBF67 /* PBunPlanTaskTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBunPlanTaskTableViewCell.h; sourceTree = "<group>"; };
+		4CD610DC28BC64A600BBBF67 /* PBunPlanTaskTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBunPlanTaskTableViewCell.m; sourceTree = "<group>"; };
+		4CD610E128BDAC1000BBBF67 /* PBSitePerTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSitePerTableViewCell.h; sourceTree = "<group>"; };
+		4CD610E228BDAC1000BBBF67 /* PBSitePerTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSitePerTableViewCell.m; sourceTree = "<group>"; };
+		4CD610E428BDAD2200BBBF67 /* PBSitePerModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSitePerModel.h; sourceTree = "<group>"; };
+		4CD610E528BDAD2200BBBF67 /* PBSitePerModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSitePerModel.m; sourceTree = "<group>"; };
+		4CD610E728BDAEBB00BBBF67 /* PBPerPlanModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPerPlanModel.h; sourceTree = "<group>"; };
+		4CD610E828BDAEBB00BBBF67 /* PBPerPlanModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPerPlanModel.m; sourceTree = "<group>"; };
+		4CD610EA28BDDF2400BBBF67 /* PBChooseType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBChooseType.h; sourceTree = "<group>"; };
+		4CD610EB28BDDF2400BBBF67 /* PBChooseType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBChooseType.m; sourceTree = "<group>"; };
+		4CD610ED28BF593600BBBF67 /* PBSafetyTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSafetyTableViewCell.h; sourceTree = "<group>"; };
+		4CD610EE28BF593600BBBF67 /* PBSafetyTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSafetyTableViewCell.m; sourceTree = "<group>"; };
+		4CD610F028BF656C00BBBF67 /* PBSafetyModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSafetyModel.h; sourceTree = "<group>"; };
+		4CD610F128BF656C00BBBF67 /* PBSafetyModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSafetyModel.m; sourceTree = "<group>"; };
+		4CD610F928C0522700BBBF67 /* PBSuperviseModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSuperviseModel.h; sourceTree = "<group>"; };
+		4CD610FA28C0522700BBBF67 /* PBSuperviseModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSuperviseModel.m; sourceTree = "<group>"; };
+		4CD610FC28C052B900BBBF67 /* PBSuperviseTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSuperviseTableViewCell.h; sourceTree = "<group>"; };
+		4CD610FD28C052B900BBBF67 /* PBSuperviseTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSuperviseTableViewCell.m; sourceTree = "<group>"; };
+		4CD610FF28C5A18400BBBF67 /* PBSchedulesElementTableViewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSchedulesElementTableViewCell.h; sourceTree = "<group>"; };
+		4CD6110028C5A18400BBBF67 /* PBSchedulesElementTableViewCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSchedulesElementTableViewCell.m; sourceTree = "<group>"; };
+		4CD6110228C5CE6100BBBF67 /* PBMechanicalPlanModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBMechanicalPlanModel.h; sourceTree = "<group>"; };
+		4CD6110328C5CE6100BBBF67 /* PBMechanicalPlanModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBMechanicalPlanModel.m; sourceTree = "<group>"; };
+		4CD6110528C5CE7200BBBF67 /* PBSiteMechanicalModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBSiteMechanicalModel.h; sourceTree = "<group>"; };
+		4CD6110628C5CE7200BBBF67 /* PBSiteMechanicalModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBSiteMechanicalModel.m; sourceTree = "<group>"; };
+		4CEFA89328D0519A00EC7336 /* PBPreScheduleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBPreScheduleViewController.h; sourceTree = "<group>"; };
+		4CEFA89428D0519A00EC7336 /* PBPreScheduleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPreScheduleViewController.m; sourceTree = "<group>"; };
+		4CEFA89828D1721900EC7336 /* PBBussinessViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBBussinessViewController.h; sourceTree = "<group>"; };
+		4CEFA89928D1721900EC7336 /* PBBussinessViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBBussinessViewController.m; sourceTree = "<group>"; };
+		5D943DF8CC49884A8AD54943 /* Pods-IphoneBIMe.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-IphoneBIMe.debug.xcconfig"; path = "Pods/Target Support Files/Pods-IphoneBIMe/Pods-IphoneBIMe.debug.xcconfig"; sourceTree = "<group>"; };
+		8304961227859AEF0032219C /* PBEAddImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBEAddImageView.h; sourceTree = "<group>"; };
+		8304961327859AEF0032219C /* PBEAddImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBEAddImageView.m; sourceTree = "<group>"; };
+		830496152786C7AF0032219C /* PBTaskViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBTaskViewController.m; sourceTree = "<group>"; };
+		830496162786C7AF0032219C /* PBTaskViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBTaskViewController.h; sourceTree = "<group>"; };
+		830496182786D86D0032219C /* PBETaskModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBETaskModel.m; sourceTree = "<group>"; };
+		830496192786D86D0032219C /* PBETaskModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBETaskModel.h; sourceTree = "<group>"; };
+		8304961B2786D8F10032219C /* PBETaskInfoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBETaskInfoModel.m; sourceTree = "<group>"; };
+		8304961C2786D8F20032219C /* PBETaskInfoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBETaskInfoModel.h; sourceTree = "<group>"; };
+		8304961E2787D8120032219C /* PBChooseTasksCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBChooseTasksCell.h; sourceTree = "<group>"; };
+		8304961F2787D8120032219C /* PBChooseTasksCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBChooseTasksCell.m; sourceTree = "<group>"; };
+		8304962127881A340032219C /* PBSelectTaskCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSelectTaskCell.h; sourceTree = "<group>"; };
+		8304962227881A340032219C /* PBSelectTaskCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBSelectTaskCell.m; sourceTree = "<group>"; };
+		83A3DBAF27BBA9990012C539 /* examineAdd6.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = examineAdd6.plist; sourceTree = "<group>"; };
+		83A3DBB127BCA81E0012C539 /* PBCheckBoxTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCheckBoxTableViewCell.h; sourceTree = "<group>"; };
+		83A3DBB227BCA81E0012C539 /* PBCheckBoxTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCheckBoxTableViewCell.m; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		2C2A6EEE20F88F1000218D5C /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2C2F24C621F9B53B00549388 /* Photos.framework in Frameworks */,
+				2C03ED7A2181C01E00846554 /* CoreGraphics.framework in Frameworks */,
+				2C03ED782181C01200846554 /* libsqlite3.tbd in Frameworks */,
+				2C982EA225FB758100D5B6EA /* OpenGLES.framework in Frameworks */,
+				2CC012CA2425CC8E00A39754 /* Shape.framework in Frameworks */,
+				2CC4043821DDDFA000372C54 /* lame.framework in Frameworks */,
+				2C982EA025FB752400D5B6EA /* GLKit.framework in Frameworks */,
+				EA52BE6D1B2A59329A352FD6 /* libPods-IphoneBIMe.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		2C06890022769D560026B30F /* AES */ = {
+			isa = PBXGroup;
+			children = (
+				2C06890122769D790026B30F /* JHAES.h */,
+				2C06890222769D790026B30F /* JHAES.m */,
+			);
+			path = AES;
+			sourceTree = "<group>";
+		};
+		2C07FAC12133E71F005C67D6 /* YJProgressHUDK */ = {
+			isa = PBXGroup;
+			children = (
+				2C07FAC22133E71F005C67D6 /* images.bundle */,
+				2C07FAC32133E71F005C67D6 /* YJProgressHUD.h */,
+				2C07FAC42133E71F005C67D6 /* YJProgressHUD.m */,
+			);
+			path = YJProgressHUDK;
+			sourceTree = "<group>";
+		};
+		2C0F11222509FA3800A510DE /* Retrieve */ = {
+			isa = PBXGroup;
+			children = (
+				2C0F1132250F1E9E00A510DE /* PBRetrieveView1.h */,
+				2C0F1133250F1E9E00A510DE /* PBRetrieveView1.m */,
+			);
+			path = Retrieve;
+			sourceTree = "<group>";
+		};
+		2C144D2121ABCEA50011557A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				2C0F11222509FA3800A510DE /* Retrieve */,
+				2C91E5EE21C2537B000D3312 /* AddExamineView */,
+				2C144D2621ABCF2E0011557A /* PBExamineListTableViewCell.h */,
+				2C144D2721ABCF2E0011557A /* PBExamineListTableViewCell.m */,
+				2C9567542552801F00001080 /* PBExamineListPicCell.h */,
+				2C9567552552801F00001080 /* PBExamineListPicCell.m */,
+				2C9567572553E8EC00001080 /* PBExamineListTwoPicCell.h */,
+				2C9567582553E8EC00001080 /* PBExamineListTwoPicCell.m */,
+				2C95675D2553F57B00001080 /* PBExamineListMorePicCell.h */,
+				2C95675E2553F57B00001080 /* PBExamineListMorePicCell.m */,
+				2C65AEDA24F39BAB000347D7 /* PBExamineListToCheckCell.h */,
+				2C65AEDB24F39BAB000347D7 /* PBExamineListToCheckCell.m */,
+				2CC5C63721AFE8C400F5976D /* PBExamineTableHeaderView.h */,
+				2CC5C63821AFE8C400F5976D /* PBExamineTableHeaderView.m */,
+				2C316D1C2202E73A009C90FD /* PBRecordTableViewCell.h */,
+				2C316D1D2202E73A009C90FD /* PBRecordTableViewCell.m */,
+				2C9C307F259ACBCD003809E8 /* PBRecordImageTableViewCell.h */,
+				2C9C3080259ACBCE003809E8 /* PBRecordImageTableViewCell.m */,
+				2C3EB3B32500E3A0005BF2DF /* PBVideoListTableViewCell.h */,
+				2C3EB3B42500E3A0005BF2DF /* PBVideoListTableViewCell.m */,
+				2C3EB3B625063117005BF2DF /* PBScreeningView.h */,
+				2C3EB3B725063117005BF2DF /* PBScreeningView.m */,
+				2C0F11352510BE2A00A510DE /* PBScreeningCell.h */,
+				2C0F11362510BE2A00A510DE /* PBScreeningCell.m */,
+				2C0F1143251C95C500A510DE /* PBChooseArtifactsCell.h */,
+				2C0F1144251C95C500A510DE /* PBChooseArtifactsCell.m */,
+				2CB70E3825B0172C00EDF368 /* PBSelectArtifactsCell.h */,
+				2CB70E3925B0172C00EDF368 /* PBSelectArtifactsCell.m */,
+				8304962127881A340032219C /* PBSelectTaskCell.h */,
+				8304962227881A340032219C /* PBSelectTaskCell.m */,
+				8304961E2787D8120032219C /* PBChooseTasksCell.h */,
+				8304961F2787D8120032219C /* PBChooseTasksCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		2C144D2221ABCEB10011557A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				8304961C2786D8F20032219C /* PBETaskInfoModel.h */,
+				8304961B2786D8F10032219C /* PBETaskInfoModel.m */,
+				830496192786D86D0032219C /* PBETaskModel.h */,
+				830496182786D86D0032219C /* PBETaskModel.m */,
+				2C144D2C21ABF4800011557A /* PBExamineListModel.h */,
+				2C144D2D21ABF4800011557A /* PBExamineListModel.m */,
+				2C91E5EB21C238FD000D3312 /* PBExamineAddModel.h */,
+				2C91E5EC21C238FD000D3312 /* PBExamineAddModel.m */,
+				2CDE0D4921D4A547002A453C /* PBDrawingposModel.h */,
+				2CDE0D4A21D4A547002A453C /* PBDrawingposModel.m */,
+				2C316D192202E11C009C90FD /* PBRecordModel.h */,
+				2C316D1A2202E11C009C90FD /* PBRecordModel.m */,
+				2C65AED724EE6F9F000347D7 /* PBRoleModel.h */,
+				2C65AED824EE6F9F000347D7 /* PBRoleModel.m */,
+				2C0F113D2518A7E300A510DE /* PBArtifactsModel.h */,
+				2C0F113E2518A7E300A510DE /* PBArtifactsModel.m */,
+				2C0F11402519FD9600A510DE /* PBArtifactsInfoModel.h */,
+				2C0F11412519FD9600A510DE /* PBArtifactsInfoModel.m */,
+				2CB70E2625A6DA5200EDF368 /* PBUserModel.h */,
+				2CB70E2725A6DA5200EDF368 /* PBUserModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		2C1AC3EB211AA29C00D3C412 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				2C52CEF0212280100008317C /* AddIssueView */,
+				2C1AC3ED211ABB0700D3C412 /* PBDropdownMenu.h */,
+				2C1AC3EE211ABB0700D3C412 /* PBDropdownMenu.m */,
+				2C1AC3F0211AF87500D3C412 /* PBIssueListTableViewCell.h */,
+				2C1AC3F1211AF87500D3C412 /* PBIssueListTableViewCell.m */,
+				2C2C1201213E3A650031A71B /* PBCommentsFooterView.h */,
+				2C2C1202213E3A650031A71B /* PBCommentsFooterView.m */,
+				2CD6F9D321F16AFA008231A3 /* PBPublishCommentCell.h */,
+				2CD6F9D421F16AFA008231A3 /* PBPublishCommentCell.m */,
+				2CC012C22421C47600A39754 /* PBCommentsCell.h */,
+				2CC012C32421C47600A39754 /* PBCommentsCell.m */,
+				2CC012C52421CCDD00A39754 /* PBImageCommentsCell.h */,
+				2CC012C62421CCDD00A39754 /* PBImageCommentsCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		2C1AC3EC211AA2AD00D3C412 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				2C1AC3F3211AF9CB00D3C412 /* PBIssueListModel.h */,
+				2C1AC3F4211AF9CB00D3C412 /* PBIssueListModel.m */,
+				2C1AC3F6211AFAE900D3C412 /* PBIssueNavModel.h */,
+				2C1AC3F7211AFAE900D3C412 /* PBIssueNavModel.m */,
+				2C52CEF72122AD390008317C /* PBIssueAddModel.h */,
+				2C52CEF82122AD390008317C /* PBIssueAddModel.m */,
+				2C16563A212C1D75007CA9FD /* PBPersonModel.h */,
+				2C16563B212C1D75007CA9FD /* PBPersonModel.m */,
+				2C3912FF212FD8CE0055665C /* PBIssueDetailModel.h */,
+				2C391300212FD8CE0055665C /* PBIssueDetailModel.m */,
+				2C4F590F2139190100690DD3 /* PBCommentsModel.h */,
+				2C4F59102139190100690DD3 /* PBCommentsModel.m */,
+				2CC012BD2418E46000A39754 /* PBTagModel.h */,
+				2CC012BE2418E46000A39754 /* PBTagModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		2C20E9AA20FC405C00A18732 /* Login */ = {
+			isa = PBXGroup;
+			children = (
+				2CBB3FEB2493632F003D3089 /* Views */,
+				2CBB3FEA24936308003D3089 /* Models */,
+				2C20E9AB20FC408F00A18732 /* ViewControllers */,
+			);
+			path = Login;
+			sourceTree = "<group>";
+		};
+		2C20E9AB20FC408F00A18732 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				2C20E9AC20FC40C100A18732 /* PBLoginViewController.h */,
+				2C20E9AD20FC40C100A18732 /* PBLoginViewController.m */,
+				2C381594213F84CA00763B0B /* PBAgreementViewController.h */,
+				2C381595213F84CA00763B0B /* PBAgreementViewController.m */,
+				2CBB3FE62493559F003D3089 /* PBEnterpriseCodeController.h */,
+				2CBB3FE72493559F003D3089 /* PBEnterpriseCodeController.m */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		2C20E9AF20FC49B600A18732 /* Category */ = {
+			isa = PBXGroup;
+			children = (
+				2CB70E3B25B989C800EDF368 /* NSDictionary+log.h */,
+				2CB70E3C25B989C800EDF368 /* NSDictionary+log.m */,
+				2C20E9B020FC49B600A18732 /* NSString+PBCategory.h */,
+				2C20E9B120FC49B600A18732 /* NSString+PBCategory.m */,
+				2C20E9B220FC49B600A18732 /* PBAdditonal.h */,
+				2C20E9B320FC49B600A18732 /* UIBarButtonItem+PBCategory.h */,
+				2C20E9B420FC49B600A18732 /* UIBarButtonItem+PBCategory.m */,
+				2C20E9B520FC49B600A18732 /* UIButton+ZJFAdditon.h */,
+				2C20E9B620FC49B600A18732 /* UIButton+ZJFAdditon.m */,
+				2C20E9B720FC49B600A18732 /* UIColor+ZJFAdditon.h */,
+				2C20E9B820FC49B600A18732 /* UIColor+ZJFAdditon.m */,
+				2C20E9B920FC49B600A18732 /* UILabel+ZJFAdditon.h */,
+				2C20E9BA20FC49B600A18732 /* UILabel+ZJFAdditon.m */,
+				2C20E9BB20FC49B600A18732 /* UIView+PBCategory.h */,
+				2C20E9BC20FC49B600A18732 /* UIView+PBCategory.m */,
+				2C511FCA212AAE8B009A3A0E /* NSDate+PBCategory.h */,
+				2C511FCB212AAE8B009A3A0E /* NSDate+PBCategory.m */,
+				2C8DD194247F7B95009B6C26 /* UIImageView+CSCategory.h */,
+				2C8DD195247F7B95009B6C26 /* UIImageView+CSCategory.m */,
+			);
+			path = Category;
+			sourceTree = "<group>";
+		};
+		2C20E9C320FC49EB00A18732 /* Common */ = {
+			isa = PBXGroup;
+			children = (
+				2C3DC801211C160600DC1CB6 /* Models */,
+				2CB72E8E210EACA30020BD39 /* Views */,
+				2CF4E84B20FF29600048E369 /* TabBarController */,
+				2CF4E84720FEE0900048E369 /* NavigationController */,
+				2C20E9C420FC49EB00A18732 /* PBComon.h */,
+				2C1267C0210AC3FF00FC7DFE /* PBAlertController.h */,
+				2C1267C1210AC3FF00FC7DFE /* PBAlertController.m */,
+			);
+			path = Common;
+			sourceTree = "<group>";
+		};
+		2C2A6EE820F88F1000218D5C = {
+			isa = PBXGroup;
+			children = (
+				2C2A6EF320F88F1000218D5C /* IphoneBIMe */,
+				2C2A6EF220F88F1000218D5C /* Products */,
+				9581E7A5CB44576CE3295CDF /* Pods */,
+				423147E9A6AE4CFA711244A3 /* Frameworks */,
+			);
+			sourceTree = "<group>";
+		};
+		2C2A6EF220F88F1000218D5C /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				2C2A6EF120F88F1000218D5C /* IphoneBIMe.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		2C2A6EF320F88F1000218D5C /* IphoneBIMe */ = {
+			isa = PBXGroup;
+			children = (
+				2C460016214BABFE00D4202C /* IphoneBIMe.entitlements */,
+				2C2A6F0A20F8915500218D5C /* Classes */,
+				2C2A6F0B20F8928B00218D5C /* Others */,
+			);
+			path = IphoneBIMe;
+			sourceTree = "<group>";
+		};
+		2C2A6F0A20F8915500218D5C /* Classes */ = {
+			isa = PBXGroup;
+			children = (
+				2C20E9AA20FC405C00A18732 /* Login */,
+				2C2A6F0C20F8943400218D5C /* ProjectList */,
+				2CF4E84F20FF2FD60048E369 /* Project */,
+				2C20E9AF20FC49B600A18732 /* Category */,
+				2C2A6F1720F8A4A300218D5C /* Tools */,
+				2C20E9C320FC49EB00A18732 /* Common */,
+			);
+			path = Classes;
+			sourceTree = "<group>";
+		};
+		2C2A6F0B20F8928B00218D5C /* Others */ = {
+			isa = PBXGroup;
+			children = (
+				2C96B95425CA92E700218DF5 /* loading_alone.json */,
+				2C96B95225CA92E700218DF5 /* loading_push.json */,
+				2C96B95325CA92E700218DF5 /* loading_refresh.json */,
+				2C2E1D0321C3841D00310E81 /* STAR_bim365_com_cn.cer */,
+				2C2E1D0421C3841D00310E81 /* STAR_probim_cn.cer */,
+				2C2A6EF420F88F1000218D5C /* AppDelegate.h */,
+				2C2A6EF520F88F1000218D5C /* AppDelegate.m */,
+				2C2A6EFA20F88F1000218D5C /* Main.storyboard */,
+				2C2A6EFD20F88F1000218D5C /* Assets.xcassets */,
+				2C2A6EFF20F88F1000218D5C /* LaunchScreen.storyboard */,
+				2C2A6F0220F88F1000218D5C /* Info.plist */,
+				2C2A6F0320F88F1000218D5C /* main.m */,
+				2C2A6F1620F8A1BF00218D5C /* PrefixHeader.pch */,
+				2C165638212BAE1A007CA9FD /* issueAdd.plist */,
+				2CF1510722BB712B0098C0F1 /* issueAdd2.plist */,
+				2C0F113B2514553E00A510DE /* examineAdd1.plist */,
+				2CF1510522BB70DC0098C0F1 /* examineAdd2.plist */,
+				2CAB58722583264800101631 /* examineAdd3.plist */,
+				2C91E5E921C0F091000D3312 /* examineAdd.plist */,
+				2C65AECD24EBD00A000347D7 /* examineAdd4.plist */,
+				2CAB5880258CB43300101631 /* examineAdd5.plist */,
+				83A3DBAF27BBA9990012C539 /* examineAdd6.plist */,
+			);
+			name = Others;
+			sourceTree = "<group>";
+		};
+		2C2A6F0C20F8943400218D5C /* ProjectList */ = {
+			isa = PBXGroup;
+			children = (
+				2C2A6F0F20F8949300218D5C /* Models */,
+				2C2A6F0E20F8948C00218D5C /* Views */,
+				2C2A6F0D20F8948200218D5C /* ViewControllers */,
+			);
+			path = ProjectList;
+			sourceTree = "<group>";
+		};
+		2C2A6F0D20F8948200218D5C /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				2C8DD17C247F704C009B6C26 /* amapEffect */,
+				2C2A6F1020F894DA00218D5C /* PBProjectListViewController.h */,
+				2C2A6F1120F894DA00218D5C /* PBProjectListViewController.m */,
+				2C460017214BB4FE00D4202C /* PBMessageController.h */,
+				2C460018214BB4FE00D4202C /* PBMessageController.m */,
+				2C5DCED32154F16600A68B28 /* PBChangePWController.h */,
+				2C5DCED42154F16600A68B28 /* PBChangePWController.m */,
+				2CA07073246A78F900F9D6D1 /* PBMapViewController.h */,
+				2CA07074246A78F900F9D6D1 /* PBMapViewController.m */,
+				2C91965C24C93DA400F00EE8 /* PBSetViewController.h */,
+				2C91965D24C93DA400F00EE8 /* PBSetViewController.m */,
+				2C91965F24CEBA4600F00EE8 /* PBScanningViewController.h */,
+				2C91966024CEBA4600F00EE8 /* PBScanningViewController.m */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		2C2A6F0E20F8948C00218D5C /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				2CBB3FC4248A45C8003D3089 /* AutoFitLabel */,
+				2C5067F720FDB30600D5F47A /* Menu */,
+				2CA07076246B991500F9D6D1 /* PBAnnotationView.h */,
+				2CA07077246B991500F9D6D1 /* PBAnnotationView.m */,
+				2C2A6F1320F89E3F00218D5C /* PBProjectTableViewCell.h */,
+				2C2A6F1420F89E3F00218D5C /* PBProjectTableViewCell.m */,
+				2C5067F420FD935100D5F47A /* PBMineView.h */,
+				2C5067F520FD935100D5F47A /* PBMineView.m */,
+				2C481285214F79E100153B80 /* PBUnReadTableViewCell.h */,
+				2C481286214F79E100153B80 /* PBUnReadTableViewCell.m */,
+				2C1784C4246BC6BF00EE56D8 /* PBPointAnnotation.h */,
+				2C1784C5246BC6BF00EE56D8 /* PBPointAnnotation.m */,
+				2C8DD16C247BAB6A009B6C26 /* PBProjectInfoView.h */,
+				2C8DD16D247BAB6A009B6C26 /* PBProjectInfoView.m */,
+				2CBB3FC1248A3C63003D3089 /* PBProjectSearchView.h */,
+				2CBB3FC2248A3C63003D3089 /* PBProjectSearchView.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		2C2A6F0F20F8949300218D5C /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				2C20E9C520FC848900A18732 /* PBProjectModel.h */,
+				2C20E9C620FC848900A18732 /* PBProjectModel.m */,
+				2C481288214F90E100153B80 /* PBUnReadMesModel.h */,
+				2C481289214F90E100153B80 /* PBUnReadMesModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		2C2A6F1720F8A4A300218D5C /* Tools */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C712988F3DF00D9F626 /* SGQRCode */,
+				4C82DC12290B73D3007A9400 /* HJCycleView */,
+				4C861A10283E36EA002555A2 /* LXFPhotoLibraryManager */,
+				4C861A0F283E36E3002555A2 /* LXFAVFoundation */,
+				2C06890022769D560026B30F /* AES */,
+				2C5DCED82154FDBE00A68B28 /* DES */,
+				2C4F59032138E70000690DD3 /* SDK */,
+				2C07FAC12133E71F005C67D6 /* YJProgressHUDK */,
+				4C9098FF28D80F0B004B30C4 /* IQKeyboardManager */,
+				2C2A6F1820F8A6B100218D5C /* PBNetworkTools.h */,
+				2C2A6F1920F8A6B100218D5C /* PBNetworkTools.m */,
+				2CC4043C21DE02E200372C54 /* PBAVPlayerManager.h */,
+				2CC4043D21DE02E200372C54 /* PBAVPlayerManager.m */,
+				2C96B95825CAA42E00218DF5 /* PBRefreshGifHeader.h */,
+				2C96B95925CAA42E00218DF5 /* PBRefreshGifHeader.m */,
+			);
+			path = Tools;
+			sourceTree = "<group>";
+		};
+		2C3DC801211C160600DC1CB6 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				2C3DC802211C16AC00DC1CB6 /* PBNetworkModel.h */,
+				2C3DC803211C16AC00DC1CB6 /* PBNetworkModel.m */,
+				2C66CBEB216C811B0039C19A /* PBProjectPower.h */,
+				2C66CBEC216C811B0039C19A /* PBProjectPower.m */,
+				2C77D96921AD334600AEB02C /* PBResultModel.h */,
+				2C77D96A21AD334600AEB02C /* PBResultModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		2C44720D2175C730002A9110 /* Shape */ = {
+			isa = PBXGroup;
+			children = (
+				2CC012C82425CBA300A39754 /* Shape.framework */,
+				2C4472112175C7EA002A9110 /* Super */,
+				2C4472102175C7CD002A9110 /* ShapeTool */,
+				2C44720F2175C7C7002A9110 /* Include */,
+				2C44720E2175C7C0002A9110 /* Bundle */,
+			);
+			path = Shape;
+			sourceTree = "<group>";
+		};
+		2C44720E2175C7C0002A9110 /* Bundle */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472152175C83D002A9110 /* adinit.dat */,
+				2C4472142175C83D002A9110 /* hztxt.shx */,
+				2C4472132175C83D002A9110 /* marker.zip */,
+				2C4472122175C83D002A9110 /* txt.shx */,
+			);
+			path = Bundle;
+			sourceTree = "<group>";
+		};
+		2C44720F2175C7C7002A9110 /* Include */ = {
+			isa = PBXGroup;
+			children = (
+				2C44750B2175C8D7002A9110 /* AbstractViewPE.h */,
+				2C4472B32175C8AA002A9110 /* AcadPalette.h */,
+				2C44725E2175C8A0002A9110 /* AcisBuilder */,
+				2C4472452175C89D002A9110 /* ApLongTransactions.h */,
+				2C4473E22175C8C4002A9110 /* BaseObjectPtr.h */,
+				2C4473B52175C8BD002A9110 /* BoolArray.h */,
+				2C4473192175C8B8002A9110 /* Br */,
+				2C44725A2175C89F002A9110 /* BrepRenderer */,
+				2C4473F72175C8C6002A9110 /* BrepRenderer.h */,
+				2C4474002175C8C8002A9110 /* CAseDLPNTableRecord.h */,
+				2C4475262175C8DC002A9110 /* ChunkAllocator.h */,
+				2C4472772175C8A3002A9110 /* CloneFilers.h */,
+				2C4475322175C8DE002A9110 /* CmColor.h */,
+				2C44759C2175C8EF002A9110 /* CmColorArray.h */,
+				2C4475362175C8DF002A9110 /* CmColorBase.h */,
+				2C4474422175C8CD002A9110 /* CmEntityColorArray.h */,
+				2C44759A2175C8EF002A9110 /* CmTransparencyArray.h */,
+				2C44751F2175C8DB002A9110 /* ColorMapping.h */,
+				2C44757E2175C8E9002A9110 /* Db2dPolyline.h */,
+				2C4472462175C89D002A9110 /* Db2dVertex.h */,
+				2C4472202175C897002A9110 /* Db2LineAngularDimension.h */,
+				2C44748A2175C8D1002A9110 /* Db3dPolyline.h */,
+				2C4472C12175C8AD002A9110 /* Db3dPolylineVertex.h */,
+				2C4472F12175C8B0002A9110 /* Db3dSolid.h */,
+				2C4472AD2175C8A9002A9110 /* Db3PointAngularDimension.h */,
+				2C4474932175C8D3002A9110 /* DbAbstractPlotData.h */,
+				2C44744C2175C8CF002A9110 /* DbAbstractPlotDataForDbPlotSettings.h */,
+				2C44758D2175C8EC002A9110 /* DbAbstractPlotDataForDbViewport.h */,
+				2C4473DC2175C8C2002A9110 /* DbAbstractViewportData.h */,
+				2C4475062175C8D6002A9110 /* DbAbstractViewportDataForAbstractViewTabRec.h */,
+				2C4475102175C8D8002A9110 /* DbAbstractViewportDataForDbViewport.h */,
+				2C44756C2175C8E6002A9110 /* DbAbstractViewportDataForDbViewTabRec.h */,
+				2C4472762175C8A3002A9110 /* DbAbstractViewportDataForDbVpTabRec.h */,
+				2C44744F2175C8CF002A9110 /* DbAbstractViewTable.h */,
+				2C4473CA2175C8BF002A9110 /* DbAbstractViewTableRecord.h */,
+				2C44756A2175C8E5002A9110 /* DbAcisIO.h */,
+				2C4473A42175C8BA002A9110 /* DbAlignedDimension.h */,
+				2C44740E2175C8CB002A9110 /* DbAnnotationScale.h */,
+				2C4472232175C898002A9110 /* DbAnnotativeObjectPE.h */,
+				2C44753A2175C8E0002A9110 /* DbAppEntityGrips.h */,
+				2C4475342175C8DE002A9110 /* DbArc.h */,
+				2C4472EE2175C8B0002A9110 /* DbArcAlignedText.h */,
+				2C4473FB2175C8C7002A9110 /* DbArcDimension.h */,
+				2C4473A32175C8BA002A9110 /* DbAttribute.h */,
+				2C44743F2175C8CC002A9110 /* DbAttributeDefinition.h */,
+				2C44723C2175C89C002A9110 /* DbAudit.h */,
+				2C4472252175C898002A9110 /* DbBackground.h */,
+				2C4472F32175C8B1002A9110 /* DbBaseDatabase.h */,
+				2C44748D2175C8D1002A9110 /* DbBaseHostAppServices.h */,
+				2C4473F62175C8C6002A9110 /* DbBaseSubentId.h */,
+				2C4472592175C89F002A9110 /* DbBlockBegin.h */,
+				2C4475612175C8E3002A9110 /* DbBlockEnd.h */,
+				2C4473FD2175C8C8002A9110 /* DbBlockIterator.h */,
+				2C44730F2175C8B6002A9110 /* DbBlockReference.h */,
+				2C4473EA2175C8C5002A9110 /* DbBlockTable.h */,
+				2C4472F82175C8B1002A9110 /* DbBlockTableRecord.h */,
+				2C44748B2175C8D1002A9110 /* DbBody.h */,
+				2C4473A92175C8BB002A9110 /* DbBreakData.h */,
+				2C4472CF2175C8AF002A9110 /* DbCamera.h */,
+				2C4475972175C8EE002A9110 /* DbCircle.h */,
+				2C4473162175C8B7002A9110 /* DbClass.h */,
+				2C4473E12175C8C3002A9110 /* DbColor.h */,
+				2C44751B2175C8DA002A9110 /* DbCommandContext.h */,
+				2C4472BD2175C8AC002A9110 /* DbCompoundObjectId.h */,
+				2C4475352175C8DF002A9110 /* DbCurve.h */,
+				2C4475902175C8ED002A9110 /* DbCurvePE.h */,
+				2C4472B22175C8AA002A9110 /* DbDatabase.h */,
+				2C4475442175C8E2002A9110 /* DbDatabaseCollection.h */,
+				2C4474012175C8C9002A9110 /* DbDatabaseReactor.h */,
+				2C4473D52175C8C1002A9110 /* DbDataLink.h */,
+				2C4474962175C8D3002A9110 /* DbDataTable.h */,
+				2C4473B92175C8BE002A9110 /* DbDate.h */,
+				2C4473DB2175C8C2002A9110 /* DbDetailViewStyle.h */,
+				2C4475A02175C8F0002A9110 /* DbDgnLSPE.h */,
+				2C4472FA2175C8B2002A9110 /* DbDgnUnderlayHost.h */,
+				2C4475112175C8D8002A9110 /* DbDiametricDimension.h */,
+				2C44751C2175C8DA002A9110 /* DbDictionary.h */,
+				2C4473D72175C8C2002A9110 /* DbDictionaryVar.h */,
+				2C4473A62175C8BA002A9110 /* DbDictionaryWithDefault.h */,
+				2C4472C52175C8AD002A9110 /* DbDiesel.h */,
+				2C4473052175C8B4002A9110 /* DbDimAssoc.h */,
+				2C4474912175C8D2002A9110 /* DbDimData.h */,
+				2C4473042175C8B4002A9110 /* DbDimension.h */,
+				2C4473012175C8B3002A9110 /* DbDimStyleTable.h */,
+				2C4472312175C89A002A9110 /* DbDimStyleTableRecord.h */,
+				2C4475742175C8E7002A9110 /* DbDynBlockReference.h */,
+				2C4473D42175C8C1002A9110 /* DbEllipse.h */,
+				2C4472CE2175C8AF002A9110 /* DbEntity.h */,
+				2C4475922175C8ED002A9110 /* DbEntityIntersectionPE.h */,
+				2C44758F2175C8EC002A9110 /* DbEntityOverrule.h */,
+				2C44722E2175C899002A9110 /* DbEntityWithGrData.h */,
+				2C44744B2175C8CE002A9110 /* DbErrorInvalidSysvar.h */,
+				2C44757D2175C8E9002A9110 /* DbEvalGraph.h */,
+				2C4474922175C8D2002A9110 /* DbEvalWatchers.h */,
+				2C4472FB2175C8B2002A9110 /* DbExport.h */,
+				2C4474852175C8D0002A9110 /* DbExtrudedSurface.h */,
+				2C4473B32175C8BD002A9110 /* DbFace.h */,
+				2C44753E2175C8E1002A9110 /* DbFaceRecord.h */,
+				2C44750F2175C8D7002A9110 /* DbFcf.h */,
+				2C4472862175C8A6002A9110 /* DbField.h */,
+				2C4473022175C8B3002A9110 /* DbFieldValue.h */,
+				2C4472362175C89B002A9110 /* DbFiler.h */,
+				2C4475252175C8DC002A9110 /* DbFilter.h */,
+				2C4473AA2175C8BB002A9110 /* DbFormattedTableData.h */,
+				2C4472622175C8A0002A9110 /* DbFrame.h */,
+				2C44733E2175C8B8002A9110 /* DbGeEdgesDwgIO.h */,
+				2C4472AE2175C8A9002A9110 /* DbGeEdgesDxfIO.h */,
+				2C4472922175C8A8002A9110 /* DbGeoData.h */,
+				2C44749C2175C8D5002A9110 /* DbGeoDataPE.h */,
+				2C4474872175C8D0002A9110 /* DbGeoPositionMarker.h */,
+				2C4473122175C8B6002A9110 /* DbGraph.h */,
+				2C44753D2175C8E0002A9110 /* DbGrip.h */,
+				2C4472832175C8A5002A9110 /* DbGripPoints.h */,
+				2C44758A2175C8EC002A9110 /* DbGroup.h */,
+				2C44730C2175C8B5002A9110 /* DbGsManager.h */,
+				2C4475272175C8DC002A9110 /* DbHandle.h */,
+				2C44728C2175C8A7002A9110 /* DbHatch.h */,
+				2C4473C72175C8BE002A9110 /* DbHatchPE.h */,
+				2C4472242175C898002A9110 /* DbHelix.h */,
+				2C4472B52175C8AB002A9110 /* DbHostAppProgressMeter.h */,
+				2C4475242175C8DC002A9110 /* DbHostAppServices.h */,
+				2C4475332175C8DE002A9110 /* DbHyperlink.h */,
+				2C4473AC2175C8BB002A9110 /* DbIdBuffer.h */,
+				2C44750C2175C8D7002A9110 /* DbIdMapping.h */,
+				2C4473152175C8B7002A9110 /* DbImage.h */,
+				2C4472742175C8A2002A9110 /* DbIndex.h */,
+				2C4474022175C8C9002A9110 /* DbJoinEntityPE.h */,
+				2C4475882175C8EB002A9110 /* DbLayerFilter.h */,
+				2C44742F2175C8CC002A9110 /* DbLayerIndex.h */,
+				2C4475632175C8E4002A9110 /* DbLayerState.h */,
+				2C4475132175C8D8002A9110 /* DbLayerTable.h */,
+				2C4475382175C8DF002A9110 /* DbLayerTableRecord.h */,
+				2C4472D02175C8AF002A9110 /* DbLayout.h */,
+				2C4473E92175C8C5002A9110 /* DbLayoutManager.h */,
+				2C44722D2175C899002A9110 /* DbLayoutPaperPE.h */,
+				2C4473CF2175C8C0002A9110 /* DbLeader.h */,
+				2C4475462175C8E2002A9110 /* DbLibraryInfo.h */,
+				2C4475A22175C8F0002A9110 /* DbLight.h */,
+				2C44748E2175C8D2002A9110 /* DbLine.h */,
+				2C44753B2175C8E0002A9110 /* DbLinetypeTable.h */,
+				2C4472BC2175C8AC002A9110 /* DbLinetypeTableRecord.h */,
+				2C4473E02175C8C3002A9110 /* DbLinkedData.h */,
+				2C4472442175C89D002A9110 /* DbLinkedTableData.h */,
+				2C44721D2175C897002A9110 /* DbLoftedSurface.h */,
+				2C4472F02175C8B0002A9110 /* DbLoftOptions.h */,
+				2C4472B82175C8AB002A9110 /* DbLongTransaction.h */,
+				2C44723A2175C89B002A9110 /* DbMatchProperties.h */,
+				2C44752C2175C8DD002A9110 /* DbMaterial.h */,
+				2C44748C2175C8D1002A9110 /* DbMInsertBlock.h */,
+				2C44740B2175C8CA002A9110 /* DbMLeader.h */,
+				2C4475232175C8DB002A9110 /* DbMLeaderBreaks.h */,
+				2C4473A52175C8BA002A9110 /* DbMLeaderStyle.h */,
+				2C4475622175C8E3002A9110 /* DbMline.h */,
+				2C4475092175C8D6002A9110 /* DbMlineStyle.h */,
+				2C4473FF2175C8C8002A9110 /* DbModelDocViewStyle.h */,
+				2C44728B2175C8A7002A9110 /* DbModelerGeometry.h */,
+				2C4475732175C8E7002A9110 /* DbMotionPath.h */,
+				2C4474902175C8D2002A9110 /* DbMPolygon.h */,
+				2C4472752175C8A3002A9110 /* DbMText.h */,
+				2C4475142175C8D8002A9110 /* DbNamedPath.h */,
+				2C4474452175C8CD002A9110 /* DbNurbSurface.h */,
+				2C4472852175C8A6002A9110 /* DbObject.h */,
+				2C4474502175C8CF002A9110 /* DbObjectContext.h */,
+				2C4473ED2175C8C6002A9110 /* DbObjectContextCollection.h */,
+				2C4474432175C8CD002A9110 /* DbObjectContextData.h */,
+				2C4473D82175C8C2002A9110 /* DbObjectContextInterface.h */,
+				2C4472902175C8A8002A9110 /* DbObjectContextManager.h */,
+				2C4473112175C8B6002A9110 /* DbObjectId.h */,
+				2C4475982175C8EE002A9110 /* DbObjectIdGraph.h */,
+				2C4474412175C8CD002A9110 /* DbObjectIterator.h */,
+				2C44740D2175C8CA002A9110 /* DbObjectOverrule.h */,
+				2C4475202175C8DB002A9110 /* DbObjectReactor.h */,
+				2C4474972175C8D3002A9110 /* DbObjPtrArray.h */,
+				2C4473FC2175C8C8002A9110 /* DbOle2Frame.h */,
+				2C4474102175C8CB002A9110 /* DbOleFrame.h */,
+				2C44725D2175C8A0002A9110 /* DbOrdinateDimension.h */,
+				2C44757F2175C8EA002A9110 /* DbPageController.h */,
+				2C44730A2175C8B5002A9110 /* DbPersSubentManager.h */,
+				2C44726E2175C8A1002A9110 /* DbPlaceHolder.h */,
+				2C4472402175C89C002A9110 /* DbPlaneSurface.h */,
+				2C4472932175C8A8002A9110 /* DbPlotSettings.h */,
+				2C44725C2175C8A0002A9110 /* DbPlotSettingsValidator.h */,
+				2C4472892175C8A6002A9110 /* DbPlotSettingsValidatorPE.h */,
+				2C4472EF2175C8B0002A9110 /* DbPoint.h */,
+				2C4473BA2175C8BE002A9110 /* DbPointCloudObj */,
+				2C4473A02175C8B9002A9110 /* DbPolyFaceMesh.h */,
+				2C4473DE2175C8C3002A9110 /* DbPolyFaceMeshVertex.h */,
+				2C44748F2175C8D2002A9110 /* DbPolygonMesh.h */,
+				2C4472F92175C8B1002A9110 /* DbPolygonMeshVertex.h */,
+				2C44728A2175C8A7002A9110 /* DbPolyline.h */,
+				2C4475602175C8E3002A9110 /* DbProxyEntity.h */,
+				2C4474472175C8CE002A9110 /* DbProxyExt.h */,
+				2C4475412175C8E1002A9110 /* DbProxyObject.h */,
+				2C4473072175C8B4002A9110 /* DbRadialDimension.h */,
+				2C4475752175C8E7002A9110 /* DbRadialDimensionLarge.h */,
+				2C44751E2175C8DB002A9110 /* DbRasterImage.h */,
+				2C4472882175C8A6002A9110 /* DbRasterImageDef.h */,
+				2C4475872175C8EB002A9110 /* DbRasterVariables.h */,
+				2C4472822175C8A5002A9110 /* DbRay.h */,
+				2C4475992175C8EF002A9110 /* DbRegAppTable.h */,
+				2C4475672175C8E4002A9110 /* DbRegAppTableRecord.h */,
+				2C44758B2175C8EC002A9110 /* DbRegion.h */,
+				2C44753C2175C8E0002A9110 /* DbRenderSettings.h */,
+				2C44759F2175C8F0002A9110 /* DbRevolvedSurface.h */,
+				2C4472632175C8A0002A9110 /* DbRevolveOptions.h */,
+				2C4472712175C8A2002A9110 /* DbRootExport.h */,
+				2C4473F92175C8C7002A9110 /* DbRotatedDimension.h */,
+				2C4475162175C8D9002A9110 /* DbSafeTransaction.h */,
+				2C4473402175C8B8002A9110 /* DbScale.h */,
+				2C4472AF2175C8A9002A9110 /* DbSection.h */,
+				2C4475422175C8E2002A9110 /* DbSectionablePE.h */,
+				2C4473DF2175C8C3002A9110 /* DbSectionManager.h */,
+				2C4475122175C8D8002A9110 /* DbSectionViewStyle.h */,
+				2C4474402175C8CC002A9110 /* DbSecurity.h */,
+				2C4475792175C8E8002A9110 /* DbSequenceEnd.h */,
+				2C4475082175C8D6002A9110 /* DbSetPlotSettingsPE.h */,
+				2C4472912175C8A8002A9110 /* DbShape.h */,
+				2C44733F2175C8B8002A9110 /* DbSolid.h */,
+				2C44759E2175C8EF002A9110 /* DbSortentsTable.h */,
+				2C4473092175C8B5002A9110 /* DbSpatialFilter.h */,
+				2C44759D2175C8EF002A9110 /* DbSpatialIndex.h */,
+				2C44728E2175C8A7002A9110 /* DbSpline.h */,
+				2C44730D2175C8B5002A9110 /* DbSSet.h */,
+				2C4473002175C8B3002A9110 /* DbStubPtrArray.h */,
+				2C4475182175C8D9002A9110 /* DbSubDMesh.h */,
+				2C44759B2175C8EF002A9110 /* DbSubentId.h */,
+				2C4472FC2175C8B2002A9110 /* DbSun.h */,
+				2C44758C2175C8EC002A9110 /* DbSurface.h */,
+				2C4475762175C8E8002A9110 /* DbSweepOptions.h */,
+				2C44743E2175C8CC002A9110 /* DbSweptSurface.h */,
+				2C4473C92175C8BF002A9110 /* DbSymbolTable.h */,
+				2C4473142175C8B7002A9110 /* DbSymbolTableRecord.h */,
+				2C4472532175C89E002A9110 /* DbSymUtl.h */,
+				2C4472392175C89B002A9110 /* DbSystemServices.h */,
+				2C44757C2175C8E9002A9110 /* DbTable.h */,
+				2C4475172175C8D9002A9110 /* DbTableContent.h */,
+				2C44742E2175C8CB002A9110 /* DbTableStyle.h */,
+				2C4473A22175C8B9002A9110 /* DbText.h */,
+				2C4472332175C89A002A9110 /* DbTextIterator.h */,
+				2C4473CB2175C8BF002A9110 /* DbTextStyleTable.h */,
+				2C4472B02175C8A9002A9110 /* DbTextStyleTableRecord.h */,
+				2C4474072175C8C9002A9110 /* DbTrace.h */,
+				2C4475072175C8D6002A9110 /* DbTransactionReactor.h */,
+				2C4473DD2175C8C3002A9110 /* DbTypedId.h */,
+				2C44740A2175C8CA002A9110 /* DbUCSTable.h */,
+				2C4473A82175C8BB002A9110 /* DbUCSTableRecord.h */,
+				2C4473A72175C8BA002A9110 /* DbUnderlayDefinition.h */,
+				2C4473D12175C8C0002A9110 /* DbUnderlayHost.h */,
+				2C4472D22175C8AF002A9110 /* DbUnderlayReference.h */,
+				2C4473A12175C8B9002A9110 /* DbUndoController.h */,
+				2C44751A2175C8DA002A9110 /* DbUndoDisablerAuto.h */,
+				2C4473AB2175C8BB002A9110 /* DbUnitsFormatter.h */,
+				2C4472FE2175C8B2002A9110 /* DbUnitsFormatterImpl.h */,
+				2C4474062175C8C9002A9110 /* DbUserIO.h */,
+				2C4472262175C898002A9110 /* DbVbaProject.h */,
+				2C4475812175C8EA002A9110 /* DbVertex.h */,
+				2C4472472175C89D002A9110 /* DbViewport.h */,
+				2C4473EE2175C8C6002A9110 /* DbViewportTable.h */,
+				2C44749D2175C8D5002A9110 /* DbViewportTableRecord.h */,
+				2C44727B2175C8A4002A9110 /* DbViewTable.h */,
+				2C4472CD2175C8AF002A9110 /* DbViewTableRecord.h */,
+				2C4473062175C8B4002A9110 /* DbVisualStyle.h */,
+				2C4474952175C8D3002A9110 /* DbWipeout.h */,
+				2C4472B42175C8AA002A9110 /* DbWipeoutVariables.h */,
+				2C4474982175C8D4002A9110 /* DbXline.h */,
+				2C4475402175C8E1002A9110 /* DbXrecord.h */,
+				2C4473032175C8B3002A9110 /* DbXrefGraph.h */,
+				2C4472BA2175C8AB002A9110 /* DbXrefObjectId.h */,
+				2C4473B42175C8BD002A9110 /* DDTypeLibReg.h */,
+				2C4472CA2175C8AE002A9110 /* DebugStuff.h */,
+				2C4474302175C8CC002A9110 /* DgnLS */,
+				2C4475712175C8E7002A9110 /* diagnostics.h */,
+				2C4473102175C8B6002A9110 /* DimVarDefs.h */,
+				2C4475772175C8E8002A9110 /* DoubleArray.h */,
+				2C44740F2175C8CB002A9110 /* DrxError.h */,
+				2C4475472175C8E3002A9110 /* DynamicBlocks */,
+				2C4475782175C8E8002A9110 /* DynamicLinker.h */,
+				2C4473EF2175C8C6002A9110 /* Ed */,
+				2C4475052175C8D5002A9110 /* Editor.h */,
+				2C4473B82175C8BE002A9110 /* EditorImpl.h */,
+				2C44749B2175C8D4002A9110 /* EmbeddedASMEntPE.h */,
+				2C44758E2175C8EC002A9110 /* Entities.h */,
+				2C4473B22175C8BC002A9110 /* Error_InvalidInput.h */,
+				2C44721C2175C897002A9110 /* Error_NotThatKindOfClass.h */,
+				2C4475652175C8E4002A9110 /* ErrorDefs.h */,
+				2C44728D2175C8A7002A9110 /* FdField.h */,
+				2C4474942175C8D3002A9110 /* FlatMemStream.h */,
+				2C44749E2175C8D5002A9110 /* Ge */,
+				2C4475702175C8E6002A9110 /* GeDwgIO.h */,
+				2C4475642175C8E4002A9110 /* GeDxfIO.h */,
+				2C44750A2175C8D6002A9110 /* GeometryFromProxy.h */,
+				2C4473412175C8B9002A9110 /* Gi */,
+				2C44730B2175C8B5002A9110 /* GiContextForDbDatabase.h */,
+				2C44750E2175C8D7002A9110 /* GiDefaultContext.h */,
+				2C4474512175C8D0002A9110 /* Gs */,
+				2C4475222175C8DB002A9110 /* GsMarkerArray.h */,
+				2C4475942175C8ED002A9110 /* HatchPattern.h */,
+				2C44726C2175C8A1002A9110 /* HatchPatternManager.h */,
+				2C4473CE2175C8C0002A9110 /* IdArrays.h */,
+				2C44727D2175C8A4002A9110 /* include.dsp */,
+				2C4474082175C8CA002A9110 /* Int8Array.h */,
+				2C4472222175C898002A9110 /* Int16Array.h */,
+				2C4472B62175C8AB002A9110 /* Int32Array.h */,
+				2C4474862175C8D0002A9110 /* Int64.h */,
+				2C4475892175C8EB002A9110 /* Int64Array.h */,
+				2C44722F2175C899002A9110 /* IntArray.h */,
+				2C4472802175C8A5002A9110 /* LoadReasons.h */,
+				2C4473B02175C8BC002A9110 /* LyLayerFilter.h */,
+				2C4472D12175C8AF002A9110 /* MaterialResolver.h */,
+				2C4472BF2175C8AC002A9110 /* MemFileStreamImpl.h */,
+				2C4473D32175C8C1002A9110 /* MemoryStream.h */,
+				2C4473CD2175C8BF002A9110 /* MemoryStreamImpl.h */,
+				2C4475682175C8E5002A9110 /* MessageDefs.h */,
+				2C4472D32175C8B0002A9110 /* ModelDocObj */,
+				2C44753F2175C8E1002A9110 /* ModelerDefs.h */,
+				2C44752D2175C8DD002A9110 /* ModelerGeometry */,
+				2C44744A2175C8CE002A9110 /* ModelerGeometry.h */,
+				2C4472CB2175C8AE002A9110 /* ModelerGeometryCreator.h */,
+				2C44728F2175C8A8002A9110 /* ModelerHistory.h */,
+				2C4473E82175C8C5002A9110 /* ModelerMarkers.h */,
+				2C4474482175C8CE002A9110 /* ModelerTools.h */,
+				2C44751D2175C8DA002A9110 /* NextCodeDefs.h */,
+				2C4473172175C8B7002A9110 /* Objects.h */,
+				2C44730E2175C8B6002A9110 /* OdaCommon.h */,
+				2C4473D22175C8C1002A9110 /* OdaDefs.h */,
+				2C4473B62175C8BD002A9110 /* OdAlloc.h */,
+				2C4472732175C8A2002A9110 /* OdAllocExport.h */,
+				2C4473C82175C8BE002A9110 /* OdAnsiString.h */,
+				2C4473D92175C8C2002A9110 /* OdArray.h */,
+				2C4473D62175C8C1002A9110 /* OdArrayMemAlloc.h */,
+				2C44727F2175C8A4002A9110 /* OdArrayPreDef.h */,
+				2C4473132175C8B7002A9110 /* OdaSTL.h */,
+				2C44726D2175C8A1002A9110 /* OdAuditInfo.h */,
+				2C44723D2175C89C002A9110 /* odaxwrap.h */,
+				2C44723F2175C89C002A9110 /* OdBinaryData.h */,
+				2C44756B2175C8E5002A9110 /* OdCharConverter.h */,
+				2C4472942175C8A8002A9110 /* OdCharMapper.h */,
+				2C4472BB2175C8AC002A9110 /* OdCodePage.h */,
+				2C4474892175C8D1002A9110 /* OdDbGeoCoordinateSystem.h */,
+				2C4473FE2175C8C8002A9110 /* OdDbGeoCoordinateSystemPE.h */,
+				2C4474092175C8CA002A9110 /* OdDToStr.h */,
+				2C4472212175C898002A9110 /* OdError.h */,
+				2C44727C2175C8A4002A9110 /* OdErrorContext.h */,
+				2C4472612175C8A0002A9110 /* OdErrorWithId.h */,
+				2C4472F22175C8B1002A9110 /* OdFileDepMgr.h */,
+				2C44726F2175C8A1002A9110 /* OdFont.h */,
+				2C4472C62175C8AD002A9110 /* OdFontServices.h */,
+				2C44756F2175C8E6002A9110 /* OdGUID.h */,
+				2C4472382175C89B002A9110 /* OdHeap.h */,
+				2C4475212175C8DB002A9110 /* OdList.h */,
+				2C4472FF2175C8B3002A9110 /* OdMemory.h */,
+				2C4472792175C8A3002A9110 /* OdModuleNames.h */,
+				2C44756D2175C8E6002A9110 /* OdMultimap.h */,
+				2C4472302175C899002A9110 /* OdMultiset.h */,
+				2C4475912175C8ED002A9110 /* OdMutex.h */,
+				2C4475662175C8E4002A9110 /* odole.h */,
+				2C4473082175C8B4002A9110 /* OdPath.h */,
+				2C4473F82175C8C7002A9110 /* OdPlatform.h */,
+				2C4475692175C8E5002A9110 /* OdPlatformSettings.h */,
+				2C4475932175C8ED002A9110 /* OdPlatformStreamer.h */,
+				2C44721E2175C897002A9110 /* OdResult.h */,
+				2C4472702175C8A2002A9110 /* OdRound.h */,
+				2C4472322175C89A002A9110 /* OdSetLocale.h */,
+				2C4472342175C89A002A9110 /* OdStack.h */,
+				2C44744D2175C8CF002A9110 /* OdStreamBuf.h */,
+				2C44756E2175C8E6002A9110 /* OdString.h */,
+				2C4475802175C8EA002A9110 /* OdTimeStamp.h */,
+				2C4475282175C8DC002A9110 /* OdToolKit.h */,
+				2C4472352175C89A002A9110 /* OdTrueTypeFontBase.h */,
+				2C4472CC2175C8AE002A9110 /* OdUnidirectionalList.h */,
+				2C4475832175C8EA002A9110 /* OdUnitsFormatter.h */,
+				2C4473182175C8B7002A9110 /* OdUtilAds.h */,
+				2C44727E2175C8A4002A9110 /* OdValue.h */,
+				2C4475722175C8E7002A9110 /* OdVector.h */,
+				2C4474442175C8CD002A9110 /* OleItemHandler.h */,
+				2C4474992175C8D4002A9110 /* OleItemHandlerBase.h */,
+				2C4472482175C89E002A9110 /* OleStorage.h */,
+				2C4472872175C8A6002A9110 /* PdfExportService.h */,
+				2C4475842175C8EB002A9110 /* PdfKey */,
+				2C4472C72175C8AE002A9110 /* Ps */,
+				2C4475392175C8E0002A9110 /* QuasiVarDefs.h */,
+				2C44721F2175C897002A9110 /* QuickHeapAllocator.h */,
+				2C4473DA2175C8C2002A9110 /* RawByteData.h */,
+				2C4473AE2175C8BC002A9110 /* RcsFileServices */,
+				2C4472BE2175C8AC002A9110 /* RefCountImpl.h */,
+				2C4474032175C8C9002A9110 /* Reg */,
+				2C4472B12175C8AA002A9110 /* RemoteGeomProxy.h */,
+				2C4472572175C89F002A9110 /* ResBuf.h */,
+				2C4472FD2175C8B2002A9110 /* RootExport.h */,
+				2C4473E52175C8C4002A9110 /* Rp */,
+				2C4473EB2175C8C5002A9110 /* RText.h */,
+				2C4474882175C8D0002A9110 /* RxDefs.h */,
+				2C4472372175C89B002A9110 /* RxDictionary.h */,
+				2C4472542175C89E002A9110 /* RxDispatchImpl.h */,
+				2C4472552175C89E002A9110 /* RxDLinkerReactor.h */,
+				2C44723B2175C89B002A9110 /* RxDynamicModule.h */,
+				2C44752B2175C8DD002A9110 /* RxEvent.h */,
+				2C4473FA2175C8C7002A9110 /* RxInit.h */,
+				2C4473E32175C8C4002A9110 /* RxIterator.h */,
+				2C4473AD2175C8BC002A9110 /* RxModule.h */,
+				2C4472562175C89F002A9110 /* RxModuleDefs.h */,
+				2C4475952175C8EE002A9110 /* RxModuleSoftReference.h */,
+				2C4475962175C8EE002A9110 /* RxMultiCast.h */,
+				2C4474462175C8CE002A9110 /* RxNames.h */,
+				2C4472C02175C8AD002A9110 /* RxObject.h */,
+				2C4473D02175C8C0002A9110 /* RxObjectImpl.h */,
+				2C4472812175C8A5002A9110 /* RxOverrule.h */,
+				2C4475292175C8DD002A9110 /* RxProtocolReactor.h */,
+				2C4475372175C8DF002A9110 /* RxRasterServices.h */,
+				2C44723E2175C89C002A9110 /* RxSysRegistry.h */,
+				2C44750D2175C8D7002A9110 /* RxSystemServices.h */,
+				2C4472722175C8A2002A9110 /* RxThreadPoolService.h */,
+				2C4473E42175C8C4002A9110 /* RxVariant.h */,
+				2C4475192175C8D9002A9110 /* RxVariantValue.h */,
+				2C4473B72175C8BD002A9110 /* SaveState.h */,
+				2C4472842175C8A5002A9110 /* SharedPtr.h */,
+				2C4472952175C8A9002A9110 /* ShHistory */,
+				2C4472272175C899002A9110 /* Si */,
+				2C4472B72175C8AB002A9110 /* SlotManager.h */,
+				2C4474112175C8CB002A9110 /* Sm */,
+				2C4475152175C8D9002A9110 /* SmartClsIdPtr.h */,
+				2C44744E2175C8CF002A9110 /* SmartPtr.h */,
+				2C4472F42175C8B1002A9110 /* SpaModeler */,
+				2C44757B2175C8E9002A9110 /* SSet.h */,
+				2C4475822175C8EA002A9110 /* StaticRxObject.h */,
+				2C4472C92175C8AE002A9110 /* StdStrings.h */,
+				2C4474492175C8CE002A9110 /* StringArray.h */,
+				2C4472412175C89C002A9110 /* summinfo.h */,
+				2C4473EC2175C8C5002A9110 /* SysVarDefs.h */,
+				2C4475A12175C8F0002A9110 /* SysVarInfo.h */,
+				2C4475432175C8E2002A9110 /* Tables.h */,
+				2C44749A2175C8D4002A9110 /* TD_GL.h */,
+				2C44757A2175C8E8002A9110 /* TD_PackPop.h */,
+				2C44722C2175C899002A9110 /* TD_PackPush.h */,
+				2C4472432175C89D002A9110 /* TDTypeLibReg.h */,
+				2C4472782175C8A3002A9110 /* TDVersion.h */,
+				2C4472B92175C8AB002A9110 /* TextDefs.h */,
+				2C4472492175C89E002A9110 /* Tf */,
+				2C4472422175C89D002A9110 /* ThreadsCounter.h */,
+				2C44727A2175C8A3002A9110 /* ThumbnailImage.h */,
+				2C4473E72175C8C4002A9110 /* TPtr.h */,
+				2C4472582175C89F002A9110 /* UInt8Array.h */,
+				2C4475312175C8DE002A9110 /* UInt16Array.h */,
+				2C4475452175C8E2002A9110 /* UInt32Array.h */,
+				2C4473B12175C8BC002A9110 /* UInt64Array.h */,
+				2C4472642175C8A1002A9110 /* Ve */,
+				2C44740C2175C8CA002A9110 /* ViewportDefs.h */,
+				2C44752A2175C8DD002A9110 /* VLObject.h */,
+				2C4472C22175C8AD002A9110 /* Wr */,
+				2C4473CC2175C8BF002A9110 /* XRefMan.h */,
+			);
+			path = Include;
+			sourceTree = "<group>";
+		};
+		2C4472102175C7CD002A9110 /* ShapeTool */ = {
+			isa = PBXGroup;
+			children = (
+				2C4475AD2175C90D002A9110 /* ExGiRasterImage.h */,
+				2C4475AA2175C90C002A9110 /* ExHostAppServices.h */,
+				2C4475A52175C90B002A9110 /* ExPrintConsole.h */,
+				2C4475A72175C90C002A9110 /* ExSystemServices.h */,
+				2C4475AB2175C90C002A9110 /* ExTtfFileNameByDescriptor.h */,
+				2C4475A42175C90B002A9110 /* iOdaApplication.h */,
+				2C4475AC2175C90C002A9110 /* iOdaAppServices.h */,
+				2C4475A92175C90C002A9110 /* iStrConv.h */,
+				2C4475A62175C90B002A9110 /* OdFileBuf.h */,
+				2C4475A82175C90C002A9110 /* StdAfx.h */,
+			);
+			path = ShapeTool;
+			sourceTree = "<group>";
+		};
+		2C4472112175C7EA002A9110 /* Super */ = {
+			isa = PBXGroup;
+			children = (
+				2C4475B02175C923002A9110 /* DwgViewController.h */,
+				2C4475AF2175C923002A9110 /* DwgViewController.mm */,
+				2C4475AE2175C923002A9110 /* stdafx.cpp */,
+				2C4475B12175C924002A9110 /* stdafx.h */,
+			);
+			path = Super;
+			sourceTree = "<group>";
+		};
+		2C4472272175C899002A9110 /* Si */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472282175C899002A9110 /* BBox.h */,
+				2C4472292175C899002A9110 /* SiExtents.h */,
+				2C44722A2175C899002A9110 /* SiShapePlane.h */,
+				2C44722B2175C899002A9110 /* SiSpatialIndex.h */,
+			);
+			path = Si;
+			sourceTree = "<group>";
+		};
+		2C4472492175C89E002A9110 /* Tf */ = {
+			isa = PBXGroup;
+			children = (
+				2C44724A2175C89E002A9110 /* ErrorDefs.h */,
+				2C44724B2175C89E002A9110 /* GeVariant.h */,
+				2C44724C2175C89E002A9110 /* Tf.h */,
+				2C44724D2175C89E002A9110 /* TfDatabase.h */,
+				2C44724E2175C89E002A9110 /* TfExport.h */,
+				2C44724F2175C89E002A9110 /* TfObject.h */,
+				2C4472502175C89E002A9110 /* TfObjectReactor.h */,
+				2C4472512175C89E002A9110 /* TfResult.h */,
+				2C4472522175C89E002A9110 /* TfVariant.h */,
+			);
+			path = Tf;
+			sourceTree = "<group>";
+		};
+		2C44725A2175C89F002A9110 /* BrepRenderer */ = {
+			isa = PBXGroup;
+			children = (
+				2C44725B2175C89F002A9110 /* BrepRendererImpl.h */,
+			);
+			path = BrepRenderer;
+			sourceTree = "<group>";
+		};
+		2C44725E2175C8A0002A9110 /* AcisBuilder */ = {
+			isa = PBXGroup;
+			children = (
+				2C44725F2175C8A0002A9110 /* ABExport.h */,
+				2C4472602175C8A0002A9110 /* ISatConverter.h */,
+			);
+			path = AcisBuilder;
+			sourceTree = "<group>";
+		};
+		2C4472642175C8A1002A9110 /* Ve */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472652175C8A1002A9110 /* AveDefs.h */,
+				2C4472662175C8A1002A9110 /* AveExport.h */,
+				2C4472672175C8A1002A9110 /* AveLight.h */,
+				2C4472682175C8A1002A9110 /* AveMapping.h */,
+				2C4472692175C8A1002A9110 /* AveMaterial.h */,
+				2C44726A2175C8A1002A9110 /* AveRender.h */,
+				2C44726B2175C8A1002A9110 /* AveScene.h */,
+			);
+			path = Ve;
+			sourceTree = "<group>";
+		};
+		2C4472952175C8A9002A9110 /* ShHistory */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472962175C8A9002A9110 /* DbAssocPersSubentManager.h */,
+				2C4472972175C8A9002A9110 /* DbManagerSubentData.h */,
+				2C4472982175C8A9002A9110 /* DbShBoolean.h */,
+				2C4472992175C8A9002A9110 /* DbShBox.h */,
+				2C44729A2175C8A9002A9110 /* DbShBrep.h */,
+				2C44729B2175C8A9002A9110 /* DbShChamfer.h */,
+				2C44729C2175C8A9002A9110 /* DbShCylinder.h */,
+				2C44729D2175C8A9002A9110 /* DbShExtrusion.h */,
+				2C44729E2175C8A9002A9110 /* DbShFillet.h */,
+				2C44729F2175C8A9002A9110 /* DbShHistory.h */,
+				2C4472A02175C8A9002A9110 /* DbShHistoryNode.h */,
+				2C4472A12175C8A9002A9110 /* DbShLoft.h */,
+				2C4472A22175C8A9002A9110 /* DbShModelerHistoryImpl.h */,
+				2C4472A32175C8A9002A9110 /* DbShPrimitive.h */,
+				2C4472A42175C8A9002A9110 /* DbShPyramid.h */,
+				2C4472A52175C8A9002A9110 /* DbShRevolve.h */,
+				2C4472A62175C8A9002A9110 /* DbShSphere.h */,
+				2C4472A72175C8A9002A9110 /* DbShSubentColor.h */,
+				2C4472A82175C8A9002A9110 /* DbShSubentMaterial.h */,
+				2C4472A92175C8A9002A9110 /* DbShSweep.h */,
+				2C4472AA2175C8A9002A9110 /* DbShTorus.h */,
+				2C4472AB2175C8A9002A9110 /* DbShWedge.h */,
+				2C4472AC2175C8A9002A9110 /* TD_3DSolidHistoryDef.h */,
+			);
+			path = ShHistory;
+			sourceTree = "<group>";
+		};
+		2C4472C22175C8AD002A9110 /* Wr */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472C32175C8AD002A9110 /* wrExport.h */,
+				2C4472C42175C8AD002A9110 /* wrTriangulationParams.h */,
+			);
+			path = Wr;
+			sourceTree = "<group>";
+		};
+		2C4472C72175C8AE002A9110 /* Ps */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472C82175C8AE002A9110 /* PlotStyles.h */,
+			);
+			path = Ps;
+			sourceTree = "<group>";
+		};
+		2C4472D32175C8B0002A9110 /* ModelDocObj */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472D42175C8B0002A9110 /* DbAssocProjectedEntityPersSubentIdHolder.h */,
+				2C4472D52175C8B0002A9110 /* DbDetailSymbol.h */,
+				2C4472D62175C8B0002A9110 /* DbSectionSymbol.h */,
+				2C4472D72175C8B0002A9110 /* DbSynergy.h */,
+				2C4472D82175C8B0002A9110 /* DbViewBorder.h */,
+				2C4472D92175C8B0002A9110 /* DbViewRep.h */,
+				2C4472DA2175C8B0002A9110 /* DbViewRepBlockReference.h */,
+				2C4472DB2175C8B0002A9110 /* DbViewRepCutDefinition.h */,
+				2C4472DC2175C8B0002A9110 /* DbViewRepDetailDefinition.h */,
+				2C4472DD2175C8B0002A9110 /* DbViewRepImage.h */,
+				2C4472DE2175C8B0002A9110 /* DbViewRepInventorSource.h */,
+				2C4472DF2175C8B0002A9110 /* DbViewRepModelPlaneDef.h */,
+				2C4472E02175C8B0002A9110 /* DbViewRepModelSpaceSource.h */,
+				2C4472E12175C8B0002A9110 /* DbViewRepModelSpaceViewSelSet.h */,
+				2C4472E22175C8B0002A9110 /* DbViewRepOrientation.h */,
+				2C4472E32175C8B0002A9110 /* DbViewRepOrientationDef.h */,
+				2C4472E42175C8B0002A9110 /* DbViewRepProjectionDef.h */,
+				2C4472E52175C8B0002A9110 /* DbViewRepSectionDefinition.h */,
+				2C4472E62175C8B0002A9110 /* DbViewRepSource.h */,
+				2C4472E72175C8B0002A9110 /* DbViewRepSourceMgr.h */,
+				2C4472E82175C8B0002A9110 /* DbViewRepStandard.h */,
+				2C4472E92175C8B0002A9110 /* DbViewSymbol.h */,
+				2C4472EA2175C8B0002A9110 /* ModelDocObjExports.h */,
+				2C4472EB2175C8B0002A9110 /* RxSketchManager.h */,
+				2C4472EC2175C8B0002A9110 /* RxSketchManagerImpl.h */,
+				2C4472ED2175C8B0002A9110 /* RxSketchObject.h */,
+			);
+			path = ModelDocObj;
+			sourceTree = "<group>";
+		};
+		2C4472F42175C8B1002A9110 /* SpaModeler */ = {
+			isa = PBXGroup;
+			children = (
+				2C4472F52175C8B1002A9110 /* SpaModeler.h */,
+				2C4472F62175C8B1002A9110 /* SpaModelerExport.h */,
+				2C4472F72175C8B1002A9110 /* SpaParameters.h */,
+			);
+			path = SpaModeler;
+			sourceTree = "<group>";
+		};
+		2C4473192175C8B8002A9110 /* Br */ = {
+			isa = PBXGroup;
+			children = (
+				2C44731A2175C8B8002A9110 /* BrBrep.h */,
+				2C44731B2175C8B8002A9110 /* BrBrepComplexTraverser.h */,
+				2C44731C2175C8B8002A9110 /* BrBrepEdgeTraverser.h */,
+				2C44731D2175C8B8002A9110 /* BrBrepFaceTraverser.h */,
+				2C44731E2175C8B8002A9110 /* BrBrepShellTraverser.h */,
+				2C44731F2175C8B8002A9110 /* BrBrepVertexTraverser.h */,
+				2C4473202175C8B8002A9110 /* BrComplex.h */,
+				2C4473212175C8B8002A9110 /* BrComplexShellTraverser.h */,
+				2C4473222175C8B8002A9110 /* BrEdge.h */,
+				2C4473232175C8B8002A9110 /* BrEdgeLoopTraverser.h */,
+				2C4473242175C8B8002A9110 /* BrElement.h */,
+				2C4473252175C8B8002A9110 /* BrElement2d.h */,
+				2C4473262175C8B8002A9110 /* BrElement2dNodeTraverser.h */,
+				2C4473272175C8B8002A9110 /* BrEntity.h */,
+				2C4473282175C8B8002A9110 /* BrEnums.h */,
+				2C4473292175C8B8002A9110 /* BrExport.h */,
+				2C44732A2175C8B8002A9110 /* BrFace.h */,
+				2C44732B2175C8B8002A9110 /* BrFaceLoopTraverser.h */,
+				2C44732C2175C8B8002A9110 /* BrHit.h */,
+				2C44732D2175C8B8002A9110 /* BrLoop.h */,
+				2C44732E2175C8B8002A9110 /* BrLoopEdgeTraverser.h */,
+				2C44732F2175C8B8002A9110 /* BrLoopVertexTraverser.h */,
+				2C4473302175C8B8002A9110 /* BrMesh.h */,
+				2C4473312175C8B8002A9110 /* BrMesh2d.h */,
+				2C4473322175C8B8002A9110 /* BrMesh2dControl.h */,
+				2C4473332175C8B8002A9110 /* BrMesh2dElement2dTraverser.h */,
+				2C4473342175C8B8002A9110 /* BrMesh2dFilter.h */,
+				2C4473352175C8B8002A9110 /* BrMeshControl.h */,
+				2C4473362175C8B8002A9110 /* BrMeshEntity.h */,
+				2C4473372175C8B8002A9110 /* BrNode.h */,
+				2C4473382175C8B8002A9110 /* BrShell.h */,
+				2C4473392175C8B8002A9110 /* BrShellFaceTraverser.h */,
+				2C44733A2175C8B8002A9110 /* BrTraverser.h */,
+				2C44733B2175C8B8002A9110 /* BrVertex.h */,
+				2C44733C2175C8B8002A9110 /* BrVertexEdgeTraverser.h */,
+				2C44733D2175C8B8002A9110 /* BrVertexLoopTraverser.h */,
+			);
+			path = Br;
+			sourceTree = "<group>";
+		};
+		2C4473412175C8B9002A9110 /* Gi */ = {
+			isa = PBXGroup;
+			children = (
+				2C4473422175C8B9002A9110 /* Gi.h */,
+				2C4473432175C8B9002A9110 /* GiAbstractClipBoundary.h */,
+				2C4473442175C8B9002A9110 /* GiAnnoScaleSet.h */,
+				2C4473452175C8B9002A9110 /* GiBaseVectorizer.h */,
+				2C4473462175C8B9002A9110 /* GiClipBoundary.h */,
+				2C4473472175C8B9002A9110 /* GiCommonDraw.h */,
+				2C4473482175C8B9002A9110 /* GiContextualColors.h */,
+				2C4473492175C8B9002A9110 /* GiConveyorConnector.h */,
+				2C44734A2175C8B9002A9110 /* GiConveyorEmbranchment.h */,
+				2C44734B2175C8B9002A9110 /* GiConveyorEntryPoint.h */,
+				2C44734C2175C8B9002A9110 /* GiConveyorGeometry.h */,
+				2C44734D2175C8B9002A9110 /* GiConveyorNode.h */,
+				2C44734E2175C8B9002A9110 /* GiDeviation.h */,
+				2C44734F2175C8B9002A9110 /* GiDgLinetype.h */,
+				2C4473502175C8B9002A9110 /* GiDgLinetyper.h */,
+				2C4473512175C8B9002A9110 /* GiDrawable.h */,
+				2C4473522175C8B9002A9110 /* GiDrawableImpl.h */,
+				2C4473532175C8B9002A9110 /* GiDrawImpl.h */,
+				2C4473542175C8B9002A9110 /* GiDrawStream.h */,
+				2C4473552175C8B9002A9110 /* GiDummyGeometry.h */,
+				2C4473562175C8B9002A9110 /* GiEmptyGeometry.h */,
+				2C4473572175C8B9002A9110 /* GiEnvironment.h */,
+				2C4473582175C8B9002A9110 /* GiEnvironmentTraitsData.h */,
+				2C4473592175C8B9002A9110 /* GiExport.h */,
+				2C44735A2175C8B9002A9110 /* GiExtAccum.h */,
+				2C44735B2175C8B9002A9110 /* GiExtents.h */,
+				2C44735C2175C8B9002A9110 /* GiFaceEdgeDataTraitsSaver.h */,
+				2C44735D2175C8B9002A9110 /* GiFastExtCalc.h */,
+				2C44735E2175C8B9002A9110 /* GiFill.h */,
+				2C44735F2175C8B9002A9110 /* GiGeometry.h */,
+				2C4473602175C8B9002A9110 /* GiGeometryRecorderPlayer.h */,
+				2C4473612175C8B9002A9110 /* GiGeometrySimplifier.h */,
+				2C4473622175C8B9002A9110 /* GiHLRemover.h */,
+				2C4473632175C8B9002A9110 /* GiHlrResults.h */,
+				2C4473642175C8B9002A9110 /* GiImage.h */,
+				2C4473652175C8B9002A9110 /* GiLayerTraitsData.h */,
+				2C4473662175C8B9002A9110 /* GiLightTraits.h */,
+				2C4473672175C8B9002A9110 /* GiLightTraitsData.h */,
+				2C4473682175C8B9002A9110 /* GiLinetype.h */,
+				2C4473692175C8B9002A9110 /* GiLinetyper.h */,
+				2C44736A2175C8B9002A9110 /* GiLinetypeRedir.h */,
+				2C44736B2175C8B9002A9110 /* GiLocalDrawableDesc.h */,
+				2C44736C2175C8B9002A9110 /* GiMapperItem.h */,
+				2C44736D2175C8B9002A9110 /* GiMaterial.h */,
+				2C44736E2175C8B9002A9110 /* GiMaterialItem.h */,
+				2C44736F2175C8B9002A9110 /* GiMaterialTraitsData.h */,
+				2C4473702175C8B9002A9110 /* GiMetafile.h */,
+				2C4473712175C8B9002A9110 /* GiMetafiler.h */,
+				2C4473722175C8B9002A9110 /* GiModelToViewProc.h */,
+				2C4473732175C8B9002A9110 /* GiNoiseGenerator.h */,
+				2C4473742175C8B9002A9110 /* GiNonEntityTraits.h */,
+				2C4473752175C8B9002A9110 /* GiOrthoClipper.h */,
+				2C4473762175C8B9002A9110 /* GiOrthoClipperEx.h */,
+				2C4473772175C8B9002A9110 /* GiOrthoPrismIntersector.h */,
+				2C4473782175C8B9002A9110 /* GiPalette.h */,
+				2C4473792175C8B9002A9110 /* GiPathNode.h */,
+				2C44737A2175C8B9002A9110 /* GiPerspectivePreprocessor.h */,
+				2C44737B2175C8B9002A9110 /* GiPlaneProjector.h */,
+				2C44737C2175C8B9002A9110 /* GiPlotGenerator.h */,
+				2C44737D2175C8B9002A9110 /* GiPlotStyleDefs.h */,
+				2C44737E2175C8B9002A9110 /* GiPolyline.h */,
+				2C44737F2175C8B9002A9110 /* GiProceduralGenerator.h */,
+				2C4473802175C8B9002A9110 /* GiRasterImage.h */,
+				2C4473812175C8B9002A9110 /* GiRasterImageLoader.h */,
+				2C4473822175C8B9002A9110 /* GiRasterWrappers.h */,
+				2C4473832175C8B9002A9110 /* GiRectIntersDetector.h */,
+				2C4473842175C8B9002A9110 /* GiSectionGeometry.h */,
+				2C4473852175C8B9002A9110 /* GiSelector.h */,
+				2C4473862175C8B9002A9110 /* GiSelectProc.h */,
+				2C4473872175C8B9002A9110 /* GiShellFaceIterator.h */,
+				2C4473882175C8B9002A9110 /* GiShellFaceWithHolesIterator.h */,
+				2C4473892175C8B9002A9110 /* GiSpatialFilter.h */,
+				2C44738A2175C8B9002A9110 /* GiStack.h */,
+				2C44738B2175C8B9002A9110 /* GiSubEntityTraitsData.h */,
+				2C44738C2175C8B9002A9110 /* GiSubEntityTraitsDataSaver.h */,
+				2C44738D2175C8B9002A9110 /* GiTextStyle.h */,
+				2C44738E2175C8B9002A9110 /* GiTraitsCache.h */,
+				2C44738F2175C8B9002A9110 /* GiTransformed.h */,
+				2C4473902175C8B9002A9110 /* GiTransientManager.h */,
+				2C4473912175C8B9002A9110 /* GiUtils.h */,
+				2C4473922175C8B9002A9110 /* GiVariant.h */,
+				2C4473932175C8B9002A9110 /* GiViewport.h */,
+				2C4473942175C8B9002A9110 /* GiViewportDraw.h */,
+				2C4473952175C8B9002A9110 /* GiViewportGeometry.h */,
+				2C4473962175C8B9002A9110 /* GiViewportTraits.h */,
+				2C4473972175C8B9002A9110 /* GiViewportTraitsData.h */,
+				2C4473982175C8B9002A9110 /* GiVisualStyle.h */,
+				2C4473992175C8B9002A9110 /* GiVisualStyleData.h */,
+				2C44739A2175C8B9002A9110 /* GiVisualStyleTraitsData.h */,
+				2C44739B2175C8B9002A9110 /* GiWorldDraw.h */,
+				2C44739C2175C8B9002A9110 /* GiWorldGeometry.h */,
+				2C44739D2175C8B9002A9110 /* GiXform.h */,
+				2C44739E2175C8B9002A9110 /* OdPolyPolygon3d.h */,
+				2C44739F2175C8B9002A9110 /* TtfDescriptor.h */,
+			);
+			path = Gi;
+			sourceTree = "<group>";
+		};
+		2C4473AE2175C8BC002A9110 /* RcsFileServices */ = {
+			isa = PBXGroup;
+			children = (
+				2C4473AF2175C8BC002A9110 /* RxRcsFileServices.h */,
+			);
+			path = RcsFileServices;
+			sourceTree = "<group>";
+		};
+		2C4473BA2175C8BE002A9110 /* DbPointCloudObj */ = {
+			isa = PBXGroup;
+			children = (
+				2C4473BB2175C8BE002A9110 /* DbArgbColor.h */,
+				2C4473BC2175C8BE002A9110 /* DbPointCloud.h */,
+				2C4473BD2175C8BE002A9110 /* DbPointCloudClipping.h */,
+				2C4473BE2175C8BE002A9110 /* DbPointCloudColorMap.h */,
+				2C4473BF2175C8BE002A9110 /* DbPointCloudCropping.h */,
+				2C4473C02175C8BE002A9110 /* DbPointCloudDef.h */,
+				2C4473C12175C8BE002A9110 /* DbPointCloudDefEx.h */,
+				2C4473C22175C8BE002A9110 /* DbPointCloudEx.h */,
+				2C4473C32175C8BE002A9110 /* DbPointCloudHostPE.h */,
+				2C4473C42175C8BE002A9110 /* DbPointCloudIntensityStyle.h */,
+				2C4473C52175C8BE002A9110 /* DbPointCloudObjExports.h */,
+				2C4473C62175C8BE002A9110 /* DbPointCloudObjModule.h */,
+			);
+			path = DbPointCloudObj;
+			sourceTree = "<group>";
+		};
+		2C4473E52175C8C4002A9110 /* Rp */ = {
+			isa = PBXGroup;
+			children = (
+				2C4473E62175C8C4002A9110 /* RasterProcessor.h */,
+			);
+			path = Rp;
+			sourceTree = "<group>";
+		};
+		2C4473EF2175C8C6002A9110 /* Ed */ = {
+			isa = PBXGroup;
+			children = (
+				2C4473F02175C8C6002A9110 /* EdBaseUserIO.h */,
+				2C4473F12175C8C6002A9110 /* EdCommandContext.h */,
+				2C4473F22175C8C6002A9110 /* EdCommandStack.h */,
+				2C4473F32175C8C6002A9110 /* EdFunctionIO.h */,
+				2C4473F42175C8C6002A9110 /* EdLispEngine.h */,
+				2C4473F52175C8C6002A9110 /* EdUserIO.h */,
+			);
+			path = Ed;
+			sourceTree = "<group>";
+		};
+		2C4474032175C8C9002A9110 /* Reg */ = {
+			isa = PBXGroup;
+			children = (
+				2C4474042175C8C9002A9110 /* RegExport.h */,
+				2C4474052175C8C9002A9110 /* Registrar.h */,
+			);
+			path = Reg;
+			sourceTree = "<group>";
+		};
+		2C4474112175C8CB002A9110 /* Sm */ = {
+			isa = PBXGroup;
+			children = (
+				2C4474122175C8CB002A9110 /* SmCalloutBlocks.h */,
+				2C4474132175C8CB002A9110 /* SmComponent.h */,
+				2C4474142175C8CB002A9110 /* SmCustomProperty.h */,
+				2C4474152175C8CB002A9110 /* SmDatabase.h */,
+				2C4474162175C8CB002A9110 /* SmDbObjectReference.h */,
+				2C4474172175C8CB002A9110 /* SmEnum.h */,
+				2C4474182175C8CB002A9110 /* SmEvents.h */,
+				2C4474192175C8CB002A9110 /* SmExport.h */,
+				2C44741A2175C8CB002A9110 /* SmFiler.h */,
+				2C44741B2175C8CB002A9110 /* SmFileReference.h */,
+				2C44741C2175C8CB002A9110 /* SmNamedDbObjectReference.h */,
+				2C44741D2175C8CB002A9110 /* SmObjectId.h */,
+				2C44741E2175C8CB002A9110 /* SmPersist.h */,
+				2C44741F2175C8CB002A9110 /* SmPersistProxy.h */,
+				2C4474202175C8CB002A9110 /* SmProjectPointLocation.h */,
+				2C4474212175C8CB002A9110 /* SmProjectPointLocations.h */,
+				2C4474222175C8CB002A9110 /* SmPublishOptions.h */,
+				2C4474232175C8CB002A9110 /* SmResources.h */,
+				2C4474242175C8CB002A9110 /* SmSheet.h */,
+				2C4474252175C8CB002A9110 /* SmSheetSelSet.h */,
+				2C4474262175C8CB002A9110 /* SmSheetSelSets.h */,
+				2C4474272175C8CB002A9110 /* SmSheetSet.h */,
+				2C4474282175C8CB002A9110 /* SmSheetSetMgr.h */,
+				2C4474292175C8CB002A9110 /* SmSheetView.h */,
+				2C44742A2175C8CB002A9110 /* SmSheetViews.h */,
+				2C44742B2175C8CB002A9110 /* SmSubset.h */,
+				2C44742C2175C8CB002A9110 /* SmViewCategories.h */,
+				2C44742D2175C8CB002A9110 /* SmViewCategory.h */,
+			);
+			path = Sm;
+			sourceTree = "<group>";
+		};
+		2C4474302175C8CC002A9110 /* DgnLS */ = {
+			isa = PBXGroup;
+			children = (
+				2C4474312175C8CC002A9110 /* DbLSComponent.h */,
+				2C4474322175C8CC002A9110 /* DbLSCompoundComponent.h */,
+				2C4474332175C8CC002A9110 /* DbLSDefinition.h */,
+				2C4474342175C8CC002A9110 /* DbLSInternalComponent.h */,
+				2C4474352175C8CC002A9110 /* DbLSMisc.h */,
+				2C4474362175C8CC002A9110 /* DbLSObject.h */,
+				2C4474372175C8CC002A9110 /* DbLSPointComponent.h */,
+				2C4474382175C8CC002A9110 /* DbLSStroke.h */,
+				2C4474392175C8CC002A9110 /* DbLSStrokePatternComponent.h */,
+				2C44743A2175C8CC002A9110 /* DbLSSymbolComponent.h */,
+				2C44743B2175C8CC002A9110 /* DbLSSymbolReference.h */,
+				2C44743C2175C8CC002A9110 /* DbLSXData.h */,
+				2C44743D2175C8CC002A9110 /* OdDgnLSExport.h */,
+			);
+			path = DgnLS;
+			sourceTree = "<group>";
+		};
+		2C4474512175C8D0002A9110 /* Gs */ = {
+			isa = PBXGroup;
+			children = (
+				2C4474522175C8D0002A9110 /* GiBaseVectorizerImpl.h */,
+				2C4474532175C8D0002A9110 /* Gs.h */,
+				2C4474542175C8D0002A9110 /* GsBackground.h */,
+				2C4474552175C8D0002A9110 /* GsBackgroundProperties.h */,
+				2C4474562175C8D0002A9110 /* GsBaseInclude.h */,
+				2C4474572175C8D0002A9110 /* GsBaseMaterialView.h */,
+				2C4474582175C8D0002A9110 /* GsBaseModel.h */,
+				2C4474592175C8D0002A9110 /* GsBaseModule.h */,
+				2C44745A2175C8D0002A9110 /* GsBaseVectorizeDevice.h */,
+				2C44745B2175C8D0002A9110 /* GsBaseVectorizer.h */,
+				2C44745C2175C8D0002A9110 /* GsBaseVectorizeView.h */,
+				2C44745D2175C8D0002A9110 /* GsBitMap.h */,
+				2C44745E2175C8D0002A9110 /* GsBlockNode.h */,
+				2C44745F2175C8D0002A9110 /* GsBlockReferenceNode.h */,
+				2C4474602175C8D0002A9110 /* GsBMPDevice.h */,
+				2C4474612175C8D0002A9110 /* GsContainerNode.h */,
+				2C4474622175C8D0002A9110 /* GsCullingVolume.h */,
+				2C4474632175C8D0002A9110 /* GsDbRootLinkage.h */,
+				2C4474642175C8D0002A9110 /* GsDCPointArray.h */,
+				2C4474652175C8D0002A9110 /* GsDCRectArray.h */,
+				2C4474662175C8D0002A9110 /* GsDefs.h */,
+				2C4474672175C8D0002A9110 /* GsDrawableHolder.h */,
+				2C4474682175C8D0002A9110 /* GsDrawCancelException.h */,
+				2C4474692175C8D0002A9110 /* GsEmptyMetafileCache.h */,
+				2C44746A2175C8D0002A9110 /* GsEntityNode.h */,
+				2C44746B2175C8D0002A9110 /* GsExport.h */,
+				2C44746C2175C8D0002A9110 /* GsExtAccum.h */,
+				2C44746D2175C8D0002A9110 /* GsFiler.h */,
+				2C44746E2175C8D0002A9110 /* GsFilerV100Impl.h */,
+				2C44746F2175C8D0002A9110 /* GsHighlightData.h */,
+				2C4474702175C8D0002A9110 /* GsLayerNode.h */,
+				2C4474712175C8D0002A9110 /* GsLight.h */,
+				2C4474722175C8D0002A9110 /* GsLightNode.h */,
+				2C4474732175C8D0002A9110 /* GsMaterialCache.h */,
+				2C4474742175C8D0002A9110 /* GsMaterialNode.h */,
+				2C4474752175C8D0002A9110 /* GsModel.h */,
+				2C4474762175C8D0002A9110 /* GsNode.h */,
+				2C4474772175C8D0002A9110 /* GsPageParams.h */,
+				2C4474782175C8D0002A9110 /* GsProperties.h */,
+				2C4474792175C8D0002A9110 /* GsRenderSettingsProperties.h */,
+				2C44747A2175C8D0002A9110 /* GsSelectionReactor.h */,
+				2C44747B2175C8D0002A9110 /* GsSpatialQuery.h */,
+				2C44747C2175C8D0002A9110 /* GsVectPerformance.h */,
+				2C44747D2175C8D0002A9110 /* GsViewImpl.h */,
+				2C44747E2175C8D0002A9110 /* GsViewLocalId.h */,
+				2C44747F2175C8D0002A9110 /* GsViewportProperties.h */,
+				2C4474802175C8D0002A9110 /* GsViewProps.h */,
+				2C4474812175C8D0002A9110 /* GsViewPropsDef.h */,
+				2C4474822175C8D0002A9110 /* GsVisualStyleProperties.h */,
+				2C4474832175C8D0002A9110 /* LineWtIndex.h */,
+				2C4474842175C8D0002A9110 /* SiVolume.h */,
+			);
+			path = Gs;
+			sourceTree = "<group>";
+		};
+		2C44749E2175C8D5002A9110 /* Ge */ = {
+			isa = PBXGroup;
+			children = (
+				2C44749F2175C8D5002A9110 /* avgpc.h */,
+				2C4474A02175C8D5002A9110 /* Ge.h */,
+				2C4474A12175C8D5002A9110 /* GeAugPolyline3d.h */,
+				2C4474A22175C8D5002A9110 /* GeBoundBlock2d.h */,
+				2C4474A32175C8D5002A9110 /* GeBoundBlock3d.h */,
+				2C4474A42175C8D5002A9110 /* GeBoundedPlane.h */,
+				2C4474A52175C8D5002A9110 /* GeCircArc2d.h */,
+				2C4474A62175C8D5002A9110 /* GeCircArc3d.h */,
+				2C4474A72175C8D5002A9110 /* GeClipBoundary2d.h */,
+				2C4474A82175C8D5002A9110 /* GeCompositeCurve2d.h */,
+				2C4474A92175C8D5002A9110 /* GeCompositeCurve3d.h */,
+				2C4474AA2175C8D5002A9110 /* GeCone.h */,
+				2C4474AB2175C8D5002A9110 /* GeCubicSplineCurve2d.h */,
+				2C4474AC2175C8D5002A9110 /* GeCubicSplineCurve3d.h */,
+				2C4474AD2175C8D5002A9110 /* GeCurve2d.h */,
+				2C4474AE2175C8D5002A9110 /* GeCurve2dPtrArray.h */,
+				2C4474AF2175C8D5002A9110 /* GeCurve3d.h */,
+				2C4474B02175C8D5002A9110 /* GeCurve3dPtrArray.h */,
+				2C4474B12175C8D5002A9110 /* GeCurveBoundary.h */,
+				2C4474B22175C8D5002A9110 /* GeCurveCurveInt2d.h */,
+				2C4474B32175C8D5002A9110 /* GeCurveCurveInt3d.h */,
+				2C4474B42175C8D5002A9110 /* GeCurveSurfInt.h */,
+				2C4474B52175C8D5002A9110 /* GeCylinder.h */,
+				2C4474B62175C8D5002A9110 /* GeDouble2dArray.h */,
+				2C4474B72175C8D5002A9110 /* GeDoubleArray.h */,
+				2C4474B82175C8D5002A9110 /* GeEllipArc.h */,
+				2C4474B92175C8D5002A9110 /* GeEllipArc2d.h */,
+				2C4474BA2175C8D5002A9110 /* GeEllipArc3d.h */,
+				2C4474BB2175C8D5002A9110 /* GeEllipCone.h */,
+				2C4474BC2175C8D5002A9110 /* GeEllipCylinder.h */,
+				2C4474BD2175C8D5002A9110 /* GeEntity2d.h */,
+				2C4474BE2175C8D5002A9110 /* GeEntity3d.h */,
+				2C4474BF2175C8D5002A9110 /* GeExport.h */,
+				2C4474C02175C8D5002A9110 /* GeExtents2d.h */,
+				2C4474C12175C8D5002A9110 /* GeExtents3d.h */,
+				2C4474C22175C8D5002A9110 /* GeExternalBoundedSurface.h */,
+				2C4474C32175C8D5002A9110 /* GeExternalCurve2d.h */,
+				2C4474C42175C8D5002A9110 /* GeExternalCurve3d.h */,
+				2C4474C52175C8D5002A9110 /* GeExternalSurface.h */,
+				2C4474C62175C8D5002A9110 /* GeGbl.h */,
+				2C4474C72175C8D5002A9110 /* GeImpInterval.h */,
+				2C4474C82175C8D5002A9110 /* GeIntArray.h */,
+				2C4474C92175C8D5002A9110 /* GeInterval.h */,
+				2C4474CA2175C8D5002A9110 /* GeIntervalArray.h */,
+				2C4474CB2175C8D5002A9110 /* GeKnotVector.h */,
+				2C4474CC2175C8D5002A9110 /* GeLibVersion.h */,
+				2C4474CD2175C8D5002A9110 /* GeLine2d.h */,
+				2C4474CE2175C8D5002A9110 /* GeLine3d.h */,
+				2C4474CF2175C8D5002A9110 /* GeLinearEnt2d.h */,
+				2C4474D02175C8D5002A9110 /* GeLinearEnt3d.h */,
+				2C4474D12175C8D5002A9110 /* GeLineSeg2d.h */,
+				2C4474D22175C8D5002A9110 /* GeLineSeg2dArray.h */,
+				2C4474D32175C8D5002A9110 /* GeLineSeg3d.h */,
+				2C4474D42175C8D5002A9110 /* GeMatrix2d.h */,
+				2C4474D52175C8D5002A9110 /* GeMatrix2dArray.h */,
+				2C4474D62175C8D5002A9110 /* GeMatrix3d.h */,
+				2C4474D72175C8D5002A9110 /* GeMatrix3dArray.h */,
+				2C4474D82175C8D5002A9110 /* GeMatrix3dStack.h */,
+				2C4474D92175C8D5002A9110 /* GeNurbCurve2d.h */,
+				2C4474DA2175C8D5002A9110 /* GeNurbCurve3d.h */,
+				2C4474DB2175C8D5002A9110 /* GeNurbSurface.h */,
+				2C4474DC2175C8D5002A9110 /* GeOffsetCurve2d.h */,
+				2C4474DD2175C8D5002A9110 /* GeOffsetCurve3d.h */,
+				2C4474DE2175C8D5002A9110 /* GeOffsetSurface.h */,
+				2C4474DF2175C8D5002A9110 /* GePlanarEnt.h */,
+				2C4474E02175C8D5002A9110 /* GePlane.h */,
+				2C4474E12175C8D5002A9110 /* GePoint2d.h */,
+				2C4474E22175C8D5002A9110 /* GePoint2dArray.h */,
+				2C4474E32175C8D5002A9110 /* GePoint3d.h */,
+				2C4474E42175C8D5002A9110 /* GePoint3dArray.h */,
+				2C4474E52175C8D5002A9110 /* GePointEnt2d.h */,
+				2C4474E62175C8D5002A9110 /* GePointEnt3d.h */,
+				2C4474E72175C8D5002A9110 /* GePointOnCurve2d.h */,
+				2C4474E82175C8D5002A9110 /* GePointOnCurve3d.h */,
+				2C4474E92175C8D5002A9110 /* GePointOnSurface.h */,
+				2C4474EA2175C8D5002A9110 /* GePolyline2d.h */,
+				2C4474EB2175C8D5002A9110 /* GePolyline3d.h */,
+				2C4474EC2175C8D5002A9110 /* GePosition2d.h */,
+				2C4474ED2175C8D5002A9110 /* GePosition3d.h */,
+				2C4474EE2175C8D5002A9110 /* GeQuaternion.h */,
+				2C4474EF2175C8D5002A9110 /* GeRay2d.h */,
+				2C4474F02175C8D5002A9110 /* GeRay3d.h */,
+				2C4474F12175C8D5002A9110 /* GeScale2d.h */,
+				2C4474F22175C8D5002A9110 /* GeScale3d.h */,
+				2C4474F32175C8D5002A9110 /* GeSegmentChain2d.h */,
+				2C4474F42175C8D5002A9110 /* GeShell.h */,
+				2C4474F52175C8D5002A9110 /* GeSphere.h */,
+				2C4474F62175C8D5002A9110 /* GeSplineEnt2d.h */,
+				2C4474F72175C8D5002A9110 /* GeSplineEnt3d.h */,
+				2C4474F82175C8D5002A9110 /* GeSpunSurf.h */,
+				2C4474F92175C8D5002A9110 /* GeSurface.h */,
+				2C4474FA2175C8D5002A9110 /* GeSurfaceCurve2dTo3d.h */,
+				2C4474FB2175C8D5002A9110 /* GeSurfSurfInt.h */,
+				2C4474FC2175C8D5002A9110 /* GeTess.h */,
+				2C4474FD2175C8D5002A9110 /* GeTess2.h */,
+				2C4474FE2175C8D5002A9110 /* GeTol.h */,
+				2C4474FF2175C8D5002A9110 /* GeTorus.h */,
+				2C4475002175C8D5002A9110 /* GeVector2d.h */,
+				2C4475012175C8D5002A9110 /* GeVector2dArray.h */,
+				2C4475022175C8D5002A9110 /* GeVector3d.h */,
+				2C4475032175C8D5002A9110 /* GeVector3dArray.h */,
+				2C4475042175C8D5002A9110 /* GeVoidPointerArray.h */,
+			);
+			path = Ge;
+			sourceTree = "<group>";
+		};
+		2C44752D2175C8DD002A9110 /* ModelerGeometry */ = {
+			isa = PBXGroup;
+			children = (
+				2C44752E2175C8DE002A9110 /* C3dModelerDefines.h */,
+				2C44752F2175C8DE002A9110 /* ModelerModule.h */,
+				2C4475302175C8DE002A9110 /* ModelGeomExport.h */,
+			);
+			path = ModelerGeometry;
+			sourceTree = "<group>";
+		};
+		2C4475472175C8E3002A9110 /* DynamicBlocks */ = {
+			isa = PBXGroup;
+			children = (
+				2C4475482175C8E3002A9110 /* DbBlock1PtParameter.h */,
+				2C4475492175C8E3002A9110 /* DbBlock2PtParameter.h */,
+				2C44754A2175C8E3002A9110 /* DbBlockActions.h */,
+				2C44754B2175C8E3002A9110 /* DbBlockAlignmentParameter.h */,
+				2C44754C2175C8E3002A9110 /* DbBlockBasepointParameter.h */,
+				2C44754D2175C8E3002A9110 /* DbBlockConstraintParameters.h */,
+				2C44754E2175C8E3002A9110 /* DbBlockElement.h */,
+				2C44754F2175C8E3002A9110 /* DbBlockFlipParameter.h */,
+				2C4475502175C8E3002A9110 /* DbBlockGrips.h */,
+				2C4475512175C8E3002A9110 /* DbBlockLinearParameter.h */,
+				2C4475522175C8E3002A9110 /* DbBlockLookUpParameter.h */,
+				2C4475532175C8E3002A9110 /* DbBlockParameter.h */,
+				2C4475542175C8E3002A9110 /* DbBlockParamValueSet.h */,
+				2C4475552175C8E3002A9110 /* DbBlockPointParameter.h */,
+				2C4475562175C8E3002A9110 /* DbBlockPolarParameter.h */,
+				2C4475572175C8E3002A9110 /* DbBlockPropertiesTable.h */,
+				2C4475582175C8E3002A9110 /* DbBlockRepresentation.h */,
+				2C4475592175C8E3002A9110 /* DbBlockRepresentationData.h */,
+				2C44755A2175C8E3002A9110 /* DbBlockRotationParameter.h */,
+				2C44755B2175C8E3002A9110 /* DbBlockVisibilityParameter.h */,
+				2C44755C2175C8E3002A9110 /* DbBlockXYParameter.h */,
+				2C44755D2175C8E3002A9110 /* DbConstraintsInterfacePE.h */,
+				2C44755E2175C8E3002A9110 /* DbDynamicBlockProxyNode.h */,
+				2C44755F2175C8E3002A9110 /* DbDynamicBlockPurgePreventer.h */,
+			);
+			path = DynamicBlocks;
+			sourceTree = "<group>";
+		};
+		2C4475842175C8EB002A9110 /* PdfKey */ = {
+			isa = PBXGroup;
+			children = (
+				2C4475852175C8EB002A9110 /* PdfKey.h */,
+				2C4475862175C8EB002A9110 /* PdfPlatforms.h */,
+			);
+			path = PdfKey;
+			sourceTree = "<group>";
+		};
+		2C4F59032138E70000690DD3 /* SDK */ = {
+			isa = PBXGroup;
+			children = (
+				2C4F59042138E71900690DD3 /* SDPhotoBrowserSDK */,
+			);
+			path = SDK;
+			sourceTree = "<group>";
+		};
+		2C4F59042138E71900690DD3 /* SDPhotoBrowserSDK */ = {
+			isa = PBXGroup;
+			children = (
+				2C4F59052138E71900690DD3 /* SDBrowserImageView.h */,
+				2C4F59062138E71900690DD3 /* SDBrowserImageView.m */,
+				2C4F59072138E71900690DD3 /* SDPhotoBrowser.h */,
+				2C4F59082138E71900690DD3 /* SDPhotoBrowser.m */,
+				2C4F59092138E71900690DD3 /* SDPhotoBrowserConfig.h */,
+				2C4F590A2138E71900690DD3 /* SDWaitingView.h */,
+				2C4F590B2138E71900690DD3 /* SDWaitingView.m */,
+			);
+			path = SDPhotoBrowserSDK;
+			sourceTree = "<group>";
+		};
+		2C5067F720FDB30600D5F47A /* Menu */ = {
+			isa = PBXGroup;
+			children = (
+				2C5067F820FDB30600D5F47A /* MenuView.h */,
+				2C5067F920FDB30600D5F47A /* MenuView.m */,
+			);
+			path = Menu;
+			sourceTree = "<group>";
+		};
+		2C52CEF0212280100008317C /* AddIssueView */ = {
+			isa = PBXGroup;
+			children = (
+				2C52CEF1212280C90008317C /* PBTableHeaderView.h */,
+				2C52CEF2212280C90008317C /* PBTableHeaderView.m */,
+				2C52CEF42122A8580008317C /* PBInputTableViewCell.h */,
+				2C52CEF52122A8580008317C /* PBInputTableViewCell.m */,
+				2C20C53A2123D4CF0006469C /* PBChooseTableViewCell.h */,
+				2C20C53B2123D4CF0006469C /* PBChooseTableViewCell.m */,
+				2C20C53D212413340006469C /* PBChooseView.h */,
+				2C20C53E212413340006469C /* PBChooseView.m */,
+				2C2CB6632125632400E35BB5 /* PBPersonTableViewCell.h */,
+				2C2CB6642125632400E35BB5 /* PBPersonTableViewCell.m */,
+				2C2CB6662125735700E35BB5 /* PBPersonCollectionViewCell.h */,
+				2C2CB6672125735700E35BB5 /* PBPersonCollectionViewCell.m */,
+				2C2A51902126A57C004E1BAF /* PBEditPersonView.h */,
+				2C2A51912126A57C004E1BAF /* PBEditPersonView.m */,
+				2C2A51932126B2D9004E1BAF /* PBEditPersonCollectionViewCell.h */,
+				2C2A51942126B2D9004E1BAF /* PBEditPersonCollectionViewCell.m */,
+				2C2A51962126CA63004E1BAF /* PBRoleTableViewCell.h */,
+				2C2A51972126CA63004E1BAF /* PBRoleTableViewCell.m */,
+				2C511F9F212A61E1009A3A0E /* PBDateTableViewCell.h */,
+				2C511FA0212A61E1009A3A0E /* PBDateTableViewCell.m */,
+				2C511FA2212A72AD009A3A0E /* PBEditDateView.h */,
+				2C511FA3212A72AD009A3A0E /* PBEditDateView.m */,
+				2C55AE87212D65470042290F /* PBImageCollectionViewCell.h */,
+				2C55AE88212D65470042290F /* PBImageCollectionViewCell.m */,
+				2C65AEDD24F4FD92000347D7 /* PBVideoCollectionViewCell.h */,
+				2C65AEDE24F4FD92000347D7 /* PBVideoCollectionViewCell.m */,
+				2C301BBB21E6EB52006A7F0A /* PBIssueImageTableViewCell.h */,
+				2C301BBC21E6EB52006A7F0A /* PBIssueImageTableViewCell.m */,
+				2C301BC121E741E5006A7F0A /* PBIssueHeaderView.h */,
+				2C301BC221E741E5006A7F0A /* PBIssueHeaderView.m */,
+				2C301BC721E8341B006A7F0A /* PBPositionTableViewCell.h */,
+				2C301BC821E8341B006A7F0A /* PBPositionTableViewCell.m */,
+				2CC012B8241741FF00A39754 /* PBEditLableView.h */,
+				2CC012B9241741FF00A39754 /* PBEditLableView.m */,
+			);
+			path = AddIssueView;
+			sourceTree = "<group>";
+		};
+		2C533A4221E865FC009E6D08 /* Position */ = {
+			isa = PBXGroup;
+			children = (
+				2C301BC421E74D56006A7F0A /* PBIssueModelListController.h */,
+				2C301BC521E74D56006A7F0A /* PBIssueModelListController.m */,
+				2C533A3F21E8481D009E6D08 /* PBIssuePositionTypeController.h */,
+				2C533A4021E8481D009E6D08 /* PBIssuePositionTypeController.m */,
+				2C301BCA21E8405F006A7F0A /* PBIssueViewPointDetailsController.h */,
+				2C301BCB21E8405F006A7F0A /* PBIssueViewPointDetailsController.m */,
+				2C533A3921E84598009E6D08 /* PBIssueDrawingsShowController.h */,
+				2C533A3A21E84598009E6D08 /* PBIssueDrawingsShowController.m */,
+				2CD6F9CD21EF0139008231A3 /* PBOpenViewPointController.h */,
+				2CD6F9CE21EF0139008231A3 /* PBOpenViewPointController.m */,
+				2CD6F9D021EF014D008231A3 /* PBOpenDrawController.h */,
+				2CD6F9D121EF014D008231A3 /* PBOpenDrawController.m */,
+			);
+			path = Position;
+			sourceTree = "<group>";
+		};
+		2C544959211037D6005D6F63 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				2C54495B211037F3005D6F63 /* PBDocModel.h */,
+				2C54495C211037F3005D6F63 /* PBDocModel.m */,
+				2C01A38C2111AB6300D75B3F /* PBDocPrivilegeModel.h */,
+				2C01A38D2111AB6300D75B3F /* PBDocPrivilegeModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		2C54495A211037DC005D6F63 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				2C54495E21103D81005D6F63 /* PBDocListTableViewCell.h */,
+				2C54495F21103D81005D6F63 /* PBDocListTableViewCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		2C5DCED82154FDBE00A68B28 /* DES */ = {
+			isa = PBXGroup;
+			children = (
+				2C5DCED92154FDBE00A68B28 /* GTMBase64.h */,
+				2C5DCEDA2154FDBE00A68B28 /* GTMBase64.m */,
+				2C5DCEDB2154FDBE00A68B28 /* GTMDefines.h */,
+				2C5DCEDC2154FDBE00A68B28 /* PGGCryptoDES.h */,
+				2C5DCEDD2154FDBE00A68B28 /* PGGCryptoDES.m */,
+			);
+			path = DES;
+			sourceTree = "<group>";
+		};
+		2C8DD17C247F704C009B6C26 /* amapEffect */ = {
+			isa = PBXGroup;
+			children = (
+				2C8DD181247F704C009B6C26 /* LinPullTopViewController.h */,
+				2C8DD17E247F704C009B6C26 /* LinPullTopViewController.m */,
+				2C8DD17F247F704C009B6C26 /* LinPullMainViewController.h */,
+				2C8DD182247F704C009B6C26 /* LinPullMainViewController.m */,
+				2C8DD180247F704C009B6C26 /* LinPullBottomViewController.h */,
+				2C8DD17D247F704C009B6C26 /* LinPullBottomViewController.m */,
+				2C8DD183247F704C009B6C26 /* tool */,
+			);
+			path = amapEffect;
+			sourceTree = "<group>";
+		};
+		2C8DD183247F704C009B6C26 /* tool */ = {
+			isa = PBXGroup;
+			children = (
+				2C8DD184247F704C009B6C26 /* JYPulleyScrollView.m */,
+				2C8DD185247F704C009B6C26 /* JYPulleyViewController.m */,
+				2C8DD186247F704C009B6C26 /* JYPulleyScrollView.h */,
+				2C8DD187247F704C009B6C26 /* JYPulleyViewController.h */,
+			);
+			path = tool;
+			sourceTree = "<group>";
+		};
+		2C91E5EE21C2537B000D3312 /* AddExamineView */ = {
+			isa = PBXGroup;
+			children = (
+				2CC4043421DDDEB400372C54 /* RecordingView */,
+				2C91E5EF21C254FD000D3312 /* PBExamineInputTableViewCell.h */,
+				2C91E5F021C254FD000D3312 /* PBExamineInputTableViewCell.m */,
+				2C91E5F521C2562D000D3312 /* PBOneChooseTableViewCell.h */,
+				2C91E5F621C2562D000D3312 /* PBOneChooseTableViewCell.m */,
+				2C91E5F821C2563C000D3312 /* PBTwoChooseTableViewCell.h */,
+				2C91E5F921C2563C000D3312 /* PBTwoChooseTableViewCell.m */,
+				2C91E5FB21C25650000D3312 /* PBMoreChooseTableViewCell.h */,
+				2C91E5FC21C25650000D3312 /* PBMoreChooseTableViewCell.m */,
+				2C91E5FE21C25F8A000D3312 /* PBEditTimeTableViewCell.h */,
+				2C91E5FF21C25F8A000D3312 /* PBEditTimeTableViewCell.m */,
+				2C91E60121C26531000D3312 /* PBTextShowTableViewCell.h */,
+				2C91E60221C26531000D3312 /* PBTextShowTableViewCell.m */,
+				2CF9BE0C21C9F6A600A2536E /* PBOneChooseView.h */,
+				2CF9BE0D21C9F6A600A2536E /* PBOneChooseView.m */,
+				2CDE0D4321D0D043002A453C /* PBTwoChooseView.h */,
+				2CDE0D4421D0D043002A453C /* PBTwoChooseView.m */,
+				2CDE0D4621D33093002A453C /* PBTimeChooseView.h */,
+				2CDE0D4721D33093002A453C /* PBTimeChooseView.m */,
+				2C69964B2435DCCB0015EE17 /* PBStructureTableViewCell.h */,
+				2C69964C2435DCCB0015EE17 /* PBStructureTableViewCell.m */,
+				2C65AEC724EBA0D3000347D7 /* PBListTableViewCell.h */,
+				2C65AEC824EBA0D3000347D7 /* PBListTableViewCell.m */,
+				2C65AED424ED2886000347D7 /* PBCheckTableViewCell.h */,
+				2C65AED524ED2887000347D7 /* PBCheckTableViewCell.m */,
+				2CBA3F20253D847E005047D6 /* PBListDataTableViewCell.h */,
+				2CBA3F21253D847E005047D6 /* PBListDataTableViewCell.m */,
+				2C9A701B255A353000F00A60 /* PBComponentHierarchyView.h */,
+				2C9A701C255A353000F00A60 /* PBComponentHierarchyView.m */,
+			);
+			path = AddExamineView;
+			sourceTree = "<group>";
+		};
+		2CAB58462570EDA000101631 /* AddViews */ = {
+			isa = PBXGroup;
+			children = (
+				83A3DBB127BCA81E0012C539 /* PBCheckBoxTableViewCell.h */,
+				83A3DBB227BCA81E0012C539 /* PBCheckBoxTableViewCell.m */,
+				8304961227859AEF0032219C /* PBEAddImageView.h */,
+				8304961327859AEF0032219C /* PBEAddImageView.m */,
+				2CAB58472570F67300101631 /* PBTextInputTableViewCell.h */,
+				2CAB58482570F67300101631 /* PBTextInputTableViewCell.m */,
+				2CAB584F2574BCD000101631 /* PBTopTitleTableViewCell.h */,
+				2CAB58502574BCD000101631 /* PBTopTitleTableViewCell.m */,
+				2CAB58522574D36600101631 /* PBTimeChooseTableViewCell.h */,
+				2CAB58532574D36600101631 /* PBTimeChooseTableViewCell.m */,
+				2CAB58552574F6E100101631 /* PBEditTimeView.h */,
+				2CAB58562574F6E100101631 /* PBEditTimeView.m */,
+				2CAB58582578CDCA00101631 /* PBPersonChooseTableViewCell.h */,
+				2CAB58592578CDCA00101631 /* PBPersonChooseTableViewCell.m */,
+				2CAB585B2579E21A00101631 /* PBPersonListView.h */,
+				2CAB585C2579E21A00101631 /* PBPersonListView.m */,
+				2CAB585E2579E86300101631 /* PBPersonListCollectionViewCell.h */,
+				2CAB585F2579E86300101631 /* PBPersonListCollectionViewCell.m */,
+				2CAB586A257F4E4000101631 /* PBArtifactsListTableViewCell.h */,
+				2CAB586B257F4E4000101631 /* PBArtifactsListTableViewCell.m */,
+				2CAB586D257F5BD500101631 /* PBAritifactsTableViewCell.h */,
+				2CAB586E257F5BD500101631 /* PBAritifactsTableViewCell.m */,
+				2CAB5874258768EE00101631 /* PBRadioTableViewCell.h */,
+				2CAB5875258768EE00101631 /* PBRadioTableViewCell.m */,
+				2CAB587725876CCB00101631 /* PBInstructionsTableViewCell.h */,
+				2CAB587825876CCB00101631 /* PBInstructionsTableViewCell.m */,
+				2CAB587A25889B2800101631 /* PBStatusTableViewCell.h */,
+				2CAB587B25889B2800101631 /* PBStatusTableViewCell.m */,
+				2CAB587D2588B3B900101631 /* PBCheckHeaderView.h */,
+				2CAB587E2588B3B900101631 /* PBCheckHeaderView.m */,
+				2CAB588225908D0000101631 /* PBCheckInfoTableViewCell.h */,
+				2CAB588325908D0000101631 /* PBCheckInfoTableViewCell.m */,
+				2CAB588525919E9600101631 /* PBCheckImageTableViewCell.h */,
+				2CAB588625919E9700101631 /* PBCheckImageTableViewCell.m */,
+				2CAB58882594989C00101631 /* PBRecordInputTableViewCell.h */,
+				2CAB58892594989C00101631 /* PBRecordInputTableViewCell.m */,
+				2CB70E1725A4475000EDF368 /* PBPersonVCTableViewCell.h */,
+				2CB70E1825A4475000EDF368 /* PBPersonVCTableViewCell.m */,
+				2CB70E2025A59BD500EDF368 /* PBPersonRoleTableViewCell.h */,
+				2CB70E2125A59BD500EDF368 /* PBPersonRoleTableViewCell.m */,
+				2CB70E2925A6F96A00EDF368 /* PBMultiSelectPersonCell.h */,
+				2CB70E2A25A6F96A00EDF368 /* PBMultiSelectPersonCell.m */,
+				2CB70E2F25A80F1900EDF368 /* PBUserCollectionViewCell.h */,
+				2CB70E3025A80F1900EDF368 /* PBUserCollectionViewCell.m */,
+			);
+			path = AddViews;
+			sourceTree = "<group>";
+		};
+		2CB72E8E210EACA30020BD39 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				2CB72E8F210EAD260020BD39 /* BackNavItem.xib */,
+				2CB72E91210EAEF60020BD39 /* PBBackNavItem.h */,
+				2CB72E92210EAEF60020BD39 /* PBBackNavItem.m */,
+				2C6BF926211972370030F318 /* PBPromptView.h */,
+				2C6BF927211972370030F318 /* PBPromptView.m */,
+				2C77F7842182BD9B002BF912 /* PBShareView.h */,
+				2C77F7852182BD9B002BF912 /* PBShareView.m */,
+				2C2BAFE421882A5200701C56 /* PBDocShareView.h */,
+				2C2BAFE521882A5200701C56 /* PBDocShareView.m */,
+				2C77F7872182ECCA002BF912 /* PBShareBtn.xib */,
+				2C77F7892182ED06002BF912 /* PBShareBtn.h */,
+				2C77F78A2182ED06002BF912 /* PBShareBtn.m */,
+				2C77F78C21830830002BF912 /* PBShareCell.h */,
+				2C77F78D21830830002BF912 /* PBShareCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		2CBB3FC4248A45C8003D3089 /* AutoFitLabel */ = {
+			isa = PBXGroup;
+			children = (
+				2CBB3FD1248A45C8003D3089 /* MSSAutoresizeLabelFlow.h */,
+				2CBB3FC5248A45C8003D3089 /* MSSAutoresizeLabelFlow.m */,
+				2CBB3FD4248A45C8003D3089 /* MSSAutoresizeLabelFlowLayout.h */,
+				2CBB3FC8248A45C8003D3089 /* MSSAutoresizeLabelFlowLayout.m */,
+				2CBB3FCF248A45C8003D3089 /* MSSAutoresizeLabelFlowCell.h */,
+				2CBB3FD6248A45C8003D3089 /* MSSAutoresizeLabelFlowCell.m */,
+				2CBB3FD0248A45C8003D3089 /* MSSAutoresizeLabelFlowConfig.h */,
+				2CBB3FD7248A45C8003D3089 /* MSSAutoresizeLabelFlowConfig.m */,
+			);
+			path = AutoFitLabel;
+			sourceTree = "<group>";
+		};
+		2CBB3FEA24936308003D3089 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		2CBB3FEB2493632F003D3089 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				2CBB3FEC2493634F003D3089 /* PBCodeTableViewCell.h */,
+				2CBB3FED2493634F003D3089 /* PBCodeTableViewCell.m */,
+				2CFD790424C02CA8006B6E75 /* PBInputCodeTableViewCell.h */,
+				2CFD790524C02CA8006B6E75 /* PBInputCodeTableViewCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		2CC4043421DDDEB400372C54 /* RecordingView */ = {
+			isa = PBXGroup;
+			children = (
+				2CC4043621DDDF5C00372C54 /* Lame */,
+				2CC4043521DDDF5200372C54 /* ConvertAudioFile */,
+				2CC4043121DDBDEC00372C54 /* PBRecordingView.h */,
+				2CC4043221DDBDEC00372C54 /* PBRecordingView.m */,
+			);
+			path = RecordingView;
+			sourceTree = "<group>";
+		};
+		2CC4043521DDDF5200372C54 /* ConvertAudioFile */ = {
+			isa = PBXGroup;
+			children = (
+				2CC4043A21DDDFAD00372C54 /* ConvertAudioFile.h */,
+				2CC4043921DDDFAD00372C54 /* ConvertAudioFile.m */,
+			);
+			path = ConvertAudioFile;
+			sourceTree = "<group>";
+		};
+		2CC4043621DDDF5C00372C54 /* Lame */ = {
+			isa = PBXGroup;
+			children = (
+				2CC4043721DDDFA000372C54 /* lame.framework */,
+			);
+			path = Lame;
+			sourceTree = "<group>";
+		};
+		2CF4E84720FEE0900048E369 /* NavigationController */ = {
+			isa = PBXGroup;
+			children = (
+				2CF4E84820FEE0B10048E369 /* PBNavigationController.h */,
+				2CF4E84920FEE0B10048E369 /* PBNavigationController.m */,
+			);
+			path = NavigationController;
+			sourceTree = "<group>";
+		};
+		2CF4E84B20FF29600048E369 /* TabBarController */ = {
+			isa = PBXGroup;
+			children = (
+				2CF4E84C20FF29810048E369 /* PBTabBarController.h */,
+				2CF4E84D20FF29810048E369 /* PBTabBarController.m */,
+			);
+			path = TabBarController;
+			sourceTree = "<group>";
+		};
+		2CF4E84F20FF2FD60048E369 /* Project */ = {
+			isa = PBXGroup;
+			children = (
+				4C84885028FE97960095E7C3 /* Panorama */,
+				4CEFA89628D171C100EC7336 /* Bussiness */,
+				4CD6109228AE174100BBBF67 /* Schedule */,
+				2CF4E85320FF301D0048E369 /* Model */,
+				2CF4E85220FF30170048E369 /* Document */,
+				2CF4E85120FF30110048E369 /* Issue */,
+				2CF4E85020FF30080048E369 /* Examine */,
+			);
+			path = Project;
+			sourceTree = "<group>";
+		};
+		2CF4E85020FF30080048E369 /* Examine */ = {
+			isa = PBXGroup;
+			children = (
+				2CAB58462570EDA000101631 /* AddViews */,
+				2C144D2221ABCEB10011557A /* Models */,
+				2C144D2121ABCEA50011557A /* Views */,
+				2CF4E85720FF314D0048E369 /* ViewControllers */,
+			);
+			path = Examine;
+			sourceTree = "<group>";
+		};
+		2CF4E85120FF30110048E369 /* Issue */ = {
+			isa = PBXGroup;
+			children = (
+				2C1AC3EC211AA2AD00D3C412 /* Models */,
+				2C1AC3EB211AA29C00D3C412 /* Views */,
+				2CF4E85620FF312E0048E369 /* ViewControllers */,
+			);
+			path = Issue;
+			sourceTree = "<group>";
+		};
+		2CF4E85220FF30170048E369 /* Document */ = {
+			isa = PBXGroup;
+			children = (
+				2C44720D2175C730002A9110 /* Shape */,
+				2C54495A211037DC005D6F63 /* Views */,
+				2C544959211037D6005D6F63 /* Models */,
+				2CF4E85520FF31160048E369 /* ViewControllers */,
+			);
+			path = Document;
+			sourceTree = "<group>";
+		};
+		2CF4E85320FF301D0048E369 /* Model */ = {
+			isa = PBXGroup;
+			children = (
+				2CFB17782101CAF900B6BF1A /* Models */,
+				2CFB177421018BC100B6BF1A /* Views */,
+				2CF4E85420FF30590048E369 /* ViewControllers */,
+			);
+			path = Model;
+			sourceTree = "<group>";
+		};
+		2CF4E85420FF30590048E369 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				2C91967824D40D3700F00EE8 /* PBModelSearchController.h */,
+				2C91967924D40D3700F00EE8 /* PBModelSearchController.m */,
+				2C91966F24D0093800F00EE8 /* PBModelViewController.h */,
+				2C91967024D0093800F00EE8 /* PBModelViewController.m */,
+				2CF4E85820FF32440048E369 /* PBModelListViewController.h */,
+				2CF4E85920FF32440048E369 /* PBModelListViewController.m */,
+				2C1F54EE2105727100079C9E /* PBModelCategoryViewController.h */,
+				2C1F54EF2105727100079C9E /* PBModelCategoryViewController.m */,
+				2C027FD42106D9A600A2E663 /* PBLoadModelDisplayController.h */,
+				2C027FD52106D9A600A2E663 /* PBLoadModelDisplayController.m */,
+				2C027FDA2106DB0100A2E663 /* PBDrawingsShowController.h */,
+				2C027FDB2106DB0100A2E663 /* PBDrawingsShowController.m */,
+				2C027FDD2106DB6000A2E663 /* PBViewPointDetailsController.h */,
+				2C027FDE2106DB6000A2E663 /* PBViewPointDetailsController.m */,
+				2C023F0A2109D37F00E92E89 /* PBMoreTabViewController.h */,
+				2C023F0B2109D37F00E92E89 /* PBMoreTabViewController.m */,
+				2C3E76B0214A4F15005075AA /* PBImageShowViewController.h */,
+				2C3E76B1214A4F15005075AA /* PBImageShowViewController.m */,
+				2C26B7C825ECDC0B00AAE3D2 /* PBBrowseViewController.h */,
+				2C26B7C925ECDC0B00AAE3D2 /* PBBrowseViewController.m */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		2CF4E85520FF31160048E369 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				2C01A386211182F600D75B3F /* PBDocBaseController.h */,
+				2C01A387211182F600D75B3F /* PBDocBaseController.mm */,
+				2C01A389211189E400D75B3F /* PBDocListController.h */,
+				2C01A38A211189E400D75B3F /* PBDocListController.m */,
+				2C01A38F2111AC8100D75B3F /* PBPreviewDocViewController.h */,
+				2C01A3902111AC8100D75B3F /* PBPreviewDocViewController.m */,
+				2C4FED41211453B000D5306A /* PBDocSearchController.h */,
+				2C4FED42211453B000D5306A /* PBDocSearchController.m */,
+				2C197D3321786717008B8DDA /* DwgViewController.storyboard */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		2CF4E85620FF312E0048E369 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				2C5F1AF62121584300157314 /* PBIssueBaseController.h */,
+				2C5F1AF72121584300157314 /* PBIssueBaseController.m */,
+				2CF4E85E20FF32760048E369 /* PBIssueListViewController.h */,
+				2CF4E85F20FF32760048E369 /* PBIssueListViewController.m */,
+				2C5F1AFF212166B300157314 /* PBIssueSearchController.h */,
+				2C5F1B00212166B300157314 /* PBIssueSearchController.m */,
+				2C52CEED21227B880008317C /* PBAddIssueController.h */,
+				2CC012C02420AFA700A39754 /* PBAddIssueController.mm */,
+				2C52CEFA2122B1BD0008317C /* PBEditTextController.h */,
+				2C52CEFB2122B1BD0008317C /* PBEditTextController.m */,
+				2C35A043212EBFB300C8E51B /* PBCommentsController.h */,
+				2C35A044212EBFB300C8E51B /* PBCommentsController.m */,
+				2C242DC2213CDF9F00DB4C04 /* PBAddCommentsController.h */,
+				2C242DC3213CDF9F00DB4C04 /* PBAddCommentsController.m */,
+				2C533A4221E865FC009E6D08 /* Position */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		2CF4E85720FF314D0048E369 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				2C15512A22268D9900CBFF00 /* WKAvoidKeyboardViewController.h */,
+				2C15512B22268D9900CBFF00 /* WKAvoidKeyboardViewController.m */,
+				2C144D1E21ABC6550011557A /* PBExamineBaseController.h */,
+				2C144D1F21ABC6550011557A /* PBExamineBaseController.m */,
+				2CF4E86120FF328A0048E369 /* PBExamineListViewController.h */,
+				2CF4E86220FF328A0048E369 /* PBExamineListViewController.m */,
+				2C85434B21AE894100F570A0 /* PBExamineSearchController.h */,
+				2C85434C21AE894100F570A0 /* PBExamineSearchController.m */,
+				2C85434E21AE8A1300F570A0 /* PBAddExamineController.h */,
+				2C85434F21AE8A1300F570A0 /* PBAddExamineController.m */,
+				2C65AEC424EB78C7000347D7 /* PBCheckTaskViewController.h */,
+				2C65AEC524EB78C7000347D7 /* PBCheckTaskViewController.m */,
+				2C65AECA24EBC882000347D7 /* PBCheckViewController.h */,
+				2C65AECB24EBC882000347D7 /* PBCheckViewController.m */,
+				2C65AECF24ED001B000347D7 /* PBExamineDetailController.h */,
+				2C65AED024ED001B000347D7 /* PBExamineDetailController.m */,
+				2CF9BDFD21C77C1A00A2536E /* PBChooseModelViewController.h */,
+				2CF9BDFE21C77C1A00A2536E /* PBChooseModelViewController.m */,
+				2CF9BE0021C77F1B00A2536E /* PBPositioningTypeViewController.h */,
+				2CF9BE0121C77F1B00A2536E /* PBPositioningTypeViewController.m */,
+				2CF9BE0321C8977600A2536E /* PBEViewPointDetailsController.h */,
+				2CF9BE0421C8977600A2536E /* PBEViewPointDetailsController.m */,
+				2CF9BE0621C8C0CF00A2536E /* PBEDrawingsShowController.h */,
+				2CF9BE0721C8C0CF00A2536E /* PBEDrawingsShowController.m */,
+				2CF9BE0F21CB929C00A2536E /* PBDivisionViewController.h */,
+				2CF9BE1021CB929C00A2536E /* PBDivisionViewController.m */,
+				2CDFB0F521CCF0EC00DD8015 /* PBItemizedViewController.h */,
+				2CDFB0F621CCF0EC00DD8015 /* PBItemizedViewController.m */,
+				2CDE0D4021D0A883002A453C /* PBTestViewController.h */,
+				2CDE0D4121D0A883002A453C /* PBTestViewController.m */,
+				2C316D162202CBBC009C90FD /* PBRecordViewController.h */,
+				2C316D172202CBBC009C90FD /* PBRecordViewController.m */,
+				2C05747D22169EF900C7A2D5 /* PBAddRecordViewController.h */,
+				2C05747E22169EF900C7A2D5 /* PBAddRecordViewController.m */,
+				2C1551332227CF2B00CBFF00 /* PBApplyInspectionViewController.h */,
+				2C1551342227CF2B00CBFF00 /* PBApplyInspectionViewController.m */,
+				2C6996482435C7820015EE17 /* PBStructureViewController.h */,
+				2C6996492435C7820015EE17 /* PBStructureViewController.m */,
+				2C65AEE024F5F941000347D7 /* PBVideoPlayViewController.h */,
+				2C65AEE124F5F941000347D7 /* PBVideoPlayViewController.m */,
+				2C0F1126250B807900A510DE /* PBArtifactsViewController.h */,
+				2C0F1127250B807900A510DE /* PBArtifactsViewController.m */,
+				2C0F11382511EBC800A510DE /* PBAddExamineViewController.h */,
+				2C0F11392511EBC800A510DE /* PBAddExamineViewController.m */,
+				2CB70E1425A43EE000EDF368 /* PBPersonListViewController.h */,
+				2CB70E1525A43EE000EDF368 /* PBPersonListViewController.m */,
+				2CB70E1A25A55DC700EDF368 /* PBRoleViewController.h */,
+				2CB70E1B25A55DC700EDF368 /* PBRoleViewController.m */,
+				2CB70E2325A5A6DA00EDF368 /* PBRolePersonViewController.h */,
+				2CB70E2425A5A6DA00EDF368 /* PBRolePersonViewController.m */,
+				2CB70E3225A83A7C00EDF368 /* PBSelectedPersonController.h */,
+				2CB70E3325A83A7C00EDF368 /* PBSelectedPersonController.m */,
+				2CB70E3525B0138500EDF368 /* PBSeleceArtifactsViewController.h */,
+				2CB70E3625B0138500EDF368 /* PBSeleceArtifactsViewController.m */,
+				830496162786C7AF0032219C /* PBTaskViewController.h */,
+				830496152786C7AF0032219C /* PBTaskViewController.m */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		2CFB177421018BC100B6BF1A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				2CFB177521018C1F00B6BF1A /* PBPhaseLabel.h */,
+				2CFB177621018C1F00B6BF1A /* PBPhaseLabel.m */,
+				2CFB177C2101CC1200B6BF1A /* PBModelsTableViewCell.h */,
+				2CFB177D2101CC1200B6BF1A /* PBModelsTableViewCell.m */,
+				2C1F54FA2105B95D00079C9E /* PBTextTableViewCell.h */,
+				2C1F54FB2105B95D00079C9E /* PBTextTableViewCell.m */,
+				2C1F54FD2105B96700079C9E /* PBImageTableViewCell.h */,
+				2C1F54FE2105B96700079C9E /* PBImageTableViewCell.m */,
+				2CD83F9D21072345006111C7 /* PBViewPointDetailCell.h */,
+				2CD83F9E21072345006111C7 /* PBViewPointDetailCell.m */,
+				2C1267C3210AD0A200FC7DFE /* PBMoreFunctionView.h */,
+				2C1267C4210AD0A200FC7DFE /* PBMoreFunctionView.m */,
+				2C91967224D17F7A00F00EE8 /* PBModelLeftTableViewCell.h */,
+				2C91967324D17F7A00F00EE8 /* PBModelLeftTableViewCell.m */,
+				2C91967524D17FC700F00EE8 /* PBRightTableViewCell.h */,
+				2C91967624D17FC700F00EE8 /* PBRightTableViewCell.m */,
+				2C5AA47824FDFC3A00981543 /* PBBlankTableViewCell.h */,
+				2C5AA47924FDFC3A00981543 /* PBBlankTableViewCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		2CFB17782101CAF900B6BF1A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				2CFB17792101CB0E00B6BF1A /* PBModelsModel.h */,
+				2CFB177A2101CB0E00B6BF1A /* PBModelsModel.m */,
+				2C1F54F121059EBA00079C9E /* PBViewsModel.h */,
+				2C1F54F221059EBA00079C9E /* PBViewsModel.m */,
+				2C1F54F42105A11F00079C9E /* PBDrawingsModel.h */,
+				2C1F54F52105A11F00079C9E /* PBDrawingsModel.m */,
+				2C1F54F72105A1EF00079C9E /* PBViewPointModel.h */,
+				2C1F54F82105A1EF00079C9E /* PBViewPointModel.m */,
+				2CD83F9A2106FADF006111C7 /* PBDrawingsInfoModel.h */,
+				2CD83F9B2106FADF006111C7 /* PBDrawingsInfoModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		423147E9A6AE4CFA711244A3 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				2C2F24C521F9B53B00549388 /* Photos.framework */,
+				2C03ED792181C01D00846554 /* CoreGraphics.framework */,
+				2C03ED772181C01200846554 /* libsqlite3.tbd */,
+				2C4475B92175C94E002A9110 /* GLKit.framework */,
+				2C4475B72175C942002A9110 /* OpenGLES.framework */,
+				268D8549B01E06D59A6B6950 /* libPods-IphoneBIMe.a */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		4C385C712988F3DF00D9F626 /* SGQRCode */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C722988F3DF00D9F626 /* SGQRCode.h */,
+				4C385C732988F3DF00D9F626 /* ScanView */,
+				4C385C782988F3DF00D9F626 /* SGQRCode.bundle */,
+				4C385C792988F3DF00D9F626 /* WeakProxy */,
+				4C385C7C2988F3DF00D9F626 /* Torch */,
+				4C385C7F2988F3DF00D9F626 /* SGQRCodeLog.m */,
+				4C385C802988F3DF00D9F626 /* QRCode */,
+				4C385C862988F3DF00D9F626 /* SoundEffect */,
+				4C385C892988F3DF00D9F626 /* Permission */,
+				4C385C902988F3DF00D9F626 /* SGQRCodeLog.h */,
+			);
+			path = SGQRCode;
+			sourceTree = "<group>";
+		};
+		4C385C732988F3DF00D9F626 /* ScanView */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C742988F3DF00D9F626 /* SGScanViewConfigure.m */,
+				4C385C752988F3DF00D9F626 /* SGScanView.m */,
+				4C385C762988F3DF00D9F626 /* SGScanViewConfigure.h */,
+				4C385C772988F3DF00D9F626 /* SGScanView.h */,
+			);
+			path = ScanView;
+			sourceTree = "<group>";
+		};
+		4C385C792988F3DF00D9F626 /* WeakProxy */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C7A2988F3DF00D9F626 /* SGWeakProxy.m */,
+				4C385C7B2988F3DF00D9F626 /* SGWeakProxy.h */,
+			);
+			path = WeakProxy;
+			sourceTree = "<group>";
+		};
+		4C385C7C2988F3DF00D9F626 /* Torch */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C7D2988F3DF00D9F626 /* SGTorch.m */,
+				4C385C7E2988F3DF00D9F626 /* SGTorch.h */,
+			);
+			path = Torch;
+			sourceTree = "<group>";
+		};
+		4C385C802988F3DF00D9F626 /* QRCode */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C812988F3DF00D9F626 /* SGGenerateQRCode.h */,
+				4C385C822988F3DF00D9F626 /* SGScanCode.m */,
+				4C385C832988F3DF00D9F626 /* SGScanCodeDelegate.h */,
+				4C385C842988F3DF00D9F626 /* SGScanCode.h */,
+				4C385C852988F3DF00D9F626 /* SGGenerateQRCode.m */,
+			);
+			path = QRCode;
+			sourceTree = "<group>";
+		};
+		4C385C862988F3DF00D9F626 /* SoundEffect */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C872988F3DF00D9F626 /* SGSoundEffect.m */,
+				4C385C882988F3DF00D9F626 /* SGSoundEffect.h */,
+			);
+			path = SoundEffect;
+			sourceTree = "<group>";
+		};
+		4C385C892988F3DF00D9F626 /* Permission */ = {
+			isa = PBXGroup;
+			children = (
+				4C385C8A2988F3DF00D9F626 /* SGPermissionCamera.m */,
+				4C385C8B2988F3DF00D9F626 /* SGPermission.m */,
+				4C385C8C2988F3DF00D9F626 /* SGPermissionPhoto.m */,
+				4C385C8D2988F3DF00D9F626 /* SGPermissionCamera.h */,
+				4C385C8E2988F3DF00D9F626 /* SGPermission.h */,
+				4C385C8F2988F3DF00D9F626 /* SGPermissionPhoto.h */,
+			);
+			path = Permission;
+			sourceTree = "<group>";
+		};
+		4C82DC12290B73D3007A9400 /* HJCycleView */ = {
+			isa = PBXGroup;
+			children = (
+				4C82DC13290B7407007A9400 /* HJCycleView.h */,
+				4C82DC14290B7407007A9400 /* HJCycleView.m */,
+				4C82DC16290B7479007A9400 /* CycleCollectionViewCell.h */,
+				4C82DC17290B7479007A9400 /* CycleCollectionViewCell.m */,
+			);
+			path = HJCycleView;
+			sourceTree = "<group>";
+		};
+		4C84885028FE97960095E7C3 /* Panorama */ = {
+			isa = PBXGroup;
+			children = (
+				4C84885928FEA99C0095E7C3 /* Views */,
+				4C84885828FEA9970095E7C3 /* ViewControllers */,
+				4C84885728FEA9820095E7C3 /* Models */,
+			);
+			path = Panorama;
+			sourceTree = "<group>";
+		};
+		4C84885728FEA9820095E7C3 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				4C84885D28FEAC270095E7C3 /* PBPanoramaModel.h */,
+				4C84885E28FEAC270095E7C3 /* PBPanoramaModel.m */,
+				4C84887529029E800095E7C3 /* PBPanoramaItemModel.h */,
+				4C84887629029E800095E7C3 /* PBPanoramaItemModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		4C84885828FEA9970095E7C3 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				4C84885428FE9B6E0095E7C3 /* PBPanoramaBaseController.h */,
+				4C84885528FE9B6E0095E7C3 /* PBPanoramaBaseController.m */,
+				4C84885128FE98250095E7C3 /* PBPanoramaListViewController.h */,
+				4C84885228FE98250095E7C3 /* PBPanoramaListViewController.m */,
+				4C84886028FFD04A0095E7C3 /* PBPanoramaViewController.h */,
+				4C84886128FFD04A0095E7C3 /* PBPanoramaViewController.m */,
+				4C84886328FFE9810095E7C3 /* PBAddPanoramaViewController.h */,
+				4C84886428FFE9810095E7C3 /* PBAddPanoramaViewController.m */,
+				4C385CA32991FC2E00D9F626 /* PBVideoViewController.h */,
+				4C385CA42991FC2E00D9F626 /* PBVideoViewController.m */,
+				4C385CA629922F5300D9F626 /* PBWebViewController.h */,
+				4C385CA729922F5300D9F626 /* PBWebViewController.m */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		4C84885928FEA99C0095E7C3 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				4C84885A28FEA9EA0095E7C3 /* PBPanoramaTableViewCell.h */,
+				4C84885B28FEA9EA0095E7C3 /* PBPanoramaTableViewCell.m */,
+				4C84886629012EB10095E7C3 /* PBViewPointScrollView.h */,
+				4C84886729012EB10095E7C3 /* PBViewPointScrollView.m */,
+				4C848869290152750095E7C3 /* PBScrollStageView.h */,
+				4C84886A290152750095E7C3 /* PBScrollStageView.m */,
+				4C84886C2901528A0095E7C3 /* PBScrollModelView.h */,
+				4C84886D2901528A0095E7C3 /* PBScrollModelView.m */,
+				4C84886F2901529C0095E7C3 /* PBScrollVpView.h */,
+				4C8488702901529C0095E7C3 /* PBScrollVpView.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		4C861A0F283E36E3002555A2 /* LXFAVFoundation */ = {
+			isa = PBXGroup;
+			children = (
+				4C861A1C283E3761002555A2 /* LXFCameraController.h */,
+				4C861A19283E3761002555A2 /* LXFCameraController.m */,
+				4C861A18283E3761002555A2 /* LXFCameraController.xib */,
+				4C861A1A283E3761002555A2 /* PBResultVideo.h */,
+				4C861A1B283E3761002555A2 /* PBResultVideo.m */,
+				4C861A14283E3716002555A2 /* LXFCameraButton */,
+			);
+			path = LXFAVFoundation;
+			sourceTree = "<group>";
+		};
+		4C861A10283E36EA002555A2 /* LXFPhotoLibraryManager */ = {
+			isa = PBXGroup;
+			children = (
+				4C861A11283E3701002555A2 /* LXFPhotoLibraryManager.h */,
+				4C861A12283E3701002555A2 /* LXFPhotoLibraryManager.m */,
+			);
+			path = LXFPhotoLibraryManager;
+			sourceTree = "<group>";
+		};
+		4C861A14283E3716002555A2 /* LXFCameraButton */ = {
+			isa = PBXGroup;
+			children = (
+				4C861A15283E3732002555A2 /* LXFCameraButton.h */,
+				4C861A16283E3732002555A2 /* LXFCameraButton.m */,
+			);
+			path = LXFCameraButton;
+			sourceTree = "<group>";
+		};
+		4C9098FF28D80F0B004B30C4 /* IQKeyboardManager */ = {
+			isa = PBXGroup;
+			children = (
+				4C90990028D80F0B004B30C4 /* IQTextView */,
+				4C90990328D80F0B004B30C4 /* IQToolbar */,
+				4C90990E28D80F0B004B30C4 /* Constants */,
+				4C90991128D80F0B004B30C4 /* IQKeyboardReturnKeyHandler.h */,
+				4C90991228D80F0B004B30C4 /* IQKeyboardManager.h */,
+				4C90991328D80F0B004B30C4 /* IQKeyboardManager.m */,
+				4C90991428D80F0B004B30C4 /* Categories */,
+				4C90991F28D80F0B004B30C4 /* IQKeyboardReturnKeyHandler.m */,
+			);
+			path = IQKeyboardManager;
+			sourceTree = "<group>";
+		};
+		4C90990028D80F0B004B30C4 /* IQTextView */ = {
+			isa = PBXGroup;
+			children = (
+				4C90990128D80F0B004B30C4 /* IQTextView.m */,
+				4C90990228D80F0B004B30C4 /* IQTextView.h */,
+			);
+			path = IQTextView;
+			sourceTree = "<group>";
+		};
+		4C90990328D80F0B004B30C4 /* IQToolbar */ = {
+			isa = PBXGroup;
+			children = (
+				4C90990428D80F0B004B30C4 /* IQUIView+IQKeyboardToolbar.h */,
+				4C90990528D80F0B004B30C4 /* IQToolbar.m */,
+				4C90990628D80F0B004B30C4 /* IQPreviousNextView.h */,
+				4C90990728D80F0B004B30C4 /* IQTitleBarButtonItem.m */,
+				4C90990828D80F0B004B30C4 /* IQBarButtonItem.m */,
+				4C90990928D80F0B004B30C4 /* IQUIView+IQKeyboardToolbar.m */,
+				4C90990A28D80F0B004B30C4 /* IQPreviousNextView.m */,
+				4C90990B28D80F0B004B30C4 /* IQToolbar.h */,
+				4C90990C28D80F0B004B30C4 /* IQBarButtonItem.h */,
+				4C90990D28D80F0B004B30C4 /* IQTitleBarButtonItem.h */,
+			);
+			path = IQToolbar;
+			sourceTree = "<group>";
+		};
+		4C90990E28D80F0B004B30C4 /* Constants */ = {
+			isa = PBXGroup;
+			children = (
+				4C90990F28D80F0B004B30C4 /* IQKeyboardManagerConstantsInternal.h */,
+				4C90991028D80F0B004B30C4 /* IQKeyboardManagerConstants.h */,
+			);
+			path = Constants;
+			sourceTree = "<group>";
+		};
+		4C90991428D80F0B004B30C4 /* Categories */ = {
+			isa = PBXGroup;
+			children = (
+				4C90991528D80F0B004B30C4 /* IQNSArray+Sort.m */,
+				4C90991628D80F0B004B30C4 /* IQUIViewController+Additions.h */,
+				4C90991728D80F0B004B30C4 /* IQUITextFieldView+Additions.m */,
+				4C90991828D80F0B004B30C4 /* IQUIScrollView+Additions.m */,
+				4C90991928D80F0B004B30C4 /* IQUIView+Hierarchy.m */,
+				4C90991A28D80F0B004B30C4 /* IQNSArray+Sort.h */,
+				4C90991B28D80F0B004B30C4 /* IQUIScrollView+Additions.h */,
+				4C90991C28D80F0B004B30C4 /* IQUITextFieldView+Additions.h */,
+				4C90991D28D80F0B004B30C4 /* IQUIViewController+Additions.m */,
+				4C90991E28D80F0B004B30C4 /* IQUIView+Hierarchy.h */,
+			);
+			path = Categories;
+			sourceTree = "<group>";
+		};
+		4CD6109228AE174100BBBF67 /* Schedule */ = {
+			isa = PBXGroup;
+			children = (
+				4CD6109328AE174100BBBF67 /* Models */,
+				4CD6109628AE174100BBBF67 /* ViewControllers */,
+				4CD6109B28AE174100BBBF67 /* Views */,
+			);
+			path = Schedule;
+			sourceTree = "<group>";
+		};
+		4CD6109328AE174100BBBF67 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				4CD610AB28B35BAE00BBBF67 /* PBScheduleListModel.h */,
+				4CD610AC28B35BAE00BBBF67 /* PBScheduleListModel.m */,
+				4CD610B428B475D000BBBF67 /* PBSchedulePlanModel.h */,
+				4CD610B528B475D000BBBF67 /* PBSchedulePlanModel.m */,
+				4CD610D528B77BC500BBBF67 /* PBTaskScheduleModel.h */,
+				4CD610D628B77BC500BBBF67 /* PBTaskScheduleModel.m */,
+				4CD610E728BDAEBB00BBBF67 /* PBPerPlanModel.h */,
+				4CD610E828BDAEBB00BBBF67 /* PBPerPlanModel.m */,
+				4CD610E428BDAD2200BBBF67 /* PBSitePerModel.h */,
+				4CD610E528BDAD2200BBBF67 /* PBSitePerModel.m */,
+				2C16401328C39A7A001DFF31 /* PBMaterialPlanModel.h */,
+				2C16401428C39A7A001DFF31 /* PBMaterialPlanModel.m */,
+				2C16401628C39A93001DFF31 /* PBSiteMaterialModel.h */,
+				2C16401728C39A93001DFF31 /* PBSiteMaterialModel.m */,
+				4CD610F028BF656C00BBBF67 /* PBSafetyModel.h */,
+				4CD610F128BF656C00BBBF67 /* PBSafetyModel.m */,
+				4CD610F928C0522700BBBF67 /* PBSuperviseModel.h */,
+				4CD610FA28C0522700BBBF67 /* PBSuperviseModel.m */,
+				4CD6110228C5CE6100BBBF67 /* PBMechanicalPlanModel.h */,
+				4CD6110328C5CE6100BBBF67 /* PBMechanicalPlanModel.m */,
+				4CD6110528C5CE7200BBBF67 /* PBSiteMechanicalModel.h */,
+				4CD6110628C5CE7200BBBF67 /* PBSiteMechanicalModel.m */,
+				4C93503728CB377100476008 /* PBImageModel.h */,
+				4C93503828CB377100476008 /* PBImageModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		4CD6109628AE174100BBBF67 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				4CD610A228AE486700BBBF67 /* PBScheduleBaseController.h */,
+				4CD610A328AE486700BBBF67 /* PBScheduleBaseController.m */,
+				4CD610A528AE4A3300BBBF67 /* PBScheduleListViewController.h */,
+				4CD610A628AE4A3300BBBF67 /* PBScheduleListViewController.m */,
+				4CD610AE28B36C2000BBBF67 /* PBSchedulePlanViewController.h */,
+				4CD610AF28B36C2000BBBF67 /* PBSchedulePlanViewController.m */,
+				4CD610B728B4BA6A00BBBF67 /* PBScheduleModuleViewController.h */,
+				4CD610B828B4BA6A00BBBF67 /* PBScheduleModuleViewController.m */,
+				4CD610BD28B5BB8300BBBF67 /* PBTaskScheduleViewController.h */,
+				4CD610BE28B5BB8300BBBF67 /* PBTaskScheduleViewController.m */,
+				4CD610C028B5BBBB00BBBF67 /* PBSitePerViewController.h */,
+				4CD610C128B5BBBB00BBBF67 /* PBSitePerViewController.m */,
+				4CD610C328B5BC3A00BBBF67 /* PBSiteMechanicalViewController.h */,
+				4CD610C428B5BC3A00BBBF67 /* PBSiteMechanicalViewController.m */,
+				4CD610C628B5BC5C00BBBF67 /* PBSiteMaterialViewController.h */,
+				4CD610C728B5BC5C00BBBF67 /* PBSiteMaterialViewController.m */,
+				4CD610C928B5BC7300BBBF67 /* PBSafetyViewController.h */,
+				4CD610CA28B5BC7300BBBF67 /* PBSafetyViewController.m */,
+				4CD610CC28B5BCA100BBBF67 /* PBSuperviseViewController.h */,
+				4CD610CD28B5BCA100BBBF67 /* PBSuperviseViewController.m */,
+				4CD610D828B8997A00BBBF67 /* PBChooseOneTaskViewController.h */,
+				4CD610D928B8997A00BBBF67 /* PBChooseOneTaskViewController.m */,
+				4CEFA89328D0519A00EC7336 /* PBPreScheduleViewController.h */,
+				4CEFA89428D0519A00EC7336 /* PBPreScheduleViewController.m */,
+				4C385C9D2988F49E00D9F626 /* QQQRCodeVC.h */,
+				4C385C9E2988F49E00D9F626 /* QQQRCodeVC.m */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		4CD6109B28AE174100BBBF67 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				4CD610A828B331D000BBBF67 /* PBScheduleTableViewCell.h */,
+				4CD610A928B331D000BBBF67 /* PBScheduleTableViewCell.m */,
+				4CD610B128B38AD100BBBF67 /* PBSchedulePlanTableViewCell.h */,
+				4CD610B228B38AD100BBBF67 /* PBSchedulePlanTableViewCell.m */,
+				4CD610BA28B4C0F300BBBF67 /* PBModuleTableViewCell.h */,
+				4CD610BB28B4C0F300BBBF67 /* PBModuleTableViewCell.m */,
+				4CD610CF28B5D42300BBBF67 /* PBScheduleHeaderView.h */,
+				4CD610D028B5D42300BBBF67 /* PBScheduleHeaderView.m */,
+				4C90992D28D94F51004B30C4 /* PBTaskHeaderView.h */,
+				4C90992E28D94F51004B30C4 /* PBTaskHeaderView.m */,
+				4CD610D228B619C700BBBF67 /* PBPlanTaskTableViewCell.h */,
+				4CD610D328B619C700BBBF67 /* PBPlanTaskTableViewCell.m */,
+				4CD610DB28BC64A600BBBF67 /* PBunPlanTaskTableViewCell.h */,
+				4CD610DC28BC64A600BBBF67 /* PBunPlanTaskTableViewCell.m */,
+				4CD610E128BDAC1000BBBF67 /* PBSitePerTableViewCell.h */,
+				4CD610E228BDAC1000BBBF67 /* PBSitePerTableViewCell.m */,
+				4CD610EA28BDDF2400BBBF67 /* PBChooseType.h */,
+				4CD610EB28BDDF2400BBBF67 /* PBChooseType.m */,
+				4CD610ED28BF593600BBBF67 /* PBSafetyTableViewCell.h */,
+				4CD610EE28BF593600BBBF67 /* PBSafetyTableViewCell.m */,
+				4CD610FC28C052B900BBBF67 /* PBSuperviseTableViewCell.h */,
+				4CD610FD28C052B900BBBF67 /* PBSuperviseTableViewCell.m */,
+				2C992DDF28C4AAE7007AE4BC /* PBMateralTableViewCell.h */,
+				2C992DE028C4AAE7007AE4BC /* PBMateralTableViewCell.m */,
+				4CD610FF28C5A18400BBBF67 /* PBSchedulesElementTableViewCell.h */,
+				4CD6110028C5A18400BBBF67 /* PBSchedulesElementTableViewCell.m */,
+				4C93503128CB12E300476008 /* PBScheduleImgTableViewCell.h */,
+				4C93503228CB12E300476008 /* PBScheduleImgTableViewCell.m */,
+				4C93503428CB170600476008 /* PBImgAndNameCollectionViewCell.h */,
+				4C93503528CB170600476008 /* PBImgAndNameCollectionViewCell.m */,
+				4C385CA0298A068E00D9F626 /* PBNewPersonTableViewCell.h */,
+				4C385CA1298A068E00D9F626 /* PBNewPersonTableViewCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		4CEFA89628D171C100EC7336 /* Bussiness */ = {
+			isa = PBXGroup;
+			children = (
+				4CEFA89728D171E700EC7336 /* ViewControllers */,
+			);
+			path = Bussiness;
+			sourceTree = "<group>";
+		};
+		4CEFA89728D171E700EC7336 /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				4CEFA89828D1721900EC7336 /* PBBussinessViewController.h */,
+				4CEFA89928D1721900EC7336 /* PBBussinessViewController.m */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		9581E7A5CB44576CE3295CDF /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				5D943DF8CC49884A8AD54943 /* Pods-IphoneBIMe.debug.xcconfig */,
+				2E141B7B69B652435715D5BB /* Pods-IphoneBIMe.release.xcconfig */,
+			);
+			name = Pods;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		2C2A6EF020F88F1000218D5C /* IphoneBIMe */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 2C2A6F0720F88F1000218D5C /* Build configuration list for PBXNativeTarget "IphoneBIMe" */;
+			buildPhases = (
+				53D0D08DCE78BE6BDB40FBFB /* [CP] Check Pods Manifest.lock */,
+				2C2A6EED20F88F1000218D5C /* Sources */,
+				2C2A6EEE20F88F1000218D5C /* Frameworks */,
+				2C2A6EEF20F88F1000218D5C /* Resources */,
+				2C599B3D215E066B00509A0E /* ShellScript */,
+				2C26054521800C690017C0B1 /* Embed Frameworks */,
+				2CC012CC2425CFE600A39754 /* ShellScript */,
+				41EA1AF79B790BDBB8C17034 /* [CP] Copy Pods Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = IphoneBIMe;
+			productName = IphoneBIMe;
+			productReference = 2C2A6EF120F88F1000218D5C /* IphoneBIMe.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		2C2A6EE920F88F1000218D5C /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				CLASSPREFIX = PB;
+				LastUpgradeCheck = 1240;
+				ORGANIZATIONNAME = ProBIM;
+				TargetAttributes = {
+					2C2A6EF020F88F1000218D5C = {
+						CreatedOnToolsVersion = 9.2;
+						ProvisioningStyle = Manual;
+						SystemCapabilities = {
+							com.apple.Push = {
+								enabled = 1;
+							};
+						};
+					};
+				};
+			};
+			buildConfigurationList = 2C2A6EEC20F88F1000218D5C /* Build configuration list for PBXProject "IphoneBIMe" */;
+			compatibilityVersion = "Xcode 8.0";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 2C2A6EE820F88F1000218D5C;
+			productRefGroup = 2C2A6EF220F88F1000218D5C /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				2C2A6EF020F88F1000218D5C /* IphoneBIMe */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		2C2A6EEF20F88F1000218D5C /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2C2E1D0621C3841D00310E81 /* STAR_probim_cn.cer in Resources */,
+				2C65AECE24EBD00A000347D7 /* examineAdd4.plist in Resources */,
+				2C2A6F0120F88F1000218D5C /* LaunchScreen.storyboard in Resources */,
+				2C4472172175C83E002A9110 /* marker.zip in Resources */,
+				83A3DBB027BBA99A0012C539 /* examineAdd6.plist in Resources */,
+				2C91E5EA21C0F091000D3312 /* examineAdd.plist in Resources */,
+				2C4472182175C83E002A9110 /* hztxt.shx in Resources */,
+				2CF1510822BB712C0098C0F1 /* issueAdd2.plist in Resources */,
+				2C2A6EFE20F88F1000218D5C /* Assets.xcassets in Resources */,
+				2C2A6EFC20F88F1000218D5C /* Main.storyboard in Resources */,
+				4C861A1D283E3761002555A2 /* LXFCameraController.xib in Resources */,
+				2C07FAC52133E720005C67D6 /* images.bundle in Resources */,
+				2C0F113C2514553E00A510DE /* examineAdd1.plist in Resources */,
+				2C4475A32175C8F0002A9110 /* include.dsp in Resources */,
+				2CAB58732583264800101631 /* examineAdd3.plist in Resources */,
+				2CB72E90210EAD260020BD39 /* BackNavItem.xib in Resources */,
+				2C165639212BAE1A007CA9FD /* issueAdd.plist in Resources */,
+				2CAB5881258CB43300101631 /* examineAdd5.plist in Resources */,
+				2C4472162175C83E002A9110 /* txt.shx in Resources */,
+				2CF1510622BB70DC0098C0F1 /* examineAdd2.plist in Resources */,
+				2C2E1D0521C3841D00310E81 /* STAR_bim365_com_cn.cer in Resources */,
+				2C4472192175C83E002A9110 /* adinit.dat in Resources */,
+				2C77F7882182ECCA002BF912 /* PBShareBtn.xib in Resources */,
+				4C385C932988F3DF00D9F626 /* SGQRCode.bundle in Resources */,
+				2C96B95725CA92E800218DF5 /* loading_alone.json in Resources */,
+				2C96B95525CA92E800218DF5 /* loading_push.json in Resources */,
+				2C197D3421786717008B8DDA /* DwgViewController.storyboard in Resources */,
+				2C96B95625CA92E800218DF5 /* loading_refresh.json in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		2C599B3D215E066B00509A0E /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "#!/bin/sh\n#\n# Copyright 2016 Bugly, Tencent. All rights reserved.\n#\n# V1.4.0\n#\n# 2016.08.03\n#\n#\n#\n######################################################\n# 1. 脚本集成到Xcode工程的Target\n######################################################\n#\n# --- Copy the SCRIPT to the Run Script of Build Phases in the Xcode project ---\n#\n# #\nBUGLY_APP_ID=\"a371eb689e\"\n# #\nBUGLY_APP_KEY=\"ae045145-2e73-42e3-9284-90794807eb86\"\n# #\nBUNDLE_IDENTIFIER=\"com.probim.IPhoneBIMe\"\n# #\nUPLOAD_DSYM_ONLY=1\n#\n# # 脚本默认配置的版本格式为CFBundleShortVersionString(CFBundleVersion),  如果你修改默认的版本格式, 请设置此变量, 如果不想修改, 请忽略此设置\n# CUSTOMIZED_APP_VERSION=\"\"\n#\n# # Debug模式编译是否上传,1=上传 0=不上传,默认不上传\nUPLOAD_DEBUG_SYMBOLS=0\n#\n# # 模拟器编译是否上传,1=上传 0=不上传,默认不上传\nUPLOAD_SIMULATOR_SYMBOLS=0\n#\n# #只有Archive操作时上传, 1=支持Archive上传 0=所有Release模式编译都上传\nUPLOAD_ARCHIVE_ONLY=1\n#\n# #\n# source dSYMUpload.sh\n#\n# --- END OF SCRIPT ---\n#\n#\n#\n#\n#######################################################\n# 2. 脚本根据输入参数处理\n#######################################################\n#\n# #命令行下输入应用基本信息, .dSYM文件的父目录路径, 输出文件目录即可\n#\n# sh dSYMUpload.sh <bugly_app_id> <bugly_app_key> <app_bundle_identifier> <app_version> <dSYM_src_dir> <bSYMBOL_dest_dir>\n#\n# #\n#\n# #注意:\n# # 1. dSYMUpload.sh会调用buglySymboliOS.jar进行.dSYM解析,所以依赖Java运行时环境\n# # 2. dSYMUpload.sh和buglySymboliOS.jar的文件路径需一致\n#\n#\n\n#\n# --- CONTENT OF SCRIPT ---\n#\n\n# Bugly服务域名\nBUGLY_DSYM_UPLOAD_DOMAIN=\"api.bugly.qq.com\"\n\n# 注意jar工具的路径跟dSYMUpload.sh脚本路径一致, 请务必保证jar路径的正确性\nBUGLY_SYMBOL_JAR_PATH=\"dsymtool/buglySymboliOS.jar\"\n# 查找添加到系统目录的jar工具\nif [ ! -f \"${BUGLY_SYMBOL_JAR_PATH}\" ]; then\nBUGLY_SYMBOL_JAR_PATH=\"$HOME/bin/buglySymboliOS.jar\"\nfi\n\n# 打印错误信息\nfunction exitWithMessage(){\necho \"--------------------------------\"\necho \"${1}\"\necho \"--------------------------------\"\nexit ${2}\n}\n\n# 上传bSYMBOL文件\nfunction dSYMUpload() {\nP_APP_ID=\"$1\"\nP_APP_KEY=\"$2\"\nP_APP_BUNDLE_ID=\"$3\"\nP_APP_VERSION=\"$4\"\nP_BSYMBOL_ZIP_FILE=\"$5\"\n\n#\nP_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE##*/}\nP_BSYMBOL_ZIP_FILE_NAME=${P_BSYMBOL_ZIP_FILE_NAME//&/_}\nP_BSYMBOL_ZIP_FILE_NAME=\"${P_BSYMBOL_ZIP_FILE_NAME// /_}\"\n\nDSYM_UPLOAD_URL=\"https://${BUGLY_DSYM_UPLOAD_DOMAIN}/openapi/file/upload/symbol?app_id=${P_APP_ID}&app_key=${P_APP_KEY}\"\necho \"dSYM upload url: ${DSYM_UPLOAD_URL}\"\n\necho \"-----------------------------\"\nSTATUS=$(/usr/bin/curl -k \"${DSYM_UPLOAD_URL}\" --form \"api_version=1\" --form \"app_id=${P_APP_ID}\" --form \"app_key=${P_APP_KEY}\" --form \"symbolType=2\"  --form \"bundleId=${BUNDLE_IDENTIFIER}\" --form \"productVersion=${BUGLY_APP_VERSION}\" --form \"fileName=${P_BSYMBOL_ZIP_FILE_NAME}\" --form \"file=@${P_BSYMBOL_ZIP_FILE}\" --verbose)\necho \"-----------------------------\"\n\nUPLOAD_RESULT=\"FAILTURE\"\necho \"Bugly server response: ${STATUS}\"\nif [ ! \"${STATUS}\" ]; then\necho \"Error: Failed to upload the zip archive file.\"\nelif [[ \"${STATUS}\" == *\"{\\\"reponseCode\\\":\\\"0\\\"}\"* ]]; then\necho \"Success to upload the dSYM for the app [${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION}]\"\nUPLOAD_RESULT=\"SUCCESS\"\nelse\necho \"Error: Failed to upload the zip archive file to Bugly.\"\nfi\n\n#Remove temp dSYM archive\n#echo \"Remove temporary zip archive: ${DSYM_ZIP_FPATH}\"\n#/bin/rm -f \"${DSYM_ZIP_FPATH}\"\n\nif [ \"$?\" -ne 0 ]; then\nexitWithMessage \"Error: Failed to remove temporary zip archive.\" 0\nfi\n\necho \"--------------------------------\"\necho \"${UPLOAD_RESULT} - dSYM upload complete.\"\n\nif [[ \"${UPLOAD_RESULT}\" == \"FAILTURE\" ]]; then\necho \"--------------------------------\"\necho \"Failed to upload the dSYM\"\necho \"Please check the script and try it again.\"\nfi\n}\n\n# .dSYM解析为bSYMBOL文件\nfunction dSYMParse() {\nDSYM_FILE=\"$1\"\nDSYM_SYMBOL_FILE=\"$2\"\n\necho \"--------------------------------\"\necho \"Extract symbol info from .dSYM file. to ${DSYM_SYMBOL_FILE}\"\n(/usr/bin/java -Xms512m -Xmx1024m -Dfile.encoding=UTF8 -jar \"${BUGLY_SYMBOL_JAR_PATH}\" -i \"${DSYM_FILE}\" -o \"${DSYM_SYMBOL_FILE}\" ) || exitWithMessage \"Error: Failed to extract symbols.\" 1\necho \"--------------------------------\"\n\n}\n\n# 执行\nfunction run() {\n\nCONFIG_BUGLY_APP_ID=\"$1\"\nCONFIG_BUGLY_APP_KEY=\"$2\"\n\nCONFIG_BUGLY_APP_BUNDLE_IDENTIFIER=\"$3\"\nCONFIG_BUGLY_APP_VERSION=\"$4\"\nCONFIG_DSYM_SOURCE_DIR=\"$5\"\nCONFIG_DSYM_DEST_DIR=\"$6\"\nCONFIG_UPLOAD_DSYM_ONLY=\"$7\"\n\n# 检查必须参数是否设置\nif [ ! \"${CONFIG_BUGLY_APP_ID}\" ]; then\nexitWithMessage \"Error: Bugly App ID not defined. Please set 'BUGLY_APP_ID' \" 0\nfi\n\nif [[ \"${CONFIG_BUGLY_APP_ID}\" == *\"App ID\"* ]]; then\nexitWithMessage \"Error: Bugly App ID not defined.\" 0\nfi\n\nif [ ! \"${CONFIG_BUGLY_APP_KEY}\" ]; then\nexitWithMessage \"Error: Bugly App Key not defined.\" 0\nfi\n\nif [ ! \"${CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER}\" ]; then\nexitWithMessage \"Error: Bundle Identifier not defined.\" 0\nfi\n\nif [ ! \"${CONFIG_BUGLY_APP_VERSION}\" ]; then\nexitWithMessage \"Error: App Version not defined.\" 0\nfi\n\nif [ ! -e \"${CONFIG_DSYM_SOURCE_DIR}\" ]; then\nexitWithMessage \"Error: Invalid dir ${CONFIG_DSYM_SOURCE_DIR}\" 0\nfi\n\nif [ ! \"${CONFIG_DSYM_DEST_DIR}\" ]; then\nexitWithMessage \"Error: Invalid dir ${CONFIG_DSYM_DEST_DIR}\" 0\nfi\n\nif [ ! -e \"${CONFIG_DSYM_DEST_DIR}\" ]; then\nmkdir ${CONFIG_DSYM_DEST_DIR}\nfi\n\nDSYM_FOLDER=\"${CONFIG_DSYM_SOURCE_DIR}\"\nIFS=$'\\n'\n\necho \"Scaning dSYM FOLDER: ${DSYM_FOLDER} ...\"\nRET=\"F\"\n\n#\nfor dsymFile in $(find \"$DSYM_FOLDER\" -name '*.dSYM'); do\nRET=\"T\"\necho \"Found dSYM file: $dsymFile\"\n\nDSYM_FILE_NAME=${dsymFile##*/}\nDSYM_SYMBOL_ZIP_FILE_NAME=\"${DSYM_FILE_NAME}.zip\"\nDSYM_SYMBOL_ZIP_FILE_NAME=\"${DSYM_SYMBOL_ZIP_FILE_NAME// /_}\"\nDSYM_SYMBOL_ZIP_FILE=${CONFIG_DSYM_DEST_DIR}/${DSYM_SYMBOL_ZIP_FILE_NAME}\n\nif [ $CONFIG_UPLOAD_DSYM_ONLY -eq 1 ]; then\nif [ -e $DSYM_SYMBOL_ZIP_FILE ]; then\nrm -f $DSYM_SYMBOL_ZIP_FILE\nfi\n# 如果只上传dSYM,直接压缩dSYM目录\nzip -r -j $DSYM_SYMBOL_ZIP_FILE $dsymFile -x *.plist\nelse\n# 使用符号表工具来生成Symbol文件\ndSYMParse $dsymFile $DSYM_SYMBOL_ZIP_FILE\nfi\n\n# 上传\ndSYMUpload $CONFIG_BUGLY_APP_ID $CONFIG_BUGLY_APP_KEY $CONFIG_BUGLY_APP_BUNDLE_IDENTIFIER $CONFIG_BUGLY_APP_VERSION $DSYM_SYMBOL_ZIP_FILE\ndone\n\nif [ $RET = \"F\" ]; then\nexitWithMessage \"No .dSYM found in ${DSYM_FOLDER}\" 0\nfi\n}\n\n# 在Xcode工程中执行\nfunction runInXcode(){\necho \"Uploading dSYM to Bugly in Xcode ...\"\n\necho \"Info.Plist : ${INFOPLIST_FILE}\"\n\nBUNDLE_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleVersion' \"${INFOPLIST_FILE}\")\nBUNDLE_SHORT_VERSION=$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' \"${INFOPLIST_FILE}\")\n\n# 组装Bugly默认识别的版本信息(格式为CFBundleShortVersionString(CFBundleVersion), 例如: 1.0(1))\nif [ ! \"${CUSTOMIZED_APP_VERSION}\" ]; then\nBUGLY_APP_VERSION=\"${BUNDLE_SHORT_VERSION}(${BUNDLE_VERSION})\"\nelse\nBUGLY_APP_VERSION=\"${CUSTOMIZED_APP_VERSION}\"\nfi\n\necho \"--------------------------------\"\necho \"Prepare application information.\"\necho \"--------------------------------\"\n\necho \"Product Name: ${PRODUCT_NAME}\"\necho \"Bundle Identifier: ${BUNDLE_IDENTIFIER}\"\necho \"Version: ${BUNDLE_SHORT_VERSION}\"\necho \"Build: ${BUNDLE_VERSION}\"\n\necho \"Bugly App ID: ${BUGLY_APP_ID}\"\necho \"Bugly App key: ${BUGLY_APP_KEY}\"\necho \"Bugly App Version: ${BUGLY_APP_VERSION}\"\n\necho \"--------------------------------\"\necho \"Check the arguments ...\"\n\n##检查模拟器编译是否允许上传符号\nif [ \"$EFFECTIVE_PLATFORM_NAME\" == \"-iphonesimulator\" ]; then\nif [ $UPLOAD_SIMULATOR_SYMBOLS -eq 0 ]; then\nexitWithMessage \"Warning: Build for simulator and skipping to upload. \\nYou can modify 'UPLOAD_SIMULATOR_SYMBOLS' to 1 in the script.\" 0\nfi\nfi\n\n##检查是否是Release模式编译\nif [ \"${CONFIGURATION=}\" == \"Debug\" ]; then\nif [ $UPLOAD_DEBUG_SYMBOLS -eq 0 ]; then\nexitWithMessage \"Warning: Build for debug mode and skipping to upload. \\nYou can modify 'UPLOAD_DEBUG_SYMBOLS' to 1 in the script.\" 0\nfi\nfi\n\n##检查是否Archive操作\nif [ $UPLOAD_ARCHIVE_ONLY -eq 1 ]; then\nif [[ \"$TARGET_BUILD_DIR\" == *\"/Archive\"* ]]; then\necho \"Archive the package\"\nelse\nexitWithMessage \"Warning: Build for NOT Archive mode and skipping to upload. \\nYou can modify 'UPLOAD_ARCHIVE_ONLY' to 0 in the script.\" 0\nfi\nfi\n\n#\nrun ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${BUILD_DIR}/BuglySymbolTemp ${UPLOAD_DSYM_ONLY}\n}\n\n# 根据Xcode的环境变量判断是否处于Xcode环境\nINFO_PLIST_FILE=\"${INFOPLIST_FILE}\"\n\nBuildInXcode=\"F\"\nif [ -f \"${INFO_PLIST_FILE}\" ]; then\nBuildInXcode=\"T\"\nfi\n\nif [ $BuildInXcode = \"T\" ]; then\nrunInXcode\nelse\necho \"\\nUsage: dSYMUpload.sh <bugly_app_id> <bugly_app_key> <app_bundle_identifier> <app_version> <dSYM_src_dir> <bSYMBOL_dest_dir> [upload_dsym_only]\\n\"\n# 你可以在此处直接设置BuglyAppID和BuglyAppKey,排除不常变参数的输入\nBUGLY_APP_ID=\"$1\"\nBUGLY_APP_KEY=\"$2\"\nBUNDLE_IDENTIFIER=\"$3\"\nBUGLY_APP_VERSION=\"$4\"\nDWARF_DSYM_FOLDER_PATH=\"$5\"\nSYMBOL_OUTPUT_PATH=\"$6\"\nUPLOAD_DSYM_ONLY=$7\nrun ${BUGLY_APP_ID} ${BUGLY_APP_KEY} ${BUNDLE_IDENTIFIER} ${BUGLY_APP_VERSION} ${DWARF_DSYM_FOLDER_PATH} ${SYMBOL_OUTPUT_PATH} ${UPLOAD_DSYM_ONLY}\nfi\n";
+		};
+		2CC012CC2425CFE600A39754 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+			);
+			inputPaths = (
+			);
+			outputFileListPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nAPP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n# This script loops through the frameworks embedded in the application and\n\n# removes unused architectures.\n\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\n\ndo\n\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\n\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\n\necho \"Executable is $FRAMEWORK_EXECUTABLE_PATH\"\n\nEXTRACTED_ARCHS=()\n\nfor ARCH in $ARCHS\n\ndo\n\necho \"Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME\"\n\nlipo -extract \"$ARCH\" \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\"\n\nEXTRACTED_ARCHS+=(\"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\")\n\ndone\n\necho \"Merging extracted architectures: ${ARCHS}\"\n\nlipo -o \"$FRAMEWORK_EXECUTABLE_PATH-merged\" -create \"${EXTRACTED_ARCHS[@]}\"\n\nrm \"${EXTRACTED_ARCHS[@]}\"\n\necho \"Replacing original executable with thinned version\"\n\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\n\nmv \"$FRAMEWORK_EXECUTABLE_PATH-merged\" \"$FRAMEWORK_EXECUTABLE_PATH\"\n\ndone\n\n";
+		};
+		41EA1AF79B790BDBB8C17034 /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-IphoneBIMe/Pods-IphoneBIMe-resources.sh",
+				"${PODS_ROOT}/AMap3DMap/MAMapKit.framework/AMap.bundle",
+				"${PODS_ROOT}/LFImagePickerController/LFImagePickerController/LFImagePickerController/class/LFImagePickerController.bundle",
+				"${PODS_ROOT}/LFMediaEditingController/LFMediaEditingController/LFMediaEditingController/class/vendors/LFEasyNoticeBar/LFEasyNoticeBar.bundle",
+				"${PODS_ROOT}/LFMediaEditingController/LFMediaEditingController/LFMediaEditingController/class/common/LFMediaEditingController.bundle",
+				"${PODS_ROOT}/LFMediaEditingController/LFMediaEditingController/LFMediaEditingController/class/vendors/LFTipsGuideView/LFTipsGuideView.bundle",
+				"${PODS_ROOT}/MJRefresh/MJRefresh/MJRefresh.bundle",
+				"${PODS_ROOT}/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.bundle",
+			);
+			name = "[CP] Copy Pods Resources";
+			outputPaths = (
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AMap.bundle",
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LFImagePickerController.bundle",
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LFEasyNoticeBar.bundle",
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LFMediaEditingController.bundle",
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LFTipsGuideView.bundle",
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MJRefresh.bundle",
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TZImagePickerController.bundle",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IphoneBIMe/Pods-IphoneBIMe-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		53D0D08DCE78BE6BDB40FBFB /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-IphoneBIMe-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		2C2A6EED20F88F1000218D5C /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				2C0F1128250B807900A510DE /* PBArtifactsViewController.m in Sources */,
+				2C316D1B2202E11C009C90FD /* PBRecordModel.m in Sources */,
+				2C301BC921E8341B006A7F0A /* PBPositionTableViewCell.m in Sources */,
+				4CD610CE28B5BCA100BBBF67 /* PBSuperviseViewController.m in Sources */,
+				2CAB585D2579E21A00101631 /* PBPersonListView.m in Sources */,
+				4CD610B928B4BA6A00BBBF67 /* PBScheduleModuleViewController.m in Sources */,
+				2C1F54F321059EBA00079C9E /* PBViewsModel.m in Sources */,
+				2C5F1B01212166B300157314 /* PBIssueSearchController.m in Sources */,
+				2CAB586F257F5BD500101631 /* PBAritifactsTableViewCell.m in Sources */,
+				4C385C922988F3DF00D9F626 /* SGScanView.m in Sources */,
+				4C84886829012EB10095E7C3 /* PBViewPointScrollView.m in Sources */,
+				2CAB58602579E86300101631 /* PBPersonListCollectionViewCell.m in Sources */,
+				4C93503628CB170600476008 /* PBImgAndNameCollectionViewCell.m in Sources */,
+				2CF4E86020FF32760048E369 /* PBIssueListViewController.m in Sources */,
+				2C301BCC21E8405F006A7F0A /* PBIssueViewPointDetailsController.m in Sources */,
+				2CD6F9D521F16AFA008231A3 /* PBPublishCommentCell.m in Sources */,
+				2C20C53F212413340006469C /* PBChooseView.m in Sources */,
+				2C027FDF2106DB6000A2E663 /* PBViewPointDetailsController.m in Sources */,
+				4C861A13283E3701002555A2 /* LXFPhotoLibraryManager.m in Sources */,
+				4C385C912988F3DF00D9F626 /* SGScanViewConfigure.m in Sources */,
+				2C65AECC24EBC882000347D7 /* PBCheckViewController.m in Sources */,
+				2C1F54F02105727100079C9E /* PBModelCategoryViewController.m in Sources */,
+				2CC012BA2417420000A39754 /* PBEditLableView.m in Sources */,
+				2CA07075246A78F900F9D6D1 /* PBMapViewController.m in Sources */,
+				2CF9BDFF21C77C1A00A2536E /* PBChooseModelViewController.m in Sources */,
+				2CDE0D4821D33093002A453C /* PBTimeChooseView.m in Sources */,
+				2C20E9BE20FC49B600A18732 /* UIBarButtonItem+PBCategory.m in Sources */,
+				2CF4E86320FF328A0048E369 /* PBExamineListViewController.m in Sources */,
+				4C84886E2901528A0095E7C3 /* PBScrollModelView.m in Sources */,
+				2C69964D2435DCCB0015EE17 /* PBStructureTableViewCell.m in Sources */,
+				2C06890322769D790026B30F /* JHAES.m in Sources */,
+				2C4FED43211453B000D5306A /* PBDocSearchController.m in Sources */,
+				4CD610B328B38AD100BBBF67 /* PBSchedulePlanTableViewCell.m in Sources */,
+				4C93503328CB12E300476008 /* PBScheduleImgTableViewCell.m in Sources */,
+				830496172786C7AF0032219C /* PBTaskViewController.m in Sources */,
+				4C385CA829922F5300D9F626 /* PBWebViewController.m in Sources */,
+				2CDE0D4221D0A883002A453C /* PBTestViewController.m in Sources */,
+				2C2CB6682125735700E35BB5 /* PBPersonCollectionViewCell.m in Sources */,
+				2CAB58542574D36600101631 /* PBTimeChooseTableViewCell.m in Sources */,
+				2C9A701D255A353000F00A60 /* PBComponentHierarchyView.m in Sources */,
+				830496202787D8120032219C /* PBChooseTasksCell.m in Sources */,
+				2C1784C6246BC6BF00EE56D8 /* PBPointAnnotation.m in Sources */,
+				4CD610E328BDAC1000BBBF67 /* PBSitePerTableViewCell.m in Sources */,
+				2CAB58512574BCD000101631 /* PBTopTitleTableViewCell.m in Sources */,
+				2C5067F620FD935100D5F47A /* PBMineView.m in Sources */,
+				2C66CBED216C811B0039C19A /* PBProjectPower.m in Sources */,
+				4CD610FE28C052B900BBBF67 /* PBSuperviseTableViewCell.m in Sources */,
+				2C16401528C39A7A001DFF31 /* PBMaterialPlanModel.m in Sources */,
+				4C8488712901529C0095E7C3 /* PBScrollVpView.m in Sources */,
+				2C01A388211182F600D75B3F /* PBDocBaseController.mm in Sources */,
+				2C2A51982126CA63004E1BAF /* PBRoleTableViewCell.m in Sources */,
+				2C316D182202CBBC009C90FD /* PBRecordViewController.m in Sources */,
+				2C2A6F0420F88F1000218D5C /* main.m in Sources */,
+				2CB70E3A25B0172C00EDF368 /* PBSelectArtifactsCell.m in Sources */,
+				2CBA3F22253D847E005047D6 /* PBListDataTableViewCell.m in Sources */,
+				4C861A17283E3732002555A2 /* LXFCameraButton.m in Sources */,
+				4CD6110128C5A18400BBBF67 /* PBSchedulesElementTableViewCell.m in Sources */,
+				4C385C982988F3DF00D9F626 /* SGGenerateQRCode.m in Sources */,
+				2C65AED624ED2887000347D7 /* PBCheckTableViewCell.m in Sources */,
+				2C8DD18C247F704C009B6C26 /* JYPulleyViewController.m in Sources */,
+				2C20E9C720FC848900A18732 /* PBProjectModel.m in Sources */,
+				4C90992428D80F0B004B30C4 /* IQUIView+IQKeyboardToolbar.m in Sources */,
+				4C385C942988F3DF00D9F626 /* SGWeakProxy.m in Sources */,
+				2C65AEE224F5F941000347D7 /* PBVideoPlayViewController.m in Sources */,
+				2CFB177721018C1F00B6BF1A /* PBPhaseLabel.m in Sources */,
+				2C91E5F721C2562D000D3312 /* PBOneChooseTableViewCell.m in Sources */,
+				2CD83F9F21072345006111C7 /* PBViewPointDetailCell.m in Sources */,
+				2C35A045212EBFB300C8E51B /* PBCommentsController.m in Sources */,
+				4CD610BC28B4C0F300BBBF67 /* PBModuleTableViewCell.m in Sources */,
+				2C381596213F84CA00763B0B /* PBAgreementViewController.m in Sources */,
+				2C3EB3B825063118005BF2DF /* PBScreeningView.m in Sources */,
+				8304961D2786D8F20032219C /* PBETaskInfoModel.m in Sources */,
+				4C90992C28D80F0B004B30C4 /* IQKeyboardReturnKeyHandler.m in Sources */,
+				2C52CEF3212280C90008317C /* PBTableHeaderView.m in Sources */,
+				2CDFB0F721CCF0EC00DD8015 /* PBItemizedViewController.m in Sources */,
+				2CAB58492570F67300101631 /* PBTextInputTableViewCell.m in Sources */,
+				2CD6F9CF21EF0139008231A3 /* PBOpenViewPointController.m in Sources */,
+				2C91E5FA21C2563C000D3312 /* PBTwoChooseTableViewCell.m in Sources */,
+				4CD610C828B5BC5C00BBBF67 /* PBSiteMaterialViewController.m in Sources */,
+				2C20E9C020FC49B600A18732 /* UIColor+ZJFAdditon.m in Sources */,
+				2CAB588725919E9700101631 /* PBCheckImageTableViewCell.m in Sources */,
+				2CFB177B2101CB0E00B6BF1A /* PBModelsModel.m in Sources */,
+				2CB70E2B25A6F96A00EDF368 /* PBMultiSelectPersonCell.m in Sources */,
+				2C05747F22169EF900C7A2D5 /* PBAddRecordViewController.m in Sources */,
+				4CD610FB28C0522700BBBF67 /* PBSuperviseModel.m in Sources */,
+				4C385C9B2988F3DF00D9F626 /* SGPermission.m in Sources */,
+				2C027FDC2106DB0100A2E663 /* PBDrawingsShowController.m in Sources */,
+				2CB70E2225A59BD600EDF368 /* PBPersonRoleTableViewCell.m in Sources */,
+				2C511FA4212A72AD009A3A0E /* PBEditDateView.m in Sources */,
+				2C5F1AF82121584300157314 /* PBIssueBaseController.m in Sources */,
+				2C91967724D17FC700F00EE8 /* PBRightTableViewCell.m in Sources */,
+				2C07FAC62133E720005C67D6 /* YJProgressHUD.m in Sources */,
+				2C77F78B2182ED06002BF912 /* PBShareBtn.m in Sources */,
+				4C385C9A2988F3DF00D9F626 /* SGPermissionCamera.m in Sources */,
+				2CBB3FE4248A45C8003D3089 /* MSSAutoresizeLabelFlowConfig.m in Sources */,
+				2C8DD189247F704C009B6C26 /* LinPullTopViewController.m in Sources */,
+				4C90992228D80F0B004B30C4 /* IQTitleBarButtonItem.m in Sources */,
+				4C90992028D80F0B004B30C4 /* IQTextView.m in Sources */,
+				2C20E9BD20FC49B600A18732 /* NSString+PBCategory.m in Sources */,
+				2C01A3912111AC8100D75B3F /* PBPreviewDocViewController.m in Sources */,
+				2C65AEC924EBA0D3000347D7 /* PBListTableViewCell.m in Sources */,
+				2C023F0C2109D37F00E92E89 /* PBMoreTabViewController.m in Sources */,
+				2C5AA47A24FDFC3A00981543 /* PBBlankTableViewCell.m in Sources */,
+				2C65AED924EE6FA0000347D7 /* PBRoleModel.m in Sources */,
+				4CD610EF28BF593600BBBF67 /* PBSafetyTableViewCell.m in Sources */,
+				4C385CA52991FC2E00D9F626 /* PBVideoViewController.m in Sources */,
+				2C481287214F79E100153B80 /* PBUnReadTableViewCell.m in Sources */,
+				2CF9BE0821C8C0CF00A2536E /* PBEDrawingsShowController.m in Sources */,
+				2CAB58572574F6E100101631 /* PBEditTimeView.m in Sources */,
+				4C84886B290152750095E7C3 /* PBScrollStageView.m in Sources */,
+				2C301BBD21E6EB52006A7F0A /* PBIssueImageTableViewCell.m in Sources */,
+				2CAB587925876CCB00101631 /* PBInstructionsTableViewCell.m in Sources */,
+				2C5DCEDE2154FDBE00A68B28 /* GTMBase64.m in Sources */,
+				2CC012C42421C47600A39754 /* PBCommentsCell.m in Sources */,
+				2C91967424D17F7A00F00EE8 /* PBModelLeftTableViewCell.m in Sources */,
+				4C90992328D80F0B004B30C4 /* IQBarButtonItem.m in Sources */,
+				2C54495D211037F3005D6F63 /* PBDocModel.m in Sources */,
+				2C65AEDC24F39BAB000347D7 /* PBExamineListToCheckCell.m in Sources */,
+				4C84885628FE9B6E0095E7C3 /* PBPanoramaBaseController.m in Sources */,
+				4CD610B028B36C2000BBBF67 /* PBSchedulePlanViewController.m in Sources */,
+				2C15512C22268D9900CBFF00 /* WKAvoidKeyboardViewController.m in Sources */,
+				2C55AE89212D65470042290F /* PBImageCollectionViewCell.m in Sources */,
+				2C9567592553E8EC00001080 /* PBExamineListTwoPicCell.m in Sources */,
+				2CD6F9D221EF014D008231A3 /* PBOpenDrawController.m in Sources */,
+				2C8DD16E247BAB6A009B6C26 /* PBProjectInfoView.m in Sources */,
+				2CBB3FDC248A45C8003D3089 /* MSSAutoresizeLabelFlowLayout.m in Sources */,
+				2CAB5876258768EE00101631 /* PBRadioTableViewCell.m in Sources */,
+				4C90992728D80F0B004B30C4 /* IQNSArray+Sort.m in Sources */,
+				2C0F1134250F1E9E00A510DE /* PBRetrieveView1.m in Sources */,
+				2C20E9C120FC49B600A18732 /* UILabel+ZJFAdditon.m in Sources */,
+				2C69964A2435C7820015EE17 /* PBStructureViewController.m in Sources */,
+				2C2CB6652125632400E35BB5 /* PBPersonTableViewCell.m in Sources */,
+				2CBB3FEE2493634F003D3089 /* PBCodeTableViewCell.m in Sources */,
+				4C90992628D80F0B004B30C4 /* IQKeyboardManager.m in Sources */,
+				2C1AC3F8211AFAE900D3C412 /* PBIssueNavModel.m in Sources */,
+				2C8DD18B247F704C009B6C26 /* JYPulleyScrollView.m in Sources */,
+				4C385CA2298A068E00D9F626 /* PBNewPersonTableViewCell.m in Sources */,
+				2C0F11422519FD9600A510DE /* PBArtifactsInfoModel.m in Sources */,
+				2C65AEDF24F4FD92000347D7 /* PBVideoCollectionViewCell.m in Sources */,
+				2CB70E2525A5A6DA00EDF368 /* PBRolePersonViewController.m in Sources */,
+				2C91E5ED21C238FD000D3312 /* PBExamineAddModel.m in Sources */,
+				2CB70E1925A4475000EDF368 /* PBPersonVCTableViewCell.m in Sources */,
+				2CC012C12420AFA700A39754 /* PBAddIssueController.mm in Sources */,
+				2C77D96B21AD334600AEB02C /* PBResultModel.m in Sources */,
+				2CDE0D4521D0D043002A453C /* PBTwoChooseView.m in Sources */,
+				4C82DC15290B7407007A9400 /* HJCycleView.m in Sources */,
+				2C0F1145251C95C500A510DE /* PBChooseArtifactsCell.m in Sources */,
+				2CB70E3725B0138500EDF368 /* PBSeleceArtifactsViewController.m in Sources */,
+				4CD610E928BDAEBB00BBBF67 /* PBPerPlanModel.m in Sources */,
+				2C01A38E2111AB6300D75B3F /* PBDocPrivilegeModel.m in Sources */,
+				2C91966124CEBA4700F00EE8 /* PBScanningViewController.m in Sources */,
+				4CD610B628B475D000BBBF67 /* PBSchedulePlanModel.m in Sources */,
+				2C533A4121E8481D009E6D08 /* PBIssuePositionTypeController.m in Sources */,
+				4C84887729029E800095E7C3 /* PBPanoramaItemModel.m in Sources */,
+				2C511FA1212A61E1009A3A0E /* PBDateTableViewCell.m in Sources */,
+				2CB70E3425A83A7C00EDF368 /* PBSelectedPersonController.m in Sources */,
+				2C144D2021ABC6550011557A /* PBExamineBaseController.m in Sources */,
+				2C4F59112139190100690DD3 /* PBCommentsModel.m in Sources */,
+				2C1F54FF2105B96700079C9E /* PBImageTableViewCell.m in Sources */,
+				2C2A6F1220F894DA00218D5C /* PBProjectListViewController.m in Sources */,
+				4CD610D128B5D42300BBBF67 /* PBScheduleHeaderView.m in Sources */,
+				2C77F7862182BD9B002BF912 /* PBShareView.m in Sources */,
+				2C95675F2553F57B00001080 /* PBExamineListMorePicCell.m in Sources */,
+				2CF9BE0521C8977600A2536E /* PBEViewPointDetailsController.m in Sources */,
+				2C8DD196247F7B95009B6C26 /* UIImageView+CSCategory.m in Sources */,
+				2CB70E2825A6DA5200EDF368 /* PBUserModel.m in Sources */,
+				2C91E60021C25F8A000D3312 /* PBEditTimeTableViewCell.m in Sources */,
+				2C3E76B2214A4F15005075AA /* PBImageShowViewController.m in Sources */,
+				2C4F590C2138E71900690DD3 /* SDBrowserImageView.m in Sources */,
+				2C2C1203213E3A650031A71B /* PBCommentsFooterView.m in Sources */,
+				2C9C3081259ACBCE003809E8 /* PBRecordImageTableViewCell.m in Sources */,
+				2C301BC321E741E5006A7F0A /* PBIssueHeaderView.m in Sources */,
+				2C1F54F62105A11F00079C9E /* PBDrawingsModel.m in Sources */,
+				2CBB3FC3248A3C63003D3089 /* PBProjectSearchView.m in Sources */,
+				2C1551352227CF2B00CBFF00 /* PBApplyInspectionViewController.m in Sources */,
+				2C85435021AE8A1300F570A0 /* PBAddExamineController.m in Sources */,
+				2CAB587C25889B2800101631 /* PBStatusTableViewCell.m in Sources */,
+				2CC012C72421CCDD00A39754 /* PBImageCommentsCell.m in Sources */,
+				2CA07078246B991500F9D6D1 /* PBAnnotationView.m in Sources */,
+				2C1AC3F5211AF9CB00D3C412 /* PBIssueListModel.m in Sources */,
+				4C90992B28D80F0B004B30C4 /* IQUIViewController+Additions.m in Sources */,
+				4C84885C28FEA9EA0095E7C3 /* PBPanoramaTableViewCell.m in Sources */,
+				2C2A51952126B2D9004E1BAF /* PBEditPersonCollectionViewCell.m in Sources */,
+				2C20E9AE20FC40C100A18732 /* PBLoginViewController.m in Sources */,
+				4C84885328FE98250095E7C3 /* PBPanoramaListViewController.m in Sources */,
+				4CD610AA28B331D000BBBF67 /* PBScheduleTableViewCell.m in Sources */,
+				2C01A38B211189E400D75B3F /* PBDocListController.m in Sources */,
+				4CD6110428C5CE6100BBBF67 /* PBMechanicalPlanModel.m in Sources */,
+				2CF4E84A20FEE0B10048E369 /* PBNavigationController.m in Sources */,
+				4CD610C228B5BBBB00BBBF67 /* PBSitePerViewController.m in Sources */,
+				4CD610EC28BDDF2400BBBF67 /* PBChooseType.m in Sources */,
+				2CC012BF2418E46000A39754 /* PBTagModel.m in Sources */,
+				2C0F113A2511EBC800A510DE /* PBAddExamineViewController.m in Sources */,
+				2CB70E3D25B989C900EDF368 /* NSDictionary+log.m in Sources */,
+				2CD83F9C2106FADF006111C7 /* PBDrawingsInfoModel.m in Sources */,
+				2C16563C212C1D75007CA9FD /* PBPersonModel.m in Sources */,
+				2C5DCEDF2154FDBE00A68B28 /* PGGCryptoDES.m in Sources */,
+				2C91E5FD21C25650000D3312 /* PBMoreChooseTableViewCell.m in Sources */,
+				2C4F590E2138E71900690DD3 /* SDWaitingView.m in Sources */,
+				2C1F54F92105A1EF00079C9E /* PBViewPointModel.m in Sources */,
+				4C385C992988F3DF00D9F626 /* SGSoundEffect.m in Sources */,
+				2C6BF928211972370030F318 /* PBPromptView.m in Sources */,
+				2CF4E85A20FF32440048E369 /* PBModelListViewController.m in Sources */,
+				4CEFA89A28D1721900EC7336 /* PBBussinessViewController.m in Sources */,
+				2C144D2E21ABF4800011557A /* PBExamineListModel.m in Sources */,
+				2C1267C2210AC3FF00FC7DFE /* PBAlertController.m in Sources */,
+				2C52CEF92122AD390008317C /* PBIssueAddModel.m in Sources */,
+				4C84886528FFE9810095E7C3 /* PBAddPanoramaViewController.m in Sources */,
+				4C93503928CB377100476008 /* PBImageModel.m in Sources */,
+				2CF9BE0221C77F1B00A2536E /* PBPositioningTypeViewController.m in Sources */,
+				4C90992F28D94F51004B30C4 /* PBTaskHeaderView.m in Sources */,
+				4C90992128D80F0B004B30C4 /* IQToolbar.m in Sources */,
+				4C385C9F2988F49F00D9F626 /* QQQRCodeVC.m in Sources */,
+				2CAB585A2578CDCA00101631 /* PBPersonChooseTableViewCell.m in Sources */,
+				2CAB587F2588B3B900101631 /* PBCheckHeaderView.m in Sources */,
+				2C5DCED52154F16600A68B28 /* PBChangePWController.m in Sources */,
+				2CF9BE1121CB929C00A2536E /* PBDivisionViewController.m in Sources */,
+				4CD610CB28B5BC7300BBBF67 /* PBSafetyViewController.m in Sources */,
+				2C20C53C2123D4CF0006469C /* PBChooseTableViewCell.m in Sources */,
+				2C3DC804211C16AC00DC1CB6 /* PBNetworkModel.m in Sources */,
+				4C90992828D80F0B004B30C4 /* IQUITextFieldView+Additions.m in Sources */,
+				2CBB3FE3248A45C8003D3089 /* MSSAutoresizeLabelFlowCell.m in Sources */,
+				2C2A51922126A57C004E1BAF /* PBEditPersonView.m in Sources */,
+				4CD610A428AE486700BBBF67 /* PBScheduleBaseController.m in Sources */,
+				4CD610F228BF656C00BBBF67 /* PBSafetyModel.m in Sources */,
+				2C144D2821ABCF2E0011557A /* PBExamineListTableViewCell.m in Sources */,
+				2C0F11372510BE2A00A510DE /* PBScreeningCell.m in Sources */,
+				2C65AEC624EB78C7000347D7 /* PBCheckTaskViewController.m in Sources */,
+				2C2A6F1A20F8A6B100218D5C /* PBNetworkTools.m in Sources */,
+				83A3DBB327BCA81F0012C539 /* PBCheckBoxTableViewCell.m in Sources */,
+				8304962327881A340032219C /* PBSelectTaskCell.m in Sources */,
+				2C242DC4213CDF9F00DB4C04 /* PBAddCommentsController.m in Sources */,
+				2C1267C5210AD0A200FC7DFE /* PBMoreFunctionView.m in Sources */,
+				2CB70E1625A43EE000EDF368 /* PBPersonListViewController.m in Sources */,
+				2C8DD18A247F704C009B6C26 /* LinPullMainViewController.m in Sources */,
+				2C4F590D2138E71900690DD3 /* SDPhotoBrowser.m in Sources */,
+				2CC4043321DDBDEC00372C54 /* PBRecordingView.m in Sources */,
+				2C992DE128C4AAE7007AE4BC /* PBMateralTableViewCell.m in Sources */,
+				2C2A6EF620F88F1000218D5C /* AppDelegate.m in Sources */,
+				2CBB3FE8249355A0003D3089 /* PBEnterpriseCodeController.m in Sources */,
+				2CB72E93210EAEF60020BD39 /* PBBackNavItem.m in Sources */,
+				2C9567562552801F00001080 /* PBExamineListPicCell.m in Sources */,
+				4CD610AD28B35BAE00BBBF67 /* PBScheduleListModel.m in Sources */,
+				2CAB588425908D0000101631 /* PBCheckInfoTableViewCell.m in Sources */,
+				4C861A1F283E3761002555A2 /* PBResultVideo.m in Sources */,
+				2C1F54FC2105B95D00079C9E /* PBTextTableViewCell.m in Sources */,
+				2C301BC621E74D56006A7F0A /* PBIssueModelListController.m in Sources */,
+				2C2A6F1520F89E3F00218D5C /* PBProjectTableViewCell.m in Sources */,
+				2CC5C63921AFE8C400F5976D /* PBExamineTableHeaderView.m in Sources */,
+				2C77F78E21830830002BF912 /* PBShareCell.m in Sources */,
+				2CDE0D4B21D4A547002A453C /* PBDrawingposModel.m in Sources */,
+				4C385C972988F3DF00D9F626 /* SGScanCode.m in Sources */,
+				4C861A1E283E3761002555A2 /* LXFCameraController.m in Sources */,
+				2C48128A214F90E100153B80 /* PBUnReadMesModel.m in Sources */,
+				4C84886228FFD04A0095E7C3 /* PBPanoramaViewController.m in Sources */,
+				4C385C9C2988F3DF00D9F626 /* SGPermissionPhoto.m in Sources */,
+				2C4475B32175C924002A9110 /* DwgViewController.mm in Sources */,
+				8304961427859AEF0032219C /* PBEAddImageView.m in Sources */,
+				4C90992528D80F0B004B30C4 /* IQPreviousNextView.m in Sources */,
+				2C391301212FD8CE0055665C /* PBIssueDetailModel.m in Sources */,
+				4C84885F28FEAC270095E7C3 /* PBPanoramaModel.m in Sources */,
+				2C8DD188247F704C009B6C26 /* LinPullBottomViewController.m in Sources */,
+				4CD6110728C5CE7200BBBF67 /* PBSiteMechanicalModel.m in Sources */,
+				2C4475B22175C924002A9110 /* stdafx.cpp in Sources */,
+				2C3EB3B52500E3A1005BF2DF /* PBVideoListTableViewCell.m in Sources */,
+				4CD610BF28B5BB8300BBBF67 /* PBTaskScheduleViewController.m in Sources */,
+				2C52CEF62122A8580008317C /* PBInputTableViewCell.m in Sources */,
+				2CC4043E21DE02E200372C54 /* PBAVPlayerManager.m in Sources */,
+				2C533A3B21E84598009E6D08 /* PBIssueDrawingsShowController.m in Sources */,
+				2CF4E84E20FF29810048E369 /* PBTabBarController.m in Sources */,
+				2C0F113F2518A7E300A510DE /* PBArtifactsModel.m in Sources */,
+				4CD610D428B619C700BBBF67 /* PBPlanTaskTableViewCell.m in Sources */,
+				4CD610DA28B8997A00BBBF67 /* PBChooseOneTaskViewController.m in Sources */,
+				2CFB177E2101CC1200B6BF1A /* PBModelsTableViewCell.m in Sources */,
+				2C16401828C39A93001DFF31 /* PBSiteMaterialModel.m in Sources */,
+				4CD610A728AE4A3300BBBF67 /* PBScheduleListViewController.m in Sources */,
+				2C91967A24D40D3800F00EE8 /* PBModelSearchController.m in Sources */,
+				2C91E5F121C254FD000D3312 /* PBExamineInputTableViewCell.m in Sources */,
+				2C316D1E2202E73A009C90FD /* PBRecordTableViewCell.m in Sources */,
+				4CD610C528B5BC3A00BBBF67 /* PBSiteMechanicalViewController.m in Sources */,
+				4CD610E628BDAD2200BBBF67 /* PBSitePerModel.m in Sources */,
+				2C52CEFC2122B1BD0008317C /* PBEditTextController.m in Sources */,
+				2C511FCC212AAE8B009A3A0E /* NSDate+PBCategory.m in Sources */,
+				2CAB588A2594989D00101631 /* PBRecordInputTableViewCell.m in Sources */,
+				4C385C962988F3DF00D9F626 /* SGQRCodeLog.m in Sources */,
+				2C20E9C220FC49B600A18732 /* UIView+PBCategory.m in Sources */,
+				2C91965E24C93DA500F00EE8 /* PBSetViewController.m in Sources */,
+				2C26B7CA25ECDC0B00AAE3D2 /* PBBrowseViewController.m in Sources */,
+				4C90992928D80F0B004B30C4 /* IQUIScrollView+Additions.m in Sources */,
+				2C91967124D0093800F00EE8 /* PBModelViewController.m in Sources */,
+				4C385C952988F3DF00D9F626 /* SGTorch.m in Sources */,
+				2CC4043B21DDDFAD00372C54 /* ConvertAudioFile.m in Sources */,
+				4CD610DD28BC64A600BBBF67 /* PBunPlanTaskTableViewCell.m in Sources */,
+				2C1AC3EF211ABB0700D3C412 /* PBDropdownMenu.m in Sources */,
+				2CB70E3125A80F1900EDF368 /* PBUserCollectionViewCell.m in Sources */,
+				4C90992A28D80F0B004B30C4 /* IQUIView+Hierarchy.m in Sources */,
+				2C460019214BB4FE00D4202C /* PBMessageController.m in Sources */,
+				2C2BAFE621882A5200701C56 /* PBDocShareView.m in Sources */,
+				2CBB3FDA248A45C8003D3089 /* MSSAutoresizeLabelFlow.m in Sources */,
+				2CB70E1C25A55DC700EDF368 /* PBRoleViewController.m in Sources */,
+				4CEFA89528D0519A00EC7336 /* PBPreScheduleViewController.m in Sources */,
+				2C65AED124ED001B000347D7 /* PBExamineDetailController.m in Sources */,
+				4CD610D728B77BC500BBBF67 /* PBTaskScheduleModel.m in Sources */,
+				2C85434D21AE894100F570A0 /* PBExamineSearchController.m in Sources */,
+				2C20E9BF20FC49B600A18732 /* UIButton+ZJFAdditon.m in Sources */,
+				2C96B95A25CAA42E00218DF5 /* PBRefreshGifHeader.m in Sources */,
+				2C5067FA20FDB30600D5F47A /* MenuView.m in Sources */,
+				2C54496021103D81005D6F63 /* PBDocListTableViewCell.m in Sources */,
+				2CFD790624C02CA9006B6E75 /* PBInputCodeTableViewCell.m in Sources */,
+				2C027FD62106D9A600A2E663 /* PBLoadModelDisplayController.m in Sources */,
+				2CF9BE0E21C9F6A600A2536E /* PBOneChooseView.m in Sources */,
+				4C82DC18290B7479007A9400 /* CycleCollectionViewCell.m in Sources */,
+				2C1AC3F2211AF87600D3C412 /* PBIssueListTableViewCell.m in Sources */,
+				2C91E60321C26531000D3312 /* PBTextShowTableViewCell.m in Sources */,
+				8304961A2786D86D0032219C /* PBETaskModel.m in Sources */,
+				2CAB586C257F4E4000101631 /* PBArtifactsListTableViewCell.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		2C2A6EFA20F88F1000218D5C /* Main.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				2C2A6EFB20F88F1000218D5C /* Base */,
+			);
+			name = Main.storyboard;
+			sourceTree = "<group>";
+		};
+		2C2A6EFF20F88F1000218D5C /* LaunchScreen.storyboard */ = {
+			isa = PBXVariantGroup;
+			children = (
+				2C2A6F0020F88F1000218D5C /* Base */,
+			);
+			name = LaunchScreen.storyboard;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		2C2A6F0520F88F1000218D5C /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+			};
+			name = Debug;
+		};
+		2C2A6F0620F88F1000218D5C /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INFINITE_RECURSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu11;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = iphoneos;
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		2C2A6F0820F88F1000218D5C /* Debug */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 5D943DF8CC49884A8AD54943 /* Pods-IphoneBIMe.debug.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CODE_SIGN_ENTITLEMENTS = IphoneBIMe/IphoneBIMe.entitlements;
+				CODE_SIGN_IDENTITY = "iPhone Distribution";
+				CODE_SIGN_STYLE = Manual;
+				CURRENT_PROJECT_VERSION = 1.3;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				DEVELOPMENT_ASSET_PATHS = "";
+				DEVELOPMENT_TEAM = PQM7L66DSE;
+				ENABLE_BITCODE = NO;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/IphoneBIMe/Classes/Project/Document/Shape",
+					"$(PROJECT_DIR)/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame",
+				);
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SRCROOT)/IphoneBIMe/PrefixHeader.pch";
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"\"${PODS_ROOT}/Headers/Public/AFNetworking\"",
+					"\"${PODS_ROOT}/Headers/Public/Bugly\"",
+					"\"${PODS_ROOT}/Headers/Public/FMDB\"",
+					"\"${PODS_ROOT}/Headers/Public/JPush\"",
+					"\"${PODS_ROOT}/Headers/Public/MBProgressHUD\"",
+					"\"${PODS_ROOT}/Headers/Public/MJRefresh\"",
+					"\"${PODS_ROOT}/Headers/Public/Masonry\"",
+					"\"${PODS_ROOT}/Headers/Public/SDWebImage\"",
+					"\"${PODS_ROOT}/Headers/Public/TZImagePickerController\"",
+					"\"${PODS_ROOT}/Headers/Public/YYModel\"",
+					"\"$(SRCROOT)/IphoneBIMe/Classes/Project/Document/Shape/Include\"",
+				);
+				INFOPLIST_FILE = IphoneBIMe/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MACH_O_TYPE = mh_execute;
+				MARKETING_VERSION = 1.0;
+				OTHER_CFLAGS = (
+					"$(inherited)",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/AFNetworking\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/Bugly\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/FMDB\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/JPush\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/MBProgressHUD\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/MJRefresh\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/Masonry\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/SDWebImage\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/TZImagePickerController\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/YYModel\"",
+					"\"-fembed-bitcode\"",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = com.probim.zhonghe;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = zhonghePP;
+				TARGETED_DEVICE_FAMILY = 1;
+				VALIDATE_WORKSPACE = NO;
+			};
+			name = Debug;
+		};
+		2C2A6F0920F88F1000218D5C /* Release */ = {
+			isa = XCBuildConfiguration;
+			baseConfigurationReference = 2E141B7B69B652435715D5BB /* Pods-IphoneBIMe.release.xcconfig */;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+				CODE_SIGN_ENTITLEMENTS = IphoneBIMe/IphoneBIMe.entitlements;
+				CODE_SIGN_IDENTITY = "iPhone Distribution";
+				CODE_SIGN_STYLE = Manual;
+				CURRENT_PROJECT_VERSION = 1.3;
+				DEVELOPMENT_ASSET_PATHS = "";
+				DEVELOPMENT_TEAM = PQM7L66DSE;
+				ENABLE_BITCODE = NO;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"$(PROJECT_DIR)/IphoneBIMe/Classes/Project/Document/Shape",
+					"$(PROJECT_DIR)/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame",
+				);
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SRCROOT)/IphoneBIMe/PrefixHeader.pch";
+				HEADER_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"\"${PODS_ROOT}/Headers/Public/AFNetworking\"",
+					"\"${PODS_ROOT}/Headers/Public/Bugly\"",
+					"\"${PODS_ROOT}/Headers/Public/FMDB\"",
+					"\"${PODS_ROOT}/Headers/Public/JPush\"",
+					"\"${PODS_ROOT}/Headers/Public/MBProgressHUD\"",
+					"\"${PODS_ROOT}/Headers/Public/MJRefresh\"",
+					"\"${PODS_ROOT}/Headers/Public/Masonry\"",
+					"\"${PODS_ROOT}/Headers/Public/SDWebImage\"",
+					"\"${PODS_ROOT}/Headers/Public/TZImagePickerController\"",
+					"\"${PODS_ROOT}/Headers/Public/YYModel\"",
+					"\"$(SRCROOT)/IphoneBIMe/Classes/Project/Document/Shape/Include\"",
+				);
+				INFOPLIST_FILE = IphoneBIMe/Info.plist;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+				MACH_O_TYPE = mh_execute;
+				MARKETING_VERSION = 1.0;
+				OTHER_CFLAGS = (
+					"$(inherited)",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/AFNetworking\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/Bugly\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/FMDB\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/JPush\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/MBProgressHUD\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/MJRefresh\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/Masonry\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/SDWebImage\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/TZImagePickerController\"",
+					"-isystem",
+					"\"${PODS_ROOT}/Headers/Public/YYModel\"",
+					"\"-fembed-bitcode\"",
+				);
+				PRODUCT_BUNDLE_IDENTIFIER = com.probim.zhonghe;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				PROVISIONING_PROFILE_SPECIFIER = zhonghePP;
+				TARGETED_DEVICE_FAMILY = 1;
+				VALIDATE_WORKSPACE = NO;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		2C2A6EEC20F88F1000218D5C /* Build configuration list for PBXProject "IphoneBIMe" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				2C2A6F0520F88F1000218D5C /* Debug */,
+				2C2A6F0620F88F1000218D5C /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		2C2A6F0720F88F1000218D5C /* Build configuration list for PBXNativeTarget "IphoneBIMe" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				2C2A6F0820F88F1000218D5C /* Debug */,
+				2C2A6F0920F88F1000218D5C /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 2C2A6EE920F88F1000218D5C /* Project object */;
+}
diff --git a/IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..8474fc3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:IphoneBIMe.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe.xcodeproj/xcshareddata/xcschemes/IphoneBIMe.xcscheme b/IphoneBIMe/IphoneBIMe.xcodeproj/xcshareddata/xcschemes/IphoneBIMe.xcscheme
new file mode 100644
index 0000000..9606743
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe.xcodeproj/xcshareddata/xcschemes/IphoneBIMe.xcscheme
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1300"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "2C2A6EF020F88F1000218D5C"
+               BuildableName = "IphoneBIMe.app"
+               BlueprintName = "IphoneBIMe"
+               ReferencedContainer = "container:IphoneBIMe.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Release"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "2C2A6EF020F88F1000218D5C"
+            BuildableName = "IphoneBIMe.app"
+            BlueprintName = "IphoneBIMe"
+            ReferencedContainer = "container:IphoneBIMe.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "2C2A6EF020F88F1000218D5C"
+            BuildableName = "IphoneBIMe.app"
+            BlueprintName = "IphoneBIMe"
+            ReferencedContainer = "container:IphoneBIMe.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
diff --git a/IphoneBIMe/IphoneBIMe.xcworkspace/contents.xcworkspacedata b/IphoneBIMe/IphoneBIMe.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..dfe9d86
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:IphoneBIMe.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/IphoneBIMe/IphoneBIMe.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/IphoneBIMe/IphoneBIMe.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/AppDelegate.h b/IphoneBIMe/IphoneBIMe/AppDelegate.h
new file mode 100644
index 0000000..bc63ccc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/AppDelegate.h
@@ -0,0 +1,19 @@
+//
+//  AppDelegate.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <AFNetworking.h>
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+//网络状态
+@property (nonatomic, assign) AFNetworkReachabilityStatus reachabilityStates;
+//项目权限
+@property (nonatomic, strong) NSArray *powerArr;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/AppDelegate.m b/IphoneBIMe/IphoneBIMe/AppDelegate.m
new file mode 100644
index 0000000..175c982
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/AppDelegate.m
@@ -0,0 +1,262 @@
+//
+//  AppDelegate.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+
+#import "AppDelegate.h"
+#import "PBProjectListViewController.h"
+#import "PBMapViewController.h"
+#import "LinPullMainViewController.h"
+#import "PBNavigationController.h"
+#import <Bugly/Bugly.h>
+#import <JPUSHService.h>
+#import <AdSupport/AdSupport.h>
+#import "PBMessageController.h"
+#import "PBNavigationController.h"
+#import "iOdaApplication.h"
+#import <AMapFoundationKit/AMapFoundationKit.h>
+//iOS10注册APNs所需头文件
+#ifdef NSFoundationVersionNumber_iOS_9_x_Max
+#import <UserNotifications/UserNotifications.h>
+#endif
+//#define APNs_AppKey @"9b3e0bc556996b5315df45dd"
+//#define APNs_AppKey @"2cac797e1ccd18aeaabb6e35"
+#define APNs_AppKey @"f8a09fdef202ff4d39a7250e"
+#define BUGLY_APPID @"a371eb689e"
+#define UMKEY @"5bd0111bf1f55631e70003e6"
+//#define AMapKEY @"2ae8576f95d622c3f1b4dfde2d079f5f"12
+#define AMapKEY @"89562b948967fb2ec874487d1ceb63d0"
+@interface AppDelegate ()<JPUSHRegisterDelegate>
+
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    // Override point for customization after application launch.
+    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
+//    PBProjectListViewController *vc = [[PBProjectListViewController alloc] init];
+//    PBMapViewController *vc = [[PBMapViewController alloc] init];
+    LinPullMainViewController *vc = [[LinPullMainViewController alloc] init];
+    PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:vc];
+    self.window.rootViewController = nav;
+    [self.window makeKeyAndVisible];
+    //初始化网络监控
+    [self monitoringNetwork];
+    //初始化Bugly
+    [self setBugly];
+    //初始化APNs
+    [self InitializeAPNs];
+    //初始化JPush
+    [self InitializeJPushWithOptions:launchOptions];
+    // U-Share 平台设置
+    [UMConfigure initWithAppkey:UMKEY channel:@"App Store"];
+    [self configUSharePlatforms];
+    if (launchOptions) {
+        NSDictionary * remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
+        if(remoteNotification) {
+            NSLog(@"推送消息==== %@",remoteNotification);
+            [self jumprootToMesVC];
+        }
+    }
+    //初始化DWG预览
+    [[iOdaApplication getInstance] appInitialize];
+//    [AMapServices sharedServices].apiKey = @"db72d4f4202dc24cbd397c8f37b47c80";
+    [AMapServices sharedServices].apiKey = AMapKEY;
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
+    return YES;
+}
+
+- (void)setBugly {
+    [Bugly startWithAppId:BUGLY_APPID];
+}
+
+- (void)monitoringNetwork {
+    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
+    [manager startMonitoring];
+    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
+        switch (status) {
+            case AFNetworkReachabilityStatusUnknown:
+                NSLog(@"========未知网络");
+                break;
+            case AFNetworkReachabilityStatusNotReachable:
+                NSLog(@"=======未连接");
+                [YJProgressHUD showMessage:@"o(︶︿︶)o未连接网络" inView:nil];
+                break;
+            case AFNetworkReachabilityStatusReachableViaWWAN:
+                NSLog(@"==========2G/3G网络");
+                break;
+            case AFNetworkReachabilityStatusReachableViaWiFi:
+                NSLog(@"==========Wi-Fi");
+                break;
+        }
+        self.reachabilityStates = status;
+        
+        NSLog(@"=========网路发生变化了");
+    }];
+}
+
+- (void) jumprootToMesVC {
+    PBMessageController * mesVC = [[PBMessageController alloc]init];
+    PBNavigationController * nav = [[PBNavigationController alloc]initWithRootViewController:mesVC];//这里加导航栏是因为我跳转的页面带导航栏,如果跳转的页面不带导航,那这句话请省去。
+    nav.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self.window.rootViewController presentViewController:nav animated:YES completion:nil];
+    
+}
+- (void) jumpToMesVC {
+    if ([[self currentViewController] isKindOfClass:[PBMessageController class]]) {
+        PBMessageController *mesVC = (PBMessageController *)[self currentViewController];
+        [mesVC.tableView.mj_header beginRefreshing];
+    }else {
+        PBMessageController * mesVC = [[PBMessageController alloc]init];
+        PBNavigationController * nav = [[PBNavigationController alloc]initWithRootViewController:mesVC];
+        nav.modalPresentationStyle = UIModalPresentationFullScreen;
+        [[self currentViewController] presentViewController:nav animated:YES completion:nil];
+    }
+}
+
+- (UIViewController *)currentViewController {
+    UIWindow *keyWindow  = [UIApplication sharedApplication].keyWindow;
+    UIViewController *vc = keyWindow.rootViewController;
+    while (vc.presentedViewController) {
+        vc = vc.presentedViewController;
+        if ([vc isKindOfClass:[UINavigationController class]]) {
+            vc = [(UINavigationController *)vc visibleViewController];
+        } else if ([vc isKindOfClass:[UITabBarController class]]) {
+            vc = [(UITabBarController *)vc selectedViewController];
+        }
+    }
+    return vc;
+}
+
+
+- (void)InitializeAPNs {
+    //Required
+    //notice: 3.0.0 及以后版本注册可以这样写,也可以继续用之前的注册方式
+    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
+    if (@available(iOS 12.0, *)) {
+        entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;
+    } else {
+        // Fallback on earlier versions
+    }
+    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
+      // 可以添加自定义 categories
+      // NSSet<UNNotificationCategory *> *categories for iOS10 or later
+      // NSSet<UIUserNotificationCategory *> *categories for iOS8 and iOS9
+    }
+    [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
+}
+- (void)InitializeJPushWithOptions:(NSDictionary *)launchOptions {
+    // Optional
+    // 获取 IDFA
+    // 如需使用 IDFA 功能请添加此代码并在初始化方法的 advertisingIdentifier 参数中填写对应值
+    NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
+
+    // Required
+    // init Push
+    // notice: 2.1.5 版本的 SDK 新增的注册方法,改成可上报 IDFA,如果没有使用 IDFA 直接传 nil
+    [JPUSHService setupWithOption:launchOptions appKey:APNs_AppKey
+                          channel:@"App Store"
+                 apsForProduction:YES//用于标识当前应用所使用的 APNs 证书环境。0(默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
+            advertisingIdentifier:advertisingId];
+}
+- (void)application:(UIApplication *)application
+didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
+    
+    /// Required - 注册 DeviceToken
+    [JPUSHService registerDeviceToken:deviceToken];
+}
+- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
+    //Optional
+    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
+}
+#pragma mark- JPUSHRegisterDelegate
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification{
+  if (notification && [notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
+    //从通知界面直接进入应用
+  }else{
+    //从通知设置界面进入应用
+  }
+}
+// iOS 10 Support     //当应用在打开时 收到通知
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
+  // Required
+     NSDictionary * userInfo = notification.request.content.userInfo;
+    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
+        [JPUSHService handleRemoteNotification:userInfo];
+    }
+     completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert  ); // 需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以选择设置
+    [PBNoteCenter postNotificationName:@"JPushMessage" object:nil];
+}
+// iOS 10 Support    //当应用在后台未杀死  发送通知点击通知时会进入此方法
+- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
+    [self jumpToMesVC];
+  // Required
+    NSDictionary * userInfo = response.notification.request.content.userInfo;
+    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
+      [JPUSHService handleRemoteNotification:userInfo];
+    }
+    completionHandler();  // 系统要求执行这个方法
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+  // Required, iOS 7 Support
+  [JPUSHService handleRemoteNotification:userInfo];
+  completionHandler(UIBackgroundFetchResultNewData);
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
+    
+    // Required, For systems with less than or equal to iOS 6
+    [JPUSHService handleRemoteNotification:userInfo];
+}
+#pragma mark - UMShare
+- (void)configUSharePlatforms {
+        /* 微信 */
+    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wx0553fe2b259ca859" appSecret:@"ce5eb5a089f1c446fbfaaf835f8b9b5b"
+            redirectURL:@"http://mobile.umeng.com/social"];
+        /* QQ */
+    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"101511727"  appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];
+    
+}
+- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
+        //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响
+        BOOL result = [[UMSocialManager defaultManager]  handleOpenURL:url options:options];
+        if (!result) {
+            // 其他如支付等SDK的回调
+        }
+        return result;
+}
+- (void)applicationWillResignActive:(UIApplication *)application {
+    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
+}
+
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
+}
+
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..c6a4c56
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,116 @@
+{
+  "images" : [
+    {
+      "filename" : "icon_20pt@2x.png",
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "20x20"
+    },
+    {
+      "filename" : "icon_20pt@3x.png",
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "20x20"
+    },
+    {
+      "filename" : "icon_29pt@2x.png",
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "29x29"
+    },
+    {
+      "filename" : "icon_29pt@3x.png",
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "29x29"
+    },
+    {
+      "filename" : "icon_40pt@2x.png",
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "40x40"
+    },
+    {
+      "filename" : "icon_40pt@3x.png",
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "40x40"
+    },
+    {
+      "filename" : "icon_60pt@2x.png",
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "60x60"
+    },
+    {
+      "filename" : "icon_60pt@3x.png",
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "60x60"
+    },
+    {
+      "filename" : "icon_20pt.png",
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "20x20"
+    },
+    {
+      "filename" : "icon_20pt@2x-1.png",
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "20x20"
+    },
+    {
+      "filename" : "icon_29pt.png",
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "29x29"
+    },
+    {
+      "filename" : "icon_29pt@2x-1.png",
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "29x29"
+    },
+    {
+      "filename" : "icon_40pt.png",
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "40x40"
+    },
+    {
+      "filename" : "icon_40pt@2x-1.png",
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "40x40"
+    },
+    {
+      "filename" : "icon_76pt.png",
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "76x76"
+    },
+    {
+      "filename" : "icon_76pt@2x.png",
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "76x76"
+    },
+    {
+      "filename" : "icon_83.5@2x.png",
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "83.5x83.5"
+    },
+    {
+      "filename" : "icon_1024@1x.png",
+      "idiom" : "ios-marketing",
+      "scale" : "1x",
+      "size" : "1024x1024"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_1024@1x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_1024@1x.png
new file mode 100644
index 0000000..53c2ea5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_1024@1x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt.png
new file mode 100644
index 0000000..a4957b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png
new file mode 100644
index 0000000..6dfa2b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x-1.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png
new file mode 100644
index 0000000..6dfa2b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png
new file mode 100644
index 0000000..b824e76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_20pt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt.png
new file mode 100644
index 0000000..12ebaec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png
new file mode 100644
index 0000000..3819c4d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x-1.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png
new file mode 100644
index 0000000..3819c4d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png
new file mode 100644
index 0000000..6f20eb6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_29pt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt.png
new file mode 100644
index 0000000..6dfa2b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png
new file mode 100644
index 0000000..9d0e211
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x-1.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png
new file mode 100644
index 0000000..9d0e211
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png
new file mode 100644
index 0000000..3dddd7b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_40pt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png
new file mode 100644
index 0000000..3dddd7b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png
new file mode 100644
index 0000000..4262e15
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_60pt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt.png
new file mode 100644
index 0000000..3c46e99
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png
new file mode 100644
index 0000000..31d0fc4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_76pt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png
new file mode 100644
index 0000000..7c957b3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/AppIcon.appiconset/icon_83.5@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Contents.json
new file mode 100644
index 0000000..30d794a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_ unknown@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_ unknown@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png
new file mode 100644
index 0000000..d039803
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png
new file mode 100644
index 0000000..898f4e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Contents.json
new file mode 100644
index 0000000..18dad7a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_avi@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_avi@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@2x.png
new file mode 100644
index 0000000..31a736f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@3x.png
new file mode 100644
index 0000000..311d321
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_avi.imageset/Doc_type_avi@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Contents.json
new file mode 100644
index 0000000..fa510a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_bmp@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_bmp@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@2x.png
new file mode 100644
index 0000000..0567743
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@3x.png
new file mode 100644
index 0000000..b9b7d28
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_bmp.imageset/Doc_type_bmp@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Contents.json
new file mode 100644
index 0000000..4e4cf77
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_doc@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_doc@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@2x.png
new file mode 100644
index 0000000..4ce3257
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@3x.png
new file mode 100644
index 0000000..27b53f8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_doc.imageset/Doc_type_doc@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Contents.json
new file mode 100644
index 0000000..b76c8db
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_docx@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_docx@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@2x.png
new file mode 100644
index 0000000..3f15004
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@3x.png
new file mode 100644
index 0000000..d30262b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_docx.imageset/Doc_type_docx@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Contents.json
new file mode 100644
index 0000000..6583df0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_dwg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_dwg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@2x.png
new file mode 100644
index 0000000..484a42a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@3x.png
new file mode 100644
index 0000000..2226536
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_dwg.imageset/Doc_type_dwg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Contents.json
new file mode 100644
index 0000000..71d8a51
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_folder@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_folder@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@2x.png
new file mode 100644
index 0000000..97395af
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@3x.png
new file mode 100644
index 0000000..0559a65
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_folder.imageset/Doc_type_folder@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Contents.json
new file mode 100644
index 0000000..09fb99c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_gif@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_gif@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@2x.png
new file mode 100644
index 0000000..da06ba5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@3x.png
new file mode 100644
index 0000000..1e90094
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_gif.imageset/Doc_type_gif@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Contents.json
new file mode 100644
index 0000000..3ac574c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_jpeg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_jpeg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png
new file mode 100644
index 0000000..c583dfd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png
new file mode 100644
index 0000000..fb4c0e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Contents.json
new file mode 100644
index 0000000..c1c8031
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_jpg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_jpg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@2x.png
new file mode 100644
index 0000000..a66d1e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@3x.png
new file mode 100644
index 0000000..3116aa3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_jpg.imageset/Doc_type_jpg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Contents.json
new file mode 100644
index 0000000..0931c81
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_mp3@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_mp3@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@2x.png
new file mode 100644
index 0000000..ba6ae5e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@3x.png
new file mode 100644
index 0000000..7579b69
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp3.imageset/Doc_type_mp3@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Contents.json
new file mode 100644
index 0000000..ebc7c67
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_mp4@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_mp4@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@2x.png
new file mode 100644
index 0000000..9191ecf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@3x.png
new file mode 100644
index 0000000..8c57808
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_mp4.imageset/Doc_type_mp4@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Contents.json
new file mode 100644
index 0000000..40c9e0b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_pdf@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_pdf@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@2x.png
new file mode 100644
index 0000000..f98f439
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@3x.png
new file mode 100644
index 0000000..569cb14
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pdf.imageset/Doc_type_pdf@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Contents.json
new file mode 100644
index 0000000..d488b09
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_png@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_png@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@2x.png
new file mode 100644
index 0000000..f18bb98
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@3x.png
new file mode 100644
index 0000000..7107b13
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_png.imageset/Doc_type_png@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Contents.json
new file mode 100644
index 0000000..098c14b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_ppt@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_ppt@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@2x.png
new file mode 100644
index 0000000..a9b17da
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@3x.png
new file mode 100644
index 0000000..1cb33c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_ppt.imageset/Doc_type_ppt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Contents.json
new file mode 100644
index 0000000..0a85859
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_pptx@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_pptx@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@2x.png
new file mode 100644
index 0000000..09bdc25
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@3x.png
new file mode 100644
index 0000000..2e461ce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_pptx.imageset/Doc_type_pptx@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Contents.json
new file mode 100644
index 0000000..83b7c7c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_rar@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_rar@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@2x.png
new file mode 100644
index 0000000..14de397
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@3x.png
new file mode 100644
index 0000000..76a70e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rar.imageset/Doc_type_rar@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Contents.json
new file mode 100644
index 0000000..38aa81a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_rvt@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_rvt@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@2x.png
new file mode 100644
index 0000000..b9cf263
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@3x.png
new file mode 100644
index 0000000..2ed5921
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_rvt.imageset/Doc_type_rvt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Contents.json
new file mode 100644
index 0000000..81f5cb8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_svg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_svg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@2x.png
new file mode 100644
index 0000000..d0d3716
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@3x.png
new file mode 100644
index 0000000..b8e0333
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_svg.imageset/Doc_type_svg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Contents.json
new file mode 100644
index 0000000..af020b6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_txt@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_txt@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@2x.png
new file mode 100644
index 0000000..f715e70
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@3x.png
new file mode 100644
index 0000000..6a6af52
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_txt.imageset/Doc_type_txt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Contents.json
new file mode 100644
index 0000000..e8f3da4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_xsl@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_xsl@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@2x.png
new file mode 100644
index 0000000..18db145
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@3x.png
new file mode 100644
index 0000000..72b40a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xls.imageset/Doc_type_xsl@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Contents.json
new file mode 100644
index 0000000..01fe632
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_xslx@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_xslx@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@2x.png
new file mode 100644
index 0000000..e0e7b28
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@3x.png
new file mode 100644
index 0000000..e61c6ce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_xlsx.imageset/Doc_type_xslx@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Contents.json
new file mode 100644
index 0000000..0d05b9c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_zip@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_type_zip@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@2x.png
new file mode 100644
index 0000000..4148234
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@3x.png
new file mode 100644
index 0000000..c14043a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImage/Doc_type_zip.imageset/Doc_type_zip@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Contents.json
new file mode 100644
index 0000000..3f7d24b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_ unknown.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_ unknown@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_ unknown@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown.png
new file mode 100644
index 0000000..c54274d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png
new file mode 100644
index 0000000..9a710a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png
new file mode 100644
index 0000000..3df6897
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ unknown.imageset/Doc_type_ unknown@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Contents.json
new file mode 100644
index 0000000..43bf9dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_doc.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_doc@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_doc@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc.png
new file mode 100644
index 0000000..5936a15
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@2x.png
new file mode 100644
index 0000000..32b7808
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@3x.png
new file mode 100644
index 0000000..5b0b416
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_doc.imageset/Doc_type_doc@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Contents.json
new file mode 100644
index 0000000..11fb7f2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_docx.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_docx@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_docx@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx.png
new file mode 100644
index 0000000..5936a15
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@2x.png
new file mode 100644
index 0000000..32b7808
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@3x.png
new file mode 100644
index 0000000..5b0b416
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_docx.imageset/Doc_type_docx@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Contents.json
new file mode 100644
index 0000000..d0aab35
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_dwg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_dwg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_dwg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg.png
new file mode 100644
index 0000000..72b8e12
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@2x.png
new file mode 100644
index 0000000..85267af
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@3x.png
new file mode 100644
index 0000000..fab7229
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_dwg.imageset/Doc_type_dwg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Contents.json
new file mode 100644
index 0000000..d2b64b6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_folder.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_folder@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_folder@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder.png
new file mode 100644
index 0000000..1af1180
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@2x.png
new file mode 100644
index 0000000..f1d99b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@3x.png
new file mode 100644
index 0000000..4d70f7c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_folder.imageset/Doc_type_folder@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Contents.json
new file mode 100644
index 0000000..1f6e131
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_gif.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_gif@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_gif@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif.png
new file mode 100644
index 0000000..2d1574b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@2x.png
new file mode 100644
index 0000000..099b44a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@3x.png
new file mode 100644
index 0000000..ab96c5f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_gif.imageset/Doc_type_gif@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Contents.json
new file mode 100644
index 0000000..d73a5bd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_jpeg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_jpeg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_jpeg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg.png
new file mode 100644
index 0000000..2d1574b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png
new file mode 100644
index 0000000..099b44a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png
new file mode 100644
index 0000000..ab96c5f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpeg.imageset/Doc_type_jpeg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Contents.json
new file mode 100644
index 0000000..b7a5452
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_jpg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_jpg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_jpg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg.png
new file mode 100644
index 0000000..2d1574b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@2x.png
new file mode 100644
index 0000000..099b44a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@3x.png
new file mode 100644
index 0000000..ab96c5f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_jpg.imageset/Doc_type_jpg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Contents.json
new file mode 100644
index 0000000..819b922
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_mp3.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_mp3@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_mp3@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3.png
new file mode 100644
index 0000000..53c62dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@2x.png
new file mode 100644
index 0000000..c02c3af
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@3x.png
new file mode 100644
index 0000000..4fd5d7c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp3.imageset/Doc_type_mp3@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Contents.json
new file mode 100644
index 0000000..8ad8e9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_mp4.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_mp4@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_mp4@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4.png
new file mode 100644
index 0000000..c44bee3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@2x.png
new file mode 100644
index 0000000..8e27531
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@3x.png
new file mode 100644
index 0000000..752c68b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_mp4.imageset/Doc_type_mp4@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Contents.json
new file mode 100644
index 0000000..6d141d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_pdf.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_pdf@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_pdf@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf.png
new file mode 100644
index 0000000..ca35349
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@2x.png
new file mode 100644
index 0000000..ad41823
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@3x.png
new file mode 100644
index 0000000..65348a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pdf.imageset/Doc_type_pdf@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Contents.json
new file mode 100644
index 0000000..08cfc64
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_png.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_png@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_png@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png.png
new file mode 100644
index 0000000..2d1574b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@2x.png
new file mode 100644
index 0000000..099b44a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@3x.png
new file mode 100644
index 0000000..ab96c5f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_png.imageset/Doc_type_png@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Contents.json
new file mode 100644
index 0000000..88b282d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_ppt.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_ppt@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_ppt@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt.png
new file mode 100644
index 0000000..2b0c129
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@2x.png
new file mode 100644
index 0000000..9cb42f6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@3x.png
new file mode 100644
index 0000000..5fc6574
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_ppt.imageset/Doc_type_ppt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Contents.json
new file mode 100644
index 0000000..58b2f0b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_pptx.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_pptx@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_pptx@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx.png
new file mode 100644
index 0000000..2b0c129
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@2x.png
new file mode 100644
index 0000000..9cb42f6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@3x.png
new file mode 100644
index 0000000..5fc6574
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_pptx.imageset/Doc_type_pptx@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Contents.json
new file mode 100644
index 0000000..9020739
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_txt.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_txt@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_txt@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt.png
new file mode 100644
index 0000000..fc5ff98
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@2x.png
new file mode 100644
index 0000000..84a35dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@3x.png
new file mode 100644
index 0000000..1aaca67
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_txt.imageset/Doc_type_txt@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Contents.json
new file mode 100644
index 0000000..d23841e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_xls.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_xls@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_xls@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls.png
new file mode 100644
index 0000000..4a9d9ee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@2x.png
new file mode 100644
index 0000000..bad4d6f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@3x.png
new file mode 100644
index 0000000..8250a24
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xls.imageset/Doc_type_xls@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Contents.json
new file mode 100644
index 0000000..e98de84
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_xlsx.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_xlsx@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_xlsx@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx.png
new file mode 100644
index 0000000..4a9d9ee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@2x.png
new file mode 100644
index 0000000..bad4d6f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@3x.png
new file mode 100644
index 0000000..8250a24
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_xlsx.imageset/Doc_type_xlsx@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Contents.json
new file mode 100644
index 0000000..b8562ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Doc_type_zip.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Doc_type_zip@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Doc_type_zip@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip.png
new file mode 100644
index 0000000..9e083a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@2x.png
new file mode 100644
index 0000000..d018b03
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@3x.png
new file mode 100644
index 0000000..4ebd457
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/DocTypeImages/Doc_type_zip.imageset/Doc_type_zip@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Contents.json
new file mode 100644
index 0000000..c2fbab2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_list_empty@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_list_empty@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@2x.png
new file mode 100644
index 0000000..422816b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@3x.png
new file mode 100644
index 0000000..660691f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_empty.imageset/Doc_list_empty@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Contents.json
new file mode 100644
index 0000000..791bb60
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_list_searchItem@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_list_searchItem@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@2x.png
new file mode 100644
index 0000000..ebdebfb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@3x.png
new file mode 100644
index 0000000..d0a8155
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_list_searchItem.imageset/Doc_list_searchItem@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Contents.json
new file mode 100644
index 0000000..c8c2de2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_preview_back@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_preview_back@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@2x.png
new file mode 100644
index 0000000..22b14ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@3x.png
new file mode 100644
index 0000000..e062a46
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_preview_back.imageset/Doc_preview_back@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Contents.json
new file mode 100644
index 0000000..aedb265
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_unable_preview@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Doc_unable_preview@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@2x.png
new file mode 100644
index 0000000..4d728cf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@3x.png
new file mode 100644
index 0000000..1faf023
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Document/Doc_unable_preview.imageset/Doc_unable_preview@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Contents.json
new file mode 100644
index 0000000..9844856
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examien_addImageBtn@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examien_addImageBtn@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@2x.png
new file mode 100644
index 0000000..a72df4d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@3x.png
new file mode 100644
index 0000000..8aa003c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examien_addImageBtn.imageset/Examien_addImageBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Contents.json
new file mode 100644
index 0000000..7a16c18
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_ security_list_empty@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_ security_list_empty@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@2x.png
new file mode 100644
index 0000000..fe70576
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@3x.png
new file mode 100644
index 0000000..c6e3c0e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_ security_list_empty.imageset/Examine_ security_list_empty@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Contents.json
new file mode 100644
index 0000000..825fbd1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_0@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Examine_play_0@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Examine_play_0@3x.png
new file mode 100644
index 0000000..00b5b41
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_0.imageset/Examine_play_0@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Contents.json
new file mode 100644
index 0000000..5bac59d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_1@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Examine_play_1@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Examine_play_1@3x.png
new file mode 100644
index 0000000..9a7c113
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_1.imageset/Examine_play_1@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Contents.json
new file mode 100644
index 0000000..22e6471
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_10@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Examine_play_10@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Examine_play_10@3x.png
new file mode 100644
index 0000000..0be67f2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_10.imageset/Examine_play_10@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Contents.json
new file mode 100644
index 0000000..1f6c216
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_11@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Examine_play_11@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Examine_play_11@3x.png
new file mode 100644
index 0000000..64116e5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_11.imageset/Examine_play_11@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Contents.json
new file mode 100644
index 0000000..2566a79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_12@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Examine_play_12@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Examine_play_12@3x.png
new file mode 100644
index 0000000..ac7f3c7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_12.imageset/Examine_play_12@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Contents.json
new file mode 100644
index 0000000..7f2fad9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_13@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Examine_play_13@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Examine_play_13@3x.png
new file mode 100644
index 0000000..f586f8a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_13.imageset/Examine_play_13@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Contents.json
new file mode 100644
index 0000000..932eb1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_14@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Examine_play_14@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Examine_play_14@3x.png
new file mode 100644
index 0000000..fdab85a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_14.imageset/Examine_play_14@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Contents.json
new file mode 100644
index 0000000..d78f3cd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_15@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Examine_play_15@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Examine_play_15@3x.png
new file mode 100644
index 0000000..9c9d50b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_15.imageset/Examine_play_15@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Contents.json
new file mode 100644
index 0000000..9d7d73f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_16@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Examine_play_16@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Examine_play_16@3x.png
new file mode 100644
index 0000000..0732dc2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_16.imageset/Examine_play_16@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Contents.json
new file mode 100644
index 0000000..a9d9ab8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_17@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Examine_play_17@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Examine_play_17@3x.png
new file mode 100644
index 0000000..399d300
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_17.imageset/Examine_play_17@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Contents.json
new file mode 100644
index 0000000..07e36a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_18@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Examine_play_18@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Examine_play_18@3x.png
new file mode 100644
index 0000000..eeb597f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_18.imageset/Examine_play_18@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Contents.json
new file mode 100644
index 0000000..73fcc25
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_19@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Examine_play_19@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Examine_play_19@3x.png
new file mode 100644
index 0000000..fba9e75
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_19.imageset/Examine_play_19@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Contents.json
new file mode 100644
index 0000000..50ba321
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_2@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Examine_play_2@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Examine_play_2@3x.png
new file mode 100644
index 0000000..e75d77e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_2.imageset/Examine_play_2@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Contents.json
new file mode 100644
index 0000000..91ccfe7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_20@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Examine_play_20@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Examine_play_20@3x.png
new file mode 100644
index 0000000..00b5b41
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_20.imageset/Examine_play_20@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Contents.json
new file mode 100644
index 0000000..22da5d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_3@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Examine_play_3@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Examine_play_3@3x.png
new file mode 100644
index 0000000..a1a6c23
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_3.imageset/Examine_play_3@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Contents.json
new file mode 100644
index 0000000..17fa678
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_4@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Examine_play_4@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Examine_play_4@3x.png
new file mode 100644
index 0000000..322e302
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_4.imageset/Examine_play_4@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Contents.json
new file mode 100644
index 0000000..570e469
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_5@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Examine_play_5@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Examine_play_5@3x.png
new file mode 100644
index 0000000..f95fcaa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_5.imageset/Examine_play_5@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Contents.json
new file mode 100644
index 0000000..eff4451
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_6@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Examine_play_6@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Examine_play_6@3x.png
new file mode 100644
index 0000000..af23106
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_6.imageset/Examine_play_6@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Contents.json
new file mode 100644
index 0000000..1d47ced
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_7@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Examine_play_7@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Examine_play_7@3x.png
new file mode 100644
index 0000000..d7b03ee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_7.imageset/Examine_play_7@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Contents.json
new file mode 100644
index 0000000..bf9a08f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_8@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Examine_play_8@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Examine_play_8@3x.png
new file mode 100644
index 0000000..965df91
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_8.imageset/Examine_play_8@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Contents.json
new file mode 100644
index 0000000..a587a2a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_play_9@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Examine_play_9@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Examine_play_9@3x.png
new file mode 100644
index 0000000..159f6e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_Play/Examine_play_9.imageset/Examine_play_9@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Contents.json
new file mode 100644
index 0000000..57e1af0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_addAudioBtn@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_addAudioBtn@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@2x.png
new file mode 100644
index 0000000..6fffbf6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@3x.png
new file mode 100644
index 0000000..699f7f9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_addAudioBtn.imageset/Examine_addAudioBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Contents.json
new file mode 100644
index 0000000..7d2729e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Examine_add_confirm.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Examine_add_confirm@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Examine_add_confirm@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm.png
new file mode 100644
index 0000000..7ef1943
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@2x.png
new file mode 100644
index 0000000..b3d0a78
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@3x.png
new file mode 100644
index 0000000..eed67ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_confirm.imageset/Examine_add_confirm@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Contents.json
new file mode 100644
index 0000000..f9dbbaf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_add_photo_bg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_add_photo_bg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@2x.png
new file mode 100644
index 0000000..7c0f388
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@3x.png
new file mode 100644
index 0000000..d841422
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_add_photo_bg.imageset/Examine_add_photo_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Contents.json
new file mode 100644
index 0000000..e207dcf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_btn_recording@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_btn_recording@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@2x.png
new file mode 100644
index 0000000..dfc6d79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@3x.png
new file mode 100644
index 0000000..ca02e44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recording.imageset/Examine_btn_recording@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Contents.json
new file mode 100644
index 0000000..9ba7959
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_btn_recordingStop@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_btn_recordingStop@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@2x.png
new file mode 100644
index 0000000..385ff63
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@3x.png
new file mode 100644
index 0000000..1584cdf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_btn_recordingStop.imageset/Examine_btn_recordingStop@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Contents.json
new file mode 100644
index 0000000..d75e424
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_camera@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_camera@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@2x.png
new file mode 100644
index 0000000..a205437
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@3x.png
new file mode 100644
index 0000000..1ea2aef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_camera.imageset/Examine_camera@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Contents.json
new file mode 100644
index 0000000..5640911
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_quality_list_empty@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_quality_list_empty@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@2x.png
new file mode 100644
index 0000000..5f66965
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@3x.png
new file mode 100644
index 0000000..288a6d3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_quality_list_empty.imageset/Examine_quality_list_empty@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Contents.json
new file mode 100644
index 0000000..83f8693
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_ check@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_ check@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@2x.png
new file mode 100644
index 0000000..972683b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@3x.png
new file mode 100644
index 0000000..c2ff889
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ check.imageset/Examine_result_ check@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Contents.json
new file mode 100644
index 0000000..5506459
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_ qualified@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_ qualified@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@2x.png
new file mode 100644
index 0000000..2f04899
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@3x.png
new file mode 100644
index 0000000..1e98c39
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_ qualified.imageset/Examine_result_ qualified@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Contents.json
new file mode 100644
index 0000000..5506459
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_ qualified@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_ qualified@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@2x.png
new file mode 100644
index 0000000..2f04899
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@3x.png
new file mode 100644
index 0000000..1e98c39
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_qualified.imageset/Examine_result_ qualified@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Contents.json
new file mode 100644
index 0000000..90722cf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_rectification@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_result_rectification@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@2x.png
new file mode 100644
index 0000000..051fd60
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@3x.png
new file mode 100644
index 0000000..acffb76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_result_rectification.imageset/Examine_result_rectification@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Contents.json
new file mode 100644
index 0000000..aae677a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Examine_search_background.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Examine_search_background@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Examine_search_background@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background.png
new file mode 100644
index 0000000..cb62368
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@2x.png
new file mode 100644
index 0000000..09c398e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@3x.png
new file mode 100644
index 0000000..df44d44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_background.imageset/Examine_search_background@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Contents.json
new file mode 100644
index 0000000..5baa257
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Examine_search_bd.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Examine_search_bd@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Examine_search_bd@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd.png
new file mode 100644
index 0000000..04cd434
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@2x.png
new file mode 100644
index 0000000..5f3021a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@3x.png
new file mode 100644
index 0000000..599530d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_search_bd.imageset/Examine_search_bd@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Contents.json
new file mode 100644
index 0000000..3e51e99
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_takingPicBtn@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_takingPicBtn@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@2x.png
new file mode 100644
index 0000000..0027213
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@3x.png
new file mode 100644
index 0000000..f6f1df5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingPicBtn.imageset/Examine_takingPicBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Contents.json
new file mode 100644
index 0000000..a9f0183
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Examine_takingPicBtn.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Examine_takingPicBtn@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Examine_takingPicBtn@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn.png
new file mode 100644
index 0000000..2756931
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@2x.png
new file mode 100644
index 0000000..af55f08
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@3x.png
new file mode 100644
index 0000000..3ab1cb2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_takingViewPointBtn.imageset/Examine_takingPicBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Contents.json
new file mode 100644
index 0000000..0b448b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_upload_photo@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Examine_upload_photo@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@2x.png
new file mode 100644
index 0000000..50f537e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@3x.png
new file mode 100644
index 0000000..1e325a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Examine_upload_photo.imageset/Examine_upload_photo@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Contents.json
new file mode 100644
index 0000000..75f5bce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Rectify_ acceptance.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Rectify_ acceptance@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Rectify_ acceptance@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance.png
new file mode 100644
index 0000000..2b5ae50
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@2x.png
new file mode 100644
index 0000000..3c30952
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@3x.png
new file mode 100644
index 0000000..49691d4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ acceptance.imageset/Rectify_ acceptance@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Contents.json
new file mode 100644
index 0000000..d84e2af
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Rectify_ check.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Rectify_ check@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Rectify_ check@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check.png
new file mode 100644
index 0000000..9a67c76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@2x.png
new file mode 100644
index 0000000..9029fd1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@3x.png
new file mode 100644
index 0000000..7046110
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ check.imageset/Rectify_ check@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Contents.json
new file mode 100644
index 0000000..7080301
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Rectify_ qualified.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Rectify_ qualified@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Rectify_ qualified@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified.png
new file mode 100644
index 0000000..5ff0080
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@2x.png
new file mode 100644
index 0000000..0f7a1fd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@3x.png
new file mode 100644
index 0000000..33982cf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ qualified.imageset/Rectify_ qualified@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Contents.json
new file mode 100644
index 0000000..f13e705
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Rectify_ rectification.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Rectify_ rectification@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Rectify_ rectification@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification.png
new file mode 100644
index 0000000..197be24
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@2x.png
new file mode 100644
index 0000000..11ee78e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@3x.png
new file mode 100644
index 0000000..9143a82
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_ rectification.imageset/Rectify_ rectification@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Contents.json
new file mode 100644
index 0000000..1413d56
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Rectify_close.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Rectify_close@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Rectify_close@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close.png
new file mode 100644
index 0000000..bf8cee3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@2x.png
new file mode 100644
index 0000000..10fc506
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@3x.png
new file mode 100644
index 0000000..d81faad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/Rectify_close.imageset/Rectify_close@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/Contents.json
new file mode 100644
index 0000000..5a61c9b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "acceptance.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "acceptance@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "acceptance@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance.png
new file mode 100644
index 0000000..fb2ddcf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@2x.png
new file mode 100644
index 0000000..33d8792
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@3x.png
new file mode 100644
index 0000000..7a5d511
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance.imageset/acceptance@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/Contents.json
new file mode 100644
index 0000000..7cf85fd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "acceptance_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "acceptance_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "acceptance_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis.png
new file mode 100644
index 0000000..52e78fe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@2x.png
new file mode 100644
index 0000000..84034a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@3x.png
new file mode 100644
index 0000000..1ba1533
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis-1.imageset/acceptance_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/Contents.json
new file mode 100644
index 0000000..7cf85fd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "acceptance_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "acceptance_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "acceptance_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis.png
new file mode 100644
index 0000000..f0d7ee9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@2x.png
new file mode 100644
index 0000000..f400833
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@3x.png
new file mode 100644
index 0000000..af010be
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_dis.imageset/acceptance_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/Contents.json
new file mode 100644
index 0000000..a6a39f4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "acceptance_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "acceptance_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "acceptance_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor.png
new file mode 100644
index 0000000..b5632d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@2x.png
new file mode 100644
index 0000000..0b190b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@3x.png
new file mode 100644
index 0000000..918d51d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/acceptance_nor.imageset/acceptance_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/Contents.json
new file mode 100644
index 0000000..2899948
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_phone.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_phone@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_phone@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone.png
new file mode 100644
index 0000000..7fe0eec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@2x.png
new file mode 100644
index 0000000..34bf743
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@3x.png
new file mode 100644
index 0000000..25c2ad5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/add_phone.imageset/add_phone@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/Contents.json
new file mode 100644
index 0000000..5b6ed64
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "apply _publish.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "apply _publish@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "apply _publish@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish.png
new file mode 100644
index 0000000..5c1f47e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@2x.png
new file mode 100644
index 0000000..4b92e3a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@3x.png
new file mode 100644
index 0000000..4cef538
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply _publish.imageset/apply _publish@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/Contents.json
new file mode 100644
index 0000000..b6077d9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "apply_reinspection.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "apply_reinspection@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "apply_reinspection@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection.png
new file mode 100644
index 0000000..b0b3945
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@2x.png
new file mode 100644
index 0000000..bf5c239
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@3x.png
new file mode 100644
index 0000000..194fa44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection.imageset/apply_reinspection@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/Contents.json
new file mode 100644
index 0000000..401aaca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "apply_reinspection_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "apply_reinspection_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "apply_reinspection_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis.png
new file mode 100644
index 0000000..d1f25a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@2x.png
new file mode 100644
index 0000000..0fe9f38
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@3x.png
new file mode 100644
index 0000000..256675f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis-1.imageset/apply_reinspection_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/Contents.json
new file mode 100644
index 0000000..401aaca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "apply_reinspection_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "apply_reinspection_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "apply_reinspection_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis.png
new file mode 100644
index 0000000..1b2d700
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@2x.png
new file mode 100644
index 0000000..4e53b59
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@3x.png
new file mode 100644
index 0000000..79f9671
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_dis.imageset/apply_reinspection_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/Contents.json
new file mode 100644
index 0000000..868db64
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "apply_reinspection_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "apply_reinspection_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "apply_reinspection_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor.png
new file mode 100644
index 0000000..eca7c31
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@2x.png
new file mode 100644
index 0000000..9ab8935
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@3x.png
new file mode 100644
index 0000000..4cef538
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/apply_reinspection_nor.imageset/apply_reinspection_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/Contents.json
new file mode 100644
index 0000000..5cc6277
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "arrow_select_top.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "arrow_select_top@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "arrow_select_top@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top.png
new file mode 100644
index 0000000..925dac7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@2x.png
new file mode 100644
index 0000000..6dec488
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@3x.png
new file mode 100644
index 0000000..eb37b73
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_select_top.imageset/arrow_select_top@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/Contents.json
new file mode 100644
index 0000000..9d116b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "arrow_top.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "arrow_top@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "arrow_top@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top.png
new file mode 100644
index 0000000..3ec4124
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@2x.png
new file mode 100644
index 0000000..23eb200
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@3x.png
new file mode 100644
index 0000000..bf7aefa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/arrow_top.imageset/arrow_top@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/Contents.json
new file mode 100644
index 0000000..a5f0ddc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "batch.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "batch@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "batch@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch.png
new file mode 100644
index 0000000..eb8e4b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@2x.png
new file mode 100644
index 0000000..cc2ceff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@3x.png
new file mode 100644
index 0000000..5b0a69f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/batch.imageset/batch@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/Contents.json
new file mode 100644
index 0000000..2910781
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "btn_applyforreexamination.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "btn_applyforreexamination@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "btn_applyforreexamination@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination.png
new file mode 100644
index 0000000..893c912
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@2x.png
new file mode 100644
index 0000000..2c8063d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@3x.png
new file mode 100644
index 0000000..12050c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination.imageset/btn_applyforreexamination@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/Contents.json
new file mode 100644
index 0000000..f2a0858
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "btn_applyforreexamination_disable.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "btn_applyforreexamination_disable@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "btn_applyforreexamination_disable@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable.png
new file mode 100644
index 0000000..9cb2390
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@2x.png
new file mode 100644
index 0000000..a5c8472
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@3x.png
new file mode 100644
index 0000000..7533e30
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_applyforreexamination_disable.imageset/btn_applyforreexamination_disable@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/Contents.json
new file mode 100644
index 0000000..b56aaf5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "btn_bg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "btn_bg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "btn_bg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg.png
new file mode 100644
index 0000000..88fa52a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@2x.png
new file mode 100644
index 0000000..499b409
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@3x.png
new file mode 100644
index 0000000..e5ad261
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg.imageset/btn_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/Contents.json
new file mode 100644
index 0000000..94d94ba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "btn_bg_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "btn_bg_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "btn_bg_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select.png
new file mode 100644
index 0000000..8334121
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@2x.png
new file mode 100644
index 0000000..c576a25
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@3x.png
new file mode 100644
index 0000000..ad7a6a4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/btn_bg_select.imageset/btn_bg_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/Contents.json
new file mode 100644
index 0000000..66f8425
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "check_warning.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "check_warning@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "check_warning@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning.png
new file mode 100644
index 0000000..bc374ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@2x.png
new file mode 100644
index 0000000..c247450
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@3x.png
new file mode 100644
index 0000000..7d7b768
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/check_warning.imageset/check_warning@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/Contents.json
new file mode 100644
index 0000000..bf69a91
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "checkacceptance.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "checkacceptance@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "checkacceptance@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance.png
new file mode 100644
index 0000000..741817e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@2x.png
new file mode 100644
index 0000000..36ca02d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@3x.png
new file mode 100644
index 0000000..38ca168
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance.imageset/checkacceptance@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/Contents.json
new file mode 100644
index 0000000..20ced98
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "checkacceptance_disable.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "checkacceptance_disable@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "checkacceptance_disable@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable.png
new file mode 100644
index 0000000..0ec7d9d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@2x.png
new file mode 100644
index 0000000..07b2904
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@3x.png
new file mode 100644
index 0000000..ffc7478
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/checkacceptance_disable.imageset/checkacceptance_disable@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/Contents.json
new file mode 100644
index 0000000..2224c8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "choose_nor_bg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/choose_nor_bg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/choose_nor_bg.png
new file mode 100644
index 0000000..7aae54a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_nor_bg.imageset/choose_nor_bg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/Contents.json
new file mode 100644
index 0000000..aca5705
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "choose_selected_bg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/choose_selected_bg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/choose_selected_bg.png
new file mode 100644
index 0000000..7f8ed79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/choose_selected_bg.imageset/choose_selected_bg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/Contents.json
new file mode 100644
index 0000000..6dfd939
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "closed_disable.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "closed_disable@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "closed_disable@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable.png
new file mode 100644
index 0000000..6464591
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@2x.png
new file mode 100644
index 0000000..c66507d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@3x.png
new file mode 100644
index 0000000..91edb86
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/closed_disable.imageset/closed_disable@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/Contents.json
new file mode 100644
index 0000000..2d32b83
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "confirmBtn.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "confirmBtn@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "confirmBtn@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn.png
new file mode 100644
index 0000000..a61d4ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@2x.png
new file mode 100644
index 0000000..5b76e23
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@3x.png
new file mode 100644
index 0000000..620afab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/confirmBtn.imageset/confirmBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/Contents.json
new file mode 100644
index 0000000..99205b7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "course_btn_company_open.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "course_btn_company_open@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "course_btn_company_open@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open.png
new file mode 100644
index 0000000..050ab5b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@2x.png
new file mode 100644
index 0000000..87b85d8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@3x.png
new file mode 100644
index 0000000..cd62d1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/course_btn_company_open.imageset/course_btn_company_open@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/Contents.json
new file mode 100644
index 0000000..a6f350d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "details_play.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "details_play@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "details_play@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play.png
new file mode 100644
index 0000000..671bc66
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@2x.png
new file mode 100644
index 0000000..d5b39ed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@3x.png
new file mode 100644
index 0000000..dc7e4d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_play.imageset/details_play@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/Contents.json
new file mode 100644
index 0000000..01b74d7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "details_video_play.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "details_video_play@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "details_video_play@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play.png
new file mode 100644
index 0000000..9473c44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@2x.png
new file mode 100644
index 0000000..0a068f9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@3x.png
new file mode 100644
index 0000000..65cbd12
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/details_video_play.imageset/details_video_play@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/Contents.json
new file mode 100644
index 0000000..8011205
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "examine_arrow.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "examine_arrow@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "examine_arrow@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow.png
new file mode 100644
index 0000000..334f67f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@2x.png
new file mode 100644
index 0000000..f05f0c9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@3x.png
new file mode 100644
index 0000000..004c632
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_arrow.imageset/examine_arrow@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/Contents.json
new file mode 100644
index 0000000..bd61d8c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "examine_folder.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "examine_folder@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "examine_folder@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder.png
new file mode 100644
index 0000000..321f872
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@2x.png
new file mode 100644
index 0000000..e370104
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@3x.png
new file mode 100644
index 0000000..ee73b91
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/examine_folder.imageset/examine_folder@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/Contents.json
new file mode 100644
index 0000000..4fa3b8e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "folder.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "folder@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "folder@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder.png
new file mode 100644
index 0000000..8bddbbe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@2x.png
new file mode 100644
index 0000000..94f8aa6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@3x.png
new file mode 100644
index 0000000..40079fe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/folder.imageset/folder@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/Contents.json
new file mode 100644
index 0000000..da3adaf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "grouping_person.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "grouping_person@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "grouping_person@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person.png
new file mode 100644
index 0000000..8534ddd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@2x.png
new file mode 100644
index 0000000..a56da0c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@3x.png
new file mode 100644
index 0000000..6493a25
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/grouping_person.imageset/grouping_person@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/Contents.json
new file mode 100644
index 0000000..964f4f5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "image_camera.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "image_camera@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "image_camera@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera.png
new file mode 100644
index 0000000..450683e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@2x.png
new file mode 100644
index 0000000..332b73c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@3x.png
new file mode 100644
index 0000000..6a1fa50
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/image_camera.imageset/image_camera@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/Contents.json
new file mode 100644
index 0000000..b0a3e96
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "img_camera_2.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "img_camera_2@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "img_camera_2@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2.png
new file mode 100644
index 0000000..54526db
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@2x.png
new file mode 100644
index 0000000..9fdc613
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@3x.png
new file mode 100644
index 0000000..8c821e7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/img_camera_2.imageset/img_camera_2@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/Contents.json
new file mode 100644
index 0000000..c57491a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "inspect.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "inspect@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "inspect@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect.png
new file mode 100644
index 0000000..5f5035e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@2x.png
new file mode 100644
index 0000000..ee11709
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@3x.png
new file mode 100644
index 0000000..1a8a9bc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect.imageset/inspect@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/Contents.json
new file mode 100644
index 0000000..70b4261
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "inspect_disable.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "inspect_disable@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "inspect_disable@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable.png
new file mode 100644
index 0000000..fb2a01a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@2x.png
new file mode 100644
index 0000000..3ce39f1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@3x.png
new file mode 100644
index 0000000..d2868a8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/inspect_disable.imageset/inspect_disable@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/Contents.json
new file mode 100644
index 0000000..0551c04
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "location.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/location.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/location.png
new file mode 100644
index 0000000..c0073db
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/location.imageset/location.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/Contents.json
new file mode 100644
index 0000000..6774b1b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "new_btn_background.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "new_btn_background@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "new_btn_background@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background.png
new file mode 100644
index 0000000..6bc7def
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@2x.png
new file mode 100644
index 0000000..6d3380d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@3x.png
new file mode 100644
index 0000000..9093da6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/new_btn_background.imageset/new_btn_background@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/Contents.json
new file mode 100644
index 0000000..47ca1ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "positiveSequence_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "positiveSequence_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "positiveSequence_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor.png
new file mode 100644
index 0000000..ac18ea5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@2x.png
new file mode 100644
index 0000000..4a4397e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@3x.png
new file mode 100644
index 0000000..9e6a276
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_nor.imageset/positiveSequence_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/Contents.json
new file mode 100644
index 0000000..333687c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "positiveSequence_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "positiveSequence_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "positiveSequence_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select.png
new file mode 100644
index 0000000..17ef488
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@2x.png
new file mode 100644
index 0000000..17cf3d3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@3x.png
new file mode 100644
index 0000000..36c4397
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/positiveSequence_select.imageset/positiveSequence_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/Contents.json
new file mode 100644
index 0000000..4d89bc2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "publish.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "publish@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "publish@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish.png
new file mode 100644
index 0000000..ab522ba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@2x.png
new file mode 100644
index 0000000..265e532
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@3x.png
new file mode 100644
index 0000000..e5e8c7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish.imageset/publish@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/Contents.json
new file mode 100644
index 0000000..5bf423e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "publish_check.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "publish_check@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "publish_check@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check.png
new file mode 100644
index 0000000..cee5832
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@2x.png
new file mode 100644
index 0000000..503abbd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@3x.png
new file mode 100644
index 0000000..0745a5b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check.imageset/publish_check@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/Contents.json
new file mode 100644
index 0000000..7a05b20
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "publish_check_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "publish_check_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "publish_check_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis.png
new file mode 100644
index 0000000..3a5329c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@2x.png
new file mode 100644
index 0000000..4ce0558
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@3x.png
new file mode 100644
index 0000000..1e31e99
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_check_dis.imageset/publish_check_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/Contents.json
new file mode 100644
index 0000000..c2c85ee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "publish_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "publish_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "publish_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis.png
new file mode 100644
index 0000000..7c58e1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@2x.png
new file mode 100644
index 0000000..6e70ce9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@3x.png
new file mode 100644
index 0000000..cb6044e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/publish_dis.imageset/publish_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/Contents.json
new file mode 100644
index 0000000..3096d8e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "qualified.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "qualified@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "qualified@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified.png
new file mode 100644
index 0000000..8d62ac7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@2x.png
new file mode 100644
index 0000000..40fd2c9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@3x.png
new file mode 100644
index 0000000..fb19d40
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified.imageset/qualified@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/Contents.json
new file mode 100644
index 0000000..6f45162
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "qualified_disable.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "qualified_disable@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "qualified_disable@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable.png
new file mode 100644
index 0000000..0472795
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@2x.png
new file mode 100644
index 0000000..84060a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@3x.png
new file mode 100644
index 0000000..e8bd598
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/qualified_disable.imageset/qualified_disable@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/Contents.json
new file mode 100644
index 0000000..6b0e430
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "recording.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "recording@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "recording@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording.png
new file mode 100644
index 0000000..062b1f4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@2x.png
new file mode 100644
index 0000000..1428cc8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@3x.png
new file mode 100644
index 0000000..5d1b07b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/recording.imageset/recording@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/Contents.json
new file mode 100644
index 0000000..1882f17
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "resetBtn.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "resetBtn@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "resetBtn@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn.png
new file mode 100644
index 0000000..367f645
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@2x.png
new file mode 100644
index 0000000..4c66b08
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@3x.png
new file mode 100644
index 0000000..fd8be74
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/resetBtn.imageset/resetBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/Contents.json
new file mode 100644
index 0000000..1e4a75f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "select_circle.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "select_circle@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "select_circle@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle.png
new file mode 100644
index 0000000..f1f55c9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@2x.png
new file mode 100644
index 0000000..4511487
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@3x.png
new file mode 100644
index 0000000..6dd4a56
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle.imageset/select_circle@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/Contents.json
new file mode 100644
index 0000000..9b4a3f5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "select_circle_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "select_circle_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "select_circle_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select.png
new file mode 100644
index 0000000..3c502a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@2x.png
new file mode 100644
index 0000000..8dc69ed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@3x.png
new file mode 100644
index 0000000..605f036
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/select_circle_select.imageset/select_circle_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/Contents.json
new file mode 100644
index 0000000..229ab6b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "set.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "set@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "set@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set.png
new file mode 100644
index 0000000..f6a1e7f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@2x.png
new file mode 100644
index 0000000..1693e4f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@3x.png
new file mode 100644
index 0000000..eaac8ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/set.imageset/set@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/Contents.json
new file mode 100644
index 0000000..904f29c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "small_play.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "small_play@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "small_play@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play.png
new file mode 100644
index 0000000..9473c44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@2x.png
new file mode 100644
index 0000000..0a068f9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@3x.png
new file mode 100644
index 0000000..65cbd12
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/small_play.imageset/small_play@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/Contents.json
new file mode 100644
index 0000000..db97ddc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "submit_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "submit_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "submit_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis.png
new file mode 100644
index 0000000..c539c55
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@2x.png
new file mode 100644
index 0000000..e569eb7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@3x.png
new file mode 100644
index 0000000..d8ee6c7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_dis.imageset/submit_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/Contents.json
new file mode 100644
index 0000000..86ee423
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "submit_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "submit_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "submit_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor.png
new file mode 100644
index 0000000..e4a7985
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@2x.png
new file mode 100644
index 0000000..6d09e22
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@3x.png
new file mode 100644
index 0000000..690246c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/submit_nor.imageset/submit_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/Contents.json
new file mode 100644
index 0000000..11ae153
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "supervisor_checked.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "supervisor_checked@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "supervisor_checked@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked.png
new file mode 100644
index 0000000..dc72c9a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@2x.png
new file mode 100644
index 0000000..387702e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@3x.png
new file mode 100644
index 0000000..e7f35db
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_checked.imageset/supervisor_checked@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/Contents.json
new file mode 100644
index 0000000..6b007f7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "supervisor_unchecked.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "supervisor_unchecked@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "supervisor_unchecked@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked.png
new file mode 100644
index 0000000..60a175a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@2x.png
new file mode 100644
index 0000000..4938f97
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@3x.png
new file mode 100644
index 0000000..5ed4475
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/supervisor_unchecked.imageset/supervisor_unchecked@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/Contents.json
new file mode 100644
index 0000000..2864e75
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "task_list.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "task_list@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "task_list@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list.png
new file mode 100644
index 0000000..c6ddbbf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@2x.png
new file mode 100644
index 0000000..de00c9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@3x.png
new file mode 100644
index 0000000..d424d37
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/task_list.imageset/task_list@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/Contents.json
new file mode 100644
index 0000000..37a25ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "typebg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "typebg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "typebg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg.png
new file mode 100644
index 0000000..e65a130
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@2x.png
new file mode 100644
index 0000000..4f45e90
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@3x.png
new file mode 100644
index 0000000..adfb961
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/typebg.imageset/typebg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/Contents.json
new file mode 100644
index 0000000..618719d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "video_account_delete.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "video_account_delete@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "video_account_delete@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete.png
new file mode 100644
index 0000000..6480712
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@2x.png
new file mode 100644
index 0000000..7554bf4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@3x.png
new file mode 100644
index 0000000..3d28bde
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Examine/video_account_delete.imageset/video_account_delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Contents.json
new file mode 100644
index 0000000..7e44d8c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_ retrieve_default@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_ retrieve_default@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@2x.png
new file mode 100644
index 0000000..9503b6f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@3x.png
new file mode 100644
index 0000000..ea21f30
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_default.imageset/Issue_ retrieve_default@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Contents.json
new file mode 100644
index 0000000..4dddb1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_ retrieve_select@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_ retrieve_select@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@2x.png
new file mode 100644
index 0000000..5f5154d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@3x.png
new file mode 100644
index 0000000..95bd9da
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_select.imageset/Issue_ retrieve_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Contents.json
new file mode 100644
index 0000000..4f3aae9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_ retrieve_show@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_ retrieve_show@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@2x.png
new file mode 100644
index 0000000..6752ab3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@3x.png
new file mode 100644
index 0000000..956d4aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_ retrieve_show.imageset/Issue_ retrieve_show@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Contents.json
new file mode 100644
index 0000000..f53f123
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comment_deleteBtn.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comment_deleteBtn@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comment_deleteBtn@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn.png
new file mode 100644
index 0000000..7d1bf16
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@2x.png
new file mode 100644
index 0000000..3a830d3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@3x.png
new file mode 100644
index 0000000..b117e8d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comment_deleteBtn.imageset/Issue_comment_deleteBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Contents.json
new file mode 100644
index 0000000..4510db1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_delete@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_delete@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@2x.png
new file mode 100644
index 0000000..f9aae86
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@3x.png
new file mode 100644
index 0000000..9f1815e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_delete.imageset/Issue_comments_delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Contents.json
new file mode 100644
index 0000000..eb28a98
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_empty@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_empty@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@2x.png
new file mode 100644
index 0000000..76bd4bf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@3x.png
new file mode 100644
index 0000000..5a65565
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_empty.imageset/Issue_comments_empty@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Contents.json
new file mode 100644
index 0000000..1b77050
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_ functionBtn.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_ functionBtn@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_ functionBtn@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn.png
new file mode 100644
index 0000000..c96995d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@2x.png
new file mode 100644
index 0000000..e65e37f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@3x.png
new file mode 100644
index 0000000..fe06f68
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_functionBtn.imageset/Issue_comments_ functionBtn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Contents.json
new file mode 100644
index 0000000..0190529
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_iconbg.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_iconbg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_comments_iconbg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg.png
new file mode 100644
index 0000000..0bcd8eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@2x.png
new file mode 100644
index 0000000..bd98a2f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@3x.png
new file mode 100644
index 0000000..cd37638
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_comments_iconbg.imageset/Issue_comments_iconbg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Contents.json
new file mode 100644
index 0000000..2882cd6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_detail_imageDefult@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_detail_imageDefult@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@2x.png
new file mode 100644
index 0000000..c6fe882
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@3x.png
new file mode 100644
index 0000000..fc5815d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_detail_imageDefult.imageset/Issue_detail_imageDefult@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Contents.json
new file mode 100644
index 0000000..df5d946
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editPerson_delete@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editPerson_delete@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@2x.png
new file mode 100644
index 0000000..e8fa870
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@3x.png
new file mode 100644
index 0000000..9db1ffd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_delete.imageset/Issue_editPerson_delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Contents.json
new file mode 100644
index 0000000..be95362
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editPerson_roleIcon@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editPerson_roleIcon@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@2x.png
new file mode 100644
index 0000000..8d9d622
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@3x.png
new file mode 100644
index 0000000..57c4d4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editPerson_roleIcon.imageset/Issue_editPerson_roleIcon@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Contents.json
new file mode 100644
index 0000000..5c95ae3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editText_clearAll@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editText_clearAll@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png
new file mode 100644
index 0000000..94cda4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png
new file mode 100644
index 0000000..d3ddfd6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Contents.json
new file mode 100644
index 0000000..a9a2caa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_image_delete@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_image_delete@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@2x.png
new file mode 100644
index 0000000..719a49b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@3x.png
new file mode 100644
index 0000000..8fa734e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_image_delete.imageset/Issue_image_delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Contents.json
new file mode 100644
index 0000000..af95832
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_list_add@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_list_add@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@2x.png
new file mode 100644
index 0000000..89719a0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@3x.png
new file mode 100644
index 0000000..ef0bacb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_add.imageset/Issue_list_add@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Contents.json
new file mode 100644
index 0000000..9c7d0b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_list_empty@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_list_empty@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@2x.png
new file mode 100644
index 0000000..1427462
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@3x.png
new file mode 100644
index 0000000..ce951c1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_list_empty.imageset/Issue_list_empty@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Contents.json
new file mode 100644
index 0000000..00f82f1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_listimg_defult.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_listimg_defult@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_listimg_defult@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult.png
new file mode 100644
index 0000000..edea1fa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@2x.png
new file mode 100644
index 0000000..a05fc82
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@3x.png
new file mode 100644
index 0000000..6309e4c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_listimg_defult.imageset/Issue_listimg_defult@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Contents.json
new file mode 100644
index 0000000..6be6e22
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_problem_list_delete.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_problem_list_delete@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_problem_list_delete@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete.png
new file mode 100644
index 0000000..38c33e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@2x.png
new file mode 100644
index 0000000..c099f77
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@3x.png
new file mode 100644
index 0000000..6e58ce3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_problem_list_delete.imageset/Issue_problem_list_delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Contents.json
new file mode 100644
index 0000000..76d58ed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_viewPoint_fail@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_viewPoint_fail@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@2x.png
new file mode 100644
index 0000000..10e8a6a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@3x.png
new file mode 100644
index 0000000..6862c19
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue/Issue_viewPoint_fail.imageset/Issue_viewPoint_fail@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Contents.json
new file mode 100644
index 0000000..5c95ae3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editText_clearAll@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Issue_editText_clearAll@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png
new file mode 100644
index 0000000..94cda4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png
new file mode 100644
index 0000000..d3ddfd6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Issue_editText_clearAll.imageset/Issue_editText_clearAll@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000..a4f3dee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,92 @@
+{
+  "images" : [
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_xs_max_portrait.png",
+      "idiom" : "iphone",
+      "minimum-system-version" : "12.0",
+      "orientation" : "portrait",
+      "scale" : "3x",
+      "subtype" : "2688h"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_xr_portrait.png",
+      "idiom" : "iphone",
+      "minimum-system-version" : "12.0",
+      "orientation" : "portrait",
+      "scale" : "2x",
+      "subtype" : "1792h"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_x_portrait@3x.png",
+      "idiom" : "iphone",
+      "minimum-system-version" : "11.0",
+      "orientation" : "portrait",
+      "scale" : "3x",
+      "subtype" : "2436h"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_portrait_retina_hd_5.5@3x.png",
+      "idiom" : "iphone",
+      "minimum-system-version" : "8.0",
+      "orientation" : "portrait",
+      "scale" : "3x",
+      "subtype" : "736h"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_portrait_retina_hd_4.7@2x.png",
+      "idiom" : "iphone",
+      "minimum-system-version" : "8.0",
+      "orientation" : "portrait",
+      "scale" : "2x",
+      "subtype" : "667h"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_portrait@2x-1.png",
+      "idiom" : "iphone",
+      "minimum-system-version" : "7.0",
+      "orientation" : "portrait",
+      "scale" : "2x"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_portrait_retina_4@2x-1.png",
+      "idiom" : "iphone",
+      "minimum-system-version" : "7.0",
+      "orientation" : "portrait",
+      "scale" : "2x",
+      "subtype" : "retina4"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_portrait@1x.png",
+      "idiom" : "iphone",
+      "orientation" : "portrait",
+      "scale" : "1x"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_portrait@2x.png",
+      "idiom" : "iphone",
+      "orientation" : "portrait",
+      "scale" : "2x"
+    },
+    {
+      "extent" : "full-screen",
+      "filename" : "iphone_portrait_retina_4@2x.png",
+      "idiom" : "iphone",
+      "orientation" : "portrait",
+      "scale" : "2x",
+      "subtype" : "retina4"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@1x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@1x.png
new file mode 100644
index 0000000..49f7191
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@1x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x-1.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x-1.png
new file mode 100644
index 0000000..29a6ae1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x-1.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x.png
new file mode 100644
index 0000000..29a6ae1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x-1.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x-1.png
new file mode 100644
index 0000000..fc14065
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x-1.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x.png
new file mode 100644
index 0000000..fc14065
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_4@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_4.7@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_4.7@2x.png
new file mode 100644
index 0000000..0bb6423
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_4.7@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_5.5@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_5.5@3x.png
new file mode 100644
index 0000000..81e19be
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_portrait_retina_hd_5.5@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_x_portrait@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_x_portrait@3x.png
new file mode 100644
index 0000000..2962ac7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_x_portrait@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xr_portrait.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xr_portrait.png
new file mode 100644
index 0000000..b8c34b0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xr_portrait.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xs_max_portrait.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xs_max_portrait.png
new file mode 100644
index 0000000..4ce4201
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/LaunchImage.launchimage/iphone_xs_max_portrait.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Contents.json
new file mode 100644
index 0000000..25220c1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_category_empty@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_category_empty@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@2x.png
new file mode 100644
index 0000000..d08cc1d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@3x.png
new file mode 100644
index 0000000..df25968
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_category_empty.imageset/Model_category_empty@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Contents.json
new file mode 100644
index 0000000..55f1250
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_loadViewPointBtn_bg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_loadViewPointBtn_bg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@2x.png
new file mode 100644
index 0000000..8d58da6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@3x.png
new file mode 100644
index 0000000..a76a306
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_loadViewPointBtn_bg.imageset/Model_loadViewPointBtn_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Contents.json
new file mode 100644
index 0000000..d014337
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_previewItem_default@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_previewItem_default@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@2x.png
new file mode 100644
index 0000000..c1d96b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@3x.png
new file mode 100644
index 0000000..f3f8853
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_previewItem_default.imageset/Model_previewItem_default@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Contents.json
new file mode 100644
index 0000000..d9cf01a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_viewPoint_ failure Image@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Model_viewPoint_ failure Image@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@2x.png
new file mode 100644
index 0000000..516d5d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@3x.png
new file mode 100644
index 0000000..1cba304
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/Model_viewPoint_ failureImage.imageset/Model_viewPoint_ failure Image@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/Contents.json
new file mode 100644
index 0000000..f774d4a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "search_background.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "search_background@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "search_background@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background.png
new file mode 100644
index 0000000..d6ccb19
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@2x.png
new file mode 100644
index 0000000..387c8ec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@3x.png
new file mode 100644
index 0000000..a83de49
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Model/search_background.imageset/search_background@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Contents.json
new file mode 100644
index 0000000..84310b6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_change_password@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_change_password@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@2x.png
new file mode 100644
index 0000000..bc52208
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@3x.png
new file mode 100644
index 0000000..db427fa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_change_password.imageset/Mine_change_password@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Contents.json
new file mode 100644
index 0000000..56c57a5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_clear_cache@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_clear_cache@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@2x.png
new file mode 100644
index 0000000..7407fa6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@3x.png
new file mode 100644
index 0000000..5cf0e2c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_clear_cache.imageset/Mine_clear_cache@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Contents.json
new file mode 100644
index 0000000..97e32f9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_img_bg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_img_bg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@2x.png
new file mode 100644
index 0000000..3249c2b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@3x.png
new file mode 100644
index 0000000..d860311
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_img_bg.imageset/Mine_img_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Contents.json
new file mode 100644
index 0000000..8e05344
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_user_icon@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mine_user_icon@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@2x.png
new file mode 100644
index 0000000..571aa00
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@3x.png
new file mode 100644
index 0000000..aa6705e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Mine_user_icon.imageset/Mine_user_icon@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Contents.json
new file mode 100644
index 0000000..2a396ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_cellImg_bg@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_cellImg_bg@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@2x.png
new file mode 100644
index 0000000..c6af5d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@3x.png
new file mode 100644
index 0000000..0a0d89e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cellImg_bg.imageset/Project_list_cellImg_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Contents.json
new file mode 100644
index 0000000..b0a31e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_cell_manager@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_cell_manager@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@2x.png
new file mode 100644
index 0000000..121b689
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@3x.png
new file mode 100644
index 0000000..c2348ab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_cell_manager.imageset/Project_list_cell_manager@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Contents.json
new file mode 100644
index 0000000..7870a9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_mine@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_mine@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@2x.png
new file mode 100644
index 0000000..6e9b06f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@3x.png
new file mode 100644
index 0000000..f28641e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_mine.imageset/Project_list_mine@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Contents.json
new file mode 100644
index 0000000..1dccb36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_news@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_list_news@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@2x.png
new file mode 100644
index 0000000..3a9f776
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@3x.png
new file mode 100644
index 0000000..95c161b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_list_news.imageset/Project_list_news@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Contents.json
new file mode 100644
index 0000000..974a3fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_nav_back@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Project_nav_back@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@2x.png
new file mode 100644
index 0000000..1826056
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@3x.png
new file mode 100644
index 0000000..590c753
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/ProjectAndMine/Project_nav_back.imageset/Project_nav_back@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Contents.json
new file mode 100644
index 0000000..a0d4869
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_moments@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_moments@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@2x.png
new file mode 100644
index 0000000..d109aaf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@3x.png
new file mode 100644
index 0000000..44f3a2c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_moments.imageset/Share_moments@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Contents.json
new file mode 100644
index 0000000..1799ba9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_periodValidity_normal@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_periodValidity_normal@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@2x.png
new file mode 100644
index 0000000..18aefc7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@3x.png
new file mode 100644
index 0000000..89d8c48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_normal.imageset/Share_periodValidity_normal@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Contents.json
new file mode 100644
index 0000000..86f6211
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_periodValidity_selected@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_periodValidity_selected@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@2x.png
new file mode 100644
index 0000000..7c870d4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@3x.png
new file mode 100644
index 0000000..29e6b79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_periodValidity_selected.imageset/Share_periodValidity_selected@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Contents.json
new file mode 100644
index 0000000..269ca8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_private@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_private@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@2x.png
new file mode 100644
index 0000000..cf4bca4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@3x.png
new file mode 100644
index 0000000..43ce19e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_private.imageset/Share_private@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Contents.json
new file mode 100644
index 0000000..161d0b7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_qq@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_qq@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@2x.png
new file mode 100644
index 0000000..966179b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@3x.png
new file mode 100644
index 0000000..c0b56fb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_qq.imageset/Share_qq@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Contents.json
new file mode 100644
index 0000000..4115d46
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_wechat@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Share_wechat@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@2x.png
new file mode 100644
index 0000000..804d001
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@3x.png
new file mode 100644
index 0000000..30192ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Share/Share_wechat.imageset/Share_wechat@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/Contents.json
new file mode 100644
index 0000000..d2c5c1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_Doc.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_Doc@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_Doc@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc.png
new file mode 100644
index 0000000..d40733a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@2x.png
new file mode 100644
index 0000000..00c44ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@3x.png
new file mode 100644
index 0000000..b0a5f4f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc.imageset/TabBar_Doc@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/Contents.json
new file mode 100644
index 0000000..78f0544
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_Doc_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_Doc_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_Doc_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select.png
new file mode 100644
index 0000000..091fafb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@2x.png
new file mode 100644
index 0000000..a35fdc3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@3x.png
new file mode 100644
index 0000000..811fa13
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Doc_select.imageset/TabBar_Doc_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/Contents.json
new file mode 100644
index 0000000..5328c05
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_Examine.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_Examine@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_Examine@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine.png
new file mode 100644
index 0000000..dfe2a83
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@2x.png
new file mode 100644
index 0000000..e57af18
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@3x.png
new file mode 100644
index 0000000..cc61fbb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine.imageset/TabBar_Examine@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/Contents.json
new file mode 100644
index 0000000..c866100
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_Examine_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_Examine_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_Examine_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select.png
new file mode 100644
index 0000000..3b3329e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@2x.png
new file mode 100644
index 0000000..90e1e17
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@3x.png
new file mode 100644
index 0000000..81b5e0a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Examine_select.imageset/TabBar_Examine_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/Contents.json
new file mode 100644
index 0000000..3cb19a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_Issue.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_Issue@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_Issue@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue.png
new file mode 100644
index 0000000..a57aa24
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@2x.png
new file mode 100644
index 0000000..f54b4df
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@3x.png
new file mode 100644
index 0000000..06e2db4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue.imageset/TabBar_Issue@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/Contents.json
new file mode 100644
index 0000000..b123835
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_Issue_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_Issue_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_Issue_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select.png
new file mode 100644
index 0000000..c78cf8d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@2x.png
new file mode 100644
index 0000000..fc48bad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@3x.png
new file mode 100644
index 0000000..ee8a674
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_Issue_select.imageset/TabBar_Issue_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/Contents.json
new file mode 100644
index 0000000..be2636d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_bussiness.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_bussiness@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_bussiness@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness.png
new file mode 100644
index 0000000..6020b10
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@2x.png
new file mode 100644
index 0000000..63a6769
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@3x.png
new file mode 100644
index 0000000..b3aed12
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness.imageset/TabBar_bussiness@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/Contents.json
new file mode 100644
index 0000000..fdc0be9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_bussiness_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_bussiness_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_bussiness_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select.png
new file mode 100644
index 0000000..8406754
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@2x.png
new file mode 100644
index 0000000..3b39aaa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@3x.png
new file mode 100644
index 0000000..22d46b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_bussiness_select.imageset/TabBar_bussiness_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/Contents.json
new file mode 100644
index 0000000..828b589
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_model.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_model@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_model@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model.png
new file mode 100644
index 0000000..cfe51b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@2x.png
new file mode 100644
index 0000000..1af4f2f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@3x.png
new file mode 100644
index 0000000..8bfcbed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model.imageset/TabBar_model@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/Contents.json
new file mode 100644
index 0000000..8d825ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "TabBar_model_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "TabBar_model_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "TabBar_model_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select.png
new file mode 100644
index 0000000..3511977
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@2x.png
new file mode 100644
index 0000000..1b3649f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@3x.png
new file mode 100644
index 0000000..86f3952
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/Tab/TabBar_model_select.imageset/TabBar_model_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/Contents.json
new file mode 100644
index 0000000..4b6820f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_delete@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_delete@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@2x.png
new file mode 100644
index 0000000..5b4e864
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@3x.png
new file mode 100644
index 0000000..ecb9a97
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_delete.imageset/TableView_delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/Contents.json
new file mode 100644
index 0000000..a9da8d7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_load@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_load@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@2x.png
new file mode 100644
index 0000000..186d07b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@3x.png
new file mode 100644
index 0000000..b42d0e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_load.imageset/TableView_load@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/Contents.json
new file mode 100644
index 0000000..31f7be6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_more@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_more@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@2x.png
new file mode 100644
index 0000000..cdda69f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@3x.png
new file mode 100644
index 0000000..7a6b9b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_more.imageset/TableView_more@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/Contents.json
new file mode 100644
index 0000000..bef37ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_problem@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_problem@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@2x.png
new file mode 100644
index 0000000..705a072
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@3x.png
new file mode 100644
index 0000000..4e9b0ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_problem.imageset/TableView_problem@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/Contents.json
new file mode 100644
index 0000000..e7d321e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_share@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "TableView_share@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@2x.png
new file mode 100644
index 0000000..f516d40
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@3x.png
new file mode 100644
index 0000000..4dadc1c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/TableViewToolBtn/TableView_share.imageset/TableView_share@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/Contents.json
new file mode 100644
index 0000000..07179b6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "fail.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "fail@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "fail@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail.png
new file mode 100644
index 0000000..64b040e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@2x.png
new file mode 100644
index 0000000..64b040e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@3x.png
new file mode 100644
index 0000000..64b040e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/fail.imageset/fail@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/Contents.json
new file mode 100644
index 0000000..50f8631
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "loading.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "loading@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "loading@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading.png
new file mode 100644
index 0000000..8fe5437
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@2x.png
new file mode 100644
index 0000000..8fe5437
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@3x.png
new file mode 100644
index 0000000..8fe5437
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/loading.imageset/loading@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/Contents.json
new file mode 100644
index 0000000..858785f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "success.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "success@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "success@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success.png
new file mode 100644
index 0000000..f330b70
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@2x.png
new file mode 100644
index 0000000..2cb680b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@3x.png
new file mode 100644
index 0000000..2cb680b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/YJProgressImage/success.imageset/success@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/Contents.json
new file mode 100644
index 0000000..451dfda
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "bussiness_examine.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "bussiness_examine@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bussiness_examine@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine.png
new file mode 100644
index 0000000..bd6de9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@2x.png
new file mode 100644
index 0000000..88107f2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@3x.png
new file mode 100644
index 0000000..e52314a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_examine.imageset/bussiness_examine@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/Contents.json
new file mode 100644
index 0000000..d32f768
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "bussiness_panorama.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "bussiness_panorama@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bussiness_panorama@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama.png
new file mode 100644
index 0000000..558df07
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@2x.png
new file mode 100644
index 0000000..10ea0e5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@3x.png
new file mode 100644
index 0000000..95d2403
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_panorama.imageset/bussiness_panorama@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/Contents.json
new file mode 100644
index 0000000..5b014c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bussiness_person@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/bussiness_person@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/bussiness_person@3x.png
new file mode 100644
index 0000000..8c7a53e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_person.imageset/bussiness_person@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/Contents.json
new file mode 100644
index 0000000..a677a97
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "bussiness_schedule.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "bussiness_schedule@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bussiness_schedule@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule.png
new file mode 100644
index 0000000..05c1985
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@2x.png
new file mode 100644
index 0000000..6ef0d27
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@3x.png
new file mode 100644
index 0000000..b4a1673
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_schedule.imageset/bussiness_schedule@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/Contents.json
new file mode 100644
index 0000000..2b1dc60
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bussiness_video@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/bussiness_video@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/bussiness_video@3x.png
new file mode 100644
index 0000000..fb2a3a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/bussiness_video.imageset/bussiness_video@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/Contents.json
new file mode 100644
index 0000000..b883bc2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "icon_change@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "icon_change@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@2x.png
new file mode 100644
index 0000000..d85d6d5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@3x.png
new file mode 100644
index 0000000..ce8fa1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_change.imageset/icon_change@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/Contents.json
new file mode 100644
index 0000000..e2cd91c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "icon_close_@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "icon_close_@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@2x.png
new file mode 100644
index 0000000..13497e7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@3x.png
new file mode 100644
index 0000000..fc1bfb6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_close_.imageset/icon_close_@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/Contents.json
new file mode 100644
index 0000000..629051d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "icon_finish_p@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "icon_finish_p@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@2x.png
new file mode 100644
index 0000000..3d8b104
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@3x.png
new file mode 100644
index 0000000..9c77adf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_finish_p.imageset/icon_finish_p@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/Contents.json
new file mode 100644
index 0000000..a177815
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "icon_return_n@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "icon_return_n@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@2x.png
new file mode 100644
index 0000000..b15694a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@3x.png
new file mode 100644
index 0000000..f87f09f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_n.imageset/icon_return_n@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/Contents.json
new file mode 100644
index 0000000..7d3f6e6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "icon_return_p@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "icon_return_p@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@2x.png
new file mode 100644
index 0000000..1bfb653
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@3x.png
new file mode 100644
index 0000000..e9211ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/icon_return_p.imageset/icon_return_p@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/Contents.json
new file mode 100644
index 0000000..a10d2fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "sight_video_focus@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "sight_video_focus@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@2x.png
new file mode 100644
index 0000000..47ff656
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@3x.png
new file mode 100644
index 0000000..d14a5e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/camera/sight_video_focus.imageset/sight_video_focus@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/Contents.json
new file mode 100644
index 0000000..932d348
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "line.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "line@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "line@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line.png
new file mode 100644
index 0000000..2a44bc4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@2x.png
new file mode 100644
index 0000000..9ce3621
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@3x.png
new file mode 100644
index 0000000..4700a22
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/line.imageset/line@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/Contents.json
new file mode 100644
index 0000000..740cbf7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_1@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/loading_1@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/loading_1@2x.png
new file mode 100644
index 0000000..254eb47
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_1.imageset/loading_1@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/Contents.json
new file mode 100644
index 0000000..5dd79e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_10@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/loading_10@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/loading_10@2x.png
new file mode 100644
index 0000000..c387c9b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_10.imageset/loading_10@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/Contents.json
new file mode 100644
index 0000000..0401021
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_11@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/loading_11@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/loading_11@2x.png
new file mode 100644
index 0000000..b2f413b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_11.imageset/loading_11@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/Contents.json
new file mode 100644
index 0000000..2acbf79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_12@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/loading_12@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/loading_12@2x.png
new file mode 100644
index 0000000..32bf7aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_12.imageset/loading_12@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/Contents.json
new file mode 100644
index 0000000..56d6230
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_13@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/loading_13@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/loading_13@2x.png
new file mode 100644
index 0000000..7510c4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_13.imageset/loading_13@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/Contents.json
new file mode 100644
index 0000000..7b57acf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_14@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/loading_14@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/loading_14@2x.png
new file mode 100644
index 0000000..def040b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_14.imageset/loading_14@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/Contents.json
new file mode 100644
index 0000000..301e846
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_15@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/loading_15@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/loading_15@2x.png
new file mode 100644
index 0000000..adf9cbe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_15.imageset/loading_15@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/Contents.json
new file mode 100644
index 0000000..cd5c8b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_16@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/loading_16@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/loading_16@2x.png
new file mode 100644
index 0000000..b8e08ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_16.imageset/loading_16@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/Contents.json
new file mode 100644
index 0000000..99de435
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_17@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/loading_17@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/loading_17@2x.png
new file mode 100644
index 0000000..364a30a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_17.imageset/loading_17@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/Contents.json
new file mode 100644
index 0000000..039455d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_2@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/loading_2@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/loading_2@2x.png
new file mode 100644
index 0000000..b8e08ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_2.imageset/loading_2@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/Contents.json
new file mode 100644
index 0000000..d7aabe1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_3@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/loading_3@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/loading_3@2x.png
new file mode 100644
index 0000000..adf9cbe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_3.imageset/loading_3@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/Contents.json
new file mode 100644
index 0000000..4231b1b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_4@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/loading_4@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/loading_4@2x.png
new file mode 100644
index 0000000..def040b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_4.imageset/loading_4@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/Contents.json
new file mode 100644
index 0000000..707d50f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_5@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/loading_5@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/loading_5@2x.png
new file mode 100644
index 0000000..7510c4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_5.imageset/loading_5@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/Contents.json
new file mode 100644
index 0000000..1d23f4d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_6@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/loading_6@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/loading_6@2x.png
new file mode 100644
index 0000000..32bf7aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_6.imageset/loading_6@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/Contents.json
new file mode 100644
index 0000000..c84f48f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_7@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/loading_7@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/loading_7@2x.png
new file mode 100644
index 0000000..b2f413b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_7.imageset/loading_7@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/Contents.json
new file mode 100644
index 0000000..2ac26dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_8@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/loading_8@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/loading_8@2x.png
new file mode 100644
index 0000000..c387c9b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_8.imageset/loading_8@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/Contents.json
new file mode 100644
index 0000000..475c373
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "loading_9@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/loading_9@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/loading_9@2x.png
new file mode 100644
index 0000000..ea10d82
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/loading/loading_9.imageset/loading_9@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Contents.json
new file mode 100644
index 0000000..3350c8e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_agreement@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_agreement@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@2x.png
new file mode 100644
index 0000000..7b60b65
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@3x.png
new file mode 100644
index 0000000..4df43da
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_agreement.imageset/Login_agreement@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Contents.json
new file mode 100644
index 0000000..2acba5a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_common_btn@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_common_btn@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@2x.png
new file mode 100644
index 0000000..5cef52e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@3x.png
new file mode 100644
index 0000000..0d14128
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_common_btn.imageset/Login_common_btn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Contents.json
new file mode 100644
index 0000000..d0869c2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_loginBtn_dis@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_loginBtn_dis@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@2x.png
new file mode 100644
index 0000000..2a9e57d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@3x.png
new file mode 100644
index 0000000..3cabeb6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_dis.imageset/Login_loginBtn_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Contents.json
new file mode 100644
index 0000000..c717275
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Login_loginBtn_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Login_loginBtn_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Login_loginBtn_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis.png
new file mode 100644
index 0000000..fee752b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@2x.png
new file mode 100644
index 0000000..0c0b70b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@3x.png
new file mode 100644
index 0000000..ec33e22
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_diss.imageset/Login_loginBtn_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Contents.json
new file mode 100644
index 0000000..0fc2708
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_loginBtn_nor@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_loginBtn_nor@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@2x.png
new file mode 100644
index 0000000..5cae346
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@3x.png
new file mode 100644
index 0000000..9bcf46c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_nor.imageset/Login_loginBtn_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Contents.json
new file mode 100644
index 0000000..de4ef76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Login_loginBtn_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Login_loginBtn_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Login_loginBtn_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor.png
new file mode 100644
index 0000000..4ff7590
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@2x.png
new file mode 100644
index 0000000..1d31f9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@3x.png
new file mode 100644
index 0000000..d09a367
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_loginBtn_norm.imageset/Login_loginBtn_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Contents.json
new file mode 100644
index 0000000..c4aed5b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_logo@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_logo@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@2x.png
new file mode 100644
index 0000000..e2d1bb3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@3x.png
new file mode 100644
index 0000000..88bd46e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_logo.imageset/Login_logo@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Contents.json
new file mode 100644
index 0000000..acdc10d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_number@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_number@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@2x.png
new file mode 100644
index 0000000..7ad6a15
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@3x.png
new file mode 100644
index 0000000..eeaac6f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_number.imageset/Login_number@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Contents.json
new file mode 100644
index 0000000..aab8661
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_password@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_password@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@2x.png
new file mode 100644
index 0000000..408aba0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@3x.png
new file mode 100644
index 0000000..a22b0f3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_password.imageset/Login_password@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Contents.json
new file mode 100644
index 0000000..e12931d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_userName@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Login_userName@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@2x.png
new file mode 100644
index 0000000..7173a44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@3x.png
new file mode 100644
index 0000000..6c663be
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Login_userName.imageset/Login_userName@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Contents.json
new file mode 100644
index 0000000..f8d9035
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mes_oval@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "Mes_oval@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@2x.png
new file mode 100644
index 0000000..36cda47
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@3x.png
new file mode 100644
index 0000000..2040025
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/Mes_oval.imageset/Mes_oval@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/Contents.json
new file mode 100644
index 0000000..b59abea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "account.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "account@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "account@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account.png
new file mode 100644
index 0000000..a89e2be
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@2x.png
new file mode 100644
index 0000000..4cf1ae6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@3x.png
new file mode 100644
index 0000000..134fd52
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/account.imageset/account@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/Contents.json
new file mode 100644
index 0000000..eaf9a40
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "arrow_right.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "arrow_right@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "arrow_right@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right.png
new file mode 100644
index 0000000..ccdb3f3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@2x.png
new file mode 100644
index 0000000..ee2e24b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@3x.png
new file mode 100644
index 0000000..d7714c7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/arrow_right.imageset/arrow_right@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/Contents.json
new file mode 100644
index 0000000..4d348d7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "card_bg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "card_bg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "card_bg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg.png
new file mode 100644
index 0000000..a073320
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@2x.png
new file mode 100644
index 0000000..8c86060
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@3x.png
new file mode 100644
index 0000000..feafae6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/card_bg.imageset/card_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/Contents.json
new file mode 100644
index 0000000..7858da1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "code_check.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "code_check@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "code_check@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check.png
new file mode 100644
index 0000000..ab8e4a3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@2x.png
new file mode 100644
index 0000000..7617157
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@3x.png
new file mode 100644
index 0000000..d87aca1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_check.imageset/code_check@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/Contents.json
new file mode 100644
index 0000000..5a97cc9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "code_delete.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "code_delete@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "code_delete@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete.png
new file mode 100644
index 0000000..45209a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@2x.png
new file mode 100644
index 0000000..6c7e88e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@3x.png
new file mode 100644
index 0000000..028b14a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/code_delete.imageset/code_delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/Contents.json
new file mode 100644
index 0000000..6d4be36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "coding.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "coding@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "coding@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding.png
new file mode 100644
index 0000000..0c5b923
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@2x.png
new file mode 100644
index 0000000..7a8ef9a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@3x.png
new file mode 100644
index 0000000..3062fa7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/coding.imageset/coding@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/Contents.json
new file mode 100644
index 0000000..c162842
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "invisible.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "invisible@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "invisible@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible.png
new file mode 100644
index 0000000..83bed9a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@2x.png
new file mode 100644
index 0000000..0e64d5e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@3x.png
new file mode 100644
index 0000000..067dc9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/invisible.imageset/invisible@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/Contents.json
new file mode 100644
index 0000000..9c695c7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "logo_bime.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "logo_bime@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "logo_bime@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime.png
new file mode 100644
index 0000000..4021b82
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@2x.png
new file mode 100644
index 0000000..c603aa3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@3x.png
new file mode 100644
index 0000000..941a440
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_bime.imageset/logo_bime@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/Contents.json
new file mode 100644
index 0000000..7428a9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "logo_unknown.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "logo_unknown@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "logo_unknown@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown.png
new file mode 100644
index 0000000..31304f0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@2x.png
new file mode 100644
index 0000000..cd8c1a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@3x.png
new file mode 100644
index 0000000..343754c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown.imageset/logo_unknown@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/Contents.json
new file mode 100644
index 0000000..95529ce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "logo_unknown_erro.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "logo_unknown_erro@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "logo_unknown_erro@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro.png
new file mode 100644
index 0000000..e2e6b79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@2x.png
new file mode 100644
index 0000000..aff4547
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@3x.png
new file mode 100644
index 0000000..60b8ede
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_erro.imageset/logo_unknown_erro@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/Contents.json
new file mode 100644
index 0000000..b5ae07b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "logo_unknown_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "logo_unknown_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "logo_unknown_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor.png
new file mode 100644
index 0000000..95632e6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@2x.png
new file mode 100644
index 0000000..fdc114a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@3x.png
new file mode 100644
index 0000000..5aa1c56
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/logo_unknown_nor.imageset/logo_unknown_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/Contents.json
new file mode 100644
index 0000000..feb1946
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "password.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "password@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "password@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password.png
new file mode 100644
index 0000000..37a72a0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@2x.png
new file mode 100644
index 0000000..8673d1d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@3x.png
new file mode 100644
index 0000000..67eac6a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/password.imageset/password@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/Contents.json
new file mode 100644
index 0000000..b45be35
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "quit.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "quit@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "quit@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit.png
new file mode 100644
index 0000000..4a12bd8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@2x.png
new file mode 100644
index 0000000..1687b69
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@3x.png
new file mode 100644
index 0000000..d5ef761
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/quit.imageset/quit@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/Contents.json
new file mode 100644
index 0000000..7c3bfa1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "set_arrow_right.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "set_arrow_right@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "set_arrow_right@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right.png
new file mode 100644
index 0000000..7d86b27
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@2x.png
new file mode 100644
index 0000000..2d55ee2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@3x.png
new file mode 100644
index 0000000..e6781f9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/set_arrow_right.imageset/set_arrow_right@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/Contents.json
new file mode 100644
index 0000000..b6f6996
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "visible.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "visible@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "visible@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible.png
new file mode 100644
index 0000000..e07ebd2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@2x.png
new file mode 100644
index 0000000..e1b0723
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@3x.png
new file mode 100644
index 0000000..47b612a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/login/visible.imageset/visible@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/1122.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/1122.png
new file mode 100644
index 0000000..82997ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/1122.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/Contents.json
new file mode 100644
index 0000000..173b377
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/1122.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "filename" : "1122.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/Contents.json
new file mode 100644
index 0000000..7df53ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "all.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "all@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "all@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all.png
new file mode 100644
index 0000000..cd8345b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@2x.png
new file mode 100644
index 0000000..b084228
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@3x.png
new file mode 100644
index 0000000..13aefac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all.imageset/all@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/Contents.json
new file mode 100644
index 0000000..fe8bbc7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "all_fill.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "all_fill@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "all_fill@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill.png
new file mode 100644
index 0000000..b12d75b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@2x.png
new file mode 100644
index 0000000..8efbadf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@3x.png
new file mode 100644
index 0000000..8ad2031
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_fill.imageset/all_fill@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/Contents.json
new file mode 100644
index 0000000..5a2d268
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "all_project.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "all_project@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "all_project@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project.png
new file mode 100644
index 0000000..179a805
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@2x.png
new file mode 100644
index 0000000..8e5c802
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@3x.png
new file mode 100644
index 0000000..2ca7035
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project.imageset/all_project@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/Contents.json
new file mode 100644
index 0000000..9b24a70
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "all_project_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "all_project_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "all_project_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor.png
new file mode 100644
index 0000000..d3a9f57
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@2x.png
new file mode 100644
index 0000000..26aba0b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@3x.png
new file mode 100644
index 0000000..70ab3d8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/all_project_nor.imageset/all_project_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/Contents.json
new file mode 100644
index 0000000..4288080
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "arrow.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "arrow@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "arrow@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow.png
new file mode 100644
index 0000000..6368ba7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@2x.png
new file mode 100644
index 0000000..0ea56b7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@3x.png
new file mode 100644
index 0000000..1131938
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow.imageset/arrow@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/Contents.json
new file mode 100644
index 0000000..4288080
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "arrow.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "arrow@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "arrow@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow.png
new file mode 100644
index 0000000..25c2190
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@2x.png
new file mode 100644
index 0000000..e4a886a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@3x.png
new file mode 100644
index 0000000..ef881b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/arrow_left.imageset/arrow@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/Contents.json
new file mode 100644
index 0000000..7127bfc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "avatar_bg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "avatar_bg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "avatar_bg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg.png
new file mode 100644
index 0000000..b6a0622
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@2x.png
new file mode 100644
index 0000000..13880e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@3x.png
new file mode 100644
index 0000000..2ad535c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/avatar_bg.imageset/avatar_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/Contents.json
new file mode 100644
index 0000000..864a9af
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "bar.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "bar@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bar@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar.png
new file mode 100644
index 0000000..a567538
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@2x.png
new file mode 100644
index 0000000..1ad9ff0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@3x.png
new file mode 100644
index 0000000..223b423
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar.imageset/bar@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/Contents.json
new file mode 100644
index 0000000..87f6474
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "bar_arrow.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "bar_arrow@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bar_arrow@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow.png
new file mode 100644
index 0000000..3b40657
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@2x.png
new file mode 100644
index 0000000..b699457
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@3x.png
new file mode 100644
index 0000000..4141a9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_arrow.imageset/bar_arrow@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/Contents.json
new file mode 100644
index 0000000..f354a39
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "bar_down.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "bar_down@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "bar_down@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down.png
new file mode 100644
index 0000000..e6bbc33
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@2x.png
new file mode 100644
index 0000000..c7a5b48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@3x.png
new file mode 100644
index 0000000..71931a0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/bar_down.imageset/bar_down@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/Contents.json
new file mode 100644
index 0000000..ed4d9e0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "blue.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "blue@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "blue@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue.png
new file mode 100644
index 0000000..dcd208d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@2x.png
new file mode 100644
index 0000000..8c8666b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@3x.png
new file mode 100644
index 0000000..14ee2ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/blue.imageset/blue@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/Contents.json
new file mode 100644
index 0000000..e0b7b9a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "collect.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "collect@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "collect@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect.png
new file mode 100644
index 0000000..8319f2a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@2x.png
new file mode 100644
index 0000000..4af776c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@3x.png
new file mode 100644
index 0000000..6c2fdc7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect.imageset/collect@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/Contents.json
new file mode 100644
index 0000000..e0b7b9a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "collect.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "collect@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "collect@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect.png
new file mode 100644
index 0000000..a483ac9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@2x.png
new file mode 100644
index 0000000..8c3892d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@3x.png
new file mode 100644
index 0000000..68fe910
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList.imageset/collect@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/Contents.json
new file mode 100644
index 0000000..620752e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "collect_fill.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "collect_fill@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "collect_fill@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill.png
new file mode 100644
index 0000000..2725f20
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@2x.png
new file mode 100644
index 0000000..2d20a3a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@3x.png
new file mode 100644
index 0000000..dac16f8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collectList_fill.imageset/collect_fill@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/Contents.json
new file mode 100644
index 0000000..8e3f610
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "collect_nor.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "collect_nor@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "collect_nor@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor.png
new file mode 100644
index 0000000..0ad3cf7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@2x.png
new file mode 100644
index 0000000..4996e07
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@3x.png
new file mode 100644
index 0000000..1dbfbb9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_nor.imageset/collect_nor@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/Contents.json
new file mode 100644
index 0000000..5a8087e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "collect_select.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "collect_select@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "collect_select@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select.png
new file mode 100644
index 0000000..1efc489
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@2x.png
new file mode 100644
index 0000000..b231a14
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@3x.png
new file mode 100644
index 0000000..c9d8de8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/collect_select.imageset/collect_select@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/Contents.json
new file mode 100644
index 0000000..3930a4c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "delete.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "delete@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "delete@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete.png
new file mode 100644
index 0000000..4d83faa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@2x.png
new file mode 100644
index 0000000..5b5a751
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@3x.png
new file mode 100644
index 0000000..8141bbf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/delete.imageset/delete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/Contents.json
new file mode 100644
index 0000000..aa12e8c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "details.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "details@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "details@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details.png
new file mode 100644
index 0000000..f9dbe9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@2x.png
new file mode 100644
index 0000000..d3791cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@3x.png
new file mode 100644
index 0000000..9193d1b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/details.imageset/details@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/Contents.json
new file mode 100644
index 0000000..c943a87
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "expired.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "expired@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "expired@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired.png
new file mode 100644
index 0000000..ff2a1ae
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@2x.png
new file mode 100644
index 0000000..04f4d14
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@3x.png
new file mode 100644
index 0000000..b42ff75
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/expired.imageset/expired@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/Contents.json
new file mode 100644
index 0000000..82160b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "goitm.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "goitm@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "goitm@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm.png
new file mode 100644
index 0000000..0b88266
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@2x.png
new file mode 100644
index 0000000..37f9a4d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@3x.png
new file mode 100644
index 0000000..bf5b77e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/goitm.imageset/goitm@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/Contents.json
new file mode 100644
index 0000000..94a071f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "l.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "l@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "l@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l.png
new file mode 100644
index 0000000..dbddfcc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@2x.png
new file mode 100644
index 0000000..8a9167a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@3x.png
new file mode 100644
index 0000000..0e87420
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/l.imageset/l@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/Contents.json
new file mode 100644
index 0000000..bf72355
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "line备份.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "line备份@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "line备份@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git "a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275.png" "b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275.png"
new file mode 100644
index 0000000..2b3654e
--- /dev/null
+++ "b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275.png"
Binary files differ
diff --git "a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275@2x.png" "b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275@2x.png"
new file mode 100644
index 0000000..0ff8cf6
--- /dev/null
+++ "b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275@2x.png"
Binary files differ
diff --git "a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275@3x.png" "b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275@3x.png"
new file mode 100644
index 0000000..ed4be57
--- /dev/null
+++ "b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/line.imageset/line\345\244\207\344\273\275@3x.png"
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/Contents.json
new file mode 100644
index 0000000..2eb09b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "news.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "news@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "news@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news.png
new file mode 100644
index 0000000..ae7391b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@2x.png
new file mode 100644
index 0000000..a05a737
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@3x.png
new file mode 100644
index 0000000..c9c503b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/news.imageset/news@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/Contents.json
new file mode 100644
index 0000000..ac69979
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "public.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "public@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "public@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public.png
new file mode 100644
index 0000000..76e9181
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@2x.png
new file mode 100644
index 0000000..75e00f1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@3x.png
new file mode 100644
index 0000000..abb3da4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public.imageset/public@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/Contents.json
new file mode 100644
index 0000000..ac69979
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "public.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "public@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "public@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public.png
new file mode 100644
index 0000000..db98e73
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@2x.png
new file mode 100644
index 0000000..4483ba6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@3x.png
new file mode 100644
index 0000000..97902ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/public1.imageset/public@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/Contents.json
new file mode 100644
index 0000000..9f58cb0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "red.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "red@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "red@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red.png
new file mode 100644
index 0000000..d09d6b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@2x.png
new file mode 100644
index 0000000..3f3442b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@3x.png
new file mode 100644
index 0000000..99056c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/red.imageset/red@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/Contents.json
new file mode 100644
index 0000000..016e3db
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "scan.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "scan@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "scan@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan.png
new file mode 100644
index 0000000..3c2fb72
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@2x.png
new file mode 100644
index 0000000..2a0098d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@3x.png
new file mode 100644
index 0000000..b59c327
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan.imageset/scan@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/Contents.json
new file mode 100644
index 0000000..333088e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "scan_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/scan_icon@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/scan_icon@3x.png
new file mode 100644
index 0000000..1eeb6c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_icon.imageset/scan_icon@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/Contents.json
new file mode 100644
index 0000000..fddde60
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "scan_img@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/scan_img@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/scan_img@3x.png
new file mode 100644
index 0000000..e3f8c76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/scan_img.imageset/scan_img@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/Contents.json
new file mode 100644
index 0000000..2328e6c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "search_bg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "search_bg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "search_bg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg.png
new file mode 100644
index 0000000..238b222
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@2x.png
new file mode 100644
index 0000000..434d97a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@3x.png
new file mode 100644
index 0000000..b3663e5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/search_bg.imageset/search_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/Contents.json
new file mode 100644
index 0000000..930178e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "star.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "star@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "star@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star.png
new file mode 100644
index 0000000..a330284
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@2x.png
new file mode 100644
index 0000000..df5aa1b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@3x.png
new file mode 100644
index 0000000..f6a1498
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star.imageset/star@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/Contents.json
new file mode 100644
index 0000000..f5ac877
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "star_fill.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "star_fill@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "star_fill@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill.png
new file mode 100644
index 0000000..186b15a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@2x.png
new file mode 100644
index 0000000..4c1b51a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@3x.png
new file mode 100644
index 0000000..b870a88
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/star_fill.imageset/star_fill@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/Contents.json
new file mode 100644
index 0000000..a70bc7e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "tab_bar.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "tab_bar@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "tab_bar@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar.png
new file mode 100644
index 0000000..dd4b9eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@2x.png
new file mode 100644
index 0000000..3871bee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@3x.png
new file mode 100644
index 0000000..b03b690
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/tab_bar.imageset/tab_bar@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/Contents.json
new file mode 100644
index 0000000..7f1e455
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "time.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "time@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "time@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time.png
new file mode 100644
index 0000000..09aa9ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@2x.png
new file mode 100644
index 0000000..98ffd3d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@3x.png
new file mode 100644
index 0000000..ed4823c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time-1.imageset/time@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/Contents.json
new file mode 100644
index 0000000..7f1e455
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "time.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "time@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "time@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time.png
new file mode 100644
index 0000000..cd767b7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@2x.png
new file mode 100644
index 0000000..29fc110
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@3x.png
new file mode 100644
index 0000000..5b30050
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time.imageset/time@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/Contents.json
new file mode 100644
index 0000000..7f1e455
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "time.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "time@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "time@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time.png
new file mode 100644
index 0000000..09aa9ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@2x.png
new file mode 100644
index 0000000..98ffd3d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@3x.png
new file mode 100644
index 0000000..ed4823c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/time_1.imageset/time@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/Contents.json
new file mode 100644
index 0000000..094333d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "unpublic.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "unpublic@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "unpublic@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic.png
new file mode 100644
index 0000000..b63a0ba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@2x.png
new file mode 100644
index 0000000..c06dbe5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@3x.png
new file mode 100644
index 0000000..e260c7f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic.imageset/unpublic@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/Contents.json
new file mode 100644
index 0000000..094333d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "unpublic.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "unpublic@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "unpublic@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic.png
new file mode 100644
index 0000000..6b2a648
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@2x.png
new file mode 100644
index 0000000..51876b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@3x.png
new file mode 100644
index 0000000..2cced28
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/map/unpublic1.imageset/unpublic@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/Contents.json
new file mode 100644
index 0000000..36c66e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_panorama.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_panorama@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_panorama@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama.png
new file mode 100644
index 0000000..3677ccb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@2x.png
new file mode 100644
index 0000000..d7ed67d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@3x.png
new file mode 100644
index 0000000..87ccac6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama.imageset/add_panorama@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/Contents.json
new file mode 100644
index 0000000..a24a1a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_panorama_bg.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_panorama_bg@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_panorama_bg@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg.png
new file mode 100644
index 0000000..402f745
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@2x.png
new file mode 100644
index 0000000..eee7f94
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@3x.png
new file mode 100644
index 0000000..35c4515
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_panorama_bg.imageset/add_panorama_bg@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/Contents.json
new file mode 100644
index 0000000..061ca42
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_selection.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_selection@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_selection@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection.png
new file mode 100644
index 0000000..5c38048
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@2x.png
new file mode 100644
index 0000000..d999a4e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@3x.png
new file mode 100644
index 0000000..683bac8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_selection.imageset/add_selection@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/Contents.json
new file mode 100644
index 0000000..7d0f934
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_viewpoint.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_viewpoint@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_viewpoint@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint.png
new file mode 100644
index 0000000..e1417a8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@2x.png
new file mode 100644
index 0000000..8686d63
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@3x.png
new file mode 100644
index 0000000..fd77c6e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/add_viewpoint.imageset/add_viewpoint@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/Contents.json
new file mode 100644
index 0000000..71d584c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "guanlian.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "guanlian@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "guanlian@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian.png
new file mode 100644
index 0000000..aaed877
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@2x.png
new file mode 100644
index 0000000..8ee2d2b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@3x.png
new file mode 100644
index 0000000..014bf97
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/guanlian.imageset/guanlian@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/Contents.json
new file mode 100644
index 0000000..42c361e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "panorama_add.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "panorama_add@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "panorama_add@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add.png
new file mode 100644
index 0000000..5ec7acf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@2x.png
new file mode 100644
index 0000000..ce38ff2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@3x.png
new file mode 100644
index 0000000..e26d9b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/panorama_add.imageset/panorama_add@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/Contents.json
new file mode 100644
index 0000000..a2d30c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "searchTF.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "searchTF@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "searchTF@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF.png
new file mode 100644
index 0000000..75473a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@2x.png
new file mode 100644
index 0000000..7ddd27c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@3x.png
new file mode 100644
index 0000000..ca3e33d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/panorama/searchTF.imageset/searchTF@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Contents.json
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Contents.json
new file mode 100644
index 0000000..bbd03a3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "Material.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "Material@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "Material@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material.png
new file mode 100644
index 0000000..c6a325b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@2x.png
new file mode 100644
index 0000000..dbc29f0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@3x.png
new file mode 100644
index 0000000..7c7a83b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/Material.imageset/Material@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/Contents.json
new file mode 100644
index 0000000..3ef326c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "addPart_btn.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "addPart_btn@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "addPart_btn@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn.png
new file mode 100644
index 0000000..6b5c203
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@2x.png
new file mode 100644
index 0000000..6eb409e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@3x.png
new file mode 100644
index 0000000..687edb8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/addPart_btn.imageset/addPart_btn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/Contents.json
new file mode 100644
index 0000000..fdafcfa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_material.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_material@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_material@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material.png
new file mode 100644
index 0000000..e7f7496
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@2x.png
new file mode 100644
index 0000000..babf975
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@3x.png
new file mode 100644
index 0000000..71b42d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_material.imageset/add_material@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/Contents.json
new file mode 100644
index 0000000..dec0582
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_mechinal.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_mechinal@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_mechinal@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal.png
new file mode 100644
index 0000000..1a1dea3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@2x.png
new file mode 100644
index 0000000..e8a2b16
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@3x.png
new file mode 100644
index 0000000..e22cebd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_mechinal.imageset/add_mechinal@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/Contents.json
new file mode 100644
index 0000000..05679e3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_person.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_person@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_person@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person.png
new file mode 100644
index 0000000..66d7d75
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@2x.png
new file mode 100644
index 0000000..16093a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@3x.png
new file mode 100644
index 0000000..994a78f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_person.imageset/add_person@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/Contents.json
new file mode 100644
index 0000000..0a568c3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_safety.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_safety@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_safety@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety.png
new file mode 100644
index 0000000..c0deb87
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@2x.png
new file mode 100644
index 0000000..1e734a8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@3x.png
new file mode 100644
index 0000000..f8b7461
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_safety.imageset/add_safety@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/Contents.json
new file mode 100644
index 0000000..1cc8e32
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_supervise.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_supervise@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_supervise@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise.png
new file mode 100644
index 0000000..bf822fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@2x.png
new file mode 100644
index 0000000..eff6255
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@3x.png
new file mode 100644
index 0000000..4ddf334
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_supervise.imageset/add_supervise@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/Contents.json
new file mode 100644
index 0000000..4ba36db
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "add_task.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "add_task@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "add_task@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task.png
new file mode 100644
index 0000000..7d5dd3b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@2x.png
new file mode 100644
index 0000000..d38a840
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@3x.png
new file mode 100644
index 0000000..30f7178
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/add_task.imageset/add_task@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/Contents.json
new file mode 100644
index 0000000..03c5ed8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "chooseTask_icon.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "chooseTask_icon@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "chooseTask_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon.png
new file mode 100644
index 0000000..d8135bd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@2x.png
new file mode 100644
index 0000000..2c21066
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@3x.png
new file mode 100644
index 0000000..79e2c76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/chooseTask_icon.imageset/chooseTask_icon@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/Contents.json
new file mode 100644
index 0000000..f5b5d19
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "complete.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "complete@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "complete@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete.png
new file mode 100644
index 0000000..40be184
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@2x.png
new file mode 100644
index 0000000..26aa93b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@3x.png
new file mode 100644
index 0000000..8cdb64f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/complete.imageset/complete@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/Contents.json
new file mode 100644
index 0000000..1814e1c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "date_btn.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "date_btn@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "date_btn@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn.png
new file mode 100644
index 0000000..30c8c98
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@2x.png
new file mode 100644
index 0000000..4453ab7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@3x.png
new file mode 100644
index 0000000..497c365
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/date_btn.imageset/date_btn@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/Contents.json
new file mode 100644
index 0000000..f1f0ff2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "delete_task.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "delete_task@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "delete_task@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task.png
new file mode 100644
index 0000000..26defb8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@2x.png
new file mode 100644
index 0000000..30ed25b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@3x.png
new file mode 100644
index 0000000..3875c87
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task-2.imageset/delete_task@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/Contents.json
new file mode 100644
index 0000000..5d74dea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "delete_task@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/delete_task@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/delete_task@2x.png
new file mode 100644
index 0000000..cdbde9a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/delete_task.imageset/delete_task@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/Contents.json
new file mode 100644
index 0000000..cc4c7a8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "mechanical.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "mechanical@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "mechanical@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical.png
new file mode 100644
index 0000000..bad577e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@2x.png
new file mode 100644
index 0000000..7e42041
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@3x.png
new file mode 100644
index 0000000..db4e1e6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/mechanical.imageset/mechanical@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/Contents.json
new file mode 100644
index 0000000..b23267e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "nextLevel.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "nextLevel@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "nextLevel@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel.png
new file mode 100644
index 0000000..6cce817
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@2x.png
new file mode 100644
index 0000000..5017bf9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@3x.png
new file mode 100644
index 0000000..24bb344
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/nextLevel.imageset/nextLevel@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/Contents.json
new file mode 100644
index 0000000..55eedb3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "overrule.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "overrule@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "overrule@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule.png
new file mode 100644
index 0000000..65d4c7e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@2x.png
new file mode 100644
index 0000000..c8dcf00
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@3x.png
new file mode 100644
index 0000000..6640187
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/overrule.imageset/overrule@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/Contents.json
new file mode 100644
index 0000000..14d1bce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "pass.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "pass@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "pass@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass.png
new file mode 100644
index 0000000..3cd25e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@2x.png
new file mode 100644
index 0000000..4afee77
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@3x.png
new file mode 100644
index 0000000..46f1eb4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/pass.imageset/pass@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/Contents.json
new file mode 100644
index 0000000..f9cbd99
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "personnel.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "personnel@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "personnel@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel.png
new file mode 100644
index 0000000..533f5ab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@2x.png
new file mode 100644
index 0000000..485763f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@3x.png
new file mode 100644
index 0000000..73b58b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/personnel.imageset/personnel@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/Contents.json
new file mode 100644
index 0000000..b4bf2d0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "preview.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "preview@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "preview@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview.png
new file mode 100644
index 0000000..f8387f1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@2x.png
new file mode 100644
index 0000000..bbce4d7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@3x.png
new file mode 100644
index 0000000..67ac18a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview.imageset/preview@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/Contents.json
new file mode 100644
index 0000000..ce98c08
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "preview_dis.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "preview_dis@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "preview_dis@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis.png
new file mode 100644
index 0000000..15055cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@2x.png
new file mode 100644
index 0000000..7d3646b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@3x.png
new file mode 100644
index 0000000..9948a7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/preview_dis.imageset/preview_dis@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/Contents.json
new file mode 100644
index 0000000..2ecb783
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "safety.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "safety@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "safety@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety.png
new file mode 100644
index 0000000..00fcccb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@2x.png
new file mode 100644
index 0000000..842b2c7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@3x.png
new file mode 100644
index 0000000..c1449aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/safety.imageset/safety@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/Contents.json
new file mode 100644
index 0000000..eee1229
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "schedule.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "schedule@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "schedule@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule.png
new file mode 100644
index 0000000..ac68bdf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@2x.png
new file mode 100644
index 0000000..4fbce54
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@3x.png
new file mode 100644
index 0000000..625855d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule.imageset/schedule@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/Contents.json
new file mode 100644
index 0000000..b1fb737
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "schedule_def.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "schedule_def@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "schedule_def@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def.png
new file mode 100644
index 0000000..0be49f1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@2x.png
new file mode 100644
index 0000000..790eb1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@3x.png
new file mode 100644
index 0000000..bd516c1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/schedule_def.imageset/schedule_def@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/Contents.json
new file mode 100644
index 0000000..ef20aba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "status_bohui.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "status_bohui@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "status_bohui@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui.png
new file mode 100644
index 0000000..3e1bfd2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@2x.png
new file mode 100644
index 0000000..0b331d3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@3x.png
new file mode 100644
index 0000000..d31ad32
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_bohui.imageset/status_bohui@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/Contents.json
new file mode 100644
index 0000000..fc531f2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "status_daishenhe.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "status_daishenhe@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "status_daishenhe@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe.png
new file mode 100644
index 0000000..f4dd835
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@2x.png
new file mode 100644
index 0000000..a933dd0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@3x.png
new file mode 100644
index 0000000..f24e27b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_daishenhe.imageset/status_daishenhe@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/Contents.json
new file mode 100644
index 0000000..2e3733b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "status_wait.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "status_wait@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "status_wait@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait.png
new file mode 100644
index 0000000..c613715
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@2x.png
new file mode 100644
index 0000000..e99b0bf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@3x.png
new file mode 100644
index 0000000..a00bf8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_wait.imageset/status_wait@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/Contents.json
new file mode 100644
index 0000000..e309acb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "status_yishenhe.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "status_yishenhe@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "status_yishenhe@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe.png
new file mode 100644
index 0000000..3a02f72
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@2x.png
new file mode 100644
index 0000000..2b687cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@3x.png
new file mode 100644
index 0000000..b35795f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/status_yishenhe.imageset/status_yishenhe@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/Contents.json
new file mode 100644
index 0000000..6886cca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "supervise.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "supervise@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "supervise@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise.png
new file mode 100644
index 0000000..6b8e717
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@2x.png
new file mode 100644
index 0000000..7044782
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@3x.png
new file mode 100644
index 0000000..82583b2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/supervise.imageset/supervise@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/Contents.json b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/Contents.json
new file mode 100644
index 0000000..4791ec5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "uploadImage.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "uploadImage@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "uploadImage@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage.png
new file mode 100644
index 0000000..49d6f36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@2x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@2x.png
new file mode 100644
index 0000000..cd20d86
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@3x.png b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@3x.png
new file mode 100644
index 0000000..40e29d6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Assets.xcassets/schedule/uploadImage.imageset/uploadImage@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Base.lproj/LaunchScreen.storyboard b/IphoneBIMe/IphoneBIMe/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..3492b93
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="761" y="392"/>
+        </scene>
+    </scenes>
+</document>
diff --git a/IphoneBIMe/IphoneBIMe/Base.lproj/Main.storyboard b/IphoneBIMe/IphoneBIMe/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f6869eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Base.lproj/Main.storyboard
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="tne-QT-ifu">
+            <objects>
+                <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="177" y="-234"/>
+        </scene>
+    </scenes>
+</document>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.h b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.h
new file mode 100644
index 0000000..8842b02
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.h
@@ -0,0 +1,113 @@
+//
+//  NSDate+PBCategory.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#define D_MINUTE    60
+#define D_HOUR        3600
+#define D_DAY        86400
+#define D_WEEK        604800
+#define D_YEAR        31556926
+@interface NSDate (PBCategory)
++ (NSCalendar *) currentCalendar; // avoid bottlenecks
+
+// Relative dates from the current date
++ (NSDate *) dateTomorrow;
++ (NSDate *) dateYesterday;
++ (NSDate *) dateWithDaysFromNow: (NSInteger) days;
++ (NSDate *) dateWithDaysBeforeNow: (NSInteger) days;
++ (NSDate *) dateWithHoursFromNow: (NSInteger) dHours;
++ (NSDate *) dateWithHoursBeforeNow: (NSInteger) dHours;
++ (NSDate *) dateWithMinutesFromNow: (NSInteger) dMinutes;
++ (NSDate *) dateWithMinutesBeforeNow: (NSInteger) dMinutes;
++ (NSDate *)date:(NSString *)datestr WithFormat:(NSString *)format;
+
+// Short string utilities
+- (NSString *) stringWithDateStyle: (NSDateFormatterStyle) dateStyle timeStyle: (NSDateFormatterStyle) timeStyle;
+- (NSString *) stringWithFormat: (NSString *) format;
+@property (nonatomic, readonly) NSString *shortString;
+@property (nonatomic, readonly) NSString *shortDateString;
+@property (nonatomic, readonly) NSString *shortTimeString;
+@property (nonatomic, readonly) NSString *mediumString;
+@property (nonatomic, readonly) NSString *mediumDateString;
+@property (nonatomic, readonly) NSString *mediumTimeString;
+@property (nonatomic, readonly) NSString *longString;
+@property (nonatomic, readonly) NSString *longDateString;
+@property (nonatomic, readonly) NSString *longTimeString;
+
+// Comparing dates
+- (BOOL) isEqualToDateIgnoringTime: (NSDate *) aDate;
+
+- (BOOL) isToday;
+- (BOOL) isTomorrow;
+- (BOOL) isYesterday;
+
+- (BOOL) isSameWeekAsDate: (NSDate *) aDate;
+- (BOOL) isThisWeek;
+- (BOOL) isNextWeek;
+- (BOOL) isLastWeek;
+
+- (BOOL) isSameMonthAsDate: (NSDate *) aDate;
+- (BOOL) isThisMonth;
+- (BOOL) isNextMonth;
+- (BOOL) isLastMonth;
+
+- (BOOL) isSameYearAsDate: (NSDate *) aDate;
+- (BOOL) isThisYear;
+- (BOOL) isNextYear;
+- (BOOL) isLastYear;
+
+- (BOOL) isEarlierThanDate: (NSDate *) aDate;
+- (BOOL) isLaterThanDate: (NSDate *) aDate;
+
+- (BOOL) isInFuture;
+- (BOOL) isInPast;
+
+// Date roles
+- (BOOL) isTypicallyWorkday;
+- (BOOL) isTypicallyWeekend;
+
+// Adjusting dates
+- (NSDate *) dateByAddingYears: (NSInteger) dYears;
+- (NSDate *) dateBySubtractingYears: (NSInteger) dYears;
+- (NSDate *) dateByAddingMonths: (NSInteger) dMonths;
+- (NSDate *) dateBySubtractingMonths: (NSInteger) dMonths;
+- (NSDate *) dateByAddingDays: (NSInteger) dDays;
+- (NSDate *) dateBySubtractingDays: (NSInteger) dDays;
+- (NSDate *) dateByAddingHours: (NSInteger) dHours;
+- (NSDate *) dateBySubtractingHours: (NSInteger) dHours;
+- (NSDate *) dateByAddingMinutes: (NSInteger) dMinutes;
+- (NSDate *) dateBySubtractingMinutes: (NSInteger) dMinutes;
+
+// Date extremes
+- (NSDate *) dateAtStartOfDay;
+- (NSDate *) dateAtEndOfDay;
+
+// Retrieving intervals
+- (NSInteger) minutesAfterDate: (NSDate *) aDate;
+- (NSInteger) minutesBeforeDate: (NSDate *) aDate;
+- (NSInteger) hoursAfterDate: (NSDate *) aDate;
+- (NSInteger) hoursBeforeDate: (NSDate *) aDate;
+- (NSInteger) daysAfterDate: (NSDate *) aDate;
+- (NSInteger) daysBeforeDate: (NSDate *) aDate;
+- (NSInteger)distanceInDaysToDate:(NSDate *)anotherDate;
+
+// Decomposing dates
+@property (readonly) NSInteger nearestHour;
+@property (readonly) NSInteger hour;
+@property (readonly) NSInteger minute;
+@property (readonly) NSInteger seconds;
+@property (readonly) NSInteger day;
+@property (readonly) NSInteger month;
+@property (readonly) NSInteger week;
+@property (readonly) NSInteger weekday;
+@property (readonly) NSInteger nthWeekday; // e.g. 2nd Tuesday of the month == 2
+@property (readonly) NSInteger year;
+
+- (NSDate *)dateWithYMD;
+- (NSDate *)dateWithFormatter:(NSString *)formatter;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.m b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.m
new file mode 100644
index 0000000..5bac47c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDate+PBCategory.m
@@ -0,0 +1,521 @@
+//
+//  NSDate+PBCategory.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "NSDate+PBCategory.h"
+
+static const unsigned componentFlags = (NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitWeekOfMonth |  NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday | NSCalendarUnitWeekdayOrdinal);
+
+@implementation NSDate (PBCategory)
+// Courtesy of Lukasz Margielewski
+// Updated via Holger Haenisch
++ (NSCalendar *) currentCalendar
+{
+    static NSCalendar *sharedCalendar = nil;
+    if (!sharedCalendar)
+        sharedCalendar = [NSCalendar autoupdatingCurrentCalendar];
+    return sharedCalendar;
+}
+
+#pragma mark - Relative Dates
+
++ (NSDate *) dateWithDaysFromNow: (NSInteger) days
+{
+    // Thanks, Jim Morrison
+    return [[NSDate date] dateByAddingDays:days];
+}
+
++ (NSDate *) dateWithDaysBeforeNow: (NSInteger) days
+{
+    // Thanks, Jim Morrison
+    return [[NSDate date] dateBySubtractingDays:days];
+}
+
++ (NSDate *) dateTomorrow
+{
+    return [NSDate dateWithDaysFromNow:1];
+}
+
++ (NSDate *) dateYesterday
+{
+    return [NSDate dateWithDaysBeforeNow:1];
+}
+
++ (NSDate *) dateWithHoursFromNow: (NSInteger) dHours
+{
+    NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_HOUR * dHours;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return newDate;
+}
+
++ (NSDate *) dateWithHoursBeforeNow: (NSInteger) dHours
+{
+    NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_HOUR * dHours;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return newDate;
+}
+
++ (NSDate *) dateWithMinutesFromNow: (NSInteger) dMinutes
+{
+    NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_MINUTE * dMinutes;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return newDate;
+}
+
++ (NSDate *) dateWithMinutesBeforeNow: (NSInteger) dMinutes
+{
+    NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_MINUTE * dMinutes;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return newDate;
+}
+
+#pragma mark - String Properties
+- (NSString *) stringWithFormat: (NSString *) format
+{
+    NSDateFormatter *formatter = [NSDateFormatter new];
+    //    formatter.locale = [NSLocale currentLocale]; // Necessary?
+    formatter.dateFormat = format;
+    return [formatter stringFromDate:self];
+}
+
+- (NSString *) stringWithDateStyle: (NSDateFormatterStyle) dateStyle timeStyle: (NSDateFormatterStyle) timeStyle
+{
+    NSDateFormatter *formatter = [NSDateFormatter new];
+    formatter.dateStyle = dateStyle;
+    formatter.timeStyle = timeStyle;
+    //    formatter.locale = [NSLocale currentLocale]; // Necessary?
+    return [formatter stringFromDate:self];
+}
+
+- (NSString *) shortString
+{
+    return [self stringWithDateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle];
+}
+
+- (NSString *) shortTimeString
+{
+    return [self stringWithDateStyle:NSDateFormatterNoStyle timeStyle:NSDateFormatterShortStyle];
+}
+
+- (NSString *) shortDateString
+{
+    return [self stringWithDateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterNoStyle];
+}
+
+- (NSString *) mediumString
+{
+    return [self stringWithDateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterMediumStyle ];
+}
+
+- (NSString *) mediumTimeString
+{
+    return [self stringWithDateStyle:NSDateFormatterNoStyle timeStyle:NSDateFormatterMediumStyle ];
+}
+
+- (NSString *) mediumDateString
+{
+    return [self stringWithDateStyle:NSDateFormatterMediumStyle  timeStyle:NSDateFormatterNoStyle];
+}
+
+- (NSString *) longString
+{
+    return [self stringWithDateStyle:NSDateFormatterLongStyle timeStyle:NSDateFormatterLongStyle ];
+}
+
+- (NSString *) longTimeString
+{
+    return [self stringWithDateStyle:NSDateFormatterNoStyle timeStyle:NSDateFormatterLongStyle ];
+}
+
+- (NSString *) longDateString
+{
+    return [self stringWithDateStyle:NSDateFormatterLongStyle  timeStyle:NSDateFormatterNoStyle];
+}
+
+#pragma mark - Comparing Dates
+
+- (BOOL) isEqualToDateIgnoringTime: (NSDate *) aDate
+{
+    NSDateComponents *components1 = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    NSDateComponents *components2 = [[NSDate currentCalendar] components:componentFlags fromDate:aDate];
+    return ((components1.year == components2.year) &&
+            (components1.month == components2.month) &&
+            (components1.day == components2.day));
+}
+
+- (BOOL) isToday
+{
+    return [self isEqualToDateIgnoringTime:[NSDate date]];
+}
+
+- (BOOL) isTomorrow
+{
+    return [self isEqualToDateIgnoringTime:[NSDate dateTomorrow]];
+}
+
+- (BOOL) isYesterday
+{
+    return [self isEqualToDateIgnoringTime:[NSDate dateYesterday]];
+}
+
+// This hard codes the assumption that a week is 7 days
+- (BOOL) isSameWeekAsDate: (NSDate *) aDate
+{
+    NSDateComponents *components1 = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    NSDateComponents *components2 = [[NSDate currentCalendar] components:componentFlags fromDate:aDate];
+    
+    // Must be same week. 12/31 and 1/1 will both be week "1" if they are in the same week
+    if (components1.weekOfMonth != components2.weekOfMonth) return NO;
+    
+    // Must have a time interval under 1 week. Thanks @aclark
+    return (fabs([self timeIntervalSinceDate:aDate]) < D_WEEK);
+}
+
+- (BOOL) isThisWeek
+{
+    return [self isSameWeekAsDate:[NSDate date]];
+}
+
+- (BOOL) isNextWeek
+{
+    NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_WEEK;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return [self isSameWeekAsDate:newDate];
+}
+
+- (BOOL) isLastWeek
+{
+    NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] - D_WEEK;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return [self isSameWeekAsDate:newDate];
+}
+
+// Thanks, mspasov
+- (BOOL) isSameMonthAsDate: (NSDate *) aDate
+{
+    NSDateComponents *components1 = [[NSDate currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth fromDate:self];
+    NSDateComponents *components2 = [[NSDate currentCalendar] components:NSCalendarUnitYear | NSCalendarUnitMonth fromDate:aDate];
+    return ((components1.month == components2.month) &&
+            (components1.year == components2.year));
+}
+
+- (BOOL) isThisMonth
+{
+    return [self isSameMonthAsDate:[NSDate date]];
+}
+
+// Thanks Marcin Krzyzanowski, also for adding/subtracting years and months
+- (BOOL) isLastMonth
+{
+    return [self isSameMonthAsDate:[[NSDate date] dateBySubtractingMonths:1]];
+}
+
+- (BOOL) isNextMonth
+{
+    return [self isSameMonthAsDate:[[NSDate date] dateByAddingMonths:1]];
+}
+
+- (BOOL) isSameYearAsDate: (NSDate *) aDate
+{
+    NSDateComponents *components1 = [[NSDate currentCalendar] components:NSCalendarUnitYear fromDate:self];
+    NSDateComponents *components2 = [[NSDate currentCalendar] components:NSCalendarUnitYear fromDate:aDate];
+    return (components1.year == components2.year);
+}
+
+- (BOOL) isThisYear
+{
+    // Thanks, baspellis
+    return [self isSameYearAsDate:[NSDate date]];
+}
+
+- (BOOL) isNextYear
+{
+    NSDateComponents *components1 = [[NSDate currentCalendar] components:NSCalendarUnitYear fromDate:self];
+    NSDateComponents *components2 = [[NSDate currentCalendar] components:NSCalendarUnitYear fromDate:[NSDate date]];
+    
+    return (components1.year == (components2.year + 1));
+}
+
+- (BOOL) isLastYear
+{
+    NSDateComponents *components1 = [[NSDate currentCalendar] components:NSCalendarUnitYear fromDate:self];
+    NSDateComponents *components2 = [[NSDate currentCalendar] components:NSCalendarUnitYear fromDate:[NSDate date]];
+    
+    return (components1.year == (components2.year - 1));
+}
+
+- (BOOL) isEarlierThanDate: (NSDate *) aDate
+{
+    return ([self compare:aDate] == NSOrderedAscending);
+}
+
+- (BOOL) isLaterThanDate: (NSDate *) aDate
+{
+    return ([self compare:aDate] == NSOrderedDescending);
+}
+
+// Thanks, markrickert
+- (BOOL) isInFuture
+{
+    return ([self isLaterThanDate:[NSDate date]]);
+}
+
+// Thanks, markrickert
+- (BOOL) isInPast
+{
+    return ([self isEarlierThanDate:[NSDate date]]);
+}
+
+
+#pragma mark - Roles
+- (BOOL) isTypicallyWeekend
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:NSCalendarUnitWeekday fromDate:self];
+    if ((components.weekday == 1) ||
+        (components.weekday == 7))
+        return YES;
+    return NO;
+}
+
+- (BOOL) isTypicallyWorkday
+{
+    return ![self isTypicallyWeekend];
+}
+
+#pragma mark - Adjusting Dates
+
+// Thaks, rsjohnson
+- (NSDate *) dateByAddingYears: (NSInteger) dYears
+{
+    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
+    [dateComponents setYear:dYears];
+    NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:self options:0];
+    return newDate;
+}
+
+- (NSDate *) dateBySubtractingYears: (NSInteger) dYears
+{
+    return [self dateByAddingYears:-dYears];
+}
+
+- (NSDate *) dateByAddingMonths: (NSInteger) dMonths
+{
+    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
+    [dateComponents setMonth:dMonths];
+    NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:self options:0];
+    return newDate;
+}
+
+- (NSDate *) dateBySubtractingMonths: (NSInteger) dMonths
+{
+    return [self dateByAddingMonths:-dMonths];
+}
+
+// Courtesy of dedan who mentions issues with Daylight Savings
+- (NSDate *) dateByAddingDays: (NSInteger) dDays
+{
+    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
+    [dateComponents setDay:dDays];
+    NSDate *newDate = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:self options:0];
+    return newDate;
+}
+
+- (NSDate *) dateBySubtractingDays: (NSInteger) dDays
+{
+    return [self dateByAddingDays: (dDays * -1)];
+}
+
+- (NSDate *) dateByAddingHours: (NSInteger) dHours
+{
+    NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_HOUR * dHours;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return newDate;
+}
+
+- (NSDate *) dateBySubtractingHours: (NSInteger) dHours
+{
+    return [self dateByAddingHours: (dHours * -1)];
+}
+
+- (NSDate *) dateByAddingMinutes: (NSInteger) dMinutes
+{
+    NSTimeInterval aTimeInterval = [self timeIntervalSinceReferenceDate] + D_MINUTE * dMinutes;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    return newDate;
+}
+
+- (NSDate *) dateBySubtractingMinutes: (NSInteger) dMinutes
+{
+    return [self dateByAddingMinutes: (dMinutes * -1)];
+}
+
+- (NSDateComponents *) componentsWithOffsetFromDate: (NSDate *) aDate
+{
+    NSDateComponents *dTime = [[NSDate currentCalendar] components:componentFlags fromDate:aDate toDate:self options:0];
+    return dTime;
+}
+
+#pragma mark - Extremes
+
+- (NSDate *) dateAtStartOfDay
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    components.hour = 0;
+    components.minute = 0;
+    components.second = 0;
+    return [[NSDate currentCalendar] dateFromComponents:components];
+}
+
+// Thanks gsempe & mteece
+- (NSDate *) dateAtEndOfDay
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    components.hour = 23; // Thanks Aleksey Kononov
+    components.minute = 59;
+    components.second = 59;
+    return [[NSDate currentCalendar] dateFromComponents:components];
+}
+
+#pragma mark - Retrieving Intervals
+
+- (NSInteger) minutesAfterDate: (NSDate *) aDate
+{
+    NSTimeInterval ti = [self timeIntervalSinceDate:aDate];
+    return (NSInteger) (ti / D_MINUTE);
+}
+
+- (NSInteger) minutesBeforeDate: (NSDate *) aDate
+{
+    NSTimeInterval ti = [aDate timeIntervalSinceDate:self];
+    return (NSInteger) (ti / D_MINUTE);
+}
+
+- (NSInteger) hoursAfterDate: (NSDate *) aDate
+{
+    NSTimeInterval ti = [self timeIntervalSinceDate:aDate];
+    return (NSInteger) (ti / D_HOUR);
+}
+
+- (NSInteger) hoursBeforeDate: (NSDate *) aDate
+{
+    NSTimeInterval ti = [aDate timeIntervalSinceDate:self];
+    return (NSInteger) (ti / D_HOUR);
+}
+
+- (NSInteger) daysAfterDate: (NSDate *) aDate
+{
+    NSTimeInterval ti = [self timeIntervalSinceDate:aDate];
+    return (NSInteger) (ti / D_DAY);
+}
+
+- (NSInteger) daysBeforeDate: (NSDate *) aDate
+{
+    NSTimeInterval ti = [aDate timeIntervalSinceDate:self];
+    return (NSInteger) (ti / D_DAY);
+}
+
+// Thanks, dmitrydims
+// I have not yet thoroughly tested this
+- (NSInteger)distanceInDaysToDate:(NSDate *)anotherDate
+{
+    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
+    NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay fromDate:self toDate:anotherDate options:0];
+    return components.day;
+}
+
+#pragma mark - Decomposing Dates
+
+- (NSInteger) nearestHour
+{
+    NSTimeInterval aTimeInterval = [[NSDate date] timeIntervalSinceReferenceDate] + D_MINUTE * 30;
+    NSDate *newDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTimeInterval];
+    NSDateComponents *components = [[NSDate currentCalendar] components:NSCalendarUnitHour fromDate:newDate];
+    return components.hour;
+}
+
+- (NSInteger) hour
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.hour;
+}
+
+- (NSInteger) minute
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.minute;
+}
+
+- (NSInteger) seconds
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.second;
+}
+
+- (NSInteger) day
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.day;
+}
+
+- (NSInteger) month
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.month;
+}
+
+- (NSInteger) week
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.weekOfMonth;
+}
+
+- (NSInteger) weekday
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.weekday;
+}
+
+- (NSInteger) nthWeekday // e.g. 2nd Tuesday of the month is 2
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.weekdayOrdinal;
+}
+
+- (NSInteger) year
+{
+    NSDateComponents *components = [[NSDate currentCalendar] components:componentFlags fromDate:self];
+    return components.year;
+}
+
++ (NSDate *)date:(NSString *)datestr WithFormat:(NSString *)format
+{
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setLocale:[NSLocale currentLocale]];
+    [dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
+    [dateFormatter setDateFormat:format];
+    NSDate *date = [dateFormatter dateFromString:datestr];
+#if ! __has_feature(objc_arc)
+    [dateFormatter release];
+#endif
+    return date;
+}
+
+- (NSDate *)dateWithYMD
+{
+    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
+    fmt.dateFormat = @"yyyy-MM-dd";
+    NSString *selfStr = [fmt stringFromDate:self];
+    return [fmt dateFromString:selfStr];
+}
+
+-(NSDate *)dateWithFormatter:(NSString *)formatter {
+    NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
+    fmt.dateFormat = formatter;
+    NSString *selfStr = [fmt stringFromDate:self];
+    return [fmt dateFromString:selfStr];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.h b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.h
new file mode 100644
index 0000000..8d5b16b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.h
@@ -0,0 +1,17 @@
+//
+//  NSDictionary+log.h
+//  HNSHPDA
+//
+//  Created by Huitu on 2021/1/21.
+//  Copyright © 2021 慧图移动. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSDictionary (log)
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.m b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.m
new file mode 100644
index 0000000..22c48b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/NSDictionary+log.m
@@ -0,0 +1,55 @@
+//
+//  NSDictionary+log.m
+//  HNSHPDA
+//
+//  Created by Huitu on 2021/1/21.
+//  Copyright © 2021 慧图移动. All rights reserved.
+//
+
+#import "NSDictionary+log.h"
+#import <objc/runtime.h>
+
+@implementation NSDictionary (log)
+
++ (void)load
+{
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        zx_swizzleSelector([self class], @selector(descriptionWithLocale:indent:), @selector(zx_descriptionWithLocale:indent:));
+    });
+}
+- (NSString *)zx_descriptionWithLocale:(id)locale indent:(NSUInteger)level
+{
+    return [self stringByReplaceUnicode:[self zx_descriptionWithLocale:locale indent:level]];
+}
+- (NSString *)stringByReplaceUnicode:(NSString *)unicodeString
+{
+    NSMutableString *convertedString = [unicodeString mutableCopy];
+    [convertedString replaceOccurrencesOfString:@"\\U" withString:@"\\u" options:0 range:NSMakeRange(0, convertedString.length)];
+    CFStringRef transform = CFSTR("Any-Hex/Java");
+    CFStringTransform((__bridge CFMutableStringRef)convertedString, NULL, transform, YES);
+    
+    return convertedString;
+}
+static inline void zx_swizzleSelector(Class theClass, SEL originalSelector, SEL swizzledSelector)
+{
+    Method originalMethod = class_getInstanceMethod(theClass, originalSelector);
+    Method swizzledMethod = class_getInstanceMethod(theClass, swizzledSelector);
+    
+    BOOL didAddMethod =
+    class_addMethod(theClass,
+                    originalSelector,
+                    method_getImplementation(swizzledMethod),
+                    method_getTypeEncoding(swizzledMethod));
+    
+    if (didAddMethod) {
+        class_replaceMethod(theClass,
+                            swizzledSelector,
+                            method_getImplementation(originalMethod),
+                            method_getTypeEncoding(originalMethod));
+    } else {
+        method_exchangeImplementations(originalMethod, swizzledMethod);
+    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.h b/IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.h
new file mode 100644
index 0000000..670b48b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.h
@@ -0,0 +1,46 @@
+//
+//  NSString+PBCategory.h
+//  ProBIM
+//
+//  Created by zjf on 2017/10/19.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface NSString (PBCategory)
+// 字典转json字符串方法
++ (NSString *)convertToJson:(NSDictionary *)dict;
+// 数组转json字符串方法
++ (NSString *)arrConvertToJson:(NSArray *)arr;
+// json字符串转字典或数组
++ (id)convertTodictionaryOrArr:(NSString *)jsonString;
+// 读取沙盒userID
+//+ (NSString *)getSandboxUserID;
+//读取沙盒Account
+//+ (NSString *)getSandboxAccount;
+//读取沙盒RealName信息
+//+ (NSString *)getSandboxRealName;
+//生成guid
++ (NSString *)getUniqueStrByUUID;
+//base64 转图片
++ (UIImage *)imageDecoding:(NSString *)str;
+//图片转base64
++ (NSString *)imagebase64:(UIImage *)image;
+//MD5加密
++ (NSString *)md5Encryption:(NSString *)str;
+//读取本地login.plist
++ (NSDictionary *)getLoginData;
+//读取API配置 api.plist
++ (NSDictionary *)getApiData;
+//读取API配置的数组
++ (NSArray *)getApiArrData;
++ (NSString *)getToken;
+//获取企业编码IP
++ (NSDictionary *)getCodeIp;
++(NSString *)urlEncodeStr:(NSString *)input;
+
+
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.m b/IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.m
new file mode 100644
index 0000000..d4584a4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/NSString+PBCategory.m
@@ -0,0 +1,149 @@
+//
+//  NSString+PBCategory.m
+//  ProBIM
+//
+//  Created by zjf on 2017/10/19.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import "NSString+PBCategory.h"
+#import <CommonCrypto/CommonDigest.h>
+@implementation NSString (PBCategory)
++ (NSString *)convertToJson:(NSDictionary *)dict {
+    NSError *parseError = nil;
+    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&parseError];
+    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+}
++ (NSString *)arrConvertToJson:(NSArray *)arr {
+    NSError *error = nil;
+    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
+    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+    return jsonString;
+}
++ (id)convertTodictionaryOrArr:(NSString *)jsonStr {
+    if (jsonStr == nil || [jsonStr isEqualToString:@""]) {
+        return nil;
+    }
+    NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
+    NSError *error = nil;
+    id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
+                                                    options:NSJSONReadingAllowFragments
+                                                      error:nil];
+    
+    if (jsonObject != nil && error == nil){
+        return jsonObject;
+    }else{
+        // 解析错误
+        return nil;
+    }
+}
+
+//+ (NSString *)getSandboxUserID {
+//    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+//    NSString *documents = [array lastObject];
+//    NSString *documentPath = [documents stringByAppendingPathComponent:@"dic.plist"];
+//    NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:documentPath];
+//    return [resultDic valueForKey:@"UserId"];
+//}
+//+ (NSString *)getSandboxAccount {
+//    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+//    NSString *documents = [array lastObject];
+//    NSString *documentPath = [documents stringByAppendingPathComponent:@"dictt.plist"];
+//    NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:documentPath];
+//    return [resultDic valueForKey:@"Account"];
+//}
+
+//+ (NSString *)getSandboxRealName {
+//    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+//    NSString *documents = [array lastObject];
+//    NSString *documentPath = [documents stringByAppendingPathComponent:@"dict.plist"];
+//    NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:documentPath];
+//    return [resultDic valueForKey:@"RealName"];
+//}
++ (NSString *)getUniqueStrByUUID {
+    CFUUIDRef    uuidObj = CFUUIDCreate(nil);//create a new UUID
+    NSString    *uuidString = (__bridge_transfer NSString *)CFUUIDCreateString(nil, uuidObj);
+    CFRelease(uuidObj);
+    return uuidString ;
+}
++ (UIImage *)imageDecoding:(NSString *)str {
+    //Base64字符串转UIImage图片:
+    NSData *decodedImageData = [[NSData alloc]
+                                initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
+    
+    UIImage *decodedImage = [UIImage imageWithData:decodedImageData];
+    return decodedImage;
+}
+
++ (NSString *)imagebase64:(UIImage *)image {
+    NSData *data = UIImageJPEGRepresentation(image,0.5);
+    NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
+    return encodedImageStr;
+
+}
++ (NSString *)md5Encryption:(NSString *)str {
+    const char *cStr = [str UTF8String];
+    unsigned char digest[CC_MD5_DIGEST_LENGTH];
+    CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call
+    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
+    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
+        [output appendFormat:@"%02x", digest[i]];
+    return  output;
+}
++(NSDictionary *)getLoginData {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"login.plist"];
+    NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:documentPath];
+    return resultDic;
+}
++ (NSDictionary *)getApiData {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"api.plist"];
+    NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:documentPath];
+    return resultDic;
+}
++ (NSArray *)getApiArrData {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"apiArr.plist"];
+    NSArray *arr = [NSArray arrayWithContentsOfFile:documentPath];
+    return arr;
+}
++ (NSString *)getToken {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"token.plist"];
+    NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:documentPath];
+    return [resultDic valueForKey:@"token"];
+}
++ (NSDictionary *)getCodeIp {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"code.plist"];
+    NSDictionary *resultDic = [NSDictionary dictionaryWithContentsOfFile:documentPath];
+    return resultDic;
+}
++(NSString *)urlEncodeStr:(NSString *)input{
+//    NSString *charactersToEscape = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";
+//    NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
+//    NSString *upSign = [input stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
+//    return upSign;
+    
+    NSString *encodedString = (NSString *)
+    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
+                                                              
+                                                              (CFStringRef)input,
+                                                              
+                                                              (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
+                                                              
+                                                              NULL,
+                                                              
+                                                              kCFStringEncodingUTF8));
+    return encodedString;
+    
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/PBAdditonal.h b/IphoneBIMe/IphoneBIMe/Classes/Category/PBAdditonal.h
new file mode 100644
index 0000000..30dd863
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/PBAdditonal.h
@@ -0,0 +1,15 @@
+//
+//  PBAdditonal.h
+//  ProBIM
+//
+//  Created by zjf on 2017/12/25.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import "UIBarButtonItem+PBCategory.h"
+#import "UIView+PBCategory.h"
+#import "NSString+PBCategory.h"
+#import "UILabel+ZJFAdditon.h"
+#import "UIButton+ZJFAdditon.h"
+#import "UIColor+ZJFAdditon.h"
+#import "NSDate+PBCategory.h"
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.h b/IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.h
new file mode 100644
index 0000000..c85f39d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.h
@@ -0,0 +1,13 @@
+//
+//  UIBarButtonItem+PBCategory.h
+//  ProBIM
+//
+//  Created by zjf on 2017/10/12.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIBarButtonItem (PBCategory)
++ (instancetype)barBuutonItemWithTarget:(id)target action:(SEL)action icon:(NSString *)icon highlighticon:(NSString *)highlighticon;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.m b/IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.m
new file mode 100644
index 0000000..259532f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIBarButtonItem+PBCategory.m
@@ -0,0 +1,24 @@
+//
+//  UIBarButtonItem+PBCategory.m
+//  ProBIM
+//
+//  Created by zjf on 2017/10/12.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import "UIBarButtonItem+PBCategory.h"
+
+@implementation UIBarButtonItem (PBCategory)
++ (instancetype)barBuutonItemWithTarget:(id)target action:(SEL)action icon:(NSString *)icon highlighticon:(NSString *)highlighticon {
+    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
+    [button setImage:[UIImage imageNamed:icon] forState:UIControlStateNormal];
+    [button setImage:[UIImage imageNamed:highlighticon] forState:UIControlStateHighlighted];
+    
+    //设置图像的大小
+    button.size = CGSizeMake(60, 30);
+    
+    [button addTarget:target action:action forControlEvents: UIControlEventTouchUpInside];
+    
+    return [[UIBarButtonItem alloc] initWithCustomView:button];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.h b/IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.h
new file mode 100644
index 0000000..8d871f8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.h
@@ -0,0 +1,18 @@
+//
+//  UIButton+ZJFAdditon.h
+//  ProBIM
+//
+//  Created by zjf on 2017/12/25.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIButton (ZJFAdditon)
++ (instancetype)z_textButton:(NSString *)title fontSize:(CGFloat)fontSize normalColor:(UIColor *)normalColor;
++ (instancetype)z_textButton:(NSString *)title boldFontSize:(CGFloat)fontSize normalColor:(UIColor *)normalColor;
++ (instancetype)z_textButton:(NSString *)title fontSize:(CGFloat)fontSize normalColor:(UIColor *)normalColor SelectedColor:(UIColor *)SelectedColor;
++ (instancetype)z_bgNormalImage:(UIImage *)normalImage bgSelectedImage:(UIImage *)SelectedImage;
++ (instancetype)z_bgImageButton:(UIImage *)image;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.m b/IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.m
new file mode 100644
index 0000000..1f73d6d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIButton+ZJFAdditon.m
@@ -0,0 +1,50 @@
+//
+//  UIButton+ZJFAdditon.m
+//  ProBIM
+//
+//  Created by zjf on 2017/12/25.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import "UIButton+ZJFAdditon.h"
+
+@implementation UIButton (ZJFAdditon)
++ (instancetype)z_textButton:(NSString *)title fontSize:(CGFloat)fontSize normalColor:(UIColor *)normalColor {
+    UIButton *button = [[self alloc] init];
+    [button setTitle:title forState:UIControlStateNormal];
+    [button setTitleColor:normalColor forState:UIControlStateNormal];
+    button.titleLabel.font = [UIFont fontWithName:@"PingFangSC-Regular" size:fontSize];
+    
+    return button;
+}
++ (instancetype)z_textButton:(NSString *)title boldFontSize:(CGFloat)fontSize normalColor:(UIColor *)normalColor {
+    UIButton *button = [[self alloc] init];
+    [button setTitle:title forState:UIControlStateNormal];
+    [button setTitleColor:normalColor forState:UIControlStateNormal];
+    button.titleLabel.font = [UIFont fontWithName:@"PingFangSC-Medium" size:fontSize];
+    return button;
+}
++ (instancetype)z_textButton:(NSString *)title fontSize:(CGFloat)fontSize normalColor:(UIColor *)normalColor SelectedColor:(UIColor *)SelectedColor {
+    UIButton *button = [[self alloc] init];
+    [button setTitle:title forState:UIControlStateNormal];
+    [button setTitleColor:normalColor forState:UIControlStateNormal];
+    [button setTitleColor:SelectedColor forState:UIControlStateSelected];
+    button.titleLabel.font = [UIFont systemFontOfSize:fontSize];
+    return button;
+}
++ (instancetype)z_bgNormalImage:(UIImage *)normalImage bgSelectedImage:(UIImage *)SelectedImage {
+    UIButton *button = [[self alloc] init];
+    [button setImage:normalImage forState:UIControlStateNormal];
+    [button setImage:SelectedImage forState:UIControlStateSelected];
+    return button;
+
+}
++ (instancetype)z_bgImageButton:(UIImage *)image {
+    UIButton *button = [[self alloc] init];
+    [button setBackgroundImage:image forState:UIControlStateNormal];
+    return button;
+}
+
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.h b/IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.h
new file mode 100644
index 0000000..7558f16
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.h
@@ -0,0 +1,17 @@
+//
+//  UIColor+ZJFAdditon.h
+//  ProBIM
+//
+//  Created by zjf on 2017/12/25.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIColor (ZJFAdditon)
++ (instancetype)z_colorWithHex:(uint32_t)hex alpha:(CGFloat)alpha;
++ (instancetype)z_colorWithR:(int)red G:(int)green B:(int)blue alpha:(CGFloat)alpha;
++ (instancetype)z_colorWithHex:(uint32_t)hex;
++ (instancetype)z_colorWithR:(int)red G:(int)green B:(int)blue;
++ (instancetype)z_randomColor;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.m b/IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.m
new file mode 100644
index 0000000..bddcf11
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIColor+ZJFAdditon.m
@@ -0,0 +1,34 @@
+//
+//  UIColor+ZJFAdditon.m
+//  ProBIM
+//
+//  Created by zjf on 2017/12/25.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import "UIColor+ZJFAdditon.h"
+
+@implementation UIColor (ZJFAdditon)
++ (instancetype)z_colorWithHex:(uint32_t)hex alpha:(CGFloat)alpha {
+    //hex = 0xA3 B2 FF
+    int red = (hex & 0xFF0000) >> 16;
+    int green = (hex & 0x00FF00) >> 8;
+    int blue = (hex & 0x0000FF);
+    return [UIColor z_colorWithR:red G:green B:blue alpha:alpha];
+}
++ (instancetype)z_colorWithR:(int)red G:(int)green B:(int)blue alpha:(CGFloat)alpha {
+    return [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:alpha];
+}
++ (instancetype)z_colorWithHex:(uint32_t)hex {
+    int red = (hex & 0xFF0000) >> 16;
+    int green = (hex & 0x00FF00) >> 8;
+    int blue = (hex & 0x0000FF);
+    return [UIColor z_colorWithR:red G:green B:blue alpha:1.0];
+}
++ (instancetype)z_colorWithR:(int)red G:(int)green B:(int)blue {
+    return [UIColor colorWithRed:red / 255.0 green:green / 255.0 blue:blue / 255.0 alpha:1.0];
+}
++ (instancetype)z_randomColor {
+    return [UIColor z_colorWithR:arc4random_uniform(256) G:arc4random_uniform(256) B:arc4random_uniform(256) alpha:1];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.h b/IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.h
new file mode 100644
index 0000000..3f422e8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.h
@@ -0,0 +1,15 @@
+//
+//  UIImageView+CSCategory.h
+//  ChinaSub
+//
+//  Created by zjf on 2019/10/23.
+//  Copyright © 2019 probim. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIImageView (CSCategory)
+- (void)circleImage;
+- (void)circleImageWithRadius:(NSInteger)radius;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.m b/IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.m
new file mode 100644
index 0000000..52757d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIImageView+CSCategory.m
@@ -0,0 +1,31 @@
+//
+//  UIImageView+CSCategory.m
+//  ChinaSub
+//
+//  Created by zjf on 2019/10/23.
+//  Copyright © 2019 probim. All rights reserved.
+//
+
+#import "UIImageView+CSCategory.h"
+
+@implementation UIImageView (CSCategory)
+- (void)circleImage {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        CAShapeLayer *cornerLayer = [CAShapeLayer layer];
+        UIBezierPath *cornerPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.bounds.size.width/2];
+        cornerLayer.path = cornerPath.CGPath;
+        cornerLayer.frame = self.bounds;
+        self.layer.mask = cornerLayer;
+    });
+}
+- (void)circleImageWithRadius:(NSInteger)radius {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        CAShapeLayer *cornerLayer = [CAShapeLayer layer];
+        UIBezierPath *cornerPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:radius];
+        cornerLayer.path = cornerPath.CGPath;
+        cornerLayer.frame = self.bounds;
+        self.layer.mask = cornerLayer;
+    });
+}
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.h b/IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.h
new file mode 100644
index 0000000..d0bb506
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.h
@@ -0,0 +1,14 @@
+//
+//  UILabel+ZJFAdditon.h
+//  ProBIM
+//
+//  Created by zjf on 2017/12/25.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UILabel (ZJFAdditon)
++ (instancetype)z_labelWithText:(NSString *)text Color:(UIColor *)color isBold:(BOOL)isBold Font:(CGFloat)fontSize;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.m b/IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.m
new file mode 100644
index 0000000..12ac9fa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UILabel+ZJFAdditon.m
@@ -0,0 +1,23 @@
+//
+//  UILabel+ZJFAdditon.m
+//  ProBIM
+//
+//  Created by zjf on 2017/12/25.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import "UILabel+ZJFAdditon.h"
+
+@implementation UILabel (ZJFAdditon)
++ (instancetype)z_labelWithText:(NSString *)text Color:(UIColor *)color isBold:(BOOL)isBold Font:(CGFloat)fontSize{
+    UILabel *label = [[UILabel alloc]init];
+    label.text = text;
+    label.textColor = color;
+    if (isBold) {
+        label.font = [UIFont fontWithName:@"PingFangSC-Medium" size:fontSize];
+    }else {
+        label.font = [UIFont fontWithName:@"PingFangSC-Regular" size:fontSize];
+    }
+    return label;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.h b/IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.h
new file mode 100644
index 0000000..7deb45e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.h
@@ -0,0 +1,21 @@
+//
+//  UIView+PBCategory.h
+//  ProBIM
+//
+//  Created by zjf on 2017/10/12.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface UIView (PBCategory)
+@property (nonatomic, assign) CGFloat x;
+@property (nonatomic, assign) CGFloat y;
+@property (nonatomic, assign) CGFloat width;
+@property (nonatomic, assign) CGFloat height;
+@property (nonatomic, assign) CGFloat centerX;
+@property (nonatomic, assign) CGFloat centerY;
+@property (nonatomic, assign) CGSize size;
+@property (nonatomic, assign) CGPoint origin;
+- (void)circleViewWithRadius:(NSInteger)radius;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.m b/IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.m
new file mode 100644
index 0000000..e3eb11d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Category/UIView+PBCategory.m
@@ -0,0 +1,117 @@
+//
+//  UIView+PBCategory.m
+//  ProBIM
+//
+//  Created by zjf on 2017/10/12.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//
+
+#import "UIView+PBCategory.h"
+
+@implementation UIView (PBCategory)
+- (void)setX:(CGFloat)x
+{
+    CGRect frame = self.frame;
+    frame.origin.x = x;
+    self.frame = frame;
+}
+
+- (void)setY:(CGFloat)y
+{
+    CGRect frame = self.frame;
+    frame.origin.y = y;
+    self.frame = frame;
+}
+
+- (CGFloat)x
+{
+    return self.frame.origin.x;
+}
+
+- (CGFloat)y
+{
+    return self.frame.origin.y;
+}
+
+- (void)setCenterX:(CGFloat)centerX
+{
+    CGPoint center = self.center;
+    center.x = centerX;
+    self.center = center;
+}
+
+- (CGFloat)centerX
+{
+    return self.center.x;
+}
+
+- (void)setCenterY:(CGFloat)centerY
+{
+    CGPoint center = self.center;
+    center.y = centerY;
+    self.center = center;
+}
+
+- (CGFloat)centerY
+{
+    return self.center.y;
+}
+
+- (void)setWidth:(CGFloat)width
+{
+    CGRect frame = self.frame;
+    frame.size.width = width;
+    self.frame = frame;
+}
+
+- (void)setHeight:(CGFloat)height
+{
+    CGRect frame = self.frame;
+    frame.size.height = height;
+    self.frame = frame;
+}
+
+- (CGFloat)height
+{
+    return self.frame.size.height;
+}
+
+- (CGFloat)width
+{
+    return self.frame.size.width;
+}
+
+- (void)setSize:(CGSize)size
+{
+    CGRect frame = self.frame;
+    frame.size = size;
+    self.frame = frame;
+}
+
+- (CGSize)size
+{
+    return self.frame.size;
+}
+
+- (void)setOrigin:(CGPoint)origin
+{
+    CGRect frame = self.frame;
+    frame.origin = origin;
+    self.frame = frame;
+}
+
+- (CGPoint)origin
+{
+    return self.frame.origin;
+}
+
+- (void)circleViewWithRadius:(NSInteger)radius {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        CAShapeLayer *cornerLayer = [CAShapeLayer layer];
+        UIBezierPath *cornerPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:radius];
+        cornerLayer.path = cornerPath.CGPath;
+        cornerLayer.frame = self.bounds;
+        self.layer.mask = cornerLayer;
+    });
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.h
new file mode 100644
index 0000000..ae76feb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.h
@@ -0,0 +1,15 @@
+//
+//  PBNetworkModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/9.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBNetworkModel : NSObject
+@property (nonatomic, assign) int Ret;
+@property (nonatomic, copy) NSString *Msg;
+@property (nonatomic, strong)  id Data;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.m
new file mode 100644
index 0000000..3208008
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBNetworkModel.m
@@ -0,0 +1,12 @@
+//
+//  PBNetworkModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/9.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBNetworkModel.h"
+
+@implementation PBNetworkModel
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.h
new file mode 100644
index 0000000..be2ad2b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.h
@@ -0,0 +1,28 @@
+//
+//  PBProjectPower.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/9.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBProjectPower : NSObject
+@property (nonatomic, strong) NSArray *Bmbs;
+@property (nonatomic, copy) NSString *Bm_ModuleId;
+@property (nonatomic, copy) NSString *Bm_EnCode;
+@property (nonatomic, copy) NSString *Bm_FullName;
+@property (nonatomic, copy) NSString *checkstate;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ Bm_ModuleId : "f4769b9c-3d07-4c26-b05c-648deffd312b"
+ Bm_EnCode : "BIMModel"
+ Bm_FullName : "模型管理"
+ Bmbs
+ checkstate : "1"
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.m
new file mode 100644
index 0000000..db59959
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBProjectPower.m
@@ -0,0 +1,13 @@
+//
+//  PBProjectPower.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/9.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBProjectPower.h"
+
+@implementation PBProjectPower
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.h
new file mode 100644
index 0000000..35e9bfd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.h
@@ -0,0 +1,20 @@
+//
+//  PBResultModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/27.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBResultModel : NSObject
+@property (nonatomic, assign) int Type;
+@property (nonatomic, assign) int ErrorCode;
+@property (nonatomic, copy) NSString *Message;
+@property (nonatomic, strong)  id ResultData;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.m
new file mode 100644
index 0000000..4dcdd5d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Models/PBResultModel.m
@@ -0,0 +1,13 @@
+//
+//  PBResultModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/27.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBResultModel.h"
+
+@implementation PBResultModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.h b/IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.h
new file mode 100644
index 0000000..4d7472a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.h
@@ -0,0 +1,13 @@
+//
+//  PBNavigationController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBNavigationController : UINavigationController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.m b/IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.m
new file mode 100644
index 0000000..eff11e0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/NavigationController/PBNavigationController.m
@@ -0,0 +1,46 @@
+//
+//  PBNavigationController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBNavigationController.h"
+
+@interface PBNavigationController ()
+
+@end
+
+@implementation PBNavigationController
++ (void)initialize {
+//    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"bg_nav_back"] forBarMetrics:UIBarMetricsDefault];
+    UIBarButtonItem *item = [UIBarButtonItem appearance];
+    [item setTitleTextAttributes:@{NSForegroundColorAttributeName: IndicatedColor} forState:UIControlStateNormal];
+    [item setTitleTextAttributes:@{NSForegroundColorAttributeName: IndicatedColor} forState:UIControlStateHighlighted];
+    [item setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor lightGrayColor]} forState:UIControlStateDisabled];
+    [[UINavigationBar appearance] setTintColor:IndicatedColor];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    [self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:TitleColor}];
+    self.navigationBar.translucent = NO;
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.h b/IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.h
new file mode 100644
index 0000000..0638a6a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.h
@@ -0,0 +1,13 @@
+//
+//  PBAlertController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/27.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBAlertController : UIAlertController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.m b/IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.m
new file mode 100644
index 0000000..dd4a807
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/PBAlertController.m
@@ -0,0 +1,35 @@
+//
+//  PBAlertController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/27.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBAlertController.h"
+
+@interface PBAlertController ()
+@property (nonatomic, strong) UITapGestureRecognizer *closeGesture;
+@end
+
+@implementation PBAlertController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.closeGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(closeAlert:)];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    UIView *superView = self.view.superview;
+    if (![superView.gestureRecognizers containsObject:self.closeGesture]) {
+        [superView addGestureRecognizer:self.closeGesture];
+        superView.userInteractionEnabled = YES;
+    }
+}
+
+- (void)closeAlert:(UITapGestureRecognizer *) gesture{
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/PBComon.h b/IphoneBIMe/IphoneBIMe/Classes/Common/PBComon.h
new file mode 100644
index 0000000..da25760
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/PBComon.h
@@ -0,0 +1,63 @@
+//
+//  PBComon.h
+//  ProBIM
+//
+//  Created by zjf on 2017/12/19.
+//  Copyright © 2017年 ProBIM. All rights reserved.
+//nsnotificationcenter
+
+typedef enum : NSUInteger {
+    CREATOR,
+    MANAGER,
+    PARTICIPANT
+} RoleType;
+#define PBScreenWidth [[UIScreen mainScreen] bounds].size.width
+#define PBScreenHeight [UIScreen mainScreen].bounds.size.height
+#define  takeawayLeft_W   PBScreenWidth * (80.0/375)
+#define  takeawayRight_W  PBScreenWidth * (295.0/375)
+
+#define PBKeyWindow [UIApplication sharedApplication].keyWindow
+//把项目内tabbarcontroller
+#define PBNoteCenterDismissTabBarController @"PBNoteCenterDismissTabBarController"
+//新增质检定位选择后更新数据通知
+#define PBNoteCenterUpdatePositioning @"PBNoteCenterUpdatePositioning"
+//新增质检分部 分项 检验批选择后更新数据通知
+#define PBNoteCenterUpdateDivision @"PBNoteCenterUpdateDivision"
+//复检内容为合格后
+#define PBNoteCenterReInspectionQualified @"PBNoteCenterReInspectionQualified"
+//新增问题定位选择后数据更新通知
+#define PBNoteCenterIssueUpdatePositioning @"PBNoteCenterIssueUpdatePositioning"
+//检查音频文件播放完成的通知
+#define PBNoteCenterPlayOver @"PBNoteCenterPlayOver"
+//检查音频文件暂停播放的通知
+#define PBNoteCenterPlaySuspended @"PBNoteCenterPlaySuspended"
+//关联构件完成后更新通知
+#define PBNoteCenterUpdateArtifacts @"PBNoteCenterUpdateArtifacts"
+//检查人/整改人/验收人 选择后更新通知
+#define PBNoteCenterUpdatePerson @"PBNoteCenterUpdatePerson"
+//关联任务完成后更新通知
+#define PBNoteCenterUpdateTask @"PBNoteCenterUpdateTask"
+//任务进度选择任务后更新通知
+#define PBNoteCenterChooseTask @"PBNoteCenterChooseTask"
+///*      通知消息所需宏定义         */
+////MesType 大类
+//#define MsgType_Issue @"Issue"
+//#define MsgType_ExamineData  @"ExamineData"
+//#define MsgType_Model  @"Model"
+////Tritype 触发动作
+//#define Tritype_Created @"Created"
+//#define Tritype_Deleted @"Deleted"
+//#define Tritype_Updated @"Updated"
+//#define Tritype_Modified @"Modified"
+//#define Tritype_Moved @"Moved"
+//#define Tritype_Attached @"Attached"
+//#define Tritype_Dettached @"Dettached"
+////Triobjobjtype
+//#define Triobjobjtype_Comment @"Comment"
+//#define Triobjobjtype_Doc @"Doc"
+//#define Triobjobjtype_RequestReCheck @"RequestReCheck"
+//#define Triobjobjtype_ReCheck @"ReCheck"
+//现场数据 检查时状态选择为已合格
+#define statuChoosequalified @"statuChoosequalified"
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.h b/IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.h
new file mode 100644
index 0000000..f51f0ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.h
@@ -0,0 +1,13 @@
+//
+//  PBTabBarController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@interface PBTabBarController : UITabBarController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.m b/IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.m
new file mode 100644
index 0000000..e987ec3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/TabBarController/PBTabBarController.m
@@ -0,0 +1,150 @@
+//
+//  PBTabBarController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBTabBarController.h"
+#import "PBNavigationController.h"
+#import "PBProjectModel.h"
+#import "PBProjectPower.h"
+#import "AppDelegate.h"
+@interface PBTabBarController ()
+@property (nonatomic, strong) NSArray *powerArr;
+@end
+
+@implementation PBTabBarController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if(@available(iOS 13.0,*)){
+        UITabBarAppearance*appearance=[[UITabBarAppearance alloc]init];
+        // 背景色
+        appearance.backgroundColor=[UIColor whiteColor];
+        self.tabBar.standardAppearance=appearance;
+        if(@available(iOS 15.0,*)){
+            
+            //tabBaritem title选中状态颜色
+            appearance.stackedLayoutAppearance.selected.titleTextAttributes = @{NSForegroundColorAttributeName:PBColor(0, 122, 255)};
+            //tabBaritem title未选中状态颜色
+            appearance.stackedLayoutAppearance.normal.titleTextAttributes = @{NSForegroundColorAttributeName:PBColor(40, 58, 79)};
+            self.tabBar.scrollEdgeAppearance=appearance;
+    }}
+    self.view.backgroundColor = [UIColor whiteColor];
+    [PBNoteCenter addObserver:self selector:@selector(dismissTabBarController:) name:PBNoteCenterDismissTabBarController object:nil];
+    [self setTabBarColorStyle];
+}
+- (void)setTabBarColorStyle {
+    //tabBarItem title 选中颜色
+    NSMutableDictionary<NSAttributedStringKey, id> *selectedAttributes = [NSMutableDictionary dictionary];
+    selectedAttributes[NSForegroundColorAttributeName] = PBColor(0, 122, 255);
+    //tabBarItem title 未选中颜色
+    NSMutableDictionary<NSAttributedStringKey, id> *normalAttributes = [NSMutableDictionary dictionary];
+    normalAttributes[NSForegroundColorAttributeName] = PBColor(40, 58, 79);
+    if (@available(iOS 13.0, *)) {
+        UITabBarAppearance *tabBarAppearance = [[UITabBarAppearance alloc] init];
+        tabBarAppearance.stackedLayoutAppearance.selected.titleTextAttributes = selectedAttributes.copy;
+        tabBarAppearance.stackedLayoutAppearance.normal.titleTextAttributes = normalAttributes.copy;
+        self.tabBar.standardAppearance = tabBarAppearance;
+    } else {
+        //设置 tabBarItem title 颜色
+        for (UIViewController *vc in self.viewControllers) {
+            [vc.tabBarItem setTitleTextAttributes:normalAttributes.copy forState:UIControlStateNormal];
+            [vc.tabBarItem setTitleTextAttributes:selectedAttributes.copy forState:UIControlStateSelected];
+        }
+    }
+}
+#pragma mark - 添加子控制器的代码
+- (void)setupChildVcs {
+    UIViewController *bussinessController = [[PBNavigationController alloc] initWithRootViewController:[self controllerWith:@"PBBussinessViewController" title:@"业务" imageName:@"TabBar_bussiness"]];
+    
+    UIViewController *modelController = [[PBNavigationController alloc] initWithRootViewController:[self controllerWith:@"PBModelViewController" title:@"模型" imageName:@"TabBar_model"]];
+    
+    UIViewController *docController = [[PBNavigationController alloc] initWithRootViewController:[self controllerWith:@"PBDocListController" title:@"文档" imageName:@"TabBar_Doc"]];
+
+    UIViewController *issueController = [[PBNavigationController alloc] initWithRootViewController:[self controllerWith:@"PBIssueListViewController" title:@"协作" imageName:@"TabBar_Issue"]];
+    
+    UIViewController *examineController = [[PBNavigationController
+                                            alloc] initWithRootViewController:[self controllerWith:@"PBExamineListViewController" title:@"现场" imageName:@"TabBar_bussiness"]];
+    UIViewController *scheduleController = [[PBNavigationController alloc] initWithRootViewController:[self controllerWith:@"PBScheduleListViewController" title:@"进度" imageName:@"TabBar_Doc"]];
+    self.viewControllers = @[bussinessController, issueController, modelController, docController];
+}
+- (UIViewController *)controllerWith:(NSString *)className title:(NSString *)title imageName:(NSString *)imageName{
+    Class clz = NSClassFromString(className);
+    UIViewController *controller = [[clz alloc]init];
+    NSAssert([controller isKindOfClass:[UIViewController class]], @"%@ 写错了, 没有这个类", className);
+    controller.title = _projectModel.fullname;
+    return [self controller:controller WithTitle:title imageName:imageName];
+}
+- (UIViewController *)controller:(UIViewController *)controller WithTitle:(NSString *)title imageName:(NSString *)imageName{
+    controller.tabBarItem.title = title;
+    controller.tabBarItem.image = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    controller.tabBarItem.selectedImage = [[UIImage imageNamed:[NSString stringWithFormat:@"%@_select",imageName]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    [controller setValue:_projectModel forKey:@"projectModel"];
+    [controller setValue:self.powerArr forKey:@"powerArr"];
+    return controller;
+}
+- (void)dismissTabBarController:(NSNotification *)noti {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+- (void)dealloc{
+    [PBNoteCenter removeObserver:self];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+    [self loadAccount];
+//    [self setupChildVcs];
+}
+- (void)loadAccount {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetUserOrgFuncAuthWithOrganizeID:_projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        [YJProgressHUD hide];
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC);
+            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
+                [self dismissViewControllerAnimated:YES completion:nil];
+            });
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBProjectPower *power = [PBProjectPower yy_modelWithDictionary:obj];
+                [arrM addObject:power];
+            }
+            self.powerArr = arrM.copy;
+            AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+            appDelegate.powerArr = self.powerArr;
+            [self setupChildVcs];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC);
+            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
+                [self dismissViewControllerAnimated:YES completion:nil];
+            });
+        }
+    }];
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/BackNavItem.xib b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/BackNavItem.xib
new file mode 100644
index 0000000..6e7d28c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/BackNavItem.xib
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PBBackNavItem">
+            <rect key="frame" x="0.0" y="0.0" width="60" height="44"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0Gx-5p-9Oh">
+                    <rect key="frame" x="0.0" y="7" width="30" height="30"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                    <connections>
+                        <action selector="backNavItemAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="UdD-nm-rfg"/>
+                    </connections>
+                </button>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Wdq-Iw-kfM">
+                    <rect key="frame" x="18" y="0.0" width="42" height="44"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="18"/>
+                    <color key="textColor" red="0.25490196078431371" green="0.49803921568627452" blue="0.80392156862745101" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Project_nav_back" translatesAutoresizingMaskIntoConstraints="NO" id="pvC-ZH-4KY">
+                    <rect key="frame" x="0.0" y="12" width="12" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="12" id="VeZ-Fs-4FU"/>
+                    </constraints>
+                </imageView>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+            <constraints>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="bottom" secondItem="Wdq-Iw-kfM" secondAttribute="bottom" id="N1b-ld-ahW"/>
+                <constraint firstItem="Wdq-Iw-kfM" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="UJz-94-U0q"/>
+                <constraint firstItem="pvC-ZH-4KY" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="hsN-KZ-4xc"/>
+                <constraint firstItem="pvC-ZH-4KY" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="jgQ-qH-Pyo"/>
+                <constraint firstItem="Wdq-Iw-kfM" firstAttribute="trailing" secondItem="vUN-kp-3ea" secondAttribute="trailing" id="l9a-6e-G0b"/>
+                <constraint firstItem="pvC-ZH-4KY" firstAttribute="leading" secondItem="0Gx-5p-9Oh" secondAttribute="leading" id="lMP-1W-SrQ"/>
+                <constraint firstItem="pvC-ZH-4KY" firstAttribute="centerY" secondItem="0Gx-5p-9Oh" secondAttribute="centerY" id="lf7-8A-lXo"/>
+                <constraint firstItem="Wdq-Iw-kfM" firstAttribute="leading" secondItem="pvC-ZH-4KY" secondAttribute="trailing" constant="6" id="uba-cj-AYR"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <connections>
+                <outlet property="titleL" destination="Wdq-Iw-kfM" id="Zzj-Qw-3tI"/>
+            </connections>
+            <point key="canvasLocation" x="171.19999999999999" y="-146.62668665667167"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="Project_nav_back" width="12" height="20"/>
+    </resources>
+</document>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.h
new file mode 100644
index 0000000..20f3946
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.h
@@ -0,0 +1,14 @@
+//
+//  PBBackNavItem.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/30.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBBackNavItem : UIControl
+@property (nonatomic, copy) NSString *title;
++ (instancetype)backNacItem;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.m
new file mode 100644
index 0000000..907e417
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBBackNavItem.m
@@ -0,0 +1,37 @@
+//
+//  PBBackNavItem.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/30.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBBackNavItem.h"
+@interface PBBackNavItem()
+@property (weak, nonatomic) IBOutlet UILabel *titleL;
+
+@end
+@implementation PBBackNavItem
++ (instancetype)backNacItem {
+    return [[NSBundle mainBundle] loadNibNamed:@"BackNavItem" owner:nil options:nil].lastObject;
+}
+
+- (void)setTitle:(NSString *)title {
+    _title = title;
+    self.titleL.text = title;
+}
+
+- (IBAction)backNavItemAction:(id)sender {
+    [self sendActionsForControlEvents:UIControlEventTouchUpInside];
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.h
new file mode 100644
index 0000000..5753bc2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.h
@@ -0,0 +1,23 @@
+//
+//  PBDocShareView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/30.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBDocShareView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, strong) UIViewController *viewController;
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *desc;
+@property (nonatomic, copy) NSString *url;
+@property (nonatomic, strong) UIImage *image;
+- (void)show;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.m
new file mode 100644
index 0000000..0bccf83
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBDocShareView.m
@@ -0,0 +1,278 @@
+//
+//  PBDocShareView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/30.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocShareView.h"
+#import "PBShareBtn.h"
+#import "PBShareCell.h"
+#import "PBNetworkModel.h"
+#define ALineCount  4
+static NSString *const cellID = @"cellID";
+@interface PBDocShareView()<UICollectionViewDelegate, UICollectionViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, strong) NSMutableArray *dataArrM;
+@end
+@implementation PBDocShareView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    [self.bgView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@144);
+    }];
+    
+    UIButton *cancelBtn = [UIButton z_textButton:@"取消" fontSize:20.0 normalColor:TitleColor];
+    cancelBtn.backgroundColor = [UIColor whiteColor];
+    [cancelBtn addTarget:self action:@selector(cancelBtnAction)  forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:cancelBtn];
+    [cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@49);
+    }];
+}
+- (void)cancelBtnAction {
+    [self hidden];
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point=[[touches anyObject]locationInView:self];
+    CALayer *layer=[self.layer hitTest:point];
+    if (layer ==self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBDocShareView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = PBColor(242, 242, 242);
+    }
+    return _bgView;
+}
+
+- (UICollectionView *)collectionView {
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+        CGFloat itemW = PBScreenWidth / ALineCount;
+        layout.itemSize = CGSizeMake(itemW, 144);
+        layout.minimumLineSpacing = 0;
+        layout.minimumInteritemSpacing = 0;
+        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+        _collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+        [_collectionView registerClass:[PBShareCell class] forCellWithReuseIdentifier:cellID];
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+        _collectionView.backgroundColor = PBColor(242, 242, 242);
+    }
+    return _collectionView;
+    
+}
+- (NSMutableArray *)dataArrM {
+    if (_dataArrM == nil) {
+        _dataArrM = [[NSMutableArray alloc] init];
+        NSArray *titleArr = @[@"腾讯QQ", @"微信", @"朋友圈"];
+        NSArray *imageArr = @[@"Share_qq", @"Share_wechat", @"Share_moments"];
+        NSArray *numArr = @[@"QQ", @"WeChat", @"Moments"];
+        NSURL * qq_app_url = [NSURL URLWithString:@"mqq://"];
+        BOOL qqAli = [[UIApplication sharedApplication] canOpenURL:qq_app_url];
+        if (qqAli) {
+            NSDictionary *dict = @{
+                                   @"title" : titleArr[0],
+                                   @"image" : [UIImage imageNamed:imageArr[0]],
+                                   @"num" : numArr[0]
+                                   };
+            [_dataArrM addObject:dict];
+        }
+        NSURL * wechat_app_url = [NSURL URLWithString:@"weixin://"];
+        BOOL wechatAli = [[UIApplication sharedApplication] canOpenURL:wechat_app_url];
+        if (wechatAli) {
+            NSDictionary *dict = @{
+                                   @"title" : titleArr[1],
+                                   @"image" : [UIImage imageNamed:imageArr[1]],
+                                   @"num" : numArr[1]
+                                   };
+            NSDictionary *dict1 = @{
+                                    @"title" : titleArr[2],
+                                    @"image" : [UIImage imageNamed:imageArr[2]],
+                                    @"num" : numArr[2]
+                                    };
+            [_dataArrM addObject:dict];
+            [_dataArrM addObject:dict1];
+        }
+    }
+    return _dataArrM;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+- (void)setTitle:(NSString *)title {
+    _title = title;
+}
+- (void)setDesc:(NSString *)desc {
+    _desc = desc;
+}
+- (void)setImage:(UIImage *)image {
+    _image = image;
+}
+- (void)setUrl:(NSString *)url {
+    _url = url;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    return self.dataArrM.count;
+}
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBShareCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    cell.dict = self.dataArrM[indexPath.row];
+    return cell;
+}
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    [self hidden];
+    NSDictionary *dict = self.dataArrM[indexPath.row];
+    if ([[dict valueForKey:@"num"] isEqualToString:@"QQ"]) {
+        [self shareQQ];
+    }else if ([[dict valueForKey:@"num"] isEqualToString:@"WeChat"]) {
+        [self shareWeChat];
+    }else if ([[dict valueForKey:@"num"] isEqualToString:@"Moments"]) {
+        [self shareMoments];
+    }else {
+        
+    }
+}
+//分享到 QQ
+- (void)shareQQ {
+    UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.title descr:self.desc thumImage:self.image];
+    //设置网页地址
+    shareObject.webpageUrl = self.url;
+    //创建分享消息对象
+    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
+    //分享消息对象设置分享内容对象
+    messageObject.shareObject = shareObject;
+    /**
+     设置分享
+     @param data 分享返回信息
+     @param error 失败信息
+     @param UMSocialPlatformType 分享平台
+     */
+    [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_QQ messageObject:messageObject currentViewController:self.viewController completion:^(id data, NSError *error) {
+        if (error) {
+            UMSocialLogInfo(@"************Share fail with error %@*********",error);
+        }else{
+            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
+                UMSocialShareResponse *resp = data;
+                //分享结果消息
+                UMSocialLogInfo(@"response message is %@",resp.message);
+                //第三方原始返回的数据
+                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
+            }else{
+                UMSocialLogInfo(@"response data is %@",data);
+            }
+        }
+    }];
+}
+
+//分享到微信
+- (void)shareWeChat {
+    UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.title descr:self.desc thumImage:self.image];
+    //设置网页地址
+    shareObject.webpageUrl = self.url;
+    //创建分享消息对象
+    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
+    //分享消息对象设置分享内容对象
+    messageObject.shareObject = shareObject;
+    [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatSession messageObject:messageObject currentViewController:self.viewController completion:^(id data, NSError *error) {
+        if (error) {
+            UMSocialLogInfo(@"************Share fail with error %@*********",error);
+        }else{
+            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
+                UMSocialShareResponse *resp = data;
+                //分享结果消息
+                UMSocialLogInfo(@"response message is %@",resp.message);
+                //第三方原始返回的数据
+                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
+                
+            }else{
+                UMSocialLogInfo(@"response data is %@",data);
+            }
+        }
+        
+    }];
+    
+}
+
+//分享到朋友圈
+- (void)shareMoments {
+    UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.title descr:self.desc thumImage:self.image];
+    //设置网页地址
+    shareObject.webpageUrl = self.url;
+    //创建分享消息对象
+    UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
+    //分享消息对象设置分享内容对象
+    messageObject.shareObject = shareObject;
+    /**
+     设置分享
+     
+     @param data 分享返回信息
+     @param error 失败信息
+     @param UMSocialPlatformType 分享平台
+     */
+    [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatTimeLine messageObject:messageObject currentViewController:self.viewController completion:^(id data, NSError *error) {
+        if (error) {
+            UMSocialLogInfo(@"************Share fail with error %@*********",error);
+        }else{
+            if ([data isKindOfClass:[UMSocialShareResponse class]]) {
+                UMSocialShareResponse *resp = data;
+                //分享结果消息
+                UMSocialLogInfo(@"response message is %@",resp.message);
+                //第三方原始返回的数据
+                UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
+                
+            }else{
+                UMSocialLogInfo(@"response data is %@",data);
+            }
+        }
+    }];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.h
new file mode 100644
index 0000000..240acef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.h
@@ -0,0 +1,14 @@
+//
+//  PBPromptView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/7.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBPromptView : UIView
+@property (nonatomic, strong) UIImageView *imageV;
+@property (nonatomic, strong) UILabel *textL;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.m
new file mode 100644
index 0000000..c34b669
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBPromptView.m
@@ -0,0 +1,39 @@
+//
+//  PBPromptView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/7.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBPromptView.h"
+
+@interface PBPromptView()
+@end
+@implementation PBPromptView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    self.imageV = [[UIImageView alloc] init];
+    [self.imageV sizeToFit];
+    [self addSubview:self.imageV];
+    [self.imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(199);
+        make.centerX.equalTo(self);
+    }];
+    self.textL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:153 G:153 B:153] isBold:NO Font:TitleFontSize];
+    self.textL.textAlignment = NSTextAlignmentCenter;
+    [self addSubview:self.textL];
+    [self.textL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.imageV.mas_bottom).offset(40);
+        make.left.equalTo(self).offset(20);
+        make.right.equalTo(self).offset(-20);
+    }];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.h
new file mode 100644
index 0000000..52097eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.h
@@ -0,0 +1,19 @@
+//
+//  PBShareBtn.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBShareBtn : UIControl
+@property (nonatomic, strong) UIImage *image;
+@property (nonatomic, copy) NSString *title;
++ (instancetype)shareBtn;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.m
new file mode 100644
index 0000000..0c81ca6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.m
@@ -0,0 +1,38 @@
+//
+//  PBShareBtn.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBShareBtn.h"
+@interface PBShareBtn()
+@property (weak, nonatomic) IBOutlet UIImageView *imageV;
+@property (weak, nonatomic) IBOutlet UILabel *lableL;
+
+@end
+@implementation PBShareBtn
++ (instancetype)shareBtn {
+    return [[NSBundle mainBundle] loadNibNamed:@"PBShareBtn" owner:nil options:nil].lastObject;
+}
+- (IBAction)clickBtn:(id)sender {
+    [self sendActionsForControlEvents:UIControlEventTouchUpInside];
+}
+- (void)setImage:(UIImage *)image {
+    _image = image;
+    self.imageV.image = image;
+}
+-(void)setTitle:(NSString *)title {
+    _title = title;
+    self.lableL.text = title;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.xib b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.xib
new file mode 100644
index 0000000..3db3cf9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareBtn.xib
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PBShareBtn">
+            <rect key="frame" x="0.0" y="0.0" width="100" height="22"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Loa-ec-o9m">
+                    <rect key="frame" x="0.0" y="0.0" width="22" height="22"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="22" id="5N8-44-Na4"/>
+                        <constraint firstAttribute="height" constant="22" id="9SH-OO-RKu"/>
+                    </constraints>
+                </imageView>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3Rd-Ea-ein">
+                    <rect key="frame" x="32" y="0.0" width="68" height="22"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                    <color key="textColor" red="0.26666666666666666" green="0.26666666666666666" blue="0.26666666666666666" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="j7z-YY-HDL">
+                    <rect key="frame" x="0.0" y="0.0" width="100" height="22"/>
+                    <connections>
+                        <action selector="clickBtn:" destination="iN0-l3-epB" eventType="touchUpInside" id="50Y-qH-GY5"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="3Rd-Ea-ein" secondAttribute="trailing" id="COe-TM-yIv"/>
+                <constraint firstAttribute="bottom" secondItem="j7z-YY-HDL" secondAttribute="bottom" id="EiR-oH-nrI"/>
+                <constraint firstItem="3Rd-Ea-ein" firstAttribute="leading" secondItem="Loa-ec-o9m" secondAttribute="trailing" constant="10" id="IZz-3p-lkt"/>
+                <constraint firstItem="Loa-ec-o9m" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="URF-oD-ws1"/>
+                <constraint firstItem="j7z-YY-HDL" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="alc-ym-1bQ"/>
+                <constraint firstItem="Loa-ec-o9m" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="fpv-yg-F5R"/>
+                <constraint firstItem="Loa-ec-o9m" firstAttribute="bottom" secondItem="j7z-YY-HDL" secondAttribute="bottom" id="gAM-Bg-wsb"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="j7z-YY-HDL" secondAttribute="trailing" id="gO5-hj-TAm"/>
+                <constraint firstItem="3Rd-Ea-ein" firstAttribute="bottom" secondItem="vUN-kp-3ea" secondAttribute="bottom" id="her-Ab-OmF"/>
+                <constraint firstItem="3Rd-Ea-ein" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" id="pwd-6J-d6r"/>
+                <constraint firstItem="j7z-YY-HDL" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="sQl-cK-v1Q"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <connections>
+                <outlet property="imageV" destination="Loa-ec-o9m" id="BfF-n3-AKy"/>
+                <outlet property="lableL" destination="3Rd-Ea-ein" id="Pe7-9R-xlj"/>
+            </connections>
+            <point key="canvasLocation" x="-67.200000000000003" y="-46.776611694152926"/>
+        </view>
+    </objects>
+</document>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.h
new file mode 100644
index 0000000..50257ed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.h
@@ -0,0 +1,17 @@
+//
+//  PBShareCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBShareCell : UICollectionViewCell
+@property (nonatomic, strong) NSDictionary *dict;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.m
new file mode 100644
index 0000000..4a3a006
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareCell.m
@@ -0,0 +1,44 @@
+//
+//  PBShareCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBShareCell.h"
+@interface PBShareCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UILabel *titleL;
+@end
+@implementation PBShareCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self.contentView);
+        make.centerY.equalTo(self.contentView).offset(-12);
+        make.size.mas_equalTo(CGSizeMake(50, 50));
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV.mas_bottom).offset(15);
+        make.centerX.equalTo(self.contentView);
+    }];
+    self.imageV = imageV;
+    self.titleL = titleL;
+}
+- (void)setDict:(NSDictionary *)dict {
+    _dict = dict;
+    self.imageV.image = [dict valueForKey:@"image"];
+    self.titleL.text = [dict valueForKey:@"title"];
+    
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.h b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.h
new file mode 100644
index 0000000..319e49d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.h
@@ -0,0 +1,27 @@
+//
+//  PBShareView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBShareView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, copy) NSString *projectID;
+@property (nonatomic, copy) NSString *modelID;
+@property (nonatomic, copy) NSString *viewID;
+@property (nonatomic, copy) NSString *viewPointID;
+@property (nonatomic, strong) UIViewController *viewController;
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *desc;
+@property (nonatomic, strong) UIImage *image;
+@property (nonatomic, copy) NSString *docId;
+- (void)show;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.m b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.m
new file mode 100644
index 0000000..c86a51c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Common/Views/PBShareView.m
@@ -0,0 +1,440 @@
+//
+//  PBShareView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/10/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBShareView.h"
+#import "PBShareBtn.h"
+#import "PBShareCell.h"
+#import "PBNetworkModel.h"
+#define ALineCount  4
+static NSString *const cellID = @"cellID";
+@interface PBShareView()<UICollectionViewDelegate, UICollectionViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) NSMutableArray *btnArrM;
+@property (nonatomic, assign) NSInteger btnSelectIndex;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, strong) NSMutableArray *dataArrM;
+@end
+@implementation PBShareView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        self.btnSelectIndex = 2;
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UILabel *validityDateL = [UILabel z_labelWithText:@"文件分享有效期" Color:DescColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:validityDateL];
+    [validityDateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(16);
+        make.left.equalTo(self.bgView).offset(30);
+        make.height.equalTo(@20);
+    }];
+    NSArray *arr = @[@"1天", @"7天", @"永久有效"];
+    for (NSInteger i = 0; i < 3; i++) {
+        PBShareBtn *btn = [PBShareBtn shareBtn];
+        btn.tag = 100 + i;
+        if (i == 2) {
+            btn.image = [UIImage imageNamed:@"Share_periodValidity_selected"];
+        }else {
+            btn.image = [UIImage imageNamed:@"Share_periodValidity_normal"];
+        }
+        btn.title = arr[i];
+        [self.bgView addSubview:btn];
+        [btn addTarget:self action:@selector(clickAction:) forControlEvents:UIControlEventTouchUpInside];
+        if (i == 0) {
+            [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.top.equalTo(validityDateL.mas_bottom).offset(16);
+                make.left.equalTo(self.bgView).offset(40);
+                make.width.equalTo(@100);
+            }];
+        }else if (i == 1){
+            [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.top.equalTo(validityDateL.mas_bottom).offset(16);
+                make.centerX.equalTo(self.bgView);
+                make.width.equalTo(@100);
+            }];
+        }else {
+            [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.top.equalTo(validityDateL.mas_bottom).offset(16);
+                make.right.equalTo(self.bgView).offset(-39);
+                make.width.equalTo(@100);
+            }];
+        }
+        [self.btnArrM addObject:btn];
+    }
+    UIView *lineV = [[UIView alloc] init];
+    lineV.backgroundColor = [UIColor z_colorWithR:221 G:221 B:221];
+    [self.bgView addSubview:lineV];
+    [lineV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(96);
+        make.left.equalTo(self.bgView).offset(43);
+        make.right.equalTo(self.bgView).offset(32);
+        make.height.equalTo(@1);
+    }];
+    [self.bgView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lineV.mas_bottom);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@144);
+    }];
+    
+    UIButton *cancelBtn = [UIButton z_textButton:@"取消" fontSize:20.0 normalColor:TitleColor];
+    cancelBtn.backgroundColor = [UIColor whiteColor];
+    [cancelBtn addTarget:self action:@selector(cancelBtnAction)  forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:cancelBtn];
+    [cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@49);
+    }];
+}
+- (void)cancelBtnAction {
+    [self hidden];
+}
+- (void)clickAction:(PBShareBtn *)btn {
+    if ((btn.tag - 100) == self.btnSelectIndex) {
+        return;
+    }
+    btn.image = [UIImage imageNamed:@"Share_periodValidity_selected"];
+    PBShareBtn *shareBtn = self.btnArrM[self.btnSelectIndex];
+    shareBtn.image = [UIImage imageNamed:@"Share_periodValidity_normal"];
+    self.btnSelectIndex = btn.tag - 100;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point=[[touches anyObject]locationInView:self];
+    CALayer *layer=[self.layer hitTest:point];
+    if (layer ==self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBShareView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = PBColor(242, 242, 242);
+    }
+    return _bgView;
+}
+- (NSMutableArray *)btnArrM {
+    if (_btnArrM == nil) {
+        _btnArrM = [[NSMutableArray alloc] init];
+    }
+    return _btnArrM;
+}
+- (UICollectionView *)collectionView {
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+        CGFloat itemW = PBScreenWidth / ALineCount;
+        layout.itemSize = CGSizeMake(itemW, 144);
+        layout.minimumLineSpacing = 0;
+        layout.minimumInteritemSpacing = 0;
+        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+        _collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+        [_collectionView registerClass:[PBShareCell class] forCellWithReuseIdentifier:cellID];
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+        _collectionView.backgroundColor = PBColor(242, 242, 242);
+    }
+    return _collectionView;
+
+}
+- (NSMutableArray *)dataArrM {
+    if (_dataArrM == nil) {
+        _dataArrM = [[NSMutableArray alloc] init];
+        NSArray *titleArr = @[@"腾讯QQ", @"复制私密链接", @"微信", @"朋友圈"];
+        NSArray *imageArr = @[@"Share_qq", @"Share_private", @"Share_wechat", @"Share_moments"];
+        NSArray *numArr = @[@"QQ", @"Private", @"WeChat", @"Moments"];
+        NSURL * qq_app_url = [NSURL URLWithString:@"mqq://"];
+        BOOL qqAli = [[UIApplication sharedApplication] canOpenURL:qq_app_url];
+        if (qqAli) {
+            NSDictionary *dict = @{
+                                   @"title" : titleArr[0],
+                                   @"image" : [UIImage imageNamed:imageArr[0]],
+                                   @"num" : numArr[0]
+                                   };
+            [_dataArrM addObject:dict];
+        }
+        NSDictionary *dict = @{
+                               @"title" : titleArr[1],
+                               @"image" : [UIImage imageNamed:imageArr[1]],
+                               @"num" : numArr[1]
+                               };
+        [_dataArrM addObject:dict];
+        NSURL * wechat_app_url = [NSURL URLWithString:@"weixin://"];
+        BOOL wechatAli = [[UIApplication sharedApplication] canOpenURL:wechat_app_url];
+        if (wechatAli) {
+            NSDictionary *dict = @{
+                                   @"title" : titleArr[2],
+                                   @"image" : [UIImage imageNamed:imageArr[2]],
+                                   @"num" : numArr[2]
+                                   };
+            NSDictionary *dict1 = @{
+                                   @"title" : titleArr[3],
+                                   @"image" : [UIImage imageNamed:imageArr[3]],
+                                   @"num" : numArr[3]
+                                   };
+            [_dataArrM addObject:dict];
+            [_dataArrM addObject:dict1];
+        }
+    }
+    return _dataArrM;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+- (void)setProjectID:(NSString *)projectID {
+    _projectID = projectID;
+}
+- (void)setModelID:(NSString *)modelID {
+    _modelID = modelID;
+}
+- (void)setViewController:(UIViewController *)viewController {
+    _viewController = viewController;
+}
+- (void)setTitle:(NSString *)title {
+    _title = title;
+}
+- (void)setDesc:(NSString *)desc {
+    _desc = desc;
+}
+- (void)setImage:(UIImage *)image {
+    _image = image;
+}
+- (void)setViewID:(NSString *)viewID {
+    _viewID = viewID;
+}
+- (void)setViewPointID:(NSString *)viewPointID {
+    _viewPointID = viewPointID;
+}
+- (void)setDocId:(NSString *)docId {
+    _docId = docId;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    return self.dataArrM.count;
+}
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBShareCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    cell.dict = self.dataArrM[indexPath.row];
+    return cell;
+}
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    [self hidden];
+    NSString *hasRandomPwd = @"0";
+    NSDictionary *data = self.dataArrM[indexPath.row];
+    if ([[data valueForKey:@"num"] isEqualToString:@"Private"]) {
+        hasRandomPwd = @"1";
+    }
+    NSString *dayCount;
+    switch (self.btnSelectIndex) {
+        case 0:
+            dayCount = @"1";
+            break;
+        case 1:
+            dayCount = @"7";
+            break;
+        case 2:
+            dayCount = @"-1";
+            break;
+        default:
+            break;
+    }
+    [YJProgressHUD showProgress:@"" inView:self];
+    if (_docId) {
+        [[PBNetworkTools sharedTools] RequestShareUrlWithBIMComposerID:self.projectID andPrivilegeStr:@"Download" andDocIds:self.docId andHasRandomPwd:hasRandomPwd andDaycount:dayCount andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"生成连接失败" inView:self];
+                return;
+            }
+            [YJProgressHUD hide];
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                NSDictionary *dict = networkModel.Data;
+                NSString *url = [NSString stringWithFormat:@"%@/#/LinkShare/DocShare/Index?SessionId=%@",WebUrl, [dict valueForKey:@"shd_SessionId"]];
+                if ([[data valueForKey:@"num"] isEqualToString:@"QQ"]) {
+                    [self shareQQWithUrl:url];
+                }else if ([[data valueForKey:@"num"] isEqualToString:@"Private"]) {
+                    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
+                    pasteboard.string = [NSString stringWithFormat:@"链接:%@ 密码:%@",url,[dict valueForKey:@"shd_Pwd"]];
+                    [YJProgressHUD showMessage:@"已复制到剪切板" inView:self];
+                }else if([[data valueForKey:@"num"] isEqualToString:@"WeChat"]) {
+                    [self shareWeChatWithUrl:url];
+                }else if([[data valueForKey:@"num"]isEqualToString:@"Moments"]) {
+                    [self shareMomentsWithUrl:url];
+                }else {
+                    [YJProgressHUD showMessage:@"分享失败" inView:nil];
+                }
+            }else {
+                [YJProgressHUD showMessage:@"生成连接失败" inView:nil];
+            }
+                    
+        }];
+    }else {
+        [[PBNetworkTools sharedTools] RequestShareUrlWithProjectId:self.projectID andModelId:self.modelID andViewID:self.viewID andViewpointID:self.viewPointID andHasRandomPwd:hasRandomPwd andDaycount:dayCount andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"生成连接失败" inView:self];
+                return;
+            }
+            [YJProgressHUD hide];
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                NSDictionary *dict = networkModel.Data;
+                NSString *url = [NSString stringWithFormat:@"%@%@",WebUrl, [dict valueForKey:@"url"]];
+                if ([[data valueForKey:@"num"] isEqualToString:@"QQ"]) {
+                    [self shareQQWithUrl:url];
+                }else if ([[data valueForKey:@"num"] isEqualToString:@"Private"]) {
+                    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
+                    pasteboard.string = [NSString stringWithFormat:@"链接:%@ 密码:%@",url,[dict valueForKey:@"pwd"]];
+                    [YJProgressHUD showMessage:@"已复制到剪切板" inView:self];
+                }else if([[data valueForKey:@"num"] isEqualToString:@"WeChat"]) {
+                    [self shareWeChatWithUrl:url];
+                }else if([[data valueForKey:@"num"]isEqualToString:@"Moments"]) {
+                    [self shareMomentsWithUrl:url];
+                }else {
+                    [YJProgressHUD showMessage:@"分享失败" inView:nil];
+                }
+            }else {
+                [YJProgressHUD showMessage:@"生成连接失败" inView:nil];
+            }
+        }];
+    }
+}
+//分享到 QQ
+- (void)shareQQWithUrl:(NSString *)url {
+        UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.title descr:self.desc thumImage:self.image];
+        //设置网页地址
+        shareObject.webpageUrl = url;
+        //创建分享消息对象
+        UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
+        //分享消息对象设置分享内容对象
+        messageObject.shareObject = shareObject;
+        /**
+         设置分享
+         @param data 分享返回信息
+         @param error 失败信息
+         @param UMSocialPlatformType 分享平台
+         */
+        [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_QQ messageObject:messageObject currentViewController:self.viewController completion:^(id data, NSError *error) {
+            if (error) {
+                UMSocialLogInfo(@"************Share fail with error %@*********",error);
+            }else{
+                if ([data isKindOfClass:[UMSocialShareResponse class]]) {
+                    UMSocialShareResponse *resp = data;
+                    //分享结果消息
+                    UMSocialLogInfo(@"response message is %@",resp.message);
+                    //第三方原始返回的数据
+                    UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
+                }else{
+                    UMSocialLogInfo(@"response data is %@",data);
+                }
+            }
+        }];
+}
+
+//分享到微信
+- (void)shareWeChatWithUrl:(NSString *)url {
+        UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.title descr:self.desc thumImage:self.image];
+        //设置网页地址
+        shareObject.webpageUrl = url;
+        //创建分享消息对象
+        UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
+        //分享消息对象设置分享内容对象
+        messageObject.shareObject = shareObject;
+        [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatSession messageObject:messageObject currentViewController:self.viewController completion:^(id data, NSError *error) {
+    
+            if (error) {
+                UMSocialLogInfo(@"************Share fail with error %@*********",error);
+            }else{
+                if ([data isKindOfClass:[UMSocialShareResponse class]]) {
+                    UMSocialShareResponse *resp = data;
+                    //分享结果消息
+                    UMSocialLogInfo(@"response message is %@",resp.message);
+                    //第三方原始返回的数据
+                    UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
+    
+                }else{
+                    UMSocialLogInfo(@"response data is %@",data);
+                }
+            }
+    
+        }];
+
+}
+
+//分享到朋友圈
+- (void)shareMomentsWithUrl:(NSString *)url {
+        UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:self.title descr:self.desc thumImage:self.image];
+        //设置网页地址
+        shareObject.webpageUrl = url;
+        //创建分享消息对象
+        UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
+        //分享消息对象设置分享内容对象
+        messageObject.shareObject = shareObject;
+        /**
+         设置分享
+    
+         @param data 分享返回信息
+         @param error 失败信息
+         @param UMSocialPlatformType 分享平台
+         */
+        [[UMSocialManager defaultManager] shareToPlatform:UMSocialPlatformType_WechatTimeLine messageObject:messageObject currentViewController:self.viewController completion:^(id data, NSError *error) {
+            if (error) {
+                UMSocialLogInfo(@"************Share fail with error %@*********",error);
+            }else{
+                if ([data isKindOfClass:[UMSocialShareResponse class]]) {
+                    UMSocialShareResponse *resp = data;
+                    //分享结果消息
+                    UMSocialLogInfo(@"response message is %@",resp.message);
+                    //第三方原始返回的数据
+                    UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
+    
+                }else{
+                    UMSocialLogInfo(@"response data is %@",data);
+                }
+            }
+        }];
+}
+
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.h
new file mode 100644
index 0000000..133e585
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.h
@@ -0,0 +1,13 @@
+//
+//  PBAgreementViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/5.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBAgreementViewController : UIViewController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.m
new file mode 100644
index 0000000..00fcbba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBAgreementViewController.m
@@ -0,0 +1,104 @@
+//
+//  PBAgreementViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/5.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBAgreementViewController.h"
+#import <WebKit/WebKit.h>
+
+@interface PBAgreementViewController ()<WKNavigationDelegate, WKUIDelegate>
+@property (nonatomic, strong) WKWebView *wkWebView;
+@property (nonatomic, strong) UIProgressView *progressView;
+@end
+
+@implementation PBAgreementViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.title = @"管理平台用户协议";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backNavAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+- (void)setupUI {
+    self.progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(0, 64, MainScreenWidth, 2)];
+    self.progressView.tintColor = WarningColor;
+    self.progressView.trackTintColor = [UIColor whiteColor];
+    [self.view addSubview:self.progressView];
+    
+    [self.wkWebView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
+    NSString *urlString = @"http://policy.biaddti.com/policy.pdf";
+    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
+    request.timeoutInterval = 15.0f;
+    [self.wkWebView loadRequest:request];
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
+    if (object == self.wkWebView && [keyPath isEqualToString:@"estimatedProgress"]) {
+        CGFloat newprogress = [[change objectForKey:NSKeyValueChangeNewKey] doubleValue];
+        self.progressView.alpha = 1.0f;
+        [self.progressView setProgress:newprogress animated:YES];
+        if (newprogress >= 1.0f) {
+            [UIView animateWithDuration:0.1f
+                                  delay:0.1f
+                                options:UIViewAnimationOptionCurveEaseOut
+                             animations:^{
+                                 self.progressView.alpha = 0.0f;
+                             }
+                             completion:^(BOOL finished) {
+                                 [self.progressView setProgress:0 animated:NO];
+                             }];
+        }
+    } else {
+        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
+    }
+}
+
+#pragma mark - WKWKNavigationDelegate Methods
+//开始加载
+- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
+    self.progressView.hidden = NO;
+    [YJProgressHUD showProgress:@"" inView:self.view];
+}
+
+//加载完成
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
+    [YJProgressHUD hide];
+}
+
+//加载失败
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
+    [YJProgressHUD showFailed:@"加载失败" inview:self.view];
+}
+
+//页面跳转
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
+    decisionHandler(WKNavigationActionPolicyAllow);
+}
+
+- (WKWebView *)wkWebView {
+    if (!_wkWebView) {
+        _wkWebView = [[WKWebView alloc] initWithFrame:self.view.bounds];
+        _wkWebView.navigationDelegate = self;
+        _wkWebView.UIDelegate = self;
+        [self.view addSubview:_wkWebView];
+    }
+    return _wkWebView;
+}
+
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.h b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.h
new file mode 100644
index 0000000..fc1b3e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.h
@@ -0,0 +1,19 @@
+//
+//  PBEnterpriseCodeController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/6/12.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBEnterpriseCodeController : UIViewController
+@property (nonatomic, copy) void (^SetCodeBlock)(NSDictionary *obj);
+@property (nonatomic, copy) void (^UpdataCodeBlock)(NSInteger index);
+@property (nonatomic, copy) void (^DeleteCodeBlock)(NSInteger index);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.m b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.m
new file mode 100644
index 0000000..00a827a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBEnterpriseCodeController.m
@@ -0,0 +1,317 @@
+//
+//  PBEnterpriseCodeController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/6/12.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBEnterpriseCodeController.h"
+#import "PBCodeTableViewCell.h"
+#import "PBInputCodeTableViewCell.h"
+static NSString *const CellID = @"CellID";
+static NSString *const InputCellID = @"InputCellID";
+@interface PBEnterpriseCodeController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, weak) UILabel *codeTieleL;
+@property (nonatomic, weak) UIView *codeBgV;
+@property (nonatomic, strong) NSMutableDictionary *inputCellDict;
+@property (nonatomic, assign) NSInteger currentSelectIndex;
+@end
+
+@implementation PBEnterpriseCodeController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    NSArray *arr = [NSString getApiArrData];
+    self.dataList = arr.mutableCopy;
+    [self setupUI];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PromptColor;
+    self.title = @"企业服务";
+    
+    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"arrow"] style:UIBarButtonItemStylePlain target:self action:@selector(cancelAction)];
+    self.navigationItem.leftBarButtonItem = leftItem;
+    UIView *topView = [self creatHeadView];
+ 
+       self.tableView.backgroundColor = PromptColor;
+       self.tableView.rowHeight = 166;
+       [self.tableView registerClass:[PBCodeTableViewCell class] forCellReuseIdentifier:CellID];
+       [self.tableView registerClass:[PBInputCodeTableViewCell class] forCellReuseIdentifier:InputCellID];
+//       self.tableView.delegate = self;
+//       self.tableView.dataSource = self;
+       self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+       self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+//       [self.view addSubview:self.tableView];
+       [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+           make.top.equalTo(topView.mas_bottom);
+           make.bottom.equalTo(self.view);
+           make.left.equalTo(self.view).offset(20);
+           make.right.equalTo(self.view).offset(-20);
+       }];
+    
+
+//    self.tableView = [[UITableView alloc] init];
+//    self.tableView.backgroundColor = PromptColor;
+//    self.tableView.rowHeight = 166;
+//    [self.tableView registerClass:[PBCodeTableViewCell class] forCellReuseIdentifier:CellID];
+//    [self.tableView registerClass:[PBInputCodeTableViewCell class] forCellReuseIdentifier:InputCellID];
+//    self.tableView.delegate = self;
+//    self.tableView.dataSource = self;
+//    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+//    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+//    [self.view addSubview:self.tableView];
+//    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(topView.mas_bottom);
+//        make.left.right.bottom.equalTo(self.view);
+//    }];
+//    self.tableView.contentInset = UIEdgeInsetsMake(6, 0, 0, 0);
+}
+- (void)cancelAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == (self.dataList.count - 1)) {
+        PBInputCodeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:InputCellID forIndexPath:indexPath];
+        cell.dict = self.inputCellDict;
+        cell.GetEnterpriseBlock = ^(NSString * _Nonnull code) {
+            [self getEnterpriseWithCode:code];
+        };
+        cell.SolveErr = ^{
+            [self.inputCellDict setValue:@"" forKey:@"err"];
+        };
+        return cell;
+    }else {
+        PBCodeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+        cell.dict = self.dataList[indexPath.row + 1];
+        return cell;
+    }
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == (self.dataList.count - 1)) {
+        return;
+    }
+    if (self.UpdataCodeBlock) {
+        self.UpdataCodeBlock(indexPath.row + 1);
+       }
+       NSArray *arr = [NSString getApiArrData];
+       self.dataList = arr.mutableCopy;
+       [self setHeaderViewCheck];
+       [self.tableView reloadData];
+}
+
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == self.dataList.count - 1) {
+        return NO;
+    }
+    NSDictionary *dict = self.dataList[indexPath.row + 1];
+    if ([[dict valueForKey:@"Check"] isEqualToString:@"1"]) {
+        return NO;
+    }
+    return YES;
+}
+- ( UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UIContextualAction *deleteRowAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
+        [self.dataList removeObjectAtIndex:indexPath.row + 1];
+        completionHandler (YES);
+        [self.tableView reloadData];
+        if (self.DeleteCodeBlock) {
+            self.DeleteCodeBlock(indexPath.row + 1);
+        }
+    }];
+    deleteRowAction.image = [UIImage imageNamed:@"code_delete"];
+    deleteRowAction.backgroundColor = PromptColor;
+    UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]];
+    return config;
+}
+
+- (void)selectDefault:(UITapGestureRecognizer *)tap {
+    if (self.UpdataCodeBlock) {
+        self.UpdataCodeBlock(0);
+    }
+    NSArray *arr = [NSString getApiArrData];
+    self.dataList = arr.mutableCopy;
+    [self setHeaderViewCheck];
+    [self.tableView reloadData];
+}
+- (void)getEnterpriseWithCode:(NSString *)code {
+    if ([code isEqualToString:@""]) {
+        return;
+    }
+    for (NSDictionary *obj in self.dataList) {
+        NSString *haveCode = [obj valueForKey:@"Code"];
+        if ([code isEqualToString:haveCode]) {
+            [YJProgressHUD showMessage:@"已存在此编码" inView:self.view];
+            return;
+        }
+    }
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetUrlsByCodeWithCode:code andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"设置企业编码失败" inView:self.view];
+            [self codeErrWith:code];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            NSDictionary *dict = networkModel.Data;
+            NSMutableDictionary *dictM = dict.mutableCopy;
+            [dictM setObject:code forKey:@"Code"];
+            [dictM setObject:@"1" forKey:@"Check"];
+            if (self.SetCodeBlock) {
+                self.SetCodeBlock(dictM.copy);
+            }
+            NSArray *arr = [NSString getApiArrData];
+            self.dataList = arr.mutableCopy;
+            [self setHeaderViewCheck];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            [self codeErrWith:code];
+        }
+    }];
+}
+- (void)codeErrWith:(NSString *)errCode {
+    [self.inputCellDict setValue:errCode forKey:@"code"];
+    [self.inputCellDict setValue:@"err" forKey:@"err"];
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:(self.dataList.count - 1) inSection:0];
+    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (UIView *)creatHeadView {
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = PromptColor;
+    [self.view addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.height.equalTo(@232);
+    }];
+    UIView *codeBgV = [[UIView alloc] init];
+    codeBgV.backgroundColor = [UIColor whiteColor];
+    [bgV addSubview:codeBgV];
+    [codeBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(20);
+        make.left.equalTo(bgV).offset(20);
+        make.right.equalTo(bgV).offset(-20);
+        make.bottom.equalTo(bgV).offset(-60);
+    }];
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectDefault:)];
+    codeBgV.userInteractionEnabled = YES;
+    [codeBgV addGestureRecognizer:tap];
+    [codeBgV circleViewWithRadius:6];
+    UIImageView *logoImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo_unknown"]];
+    [bgV addSubview:logoImageV];
+    [logoImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(codeBgV).offset(26);
+        make.centerX.equalTo(codeBgV);
+        make.size.mas_equalTo(CGSizeMake(36, 36));
+    }];
+    UIImageView *checkIamgeV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"code_check"]];
+    [bgV addSubview:checkIamgeV];
+    [checkIamgeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(codeBgV);
+        make.right.equalTo(codeBgV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UILabel *codeTieleL = [UILabel z_labelWithText:@"管理平台" Color:TitleColor isBold:YES Font:TitleFontSize];
+    codeTieleL.textAlignment = NSTextAlignmentCenter;
+    [bgV addSubview:codeTieleL];
+    [codeTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(logoImageV.mas_bottom).offset(26);
+        make.left.equalTo(codeBgV).offset(20);
+        make.right.equalTo(codeBgV).offset(-20);
+        make.height.equalTo(@18);
+    }];
+    
+    UILabel *theirOwnL = [UILabel z_labelWithText:@"自有企业服务" Color:TitleColor isBold:YES Font:13];
+    theirOwnL.textAlignment = NSTextAlignmentCenter;
+    [bgV addSubview:theirOwnL];
+    [theirOwnL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(codeBgV.mas_bottom).offset(30);
+        make.size.mas_equalTo(CGSizeMake(84, 16));
+        make.centerX.equalTo(codeBgV);
+    }];
+    UIView *leftLin = [[UIView alloc] init];
+    leftLin.backgroundColor = PBColor(233, 235, 237);
+    [bgV addSubview:leftLin];
+    [leftLin mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(theirOwnL);
+        make.left.equalTo(codeBgV);
+        make.right.equalTo(theirOwnL.mas_left).offset(-15);
+        make.height.equalTo(@1);
+    }];
+    UIView *rightLin = [[UIView alloc] init];
+    rightLin.backgroundColor = PBColor(233, 235, 237);
+    [bgV addSubview:rightLin];
+    [rightLin mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(theirOwnL);
+        make.left.equalTo(theirOwnL.mas_right).offset(15);
+        make.right.equalTo(codeBgV);
+        make.height.equalTo(@1);
+    }];
+    self.codeBgV = codeBgV;
+    self.codeTieleL = codeTieleL;
+    [self setHeaderViewCheck];
+    return bgV;
+}
+- (UITableView *)tableView {
+    if (!_tableView) {
+        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
+        [self addChildViewController:tvc];
+        _tableView = tvc.tableView;
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        if (@available(iOS 15.0, *)) {
+            _tableView.sectionHeaderTopPadding = 0;
+        }
+        [self.view addSubview:_tableView];
+     }
+     return _tableView;
+}
+- (void)setHeaderViewCheck {
+    if (self.dataList.count > 0) {
+        NSDictionary *dict = self.dataList[0];
+        NSString *check = [dict valueForKey:@"Check"];
+        if ([check isEqualToString:@"1"]) {
+            self.codeBgV.backgroundColor = PBColor(0,122, 255);
+            self.codeTieleL.textColor = [UIColor whiteColor];
+        }else {
+            self.codeBgV.backgroundColor = [UIColor whiteColor];
+            self.codeTieleL.textColor = PBColor(40, 58, 79);
+        }
+    }
+}
+- (NSMutableDictionary *)inputCellDict {
+    if (_inputCellDict == nil) {
+        _inputCellDict = [[NSMutableDictionary alloc] init];
+    }
+    return _inputCellDict;
+}
+
+
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.h
new file mode 100644
index 0000000..046e2ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.h
@@ -0,0 +1,13 @@
+//
+//  PBLoginViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBLoginViewController : UIViewController
+@property (nonatomic, copy) void(^LoginSuccessfulBlock)(void);
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.m
new file mode 100644
index 0000000..c890ab9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/ViewControllers/PBLoginViewController.m
@@ -0,0 +1,542 @@
+    //
+//  PBLoginViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBLoginViewController.h"
+#import "PBNavigationController.h"
+#import "PBAgreementViewController.h"
+#import "PBNetworkModel.h"
+#import <JPUSHService.h>
+#import "PGGCryptoDES.h"
+#import "PBEnterpriseCodeController.h"
+#define bim365Code @"300012"
+@interface PBLoginViewController ()<UITextFieldDelegate>
+@property (nonatomic, weak) UILabel *codeL;
+@property (nonatomic, weak) UITextField *userNameTF;
+@property (nonatomic, weak) UITextField *passwordTF;
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UIButton *loginBtn;
+@property (nonatomic, assign) BOOL keyBoardIsShow;
+@property (nonatomic, strong) NSDictionary *bim365Data;
+@property (nonatomic, strong) NSDictionary *customData;
+@property (nonatomic, assign) int logoImageVTop;
+@property (nonatomic, assign) int bgViewTop;
+@end
+
+@implementation PBLoginViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+//    [PBNoteCenter addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
+//    [PBNoteCenter addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];
+    NSDictionary *dict = [NSString getApiData];
+    if (dict) {
+        self.customData = dict;
+    }else {
+        self.customData = self.bim365Data;
+        [self storedLocallyApiWithData:self.customData];
+        NSArray *arr = @[self.customData];
+        [self saveApiArr:arr];
+    }
+    [self setupUI];
+    [self setApi];
+}
+- (void)keyboardWillShow:(NSNotification *)notification {
+    if (self.keyBoardIsShow) {
+        return;
+    }
+    self.keyBoardIsShow = YES;
+    [UIView animateWithDuration:1 animations:^{
+        CGFloat titleTop;
+        if (IS_IPHONE_X) {
+            titleTop = 12;
+        }else {
+            titleTop = 12 + 24;
+        }
+        [self.titleL mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.view).offset(titleTop);
+        }];
+        [self.loginBtn mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.passwordTF.mas_bottom).offset(20);
+        }];
+        [self.view layoutIfNeeded];
+    }];
+} 
+- (void)keyboardWillHidden:(NSNotification *)notification{
+    if (!self.keyBoardIsShow) {
+        return;
+    }
+    self.keyBoardIsShow = NO;
+    [UIView animateWithDuration:1 animations:^{
+        CGFloat titleTop;
+        if (IS_IPHONE_X) {
+            titleTop = 50;
+        }else {
+            titleTop = 50 + 24;
+        }
+        [self.titleL mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.view).offset(titleTop);
+        }];
+        [self.loginBtn mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.passwordTF.mas_bottom).offset(80);
+        }];
+        [self.view layoutIfNeeded];
+    }];
+}
+
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    UILabel *titleL = [UILabel z_labelWithText:@"欢迎登录" Color:PBColor(40, 58, 79) isBold:YES Font:26];
+    [self.view addSubview:titleL];
+    CGFloat titleTop;
+    if (IS_IPHONE_X) {
+        titleTop = 50;
+    }else {
+        titleTop = 50 + 24;
+    }
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(titleTop);
+        make.left.equalTo(self.view).offset(30);
+        make.size.mas_equalTo(CGSizeMake(108, 40));
+    }];
+    
+    UIView *codeBg = [[UIView alloc] init];
+    codeBg.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:codeBg];
+    [codeBg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(30);
+        make.left.equalTo(self.view).offset(30);
+        make.right.equalTo(self.view).offset(-30);
+        make.height.equalTo(@60);
+    }];
+    codeBg.layer.cornerRadius = 6;
+    codeBg.userInteractionEnabled = YES;
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(codeBtnAction)];
+    [codeBg addGestureRecognizer:tap];
+  
+    UIView *userBg = [[UIView alloc] init];
+    userBg.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:userBg];
+    [userBg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(codeBg.mas_bottom).offset(20);
+        make.left.equalTo(self.view).offset(30);
+        make.right.equalTo(self.view).offset(-30);
+        make.height.equalTo(@60);
+    }];
+    userBg.layer.cornerRadius = 6;
+    
+    UIView *passwordBg = [[UIView alloc] init];
+    passwordBg.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:passwordBg];
+    [passwordBg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(userBg.mas_bottom).offset(20);
+        make.left.equalTo(self.view).offset(30);
+        make.right.equalTo(self.view).offset(-30);
+        make.height.equalTo(@60);
+    }];
+    passwordBg.layer.cornerRadius = 6;
+    
+    UIImageView *codeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"coding"]];
+    [self.view addSubview:codeImageV];
+    [codeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.left.equalTo(codeBg).offset(20);
+        make.centerY.equalTo(codeBg);
+    }];
+    UILabel *codeL = [UILabel z_labelWithText:@"BIMe协作平台" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    [self.view addSubview:codeL];
+    [codeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(codeBg).offset(64);
+        make.top.bottom.equalTo(codeBg);
+        make.right.equalTo(codeBg).offset(-50);
+    }];
+    UIImageView *arrow_right = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow_right"]];
+    [self.view addSubview:arrow_right];
+    [arrow_right mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(codeBg);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.right.equalTo(codeBg).offset(-20);
+    }];
+    UIImageView *userImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"account"]];
+    [self.view addSubview:userImageV];
+    [userImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(userBg);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.left.equalTo(userBg).offset(20);
+    }];
+    UITextField *userTF = [[UITextField alloc] init];
+    [self.view addSubview:userTF];
+    userTF.placeholder = @"请输入邮箱/手机号/账号";
+    userTF.textColor = PBColor(40, 58, 79);
+    userTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    userTF.clearButtonMode = UITextFieldViewModeAlways;
+    userTF.delegate = self;
+    userTF.returnKeyType = UIReturnKeyNext;
+    userTF.font = [UIFont fontWithName:Coarse size:16];
+    [userTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(userBg).offset(64);
+        make.top.bottom.equalTo(userBg);
+        make.right.equalTo(userBg).offset(-20);
+    }];
+    UIImageView *passwordImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"password"]];
+    [self.view addSubview:passwordImageV];
+    [passwordImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(passwordBg);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.left.equalTo(passwordBg).offset(20);
+    }];
+    UITextField *passwordTF = [[UITextField alloc] init];
+    [self.view addSubview:passwordTF];
+    passwordTF.placeholder = @"请输入密码";
+    passwordTF.textColor = PBColor(40, 58, 79);
+    passwordTF.keyboardType = UIKeyboardTypeASCIICapable;
+    passwordTF.secureTextEntry = YES;
+//    passwordTF.clearButtonMode = UITextFieldViewModeAlways;
+    passwordTF.enablesReturnKeyAutomatically = YES;
+    passwordTF.returnKeyType = UIReturnKeyDone;
+    passwordTF.delegate = self;
+    passwordTF.font = [UIFont fontWithName:Coarse size:16];
+    [passwordTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(passwordBg).offset(64);
+        make.top.bottom.equalTo(passwordBg);
+        make.right.equalTo(passwordBg).offset(-50);
+    }];
+    UIButton *encryptionBtn = [UIButton z_bgNormalImage:[UIImage imageNamed:@"invisible"] bgSelectedImage:[UIImage imageNamed:@"visible"]];
+    [encryptionBtn addTarget:self action:@selector(enctyptionAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:encryptionBtn];
+    [encryptionBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(passwordBg);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.right.equalTo(passwordBg).offset(-20);
+    }];
+    
+    UIButton *loginBtn = [[UIButton alloc] init];
+    [loginBtn setImage:[UIImage imageNamed:@"Login_loginBtn_diss"] forState:UIControlStateDisabled];
+    [loginBtn setImage:[UIImage imageNamed:@"Login_loginBtn_norm"] forState:UIControlStateNormal];
+    loginBtn.enabled = NO;
+    [loginBtn addTarget:self action:@selector(loginAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:loginBtn];
+    [loginBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(passwordBg.mas_bottom).offset(80);
+        make.left.equalTo(self.view).offset(30);
+        make.right.equalTo(self.view).offset(-30);
+        make.height.equalTo(@60);
+    }];
+//    [loginBtn circleViewWithRadius:6];
+    
+    UILabel *agreeL = [UILabel z_labelWithText:@"登录代表同意" Color:DescColor isBold:YES Font:12];
+    [self.view addSubview:agreeL];
+    [agreeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.view).offset(-20);
+        make.left.equalTo(self.view).offset(47);
+        make.size.mas_equalTo(CGSizeMake(78, 16));
+    }];
+    UIButton *agreeBtn = [UIButton z_textButton:@"《管理平台用户协议》和《隐私政策》" boldFontSize:12 normalColor:PBColor(0, 122, 255)];
+    [agreeBtn addTarget:self action:@selector(agreementAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:agreeBtn];
+    [agreeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.view).offset(-20);
+        make.left.equalTo(agreeL.mas_right);
+        make.height.equalTo(@16);
+    }];
+    self.codeL = codeL;
+    self.userNameTF = userTF;
+    self.passwordTF = passwordTF;
+    self.titleL = titleL;
+    self.loginBtn = loginBtn;
+}
+- (void)enctyptionAction:(UIButton *)button {
+    button.selected = !button.selected;
+    if (button.selected) {
+        self.passwordTF.secureTextEntry = NO;
+    }else {
+        self.passwordTF.secureTextEntry = YES;
+    }
+}
+#pragma mark -查看协议
+- (void)agreementAction {
+    PBAgreementViewController *agreementVC = [[PBAgreementViewController alloc] init];
+    PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:agreementVC];
+    nav.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:nav animated:YES completion:nil];
+}
+#pragma mark - 编辑企业码
+- (void)codeBtnAction {
+    PBEnterpriseCodeController *codeVC = [[PBEnterpriseCodeController alloc] init];
+    codeVC.SetCodeBlock = ^(NSDictionary * _Nonnull obj) {
+        self.customData = obj;
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        NSArray *arr = [NSString getApiArrData];
+        for (NSDictionary *dict in arr) {
+            [dict setValue:@"0" forKey:@"Check"];
+            [arrM addObject:dict];
+        }
+        [arrM addObject:self.customData];
+        [self saveApiArr:arrM.copy];
+        [self storedLocallyApiWithData:self.customData];
+        [self setApi];
+    };
+    codeVC.UpdataCodeBlock = ^(NSInteger index) {
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        NSArray *arr = [NSString getApiArrData];
+        for (NSInteger i = 0; i < arr.count; i++) {
+            NSDictionary *dict = arr[i];
+            if (i == index) {
+                [dict setValue:@"1" forKey:@"Check"];
+            }else {
+                [dict setValue:@"0" forKey:@"Check"];
+            }
+            [arrM addObject:dict];
+        }
+        self.customData = arrM[index];
+        [self saveApiArr:arrM.copy];
+        [self storedLocallyApiWithData:self.customData];
+        [self setApi];
+    };
+    codeVC.DeleteCodeBlock = ^(NSInteger index) {
+        NSMutableArray *arrM = [[NSString getApiArrData] mutableCopy];
+        [arrM removeObjectAtIndex:index];
+        [self saveApiArr:arrM.copy];
+    };
+    PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:codeVC];
+    [self presentViewController:nav animated:YES completion:nil];
+    
+   
+//    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"请输入企业编码" message:@"为空即设为BIMe数据协作平台服务" preferredStyle:UIAlertControllerStyleAlert];
+//    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+//    UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+//        //        [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:nil];
+//        [self getEnterpriseWithCode:alertVC.textFields.firstObject.text];
+//    }];
+//    //    determineAction.enabled = NO;
+//    [alertVC addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
+//        //        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alertTextFieldDidChange:) name:UITextFieldTextDidChangeNotification object:textField];
+//        textField.keyboardType = UIKeyboardTypeNumberPad;
+//        textField.placeholder = @"请输入企业编码";
+//    }];
+//    [alertVC addAction:cancelAction];
+//    [alertVC addAction:determineAction];
+//    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+//- (void)alertTextFieldDidChange:(NSNotification *)notification{
+//    UIAlertController *alertController = (UIAlertController *)self.presentedViewController;
+//    if (alertController) {
+//        UITextField *codeTF = alertController.textFields.firstObject;
+//        UIAlertAction *determineAction = alertController.actions.lastObject;
+//        determineAction.enabled = codeTF.text.length > 0;
+//    }
+//}
+
+//#pragma mark - 更改密码
+//- (void)forgotPasswordAction {
+//    NSLog(@"更改密码");
+//    
+//}
+#pragma mark - 登录
+- (void)loginAction:(UIButton *)button {
+    [YJProgressHUD showProgress:@"正在登录" inView:self.view];
+    [[PBNetworkTools sharedTools] loginWithUserName:self.userNameTF.text andPassword:self.passwordTF.text andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"登录失败" inView:self.view];
+            return ;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+//            [YJProgressHUD hide];
+            //存储本地
+            [self saveTokenToLocalWith:[networkModel.Data valueForKey:@"token"]];
+            [self savePasswordWith:self.userNameTF.text andPassword:self.passwordTF.text];
+            [JPUSHService setAlias:[networkModel.Data valueForKey:@"alpha"] completion:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
+                NSLog(@"=============设置别名:%@",iAlias);
+                NSLog(@"%zd",seq);
+            } seq:1];
+            [self loadToken];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)loadToken {
+    [[PBNetworkTools sharedTools] getOnlyTestTokenAndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载登录人信息失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+            NSString *documents = [array lastObject];
+            NSString *documentPath = [documents stringByAppendingPathComponent:@"login.plist"];
+            NSDictionary *dict = @{
+                                   @"RealName":[networkModel.Data valueForKey:@"RealName"],
+                                   @"Account":[networkModel.Data valueForKey:@"Account"],
+                                   @"UserId":[networkModel.Data valueForKey:@"apisession_userid"]
+                                   };
+            [dict writeToFile:documentPath atomically:YES];
+            if (self.LoginSuccessfulBlock) {
+                self.LoginSuccessfulBlock();
+            }
+            [self dismissViewControllerAnimated:YES completion:nil];
+        }else {
+            [YJProgressHUD showMessage:@"加载登录人信息失败" inView:self.view];
+        }
+    }];
+}
+
+- (void)saveTokenToLocalWith:(NSString *)token {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"token.plist"];
+    NSDictionary *dict = @{
+                           @"token":token
+                           };
+    [dict writeToFile:documentPath atomically:YES];
+}
+- (void)savePasswordWith:(NSString *)name andPassword:(NSString *)pass {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"info.plist"];
+    NSDictionary *dict = @{
+                           @"username":name,
+                           @"pass":pass
+                           };
+    [dict writeToFile:documentPath atomically:YES];
+}
+- (void)setApi {
+    self.codeL.text = [self.customData valueForKey:@"CompanyName"];
+}
+
+- (void)storedLocallyApiWithData:(NSDictionary *)data {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"api.plist"];
+    [data writeToFile:documentPath atomically:YES];
+}
+- (void)saveApiArr:(NSArray *)arr {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"apiArr.plist"];
+    [arr writeToFile:documentPath atomically:YES];
+}
+#pragma mark - UITextFieldDelegate
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+    NSInteger textlength = textField.text.length;
+    if ([string isEqualToString:@""]) {
+        textlength -= range.length;
+    }else {
+        textlength += string.length;
+    }
+    if (textlength == 0){
+        self.loginBtn.enabled = NO;
+        return YES;
+    }
+    if (textField == self.userNameTF) {
+        if (self.passwordTF.text.length == 0) {
+            self.loginBtn.enabled = NO;
+        }else {
+            self.loginBtn.enabled = YES;
+        }
+    }else {
+        if (self.userNameTF.text.length == 0) {
+            self.loginBtn.enabled = NO;
+        }else {
+            self.loginBtn.enabled = YES;
+        }
+    }
+    return YES;
+}
+- (BOOL)textFieldShouldClear:(UITextField *)textField {
+    self.loginBtn.enabled = NO;
+    return YES;
+}
+- (BOOL)textFieldShouldReturn:(UITextField *)textField {
+    if (textField == _userNameTF) {
+        [_passwordTF becomeFirstResponder];
+    }else {
+        [self.view endEditing:NO];
+    }
+    return YES;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    [self.view endEditing:NO];
+}
+
+- (NSDictionary *)bim365Data {
+    if (_bim365Data == nil) {
+//        _bim365Data = @{
+//                        @"ModelApi" : @"https://bimcomposer.bim365.com.cn:443",
+//                        @"NewApi" : @"https://newapi.bim365.com.cn:443",
+//                        @"AppApi" : @"https://api.bim365.com.cn:443",
+//                        @"Web" : @"https://www.bim365.com.cn:443",
+//                        @"NewWeb" : @"https://www.bim365.com.cn",
+//                        @"LogoUrl" : @"https://www.bim365.com.cn:443/Content/function/Login/images/Simple_logo.png",
+//                        @"CompanyName" : @"BIMe数据协作平台",
+//                        @"Code" : bim365Code,
+//                        @"StarName" : @"STAR_bim365_com_cn",
+//                        @"Check" : @"1"
+//                        };
+        _bim365Data = @{
+                        @"ModelApi" : @"http://39.129.29.216:6081",
+                        @"Panorama": @"errurl",
+                        @"NewApi" : @"http://39.129.29.216:6082",
+                        @"AppApi" : @"errurl",
+                        @"Web" : @"http://39.129.29.216:6080",
+                        @"NewWeb" : @"http://39.129.29.216:6080",
+                        @"LogoUrl" : @"http://39.129.29.216:6080/Content/function/Login/images/Simple_logo.png",
+                        @"CompanyName" : @"管理平台",
+                        @"Code" : bim365Code,
+                        @"StarName" : @"",
+                        @"Check" : @"1"
+                        };
+        /**
+         ModelApi : "https://bimcomposer.bim365.com.cn:443"
+         NewApi : "https://newapi.bim365.com.cn:443"
+         AppApi : "https://api.bim365.com.cn:443"
+         Web : "https://www.bim365.com.cn:443"
+         NewWeb : "https://www.bim365.com.cn"
+         LogoUrl : "https://www.bim365.com.cn:443/Content/function/Login/images/Simple_logo.png"
+         CompanyName : "BIMe数据协作平台"
+         StarName : "STAR_bim365_com_cn"
+         
+         @"ModelApi" : @"http://119.3.217.232:81",
+         @"NewApi" : @"https://www.probim.cn:8080",
+         @"AppApi" : @"http://119.3.217.232:82",
+         @"Web" : @"https://www.probim.cn:8076",
+         @"NewWeb" : @"http://www.probim.cn:8888",
+         @"LogoUrl" : @"http://119.3.217.232:8075/Content/function/Login/images/Simple_logosl.png",
+         @"CompanyName" : @"BIMe数据协作平台",
+         @"Code" : bim365Code,
+         @"StarName" : @"STAR_bim365_com_cn",
+         @"Check" : @"1"
+         */
+    }
+    return _bim365Data;
+}
+
+- (void)didReceiveMemoryWarning {
+    
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+ #pragma mark - Navigation
+ 
+ // In a storyboard-based application, you will often want to do a little preparation before navigation
+ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+ // Get the new view controller using [segue destinationViewController].
+ // Pass the selected object to the new view controller.
+ }
+ */
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.h
new file mode 100644
index 0000000..3d3cd82
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBCodeTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/6/12.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCodeTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSDictionary *dict;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.m
new file mode 100644
index 0000000..b4878cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBCodeTableViewCell.m
@@ -0,0 +1,88 @@
+//
+//  PBCodeTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/6/12.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCodeTableViewCell.h"
+@interface PBCodeTableViewCell()
+@property (nonatomic, weak) UIView *codeBgV;
+@property (nonatomic, weak) UIImageView *logoImageV;
+@property (nonatomic, weak) UILabel *codeTieleL;
+
+@end
+@implementation PBCodeTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PromptColor;
+    UIView *codeBgV = [[UIView alloc] init];
+    codeBgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:codeBgV];
+    [codeBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+         make.top.equalTo(self.contentView);
+         make.left.equalTo(self.contentView);
+         make.right.equalTo(self.contentView);
+         make.bottom.equalTo(self.contentView).offset(-20);
+    }];
+    [codeBgV circleViewWithRadius:6];
+    UIImageView *logoImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo_bime"]];
+    [self.contentView addSubview:logoImageV];
+    [logoImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+         make.top.equalTo(codeBgV).offset(26);
+         make.centerX.equalTo(codeBgV);
+         make.size.mas_equalTo(CGSizeMake(36, 36));
+    }];
+     
+    UILabel *codeTieleL = [UILabel z_labelWithText:@"BIM协作平台服务" Color:TitleColor isBold:YES Font:TitleFontSize];
+    codeTieleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:codeTieleL];
+    [codeTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+         make.top.equalTo(logoImageV.mas_bottom).offset(26);
+         make.left.equalTo(codeBgV).offset(20);
+         make.right.equalTo(codeBgV).offset(-20);
+         make.height.equalTo(@18);
+     }];
+    UIImageView *checkImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"code_check"]];
+    [self.contentView addSubview:checkImageV];
+    [checkImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(codeBgV);
+        make.right.equalTo(codeBgV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    self.codeBgV = codeBgV;
+    self.codeTieleL = codeTieleL;
+    self.logoImageV = logoImageV;
+}
+- (void)setDict:(NSDictionary *)dict {
+    NSString *check = [dict valueForKey:@"Check"];
+    if ([check isEqualToString:@"1"]) {
+        self.codeBgV.backgroundColor = PBColor(0, 122, 255);
+        self.codeTieleL.textColor = [UIColor whiteColor];
+    }else {
+        self.codeBgV.backgroundColor = [UIColor whiteColor];
+        self.codeTieleL.textColor = PBColor(40, 58, 79);
+    }
+    [self.logoImageV sd_setImageWithURL:[NSURL URLWithString:[dict valueForKey:@"LogoUrl"]] placeholderImage:[UIImage imageNamed:@"logo_unknown"]];
+    self.codeTieleL.text = [dict valueForKey:@"CompanyName"];
+}
+
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.h
new file mode 100644
index 0000000..de7917a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBInputCodeTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/16.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBInputCodeTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSMutableDictionary *dict;
+@property (nonatomic, copy) void (^GetEnterpriseBlock)(NSString *code);
+@property (nonatomic, copy) void (^SolveErr)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.m
new file mode 100644
index 0000000..1a704dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Login/Views/PBInputCodeTableViewCell.m
@@ -0,0 +1,122 @@
+//
+//  PBInputCodeTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/16.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBInputCodeTableViewCell.h"
+@interface PBInputCodeTableViewCell()<UITextFieldDelegate>
+@property (nonatomic, weak) UIView *codeBgV;
+@property (nonatomic, weak) UIImageView *logoImageV;
+@property (nonatomic, weak) UITextField *codeTF;
+@property (nonatomic, weak) UIView *linV;
+@end
+
+@implementation PBInputCodeTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PromptColor;
+    UIView *codeBgV = [[UIView alloc] init];
+    codeBgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:codeBgV];
+    [codeBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+         make.top.equalTo(self.contentView);
+         make.left.equalTo(self.contentView);
+         make.right.equalTo(self.contentView);
+         make.bottom.equalTo(self.contentView).offset(-20);
+    }];
+    [codeBgV circleViewWithRadius:6];
+    UIImageView *logoImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo_unknown"]];
+    [self.contentView addSubview:logoImageV];
+    [logoImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+         make.top.equalTo(codeBgV).offset(26);
+         make.centerX.equalTo(codeBgV);
+         make.size.mas_equalTo(CGSizeMake(36, 36));
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(233, 235, 237);
+    [self.contentView addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(codeBgV).offset(-31);
+        make.left.equalTo(codeBgV).offset(67);
+        make.right.equalTo(codeBgV).offset(-67);
+        make.height.equalTo(@1);
+    }];
+    UITextField *codeTF = [[UITextField alloc] init];
+    codeTF.placeholder = @"输入自有企业服务编码";
+    codeTF.textAlignment= NSTextAlignmentCenter;
+    codeTF.textColor = PBColor(40, 58, 79);
+    codeTF.font = [UIFont fontWithName:Coarse size:16.0];
+    codeTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    codeTF.clearButtonMode = UITextFieldViewModeAlways;
+    codeTF.delegate = self;
+    codeTF.returnKeyType = UIReturnKeyDone;
+    [self.contentView addSubview:codeTF];
+    [codeTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(linV).offset(-1);
+        make.left.right.equalTo(linV);
+        make.height.equalTo(@34);
+    }];
+    self.codeBgV = codeBgV;
+    self.logoImageV = logoImageV;
+    self.codeTF = codeTF;
+    self.linV = linV;
+}
+#pragma mark - UITextFieldDelegate
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
+    self.logoImageV.image = [UIImage imageNamed:@"logo_unknown_nor"];
+    if ([[_dict valueForKey:@"err"] isEqualToString:@"err"]) {
+        [_dict setValue:@"" forKey:@"err"];
+        self.codeBgV.backgroundColor = [UIColor whiteColor];
+        self.codeTF.textColor = PBColor(40, 58, 79);
+        if (self.SolveErr) {
+            self.SolveErr();
+        }
+    }
+    return YES;
+}
+- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
+    self.logoImageV.image = [UIImage imageNamed:@"logo_unknown"];
+    return YES;
+}
+- (BOOL)textFieldShouldReturn:(UITextField *)textField {
+    [self.codeTF resignFirstResponder];
+    if (self.GetEnterpriseBlock) {
+        self.GetEnterpriseBlock(textField.text);
+    }
+    return YES;
+}
+- (void)setDict:(NSMutableDictionary *)dict {
+    _dict = dict;
+    if ([[dict valueForKey:@"err"] isEqualToString:@"err"]) {
+        self.codeBgV.backgroundColor = PBColor(244, 21, 21);
+        self.logoImageV.image = [UIImage imageNamed:@"logo_unknown_erro"];
+        self.codeTF.textColor = [UIColor whiteColor];
+        self.codeTF.text = [dict valueForKey:@"code"];
+    }else {
+        self.codeBgV.backgroundColor = [UIColor whiteColor];
+        self.logoImageV.image = [UIImage imageNamed:@"logo_unknown"];
+        self.codeTF.text = [dict valueForKey:@"code"];;
+        self.codeTF.textColor = PBColor(40, 58, 79);
+    }
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.h
new file mode 100644
index 0000000..2949f76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBBussinessViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/14.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "PBProjectModel.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBBussinessViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *powerArr;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.m
new file mode 100644
index 0000000..8c695ab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Bussiness/ViewControllers/PBBussinessViewController.m
@@ -0,0 +1,227 @@
+//
+//  PBBussinessViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/14.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBBussinessViewController.h"
+#import "PBExamineListViewController.h"
+#import "PBScheduleListViewController.h"
+#import "PBPanoramaListViewController.h"
+#import "PBVideoViewController.h"
+#import "PBSitePerViewController.h"
+
+@interface PBBussinessViewController ()
+
+@end
+
+@implementation PBBussinessViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(243, 243, 244);
+    
+    UIButton *bgV = [[UIButton alloc] init];
+    [bgV addTarget:self action:@selector(examine) forControlEvents:UIControlEventTouchUpInside];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [bgV circleViewWithRadius:8];
+    [self.view addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(16);
+        make.left.equalTo(self.view).offset(16);
+        make.right.equalTo(self.view).offset(-16);
+        make.height.equalTo(@120);
+    }];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bussiness_examine"]];
+    [self.view addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(32);
+        make.left.equalTo(bgV).offset(48);
+        make.size.mas_equalTo(CGSizeMake(56, 56));
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"现场管理" Color:PBColor(51, 51, 51) isBold:YES Font:17];
+    [self.view addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV).offset(12);
+        make.right.equalTo(bgV).offset(-48);
+    }];
+    UIImageView *lineV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"line"]];
+    [self.view addSubview:lineV];
+    [lineV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(nameL.mas_bottom).offset(12);
+        make.right.equalTo(bgV).offset(-48);
+        make.size.mas_equalTo(CGSizeMake(48, 12));
+    }];
+    
+    
+    UIButton *bg1V = [[UIButton alloc] init];
+    [bg1V addTarget:self action:@selector(panorama) forControlEvents:UIControlEventTouchUpInside];
+    bg1V.backgroundColor = [UIColor whiteColor];
+    [bg1V circleViewWithRadius:8];
+    [self.view addSubview:bg1V];
+    [bg1V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV.mas_bottom).offset(16);
+        make.left.equalTo(self.view).offset(16);
+        make.right.equalTo(self.view).offset(-16);
+        make.height.equalTo(@120);
+    }];
+    UIImageView *image1V = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bussiness_video"]];
+    [self.view addSubview:image1V];
+    [image1V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg1V).offset(32);
+        make.left.equalTo(bg1V).offset(48);
+        make.size.mas_equalTo(CGSizeMake(56, 56));
+    }];
+    UILabel *name1L = [UILabel z_labelWithText:@"现场监控" Color:PBColor(51, 51, 51) isBold:YES Font:17];
+    [self.view addSubview:name1L];
+    [name1L mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(image1V).offset(12);
+        make.right.equalTo(bg1V).offset(-48);
+    }];
+    UIImageView *line1V = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"line"]];
+    [self.view addSubview:line1V];
+    [line1V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(name1L.mas_bottom).offset(12);
+        make.right.equalTo(bg1V).offset(-48);
+        make.size.mas_equalTo(CGSizeMake(48, 12));
+    }];
+    
+    UIButton *bg2V = [[UIButton alloc] init];
+    [bg2V addTarget:self action:@selector(schedule) forControlEvents:UIControlEventTouchUpInside];
+    bg2V.backgroundColor = [UIColor whiteColor];
+    [bg2V circleViewWithRadius:8];
+    [self.view addSubview:bg2V];
+    [bg2V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg1V.mas_bottom).offset(16);
+        make.left.equalTo(self.view).offset(16);
+        make.right.equalTo(self.view).offset(-16);
+        make.height.equalTo(@120);
+    }];
+    UIImageView *image2V = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bussiness_schedule"]];
+    [self.view addSubview:image2V];
+    [image2V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg2V).offset(32);
+        make.left.equalTo(bg2V).offset(48);
+        make.size.mas_equalTo(CGSizeMake(56, 56));
+    }];
+    UILabel *name2L = [UILabel z_labelWithText:@"进度填报" Color:PBColor(51, 51, 51) isBold:YES Font:17];
+    [self.view addSubview:name2L];
+    [name2L mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(image2V).offset(12);
+        make.right.equalTo(bg2V).offset(-48);
+    }];
+    UIImageView *line2V = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"line"]];
+    [self.view addSubview:line2V];
+    [line2V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(name2L.mas_bottom).offset(12);
+        make.right.equalTo(bg2V).offset(-48);
+        make.size.mas_equalTo(CGSizeMake(48, 12));
+    }];
+    
+    UIButton *bg3V = [[UIButton alloc] init];
+    [bg3V addTarget:self action:@selector(personsChedule) forControlEvents:UIControlEventTouchUpInside];
+    bg3V.backgroundColor = [UIColor whiteColor];
+    [bg3V circleViewWithRadius:8];
+    [self.view addSubview:bg3V];
+    [bg3V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg2V.mas_bottom).offset(16);
+        make.left.equalTo(self.view).offset(16);
+        make.right.equalTo(self.view).offset(-16);
+        make.height.equalTo(@120);
+    }];
+    UIImageView *image3V = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bussiness_person"]];
+    [self.view addSubview:image3V];
+    [image3V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg3V).offset(32);
+        make.left.equalTo(bg3V).offset(48);
+        make.size.mas_equalTo(CGSizeMake(56, 56));
+    }];
+    UILabel *name3L = [UILabel z_labelWithText:@"人员填报" Color:PBColor(51, 51, 51) isBold:YES Font:17];
+    [self.view addSubview:name3L];
+    [name3L mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(image3V).offset(12);
+        make.right.equalTo(bg3V).offset(-48);
+    }];
+    UIImageView *line3V = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"line"]];
+    [self.view addSubview:line3V];
+    [line3V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(name3L.mas_bottom).offset(12);
+        make.right.equalTo(bg3V).offset(-48);
+        make.size.mas_equalTo(CGSizeMake(48, 12));
+    }];
+}
+//现场管理
+- (void)examine{
+    PBExamineListViewController *examineVC = [[PBExamineListViewController alloc] init];
+    examineVC.projectModel = self.projectModel;
+    examineVC.powerArr = self.powerArr;
+    examineVC.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:examineVC animated:YES];
+}
+//进度填报
+- (void)schedule {
+    PBScheduleListViewController *scheduleVC = [[PBScheduleListViewController alloc] init];
+    scheduleVC.projectModel = self.projectModel;
+    scheduleVC.powerArr = self.powerArr;
+    scheduleVC.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:scheduleVC animated:YES];
+}
+//现场全景
+- (void)panorama {
+    PBVideoViewController *panoramaVC = [[PBVideoViewController alloc] init];
+    panoramaVC.projectModel = self.projectModel;
+//    panoramaVC.powerArr = self.powerArr;
+    panoramaVC.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:panoramaVC animated:YES];
+}
+//人员填报
+- (void)personsChedule {
+//    PBPanoramaListViewController *panoramaVC = [[PBPanoramaListViewController alloc] init];
+//    panoramaVC.projectModel = self.projectModel;
+//    panoramaVC.powerArr = self.powerArr;
+//    panoramaVC.hidesBottomBarWhenPushed = YES;
+//    [self.navigationController pushViewController:panoramaVC animated:YES];
+    PBSitePerViewController *moduleVC = [[PBSitePerViewController alloc] init];
+    moduleVC.projectModel = self.projectModel;
+//    if (self.isAdd) {
+//        moduleVC.schedulePlanModel = self.schedulePlanModel;
+//    }else {
+//        moduleVC.scheduleListModel = self.scheduleListModel;
+//    }
+    moduleVC.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:moduleVC animated:YES];
+
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.h
new file mode 100644
index 0000000..f5b01bc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.h
@@ -0,0 +1,38 @@
+//
+//  PBDocModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/31.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBDocModel : NSObject
+@property (nonatomic, copy) NSString *FileId;
+@property (nonatomic, copy) NSString *FolderID;
+@property (nonatomic, copy) NSString *FileName;
+@property (nonatomic, copy) NSString *FilePath;
+@property (nonatomic, copy) NSString *FileSize;
+@property (nonatomic, copy) NSString *FileExtensions;
+@property (nonatomic, copy) NSString *FileType;
+@property (nonatomic, copy) NSString *IsShare;
+@property (nonatomic, copy) NSString *ShareLink;
+@property (nonatomic, copy) NSString *ShareCode;
+@property (nonatomic, copy) NSString *ShareTime;
+@property (nonatomic, copy) NSString *DownloadCount;
+@property (nonatomic, copy) NSString *IsTop;
+@property (nonatomic, copy) NSString *SortCode;
+@property (nonatomic, copy) NSString *DeleteMark;
+@property (nonatomic, copy) NSString *EnabledMark;
+@property (nonatomic, copy) NSString *Description;
+@property (nonatomic, copy) NSString *CreateDate;
+@property (nonatomic, copy) NSString *CreateUserId;
+@property (nonatomic, copy) NSString *CreateUserName;
+@property (nonatomic, copy) NSString *ModifyDate;
+@property (nonatomic, copy) NSString *ModifyUserId;
+@property (nonatomic, copy) NSString *ModifyUserName;
+@property (nonatomic, copy) NSString *FileVersion;
+@property (nonatomic, assign) BOOL ispullDown;
+@property (nonatomic, assign) BOOL toolsType;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.m
new file mode 100644
index 0000000..4965eda
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocModel.m
@@ -0,0 +1,13 @@
+//
+//  PBDocModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/31.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocModel.h"
+
+@implementation PBDocModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.h
new file mode 100644
index 0000000..543a655
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.h
@@ -0,0 +1,29 @@
+//
+//  PBDocPrivilegeModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBDocPrivilegeModel : NSObject
+/*0 为无权限,1 为有权限*/
+//文件ID
+@property (nonatomic, copy) NSString *FiledID;
+//列表权限
+@property (nonatomic, assign) NSInteger List;
+//查看权限
+@property (nonatomic, assign) NSInteger View;
+//下载权限
+@property (nonatomic, assign) NSInteger Download;
+//创建权限
+@property (nonatomic, assign) NSInteger Create;
+//重命名更新权限
+@property (nonatomic, assign) NSInteger Update;
+//删除权限
+@property (nonatomic, assign) NSInteger Delete;
+//是否有授权的权限
+@property (nonatomic, assign) NSInteger Grant;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.m
new file mode 100644
index 0000000..8e03fa6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Models/PBDocPrivilegeModel.m
@@ -0,0 +1,13 @@
+//
+//  PBDocPrivilegeModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocPrivilegeModel.h"
+
+@implementation PBDocPrivilegeModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/adinit.dat b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/adinit.dat
new file mode 100755
index 0000000..a418ca8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/adinit.dat
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/hztxt.shx b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/hztxt.shx
new file mode 100755
index 0000000..a7c92dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/hztxt.shx
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/marker.zip b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/marker.zip
new file mode 100755
index 0000000..2705d55
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/marker.zip
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/txt.shx b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/txt.shx
new file mode 100755
index 0000000..37cc1df
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Bundle/txt.shx
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AbstractViewPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AbstractViewPE.h
new file mode 100755
index 0000000..eb2a863
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AbstractViewPE.h
@@ -0,0 +1,563 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_ABSTRACTVIEWPE_H
+#define OD_ABSTRACTVIEWPE_H
+
+#include "DbRootExport.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeVector3d.h"
+#include "ViewportDefs.h"
+#include "DbStubPtrArray.h"
+
+class OdGeBoundBlock3d;
+
+typedef OdRxObject OdDbBaseDatabase;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines the interface for Protocol Extension classes for OdGsView, OdDbViewTableRecord, OdDbViewport and OdDbViewportTableRecord objects.
+    
+    \note
+    Only the following objects are supported:
+    
+    *  OdGsView
+    *  OdDbViewTableRecord
+    *  OdDbViewport
+    *  OdDbViewportTableRecord
+    *  Derivatives of one of the above.
+
+    Library: TD_Db
+    
+    <group Other_Classes> 
+*/
+class DBROOT_EXPORT OdAbstractViewPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdAbstractViewPE);
+
+  // Viewport methods:
+
+  /** \details
+    Returns the lower-left corner of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \remarks
+    *  point == (0.0, 0.0) corresponds to the lower-left corner of the graphics area.
+    *  point == (1.0, 1.0) corresponds to the upper-right corner of the graphics area.
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGePoint2d lowerLeftCorner(const OdRxObject* pViewport) const;
+  /** \details
+    Returns the upper-right corner of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \remarks
+    *  point == (0.0, 0.0) corresponds to the lower-left corner of the graphics area.
+    *  point == (1.0, 1.0) corresponds to the upper-right corner of the graphics area.
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGePoint2d upperRightCorner(const OdRxObject* pViewport) const;
+  /** \details
+    Sets the corners of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param lowerLeft [in]  Lower-left corner.
+    \param upperRight [in]  Upper-right corner.
+    \remarks
+    *  point == (0.0, 0.0) corresponds to the lower-left corner of the graphics area.
+    *  point == (1.0, 1.0) corresponds to the upper-right corner of the graphics area.
+    \sa
+    Coordinate Systems
+  */
+  virtual void setViewport(OdRxObject* pViewport, const OdGePoint2d& lowerLeft, const OdGePoint2d& upperRight) const;
+  /** \details
+    Returns true if and only if there is a viewport data associated with the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool hasViewport(const OdRxObject* pViewport) const;
+
+  // View methods:
+
+   /** \details
+    Returns the WCS view target of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+   */
+  virtual OdGePoint3d target(const OdRxObject* pViewport) const = 0;
+  
+  /** \details
+    Returns the WCS view direction of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdGeVector3d direction(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Returns the WCS Up vector of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdGeVector3d upVector (const OdRxObject* pViewport) const = 0;
+  /** \details
+    Returns the DCS field width of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \sa
+    Coordinate Systems
+  */
+  virtual double fieldWidth(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Returns the DCS field height of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \sa
+    Coordinate Systems
+  */
+  virtual double fieldHeight(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Returns true if and only if the projection type for the specified Viewport object is perspective. 
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isPerspective(const OdRxObject* pViewport) const = 0;
+  
+  /** \details
+    Returns the view offset vector for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdGeVector2d viewOffset(const OdRxObject* pViewport) const;
+  /** \details
+    Returns true if and only if there is a view offset associated with the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool hasViewOffset(const OdRxObject* pViewport) const;
+
+  /** \details
+    Returns the view DCS twist angle for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual double viewTwist(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Sets the parameters for the specified Viewport object according to the arguments.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param target [in]  WCS view target.
+    \param direction [in]  WCS view direction.
+    \param upVector [in]  WCS Up vector.
+    \param fieldWidth [in]  DCS field width.
+    \param fieldHeight [in]  DCS field height.
+    \param isPerspective [in]  Controls perspective.
+    \param viewOffset [in]  View offset vector.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual void setView(
+      OdRxObject* pViewport,
+      const OdGePoint3d& target,
+      const OdGeVector3d& direction,
+      const OdGeVector3d& upVector,
+      double fieldWidth,
+      double fieldHeight,
+      bool isPerspective,
+      const OdGeVector2d& viewOffset = OdGeVector2d::kIdentity) const = 0;
+
+  /** \details
+    Sets the perspective lens length for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param lensLength [in]  Perspective lens length.
+  */
+  virtual void setLensLength(OdRxObject* pViewport, double lensLength) const = 0;
+  /** \details
+    Returns the perspective lens length for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual double lensLength(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Returns true if and only if front clipping is on for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isFrontClipOn(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Controls front clipping for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param frontClip [in]  Controls front clip.
+  */
+  virtual void setFrontClipOn(OdRxObject* pViewport, bool frontClip) const = 0;
+
+  /** \details
+    Returns true if and only if back clipping is on for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isBackClipOn(const OdRxObject* pViewport) const = 0;
+  
+  /** \details
+    Controls back clipping for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param backClip [in]  Controls back clip.
+  */
+  virtual void setBackClipOn(OdRxObject* pViewport, bool backClip) const = 0;
+
+  /** \details
+    Returns true if and only if the front clipping plane passes through the camera for the specified Viewport object.
+    \remarks
+    If true, the front clipping plane ignores the front clip distance.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isFrontClipAtEyeOn(const OdRxObject* pViewport) const = 0;
+  
+  /** \details
+    Controls the front clipping plane's passing through the camera for the specified Viewport object.
+    \remarks
+    If and only if frontClipAtEye is true, the front clipping plane ignores the front clip distance.
+
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param frontClipAtEye [in]  Controls FrontClipAtEye.
+  */
+  virtual void setFrontClipAtEyeOn(OdRxObject* pViewport, bool frontClipAtEye) const = 0;
+
+  /** \details
+    Returns the front clip distance for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual double frontClipDistance(const OdRxObject* pViewport) const = 0;
+  
+  /** \details
+    Sets the front clip distance for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param frontClipDistance [in]  Front clip distance.
+  */
+  virtual void setFrontClipDistance(OdRxObject* pViewport, double frontClipDistance) const = 0;
+
+  /** \details
+    Returns the back clip distance for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual double backClipDistance(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Sets the front clip distance for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param backClipDistance [in]  Back clip distance.
+  */
+  virtual void setBackClipDistance(OdRxObject* pViewport, double backClipDistance) const = 0;
+
+  /** \details
+    Sets the render mode for the specified Viewport object.
+    \param renderMode [in]  Render mode.
+    \param pViewport [in]  Pointer to the Viewport object.
+    
+    \remarks
+    renderMode must be one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  virtual void setRenderMode(OdRxObject* pViewport, OdDb::RenderMode renderMode) const = 0;
+
+  /** \details
+    Returns the render mode for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+
+    \remarks
+    renderMode() returns one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  virtual OdDb::RenderMode renderMode(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Sets visual style for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param visualStyleId [in]  Visual style Object ID.
+  */
+  virtual void setVisualStyle(OdRxObject* pViewport, OdDbStub* visualStyleId) const = 0;
+  /** \details
+    Returns visual style for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdDbStub* visualStyle(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Sets background for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param backgroundId [in]  Background Object ID.
+  */
+  virtual void setBackground(OdRxObject* pViewport, OdDbStub* backgroundId) const = 0;
+  /** \details
+    Returns background for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdDbStub* background(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Returns the frozen layers for the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param frozenLayers [out]  Receives an array of frozen layer Object IDs.
+  */
+  virtual void frozenLayers(const OdRxObject* pViewport, OdDbStubPtrArray& frozenLayers) const;
+
+  /** \details
+    Sets the frozen layers for the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param frozenLayers [in]  Array of frozen layer Object IDs.
+  */
+  virtual void setFrozenLayers(OdRxObject* pViewport, const OdDbStubPtrArray& frozenLayers) const;
+
+  /** \param pSourceView [in]  Pointer to the source Viewport object.
+    \param pDestinationView [in]  Pointer to the destination Viewport object
+  */
+  virtual void setView(OdRxObject* pDestinationView, const OdRxObject* pSourceView) const;
+
+  // UCS methods:
+
+  /** \details
+    Returns true if and only if there is a UCS associated with the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool hasUcs(const OdRxObject* pViewport) const;
+
+  /** \details
+    Returns orthographic view type of the UCS associated with the specified Viewport object.
+
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param pDb [in]  Working database. If object is a database resident this parameter is ignored.
+
+    \remarks
+    orthoUcs() returns one of the following:
+    
+    <table>
+    Name                 Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS 
+    OdDb::kTopView        1       Top view with respect to the UCS 
+    OdDb::kBottomView     2       Bottom view with respect to the UCS 
+    OdDb::kFrontView      3       Front view with respect to the UCS 
+    OdDb::kBackView       4       Back view with respect to the UCS 
+    OdDb::kLeftView       5       Left view with respect to the UCS 
+    OdDb::kRightView      6       Right view with respect to the UCS 
+    </table>
+  */
+  virtual OdDb::OrthographicView orthoUcs(const OdRxObject* pViewport, const OdDbBaseDatabase* pDb = 0) const;
+
+  /** \details
+    Sets the UCS associated with the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param orthoUcs [in] Orthographic view type.
+    \param pDb [in] Working database. If object is a database resident this parameter is ignored.
+
+    \remarks
+    orthoUcs must be one of the following:
+    
+    <table>
+    Name                 Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS 
+    OdDb::kTopView        1       Top view with respect to the UCS 
+    OdDb::kBottomView     2       Bottom view with respect to the UCS 
+    OdDb::kFrontView      3       Front view with respect to the UCS 
+    OdDb::kBackView       4       Back view with respect to the UCS 
+    OdDb::kLeftView       5       Left view with respect to the UCS 
+    OdDb::kRightView      6       Right view with respect to the UCS 
+    </table>
+  */
+  virtual bool setUcs(OdRxObject* pViewport, OdDb::OrthographicView orthoUcs, const OdDbBaseDatabase* pDb = 0) const;
+  
+  /** \details
+    Returns the Object ID of the UCS name associated with the specified Viewport object. 
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdDbStub* ucsName(const OdRxObject* pViewport) const;
+
+  /** \param ucsId [in]  Object ID of UCS.
+  */
+  virtual bool setUcs(OdRxObject* pViewport, OdDbStub* ucsId) const;
+
+  /** \details
+    Returns the UCS associated with the specified Viewport object. 
+    \param origin [out]  Receives the UCS origin.
+    \param xAxis [out]  Receives the UCS X-axis.
+    \param yAxis [out]  Receives the UCS Y-axis.
+  */
+  virtual void getUcs(const OdRxObject* pViewport, OdGePoint3d& origin, OdGeVector3d& xAxis, OdGeVector3d& yAxis) const;
+
+  /** \param origin [in]  The UCS origin.
+    \param xAxis [in]  The UCS X-axis.
+    \param yAxis [in]  The UCS Y-axis.
+  */
+  virtual void setUcs(OdRxObject* pViewport, const OdGePoint3d& origin, const OdGeVector3d& xAxis, const OdGeVector3d& yAxis) const;
+
+  /** \details
+    Returns the elevation for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual double elevation(const OdRxObject* pViewport) const;
+
+  /** \details
+    Sets the elevation for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param elevation [in]  Elevation.
+  */
+  virtual void setElevation(OdRxObject* pViewport, double elevation) const;
+  /** \param pSourceView [in]  Pointer to the source Viewport object.
+    \param pDestinationView [in]  Pointer to the destination Viewport object
+  */
+  virtual void setUcs(OdRxObject* pDestinationView, const OdRxObject* pSourceView) const;
+
+  // Util methods:
+
+  /** \details
+    Returns the eye coordinate system extents of the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param extents [out]  Receives the extents.
+
+    \remarks
+    Returns true if and only if the extents are defined.
+
+    \note
+    The components of extents are clipped to the range [-10e100..10e100].
+    \sa
+    Coordinate Systems
+  */
+  virtual bool viewExtents(
+    const OdRxObject* pViewport,
+    OdGeBoundBlock3d& extents) const = 0;
+
+  /** \details
+    Returns the eye coordinate system plotting extents of the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param extents [out]  Receives the extents.
+    \param bExtendOnly [in]  Only extend exist extents by overall viewport extents.
+    \param bExtentsValid [in]  Input extents is valid for extending using overall viewport extents.
+    \param pWorldToEye [in]  Optional WCS to ECS transformation for plot extents extending.
+
+    \remarks
+    Returns true if and only if the extents are defined.
+
+    \note
+    The components of extents are clipped to the range [-10e100..10e100].
+    \sa
+    Coordinate Systems
+  */
+  virtual bool plotExtents(
+    const OdRxObject* pViewport,
+    OdGeBoundBlock3d& extents,
+    bool bExtendOnly = false,
+    bool bExtentsValid = true,
+    const OdGeMatrix3d *pWorldToEye = NULL) const;
+
+  /** \details
+    Modifies the specified Viewport object to fit the specified eye coordinate system extents.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param pExtents [in]  Pointer to the extents.
+    \param extCoef [in]  Optional extents multiplier.
+
+    \remarks
+    Returns true if and only if the extents are defined.
+
+    \remarks
+    If pExtents is null, this function calls viewExtents() to determine the extents.
+  */
+  virtual bool zoomExtents(
+    OdRxObject* pViewport,
+    const OdGeBoundBlock3d* pExtents = 0,
+    double extCoef = 1.02) const;
+
+  /** \details
+    Returns the transformation matrix from WCS to EyeSpace for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGeMatrix3d worldToEye(const OdRxObject* pViewport) const;
+  /** \details
+    Returns the transformation matrix from EyeSpace to WCS for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGeMatrix3d eyeToWorld(const OdRxObject* pViewport) const;
+
+  /** \details
+    Returns true if and only if viewport is used during plotting.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isPlotting(const OdRxObject* pViewport) const;
+  /** \details
+    Returns the plot settings object pointer associated with this Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param bOpenForWrite [in]  Mode in which to open the object.
+    \remarks
+    Return OdDbPlotSettings object for OdDbViewportTableRecord Viewport object and
+    OdDbViewport object for OdDbViewport object or OdDbPlotSettings object for
+    overall OdDbViewport. Return Null object pointer for all other cases.
+    \sa
+    OdDbAbstractPlotData
+  */
+  virtual OdRxObjectPtr plotDataObject(const OdRxObject* pViewport, bool bOpenForWrite = false) const;
+  /** \details
+    Applies plot settings to view.
+    \param pSourceView [in]  Pointer to the source Viewport object.
+    \param pDestinationView [in]  Pointer to the destination Viewport object
+    \remarks
+    Returns true if plot settings was applied successfully.
+  */
+  virtual bool applyPlotSettings(OdRxObject* pDestinationView, const OdRxObject* pSourceView) const;
+
+  /** \details
+    Returns annotation scale object ID associated with this Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdDbStub *annotationScale(const OdRxObject* pViewport) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdAbstractViewPE object pointers.
+*/
+typedef OdSmartPtr<OdAbstractViewPE> OdAbstractViewPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_ABSTRACTVIEWPE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcadPalette.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcadPalette.h
new file mode 100755
index 0000000..97f490a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcadPalette.h
@@ -0,0 +1,547 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef ACAD_DARK_PALETTE
+
+// Acad's palette for dark background and for conversion to R15 (lookup color index )
+#define ACAD_DARK_PALETTE \
+\
+  ODPALENTRY(0, 0, 0) \
+  ODPALENTRY(255, 0, 0) \
+  ODPALENTRY(255, 255, 0) \
+  ODPALENTRY(0, 255, 0) \
+  ODPALENTRY(0, 255, 255) \
+  ODPALENTRY(0, 0, 255) \
+  ODPALENTRY(255, 0, 255) \
+  ODPALENTRY(255, 255, 255) \
+  ODPALENTRY(128, 128, 128) \
+  ODPALENTRY(192, 192, 192) \
+  ODPALENTRY(255, 0, 0) \
+  ODPALENTRY(255, 127, 127) \
+  ODPALENTRY(204, 0, 0) \
+  ODPALENTRY(204, 102, 102) \
+  ODPALENTRY(153, 0, 0) \
+  ODPALENTRY(153, 76, 76) \
+  ODPALENTRY(127, 0, 0) \
+  ODPALENTRY(127, 63, 63) \
+  ODPALENTRY(76, 0, 0) \
+  ODPALENTRY(76, 38, 38) \
+  ODPALENTRY(255, 63, 0) \
+  ODPALENTRY(255, 159, 127) \
+  ODPALENTRY(204, 51, 0) \
+  ODPALENTRY(204, 127, 102) \
+  ODPALENTRY(153, 38, 0) \
+  ODPALENTRY(153, 95, 76) \
+  ODPALENTRY(127, 31, 0) \
+  ODPALENTRY(127, 79, 63) \
+  ODPALENTRY(76, 19, 0) \
+  ODPALENTRY(76, 47, 38) \
+  ODPALENTRY(255, 127, 0) \
+  ODPALENTRY(255, 191, 127) \
+  ODPALENTRY(204, 102, 0) \
+  ODPALENTRY(204, 153, 102) \
+  ODPALENTRY(153, 76, 0) \
+  ODPALENTRY(153, 114, 76) \
+  ODPALENTRY(127, 63, 0) \
+  ODPALENTRY(127, 95, 63) \
+  ODPALENTRY(76, 38, 0) \
+  ODPALENTRY(76, 57, 38) \
+  ODPALENTRY(255, 191, 0) \
+  ODPALENTRY(255, 223, 127) \
+  ODPALENTRY(204, 153, 0) \
+  ODPALENTRY(204, 178, 102) \
+  ODPALENTRY(153, 114, 0) \
+  ODPALENTRY(153, 133, 76) \
+  ODPALENTRY(127, 95, 0) \
+  ODPALENTRY(127, 111, 63) \
+  ODPALENTRY(76, 57, 0) \
+  ODPALENTRY(76, 66, 38) \
+  ODPALENTRY(255, 255, 0) \
+  ODPALENTRY(255, 255, 127) \
+  ODPALENTRY(204, 204, 0) \
+  ODPALENTRY(204, 204, 102) \
+  ODPALENTRY(153, 153, 0) \
+  ODPALENTRY(153, 153, 76) \
+  ODPALENTRY(127, 127, 0) \
+  ODPALENTRY(127, 127, 63) \
+  ODPALENTRY(76, 76, 0) \
+  ODPALENTRY(76, 76, 38) \
+  ODPALENTRY(191, 255, 0) \
+  ODPALENTRY(223, 255, 127) \
+  ODPALENTRY(153, 204, 0) \
+  ODPALENTRY(178, 204, 102) \
+  ODPALENTRY(114, 153, 0) \
+  ODPALENTRY(133, 153, 76) \
+  ODPALENTRY(95, 127, 0) \
+  ODPALENTRY(111, 127, 63) \
+  ODPALENTRY(57, 76, 0) \
+  ODPALENTRY(66, 76, 38) \
+  ODPALENTRY(127, 255, 0) \
+  ODPALENTRY(191, 255, 127) \
+  ODPALENTRY(102, 204, 0) \
+  ODPALENTRY(153, 204, 102) \
+  ODPALENTRY(76, 153, 0) \
+  ODPALENTRY(114, 153, 76) \
+  ODPALENTRY(63, 127, 0) \
+  ODPALENTRY(95, 127, 63) \
+  ODPALENTRY(38, 76, 0) \
+  ODPALENTRY(57, 76, 38) \
+  ODPALENTRY(63, 255, 0) \
+  ODPALENTRY(159, 255, 127) \
+  ODPALENTRY(51, 204, 0) \
+  ODPALENTRY(127, 204, 102) \
+  ODPALENTRY(38, 153, 0) \
+  ODPALENTRY(95, 153, 76) \
+  ODPALENTRY(31, 127, 0) \
+  ODPALENTRY(79, 127, 63) \
+  ODPALENTRY(19, 76, 0) \
+  ODPALENTRY(47, 76, 38) \
+  ODPALENTRY(0, 255, 0) \
+  ODPALENTRY(127, 255, 127) \
+  ODPALENTRY(0, 204, 0) \
+  ODPALENTRY(102, 204, 102) \
+  ODPALENTRY(0, 153, 0) \
+  ODPALENTRY(76, 153, 76) \
+  ODPALENTRY(0, 127, 0) \
+  ODPALENTRY(63, 127, 63) \
+  ODPALENTRY(0, 76, 0) \
+  ODPALENTRY(38, 76, 38) \
+  ODPALENTRY(0, 255, 63) \
+  ODPALENTRY(127, 255, 159) \
+  ODPALENTRY(0, 204, 51) \
+  ODPALENTRY(102, 204, 127) \
+  ODPALENTRY(0, 153, 38) \
+  ODPALENTRY(76, 153, 95) \
+  ODPALENTRY(0, 127, 31) \
+  ODPALENTRY(63, 127, 79) \
+  ODPALENTRY(0, 76, 19) \
+  ODPALENTRY(38, 76, 47) \
+  ODPALENTRY(0, 255, 127) \
+  ODPALENTRY(127, 255, 191) \
+  ODPALENTRY(0, 204, 102) \
+  ODPALENTRY(102, 204, 153) \
+  ODPALENTRY(0, 153, 76) \
+  ODPALENTRY(76, 153, 114) \
+  ODPALENTRY(0, 127, 63) \
+  ODPALENTRY(63, 127, 95) \
+  ODPALENTRY(0, 76, 38) \
+  ODPALENTRY(38, 76, 57) \
+  ODPALENTRY(0, 255, 191) \
+  ODPALENTRY(127, 255, 223) \
+  ODPALENTRY(0, 204, 153) \
+  ODPALENTRY(102, 204, 178) \
+  ODPALENTRY(0, 153, 114) \
+  ODPALENTRY(76, 153, 133) \
+  ODPALENTRY(0, 127, 95) \
+  ODPALENTRY(63, 127, 111) \
+  ODPALENTRY(0, 76, 57) \
+  ODPALENTRY(38, 76, 66) \
+  ODPALENTRY(0, 255, 255) \
+  ODPALENTRY(127, 255, 255) \
+  ODPALENTRY(0, 204, 204) \
+  ODPALENTRY(102, 204, 204) \
+  ODPALENTRY(0, 153, 153) \
+  ODPALENTRY(76, 153, 153) \
+  ODPALENTRY(0, 127, 127) \
+  ODPALENTRY(63, 127, 127) \
+  ODPALENTRY(0, 76, 76) \
+  ODPALENTRY(38, 76, 76) \
+  ODPALENTRY(0, 191, 255) \
+  ODPALENTRY(127, 223, 255) \
+  ODPALENTRY(0, 153, 204) \
+  ODPALENTRY(102, 178, 204) \
+  ODPALENTRY(0, 114, 153) \
+  ODPALENTRY(76, 133, 153) \
+  ODPALENTRY(0, 95, 127) \
+  ODPALENTRY(63, 111, 127) \
+  ODPALENTRY(0, 57, 76) \
+  ODPALENTRY(38, 66, 76) \
+  ODPALENTRY(0, 127, 255) \
+  ODPALENTRY(127, 191, 255) \
+  ODPALENTRY(0, 102, 204) \
+  ODPALENTRY(102, 153, 204) \
+  ODPALENTRY(0, 76, 153) \
+  ODPALENTRY(76, 114, 153) \
+  ODPALENTRY(0, 63, 127) \
+  ODPALENTRY(63, 95, 127) \
+  ODPALENTRY(0, 38, 76) \
+  ODPALENTRY(38, 57, 76) \
+  ODPALENTRY(0, 63, 255) \
+  ODPALENTRY(127, 159, 255) \
+  ODPALENTRY(0, 51, 204) \
+  ODPALENTRY(102, 127, 204) \
+  ODPALENTRY(0, 38, 153) \
+  ODPALENTRY(76, 95, 153) \
+  ODPALENTRY(0, 31, 127) \
+  ODPALENTRY(63, 79, 127) \
+  ODPALENTRY(0, 19, 76) \
+  ODPALENTRY(38, 47, 76) \
+  ODPALENTRY(0, 0, 255) \
+  ODPALENTRY(127, 127, 255) \
+  ODPALENTRY(0, 0, 204) \
+  ODPALENTRY(102, 102, 204) \
+  ODPALENTRY(0, 0, 153) \
+  ODPALENTRY(76, 76, 153) \
+  ODPALENTRY(0, 0, 127) \
+  ODPALENTRY(63, 63, 127) \
+  ODPALENTRY(0, 0, 76) \
+  ODPALENTRY(38, 38, 76) \
+  ODPALENTRY(63, 0, 255) \
+  ODPALENTRY(159, 127, 255) \
+  ODPALENTRY(51, 0, 204) \
+  ODPALENTRY(127, 102, 204) \
+  ODPALENTRY(38, 0, 153) \
+  ODPALENTRY(95, 76, 153) \
+  ODPALENTRY(31, 0, 127) \
+  ODPALENTRY(79, 63, 127) \
+  ODPALENTRY(19, 0, 76) \
+  ODPALENTRY(47, 38, 76) \
+  ODPALENTRY(127, 0, 255) \
+  ODPALENTRY(191, 127, 255) \
+  ODPALENTRY(102, 0, 204) \
+  ODPALENTRY(153, 102, 204) \
+  ODPALENTRY(76, 0, 153) \
+  ODPALENTRY(114, 76, 153) \
+  ODPALENTRY(63, 0, 127) \
+  ODPALENTRY(95, 63, 127) \
+  ODPALENTRY(38, 0, 76) \
+  ODPALENTRY(57, 38, 76) \
+  ODPALENTRY(191, 0, 255) \
+  ODPALENTRY(223, 127, 255) \
+  ODPALENTRY(153, 0, 204) \
+  ODPALENTRY(178, 102, 204) \
+  ODPALENTRY(114, 0, 153) \
+  ODPALENTRY(133, 76, 153) \
+  ODPALENTRY(95, 0, 127) \
+  ODPALENTRY(111, 63, 127) \
+  ODPALENTRY(57, 0, 76) \
+  ODPALENTRY(66, 38, 76) \
+  ODPALENTRY(255, 0, 255) \
+  ODPALENTRY(255, 127, 255) \
+  ODPALENTRY(204, 0, 204) \
+  ODPALENTRY(204, 102, 204) \
+  ODPALENTRY(153, 0, 153) \
+  ODPALENTRY(153, 76, 153) \
+  ODPALENTRY(127, 0, 127) \
+  ODPALENTRY(127, 63, 127) \
+  ODPALENTRY(76, 0, 76) \
+  ODPALENTRY(76, 38, 76) \
+  ODPALENTRY(255, 0, 191) \
+  ODPALENTRY(255, 127, 223) \
+  ODPALENTRY(204, 0, 153) \
+  ODPALENTRY(204, 102, 178) \
+  ODPALENTRY(153, 0, 114) \
+  ODPALENTRY(153, 76, 133) \
+  ODPALENTRY(127, 0, 95) \
+  ODPALENTRY(127, 63, 111) \
+  ODPALENTRY(76, 0, 57) \
+  ODPALENTRY(76, 38, 66) \
+  ODPALENTRY(255, 0, 127) \
+  ODPALENTRY(255, 127, 191) \
+  ODPALENTRY(204, 0, 102) \
+  ODPALENTRY(204, 102, 153) \
+  ODPALENTRY(153, 0, 76) \
+  ODPALENTRY(153, 76, 114) \
+  ODPALENTRY(127, 0, 63) \
+  ODPALENTRY(127, 63, 95) \
+  ODPALENTRY(76, 0, 38) \
+  ODPALENTRY(76, 38, 57) \
+  ODPALENTRY(255, 0, 63) \
+  ODPALENTRY(255, 127, 159) \
+  ODPALENTRY(204, 0, 51) \
+  ODPALENTRY(204, 102, 127) \
+  ODPALENTRY(153, 0, 38) \
+  ODPALENTRY(153, 76, 95) \
+  ODPALENTRY(127, 0, 31) \
+  ODPALENTRY(127, 63, 79) \
+  ODPALENTRY(76, 0, 19) \
+  ODPALENTRY(76, 38, 47) \
+  ODPALENTRY(51, 51, 51) \
+  ODPALENTRY(91, 91, 91) \
+  ODPALENTRY(132, 132, 132) \
+  ODPALENTRY(173, 173, 173) \
+  ODPALENTRY(214, 214, 214) \
+  ODPALENTRY(255, 255, 255)
+
+// Acad's palette for light background
+#define ACAD_LIGHT_PALETTE \
+\
+  ODPALENTRY(255, 255, 255) \
+  ODPALENTRY(255, 0, 0) \
+  ODPALENTRY(255, 255, 0) \
+  ODPALENTRY(0, 255, 0) \
+  ODPALENTRY(0, 255, 255) \
+  ODPALENTRY(0, 0, 255) \
+  ODPALENTRY(255, 0, 255) \
+  ODPALENTRY(0, 0, 0) \
+  ODPALENTRY(128, 128, 128) \
+  ODPALENTRY(192, 192, 192) \
+  ODPALENTRY(255, 0, 0) \
+  ODPALENTRY(255, 127, 127) \
+  ODPALENTRY(165, 0, 0) \
+  ODPALENTRY(165, 82, 82) \
+  ODPALENTRY(127, 0, 0) \
+  ODPALENTRY(127, 63, 63) \
+  ODPALENTRY(76, 0, 0) \
+  ODPALENTRY(76, 38, 38) \
+  ODPALENTRY(38, 0, 0) \
+  ODPALENTRY(38, 19, 19) \
+  ODPALENTRY(255, 63, 0) \
+  ODPALENTRY(255, 159, 127) \
+  ODPALENTRY(165, 41, 0) \
+  ODPALENTRY(165, 103, 82) \
+  ODPALENTRY(127, 31, 0) \
+  ODPALENTRY(127, 79, 63) \
+  ODPALENTRY(76, 19, 0) \
+  ODPALENTRY(76, 47, 38) \
+  ODPALENTRY(38, 9, 0) \
+  ODPALENTRY(38, 23, 19) \
+  ODPALENTRY(255, 127, 0) \
+  ODPALENTRY(255, 191, 127) \
+  ODPALENTRY(165, 82, 0) \
+  ODPALENTRY(165, 124, 82) \
+  ODPALENTRY(127, 63, 0) \
+  ODPALENTRY(127, 95, 63) \
+  ODPALENTRY(76, 38, 0) \
+  ODPALENTRY(76, 57, 38) \
+  ODPALENTRY(38, 19, 0) \
+  ODPALENTRY(38, 28, 19) \
+  ODPALENTRY(255, 191, 0) \
+  ODPALENTRY(255, 223, 127) \
+  ODPALENTRY(165, 124, 0) \
+  ODPALENTRY(165, 145, 82) \
+  ODPALENTRY(127, 95, 0) \
+  ODPALENTRY(127, 111, 63) \
+  ODPALENTRY(76, 57, 0) \
+  ODPALENTRY(76, 66, 38) \
+  ODPALENTRY(38, 28, 0) \
+  ODPALENTRY(38, 33, 19) \
+  ODPALENTRY(255, 255, 0) \
+  ODPALENTRY(255, 255, 127) \
+  ODPALENTRY(165, 165, 0) \
+  ODPALENTRY(165, 165, 82) \
+  ODPALENTRY(127, 127, 0) \
+  ODPALENTRY(127, 127, 63) \
+  ODPALENTRY(76, 76, 0) \
+  ODPALENTRY(76, 76, 38) \
+  ODPALENTRY(38, 38, 0) \
+  ODPALENTRY(38, 38, 19) \
+  ODPALENTRY(191, 255, 0) \
+  ODPALENTRY(223, 255, 127) \
+  ODPALENTRY(124, 165, 0) \
+  ODPALENTRY(145, 165, 82) \
+  ODPALENTRY(95, 127, 0) \
+  ODPALENTRY(111, 127, 63) \
+  ODPALENTRY(57, 76, 0) \
+  ODPALENTRY(66, 76, 38) \
+  ODPALENTRY(28, 38, 0) \
+  ODPALENTRY(33, 38, 19) \
+  ODPALENTRY(127, 255, 0) \
+  ODPALENTRY(191, 255, 127) \
+  ODPALENTRY(82, 165, 0) \
+  ODPALENTRY(124, 165, 82) \
+  ODPALENTRY(63, 127, 0) \
+  ODPALENTRY(95, 127, 63) \
+  ODPALENTRY(38, 76, 0) \
+  ODPALENTRY(57, 76, 38) \
+  ODPALENTRY(19, 38, 0) \
+  ODPALENTRY(28, 38, 19) \
+  ODPALENTRY(63, 255, 0) \
+  ODPALENTRY(159, 255, 127) \
+  ODPALENTRY(41, 165, 0) \
+  ODPALENTRY(103, 165, 82) \
+  ODPALENTRY(31, 127, 0) \
+  ODPALENTRY(79, 127, 63) \
+  ODPALENTRY(19, 76, 0) \
+  ODPALENTRY(47, 76, 38) \
+  ODPALENTRY(9, 38, 0) \
+  ODPALENTRY(23, 38, 19) \
+  ODPALENTRY(0, 255, 0) \
+  ODPALENTRY(127, 255, 127) \
+  ODPALENTRY(0, 165, 0) \
+  ODPALENTRY(82, 165, 82) \
+  ODPALENTRY(0, 127, 0) \
+  ODPALENTRY(63, 127, 63) \
+  ODPALENTRY(0, 76, 0) \
+  ODPALENTRY(38, 76, 38) \
+  ODPALENTRY(0, 38, 0) \
+  ODPALENTRY(19, 38, 19) \
+  ODPALENTRY(0, 255, 63) \
+  ODPALENTRY(127, 255, 159) \
+  ODPALENTRY(0, 165, 41) \
+  ODPALENTRY(82, 165, 103) \
+  ODPALENTRY(0, 127, 31) \
+  ODPALENTRY(63, 127, 79) \
+  ODPALENTRY(0, 76, 19) \
+  ODPALENTRY(38, 76, 47) \
+  ODPALENTRY(0, 38, 9) \
+  ODPALENTRY(19, 38, 23) \
+  ODPALENTRY(0, 255, 127) \
+  ODPALENTRY(127, 255, 191) \
+  ODPALENTRY(0, 165, 82) \
+  ODPALENTRY(82, 165, 124) \
+  ODPALENTRY(0, 127, 63) \
+  ODPALENTRY(63, 127, 95) \
+  ODPALENTRY(0, 76, 38) \
+  ODPALENTRY(38, 76, 57) \
+  ODPALENTRY(0, 38, 19) \
+  ODPALENTRY(19, 38, 28) \
+  ODPALENTRY(0, 255, 191) \
+  ODPALENTRY(127, 255, 223) \
+  ODPALENTRY(0, 165, 124) \
+  ODPALENTRY(82, 165, 145) \
+  ODPALENTRY(0, 127, 95) \
+  ODPALENTRY(63, 127, 111) \
+  ODPALENTRY(0, 76, 57) \
+  ODPALENTRY(38, 76, 66) \
+  ODPALENTRY(0, 38, 28) \
+  ODPALENTRY(19, 38, 33) \
+  ODPALENTRY(0, 255, 255) \
+  ODPALENTRY(127, 255, 255) \
+  ODPALENTRY(0, 165, 165) \
+  ODPALENTRY(82, 165, 165) \
+  ODPALENTRY(0, 127, 127) \
+  ODPALENTRY(63, 127, 127) \
+  ODPALENTRY(0, 76, 76) \
+  ODPALENTRY(38, 76, 76) \
+  ODPALENTRY(0, 38, 38) \
+  ODPALENTRY(19, 38, 38) \
+  ODPALENTRY(0, 191, 255) \
+  ODPALENTRY(127, 223, 255) \
+  ODPALENTRY(0, 124, 165) \
+  ODPALENTRY(82, 145, 165) \
+  ODPALENTRY(0, 95, 127) \
+  ODPALENTRY(63, 111, 127) \
+  ODPALENTRY(0, 57, 76) \
+  ODPALENTRY(38, 66, 76) \
+  ODPALENTRY(0, 28, 38) \
+  ODPALENTRY(19, 33, 38) \
+  ODPALENTRY(0, 127, 255) \
+  ODPALENTRY(127, 191, 255) \
+  ODPALENTRY(0, 82, 165) \
+  ODPALENTRY(82, 124, 165) \
+  ODPALENTRY(0, 63, 127) \
+  ODPALENTRY(63, 95, 127) \
+  ODPALENTRY(0, 38, 76) \
+  ODPALENTRY(38, 57, 76) \
+  ODPALENTRY(0, 19, 38) \
+  ODPALENTRY(19, 28, 38) \
+  ODPALENTRY(0, 63, 255) \
+  ODPALENTRY(127, 159, 255) \
+  ODPALENTRY(0, 41, 165) \
+  ODPALENTRY(82, 103, 165) \
+  ODPALENTRY(0, 31, 127) \
+  ODPALENTRY(63, 79, 127) \
+  ODPALENTRY(0, 19, 76) \
+  ODPALENTRY(38, 47, 76) \
+  ODPALENTRY(0, 9, 38) \
+  ODPALENTRY(19, 23, 38) \
+  ODPALENTRY(0, 0, 255) \
+  ODPALENTRY(127, 127, 255) \
+  ODPALENTRY(0, 0, 165) \
+  ODPALENTRY(82, 82, 165) \
+  ODPALENTRY(0, 0, 127) \
+  ODPALENTRY(63, 63, 127) \
+  ODPALENTRY(0, 0, 76) \
+  ODPALENTRY(38, 38, 76) \
+  ODPALENTRY(0, 0, 38) \
+  ODPALENTRY(19, 19, 38) \
+  ODPALENTRY(63, 0, 255) \
+  ODPALENTRY(159, 127, 255) \
+  ODPALENTRY(41, 0, 165) \
+  ODPALENTRY(103, 82, 165) \
+  ODPALENTRY(31, 0, 127) \
+  ODPALENTRY(79, 63, 127) \
+  ODPALENTRY(19, 0, 76) \
+  ODPALENTRY(47, 38, 76) \
+  ODPALENTRY(9, 0, 38) \
+  ODPALENTRY(23, 19, 38) \
+  ODPALENTRY(127, 0, 255) \
+  ODPALENTRY(191, 127, 255) \
+  ODPALENTRY(82, 0, 165) \
+  ODPALENTRY(124, 82, 165) \
+  ODPALENTRY(63, 0, 127) \
+  ODPALENTRY(95, 63, 127) \
+  ODPALENTRY(38, 0, 76) \
+  ODPALENTRY(57, 38, 76) \
+  ODPALENTRY(19, 0, 38) \
+  ODPALENTRY(28, 19, 38) \
+  ODPALENTRY(191, 0, 255) \
+  ODPALENTRY(223, 127, 255) \
+  ODPALENTRY(124, 0, 165) \
+  ODPALENTRY(145, 82, 165) \
+  ODPALENTRY(95, 0, 127) \
+  ODPALENTRY(111, 63, 127) \
+  ODPALENTRY(57, 0, 76) \
+  ODPALENTRY(66, 38, 76) \
+  ODPALENTRY(28, 0, 38) \
+  ODPALENTRY(33, 19, 38) \
+  ODPALENTRY(255, 0, 255) \
+  ODPALENTRY(255, 127, 255) \
+  ODPALENTRY(165, 0, 165) \
+  ODPALENTRY(165, 82, 165) \
+  ODPALENTRY(127, 0, 127) \
+  ODPALENTRY(127, 63, 127) \
+  ODPALENTRY(76, 0, 76) \
+  ODPALENTRY(76, 38, 76) \
+  ODPALENTRY(38, 0, 38) \
+  ODPALENTRY(38, 19, 38) \
+  ODPALENTRY(255, 0, 191) \
+  ODPALENTRY(255, 127, 223) \
+  ODPALENTRY(165, 0, 124) \
+  ODPALENTRY(165, 82, 145) \
+  ODPALENTRY(127, 0, 95) \
+  ODPALENTRY(127, 63, 111) \
+  ODPALENTRY(76, 0, 57) \
+  ODPALENTRY(76, 38, 66) \
+  ODPALENTRY(38, 0, 28) \
+  ODPALENTRY(38, 19, 33) \
+  ODPALENTRY(255, 0, 127) \
+  ODPALENTRY(255, 127, 191) \
+  ODPALENTRY(165, 0, 82) \
+  ODPALENTRY(165, 82, 124) \
+  ODPALENTRY(127, 0, 63) \
+  ODPALENTRY(127, 63, 95) \
+  ODPALENTRY(76, 0, 38) \
+  ODPALENTRY(76, 38, 57) \
+  ODPALENTRY(38, 0, 19) \
+  ODPALENTRY(38, 19, 28) \
+  ODPALENTRY(255, 0, 63) \
+  ODPALENTRY(255, 127, 159) \
+  ODPALENTRY(165, 0, 41) \
+  ODPALENTRY(165, 82, 103) \
+  ODPALENTRY(127, 0, 31) \
+  ODPALENTRY(127, 63, 79) \
+  ODPALENTRY(76, 0, 19) \
+  ODPALENTRY(76, 38, 47) \
+  ODPALENTRY(38, 0, 9) \
+  ODPALENTRY(38, 19, 23) \
+  ODPALENTRY(0, 0, 0) \
+  ODPALENTRY(45, 45, 45) \
+  ODPALENTRY(91, 91, 91) \
+  ODPALENTRY(137, 137, 137) \
+  ODPALENTRY(183, 183, 183) \
+  ODPALENTRY(179, 179, 179)
+
+#endif //#ifndef ACAD_DARK_PALETTE
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ABExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ABExport.h
new file mode 100755
index 0000000..de7b1dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ABExport.h
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _AB_EXPORT_DEFINED
+#define _AB_EXPORT_DEFINED
+
+#include "OdPlatformSettings.h"
+
+#ifdef ACISBLDR_EXPORTS
+  #define AB_EXPORT         OD_TOOLKIT_EXPORT
+  #define AB_EXPORT_STATIC  OD_STATIC_EXPORT
+#else                       
+  #define AB_EXPORT         OD_TOOLKIT_IMPORT
+  #define AB_EXPORT_STATIC  OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif //_AB_EXPORT_DEFINED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ISatConverter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ISatConverter.h
new file mode 100755
index 0000000..52373ae
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/AcisBuilder/ISatConverter.h
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __ISATCONVERTER_H__
+#define __ISATCONVERTER_H__
+
+#include "ABExport.h"
+#include "OdStreamBuf.h"
+#include "ModelerDefs.h"
+#include "OdArray.h"
+
+/** \details
+    This class is the base class for classes that provide platform-dependent loading and saving
+    of SAT files for Teigha.
+
+    Library: TD_AcisBuilder
+    <group AcisBuilder_Classes>
+*/
+class AB_EXPORT ISATConverter
+{
+public:
+  /** \details
+      Loads the specified SAT file. 
+      \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+      \param typeVer [out]  Receives the type and version of the SAT file.
+      \param standardSaveFlag [in]  Controls the saving and restoring of use count data in the save file.
+      \remarks
+      Returns true if and only if successful
+  */
+  virtual bool SatIn ( OdStreamBuf *pStreamBuf, AfTypeVer *typeVer, bool standardSaveFlag = true) = 0;
+  /** \details
+      Saves the specified SAT file. 
+      \param pStreamBuf [in]  Pointer to the StreamBuf object to which the data are to be written.
+      \param typeVer [in]  Type and version of the SAT file.
+      \param standardSaveFlag [in]  Controls the saving and restoring of use count data in the save file.
+      \remarks
+      Returns true if and only if successful
+  */
+  virtual bool SatOut( OdStreamBuf *pStreamBuf, AfTypeVer  typeVer, bool standardSaveFlag = true) = 0;
+
+  virtual void *getIBr( ) = 0;
+
+  virtual ~ISATConverter();
+};
+
+AB_EXPORT bool ABBreakToSingleBody(OdStreamBuf *pStreamBuf, AfTypeVer *typeVer, bool standardSaveFlag, OdArray<ISATConverter*>& entitySet);
+
+AB_EXPORT ISATConverter* ABCreateConverter();
+
+AB_EXPORT void ABDeleteConverter(ISATConverter* pIC);
+
+#endif // __ISATCONVERTER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ApLongTransactions.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ApLongTransactions.h
new file mode 100755
index 0000000..20b7733
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ApLongTransactions.h
@@ -0,0 +1,153 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef   _LONG_TRANSACTION_MANAGER_H_INCLUDED_
+#define   _LONG_TRANSACTION_MANAGER_H_INCLUDED_
+
+#include "RxObject.h"
+#include "IdArrays.h"
+#include "TD_PackPush.h"
+
+class OdDbLongTransaction;
+class OdDbDatabase;
+class OdDbIdMapping;
+
+/** \details
+    This class is used to access callbacks for long transactions.  
+
+    \sa
+    TD_Db
+
+	<group OdAp_Classes>
+*/
+class TOOLKIT_EXPORT OdApLongTransactionReactor: public OdRxObject 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdApLongTransactionReactor);
+  OdApLongTransactionReactor();
+
+   /** \details
+    Begins the checkout process of the specified long transaction.
+
+	\param originList [in]  List/array of objects (in the same block table record) to check out.
+   */
+  virtual void beginCheckOut        (OdDbLongTransaction& , OdDbObjectIdArray& originList);
+ /** \details
+    Completes the checkout process and returns the long transaction.
+ */
+  virtual void endCheckOut          (OdDbLongTransaction& );
+   /** \details
+    Begins the checkin process of the specified long transaction.
+   */
+  virtual void beginCheckIn         (OdDbLongTransaction& );
+   /** \details
+    Completes the checkin process of the specified long transaction.
+   */
+  virtual void endCheckIn           (OdDbLongTransaction& );
+   /** \details
+    Terminates the check out process and returns the aborted long transaction.
+   */
+  virtual void abortLongTransaction (OdDbLongTransaction& );
+
+  /** \details
+    Terminates the check out process, if in progress.
+  */
+protected:
+  OdResult veto();
+
+private:
+  bool m_Veto;
+  friend class OdApLongTransactionManagerImpl;
+};
+
+/** \details
+    This class controls long transactions. 
+
+    \remarks
+    There is one OdApLongTransactionManager object per application session.  
+    
+    \sa
+    TD_Db
+
+	<group OdAp_Classes> 
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdApLongTransactionManager : public OdRxObject 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdApLongTransactionManager);
+
+  /** \details
+    Generates a new long transaction and clones objects from the specified list.
+    
+    \param transID [out]  Receives the object ID of the new long transaction.
+	\param objList [in]  List/array of objects (in the same block table record) to check out.
+	\param toBlock [in]  Object ID of the block table record to which the objects will be cloned.
+	\param errorMap [out]  Receives an empty mapping object.
+	\param lockBlkRef [in]  Optional object ID of the last block reference, which during checkout will
+	will be placed on a locked layer.
+  */
+  virtual OdResult checkOut(OdDbObjectId& transId, OdDbObjectIdArray& objList,
+    OdDbObjectId toBlock, OdDbIdMapping& errorMap, OdDbObjectId lockBlkRef = OdDbObjectId::kNull) = 0;
+
+  /** \details
+    Checks in a long transaction that was previously checked out.
+    
+    \param transID [in]  Object ID of the long transaction.
+	\param errorMap [out]  Receives an empty mapping object.
+	\param keepObjs [in]  Boolean value indicating whether to keep workset objects.
+  */
+  virtual OdResult checkIn(OdDbObjectId transId, OdDbIdMapping& errorMap, bool keepObjs = false) = 0;
+
+  /** \details
+    Terminates a long transaction during or in between checkin and checkout.
+    
+    \param transID [in]  Object ID of the long transaction.
+	\param keepObjs [in]  Boolean value indicating whether to keep cloned objects.
+  */
+  virtual OdResult abortLongTransaction(OdDbObjectId transId, bool keepObjs = false) = 0;
+
+  virtual OdDbObjectId currentLongTransactionFor(const OdDbDatabase* pDb) const = 0;
+  /** \details
+    Adds the specified reactor to this object's reactor list.
+  */
+  virtual void addReactor(OdApLongTransactionReactor*) = 0;
+  /** \details
+    Deletes the specified reactor from this object's reactor list.
+  */
+  virtual void removeReactor(OdApLongTransactionReactor*) = 0;
+
+  /** \details
+    Adds the class of the specified OdRxClass object to the class filter.
+  */
+  virtual OdResult addClassFilter (OdRxClass* ) = 0;
+  /** \details
+    Returns True if the class of the specified OdRxClass object is in the class filter.
+  */
+  virtual bool isFiltered (OdRxClass* ) const = 0;
+};
+
+extern TOOLKIT_EXPORT OdApLongTransactionManager* odapLongTransactionManager();
+
+#include "TD_PackPop.h"
+#endif  // _LONG_TRANSACTION_MANAGER_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BaseObjectPtr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BaseObjectPtr.h
new file mode 100755
index 0000000..efa55dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BaseObjectPtr.h
@@ -0,0 +1,75 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODABASEOBJECTPOINTER_INCLUDED_
+#define _ODABASEOBJECTPOINTER_INCLUDED_
+
+#include "TD_PackPush.h"
+
+class OdRxObject;
+
+/** \details
+    <group Other_Classes>
+
+    This class is the base class for typified smart pointers.
+
+    \sa
+    TD_Db
+    
+    \remarks
+    Smart pointers relieve the programmer of having to determine when objects are no longer needed, or having to delete
+    them at that time.
+
+    Each object referenced by a SmartPointer (henceforth 'referenced object') 
+    maintains a reference count; i.e., how many SmartPointers are referencing it.
+    When the reference count reaches zero, the referenced object is deleted.
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes> 
+*/
+class FIRSTDLL_EXPORT OdBaseObjectPtr
+{
+protected:
+  OdRxObject* m_pObject;
+  
+  OdBaseObjectPtr() : m_pObject(0) {}
+  explicit OdBaseObjectPtr(const OdRxObject *pSource) : m_pObject(const_cast<OdRxObject*>(pSource)) {}
+public:
+  /** \details
+    Returns the raw pointer to the referenced object. 
+    
+    \remarks
+    This class maintains the reference to the referenced object. 
+    The reference counter of the referenced object is not changed.
+  */
+  OdRxObject* get() const { return m_pObject; }
+  
+  /** \details
+     Returns true if and only if the smart pointer stores a NULL.
+  */
+  bool isNull() const { return m_pObject == 0; }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODABASEOBJECTPOINTER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BoolArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BoolArray.h
new file mode 100755
index 0000000..331302a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BoolArray.h
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODBOOLARRAY_INCLUDED
+#define ODBOOLARRAY_INCLUDED
+
+#include "OdArray.h"
+typedef bool OdBool;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdBool objects.
+*/
+typedef OdArray<OdBool, OdMemoryAllocator<OdBool> > OdBoolArray;
+
+#endif // ODBOOLARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrep.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrep.h
new file mode 100755
index 0000000..77d6f1c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrep.h
@@ -0,0 +1,74 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRBREP_3F82B32C036B_INCLUDED
+#define _INC_DDBRBREP_3F82B32C036B_INCLUDED
+
+#include "Br/BrEntity.h"
+
+#include "TD_PackPush.h"
+
+class OdGeMatrix3d;
+/** \details
+    This class is the interface class for the BREP portions of OdDbDatabase objects.
+    
+    \remarks
+    This class provides the top-level interface for traversing the BREP structure
+    of the 3d data contained in an OdDb3dSolid (or other 3d) entity, 
+    
+    Library: TD_Br
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrBrep : public OdBrEntity
+{
+public:
+
+  /** \details
+    Sets the 3d data for this BREP object from the specified 3d file.
+    \remarks
+    See the sample file, OdBrEx.cpp in the Examples/OdBrEx folder
+    for sample usage.
+    \param pFile [in]  Pointer to the 3d file object.
+  */
+  void set(const void* pFile);
+
+  /** \details
+    Returns true and only if this BREP object contains valid 3d data..
+  */
+  bool isValid() const;
+
+  /** \details
+    Returns the transformation matrix for this BREP object.
+    \param xfm [out]  Receives the transformation matrix.
+  */
+  bool getTransformation( OdGeMatrix3d& xfm ) const;
+
+  OdBrBrep();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRBREP_3F82B32C036B_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepComplexTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepComplexTraverser.h
new file mode 100755
index 0000000..c47f7c8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepComplexTraverser.h
@@ -0,0 +1,86 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _INC_DDBRBREPCOMPLEXTRAVERSER_3F83F47F036B_INCLUDED
+#define _INC_DDBRBREPCOMPLEXTRAVERSER_3F83F47F036B_INCLUDED
+
+#include "Br/BrBrep.h"
+#include "Br/BrComplex.h"
+#include "Br/BrTraverser.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the interface class for BREP complex traversers.
+    
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrBrepComplexTraverser : public OdBrTraverser
+{
+public:
+	OdBrBrepComplexTraverser();
+
+  /** \details
+    Sets this Traverser object to a specific BREP complex list.
+    \param brep [in]  Owner of the complex list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+    
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setBrep(const OdBrBrep& brep);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param complex [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setComplex(const OdBrComplex& complex);
+
+  /** \details
+    Sets this Traverser object to a specific BREP complex list
+    and starting position.
+    \param complex [in]  Defines the complex list and starting position.
+  */
+  OdBrErrorStatus setBrepAndComplex(const OdBrComplex& complex);
+
+  /** \details
+    Returns the complex object at the current Traverser position.
+  */
+  OdBrComplex getComplex() const;
+
+
+  /** \details
+    Returns the owner of the complex list associated with this Traverser object.
+  */
+  OdBrBrep getBrep() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRBREPCOMPLEXTRAVERSER_3F83F47F036B_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepEdgeTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepEdgeTraverser.h
new file mode 100755
index 0000000..6940000
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepEdgeTraverser.h
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _INC_DDBRBREPEDGETRAVERSER_3F83F4F5003E_INCLUDED
+#define _INC_DDBRBREPEDGETRAVERSER_3F83F4F5003E_INCLUDED
+
+#include "Br/BrEdge.h"
+#include "Br/BrBrep.h"
+#include "Br/BrTraverser.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  This class is the interface class for BREP edge traversers.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrBrepEdgeTraverser : public OdBrTraverser
+{
+public:
+  /** \details
+    Sets this Traverser object to a specific BREP edge list.
+    \param brep [in]  Owner of the edge list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setBrep(const OdBrBrep& brep);
+
+  /** \details
+    Sets this Traverser object to a specific BREP edge list
+    and starting position.
+    \param edge [in]  Defines the edge list and starting position.
+  */
+  OdBrErrorStatus setBrepAndEdge(const OdBrEdge& edge);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param edge [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setEdge(const OdBrEdge& edge);
+
+  /** \details
+    Returns the edge object at the current Traverser position.
+  */
+  OdBrEdge getEdge() const;
+  /** \details
+    Returns the owner of the edge list associated with this Traverser object.
+  */
+  OdBrBrep getBrep() const;
+
+  OdBrBrepEdgeTraverser();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRBREPEDGETRAVERSER_3F83F4F5003E_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepFaceTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepFaceTraverser.h
new file mode 100755
index 0000000..565b585
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepFaceTraverser.h
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRBREPFACETRAVERSER_3F82E09A008C_INCLUDED
+#define _INC_DDBRBREPFACETRAVERSER_3F82E09A008C_INCLUDED
+#include "Br/BrBrep.h"
+#include "Br/BrFace.h"
+
+
+#include "Br/BrTraverser.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the interface class for BREP face traversers.
+    
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrBrepFaceTraverser : public OdBrTraverser
+{
+public:
+  //OdBrErrorStatus setBrep(OdBrBrep& OdBrep);
+
+  OdBrBrepFaceTraverser();
+
+  /** \details
+    Sets this Traverser object to a specific BREP face list.
+    \param brep [in]  Owner of the face list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setBrep(const OdBrBrep& brep);
+
+  /** \details
+    Sets this Traverser object to a specific BREP face list
+    and starting position.
+    \param face [in]  Defines the face list and starting position.
+  */
+  OdBrErrorStatus setBrepAndFace(const OdBrFace& face);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param face [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setFace(const OdBrFace& face);
+
+  /** \details
+    Returns the face object at the current Traverser position.
+  */
+  OdBrFace getFace() const;
+  /** \details
+    Returns the owner of the face list associated with this Traverser object.
+  */
+  OdBrBrep getBrep() const;
+
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRBREPFACETRAVERSER_3F82E09A008C_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepShellTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepShellTraverser.h
new file mode 100755
index 0000000..9ed90e0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepShellTraverser.h
@@ -0,0 +1,86 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _INC_DDBRBREPSHELLTRAVERSER_3F83F556035B_INCLUDED
+#define _INC_DDBRBREPSHELLTRAVERSER_3F83F556035B_INCLUDED
+#include "Br/BrBrep.h"
+#include "Br/BrShell.h"
+
+
+#include "Br/BrTraverser.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class is the interface class for BREP shell traversers.
+    
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrBrepShellTraverser : public OdBrTraverser
+{
+public:
+  /** \details
+    Sets this Traverser object to a specific BREP shell list.
+    \param brep [in]  Owner of the shell list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setBrep(const OdBrBrep& brep);
+
+  /** \details
+    Sets this Traverser object to a specific BREP shell list
+    and starting position.
+    \param shell [in]  Defines the shell list and starting position.
+  */
+  OdBrErrorStatus setBrepAndShell(const OdBrShell& shell);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param shell [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setShell(const OdBrShell& shell);
+
+  /** \details
+    Returns the shell object at the current Traverser position.
+  */
+  OdBrShell getShell() const;
+  /** \details
+    Returns the owner of the shell list associated with this Traverser object.
+  */
+  OdBrBrep getBrep() const;
+
+  OdBrBrepShellTraverser();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRBREPSHELLTRAVERSER_3F83F556035B_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepVertexTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepVertexTraverser.h
new file mode 100755
index 0000000..97c13a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrBrepVertexTraverser.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRBREPVERTEXTRAVERSER_3F83F4F5003E_INCLUDED
+#define _INC_DDBRBREPVERTEXTRAVERSER_3F83F4F5003E_INCLUDED
+
+#include "Br/BrVertex.h"
+#include "Br/BrBrep.h"
+#include "Br/BrTraverser.h"
+
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the interface class for BREP vertex traversers.
+    
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrBrepVertexTraverser : public OdBrTraverser
+{
+public:
+  /** \details
+    Sets this Traverser object to a specific BREP vertex list.
+    \param brep [in]  Owner of the vertex list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setBrep(const OdBrBrep& brep);
+
+  /** \details
+    Sets this Traverser object to a specific BREP vertex list
+    and starting position.
+    \param vertex [in]  Defines the vertex list and starting position.
+  */
+  OdBrErrorStatus setBrepAndVertex(const OdBrVertex& vertex);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param vertex [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setVertex(const OdBrVertex& vertex);
+
+  /** \details
+    Returns the vertex object at the current Traverser position.
+  */
+  OdBrVertex getVertex() const;
+  /** \details
+    Returns the owner of the vertex list associated with this Traverser object.
+  */
+  OdBrBrep getBrep() const;
+
+  OdBrBrepVertexTraverser();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRBREPVERTEXTRAVERSER_3F83F4F5003E_INCLUDED */
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplex.h
new file mode 100755
index 0000000..78f79c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplex.h
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRCOMPLEX_3F83F2980186_INCLUDED
+#define _INC_DDBRCOMPLEX_3F83F2980186_INCLUDED
+
+#include "Br/BrEntity.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the interface class for BREP complexes.
+  
+    Library: TD_Br
+    
+    \remarks
+    Complexes are primary elements with no associated geometries. 
+
+    Complexes are comprised of one or more connected shell boundaries,
+    and correspond to connected regions of points in 3D space.
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrComplex : public OdBrEntity
+{
+public:
+  OdBrComplex();
+
+  ~OdBrComplex();
+
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRCOMPLEX_3F83F2980186_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplexShellTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplexShellTraverser.h
new file mode 100755
index 0000000..8fe308a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrComplexShellTraverser.h
@@ -0,0 +1,88 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRCOMPLEXSHELLTRAVERSER_3F83F6550148_INCLUDED
+#define _INC_DDBRCOMPLEXSHELLTRAVERSER_3F83F6550148_INCLUDED
+
+#include "Br/BrComplex.h"
+#include "Br/BrShell.h"
+#include "Br/BrTraverser.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class is the interface class for complex shell traversers.
+
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrComplexShellTraverser : public OdBrTraverser
+{
+public:
+  OdBrComplexShellTraverser();
+
+  /** \details
+    Sets this Traverser object to a specific complex shell list.
+    \param complex [in]  Owner of the shell list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setComplex(const OdBrComplex& complex);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param shell [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setShell(const OdBrShell& shell);
+
+  /** \details
+    Sets this Traverser object to a specific complex shell list
+    and starting position.
+    \param shell [in]  Defines the shell list and starting position.
+  */
+  OdBrErrorStatus setComplexAndShell(const OdBrShell& shell);
+
+  /** \details
+    Returns the shell object at the current Traverser position.
+  */
+  OdBrShell getShell() const;
+
+  /** \details
+    Returns the owner of the shell list associated with this Traverser object.
+  */
+  OdBrComplex getComplex() const;
+
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRCOMPLEXSHELLTRAVERSER_3F83F6550148_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdge.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdge.h
new file mode 100755
index 0000000..049f319
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdge.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBREDGE_3F82D9C2030D_INCLUDED
+#define _INC_DDBREDGE_3F82D9C2030D_INCLUDED
+
+#include "Br/BrEntity.h"
+#include "Br/BrVertex.h"
+
+#include "Br/BrEnums.h"
+
+class OdGeNurbCurve3d;
+class OdGeCurve3d;
+class OdCmEntityColor;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the interface class for BREP edges.
+
+    \sa
+    TD_Br
+    
+    \remarks
+    Edges are primary BREP elements with associated geometries: curves. 
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrEdge : public OdBrEntity
+{
+public:
+  /** \details
+    Returns the end vertex of this Edge entity.
+    \param vertex2 [out]  Receives the end vertex.
+  */
+  bool getVertex2(OdBrVertex &vertex2) const;
+
+  /** \details
+    Returns the start vertex of this Edge entity.
+    \param vertex1 [out]  Receives the start vertex.
+  */
+  bool getVertex1(OdBrVertex &vertex1) const;
+
+  /** \details
+    Returns the best match of the underlying curve of this Edge entity to curves supported by OdGe.
+  */
+  OdGe::EntityId getCurveType() const;
+
+  /** \details
+    Returns the underlying curve of this Edge entity as an OdGeCurve3d object.
+  */
+  OdGeCurve3d* getCurve() const;
+
+  /** \details
+  Returns the underlying curve of this Edge entity as an OdGeCurve3d object.
+  */
+  OdBrErrorStatus getCurve(OdGeCurve3d* &pCurve) const;
+  
+  /** \details
+    Returns the underlying curve of this Edge entity as an OdGeNurbCurve3d object.
+    
+    \param nurb [out]  Receives the NURBS curve.
+    
+    \remarks
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  bool getCurveAsNurb(OdGeNurbCurve3d& nurb) const;
+
+  /** \details
+    Returns true if and only if the orientation of the edge from vertex 1 to vertex 2 is the 
+    same as the orientation of the curve parameterization.
+    
+    \remarks
+    The orientation of the underlying curve may be modified with OdGeCurve3d::reverseParam().  
+  */
+  bool getOrientToCurve() const;
+  /** \details
+    Returns the color of this Edge entity.
+   
+    \remarks
+    Returns true if and only if this Edge entity has a color associated with it.
+    \param color [out]  Receives the color.
+  */
+  bool getColor(OdCmEntityColor &color) const;
+
+  OdBrEdge();
+
+  ~OdBrEdge();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBREDGE_3F82D9C2030D_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdgeLoopTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdgeLoopTraverser.h
new file mode 100755
index 0000000..e7cc7c8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEdgeLoopTraverser.h
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBREDGELOOPTRAVERSER_3F82E2750148_INCLUDED
+#define _INC_DDBREDGELOOPTRAVERSER_3F82E2750148_INCLUDED
+
+#include "Br/BrTraverser.h"
+
+class OdBrEdge;
+class OdBrLoop;
+class OdBrLoopEdgeTraverser;
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class is the interface class for edge loop traversers.
+
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrEdgeLoopTraverser : public OdBrTraverser
+{
+public:
+  /** \details
+    Sets this Traverser object to a specific edge loop list.
+    \param edge [in]  Owner of the loop list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setEdge(const OdBrEdge& edge);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param loop [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setLoop(const OdBrLoop& loop);
+
+  /** \details
+    Sets this Traverser object to a specific edge loop list
+    and starting position.
+    \param loopEdge [in]  Defines the edge loop list and starting position.
+  */
+  OdBrErrorStatus setEdgeAndLoop(const OdBrLoopEdgeTraverser& loopEdge);
+
+  /** \details
+    Returns the loop object at the current Traverser position.
+  */
+  OdBrLoop getLoop() const;
+
+  /** \details
+    Returns the owner of the loop list associated with this Traverser object.
+  */
+  OdBrEdge getEdge() const;
+
+  OdBrEdgeLoopTraverser();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBREDGELOOPTRAVERSER_3F82E2750148_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement.h
new file mode 100755
index 0000000..507c217
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement.h
@@ -0,0 +1,44 @@
+#ifndef BRELEMENT_H_INCLUDED
+#define BRELEMENT_H_INCLUDED
+
+#include "Br/BrMeshEntity.h"
+/** \details
+  This class defines the interface base-class for mesh elements. Each element is
+  represented by an ordered, minimal closed subset of connected nodes in a mesh.
+ 
+  \remarks 
+  This class is implemented only for Spatial modeler. 
+  
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrElement : public OdBrMeshEntity
+{
+public:
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdBrElement();
+
+protected:
+  /** \details
+    Default constructor.
+  */
+  OdBrElement();
+  
+  /** \details
+    Copy constructor.
+  */
+  OdBrElement(const OdBrElement& src);
+  
+  /** \details
+    Assignment operator.
+  */
+  OdBrElement&    operator =      (const OdBrElement& src);
+};
+
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2d.h
new file mode 100755
index 0000000..b99e573
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2d.h
@@ -0,0 +1,47 @@
+#ifndef BRELEMENT2D_H_INCLUDED
+#define BRELEMENT2D_H_INCLUDED
+
+#include "Br/BrElement.h"
+#include "Ge/GeVector3d.h"
+/** \details
+  This interface class represents linear, two-dimensional first-order elements 
+  in a mesh.
+
+  \remarks 
+  This class is implemented only for Spatial modeler. 
+    
+  \sa
+  TD_Br
+    
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrElement2d : public OdBrElement
+{
+public:  
+  /** \details
+    Default constructor.
+  */
+  OdBrElement2d();
+  
+  /** \details
+    Destructor.
+  */
+  ~OdBrElement2d();
+
+  /** \details
+    Returns the normal vector of normalized model space. The vector is computed 
+    on the plane that is defined by the nodes of element traversed in a clockwise 
+    direction.
+    
+    \param normal [out] Normal vector.
+
+    \remarks
+    In case of an error, the value of the normal vector passed as an 
+    argument is unchanged.
+  */
+  OdBrErrorStatus getNormal (OdGeVector3d& normal) const;
+};
+
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2dNodeTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2dNodeTraverser.h
new file mode 100755
index 0000000..ec9bd38
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrElement2dNodeTraverser.h
@@ -0,0 +1,125 @@
+#ifndef BRELEMENT2DNODETRAVERSER_H_INCLUDED
+#define BRELEMENT2DNODETRAVERSER_H_INCLUDED
+
+#include "Br/BrTraverser.h"
+#include "Br/BrEnums.h"
+#include "Br/BrMesh2dElement2dTraverser.h"
+#include "Br/BrNode.h"
+#include "Ge/GePoint2d.h"
+/** \details
+  This interface class represents element node traversers. 
+  It is used to access node data, such as surface normals
+  and pairs of uv parameters.
+  
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+  */
+class ODBR_TOOLKIT_EXPORT OdBrElement2dNodeTraverser : public OdBrTraverser
+{
+public:
+  /** \details
+    Default constructor.
+  */
+  OdBrElement2dNodeTraverser();
+  
+  /** \details
+    Destructor.
+  */
+  ~OdBrElement2dNodeTraverser();
+
+  /** \details
+    Sets the specific element node list to this traverser.
+    
+    \param mesh2dElement2dTraverser [in] Defines the topological adjacent list of nodes 
+    owned by the 2D element at the current position in this OdBrMesh2dElement2dTraverser,
+    starting at the first node in the list.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    In case of an error, the value of this traverser's element node list is unchanged.
+  */
+  OdBrErrorStatus   setElement    (const OdBrMesh2dElement2dTraverser& mesh2dElement2dTraverser);
+  
+  /** \details
+    Sets the specific element node list to this traverser.
+    
+    \param element [in] Defines the 2D element with a topological adjacent list of nodes,
+    starting at the first node in the list.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+      
+    \remarks
+    In case of an error, the value of this traverser's element node list is unchanged.
+  */
+  OdBrErrorStatus   setElement    (const OdBrElement2d& element);
+  
+  /** \details
+    Returns the element that owns the element node list. 
+    
+    \param element [out] Defines the 2D element object, passed by reference.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    In case of an error, the element reference object passed as an argument is unchanged.
+  */
+  OdBrErrorStatus   getElement    (OdBrElement2d& element) const;
+  
+  /** \details
+    Sets the starting position of this traverser to a specific node in the element node list. 
+    
+    \param node [in] Node at which the traverser's starting position is set.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    In case of an error, the traverser's element node list is unchanged.
+  */
+  OdBrErrorStatus   setNode         (const OdBrNode& node);
+  
+  /** \details
+    Returns the node at the current position in the element node list. 
+    
+    \param node [out] Node at the current position.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    In case of an error, the node reference object that is passed as an argument is unchanged.
+  */
+  OdBrErrorStatus   getNode         (OdBrNode& node) const;
+
+  /** \details
+    Returns the normal vector computed on the original surface at the current node.
+    
+    \param vector [out] Normal vector at the current node.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    In case of an error, the normal vector reference argument's value is unchanged.
+  */
+  OdBrErrorStatus   getSurfaceNormal(OdGeVector3d& vector) const;
+  
+  /** \details
+    Returns the 2D element node's underlying parameter point.
+    
+    \param point [out] Parameter point.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    In case of an error, the parameter point reference object is unchanged.
+  */
+  OdBrErrorStatus   getParamPoint  (OdGePoint2d& point) const;
+};
+
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEntity.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEntity.h
new file mode 100755
index 0000000..77daedd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEntity.h
@@ -0,0 +1,153 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRENTITY_3F819553013C_INCLUDED
+#define _INC_DDBRENTITY_3F819553013C_INCLUDED
+
+
+#include "OdaCommon.h"
+#include "Br/BrExport.h"
+#include "Br/BrEnums.h"
+
+#include "TD_PackPush.h"
+#include "SharedPtr.h"
+#include "DbBaseSubentId.h"
+#include "../Ge/Ge.h"
+
+class OdBrBrep;
+class OdBrHit;
+class OdGePoint3d;
+class OdGeLinearEnt3d;
+
+
+/** \details
+  <group OdBr_Classes>
+
+  This class is the interface base class for BREP topology objects.
+
+  Library: TD_Br
+*/
+class ODBR_TOOLKIT_EXPORT OdBrEntity
+{
+public:
+  /** \details
+    Returns true if and only if there is no ACIS model associated with this Entity object. 
+  */
+  bool isNull() const;
+
+  /** \details
+    Returns true if and only if the specified Entity object is equivalent to this Entity object.
+    
+    \remarks
+    Two OdBrEntity objects are equivalent if and only if they non-null, and have the
+    same subentity path.
+    
+    \param pOtherEntity [in]  Pointer to any OdBrEntity object.
+  */
+  bool isEqualTo(
+    const OdBrEntity* pOtherEntity) const;
+  
+  /** \details
+    Returns the owner of this Entity object.
+  */
+  bool getBrep(OdBrBrep& brep) const;
+
+  /** \details
+    Validates the element.
+  */
+  bool checkEntity() const;
+
+  /** \details
+  Returns the FullSubentPath of this Entity object.
+  see OdDbBody::setSubentPath also.
+  */
+  OdBrErrorStatus getSubentPath(OdDbBaseFullSubentPath& subPath) const;
+
+  virtual ~OdBrEntity();
+
+  // for internal usage only. OdDbBody::setSubentPath should be used instead.
+  OdBrErrorStatus setSubentPath(OdBrBrep &brep, OdDbBaseFullSubentPath& subpath);
+
+  OdBrErrorStatus getPointContainment(const OdGePoint3d&      point,
+                                      OdGe::PointContainment& containment,
+                                      OdBrEntity*&            brEntContainer ) const;
+
+  OdBrErrorStatus getLineContainment( const OdGeLinearEnt3d& line,
+                                      const OdUInt32&        iNumHitsWanted,
+                                      OdUInt32&              iNumHitsFound,
+                                      OdBrHit*&              brHit ) const;
+
+
+/*
+  void* getEntity() const;
+  OdBrErrorStatus setEntity(void* pData, OdDbBaseFullSubentPath& subPath = *(OdDbBaseFullSubentPath*)NULL);
+
+  // Geometric bounds (i.e., model space bounding box)
+  OdBrErrorStatus getBoundBlock(OdGeBoundBlock3d& block) const;
+*/
+
+  // Validation
+  OdBrErrorStatus setValidationLevel(const BrValidationLevel& level = *(BrValidationLevel*)NULL);
+  OdBrErrorStatus getValidationLevel(BrValidationLevel& level) const;
+
+/*
+  bool brepChanged() const;
+
+  // Queries & Initialisers
+  OdBrErrorStatus set(const BrValidationLevel& path);
+  OdBrErrorStatus get(BrValidationLevel& path) const;
+  OdBrErrorStatus set(OdBrBrepData* data);
+  OdBrErrorStatus get(OdBrBrepData*& data) const;
+
+  // Geometric properties
+  OdBrErrorStatus getMassProps(OdBrMassProps& massProps,
+    const double& dDensity     = *(double*)NULL,
+    const double& dTolRequired = *(double*)NULL,
+    double&       dTolAchieved = *(double*)NULL) const;
+  OdBrErrorStatus getVolume(double& dVolume,
+    const double& dTolRequired = *(double*)NULL,
+    double&       dTolAchieved = *(double*)NULL) const;
+  OdBrErrorStatus getSurfaceArea(double& dArea,
+    const double& dTolRequired = *(double*)NULL,
+    double&       dTolAchieved = *(double*)NULL) const;
+  OdBrErrorStatus getPerimeterLength(double& dLength,
+    const double& dTolRequired = *(double*)NULL,
+    double&       dTolAchieved = *(double*)NULL) const;
+*/
+
+protected:
+  void *m_pImp;
+  OdSharedPtr<OdDbStubPtrArray> m_pFSubentPath;
+  bool m_bIsValidate; //The enum has only 2 values.
+
+  OdBrEntity();
+
+  friend class OdBrEntityInternals;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRENTITY_3F819553013C_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEnums.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEnums.h
new file mode 100755
index 0000000..50cc596
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrEnums.h
@@ -0,0 +1,131 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+// OdBrEnums.h -- declaration of enumerated types used in the
+//                OdBr B-Rep and traverser classes.
+
+#pragma warning ( disable : 4482 )  
+
+#ifndef ODBRENUMS_H
+#define ODBRENUMS_H
+#include "OdError.h"
+#include "BrExport.h"
+
+/** \details
+  Represents the B-rep error status.
+*/
+enum OdBrErrorStatus
+{ 
+  odbrOK                     = ::eOk,                 // The operation is finished successfully.
+  odbrWrongObjectType        = eWrongObjectType,      // The type of returned object is not supported as a B-rep.
+  odbrInvalidObject          = eUnrecoverableErrors,  // The OdBr* object is not initialized or is invalid.
+  odbrUnsuitableTopology     = 0XBC5,                 
+  odbrMissingGeometry        = eDegenerateGeometry,   // Represents the partially or fully missing geometry.
+  odbrInvalidInput           = eInvalidInput,         // The input arguments point to an invalid object.
+  odbrDegenerateTopology     = 0XBCC,                 // The subentity does not map to the topology.
+  odbrUninitialisedObject    = 0xBCD,                 // The OdBr* object is not initialized.
+  odbrOutOfMemory            = eOutOfMemory,          // The memory for the object could not be allocated.
+  odbrBrepChanged            = 0xBC0,                 // The object has been modified since this OdBr* object was last set.
+  odbrNotImplementedYet      = ::eNotImplementedYet,  // Returned if the function is not implemented yet.
+  odbrNullObjectId           = eNullObjectId,         // Returned when the subentity path does not point to an object.
+  odbrNotApplicable          = eNotApplicable,        // Represents the situation when the inherited function is not applicable to this subclass. 
+  odbrWrongSubentityType     = eWrongSubentityType,   // The subentity type does not match the subclass.
+  odbrNullSubentityId        = eInvalidIndex,         // Returned when the subentity path does not point to a subentity.
+  odbrNullObjectPointer      = eUnrecoverableErrors,  // Returned when the function implementation is missing.
+  odbrObjectIdMismatch       = eWrongDatabase,        // The traverser list owner and list position do not point to the same object.
+  odbrTopologyMismatch       = eWrongDatabase,        // Returned when the traverser list position cannot be set because the subentity is not connected to the list owner.
+  odbrUnsuitableGeometry     = eAmbiguousOutput,      // The geometry of OdGe object is unsuitable for this function.
+  odbrMissingSubentity       = eNotInDatabase,        // The topology does not map to a subentity.
+  odbrAmbiguousOutput        = eAmbiguousOutput,      // The result is ambiguous.
+
+  odbrUnrecoverableErrors    = eUnrecoverableErrors,
+  odbrMissingTopology        = odbrDegenerateTopology,
+  odbrWrongDatabase          = eWrongDatabase,
+  odbrNotInDatabase          = eNotInDatabase,
+  odbrDegenerateGeometry     = eDegenerateGeometry
+};
+
+/** \details
+  Represents the type of a loop.
+*/
+enum BrLoopType{
+  odbrLoopUnclassified = 0,   // The loop type is ambiguous or cannot be determined at this time. 
+  odbrLoopExterior     = 1,   // The loop is on a peripheral boundary.
+  odbrLoopInterior     = 2,	  // The loop represents a hole in the interior of a face.
+  odbrLoopWinding      = 3,	  // The loop is winding on a conical surface.
+};
+
+/** \details
+  Represents the shell type.
+*/
+enum BrShellType{ 
+  odbrShellUnclassified = 0,  // The shell type cannot be determined at this time.  
+  odbrShellExterior     = 1,  // The shell is on a peripheral boundary of region or B-rep.
+  odbrShellInterior     = 2   // The shell is empty in the interior of a region or B-rep.
+};
+
+/** \details
+  Represents the validation level.
+*/
+enum BrValidationLevel { 
+  odbrFullValidation		= 0,  // 
+  odbrNoValidation		  = 1
+};
+
+/** \details
+  Represents the element shape criteria.
+*/
+enum Element2dShape { 
+  kDefault           = 0,
+  kAllPolygons       = 1,
+  kAllQuadrilaterals = 2,
+  kAllTriangles      = 3
+};
+
+
+/** \details
+  This class is a specialization of the OdError class for OdBr errors.  
+  Library: TD_Br
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrException : public OdError
+{
+public:
+  /** \details
+    Constructor.
+  
+    \param errorStatus [in]  Error status.
+  */
+  OdBrException(OdBrErrorStatus errorStatus);
+  
+  /** \details
+    Returns the error status associated with this Exception object.
+  */
+  OdBrErrorStatus getErrorStatus() const;
+};
+
+#define BR_THROW(n) throw OdBrException(n)
+
+#endif // ODBRENUMS_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrExport.h
new file mode 100755
index 0000000..a79ec48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrExport.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+/*  OdBrExport.h
+
+*/
+#ifndef _DDBR_EXPORT_DEFINED
+#define _DDBR_EXPORT_DEFINED
+
+#include "OdPlatformSettings.h"
+
+#ifdef BR_DLL_EXPORTS
+  #define ODBR_TOOLKIT_EXPORT         OD_TOOLKIT_EXPORT
+  #define ODBR_TOOLKIT_EXPORT_STATIC  OD_STATIC_EXPORT
+  #define DDBR_TEMPLATE_EXPORT
+#else
+  #define ODBR_TOOLKIT_EXPORT         OD_TOOLKIT_IMPORT
+  #define ODBR_TOOLKIT_EXPORT_STATIC  OD_STATIC_IMPORT
+  #define DDBR_TEMPLATE_EXPORT        STABLE_EXTERN
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _DDBR_EXPORT_DEFINED */
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFace.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFace.h
new file mode 100755
index 0000000..c6289af
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFace.h
@@ -0,0 +1,153 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRFACE_3F82D5A203C8_INCLUDED
+#define _INC_DDBRFACE_3F82D5A203C8_INCLUDED
+
+#include "Br/BrEntity.h"
+#include "Br/BrEnums.h"
+#include "Ge/GeSurface.h"
+#include "Ge/GeNurbSurface.h"
+
+#include "TD_PackPush.h"
+
+class OdCmEntityColor;
+class OdGeExternalBoundedSurface;
+
+/** \details
+    This class is the interface class for BREP faces.
+
+    \remarks
+    Faces are primary BREP elements with associated geometries: surfaces. 
+    
+    \sa
+    TD_Br
+    
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrFace : public OdBrEntity
+{
+public:
+
+  /** \details
+    Returns the underlying surface of this Face entity as an external OdGeNurbSurface.
+    
+    \param nurb [out]  Receives the NURBS surface.
+  */
+  OdBrErrorStatus getSurfaceAsNurb(OdGeNurbSurface& nurb) const;
+
+  /** \details
+    Returns the underlying surface of this Face entity as an OdGeSurface.
+  */
+  OdGeSurface* getSurface() const;
+
+  /** \details
+    Returns the best match of the underlying surface of this Face entity to surfaces supported by OdGe.
+    \param surfaceType [out]  Receives the surface type.
+  */
+  OdBrErrorStatus getSurfaceType(OdGe::EntityId& surfaceType) const;
+
+  /** \details
+      Returns true if and only if the outside of the face is in
+      the direction of the surface normal.
+  */
+  bool getOrientToSurface() const;
+ /** \details
+    Returns the color of this Face entity.
+   
+    \remarks
+    Returns true if and only if this Face entity has a color associated with it.
+    \param color [out]  Receives the color.
+ */
+  bool getColor(OdCmEntityColor &color) const;
+
+  /** \details
+  Returns the *material handle* of this Face entity.
+
+  \remarks
+  Returns true if and only if this Face entity has a material associated with it.
+  \param id [out]  Receives the id.
+  */
+  bool getMaterialID(OdUInt64 &id) const;
+
+  /** \details
+  Returns the *material name* of this Face entity.
+
+  \remarks
+  Returns true if and only if this Face entity has a material associated with it.
+  \param strMatName [out]  Receives the *material name*.
+  */
+  bool getMaterialString(OdString& strMatName) const;
+
+  /** \details
+  Returns the *material mapper* of this Face entity.
+
+  \remarks
+  Returns true if and only if this Face entity has a *material mapper* associated with it.
+  \param mx [out]  Receives the *transformation matrix*.
+  \param projection [out]  Receives the projection flag.
+  \param tiling [out]  Receives the tiling flag.
+  \param autoTransform [out]  Receives the *auto transform* flag.
+  */
+
+  enum Projection
+  {
+    kInheritProjection  = 0, // Inherits *projection* from the current material's mapper.
+    kPlanar             = 1, // Maps directly to XY coordinates.
+    kBox                = 2, // Maps to planes perpendicular to major axes.
+    kCylinder           = 3, // Maps to cylinder aligned with Z-axis.
+    kSphere             = 4  // Maps to sphere aligned with Z-axis
+  };
+
+  enum Tiling
+  {
+    kInheritTiling    = 0, // Inherits *tiling* from the current material's mapper.
+    kTile             = 1, // Repeats map along image axes.
+    kCrop             = 2, // Crops map < 0.0 or > 1.0 on image axes.
+    kClamp            = 3, // Clamps (stretches) map between 0.0 and 1.0 on image axes.
+    kMirror           = 4  // Mirror the material map at every integer boundary.
+  };
+
+  enum AutoTransform
+  {
+    kInheritAutoTransform = 0x0, // Inherits automatic *transform* from the current material/s mapper.
+    kNone                 = 0x1, // No automatic *transform*.
+    kObject               = 0x2, // Adjusts the mapper *transform* to align with and fit the current object.
+    kModel                = 0x4  // Multiples the mapper *transform* by the current block *transform*.
+  };
+
+  bool getMaterialMapper(OdGeMatrix3d &mx, Projection &projection, Tiling& tiling, AutoTransform &autoTransform) const;
+
+  OdBrErrorStatus getSurfaceAsTrimmedNurbs(OdUInt32& numNurbs, OdGeExternalBoundedSurface**& ppNurbs) const;
+
+  OdBrFace();
+
+  ~OdBrFace();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRFACE_3F82D5A203C8_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFaceLoopTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFaceLoopTraverser.h
new file mode 100755
index 0000000..9d64ff9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrFaceLoopTraverser.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRFACELOOPTRAVERSER_3F82E16B0109_INCLUDED
+#define _INC_DDBRFACELOOPTRAVERSER_3F82E16B0109_INCLUDED
+
+#include "Br/BrFace.h"
+#include "Br/BrLoop.h"
+#include "Br/BrTraverser.h"
+
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the interface class for face loop traversers.
+
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrFaceLoopTraverser : public OdBrTraverser
+{
+public:
+  OdBrFaceLoopTraverser();
+
+  /** \details
+    Sets this Traverser object to a specific face loop list.
+    \param face [in]  Owner of the loop list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setFace( const OdBrFace& face );
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param loop [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setLoop(const OdBrLoop& loop);
+
+  /** \details
+    Sets this Traverser object to a specific face loop list
+    and starting position.
+    \param loop [in]  Defines the face loop list and starting position.
+  */
+  OdBrErrorStatus setFaceAndLoop(const OdBrLoop& loop);
+
+  /** \details
+    Returns the loop object at the current Traverser position.
+  */
+  OdBrLoop getLoop() const;
+
+ /** \details
+    Returns the owner of the loop list associated with this Traverser object.
+ */
+  OdBrFace getFace() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRFACELOOPTRAVERSER_3F82E16B0109_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrHit.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrHit.h
new file mode 100755
index 0000000..2b1ae62
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrHit.h
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _INC_TDBRBREPHIT_
+#define _INC_TDBRBREPHIT_
+
+#include "Br/BrEntity.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  <group OdBr_Classes>
+
+  This class is the interface class for contexted hits generated by line containment queries.
+
+  Library: TD_Br
+*/
+class ODBR_TOOLKIT_EXPORT OdBrHit
+{
+public:
+  OdBrHit();
+  OdBrHit( const OdBrHit& src );
+  virtual ~OdBrHit();
+                 
+  bool isEqualTo( const OdBrHit* pOtherHit ) const;
+  bool isNull() const;
+
+  // Topological Containment
+  OdBrErrorStatus   getEntityHit( OdBrEntity*& entityHit ) const;
+
+  OdBrErrorStatus   getEntityEntered( OdBrEntity*& entityEntered ) const;
+
+  // Topology
+  OdBrErrorStatus   getEntityAssociated( OdBrEntity*& entity ) const;
+
+  // Geometry
+  OdBrErrorStatus   getPoint( OdGePoint3d& point ) const;
+
+  // Validation
+  OdBrErrorStatus	  setValidationLevel(const BrValidationLevel& validationLevel);
+  OdBrErrorStatus  	getValidationLevel(BrValidationLevel& validationLevel) const;
+  bool brepChanged() const;
+protected:
+  void *m_pHitImp;
+  bool m_bIsValidate; //The enum has only 2 values.
+  friend class OdBrEntityInternals;
+};
+
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_TDBRBREPHIT_*/
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoop.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoop.h
new file mode 100755
index 0000000..c3e9302
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoop.h
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRLOOP_3F82D86302DE_INCLUDED
+#define _INC_DDBRLOOP_3F82D86302DE_INCLUDED
+
+#include "Br/BrEntity.h"
+
+class OdBrFace;
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class is the interface class for BREP loops.
+
+    \remarks
+    Loop correspond to sets of curves defining the boundaries of bounded surfaces.
+    
+    Loops are secondary BREP elements with no associated geometries. 
+
+    Library: TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrLoop : public OdBrEntity
+{
+public:
+  OdBrLoop();
+
+  ~OdBrLoop();
+
+  /** \details
+    Returns the Face entity bounded by this Loop entity.
+  */
+  OdBrFace getFace() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRLOOP_3F82D86302DE_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopEdgeTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopEdgeTraverser.h
new file mode 100755
index 0000000..a1737a4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopEdgeTraverser.h
@@ -0,0 +1,131 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRLOOPEDGETRAVERSER_3F82E1FB0177_INCLUDED
+#define _INC_DDBRLOOPEDGETRAVERSER_3F82E1FB0177_INCLUDED
+
+#include "Br/BrTraverser.h"
+
+class OdBrEdgeLoopTraverser;
+class OdGeNurbCurve3d;
+class OdGeNurbCurve2d;
+class OdGeCurve3d;
+class OdGeCurve2d;
+class OdBrLoop;
+class OdBrEdge;
+
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the interface class for loop edge traversers.
+
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrLoopEdgeTraverser : public OdBrTraverser
+{
+public:
+
+  /** \details
+    Returns the underlying curve of the edge at the current Traverser position as an oriented OdGeCurve3d object.
+  */
+  OdGeCurve3d *getOrientedCurve() const;
+  
+  /** \details
+    Returns the underlying curve of the edge at the current Traverser position as an OdGeNurbCurve3d object.
+
+    \param nurb [out]  Receives the NURBS curve.
+    
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool getOrientedCurveAsNurb(OdGeNurbCurve3d& nurb) const;
+
+  /** \details
+    Returns the underlying curve of the edge at the current Traverser position as a parametric OdGeCurve2d object.
+  */
+  OdGeCurve2d* getParamCurve() const;
+
+  /** \details
+    Returns the underlying curve of the edge at the current Traverser position as a parametric OdGeNurbCurve2d object.
+
+    \param nurb [out]  Receives the NURBS curve.
+    
+    \remarks
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus getParamCurveAsNurb( OdGeNurbCurve2d& nurb ) const;
+
+  /** \details
+    Returns true if and only if the orientation of the edge from vertex 1 to vertex 2 is the 
+    same as the orientation of the loop parameterization.
+  */
+  bool getEdgeOrientToLoop() const;
+
+  /** \details
+    Returns the edge object at the current Traverser position.
+  */
+  OdBrEdge getEdge() const;
+  
+ /** \details
+    Returns the loop of the edge list associated with this Traverser object.
+ */
+  OdBrLoop getLoop() const;
+
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param edge [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setEdge( const OdBrEdge& edge );
+  
+  /** \details
+    Sets this Traverser object to a specific loop edge list.
+    \param loop [in]  Owner of the edge list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setLoop( const OdBrLoop& loop );
+  
+  /** \details
+    Sets this Traverser object to a specific edge loop list
+    and starting position.
+    \param edgeLoop [in]  Defines the edge list and starting position.
+  */
+   OdBrErrorStatus setLoopAndEdge( const OdBrEdgeLoopTraverser &edgeLoop );
+
+  OdBrLoopEdgeTraverser();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRLOOPEDGETRAVERSER_3F82E1FB0177_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopVertexTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopVertexTraverser.h
new file mode 100755
index 0000000..8f132ae
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrLoopVertexTraverser.h
@@ -0,0 +1,98 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRLOOPVERTEXTRAVERSER_3F82E3080167_INCLUDED
+#define _INC_DDBRLOOPVERTEXTRAVERSER_3F82E3080167_INCLUDED
+
+#include "Br/BrTraverser.h"
+
+class OdBrVertexLoopTraverser;
+class OdBrVertex;
+class OdBrLoop;
+class OdGePoint2d;
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class is the interface class for loop vertex traversers.
+
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrLoopVertexTraverser : public OdBrTraverser
+{
+public:
+  OdBrLoopVertexTraverser();
+
+  /** \details
+    Returns the loop vertex.
+  */
+  OdBrVertex getVertex() const;
+
+ /** \details
+    Returns the owner of the vertex list associated with this Traverser object.
+ */
+  OdBrLoop getLoop() const;
+
+  /** \details
+    Sets this Traverser object to a specific loop vertex list.
+    \param loop [in]  Owner of the vertex list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setLoop(const OdBrLoop& loop);
+  /** \details
+    Sets this Traverser object to a specific loop vertex list
+    and starting position.
+    \param vertexLoop [in]  Defines the loop vertex list and starting position.
+  */
+  OdBrErrorStatus setLoopAndVertex(const OdBrVertexLoopTraverser& vertexLoop);
+  
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param vertex [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setVertex(const OdBrVertex& vertex);
+
+  /** \details
+    Returns the parameter space point at the current Traverser position.
+    \param ppoint [out]  Parameter point.
+    
+    \remarks
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus getParamPoint(OdGePoint2d &point) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRLOOPVERTEXTRAVERSER_3F82E3080167_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh.h
new file mode 100755
index 0000000..b07d89b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh.h
@@ -0,0 +1,34 @@
+#ifndef BRMESH_H_INCLUDED
+#define BRMESH_H_INCLUDED
+
+#include "Br/BrMeshEntity.h"
+
+/** \details
+  This class defines the interface base class for meshes.
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+  
+  \sa
+  TD_Br
+  
+  <group OdBr_Classes>
+  */
+class ODBR_TOOLKIT_EXPORT OdBrMesh : public OdBrMeshEntity
+{
+public:
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdBrMesh();
+
+protected:
+  /** \details
+    Default constructor.
+  */
+  OdBrMesh();
+};
+
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2d.h
new file mode 100755
index 0000000..167f363
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2d.h
@@ -0,0 +1,32 @@
+#ifndef BRMESH2D_H_INCLUDED
+#define BRMESH2D_H_INCLUDED
+
+#include "Br/BrMesh.h"
+#include "Br/BrMesh2dFilter.h"
+
+/** \details
+  This class defines the interface class for 2D meshes. 
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrMesh2d : public OdBrMesh
+{
+public:
+  /** \details
+    Default constructor.
+  */
+  OdBrMesh2d();
+
+  /** \details
+    Destructor.
+  */
+  ~OdBrMesh2d();
+};
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dControl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dControl.h
new file mode 100755
index 0000000..e236097
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dControl.h
@@ -0,0 +1,85 @@
+#ifndef BRMESH2DCONTROL_H_INCLUDED
+#define BRMESH2DCONTROL_H_INCLUDED
+
+#include "Br/BrMeshControl.h"
+#include "Br/BrEnums.h"
+
+/** \details
+  This interface class represents 2D mesh controls. It defines specific functions
+  used to set controls for generating 2D meshes.
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrMesh2dControl : public OdBrMeshControl
+{
+public:
+  /** \details
+    Default constructor.
+  */
+  OdBrMesh2dControl();
+
+  /** \details
+    Copy constructor.
+  */
+  OdBrMesh2dControl(const OdBrMesh2dControl& src);
+
+  /** \details
+    Destructor.
+  */
+  ~OdBrMesh2dControl();
+
+  /** \details
+    Assignment operator.
+  */
+  OdBrMesh2dControl&  operator =      (const OdBrMesh2dControl& src);
+
+  /** \details
+    Sets the maximum aspect ratio between width and height for a 2D mesh element.
+
+    \param maxAspectRatio [in] The value of the ratio.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+
+    \remarks
+    If the argument value is between zero and one, the aspect ratio relationship is inverted to a height-to-width ratio.  
+  */
+  OdBrErrorStatus   setMaxAspectRatio(double maxAspectRatio = 0);
+  
+  /** \details
+    Returns the maximum aspect ratio between width and height for a 2D mesh element.
+    
+    \param maxAspectRatio [out] Maximum aspect ratio.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus   getMaxAspectRatio(double& maxAspectRatio) const;
+  
+  /** \details
+    Sets the element shape criteria.
+
+    \param elementShape [in] Shape of the mesh.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus   setElementShape  (Element2dShape elementShape = kDefault);
+  
+  /** \details
+    Returns the element shape criteria.
+
+    \param elementShape [out] Shape of the mesh.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus   getElementShape  (Element2dShape& elementShape) const;
+
+  static const ODBR_TOOLKIT_EXPORT_STATIC OdBrMesh2dControl OdBrMesh2dControlDefault;
+};
+
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dElement2dTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dElement2dTraverser.h
new file mode 100755
index 0000000..e3a5b13
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dElement2dTraverser.h
@@ -0,0 +1,82 @@
+#ifndef BRMESH2DELEMENT2DTRAVERSER_H_INCLUDED
+#define BRMESH2DELEMENT2DTRAVERSER_H_INCLUDED
+
+#include "Br/BrTraverser.h"
+#include "Br/BrEnums.h"
+#include "Br/BrElement2d.h"
+#include "Br/BrMesh2d.h"
+
+/** \details
+  This interface class represents mesh element traversers.
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrMesh2dElement2dTraverser : public OdBrTraverser
+{
+public:
+  /** \details
+    Default constructor.
+  */
+  OdBrMesh2dElement2dTraverser();
+
+  /** \details
+    Destructor.
+  */
+  ~OdBrMesh2dElement2dTraverser();
+
+  /** \details
+    Sets this traverser to a specific mesh element list and start position.
+    
+    \param element2d [in] Reference to a 2D element object.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   setMeshAndElement(const OdBrElement2d& element2d);
+  
+  /** \details
+    Sets this traverser to a specific mesh element list, 
+    starting with the first list's element.
+    
+    \param mesh2d [in] Reference to a mesh object.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   setMesh         (const OdBrMesh2d& mesh2d);
+  
+  /** \details
+    Returns the owner of the mesh element list.
+
+    \param mesh2d [in/out] Reference to a mesh object.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   getMesh         (OdBrMesh2d& mesh2d) const;
+
+  /** \details
+    Sets the starting position of this traverser to a specific element in the mesh element list.
+
+    \param element2d [in] Reference to an element object.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   setElement    (const OdBrElement2d& element2d);
+
+  /** \details
+    Returns the current element in the mesh element list.
+
+    \param element2d [in/out] Reference to an element object.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   getElement    (OdBrElement2d& element2d) const;
+};
+
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dFilter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dFilter.h
new file mode 100755
index 0000000..bf49785
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMesh2dFilter.h
@@ -0,0 +1,86 @@
+#ifndef BRMESH2DFILTER_H_INCLUDED
+#define BRMESH2DFILTER_H_INCLUDED
+
+#include "Br/BrEntity.h"
+#include "Br/BrMesh2dControl.h"
+#include "Br/BrExport.h"
+
+/** \details
+  This interface class represents 2D mesh filters.
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrMesh2dFilter
+{
+  const OdBrEntity* m_BrEntity;
+  OdBrMesh2dControl m_meshControl;
+public:
+  /** \details
+    Default constructor.
+  */
+  OdBrMesh2dFilter();
+
+  /** \details
+    Destructor.
+  */
+  ~OdBrMesh2dFilter();
+
+  /** \details
+    This function associates a 2D mesh control with a topology object.
+
+    \param brEntity [in] Topology object.
+    \param meshControl [in] 2D mesh control object.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus set(const OdBrEntity& brEntity, const OdBrMesh2dControl &meshControl);
+
+  /** \details
+    Returns the topology object associated with the 2D mesh control.
+  */
+  const OdBrEntity* getBrEntity() const;
+  
+  /** \details
+    Returns the 2D mesh control, used as a filter in 2D mesh generation.
+  */
+  const OdBrMesh2dControl& getMeshControl() const;
+
+private:
+  OdBrMesh2dFilter(const OdBrMesh2dFilter& src);
+  OdBrMesh2dFilter& operator = (const OdBrMesh2dFilter& src);
+};
+
+inline
+OdBrMesh2dFilter::OdBrMesh2dFilter() : m_BrEntity(0) {}
+
+inline
+OdBrMesh2dFilter::~OdBrMesh2dFilter() {}
+
+inline
+OdBrErrorStatus OdBrMesh2dFilter::set(const OdBrEntity& brEntity, const OdBrMesh2dControl &meshControl)
+{
+  m_BrEntity = &brEntity;
+  m_meshControl = meshControl;
+  return odbrOK;
+}
+
+inline
+const OdBrEntity* OdBrMesh2dFilter::getBrEntity() const
+{
+  return m_BrEntity;
+}
+
+inline
+const OdBrMesh2dControl& OdBrMesh2dFilter::getMeshControl() const
+{
+  return m_meshControl;
+}
+
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshControl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshControl.h
new file mode 100755
index 0000000..e158075
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshControl.h
@@ -0,0 +1,121 @@
+#ifndef BRMESHCONTROL_H_INCLUDED
+#define BRMESHCONTROL_H_INCLUDED
+
+#include "Br/BrEnums.h"
+
+/** \details
+  This class defines the interface base class for mesh controls.
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+  
+  <group OdBr_Classes>
+  */
+class ODBR_TOOLKIT_EXPORT OdBrMeshControl
+{
+  friend class OdBrEntityInternals;
+public:
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdBrMeshControl();
+
+  /** \details
+    Checks if content of the two mesh control objects is equal.
+
+    \param other [in] Mesh control object.
+
+    \returns Returns true if two mesh control objects are equal, 
+    or returns false in the other case.
+  */
+  bool      isEqualTo       (const OdBrMeshControl* other) const;
+
+  /** \details
+    Sets the maximum number of subdivisions.
+
+    \param maxSubs [in] Maximum number of subdivisions.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   setMaxSubdivisions(OdUInt32 maxSubs = 0);
+
+  /** \details
+    Gets the maximum number of subdivisions.
+
+    \param maxSubs [out] Maximum number of subdivisions.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */  
+  OdBrErrorStatus   getMaxSubdivisions(OdUInt32& maxSubs) const;
+
+  /** \details
+    Sets the maximum spacing between nodes in world coordinates.
+
+    \param maxNodeSpace [in] Maximum node spacing.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus   setMaxNodeSpacing(double maxNodeSpace = 0);
+
+  /** \details
+    Returns the maximum spacing between nodes in world coordinates.
+
+    \param maxNodeSpace [out] Maximum node spacing.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   getMaxNodeSpacing(double& maxNodeSpace) const;
+
+  /** \details
+    Sets the maximum angle tolerance between normals of any two nodes in 
+    the mesh element.
+
+    \param angTol [in] Maximum angle tolerance in radians.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   setAngTol    (double angTol = 0);
+
+  /** \details
+    Returns the maximum angle tolerance between normals of any two nodes in 
+    the mesh element.
+
+    \param angTol [out] Maximum angle tolerance in radians.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   getAngTol    (double& angTol) const;
+
+  /** \details
+    Sets the maximum distance tolerance in world coordinates between the original 
+    geometry and the mesh element.
+
+    \param distTol [in] Maximum distance tolerance.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   setDistTol    (double distTol = 0);
+
+  /** \details
+    Returns the maximum distance tolerance between the original geometry and the mesh element.
+
+    \param distTol [out] Maximum distance tolerance.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus   getDistTol    (double& distTol) const;
+
+protected:
+  /** \details
+    Default constructor.
+  */
+  OdBrMeshControl();
+
+  void *m_pImp;
+};
+
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshEntity.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshEntity.h
new file mode 100755
index 0000000..425253b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrMeshEntity.h
@@ -0,0 +1,102 @@
+#ifndef BRMESHENTITY_H_INCLUDED
+#define BRMESHENTITY_H_INCLUDED
+
+#include "Br/BrEnums.h"
+#include "Br/BrEntity.h"
+#include "Br/BrExport.h"
+/** \details
+  This class defines the interface base class for mesh objects and subobjects.
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+  
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrMeshEntity
+{
+  friend class OdBrEntityInternals;
+public:
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdBrMeshEntity();
+
+  /** \details
+    Checks if content of the two mesh objects is equal.
+    
+    \param other [in] Another mesh object.
+    
+    \returns Returns true if two mesh objects are equal, 
+    or returns false in the other case.  
+  */
+  bool      isEqualTo       (const OdBrMeshEntity* other) const;
+
+  /** \details
+    Returns true if and only if this mesh object is uninitialized.
+  */
+  bool      isNull          () const;
+
+  /** \details
+    Returns the topology object associated with this mesh object.
+
+    \param entity [out] Dimensionally lowest topology object.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus   getEntityAssociated(OdBrEntity*& entity) const;
+
+  // Validation
+  /** \details
+    Sets the validation level. 
+
+    \param level [in] Validation level.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus setValidationLevel(const BrValidationLevel& level = *(BrValidationLevel*)NULL);
+  
+  /** \details
+    Returns the validation level used by the mesh object.
+
+    \param level [out] Validation level.
+
+    \returns Returns odbrOK if successful, or an appropriate error code if not.  
+  */
+  OdBrErrorStatus getValidationLevel(BrValidationLevel& level) const;
+  
+  /** \details
+    Checks whether the object associated with this mesh has changed since the mesh 
+    object was last set.
+
+    \returns Returns true if the associated object has changed or if it is impossible to 
+    determine whether it has changed. Returns false if the associated object has 
+    not changed or if it is a non-database resident.
+  */
+  bool    brepChanged    () const;
+
+protected:
+  /** \details
+    Default constructor.
+  */
+  OdBrMeshEntity();
+
+  /** \details
+    Copy constructor.
+  */
+  OdBrMeshEntity(const OdBrMeshEntity&);
+
+  /** \details
+    Assignment operator.
+  */
+  OdBrMeshEntity&     operator =      (const OdBrMeshEntity&);
+
+  OdRxObjectPtr m_pImp;
+  bool m_bIsValidate; //The enum has only 2 values.
+};
+
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrNode.h
new file mode 100755
index 0000000..90b09fd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrNode.h
@@ -0,0 +1,41 @@
+#ifndef BRNODE_H_INCLUDED
+#define BRNODE_H_INCLUDED
+
+#include "Br/BrMeshEntity.h"
+#include "Br/BrEnums.h"
+/** \details
+  This interface class represents nodes in a mesh.
+
+  \remarks 
+  This class is implemented only for Spatial modeler.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrNode : public OdBrMeshEntity
+{
+public:
+  /** \details
+    Default constructor.
+  */
+  OdBrNode();
+
+  /** \details
+    Destructor.
+  */
+  ~OdBrNode();
+
+  /** \details
+    Returns the base point of this node.
+    
+    \param point [out] Base point.
+    
+    \returns Returns odbrOK if successful, or an appropriate error code if not.   
+  */
+  OdBrErrorStatus getPoint(OdGePoint3d& point) const;
+};
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShell.h
new file mode 100755
index 0000000..2867e7a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShell.h
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRSHELL_3F83F3F8033C_INCLUDED
+#define _INC_DDBRSHELL_3F83F3F8033C_INCLUDED
+
+#include "Br/BrEntity.h"
+
+class OdBrComplex;
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class is the interface class for BREP shells.
+    
+    \remarks
+    Shells correspond to sets of adjacent faces on solids.
+
+    Shells are secondary BREP elements with no associated geometries. 
+
+    Library: TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrShell : public OdBrEntity
+{
+public:
+  OdBrShell();
+
+  ~OdBrShell();
+
+  /** \details
+    Returns the Complex entity bounded by this Shell entity.
+  */
+  OdBrComplex getComplex() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRSHELL_3F83F3F8033C_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShellFaceTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShellFaceTraverser.h
new file mode 100755
index 0000000..f8e1eb8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrShellFaceTraverser.h
@@ -0,0 +1,90 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRSHELLFACETRAVERSER_3F83F80B005D_INCLUDED
+#define _INC_DDBRSHELLFACETRAVERSER_3F83F80B005D_INCLUDED
+
+#include "Br/BrShell.h"
+
+#include "Br/BrFace.h"
+
+#include "Br/BrTraverser.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class is the interface class for shell face traversers.
+    
+    \sa
+    TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrShellFaceTraverser : public OdBrTraverser
+{
+public:
+
+  /** \details
+    Returns the face object at the current Traverser position.
+  */
+  OdBrFace getFace() const;
+
+  /** \details
+    Returns the owner of the face list associated with this Traverser object.
+  */
+  OdBrShell getShell() const;
+
+  /** \details
+    Sets this Traverser object to a specific shell face list.
+    \param shell [in]  Owner of the face list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setShell(const OdBrShell& shell);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param face [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setFace(const OdBrFace& face);
+
+  /** \details
+    Sets this Traverser object to a specific shell face list
+    and starting position.
+    \param face [in]  Defines the face list and starting position.
+  */
+  OdBrErrorStatus setShellAndFace(const OdBrFace& face);
+
+  OdBrShellFaceTraverser();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRSHELLFACETRAVERSER_3F83F80B005D_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrTraverser.h
new file mode 100755
index 0000000..26febec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrTraverser.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRTRAVERSER_3F82DF7201C5_INCLUDED
+#define _INC_DDBRTRAVERSER_3F82DF7201C5_INCLUDED
+
+#include "Br/BrExport.h"
+#include "Br/BrEnums.h"
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+#include "SharedPtr.h"
+#include "DbSubentId.h"
+
+/** \details
+    This class is the interface class for BREP traversers.
+    
+    \sa
+    TD_Br
+    
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrTraverser
+{
+public:
+  /** \details
+    Returns true if and only if the full topological adjacency list has been traversed with the next() function.
+  */
+  bool done() const;
+
+  /** \details
+    Sets this Traverser object to reference the next object in the topological adjacency list.
+
+    \remarks
+    Adjacency lists are circular, ordered lists.
+    
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus next();
+
+  /** \details
+      Sets this Traverser object to reference the object that it would normally return first.
+  */
+  OdBrErrorStatus restart();
+
+  virtual ~OdBrTraverser();
+
+  /** \details
+    Returns true if and only if the specified Traverser object is equivalent to this Traverser object.
+    
+    \remarks
+    Two OdBrTraverser objects are equivalent if and only if they non-null, have the
+    same topological adjacency list owner, and have the same list position.
+    
+    \param pOtherTraverser [in]  Pointer to any OdBrTraverser object.
+  */
+  bool isEqualTo(const OdBrTraverser* pOtherTraverser) const;
+
+  /** \details
+    Returns true if and only if this Traverser object is empty. 
+  */
+  bool isNull() const;
+
+
+  // Validation
+  OdBrErrorStatus setValidationLevel(const BrValidationLevel& level = *(BrValidationLevel*)NULL);
+
+  OdBrErrorStatus getValidationLevel(BrValidationLevel& level) const;
+
+protected:
+  OdRxObjectPtr m_pImp;
+  OdSharedPtr<OdDbStubPtrArray> m_pFSubentPath;
+  bool m_bIsValidate; //The enum has only 2 values.
+
+  OdBrTraverser();
+
+  OdBrTraverser(const OdBrTraverser& source);
+
+  friend class OdBrTraverserInternals;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRTRAVERSER_3F82DF7201C5_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertex.h
new file mode 100755
index 0000000..aef3c83
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertex.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRVERTEX_3F82DAA9031C_INCLUDED
+#define _INC_DDBRVERTEX_3F82DAA9031C_INCLUDED
+
+#include "Br/BrEntity.h"
+#include "Ge/GePoint3d.h"
+
+#include "TD_PackPush.h"
+/** Desription:
+    This class is the interface class for BREP vertices.
+    
+    \remarks
+    Vertices correspond to 3D points.
+
+    Vertices are primary BREP elements with associated geometries: points. 
+
+    Library: TD_Br
+
+    <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrVertex : public OdBrEntity
+{
+public:
+  /** \details
+    Returns the point associated with this Vertex entity.
+  */
+  OdGePoint3d getPoint() const;
+
+  OdBrVertex();
+
+  ~OdBrVertex();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRVERTEX_3F82DAA9031C_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexEdgeTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexEdgeTraverser.h
new file mode 100755
index 0000000..8e6fba5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexEdgeTraverser.h
@@ -0,0 +1,81 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRVERTEXEDGETRAVERSER_3F83F87E031C_INCLUDED
+#define _INC_DDBRVERTEXEDGETRAVERSER_3F83F87E031C_INCLUDED
+#include "Br/BrVertex.h"
+#include "Br/BrEdge.h"
+
+
+#include "Br/BrTraverser.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+  This class is the interface class for vertex edge traversers.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrVertexEdgeTraverser : public OdBrTraverser
+{
+public:
+  /** \details
+    Sets this Traverser object to a specific vertex edge list.
+    \param vertex [in]  Owner of the edge list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setVertex(const OdBrVertex& vertex);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param edge [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setEdge(const OdBrEdge& edge);
+
+  /** \details
+    Returns the edge object at the current Traverser position.
+  */
+  OdBrEdge getEdge() const;
+
+  /** \details
+    Returns the owner of the edge list associated with this Traverser object.
+  */
+  OdBrVertex getVertex() const;
+
+  OdBrVertexEdgeTraverser();
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRVERTEXEDGETRAVERSER_3F83F87E031C_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexLoopTraverser.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexLoopTraverser.h
new file mode 100755
index 0000000..83de98c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Br/BrVertexLoopTraverser.h
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _INC_DDBRVERTEXLOOPTRAVERSER_3F83F8DC0000_INCLUDED
+#define _INC_DDBRVERTEXLOOPTRAVERSER_3F83F8DC0000_INCLUDED
+
+#include "Br/BrTraverser.h"
+
+class OdBrLoopVertexTraverser;
+class OdBrVertex;
+class OdBrLoop;
+
+#include "TD_PackPush.h"
+
+
+/** \details
+  This class is the interface class for vertex loop traversers.
+
+  \sa
+  TD_Br
+
+  <group OdBr_Classes>
+*/
+class ODBR_TOOLKIT_EXPORT OdBrVertexLoopTraverser : public OdBrTraverser
+{
+public:
+  OdBrVertexLoopTraverser();
+
+  /** \details
+    Sets this Traverser object to a specific vertex edge list.
+    \param vertex [in]  Owner of the edge list.
+    
+    \remarks
+    This Traverser object is set to the first element in the list.
+
+    Returns odbrOK if successful, or an appropriate error code if not.
+  */
+  OdBrErrorStatus setVertex(const OdBrVertex& vertex);
+
+  /** \details
+    Sets the starting position of this Traverser object.
+    \param loop [in]  Defines the starting position.
+  */
+  OdBrErrorStatus setLoop(const OdBrLoop& loop);
+  
+  /** \details
+    Sets this Traverser object to a specific vertex loop list
+    and starting position.
+    \param loopVertex [in]  Defines the vertex loop list and starting position.
+  */
+  OdBrErrorStatus setVertexAndLoop(const OdBrLoopVertexTraverser& loopVertex);
+
+  /** \details
+    Returns the loop object at the current Traverser position.
+  */
+  OdBrLoop getLoop() const;
+  
+  /** \details
+    Returns the owner of the loop list associated with this Traverser object.
+  */
+  OdBrVertex getVertex() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_DDBRVERTEXLOOPTRAVERSER_3F83F8DC0000_INCLUDED */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer.h
new file mode 100755
index 0000000..f8ab978
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer.h
@@ -0,0 +1,139 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _BREPRENDERER_H_
+#define _BREPRENDERER_H_
+
+#include "Wr/wrExport.h"
+#include "Wr/wrTriangulationParams.h"
+
+class OdGiCommonDraw ;
+class OdGiViewportDraw;
+class OdBrBrep;
+class OdGeMatrix3d;
+
+/** \details
+    This class is the base class for classes that provide platform-dependent ACIS rendering
+    for Teigha.
+    Library: TD_BrepRenderer
+
+    <group Other_Classes>
+*/
+class RENDER_EXPORT OdBrepRenderer
+{
+protected:
+  OdBrepRenderer() {}
+
+public:  
+  
+  virtual ~OdBrepRenderer() {}
+
+  enum
+  {
+    kNothing      = 0,
+    kIsolines     = 1,
+    kEdges        = 2,
+    kShells       = 4,
+    kOrderedEdges = 8, //  Geometry is returned as closed loops.
+    kSurfIsolines = 16
+  };
+
+  /** \details
+    Sets the BREP data for this Renderer object.
+    \param brep [in]  BREP data.
+  */
+  virtual void setBrep(const OdBrBrep& brep) = 0;
+
+  /** \details
+    Enables caching for this Renderer object.
+  */
+  virtual void enableCaching() = 0;
+  /** \details
+    Disables caching for this Renderer object.
+    \param clearCache [in]  Clears rendering cache if and only if true.
+  */
+  virtual void disableCaching(bool clearCache = true) = 0;
+  /** \details
+    Returns true if and only if caching is enabled for this Renderer object.
+  */
+  virtual bool isCachingEnabled() const = 0;
+
+  /** \details
+    Sets the Triangular Parameters for this Renderer object.
+    \param pTriangulationParams [in]  Pointer to the Triangular Parameters.
+  */
+  virtual void setTriangulationParams(const wrTriangulationParams *pTriangulationParams) = 0;
+  /** \details
+    Returns the Triangular Parameters for this Renderer object.
+  */
+  virtual const wrTriangulationParams * getTriangulationParams() const = 0;
+
+  struct NumIsolines
+  {
+    OdUInt32 numU, numV;
+  };
+
+  /** \details
+    Creates a geometric representation of the BREP data of this Renderer object.
+    
+    \remarks
+    Returns true if and only if the geometric representation can be generated. 
+
+    \param pWd [in]  Pointer to the OdGiCommonDraw  interface.
+    \param geomType [in]  Geometry type.
+    
+    \remarks
+    geomType must be a combination of one or more of the following:
+    
+    <table>
+    Name            Value
+    kNothing        0   
+    kIsolines       1
+    kEdges          2
+    kShells         4
+    kOrderedEdges   8
+    kSurfIsolines   16
+    </table>
+  */
+  virtual bool draw(OdGiCommonDraw * pWd, OdUInt32 geomType, const NumIsolines *pNumIsolines = 0) = 0;
+
+  /** \details
+    Creates a silhouette representation of the BREP data of this Renderer object.
+    \remarks
+    Returns true if and only if the silhouette representation can be generated. 
+
+    \param pVd [in]  Pointer to the OdGiViewportDraw interface.
+  */
+  virtual bool drawSilhouettes(OdGiViewportDraw* pVd) = 0;
+
+  /** \details
+    Applies the 3D transformation matrix to the BREP data of Renderer object.
+
+    \param xfm [in]  3D transformation matrix.
+  */
+  virtual void transformBy(const OdGeMatrix3d &xfm) = 0;
+};
+
+#endif //_BREPRENDERER_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer/BrepRendererImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer/BrepRendererImpl.h
new file mode 100755
index 0000000..b44c992
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/BrepRenderer/BrepRendererImpl.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODBREPRENDERERIMPL_INCLUDED_
+#define _ODBREPRENDERERIMPL_INCLUDED_
+
+#include "Wr/wrExport.h"
+#include "BrepRenderer.h"
+#include "MaterialResolver.h"
+
+class OdBrBrep; 
+
+class wrRenderCache;
+class OdGiCommonDraw ;
+class OdGiViewportDraw;
+class wrTriangulationParams;
+class OdGeMatrix3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class implements platform-dependent ACIS rendering for Teigha.
+    Library: TD_BrepRenderer
+    <group Other_Classes>
+*/
+class RENDER_EXPORT OdBrepRendererImpl : public OdBrepRenderer
+{
+  const OdBrBrep              *m_pBrep;
+  bool                         m_enableCache;
+  const wrTriangulationParams *m_pTriangulationParams;
+  wrRenderCache               *m_pCache;
+  const OdMaterialResolver    *m_pResolver;
+public:
+
+  OdBrepRendererImpl();
+  virtual ~OdBrepRendererImpl();
+
+  virtual void setMaterialResolver(const OdMaterialResolver *pResolver);
+
+  virtual void setBrep(const OdBrBrep& brep);
+
+  virtual void enableCaching();
+  virtual void disableCaching(bool clearCache = true);
+  virtual bool isCachingEnabled() const;
+
+  virtual void setTriangulationParams(const wrTriangulationParams *pTriangulationParams);
+
+  virtual const wrTriangulationParams * getTriangulationParams() const;
+
+  virtual bool draw(OdGiCommonDraw * pWd, OdUInt32 geomType, const NumIsolines *pNumIsolines = 0);
+
+  virtual bool drawSilhouettes(OdGiViewportDraw* pVd);
+
+  virtual void transformBy(const OdGeMatrix3d &xfm);
+};
+
+#include "TD_PackPop.h"
+
+#endif //_ODBREPRENDERERIMPL_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CAseDLPNTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CAseDLPNTableRecord.h
new file mode 100755
index 0000000..237b3aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CAseDLPNTableRecord.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDB_CASEDLPNTABLERECORD_H
+#define ODDB_CASEDLPNTABLERECORD_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/** \details
+    Represents a CAseDLPNTableRecord in an OdDbDatabase instance.
+
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT CAseDLPNTableRecord : public OdDbObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(CAseDLPNTableRecord);
+  
+  CAseDLPNTableRecord();
+  CAseDLPNTableRecord(OdDbObjectImpl* pImpl);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for CAseDLPNTableRecord object pointers.
+*/
+typedef OdSmartPtr<CAseDLPNTableRecord> CAseDLPNTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif //ODDB_CASEDLPNTABLERECORD_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ChunkAllocator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ChunkAllocator.h
new file mode 100755
index 0000000..fe7d07a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ChunkAllocator.h
@@ -0,0 +1,182 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __CHUNK_ALLOCATOR__
+#define __CHUNK_ALLOCATOR__
+
+#include "RootExport.h"
+#include "RxObjectImpl.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    <group Other_Classes> 
+*/
+class FIRSTDLL_EXPORT IAllocator
+{
+public:
+    virtual void* alloc(int) = 0;
+    virtual void release(void* p) = 0;
+    virtual ~IAllocator() {}
+
+    IAllocator();
+#ifdef _DEBUG
+    virtual int numChunks() = 0;
+#endif
+};
+
+/** \details
+    <group Other_Classes> 
+*/
+class FIRSTDLL_EXPORT AllocatorArray
+{
+public:
+    //'mask' is a bit flags value, each bit represents 
+    // enhancedForFixedSize flag per item.
+    // If size > sizeof(mask) then the rest items have the flag '0'
+    AllocatorArray(unsigned size, int mask);
+    ~AllocatorArray();
+
+    unsigned size() const { return m_size; }
+    IAllocator* getAt(unsigned i)
+    {
+        ODA_ASSERT(i < m_size);
+        return m_data[i];
+    }
+
+protected:
+    IAllocator** m_data;
+    unsigned m_size;
+};
+
+FIRSTDLL_EXPORT void addLocalHeaps(unsigned nThreadId, const unsigned* aThreadId);
+FIRSTDLL_EXPORT void releaseLocalHeaps(unsigned nThreadId, const unsigned* aThreadId);
+
+// Prevent MFC memleaks displaying
+
+/** \details
+    <group Other_Classes> 
+*/
+class AllocatorArrayML : public AllocatorArray
+{
+  protected:
+    bool m_bAllocated;
+    unsigned m_origSize;
+    int m_origMask;
+
+    void clear()
+    {
+      m_bAllocated = false;
+      m_data = NULL;
+      m_size = 0;
+    }
+  public:
+    AllocatorArrayML(unsigned size, int mask)
+      : AllocatorArray(size, mask)
+      , m_bAllocated(true), m_origSize(size), m_origMask(mask)
+    { }
+    ~AllocatorArrayML() { }
+    void reset()
+    {
+      if (!m_bAllocated)
+      {
+        AllocatorArrayML tmp(m_origSize, m_origMask);
+        *this = tmp;
+        tmp.clear();
+      }
+    }
+    void uninit()
+    {
+      if (m_bAllocated) {
+        this->~AllocatorArrayML();
+        clear();
+      }
+    }
+};
+
+// Some simplifiers for allocator specification
+
+#define ODCA_HEAP_OPERATORS() \
+  void* operator new(size_t); \
+  void  operator delete(void*)
+
+#define ODCA_HEAP_ALLOCATOR() \
+  static AllocatorArrayML s_aAlloc
+
+#define ODCA_HEAP_OPERATORS_DEFINE(baseClass, num) \
+  void* baseClass::operator new(size_t size) \
+  { \
+    return s_aAlloc.getAt(num)->alloc((int)size); \
+  } \
+  void baseClass::operator delete(void* p) \
+  { \
+    s_aAlloc.getAt(num)->release(p); \
+  }
+
+#define ODCA_HEAP_OPERATORS_DEFINE_0(baseClass) \
+  ODCA_HEAP_OPERATORS_DEFINE(baseClass, 0)
+
+#define ODCA_HEAP_ALLOCATOR_DEFINE(baseClass, numAllocs, allocMask) \
+  AllocatorArrayML baseClass::s_aAlloc(numAllocs, allocMask)
+
+#define ODCA_HEAP_ALLOCATOR_DEFINE_1(baseClass) \
+  ODCA_HEAP_ALLOCATOR_DEFINE(baseClass, 1, 0)
+#define ODCA_HEAP_ALLOCATOR_DEFINE_1_ENH(baseClass) \
+  ODCA_HEAP_ALLOCATOR_DEFINE(baseClass, 1, 1)
+
+#define ODCA_HEAP_ALLOCATOR_RESET(baseClass) \
+  baseClass::s_aAlloc.reset()
+#define ODCA_HEAP_ALLOCATOR_UNINIT(baseClass) \
+  baseClass::s_aAlloc.uninit()
+
+/** \details
+    <group Other_Classes> 
+*/
+template<class T, class TInterface = T>
+class OdGiRxObjectReImpl : public OdRxObjectImpl<T, TInterface>
+{
+  /** \details
+      Assignment operator prohibited.
+  */
+  OdGiRxObjectReImpl& operator = (const OdGiRxObjectReImpl&) { return *this; }
+
+  protected:
+    void* operator new (size_t size) { return T::operator new (size); }
+    void  operator delete (void* p) { T::operator delete (p); }
+
+  public:
+    /** \details
+        Creates an instance of OdGiRxObjectReImpl<T, TInterface>
+        and returns SmartPointer to it.
+    */
+    static OdSmartPtr<TInterface> createObject()
+    {
+      return OdSmartPtr<TInterface>(static_cast<TInterface*>(new OdGiRxObjectReImpl<T, TInterface>), kOdRxObjAttach);
+    }
+};
+
+#define GIRXREIMPL_CONSTR(ClassName) OdGiRxObjectReImpl<ClassName>::createObject()
+
+#include "TD_PackPop.h"
+
+#endif // __CHUNK_ALLOCATOR__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CloneFilers.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CloneFilers.h
new file mode 100755
index 0000000..a608851
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CloneFilers.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_CLONEFILERS_INCLUDED
+#define OD_CLONEFILERS_INCLUDED
+
+#include "DbFiler.h"
+#include "IdArrays.h"
+
+class OdDbIdMapping;
+
+class OdDbDeepCloneFiler;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDeepCloneFiler object pointers.
+*/
+typedef OdSmartPtr<OdDbDeepCloneFiler> OdDbDeepCloneFilerPtr;
+
+/** \details
+    This class is the base class for classes that are used for DeepClone file I/O operations utilizing .dwg 
+    and .dxf file formats.
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDeepCloneFiler : public OdDbDwgFiler
+{
+protected:
+  OdDbDeepCloneFiler() {}
+
+public:
+  ODRX_DECLARE_MEMBERS(OdDbDeepCloneFiler);
+
+  /** \details
+    Creates a DeepCloneFiler object with the specified ID Mapping.
+    \param pIdMapping [in]  Pointer to the ID Mapping. 
+  */
+  static OdDbDeepCloneFilerPtr createObject(OdDbIdMapping* pIdMapping);
+
+  // Protocol specific to clone filers
+
+  /** \details
+    Sets this DeepCloneFiler object to reference the Object ID that it would normally reference first.
+
+    \remarks
+    Allows multiple traversals of the ID Mapping.
+  */
+    virtual void start() = 0;
+  /** \details
+    Sets this DeepCloneFiler object to reference the Object ID following the current Object ID referenced.
+    
+    \param objectId [out]  Receives the next referenced Object ID.
+  */
+    virtual bool nextReference(OdDbObjectId& objectId) = 0;
+
+  /** \details
+    Returns the ID Mapping for this DeepCloneFiler object.
+  */
+  virtual OdDbIdMapping& idMapping() = 0;
+
+  /** \details
+    Processes the objects in the ID Mapping of this DeepCloneFiler object.
+  */
+  virtual void defaultProcessReferences() = 0;
+};
+
+class OdDbWblockCloneFiler;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbWblockCloneFiler object pointers.
+*/
+typedef OdSmartPtr<OdDbWblockCloneFiler> OdDbWblockCloneFilerPtr;
+
+/** \details
+    This class is the base class for classes that are used for Wblock file I/O operations utilizing .dwg
+    and .dxf file formats.
+    Library Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbWblockCloneFiler : public OdDbDeepCloneFiler
+{
+protected:
+  OdDbWblockCloneFiler() {}
+
+public:
+  ODRX_DECLARE_MEMBERS(OdDbWblockCloneFiler);
+
+  /** \details
+    Creates a WblockCloneFiler object with the specified ID Mapping.
+    \param pIdMapping [in]  Pointer to the ID Mapping. 
+  */
+  static OdDbWblockCloneFilerPtr createObject(OdDbIdMapping* pIdMapping);
+};
+
+#endif //OD_CLONEFILERS_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColor.h
new file mode 100755
index 0000000..fcd4af0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColor.h
@@ -0,0 +1,285 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef ODA_CM_COLOR
+#define ODA_CM_COLOR
+
+#include "OdString.h"
+#include "Gi/Gi.h"
+#include "CmColorBase.h"
+#include "DbExport.h"
+
+class OdCmEntityColor;
+class OdDbDwgFiler;
+class OdDbDxfFiler;
+class OdDbAuditInfo;
+
+#include "TD_PackPush.h"
+
+class OdDbObject;
+class OdDbFiler;
+
+/** \details
+    <group OdCm_Classes>
+
+    This class implements Color object that represents the unnamed and /named colors/
+    specified by the byLayer, byBlock, byColor, byACI, byPen, Foreground, byDgnIndex, or None 
+    /color methods/.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_overview.html, Overview of Classes that Implement Color and Transparency>
+
+    The OdCmEntityColor class,  the OdCmColorBase class
+*/
+class TOOLKIT_EXPORT OdCmColor : public OdCmColorBase
+{
+public:
+  OdCmColor();
+  OdCmColor(
+    const OdCmColor& color);
+  OdCmColor(
+    const OdCmColorBase& color);
+  OdCmColor(
+    OdCmEntityColor::ColorMethod color);
+  OdCmColor& operator=(
+    const OdCmColor& color);
+  OdCmColor& operator=(
+    const OdCmColorBase& color);
+  ~OdCmColor();
+
+  /** \details
+    Compares two /database color objects/ using their integer values together with their /color names/ 
+    and returns true when their values are equal, or false when their values are not equal.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+    bool operator ==(
+    const OdCmColor& color) const;
+  bool operator ==(
+    const OdCmColorBase& color) const;
+
+  /** \details
+    Compares two /database color objects/ using their integer values together with their /color names/ 
+    and returns true when their values are not equal, or false when their values are equal.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+    bool operator !=(
+    const OdCmColor& color) const;
+  bool operator !=(
+    const OdCmColorBase& color) const;
+  
+  /** \details
+    Returns the description string of the /database color object/.
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+  */
+  OdString getDescription() const;
+
+  /** \details
+    Returns the explanation string of the /database color object/.
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+  */
+ OdString getExplanation() const;
+
+  virtual OdCmEntityColor::ColorMethod colorMethod() const;
+  virtual void setColorMethod(
+    OdCmEntityColor::ColorMethod colorMethod);
+
+  virtual bool isByColor() const;
+  virtual bool isByLayer() const;
+  virtual bool isByBlock() const;
+  virtual bool isByACI() const;
+
+  virtual bool isForeground() const;
+  virtual bool isByDgnIndex() const;
+
+  /** \details
+    Checks whether the /color method/ is None (invisible) for the /database color object/ and 
+    returns true if and only if the /color method/ is set to _kNone_ or was set to _kACInone_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isNone() const;
+
+  virtual OdUInt32 color() const;
+  virtual void setColor(
+    OdUInt32 color);
+
+  virtual void setRGB(
+    OdUInt8 red, 
+    OdUInt8 green, 
+    OdUInt8 blue);
+  virtual void setRed(
+    OdUInt8 red);
+  virtual void setGreen(
+    OdUInt8 green);
+  virtual void setBlue(
+    OdUInt8 blue);
+  virtual OdUInt8 red() const;
+  virtual OdUInt8 green() const;
+  virtual OdUInt8 blue() const;
+
+  virtual OdUInt16 colorIndex() const;
+  virtual void setColorIndex(
+    OdUInt16 colorIndex);
+
+  virtual bool setNames(
+    const OdString& colorName,
+    const OdString& bookName = OdString::kEmpty);
+  virtual OdString colorName() const;
+  virtual OdString bookName() const;
+  virtual OdString colorNameForDisplay() const;
+
+  /** \details
+    Returns the OdCmEntityColor settings of the /database color object/.
+  */
+  OdCmEntityColor entityColor() const;
+
+  /** \details
+    Returns a /dictionary key/ based on the /color name and book name/ of the /database color object/.
+   
+    \remarks
+    OdCmColor objects with /color names/ can be stored in the form of an OdDbColor in a dictionary.
+    getDictionaryKey() returns the key for that dictionary.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+  */
+  OdString getDictionaryKey() const;
+  
+  /** \details
+    Sets the /book name and color name/ for the /dictionary keyword/.
+
+    \remarks
+    Returns true if and only if successful.
+    The /dictionary key/ is the string that is the combination of the /book name and color name/ joined by the dollar '$' symbol
+
+    \param dictionaryKey [in]  Dictionary keyword.   
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+  */
+  bool setNamesFromDictionaryKey(
+    const OdString& dictionaryKey);
+
+  /** \details
+    Reads the .dwg file format data of this object from the specified file.
+       
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+    
+  */
+  void dwgIn(
+    OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+  */
+  void dwgOut(
+    OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF format data of this object from the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+    \param groupCodeOffset [in]  Group code offset.
+  */
+  void dxfIn(
+    OdDbDxfFiler* pFiler, 
+    int groupCodeOffset = 0);
+
+  /** \details
+    Writes the DXF format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+    \param groupCodeOffset [in]  Group code offset.
+  */
+  void dxfOut(
+    OdDbDxfFiler* pFiler, 
+    int groupCodeOffset = 0) const;
+
+  /** \details
+    Perform an audit operation on this object.
+
+    \param pAuditInfo [in]  Pointer to an AuditInfo object.
+    
+    \remarks
+    When overriding this function for a custom class, first call OdCmColorBase::audit(pAuditInfo) 
+    to validate the audit operation.
+  */
+  void audit(
+    OdDbAuditInfo* pAuditInfo);
+
+  /*!DOM*/
+  void     dwgInAsTrueColor (
+    OdDbDwgFiler* pFiler);
+
+  /*!DOM*/
+  void     dwgOutAsTrueColor(
+    OdDbDwgFiler* pFiler) const;
+
+  TOOLKIT_EXPORT_STATIC static const OdUInt16 MaxColorIndex;
+
+private:
+  enum NameFlags
+  {    
+    kNoNames      = 0,
+    kHasColorName = 1,
+    kHasBookName  = 2
+  };
+  OdCmEntityColor::RGBM   m_RGBM;
+  OdString                m_colorName;
+  OdString                m_bookName;
+};
+
+#include "TD_PackPop.h"
+
+#endif // ODA_CM_COLOR
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorArray.h
new file mode 100755
index 0000000..d6fe72a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorArray.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef CMCOLORARRAY_INCLUDED
+#define CMCOLORARRAY_INCLUDED
+
+#include "OdArray.h"
+#include "CmColor.h"
+/** \details
+    This template class is a specialization of the OdArray class for OdCmColor objects.
+*/
+typedef OdArray<OdCmColor> OdCmColorArray;
+
+#endif // CMCOLORARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorBase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorBase.h
new file mode 100755
index 0000000..77f20f2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmColorBase.h
@@ -0,0 +1,1611 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef ODA_CMBASE_COLOR
+#define ODA_CMBASE_COLOR
+
+#include "OdString.h"
+#include "Gi/Gi.h"
+
+#include "TD_PackPush.h"
+
+class OdDbDwgFiler;
+
+/** \details
+    <group OdCm_Classes>
+    
+    This class implements the /entity color object/ that represents the unnamed colors specified by 
+    the byLayer, byBlock, byColor, byACI, byPen, Foreground, byDgnIndex, or None /color methods/.
+
+    \remarks
+    The /entity color object/ can specify any of the following color methods:
+
+    <table>
+    Name         Value    Description
+    _kByLayer_     0xC0     Color is specified by the /layer object/ to which the object is resided.
+    _kByBlock_     0xC1     Color is specified by the /block object/ in which the object is contained.
+    _kByColor_     0xC2     Color is specified by an RGB-value.
+    _kByACI_       0xC3     Color is specified by an index (ACI) of a some /color palette/.
+    _kByPen_       0xC4     Color is specified by an index into a pen color table.
+    _kForeground_  0xC5     Color is foreground.
+    _kByDgnIndex_  0xC7     Color is specified by an index into a dgn color table.
+    _kNone_        0xC8     color is absent (object is clarity).
+    </table>
+
+    An entity has no color from the time it is first instantiated until it is assigned one or added 
+    to a database. The ColorMethod enumeration defines the constants for /color methods/.
+ 
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_overview.html, Overview of Classes that Implement Color and Transparency>
+
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    The OdCmColorBase class,  the OdCmColor class
+*/
+class FIRSTDLL_EXPORT OdCmEntityColor
+{
+public:
+  ODRX_HEAP_OPERATORS();
+  enum Color
+  {
+    kRed,
+    kGreen,
+    kBlue
+  };
+  
+  /** \details
+    Represents color method.
+  */  
+  enum ColorMethod
+  {
+    /**Color of the /layer/ on which it resides.*/
+    kByLayer    = 0xC0,
+    /**Color of the /block/ reference in which it is contained.*/
+    kByBlock    = 0xC1,
+    /**Color specified by RGB value.*/
+    kByColor    = 0xC2,
+    /**Color specified by an index (ACI) into a /color/ palette.*/
+    kByACI      = 0xC3,
+    /**Color specified by an index into a pen /color/ table.*/
+    kByPen      = 0xC4,
+    /**Editor foreground Color.*/
+    kForeground = 0xC5,
+    /**Color specified by an index into a dgn /color/ table.*/
+    kByDgnIndex = 0xC7,
+    /**No Color.*/
+    kNone       = 0xC8
+  };
+  
+  enum ACIcolorMethod
+  {
+    kACIbyBlock     = 0,    // byBlock
+    kACIforeground  = 7,    // Foreground
+    kACIbyLayer     = 256,  // byLayer
+
+    kACIclear       = 0,    // Clear
+
+    kACIRed         = 1,    // Red
+    kACIYellow      = 2,    // Yellow
+    kACIGreen       = 3,    // Green
+    kACICyan        = 4,    // Cyan
+    kACIBlue        = 5,    // Blue
+    kACIMagenta     = 6,    // Magenta
+    kACIWhite       = 7,    // White
+
+    kACIstandard    = 7,    
+    kACImaximum     = 255,
+    kACInone        = 257,  // None
+    kACIminimum     = -255
+  };
+  
+  typedef OdUInt32 RGBM;
+  
+  /** \param colorMethod [in]  /Color method/.
+    \param red [in]  Red component.
+    \param green [in]  Green component.
+    \param blue [in]  Blue component.
+    
+    \remarks
+    Default ColorMethod is kByColor. 
+  */
+  OdCmEntityColor() : m_RGBM(0) { setColorMethod(kByColor); }
+  OdCmEntityColor(
+    const OdCmEntityColor & color) : m_RGBM(color.m_RGBM) { }
+  OdCmEntityColor(
+    ColorMethod colorMethod) : m_RGBM(0) { setColorMethod(colorMethod); }
+  OdCmEntityColor(
+    OdUInt8 red, 
+    OdUInt8 green, 
+    OdUInt8 blue)
+  {
+    setColorMethod(kByColor);
+    setRGB(red, green, blue);
+  }
+
+  /** \details
+    Copies an /entity color object/ specified by right into the /entity color object/ specified by left.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+  */
+    OdCmEntityColor& operator =(
+    const OdCmEntityColor& color)
+  {
+    m_RGBM = color.m_RGBM;
+    return *this;
+  }
+
+  /** \details
+    Compares two /entity color objects/ as integer values and returns true when their values are equal, 
+    or false when their values are not equal.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+    bool operator ==(
+    const OdCmEntityColor& color) const
+  {
+    return m_RGBM == color.m_RGBM;
+  }
+
+  /** \details
+    Compares two /entity color objects/ as integer values and returns true when their values are not equal, 
+    or false when their values are equal.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+    bool operator !=(
+    const OdCmEntityColor& color) const
+  {
+    return m_RGBM != color.m_RGBM;
+  }
+
+  /** \details
+    Sets the /color method/ for the /entity color object/.
+
+    \param colorMethod [in]  /Color method/ as the ColorMethod enumeration.
+
+    \remarks
+    The /color method/ can be a one of the following: 
+    
+    <table>
+    Name         Value    Description
+    _kByLayer_     0xC0     Color is specified by the /layer object/ to which the object is resided.
+    _kByBlock_     0xC1     Color is specified by the /block object/ in which the object is contained.
+    _kByColor_     0xC2     Color is specified by an RGB-value.
+    _kByACI_       0xC3     Color is specified by an index (ACI) of a some /color palette/.
+    _kByPen_       0xC4     Color is specified by an index into a pen color table.
+    _kForeground_  0xC5     Color is foreground.
+    _kByDgnIndex_  0xC7     Color is specified by an index into a dgn color table.
+    _kNone_        0xC8     color is absent (object is clarity).
+    </table>
+
+    An entity does not have a color from the time it is first instantiated until it is assigned one
+    or added to a database.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  void setColorMethod(
+    ColorMethod colorMethod) { OdCmEntityColor::setColorMethod(&m_RGBM, colorMethod); }
+
+  /** \details
+    Returns the /color method/ of the /entity color object/ as a value of the ColorMethod enumeration.
+
+    \remarks
+    The /color method/ can be a one of the following:
+     
+    <table>
+    Name         Value    Description
+    _kByLayer_     0xC0     Color is specified by the /layer object/ to which the object is resided.
+    _kByBlock_     0xC1     Color is specified by the /block object/ in which the object is contained.
+    _kByColor_     0xC2     Color is specified by an RGB-value.
+    _kByACI_       0xC3     Color is specified by an index (ACI) of a some /color palette/.
+    _kByPen_       0xC4     Color is specified by an index into a pen color table.
+    _kForeground_  0xC5     Color is foreground.
+    _kByDgnIndex_  0xC7     Color is specified by an index into a dgn color table.
+    _kNone_        0xC8     color is absent (object is clarity).
+    </table>
+
+    An entity does not have a color from the time it is first instantiated until it is assigned one
+    or added to a database.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  ColorMethod colorMethod() const
+  {
+    return colorMethod(&m_RGBM);
+  } 
+  
+  /** \details
+    Sets the /color method and color components/ for the /entity color object/ as an integer value.
+
+    \param color [in]  A packed 32-bits integer value that specifies the /color method and color components/.
+ 
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+  void setColor(
+    OdUInt32 color);
+
+  /** \details
+    Returns the packed 32-bits integer value that stores the /color method and color components/
+    of the /entity color object/.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+  OdUInt32 color() const { return m_RGBM; } 
+  
+  /** \details
+    Sets the /color index/ (ACI) of a some /color palette/ and sets the /color method/ to byACI 
+    for the /entity color object/.
+
+    \param colorIndex [in]  An integer value that is the index of the color in a some palette.
+    
+    \remarks
+    The /color index/ can be a one of the following:
+
+    <table>
+    Name              Value   Description
+    _kACIbyBlock_       0       Sets the /color method/ to byBlock.
+    _kACIRed_           1       Red. 
+    _kACIYellow_        2       Yellow. 
+    _kACIGreen_         3       Green. 
+    _kACICyan_          4       Cyan. 
+    _kACIBlue_          5       Blue. 
+    _kACIMagenta_       6       Magenta. 
+    _kACIforeground_    7       Sets the /color method/ to Foreground.
+    ..                8-255   Defined by display device.
+    _kACIbyLayer_       256     Sets the /color method/ to byLayer. 
+    _kACInone_          257     Sets the /color method/ to None.
+    </table>
+
+    An entity does not have a color from the time it is first instantiated until it is assigned one
+    or added to a database.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  void setColorIndex(
+    OdInt16 colorIndex) { setColorIndex(&m_RGBM, colorIndex); }
+
+  /** \details
+    Returns the /color index/ (ACI) of the /entity color object/.
+
+    \remarks
+    The /color index/ can be a one of the following:
+
+    <table>
+    Name              Value   Description
+    _kACIbyBlock_       0       Sets the /color method/ to byBlock.
+    _kACIRed_           1       Red. 
+    _kACIYellow_        2       Yellow. 
+    _kACIGreen_         3       Green. 
+    _kACICyan_          4       Cyan. 
+    _kACIBlue_          5       Blue. 
+    _kACIMagenta_       6       Magenta. 
+    _kACIforeground_    7       Sets the /color method/ to Foreground.
+    ..                8-255   Defined by display device.
+    _kACIbyLayer_       256     Sets the /color method/ to byLayer. 
+    _kACInone_          257     Sets the /color method/ to None.
+    </table>
+
+    An entity does not have a color from the time it is first instantiated until it is assigned one
+    or added to a database.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  OdInt16 colorIndex() const { return OdCmEntityColor::colorIndex(&m_RGBM); }
+  
+  
+  /** \details
+    Sets the red, green, /blue color components/ and the /color method/ to byColor for the /entity color object/.
+    
+    \param red [in]  Red component as an integer value in range 0 to 255.
+    \param green [in]  Green component as an integer value in range 0 to 255.
+    \param blue [in]  Blue component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  void setRGB(
+    OdUInt8 red, 
+    OdUInt8 green, 
+    OdUInt8 blue)
+  {
+    setRGB(&m_RGBM, red, green, blue);
+  }    
+
+  /** \details
+    Sets the /red color component/ for the /entity color object/.
+    
+    \param red [in]  Red component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  void setRed(
+    OdUInt8 red) { setRed(&m_RGBM, red); }
+
+  /** \details
+    Sets the /green color component/ for the /entity color object/.
+    
+    \param green [in]  Green component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  void setGreen(
+    OdUInt8 green) { setGreen(&m_RGBM, green); }
+
+  /** \details
+    Sets the /blue color component/ for the /entity color object/.
+    
+    \param blue [in]  Blue component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  void setBlue(
+    OdUInt8 blue) { setBlue(&m_RGBM, blue); }
+
+  /** \details
+    Returns the /red color component/ of the /entity color object/ as a value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  OdUInt8 red() const { return red(&m_RGBM); }
+  
+  /** \details
+    Returns the /green color component/ of the /entity color object/ as a value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  OdUInt8 green() const { return green(&m_RGBM); }
+
+  /** \details
+    Returns the /blue color component/ of the /entity color object/ as a value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  OdUInt8 blue() const { return blue(&m_RGBM); }
+  
+  // Method check
+  
+  /** \details
+    Checks whether the /color method/ is byColor for the /entity color object/ and 
+    returns true if and only if the /color method/ is set to _kByColor_, otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isByColor() const { return isByColor(&m_RGBM); }
+
+  /** \details
+    Checks whether the /color method/ is byLayer for the /entity color object/ and 
+    returns true if and only if the /color method/ is set to _kByLayer_ or was set to _kACIbyLayer_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isByLayer() const { return isByLayer(&m_RGBM); }
+
+  
+  /** \details
+    Checks whether the /color method/ is byBlock for the /entity color object/ and 
+    returns true if and only if the /color method/ is set to _kByBlock_ or was set to _kACIbyBlock_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isByBlock() const { return isByBlock(&m_RGBM); }
+   
+
+  /** \details
+    Checks whether the /color method/ is byACI for the /entity color object/ and 
+    returns true if and only if the /color method/ is set to _kByACI_, otherwise it returns false.
+    
+    \remarks
+    This method returns true for ACI values of 0 (ByBlock), 7 (ByForeground), 256 (ByLayer), and 257 (None).
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isByACI() const { return isByACI(&m_RGBM); }
+
+  /** \details
+    Checks whether the /color method/ is Foreground for the /entity color object/ and 
+    returns true if and only if the /color method/ is set to _kForeground_ or was set to _kACIforeground_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isForeground() const { return isForeground(&m_RGBM); }
+
+  /** \details
+    Checks whether the /color method/ is byDgnIndex for the /entity color object/ and 
+    returns true if and only if the /color method/ is set to _kByDgnIndex_, otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isByDgnIndex() const { return isByDgnIndex(&m_RGBM); }
+
+  /** \details
+    Checks whether the /color method/ is None (invisible) for the /entity color object/ and 
+    returns true if and only if the /color method/ is set to _kNone_ or was set to _kACInone_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  bool isNone() const  { return isNone(&m_RGBM); }
+  
+  /** \details
+    Returns the TrueColor value of the /entity color object/.
+
+    \sa
+    <link cm.html, Working with Colors and Transparencies>
+  */
+  OdUInt32 trueColor() const;
+  
+  /** \details
+    Sets the color of the calling entity with the /entity color object/.
+
+    \sa
+    <link cm.html, Working with Colors and Transparencies>
+  */
+  void setTrueColor();
+  
+  /** \details
+    Converts the /color method/ from ACIcolorMethod to ColorMethod and returns the ColorMethod value.
+    
+    \remarks
+    Assumes the current /color method/ is ACIcolorMethod.
+
+    \sa
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  OdUInt8 trueColorMethod() const;
+
+  /** \details
+    Converts the /color method/ from ACIcolorMethod to ColorMethod and 
+    assumes the current /color method/ to ACIcolorMethod.
+
+    \sa
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  void setTrueColorMethod();
+  
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setColorMethod(
+    RGBM* pRGBM, 
+    ColorMethod colorMethod);
+
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static ColorMethod colorMethod(
+    const RGBM* pRGBM)
+  {
+    return OdCmEntityColor::ColorMethod((*pRGBM >> 24) & 0xFF);
+  }
+  
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setColor(
+    RGBM* pRGBM, 
+    OdUInt32 color);
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static OdUInt32 color(
+    const RGBM* pRGBM); 
+  
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setColorIndex(
+    RGBM* pRGBM, 
+    OdInt16 colorIndex);
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static OdInt16 colorIndex(
+    const RGBM* pRGBM);
+  
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setRGB(
+    RGBM* pRGBM, 
+    OdUInt8 red, 
+    OdUInt8 green, 
+    OdUInt8 blue)
+  {
+    setColorMethod(pRGBM, kByColor);
+    setRed(pRGBM, red);
+    setGreen(pRGBM, green);
+    setBlue(pRGBM, blue);
+  }
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setRed(
+    RGBM* pRGBM, 
+    OdUInt8 red)
+  {
+    ODA_ASSERT(colorMethod(pRGBM) == kByColor); 
+    *pRGBM &= 0xFF00FFFF;
+    *pRGBM |= RGBM(((OdUInt32)red << 16) & 0x00FF0000);
+  }
+      
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setGreen(
+    RGBM* pRGBM, 
+    OdUInt8 green)
+  {
+    ODA_ASSERT(colorMethod(pRGBM) == kByColor); 
+    *pRGBM &= 0xFFFF00FF;
+    *pRGBM |= RGBM(((OdUInt32)green << 8) & 0x0000FF00);
+  }
+    
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setBlue(
+    RGBM* pRGBM, 
+    OdUInt8 blue)
+  {
+    ODA_ASSERT(colorMethod(pRGBM) == kByColor); 
+    *pRGBM &= 0xFFFFFF00;
+    *pRGBM |= RGBM((blue) & 0x000000FF);
+  }    
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static OdUInt8 red(
+    const RGBM* pRGBM)
+  {
+    ODA_ASSERT(colorMethod(pRGBM) == kByColor); 
+    return OdUInt8((*pRGBM >> 16) & 0xFF);
+  }
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static OdUInt8 green(
+    const RGBM* pRGBM)
+  {
+    ODA_ASSERT(colorMethod(pRGBM) == kByColor); 
+    return OdUInt8((*pRGBM >> 8) & 0xFF);
+  }
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static OdUInt8 blue(
+    const RGBM* pRGBM)
+  {
+    ODA_ASSERT(colorMethod(pRGBM) == kByColor); 
+    return OdUInt8(*pRGBM & 0xFF);
+  }
+    
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static bool isByColor(
+    const RGBM* pRGBM) { return colorMethod(pRGBM) == kByColor; }  
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static bool isByLayer(
+    const RGBM* pRGBM)
+  {
+    return (colorMethod(pRGBM) == kByLayer || (colorMethod(pRGBM) == kByACI && indirect(pRGBM) == kACIbyLayer)); 
+  }    
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static bool isByBlock(
+    const RGBM* pRGBM)
+  {
+    return (colorMethod(pRGBM) == kByBlock || (colorMethod(pRGBM) == kByACI && indirect(pRGBM) == kACIbyBlock)); 
+  }    
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static bool isByACI(
+    const RGBM* pRGBM)
+  {
+    return colorMethod(pRGBM) == kByACI;
+  }
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static bool isForeground(
+    const RGBM* pRGBM)
+  {
+    return (colorMethod(pRGBM) == kForeground || (colorMethod(pRGBM) == kByACI && indirect(pRGBM) == kACIforeground)); 
+  }
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static bool isByDgnIndex(
+    const RGBM* pRGBM)
+  {
+    return colorMethod(pRGBM) == kByDgnIndex;
+  }
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static bool isNone(
+    const RGBM* pRGBM)
+  {
+    return (colorMethod(pRGBM) == kNone || (colorMethod(pRGBM) == kByACI && indirect(pRGBM) == kACInone)); 
+  }
+    
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static OdUInt32 trueColor(
+    const RGBM* pRGBM);
+    
+  /** \param aciColorMethod [in]  ACIcolorMethod value.
+  */
+  static OdUInt8 trueColorMethod(
+    OdInt16 aciColorMethod);
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setTrueColor(
+    RGBM* pRGBM);
+    
+  /** \param pRGBM [in]  Pointer to the m_RGBM member of the /entity color object/.
+  */
+  static void setTrueColorMethod(
+    RGBM* pRGBM);
+  
+  /** \details
+    Converts the specified /color index/ (ACI-value) to the RGB-value. 
+    
+    \remarks
+    For converting, this method uses the default palette specified by the mLUT static array
+    and returns the RGB-value without /color method/ as a packed integer value in which:
+
+    <table>
+    Byte      Description
+    0         Blue component.
+    1         Green component.
+    2         Red component.
+    </table>
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  static OdUInt32 lookUpRGB(
+    OdUInt8 colorIndex);
+  
+  /** \details
+    Converts the  RGB-value specified by the red, green, /blue components/ to the ACI-value. 
+
+    \param red [in]  Red component an an integer value in range 0 to 255.
+    \param green [in]  Green component an an integer value in range 0 to 255.
+    \param blue [in]  Blue component an an integer value in range 0 to 255.
+
+    \remarks
+    For converting, this method uses the default palette specified by the mLUT static array
+    and returns the /color index without color method/ as an integer value in range 0 to 257.
+
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  static OdUInt8 lookUpACI(
+    OdUInt8 red, 
+    OdUInt8 green, 
+    OdUInt8 blue); 
+  
+protected:
+  /*!DOM*/
+  static OdInt16 indirect(
+    const RGBM* pRGBM) 
+  {
+    ODA_ASSERT(colorMethod(pRGBM) != kByColor); 
+    return OdInt16((*pRGBM) & 0x0000FFFF);
+  }
+
+  /*!DOM*/
+  static void setIndirect(
+    RGBM* pRGBM, 
+    OdInt16 indirect)
+  {
+    ODA_ASSERT(colorMethod(pRGBM) != kByColor); 
+    *pRGBM = ((*pRGBM & 0xFF000000) | (OdUInt32(indirect) & 0x0000FFFF));
+  }
+      
+  /*!DOM*/
+  OdInt16 indirect() const { return indirect(&m_RGBM); }
+
+  /*!DOM*/
+  void setIndirect(OdInt16 indirect) { setIndirect(&m_RGBM, indirect); }
+
+  RGBM m_RGBM;
+  
+public:
+  /** \details
+      Maps the colors between ACI-values and RGB-values.
+  */
+  FIRSTDLL_EXPORT_STATIC static const OdUInt8 mLUT[256][3]; 
+};
+
+
+/** \details
+   <group OdCm_Classes>
+
+    This class is a virtual interface for classes that represent the unnamed and /named colors/
+    specified by the byLayer, byBlock, byColor, byACI, byPen, Foreground, byDgnIndex, or None 
+    /color methods/.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_overview.html, Overview of Classes that Implement Color and Transparency>
+
+    The OdCmEntityColor class,  the OdCmColor class
+*/
+class FIRSTDLL_EXPORT OdCmColorBase
+{
+public:
+  ODRX_HEAP_OPERATORS();
+  virtual ~OdCmColorBase() {}
+
+  /** \details
+    Returns the /color method/ of the /database color object/ as a value of the ColorMethod enumeration.
+
+    \remarks
+    The /color method/ can be a one of the following:
+     
+    <table>
+    Name         Value    Description
+    _kByLayer_     0xC0     Color is specified by the /layer object/ to which the object is resided.
+    _kByBlock_     0xC1     Color is specified by the /block object/ in which the object is contained.
+    _kByColor_     0xC2     Color is specified by an RGB-value.
+    _kByACI_       0xC3     Color is specified by an index (ACI) of a some /color palette/.
+    _kByPen_       0xC4     Color is specified by an index into a pen color table.
+    _kForeground_  0xC5     Color is foreground.
+    _kByDgnIndex_  0xC7     Color is specified by an index into a dgn color table.
+    _kNone_        0xC8     color is absent (object is clarity).
+    </table>
+
+    \remarks
+    Using of this method by third-party applications is neither supported nor recommended.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual OdCmEntityColor::ColorMethod colorMethod() const = 0;
+  
+
+  /** \details
+    Sets the /color method the database color object/ using a value of the ColorMethod enumeration.
+
+    \param colorMethod [in]  /color method/ as the ColorMethod enumeration.
+
+    \remarks
+    The /color method/ can be a one of the following:
+    
+    <table>
+    Name         Value    Description
+    _kByLayer_     0xC0     Color is specified by the /layer object/ to which the object is resided.
+    _kByBlock_     0xC1     Color is specified by the /block object/ in which the object is contained.
+    _kByColor_     0xC2     Color is specified by an RGB-value.
+    _kByACI_       0xC3     Color is specified by an index (ACI) of a some /color palette/.
+    _kByPen_       0xC4     Color is specified by an index into a pen color table.
+    _kForeground_  0xC5     Color is foreground.
+    _kByDgnIndex_  0xC7     Color is specified by an index into a dgn color table.
+    _kNone_        0xC8     color is absent (object is clarity).
+    </table>
+
+    \remarks
+    Using of this method by third-party applications is neither supported nor recommended.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual void  setColorMethod(
+    OdCmEntityColor::ColorMethod colorMethod) = 0;
+
+
+  /** \details
+    Checks whether the /color method/ is byColor for the /database color object/ and 
+    returns true if and only if the /color method/ is set to _kByColor_, otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual bool isByColor() const = 0;
+    
+  /** \details
+    Checks whether the /color method/ is byLayer for the /databse color object/ and 
+    returns true if and only if the /color method/ is set to _kByLayer_ or was set to _kACIbyLayer_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual bool isByLayer() const = 0;
+  
+  /** \details
+    Checks whether the /color method/ is byBlock for the /database color object/ and 
+    returns true if and only if the /color method/ is set to _kByBlock_ or was set to _kACIbyBlock_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual bool isByBlock() const = 0;
+
+  /** \details
+    Checks whether the /color method/ is byACI for the /database color object/ and 
+    returns true if and only if the /color method/ is set to _kByACI_, otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \remarks
+    This method returns true for ACI values of 0 (ByBlock), 7 (ByForeground), 256 (ByLayer), and 257 (None).
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual bool isByACI() const = 0;
+
+  /** \details
+    Checks whether the /color method/ is Foreground for the /database color object/ and 
+    returns true if and only if the /color method/ is set to _kForeground_ or was set to _kACIforeground_, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual bool isForeground()   const = 0;
+
+  /** \details
+    Checks whether the /color method/ is byDgnIndex for the /database color object/ and 
+    returns true if and only if the /color method/ is set to _kByDgnIndex_, otherwise it returns false.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+  */
+  virtual bool isByDgnIndex()   const = 0;
+
+  /** \details
+    Returns the packed 32-bits integer value that stores the /color method and color components/
+    of the /database color object/.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+  virtual OdUInt32  color() const = 0;
+  
+  /** \details
+    Sets the /color method and color components/ for the /database color object/ as an integer value.
+
+    \param color [in]  A packed 32-bits integer value that specifies the /color method and color components/.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+  virtual void setColor(
+    OdUInt32 color) = 0;
+
+  /** \details
+    Sets the red, green, /blue color components/ and the /color method/ to byColor for the /database color object/.
+
+    \param red [in]  Red component as an integer value in range 0 to 255.
+    \param green [in]  Green component as an integer value in range 0 to 255.
+    \param blue [in]  Blue component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  virtual void setRGB(
+    OdUInt8 red, 
+    OdUInt8 green, 
+    OdUInt8 blue) = 0;
+                           
+  /** \details
+    Sets the /red color component/ for the /database color object/.
+    
+    \param red [in]  Red component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  virtual void setRed(
+    OdUInt8 red) = 0;
+    
+  /** \details
+    Sets the /green color component/ for the /database color object/.
+    
+    \param green [in]  Green component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  virtual void setGreen(
+    OdUInt8 green) = 0;
+    
+  /** \details
+    Sets the /blue color component/ for the /database color object/.
+    
+    \param blue [in]  Blue component as an integer value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  virtual void setBlue(
+    OdUInt8 blue) = 0;
+    
+  /** \details
+    Returns the /red color component/ of the /database color object/ as a value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  virtual OdUInt8 red() const = 0;
+
+   /** \details
+    Returns the /green color component/ of the /database color object/ as a value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+   */
+  virtual OdUInt8 green() const = 0;
+
+  /** \details
+    Returns the /blue color component/ of the /database color object/ as a value in range 0 to 255.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_RGB.html, Color Functionality as an RGB-value>
+  */
+  virtual OdUInt8 blue() const = 0;
+
+  /** \details
+    Returns the /color index/ (ACI) of the /database color object/.
+
+    \remarks
+    The /color index/ can be a one of the following:
+
+    <table>
+    Name              Value   Description
+    _kACIbyBlock_       0       Sets the /color method/ to byBlock.
+    _kACIRed_           1       Red. 
+    _kACIYellow_        2       Yellow. 
+    _kACIGreen_         3       Green. 
+    _kACICyan_          4       Cyan. 
+    _kACIBlue_          5       Blue. 
+    _kACIMagenta_       6       Magenta. 
+    _kACIforeground_    7       Sets the /color method/ to Foreground.
+    ..                8-255   Defined by display device.
+    _kACIbyLayer_       256     Sets the /color method/ to byLayer. 
+    _kACInone_          257     Sets the /color method/ to None.
+    </table>
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  virtual OdUInt16  colorIndex() const = 0;
+
+  /** \details
+    Sets the /color index/ (ACI) of a some /color palette/ and sets the /color method/ to byACI 
+    for the /database color object/.
+
+    \param colorIndex [in]  An integer value that is the index of the color in a some palette.
+    
+    \remarks
+    The /color index/ can be a one of the following:
+
+    <table>
+    Name              Value   Description
+    _kACIbyBlock_       0       Sets the /color method/ to byBlock.
+    _kACIRed_           1       Red. 
+    _kACIYellow_        2       Yellow. 
+    _kACIGreen_         3       Green. 
+    _kACICyan_          4       Cyan. 
+    _kACIBlue_          5       Blue. 
+    _kACIMagenta_       6       Magenta. 
+    _kACIforeground_    7       Sets the /color method/ to Foreground.
+    ..                8-255   Defined by display device.
+    _kACIbyLayer_       256     Sets the /color method/ to byLayer. 
+    _kACInone_          257     Sets the /color method/ to None.
+    </table>
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_method.html, Methods of the Color Definition>
+
+    <link cm_color_index.html, Color Functionality as an ACI-value>
+  */
+  virtual void setColorIndex(
+    OdUInt16 colorIndex) = 0;
+
+  /** \details
+    Converts to the /named color/ and sets the /color name and book name/ for the /database color object/.
+    
+    \param colorName [in]  /Color name/ as a string value.
+    \param bookName [in]  /Book name/ as a string value.
+
+    \remarks
+    Returns true if and only if successful.
+    If the /book name/ is an empty string that the method sets the UNNAMED name. 
+    If the /color name/ is an empty string that the method ignores the specified values.
+    If the /book name/ and the /color name/ are an empty string together that the method converts to the /unnamed color/.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+
+    <link cm_color_integer.html, Color Functionality as an Integer-value>
+  */
+  virtual bool  setNames(
+    const OdString& colorName,
+    const OdString& bookName = OdString::kEmpty) = 0;
+    
+  /** \details
+    Returns the /color name/ of the /database color object/.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+  */
+  virtual OdString colorName() const = 0;
+
+  /** \details
+    Returns the /book name/ of the /database color object/.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+  */
+  virtual OdString bookName() const = 0;
+  
+  /** \details
+    Returns the /display color name/ of the /database color object/.
+    
+    \remarks
+    For /named colors/, this is the same as colorName(). For /unnamed colors/, it is an 'appropriate' name.
+
+    \sa
+    <link cm_color_sample_base.html, Example of Working with the Database Color>
+
+    \sa
+    <link cm_color_book.html, Color Functionality as a Book Name>
+  */
+  virtual OdString colorNameForDisplay() const = 0;
+};
+
+
+/** \details
+    <group OdCm_Classes>
+
+    This class implements the Transparency object, which provides the transparency information about OdGiDrawable objects.
+   
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_overview.html, Overview of Classes that Implement Color and Transparency>
+
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+*/
+class OdCmTransparency 
+{
+public:
+  ODRX_HEAP_OPERATORS();
+  
+  enum transparencyMethod 
+  {
+    kByLayer    = 0, // Use the setting for the /layer/.
+    kByBlock    = 1, // Use the setting for the /block/.
+    kByAlpha    = 2, // Use the Alpha-value in this object.     
+    kErrorValue = 3  // Error value.
+  };
+  
+  /** \remarks
+    The default /transparency method/ is _kByLayer_.
+  */
+  OdCmTransparency() { setMethod(kByLayer); }
+  OdCmTransparency(transparencyMethod method) { setMethod(method); }
+  OdCmTransparency(OdUInt8 alpha) { setAlpha(alpha); }
+  OdCmTransparency(double alphaPercent) { setAlphaPercent(alphaPercent); }
+  OdCmTransparency(
+    const OdCmTransparency& transparency) { m_AM = transparency.m_AM; }
+  ~OdCmTransparency() {}
+  
+  OdCmTransparency& operator=(
+    const OdCmTransparency& transparency) { m_AM = transparency.m_AM; return *this; }
+
+  /** \details
+    Compares two /transparency objects/ as integer values and returns true when their values are equal, 
+    or false when their values are not equal.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_integer.html, Transparency Functionality as an Integer-value>
+  */
+    bool operator==(
+    const OdCmTransparency& transparency) const { return (m_AM == transparency.m_AM); }
+
+  /** \details
+    Compares two /transparency objects/ as integer values and returns true when their values are not equal, 
+    or false when their values are equal.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_integer.html, Transparency Functionality as an Integer-value>
+  */
+    bool operator!=(
+    const OdCmTransparency& transparency) const { return (m_AM != transparency.m_AM); }
+  
+  /** \details
+    Sets the /alpha value/ and switches the /transparency method/ to _kByAlpha_ for the /transparency object/.
+    
+    \param alpha [in]  Alpha as an integer value in range 0 to 255.
+
+    \remarks
+    An /alpha value/ defines the degree of transparency.
+    Alpha == 0 means totally clarity. Alpha == 255 means totally opaque.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_alpha.html, Transparency Functionality as an Alpha-value>
+  */
+  void setAlpha(
+    OdUInt8 alpha)
+  {
+    m_AM = ((OdUInt32)kByAlpha << 24) | alpha;
+  }
+
+  /** \details
+    Returns the /alpha value/ in range 0 to 255 of the /transparency object/.
+
+    \remarks
+    An /alpha value/ defines the degree of transparency.
+    Alpha == 0 means totally clarity. Alpha == 255 means totally opaque.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_alpha.html, Transparency Functionality as an Alpha-value>
+  */
+  OdUInt8 alpha() const
+  {
+    if (!isByAlpha())
+      return 255;
+    return OdUInt8(m_AM);
+  }
+
+  /** \details
+    Sets the /alpha value/ in percent and switches the /transparency method/ to _kByAlpha_ for the /transparency object/.
+    
+    \param alphaPercent [in]  Alpha as a double value in range 0.0 (=0) to 1.0 (=255).
+
+    \remarks
+    An /alpha value/ defines the degree of transparency.
+    Alpha == 0.0 means totally clarity. Alpha == 1.0 means totally opaque.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_alpha.html, Transparency Functionality as an Alpha-value>
+  */
+  void setAlphaPercent(
+    double alphaPercent)
+  {
+    if (alphaPercent < 0.0)
+      setAlpha(0);
+    else if (alphaPercent > 1.0)
+      setAlpha(0xFF);
+    else
+      setAlpha((OdUInt8)(alphaPercent * 255));
+  }
+
+  /** \details
+    Returns the /alpha value/ in range 0.0 to 1.0 of the /transparency object/.
+
+    \remarks
+    An /alpha value/ defines the degree of transparency.
+    Alpha == 0.0 means totally clarity. Alpha == 1.0 means totally opaque.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_alpha.html, Transparency Functionality as an Alpha-value>
+  */
+  double alphaPercent() const
+  {
+    return (double)alpha() / 255;
+  }
+
+
+  /** \details
+    Returns the /transparency method/ of the /transparency object/ as a value of the transparencyMethod enumeration.
+    
+    \remarks
+    The /transparency method/ can be a one of the following:
+    
+    <table>
+    Name        Value   Description
+    _kByLayer_    0       Transparency is specified by the /layer object/ to which the object is resided.
+    _kByBlock_    1       Transparency is specified by the /block object/ in which the object is contained.
+    _kByAlpha_    2       Transparency is specified by an Alpha-value.
+    </table>
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+  */
+  transparencyMethod method() const
+  {
+    return transparencyMethod(OdUInt8(m_AM >> 24));
+  }
+
+  /** \details
+    Sets the /transparency method/ for the /transparency object/.
+    
+    \param method [in]  Transparency method as the transparencyMethod enumeration.
+    
+    \remarks
+    The /transparency method/ can be a one of the following:
+    
+    <table>
+    Name        Value   Description
+    _kByLayer_    0       Transparency is specified by the /layer object/ to which the object is resided.
+    _kByBlock_    1       Transparency is specified by the /block object/ in which the object is contained.
+    _kByAlpha_    2       Transparency is specified by an Alpha-value.
+    </table>
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+  */
+  void setMethod(
+    transparencyMethod method)
+  {
+    m_AM = (OdUInt32)method << 24;
+  }
+
+  /** \details
+    Checks whether the /transparency method/ is byAlpha for the /transparency object/ and 
+    returns true if and only if the /transparency method/ is set to _kByAlpha_, otherwise it returns false.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+  */
+  bool isByAlpha() const { return (method() == kByAlpha); }
+
+  /** \details
+    Checks whether the /transparency method/ is byBlock for the /transparency object/ and 
+    returns true if and only if the /transparency method/ is set to _kByBlock_, otherwise it returns false.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+  */
+  bool isByBlock() const { return (method() == kByBlock); }
+  
+  /** \details
+    Checks whether the /transparency method/ is byLayer for the /transparency object/ and 
+    returns true if and only if the /transparency method/ is set to _kByLayer_, otherwise it returns false.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+  */
+  bool isByLayer() const { return (method() == kByLayer); }
+
+  /** \details
+    Checks whether the /transparency method/ is error value for the /transparency object/ and 
+    returns true if and only if the /transparency method/ is set to _kErrorValuer_, otherwise it returns false.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+  */
+  bool isInvalid() const { return (method() == kErrorValue); }
+
+  /** \details
+    Checks whether the /transparency method/ is byAlpha and object is totally clarity for the /transparency object/.
+    It returns true if and only if the /transparency method/ is set to _kByAlpha_ and Alpha == 0, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+
+    <link cm_transparency_alpha.html, Transparency Functionality as an Alpha-value>
+  */
+  bool isClear() const   { return (method() == kByAlpha) && (alpha() == 0);}
+  
+  /** \details
+    Checks whether the /transparency method/ is byAlpha and object is totally opaque for the /transparency object/.
+    It returns true if and only if the /transparency method/ is set to _kByAlpha_ and Alpha == 255, 
+    otherwise it returns false.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+
+    <link cm_transparency_alpha.html, Transparency Functionality as an Alpha-value>
+  */
+  bool isSolid() const   { return (method() == kByAlpha) && (alpha() == 255);}
+  
+
+  /** \details
+    Returns the packed 32-bits integer value that stores the /transparency method and transparency components/.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+
+    <link cm_transparency_integer.html, Transparency Functionality as an Integer-value>
+  */
+  OdUInt32 serializeOut() const { return m_AM; }
+
+  /** \details
+    Sets the /transparency method and transparency components/ as an integer value for the /transparency object/.
+
+    \param transparency [in]  A packed 32-bits integer value that specifies the /transparency method and transparency components/.
+
+    \sa
+    <link cm_transparency_sample.html, Example of Working with Transparency>
+
+    \sa
+    <link cm_transparency_method.html, Methods of the Transparency Definition>
+
+    <link cm_transparency_integer.html, Transparency Functionality as an Integer-value>
+  */
+  void serializeIn(
+    OdUInt32 transparency) { m_AM = transparency; }
+
+  /** \details
+    Reads the .dwg file format data of this object from the specified file.
+       
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+    
+  */
+  void dwgIn(
+    OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+  */
+  void dwgOut(
+    OdDbDwgFiler* pFiler) const;
+
+private: 
+  OdUInt32 m_AM;
+};
+
+#include "TD_PackPop.h"
+
+#endif //ODA_CMBASE_COLOR
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmEntityColorArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmEntityColorArray.h
new file mode 100755
index 0000000..742fd85
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmEntityColorArray.h
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef CMENTITYCOLORARRAY_INCLUDED
+#define CMENTITYCOLORARRAY_INCLUDED
+
+#include "OdArray.h"
+#include "CmColor.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdCmEntityColor objects.
+*/
+typedef OdArray<OdCmEntityColor, OdMemoryAllocator<OdCmEntityColor> > OdCmEntityColorArray;
+
+#endif // CMENTITYCOLORARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmTransparencyArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmTransparencyArray.h
new file mode 100755
index 0000000..cec644c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/CmTransparencyArray.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef CMTRANSPARENCYARRAY_INCLUDED
+#define CMTRANSPARENCYARRAY_INCLUDED
+
+#include "OdArray.h"
+#include "CmColor.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdCmTransparency objects.
+*/
+typedef OdArray<OdCmTransparency, OdMemoryAllocator<OdCmTransparency> > OdCmTransparencyArray;
+
+#endif // CMTRANSPARENCYARRAY_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ColorMapping.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ColorMapping.h
new file mode 100755
index 0000000..dec9b5e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ColorMapping.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef COLORMAPPING_DEFINED
+#define COLORMAPPING_DEFINED
+
+#include "OdPlatform.h"
+
+
+// Background is dark if  Red < 128 && Green < 128 && Blue < 128
+// Background is light if  Red > 127 || Green > 127 || Blue > 127
+inline bool odcmIsBackgroundLight(ODCOLORREF backgroung)
+{
+  return (ODGETRED(backgroung) >= 128 ||
+					ODGETGREEN(backgroung) >= 128 ||
+					ODGETBLUE(backgroung) >= 128);
+}
+
+//DD:EXPORT_ON
+
+// Returns palette for dark background
+FIRSTDLL_EXPORT const ODCOLORREF * odcmAcadDarkPalette();
+
+// Returns palette for light background
+FIRSTDLL_EXPORT const ODCOLORREF * odcmAcadLightPalette();
+
+// Returns palette for given background
+FIRSTDLL_EXPORT const ODCOLORREF * odcmAcadPalette(ODCOLORREF backgr);
+
+
+// Returns RGB for given color index
+// pPalette - palette to perform mapping
+FIRSTDLL_EXPORT ODCOLORREF odcmLookupRGB(int index, const ODCOLORREF* pPalette);
+
+// Returns color index for given RGB
+// pPalette - palette to perform mapping
+FIRSTDLL_EXPORT int odcmLookupACI(ODCOLORREF rgb, const ODCOLORREF* pPalette);
+
+//DD:EXPORT_OFF
+
+#endif	// COLORMAPPING_DEFINED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DDTypeLibReg.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DDTypeLibReg.h
new file mode 100755
index 0000000..b5f8cc4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DDTypeLibReg.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DDTYPELIBREG_INCLUDED_
+#define _DDTYPELIBREG_INCLUDED_
+
+#include <atlbase.h>
+#include <comdef.h>
+#include "OdString.h"
+
+
+long  FIRSTDLL_EXPORT ddTypeLibReg(REFGUID libGuid, LPCTSTR szTLibPathName, LPCTSTR szModuleName);
+long FIRSTDLL_EXPORT ddTypeLibUnreg(REFGUID libGuid);
+
+#endif //#ifndef _DDTYPELIBREG_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2LineAngularDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2LineAngularDimension.h
new file mode 100755
index 0000000..48afbb5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2LineAngularDimension.h
@@ -0,0 +1,147 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_2LINEANGULAR_DIMENSION_
+#define _OD_DB_2LINEANGULAR_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents 2-Line Angular Dimension entities in an OdDbDatabase instance.
+    
+    \remarks
+    A 2-Line Angular Dimension entity dimensions the angle defined by two lines.
+    
+    \sa
+    OdDb3PointAngularDimension
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDb2LineAngularDimension : public OdDbDimension
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDb2LineAngularDimension);
+  OdDb2LineAngularDimension();
+  
+  /** \details
+    Returns the point defining the location of dimension arc for this Dimension entity (DXF 16 as WCS).
+  */
+  OdGePoint3d arcPoint() const;
+
+  /** \details
+    Sets the point defining the location of dimension arc for this Dimension entity (DXF 16 as WCS).
+    \param arcPoint [in]  Arc point.
+  */
+  void setArcPoint(
+    const OdGePoint3d& arcPoint);
+  
+  /** \details
+    Returns the WCS start point of the first extension line of this Dimension entity (DXF 13).
+  */
+  OdGePoint3d xLine1Start() const;
+
+  /** \details
+    Sets the WCS start point of the first extension line of this Dimension entity (DXF 13).
+    \param xLine1Start [in]  Start point.
+  */
+  void setXLine1Start(
+    const OdGePoint3d& xLine1Start);
+  
+  /** \details
+    Returns the WCS end point of the first extension line of this Dimension entity (DXF 14).
+  */
+  OdGePoint3d xLine1End() const;
+
+  /** \details
+    Sets the WCS end point of the first extension line of this Dimension entity (DXF 14).
+    \param xLine1End [in]  End point.
+  */
+  void setXLine1End(
+    const OdGePoint3d& xLine1End);
+  
+  /** \details
+    Returns the WCS start point of the second extension line of this Dimension entity (DXF 15).
+  */
+  OdGePoint3d xLine2Start() const;
+
+  /** \details
+    Sets the WCS start point of the second extension line of this Dimension entity (DXF 15).
+    \param xLine2Start [in]  Start point.
+  */
+  void setXLine2Start(
+    const OdGePoint3d& xLine2Start);
+  
+  /** \details
+    Returns the WCS end point of the second extension line of this Dimension entity (DXF 10).
+  */
+  OdGePoint3d xLine2End() const;
+
+  /** \details
+    Sets the WCS end point of the second extension line of this Dimension entity (DXF 10).
+    \param xLine2End [in]  End point.
+  */
+  void setXLine2End(
+    const OdGePoint3d& xLine2End);
+
+  bool extArcOn() const;
+  void setExtArcOn(bool value);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDb2LineAngularDimension object pointers.
+*/
+typedef OdSmartPtr<OdDb2LineAngularDimension> OdDb2LineAngularDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dPolyline.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dPolyline.h
new file mode 100755
index 0000000..478b319
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dPolyline.h
@@ -0,0 +1,505 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_2DPOLYLINE_
+#define _OD_DB_2DPOLYLINE_
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+#include "DbObjectIterator.h"
+#include "Db2dVertex.h"
+
+class OdGePoint3d;
+class OdDbSequenceEnd;
+template <class T> class OdSmartPtr;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSequenceEnd object pointers.
+*/
+typedef OdSmartPtr<OdDbSequenceEnd> OdDbSequenceEndPtr;
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum Poly2dType
+  {
+    k2dSimplePoly      = 0, // Simple polyline.
+    k2dFitCurvePoly    = 1, // Curve fit (DXF 70, bit 0x04).
+    k2dQuadSplinePoly  = 2, // Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+    k2dCubicSplinePoly = 3  // Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+  };
+}
+/** \details
+    This class represents 2D Polyline entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDb2dPolyline: public OdDbCurve
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDb2dPolyline);
+
+  OdDb2dPolyline();
+
+  /** \details
+    Returns the type of this Polyline entity. 
+    
+    \remarks
+    polyType() returns one of the following:
+    
+    <table>
+    Name                        Value   Description
+    OdDb::k2dSimplePoly         0       Simple polyline.
+    OdDb::k2dFitCurvePoly       1       Curve fit (DXF 70, bit 0x04).
+    OdDb::k2dQuadSplinePoly     2       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+    OdDb::k2dCubicSplinePoly    3       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+    </table>
+  */
+  OdDb::Poly2dType polyType() const;
+
+  /** \details
+    Sets the type of this Polyline entity. 
+      
+    \param polyType [in]  Polyline type.
+    
+    \remarks
+    polyType must be one of the following:
+    
+    <table>
+    Name                        Value   Description
+    OdDb::k2dSimplePoly         0       Simple polyline.
+    OdDb::k2dFitCurvePoly       1       Curve fit (DXF 70, bit 0x04).
+    OdDb::k2dQuadSplinePoly     2       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+    OdDb::k2dCubicSplinePoly    3       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+    </table>
+  */
+  void setPolyType(
+    OdDb::Poly2dType polyType);
+
+  /** \details
+    Sets this Polyline entity closed (DXF 70, bit 0x01=1).
+  */
+  void makeClosed();
+
+  /** \details
+    Sets this Polyline entity open (DXF 70, bit 0x01=0).
+  */
+  void makeOpen();
+
+  /** \details
+    Returns the default segment start width for this Polyline entity (DXF 40).
+  */
+  double defaultStartWidth() const;
+
+  /** \details
+    Sets the default segment start width for this Polyline entity (DXF 40).
+    \param defaultStartWidth [in]  Default start width.
+  */
+  void setDefaultStartWidth(
+    double defaultStartWidth);
+
+  /** \details
+    Returns the default segment end width for this Polyline entity (DXF 41).
+  */
+  double defaultEndWidth() const;
+
+  /** \details
+    Sets the default segment end width for this Polyline entity (DXF 41).
+    \param defaultEndWidth [in]  Default end width.
+  */
+  void setDefaultEndWidth(
+    double defaultEndWidth);
+
+  /** \details
+    Returns the thickness of this entity (DXF 39).
+    
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  double thickness() const;
+  
+  /** \details
+    Sets the thickness of this entity (DXF 39).
+    \param thickness [in]  Thickness.
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  void setThickness(
+    double thickness);
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    \param normal [in]  Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+
+  /** \details
+    Returns the elevation of this entity in the OCS (DXF 30).
+    
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  double elevation() const;
+
+  /** \details
+    Sets the elevation of this entity in the OCS (DXF 30).
+
+    \param elevation [in]  Elevation.    
+
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  void setElevation(
+    double elevation);
+
+  /** \details
+    Returns true if and only if linetype generation is on for this Polyline entity (DXF 70, bit 0x80).
+      
+    \remarks
+    Linetype generation on indicates that the linetype pattern of this Polyline entity
+    is continuously generated around all vertices, rather than being restarted at each vertex.
+  */
+  bool isLinetypeGenerationOn() const;
+
+  /** \details
+    Sets the linetype generation on for this Polyline entity (DXF 70, bit 0x80).
+      
+    \remarks
+    Linetype generation on indicates that the linetype pattern of this Polyline entity
+    is continuously generated around all vertices, rather than being restarted at each vertex.
+  */
+  void setLinetypeGenerationOn();
+
+  /** \details
+    Sets the linetype generation off for this Polyline entity (DXF 70, bit 0x80).
+      
+    \remarks
+    Linetype generation off indicates that the linetype pattern of this Polyline entity is
+    restarted at each vertex, rather than being continuously generated around all vertices.
+  */
+  void setLinetypeGenerationOff();
+
+  /** \details
+    Removes all curve and spline fitting from this Polyline entity.
+  
+    \remarks
+    Removes all but the simple vertices.
+  */
+  void straighten();
+
+  /** \details
+    Appends the specified Vertex entity to this Polyline entity, and makes this Polyline entity its owner.
+    
+    \remarks
+    Returns the Object ID of the appended vertex.
+    
+    If this Polyline entity is database resident, the Vertex entity will be made database resident. 
+    
+    If this Polyline entity is not database resident, the Vertex entity will be made database resident
+    when this Polyline entity is made database resident.
+    
+    \note
+    If this Polyline is database resident, the Vertex entity must explicitly be closed when
+    appendVertex() returns.
+    
+    \param pVertex [in]  Pointer to the Vertex entity to be appended.
+  */
+  OdDbObjectId appendVertex(
+    OdDb2dVertex* pVertex);
+
+  /** \details
+    Inserts the specified Vertex entity into this Polyline entity
+    after the specified vertex, and makes this Polyline its owner.
+    
+    \remarks
+    Returns the Object ID of the newly inserted vertex.
+    
+    The Vertex will be made database resident. 
+    
+    If this Polyline entity is not database resident, the vertex will be made database resident
+    when the polyline is made database resident.
+    
+    To insert the specified Vertex at the start of this Polyline, use a null indexVertexId.
+    
+    \note
+    The Vertex entity must explicitly be closed when insertertex() returns.
+
+    \param indexVertId [in]  Object ID of vertex after which to insert the specified vertex.
+    \param pVertex [in]  Pointer to the Vertex entity to be inserted.
+
+  */
+  OdDbObjectId insertVertexAt(
+    const OdDbObjectId& indexVertId, 
+    OdDb2dVertex* pVertex);
+
+  /** \param pIndexVert [in]  Pointer to vertex after which to insert the specified vertex.
+  */
+  OdDbObjectId insertVertexAt(
+    const OdDb2dVertex* pIndexVert, 
+    OdDb2dVertex* pVertex);
+
+  /** \details
+    Opens a vertex owned by this Polyline entity.
+
+    \param vertId [in]  Object ID of vertex to be opened.
+    \param mode [in]  Mode in which to open the vertex.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+
+    \remarks
+    Returns a SmartPointer to the opened object if successful, otherwise a null SmartPointer.
+  */
+  OdDb2dVertexPtr openVertex(
+    OdDbObjectId vertId, 
+    OdDb::OpenMode mode, 
+    bool openErasedOne = false);
+
+  /** \details
+    Opens the OdDbSequenceEnd entity for this Polyline entity.
+
+    \param mode [in]  Mode in which to open the OdDbSequenceEnd entity.
+
+    \remarks
+    Returns a SmartPointer to the newly opened OdDbSequenceEnd, or a null SmartPointer.
+
+    \note
+    This method is provided solely for applications that store XData on
+    OdDbSequenceEnd entities; this is not recommended. 
+  */
+  OdDbSequenceEndPtr openSequenceEnd(
+    OdDb::OpenMode mode);
+
+  /** \details
+    Returns an Iterator that can be used to traverse the vertices owned 
+    by this Polyline entity.
+  */
+  OdDbObjectIteratorPtr vertexIterator() const;
+
+  /** \details
+    Returns the WCS position of the specified Vertex entity.
+    
+    \param vertex [in]  Vertex.
+  */
+  OdGePoint3d vertexPosition(
+    const OdDb2dVertex& vertex) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  virtual void subClose();
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+  virtual OdResult explodeGeometry(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const ODRX_OVERRIDE;
+
+  virtual bool isPlanar() const;
+
+  virtual OdResult getArea(
+    double& area) const;
+
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+
+  // OdDbCurveMethods
+
+  /** \details
+  Returns true if 2D-Polyline is closed or false otherwise.
+  */
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+  virtual OdResult getStartParam(
+    double& startParam) const;
+
+  virtual OdResult getEndParam (
+    double& endParam) const;
+
+  virtual OdResult getStartPoint(
+    OdGePoint3d& startPoint) const;
+
+  virtual OdResult getEndPoint(
+    OdGePoint3d& endPoint) const;
+
+  virtual OdResult getPointAtParam(
+    double param, 
+    OdGePoint3d& pointOnCurve) const;
+
+  virtual OdResult getParamAtPoint(
+    const OdGePoint3d& pointOnCurve, 
+    double& param) const;
+
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+  virtual OdResult getFirstDeriv (
+    double param,
+    OdGeVector3d& firstDeriv) const;
+
+  virtual OdResult getSecondDeriv (
+    double param,
+    OdGeVector3d& secondDeriv) const;
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  /** \details
+  Convert 2D-Polyline to the specified type.
+
+  \param newVal [in]  Polyline type.
+    
+  \remarks
+  newVal must be one of the following:
+
+  <table>
+  Name                        Value   Description
+  OdDb::k2dSimplePoly         0       Simple polyline.
+  OdDb::k2dFitCurvePoly       1       Curve fit (DXF 70, bit 0x04).
+  OdDb::k2dQuadSplinePoly     2       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+  OdDb::k2dCubicSplinePoly    3       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+  </table>
+  */
+  OdResult convertToPolyType(OdDb::Poly2dType newVal);
+  
+  /** \details
+  Convert polyline to a smooth curve consisting of pairs of arcs in each pair of vertices.
+    
+  \returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult curveFit();
+  
+  /** \details
+  Transforms all simple vertices to control vertices and creates a new spline-fit vertices based
+  on a control vertices, through which the polyline will be drawn.
+    
+  \returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult splineFit();
+  
+  /** \details
+  Transforms all simple vertices to control vertices and creates a new spline-fit vertices based
+  on a control vertices, through which the polyline will be drawn.
+
+  \param splineType [in]  Spline-Fit Polyline type.
+
+  \param splineSegs [in]  Number of Spline-Fit segments.
+  
+  \returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult splineFit(OdDb::Poly2dType splineType, OdInt16 splineSegs);
+
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                        OdGsMarker gsMark, 
+                                        const OdGePoint3d& ,
+                                        const OdGeMatrix3d& , 
+                                        OdDbFullSubentPathArray& subentPaths, 
+                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                        OdGsMarkerArray& gsMarkers) const;
+
+  OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& path) const;
+
+  /** \details
+  Returns the entity coordinate system matrix.
+  */
+  OdGeMatrix3d getEcs( ) const;
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+  
+  /** \details
+  Reverses the Polyline so that the first vertex become the last vertex of a Polyline 
+  and the last vertex become the first vertex.
+    
+  \returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult reverseCurve();
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDb2dPolyline object pointers.
+*/
+typedef OdSmartPtr<OdDb2dPolyline> OdDb2dPolylinePtr;
+
+
+/*
+
+inline void OdDb2dPolyline::extend(double)
+{
+  return OdeNotApplicable;
+}
+*/
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dVertex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dVertex.h
new file mode 100755
index 0000000..fb3343a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db2dVertex.h
@@ -0,0 +1,256 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_2DVERTEX_
+#define _OD_DB_2DVERTEX_
+
+#include "TD_PackPush.h"
+
+#include "DbVertex.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum Vertex2dType
+  {
+    k2dVertex          = 0,  // Standard vertex
+    k2dSplineCtlVertex = 1,  // Spline-fit or curve-fit control point
+    k2dSplineFitVertex = 2,  // Spline-fit generated vertex
+    k2dCurveFitVertex  = 3   // Curve-fit generated vertex
+  };
+}
+
+/** \details
+    This class represents OdDb2Polyline vertices in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDb2dVertex: public OdDbVertex
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDb2dVertex);
+
+  /** \remarks
+    Newly created vertices are of type OdDb::k2dVertex.
+  */
+  OdDb2dVertex();
+
+  /** \details
+    Returns the type of this Vertex entity.  
+    
+    \remarks
+    vertexType() returns one of the following:
+
+    <table>
+    Name                        Value   DXF 70  Description    
+    OdDb::k2dVertex             0       0x00    Standard vertex.
+    OdDb::k2dSplineCtlVertex    1       0x10    Spline-fit or curve-fit control point.
+    OdDb::k2dSplineFitVertex    2       0x08    Spline-fit generated vertex.
+    OdDb::k2dCurveFitVertex     3       0x01    Curve-fit generated vertex.
+    </table>
+  */
+  OdDb::Vertex2dType vertexType() const;
+
+  /** \details
+    Sets the type of this Vertex entity.
+
+    \param vertexType [in]  Vertex type.
+
+    \remarks
+    vertexType type must be one of the following:
+
+    <table>
+    Name                        Value   DXF 70  Description    
+    OdDb::k2dVertex             0       0x00    Standard vertex.
+    OdDb::k2dSplineCtlVertex    1       0x10    Spline-fit or curve-fit control point.
+    OdDb::k2dSplineFitVertex    2       0x08    Spline-fit generated vertex.
+    OdDb::k2dCurveFitVertex     3       0x01    Curve-fit generated vertex.
+    </table>
+  */
+  void setVertexType(
+    OdDb::Vertex2dType vertexType);
+
+  /** \details
+    Returns the OdDb2dPolyline OCS position of this entity (DXF 10).
+
+    \remarks
+    Each OdDb2dPolyline is described a series of OCS OdDb2dVertices and an elevation.
+    
+    While Z coordinates are set and retrieved by setPosition() and position() respectively,
+    they are ignored by the Polyline.
+    
+    The elevation of the Polyline can be changed only with OdDb2dPolyline::setElevation(). 
+      
+  */
+  OdGePoint3d position() const;
+
+  /** \details
+    Sets the OdDb2dPolyline OCS position of this entity (DXF 10).
+    \param position [in]  Position.
+    
+    \remarks
+    Each OdDb2dPolyline is described a series of OCS OdDb2dVertices and an elevation.
+    
+    While Z coordinates are set and retrieved by setPosition() and position() respectively,
+    they are ignored by the Polyline.
+    
+    The elevation of the Polyline can be changed only with OdDb2dPolyline::setElevation(). 
+  */
+  void setPosition(
+    const OdGePoint3d& position);
+
+  /** \details
+    Returns the starting width of the segment following this Vertex entity (DXF 40).
+  */
+  double startWidth() const;
+
+  /** \details
+    Sets the starting width of the segment following this Vertex entity (DXF 40).
+
+    \param startWidth [in]  Starting width.
+  */
+  void setStartWidth(
+    double startWidth);
+
+  /** \details
+    Returns the ending width of the segment following this Vertex entity (DXF 41).
+  */
+  double endWidth() const;
+
+  /** \details
+    Sets the ending width of the segment following this Vertex entity (DXF 41).
+   
+    \param endWidth [in]  Ending width.
+  */
+  void setEndWidth(
+    double endWidth);
+
+  /** \details
+    Returns the bulge of the segment following this Vertex entity (DXF 42).
+    
+    \remarks
+    Bulge is the tangent of 1/4 the included angle of the arc segment, measured counterclockwise.
+  */
+  double bulge() const;
+
+  /** \details
+    Sets the bulge of the arc segment following this Vertex entity (DXF 42).
+
+    \param bulge [in]  Bulge.
+    
+    \remarks
+    Bulge is the tangent of 1/4 the included angle of the arc segment, measured counterclockwise.
+  */
+  void setBulge(
+    double bulge);
+
+  /** \details
+    Returns true if and only if the curve fit tangent direction is used by this Vertex entity.(DXF 70, bit 0x02).
+  */
+  bool isTangentUsed() const;
+
+  /** \details
+    Specifies the curve fit tangent direction is to be used by this Vertex entity.(DXF 70, bit 0x02).
+  */
+  void useTangent();
+
+  /** \details
+    Specifies the curve fit tangent direction is not to be used by this Vertex entity.(DXF 70, bit 0x02).
+  */
+  void ignoreTangent();
+
+  /** \details
+    Returns the curve fit tangent direction for this Vertex (DXF 50).
+
+    \remarks
+    This is the angle between the OdDb2dPolyline OCS X-axis and the tangent direction.
+
+    \note
+    All angles are expressed in radians.
+  */
+  double tangent() const;
+
+  /** \details
+    Sets the curve fit tangent direction for this Vertex (DXF 50).
+
+    \param tangent [in]  Tangent angle.
+    
+    \remarks
+    This is the angle between the OdDb2dPolyline OCS X-axis and the tangent direction.
+
+    \note
+    All angles are expressed in radians.
+  */
+  void setTangent(
+    double tangent);
+
+  /** \details
+    Returns the *vertex identifier* of this Vertex entity.
+  */
+  OdInt32 vertexIdentifier() const;
+
+  /** \details
+    Sets the *vertex identifier* of this Vertex entity.
+
+    \param suggestedId [in]  Vertex identifier.
+  */
+  void setVertexIdentifier(
+    OdInt32 suggestedId);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDb2dVertex object pointers.
+*/
+typedef OdSmartPtr<OdDb2dVertex> OdDb2dVertexPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3PointAngularDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3PointAngularDimension.h
new file mode 100755
index 0000000..3c88dbb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3PointAngularDimension.h
@@ -0,0 +1,160 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_3POINTANGULAR_DIMENSION_
+#define _OD_DB_3POINTANGULAR_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents 3-Point Angular Dimension entities in an OdDbDatabase instance.
+
+    \remarks
+    A 3-Point Angular Dimension entity dimensions the angle defined by three points.
+    
+    \sa
+    OdDb2LineAngularDimension
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDb3PointAngularDimension : public OdDbDimension
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDb3PointAngularDimension);
+
+  OdDb3PointAngularDimension();
+  
+  /** \details
+    Returns the point defining the location of dimension arc for this Dimension entity (DXF 16 as WCS).
+  */
+  OdGePoint3d arcPoint() const;
+
+  /** \details
+    Sets the point defining the location of dimension arc for this Dimension entity (DXF 16 as WCS).
+    \param arcPoint [in]  Arc point.
+  */
+  void setArcPoint(
+    const OdGePoint3d& arcPoint);
+  
+  /** \details
+    Returns the WCS start point of the first extension line of this Dimension entity (DXF 13).
+      
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  OdGePoint3d xLine1Point() const;
+
+  /** \details
+    Sets the WCS start point of the first extension line of this Dimension entity (DXF 13).
+  
+    \param xLine1Point [in]  Start point.
+        
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  void setXLine1Point(
+    const OdGePoint3d& xLine1Point);
+
+  /** \details
+    Returns the WCS start point of the second extension line of this Dimension entity (DXF 14).
+      
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  OdGePoint3d xLine2Point() const;
+
+  /** \details
+    Sets the WCS start point of the second extension line of this Dimension entity (DXF 14).
+  
+    \param xLine2Point [in]  Start point.
+        
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  void setXLine2Point(
+    const OdGePoint3d& xLine2Point);
+
+  
+  /** \details
+    Returns the WCS vertex of the angle being dimensioned by this Dimension entity (DXF 15).
+    \remarks
+    The vertex of the angle being dimensioned is the center of the dimension arc.
+  */
+  OdGePoint3d centerPoint() const;
+
+  // Angular dimension extension arc for quadrant
+  bool extArcOn() const;
+  void setExtArcOn(bool value);
+
+  /** \details
+    Sets the WCS vertex of the angle being dimensioned by this Dimension entity (DXF 15).
+    \param centerPoint [in]  Center point.
+    \remarks
+    The vertex of the angle being dimensioned is the center of the dimension arc.
+  */
+  void setCenterPoint(
+    const OdGePoint3d& centerPoint);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDb3PointAngularDimension object pointers.
+*/
+typedef OdSmartPtr<OdDb3PointAngularDimension> OdDb3PointAngularDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolyline.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolyline.h
new file mode 100755
index 0000000..b9434ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolyline.h
@@ -0,0 +1,377 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_3D_POLYLINE_
+#define _OD_DB_3D_POLYLINE_
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+#include "DbObjectIterator.h"
+
+class OdDb3dPolylineVertex;
+class OdDbSequenceEnd;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDb3dPolylineVertex object pointers.
+*/
+typedef OdSmartPtr<OdDb3dPolylineVertex> OdDb3dPolylineVertexPtr;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSequenceEnd object pointers.
+*/
+typedef OdSmartPtr<OdDbSequenceEnd> OdDbSequenceEndPtr;
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum Poly3dType
+  {
+    k3dSimplePoly      = 0, // Simple polyline.
+    k3dQuadSplinePoly  = 1, // Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+    k3dCubicSplinePoly = 2  // Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+  };
+}
+
+/** \details
+    This class represents 3D Polyline entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDb3dPolyline: public OdDbCurve
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDb3dPolyline);
+
+  OdDb3dPolyline();
+
+  /** \details
+    Sets this Polyline entity closed (DXF 70, bit 0x01=1).
+  */
+  void makeClosed();
+
+  /** \details
+    Sets this Polyline entity open (DXF 70, bit 0x01=0).
+  */
+  void makeOpen();
+
+  /** \details
+    Returns the type of this Polyline entity. 
+    
+    \remarks
+    polyType() returns one of the following:
+    
+    <table>
+    Name                        Value   Description
+    OdDb::k3dSimplePoly         0       Simple polyline.
+    OdDb::k3dQuadSplinePoly     1       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+    OdDb::k3dCubicSplinePoly    2       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+    </table>
+  */
+  OdDb::Poly3dType polyType() const;
+
+  /** \details
+    Sets the type of this Polyline entity. 
+
+    \param polyType [in]  Polyline type.
+   
+    \remarks
+    polyType() returns one of the following:
+    
+    <table>
+    Name                        Value   Description
+    OdDb::k3dSimplePoly         0       Simple polyline.
+    OdDb::k3dQuadSplinePoly     1       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+    OdDb::k3dCubicSplinePoly    2       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+    </table>
+  */
+  void setPolyType(
+    OdDb::Poly3dType polyType);
+
+  /** \details
+    Removes all spline fitting from this Polyline entity.
+  
+    \remarks
+    Removes all but the simple vertices.
+  */
+  void straighten();
+
+  /** \details
+    Appends the specified Vertex entity to this Polyline entity, and makes this Polyline entity its owner.
+    
+    \remarks
+    Returns the Object ID of the appended vertex.
+    
+    If this Polyline entity is database resident, the Vertex entity will be made database resident. 
+    
+    If this Polyline entity is not database resident, the Vertex entity will be made database resident
+    when this Polyline entity is made database resident.
+    
+    \note
+    If this Polyline is database resident, the Vertex entity must explicitly be closed when
+    appendVertex() returns.
+    
+    \param pVertex [in]  Pointer to the Vertex entity to be appended.
+  */
+  OdDbObjectId appendVertex(
+    OdDb3dPolylineVertex* pVertex);
+
+  /** \details
+    Inserts the specified Vertex entity into this Polyline entity
+    after the specified vertex, and makes this Polyline its owner.
+    
+    \remarks
+    Returns the Object ID of the newly inserted vertex.
+    
+    The Vertex will be made database resident. 
+    
+    If this Polyline entity is not database resident, the vertex will be made database resident
+    when the polyline is made database resident.
+    
+    To insert the specified Vertex at the start of this Polyline, use a null indexVertexId.
+    
+    \note
+    The Vertex entity must explicitly be closed when insertertex() returns.
+
+    \param indexVertId [in]  Object ID of vertex after which to insert the specified vertex.
+    \param pVertex [in]  Pointer to the Vertex entity to be inserted.
+
+  */
+  OdDbObjectId insertVertexAt(
+    const OdDbObjectId& indexVertId, 
+    OdDb3dPolylineVertex* pVertex);
+
+  /** \param pIndexVert [in]  Pointer to vertex after which to insert the specified vertex.
+  */
+  OdDbObjectId insertVertexAt(
+    const OdDb3dPolylineVertex* pIndexVert, 
+    OdDb3dPolylineVertex* pVertex);
+
+  /** \details
+    Opens a vertex owned by this Polyline entity.
+
+    \param vertId [in]  Object ID of vertex to be opened.
+    \param mode [in]  Mode in which to open the vertex.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+
+    \remarks
+    Returns a SmartPointer to the opened object if successful, otherwise a null SmartPointer.
+  */
+  OdDb3dPolylineVertexPtr openVertex(
+    OdDbObjectId vertId, 
+    OdDb::OpenMode mode, 
+    bool openErasedOne = false);
+
+  /** \details
+    Opens the OdDbSequenceEnd entity for this Polyline entity.
+
+    \param mode [in]  Mode in which to open the OdDbSequenceEnd entity.
+
+    \remarks
+    Returns a SmartPointer to the newly opened OdDbSequenceEnd, or a null SmartPointer.
+
+    \note
+    This method is provided solely for applications that store XData on
+    OdDbSequenceEnd entities; this is not recommended. 
+  */
+  OdDbSequenceEndPtr openSequenceEnd(
+    OdDb::OpenMode mode);
+
+  /** \details
+    Returns a SmartPointer to an iterator that can be used to traverse the vertices owned 
+    by this Polyline entity.
+  */
+  OdDbObjectIteratorPtr vertexIterator() const;
+
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  void subClose();
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult explodeGeometry(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual bool isPlanar() const;
+
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+      OdDb::Planarity& planarity) const;
+
+
+  /* OdDbCurveMethods */
+
+  /** \details
+  Returns true if 3D-Polyline is closed or false otherwise.
+  */
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+  virtual OdResult getStartParam(
+    double& startParam) const;
+
+  virtual OdResult getEndParam(
+    double& endParam) const;
+
+  virtual OdResult getStartPoint(
+    OdGePoint3d& startPoint) const;
+
+  virtual OdResult getEndPoint(
+    OdGePoint3d& endPoint) const;
+
+  virtual OdResult getPointAtParam(
+    double param, 
+    OdGePoint3d& pointOnCurve) const;
+
+  virtual OdResult getParamAtPoint(
+    const OdGePoint3d& pointOnCurve, 
+    double& param) const;
+
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+  virtual OdResult getFirstDeriv (
+    double param,
+    OdGeVector3d& firstDeriv) const;
+
+  virtual OdResult getSecondDeriv (
+    double param,
+    OdGeVector3d& secondDeriv) const;
+
+  virtual OdResult getArea(
+    double& area) const;
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+
+  /** \details
+  Convert 3D-Polyline to the specified type.
+
+  \param newVal [in]  Polyline type.
+    
+  \remarks
+  newVal must be one of the following:
+
+  <table>
+    Name                        Value   Description
+    OdDb::k3dSimplePoly         0       Simple polyline.
+    OdDb::k3dQuadSplinePoly     1       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
+    OdDb::k3dCubicSplinePoly    2       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
+    </table>
+  */
+  OdResult convertToPolyType(OdDb::Poly3dType newVal); 
+
+  /** \details
+  Transforms all simple vertices to control vertices and creates a new spline-fit vertices based
+  on a control vertices, through which the polyline will be drawn.
+  
+  \returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult splineFit();
+
+  /** \details
+  Transforms all simple vertices to control vertices and creates a new spline-fit vertices based
+  on a control vertices, through which the polyline will be drawn.
+
+  \param splineType [in]  Spline-Fit Polyline type.
+
+  \param splineSegs [in]  Number of Spline-Fit segments.
+  
+  \returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult splineFit(OdDb::Poly3dType splineType, OdInt16 splineSegs);
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                        OdGsMarker gsMark, 
+                                        const OdGePoint3d& ,
+                                        const OdGeMatrix3d& , 
+                                        OdDbFullSubentPathArray& subentPaths, 
+                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                        OdGsMarkerArray& gsMarkers) const;
+
+  OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& path) const;
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+  
+  /** \details
+  Reverses the Polyline so that the first vertex become the last vertex of a Polyline 
+  and the last vertex become the first vertex.
+    
+  \returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult reverseCurve();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDb3dPolyline object pointers.
+*/
+typedef OdSmartPtr<OdDb3dPolyline> OdDb3dPolylinePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolylineVertex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolylineVertex.h
new file mode 100755
index 0000000..a0bf3c1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dPolylineVertex.h
@@ -0,0 +1,120 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_3DPOLYLINE_VERTEX_
+#define _OD_DB_3DPOLYLINE_VERTEX_
+
+#include "TD_PackPush.h"
+
+#include "DbVertex.h"
+
+/** \details
+    This class represents OdDb3dPolyline vertices in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDb3dPolylineVertex : public OdDbVertex
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDb3dPolylineVertex);
+
+ /** \remarks
+    Newly created vertices are of type OdDb::k3dSimpleVertex.
+ */
+  OdDb3dPolylineVertex();
+
+  /** \details
+    Returns the type of this Vertex entity.  
+    
+    \remarks
+    vertexType() returns one of the following:
+
+    <table>
+    Name                     Value   DXF 70   Description
+    OdDb::k3dSimpleVertex    0       0x40     Standard vertex.
+    OdDb::k3dControlVertex   1       0x10     Spline-fit or curve-fit control point.
+    OdDb::k3dFitVertex       2       0x08     Spline-fit or curve-fit generated vertex.
+    </table>
+  */
+  OdDb::Vertex3dType vertexType() const;
+
+  /** \details
+    Sets the type of this Vertex entity.
+
+    \param vertexType [in]  Vertex type.
+
+    \remarks
+    vertexType type must be one of the following:
+
+    <table>
+    Name                     Value   DXF 70   Description
+    OdDb::k3dSimpleVertex    0       0x40     Standard vertex.
+    OdDb::k3dControlVertex   1       0x10     Spline-fit or curve-fit control point.
+    OdDb::k3dFitVertex       2       0x08     Spline-fit or curve-fit generated vertex.
+    </table>
+  */
+  void setVertexType(
+    OdDb::Vertex3dType vertexType);
+
+  /** \details
+    Returns the WCS position of this entity (DXF 10).
+  */
+  OdGePoint3d position() const;
+
+  /** \details
+    Sets the WCS position of this entity (DXF 10).
+    \param position [in]  Position.
+  */
+  void setPosition(
+    const OdGePoint3d& position);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDb3dPolylineVertex object pointers.
+*/
+typedef OdSmartPtr<OdDb3dPolylineVertex> OdDb3dPolylineVertexPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dSolid.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dSolid.h
new file mode 100755
index 0000000..03e116b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Db3dSolid.h
@@ -0,0 +1,1261 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEOMENT_DBSOL3D_H
+#define GEOMENT_DBSOL3D_H 
+
+#include "TD_PackPush.h"
+#include "ModelerDefs.h"
+#include "Db3dSolid.h"
+#include "DbRegion.h"
+#include "DbSubentId.h"
+
+class OdDbSubentId;
+class OdDbCurve;
+class OdBrBrep;
+class OdModelerGeometry;
+class OdDbLoftOptions;
+class OdDbSweepOptions;
+class OdDbRevolveOptions;
+class OdDbSurface;
+
+#include "DbEntity.h"
+#include "OdArray.h"
+
+
+
+class OdDb3dSolid;
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDb3dSolid object pointers.
+*/
+typedef OdSmartPtr<OdDb3dSolid> OdDb3dSolidPtr;
+
+/** \details
+This template class is a specialization of the OdArray class for OdDb3dSolid object pointer arrays.
+*/
+typedef OdArray<OdDb3dSolidPtr> OdDb3dSolidPtrArray;
+
+
+/** \details
+    This class represents 3D Solid entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    \remarks
+    An OdDb3dSolid entity is a wrapper for an ACIS model that represents
+    the geometry of the OdDb3dSolid entity.
+    
+    <group OdDb_Classes> 
+
+*/
+class TOOLKIT_EXPORT OdDb3dSolid : public OdDbEntity
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDb3dSolid);
+  
+  OdDb3dSolid();
+  
+  /** \details
+    Returns true if and only if there is no ACIS model associated with this entity. 
+  */
+  bool isNull() const;
+
+  /** \details
+    Writes the ACIS data of this entity to the specified StreamBuf object.
+
+    \param pStreamBuf [in] Pointer to the StreamBuf object to which the data is to be written.    
+    \param typeVer    [in] Type and version of the ACIS data to write.
+    
+    \returns Returns eOk if successful or an appropriate error code if not. 
+  */
+  OdResult acisOut(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer typeVer = kAfTypeVerAny);
+
+  /** \details
+    Reads the ACIS data for this entity from the specified StreamBuf object.
+
+    \param pStreamBuf [in] Pointer to the StreamBuf object from which the data is to be read.    
+    \param pTypeVer   [in] Receives the type and version of the ACIS data read.
+    
+    \returns Returns eOk if successful or an appropriate error code if not. 
+  */
+  OdResult acisIn(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer *pTypeVer = 0);
+
+  /** \details
+    Returns the boundary representation of the 3D solid entity.
+    \param brep [out] Receives the boundary representation.
+  */
+  void brep(
+    OdBrBrep& brep);
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /** \details
+    Creates a WCS aligned solid box centered about the world origin. 
+    
+    \param xLen [in] Dimension along the WCS X-axis.
+    \param yLen [in] Dimension along the WCS Y-axis. 
+    \param zLen [in] Dimension along the WCS Z-axis. 
+
+    \remarks
+    The following constraints are applied:
+    
+* xLen >= 1e-6.
+* yLen >= 1e-6.
+* zLen >= 1e-6.
+
+  */
+  virtual void createBox(
+    double xLen, 
+    double yLen, 
+    double zLen);
+    
+  /** \details
+    Creates a WCS aligned frustum centered about the world origin. 
+    
+    \param height     [in] Dimension along the WCS Z-axis.
+    \param xRadius    [in] Base radius along the WCS X-axis. 
+    \param yRadius    [in] Base radius along the WCS Y-axis.
+    \param topXRadius [in] Top radius along the WCS X-axis. 
+
+    \remarks 
+    The function can generate a frustum that is any one of the following:
+    
+* A circular cylinder (when xRadius is equal to topXRadius and xRadius and yRadius are the same)
+* An elliptical cylinder (when xRadius is equal to topXRadius and xRadius and yRadius are not the same)
+* A circular cone (when topXRadius is zero and xRadius and yRadius are the same)
+* An elliptical cone (when topXRadius is zero and xRadius and yRadius are not the same)
+* A truncated circular cone (when topXRadius is not zero but not equal to xRadius and xRadius and yRadius are the same)
+* A truncated elliptical cone (when topXRadius is not zero  but not equal to xRadius and xRadius and yRadius are not the same)
+
+    The following constraints are applied:
+    
+* height >= 1e-6.
+* xRadius >= 1e-6.
+* yRadius >= 1e-6.
+* topXRadius >= 1e-6. 
+  */
+  virtual void createFrustum(
+    double height, 
+    double xRadius,
+    double yRadius, 
+    double topXRadius);
+    
+  /** \details
+    Creates a sphere centered about the world origin with the specified radius. 
+    
+    \param radius [in] Radius for the sphere.
+
+    \remarks
+    The following constraints are applied:
+    
+* radius >= 1e-6.
+
+  */
+  virtual void createSphere(
+    double radius);
+
+  /** \details
+    Creates a WCS aligned torus centered about the world origin
+    and the Z-axis as its axis of rotation. 
+    
+    \param majorRadius [in] Radius of the torus
+    \param minorRadius [in] Radius of the tube.
+
+    \remarks
+	majorRadius in contrast to minorRadius can't be equal to zero. 
+    If majorRadius is smaller than zero, minorRadius must be larger than the absolute value of majorRadius. 
+	
+    The following constraints are applied:
+    
+* minorRadius >= 1e-6.
+* |majorRadius| >= 1e-6
+* if majorRadius < 0, then minorRadius > |majorRadius| + 1e-6
+  */
+  virtual void createTorus(
+    double majorRadius, 
+    double minorRadius);
+    
+  /** \details
+    Creates a WCS aligned wedge centered about the world origin. 
+    
+    \param xLen [in] Dimension along the WCS X-axis.
+    \param yLen [in] Dimension along the WCS Y-axis. 
+    \param zLen [in] Dimension along the WCS Z-axis. 
+
+    \returns Returns eOk if successful or an appropriate error code if not. 
+    
+    \remarks
+    The inclined face is defined by the points 
+    
+              ( xLen/2, -yLen/2, -zLen/2)
+              (-xLen/2, -yLen/2,  zLen/2)  
+              ( xLen/2,  yLen/2, -zLen/2)
+              (-xLen/2, +yLen/2,  zLen/2)  
+    
+    The following constraints are applied:
+    
+* xLen >= 1e-6.
+* yLen >= 1e-6.
+* zLen >= 1e-6.
+  */
+  virtual void createWedge(
+    double xLen, 
+    double yLen, 
+    double zLen);
+
+  /** \details
+    Creates a solid by extruding the specified region to the specified height and with specified taper angle.
+   
+    \param pRegion      [in] Pointer to the region to be extruded.
+    \param height       [in] Height of the extrusion.
+    \param taperAngle   [in] Taper angle in radians.
+
+    \returns Returns eOk if extrusion is successful or an appropriate error code if not. 
+
+    \remarks
+    The extrusion direction is along the normal of the region. The height value may be negative. pRegion should not have self-intersections.
+    Creates a solid by extruding pRegion, a distance of height with a taper angle of taper. The extrusion direction is along the normal of the region if the height is positive. 
+    
+    The following constraints are applied:
+    
+* |height| >= 1e-6.
+* |taperAngle| < OdaPI2 - 1e-6.
+    
+    Taper should be between half pi and -half pi. If the absolute value of taper < 1e-6, then the taper angle is set to 0. 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult extrude(
+    const OdDbRegion* pRegion, 
+    double height, 
+    double taperAngle = 0.0);
+
+  /** \details
+    Creates a solid by revolving the specified region around the axis. Axis is specified with a point and vector. Revolution can be produced with an angle.
+  
+    \param pRegion            [in] Pointer to the region to be revolved.
+    \param axisPoint          [in] Point on the axis of revolution.
+    \param axisDir            [in] Vector defining the axis of revolution.
+    \param angleOfRevolution  [in] Angle of revolution in radians.
+    
+    \returns Returns eOk if creating a solid by revolving is successful or an appropriate error code if not. 
+
+    \remarks
+    The axis of revolution is projected onto the plane of the region, parallel to its normal. 
+    Revolution axis must be valid for a rotation of region: axisDir is not perpendicular to the plane of a region, axisDir does not pass through a region, etc. 
+    
+    The following constraints are applied:
+* The projected axis of revolution cannot intersect the region. 
+* angleOfRevolution >= 1e-6
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult revolve(
+    const OdDbRegion* pRegion,
+    const OdGePoint3d& axisPoint, 
+    const OdGeVector3d& axisDir,
+    double angleOfRevolution);
+
+  /** \details
+    Performs a Boolean operation between this solid and another solid object. 
+
+    \param operation [in] Type of Boolean operation.	
+    \param solid     [out] Pointer to other solid object which also will contain the result of the Boolean operation.
+	
+	  \returns Returns eOk if Boolean operation is successful or an appropriate error code if not. If solid is null, eInvalidInput is returned.
+	
+    \remarks 
+    Possible operation types are: 
+* kBoolUnite - unites two solids into one
+* kBoolIntersect - returns the intersection of two solids
+* kBoolSubtract - subtracts the second solid from the first one
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status 
+    for other modelers. 
+  */
+    virtual OdResult booleanOper(OdDb::BoolOperType operation, OdDb3dSolid* solid);
+
+  /** \details
+    Creates a solid by extruding a region along a path curve. 
+	
+    \param region [in] A pointer to a region object for extruding from
+    \param path   [in] A pointer to a curve object to extrude along. Must be one of the following: 
+* Line
+* OdDbArc
+* OdDbCircle
+* Ellipse
+* OdDbSpline
+* OdDb2dPolyline
+* non-spline fit OdDb3dPolyline
+
+    \param taperAngle [in] Extrusion taper angle in radians. Default value is 0.0. 
+    Value must be between 0.5 pi and -0.5 pi. 
+    If the path represented by the OdDbCurve object is closed, the taper angle parameter is ignored.
+
+	  \returns Returns eOk if extruding operation is successful or an appropriate error code if not. If solid is null, eInvalidInput is returned.
+	
+    \remarks
+    Entity path must not have self-intersections, and it is recommended that the path not have high curvature areas. 
+	
+    The following constraints are applied: |taper Angle| >= 1e-6
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult extrudeAlongPath(const OdDbRegion* region, const OdDbCurve* path, double taperAngle = 0.0);
+
+  /** \details
+    Intersects the given entity with the solid and imprints their intersection graph onto the solid. 
+
+    \param pEntity [in] A Pointer to an entity to be imprinted.
+	
+	
+    \returns Returns eOk if imprinting entity onto the solid is successful or an appropriate error code if not. 
+  
+    \remarks
+    The given entity must be one of the following:
+* Curve
+* OdDb3dSolid
+* Body
+* Region
+* Trace
+* OdDbSolid
+* Face
+	  
+    If the solid is null, or if the given entity is not one of the entities listed above, eInvalidInput is returned.
+    
+    If as a result of intersection a closed loop of new edges is created, a new face will be made. 
+    If an open loop of edges is made, it can be added to an existing loop as a spur. 
+    Or it can be added as a slit in the face. 
+    
+      This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+      for other modelers. 
+  */
+  virtual OdResult imprintEntity(const OdDbEntity *pEntity);
+
+  /** \details
+    Calculates the area of the solid.
+
+    \param area [out] Reference for returning the area value.
+	
+    \returns Returns eOk if successful or an appropriate error code in other case. Area value is returned in square drawing units.
+    
+    \remarks
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult getArea(double& area) const;
+
+  /** \details
+    Checks whether the solid interferes with another solid object.
+
+    \param otherSolid         [in] A pointer to another solid object for checking interference.
+    \param createNewSolid     [in] A flag determining where a new solid object containing the interference must be created.
+    \param solidsInterfere    [out] A reference to a boolean variable where the result of the interference checking will be stored and returned.
+    \param commonVolumeSolid  [out] A reference to a pointer to a new solid containing the interference of the origin solid and otherSolid. 
+	
+    \returns Returns eOk if interference checking is successful or an appropriate error code in other case.
+	
+    \remarks
+    The caller of this function is responsible for the memory used by the object pointed by commonVolumeSolid (resulting from intersection of this solid and otherSolid) when the function finishes. 
+    In the case when commonVolumeSolid is added to a database, the database takes responsibility for the memory pointed by commonVolumeSolid. 
+    In the case when commonVolumeSolid is not added to a database, the caller must delete memory when it is no longer needed to avoid a memory leak.
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult checkInterference(const OdDb3dSolid* otherSolid,
+    bool createNewSolid, 
+    bool& solidsInterfere,
+    OdDb3dSolidPtr &commonVolumeSolid)
+    const;
+
+  /** \details
+    Returns volume properties of the solid.
+
+    \param volume         [out] A reference for returning the volume of the solid.
+    \param centroid       [out] A reference to an OdGePoint3d object for returning the point, representing the centroid of the solid.
+    \param momInertia     [out] A static array for returning X, Y, Z moments of inertia of the solid.
+    \param prodInertia    [out] A static array for returning X, Y, Z products of inertia of the solid. 
+    \param prinMoments    [out] A static array for returning X, Y, Z principal moments of the solid.
+    \param prinAxes       [out] A static array for returning an OdGeVector3d object, determining principal axes of the solid.
+    \param radiiGyration  [out] A static array for returning X, Y, Z radii of gyration of the solid.
+    \param extents        [out] A reference to an OdGeExtents3d object for returning the bounding box of the solid.
+
+    \returns Returns the result of getting volume properties of the solid: eOk if successful or an appropriate error code in other case. All properties are evaluated in the WCS.
+    
+    \remarks
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult getMassProp(double& volume,
+    OdGePoint3d& centroid,
+    double momInertia[3],
+    double prodInertia[3],
+    double prinMoments[3],
+    OdGeVector3d prinAxes[3], 
+    double radiiGyration[3],
+    OdGeExtents3d& extents) const;
+
+  /** \details
+    Creates a DbRegion entity as a result of the intersection between the specified plane and the solid. 
+	
+    \param plane          [in] A reference to an OdGePlane object to use as the section cutting plane.
+    \param sectionRegion  [out] A reference to a new region created as the result of the intersection between the specified plane and the solid.
+
+    \returns Returns the result of the intersecting the solid with a plane: eOk if successful or an appropriate error code in other case. 
+    Value eOk is also returned when a plane and the solid do not intersect each other or if the intersection region is not a valid region: 
+    it intersects at a point, along a bounding face of the solid and so on. 
+	
+    \remarks
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult getSection(const OdGePlane& plane, OdDbRegionPtr &sectionRegion) const;
+
+  /** \details
+    Slices the solid with a plane and transforms the native solid to be the portion remaining on the positive side of the normal of the slicing plane.
+	
+    \param plane          [in] A reference to a slicing plane.
+    \param bGetNegHalfToo [in] A flag determining whether the other (negative) part of the native solid should be created as a separate solid (when true).
+    \param pNegHalfSolid  [out] A reference to a pointer to the created solid representing the negative half of the native solid. If bGetNegHalfToo is false, NULL value is returned.
+	
+    \returns Returns eOk if the native solid was successfully sliced or an appropriate error code in other case. 
+    If the slicing plane does not intersect the solid, the solid is left unchanged, pNegHalfSolid is set to NULL, and eOk is returned. 
+	
+    \remarks
+    The caller of this function is responsible for the memory used by the object pointed to by pNegHalfSolid (negative part of the sliced solid) when the function finishes. 
+    In the case when pNegHalfSolid is added to a database, the database takes responsibility for the memory. 
+    In the case when pNegHalfSolid is not added to a database, the caller must delete memory when it is no longer needed to avoid a memory leak.
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult getSlice(const OdGePlane& plane, bool bGetNegHalfToo, OdDb3dSolidPtr &pNegHalfSolid);
+
+  /** \details
+    Slices the solid with a surface and transforms the native solid to be the portion remaining on the positive side of the slicing surface normal.
+	
+    \param pSurface       [in] A pointer to a slicing surface.
+    \param bGetNegHalfToo [in] A flag determining whether the other (negative) part of the native solid should be created as a separate solid (when true).
+    \param pNegHalfSolid  [out] A reference to a pointer to the created solid representing the negative half of the native solid. If bGetNegHalfToo is false, NULL value is returned.
+	
+    \returns Returns eOk if the native solid was successfully sliced or an appropriate error code in other case. 
+    If pSurface pointer is NULL or the solid is empty, returns eInvalidInput.
+    
+    \remarks
+    The native solid will be transformed to a resulting body which is located in the negative side of the surface normal.	
+    
+    The caller of this function is responsible for the memory used by the object pointed to by pNegHalfSolid (negative part of the sliced solid) when the function finishes. 
+    In the case when pNegHalfSolid is added to a database, the database takes responsibility for the memory. 
+    In the case when pNegHalfSolid is not added to a database, the caller must delete memory when it is no longer needed to avoid a memory leak.
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult getSlice(OdDbSurface* pSurface,  bool bGetNegHalfToo, OdDb3dSolidPtr &pNegHalfSolid);
+
+  /** \details
+    Removes all edges and faces that are not needed for supporting the topology of the solid. 
+	
+    \returns Returns eOk if successful or an appropriate error code in other case.
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult cleanBody();
+
+  /** \details
+    Offsets all faces by the specified distance. 
+	
+    \param offsetDistance) [in] A distance for offset.
+
+    \returns Returns eOk if all faces are successfully offset, or an appropriate error code in other case. 
+    Returns eInvalidInput if the offsetDistance is less than -maxSide/2, 
+    where maxSide is the size of the greater side of the solid's bounding box. 
+    Also eInvalidInput is returned when the absolute value of offsetDistance is less than 1e-6.
+    
+    \remarks	
+    If a face has surfaces that cannot be offset, it is removed. Therefore, the offset operation can cause the solid to become invalid. 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult offsetBody(double offsetDistance);
+
+  /** \details
+    Separates the solid into an array of solids representing the additional disjoint volumes. This solid is reduced to a solid with one volume. 
+
+    \param newSolids [out] A reference to an array of pointers to OdDb3dSolid objects representing the additional disjoint volumes. 
+
+    \returns Returns eOk if separating was successful or an appropriate error code in other case.
+	
+    \remarks
+    The calling application is responsible for the resulting entities (either appending them to a database or deleting them when they are no longer needed). 
+    If the new solids from the output array are not appended to the database, there will be a memory leak. 
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult separateBody(OdDb3dSolidPtrArray &newSolids);
+
+  /** \details
+    Creates a solid by sweeping a planar curve, region, or planar surface in the direction of the given vector using a distance equal to the length of the vector.
+
+    \param pSweepEnt    [in] A pointer to the swept entity.
+    \param directionVec [in] Vector determining the direction and length of extruding.
+    \param sweepOptions [in] A set of sweeping options.
+
+    \returns Returns eOk if extruding was successful or an appropriate error code in other case.
+    
+    \remarks	
+    Sweeping parameters (for example, angle) are set through the sweepOptions object reference. 
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createExtrudedSolid ( OdDbEntity* pSweepEnt,
+    const OdGeVector3d& directionVec,
+    OdDbSweepOptions& sweepOptions );
+
+  /** \details
+    Creates a solid by extruding a face.
+
+    \param pSweepEnt    [in] A pointer to the swept entity.
+    \param faceSubentId [in] Object ID for the face that must be extruded.
+    \param directionVec [in] Vector determining the direction and length of extruding.
+    \param sweepOptions [in] A set of sweeping options.
+
+    \returns Returns eOk if extruding was successful or an appropriate error code in other case.
+    
+    \remarks
+		Sweeping parameters (for example, angle) are set through the sweepOptions object reference. 
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+    */
+  virtual OdResult createExtrudedSolid ( OdDbEntity* pSweepEnt,
+    const OdDbSubentId& faceSubentId,
+    const OdGeVector3d& directionVec, 
+    OdDbSweepOptions& sweepOptions );
+
+  /** \details
+    Creates a solid by extruding a face.
+
+    \param pSweepEnt    [in] A pointer to the swept entity.
+    \param faceSubentId [in] Object ID for the face that must be extruded.
+    \param height       [in] Multiplier for the direction vector.
+    \param sweepOptions [in] A set of sweeping options.
+
+    \returns Returns eOk if extruding was successful or an appropriate error code in other case.
+    
+    \remarks
+		Sweeping parameters (for example, angle) are set through the sweepOptions object reference. 
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createExtrudedSolid ( OdDbEntity* pSweepEnt,
+    const OdDbSubentId& faceSubentId,
+    double height, 
+    OdDbSweepOptions& sweepOptions );
+
+  /** \details
+    Creates a lofted solid from the given curves.
+    	
+    \param crossSectionCurves [in] An array of curve entities to be used as cross sections for the lofting operation.
+    \param guideCurves        [in] Array of guide curves.
+    \param pPathCurve        [in] Path curve.
+    \param loftOptions        [in] Options for lofting.
+	
+    \returns Returns eOk if successful or an appropriate error code in other case.
+
+    \remarks
+    Lofting parameters can be passed with the loftOptions parameter. 
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createLoftedSolid (
+    OdDbEntityPtrArray& crossSectionCurves,
+    OdDbEntityPtrArray& guideCurves,
+    OdDbEntity* pPathCurve, OdDbLoftOptions& loftOptions );
+
+  /** \details
+    Creates a pyramid. World origin is centered about the base of the pyramid and the pyramid is positioned at half of the specified height above the world origin.
+
+    \param height     [in] Value of the pyramid's height.
+    \param sides      [in] Quantity of sides for the pyramid.
+    \param radius     [in] Radius for circle inscribed into the bottom polygon.
+    \param topRadius  [in] Radius for circle inscribed into the top polygon. 
+	
+    \returns Returns eOk if successful or an appropriate error code in other case. 
+    
+    \remarks 
+    The pyramid's base is located in the X-Y plane of the WCS. The pyramid's direction (from the base to the top) coincides with the positive direction of the Z axis.
+    When radius and topRadius values are equal, a prism is created. 
+	
+    The following constraints are applied:
+* |height| >= 1e-6;
+* |radius| >= 1e-6;
+* |topRadius| >= 1e-6;
+* 3 <= sides <= 64.
+  */
+	  virtual OdResult createPyramid(double height, int sides, 
+    double radius, double topRadius = 0.0 );
+
+  /** \details
+    Creates a solid by revolving a specified curve, region, or planar surface around the specified axis of revolution.
+
+    \param pRevEnt        [in] Pointer to the planar curve, region, or planar surface that must be revolved. 
+    \param axisPnt        [in] Point on the axis of revolution.
+    \param axisDir        [in] Direction of the revolution axis.
+    \param revAngle       [in] Revolve angle in radians.
+    \param startAngle     [in] Start angle of rotation. If 0, then rotation will start from current position of pRevEnt.
+    \param revolveOptions [in] Revolve options.
+
+    \returns Returns eOk if successful or an appropriate error code in other case. 
+    
+    \remarks
+    Axis of revolution is defined by a point (axisPnt) and vector (axisDir). 
+    pRevEnt will be revolved according to the start and revolve angles counter-clockwise about the axisDir vector. 
+    
+    Options for revolving can be specified with the revolveOptions object reference.
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createRevolvedSolid ( OdDbEntity* pRevEnt,
+    const OdGePoint3d& axisPnt,
+    const OdGeVector3d& axisDir,
+    double revAngle, double startAngle,
+    OdDbRevolveOptions& revolveOptions );
+
+  /** \details
+    Creates a solid by revolving a face about the axis of revolution.
+	
+    \param pRevEnt        [in] Pointer to entity containing face for revolving.
+    \param faceSubentId   [in] Face's subentity ID.
+    \param axisPnt        [in] Point on the axis of revolution.
+    \param axisDir        [in] Direction of revolution axis.
+    \param revAngle       [in] Revolve angle in radians.
+    \param startAngle     [in] Start angle of rotation. If 0, then rotation will start from current position of pRevEnt.
+    \param revolveOptions [in] Revolve options.
+	
+    \returns Returns eOk if successful, or an appropriate error code in other case.
+	
+    \remarks
+    Entity for revolving must be a valid planar curve, region, or planar surface. 
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createRevolvedSolid ( OdDbEntity* pRevEnt,
+    const OdDbSubentId& faceSubentId,
+    const OdGePoint3d& axisPnt,
+    const OdGeVector3d& axisDir,
+    double revAngle, double startAngle,
+    OdDbRevolveOptions& revolveOptions );
+
+  /** \details
+    Creates a swept solid by sweeping a face along the specified path.
+
+    \param pSweepEnt    [in] Pointer to face entity for sweeping.
+    \param faceSubentId [in] Face's subentity ID.
+    \param pPathEnt     [in] Pointer to the curve entity that determines the path to sweep along.
+    \param sweepOptions [in] Sweep options.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks
+    To set optional sweep parameters (for example, draft angle) use the sweepOptions parameter.
+    The default value for the alignment option of OdDbSweepOptions (returned by align() method) is kNoAlignment. 
+    Set it to kAlignSweepEntityToPath before calling this method.
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createSweptSolid ( OdDbEntity *pSweepEnt,
+    const OdDbSubentId& faceSubentId,
+    OdDbEntity* pPathEnt,
+    OdDbSweepOptions& sweepOptions );
+
+  /** \details
+    Creates a swept solid by sweeping a curve, region, or planar surface along the specified path.
+	
+    \param pSweepEnt    [in] Pointer to face entity for sweeping.
+    \param pPathEnt     [in] Pointer to the curve entity that determines the path to sweep along.
+    \param sweepOptions [in] Sweep options.
+	
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks	
+    To set optional sweep parameters (for example, draft angle) use the sweepOptions parameter. 	
+    The default value for the alignment option of OdDbSweepOptions (returned by align() method) is kNoAlignment. 
+    Set it to kAlignSweepEntityToPath before calling this method.
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createSweptSolid ( OdDbEntity* pSweepEnt,
+    OdDbEntity* pPathEnt,
+    OdDbSweepOptions& sweepOptions );
+
+  /** \details
+    Writes out a Stereo Lithography (STL) representation of the solid to a file with the specified name.
+	
+    \param filename    [in] Full file name.
+    \param asciiFormat [in] A flag determining the format of the output file (if true, file has ASCII text format, or in other case file has binary format).
+	
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks
+    If the specified file already exists, it will be overwritten.	
+    
+    This method is not implemented. 
+  */
+
+  virtual void stlOut(const OdChar* filename, bool asciiFormat) const;
+
+  virtual OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver, 
+    OdDbObjectId& replaceId, 
+    bool& exchangeXData);
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm );
+  
+    /** \details
+    Saves 3D solid entity to a .dwg file.
+	
+    \param pWd [in] Pointer to an OdGiWorldDraw object instance used for saving the solid.
+	\param ver [in] Version of saved .dwg file.
+    */
+    
+  /** \details
+    Creates a geometric representation of the entity for saving proxy graphics or converting to previous formats.
+
+    \param pWd [in] Pointer to the OdGiWorldDraw object.
+    \param ver [in] Specifies the reason why the method is called.
+
+    \remarks
+    This method can be overridden in a custom classes.
+  */
+  virtual void saveAs(
+    OdGiWorldDraw* pWd,
+    OdDb::DwgVersion ver ) const;
+
+  /** \details
+    Directly sets the contained modeler geometry of this entity.
+	 
+    \param pGeometry [in] Pointer to the modeler geometry.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+  */
+  virtual OdResult setBody( const void* pGeometry );
+  
+  /** \details
+    Returns contained modeler geometry of this entity.
+  */
+  virtual void *body( ) const;
+
+  /** \details
+    Copies the specified edge as a separate entity (instance of OdDbLine, OdDbCircle, OdDbArc, OdDbEllipse, OdDbSpline class).
+	
+    \param subentId   [in] Edge's subentity ID in the solid.
+    \param newEntity  [in] Reference to a new entity for the specified edge.
+	
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks
+    The properties of the resulting entity (color, layer, line type, lineweight) are inherited from the corresponding current document.
+    The calling application is responsible for the memory located with the resulting entity. 
+    If the resulting entity is not appended to a database, it can cause a memory leak (if it is not deleted when it isn't needed anymore). 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+    */
+  virtual OdResult copyEdge(const OdDbSubentId &subentId, OdDbEntityPtr &newEntity);
+  
+  /** \details
+    Copies the specified face as a separate entity (OdDbRegion or otherwise will be OdDbBody).
+
+    \param subentId   [in] Face's subentity ID in the solid.
+    \param newEntity  [in] Reference to a new entity containing a copy of the specified face.
+    
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks
+    If face is planar, an OdDbRegion entity is created. Otherwise an OdDbBody entity is created. 
+    The properties of the resulting entity (color, layer, line type, lineweight) are inherited from the corresponding current document.
+    
+    The calling application is responsible for the memory located with the resulting entity. 
+    If the resulting entity is not appended to a database, it can cause a memory leak (if it is not deleted when it isn't needed anymore). 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult copyFace(const OdDbSubentId &subentId, OdDbEntityPtr &newEntity);
+
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type,
+                                               OdGsMarker gsMark, 
+                                               const OdGePoint3d& pickPoint,
+                                               const OdGeMatrix3d& viewXform, 
+	                                             OdDbFullSubentPathArray& subentPaths, 
+	                                             const OdDbObjectIdArray* pEntAndInsertStack = 0) const;
+
+	
+  virtual OdDbSubentId internalSubentId(void* ent) const;
+  
+  virtual void* internalSubentPtr(const OdDbSubentId& id) const;
+
+  virtual OdResult subGetGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath, 
+                                               OdGsMarkerArray& gsMarkers) const;
+
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& id) const;
+
+  /** \details
+    Extrudes faces of the solid with specified distance and taper angle.
+
+    \param faceSubentIds  [in] Face's subentity ID in the solid.
+    \param height         [in] Distance of extrusion.
+    \param taper          [in] Taper angle.
+  
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks  
+    The distance of extrusion is determined by the height parameter and the taper angle (the taper parameter). 
+  
+    The extrusion direction can be along or opposite the normal of each extruded face depending on the height value: 
+* If height is positive, direction is along the normal (extruding faces outward from the solid).
+* If height is negative, direction is opposite the normal (extruding faces into the solid).
+  
+    If the absolute value of taper is less than 1e-6, taper angle is assumed to be equal to 0.0.
+
+    If taper value does not equal 0.0, each face should have edges that join together smoothly (i.e. tangents at the points of connection must be equal). 
+  
+    The following constraints are applied:
+* number of specified faces (in faceSubentIds parameter) must be more than zero
+* |height| >= 1e-6
+* |taper| >= (PI/2) - 1e-6
+  
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult extrudeFaces(const OdArray<OdDbSubentId *> &faceSubentIds, 
+    double height, double taper);
+
+  /** \details
+    Extrudes specified faces along the specified path determined by a curve entity. 
+
+    \param faceSubentIds [in] Array of faces' subentity IDs. Faces with specified IDs will be extruded.
+    \param path          [in] Pointer to a curve object to extrude along (extrusion path). Can not be NULL.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+
+    Faces for extrusion must be planar.
+    
+    Curve entity must be one of the following:
+* OdDbLine
+* OdDbArc
+* OdDbEllipse
+* OdDbSpline
+* OdDb2dPolyline
+* Non-spline fit OdDb3dPolyline
+
+    Extrusion path must not have self-intersections. Also it is recommended that the path doesn't have high curvature areas. 
+    If one of the end points of the path is not located on the region's plane, the path will move the point on the plane. 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult extrudeFacesAlongPath(const OdArray<OdDbSubentId *> &faceSubentIds, 
+    const OdDbCurve* path);
+
+  /** \details
+    Tapers the specified faces about the specified base point and draft vector for a specified draft angle.   
+
+    \param faceSubentIds [in] Array of faces' subentity IDs. Faces with specified IDs will be tapered.
+    \param basePoint     [in] Reference to the base point of the draft plane.
+    \param draftVector   [in] Reference to the draft direction vector.
+    \param draftAngle    [in] Draft angle in radians.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+
+    \remarks    
+    The base point and draft vector define a draft plane about which faces are tapered. 
+    If a face is lying in the draft plane, it will not be modified. 
+
+    Tapering faces can cause the solid to become invalid in some cases. 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult taperFaces(const OdArray<OdDbSubentId *> &faceSubentIds, 
+    const OdGePoint3d &basePoint, 
+    const OdGeVector3d &draftVector,
+    double draftAngle);
+
+  /** \details
+    Transforms the specified faces of a solid by applying the transformation matrix for rotation and (or) moving the faces. 
+
+    \param faceSubentIds  [in] Array of faces' subentity IDs. Faces with specified IDs will be transformed.
+    \param matrix         [in] Transformation matrix to be applied to the specified faces.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.	
+
+    \remarks
+    Transformation faces can cause the solid to become invalid in some cases. 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult transformFaces(const OdArray<OdDbSubentId *> &faceSubentIds,  const OdGeMatrix3d &matrix);
+  
+  /** \details
+    Removes the specified faces from the solid.
+
+    \param faceSubentIds [in] Array of faces' subentity IDs. Faces with specified IDs will be removed.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks
+    After removing specified faces, the adjacent faces will enlarge to fill the gaps. 
+    This method implements gap filling only if there is no other solution using adjacent faces. 
+    If adjacent faces can't be used, the method leaves the solid unmodified. 
+
+    Removing faces can cause the solid to become invalid in some cases. 
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult removeFaces(const OdArray<OdDbSubentId *> &faceSubentIds);
+  
+  /** \details
+    Offsets the specified faces of the solid for the specified distance. 	
+
+    \param faceSubentIds  [in] Array of faces' subentity IDs. Faces with specified IDs will be offset.
+    \param offsetDistance [in] Offset distance.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks
+    Faces with surfaces that cannot be offset are removed and the solid is healed, if possible. 
+
+    The following constraints are applied:
+* number of specified faces (in faceSubentIds parameter) must be more than zero
+* offsetDistance >= minus half of the max side of the solid's bounding box
+* |offsetDistance| >= 1e-6
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+    */
+  virtual OdResult offsetFaces(const OdArray<OdDbSubentId *> &faceSubentIds, double offsetDistance);
+  
+  /** \details
+    Transforms the solid into a thin-walled solid shell by offsetting faces. 
+
+    \param faceSubentIds  [in] Array of faces' subentity IDs. Faces with specified IDs will be removed from the shell.
+    \param offsetDistance [in] Offset distance for each face.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+
+    \remarks 
+    Offset can have an outside or inside direction related to the solid, depending on the sign of the offsetDistance parameter:
+* positive value means outside direction
+* negative value means inside direction
+
+    If a face has surfaces that cannot be offset by the thickness, it will be removed from the solid. Removal wound is healed with the surrounding face surfaces. 
+    Edges and vertices on the specified faces will be merged if possible. 
+    Isolated edges in tweaked faces and neighboring faces may degenerate to a point and will be removed. 
+    However, when removing loops or faces, insertion of edges or other topology changes are prohibited.
+    
+    Operation can cause the solid to become invalid in some cases.
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult shellBody(const OdArray<OdDbSubentId *> &faceSubentIds, double offsetDistance);
+
+  /** \details
+    Returns the number of changes occurred since the solid's creation.
+  */
+  virtual OdUInt32 numChanges() const;
+
+  /** \details
+    Sets the color of the specified face or edge subentity. 
+
+    \param subentId [in] ID of subentity (face or edge) to be colored.
+    \param color    [in] Color value to set.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+  */
+  virtual OdResult setSubentColor(const OdDbSubentId &subentId, const OdCmColor &color);
+  
+  /** \details
+    Returns the color of the specified subentity.
+
+    \param subentId [in] ID of subentity.
+    \param color    [in] A reference to an OdCmColor object to store the current color of the specified subentity.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+  */
+  virtual OdResult getSubentColor(const OdDbSubentId &subentId, OdCmColor &color) const;
+  
+  /** \details
+    Sets a material for the specified subentity.
+
+    \param subentId [in] Subentity ID 
+    \param matId    [in] Object ID for the material.
+
+    \returns Returns eOk if successful or an appropriate error code in other case
+    
+    \remarks
+    To remove the currently assigned material, set matId parameter value to NULL.    
+  */
+  virtual OdResult setSubentMaterial(const OdDbSubentId &subentId, OdDbObjectId matId);
+
+  /** \details
+    Returns the material of the specified subentity.
+
+    \param subentId [in] Subentity ID.
+    \param matId    [in] Reference to an OdDbObjectId for returning the material object ID.
+    
+    \returns Returns eOk if successful or an appropriate error code in other case.
+  */
+  virtual OdResult getSubentMaterial(const OdDbSubentId &subentId, OdDbObjectId& matId) const;
+
+  /** \details
+    Sets an explicit material mapper for the specified subentity.
+
+    \param subentId [in] Subentity ID 
+    \param mapper   [in] Pointer to an OdGiMapper object.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks 
+    To remove the current material mapper assignment, set map parameter value to NULL.
+  */
+  virtual OdResult setSubentMaterialMapper(const OdDbSubentId &subentId, const OdGiMapper& mapper);
+  
+  /** \details
+    Returns current material mapper for the specified subentity.
+
+    \param subentId [in] Subentity ID.
+    \param mapper   [out] Reference to an OdGiMapper object containing the current subentity material mapper.
+	
+    \returns Returns eOk if successful or an appropriate error code in other case.
+  */
+    virtual OdResult getSubentMaterialMapper(const OdDbSubentId &subentId, OdGiMapper& mapper) const;
+  
+  /** \details
+    Creates chamfers at the edges of a solid.
+
+    \param edgeSubentIds    [in] Array of edge object IDs. The chamfer will be applied at the specified edges.
+    \param baseFaceSubentId [in] Base face object IDs. Chamfer will be applied on the specified face.
+    \param baseDist         [in] Chamfer distance for the base face.
+    \param otherDist        [in] Chamfer distance for the other faces.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult chamferEdges(const OdArray<OdDbSubentId *> &edgeSubentIds,
+                                const OdDbSubentId& baseFaceSubentId, 
+                                double baseDist, 
+                                double otherDist);
+
+  /** \details
+    Creates rounded fillets on the edges of a solid.
+
+    \param edgeSubentIds [in] Array of edges' object IDs. Fillet will be applied on the specified edges.
+    \param radius        [in] Array of fillet radius values for the corresponding edges.
+    \param startSetback  [in] Array of start setback values for the corresponding edges.
+    \param endSetback    [in] Array of end setback values for the corresponding edges.
+
+    \returns Returns eOk if successful or an appropriate error code in other case
+
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult filletEdges( const OdArray<OdDbSubentId *> &edgeSubentIds,
+                                const OdGeDoubleArray& radius, 
+                                const OdGeDoubleArray& startSetback, 
+                                const OdGeDoubleArray& endSetback);
+
+  /** \details
+    Creates a 3D solid from the specified entity.
+
+    \param pFromEntity [in] Pointer to an entity from which the solid must be created. 
+	
+    \returns Returns eOk if conversion is successful or an appropriate error code in other case.
+
+    \remarks     
+    An entity to create from must enclose a volume and can be one of the following:
+* OdDbSurface
+* OdDbSubDMesh
+* closed curve with thickness
+* thick OdDbSolid
+* thick OdDbTrace
+* polyline with constant width and thickness
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createFrom(const OdDbEntity* pFromEntity);
+
+  /** \details
+    Returns whether the solid records its operations history.
+
+    \remarks
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual bool recordHistory() const;
+  
+  /** \details
+    Returns whether to draw items from the solid's operation history.
+	
+    \remarks
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+    virtual bool showHistory() const;
+
+  /** \details
+    Sets a new value for the flag that determines whether the solid records its operation history.
+	
+    \param bRecord [in] Flag determining whether the solid records operation history.
+	
+    \returns Returns eOk if successful or an appropriate error code in other case
+  */
+    virtual OdResult setRecordHistory(bool bRecord);
+  
+  /** \details
+    Sets a new value for the flag that determines whether to draw items from the solid's operation history.
+	
+    \param bShow [in] Flag determining whether the solid records operation history.
+	
+    \remarks Returns eOk if successful or an appropriate error code in other case.
+  */
+      virtual OdResult setShowHistory(bool bShow);
+
+  /** \details
+    Converts individual history items from a parameterized type to a simple boundary-representation without its parameter or type information.
+
+    \param paths [in] Array of references to history items.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+	
+    \remarks 
+    This method is not implemented. 
+  */
+  virtual OdResult convertToBrepAtSubentPaths(const OdDbFullSubentPathArray& /*paths*/);
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  /** \details
+    Creates non-database resident entities by projecting the specified entity along the projection direction to the solid.
+    	
+
+    \param pEntityToProject    [in] Pointer to the entity to be projected.
+    \param projectionDirection [in] Vector determining the projection direction.
+    \param projectedEntities   [out] Array of pointers to non-database resident entities created by the projection.
+	
+    \returns Returns eOk if successful or an appropriate error code in other case.
+    
+    \remarks	
+    Specified pointer to the entity must not be equal to NULL and the entity must be of a supported type.
+	
+    When an OdDbPoint is specified as the entity to be projected, the result of the projection will be an AcDbPoint representing the nearest point on the solid.
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  OdResult projectOnToSolid( const OdDbEntity*   pEntityToProject,
+                             const OdGeVector3d& projectionDirection,
+                             OdDbEntityPtrArray& projectedEntities) const;
+
+  /** \details
+    Creates a solid by trimming and (or) extending the specified surfaces and 3D solids, forming an enclosed volume.
+
+    \param limitingBodies [in] Reference to the entity array (representing surface and solids) that are used to create a solid.
+    \params limitingFlags [in] Reserved for internal use.  
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+
+    \remarks 
+    This method is not implemented. 
+  */
+  OdResult createSculptedSolid(OdDbEntityPtrArray& limitingBodies,
+                               const OdGeIntArray& limitingFlags);
+
+  /** \details
+    This method is not implemented. 
+  */
+  virtual void subClose();
+
+  virtual OdResult subGetGeomExtents( OdGeExtents3d& extents) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotData.h
new file mode 100755
index 0000000..b165fea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotData.h
@@ -0,0 +1,199 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBABSTRACTPLOTDATA_H
+#define OD_DBABSTRACTPLOTDATA_H
+
+#include "DbPlotSettings.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for Protocol Extension classes for OdDbViewport and OdDbPlotSettings objects.
+    
+    Library: TD_Db
+    
+    \note
+    Only the following objects are supported:
+    
+    *  OdDbViewport
+    *  OdDbPlotSettings
+    *  Derivatives of one of the above.
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractPlotData : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdDbAbstractPlotData);
+
+    /** \details
+      Sets the parameters for the specified Plot object according to the arguments.
+      \param pDstPlotObj [in]  Pointer to the destination Plot object
+      \param pSrcPlotObj [in]  Pointer to the source Plot object.
+    */
+    virtual void setProps(OdRxObject* pDstPlotObj, const OdRxObject* pSrcPlotObj) const;
+
+    // Scale properties
+
+    /** \details
+      Returns true if and only if this Plot object uses a standard scale.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual bool useStandardScale(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Returns the custom print scale for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual double customScale(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Sets the custom scale of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param customScale [in]  Custom scale.
+    */
+    virtual void setCustomScale(OdRxObject* pPlotObj, double customScale) const = 0;
+
+    /** \details
+      Returns the standard scale type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual OdDbPlotSettings::StdScaleType standardScale(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Sets the standard scale type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param standardScale [in]  Standard scale type.
+    */
+    virtual void setStandardScale(OdRxObject* pPlotObj, const OdDbPlotSettings::StdScaleType standardScale) const = 0;
+
+    // Plot style sheet
+
+    /** \details
+      Returns the current style sheet.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual OdString styleSheet(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Sets the plot style sheet name associated with this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param styleSheetName [in]  Style sheet name.
+    */
+    virtual void setStyleSheet(OdRxObject* pPlotObj, const OdString& styleSheetName) const = 0;
+
+    // Plot shade
+
+    /** \details
+      Returns the shade plot type for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual OdDbPlotSettings::ShadePlotType shadePlot(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Sets the shade plot type for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param shadePlotSet [in]  New shade plot setting.
+    */
+    virtual void setShadePlot(OdRxObject* pPlotObj, OdDbPlotSettings::ShadePlotType shadePlotSet) const = 0;
+
+    /** \details
+      Returns the OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object referenced by this object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual OdDbObjectId shadePlotId(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Sets the shade plot type and OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param type [in]  New shade plot setting.
+      \param shadePlotId [in]  OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object for this Plot object.
+    */
+    virtual void setShadePlot(OdRxObject* pPlotObj, OdDbPlotSettings::ShadePlotType type, OdDbObjectId shadePlotId) const = 0;
+
+    // Shade modes
+
+    /** \details
+      Returns true if and only if the hidden line removal algorithm is to be applied to entities for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual bool plotHiddenLines(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Controls the application of the hidden line removal algorithm to entities for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param plotHidden [in]  True if and only hidden lines are to be removed.
+    */
+    virtual void setPlotHiddenLines(OdRxObject* pPlotObj, bool plotHidden) const = 0;
+
+    /** \details
+      Controls whether the output is vector-based when using shade plot settings of a viewport.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual bool plotWireframe(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Controls whether the output is raster-based when using shade plot settings of a viewport.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual bool plotAsRaster(const OdRxObject* pPlotObj) const = 0;
+
+    // Plotting transparency
+
+    /** \details
+      Returns true if and only if transparencies plotting enabled for this Plot object.
+    */
+    virtual bool plotTransparency(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Controls transparencies plotting for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param bEnable [in]  New transparencies plotting setting.
+    */
+    virtual void setPlotTransparency(OdRxObject* pPlotObj, bool bEnable) const = 0;
+
+    // Helpers
+
+    /** \details
+      Returns true if and only if this Plot object is of ModelSpace type.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    virtual bool modelType(const OdRxObject* pPlotObj) const = 0;
+
+    /** \details
+      Controls the ModelSpace type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param modelTypeSet [in]  True if and only if it is of ModelSpace type.
+    */
+    virtual void setModelType(OdRxObject* pPlotObj, bool modelTypeSet) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbAbstractPlotData object pointers.
+*/
+typedef OdSmartPtr<OdDbAbstractPlotData> OdDbAbstractPlotDataPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef OD_DBABSTRACTPLOTDATA_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbPlotSettings.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbPlotSettings.h
new file mode 100755
index 0000000..1c89e41
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbPlotSettings.h
@@ -0,0 +1,180 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBABSTRACTPLOTDATAFORDBPLOTSETTINGS_H
+#define OD_DBABSTRACTPLOTDATAFORDBPLOTSETTINGS_H
+
+#include "DbAbstractPlotData.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the Protocol Extension class for OdDbPlotSettings objects.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractPlotDataForDbPlotSettings : public OdDbAbstractPlotData
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdDbAbstractPlotDataForDbPlotSettings);
+
+    // Scale properties
+
+    /** \details
+      Returns true if and only if this Plot object uses a standard scale.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool useStandardScale(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Returns the custom print scale for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    double customScale(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the custom scale of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param customScale [in]  Custom scale.
+    */
+    void setCustomScale(OdRxObject* pPlotObj, double customScale) const;
+
+    /** \details
+      Returns the standard scale type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdDbPlotSettings::StdScaleType standardScale(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the standard scale type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param standardScale [in]  Standard scale type.
+    */
+    void setStandardScale(OdRxObject* pPlotObj, const OdDbPlotSettings::StdScaleType standardScale) const;
+
+    // Plot style sheet
+
+    /** \details
+      Returns the current style sheet.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdString styleSheet(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the plot style sheet name associated with this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param styleSheetName [in]  Style sheet name.
+    */
+    void setStyleSheet(OdRxObject* pPlotObj, const OdString& styleSheetName) const;
+
+    // Plot shade
+
+    /** \details
+      Returns the shade plot type for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdDbPlotSettings::ShadePlotType shadePlot(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the shade plot type for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param shadePlotSet [in]  New shade plot setting.
+    */
+    void setShadePlot(OdRxObject* pPlotObj, OdDbPlotSettings::ShadePlotType shadePlotSet) const;
+
+    /** \details
+      Returns the OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object referenced by this object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdDbObjectId shadePlotId(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the shade plot type and OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param type [in]  New shade plot setting.
+      \param shadePlotId [in]  OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object for this Plot object.
+    */
+    void setShadePlot(OdRxObject* pPlotObj, OdDbPlotSettings::ShadePlotType type, OdDbObjectId shadePlotId) const;
+
+    // Shade modes
+
+    /** \details
+      Returns true if and only if the hidden line removal algorithm is to be applied to entities for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool plotHiddenLines(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls the application of the hidden line removal algorithm to entities for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param plotHidden [in]  True if and only hidden lines are to be removed.
+    */
+    void setPlotHiddenLines(OdRxObject* pPlotObj, bool plotHidden) const;
+
+    /** \details
+      Controls whether the output is vector-based when using shade plot settings of a viewport.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool plotWireframe(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls whether the output is raster-based when using shade plot settings of a viewport.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool plotAsRaster(const OdRxObject* pPlotObj) const;
+
+    // Plotting transparency
+
+    /** \details
+      Returns true if and only if transparencies plotting enabled for this Plot object.
+    */
+    bool plotTransparency(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls transparencies plotting for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param bEnable [in]  New transparencies plotting setting.
+    */
+    void setPlotTransparency(OdRxObject* pPlotObj, bool bEnable) const;
+
+    // Helpers
+
+    /** \details
+      Returns true if and only if this Plot object is of ModelSpace type.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool modelType(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls the ModelSpace type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param modelTypeSet [in]  True if and only if it is of ModelSpace type.
+    */
+    void setModelType(OdRxObject* pPlotObj, bool modelTypeSet);
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef OD_DBABSTRACTPLOTDATAFORDBPLOTSETTINGS_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbViewport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbViewport.h
new file mode 100755
index 0000000..ba6deb9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractPlotDataForDbViewport.h
@@ -0,0 +1,180 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBABSTRACTPLOTDATAFORDBVIEWPORT_H
+#define OD_DBABSTRACTPLOTDATAFORDBVIEWPORT_H
+
+#include "DbAbstractPlotData.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the Protocol Extension class for OdDbViewport objects.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractPlotDataForDbViewport : public OdDbAbstractPlotData
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdDbAbstractPlotDataForDbViewport);
+
+    // Scale properties
+
+    /** \details
+      Returns true if and only if this Plot object uses a standard scale.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool useStandardScale(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Returns the custom print scale for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    double customScale(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the custom scale of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param customScale [in]  Custom scale.
+    */
+    void setCustomScale(OdRxObject* pPlotObj, double customScale) const;
+
+    /** \details
+      Returns the standard scale type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdDbPlotSettings::StdScaleType standardScale(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the standard scale type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param standardScale [in]  Standard scale type.
+    */
+    void setStandardScale(OdRxObject* pPlotObj, const OdDbPlotSettings::StdScaleType standardScale) const;
+
+    // Plot style sheet
+
+    /** \details
+      Returns the current style sheet.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdString styleSheet(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the plot style sheet name associated with this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param styleSheetName [in]  Style sheet name.
+    */
+    void setStyleSheet(OdRxObject* pPlotObj, const OdString& styleSheetName) const;
+
+    // Plot shade
+
+    /** \details
+      Returns the shade plot type for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdDbPlotSettings::ShadePlotType shadePlot(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the shade plot type for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param shadePlotSet [in]  New shade plot setting.
+    */
+    void setShadePlot(OdRxObject* pPlotObj, OdDbPlotSettings::ShadePlotType shadePlotSet) const;
+
+    /** \details
+      Returns the OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object referenced by this object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    OdDbObjectId shadePlotId(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Sets the shade plot type and OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param type [in]  New shade plot setting.
+      \param shadePlotId [in]  OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object for this Plot object.
+    */
+    void setShadePlot(OdRxObject* pPlotObj, OdDbPlotSettings::ShadePlotType type, OdDbObjectId shadePlotId) const;
+
+    // Shade modes
+
+    /** \details
+      Returns true if and only if the hidden line removal algorithm is to be applied to entities for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool plotHiddenLines(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls the application of the hidden line removal algorithm to entities for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param plotHidden [in]  True if and only hidden lines are to be removed.
+    */
+    void setPlotHiddenLines(OdRxObject* pPlotObj, bool plotHidden) const;
+
+    /** \details
+      Controls whether the output is vector-based when using shade plot settings of a viewport.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool plotWireframe(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls whether the output is raster-based when using shade plot settings of a viewport.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool plotAsRaster(const OdRxObject* pPlotObj) const;
+
+    // Plotting transparency
+
+    /** \details
+      Returns true if and only if transparencies plotting enabled for this Plot object.
+    */
+    bool plotTransparency(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls transparencies plotting for this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param bEnable [in]  New transparencies plotting setting.
+    */
+    void setPlotTransparency(OdRxObject* pPlotObj, bool bEnable) const;
+
+    // Helpers
+
+    /** \details
+      Returns true if and only if this Plot object is of ModelSpace type.
+      \param pPlotObj [in]  Pointer to the Plot object.
+    */
+    bool modelType(const OdRxObject* pPlotObj) const;
+
+    /** \details
+      Controls the ModelSpace type of this Plot object.
+      \param pPlotObj [in]  Pointer to the Plot object.
+      \param modelTypeSet [in]  True if and only if it is of ModelSpace type.
+    */
+    void setModelType(OdRxObject* pPlotObj, bool modelTypeSet);
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef OD_DBABSTRACTPLOTDATAFORDBVIEWPORT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTable.h
new file mode 100755
index 0000000..4627ed7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTable.h
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBABSTRACTVIEWTABLE_INCLUDED
+#define _ODDBABSTRACTVIEWTABLE_INCLUDED
+
+#include "DbSymbolTable.h"
+
+class OdDbAbstractViewTableRecord;
+
+/** \details
+    This class is the base class for OdDbViewTable and OdDbViewportTable.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractViewTable : public OdDbSymbolTable
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbAbstractViewTable);
+
+  /** \note
+    Teigha applications typically will not use this constructor, insofar as 
+    this class is a base class.
+  */
+  OdDbAbstractViewTable();
+
+//  void getAt(const OdChar* entryName, OdDbAbstractViewTableRecord** pRec,
+//    OdDb::OpenMode openMode, bool openErasedRec = false) const;
+
+//  OdDbObjectId getAt(const OdChar* entryName, bool getErasedRecord = false) const;
+
+//  bool has(const OdChar* name) const;
+//  bool has(const OdDbObjectId& id) const;
+
+//  void newIterator(OdDbAbstractViewTableIterator** pIterator,
+//    bool atBeginning = true, bool skipDeleted = true) const;
+
+//  virtual const OdDbObjectId& add(OdDbSymbolTableRecord* pRecord);
+
+};
+
+#endif // _ODDBABSTRACTVIEWTABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTableRecord.h
new file mode 100755
index 0000000..ca77168
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewTableRecord.h
@@ -0,0 +1,459 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBABSTRACTVIEWLTABLERECORD_INCLUDED
+#define _ODDBABSTRACTVIEWLTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+#include "DbAbstractViewportData.h"
+#include "ViewportDefs.h"
+#include "Gi/GiViewportTraits.h"
+
+class OdDbSun;
+
+/** \details
+    This class is the base class for OdDbViewTableRecord and OdDbViewportTableRecord.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractViewTableRecord : public OdDbSymbolTableRecord
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbAbstractViewTableRecord);
+
+  OdDbAbstractViewTableRecord();
+
+  /** \details
+    Returns the DSC center point of this View. 
+    \remarks
+    *  DXF 10 for OdDbViewTableRecord.
+    *  DXF 12 for OdDbViewportTableRecord.
+  */
+  OdGePoint2d centerPoint() const;
+
+  /** \details
+    Sets the DCS center point of this View.
+    \param centerPoint [in]  Center point.
+    \remarks
+    *  DXF 10 for OdDbViewTableRecord.
+    *  DXF 12 for OdDbViewportTableRecord.
+  */
+  void setCenterPoint(
+    const OdGePoint2d& centerPoint);
+
+  /** \details
+    Returns the DCS height of this View (DXF 40).
+  */
+  double height() const;
+
+  /** \details
+    Sets the DCS height of this View (DXF 40).
+    \param height [in]  Height.
+  */
+  void setHeight(double height);
+
+  /** \details
+    Returns the DCS width of this View (DXF 41).
+    
+    \remarks
+    DXF 41 contains the width : height ratio for OdDbViewportTableRecord.
+  */
+  double width() const;
+
+  /** \details
+    Sets the DCS width of this View (DXF 41).
+
+    \param width [in]  Width. 
+
+    \remarks
+    DXF 41 contains the width : height ratio for OdDbViewportTableRecord.
+  */
+  void setWidth(
+    double width);
+
+   /** \details
+    Returns the WCS view target of this View.
+    
+    \remarks
+    *  DXF 12 for OdDbViewTableRecord. 
+    *  DXF 17 for OdDbViewportTableRecord.    
+   */
+  OdGePoint3d target() const;
+
+  /** \details
+    Sets the WCS view target of this View.
+    \param target [in]  Target.
+    \remarks
+    *  DXF 12 for OdDbViewTableRecord.
+    *  DXF 17 for OdDbViewportTableRecord.    
+  */
+  void setTarget(
+    const OdGePoint3d& target);
+
+  /** \details
+    Returns the WCS view direction of this View.
+    \param viewDirection [in] View direction.
+
+    \remarks
+    *  DXF 11 for OdDbViewTableRecord. 
+    *  DXF 16 for OdDbViewportTableRecord.    
+  */
+  OdGeVector3d viewDirection() const;
+
+  /** \details
+    Sets the WCS view direction of this View.
+    \param viewDirection [in]  View direction.
+
+    \remarks
+    *  DXF 12 for OdDbViewTableRecord. 
+    *  DXF 17 for OdDbViewportTableRecord.    
+  */
+ void setViewDirection(
+  const OdGeVector3d& viewDirection);
+
+  /** \details
+    Returns the DCS twist angle of this View.
+
+    \remarks
+    *  DXF 50 for OdDbViewTableRecord 
+    *  DXF 51 for OdDbViewportTableRecord.    
+    
+    \note
+    All angles are expressed in radians.
+  */
+  double viewTwist() const;
+
+  /** \details
+    Sets the DCS twist angle of this View.
+
+    \remarks
+    *  DXF 50 for OdDbViewTableRecord 
+    *  DXF 51 for OdDbViewportTableRecord.    
+    
+    \param viewTwist [in]  View twist angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void setViewTwist(
+    double viewTwist);
+
+  /** \details
+    Returns the perspective mode lens length (in mm) of this View (DXF 42).
+  */
+  double lensLength() const;
+
+  /** \details
+    Sets the perspective mode lens length of this View (DXF 42).
+    \param lensLength [in]  Lens length (mm).
+  */
+  void setLensLength(
+    double lensLength);
+
+  /** \details
+      Returns the front clip distance of this View (DXF 43).
+  */
+  double frontClipDistance() const;
+
+  /** \details
+    Sets the front clip distance of this View (DXF 43).
+    \param frontClipDistance [in]  Front clip distance.
+  */
+  void setFrontClipDistance(
+    double frontClipDistance);
+
+  /** \details
+    Returns the back clip distance of this View (DXF 44).
+  */
+  double backClipDistance() const;
+
+  /** \details
+    Sets the back distance of this View (DXF 44).
+    \param backClipDistance [in]  Back clip distance.
+  */
+  void setBackClipDistance(
+    double backClipDistance);
+
+  /** \details
+     Returns true if and only if perspective is on for this View (DXF 70, bit 0x01).
+  */
+  bool perspectiveEnabled() const;
+
+  /** \details
+    Controls perspective mode for this view (DXF 71, bit 0x01).
+
+    \param perspectiveEnabled [in]  Perspective Enabled.
+  */
+  void setPerspectiveEnabled(
+    bool perspectiveEnabled);
+
+  /** \details
+    Returns true if and only if front clipping is enabled for this View (DXF 71, bit 0x02).
+  */
+  bool frontClipEnabled() const;
+
+  /** \details
+    Controls front clipping for this view (DXF 71, bit 0x02).
+
+    \param frontClipEnabled [in]  Front clipping enabled.
+  */
+  void setFrontClipEnabled(
+    bool frontClipEnabled);
+
+  /** \details
+    Returns true if and only if back clipping is enabled for this View (DXF 71, bit 0x04).
+  */
+  bool backClipEnabled() const;
+
+  /** \details
+    Controls back clipping for this view (DXF 71, bit 0x04).
+
+    \param backClipEnabled [in]  Back clipping enabled.     
+  */
+  void setBackClipEnabled(
+    bool backClipEnabled);
+
+  /** \details
+    Returns true if and only if the front clipping plane plane passes through the camera (DXF 71, bit 0x10).
+    \remarks
+    If true, the front clipping plane ignores the front clip distance.
+  */
+  bool frontClipAtEye() const;
+
+  /** \details
+    Controls the front clipping plane passing through the camera (DXF 71, bit 0x10).
+
+    \param atEye [in]  True to pass through camera, false to use front clip distance.
+  */
+  void setFrontClipAtEye(
+    bool atEye);
+
+  /** \details
+    Sets the render mode of this View (DXF 281).
+    \param renderMode [in]  Render mode.
+
+    \remarks
+    renderMode must be one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  void setRenderMode(OdDb::RenderMode renderMode);
+
+  /** \details
+    Returns the render mode of this View (DXF 281).
+    
+    \remarks
+    renderMode() returns one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  OdDb::RenderMode renderMode() const;
+
+  /** \details
+    Returns the origin, X-axis, and Y-Axis of the UCS associated with this Viewport object.
+
+    \param origin [out]  Receives the UCS origin (DXF 110).
+    \param xAxis [out]  Receives the UCS X-axis (DXF 111).
+    \param yAxis [out]  Receives the UCS Y-axis (DXF 112).
+  */
+  void getUcs(OdGePoint3d& origin, 
+    OdGeVector3d& xAxis, 
+    OdGeVector3d& yAxis) const;
+
+  /** \details
+    True if and only if the UCS associated with this View is
+    orthographic with respect to UCSBASE (DXF 79).
+
+    \param orthoUcs [out]  Receives the orthographic view type.
+    \param pDb [in]  Working database. 
+    \remarks
+    Returns the type of orthographic view.
+    
+    orthoUcs must be one of the following:
+    
+    <table>
+    Name                 Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS 
+    OdDb::kTopView        1       Top view with respect to the UCS 
+    OdDb::kBottomView     2       Bottom view with respect to the UCS 
+    OdDb::kFrontView      3       Front view with respect to the UCS 
+    OdDb::kBackView       4       Back view with respect to the UCS 
+    OdDb::kLeftView       5       Left view with respect to the UCS 
+    OdDb::kRightView      6       Right view with respect to the UCS
+    \note
+    If if this View object is database resident, the pDb parameter is ignored.
+    </table>
+ 
+  */
+  bool isUcsOrthographic(
+    OdDb::OrthographicView& orthoUcs,
+    const OdDbDatabase* pDb = 0) const;
+
+  /** \details
+    Returns the Object ID of the UCS associated with this View (DXF 345).
+  */
+  OdDbObjectId ucsName() const;
+
+  /** \details
+    Returns the elevation of the UCS plane of this View (DXF 146).
+    
+    \remarks
+    The elevation is the distance from the WCS origin to the UCS plane of this View.
+  */
+  double elevation() const;
+
+  /** \details
+    Sets the UCS associated with this Viewport object .
+
+    \param origin [in]  The UCS origin (DXF 110).
+    \param xAxis [in]  The UCS X-axis (DXF 111).
+    \param yAxis [in]  The UCS Y-axis (DXF 112).
+    \param orthoUcs [in]  Orthographic view type (DXF 79).
+    \param pDb [in]  Working database. If object is a database resident this parameter is ignored.
+    \param ucsId [in]  Object ID of UCS (DXF 345 or 346).
+
+    orthoUcs must be one of the following:
+    
+    <table>
+    Name                 Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS 
+    OdDb::kTopView        1       Top view with respect to the UCS 
+    OdDb::kBottomView     2       Bottom view with respect to the UCS 
+    OdDb::kFrontView      3       Front view with respect to the UCS 
+    OdDb::kBackView       4       Back view with respect to the UCS 
+    OdDb::kLeftView       5       Left view with respect to the UCS 
+    OdDb::kRightView      6       Right view with respect to the UCS 
+    </table>
+  */
+  void setUcs(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& xAxis, 
+    const OdGeVector3d& yAxis);
+
+  void setUcs(
+    OdDb::OrthographicView orthoUcs,
+    const OdDbDatabase* pDb = 0);
+
+  void setUcs(
+    const OdDbObjectId& ucsId);
+
+  /** \details
+    Sets the UCS associated with this View to the WCS. 
+  */
+  void setUcsToWorld();
+
+  /** \details
+    Sets the elevation of the UCS plane of this View (DXF 146).
+    \param elevation [in]  Elevation.
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this View.
+  */
+  void setElevation(
+    double elevation);
+  
+  // New-2007 API
+
+  OdDbObjectId background() const;
+  void setBackground(const OdDbObjectId& background);
+
+  OdDbObjectId visualStyle() const;
+  void setVisualStyle(const OdDbObjectId& visualStyle);
+
+  bool isDefaultLightingOn() const;
+  void setDefaultLightingOn(bool isOn);
+
+  OdGiViewportTraits::DefaultLightingType defaultLightingType() const;
+  void setDefaultLightingType(OdGiViewportTraits::DefaultLightingType lightingType);
+
+  double brightness() const;
+  void setBrightness(double brightness);
+
+  double contrast() const;
+  void setContrast(double contrast);
+
+  OdCmColor ambientLightColor() const;
+  void setAmbientLightColor(const OdCmColor& color);
+
+  OdDbObjectId sunId() const;
+  OdDbObjectId setSun(OdDbSun* pSun);
+
+  void toneOperatorParameters(OdGiToneOperatorParameters &params) const;
+  void setToneOperatorParameters(const OdGiToneOperatorParameters &params);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual void copyFrom (
+    const OdRxObject* pSource);
+
+  /*
+      bool isViewOrthographic(OdDb::OrthographicView& view) const;
+      void setViewDirection(OdDb::OrthographicView view);
+  */
+
+  virtual OdGiDrawable* drawable();
+
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbViewportTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbAbstractViewTableRecord> OdDbAbstractViewTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBABSTRACTVIEWLTABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportData.h
new file mode 100755
index 0000000..dd3f3dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportData.h
@@ -0,0 +1,370 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBABSTRACTVIEWPORTDATA_H
+#define OD_DBABSTRACTVIEWPORTDATA_H
+
+#include "AbstractViewPE.h"
+#include "Gi/GiViewportTraits.h"
+
+class OdGsView;
+
+/** \details
+    This class is the base class for Protocol Extension classes for OdDbViewport and OdDbViewportTableRecord objects.
+    
+    Library: TD_Db
+    
+    \sa
+    OdDbAbstractViewTableRecord
+
+    \note
+    Only the following objects are supported:
+    
+    *  OdDbViewport
+    *  OdDbViewportTableRecord
+    *  Derivatives of one of the above.
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractViewportData : public OdAbstractViewPE
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAbstractViewportData);
+
+  /** \details
+    Sets the parameters for the specified Viewport object according to the arguments.
+    \param pSourceView [in]  Pointer to the source View object.
+    \param pDestinationView [in]  Pointer to the destination View object
+  */
+  virtual void setProps(OdRxObject* pViewport, const OdRxObject* pSourceView) const;
+
+  // OdAbstractViewPE-inherited methods
+
+  TD_USING(OdAbstractViewPE::setUcs);
+  /** \param pSourceView [in]  Pointer to the source Viewport object.
+    \param pDestinationView [in]  Pointer to the destination Viewport object
+  */
+  virtual void setUcs(OdRxObject* pDestinationView, const OdRxObject* pSourceView) const;
+  /** \details
+  Returns true if and only if there is a view offset associated with the specified Viewport object.
+  \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool hasViewOffset(const OdRxObject* pViewport) const;
+  /** \details
+  Applies plot settings to view.
+  \param pSourceView [in]  Pointer to the source Viewport object.
+  \param pDestinationView [in]  Pointer to the destination Viewport object
+  \remarks
+  Returns true if plot settings was applied successfully.
+  */
+  virtual bool applyPlotSettings(OdRxObject* pDestinationView, const OdRxObject* pSourceView) const;
+
+  //
+
+  /** \details
+    Returns true if and only if the UCS that is associated with the specified Viewport object will become active
+    with activation of the Viewport object.
+
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isUcsSavedWithViewport(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Controls the activation of the UCS that is associated with the specified Viewport object 
+    with the activation of the Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param ucsPerViewport [in]  Controls activation of the UCS.
+  */
+  virtual void setUcsPerViewport( OdRxObject* pViewport, bool ucsPerViewport) const = 0;
+
+  /** \details
+    Returns true if and only if UCS follow mode is on for the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isUcsFollowModeOn(const OdRxObject* pViewport) const = 0;
+
+  /** \details
+    Controls UCS follow mode for the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param ucsFollowMode [in]  Controls UCS follow mode.
+  */
+  virtual void setUcsFollowModeOn(OdRxObject* pViewport, bool ucsFollowMode) const = 0;
+
+  /** \details
+    Returns the circle zoom percent for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \remarks
+    Returns a value in the range [1..20000]
+  */
+  virtual OdUInt16 circleSides(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Sets circle zoom percent for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param circleSides [in]  Circle zoom percent. [1,20000]
+  */
+  virtual void setCircleSides(OdRxObject* pViewport, OdUInt16 circleSides) const = 0;
+
+  /** \details
+    Returns true if and only if the grid is on for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isGridOn(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the grid for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param gridOn [in]  Controls the grid.
+  */
+  virtual void setGridOn(OdRxObject* pViewport, bool gridOn) const = 0;
+
+  /** \details
+    Returns the grid increment for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdGeVector2d gridIncrement(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Sets the grid increment for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param gridIncrement [in]  Grid increment.
+  */
+  virtual void setGridIncrement(OdRxObject* pViewport, const OdGeVector2d& gridIncrement) const = 0;
+
+  /** \details
+    Returns the grid bound to limits flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isGridBoundToLimits(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the grid bound to limits flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param gridDispFlag [in]  Controls the grid bound to limits flag.
+  */
+  virtual void setGridBoundToLimits(OdRxObject* pViewport, bool gridDispFlag) const = 0;
+
+  /** \details
+    Returns the adaptive grid flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isGridAdaptive(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the adaptive grid flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param gridDispFlag [in]  Controls the adaptive grid flag.
+  */
+  virtual void setGridAdaptive(OdRxObject* pViewport, bool gridDispFlag) const = 0;
+
+  /** \details
+    Returns the grid subdivision restricted flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isGridSubdivisionRestricted(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the grid subdivision restricted flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param gridDispFlag [in]  Controls the subdivision restricted grid flag.
+  */
+  virtual void setGridSubdivisionRestricted(OdRxObject* pViewport, bool gridDispFlag) const = 0;
+
+  /** \details
+    Returns the grid follow flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isGridFollow(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the grid follow flag for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param gridDispFlag [in]  Controls the grid follow flag.
+  */
+  virtual void setGridFollow(OdRxObject* pViewport, bool gridDispFlag) const = 0;
+
+  /** \details
+    Returns the major grid lines frequency for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdInt16 gridMajor(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the major grid lines frequency for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param nMajor [in]  Controls the major grid lines frequency.
+  */
+  virtual void setGridMajor(OdRxObject* pViewport, OdInt16 nMajor) const = 0;
+
+  /** \details
+    Returns true if and only if the UCS icon is visible for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isUcsIconVisible(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the UCS icon visibility for the specified Viewport object.
+    
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param iconVisible [in]  Controls the visibility.
+  */
+  virtual void setUcsIconVisible(OdRxObject* pViewport, bool iconVisible) const = 0;
+
+  /** \details
+    Returns true if and only if the UCS icon is at the UCS orgin for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isUcsIconAtOrigin(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the UCS icon display at the UCS orgin for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param atOrigin [in]  Controls the UCS icon.
+    
+    \remarks
+    If atOrigin is true, the UCS icon is at the UCS origin for this Viewport object. If false, it is at the 
+    corner for this Viewport object.
+    
+  */
+  virtual void setUcsIconAtOrigin(OdRxObject* pViewport, bool atOrigin) const = 0;
+
+  /** \details
+    Returns true if and only if the snap mode is on for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isSnapOn(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the snap mode for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param snapOn [in]  Controls snap mode.
+  */
+  virtual void setSnapOn(OdRxObject* pViewport, bool snapOn) const = 0;
+
+  /** \details
+    Returns true if and only if isometric snap style is on for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual bool isSnapIsometric(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Controls the isometric snap style for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param snapIsometric [in]  Controls isometric snap style.
+  */
+  virtual void setSnapIsometric(OdRxObject* pViewport, bool snapIsometric) const = 0;
+
+  /** \details
+    Returns the UCS snap angle for the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual double snapAngle(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Returns the UCS snap angle for the specified Viewport object (DXF 50).
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param snapAngle [in]  Snap angle.
+    \note
+    All angles are expressed in radians.
+  */
+  virtual void setSnapAngle(OdRxObject* pViewport, double snapAngle) const = 0;
+
+  /** \details
+    Returns the UCS snap base point of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdGePoint2d snapBase(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Sets the UCS snap base point of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param snapBase [in]  Snap base.
+  */
+  virtual void setSnapBase(OdRxObject* pViewport, const OdGePoint2d& snapBase) const = 0; 
+
+  /** \details
+    Returns the snap increment of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+  */
+  virtual OdGeVector2d snapIncrement(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Returns the snap increment of the specified Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param snapIncrement [in]  Snap increment.
+  */
+  virtual void setSnapIncrement(OdRxObject* pViewport, const OdGeVector2d& snapIncrement) const = 0;
+
+  /** \details
+    Returns the snap IsoPair of this Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+
+    \remarks
+    snapIsoPair() returns one of the following:
+    
+    <table>
+    Value    Description
+    0        Left isoplane
+    1        Top isoplane
+    2        Right isoplane
+    </table>
+  */
+  virtual OdUInt16 snapIsoPair(const OdRxObject* pViewport) const = 0;
+  /** \details
+    Sets the snap IsoPair of this Viewport object.
+    \param pViewport [in]  Pointer to the Viewport object.
+    \param snapIsoPair [in]  Snap IsoPair
+    \remarks
+    snapIsoPair must be one of the following:
+    
+    <table>
+    Value    Description
+    0        Left isoplane
+    1        Top isoplane
+    2        Right isoplane
+    </table>
+  */
+  virtual void setSnapIsoPair(OdRxObject* pViewport, OdUInt16 snapIsoPair) const = 0;
+
+  virtual bool isDefaultLightingOn(const OdRxObject* pViewport) const = 0;
+  virtual void setDefaultLightingOn(OdRxObject* pViewport, bool isOn) const = 0;
+
+  virtual OdGiViewportTraits::DefaultLightingType defaultLightingType(const OdRxObject* pViewport) const = 0;
+  virtual void setDefaultLightingType(OdRxObject* pViewport, OdGiViewportTraits::DefaultLightingType lightingType) const = 0;
+
+  virtual double brightness(const OdRxObject* pViewport) const = 0;
+  virtual void setBrightness(OdRxObject* pViewport, double brightness) const = 0;
+
+  virtual double contrast(const OdRxObject* pViewport) const = 0;
+  virtual void setContrast(OdRxObject* pViewport, double contrast) const = 0;
+
+  virtual OdCmColor ambientLightColor(const OdRxObject* pViewport) const = 0;
+  virtual void setAmbientLightColor(OdRxObject* pViewport, const OdCmColor& color) const = 0;
+
+  virtual OdDbStub *sunId(const OdRxObject* pViewport) const = 0;
+  virtual OdDbStub *setSun(OdRxObject* pViewport, OdRxObject* pSun) const = 0;
+
+  virtual void toneOperatorParameters(const OdRxObject* pViewport, OdGiToneOperatorParameters &params) const = 0;
+  virtual void setToneOperatorParameters(OdRxObject* pViewport, const OdGiToneOperatorParameters &params) const = 0;
+
+  virtual OdGsView* gsView(const OdRxObject* pViewport) const = 0;
+  virtual void setGsView(OdRxObject* pViewport, OdGsView* pGsView) const = 0;
+
+  virtual int navvcubedisplay(const OdRxObject* pViewport) const;
+  virtual OdResult setNavvcubedisplay(OdRxObject* pViewport, int nVal) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbAbstractViewportData object pointers.
+*/
+typedef OdSmartPtr<OdDbAbstractViewportData> OdDbAbstractViewportDataPtr;
+
+#endif //#ifndef OD_DBABSTRACTVIEWPORTDATA_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForAbstractViewTabRec.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForAbstractViewTabRec.h
new file mode 100755
index 0000000..b9cd746
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForAbstractViewTabRec.h
@@ -0,0 +1,131 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBABSTRACTVIEWPORTDATAFORABSTRACTVIEWTABLEREC_INCLUDED
+#define _ODDBABSTRACTVIEWPORTDATAFORABSTRACTVIEWTABLEREC_INCLUDED
+
+#include "TD_PackPush.h"
+#include "DbAbstractViewportData.h"
+
+/** \details
+    This class is the Protocol Extension class for OdDbViewportTableRecord objects.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractViewportDataForAbstractViewTabRec : public OdDbAbstractViewportData
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAbstractViewportDataForAbstractViewTabRec);
+
+  void setView(
+      OdRxObject* pViewport,
+      const OdGePoint3d& target,
+      const OdGeVector3d& direction,
+      const OdGeVector3d& upVector,
+      double fieldWidth,
+      double fieldHeight,
+      bool isPerspective,
+      const OdGeVector2d& viewOffset = OdGeVector2d::kIdentity) const;
+
+  OdGePoint3d  target(const OdRxObject* pViewport) const;
+  OdGeVector3d direction(const OdRxObject* pViewport) const;
+  OdGeVector3d upVector(const OdRxObject* pViewport) const;
+
+  double fieldWidth(const OdRxObject* pViewport) const;
+  double fieldHeight(const OdRxObject* pViewport) const;
+
+  OdGeVector2d viewOffset(const OdRxObject* pViewport) const;
+
+  double viewTwist(const OdRxObject* pViewport) const;
+
+  bool isPerspective(const OdRxObject* pViewport) const;
+
+  void setLensLength(OdRxObject* pViewport, double lensLength) const;
+  double lensLength(const OdRxObject* pViewport) const;
+
+  bool isFrontClipOn(const OdRxObject* pViewport) const;
+  void setFrontClipOn(OdRxObject* pViewport, bool frontClip) const;
+
+  bool isBackClipOn(const OdRxObject* pViewport) const;
+  void setBackClipOn(OdRxObject* pViewport, bool backClip) const;
+
+  bool isFrontClipAtEyeOn(const OdRxObject* pViewport) const;
+  void setFrontClipAtEyeOn(OdRxObject* pViewport, bool frontClipAtEye) const;
+
+  double frontClipDistance(const OdRxObject* pViewport) const;
+  void setFrontClipDistance(OdRxObject* pViewport, double frontClipDistance) const;
+
+  double backClipDistance(const OdRxObject* pViewport) const;
+  void setBackClipDistance(OdRxObject* pViewport, double backClipDistance) const;
+
+  void setRenderMode(OdRxObject* pViewport, OdDb::RenderMode renderMode) const;
+  OdDb::RenderMode renderMode(const OdRxObject* pViewport) const;
+
+  void setVisualStyle(OdRxObject* pViewport, OdDbStub* visualStyleId) const;
+  OdDbStub* visualStyle(const OdRxObject* pViewport) const;
+
+  void setBackground(OdRxObject* pViewport, OdDbStub* backgroundId) const;
+  OdDbStub* background(const OdRxObject* pViewport) const;
+
+  bool hasUcs(const OdRxObject* pViewport) const;
+  void getUcs(const OdRxObject* pViewport, OdGePoint3d& origin, OdGeVector3d& xAxis, OdGeVector3d& yAxis) const;
+  OdDb::OrthographicView orthoUcs(const OdRxObject* pViewport, const OdDbBaseDatabase* pDb = 0) const;
+  double elevation(const OdRxObject* pViewport) const;
+  void setUcs(OdRxObject* pViewport, const OdGePoint3d& origin, const OdGeVector3d& xAxis, const OdGeVector3d& yAxis) const;
+  bool setUcs(OdRxObject* pViewport, OdDb::OrthographicView orthoUcs, const OdDbBaseDatabase* pDb = 0) const;
+  OdDbStub* ucsName(const OdRxObject* pViewport) const;
+  bool setUcs(OdRxObject* pViewport, OdDbStub* ucsId) const;
+  void setElevation(OdRxObject* pViewport, double elevation) const;
+
+  TD_USING(OdDbAbstractViewportData::setView);
+  TD_USING(OdDbAbstractViewportData::setUcs);
+
+  bool isDefaultLightingOn(const OdRxObject* pViewport) const;
+  void setDefaultLightingOn(OdRxObject* pViewport, bool isOn) const;
+
+  OdGiViewportTraits::DefaultLightingType defaultLightingType(const OdRxObject* pViewport) const;
+  void setDefaultLightingType(OdRxObject* pViewport, OdGiViewportTraits::DefaultLightingType lightingType) const;
+
+  double brightness(const OdRxObject* pViewport) const;
+  void setBrightness(OdRxObject* pViewport, double brightness) const;
+
+  double contrast(const OdRxObject* pViewport) const;
+  void setContrast(OdRxObject* pViewport, double contrast) const;
+
+  OdCmColor ambientLightColor(const OdRxObject* pViewport) const;
+  void setAmbientLightColor(OdRxObject* pViewport, const OdCmColor& color) const;
+
+  OdDbStub *sunId(const OdRxObject* pViewport) const;
+  OdDbStub *setSun(OdRxObject* pViewport, OdRxObject* pSun) const;
+
+  void toneOperatorParameters(const OdRxObject* pViewport, OdGiToneOperatorParameters &params) const;
+  void setToneOperatorParameters(OdRxObject* pViewport, const OdGiToneOperatorParameters &params) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBABSTRACTVIEWPORTDATAFORABSTRACTVIEWTABLEREC_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewTabRec.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewTabRec.h
new file mode 100755
index 0000000..a161288
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewTabRec.h
@@ -0,0 +1,109 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBABSTRACTVIEWPORTDATAFORDBVIEWTABLERECORD_INCLUDED
+#define _ODDBABSTRACTVIEWPORTDATAFORDBVIEWTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbAbstractViewportDataForAbstractViewTabRec.h"
+
+/** \details
+    This class is the Protocol Extension class for OdDbViewTableRecord objects.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAbstractViewportDataForDbViewTabRec : public OdDbAbstractViewportDataForAbstractViewTabRec
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAbstractViewportDataForDbViewTabRec);
+
+  // OdAbstractViewPE
+
+  bool hasUcs(const OdRxObject* pViewport) const;
+
+  bool viewExtents(const OdRxObject* pViewport, OdGeBoundBlock3d& extents) const;
+
+  // OdDbAbstractViewportData
+
+  bool isUcsSavedWithViewport(const OdRxObject* pViewport) const;
+  void setUcsPerViewport( OdRxObject* pViewport, bool ucsPerViewport) const;
+
+  bool isUcsFollowModeOn(const OdRxObject* pViewport) const;
+  void setUcsFollowModeOn(OdRxObject* pViewport, bool ucsFollowMode) const;
+
+  OdUInt16 circleSides(const OdRxObject* pViewport) const;
+  void setCircleSides(OdRxObject* pViewport, OdUInt16 circleSides) const;
+
+  bool isGridOn(const OdRxObject* pViewport) const;
+  void setGridOn(OdRxObject* pViewport, bool gridOn) const;
+
+  OdGeVector2d gridIncrement(const OdRxObject* pViewport) const;
+  void setGridIncrement(OdRxObject* pViewport, const OdGeVector2d& gridIncrement) const;
+
+  bool isGridBoundToLimits(const OdRxObject* pViewport) const;
+  void setGridBoundToLimits(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  bool isGridAdaptive(const OdRxObject* pViewport) const;
+  void setGridAdaptive(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  bool isGridSubdivisionRestricted(const OdRxObject* pViewport) const;
+  void setGridSubdivisionRestricted(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  bool isGridFollow(const OdRxObject* pViewport) const;
+  void setGridFollow(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  OdInt16 gridMajor(const OdRxObject* pViewport) const;
+  void setGridMajor(OdRxObject* pViewport, OdInt16 nMajor) const;
+
+  bool isUcsIconVisible(const OdRxObject* pViewport) const;
+  void setUcsIconVisible(OdRxObject* pViewport, bool iconVisible) const;
+
+  bool isUcsIconAtOrigin(const OdRxObject* pViewport) const;
+  void setUcsIconAtOrigin(OdRxObject* pViewport, bool atOrigin) const;
+
+  bool isSnapOn(const OdRxObject* pViewport) const;
+  void setSnapOn(OdRxObject* pViewport, bool atOrigin) const;
+
+  bool isSnapIsometric(const OdRxObject* pViewport) const;
+  void setSnapIsometric(OdRxObject* pViewport, bool snapIsometric) const;
+
+  double snapAngle(const OdRxObject* pViewport) const;
+  void setSnapAngle(OdRxObject* pViewport, double snapAngle) const;
+
+  OdGePoint2d snapBase(const OdRxObject* pViewport) const;
+  void setSnapBase(OdRxObject* pViewport, const OdGePoint2d& snapBase) const; 
+
+  OdGeVector2d snapIncrement(const OdRxObject* pViewport) const;
+  void setSnapIncrement(OdRxObject* pViewport, const OdGeVector2d& snapIncrement) const;
+
+  OdUInt16 snapIsoPair(const OdRxObject* pViewport) const;
+  void setSnapIsoPair(OdRxObject* pViewport, OdUInt16 snapIncrement) const;
+
+  OdGsView* gsView(const OdRxObject* pViewport) const;
+  void setGsView(OdRxObject* pViewport, OdGsView* pGsView) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBABSTRACTVIEWPORTDATAFORDBVIEWTABLERECORD_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewport.h
new file mode 100755
index 0000000..9edce19
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbViewport.h
@@ -0,0 +1,199 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_ABSTRACTVIEWPORTDATAFORDBVIEWPORT_
+#define _OD_DB_ABSTRACTVIEWPORTDATAFORDBVIEWPORT_
+
+#include "TD_PackPush.h"
+
+#include "DbAbstractViewportData.h"
+
+/** \details
+    This class is the Protocol Extension class for OdDbViewport objects.
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAbstractViewportDataForDbViewport : public OdDbAbstractViewportData
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAbstractViewportDataForDbViewport);
+
+  void setView(
+      OdRxObject* pViewport,
+      const OdGePoint3d& target,
+      const OdGeVector3d& direction,
+      const OdGeVector3d& upVector,
+      double fieldWidth,
+      double fieldHeight,
+      bool perspective,
+      const OdGeVector2d& viewOffset = OdGeVector2d::kIdentity) const;
+
+  OdGePoint3d  target  (const OdRxObject* pViewport) const;
+  OdGeVector3d direction(const OdRxObject* pViewport) const;
+  OdGeVector3d upVector(const OdRxObject* pViewport) const;
+
+  double fieldWidth(const OdRxObject* pViewport) const;
+  double fieldHeight(const OdRxObject* pViewport) const;
+
+  OdGeVector2d viewOffset(const OdRxObject* pViewport) const;
+
+  double viewTwist(const OdRxObject* pViewport) const;
+
+  bool isPerspective(const OdRxObject* pViewport) const;
+
+  void setLensLength(OdRxObject* pViewport, double lensLength) const;
+  double lensLength(const OdRxObject* pViewport) const;
+
+  bool isFrontClipOn(const OdRxObject* pViewport) const;
+  void setFrontClipOn(OdRxObject* pViewport, bool frontClip) const;
+
+  bool isBackClipOn(const OdRxObject* pViewport) const;
+  void setBackClipOn(OdRxObject* pViewport, bool backClip) const;
+
+  bool isFrontClipAtEyeOn(const OdRxObject* pViewport) const;
+  void setFrontClipAtEyeOn(OdRxObject* pViewport, bool frontClipAtEye) const;
+
+  double frontClipDistance(const OdRxObject* pViewport) const;
+  void setFrontClipDistance(OdRxObject* pViewport, double frontClipDistance) const;
+
+  double backClipDistance(const OdRxObject* pViewport) const;
+  void setBackClipDistance(OdRxObject* pViewport, double backClipDistance) const;
+
+  void setRenderMode(OdRxObject* pViewport, OdDb::RenderMode mode) const;
+  OdDb::RenderMode renderMode(const OdRxObject* pViewport) const;
+
+  void setVisualStyle(OdRxObject* pViewport, OdDbStub* visualStyleId) const;
+  OdDbStub* visualStyle(const OdRxObject* pViewport) const;
+
+  void setBackground(OdRxObject* pViewport, OdDbStub* backgroundId) const;
+  OdDbStub* background(const OdRxObject* pViewport) const;
+
+  void frozenLayers(const OdRxObject* pViewport, OdDbStubPtrArray& frozenLayers) const;
+  void setFrozenLayers(OdRxObject* pViewport, const OdDbStubPtrArray& frozenLayers) const;
+
+  bool hasUcs(const OdRxObject* pViewport) const;
+  void getUcs(const OdRxObject* pViewport, OdGePoint3d& origin, OdGeVector3d& xAxis, OdGeVector3d& yAxis) const;
+  OdDb::OrthographicView orthoUcs(const OdRxObject* pViewport, const OdDbBaseDatabase* pDb = 0) const;
+  OdDbStub* ucsName(const OdRxObject* pViewport) const;
+  double elevation(const OdRxObject* pViewport) const;
+  void setUcs(OdRxObject* pViewport, const OdGePoint3d& origin, const OdGeVector3d& xAxis, const OdGeVector3d& yAxis) const;
+  bool setUcs(OdRxObject* pViewport, OdDb::OrthographicView orthoUcs, const OdDbBaseDatabase* pDb = 0) const;
+  bool setUcs(OdRxObject* pViewport, OdDbStub* ucsId) const;
+  void setUcsToWorld(OdRxObject* pViewport) const;
+  void setElevation(OdRxObject* pViewport, double elevation) const;
+
+  bool viewExtents(const OdRxObject* pViewport, OdGeBoundBlock3d& extents) const;
+  bool plotExtents(const OdRxObject* pViewport, OdGeBoundBlock3d& extents, bool bExtendOnly = false,
+                   bool bExtentsValid = true, const OdGeMatrix3d *pWorldToEye = NULL) const;
+
+  OdRxObjectPtr plotDataObject(const OdRxObject* pViewport, bool bOpenForWrite = false) const;
+
+  OdDbStub *annotationScale(const OdRxObject* pViewport) const;
+
+  // OdDbAbstractViewportData
+
+  bool isUcsSavedWithViewport(const OdRxObject* pViewport) const;
+  void setUcsPerViewport( OdRxObject* pViewport, bool ucsPerViewport) const;
+
+  bool isUcsFollowModeOn(const OdRxObject* pViewport) const;
+  void setUcsFollowModeOn(OdRxObject* pViewport, bool ucsFollowMode) const;
+
+  OdUInt16 circleSides(const OdRxObject* pViewport) const;
+  void setCircleSides(OdRxObject* pViewport, OdUInt16 circleSides) const;
+
+  bool isGridOn(const OdRxObject* pViewport) const;
+  void setGridOn(OdRxObject* pViewport, bool gridOn) const;
+
+  OdGeVector2d gridIncrement(const OdRxObject* pViewport) const;
+  void setGridIncrement(OdRxObject* pViewport, const OdGeVector2d& gridIncrement) const;
+
+  bool isGridBoundToLimits(const OdRxObject* pViewport) const;
+  void setGridBoundToLimits(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  bool isGridAdaptive(const OdRxObject* pViewport) const;
+  void setGridAdaptive(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  bool isGridSubdivisionRestricted(const OdRxObject* pViewport) const;
+  void setGridSubdivisionRestricted(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  bool isGridFollow(const OdRxObject* pViewport) const;
+  void setGridFollow(OdRxObject* pViewport, bool gridDispFlag) const;
+
+  OdInt16 gridMajor(const OdRxObject* pViewport) const;
+  void setGridMajor(OdRxObject* pViewport, OdInt16 nMajor) const;
+
+  bool isUcsIconVisible(const OdRxObject* pViewport) const;
+  void setUcsIconVisible(OdRxObject* pViewport, bool bVisible) const;
+
+  bool isUcsIconAtOrigin(const OdRxObject* pViewport) const;
+  void setUcsIconAtOrigin(OdRxObject* pViewport, bool bAtOrigin) const;
+
+  bool isSnapOn(const OdRxObject* pViewport) const;
+  void setSnapOn(OdRxObject* pViewport, bool iconVisible) const;
+
+  bool isSnapIsometric(const OdRxObject* pViewport) const;
+  void setSnapIsometric(OdRxObject* pViewport, bool snapIsometric) const;
+
+  double snapAngle(const OdRxObject* pViewport) const;
+  void setSnapAngle(OdRxObject* pViewport, double snapAngle) const;
+
+  OdGePoint2d snapBase(const OdRxObject* pViewport) const;
+  void setSnapBase(OdRxObject* pViewport, const OdGePoint2d& snapBase) const; 
+
+  OdGeVector2d snapIncrement(const OdRxObject* pViewport) const;
+  void setSnapIncrement(OdRxObject* pViewport, const OdGeVector2d&) const;
+
+  OdUInt16 snapIsoPair(const OdRxObject* pViewport) const;
+  void setSnapIsoPair(OdRxObject* pViewport, OdUInt16 snapIsoPair) const;
+
+  bool isDefaultLightingOn(const OdRxObject* pViewport) const;
+  void setDefaultLightingOn(OdRxObject* pViewport, bool isOn) const;
+
+  OdGiViewportTraits::DefaultLightingType defaultLightingType(const OdRxObject* pViewport) const;
+  void setDefaultLightingType(OdRxObject* pViewport, OdGiViewportTraits::DefaultLightingType lightingType) const;
+
+  double brightness(const OdRxObject* pViewport) const;
+  void setBrightness(OdRxObject* pViewport, double brightness) const;
+
+  double contrast(const OdRxObject* pViewport) const;
+  void setContrast(OdRxObject* pViewport, double contrast) const;
+
+  OdCmColor ambientLightColor(const OdRxObject* pViewport) const;
+  void setAmbientLightColor(OdRxObject* pViewport, const OdCmColor& color) const;
+
+  OdDbStub *sunId(const OdRxObject* pViewport) const;
+  OdDbStub *setSun(OdRxObject* pViewport, OdRxObject* pSun) const;
+
+  void toneOperatorParameters(const OdRxObject* pViewport, OdGiToneOperatorParameters &params) const;
+  void setToneOperatorParameters(OdRxObject* pViewport, const OdGiToneOperatorParameters &params) const;
+
+  OdGsView* gsView(const OdRxObject* pViewport) const;
+  void setGsView(OdRxObject* pViewport, OdGsView* pGsView) const;
+
+  TD_USING(OdDbAbstractViewportData::setView);
+  TD_USING(OdDbAbstractViewportData::setUcs);
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbVpTabRec.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbVpTabRec.h
new file mode 100755
index 0000000..34a7ec1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAbstractViewportDataForDbVpTabRec.h
@@ -0,0 +1,116 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBABSTRACTVIEWPORTDATAFORDBVPTABLERECORD_INCLUDED
+#define _ODDBABSTRACTVIEWPORTDATAFORDBVPTABLERECORD_INCLUDED
+
+#include "DbAbstractViewportDataForAbstractViewTabRec.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Library: TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbAbstractViewportDataForDbVpTabRec : public OdDbAbstractViewportDataForAbstractViewTabRec
+{
+public:
+  ODRX_DECLARE_MEMBERS( OdDbAbstractViewportDataForDbVpTabRec );
+
+  OdGePoint2d lowerLeftCorner(const OdRxObject* pVpFrom) const;
+  OdGePoint2d upperRightCorner(const OdRxObject* pVpFrom) const;
+  void setViewport(OdRxObject* pVpTo, const OdGePoint2d& lowerLeft, const OdGePoint2d& upperRight) const;
+  bool hasViewport(const OdRxObject* pVpFrom) const;
+
+  bool viewExtents(const OdRxObject* pVp, OdGeBoundBlock3d& extents) const;
+
+  bool hasUcs(const OdRxObject* pVpFrom) const;
+  void getUcs(const OdRxObject* pVpFrom, OdGePoint3d& origin, OdGeVector3d& xAxis, OdGeVector3d& yAxis) const;
+  OdDb::OrthographicView orthoUcs(const OdRxObject* pVpFrom) const;
+  OdDbStub* ucsName(const OdRxObject* pVpFrom) const;
+  double elevation(const OdRxObject* pVpFrom) const;
+
+  bool isUcsSavedWithViewport(const OdRxObject* pVpFrom) const;
+  void setUcsPerViewport( OdRxObject* pVpTo, bool ucsvp ) const;
+
+  bool isUcsFollowModeOn(const OdRxObject* pVpFrom) const;
+  void setUcsFollowModeOn(OdRxObject* pVpTo, bool bOn) const;
+
+  OdUInt16 circleSides(const OdRxObject* pVpFrom) const;
+  void setCircleSides(OdRxObject* pVpTo, OdUInt16) const;
+
+  bool isGridOn(const OdRxObject* pVpFrom) const;
+  void setGridOn(OdRxObject* pVpTo, bool bOn) const;
+
+  OdGeVector2d gridIncrement(const OdRxObject* pVpFrom) const;
+  void setGridIncrement(OdRxObject* pVpTo, const OdGeVector2d&) const;
+
+  bool isGridBoundToLimits(const OdRxObject* pVpFrom) const;
+  void setGridBoundToLimits(OdRxObject* pVpTo, bool gridDispFlag) const;
+
+  bool isGridAdaptive(const OdRxObject* pVpFrom) const;
+  void setGridAdaptive(OdRxObject* pVpTo, bool gridDispFlag) const;
+
+  bool isGridSubdivisionRestricted(const OdRxObject* pVpFrom) const;
+  void setGridSubdivisionRestricted(OdRxObject* pVpTo, bool gridDispFlag) const;
+
+  bool isGridFollow(const OdRxObject* pVpFrom) const;
+  void setGridFollow(OdRxObject* pVpTo, bool gridDispFlag) const;
+
+  OdInt16 gridMajor(const OdRxObject* pVpFrom) const;
+  void setGridMajor(OdRxObject* pVpTo, OdInt16 nMajor) const;
+
+  bool isUcsIconVisible(const OdRxObject* pVpFrom) const;
+  void setUcsIconVisible(OdRxObject* pVpTo, bool bVisible) const;
+
+  bool isUcsIconAtOrigin(const OdRxObject* pVpFrom) const;
+  void setUcsIconAtOrigin(OdRxObject* pVpTo, bool bAtOrigin) const;
+
+  bool isSnapOn(const OdRxObject* pVpFrom) const;
+  void setSnapOn(OdRxObject* pVpTo, bool bOn) const;
+
+  bool isSnapIsometric(const OdRxObject* pVpFrom) const;
+  void setSnapIsometric(OdRxObject* pVpTo, bool bIsometric) const;
+
+  double snapAngle(const OdRxObject* pVpFrom) const;
+  void setSnapAngle(OdRxObject* pVpTo, double) const;
+
+  OdGePoint2d snapBase(const OdRxObject* pVpFrom) const;
+  void setSnapBase(OdRxObject* pVpTo, const OdGePoint2d&) const; 
+
+  OdGeVector2d snapIncrement(const OdRxObject* pVpFrom) const;
+  void setSnapIncrement(OdRxObject* pVpTo, const OdGeVector2d&) const;
+
+  OdUInt16 snapIsoPair(const OdRxObject* pVpFrom) const;
+  void setSnapIsoPair(OdRxObject* pVpTo, OdUInt16) const;
+
+  OdGsView* gsView(const OdRxObject* pViewport) const;
+  void setGsView(OdRxObject* pViewport, OdGsView* pGsView) const;
+
+  OdRxObjectPtr plotDataObject(const OdRxObject* pViewport, bool bOpenForWrite = false) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBABSTRACTVIEWPORTDATAFORDBVPTABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAcisIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAcisIO.h
new file mode 100755
index 0000000..ff25c7b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAcisIO.h
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDB_ACISIO_INCLUDED_
+#define _ODDB_ACISIO_INCLUDED_
+
+#include "ModelerGeometry.h"
+
+class OdDbDwgFiler;
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDbAcisIO
+{
+  TOOLKIT_EXPORT void readAcisData(OdDbDwgFiler* pFiler, OdModelerGeometryPtr& pAcisData, bool bStandardSaveFlag = true);
+  TOOLKIT_EXPORT bool writeAcisData(OdDbDwgFiler* pFiler, OdModelerGeometry* pAcisData, bool bStandardSaveFlag = true);
+};
+
+#endif // _ODDB_ACISIO_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAlignedDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAlignedDimension.h
new file mode 100755
index 0000000..3628272
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAlignedDimension.h
@@ -0,0 +1,149 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_ALIGNED_DIMENSION_
+#define _OD_DB_ALIGNED_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents Aligned Dimension entities in an OdDbDatabase instance.
+
+    \remarks
+    An Aligned Dimension entity dimensions the distance between between any two points in space.
+    The normal of the Dimension entity must be perpendicular to the line between said points. 
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAlignedDimension : public OdDbDimension
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbAlignedDimension);
+  
+  OdDbAlignedDimension();
+  
+  /** \details
+    Returns the WCS start point of the first extension line of this Dimension entity (DXF 13).
+  */
+  OdGePoint3d xLine1Point() const;
+
+  /** \details
+    Sets the WCS start point of the first extension line of this Dimension entity (DXF 13).
+  
+    \param xLine1Point [in]  Start point.
+  */
+  void setXLine1Point(
+    const OdGePoint3d& xLine1Point);
+
+  /** \details
+    Returns the WCS start point of the second extension line of this Dimension entity (DXF 14).
+  */
+  OdGePoint3d xLine2Point() const;
+
+  /** \details
+    Sets the WCS start point of the second extension line of this Dimension entity (DXF 14).
+  
+    \param xLine2Point [in]  Start point.
+  */
+  void setXLine2Point(
+    const OdGePoint3d& xLine2Point);
+  
+  /** \details
+    Returns the WCS point defining the location of dimension line for this Dimension entity (DXF 10).
+  */
+  OdGePoint3d dimLinePoint() const;
+
+  /** \details
+    Sets the WCS point defining the location of dimension line for this Dimension entity (DXF 10).
+    
+    \param dimLinePoint [in]  Dimension line point.
+  */
+  void setDimLinePoint(
+    const OdGePoint3d& dimLinePoint);
+  
+  /** \details
+    Returns the obliquing angle for this Dimension entity (DXF 52).
+    
+    \note
+    All angles are expressed in radians.
+  */
+  double oblique() const;
+
+  /** \details
+    Sets the obliquing angle for this Dimension entity (DXF 52).
+    
+    \param oblique [in]  Obliquing angle.
+    
+    \note
+    All angles are expressed in radians.
+  */
+  void setOblique(
+    double oblique);
+
+  bool jogSymbolOn() const;
+  void setJogSymbolOn(bool value);
+
+  OdGePoint3d jogSymbolPosition() const;
+  void setJogSymbolPosition(const OdGePoint3d& pt);
+
+  double jogSymbolHeight();
+  void setJogSymbolHeight(double value);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbAlignedDimension object pointers.
+*/
+typedef OdSmartPtr<OdDbAlignedDimension> OdDbAlignedDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotationScale.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotationScale.h
new file mode 100755
index 0000000..67ecb71
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotationScale.h
@@ -0,0 +1,206 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_ANNOTATIONSCALE_H_INCLUDED
+#define ODDB_ANNOTATIONSCALE_H_INCLUDED
+
+#include "DbObjectContext.h"
+#include "TD_PackPush.h"
+
+class OdDbAnnotationScaleImpl;
+class OdDbAnnotationScaleViewImpl;
+
+////////////////////////////////////////////////////////////////////////
+// class OdDbAnnotationScale
+////////////////////////////////////////////////////////////////////////
+
+/** \details
+    This class defines an annotation scale as a context object.
+    
+    \remarks
+    The context is the current viewport scale which can determine the properties
+	of annotations in the viewport. You can get objects of this class using the 
+	OdDbAnnotationScale context collection. An annotation scale is the ratio of paper 
+	units to drawing units, for example, 1 mm to 1 meter for a scale of 0.01.
+       
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAnnotationScale : public OdDbObjectContext
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAnnotationScale);
+
+  /** \details
+    Returns the name of the annotation scale object.
+  
+	\remarks
+	Because the name of the application scale object can change, access 
+	the annotation scale object using its ID, which is unique and
+	does not change.
+  */
+  virtual OdString getName() const;
+ 
+  /** \details
+    Sets the name of the annotation scale object.
+  
+	\param name [in]  Name of the annotation scale object.
+
+	\remarks
+	Because the name of the application scale object can change, access 
+	the annotation scale object using its ID, which is unique and
+	does not change.
+  */
+  virtual OdResult setName (const OdString& name);
+
+ /** \details
+    Returns the ID of the annotation scale.
+
+	\remarks
+	The ID of the annotation scale is unique and does not change.
+ */
+  virtual OdIntPtr uniqueIdentifier () const;
+
+  /** \details
+    Returns the name of the context collection (OdDbContextCollection) in which 
+	the annotation scale is stored.
+  */
+  virtual OdString collectionName () const;
+
+   /** \details
+    Copies the contents of the specified annotation scale into this object when possible.
+   */
+  virtual void copyFrom(const OdRxObject* pSource);
+
+   /** \details
+    Returns the paper units value of the annotation scale.
+ 
+	\remarks
+	An annotation scale is the ratio of paper units to drawing units. If
+	an annotation scale is 1 mm to 1 meter, the paper units value
+	is 1.0.
+   */
+    virtual double getPaperUnits() const;
+  
+   /** \details
+    Sets the paper units value of the annotation scale.
+  
+	\param dPaperUnits [in]  The paper units value for the annotation scale must be greater
+	than zero.
+ 
+	\remarks
+	An annotation scale is the ratio of paper units to drawing units. If
+	an annotation scale is 1 mm to 1 meter, the paper units value
+	is 1.0.
+   */
+    virtual OdResult setPaperUnits (double dPaperUnits);
+
+  /** \details
+    Returns the drawing units value of the annotation scale.
+ 
+	\remarks
+	An annotation scale is the ratio of paper units to drawing units. If
+	an annotation scale is 1 mm to 1 meter, the drawing units value
+	is 100.0.
+  */
+    virtual double getDrawingUnits () const;
+
+  /** \details
+    Sets the drawing units value of the annotation scale.
+  
+	\param dDrawingUnits [in]  The drawing units value for the annotation scale must
+	be greater than zero.
+
+	\remarks
+	An annotation scale is the ratio of paper units to drawing units. If
+	an annotation scale is 1 mm to 1 meter, the drawing units value
+	is 100.0.
+  */
+    virtual OdResult setDrawingUnits (double dDrawingUnits);
+
+  /** \details
+    Returns the annotation scale factor.
+  
+	\remarks
+	An annotation scale is the ratio of paper units to drawing units. If
+	an annotation scale is 1 mm to 1 meter, the scale factor is 0.01.
+  */
+    virtual OdResult getScale (double& dScale) const;
+
+  /** \details
+    Returns whether annotation scales are stored temporarily in the drawing.
+
+	\remarks
+	Temporary annotation scales are not saved with drawings. They exist
+	when an Xref object with its own annotation scale is attached to a drawing.
+	If the Xref object is detached from the drawing, its corresponding temporary
+	annotation scale is removed.
+  */
+    virtual bool getIsTemporaryScale() const;
+
+   /** \details
+    Returns whether a specified ID matches the annotation scale ID.
+  
+	\param id [in]  The ID to compare with the annotation scale ID.
+ 
+	\remarks
+	This function is typically used if an Xref object that has its own annotation
+	scale is attached to a drawing. Because the annotation scale used by the Xref
+	object may be the same as the annotation scale used by the source drawing,
+	this function is used to determine which annotation scale is being referenced.
+	When referencing an annotation scale that you want saved in the drawing, do not
+	reference the annotation scale of the Xref object since it is temporary and
+	will be removed if the Xref object is detached or removed from the drawing.
+   */
+    virtual bool matchScaleId(OdIntPtr id) const;
+protected:
+  OdDbAnnotationScale(OdDbAnnotationScaleImpl*);
+  OdDbAnnotationScaleImpl* m_pImpl;
+  friend class OdDbAnnotationScaleImpl;
+};
+
+/** \details
+    Teigha internal use only.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAnnotationScaleView : public OdDbAnnotationScale
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAnnotationScaleView);
+  OdString collectionName() const;
+protected:
+  OdDbAnnotationScaleView(OdDbAnnotationScaleViewImpl*);
+  friend class OdDbAnnotationScaleViewImpl;
+};
+
+#include "TD_PackPop.h"
+
+typedef OdSmartPtr<OdDbAnnotationScale>OdDbAnnotationScalePtr;
+
+#endif //ODDB_ANNOTATIONSCALE_H_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotativeObjectPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotativeObjectPE.h
new file mode 100755
index 0000000..7d4a44e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAnnotativeObjectPE.h
@@ -0,0 +1,143 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBANNOTATIVEOBJECTPE_H_INCLUDED_
+#define _DBANNOTATIVEOBJECTPE_H_INCLUDED_
+
+#include "RxObject.h"
+
+class OdDbViewport;
+
+/** \details
+    This class must be implemented for objects that use annotation scaling.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAnnotativeObjectPE : public OdRxObject
+{
+public:
+
+  ODRX_DECLARE_MEMBERS(OdDbAnnotativeObjectPE);
+
+  /** \details
+    Returns whether a specified object supports annotation scaling.
+  
+	\param pObject [in]  Pointer to the object.
+  */
+    virtual bool annotative(const OdDbObject* pObject) const = 0;
+
+  /** \details
+    Sets whether an object supports annotation scaling.
+  
+	\param pObject [in]  Pointer to the object.
+	\param bAnnotative [in]  The annotative property value.
+
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+  */
+    virtual OdResult setAnnotative( 
+    OdDbObject* pObject,
+    bool bAnnotative ) = 0;
+
+   /** \details
+    Sets the annotative property of an object according to its corresponding
+	style, such as styles of text objects.
+  
+	\param pObject [in]  Pointer to the object.
+	\param bUpdated [out]  Returns True if the annotative property changes.
+
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+   */
+    virtual OdResult setFromStyle(
+    OdDbObject* pObject, 
+    bool&       bUpdated) = 0;
+
+   /** \details
+    Not implemented. Returns whether the specified object is set to
+	display regardless of the ANNOALLVISIBLE system variable setting.
+   */
+     virtual bool forceAnnoAllVisible(const OdDbObject* /*pObject*/) const { return false;} ;
+
+   /** \details
+    Not implemented. Sets whether the specified object displays regardless
+	of the ANNOALLVISIBLE system variable setting.
+   */
+    virtual OdResult setForceAnnoAllVisible(OdDbObject* /*pObj*/, bool /*bForce*/) const {return eNotImplemented;}
+
+   /** \details
+    Not implemented.
+   */
+    virtual OdResult resetScaleDependentProperties(OdDbObject* /*pObject*/) {return eNotImplemented;}
+};
+typedef OdSmartPtr<OdDbAnnotativeObjectPE> OdDbAnnotativeObjectPEPtr;
+
+   /** \details
+    This class is a Protocol Extension class for objects, such as annotative objects,
+	that support a paper orientation property.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+   */
+class TOOLKIT_EXPORT OdDbPaperOrientationPE : public OdRxObject
+{
+public:
+
+  ODRX_DECLARE_MEMBERS(OdDbPaperOrientationPE);
+
+   /** \details
+    Returns whether the specified object is currently oriented with the paper.
+  
+	\param pObject [in]  Pointer to the object that supports the paper orientation property.
+   */
+    virtual bool paperOrientation(OdDbObject* pObject) const = 0;
+
+   /** \details
+    Sets the paper orientation property of a specified object.
+  
+	\param pObject [in]  Pointer to the object that supports the paper orientation property.
+	\param bPaperOrientation [in]  Value of the paper orientation property.
+
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+   */
+    virtual OdResult setPaperOrientation( 
+    OdDbObject* pObject,
+    const bool  bPaperOrientation ) = 0;
+
+   /** \details
+    Not implemented.
+   */
+    virtual OdResult applyPaperOrientationTransform ( 
+    OdDbObject* /*pObject*/,
+    const OdDbViewport* /*pVport*/ ) const
+  { return eNotImplemented; }
+};
+typedef OdSmartPtr<OdDbPaperOrientationPE> OdDbPaperOrientationPEPtr;
+
+#endif //_DBANNOTATIVEOBJECTPE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAppEntityGrips.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAppEntityGrips.h
new file mode 100755
index 0000000..3b1f408
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAppEntityGrips.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DBAPPENTITYGRIPS_H_
+#define _OD_DBAPPENTITYGRIPS_H_
+
+#include "RxProtocolReactor.h"
+#include "DbGrip.h"
+#include "DbEntity.h"
+
+/** \details
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAppEntityGrips : public OdRxProtocolReactor
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAppEntityGrips);
+
+  virtual OdResult getGripPoints(OdDbGripDataPtrArray& grips, const double curViewUnitSize, 
+    const int gripSize, const OdGeVector3d& curViewDir, const int bitflags, OdDbEntity* pEntity) = 0;
+
+  virtual OdResult moveGripPointsAt(const OdDbVoidPtrArray& gripAppData, const OdGeVector3d& offset, 
+    const int bitflags, OdDbEntity* pEntity) = 0;
+
+  virtual void gripStatus(const OdDb::GripStat status, OdDbEntity* pEntity) = 0;
+};
+
+/** \details
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlockInsertionPoints : public OdRxProtocolReactor
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBlockInsertionPoints);
+  virtual OdResult getInsertionPoints(const OdDbBlockTableRecord* pBlock, const OdDbBlockReference*   pBlkRef,
+    OdGePoint3dArray& insPts, OdGeVector3dArray& alignmentDirections) = 0;
+};
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArc.h
new file mode 100755
index 0000000..308f0e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArc.h
@@ -0,0 +1,574 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_ARC_
+#define _OD_DB_ARC_
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /circular arc/ object (Arc entity) in the database. This class 
+  inherits the base functionality of entities. An arc is a circular segment in world space.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+  \sa
+  <link db_circular_arc.html, Working with Circular Arcs>
+
+  OdDbCircle, OdDbEllipse classes
+*/
+class TOOLKIT_EXPORT OdDbArc : public OdDbCurve
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbArc);
+
+  /** \details
+    Builds an instance of the /circular arc/ object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_circular_arc_overview.html, Overview of Circular Arcs>
+  */
+  OdDbArc();
+
+
+  /** \details
+    Returns the WCS coordinates of the arc center (DXF 10) as three-dimensional point instance.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::setCenter() method
+  */
+  OdGePoint3d center() const;
+
+
+  /** \details
+    Sets the center point of the circular arc (DXF 10) in WCS. The initial value is  
+    (0,0,0) by default.
+    
+    \param center [in]  Three-dimensional point instance to set the center.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::center() method
+  */
+  void setCenter( const OdGePoint3d& center );
+
+
+  /** \details
+    Returns the radius of the circular arc (DXF 40).
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::setRadius() method
+  */
+  double radius() const;
+
+
+  /** \details
+    Sets the radius of the circular arc (DXF 40). The initial value is 0.0 by default.
+
+    \param radius [in]  Radius as a Double value.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::radius() method
+  */
+  void setRadius( double radius );
+
+
+  /** \details
+    Returns the start angle of the circular arc in radians (DXF 50).
+
+    \remarks
+    The angle is measured counterclockwise from the OCS X-axis.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::setStartAngle(), OdDbArc::endAngle() methods
+  */
+  double startAngle() const;
+
+
+  /** \details
+    Sets the start angle of the circular arc in the range �2PI radians (DXF 50).
+    A positive value specifies the angle measured from the OCS X-axis counterclockwise. 
+    A negative value specifies the angle measured from the OCS X-axis clockwise. 
+    The initial value is zero by default.
+
+    \param startAngle [in]  Start angle as a Double value.
+    
+    \remarks
+    If an angle value is negative, this method automatically converts it to the positive 
+    equivalent. If an angle value is more than 2PI, this method automatically convertes 
+    it to the range 0 to 2PI.    
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::startAngle(), OdDbArc::setEndAngle() methods
+  */
+  void setStartAngle( double startAngle );
+
+
+  /** \details
+    Returns the end angle of the circular arc in radians (DXF 51).
+
+    \remarks
+    The angle is measured counterclockwise from the OCS X-axis.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::setEndAngle(), OdDbArc::startAngle() methods
+  */
+  double endAngle() const;
+
+
+  /** \details
+    Sets the end angle of the circular arc in the range �2PI radians (DXF 51).
+    A positive value specifies the angle measured from the OCS X-axis counterclockwise. 
+    A negative value specifies the angle measured from the OCS X-axis clockwise. 
+    The initial value is zero by default.
+
+    \param endAngle [in]  End angle as a Double value.
+
+    \remarks
+    If an angle value is negative, this method automatically converts it to the positive 
+    equivalent. If an angle value is more than 2PI, this method automatically convertes 
+    it to the range 0 to 2PI.    
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::endAngle(), OdDbArc::setStartAngle() methods
+  */
+  void setEndAngle( double endAngle );
+
+
+  /** \details
+    Returns the thickness of the circular arc entity (DXF 39) in drawing units. Thickness  
+    is the extrusion length along the normal. A positive value defines the thickness to 
+    be drawn along the normal direction. A negative value defines the thickness to be 
+    drawn in the opposite direction from the normal. A zero value defines an arc without 
+    thickness.
+    
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::setThickness() method
+  */
+  double thickness() const;
+
+
+  /** \details
+    Sets the thickness of the circular arc entity (DXF 39) in drawing units. Thickness is  
+    the extrusion length along the normal. A positive value extrudes along the normal. 
+    A negative value extrudes opposite from the normal. A zero value defines an arc without 
+    thickness. The initial value is zero by default.
+
+    \param vThickness [in]  Thickness as a Double value.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::thickness() method
+  */
+  void setThickness( double vThickness );
+
+
+  /** \details
+    Returns the WCS unit vector which is the normal to the plane of the circular arc  
+    entity (DXF 210). The normal defines the orientation of the arc plane in world space.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::setNormal() method
+  */
+  OdGeVector3d normal() const;
+
+
+  /** \details
+    Sets the WCS normal to the plane of the circular arc entity (DXF 210). The normal defines 
+    the orientation of the arc plane in world space. The initial value is (0,0,1) by default.
+
+    \param geVector [in]  Three-dimensional vector instance to set the normal.
+
+    \remarks
+    This method automatically converts the specified vector to the unit vector.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_specific.html, Specific Circular Arc Properties>
+
+    OdDbArc::normal() method
+  */
+  void setNormal( const OdGeVector3d& geVector );
+
+
+  /** \details
+  Returns the entity coordinate system matrix.
+  */
+  OdGeMatrix3d getEcs( ) const;
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm, 
+    OdDbEntityPtr& pCopy) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+
+  /** \details
+    Determines whether the circular arc entity is planar as a Boolean value and returns True.
+    This method is inherited from the OdDbEntity class.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc.html, Working with Circular Arcs>
+
+    OdDbArc::getPlane(), OdDbEntity::isPlanar() methods
+  */
+  virtual bool isPlanar() const;
+
+
+  /** \details
+    Gets a plane in which the circular arc entity places. This method is inherited from the  
+    OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the plane parameters as 
+                a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type
+                    (returns kPlanar - planar entity).
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc.html, Working with Circular Arcs>
+
+    OdDbCircle::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  /** \details
+    Gets the start parameter value. The start parameter equals equals the start angle.
+    Parameter is an angle measured counterclockwise from the OCS X-axis in the range 
+    0 to 2PI radians.
+
+    \param startParam [out]  Reference to a variable in which this method must save the start    
+                   parameter value as a Double value in radians.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getStartParam( double& startParam ) const;
+
+
+  /** \details
+    Gets the end parameter value. The end parameter equals the end angle.
+    Parameter is an angle measured counterclockwise from the OCS X-axis in the range 
+    0 to 2PI radians.
+
+    \param endParam [out]  Reference to a variable in which this method must save the end    
+                 parameter value as a Double value in radians.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getEndParam( double& endParam ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the start point on the circular arc for which  
+    the parameter equals the start angle.
+
+    \param startPoint [out]  Reference to a variable in which this method must save the start 
+                   point as three-dimensional point instance.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getStartPoint( OdGePoint3d& startPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the end point on the circular arc for which the  
+    parameter equals the end angle.
+
+    \param endPoint [out]  Reference to a variable in which this method must save the end  
+                 point as three-dimensional point instance.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getEndPoint( OdGePoint3d& endPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the point on the circular arc at the specified 
+    parameter value. Parameter is an angle measured counterclockwise from the OCS 
+    X-axis in the range 0 to 2PI radians.
+
+    \param param [in]  Parameter value specifying the point on the circular curve as a Double 
+              value in radians. 
+    \param pointOnCurve [out] Reference to a variable in which this method must save the 
+                     three-dimensional point instance corresponding to the parameter.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getPointAtParam( double param, OdGePoint3d& pointOnCurve ) const;
+
+
+  /** \details
+    Computes the parameter at the point placed on the circular arc. Parameter is an 
+    angle measured counterclockwise from the OCS X-axis in the range 0 to 2PI radians.
+
+    \param pointOnCurve [in]  Three-dimensional point instance which specifies the point on 
+                     the circular curve. 
+    \param param [out] Reference to a variable in which this method must save the parameter   
+              value as a Double value in radians.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getParamAtPoint( const OdGePoint3d& pointOnCurve, double& param ) const;
+
+
+  /** \details
+    Computes the distance along the circular arc measured from the start point to the 
+    point on circular curve specified by the parameter.
+
+    \param param [in]  Parameter value specifying the point on the circular curve as a Double 
+              value in radians. 
+    \param dist  [out] Reference to a variable in which this method must save the distance value 
+              as a Double value in drawing units.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+
+  /** \details
+    Computes the parameter at the distance along the circular arc. Parameter is an angle
+    measured from the OCS X-axis in the range 0 to 2PI radians. 
+
+    \param dist [in]   Distance value along the circular curve as a Double value in drawing units. 
+    \param param [out]  Reference to a variable in which this method must save the parameter value  
+              as a Double value in radians.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+
+  /** \details
+    Computes the first derivative for the specified parameter of the circular arc entity 
+    and returns the three-dimensional vector instance.
+
+    \param param [in]  Parameter value specifying the point on the circular curve as a Double 
+              value in radians. 
+    \param firstDeriv [out] Reference to a variable in which this method must save the first  
+                   derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getFirstDeriv( double param, OdGeVector3d& firstDeriv ) const;
+
+
+  /** \details
+    Computes the second derivative for the specified parameter of the circular arc entity   
+    and returns the three-dimensional vector instance.
+
+    \param param [in]  Parameter value specifying the point on the circular curve as a Double 
+              value in radians. 
+    \param secondDeriv [out] Reference to a variable in which this method must save the second   
+                   derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getSecondDeriv( double param, OdGeVector3d& secondDeriv ) const;
+
+
+  /** \details
+    Returns the area calculated for the closed figure formed by the circular arc and 
+    a line passed from the end point to the start point.
+
+    \param vArea [out]  Reference to a variable in which this method must save the area
+              as a Double value.
+
+    \sa
+    <link db_circular_arc_sample.html, Example of Working with the Circular Arc>
+
+    \sa
+    <link db_circular_arc_compute.html, Computed Circular Arc Properties>
+  */
+  virtual OdResult getArea( double& vArea ) const;
+
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+  /*
+     OdDbArc(const OdGePoint3d& center, double radius,
+             double startAngle, double endAngle);
+     OdDbArc(const OdGePoint3d& center, const OdGeVector3d& normal,
+             double radius, double startAngle, double endAngle);
+  */
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+  virtual OdResult reverseCurve();
+};
+
+/** \details
+  The typified smart pointer for the /circular arc/ object (Circular Arc entity). This  
+  template class is specialization of the OdSmartPtr class for the OdDbArc class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbArc> OdDbArcPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcAlignedText.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcAlignedText.h
new file mode 100755
index 0000000..c725e51
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcAlignedText.h
@@ -0,0 +1,479 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DBARCALIGNEDTEXT_INC_
+#define _OD_DBARCALIGNEDTEXT_INC_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+enum OdArcTextAlignment
+{
+  kFit    = 1,
+  kLeft   = 2,
+  kRight  = 3,
+  kCenter = 4
+};
+
+enum OdArcTextPosition
+{
+  kOnConvexSide = 1,
+  kOnConcaveSide = 2
+};
+
+enum OdArcTextDirection
+{
+  kOutwardFromCenter = 1,
+  kInwardToTheCenter = 2
+};
+
+/** \details
+    This class represents Arc-Aligned Text entities in an OdDbDatabase instance.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbArcAlignedText : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbArcAlignedText);
+
+  OdDbArcAlignedText();
+  
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  
+  /** \details
+    Returns the text string for this Text entity (DXF 1).
+  */
+  OdString textString() const;
+  
+  /** \details
+    Sets the text string for this Text entity (DXF 1).
+    \param textString [in]  Text string.
+    
+    \note
+    textString cannot exceed 256 characters excluding the null terminator.
+  */
+  void setTextString(const OdString& textString);
+  
+  /** \details
+    Returns the Object ID of the Arc entity associated with this Text entity (DXF 330).
+  */
+  OdDbObjectId arcId() const;
+
+  /** \details
+    Sets the Object ID of the Arc entity associated with this Text entity (DXF 330).
+    \param arcId [in]  Arc Object ID.
+  */
+  void setArcId(OdDbObjectId arcId);
+
+  /** \details
+    Returns the WCS center of the Arc entity associated with this Text entity (WCS equivalent of DXF 10).
+  */
+  OdGePoint3d center() const;
+
+  /** \details
+    Sets the WCS center of the Arc entity associated with this Text entity (WCS equivalent of DXF 10).
+    \param center [in]  Center.
+  */
+  void setCenter(const OdGePoint3d& center);
+  
+  /** \details
+    Returns the radius of the Arc entity associated with this Text entity (DXF 40).
+  */
+  double radius() const;
+
+  /** \details
+    Sets the radius of the Arc entity associated with this Text entity (DXF 40).
+    \param radius [in]  Radius.
+  */
+  void setRadius(double radius);
+
+  /** \details
+    Sets the start angle of the Arc entity associated with this Text entity (DXF 50).
+    
+    \param startAngle [in]  Start angle.
+    
+    \remarks
+    The angle is measured counterclockwise from the OCS X-axis.
+
+    \note
+    All angles are expressed in radians.
+  */
+  void setStartAngle(double startAngle);
+
+  /** \details
+    Returns the start angle of the Arc entity associated with this Text entity (DXF 50).
+
+    \remarks
+    The angle is measured counterclockwise from the OCS X-axis.
+
+    \note
+    All angles are expressed in radians.
+  */
+  double startAngle() const;
+
+  /** \details
+    Sets the end angle of the Arc entity associated with this Text entity (DXF 51).
+    \param endAngle [in]  End angle.
+
+    \remarks
+    The angle is measured counterclockwise from the OCS X-axis.
+
+    \note
+    All angles are expressed in radians.
+  */
+  void setEndAngle(double endAngle);
+
+  /** \details
+    Returns the end angle of the Arc entity associated with this Text entity (DXF 51).
+
+    \remarks
+    The angle is measured counterclockwise from the OCS X-axis.
+
+    \note
+    All angles are expressed in radians.
+  */
+  double endAngle() const;
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    \param normal [in]  Normal.
+  */
+  void setNormal(const OdGeVector3d& normal);
+
+  /** \details
+    Returns the offset from the Arc entity associated with this Text entity (DXF 44).  
+  */
+  double offsetFromArc() const;
+  
+  /** \details
+    Sets the offset from the Arc entity associated with this Text entity (DXF 44).
+    \param offsetFromArc [in]  Offset from arc.  
+  */
+  void setOffsetFromArc(double offsetFromArc);
+  
+  /** \details
+    Returns the right offset for this Text entity (DXF 45).  
+  */
+  double rightOffset() const;
+  
+  /** \details
+    Sets the right offset for this Text entity (DXF 45).  
+    \param rightOffset [in]  Right offset.  
+  */
+  void setRightOffset(double rightOffset);
+  
+  /** \details
+    Returns the left offset for this Text entity (DXF 46).  
+  */
+  double leftOffset() const;
+  
+  /** \details
+    Sets the left offset for this Text entity (DXF 46).  
+    \param leftOffset [in]  Left offset.  
+  */
+  void setLeftOffset(double leftOffset);
+  
+  /** \details
+    Returns the text size for this Text entity (DXF 42).    
+  */
+  double textSize() const;
+  
+  /** \details
+    Sets the text size for this Text entity (DXF 42).
+    \param textSize [in]  Text size.    
+  */
+  void setTextSize(double textSize);
+  
+  /** \details
+    Returns the X-scale (width) factor for this Text entity (DXF 41).
+  */
+  double xScale() const;
+  
+  /** \details
+    Sets the X-scale (width) factor for this Text entity (DXF 41).
+    
+    \param xScale [in]  X-scale factor.
+  */
+  void setXScale(double xScale);
+  
+  /** \details
+    Returns the character spacing for this Text entity (DXF 43).  
+  */
+  double charSpacing() const;
+  
+  /** \details
+    Sets the character spacing for this Text entity (DXF 43).
+    \param charSpacing [in]  Character spacing.  
+  */
+  void setCharSpacing(double charSpacing);
+
+  /** \details
+    Returns true if and only if the character order is reversed for this Text entity (DXF 70).
+  */
+  bool isReversedCharOrder() const;
+  
+  /** \details
+    Controls the reversal of character order for this Text entity (DXF 70).
+    \param reverse [in]  Controls the reversal.
+  */
+  void reverseCharOrder(bool reverse);
+
+  /** \details
+    Returns the wizard flag for this Text entity (DXF 280).  
+  */
+  bool wizardFlag() const;
+  
+  /** \details
+    Controls the wizard flag for this Text entity (DXF 280).  
+    \param wizardFlag [in]  Controls the wizard flag.
+  */
+  void setWizardFlag(bool wizardFlag);
+
+  /** \details
+    Returns the alignment for this Text entity (DXF 72).
+    
+    \remarks
+    alignment() returns one of the following:
+    
+    <table>
+    Name      Value
+    kFit      1
+    kLeft     2
+    kRight    3
+    kCenter   4
+    </table>
+  */
+  OdArcTextAlignment alignment() const;
+  
+  /** \details
+    Sets the alignment for this Text entity (DXF 72).
+    
+    \remarks
+    alignment must be one of the following:
+    
+    <table>
+    Name      Value
+    kFit      1
+    kLeft     2
+    kRight    3
+    kCenter   4
+    </table>
+  */
+  void setAlignment(OdArcTextAlignment alignment);
+
+  /** \details
+    Returns the text position of this Text entity.
+    \remarks
+    textPosition() returns one of the following:
+    
+    <table>
+    Name            Value
+    kOnConvexSide   1
+    kOnConcaveSide  2
+    </table>
+
+  */
+  OdArcTextPosition textPosition() const;
+  
+  /** \details
+    Sets the text position of this Text entity.
+
+    \param textPosition [in]  Text position.
+    \remarks
+    textPosition must be one of the following:
+    
+    <table>
+    Name            Value
+    kOnConvexSide   1
+    kOnConcaveSide  2
+    </table>
+  */
+  void setTextPosition(OdArcTextPosition textPosition);
+
+  /** \details
+    Returns the text direction for this Text entity (DXF 71).
+    
+    \remarks
+    textDirection() returns one of the following:
+    
+    <table>
+    Name                 Value    
+    kOutwardFromCenter   1
+    kInwardToTheCenter   2
+    </table>
+  */
+  OdArcTextDirection textDirection() const;
+  
+  /** \details
+    Sets the text direction for this Text entity (DXF 71).
+    
+    \param textDirection [in]  Text direction.
+    
+    \remarks
+    textDirection must be one of the following:
+    
+    <table>
+    Name                 Value    
+    kOutwardFromCenter   1
+    kInwardToTheCenter   2
+    </table>
+  */
+  void setTextDirection(OdArcTextDirection textDir);
+
+  /** \details
+    Returns true if and only if this Text entity is underlined (DXF 76).  
+  */
+  bool isUnderlined() const;
+  
+  /** \details
+    Controls the underlining of this Text entity (DXF 76).
+    \param underlined [in]  Controls underlining.  
+  */
+  void setUnderlined(bool underlined);
+
+  /** \details
+    Returns the Object ID of the text style of this Text entity (DXF 7).
+  */
+  OdDbObjectId textStyle() const;
+  
+  /** \details
+    Sets the Object ID of the text style of this Text entity (DXF 7).
+    \param textStyleId [in]  Text style Object ID.
+  */
+  void setTextStyle(const OdDbObjectId &textStyleId);
+  
+  /** \param styleName [in]  Style name.
+  */
+  void setTextStyle(const OdString& styleName);
+
+  /** \details
+    Returns the name of the font file associated with this Text entity (DXF 3).
+  */
+  OdString fileName() const;
+  
+  /** \details
+    Sets the name of the font file associated with this Text entity (DXF 3).
+
+    \param filename [in]  Font filename.
+  */
+  void setFileName(const OdString& filename);
+  
+  /** \details
+    Returns the name of the BigFont file associated with this Text entity (DXF 4).
+  */
+  OdString bigFontFileName() const;
+  
+  /** \details
+    Sets the name of the BigFont file associated with this Text entity (DXF 4).
+    
+    \param bigFontFileName [in]  BigFont filename.
+  */
+  void setBigFontFileName(const OdString& bigFontFileName);
+
+  /** \details
+    Sets this Text entity to use the specified Windows font characteristics.
+
+    \param typeface [in]  Typeface name of the font.
+    \param bold [in]  Bold if and only if true.
+    \param italic [in]  Italic if and only if true.
+    \param charset [in]  Windows character set identifier.
+    \param pitchAndFamily [in]  Windows pitch and character family identifier.
+    
+    \remarks
+    If typeface is null, the Windows font information is removed from this text style.
+  */
+  void setFont(
+    const OdString& typeface,
+		bool bold,
+		bool italic,
+		int charset,
+		int pitchAndFamily);
+
+
+  /** \details
+    Returns the Windows font characteristics for this Text entity.
+
+    \param typeface [out]  Typeface name of the font.
+    \param bold [out]  True if and only if bold.
+    \param italic [out]  True if and only if italic.
+    \param charset [out]  Windows character set identifier.
+    \param pitchAndFamily [out]  Windows pitch and character family identifier.
+  */
+  void font(
+    OdString& typeface,
+		bool& bold,
+		bool& italic,
+		int& charset,
+		int& pitchAndFamily) const;
+
+  /** \details
+    Returns true if and only if this Text entity uses an SHX font (DXF 79).
+  */
+  bool isShxFont() const;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  /* Replace OdRxObjectPtrArray */
+
+  virtual OdResult subExplode(OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE; 
+  
+
+  virtual void subClose() ODRX_OVERRIDE;
+
+  /** \details
+      Support for persistent reactor to arc.
+  */
+  
+  void modified(const OdDbObject* pObject);
+  void erased(const OdDbObject* pObject, bool erasing);
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbArcAlignedText object pointers.
+*/
+typedef OdSmartPtr<OdDbArcAlignedText> OdDbArcAlignedTextPtr;
+
+#include "TD_PackPop.h"
+
+#endif 
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcDimension.h
new file mode 100755
index 0000000..241f8dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbArcDimension.h
@@ -0,0 +1,244 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _OD_DB_ARCDIMENSION_DIMENSION_
+#define _OD_DB_ARCDIMENSION_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+
+/** \details
+    This class represents Arc Dimension entities in an OdDbDatabase instance.
+    
+    \remarks
+    An Arc Dimension entity dimensions the length of an arc.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbArcDimension : public OdDbDimension
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbArcDimension);
+
+  OdDbArcDimension();
+
+  /** \details
+    Returns the WCS point defining the location of dimension arc for this Dimension entity.
+  */
+  OdGePoint3d         arcPoint() const;
+
+  /** \details
+    Sets the WCS point defining the location of dimension arc for this Dimension entity.
+    \param arcPoint [in]  Arc point.
+  */
+  void setArcPoint(const OdGePoint3d& arcPoint);
+
+  /** \details
+    Returns the WCS start point of the first extension line of this Dimension entity.
+      
+    \remarks
+    This point and the centerPoint define one side of the Arc being dimensioned.
+  */
+  OdGePoint3d xLine1Point() const;
+
+  /** \details
+    Sets the WCS start point of the first extension line of this Dimension entity.
+  
+    \param xLine1Point [in]  Start point.
+        
+    \remarks
+    This point and the centerPoint define one side of the arc being dimensioned.
+  */
+  void   setXLine1Point(const OdGePoint3d & xLine1Pt);
+
+  /** \details
+    Returns the WCS start point of the second extension line of this Dimension entity.
+      
+    \remarks
+    This point and the centerPoint define one side of the Arc being dimensioned.
+  */
+  OdGePoint3d xLine2Point() const;
+
+  /** \details
+    Sets the WCS start point of the second extension line of this Dimension entity.
+  
+    \param xLine2Point [in]  Start point.
+        
+    \remarks
+    This point and the centerPoint define one side of the arc being dimensioned.
+  */
+  void setXLine2Point(const OdGePoint3d& xLine2Pt);
+
+  /** \details
+    Returns the WCS vertex of the arc being dimensioned by this Dimension entity.
+    \remarks
+    The vertex of the arc being dimensioned is the center of the dimension arc.
+  */
+  OdGePoint3d centerPoint() const;
+
+  /** \details
+    Sets the WCS vertex of the arc being dimensioned by this Dimension entity.
+    \param centerPoint [in]  Center point.
+    \remarks
+    The vertex of the angle being dimensioned is the center of the dimension arc.
+  */
+  void setCenterPoint(const OdGePoint3d& centerPoint);
+
+  /** \details
+    Returns true if and only if this Dimension entity was specified using two points along the arc.
+  */
+  bool isPartial() const;
+  /** \details
+    Controls the specification of this Dimension entity with two points along the arc.
+    \param partial [in]  Specifies partial dimension.
+  */
+  void setIsPartial(const bool partial);
+
+  /** \details
+    Returns the arc parameter of this Dimension entitiy's first definition point.
+  */
+  double arcStartParam() const;
+
+  /** \details
+    Sets the arc parameter of this Dimension entity's first definition point.
+    \param arcStartParam [in]  Arc start parameter.
+  */
+  void setArcStartParam(const double arcStartParam);
+
+
+  /** \details
+    Returns the arc parameter of this Dimension entity's second definition point.
+  */
+  double arcEndParam() const;
+
+  /** \details
+    Sets the arc parameter of this Dimension entity's second definition point.
+    \param arcEndParam [in]  Arc end parameter.
+  */
+  void setArcEndParam(double arcEndParam);
+
+
+  /** \details
+    Returns true if and only if this Dimension entity has a leader drawn to resolve ambiguity.
+  */
+  bool hasLeader() const;
+  /** \details
+    Determines if this Dimension entity has a leader drawn to resolve ambiguity.
+    \param hasLeader [in]  Controls leader.
+  */
+  void setHasLeader(const bool hasLeader);
+
+  /** \details
+    Returns the start point of the extra leader of this Dimension entity.
+  */
+  OdGePoint3d leader1Point() const;
+  /** \details
+    Sets the start point of the extra leader of this Dimension entity.
+    \param leader1Point [in]  Start point of leader.
+  */
+  void setLeader1Point(const OdGePoint3d& leader1Point);
+
+  /** \details
+    Returns the end point of the extra leader of this Dimension entity.
+  */
+  OdGePoint3d leader2Point() const;
+  /** \details
+    Sets the end point of the extra leader of this Dimension entity.
+    \param leader2Point [in]  End point of leader.
+  */
+  void   setLeader2Point(const OdGePoint3d& leader2Point);
+
+  /** \details
+    Returns the type of arc symbol used within the dimension text of this Dimension entity.
+    
+    \remarks
+    arcSymbolType() returns one of the following:
+    
+    <table>
+    Value   Description
+    0       Arc symbol precedes text.
+    1       Arc symbol is above text.
+    2       No arc symbol.
+    </table>
+  */
+  OdInt16 arcSymbolType() const;
+
+  /** \details
+    Sets the type of arc symbol used within the dimension text of this Dimension entity.
+    
+    \remarks
+    arcSymbolType must be one of the following:
+    
+    <table>
+    Value   Description
+    0       Arc symbol precedes text.
+    1       Arc symbol is above text.
+    2       No arc symbol.
+    </table>
+    
+    \remarks
+    Overrides the value in the dimension style.
+  */
+  void setArcSymbolType(const OdInt16 arcSymbolType);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /*
+  OdDbArcDimension(
+  const OdGePoint3d& centerPoint,
+  const OdGePoint3d& xLine1Point,
+  const OdGePoint3d& xLine2Point,
+  const OdGePoint3d& arcPoint,
+  const OdString* dimText = NULL,
+  OdDbObjectId dimStyle = OdDbObjectId::kNull );
+  */
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbArcDimension object pointers.
+*/
+typedef OdSmartPtr<OdDbArcDimension> OdDbArcDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttribute.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttribute.h
new file mode 100755
index 0000000..0ea92da
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttribute.h
@@ -0,0 +1,172 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_ATTRIBUTE_
+#define _OD_DB_ATTRIBUTE_
+
+#include "TD_PackPush.h"
+
+#include "DbText.h"
+#include "DbMText.h"
+
+class OdDbAttributeDefinition;
+/** \details
+    This class represents Attribute entities in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAttribute : public OdDbText
+{
+public:
+  
+  ODDB_DECLARE_MEMBERS(OdDbAttribute);
+  OdDbAttribute();
+
+  /** \details
+    Returns the tag string of this Attribute entity (DXF 2).
+  */
+  const OdString tag() const;
+
+  /** \details
+    Sets the tag string of this Attribute entity (DXF 2).
+    \param tagString [in]  Tag string.  
+  */
+  void setTag(
+    const OdString& tagString);
+
+  /** \details
+    Returns true if and only if this Attribute entity is invisible (DXF 70, bit 0x01).
+  */
+  bool isInvisible() const;
+
+  /** \details
+    Controls the invisibility of this Attribute entity (DXF 70, bit 0x01).
+
+    \param invisible [in]  Controls invisibility.
+  */
+  void setInvisible(
+    bool invisible);
+
+  /** \details
+    Returns true if and only if this Attribute entity is constant (DXF 70, bit 0x02).
+  */
+  bool isConstant() const;
+
+  /** \details
+    Returns true if and only if this Attribute entity is verifiable (DXF 70, bit 0x04).
+  */
+  bool isVerifiable() const;
+
+  /** \details
+    Returns true if and only if this Attribute entity is preset (DXF 70, bit 0x08).
+  */
+  bool isPreset() const;
+
+  /** \details
+    Returns the field length of this Attribute entity (DXF 73).
+  */
+  OdUInt16 fieldLength() const;
+
+  /** \details
+    Sets the field length of this Attribute entity (DXF 73).
+    \param fieldLength [in]  Field length.
+  */
+  void setFieldLength(
+    OdUInt16 fieldLength);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+
+  /** \details
+    Applies the settings from the specified attribute definition,
+    then applies the specified block transformation matrix to
+    to this Attribute entity.
+    
+    \param pAttDef [in]  Pointer to the attribute definition entity.
+    \param blkXform [in]  Block transformation matrix.
+    
+    \remarks
+    Equivalent to the ATTREDEF and INSERT commands.
+    
+    blkXform is the transformation matrix returned by the OdDbBlockReference::blockTransform() function
+    of the OdDbBlockReference that will own this attribute.
+    
+  */
+  void setAttributeFromBlock(
+    const OdGeMatrix3d& blkXform);
+  
+  void setAttributeFromBlock(
+    const OdDbAttributeDefinition* pAttDef, 
+    const OdGeMatrix3d& blkXform);
+  /** \details
+    Returns true if and only if the position of this Attribute entity is 
+    fixed relative to the block geometry.
+  */
+  bool lockPositionInBlock() const;
+  void setLockPositionInBlock(bool lock);
+
+  // multiline attribute support
+  bool isMTextAttribute() const;
+  OdDbMTextPtr getMTextAttribute() const;
+  void setMTextAttribute(OdDbMText*);
+  void convertIntoMTextAttribute (bool val = true);
+  void updateMTextAttribute();
+  //bool isReallyLocked() const;
+  virtual void subClose() ODRX_OVERRIDE;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbAttribute object pointers.
+*/
+typedef OdSmartPtr<OdDbAttribute> OdDbAttributePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttributeDefinition.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttributeDefinition.h
new file mode 100755
index 0000000..c5e63e3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAttributeDefinition.h
@@ -0,0 +1,182 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_ATTRDEF_
+#define _OD_DB_ATTRDEF_
+
+#include "TD_PackPush.h"
+
+#include "DbText.h"
+#include "DbMText.h"
+
+/** \details
+    This class represents attribute defintion (Attdef) entities in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAttributeDefinition : public OdDbText
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbAttributeDefinition);
+  OdDbAttributeDefinition();
+
+  /** \details
+    Returns the prompt string of this Attdef entity (DXF 3).
+  */
+  const OdString prompt() const;
+
+  /** \details
+    Sets the prompt string of this Attdef entity (DXF 3).
+    \param promptString [in]  Prompt string
+  */
+  void setPrompt(
+    const OdString& promptString);
+
+  /** \details
+    Returns the tag string of this Attdef entity (DXF 2).
+  */
+  const OdString tag() const;
+
+  /** \details
+    Sets the tag string of this Attdef entity (DXF 2).
+    \param tagString [in]  Tag string.  
+  */
+  void setTag(
+    const OdString& tagString);
+
+  /** \details
+    Returns true if and only if this Attdef entity is invisible (DXF 70, bit 0x01).
+  */
+  bool isInvisible() const;
+
+  /** \details
+    Controls the invisibility of this Attdef entity (DXF 70, bit 0x01).
+
+    \param invisible [in]  Controls invisibility.
+  */
+  void setInvisible(
+    bool invisible);
+
+  /** \details
+    Returns true if and only if this Attdef entity is constant (DXF 70, bit 0x02).
+  */
+  bool isConstant() const;
+
+  /** \details
+    Controls the constant status of this Attdef entity (DXF 70, bit 0x02).
+    \param constant [in]  Controls constant status.
+  */
+  void setConstant(bool constant);
+
+  /** \details
+    Returns true if and only if this Attdef entity is verifiable (DXF 70, bit 0x04).
+  */
+  bool isVerifiable() const;
+
+  /** \details
+    Controls the verifiable status of this Attdef entity (DXF 70, bit 0x04).
+    \param verifiable [in]  Controls verifiable status.
+  */
+  void setVerifiable(bool);
+
+  /** \details
+    Returns true if and only if this Attdef entity is preset (DXF 70, bit 0x08).
+  */
+  bool isPreset() const;
+
+  /** \details
+    Controls the preset status of this Attdef entity (DXF 70, bit 0x08).
+    \param preset [in]  Controls preset status.
+  */
+  void setPreset(bool);
+
+  /** \details
+    Returns the field length of this Attdef entity (DXF 73).
+  */
+  OdUInt16 fieldLength() const;
+
+  /** \details
+    Sets the field length of this Attdef entity (DXF 73).
+    \param fieldLength [in]  Field length.
+  */
+  void setFieldLength(
+    OdUInt16 fieldLength);
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+  void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+  OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  void appendToOwner(
+    OdDbIdPair& Idpair, 
+    OdDbObject* pOwnerObject, 
+    OdDbIdMapping& ownerIdMap);
+
+  bool lockPositionInBlock() const;
+  void setLockPositionInBlock(bool bValue);
+  // multiline attribute definition support
+  bool isMTextAttributeDefinition() const;
+  OdDbMTextPtr getMTextAttributeDefinition() const;
+  void setMTextAttributeDefinition(OdDbMText*);
+  void convertIntoMTextAttributeDefinition (bool val = true);
+  void updateMTextAttributeDefinition();
+  virtual void subClose() ODRX_OVERRIDE;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbAttributeDefinition object pointers.
+*/
+typedef OdSmartPtr<OdDbAttributeDefinition> OdDbAttributeDefinitionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAudit.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAudit.h
new file mode 100755
index 0000000..441b865
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbAudit.h
@@ -0,0 +1,94 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDB_AUDIT_INCLUDED_
+#define _ODDB_AUDIT_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdString.h"
+#include "CmColor.h"
+#include "OdAuditInfo.h"
+
+class OdDbObject;
+class OdDbObjectId;
+class OdDbDatabase;
+class OdDbHostAppServices;
+
+TOOLKIT_EXPORT OdString odDbGetObjectName(const OdDbObject* pObj);
+TOOLKIT_EXPORT OdString odDbGetObjectIdName(const OdDbObjectId& id);
+TOOLKIT_EXPORT OdString odDbGetHandleName(const OdDbHandle& handle);
+TOOLKIT_EXPORT OdString odDbGenerateName(const OdDbObjectId& id, OdDbHostAppServices* pHostApp = 0);
+TOOLKIT_EXPORT OdString odDbGenerateName(OdUInt32 i, OdDbHostAppServices* pHostApp = 0);
+TOOLKIT_EXPORT bool     odDbAuditColorIndex(OdInt16& colorIndex, OdDbAuditInfo* pAuditInfo, OdDbHostAppServices* pHostApp = 0);
+TOOLKIT_EXPORT bool     odDbAuditColor(OdCmColor& color, OdDbAuditInfo* pAuditInfo, OdDbHostAppServices* pHostApp = 0);
+
+/** \details
+  This class tracks audit information during a database audit.
+
+  \sa
+  TD_Db
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAuditInfo : public OdAuditInfo
+{
+public:
+  /** \details
+    Notification function called to print error information.
+    \remarks
+    Prints log information about an error detected or fixed during an audit.
+
+    \param name [in] Type of erroneous data found.
+    \param value [in] Value of the bad data.
+    \param validation [in] Reason the data were bad.
+    \param defaultValue [in] Default value to which the were set.
+
+    \note
+    As implemented, this functions does nothing.
+  */
+  virtual void printError(
+    const OdString& name,
+    const OdString& value,
+    const OdString& validation = OdString::kEmpty,
+    const OdString& defaultValue = OdString::kEmpty );
+
+  /** \param pObject [in]  Pointer to the object which generated the error.
+
+    \remarks
+    odDbGetObjectName(pObject) is used to generate the name.
+  */
+  virtual void printError(
+    const OdRxObject* pObject,
+    const OdString& value,
+    const OdString& validation = OdString::kEmpty,
+    const OdString& defaultValue = OdString::kEmpty);
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDB_AUDIT_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBackground.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBackground.h
new file mode 100755
index 0000000..fc1e054
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBackground.h
@@ -0,0 +1,332 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBBACKGROUND_INCLUDED_
+#define _ODDBBACKGROUND_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+#define ODDB_BACKGROUND_DICTIONARY ACAD_BACKGROUND
+
+/** \details
+    This class is a base class for all background objects.
+
+    \remarks
+    Database-resident background objects are stored in the NamedObjectsDictionary
+    under ACAD_BACKGROUND.
+    
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbBackground : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBackground);
+
+  OdDbBackground();
+  virtual ~OdDbBackground();
+
+  /** \details
+    Returns the OdGiDrawable for this Background object.
+  */
+  virtual OdGiDrawable* drawable();
+};
+
+typedef OdSmartPtr<OdDbBackground> OdDbBackgroundPtr;
+
+/** \details
+    This class is for a solid background.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbSolidBackground : public OdDbBackground
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSolidBackground);
+
+  OdDbSolidBackground();
+  virtual ~OdDbSolidBackground();
+
+  void setColorSolid(const OdCmEntityColor& color);
+  OdCmEntityColor colorSolid() const;
+
+  // OdDbObject overridden functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdRxObject overridden functions
+
+  //virtual void copyFrom(const OdRxObject* pSource);
+
+  // OdGiDrawable overridden functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+  virtual OdGiDrawable::DrawableType drawableType() const;
+};
+
+typedef OdSmartPtr<OdDbSolidBackground> OdDbSolidBackgroundPtr;
+
+/** \details
+    This class is for a gradient background.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbGradientBackground : public OdDbBackground
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbGradientBackground);
+
+  OdDbGradientBackground();
+  virtual ~OdDbGradientBackground();
+
+  void setColorTop(const OdCmEntityColor& color);
+  OdCmEntityColor colorTop() const;
+  void setColorMiddle(const OdCmEntityColor& color);
+  OdCmEntityColor colorMiddle() const;
+  void setColorBottom(const OdCmEntityColor& color);
+  OdCmEntityColor colorBottom() const;
+  void setHorizon(double horizon);
+  double horizon() const;
+  void setHeight(double height);
+  double height() const ;
+  void setRotation(double rotation);
+  double rotation() const;
+
+  // OdDbObject overridden functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdRxObject overridden functions
+
+  //virtual void copyFrom(const OdRxObject* pSource);
+
+  // OdGiDrawable overridden functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+  virtual OdGiDrawable::DrawableType drawableType() const;
+};
+
+typedef OdSmartPtr<OdDbGradientBackground> OdDbGradientBackgroundPtr;
+
+/** \details
+    This class is for an image background.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbImageBackground : public OdDbBackground
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbImageBackground);
+
+  OdDbImageBackground();
+  virtual ~OdDbImageBackground();
+
+  void setImageFilename(const OdString& filename);
+  const OdString& imageFilename() const;
+  void setFitToScreen(bool bFitToScreen);
+  bool fitToScreen() const;
+  void setMaintainAspectRatio(bool bMaintainAspectRatio);
+  bool maintainAspectRatio() const;
+  void setUseTiling(bool bUseTiling);
+  bool useTiling() const;
+  void setXOffset(double xOffset);
+  double xOffset() const;
+  void setYOffset(double yOffset);
+  double yOffset() const;
+  void setXScale(double xScale);
+  double xScale() const;
+  void setYScale(double yScale);
+  double yScale() const;
+
+  // OdDbObject overridden functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdRxObject overridden functions
+
+  //virtual void copyFrom(const OdRxObject* pSource);
+
+  // OdGiDrawable overridden functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+  virtual OdGiDrawable::DrawableType drawableType() const;
+};
+
+typedef OdSmartPtr<OdDbImageBackground> OdDbImageBackgroundPtr;
+
+/** \details
+    This class implements a ground plane for a background object in a viewport.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbGroundPlaneBackground : public OdDbBackground
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbGroundPlaneBackground);
+
+  OdDbGroundPlaneBackground();
+  virtual ~OdDbGroundPlaneBackground();
+
+  void setColorSkyZenith(const OdCmEntityColor& color);
+  OdCmEntityColor colorSkyZenith() const;
+  void setColorSkyHorizon(const OdCmEntityColor& color);
+  OdCmEntityColor colorSkyHorizon() const;
+  void setColorUndergroundHorizon(const OdCmEntityColor& color);
+  OdCmEntityColor colorUndergroundHorizon() const;
+  void setColorUndergroundAzimuth(const OdCmEntityColor& color);
+  OdCmEntityColor colorUndergroundAzimuth() const;
+  void setColorGroundPlaneNear(const OdCmEntityColor& color);
+  OdCmEntityColor colorGroundPlaneNear() const;
+  void setColorGroundPlaneFar(const OdCmEntityColor& color);
+  OdCmEntityColor colorGroundPlaneFar() const;
+
+  // OdDbObject overridden functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdRxObject overridden functions
+
+  //virtual void copyFrom(const OdRxObject* pSource);
+
+  // OdGiDrawable overridden functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+  virtual OdGiDrawable::DrawableType drawableType() const;
+};
+
+typedef OdSmartPtr<OdDbGroundPlaneBackground> OdDbGroundPlaneBackgroundPtr;
+
+/** \details
+    This class implements a sky for a background object in a viewport.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbSkyBackground : public OdDbBackground
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSkyBackground);
+
+  OdDbSkyBackground();
+  virtual ~OdDbSkyBackground();
+
+  void setSunId(const OdDbObjectId& sunId);
+  OdDbObjectId sunId() const;
+
+  // OdDbObject overridden functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdRxObject overridden functions
+
+  //virtual void copyFrom(const OdRxObject* pSource);
+
+  // OdGiDrawable overridden functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+  virtual OdGiDrawable::DrawableType drawableType() const;
+};
+
+typedef OdSmartPtr<OdDbSkyBackground> OdDbSkyBackgroundPtr;
+
+/** \details
+    This class implements a image based lighting for a background object in a viewport.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbIBLBackground : public OdDbBackground
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbIBLBackground);
+
+  OdDbIBLBackground();
+  virtual ~OdDbIBLBackground();
+
+  virtual void setEnable(bool bEnable);
+  virtual bool enable() const;
+  virtual void setIBLImageName(const OdString &filename);
+  virtual const OdString &IBLImageName() const;
+  virtual void setRotation(double rotation);
+  virtual double rotation() const;
+  virtual void setDisplayImage(bool bDisplay);
+  virtual bool displayImage() const;
+  virtual void setSecondaryBackground(const OdDbObjectId &bgId);
+  virtual OdDbObjectId secondaryBackground() const;
+
+  virtual void setDataFrom(const OdDbIBLBackground *pBkgnd);
+
+  // OdDbObject overridden functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdRxObject overridden functions
+
+  //virtual void copyFrom(const OdRxObject* pSource);
+
+  // OdGiDrawable overridden functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+  virtual OdGiDrawable::DrawableType drawableType() const;
+};
+
+typedef OdSmartPtr<OdDbIBLBackground> OdDbIBLBackgroundPtr;
+
+TOOLKIT_EXPORT OdDbObjectId oddbGetBackgroundDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbDictionaryPtr oddbGetBackgroundDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBBACKGROUND_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseDatabase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseDatabase.h
new file mode 100755
index 0000000..83839c5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseDatabase.h
@@ -0,0 +1,506 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDB_BASEDATABASE_INCLUDED_
+#define _ODDB_BASEDATABASE_INCLUDED_
+
+#include "RxObject.h"
+#include "DbRootExport.h"
+#include "OdFont.h"
+#include "GiDefaultContext.h"
+#include "Gs/Gs.h"
+#include "Gi/GiLinetype.h"
+#include "Ge/GeCurve2d.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GePoint2dArray.h"
+#include "DbDate.h" // dgn dwf export
+#include "OdUnitsFormatter.h"
+#include "StringArray.h"
+#include "DbHandle.h"
+
+class OdDbBaseHostAppServices;
+class OdGiAnnoScaleSet;
+
+typedef OdRxObject OdDbBaseDatabase;
+typedef OdRxObjectPtr OdDbBaseDatabasePtr;
+
+/** \details
+    This class is the base Protocol Extension class for database classes.
+
+    \sa
+    TD_DbRoot
+    <group OdDbRoot_Classes> 
+*/
+class DBROOT_EXPORT OdDbBaseDatabasePE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseDatabasePE);
+
+  enum ExtentsFlags
+  {
+    kZeroFlags      = 0,
+    kExactExtents   = 1, //Zoom to extents exact to device/paper size w/o any margins if this flag is set
+    kUseViewExtents = 2  //Use view extents instead of plot extents (default) for calculation of drawing extents if this flag is set
+  };
+
+  /** \details
+      Returns the OdDbBaseHostAppServices object associated with this database object.
+  */
+  virtual OdDbBaseHostAppServices* appServices(OdDbBaseDatabase* pDb) const = 0;
+
+  /** \details
+      Returns the name of the file associated with this database object.
+  */
+  virtual OdString getFilename(OdDbBaseDatabase* pDb) const = 0;
+
+  virtual void startTransaction(OdDbBaseDatabase* pDb) = 0;
+  virtual void abortTransaction(OdDbBaseDatabase* pDb) = 0;
+
+  virtual OdGiDefaultContextPtr createGiContext(OdDbBaseDatabase* pDb) const = 0;
+
+  virtual void putNamedViewInfo(OdDbBaseDatabase* pDb, OdDbStub* layoutId, OdStringArray& names, OdGePoint3dArray& points) = 0;
+  /** \details
+  Creates a TextIterator object for the specified data.
+
+  \param textString [in]  Text string to be parsed.
+  \param length [in]  Length of string in bytes.
+  \param raw [in]  If and only if true, character sequences in the form of %%c will be treated as raw text.
+  \param codePageId [in]  Object ID of the Code Page of the text.
+  \param pTextStyle [in]  Pointer to the TextStyle object associated with the specified text.
+
+  \remarks
+  Returns a SmartPointer to the new OdDbTextIterator object.
+  */
+  virtual OdBaseTextIteratorPtr createTextIterator(OdDbBaseDatabase* db, const OdChar* textString, int length, bool raw, const OdGiTextStyle* pTextStyle) const = 0;
+  
+  // setup Gs views in the device, according to the active database layout data
+  virtual OdGsDevicePtr setupActiveLayoutViews(OdGsDevice* pDevice, OdGiDefaultContext* pGiCtx) = 0;
+
+  // setup Gs views in the device, according to the specified database layout data
+  virtual OdGsDevicePtr setupLayoutView(OdGsDevice* pDevice, OdGiDefaultContext* pGiCtx, OdDbStub* layoutId) = 0;
+  
+  // setup palette associated with the specified layout in the device.
+  // palBg -- optionally specifies background color to write into palette
+  // to overwrite default DB-palette color use non-zero value for alpha component of RGBA color
+  virtual void setupPalette(OdGsDevice* device, OdGiDefaultContext* giContext, OdDbStub* layoutId = 0, ODCOLORREF palBg = ODRGBA(0,0,0,0)) = 0;
+
+  // get next view according to the active layout
+  virtual OdDbStub* getNextViewForActiveLayout(OdGiDefaultContext* pGiCtx, OdDbStub* /*objectId*/) = 0;
+  
+  // setup Gs device to display current layout using plot settings stored in it (paper rotation, scale etc.)
+  // returns visible rectangle (measured in device units)
+  virtual void applyLayoutSettings(OdGsDCRect& clipBox, OdGsDevice* pDevice, OdDbBaseDatabase* db, OdUInt32 extentsFlags = kZeroFlags) = 0;
+  
+  // setup Gs device to draw current layout zoomed to extents
+  // warning: this function may throw exception, if overall viewport is not found
+  // outputRect is desired printable area (in device units)
+  virtual void zoomToExtents(const OdGsDCRect& outputRect, OdGsDevice* pDevice, OdDbBaseDatabase* db,
+                             OdUInt32 extentsFlags = kZeroFlags, OdDbStub* objectId = NULL) = 0;
+  
+  virtual void loadPlotstyleTableForActiveLayout(OdGiDefaultContext* pDwgContext, OdDbBaseDatabase* db) = 0;
+
+  virtual OdRxIteratorPtr layers(OdDbBaseDatabase* db) const = 0;
+  virtual OdRxIteratorPtr visualStyles(OdDbBaseDatabase* db) const = 0;
+
+  // Layout here is an abstraction that corresponds to "sheet" in sheet set manager, 
+  //   "page" in PDF and DWF, "layout"+"block table record" in DWG
+  inline OdRxObjectPtr currentLayout(OdDbBaseDatabase* pDb)
+  {
+    return openObject(currentLayoutId(pDb));
+  }
+
+  virtual void setCurrentLayout(OdDbBaseDatabase* db, const OdString& name) = 0;
+
+  virtual OdRxIteratorPtr layouts(OdDbBaseDatabase* db) const = 0;
+
+  // TODO do it inline (is special for DGN now)
+  virtual OdRxObjectPtr getLayout(OdDbBaseDatabase* pDb, const OdString& name)
+  {
+    return openObject(findLayoutNamed(pDb, name));
+  }
+
+  inline OdRxObjectPtr findLayoutByViewport(OdDbBaseDatabase* db, OdDbStub* pViewportId)
+  {
+    return openObject(findLayoutIdByViewport(db, pViewportId));
+  }
+  virtual OdDbStub* findLayoutIdByViewport(OdDbBaseDatabase* db, OdDbStub* pViewportId) = 0;
+
+  virtual OdDbStub* findLayoutNamed(OdDbBaseDatabase* db, const OdString& name) = 0; // dgn dwf export
+
+  inline OdRxObjectPtr getFirstLayout(OdDbBaseDatabase* db)
+  {
+    return openObject(getFirstLayoutId(db));
+  }
+  virtual OdDbStub* getFirstLayoutId(OdDbBaseDatabase* db) = 0; // dgn dwf export
+
+  virtual OdTimeStamp getCreationTime(OdDbBaseDatabase* db) = 0; // dgn dwf export
+  virtual OdTimeStamp getUpdateTime(OdDbBaseDatabase* db) = 0; // dgn dwf export
+  virtual OdString getFingerPrintGuid(OdDbBaseDatabase* db) = 0; // dgn dwf export
+  virtual OdString getVersionGuid(OdDbBaseDatabase* db) = 0; // dgn dwf export
+
+  virtual int getUnits(OdDbBaseDatabase* db) = 0; // dgn dwf export
+  virtual OdUnitsFormatter* baseFormatter(OdDbBaseDatabase* db) = 0; // dgn dwg common formatter base class
+  virtual int getMeasurement(OdDbBaseDatabase* db) = 0;
+
+  virtual bool getLineTypeById( OdDbBaseDatabase* db, OdDbStub* pLTypeId, OdGiLinetype& LType ) = 0;
+  virtual bool getTextStyleById( OdDbBaseDatabase* db, OdDbStub* idStyle, OdGiTextStyle& shapeInfo ) = 0;   
+
+  virtual OdDbStub* getObject(OdDbBaseDatabase* db, OdUInt64 handle) = 0;
+  virtual OdDbHandle getHandle(OdDbStub* id);
+  virtual OdDbBaseDatabase* getDatabase(OdDbStub *id);
+  virtual OdDbStub* getOwner(OdDbStub *id);
+
+  virtual OdCodePageId getCodePage(OdDbBaseDatabase* db) = 0;
+
+  virtual OdDbStub* getModelBlockId(OdDbBaseDatabase* pDb) = 0;
+  virtual OdDbStub* getPaperBlockId(OdDbBaseDatabase* pDb) = 0;
+  virtual OdDbStub* currentLayoutId(OdDbBaseDatabase* pDb) = 0;
+  virtual OdDbStub* xrefBlockId(OdDbBaseDatabase* pDb) = 0;
+
+  virtual void setMultiThreadedRender(OdDbBaseDatabase* pDb, bool bOn) = 0;
+
+  virtual bool isAProxy(OdRxObject* pDrw) = 0;
+  virtual OdRxObjectPtr openObject(OdDbStub* pId) = 0;
+  virtual bool getAnnoScaleSet(OdDbStub* drawableId, OdGiAnnoScaleSet& res) = 0;
+  virtual OdDbStub *getCurrentLongTransation(const OdDbBaseDatabase *pDb) = 0;
+
+  class DatabaseUnloadReactor
+  {
+    public:
+      virtual ~DatabaseUnloadReactor() { }
+      virtual void goodbye(const OdDbBaseDatabase* pDb) = 0;
+  };
+  virtual OdRxObjectPtr addDatabaseUnloadReactor(OdDbBaseDatabase* pDb, OdRxObject *pPrevReactor, DatabaseUnloadReactor *pReactorRedirect) = 0;
+  virtual void removeDatabaseUnloadReactor(OdDbBaseDatabase* pDb, OdRxObject *pReactor) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBaseDatabasePE object pointers.
+*/
+typedef OdSmartPtr<OdDbBaseDatabasePE> OdDbBaseDatabasePEPtr;
+
+
+/** \details
+  This class is the protocol extension to be used as a layer abstraction, 
+  independent of the underlying database (OdDbDatabase or OdDgDatabase).
+
+  \sa
+  TD_DbRoot
+
+  <group OdDbRoot_Classes> 
+*/
+class DBROOT_EXPORT OdDbBaseLayerPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseLayerPE);
+
+  /** \details
+    Returns name of this Layer object.
+
+    \param obj [in]  Layer object
+  */
+  virtual OdString name(const OdRxObject* obj) const = 0;
+
+  /** \details
+    Returns true if and only if this Layer is off.
+    
+    \param obj [in]  Layer object
+  */
+  virtual bool isOff(const OdRxObject* obj) const = 0;
+  /** \details
+    Returns true if and only if this Layer is frozen.
+    
+    \param obj [in]  Layer object
+  */
+  virtual bool isFrozen(const OdRxObject* obj) const = 0;
+
+  /** \details
+    Sets the on / off status of this Layer
+
+    \param obj [in]  Layer object
+    \param off [in]  True for off, false for on.
+  */
+  virtual void setIsOff(OdRxObject* obj, bool off) const = 0;
+  /** \details
+    Sets the frozen status of this Layer.
+
+    \param obj [in]  Layer object
+    \param frozen [in]  True to freeze, false to thaw.
+  */
+  virtual void setIsFrozen(OdRxObject* obj, bool frozen) const = 0;
+
+  /** \details
+  Return true if function set line type description of this Layer.
+
+  \param obj [in]  Layer object
+  \param LType [out]  Description of layer line type.
+  */
+  virtual bool getLineType(OdRxObject* obj, OdGiLinetype& LType) const = 0;
+};
+
+typedef OdSmartPtr<OdDbBaseLayerPE> OdDbBaseLayerPEPtr;
+
+
+/** \details
+  This class is the protocol extension to be used as a visual style abstraction, 
+  independent of the underlying database (OdDbDatabase or OdDgDatabase).
+
+  \sa
+  TD_DbRoot
+
+  <group OdDbRoot_Classes> 
+*/
+class DBROOT_EXPORT OdDbBaseVisualStylePE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseVisualStylePE);
+
+  /** \details
+    Returns name of this Visual Style.
+
+    \param obj [in]  Visual Style object
+  */
+  virtual OdString name(const OdRxObject* obj) const = 0;
+
+  /** \details
+    Returns true if and only if this Visual Style was marked as internal.
+    
+    \param obj [in]  Visual Style object
+  */
+  virtual bool isInternal(const OdRxObject* obj) const = 0;
+};
+
+typedef OdSmartPtr<OdDbBaseVisualStylePE> OdDbBaseVisualStylePEPtr;
+
+
+/** \details
+  This class is the protocol extension to be used as a layout abstraction, 
+  independent of the underlying database (OdDbDatabase or OdDgDatabase).
+
+  \sa
+  TD_DbRoot
+
+  <group OdDbRoot_Classes> 
+*/
+class DBROOT_EXPORT OdDbBaseLayoutPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseLayoutPE);
+  enum PlotRotation
+  {
+    k0degrees       = 0,   // No rotation
+    k90degrees      = 1,   // 90� CCW
+    k180degrees     = 2,   // Inverted
+    k270degrees     = 3    // 90� CW
+  };
+  virtual OdString name(const OdRxObject*) = 0;
+  virtual bool isModelLayout(const OdRxObject*) = 0;
+  virtual bool printLineweights(const OdRxObject*) = 0;
+  virtual bool showPlotStyles(const OdRxObject*) = 0;
+  virtual OdString paperName(const OdRxObject*) = 0;
+  virtual void getPaperSize(const OdRxObject*, double& paperWidth, double& paperHeight) const = 0;
+  virtual PlotRotation plotRotation(const OdRxObject*) = 0;
+  virtual double getTopMargin(const OdRxObject*) = 0;
+  virtual double getRightMargin(const OdRxObject*) = 0;
+  virtual double getBottomMargin(const OdRxObject*) = 0;
+  virtual double getLeftMargin(const OdRxObject*) = 0;
+  virtual OdDbStub* getId(const OdRxObject*) = 0;
+  virtual bool isOverallVPortErased(const OdRxObject*) = 0;
+  virtual OdResult getGeomExtents(const OdRxObject*,OdGeExtents3d& ext) = 0;
+
+  // methods inherited by OdDbLayoutImpl class // dgn dwf export
+  virtual bool useStandardScale(const OdRxObject*) = 0;
+  virtual void getStdScale(const OdRxObject*, double& scale) = 0;
+  virtual void getCustomPrintScale(const OdRxObject*, double& numerator, double& denominator) = 0;
+  virtual int plotType(const OdRxObject*) = 0;
+  virtual OdString getPlotViewName(const OdRxObject*) = 0;
+  virtual void getPlotWindowArea(const OdRxObject*, double& xmin, double& ymin, double& xmax, double& ymax) = 0;
+  virtual void getPlotOrigin(const OdRxObject*, double& x, double& y) = 0;
+  virtual void getPlotPaperSize(const OdRxObject*, double& paperWidth, double& paperHeight) = 0;
+  virtual int plotPaperUnits(const OdRxObject*) = 0;
+
+  // for Gs
+  virtual OdDbStub* getBlockId(const OdRxObject*) const = 0;
+  virtual bool scalePSLinetypes(const OdRxObject*) const = 0;
+  virtual bool getApproxExtents(const OdRxObject*, OdGePoint3d& extMin, OdGePoint3d& extMax) const = 0;
+};
+
+typedef OdSmartPtr<OdDbBaseLayoutPE> OdDbBaseLayoutPEPtr;
+
+
+/** \details
+  This class is the protocol extension to be used as a block table record abstraction,
+  independent of the underlying database (OdDbDatabase or OdDgDatabase).
+
+  \sa
+  TD_DbRoot
+
+  <group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdDbBaseBlockPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseBlockPE);
+
+  virtual bool isBlockReferenceAdded(OdRxObject *pBlock) const = 0;
+
+  virtual bool isFromExternalReference(const OdRxObject *pBlock) const = 0;
+  virtual OdDbBaseDatabase *xrefDatabase(const OdRxObject *pBlock) const = 0;
+
+  virtual bool isLayout(const OdRxObject *pBlock) const = 0;
+};
+
+typedef OdSmartPtr<OdDbBaseBlockPE> OdDbBaseBlockPEPtr;
+
+
+/** \details
+  This class is the protocol extension to be used as a block reference abstraction,
+  independent of the underlying database (OdDbDatabase or OdDgDatabase).
+
+  \sa
+  TD_DbRoot
+
+  <group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdDbBaseBlockRefPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseBlockRefPE);
+
+  virtual OdDbStub *blockId(const OdRxObject *pBlockRef) const = 0;
+  virtual OdGeMatrix3d blockTransform(const OdRxObject *pBlockRef) const = 0;
+
+  virtual OdRxIteratorPtr newAttribIterator(const OdRxObject *pBlockRef, bool bSkipErased = true) const = 0;
+  virtual bool isAttribute(const OdRxObject *pAttrib) const = 0;
+  virtual OdDbStub *getId(const OdRxObject *pObj) const = 0;
+
+  // is generic BlockRef (Gs willn't treat drawable as block reference if this method return false)
+  // this method can be useful to filter out incompatible entities inherited from BlockRef.
+  virtual bool isGeneric(const OdRxObject *pBlockRef) const = 0;
+  // is MInsert block
+  virtual bool isMInsert(const OdRxObject *pBlockRef) const = 0;
+  // is basic BlockRef
+  virtual bool isBasic(const OdRxObject *pBlockRef) const = 0;
+};
+
+typedef OdSmartPtr<OdDbBaseBlockRefPE> OdDbBaseBlockRefPEPtr;
+
+
+/** \details
+  This class is the protocol extension to be used as a entities sorting object abstraction,
+  independent of the underlying database (OdDbDatabase or OdDgDatabase).
+
+  \sa
+  TD_DbRoot
+
+  <group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdDbBaseSortEntsPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseSortEntsPE);
+
+  virtual OdDbStub *blockId(const OdRxObject *pSortents) const = 0;
+};
+
+typedef OdSmartPtr<OdDbBaseSortEntsPE> OdDbBaseSortEntsPEPtr;
+
+
+/** \details
+  This class is the protocol extension to be used as a long transaction abstraction,
+  independent of the underlying database (OdDbDatabase or OdDgDatabase).
+
+  \sa
+  TD_DbRoot
+
+  <group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdDbBaseLongTransactionPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseLongTransactionPE);
+
+  virtual OdDbStub *destinationBlock(const OdRxObject *pLT) const = 0;
+
+  virtual bool workSetHas(const OdRxObject *pLT, OdDbStub *pId) const = 0;
+  virtual OdRxIteratorPtr newWorkSetIterator(const OdRxObject *pLT, bool incRemoved = false, bool incSecondary = false) const = 0;
+
+  virtual OdDbStub *getOwner(OdDbStub *pId) const = 0;
+  virtual OdDbStub *getId(const OdRxObject *pObj) const = 0;
+};
+
+typedef OdSmartPtr<OdDbBaseLongTransactionPE> OdDbBaseLongTransactionPEPtr;
+
+/** \details
+This class defines the interface for the Hatch Protocol Extension classes.
+<group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdDbBaseHatchPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseHatchPE);
+  enum HatchStyle
+  {
+    kNormal = 0, // Hatch toggles on each boundary.
+    kOuter  = 1, // Hatch turns off after first inner loop.
+    kIgnore = 2  // Hatch ignores inner loop
+  };
+
+  enum HatchLoopType
+  {
+    kDefault = 0,        // Not yet specified.
+    kExternal = 1,        // Defined by external entities.
+    kPolyline = 2,        // Defined by OdGe polyline.
+    kDerived = 4,        // Derived from a picked point.
+    kTextbox = 8,        // Defined by text.
+    kOutermost = 0x10,     // Outermost loop.
+    kNotClosed = 0x20,     // Open loop.
+    kSelfIntersecting = 0x40,     // Self-intersecting loop.
+    kTextIsland = 0x80,     // Text loop surrounded by an even number of loops.
+    kDuplicate = 0x100,    // Duplicate loop.
+    kIsAnnotative = 0x200,    // The bounding area is an annotative block.
+    kDoesNotSupportScale = 0x400,    // The bounding type does not support scaling
+    kForceAnnoAllVisible = 0x800,    // Forces all annotatives to be visible
+    kOrientToPaper = 0x1000,   // Orients hatch loop to paper
+    kIsAnnotativeBlock = 0x2000    // Describes if the hatch is an annotative block.
+  };
+
+  virtual int numLoops(const OdRxObject* pHatch) const = 0;
+  virtual OdInt32 loopTypeAt(const OdRxObject* pHatch, int loopIndex) const = 0;
+  virtual void getLoopAt(const OdRxObject* pHatch, int loopIndex, OdArray<OdGeCurve2d*>& edgePtrs) const = 0;
+  virtual void getLoopAt(const OdRxObject* pHatch, int loopIndex, OdGePoint2dArray& vertices, OdGeDoubleArray& bulges) const = 0;
+  virtual HatchStyle hatchStyle(const OdRxObject* pHatch) const = 0;
+  virtual bool isGradient(const OdRxObject* pHatch) const = 0;
+  virtual bool isSolidFill(const OdRxObject* pHatch) const = 0;
+
+  //In TD hatch is always hatchPE, but in TG hatchPE can be added to any entity
+  virtual bool isReallyHatch(const OdRxObject* pHatch) const = 0;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbHatchPE object pointers.
+*/
+typedef OdSmartPtr<OdDbBaseHatchPE> OdDbBaseHatchPEPtr;
+
+
+#endif // _ODDB_BASEDATABASE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseHostAppServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseHostAppServices.h
new file mode 100755
index 0000000..b5c2140
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseHostAppServices.h
@@ -0,0 +1,551 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDB_BASEHOSTAPPSERVICES_INCLUDED_
+#define _ODDB_BASEHOSTAPPSERVICES_INCLUDED_
+
+
+#include "TD_PackPush.h"
+
+
+#include "DbRootExport.h"
+#include "DbBaseDatabase.h"
+#include "DbHostAppProgressMeter.h"
+#include "RxObject.h"
+#include "SmartPtr.h"
+#include "OdFont.h"
+
+class OdGsDevice;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGsDevice object pointers.
+*/
+typedef OdSmartPtr<OdGsDevice> OdGsDevicePtr;
+
+class OdDbUndoController;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbUndoController object pointers.
+*/
+typedef OdSmartPtr<OdDbUndoController> OdDbUndoControllerPtr;
+
+class OdAuditInfo;
+class OdTtfDescriptor;
+
+
+typedef unsigned long LCID;
+
+enum OdSDIValues
+{
+  kMDIEnabled             = 0,
+  kSDIUserEnforced        = 1,
+  kSDIAppEnforced         = 2,
+  kSDIUserAndAppEnforced  = 3
+};
+
+enum ProdIdCode
+{
+  kProd_ACAD = 1, // Plain
+  kProd_LT   = 2, // Lite
+  kProd_OEM  = 3, // OEM
+  kProd_OdDb = 4  // ..
+};
+
+
+/** \details
+    This class is the base class for platform specific operations within Teigha.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT DBROOT_EXPORT OdDbBaseHostAppServices : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBaseHostAppServices);
+
+  OdDbBaseHostAppServices();
+
+  enum RemapFileContext
+  {
+    kDrawingOpen        = 0,
+    kXrefResolution     = 1,
+    kRasterResolution   = 2
+  };
+
+  enum FindFileHint
+  {
+    kDefault              = 0,  // Any file.
+    kFontFile             = 1,  // Can be either SHX or TTF file.
+    kCompiledShapeFile    = 2,  // SHX file.
+    kTrueTypeFontFile     = 3,  // TTF file.
+    kEmbeddedImageFile    = 4,  // Image file (ISM).
+    kXRefDrawing          = 5,  // Drawing template file (DWT).
+    kPatternFile          = 6,  // Pattern file (PAT).
+    kTXApplication        = 7,  // Teigha(R) Xtension file (TX).
+    kFontMapFile          = 8,  // FontMap file (FMP).
+    kUnderlayFile         = 9,  // Underlay file.
+    kTextureMapFile       = 10, // Material texture file.
+    kPhotometricWebFile   = 11  // Photometric web file (IES).
+  };
+
+  enum GsBitmapDeviceFlags
+  {
+    kUseSoftwareHLR       = (1 << 0), // Enable use of SoftwareHLR on device
+    kFor2dExportRender    = (1 << 1), // Device for shaded viewport export
+    kFor2dExportRenderHLR = (1 << 2), // Device for HiddenLine viewport export
+    kForThumbnail         = (1 << 3)  // Device for thumbnail image generation
+  };
+
+  /** \details
+    Returns the fully qualified path to the specified file.
+
+    \param filename [in]  Name of the file to find.
+    \param pDb [in]  Pointer to the database context.
+    \param hint [in]  Hint that indicates the type of file that is required.
+
+    \remarks
+    Returns an empty string if the file is not found.
+
+    This function is called by Teigha when access is needed to a
+    file, such as a font file, a template file, etc.
+
+    pDb == 0 specifies that this file search is not related to a database.
+
+    If pDb != 0, call pDb->getFilename() to determine the path to the DWG
+    file associated with the database.
+
+    The typical search order is as follows:
+
+    1.  The filename itself.
+    2.  The current directory.
+    3.  The drawing directory (for shx font, image, and xref files).
+    4.  The directories listed in the ACAD environment variable.
+    5.  The Windows fonts directory (only for TTF fonts on Windows).
+
+    hint must be one of the following:
+
+    <table>
+    Name                    Value     Description Extension
+    kDefault                0         Any file.                         any
+    kFontFile               1         Can be either SHX or TTF file.    SHX or TTF
+    kCompiledShapeFile      2         SHX file.                         SHX
+    kTrueTypeFontFile       3         TTF file.                         TTF
+    kEmbeddedImageFile      4         Image file.                       ISM
+    kXRefDrawing            5         Drawing template file.            DWT
+    kPatternFile            6         Pattern file (PAT)                PAT
+    kTXApplication          7         Teigha(R) Xtension file.            TX
+    kFontMapFile            8         FontMap file                      FMP
+    kUnderlayFile           9         Underlay file
+    kTextureMapFile        10
+    </table>
+
+    \note
+    The client application can, in fact return any non-null string, so long as
+    the application can handle that string in OdDbSystemServices::createFile.
+  */
+  virtual OdString findFile(
+    const OdString& filename,
+    OdDbBaseDatabase* pDb = 0,
+    FindFileHint hint = kDefault) = 0;
+
+  /** \details
+    Returns an instance of an OdDbHostAppProgressMeter.
+  */
+  virtual OdDbHostAppProgressMeter* newProgressMeter();
+
+  /** \details
+    Notification function called whenever Teigha no longer needs the specified
+    ProgressMeter object.
+
+    \param pProgressMeter [in]  Pointer to the ProgressMeter object no longer needed by Teigha.
+
+    \note
+    The default implementation of this function does nothing but return.
+  */
+  virtual void releaseProgressMeter(
+    OdDbHostAppProgressMeter* pProgressMeter);
+
+  /** \details
+    Returns the name of the client program.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getLibName()
+  */
+  virtual const OdString program() = 0;
+
+  /** \details
+    Returns the name of the client product.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    \note
+    The default implementation of this function returns program().
+  */
+  virtual const OdString product() = 0;
+
+  /** \details
+    Returns the name of the client company.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getCompanyName().
+  */
+  virtual const OdString companyName() = 0;
+
+  /** \details
+    Returns the name of the client product code.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    prodcode() returns one of the following:
+
+    <table>
+    Name          Value   Description
+    kProd_ACAD    1       Plain
+    kProd_LT      2       Lite
+    kProd_OEM     3       OEM
+    kProd_OdDb    4       ..
+    </table>
+
+    \note
+    The default implementation of this function returns kProd_OEM, and should not be overridden.
+  */
+  virtual ProdIdCode prodcode();
+
+  /** \details
+    Returns the release major and minor version string of the client application.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getLibVersion().
+  */
+  virtual const OdString releaseMajorMinorString();
+
+  /** \details
+    Returns the release major version of the client application.
+
+    \note
+    The default implementation of this function returns TD_MAJOR_VERSION.
+  */
+  virtual int releaseMajorVersion();
+
+  /** \details
+    Returns the release minor version of the client application.
+
+    \note
+    The default implementation of this function returns TD_MINOR_VERSION.
+  */
+  virtual int releaseMinorVersion();
+
+  /** \details
+    Returns the release version string of the client application.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getLibVersion().
+  */
+  virtual const OdString versionString();
+
+  /** \details
+    Displays the specified warning message.
+
+    \param warnVisGroup [in]  Group of warning message visibility (always visible if empty).
+    \param message [in]  Warning message.
+    \param warningOb [in]  Warning object.
+    \param objectId [in]  Object ID of the object associated with the warning.
+
+    \note
+    These functions call odSystemServices()->warning(message) to display the warning.
+  */
+  virtual void warning(
+    const OdString& message);
+  virtual void warning(
+    const char* warnVisGroup,
+    const OdString& message);
+  virtual void warning(
+    OdWarning warningOb);
+  virtual void warning(
+    const char* warnVisGroup,
+    OdWarning warningOb);
+
+  //virtual void warning(
+  //  OdWarning warningOb,
+  //  OdDbObjectId objectId);
+
+  /** \details
+    Returns the error description associated with the specified error code.
+    \param errorCode [in]  Error code.
+
+    \note
+    The default implementation of this function returns formatMessage(errorCode).
+  */
+  virtual OdString getErrorDescription(
+    unsigned int errorCode);
+
+  /** \details
+    Returns a formatted message corresponding to the specified error code(s).
+    \param errorCode [in]  Error code.
+  */
+  virtual OdString formatMessage(
+    unsigned int errorCode,...);
+#ifdef ODA_FORMAT
+  virtual OdString formatMessage(unsigned int errorCode, long i, const OdString& str) { return formatMessage(errorCode, i, (void*)str.c_str()); }
+#endif
+
+  /** \details
+    Returns an alternate UndoController object for Teigha.
+
+    \remarks
+    The default implementation of this function always returns a null SmartPointer.
+
+    Each database requires at most 2 undo controllers (for undo and redo).
+  */
+  virtual OdDbUndoControllerPtr newUndoController();
+
+  /** \details
+  Returns an alternate stream object for undo/redo operations.
+
+  \remarks
+  The default implementation of this function always returns a null SmartPointer.
+  It may return null in the user application. In this case the default memory based stream will be used.
+  In fact this stream will be used for the current undo/redo step. Other steps can be controlled by
+  OdDbUndoController.
+  */
+  virtual OdStreamBufPtr newUndoStream();
+
+  /** \details
+    Print the audit report for the specified AuditInfo object.
+
+    \param pAuditInfo [in]  Pointer to an OdDbAuditInfo object.
+    \param strLine [in]  The string to print.
+    \param printDest [in]  Print destination.
+
+    \remarks
+    The default implementation of this function does nothing but return.
+  */
+  virtual void auditPrintReport(
+    OdAuditInfo* pAuditInfo,
+    const OdString& strLine,
+    int printDest) const;
+
+  /** \details
+    Locates the TTF or TTC file containing the specified font description.
+
+    \param description [in]  Font description.
+    \param filename [out]  Receives the name of the TrueType font file.
+
+    \remarks
+    Returns true and the filename if and only if the font file was found.
+
+    \note
+    The non-Windows builds of this function do nothing but return.
+  */
+  virtual bool ttfFileNameByDescriptor(
+    const OdTtfDescriptor& description,
+    OdString& filename) = 0;
+
+  /** \details
+    Returns the font file to be used when a given font file is
+    not found by Teigha.
+
+    \sa
+    Font Handling
+  */
+  virtual OdString getAlternateFontName() const = 0;
+
+  /** \details
+    Returns the name of the font mapping file used by the getPreferableFont function.
+
+    \sa
+    Font Handling
+
+    \note
+    The default implementation of this function does nothing but return an empty string.
+    It will be fully implemented in a future release.
+  */
+  virtual OdString getFontMapFileName() const = 0;
+
+  /** \details
+    Returns the preferable font name for the specified font name and type.
+
+
+    \param fontName [in]  Font name.
+    \param fontType [in]  Font type.
+
+    \remarks
+    This function is called as the first step in the process of resolving a font file.
+    The default implementation tries to locate a font mapping file by calling
+    getFontMapFileName, and substitutes the font name based on the contents of this
+    file.
+
+    fontType must be one of the following:
+
+    <table>
+    Name                    Value    Description
+    kFontTypeUnknown        0        Unknown.
+    kFontTypeShx            1        SHX font.
+    kFontTypeTrueType       2        TrueType font.
+    kFontTypeShape          3        Shape file.
+    kFontTypeBig            4        BigFont file.
+    </table>
+
+    \sa
+    Font Handling
+  */
+  virtual OdString getPreferableFont(
+    const OdString& fontName,
+    OdFontType fontType) = 0;
+
+  /** \details
+    Returns the font to be used when the specified font is not found.
+
+    \param fontName [in]  Font name.
+    \param fontType [in]  Font type.
+
+    \remarks
+    fontType must be one of the following:
+
+    <table>
+    Name                    Value    Description
+    kFontTypeUnknown        0        Unknown.
+    kFontTypeShx            1        SHX font.
+    kFontTypeTrueType       2        TrueType font.
+    kFontTypeShape          3        Shape file.
+    kFontTypeBig            4        BigFont file.
+    </table>
+
+    The default implementation of this function calls getAlternateFontName for
+    fonts that are not of type kFontTypeShape or kFontTypeBig. When they are,
+    and empty string is returned.
+
+    Client code could override this function to perform custom substitution
+    for these types of fonts.
+
+    \sa
+    Font Handling
+  */
+  virtual OdString getSubstituteFont(
+    const OdString& fontName,
+    OdFontType fontType) = 0;
+
+  /** \details
+    Collects folders with TrueType fonts.
+
+    \param aDirs [out]   Array names of folders.
+
+    \sa
+    Font Handling
+  */
+  virtual bool getSystemFontFolders(
+    OdStringArray& aDirs) {return false; }
+
+  /** \details
+    Collects TrueType font paths.
+
+    \param res [out]      Array of full file names of TrueType fonts.
+    \param sPath [in]    Array of folders paths with TrueType files.
+    \param sFilter [in]  File name filter.
+
+    \sa
+    Font Handling
+  */
+  virtual void collectFilePathsInDirectory(OdStringArray& res, // out
+    const OdString& sPath, // in
+    const OdString& sFilter = L"*.*") { return; }
+
+  /** \details
+    Prompts the user for a filename, and returns their response.
+
+    \param flags [in]  Dialog behavior.
+    \param dialogCaption [in]  Dialog caption.
+    \param defExt [in]  Default file extension without "."
+    \param defFilename [in]  Default filename.
+    \param filter [in]  Filter pattern.
+
+    \remarks
+    flags must be one of the following:
+
+    <table>
+    Name                  Value   Description
+    kGfpForOpen           0       For Open.
+    kGfpForSave           1       For Save.
+    kGfpOverwritePrompt   2       Enable overwrite prompt displaying when exist file selected for saving.
+    </table>
+
+    This function is intended for the selection of filenames via dialog boxes,
+    although other methods may be used.
+
+    *  Returns "canceled" if the user cancels the request.
+    *  Returns "unsupported" if the application does not support this user input.
+
+    \note
+    The default implementation of this function does nothing but return "unsupported".
+  */
+  virtual OdString fileDialog(
+    int flags,
+    const OdString& dialogCaption = OdString::kEmpty,
+    const OdString& defExt = OdString::kEmpty,
+    const OdString& defFilename = OdString::kEmpty,
+    const OdString& filter = OdString::kEmpty);
+
+  /** \details
+    Returns a the gsBitmapDevice associated with this HostAppServices object.
+
+    \param pViewObj [in]  OdAbstractViewPE compatible object (OdGsView, OdDbViewport or etc.).
+    \param pDb [in]  Pointer to the database context.
+    \param flags [in]  Bitmap device flags.
+  */
+  virtual OdGsDevicePtr gsBitmapDevice(
+    OdRxObject* pViewObj = NULL,
+    OdDbBaseDatabase* pDb = NULL,
+    OdUInt32 flags = 0);
+
+  /** \details
+    Returns the path to the temporary files folder.
+  */
+  virtual OdString getTempPath() const;
+
+// ODA_MT_DBIO_BEGIN
+  /** \details
+    MtMode controls if multi-threading is used (bit-coded)
+  */
+  virtual OdInt16 getMtMode() const;
+
+  /** \details
+    Returns the number of threads for required multi-threaded mode.
+  */
+  virtual int numThreads(OdDb::MultiThreadedMode mtMode);
+// ODA_MT_DBIO_END
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // _ODDB_BASEHOSTAPPSERVICES_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseSubentId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseSubentId.h
new file mode 100755
index 0000000..28d98e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBaseSubentId.h
@@ -0,0 +1,255 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDB_DBBASESUBENT_H
+#define ODDB_DBBASESUBENT_H /*!DOM*/
+
+#include "TD_PackPush.h"
+
+#include "DbRootExport.h"
+#include "DbStubPtrArray.h"
+
+namespace OdDb
+{
+  enum SubentType
+  {
+    kNullSubentType = 0,
+    kFaceSubentType,
+    kEdgeSubentType,
+    kVertexSubentType,
+    kMlineSubentCache,
+	  kClassSubentType
+  };
+}
+
+/** \details
+    This class implements Subentity Id objects for OdDbEntity objects in an OdDbDatabase instance.  
+
+    \remarks
+    A given OdDbEntity object may consist of any number of graphical subentities.
+    
+    Subentity type must be one of the following:
+
+    <table>
+    Name                        Value
+    OdDb::kNullSubentType       0
+    OdDb::kFaceSubentType       1
+    OdDb::kEdgeSubentType       2
+    OdDb::kVertexSubentType     3   
+    OdDb::kMlineSubentCache     4  
+    </table>
+
+    Each SubentityId object is created from a Subentity type and an index.
+    
+    Library: TD_DbRoot
+
+    <group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdDbSubentId
+{
+public:
+  OdDbSubentId()
+    : m_Type(OdDb::kNullSubentType)
+    , m_Index(0) 
+  {}
+
+  OdDbSubentId(OdDb::SubentType type, OdGsMarker index)
+    : m_Type(type)
+    , m_Index(index) 
+  {}
+
+  bool operator ==(const OdDbSubentId& subentId) const
+  {
+    return ((m_Index == subentId.m_Index) && (m_Type == subentId.m_Type));
+  }
+      
+  bool operator !=(const OdDbSubentId& subentId) const
+  {
+    return ((m_Index != subentId.m_Index) || (m_Type != subentId.m_Type));
+  }
+  
+  /** \details
+    Returns the type of this SubentId object.
+
+    \remarks
+    
+    type returns one of the following:
+
+    <table>
+    Name                        Value
+    OdDb::kNullSubentType       0
+    OdDb::kFaceSubentType       1
+    OdDb::kEdgeSubentType       2
+    OdDb::kVertexSubentType     3   
+    OdDb::kMlineSubentCache     4  
+    </table>
+  */
+  OdDb::SubentType type () const 
+  { 
+    return m_Type; 
+  }
+  
+  /** \details
+    Sets the type of this SubentId object.
+
+    \param type [in]  Type.
+    
+    \remarks
+    type must be one of the following:
+
+    <table>
+    Name                        Value
+    OdDb::kNullSubentType       0
+    OdDb::kFaceSubentType       1
+    OdDb::kEdgeSubentType       2
+    OdDb::kVertexSubentType     3   
+    OdDb::kMlineSubentCache     4  
+    </table>
+  */
+  void setType(OdDb::SubentType type) 
+  { 
+    m_Type = type; 
+  }
+  /** \details
+    Returns the index of this SubentId object.
+  */
+  OdGsMarker index() const 
+  { 
+    return m_Index; 
+  }
+  
+  /** \details
+    Sets the index of this SubentId object.
+    \param index [in]  Index.
+  */
+  void setIndex(OdGsMarker index) 
+  { 
+    m_Index = index; 
+  }
+
+private:
+  OdDb::SubentType m_Type;
+  OdGsMarker       m_Index;
+};
+
+/** \details
+    This base class uniquely defines subentities within in a database instance.
+
+    \remarks
+    Each OdDbBaseFullSubentPath object consists of a OdDbSubentId object and
+    an ordered array of Object IDs. The SubentId consists the index and subentType
+    of the object. The array of Object IDs defines the path to the 
+    subentity from the outermost entity to the entity containing the subentity.
+    
+    Library: TD_DbRoot
+
+    <group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdDbBaseFullSubentPath
+{
+public:
+  OdDbBaseFullSubentPath() 
+  {}
+  OdDbBaseFullSubentPath(OdDb::SubentType type, OdGsMarker index)
+    : m_SubentId(type, index) 
+  {}
+  OdDbBaseFullSubentPath(OdDbStub* entId, OdDbSubentId subId)
+    : m_SubentId(subId) 
+  {
+    m_ObjectIds.clear();
+    m_ObjectIds.append(entId) ;
+  }
+
+  OdDbBaseFullSubentPath(OdDbStub* entId, OdDb::SubentType type, OdGsMarker index)
+    : m_SubentId(type, index)
+  {
+    m_ObjectIds.clear();
+    m_ObjectIds.append(entId) ;
+  }
+
+  OdDbBaseFullSubentPath(OdDbStubPtrArray objectIds, OdDbSubentId subId)
+    : m_ObjectIds(objectIds) 
+    , m_SubentId(subId) 
+  {
+  }
+
+  void objectIds(OdDbStubPtrArray& objectIdsArg) const
+  {
+    objectIdsArg = m_ObjectIds;
+  }
+
+  OdDbBaseFullSubentPath& operator =(const OdDbBaseFullSubentPath& fullSubentPath)
+  {
+    m_ObjectIds = fullSubentPath.objectIds();
+    m_SubentId  = fullSubentPath.subentId();
+    return *this;
+  }
+
+  bool operator==(const OdDbBaseFullSubentPath& fullSubentPath) const
+  {
+    return m_ObjectIds == fullSubentPath.objectIds() && m_SubentId == fullSubentPath.subentId();
+  }
+
+  /** \details
+    Returns a reference to the embedded OdDbStubPtrArray object in this BaseFullSubentPath object.
+  */
+  const OdDbStubPtrArray& objectIds() const
+  {
+    return m_ObjectIds;
+  }
+  OdDbStubPtrArray& objectIds()
+  {
+    return m_ObjectIds;
+  }
+  
+  /** \details
+    Returns a reference to, or a copy of, the embedded OdDbSubentId object in this BaseFullSubentPath object.
+  */
+  const OdDbSubentId subentId() const
+  {
+    return m_SubentId;
+  }
+
+  OdDbSubentId& subentId()
+  {
+    return m_SubentId;
+  }
+  
+protected:              
+  OdDbStubPtrArray  m_ObjectIds;
+  OdDbSubentId      m_SubentId;
+};
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbBaseFullSubentPath object pointers.
+*/
+typedef OdArray<OdDbBaseFullSubentPath> OdDbBaseFullSubentPathArray;
+
+DBROOT_EXPORT OdRxObject* baseDatabaseBy(OdDbStub* id);
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockBegin.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockBegin.h
new file mode 100755
index 0000000..1fd7071
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockBegin.h
@@ -0,0 +1,194 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBBLOCKBEGIN_INCLUDED_
+#define _ODDBBLOCKBEGIN_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+class OdDbBlockBeginImpl;
+
+/** \details
+    This class represents BlockBegin entities in an OdDbDatabase instance.  
+    
+    \remarks
+    OdDbBlockBegin entities are automatically created and handled by Teigha for
+    each OdDbBlockTableRecord object.
+     
+    Client applications may add extended data or extension dictionaries to these 
+    entities, but should not create or delete them.
+    
+    These entities have no associated geometries.
+    
+    \note
+    Do not derive from this class.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlockBegin : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockBegin);
+
+  OdDbBlockBegin();
+  /** \details
+    Reads the .dwg file data of this object.
+    
+    \param pFiler [in] Filer object from which data are read.
+    
+    \remarks
+    Returns the filer status.
+    
+    This function is called by dwgIn() to allow the object to read its data.
+    
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dwgInFields(pFiler) returned. 
+    4) Call the OdDbDwgFiler(pFiler) methods to read each of the object's data items in the order they were written.
+    5) Return pFiler->filerStatus().
+  */
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+ 
+  /** \details
+    Writes the .dwg file data of this object.
+    
+    \param pFiler [in] Pointer to the filer to which data are written. 
+    
+    \remarks
+    This function is called by dwgIn() to allow the object to write its data. 
+
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dwgOutFields(pFiler). 
+    3) Call the OdDbDwgFiler(pFiler) methods to write each of the object's data items in the order they were written.
+  */
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in] Pointer to the filer from which data are read.  
+    
+    \remarks
+    Returns the filer status. 
+
+    This function is called by dxfIn() to allow the object to read its data. 
+
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written. 
+    5) Return pFiler->filerStatus().
+  */
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Writes the DXF data of this object. 
+    
+    \param pFiler [in] Pointer to the filer to which data are to be written.   
+    
+    \remarks
+    This function is called by dxfOut() to allow the object to write its data. 
+
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dxfOutFields(pFiler).
+    3) Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items 
+    in the order they were written.
+  */
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF R12 format data of this object.  
+    
+    \param pFiler [in] Pointer to the filer from which data are to be read.    
+    
+    \remarks
+    Returns the filer status. 
+
+    This function is called by dxfIn() to allow the object to read its data. 
+
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dxfInFields_R12(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfOutFields_R12
+    (pFiler) returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in 
+    the order they were written. 
+    5) Return pFiler->filerStatus().
+ */
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Writes the DXF data of this object.   
+    
+    \param pFiler [in] Pointer to the filer to which data are to be written.     
+    
+    \remarks
+    Returns the filer status. 
+
+    This function is called by dxfOut() to allow the object to write its data. 
+
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dxfOutFields(pFiler). 
+    3) Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items in the order they were written.
+  */    
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \note
+    Always returns eInvalidExtents.
+  */
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+  
+  /** \details
+    Reads the DXF format data of this object from the specified filer.    
+    
+    \param pFiler [in] Pointer to the filer from which the data are to be read.      
+    
+    \remarks
+    Returns the filer status. 
+
+    This function calls this object's dxfInFields(pFiler), then loads any Xdata associated with this object.
+  */
+  virtual OdResult dxfIn(OdDbDxfFiler* pFiler);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBlockBegin object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockBegin> OdDbBlockBeginPtr;
+
+#include "TD_PackPop.h"
+
+#endif 
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockEnd.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockEnd.h
new file mode 100755
index 0000000..2ffedd9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockEnd.h
@@ -0,0 +1,146 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_BLOCK_END_
+#define _OD_DB_BLOCK_END_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+    This class represents BlockEnd entities in an OdDbDatabase instance.  
+    
+    \remarks
+    OdDbBlockEnd entities are automatically created and handled by Teigha for
+    each OdDbBlockTableRecord object.
+     
+    Client applications may add extended data or extension dictionaries to these 
+    entities, but should not create or delete them.
+    
+    These entities have no associated geometries.
+
+    \note
+    Do not derive from this class.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlockEnd : public OdDbEntity
+{
+public:
+  
+  ODDB_DECLARE_MEMBERS(OdDbBlockEnd);
+
+  OdDbBlockEnd();
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in] Pointer to the filer from which data are read.  
+    
+    \remarks
+    Returns the filer status. 
+
+    This function is called by dxfIn() to allow the object to read its data. 
+
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written. 
+    5) Return pFiler->filerStatus().
+  */
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Writes the DXF data of this object. 
+    
+    \param pFiler [in] Pointer to the filer to which data are to be written.   
+    
+    \remarks
+    This function is called by dxfOut() to allow the object to write its data. 
+
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dxfOutFields(pFiler).
+    3) Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items in the order they were written.
+  */
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF R12 format data of this object.  
+    
+    \param pFiler [in] Pointer to the filer from which data are to be read.    
+    
+    \remarks
+    Returns the filer status. 
+
+    This function is called by dxfIn() to allow the object to read its data. 
+
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dxfInFields_R12(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfOutFields_R12(pFiler) returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written. 
+    5) Return pFiler->filerStatus().
+ */
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Writes the DXF data of this object.   
+    
+    \param pFiler [in] Pointer to the filer to which data are to be written.     
+    
+    \remarks
+    Returns the filer status. 
+
+    This function is called by dxfOut() to allow the object to write its data. 
+
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dxfOutFields(pFiler). 
+    3) Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items in the order they were written.
+  */
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \note
+    Always returns eInvalidExtents.
+  */
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBlockEnd object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockEnd> OdDbBlockEndPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockIterator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockIterator.h
new file mode 100755
index 0000000..72962d4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockIterator.h
@@ -0,0 +1,189 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDBBLOCKITERATOR_H
+#define ODDBBLOCKITERATOR_H
+
+#include "RxObject.h"
+#include "OdArrayPreDef.h"
+
+class OdDbObjectId;
+class OdDbFilter;
+class OdDbBlockTableRecord;
+class OdDbBlockIterator;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBlockIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockIterator> OdDbBlockIteratorPtr;
+
+/** \details
+    This class implements Iterator objects that traverse entries in OdDbBlockTableRecord objects in an OdDbDatabase instance.
+  
+    \remarks
+    Instances are returned by OdDbBlockTableRecord::newIterator().
+
+    <group OdDb_Classes>
+*/
+class  TOOLKIT_EXPORT OdDbBlockIterator : public OdRxObject
+{
+protected: 
+  OdDbBlockIterator() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdDbBlockIterator);
+  
+  /** \details
+    Sets this Iterator object to reference the OdDbBlock that it would normally return first.
+     
+    \remarks
+    Allows multiple traversals of the Iterator list.
+  */
+    virtual void start() = 0;
+  
+  /** \details
+    Returns the Object ID of the next object, and increments this Iterator object.
+  */
+  virtual OdDbObjectId next() = 0;
+  
+  /** \details
+    Returns the Object ID of the record currently referenced by this Iterator object.
+  */
+  virtual OdDbObjectId id() const = 0;
+  
+  /** \details
+    Positions this Iterator object at the specified record.
+    \param objectId [in]  Object ID of the record.
+    \remarks
+    Returns true if and only if successful.
+  */
+    virtual bool seek(
+    OdDbObjectId objectId) = 0;
+
+ /** \details
+    Returns an Iterator object that can be used to traverse the specified Block Table Record.
+
+    \param pBtr [in]  Pointer the Block Table Record to traverse.
+ */
+  static OdDbBlockIteratorPtr newBlockIterator(
+    const OdDbBlockTableRecord* pBtr);
+
+ /** \details
+    Returns an Iterator object that can be used to traverse queries defined by OdDbFilter objects 
+    applied to the specified Block Table Record.
+
+    \param pBtr [in]  Pointer the Block Table Record to traverse.
+    \param pFilter [in]  Pointer to the filter.
+ */
+  static OdDbBlockIteratorPtr newFilteredIterator(
+      const OdDbBlockTableRecord* pBtr, 
+      const OdDbFilter* pFilter);
+
+ /** \details
+    Returns an Iterator object that can be used to traverse queries defined by an 
+    array of OdDbFilter objects 
+    applied to the specified Block Table Record.
+
+    \param pBtr [in]  Pointer the Block Table Record to traverse.
+    \param filters [in]  Array of pointers to filter objects.
+ */
+  static OdDbBlockIteratorPtr newCompositeIterator(
+      const OdDbBlockTableRecord* pBtr, 
+      const OdArray<OdSmartPtr<OdDbFilter> >& filters);
+
+};
+/** \details
+  This class implements Iterator objects that traverse queries defined by OdDbFilter objects 
+  on Block Table Records.
+
+  \sa
+  TD_Db
+
+  \remarks
+  This class is used by OdDbCompositeFilteredBlockIterator.
+  <group OdDb_Classes>
+*/
+class  TOOLKIT_EXPORT OdDbFilteredBlockIterator : public OdDbBlockIterator
+{
+protected: 
+  OdDbFilteredBlockIterator() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdDbFilteredBlockIterator);
+
+  /** \details
+    Returns the estimated fraction [0.0 .. 1.0] of the contents that will
+    be selected by the OdDbFilter query.  
+    
+    \remarks
+    Used to order the OdDbFilteredBlockIterator objects during a block traversal.
+    
+    *  0.0 forces the iterator to be used first.
+    *  1.0 forces the iterator to be used last. 
+
+    The filters with the fewest hits will be applied first.     
+  */
+  virtual double estimatedHitFraction() const = 0;
+  
+  /** \details
+    Returns true if and only if specified object passes the OdDbFilter query.
+    
+    \param objectId [in]  Object ID of the entity to be tested.
+  */
+  virtual bool accepts(
+    OdDbObjectId objectId) const = 0;
+    
+  /** \details
+    Returns true if and only if the Index iterator, when not the primary iterator,
+    is to buffer its output.
+    
+    \remarks
+    When false, only the first index/filter pair is traversed, with subsequent pairs
+    queried via accepts().
+
+    If true, after all the IDs from the previous  
+    iterator have been added to the buffer, the start(), next() and id() of this iterator are be used
+    iterate through the data.
+  */
+    virtual bool buffersForComposition() const;
+  
+  /** \details
+    Adds the specified Object ID to the buffer of an Index iterator.
+    
+    \param objectId [in]  Object ID of the entity to be added.
+    
+    \sa
+    buffersForComposition    
+  */
+  virtual void addToBuffer(
+    OdDbObjectId objectId);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbFilteredBlockIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbFilteredBlockIterator> OdDbFilteredBlockIteratorPtr;
+
+
+#endif // ODDBBLOCKITERATOR_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockReference.h
new file mode 100755
index 0000000..01d7c4a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockReference.h
@@ -0,0 +1,630 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_BLOCK_REFERENCE_
+#define _OD_BLOCK_REFERENCE_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "DbDatabase.h"
+#include "Ge/GeMatrix3d.h"
+#include "DbObjectIterator.h"
+
+class OdGeScale3d;
+class OdDbAttribute;
+class OdDbSequenceEnd;
+class OdDbBlockReferenceImpl;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbAttribute object pointers.
+*/
+typedef OdSmartPtr<OdDbAttribute> OdDbAttributePtr;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSequenceEnd object pointers.
+*/
+typedef OdSmartPtr<OdDbSequenceEnd> OdDbSequenceEndPtr;
+
+/** \details
+    This class represents block references (Inserts) in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbBlockReference : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockReference);
+
+  OdDbBlockReference();
+  
+  /** \details
+    Returns the Object ID of the block table record associated with this OdDbBlockReference (DXF 2).
+  */
+  OdDbObjectId blockTableRecord() const;
+
+  /** \details
+    Sets the Object ID of the block table record associated with this OdDbBlockReference (DXF 2).
+    
+    \param objectId [in]  Object ID of the block.
+  */
+  virtual void setBlockTableRecord(
+    OdDbObjectId objectId);
+
+  /** \details
+    Returns the insertion point of this block reference (WCS equivalent of DXF 10).
+  */
+  virtual OdGePoint3d position() const;
+
+  /** \details
+    Sets the insertion point of this block reference. (WCS equivalent of DXF 10.)
+
+    \param position [in]  Any 3D point.
+  */
+  virtual void setPosition(
+    const OdGePoint3d& position);
+
+  /** \details
+    Returns the scale factors applied to this block reference (DXF 41, 42, 43).
+  */
+  OdGeScale3d scaleFactors() const;
+
+  /** \details
+    Sets the scale factors to be applied to this block reference (DXF 41, 42, 43).
+
+    \param scale [in]  Any 3D scale factor.
+    
+    Throws:
+    <table>
+    Exception             Cause
+    eInvalidInput         One or more scale factors is 0
+    </table>
+  */
+  virtual void setScaleFactors(
+    const OdGeScale3d& scale);
+
+  /** \details
+    Returns the rotation angle applied to this block reference (DXF 50).
+
+    \remarks
+    Rotation is about the Z axis, relative the X-axis, in the coordinate system parallel to
+    this object's OCS, but with its origin at this object's insertion point.
+
+    \note
+    All angles are expressed in radians.
+  */
+  double rotation() const;
+
+  /** \details
+    Sets the rotation angle to be applied to this block reference, in radians (DXF 50).
+
+    \remarks
+    Rotation is about the Z axis, relative the X-axis, in the coordinate system parallel to
+    this object's OCS, but with its origin at this object's insertion point.
+
+    \param angle [in]  Rotation angle.
+    
+    \note
+    All angles are expressed in radians.
+  */
+    virtual void setRotation(
+    double angle);
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    
+    \param normal [in]  Normal.
+  */
+  virtual void setNormal(
+    const OdGeVector3d& normal);
+
+  /** \details
+    Returns true if and only if there is a plane that contains the entity.
+    In another case this method returns false. 
+  */
+  virtual bool isPlanar() const { return true; }
+  
+  /** \details
+    Returns the plane that contains this entity.
+    
+    \param plane [out]  Receives the plane that contains this entity.
+    \param planarity [out]  Receives the planarity of this entity.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    planarity and plane return values as follows:
+    <table>
+    planarity   Value   Description     Plane
+    kNonPlanar  0       Non-planar      Not set
+    kPlanar     1       Planar          Entity plane
+    kLinear     2       Linear          Arbitrary plane containing this entity
+    </table>
+  */
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+  
+  /** \details
+    Returns the transformation matrix mapping a point in the MCS
+    to the WCS.
+    
+    \remarks
+    The Microspace Coordinate System (MCS) is the WCS within the block definition.
+    Applying this matrix to the center of an arc within the block definition
+    returns the center of the arc as it appears in the block reference.
+  */
+  OdGeMatrix3d blockTransform() const;
+
+  /** \details
+    Sets the transformation matrix mapping a point in the MCS
+    to the WCS.
+    
+    \param xfm [in]  Any 3D transformation matrix.
+    
+    \remarks
+    The Microspace Coordinate System (MCS) is the WCS within the block definition.
+    Applying this matrix to the center of an arc within the block definition
+    returns the center of the arc as it appears in the block reference.
+  */
+  virtual OdResult setBlockTransform(
+    const OdGeMatrix3d& xfm);
+
+  /** \details
+    Appends the specified OdDbAttribute to the attribute list of this block reference.
+
+    \param pAttr [in]  Pointer to the attribute to be added.
+
+    \remarks
+    Returns the Object ID of the newly appended attribute.
+
+    \note
+    This block reference becomes the owner of the passed in attribute, and the attribute
+    is added to the database to which this block reference belongs.  
+    This block reference must be added to a database before calling this function.
+    The object's attribute list should not be added by the client application.
+  */
+  OdDbObjectId appendAttribute(
+    OdDbAttribute* pAttr);
+
+  /** \details
+    Opens an attribute owned by this block reference.
+
+    \param objId [in]  Object ID of the attribute to be opened.
+    \param mode [in]  Mode in which the attribute is to be opened.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+
+    \remarks
+    Returns a SmartPointer to the opened object if successful, otherwise a null SmartPointer.
+  */
+  OdDbAttributePtr openAttribute(
+    OdDbObjectId ObjId,
+    OdDb::OpenMode mode, 
+    bool openErasedOne = false);
+
+  /** \details
+    Opens the OdDbSequenceEnd entity for this block reference.
+
+    \param mode [in]  Mode in which to open the OdDbSequenceEnd entity.
+
+    \remarks
+    Returns a SmartPointer to the newly opened OdDbSequenceEnd, or a null SmartPointer.
+
+    \note
+    This method is provided solely for applications that store XData on
+    OdDbSequenceEnd entities; this is not recommended. 
+  */
+  OdDbSequenceEndPtr openSequenceEnd(
+    OdDb::OpenMode mode);
+
+  /** \details
+    Returns an AttributeIterator for this block reference.
+  */
+  OdDbObjectIteratorPtr attributeIterator() const;
+
+  /** \details
+    Explodes this entity into a set of simpler entities, and adds them to the specified block 
+    table record.
+
+    \param BlockRecord [out]  Pointer to the Block Table Record.
+    \param ids [in/out]  Receives an array of Object IDs of the new Block References.
+
+    \returns
+    Entities resulting from the explosion are appended to the specified array.
+    The newly created entities are database resident or not depending on the block table 
+    record they are appended to. If block table record is database resident the entities 
+    are database resident as well. If block table record is not database resident newly 
+    created entities are not database resident.
+    The default implementation of this function returns eNotApplicable. This function can 
+    be overridden in custom classes.
+  */
+  virtual OdResult explodeToBlock(
+    OdDbBlockTableRecord *BlockRecord, 
+    OdDbObjectIdArray *ids = 0);
+
+  /** \details
+    Sets the values of this object's subentity traits, and returns with the calling 
+    object's subentity traits.
+    
+    \param pTraits [in] Pointer to the OdGiDrawableTraits object to be set.
+
+    \remarks
+    When overriding subSetAttributes(), you must OR (|) the return value of 
+    <base class>::subSetAttributes(pTraits) with any flags you add.
+    A derived class may not remove flags for any reason.
+    The default implementation does nothing but returns kDrawableNone. 
+    This function can be overridden in custom classes.
+  */
+  OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+
+  /** \details
+    Returns true if the entity has no view-dependent graphics. In another case
+    returns false.
+    
+    \param pWd [in] Pointer to the OdGiWorldDraw object.
+  */
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+  
+  /** \details
+    Computes the entity to produce the right appearance given each viewport's 
+    possibly different viewpoint of the entity.Draws an entity in layout viewports.
+    
+    \param pVd [in]  Pointer to the OdGiViewportDraw object.
+  */
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+
+  /** \details
+    Reads the .dwg file data of this object.
+    
+    \param pFiler [in]  Filer object from which data are read.
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dwgIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dwgInFields(pFiler) 
+    returned. 
+    4) Call the OdDbDwgFiler(pFiler) methods to read each of the object's data items in the 
+    order they were written. 
+    5) Return pFiler->filerStatus().
+  */
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file data of this object.
+    
+    \param pFiler [in]  Pointer to the filer to which data are written.
+    
+    \remarks 
+    This function is called by dwgIn() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dwgOutFields(pFiler). 
+    3) Call the OdDbDwgFiler(pFiler) methods to write each of the object's data items in the 
+    order they were written.
+  */
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in]  Pointer to the filer from which data are read. 
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dxfIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler).
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) 
+    returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the 
+    order they were written. 
+    5) Return pFiler->filerStatus().
+  */
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in]  Pointer to the filer from which data are read. 
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dxfIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler).
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) 
+    returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the 
+    order they were written. 
+    5) Return pFiler->filerStatus().
+  */
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF R12 format data of this object.  
+    
+    \param pFiler [in] Pointer to the filer from which data are to be read.    
+    
+    \remarks
+    Returns the filer status. 
+    This function is called by dxfIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dxfInFields_R12(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfOutFields_R12(pFiler) 
+    returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the 
+    order they were written. 
+    5) Return pFiler->filerStatus().
+ */
+  virtual OdResult dxfInFields_R12(OdDbDxfFiler* pFiler);
+
+  /** \details
+    Writes the DXF data of this object.   
+    
+    \param pFiler [in] Pointer to the filer to which data are to be written.     
+    
+    \remarks
+    Returns the filer status. 
+    This function is called by dxfOut() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dxfOutFields(pFiler). 
+    3) Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items in 
+    the order they were written.
+  */
+  virtual void dxfOutFields_R12(
+  OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF format data of this object from the specified filer.    
+    
+    \param pFiler [in] Pointer to the filer from which the data are to be read.      
+    
+    \remarks
+    Returns the filer status. 
+    This function calls this object's dxfInFields(pFiler), then loads any Xdata associated 
+    with this object.
+  */
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Writes the DXF format data of this object to the specified filer.   
+    
+    \param pFiler [in] Pointer to the filer to which the data are to be written.     
+    
+    \remarks
+    This function calls this object's dxfOutFields(pFiler) function, writes any Xdata 
+    associated with this object.
+  */
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Called as the first operation as this object is being closed, for database-resident objects only.   
+    
+    \remarks
+    This function is notified just before the current open operation is to be closed, 
+    giving this function the ability to perform necessary operations. 
+    When overriding this function: 
+    1) If the OdDbObject's state is incorrect, throw exception. 
+    2) Call parent class's subClose(). 
+    3) If other actions are required before close, do them. 
+    The default implementation of this function does nothing. This function can be overridden 
+    in custom classes.
+  */ 
+  void subClose();
+
+  /** \details
+    Overridables
+  */
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /** \details
+    Applies the specified 3D transformation matrix to this entity.
+    
+    \param xfm [in] 3D transformation matrix.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */    
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  /** \details
+    This is subGetTransformedCopy, a member of class OdDbBlockReference.
+    
+    \param xfm [in] Input matrix for transforming the copy of the entity.
+    \param pCopy [out] Pointer to the transformed copy of the entity. 
+  */ 
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm, 
+    OdDbEntityPtr& pCopy) const ODRX_OVERRIDE;
+
+ /* Replace OdRxObjectPtrArray */
+  /** \details
+    Explodes this entity into a set of simpler entities. 
+    
+    \param entitySet [in] Receives an array of pointers to the new entities.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */ 
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+  /** \details
+    Called as the first operation of the handOverTo function.    
+    
+    \param pNewObject [in] Pointer to the object with which to replace this object in the database. 
+    
+    \remarks
+    This function allows custom classes to populate the new object. 
+    Overriding this function in a child class allows a child instance 
+    to be notified each time an object is handed over. 
+    This function is notified just before an object is to be handed over; giving this 
+    function the ability to cancel the handover. 
+    When overriding this function: 
+    1) If the OdDbObject's state is incorrect, throw exception. 
+    2) Call parent class's subHandover(). 
+    3) If other actions are required before handover, do them. 
+    The default implementation of this function does nothing. This function can be overridden 
+    in custom classes.
+  */
+  void subHandOverTo(
+    OdDbObject* pNewObject);
+
+  /** \details
+    This is subGetGeomExtents, a member of class OdDbBlockReference.
+    
+    \param extents [out] An output extents.
+  */
+  OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  /** \details
+    Explodes this entity into a set of simpler entities. 
+     
+    \param entitySet [in/out] Receives an array of pointers to the new entities.
+    
+    \remarks
+    The newly created entities will be not database resident. 
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    \note
+    Entities resulting from the explosion are appended to the specified array. 
+    The default implementation of this function calls subWorldDraw()
+    and makes entities from geometry generated by subWorldDraw(). 
+    This function can be overridden in custom classes.
+  */
+  OdResult explodeGeometry(OdRxObjectPtrArray& entitySet) const;
+  
+  /** \details
+    This is treatAsOdDbBlockRefForExplode, a member of class OdDbBlockReference.
+    Determines how the entity should be exploded.  
+  */
+  virtual bool treatAsOdDbBlockRefForExplode() const;
+
+  /** \details
+    This method gets copies of all entities in the referenced block table record,
+    applies parentXform to them and after this calculates extents on the
+    resulting object collection.
+    
+    \param extents [out] WCS extents of the block reference.
+    \param parentXform [in] Transformation matrix for block reference's geometry.
+  */
+  OdResult geomExtentsBestFit(OdGeExtents3d& extents,
+                              const OdGeMatrix3d& parentXform = OdGeMatrix3d::kIdentity) const;
+
+  /** \details
+    Explodes the current object and appends resulting entities to the block table record
+    which owns the current OdDbBlockReference object that calls this method. 
+    
+    \note
+    The block reference entity must be in a database and must be uniformly scaled.  
+  */
+  virtual OdResult explodeToOwnerSpace() const;
+
+  /** \details
+    Copies the contents of the specified object into this object.
+    
+    \param pSrc [in] Pointer to the source object.
+
+    \remarks
+    The default implementation of this function does nothing but throw an eNotApplicable exception.
+    The source object and this object need not be of the same type. 
+    This function is meaningful only when implemented by custom classes.
+  */  
+  virtual void copyFrom(const OdRxObject* pSrc) ODRX_OVERRIDE;
+
+  /** \details
+    Returns the transformation matrix of compound object.
+    
+    \param xM [out] Transformation matrix.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  ODRX_SEALED_VIRTUAL OdResult subGetCompoundObjectTransform(OdGeMatrix3d & xM) const ODRX_OVERRIDE;
+
+  /** \details
+    This is subGetSubentPathsAtGsMarker, a member of class OdDbBlockReference.
+    
+    \param type [in] Subentity type.
+    \param gsMark [in] Gs marker representing a subentity.
+    \param pickPoint [in] WCS point picked during selection of the entity.
+    \param viewXform [in] Transformation matrix to transform from WCS to DCS.
+    \param subentPaths [out] Array of OdDbFullSubentPath objects.
+    \param pEntAndInsertStack [in] Array of object IDs of the objects which are the subcontainers of the subentity.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not. 
+ */
+  ODRX_SEALED_VIRTUAL OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type,
+                                    OdGsMarker gsMark, 
+                                    const OdGePoint3d& pickPoint,
+                                    const OdGeMatrix3d& viewXform, 
+                                    OdDbFullSubentPathArray& subentPaths, 
+                                    const OdDbObjectIdArray* pEntAndInsertStack) const ODRX_OVERRIDE;
+  
+  /** \details
+    This is subGetGsMarkersAtSubentPath, a member of class OdDbBlockReference.
+    
+    \param subPath [in] Information needed to identify the subentity (or subentities).
+    \param gsMarkers [out] Array of Gs markers for the subentity or subentities.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not. 
+  */ 
+  ODRX_SEALED_VIRTUAL OdResult subGetGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath, 
+                                    OdGsMarkerArray& gsMarkers) const ODRX_OVERRIDE;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbBlockReference object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockReference> OdDbBlockReferencePtr;
+
+void decompTransform(
+    const OdGeMatrix3d& mTrans,
+    OdGePoint3d& pOrigin, 
+    OdGeScale3d& sScale,
+    double & dRotation, 
+    OdGeVector3d& vNormal );
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTable.h
new file mode 100755
index 0000000..47ba355
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTable.h
@@ -0,0 +1,248 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBBLOCKTABLE_INCLUDED
+#define _ODDBBLOCKTABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTable.h"
+
+class OdDbBlockTableRecord;
+
+/** \details
+    This class implements bidirectional Iterator objects that traverse entries in OdDbBlockTable objects in an OdDbDatabase instance.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlockTableIterator : public OdDbSymbolTableIterator
+{
+public:
+  
+  ODRX_DECLARE_MEMBERS(OdDbBlockTableIterator);
+  
+protected:
+
+  OdDbBlockTableIterator();
+    
+  OdDbBlockTableIterator(
+    OdDbSymbolTableIteratorImpl* pImpl);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBlockTableIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockTableIterator> OdDbBlockTableIteratorPtr;
+
+
+/** \details
+    This class implements the BlockTable, which represents block definitions in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlockTable : public OdDbSymbolTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockTable);
+
+  /** \note
+    Teigha applications typically will not use this constructor, insofar as 
+    the OdDbDatabase class creates its own instance.
+  */
+  OdDbBlockTable();
+
+  /** \details
+    Searches the named record object in the predefined table object using the 
+    specified name and opens it in the specified mode.
+    
+    \param recordName [in] Record name. 
+    \param openMode [in] Mode in which to open the record. 
+    \param getErasedRecord [in] If and only if true, erased records will be opened or retrieved. 
+    
+    \returns 
+    A smart pointer to the object if successful, otherwise a null smart pointer
+  */
+  virtual OdDbSymbolTableRecordPtr getAt(
+    const OdString& recordName,
+    OdDb::OpenMode openMode, 
+    bool getErasedRecord = false) const;
+
+  /** \details
+    Searches the named record object in the predefined table object using the 
+    specified name and opens it in the specified mode.
+    
+    \param recordName [in] Record name. 
+    \param openMode [in] Mode in which to open the record. 
+    \param getErasedRecord [in] If and only if true, erased records will be opened or retrieved. 
+    
+    \returns 
+    A smart pointer to the object if successful, otherwise a null smart pointer
+  */
+  virtual OdDbObjectId getAt(
+    const OdString& recordName, 
+    bool getErasedRecord = false) const;
+
+  /** \details
+    Determines whether the named record object exists in the predefined table object 
+    using the specified name.
+    
+    \param recordName [in] Record name. 
+    
+    \returns 
+    Returns true if and only if the predefined table object contains the specified named record object.
+  */
+  virtual bool has(const OdString& recordName) const;
+
+  /** \details
+    Determines whether the named record object exists in the predefined table object 
+    using the specified object ID.
+      
+    \param objectId [in] Object ID. 
+    
+    \returns 
+    Returns true if and only if the predefined table object contains the specified record object.
+  */  
+  virtual bool has(const OdDbObjectId& objectId) const;
+
+  /** \details
+    Returns an Iterator object that can be used to traverse through record objects in the 
+    predefined table object.
+      
+    \param atBeginning [in] true - to start at the beginning, or false - to start at the end.
+    \param skipDeleted [in] true - to iterate only unerased records, or false - to iterate through 
+    unerased and erased records.   
+  */
+  OdDbSymbolTableIteratorPtr newIterator( 
+    bool atBeginning = true, 
+    bool skipDeleted = true) const;
+
+    /** \details
+    Adds the specified named record object to the predefined table object.
+      
+    \param pRecord [in] Pointer to the existing named record object to be added.  
+
+    \returns 
+    Returns the Object ID of the added record object.
+    
+    \remarks
+    The record object must be created and must be named before adding. Use the static 
+    pseudo-constructor createObject() for creating an instance of the specific record. 
+    The predefined table object excludes duplicates of records.
+  */
+  virtual OdDbObjectId add(OdDbSymbolTableRecord* pRecord);
+
+  /** \details
+    Returns the Object ID of the Model Space record within this BlockTable object.
+  */
+  const OdDbObjectId& getModelSpaceId() const;
+
+  /** \details
+    Returns the Object ID of the Paper Space record within this BlockTable object.
+  */
+  const OdDbObjectId& getPaperSpaceId() const;
+
+  /** \details
+    Reads the .dwg file data of this object.
+    
+    \param pFiler [in]  Filer object from which data are read.
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dwgIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dwgInFields(pFiler) returned. 
+    4) Call the OdDbDwgFiler(pFiler) methods to read each of the object's data items in
+    the order they were written. 
+    5) Return pFiler->filerStatus().
+  */
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file data of this object.
+    
+    \param pFiler [in]  Pointer to the filer to which data are written.
+    
+    \remarks 
+    This function is called by dwgIn() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dwgOutFields(pFiler). 
+    3) Call the OdDbDwgFiler(pFiler) methods to write each of the object's data items 
+    in the order they were written.
+  */
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF format data of this object from the specified filer.    
+    
+    \param pFiler [in] Pointer to the filer from which the data are to be read.      
+    
+    \remarks
+    Returns the filer status. 
+    This function calls this object's dxfInFields(pFiler), then loads any Xdata 
+    associated with this object.
+  */ 
+  virtual OdResult dxfIn(OdDbDxfFiler* pFiler);
+
+  /** \details
+    Overridables
+  */
+  virtual OdResult subGetClassID(void* pClsid) const;
+
+  /** \details
+    Notification function called each time an Undo operation is performed this object
+    is using partial Undo.
+
+    \param pFiler [in] A pointer to the *undo* filer with the partial *undo* information. 
+    \param pClass [in] A pointer to the OdRxClass object for the class that will *handle* the Undo.      
+    
+    \remarks
+    An object indicates it's using the partial *undo* mechanism, if and only if it has set 
+    autoUndo false in all calls to assertWriteEnabled(). 
+    This member function must know which types of fields to scan, and must stop after reading 
+    what it needs. 
+    If the class type specified by pClassObj does not matches the class of this object, 
+    this member function must call the parent class's applyPartialUndo() and return whatever it returns. 
+    If it does match the class of this object, this member function must use pUndoFiler to 
+    read the *undo* data, then typically use this object's set() method.
+  */ 
+  virtual void applyPartialUndo(OdDbDwgFiler* pFiler, OdRxClass* pClass);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBlockTable object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockTable> OdDbBlockTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif 
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTableRecord.h
new file mode 100755
index 0000000..d951631
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBlockTableRecord.h
@@ -0,0 +1,571 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBBLOCKTABLERECORD_INCLUDED
+#define _ODDBBLOCKTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+#include "DbObjectIterator.h"
+#include "DbXrefGraph.h"
+#include "DbDatabase.h"
+#include "Ge/GeMatrix3d.h"
+
+class OdDbBlockBegin;
+class OdDbBlockEnd;
+class OdDbBlockTableRecord;
+class OdDbBlockTable;
+class OdBinaryData;
+class OdDbSortentsTable;
+typedef OdSmartPtr<OdDbBlockBegin> OdDbBlockBeginPtr;
+typedef OdSmartPtr<OdDbBlockEnd> OdDbBlockEndPtr;
+typedef OdSmartPtr<OdDbSortentsTable> OdDbSortentsTablePtr;
+
+/** \details
+    This class represents Block records in the OdDbBlockTable in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlockTableRecord : public OdDbSymbolTableRecord
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbBlockTableRecord);
+
+  OdDbBlockTableRecord();
+
+  typedef OdDbBlockTable TableType;
+  typedef OdBinaryData PreviewIcon;
+
+  /** \details
+    Appends the specified entity to this Block.
+
+    \param pEntity [in]  Pointer to the entity.
+
+    \remarks
+    Returns the Object ID of the newly appended entity.
+  */
+  OdDbObjectId appendOdDbEntity(OdDbEntity* pEntity);
+
+  /** \details
+    Returns an Iterator that can be used to traverse this Block.
+
+    \param atBeginning [in]  True to start at the beginning, false to start at the end. 
+    \param skipDeleted [in]  If and only if true, deleted records are skipped.
+    \param sorted [in]  If and only if true, the iterator will traverse the Block as sorted by 
+    this Block's SortentsTable.
+  */
+  OdDbObjectIteratorPtr newIterator(
+    bool atBeginning = true, 
+    bool skipDeleted = true, 
+    bool sorted = false) const;
+
+  /** \details
+    Returns the description text associated with this Block (DXF 4).
+  */
+  OdString comments() const;
+
+  /** \details
+    Sets the description text associated with this Block (DXF 4).
+    \param comments [in]  Description text.
+  */
+  void setComments(const OdString& comments);
+
+  /** \details
+    Returns the path and filename for the Xref drawing (DXF 1).
+    
+    \remarks
+    Returns an empty string for non-Xref blocks.
+  */
+  OdString pathName() const;
+
+  /** \details
+    Sets the path and filename for the Xref drawing (DXF 1).
+    \param pathName [in]  Path and filename.
+  */
+  void setPathName(const OdString& pathName);
+
+  /** \details
+    Returns the WCS origin of this Block (DXF 10).
+  */
+  OdGePoint3d origin() const;
+
+  /** \details
+    Sets the WCS origin of this Block (DXF 10).
+    \param origin [in]  Origin.
+  */
+  void setOrigin(const OdGePoint3d& origin);
+
+  /** \details
+    Opens and returns the OdDbBlockBegin object associated with this Block.
+
+    \param openMode [in]  Mode in which to open the object.
+
+    \remarks
+    This function allows Teigha applications to access the OdDbBlockBegin object 
+    to store and retrieve Xdata in a manner compatible with AutoLISP applications.
+  */
+  OdDbBlockBeginPtr openBlockBegin(OdDb::OpenMode openMode = OdDb::kForRead);
+
+  /** \details
+    Opens and returns the OdDbBlockEnd object associated with this Block.
+
+    \param openMode [in]  Mode in which to open the object.
+
+    \remarks
+    This function allows Teigha applications to access the OdDbBlockEnd object 
+    to store and retrieve Xdata in a manner compatible with AutoLISP applications.
+  */
+  OdDbBlockEndPtr openBlockEnd(OdDb::OpenMode openMode = OdDb::kForRead);
+
+  /** \details
+    Returns true if and only if this Block contains Attribute definitions.
+
+    \sa
+    OdDbAttributeDefinition
+  */
+  bool hasAttributeDefinitions() const;
+
+  /** \details
+    Returns true if and only if this Block is anonymous (DXF 70, bit 0x01).
+  */
+  bool isAnonymous() const;
+
+  /** \details
+    Returns true if and only if this Block is an Xref (DXF 70, bit 0x04).
+  */
+  bool isFromExternalReference() const;
+
+  /** \details
+    Returns true if and only if this Block is an overlaid Xref (DXF 70, bit 0x08).
+  */
+  bool isFromOverlayReference() const;
+
+  /** \details
+    Returns true if and only if this Block represents a layout.
+  */
+  bool isLayout() const;
+
+  /** \details
+    Returns the Object ID of the OdDbLayout associated with this Block.
+  */
+  OdDbObjectId getLayoutId() const;
+
+  /** \details
+    Sets the Object ID of the OdDbLayout associated with this Block.
+    
+    \param layoutId [in]  Layout ID.
+  */
+  void setLayoutId(const OdDbObjectId& layoutId);
+
+  /** \details
+    Returns the Object ID's of all OdDbBlockReference entities that reference this Block.
+
+    \param referenceIds [out]  Receives the BlockReference Object ID's.
+    \param directOnly [in]  If true, returns only direct references.
+    \param forceValidity [in]  If true, forces the loading of partially loaded drawings.
+
+    \remarks
+    If this Block is nested, references to the parent block(s) will be included if and 
+    only if directOnly is false.
+    Older drawings do not explicitly store this information, and hence must be completely loaded.
+
+    \sa
+    getErasedBlockReferenceIds
+  */
+  void getBlockReferenceIds(
+    OdDbObjectIdArray& referenceIds,
+    bool directOnly = true, 
+    bool forceValidity = false);
+
+  /** \details
+    Returns the Object ID's of all erased OdDbBlockReference entities that directly reference this Block.
+
+    \param referenceIds [out]  Receives the BlockReference Object ID's.
+
+    \sa
+    getBlockReferenceIds
+  */
+  void getErasedBlockReferenceIds(OdDbObjectIdArray& referenceIds);
+
+  /** \details
+    Returns true if and only if this Xref is unloaded (DXF 71).
+  */
+  bool isUnloaded() const;
+
+  /** \details
+    Sets the unloaded status of this Xref (DXF 71).
+
+    \param isUnloaded [in]  Unloaded status.
+  */
+  void setIsUnloaded(bool isUnloaded);
+
+  /** \details
+    Returns true if the entity has no view-dependent graphics. In another case
+    returns false.
+    
+    \param pWd [in] Pointer to the OdGiWorldDraw object.
+  */
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+ 
+  /** \details
+    Sets the values of this object's subentity traits, and returns with the calling 
+    object's subentity traits.
+    
+    \param pTraits [in] Pointer to the OdGiDrawableTraits object to be set.
+
+    \remarks
+    When overriding subSetAttributes(), you must OR (|) the return value of 
+    <base class>::subSetAttributes(pTraits) with any flags you add.
+    A derived class may not remove flags for any reason.
+    The default implementation does nothing but returns kDrawableNone. 
+    This function can be overridden in custom classes.
+  */
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const ODRX_OVERRIDE;
+
+  /** \details
+    Reads the .dwg file data of this object.
+    
+    \param pFiler [in]  Filer object from which data are read.
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dwgIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dwgInFields(pFiler) returned. 
+    4) Call the OdDbDwgFiler(pFiler) methods to read each of the object's data items in the order they were written. 
+    5) Return pFiler->filerStatus().
+  */  
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+
+  /** \details
+    Writes the .dwg file data of this object.
+    
+    \param pFiler [in]  Pointer to the filer to which data are written.
+    
+    \remarks 
+    This function is called by dwgIn() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dwgOutFields(pFiler). 
+    3) Call the OdDbDwgFiler(pFiler) methods to write each of the object's data items in the order they were written.
+  */
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in]  Pointer to the filer from which data are read. 
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dxfIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler).
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written. 
+    5) Return pFiler->filerStatus().
+  */  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in]  Pointer to the filer from which data are read. 
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dxfIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler).
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they 
+    were written. 
+    5) Return pFiler->filerStatus().
+  */
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+  /** \details
+    Called as the first operation as this object is being closed, for database-resident objects only.   
+    
+    \remarks
+    This function is notified just before the current open operation is to be closed, 
+    giving this function the ability to perform necessary operations. 
+    When overriding this function: 
+    1) If the OdDbObject's state is incorrect, throw exception. 
+    2) Call parent class's subClose(). 
+    3) If other actions are required before close, do them. 
+    The default implementation of this function does nothing. This function can be overridden in 
+    custom classes.
+  */
+  virtual void subClose() ODRX_OVERRIDE;
+
+  /** \details
+    Overridables
+  */ 
+  virtual OdResult subGetClassID(void* pClsid) const ODRX_OVERRIDE;
+
+  /** \details
+    Called as the first operation as this object is being *erased* or unerased.   
+    
+    \param erasing [in] A copy of the erasing argument passed to erase().
+    
+    \remarks
+    This function is notified just before the current object is to be *erased*, 
+    giving this function the ability to cancel the erase. 
+    Returns eOk if and only if erase() is to continue. 
+    When overriding this function: 
+    1) If the OdDbObject's state is incorrect, return something other than eOk. 
+    2) If the parent class's subErase() returns anything other than eOk, immediately return it. 
+    3) If other actions are required before erase, do them. 
+    4) Return eOk. 
+    If you must make changes to this object's state, either make them after step 2, 
+    or roll them back if step 2 returns other than eOk. 
+    The default implementation of this function does nothing but return eOk. 
+    This function can be overridden in custom classes.
+  */ 
+  virtual OdResult subErase(bool erasing) ODRX_OVERRIDE;
+
+  /** \details
+    Called as the first operation of the handOverTo function.   
+    
+    \param pNewObject [in] Pointer to the object with which to replace this object in the *database*. 
+    
+    \remarks
+    This function allows custom classes to populate the new object. 
+    Overriding this function in a child class allows a child instance to be notified each 
+    time an object is handed over. 
+    This function is notified just before an object is to be handed over; giving this 
+    function the ability to cancel the handover. 
+    When overriding this function: 
+    1) If the OdDbObject's state is incorrect, throw exception. 
+    2) Call parent class's subHandover(). 
+    3) If other actions are required before handover, do them. 
+    The default implementation of this function does nothing. 
+    This function can be overridden in custom classes.
+  */ 
+  virtual void subHandOverTo(OdDbObject* pNewObject) ODRX_OVERRIDE;
+
+  /** \details
+    Copies the contents of the specified object into this object when possible.    
+    
+    \param p [in] Pointer to the source object. 
+
+    \remarks
+    The source object and this object need not be of the same type. This function 
+    is meaningful only when implemented by custom classes.
+  */
+  virtual void copyFrom(const OdRxObject* p) ODRX_OVERRIDE;
+  
+  /** \details
+    Returns the database that defines this Xref.
+    \param includeUnresolved [in]  Include unresolved Xrefs.
+  */
+  OdDbDatabase* xrefDatabase(bool includeUnresolved = false) const;
+
+  /** \details
+    Returns the Xref status of this Block.
+    \remarks
+    xrefStatus() returns one of the following:
+    
+    <table>
+    Name                      Value   Description
+    OdDb::kXrfNotAnXref       0       Not an Xref
+    OdDb::kXrfResolved        1       Resolved
+    OdDb::kXrfUnloaded        2       Unloaded
+    OdDb::kXrfUnreferenced    3       Unreferenced
+    OdDb::kXrfFileNotFound    4       File Not Found
+    OdDb::kXrfUnresolved      5       Unresolved
+    </table>
+    
+  */
+  OdDb::XrefStatus xrefStatus() const;
+
+  /** \details
+    Returns true if and only if this Block has a preview icon.
+  */
+  bool hasPreviewIcon() const;
+
+  /** \details
+    Returns the preview icon associated with this Block.
+    \param previewIcon [out]  Receives the Preview icon.
+  */
+  void getPreviewIcon(PreviewIcon &previewIcon) const;
+
+  /** \details
+    Sets the preview icon associated with this Block.
+    \param previewIcon [in]  Preview icon.
+  */
+  void setPreviewIcon(const PreviewIcon &previewIcon);
+
+  /** \details
+    This is subWblockClone, a member of class OdDbBlockTableRecord.
+  */
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  /** \details
+    Returns the SortentsTable associated with this block.
+
+    \param createIfNotFound [in]  Create the SortentsTable if not found. 
+
+    \note
+    The SortentsTable is opened for write.
+    
+    \sa
+    OdDbSortentsTable
+  */
+  OdDbSortentsTablePtr getSortentsTable(bool createIfNotFound = true);
+
+  /** \details
+   Returns a pointer to the OdGiDrawable for the object. If the object doesn't have an 
+   associated OdGiDrawable object, this function returns NULL.
+  */
+  OdGiDrawable* drawable();
+
+  /** \details
+    Returns the WCS geometric extents of this object.
+
+    \param extents [out]  Receives the extents.
+
+    \remarks
+    Returns eOk if successful, or eInvalidExtents if not.
+
+    The extents are the WCS corner points of a box, aligned with the 
+    WCS axes, that encloses the 3D extents of this Block. 
+  */
+  virtual OdResult getGeomExtents(OdGeExtents3d& extents) const;
+
+  /** \details
+    This method gets copies of this object, applies parentXform to it and after this
+    calculates extents on the resulting object.
+    
+    \param extents [out] WCS extents of the block reference.
+    \param parentXform [in] Transformation matrix for block reference's geometry.
+  */
+  OdResult geomExtentsBestFit(OdGeExtents3d& extents,
+                              const OdGeMatrix3d& parentXform = OdGeMatrix3d::kIdentity) const;
+
+  /** \details
+    This method causes the invoked block table record to assume the ownership of all 
+    the entities listed in the input entitiesToMove array, and provides an optimized 
+    way of moving entities between block table records.
+    
+    \param entitiesToMove [in] Array of entities Object Ids.
+  */
+  virtual OdResult assumeOwnershipOf(OdDbObjectIdArray entitiesToMove);
+
+  enum BlockScaling {
+    kAny            = 0, // Block references can be non-uniformly scaled.
+    kUniform        = 1  // Block references can be scaled only uniformly.
+  };
+
+  /** \details
+    Returns the scaling characteristics of references to this Block.
+
+    \remarks
+    blockScaling() returns one of the following:
+    
+    <table>
+    Name        Value    Description
+    kAny        0        Block references can be non-uniformly scaled.
+    kUniform    1        Block references can be scaled only uniformly.
+    </table>
+  */
+  BlockScaling blockScaling() const;
+  
+  /** \details
+    Sets the scaling characteristics of references to this Block.
+
+    \param blockScaling [in]  Block scaling.
+    
+    \remarks
+    blockScaling can be one of the following:
+    
+    <table>
+    Name     Value    Description
+    kAny     0        Block references can be non-uniformly scaled.
+    kUniform 1        Block references can be scaled only uniformly.
+    </table>
+  */
+  void setBlockScaling(BlockScaling blockScaling);
+
+  /** \details
+    Controls if references to this Block can be exploded.
+    \param explodable [in]  Explodable. 
+  */
+  void setExplodable(bool explodable);
+  
+  /** \details
+    Returns true if and only if references to this Block can be exploded.
+  */
+  bool explodable() const;
+
+  /** \details
+    Sets the block insertion units for this Block.
+    \param blockInsertUnits [in]  Block insert units. 
+  */
+  void setBlockInsertUnits(OdDb::UnitsValue blockInsertUnits);
+  
+  /** \details
+    Returns the block insertion units for this Block. 
+  */
+  OdDb::UnitsValue blockInsertUnits() const;
+
+  /** \details
+    Notification function called each time an Undo operation is performed this object is 
+    using partial Undo.
+
+    \param pFiler [in] A pointer to the *undo* filer with the partial *undo* information. 
+    \param pClass [in] A pointer to the OdRxClass object for the class that will *handle* the Undo.     
+    
+    \remarks
+    An object indicates it's using the partial *undo* mechanism, if and only if it has set 
+    autoUndo false in all calls to assertWriteEnabled(). 
+    This member function must know which types of fields to scan, and must stop after reading 
+    what it needs. 
+    If the class type specified by pClassObj does not matches the class of this object, 
+    this member function must call the parent class's applyPartialUndo() and return whatever it returns. 
+    If it does match the class of this object, this member function must use pUndoFiler to read 
+    the *undo* data, then typically use this object's set() method.
+  */ 
+  void applyPartialUndo(OdDbDwgFiler* pFiler, OdRxClass* pClass);
+  void postProcessAnnotativeBTR(int& strippedCount, bool noModify = false, bool scale = true);
+  void addAnnoScalestoBlkRefs(bool scale = false);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBlockTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockTableRecord> OdDbBlockTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif 
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBody.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBody.h
new file mode 100755
index 0000000..b6b70aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBody.h
@@ -0,0 +1,357 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEOMENT_DBBODY_H
+#define GEOMENT_DBBODY_H
+
+#include "TD_PackPush.h"
+#include "ModelerDefs.h"
+#include "DbEntity.h"
+#include "DbSubentId.h"
+
+class OdModelerGeometry;
+class OdStreamBuf;
+class OdBrBrep;
+class OdBrEntity;
+class OdBrMesh2dFilter;
+class OdBrMesh2d;
+
+/** \details
+  This class represents 3D body entities in an OdDbDatabase instance.
+
+  \sa
+  TD_Db
+  
+  \remarks
+  An OdDbBody entity is a wrapper for an ACIS model and cannot be
+  represented as an OdDb3dSolid entity or an OdDbRegion entity.
+  
+  <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbBody : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBody);
+
+  /** \details
+    Default constructor.
+  */
+  OdDbBody();
+  
+  /** \details
+    Returns true if and only if there is no ACIS model associated with this entity. 
+  */
+  bool isNull() const;
+
+  /** \details
+    Writes the ACIS data of this entity to the specified StreamBuf object.
+
+    \param pStreamBuf [in] Pointer to the StreamBuf object to which the data is to be written. 
+    \param typeVer    [in] Type and version of the ACIS data to write.
+    
+    \returns Returns eOk if successful or an appropriate error code if not. 
+  */
+  OdResult acisOut(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer typeVer = kAfTypeVerAny);
+    
+  /** \details
+    Writes the specified ACIS solids to the specified file.
+
+    \param filename   [in] Filename to write.
+    \param solids     [in] Array of smart pointers to ACIS solids.
+    \param typeVer    [in] Type and version of the ACIS data to write.
+   
+    \returns Returns eOk if successful or an appropriate error code if not. 
+  */
+  static OdResult acisOut(
+    const OdString& filename, 
+    const OdDbEntityPtrArray& solids, 
+    AfTypeVer typeVer = kAfVer700|kAfTypeASCII);
+
+  /** \details
+    Reads the ACIS data for this entity from the specified StreamBuf object.
+
+    \param pStreamBuf [in] Pointer to the StreamBuf object from which the data is to be read.   
+    \param pTypeVer   [in] Receives the type and version of the ACIS data read.
+
+    \returns Returns eOk if successful or an appropriate error code if not. 
+    
+    \remarks
+    If pTypeVer is not null, this function returns the version of the ACIS data
+    of this 3D solid entity.
+  */
+  OdResult acisIn(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer *pTypeVer = 0);
+    
+  /** \details
+    Reads an array of ACIS solids from the specified file.
+
+    \param filename   [in] Filename to read.
+    \param solids     [out] Receives the array of smart pointers to the ACIS solids.
+
+    \returns Returns eOk if successful or an appropriate error code if not. 
+    
+    \remarks
+    If pTypeVer is not null, this function returns the version of the ACIS data
+    of this 3D solid entity.
+  */
+  static OdResult acisIn(
+    const OdString& filename, 
+    OdDbEntityPtrArray& solids);
+
+  /** \details
+    Returns the boundary representation of the 3D solid entity.
+    
+    \param brep [out] Receives the boundary representation.
+  */
+  void brep(
+    OdBrBrep& brep);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  /** \details
+    Returns true if the entity has no view-dependent graphics. In other case returns false.
+    
+    \param pWd [in] Pointer to the OdGiWorldDraw object.
+  */
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  /** \details
+    Computes the entity to produce the right appearance given each viewport's possibly 
+    different viewpoint of the entity. Draws an entity in layout viewports. 
+    
+    \param pVd [in] Pointer to the OdGiViewportDraw object. 
+  */
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  /** \details
+    Determines the behavior for custom objects when saving to a .dwg or .dxf file. 
+    
+    \param ver [in] Drawing version to save as.
+    \param replaceId [out] Object ID of the object replacing this object.
+    \param exchangeXData [out] Set to true if and only if this function did not add XData to the replacement object.
+
+    \remarks
+    This function either
+    * Returns an OdDbObjectPtr for a non-database-resident (NDBRO) replacement object, setting replaceId to OdDbObjectId::kNull.
+    * Returns NULL, setting replaceId for a database-resident (DBRO) replacement object.
+    
+    Custom objects can decompose themselves into other objects, adding additional XData as required. Teigha 
+    transfers XData from this object to the replacement object if and only if exchangeXData is true.
+    
+    The default implementation returns NULL and sets replaceId to OdDbObjectId::kNull. This function can be
+    overridden in custom classes.
+
+    The method is not intended to be called by client code. For processing, owned objects use the *convertForSave()*
+    method.
+  */
+  virtual OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver, 
+    OdDbObjectId& replaceId, 
+    bool& exchangeXData);
+  
+  
+  /** \details
+  Directly sets the contained modeler geometry of this entity.
+  
+  \param pGeometry [in] Pointer to the modeler geometry.
+  
+  \returns Returns eOk if new model geometry was successfully set or an appropriate error in the other case.
+  */
+  virtual OdResult setBody( const void* pGeometry );
+  
+  /** \details 
+    Returns the current modeler geometry. 
+  */
+  virtual void *body( ) const;
+
+  /** \details
+    Explodes this entity into a set of simpler entities.  
+
+    \param entitySet [in/out] Receives an array of pointers to the new entities.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    \note
+    Entities resulting from the explosion are appended to the specified array.
+    
+    The newly created entities are not database residents.
+    
+    The default implementation of this function returns eNotApplicable. This function can be
+    overridden in custom classes.
+  */
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  /** \details
+    Applies the specified 3D transformation matrix to this entity.
+
+    \param xfm [in] 3D transformation matrix.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult subTransformBy( 
+    const OdGeMatrix3d& xfn );
+
+  /** \details
+    Creates a geometric representation of the entity for saving proxy graphics or converting to previous formats.
+
+    \param pWd [in] Pointer to the OdGiWorldDraw object.
+    \param ver [in] Specifies the reason why the method is called.
+
+    \remarks
+    This method can be overridden in custom classes.
+  */
+  virtual void saveAs(
+    OdGiWorldDraw* pWd,
+    OdDb::DwgVersion ver ) const;
+
+    
+  /** \details
+    Creates a copy of the subentity. 
+    
+    \param id [in] Subentity that should be copied.
+    
+    \returns If successful, returns a pointer to the resulting copy.  Otherwise returns null.
+  */
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& id) const;
+
+  /** \details
+    Returns the array of the graphics system marker(s) (GS marker(s)) associated
+    with primitive(s) that is used for drawing the subentity. 
+
+    \param subPath [in] Path to the subentity (or subentities) for which the GS marker(s) is requested.
+    \param gsMarkers [out] Array of the GS marker(s).   
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.  
+  */
+  virtual OdResult subGetGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath, OdGsMarkerArray& gsMarkers) const;
+
+  /** \details
+    Returns the array of OdDbFullSubentPath object(s) by the specified GS marker.
+    Each OdDbFullSubentPath object represents a subentity.
+
+    \param type [in] Subentity type.
+    \param gsMark [in] GS marker representing a subentity.   
+    \param pickPoint [in] Point (in WCS coordinates) picked during the entity selection.   
+    \param viewXform [in] Transformation matrix to transform from WCS to DCS. 
+    \param subentPaths [out] Array of OdDbFullSubentPath object(s) generated from the GS marker. 
+    \param pEntAndInsertStack [in] Array of objectIds.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.  
+  */
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type,
+                                               OdGsMarker gsMark, 
+                                               const OdGePoint3d& pickPoint,
+                                               const OdGeMatrix3d& viewXform, 
+                                               OdDbFullSubentPathArray& subentPaths, 
+                                               const OdDbObjectIdArray* pEntAndInsertStack ) const;
+  /** \details
+    Returns the number of changes occurred since the body's creation.
+  */
+  virtual OdUInt32 numChanges() const;
+
+  /** \details
+    For internal use only.
+
+    \param ent [in] ACIS object pointer. 
+  */
+  virtual OdDbSubentId internalSubentId(void* ent) const;
+  
+  /** \details
+    For internal use only.
+
+    \param id [out] Subentity ID in the ACIS object. 
+  */
+  virtual void* internalSubentPtr(const OdDbSubentId& id) const;
+  
+  /** \details
+    Sets the values of this object's subentity traits, and returns with the calling object's subentity traits.
+
+    \param pTraits [in] Pointer to the OdGiDrawableTraits object to be set.
+
+    \remarks
+    When overriding subSetAttributes(), you must OR (|) the return value of ::subSetAttributes(pTraits) 
+    with any flags you add. A derived class may not remove flags for any reason. The default 
+    implementation does nothing but return kDrawableNone. This function can be overridden in custom classes.
+  */
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  /** \details
+    Returns WCS coordinates of box's corner points. The box encloses the 3D extents of the entity.
+
+    \param extents [out] Entity's extents.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.  
+  */
+  virtual OdResult subGetGeomExtents( OdGeExtents3d& extents) const;
+
+  /** \details
+    For internal usage only.
+  */
+  static OdResult setSubentPath(OdBrEntity &ent, OdDbFullSubentPath& subpath);
+
+  /** \details
+    Creates the 2D mesh control, associated with a topology object.
+
+    \param pEnt [in] Topology object.
+    \param filter [in] Filter for controlling the mesh generation.
+    \param mesh2d [out] 2D mesh control object.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.  
+  */
+  static OdResult generateMesh(const OdDbEntity *pEnt, const OdBrMesh2dFilter & filter, OdBrMesh2d &mesh2d);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbBody object pointers.
+*/
+typedef OdSmartPtr<OdDbBody> OdDbBodyPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBreakData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBreakData.h
new file mode 100755
index 0000000..b3db77d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbBreakData.h
@@ -0,0 +1,110 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBreakData_h_Included_
+#define _DbBreakData_h_Included_
+
+#include "DbObject.h"
+#include "OdArray.h"
+#include "SmartPtr.h"
+#include "DbDimAssoc.h"
+
+class OdDbBreakPointRef;
+typedef OdSmartPtr<OdDbBreakPointRef> OdDbBreakPointRefPtr;
+typedef OdArray<OdDbBreakPointRefPtr> OdDbBreakPointRefPtrArray;
+
+/** \details 
+  This class represents break data for dimensions.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBreakData : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBreakData);
+
+  OdDbObjectId dimObjId() const;
+  void setDimObjId(const OdDbObjectId& dimId);
+
+  void addBreakPointRef(OdDbBreakPointRef* ptRef);
+  void getBreakPointRef(int lineIndex, OdDbBreakPointRefPtrArray& ptRefs) const;
+  void getBreakPointRef(OdDbBreakPointRefPtrArray& ptRefs) const;
+  void deleteAllBreakPointRefs();
+  OdResult removeAssociativity(bool force = true);
+  //OdResult postToDb(OdDbObjectId& breakObjId);
+  //OdResult eraseFromDb(); 
+
+  virtual OdResult dwgInFields (OdDbDwgFiler*);
+  virtual void dwgOutFields(OdDbDwgFiler*) const;
+  virtual OdResult dxfInFields (OdDbDxfFiler*);
+  virtual void dxfOutFields(OdDbDxfFiler*) const;
+  virtual void  modifiedGraphics(const OdDbEntity* pEnt);
+
+  OdResult updateAssociativity(const OdDbObjectIdArray& ids, int cmdType);
+};
+
+typedef OdSmartPtr<OdDbBreakData> OdDbBreakDataPtr;
+
+/** \details 
+  This class represents break points for dimensions.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBreakPointRef : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBreakPointRef);
+
+  enum BreakPointType { 
+    kDynamic           = 0,
+    kStatic            = 1,
+    kStatic2Point      = 2
+  };
+
+  OdDbBreakPointRef::BreakPointType pointType() const;
+  void setPointType(OdDbBreakPointRef::BreakPointType newVal);
+  OdInt32 lineIndex() const;
+  void setLineIndex(OdInt32 index);
+  OdGePoint3d breakPoint() const;
+  void setBreakPoint(const OdGePoint3d& pt);
+  OdGePoint3d breakPoint2() const;
+  void setBreakPoint2(const OdGePoint3d& pt);
+  void getBreakPointId(OdDbXrefFullSubentPath& idPath) const;
+  void setBreakPointId(const OdDbXrefFullSubentPath& idPath);
+  OdDbEntityPtr subentPtr() const;
+  OdResult intersectWith(const OdDbEntity* pEnt, OdGePoint3dArray& points, OdGePoint3dArray& textBoxPts);
+
+  virtual OdResult dwgInFields (OdDbDwgFiler*);
+  virtual void dwgOutFields(OdDbDwgFiler*) const;
+  virtual OdResult dxfInFields (OdDbDxfFiler*);
+  virtual void dxfOutFields(OdDbDxfFiler*) const;
+};
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCamera.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCamera.h
new file mode 100755
index 0000000..6552138
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCamera.h
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_DB_CAMERA__
+#define __OD_DB_CAMERA__
+
+#include "DbEntity.h"
+
+#include "TD_PackPush.h"
+
+class OdDbViewTableRecord;
+typedef OdSmartPtr<OdDbViewTableRecord> OdDbViewTableRecordPtr;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbCamera : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbCamera);
+
+  OdDbCamera();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subErase(bool erasing);
+  virtual void subClose();
+
+  OdDbObjectId view() const;
+  void setView(const OdDbObjectId &viewId);
+
+  // Some helpful methods for NDBRO editing (required for grip points implementation for example)
+  // For internal use
+  OdDbViewTableRecordPtr openView(OdDb::OpenMode openMode = OdDb::kForRead) const;
+  // For internal use
+  void updateView();
+
+protected:
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm);
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+
+  virtual OdResult subGetClassID(void* pClsid) const;
+
+  virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const;
+
+  virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  virtual void subHighlight(bool bDoIt = true, const OdDbFullSubentPath* pSubId = 0, bool highlightAll = false) const;
+};
+
+typedef OdSmartPtr<OdDbCamera> OdDbCameraPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_DB_CAMERA__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCircle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCircle.h
new file mode 100755
index 0000000..55dc99f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCircle.h
@@ -0,0 +1,485 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_CIRCLE_
+#define _OD_DB_CIRCLE_
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+
+class OdDbCircleImpl;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the circle object (Circle entity) in the database. This 
+  class inherits the base functionality of entities. A circle is a circular closed 
+  figure in world space.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_circle_sample.html, Example of Working with the Circle Object>
+
+  \sa
+  <link db_circle.html, Working with Circles>
+
+  OdDbArc, OdDbEllipse classes
+*/
+class TOOLKIT_EXPORT OdDbCircle : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbCircle);
+
+  /** \details
+    Builds an instance of the circle object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_circle_overview.html, Overview of Circles>
+  */
+  OdDbCircle();
+
+
+  /** \details
+    Returns the WCS coordinates of the circle center (DXF 10) as three-dimensional 
+    point instance.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::setCenter() method
+  */
+  OdGePoint3d center() const;
+
+
+  /** \details
+    Sets the center of the circle entity (DXF 10) in WCS. The initial value is (0,0,0) 
+    by default.
+    
+    \param center [in]  Three-dimensional point instance to set the center.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::center() method
+  */
+  void setCenter( const OdGePoint3d& center );
+
+
+  /** \details
+    Returns the radius of the circle entity (DXF 40).
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::setRadius() method
+  */
+  double radius() const;
+
+
+  /** \details
+    Sets the radius of the circle entity (DXF 40). The initial value is 0.0 by default.
+
+    \param radius [in]  Radius as a Double value.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::radius() method
+  */
+  void setRadius( double radius );
+
+
+  /** \details
+    Returns the thickness of the circle entity (DXF 39) in drawing units. Thickness is 
+    the extrusion length along the normal. A positive value defines the thickness to 
+    be drawn along the normal direction. A negative value defines the thickness to be 
+    drawn in the opposite direction from the normal. A zero value defines a circle without 
+    thickness.
+    
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::setThickness() method
+  */
+  double thickness() const;
+
+
+  /** \details
+    Sets the thickness of the circle entity (DXF 39) in drawing units. Thickness is the 
+    extrusion length along the normal. A positive value extrudes along the normal. 
+    A negative value extrudes opposite from the normal. A zero value defines a circle  
+    without thickness. The initial value is zero by default.
+
+    \param vThickness [in]  Thickness as a Double value.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::thickness() method
+  */
+  void setThickness( double vThickness );
+
+
+  /** \details
+    Returns the WCS unit vector which is the normal to the plane of the circle entity 
+    (DXF 210). The normal defines the orientation of the circle plane in world space.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::setNormal() method
+  */
+  OdGeVector3d normal() const;
+
+
+  /** \details
+    Sets the WCS normal to the plane of the circle entity (DXF 210). The normal defines 
+    the orientation of the circle plane in world space. The initial value is (0,0,1) by default.
+
+    \param geVector [in]  Three-dimensional vector instance to set the normal.
+
+    \remarks
+    This method automatically converts the specified vector to the unit vector.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_specific.html, Specific Circle Properties>
+
+    OdDbCircle::normal() method
+  */
+  void setNormal( const OdGeVector3d& geVector );
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm, 
+    OdDbEntityPtr& pCopy) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+
+  /** \details
+    Determines whether the circle entity is planar as a Boolean value and returns True.
+    This method is inherited from the OdDbEntity class.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle.html, Working with Circles>
+
+    OdDbCircle::getPlane(), OdDbEntity::isPlanar() methods
+  */
+  virtual bool isPlanar() const;
+
+
+  /** \details
+    Gets a plane in which the circle entity places. This method is inherited from the  
+    OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the plane parameters as 
+                a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type
+                    (returns kPlanar - planar entity).
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle.html, Working with Circles>
+
+    OdDbCircle::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  /** \details
+    Gets the start parameter value. The start parameter equals zero for circles.
+    Parameter is an angle measured counterclockwise from the OCS X-axis in the 
+    range 0 to 2PI radians.
+
+    \param startParam [out]  Reference to a variable in which this method must save the start    
+                   parameter value as a Double value in radians.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getStartParam( double& startParam ) const;
+
+
+  /** \details
+    Gets the end parameter value. The end parameter equals the 2PI. Parameter is an 
+    angle measured counterclockwise from the OCS X-axis in the range 0 to 2PI radians.
+
+    \param endParam [out]  Reference to a variable in which this method must save the end    
+                 parameter value as a Double value in radians.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getEndParam( double& endParam ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the start point on the circle for which the parameter 
+    equals zero. The start point coincides with the end point.
+
+    \param startPoint [out]  Reference to a variable in which this method must save the start 
+                   point as three-dimensional point instance.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getStartPoint( OdGePoint3d& startPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the end point on the circle for which the parameter 
+    equals the circumference. The end point coincides with the start point.
+
+    \param endPoint [out]  Reference to a variable in which this method must save the end  
+                 point as three-dimensional point instance.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getEndPoint( OdGePoint3d& endPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the point on the circle at the specified parameter 
+    value. Parameter is an angle measured counterclockwise from the OCS X-axis in the 
+    range 0 to 2PI radians.
+
+    \param param [in]  Parameter value specifying the point on the circle as a Double value 
+              in radians. 
+    \param pointOnCurve [out] Reference to a variable in which this method must save the 
+                     three-dimensional point instance corresponding to the parameter.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getPointAtParam( double param, OdGePoint3d& pointOnCurve ) const;
+
+
+  /** \details
+    Computes the parameter at the point placed on the circle. Parameter is an angle
+    measured counterclockwise from the OCS X-axis in the range 0 to 2PI radians.
+
+    \param pointOnCurve [in]  Three-dimensional point instance which specifies the point on 
+                     the circle. 
+    \param param [out] Reference to a variable in which this method must save the parameter   
+              value as a Double value in radians.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getParamAtPoint( const OdGePoint3d& pointOnCurve, double& param ) const;
+
+
+  /** \details
+    Computes the distance along the circle measured from the OCS X-axis to the point on 
+    the circle specified the parameter.
+
+    \param param [in]  Parameter value specifying the point on the circle as a Double value 
+              in radians. 
+    \param dist  [out] Reference to a variable in which this method must save the distance value 
+              as a Double value in drawing units.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+
+  /** \details
+    Computes the parameter at the distance along the circle. Parameter is an angle
+    measured counterclockwise from the OCS X-axis in the range 0 to 2PI radians. 
+
+    \param dist [in]   Distance value along the circle curve as a Double value in drawing units. 
+    \param param [out]  Reference to a variable in which this method must save the parameter value  
+              as a Double value in radians.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+
+  /** \details
+    Computes the first derivative for the specified parameter of the circle entity and 
+    returns the three-dimensional vector instance.
+
+    \param param [in]  Parameter value specifying the point on the circle as a Double value 
+              in radians. 
+    \param firstDeriv [out] Reference to a variable in which this method must save the first   
+                   derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getFirstDeriv( double param, OdGeVector3d& firstDeriv ) const;
+
+
+  /** \details
+    Computes the second derivative for the specified parameter of the circle entity and  
+    returns the three-dimensional vector instance.
+
+    \param param [in]  Parameter value specifying the point on the circle as a Double value
+              in radians. 
+    \param secondDeriv [out] Reference to a variable in which this method must save the second   
+                    derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getSecondDeriv( double param, OdGeVector3d& secondDeriv ) const;
+
+
+  /** \details
+    Returns the area of the circle calculated using the classic formula (PIRR).
+
+    \param vArea [out]  Reference to a variable in which this method must save the area
+              as a Double value.
+
+    \sa
+    <link db_circle_sample.html, Example of Working with the Circle Object>
+
+    \sa
+    <link db_circle_compute.html, Computed Circle Properties>
+  */
+  virtual OdResult getArea( double& vArea ) const;
+
+  /** \details
+  Returns the entity coordinate system matrix.
+  */
+  OdGeMatrix3d getEcs( ) const;
+  
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+};
+
+/** \details
+  The typified smart pointer for the circle object (Circle entity). This template class 
+  is specialization of the OdSmartPtr class for the OdDbCircle class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbCircle> OdDbCirclePtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbClass.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbClass.h
new file mode 100755
index 0000000..39a088c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbClass.h
@@ -0,0 +1,120 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _ODDBCLASS_INCLUDED_
+#define _ODDBCLASS_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+
+////1) Override
+//OdRxClass* ClassName::saveAsClass(OdRxClass*) const
+//{
+//  return PseudoBaseClass::saveAsClass(PseudoBaseClass::desc());
+//}
+//
+////2) rxInit()
+//// - verify pseudo base class (Save_As_Class)
+//// - remember old constructor 
+//// - set new constructor
+//// 
+
+
+/** \details
+    Declares the functions required by pseudo database objects.
+*/
+#define ODDB_PSEUDO_DECLARE_MEMBERS(ClassName)    \
+public:                                           \
+  ODRX_DECLARE_MEMBERS(ClassName);                \
+  static OdPseudoConstructorType g_pMainConstr;   \
+  OdRxClass* saveAsClass(OdRxClass* pClass) const
+
+/** \details
+  Defines initialization functions for pseudo *database* objects.
+
+*/
+#define ODDB_PSEUDO_DEFINE_INIT_MEMBERS(ClassName,ParentClass,pseudoConsFn,PseudoBaseClass) \
+                                                                            \
+/* Registers this class with Teigha. */                                     \
+void ClassName::rxInit()                                                    \
+{                                                                           \
+  if (!ClassName::g_pDesc)                                                  \
+  {                                                                         \
+    OdRxClass* pParent = ParentClass::desc();                               \
+    OdRxClass* pPseudoBase = PseudoBaseClass::desc();                       \
+    if (!pParent->isDerivedFrom(pPseudoBase))                               \
+    {                                                                       \
+      throw OdError(eNotThatKindOfClass);                                   \
+    }                                                                       \
+    ClassName::g_pDesc = PseudoBaseClass::desc();                           \
+    g_pMainConstr = pPseudoBase->constructor();                             \
+    pPseudoBase->setConstructor(ClassName::pseudoConstructor);              \
+  }                                                                         \
+  else                                                                      \
+  {                                                                         \
+    ODA_ASSERT(("Class ["#ClassName"] is already initialized.",0));         \
+    throw OdError(eExtendedError);                                          \
+  }                                                                         \
+}                                                                           \
+                                                                            \
+/* Unregisters this class with Teigha. */                                   \
+void ClassName::rxUninit()                                                  \
+{                                                                           \
+  if (ClassName::g_pDesc)                                                   \
+  {                                                                         \
+    OdRxClass* pPseudoBase = PseudoBaseClass::desc();                       \
+    pPseudoBase->setConstructor(g_pMainConstr);                             \
+    ClassName::g_pMainConstr = 0;                                           \
+    ClassName::g_pDesc = 0;                                                 \
+  }                                                                         \
+  else                                                                      \
+  {                                                                         \
+    ODA_ASSERT(("Class ["#ClassName"] is not initialized yet.",0));         \
+    throw OdError(eNotInitializedYet);                                      \
+  }                                                                         \
+}
+
+/** \details
+    Defines RTTI, initialization functions and constructor for pseudo database objects.
+*/
+#define ODDB_PSEUDO_DEFINE_MEMBERS(ClassName,ParentClass,PseudoBaseClass,DOCREATE)  \
+                                                                                    \
+ODRX_DEFINE_RTTI_MEMBERS(ClassName,ParentClass)                                     \
+                                                                                    \
+ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)                                   \
+                                                                                    \
+ODDB_PSEUDO_DEFINE_INIT_MEMBERS(ClassName,ParentClass,pseudoConsFn,PseudoBaseClass) \
+                                                                                    \
+OdPseudoConstructorType ClassName::g_pMainConstr = 0;                               \
+                                                                                    \
+OdRxClass* ClassName::saveAsClass(OdRxClass*) const                                 \
+{                                                                                   \
+  return PseudoBaseClass::saveAsClass(PseudoBaseClass::desc());                     \
+}
+
+#include "TD_PackPop.h"
+
+#endif //_ODDBCLASS_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbColor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbColor.h
new file mode 100755
index 0000000..a628195
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbColor.h
@@ -0,0 +1,142 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_DB_COLOR_
+#define _OD_DB_COLOR_
+
+
+#include "DbObject.h"
+#include "CmColor.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /color object/ that stores information about a color as an element of the 
+  database container. The database stores the color instances in the dictionary and associates the 
+  object ID with an each color instance. The /color dictionary/ is accessed from the /database object/ 
+  using the getColorDictionaryId() method. The /root drawing dictionary/, associates the "ACAD_COLOR" name 
+  with the /color dictionary/.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_color_sample_dictionary.html, Example of Working with the Color Dictionary Object>
+
+  <link db_color_sample_object.html, Example of Entering and Displaying for Color Objects>
+
+  \sa
+  <link cm_concept.html, Concept of Colors>
+
+  <link db_color_concept.html, Concept of Database Colors>
+
+  OdCmColor class
+*/
+class TOOLKIT_EXPORT OdDbColor : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbColor);
+
+  /** \details
+    Builds an instance of the color object.
+
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_color_manipulate.html, Manipulating Objects of the Color Dictionary>
+  */
+  OdDbColor();
+
+
+  /** \details
+    Returns the /unnamed color and named color/ instance specified by the byLayer, byBlock, byColor, 
+    byACI, byPen, Foreground, byDgnIndex, None /color methods/, or name in a book.
+  
+    \sa
+    <link db_color_sample_dictionary.html, Example of Working with the Color Dictionary Object>
+
+    <link db_color_sample_object.html, Example of Entering and Displaying for Color Objects>
+
+    \sa
+    <link db_color.html, Working with Colors>
+
+    OdCmColor class  
+  */
+  const OdCmColor& cmColor() const;
+
+
+  /** \details
+    Sets the /unnamed color and named color/ instance for the /database color object/.
+    
+    \param cmColor [in]   A reference to the color instance.
+
+    \sa
+    <link db_color_sample_dictionary.html, Example of Working with the Color Dictionary Object>
+
+    <link db_color_sample_object.html, Example of Entering and Displaying for Color Objects>
+
+    \sa
+    <link db_color.html, Working with Colors>
+
+    OdCmColor class  
+  */
+  void setColor(const OdCmColor& cmColor);
+
+
+  /** \details
+    Returns the /unnamed entity color/ instance specified by the byLayer, byBlock, byColor, 
+    byACI, byPen, Foreground, byDgnIndex, None /color methods/.
+  
+    \sa
+    <link cm_color_sample_entity.html, Example of Working with the Entity Color>
+
+    \sa
+    <link db_color.html, Working with Colors>
+
+    <link cm.html, Colors and Transparencies>
+
+    OdCmEntityColor class  
+  */
+  OdCmEntityColor entityColor() const;
+
+  
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  The typified smart pointer for the color object. This template class is a specialization of 
+  the OdSmartPtr class for OdDbColor object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbColor> OdDbColorPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCommandContext.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCommandContext.h
new file mode 100755
index 0000000..9a0c5ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCommandContext.h
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBCOMMANDCONTEXT_H_INCLUDED_
+#define _ODDBCOMMANDCONTEXT_H_INCLUDED_
+
+#include "DbExport.h"
+#include "DbUserIO.h"
+#include "Ed/EdCommandContext.h"
+#include "OdError.h"
+
+class OdDbDatabase;
+class OdDbCommandContext;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbCommandContext object pointers.
+*/
+typedef OdSmartPtr<OdDbCommandContext> OdDbCommandContextPtr;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines the interface for I/O and database access 
+    for custom commands during their execution.
+
+    \remarks
+    Client applications that invoke custom commands, should use an instance of this
+    class (or a subclass) to pass to the OdEdCommandStack::executeCommand function.
+    Using this class instead of a true instance of OdEdCommandContext provides
+    custom commands with database access.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbCommandContext : public OdEdCommandContext
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdDbCommandContext);
+
+  /** \details
+      Returns a database, for use in a custom command.
+  */
+  virtual OdDbDatabase* database();
+
+  OdDbUserIO* dbUserIO();
+};
+
+
+
+inline OdDbUserIO*
+OdDbCommandContext::dbUserIO()
+{
+  ODA_ASSERT(userIO() && userIO()->isKindOf(OdDbUserIO::desc()));
+  return static_cast<OdDbUserIO*>(userIO());
+}
+
+inline OdDbDatabase*
+OdDbCommandContext::database()
+{
+  //ODA_ASSERT(baseDatabase()->isKindOf(OdDbDatabase::desc()));
+  //return static_cast<OdDbDatabase*>(baseDatabase());
+  //
+  // support for TeighaViewer 
+  OdDbDatabase* pDb = OdDbDatabase::cast(baseDatabase()).get();
+  if (!pDb)
+    throw OdError(eNoDatabase);
+  return pDb;
+}
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODDBCOMMANDCONTEXT_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCompoundObjectId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCompoundObjectId.h
new file mode 100755
index 0000000..f059fc3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCompoundObjectId.h
@@ -0,0 +1,108 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OdDbCompoundObjectId_INCLUDED
+#define OdDbCompoundObjectId_INCLUDED
+
+#include "RxObject.h"
+#include "DbObjectId.h"
+#include "IdArrays.h"
+
+class OdDbDwgFiler;
+class OdDbDxfFiler;
+
+class OdGeMatrix3d;
+class OdDbIdMapping;
+class OdDbCompoundObjectIdImpl;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbCompoundObjectId : public OdRxObject
+{
+public:
+    ODRX_DECLARE_MEMBERS(OdDbCompoundObjectId);
+
+    virtual ~OdDbCompoundObjectId();
+
+    OdDbCompoundObjectId& operator =(const OdDbObjectId&);
+    OdDbCompoundObjectId& operator =(const OdDbCompoundObjectId&);
+
+    bool operator ==(const OdDbCompoundObjectId&) const;
+    bool operator !=(const OdDbCompoundObjectId& other) const;
+
+    OdDbObjectId topId() const;
+
+    OdDbObjectId leafId() const;
+
+    OdResult getFullPath(OdDbObjectIdArray& fullPath) const;
+
+    OdResult getPath(OdDbObjectIdArray& path) const;
+
+    void setEmpty();
+
+    OdResult set(const OdDbObjectId&, OdDbDatabase* pHostDatabase = NULL);
+
+    OdResult set(const OdDbCompoundObjectId&, OdDbDatabase* pHostDatabase = NULL);
+
+    OdResult set(const OdDbObjectId& id, const OdDbObjectIdArray& path, OdDbDatabase* pHostDatabase = NULL);
+
+    OdResult setFullPath(const OdDbObjectIdArray& fullPath, OdDbDatabase* pHostDatabase = NULL);
+
+    bool isEmpty() const;
+
+    bool isValid(int validityCheckingLevel = 1) const;
+
+    bool isExternal() const;
+
+    bool isSimpleObjectId() const;
+
+    OdResult getTransform(OdGeMatrix3d& trans) const;
+
+    bool remap(const OdDbIdMapping& idMap);
+
+    OdResult dwgOutFields(OdDbDwgFiler* pFiler, OdDbDatabase* pHostDatabase) const;
+
+    OdResult dwgInFields(OdDbDwgFiler* pFiler, int ownerVersion);
+
+    OdResult dxfOutFields(OdDbDxfFiler* pFiler, OdDbDatabase* pHostDatabase) const;
+
+    OdResult dxfInFields(OdDbDxfFiler* pFiler, OdDbDatabase* pHostDatabase, int ownerVersion);
+
+    static const OdDbCompoundObjectId& nullId();
+
+protected:
+    OdDbCompoundObjectId();
+    OdDbCompoundObjectId(OdDbCompoundObjectIdImpl*);
+
+    OdDbCompoundObjectIdImpl* m_pImpl;
+};
+
+typedef OdSmartPtr<OdDbCompoundObjectId> OdDbCompoundObjectIdPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurve.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurve.h
new file mode 100755
index 0000000..bbc9b23
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurve.h
@@ -0,0 +1,408 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBCURVE_H
+#define OD_DBCURVE_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+class OdDbSpline;
+typedef OdSmartPtr<OdDbSpline> OdDbSplinePtr;
+
+class OdDbCurveImpl;
+class OdDbCurve;
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbCurve object pointers.
+*/
+typedef OdSmartPtr<OdDbCurve> OdDbCurvePtr;
+/** \details
+    The class is the base class for all OdDb curves.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbCurve : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbCurve);
+
+  OdDbCurve();
+
+  /** \details
+    Returns true if and only if this Curve object is closed.
+  */
+  virtual bool isClosed() const;
+
+  /** \details
+    Returns true if and only if this Curve object is periodic.
+  */
+  virtual bool isPeriodic() const;
+
+  /** \details
+    Returns the parameter corresponding to the start point of this Curve object.
+
+    \param startParam [out]  Receives the start parameter.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getStartParam(
+    double& startParam) const = 0;
+
+  /** \details
+    Returns the parameter corresponding to the end point of this Curve object.
+
+    \param endParam [out]  Receives the end parameter.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getEndParam(
+    double& endParam) const = 0;
+
+  /** \details
+    Returns the WCS start point of this Curve object.
+
+    \param startPoint [out]  Receives the start point.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getStartPoint(
+    OdGePoint3d& startPoint) const = 0;
+
+  /** \details
+    Returns the WCS end point of this Curve object.
+
+    \param endPoint [out]  Receives the end point.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getEndPoint(
+    OdGePoint3d& endPoint) const = 0;
+
+  /** \details
+    Returns the WCS point on this Curve object corresponding to the specified parameter.
+    
+    \param param [in]  Parameter specifying point.
+    \param pointOnCurve [out]  Receives the point on this Curve object.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+      virtual OdResult getPointAtParam(
+    double param, 
+    OdGePoint3d& pointOnCurve) const = 0;
+
+  /** \details
+    Returns the parameter corresponding to the specified WCS point on this Curve object.
+
+    \param param [out]  Receives the parameter corresponding to pointOnCurve.
+    \param pointOnCurve [in]  Point to be evaluated.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+      virtual OdResult getParamAtPoint(
+    const OdGePoint3d& pointOnCurve, 
+    double& param) const = 0;
+
+  /** \details
+    Returns the distance along this Curve object from its start point to the point specified by param.
+    
+    \param param [in]  Parameter specifying point.
+    \param dist [out]  Receives the distance. 
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getDistAtParam (
+    double param, 
+    double& dist) const = 0;
+
+  /** \details
+    Returns the parameter corresponding to the point a specified distance 
+    along this Curve object from its start point.
+    
+    \param param [out]  Receives the parameter.
+    \param dist [in]  Distance along the curve. 
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getParamAtDist (
+    double dist, 
+    double& param) const = 0;
+
+  /** \details
+    Returns the distance along this Curve object from its start point to the specified WCS point.
+    
+    \param pointOnCurve [in]  Point on the curve.
+    \param dist [out]  Receives the distance. 
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getDistAtPoint (
+    const OdGePoint3d& pointOnCurve, 
+    double& dist)const;
+
+  /** \details
+    Returns the WCS point a specified distance along this Curve object from its start point.
+    
+    \param pointOnCurve [out]  Receives the point.
+    \param dist [in]  Distance along the curve. 
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getPointAtDist (
+    double dist, 
+    OdGePoint3d& pointOnCurve) const;
+  
+  /** \details
+    Returns the first derivative of this Curve object at the specified WCS point.
+    
+    \param param [in]  Parameter specifying point.
+    \param pointOnCurve [in]  Point on the curve.
+    \param firstDeriv [out]  Receives the first derivative. 
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getFirstDeriv (
+    double param,
+    OdGeVector3d& firstDeriv) const = 0;
+
+  virtual OdResult getFirstDeriv (
+    const OdGePoint3d& pointOnCurve,
+    OdGeVector3d& firstDeriv) const;
+
+  /** \details
+    Returns the second derivative of this Curve object at the specified point.
+    
+    \param param [in]  Parameter specifying point.
+    \param pointOnCurve [in]  Point on the curve.
+    \param secondDeriv [out]  Receives the first derivative. 
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getSecondDeriv (
+    double param,
+    OdGeVector3d& secondDeriv) const;
+
+  virtual OdResult getSecondDeriv (
+    const OdGePoint3d& pointOnCurve,
+    OdGeVector3d& secondDeriv) const;
+
+  /** \details
+    Returns the point on this Curve object closest to the given point.
+    
+    \param givenPoint [in]  Given point.
+    \param pointOnCurve [out]  Receives the closed point on this Curve object.
+    \param extend [in]  Extends this Curve object if and only if true.
+    \param normal [in]  Normal to the projection plane.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    If normal is specified, this Curve object is projected onto the plane
+    defined by givenPoint and normal, finds the closest point on
+    the projected curve to givenPoint, and projects said closest
+    point back onto the plane of this Curve object. It is this point
+    that is returned as pointOnCurve. 
+  */
+  virtual OdResult getClosestPointTo(
+    const OdGePoint3d& givenPoint,
+    OdGePoint3d& pointOnCurve, 
+    bool extend = false) const;
+
+  virtual OdResult getClosestPointTo(
+    const OdGePoint3d& givenPoint,
+    const OdGeVector3d& normal,
+    OdGePoint3d& pointOnCurve, 
+    bool extend = false) const;
+  
+
+  /** \details
+    Returns OdDbSpline approximation of this Curve object.    
+    \param spline [out]  Receives a SmartPointer to the OdDbSpline.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getSpline (
+    OdDbSplinePtr* spline) const;
+
+  /** \details
+    Extends this Curve object to the specified WCS point.
+    
+    \param param [in]  Parameter specifying point.
+    \param toPoint [in]  Point to which to extend.
+    \param extendStart [in]  True to extend start of curve, false to extend end of curve.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult extend(
+    double param);
+  
+  virtual OdResult 
+    extend(bool extendStart,
+    const OdGePoint3d& toPoint);
+
+  /** \details
+    Returns the area of this Curve object.
+
+    \param area [out]  Receives the area.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getArea(
+    double& area) const;
+  
+  /** \details
+    Creates a curve by projecting this Curve object onto the specified plane
+    along its normal.
+    
+    \param projPlane [in]  Projection plane.
+    \param pProjCurve [out]  Receives a SmartPointer to the projected curve.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getOrthoProjectedCurve(const OdGePlane& projPlane,
+    OdDbCurvePtr* pProjCurve) const;
+
+  /** \details
+    Creates a curve by projecting this Curve object onto the specified plane
+    along the specified direction.
+    
+    \param projPlane [in]  Projection plane.
+    \param projDirection [in]  Projection direction.
+    \param pProjCurve [out]  Receives a SmartPointer to the projected curve.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getProjectedCurve(const OdGePlane& projPlane,
+    const OdGeVector3d& projDirection, OdDbCurvePtr* pProjCurve) const;
+
+  /** \details
+    Creates a set of curves representing the offsetting of this Curve object by the specified distance.
+    \param offsetDistance [in]  Offset distance.
+    \param offsetCurves [out]  Receives an array of SmartPointers to the offset curves.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    Pointers to all new curves are appended to the offsetCurves array.
+  */
+  virtual OdResult getOffsetCurves(double offsetDistance,  
+    OdRxObjectPtrArray& offsetCurves) const;
+
+  /** \details
+    Creates a set of curves representing the offsetting of this Curve object by the specified distance in a
+    plane with the specified normal.
+    \param offsetDistance [in]  Offset distance.
+    \param offsetCurves [out]  Receives an array of SmartPointers to the offset curves.
+    \param normal [in]  Normal of the plane.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    Pointers to all new curves are appended to the offsetCurves array.
+  */
+  virtual OdResult getOffsetCurvesGivenPlaneNormal(
+    const OdGeVector3d& normal, double offsetDistance,
+    OdRxObjectPtrArray& offsetCurves) const;          
+
+  /** \details
+    Creates a set of curves representing this splitting of this Curve object at the specified (parametric) points. 
+    \param params [in]  Array of curve parameters defining the segments.
+    \param points [in]  Array of points defining the segments.
+    \param curveSegments [out]  Receives an array of SmartPointers to the curves segments.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    Pointers to all new curves are appended to the curveSegments array.
+  */
+  virtual OdResult getSplitCurves (const OdGeDoubleArray& params,
+    OdRxObjectPtrArray& curveSegments) const;
+
+  virtual OdResult getSplitCurves (const OdGePoint3dArray& points,
+    OdRxObjectPtrArray& curveSegments) const;
+
+  virtual OdResult reverseCurve();
+
+  /** \details
+    Returns an OdGeCurve3d that is geometrically identical to this OdDbCurve.
+    \param pGeCurve [out]  Receives a pointer to an OdGeCurve3d object that is geometrically identical to this OdDbCurve.
+    The caller of this function is responsible for deleting this OdGeCurve3d object.
+    \param tol [in] Optional tolerance.
+    \returns
+    Returns eOk if successful.
+  */
+  virtual OdResult  getOdGeCurve ( OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol ) const;
+
+
+  /** \details
+    Takes an OdGeCurve3d and returns an OdDbCurve that is geometrically identical to the OdGeCurve3d.
+    \param geCurve [in]  Reference to an OdGeCurve3d.
+    \param pDbCurve [out]  Receives a pointer to an OdDbCurve object that is geometrically identical to geCurve.
+    The caller of this function is responsible for deleting this OdDbCurve object or adding it to the database.
+    \param normal [in] Optional normal vector. If this parameter is supplied then it must be a valid vector that 
+    is perpendicular to the input geCurve, and this vector will become the normal vector of the output pDbCurve.
+    If this parameter is not supplied, then this function will compute the normal vector itself.
+    \param tol [in] Optional tolerance
+    \returns
+    Returns eOk if successful.
+  */
+  static OdResult  createFromOdGeCurve ( const OdGeCurve3d& geCurve, OdDbCurve*& pDbCurve,
+                                                               OdGeVector3d *normal = NULL,
+                                                               const OdGeTol& tol = OdGeContext::gTol );
+
+  /** \details
+    Takes an OdGeCurve3d and sets this OdDbCurve to be geometrically identical to the OdGeCurve3d.
+    \param geCurve [in]  reference to an OdGeCurve3d.
+    \param normal [in]  Optional normal vector. If this parameter is supplied then it must be a valid vector that 
+    is perpendicular to the input geCurve, and this vector will become the normal vector of the output pDbCurve.
+    If this parameter is not supplied, then this function will compute the normal vector itself.
+    \param tol [in] Optional tolerance.
+    \returns
+    Returns eOk if successful.
+  */
+  virtual OdResult  setFromOdGeCurve ( const OdGeCurve3d& geCurve,
+                                                            OdGeVector3d *normal = NULL,
+                                                            const OdGeTol& tol = OdGeContext::gTol );
+
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurvePE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurvePE.h
new file mode 100755
index 0000000..50f5685
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbCurvePE.h
@@ -0,0 +1,188 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_CURVE_PE_
+#define _OD_DB_CURVE_PE_
+
+
+#include "DbCurve.h"
+
+/** \details
+    This class defines the interface for the Curve Protocol Extension classes.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbCurvePE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbCurvePE);
+
+  /** \details
+    Creates a curve by projecting the specified Curve object onto the specified plane
+    along a normal to the place.
+    
+    \param pCurve [in]  Pointer to the curve to project.
+    \param projPlane [in]  Projection plane.
+    \param pProjCurve [out]  Receives a SmartPointer to the projected curve.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getOrthoProjectedCurve(const OdDbCurve* pCurve, 
+    const OdGePlane& projPlane, 
+    OdDbCurvePtr* pProjCurve) const = 0;
+
+ /** \details
+    Creates a curve by projecting the specified Curve object onto the specified plane
+    along the specified direction.
+    
+    \param pCurve [in]  Pointer to the curve to project.
+    \param projPlane [in]  Projection plane.
+    \param projDirection [in]  Projection direction.
+    \param pProjCurve [out]  Receives a SmartPointer to the projected curve.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+ */
+  virtual OdResult getProjectedCurve(const OdDbCurve* pCurve, 
+    const OdGePlane& projPlane,
+    const OdGeVector3d& projDirection, 
+    OdDbCurvePtr* pProjCurve) const = 0;
+
+  /** \details
+    Creates a set of curves representing the offsetting the specified Curve object by the specified distance.
+    \param pCurve [in]  Pointer to the curve to offset.
+    \param offsetDistance [in]  Offset distance.
+    \param offsetCurves [out]  Receives an array of SmartPointers to the offset curves.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    Pointers to all new curves are appended to the offsetCurves array.
+  */
+  virtual OdResult getOffsetCurves(const OdDbCurve* pCurve, 
+    double offsetDistance,  
+    OdRxObjectPtrArray& offsetCurves) const = 0;
+
+  /** \details
+    Creates a set of curves representing the offsetting of the specified Curve object by the specified distance in a
+    plane with the specified normal.
+    \param pCurve [in]  Pointer to the curve to offset.
+    \param offsetDistance [in]  Offset distance.
+    \param offsetCurves [out]  Receives an array of SmartPointers to the offset curves.
+    \param normal [in]  Normal of the plane.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    Pointers to all new curves are appended to the offsetCurves array.
+  */
+  virtual OdResult getOffsetCurvesGivenPlaneNormal(const OdDbCurve* pCurve, 
+    const OdGeVector3d& normal, 
+    double offsetDistance,
+    OdRxObjectPtrArray& offsetCurves) const = 0;          
+
+  /** \details
+    Creates a set of curves representing this splitting of the specified Curve object at the specified (parametric) points. 
+    \param pCurve [in]  Pointer to the curve to offset.
+    \param params [in]  Array of curve parameters defining the segments.
+    \param points [in]  Array of points defining the segments.
+    \param curveSegments [out]  Receives an array of SmartPointers to the curves segments.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    Pointers to all new curves are appended to the curveSegments array.
+  */
+  virtual OdResult getSplitCurves (const OdDbCurve* pCurve, 
+    const OdGeDoubleArray& params, 
+    OdRxObjectPtrArray& curveSegments) const = 0;
+
+  virtual OdResult getSplitCurves (const OdDbCurve* pCurve, 
+    const OdGePoint3dArray& points, 
+    OdRxObjectPtrArray& curveSegments) const = 0;
+
+  /** \details
+    Extends the specified Curve object to the specified WCS point.
+    
+    \param pCurve [in]  Pointer to the curve to extend.
+    \param param [in]  Parameter specifying point.
+    \param toPoint [in]  Point to which to extend.
+    \param extendStart [in]  True to extend start of curve, false to extend end of curve.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult extend(OdDbCurve* pCurve, 
+    double param) = 0;
+
+  virtual OdResult extend(OdDbCurve* pCurve, bool extendStart,
+    const OdGePoint3d& toPoint) = 0;
+
+
+  /** \details
+    Returns an OdDbSpline approximation of the specified Curve object.
+    
+    \param pCurve [in]  Pointer to the curve.
+    \param spline [out]  Receives a SmartPointer to the OdDbSpline.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getSpline (const OdDbCurve* pCurve, 
+    OdDbSplinePtr* spline) const = 0;
+
+
+  /** \details
+    Returns the point on the specified Curve object closest to the given point.
+    
+    \param pCurve [in]  Pointer to the curve.
+    \param givenPoint [in]  Given point.
+    \param pointOnCurve [out]  Receives the closed point on this Curve object.
+    \param extend [in]  Extends this Curve object if and only if true.
+    \param normal [in]  Normal to the projection plane.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    If normal is specified, this Curve object is projected onto the plane
+    defined by givenPoint and normal, finds the closest point on
+    the projected curve to givenPoint, and projects said closest
+    point back onto the plane of this Curve object. It is this point
+    that is returned as pointOnCurve. 
+  */
+  virtual OdResult getClosestPointTo(const OdDbCurve* pCurve, 
+    const OdGePoint3d& givenPoint,
+    OdGePoint3d& pointOnCurve, 
+    bool extend = false) const = 0;
+
+  virtual OdResult getClosestPointTo(const OdDbCurve* pCurve, 
+    const OdGePoint3d& givenPoint,
+    const OdGeVector3d& normal,
+    OdGePoint3d& pointOnCurve, 
+    bool extend = false) const = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbCurvePE object pointers.
+*/
+typedef OdSmartPtr<OdDbCurvePE> OdDbCurvePEPtr;
+
+#endif //_OD_DB_CURVE_PE_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataLink.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataLink.h
new file mode 100755
index 0000000..2a802f3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataLink.h
@@ -0,0 +1,195 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_DBDATALINK_H
+#define OD_DBDATALINK_H
+
+#include "DbObject.h"
+#include "OdValue.h"
+#include "StringArray.h"
+
+#include "TD_PackPush.h"
+
+namespace OdDb
+{
+  enum DataLinkOption
+  { 
+    kDataLinkOptionNone                         = 0,
+    kDataLinkOptionAnonymous                    = 0x1,
+    kDataLinkOptionPersistCache                 = 0x2,
+    kDataLinkOptionDisableInLongTransaction     = 0x4,
+    kDataLinkHasCustomData                      = 0x8
+  };
+
+  enum PathOption
+  { 
+    kPathOptionNone = 1,
+    kPathOptionRelative,
+    kPathOptionAbsolute,
+    kPathOptionPathAndFile
+  };
+
+  enum UpdateDirection   
+  { 
+    kUpdateDirectionSourceToData   = 0x1,
+    kUpdateDirectionDataToSource   = 0x2
+  };
+
+  enum UpdateOption 
+  { 
+    kUpdateOptionNone                                  = 0,
+    kUpdateOptionSkipFormat                            = 0x20000,
+    kUpdateOptionUpdateRowHeight                       = 0x40000,
+    kUpdateOptionUpdateColumnWidth                     = 0x80000,
+    kUpdateOptionAllowSourceUpdate                     = 0x100000,
+    kUpdateOptionForceFullSourceUpdate                 = 0x200000,
+    kUpdateOptionOverwriteContentModifiedAfterUpdate   = 0x400000,
+    kUpdateOptionOverwriteFormatModifiedAfterUpdate    = 0x800000,
+    kUpdateOptionForPreview                            = 0x1000000,
+    kUpdateOptionIncludeXrefs                          = 0x2000000,
+    kUpdateOptionSkipFormatAfterFirstUpdate            = 0x4000000
+  };
+
+  enum DataLinkGetSourceContext
+  { 
+    kDataLinkGetSourceContextUnknown,
+    kDataLinkGetSourceContextEtransmit,
+    kDataLinkGetSourceContextXrefManager,
+    kDataLinkGetSourceContextFileWatcher,
+    kDataLinkGetSourceContextOther
+  };
+
+  enum TableFillOption   
+  { 
+    kTableFillOptionNone                     = 0,
+    kTableFillOptionRow                      = 0x1,
+    kTableFillOptionReverse                  = 0x2,
+    kTableFillOptionGenerateSeries           = 0x4,
+    kTableFillOptionCopyContent              = 0x8,
+    kTableFillOptionCopyFormat               = 0x10,
+    kTableFillOptionOverwriteReadOnlyContent = 0x20,
+    kTableFillOptionOverwriteReadOnlyFormat  = 0x40
+  };
+
+  enum TableCopyOption   
+  { 
+    kTableCopyOptionNone                                 = 0,
+    kTableCopyOptionExpandOrContractTable                = 0x1,
+    kTableCopyOptionSkipContent                          = 0x2,
+    kTableCopyOptionSkipValue                            = 0x4,
+    kTableCopyOptionSkipField                            = 0x8,
+    kTableCopyOptionSkipFormula                          = 0x10,
+    kTableCopyOptionSkipBlock                            = 0x20,
+    kTableCopyOptionSkipDataLink                         = 0x40,
+    kTableCopyOptionSkipLabelCell                        = 0x80,
+    kTableCopyOptionSkipDataCell                         = 0x100,
+    kTableCopyOptionSkipFormat                           = 0x200,
+    kTableCopyOptionSkipCellStyle                        = 0x400,
+    kTableCopyOptionConvertFormatToOverrides             = 0x800,
+    kTableCopyOptionSkipCellState                        = 0x1000,
+    kTableCopyOptionSkipContentFormat                    = 0x2000,
+    kTableCopyOptionSkipDissimilarContentFormat          = 0x4000,
+    kTableCopyOptionSkipGeometry                         = 0x8000,
+    kTableCopyOptionSkipMerges                           = 0x10000,
+    kTableCopyOptionFillTarget                           = 0x20000,
+    kTableCopyOptionOverwriteReadOnlyContent             = 0x40000,
+    kTableCopyOptionOverwriteReadOnlyFormat              = 0x80000,
+    kTableCopyOptionOverwriteContentModifiedAfterUpdate  = 0x100000,
+    kTableCopyOptionOverwriteFormatModifiedAfterUpdate   = 0x200000,
+    kTableCopyOptionOnlyContentModifiedAfterUpdate       = 0x400000,
+    kTableCopyOptionOnlyFormatModifiedAfterUpdate        = 0x800000,
+    kTableCopyOptionRowHeight                            = 0x1000000,
+    kTableCopyOptionColumnWidth                          = 0x2000000,
+    kTableCopyOptionFullCellState                        = 0x4000000,
+    kTableCopyOptionForRountrip                          = 0x8000000,  
+    kTableCopyOptionConvertFieldToValue                  = 0x10000000, 
+    kTableCopyOptionSkipFieldTranslation                 = 0x20000000
+  };
+
+};
+
+/** \details
+    This class links a table to data in another file.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes> 
+
+*/
+class TOOLKIT_EXPORT OdDbDataLink : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDataLink);
+
+  OdDbDataLink(void);
+  
+  OdString name (void) const;
+  void setName (const OdString& sName);
+  OdString description (void) const;
+  void setDescription (const OdString& sDescription);
+  OdString getToolTip (void) const;
+  void setToolTip (const OdString& sToolTip);
+  OdString  dataAdapterId (void) const;
+  void setDataAdapterId (const OdString& sAdapterId);
+  OdString  connectionString (void) const;
+  void setConnectionString(const OdString& sConnectionString);
+  OdDb::DataLinkOption option (void) const;
+  void setOption (OdDb::DataLinkOption nOption);
+  OdInt32 updateOption (void) const;
+  void setUpdateOption(OdInt32 nOption);
+  // void update (OdDb::UpdateDirection nDir, 
+  //  OdDb::UpdateOption nOption);
+  void getUpdateStatus(OdDb::UpdateDirection* pDir, 
+    OdTimeStamp* pTime, 
+    OdString* pErrMessage) const;
+  void setUpdateStatus(const OdString& sErrMessage);
+  bool isValid (void) const;
+  OdInt32 getTargets (OdDbObjectIdArray& targetIds) const;
+  void getSourceFiles(OdDb::DataLinkGetSourceContext nContext, 
+    OdStringArray& files) const;
+  // void repathSourceFiles(OdString& sBasePath, 
+  //   OdDb::PathOption nOption);
+  OdValue getCustomData(const OdString& sKey) const;
+  void setCustomData(const OdString& sKey, 
+    const OdValue* pData);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdArray<OdDbDataLink*> OdDbDataLinkArray;
+
+typedef OdSmartPtr<OdDbDataLink> OdDbDataLinkPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBDATALINK_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataTable.h
new file mode 100755
index 0000000..d1ad38b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDataTable.h
@@ -0,0 +1,258 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_DBDATATABLE_H
+#define OD_DBDATATABLE_H
+
+#include "TD_PackPush.h"
+#include "RxObject.h"
+#include "DbObject.h"
+
+class OdDbDataCellImpl;
+/** \details
+    Library: TD_Db 
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDataCell : public OdRxObject
+{
+public:
+  enum CellType {
+      kUnknown      = 0,
+      kInteger      = 1,
+      kDouble       = 2,
+      kCharPtr      = 3,
+      kPoint        = 4,
+      kObjectId     = 5,
+      kHardOwnerId  = 6,
+      kSoftOwnerId  = 7,
+      kHardPtrId    = 8,
+      kSoftPtrId    = 9,
+      kBool         = 10,
+      kVector       = 11
+  };
+  ODDB_DECLARE_MEMBERS(OdDbDataCell);
+
+  // Constructors
+  
+  OdDbDataCell();
+
+  /*
+  OdDbDataCell(const OdDbDataCell& rCell);
+
+  OdDbDataCell(bool b);
+  OdDbDataCell(int i);
+  OdDbDataCell(double d);
+  OdDbDataCell(const OdString& str);
+  OdDbDataCell(const OdGePoint3d& point);
+  OdDbDataCell(const OdGeVector3d& vec);
+  OdDbDataCell(const OdDbObjectId& id);
+  OdDbDataCell(const OdDbHardOwnershipId& id);
+  OdDbDataCell(const OdDbSoftOwnershipId& id);
+  OdDbDataCell(const OdDbHardPointerId&   id);
+  OdDbDataCell(const OdDbSoftPointerId&   id);
+
+  virtual ~OdDbDataCell();
+
+  */
+  
+  virtual void init();
+
+  virtual void set(const OdDbDataCell& cell);
+  virtual void set(bool b);
+  virtual void set(OdInt32 i);
+  virtual void set(double d);
+  virtual void set(const OdString& str);
+  virtual void set(const OdGePoint3d& pt);
+  virtual void set(const OdGeVector3d& vec);
+  virtual void set(const OdDbObjectId& id);
+  virtual void set(const OdDbHardOwnershipId& id);
+  virtual void set(const OdDbSoftOwnershipId& id);
+  virtual void set(const OdDbHardPointerId& id);
+  virtual void set(const OdDbSoftPointerId& id);
+
+  virtual void get(OdDbDataCell& cell);
+  virtual void get(bool& b);
+  virtual void get(OdInt32& i);
+  virtual void get(double& d);
+  virtual void get(OdString& str);
+  virtual void get(OdGePoint3d& pt);
+  virtual void get(OdGeVector3d& vec);
+  virtual void get(OdDbObjectId& id);
+  virtual void get(OdDbHardOwnershipId& id);
+  virtual void get(OdDbSoftOwnershipId& id);
+  virtual void get(OdDbHardPointerId& id);
+  virtual void get(OdDbSoftPointerId& id);
+
+/*
+  virtual bool operator == (const OdDbDataCell &cell) const;
+  virtual bool operator != (const OdDbDataCell &cell) const;
+*/
+
+  virtual OdDbDataCell::CellType type() const;
+  OdDbDataCell(OdDbDataCellImpl* pValImpl);
+
+protected:
+  friend class OdDbSystemInternals;
+  OdDbDataCellImpl* m_pImpl;
+};
+
+typedef OdSmartPtr<OdDbDataCell> OdDbDataCellPtr;
+
+typedef OdArray<OdDbDataCellPtr> OdDbDataCellArray; 
+
+class OdDbDataColumnImpl;
+
+/** \details
+    Library: TD_Db 
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDataColumn : public OdRxObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDataColumn);
+  OdDbDataColumn();
+  OdDbDataColumn(const OdDbDataColumn& rCol);
+//  OdDbDataColumn(const OdDbDataCell::CellType type,
+//       const OdString pColName = NULL);
+
+//  virtual ~OdDbDataColumn();
+
+  virtual OdUInt32 physicalLength() const;
+  virtual OdUInt32 growLength() const;
+
+  virtual void setPhysicalLength(OdUInt32 n);
+  virtual void setGrowLength(OdUInt32 n);
+
+//  virtual OdDbDataColumn& operator = (const OdDbDataColumn& col);
+
+  virtual void setColumnType(OdDbDataCell::CellType type);
+  virtual OdDbDataCell::CellType columnType() const;
+
+  virtual void setColumnName(const OdString& pName);
+  virtual OdString columnName() const;
+
+  virtual OdDbDataCellPtr getCellAt(OdUInt32 index) const;
+  virtual void setCellAt(OdUInt32 index, const OdDbDataCellPtr cell);
+
+  virtual void appendCell(const OdDbDataCellPtr cell);
+
+  virtual void insertCellAt(OdUInt32 index, const OdDbDataCellPtr& cell);
+  virtual void   removeCellAt(OdUInt32 index);
+  virtual OdInt32  getIndexAtCell(const OdDbDataCellPtr& cell) const;
+
+  virtual OdUInt32 numCells() const;
+
+  OdDbDataColumn(OdDbDataColumnImpl* m_pImpl);
+
+protected:
+  friend class OdDbSystemInternals;
+  OdDbDataColumnImpl* m_pImpl;
+};
+
+typedef OdSmartPtr<OdDbDataColumn> OdDbDataColumnPtr;
+
+class OdDbDataTableImpl;
+
+/** \details
+    Library: TD_Db 
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDataTable : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDataTable);
+  
+  OdDbDataTable(void);
+  
+//  virtual OdDbDataTable& operator = (const OdDbDataTable& table);
+
+  virtual OdUInt32 numColumns() const;
+  virtual OdUInt32 numRows() const;
+
+  virtual void setNumRowsPhysicalSize(OdUInt32 n);
+  virtual void setNumRowsGrowSize(OdUInt32 n);
+
+  virtual OdUInt32 numRowsPhysicalSize() const;
+  virtual OdUInt32 numRowsGrowSize() const;
+
+  virtual void setNumColsPhysicalSize(OdUInt32 n);
+  virtual void setNumColsGrowSize(OdUInt32 n);
+
+  virtual OdUInt32 numColsPhysicalSize() const;
+  virtual OdUInt32 numColsGrowSize() const;
+  
+  virtual OdString tableName() const;
+  virtual void setTableName(const OdString& pName);
+
+  virtual OdDbDataColumnPtr getColumnAt(OdUInt32 index) const;
+  virtual OdString columnNameAt(OdUInt32 index) const;
+
+  virtual  OdDbDataCell::CellType columnTypeAt(OdUInt32 index) const;
+  virtual  OdInt32 columnIndexAtName (const OdString& name) const;
+
+  virtual  void appendColumn(
+      OdDbDataCell::CellType type, const OdString& colName);
+  virtual  void insertColumnAt(OdUInt32 index, 
+      OdDbDataCell::CellType type, const OdString& colName);
+  virtual  void removeColumnAt(OdUInt32 index);
+
+  virtual  void getRowAt(OdUInt32 index, 
+      OdDbDataCellArray& outRow) const;
+  virtual  void setRowAt(OdUInt32 index,
+      const OdDbDataCellArray& row, bool bValidate = true);
+
+  virtual  void appendRow(
+      const OdDbDataCellArray& row, bool bValidate = true);
+
+  virtual  void insertRowAt(OdUInt32 index,
+      const OdDbDataCellArray& row, bool bValidate = true);
+
+  virtual  void removeRowAt(OdUInt32 index);
+
+  virtual  OdDbDataCellPtr getCellAt(OdUInt32 row, OdUInt32 col) const;
+  virtual  void setCellAt(OdUInt32 row, OdUInt32 col,
+      const OdDbDataCellPtr& cell);
+
+  //********************************************************************
+  // Overridden methods from OdDbObject
+  //********************************************************************
+  //
+
+  virtual OdResult  dwgInFields(
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  virtual OdResult  dxfInFields(
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  // virtual   audit(OdDbAuditInfo* pAuditInfo);
+};
+
+typedef OdSmartPtr<OdDbDataTable> OdDbDataTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabase.h
new file mode 100755
index 0000000..e052b95
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabase.h
@@ -0,0 +1,2238 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBDATABASE_INCLUDED_
+#define _ODDBDATABASE_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "DbObjectId.h"
+#include "RxObjectImpl.h"
+#include "OdString.h"
+#include "DbDate.h"
+#include "OdCodePage.h"
+#include "OdToolKit.h"
+#include "DbObject.h"
+#include "CmColor.h"
+#include "DbSecurity.h"
+#include "DbSystemServices.h"
+#include "ViewportDefs.h"
+#include "DbAnnotationScale.h"
+
+class OdDbObject;
+
+class OdDbSymbolTable;
+class OdDbBlockTable;
+class OdDbTextStyleTable;
+class OdDbLinetypeTable;
+class OdDbLayerTable;
+class OdDbViewTable;
+class OdDbUCSTable;
+class OdDbUCSTable;
+class OdDbViewportTable;
+class OdDbRegAppTable;
+class OdDbDimStyleTable;
+class OdDbDimStyleTableRecord;
+class OdDbBlockTableRecord;
+class OdDbTextStyleTableRecord;
+class OdDbRegAppTableRecord;
+class OdDbLinetypeTableRecord;
+class OdDbHostAppServices;
+class OdDbLayout;
+class OdDbLayoutManagerReactor;
+class OdGsView;
+class OdGsDevice;
+class OdGsDCRect;
+
+class OdDbDictionary;
+class OdDbDictionaryWithDefault;
+class OdDbFiler;
+class OdDbIdMapping;
+class OdDbDatabaseReactor;
+class OdDbSpatialFilter;
+class OdDbLayerFilter;
+class OdDbAuditInfo;
+class OdDbUndoController;
+class OdDbTransactionReactor;
+class OdDbEntity;
+
+class OdGePoint2d;
+class OdGePoint3d;
+class OdGeMatrix3d;
+class OdGeVector3d;
+class OdDbDwgFiler;
+
+class OdGsModel;
+
+class OdStreamBuf;
+class OdThumbnailImage;
+
+class OdDbDatabaseImpl;
+class OdResBuf;
+class OdDbUnitsFormatter;
+class OdDbLayerStateManager;
+class OdDbObjectIdGraph;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdResBuf object pointers.
+*/
+typedef OdSmartPtr<OdResBuf> OdResBufPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDictionary object pointers.
+*/
+typedef OdSmartPtr<OdDbDictionary> OdDbDictionaryPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDictionaryWithDefault object pointers.
+*/
+typedef OdSmartPtr<OdDbDictionaryWithDefault> OdDbDictionaryWithDefaultPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSymbolTable object pointers.
+*/
+typedef OdSmartPtr<OdDbSymbolTable> OdDbSymbolTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbBlockTable object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockTable> OdDbBlockTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLayerTable object pointers.
+*/
+typedef OdSmartPtr<OdDbLayerTable> OdDbLayerTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbTextStyleTable object pointers.
+*/
+typedef OdSmartPtr<OdDbTextStyleTable> OdDbTextStyleTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewTable object pointers.
+*/
+typedef OdSmartPtr<OdDbViewTable> OdDbViewTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbUCSTable object pointers.
+*/
+typedef OdSmartPtr<OdDbUCSTable> OdDbUCSTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewportTable object pointers.
+*/
+typedef OdSmartPtr<OdDbViewportTable> OdDbViewportTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbRegAppTable object pointers.
+*/
+typedef OdSmartPtr<OdDbRegAppTable> OdDbRegAppTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDimStyleTable object pointers.
+*/
+typedef OdSmartPtr<OdDbDimStyleTable> OdDbDimStyleTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLinetypeTable object pointers.
+*/
+typedef OdSmartPtr<OdDbLinetypeTable> OdDbLinetypeTablePtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbBlockTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbBlockTableRecord> OdDbBlockTableRecordPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDimStyleTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbDimStyleTableRecord> OdDbDimStyleTableRecordPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbTextStyleTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbTextStyleTableRecord> OdDbTextStyleTableRecordPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbRegAppTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbRegAppTableRecord> OdDbRegAppTableRecordPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDimStyleTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbDimStyleTableRecord> OdDbDimStyleTableRecordPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLinetypeTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbLinetypeTableRecord> OdDbLinetypeTableRecordPtr;
+
+class OdSecurityParams;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdSecurityParams object pointers.
+*/
+typedef OdSmartPtr<OdSecurityParams> OdSecurityParamsPtr;
+
+class OdFileDependencyManager;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdFileDependencyManager object pointers.
+*/
+typedef OdSmartPtr<OdFileDependencyManager> OdFileDependencyManagerPtr;
+
+class OdDbObjectContextManager;
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbObjectContextManager object pointers.
+*/
+typedef OdSmartPtr<OdDbObjectContextManager> OdDbObjectContextManagerPtr;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDatabase object pointers.
+*/
+typedef OdSmartPtr<OdDbDatabase> OdDbDatabasePtr;
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum UnitsValue
+  {
+    kUnitsUndefined    = 0,
+    kUnitsInches       = 1,
+    kUnitsFeet         = 2,
+    kUnitsMiles        = 3,
+    kUnitsMillimeters  = 4,
+    kUnitsCentimeters  = 5,
+    kUnitsMeters       = 6,
+    kUnitsKilometers   = 7,
+    kUnitsMicroinches  = 8,
+    kUnitsMils         = 9,
+    kUnitsYards        = 10,
+    kUnitsAngstroms    = 11,
+    kUnitsNanometers   = 12,
+    kUnitsMicrons      = 13,
+    kUnitsDecimeters   = 14,
+    kUnitsDekameters   = 15,
+    kUnitsHectometers  = 16,
+    kUnitsGigameters   = 17,
+    kUnitsAstronomical = 18,
+    kUnitsLightYears   = 19,
+    kUnitsParsecs      = 20,
+    kUnitsMax          = kUnitsParsecs
+  };
+  enum EndCaps
+  {
+    kEndCapNone       =  0,
+    kEndCapRound      =  1,
+    kEndCapAngle      =  2,
+    kEndCapSquare     =  3
+  };
+
+  enum JoinStyle
+  {
+    kJnStylNone       =  0,
+    kJnStylRound      =  1,
+    kJnStylAngle      =  2,
+    kJnStylFlat       =  3
+  };
+
+  enum DuplicateLinetypeLoading
+  {
+    kDltNotApplicable = 0, // Not Applicable.
+    kDltIgnore        = 1, // Ignore duplicate LineTypes.
+    kDltReplace       = 2  // Replace duplicate LineTypes.
+  };
+
+  // Old vesrion of Microsoft timezone index (see http://support.microsoft.com/kb/973627) somewhat reordered 
+  enum TimeZone
+  {
+    kInternationalDateLine      = -12000,   //(GMT-12:00) International Date Line West
+    kMidwayIsland               = -11000,   //(GMT-11:00) Midway Island, Samoa
+    kHawaii                     = -10000,   //(GMT-10:00) Hawaii
+    kAlaska                     = -9000,    //(GMT-09:00) Alaska
+    kPacific                    = -8000,    //(GMT-08:00) Pacific Time (US & Canada); Tijuana
+    kMountain                   = -7000,    //(GMT-07:00) Mountain Time (US & Canada)
+    kArizona                    = -7001,    //(GMT-07:00) Arizona
+    kMazatlan                   = -7002,    //(GMT-07:00) Chihuahua, La Paz, Mazatlan
+    kCentral                    = -6000,    //(GMT-06:00) Central Time (US & Canada)
+    kCentralAmerica             = -6001,    //(GMT-06:00) Central America
+    kMexicoCity                 = -6002,    //(GMT-06:00) Guadalajara, Mexico City, Monterrey
+    kSaskatchewan               = -6003,    //(GMT-06:00) Saskatchewan
+    kEastern                    = -5000,    //(GMT-05:00) Eastern Time (US & Canada)
+    kIndiana                    = -5001,    //(GMT-05:00) Indiana (East)
+    kBogota                     = -5002,    //(GMT-05:00) Bogota, Lima, Quito
+    kAtlanticCanada             = -4000,    //(GMT-04:00) Atlantic Time (Canada)
+    kCaracas                    = -4001,    //(GMT-04:00) Caracas, La Paz
+    kSantiago                   = -4002,    //(GMT-04:00) Santiago
+    kNewfoundland               = -3300,    //(GMT-03:30) Newfoundland and Labrador
+    kBrasilia                   = -3000,    //(GMT-03:00) Brasilia
+    kBuenosAires                = -3001,    //(GMT-03:00) Buenos Aires, Georgetown
+    kGreenland                  = -3002,    //(GMT-03:00) Greenland
+    kMidAtlantic                = -2000,    //(GMT-02:00) Mid-Atlantic
+    kAzores                     = -1000,    //(GMT-01:00) Azores
+    kCapeVerde                  = -1001,    //(GMT-01:00) Cape Verde Islands
+    kUTC                        =     0,    //(UTC) Universal Coordinated Time
+    kGMT                        =     1,    //(GMT) Greenwich Mean Time: Dublin, Edinburgh, Lisbon, London
+    kMonrovia                   =     2,    //(GMT) Casablanca, Monrovia
+    kBerlin                     =  1000,    //(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
+    kParis                      =  1001,    //(GMT+01:00) Brussels, Copenhagen, Madrid, Paris
+    kPrague                     =  1002,    //(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
+    kSarajevo                   =  1003,    //(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
+    kWestCentralAfrica          =  1004,    //(GMT+01:00) West Central Africa
+    kAthens                     =  2000,    //(GMT+02:00) Athens, Beirut, Istanbul, Minsk
+    kEasternEurope              =  2001,    //(GMT+02:00) Bucharest
+    kCairo                      =  2002,    //(GMT+02:00) Cairo
+    kHarare                     =  2003,    //(GMT+02:00) Harare, Pretoria
+    kHelsinki                   =  2004,    //(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius
+    kJerusalem                  =  2005,    //(GMT+02:00) Jerusalem
+    kMoscow                     =  3000,    //(GMT+03:00) Moscow, St. Petersburg, Volgograd
+    kRiyadh                     =  3001,    //(GMT+03:00) Kuwait, Riyadh
+    kBaghdad                    =  3002,    //(GMT+03:00) Baghdad
+    kEastAfrica                 =  3003,    //(GMT+03:00) Nairobi
+    kTehran                     =  3300,    //(GMT+03:30) Tehran
+    kAbuDhabi                   =  4000,    //(GMT+04:00) Abu Dhabi, Muscat
+    kCaucasus                   =  4001,    //(GMT+04:00) Baku, Tbilisi, Yerevan
+    kKabul                      =  4300,    //(GMT+04:30) Kabul
+    kEkaterinburg               =  5000,    //(GMT+05:00) Ekaterinburg
+    kIslamabad                  =  5001,    //(GMT+05:00) Islamabad, Karachi, Tashkent
+    kKolkata                    =  5300,    //(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
+    kKathmandu                  =  5450,    //(GMT+05:45) Kathmandu
+    kAlmaty                     =  6000,    //(GMT+06:00) Almaty, Novosibirsk
+    kDhaka                      =  6001,    //(GMT+06:00) Astana, Dhaka
+    kSriLanka                   =  6002,    //(GMT+06:00) Sri Jayawardenepura
+    kRangoon                    =  6300,    //(GMT+06:30) Rangoon
+    kBangkok                    =  7000,    //(GMT+07:00) Bangkok, Hanoi, Jakarta
+    kKrasnoyarsk                =  7001,    //(GMT+07:00) Krasnoyarsk
+    kBeijing                    =  8000,    //(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
+    kSingapore                  =  8001,    //(GMT+08:00) Kuala Lumpur, Singapore
+    kTaipei                     =  8002,    //(GMT+08:00) Taipei
+    kIrkutsk                    =  8003,    //(GMT+08:00) Irkutsk, Ulaan Bataar
+    kPerth                      =  8004,    //(GMT+08:00) Perth
+    kTokyo                      =  9000,    //(GMT+09:00) Osaka, Sapporo, Tokyo
+    kSeoul                      =  9001,    //(GMT+09:00) Seoul
+    kYakutsk                    =  9002,    //(GMT+09:00) Yakutsk
+    kAdelaide                   =  9300,    //(GMT+09:30) Adelaide
+    kDarwin                     =  9301,    //(GMT+09:30) Darwin
+    kSydney                     = 10000,    //(GMT+10:00) Canberra, Melbourne, Sydney
+    kGuam                       = 10001,    //(GMT+10:00) Guam, Port Moresby
+    kBrisbane                   = 10002,    //(GMT+10:00) Brisbane
+    kHobart                     = 10003,    //(GMT+10:00) Hobart
+    kVladivostock               = 10004,    //(GMT+10:00) Vladivostok
+    kMagadan                    = 11000,    //(GMT+11:00) Magadan, Solomon Is., New Caledonia
+    kWellington                 = 12000,    //(GMT+12:00) Auckland, Wellington
+    kFiji                       = 12001,    //(GMT+12:00) Fiji, Kamchatka, Marshall Is.
+    kTonga                      = 13000     //(GMT+13:00) Nuku'alofa
+  };
+
+  /** \details
+    Specifies settings that affect the shape of the
+    lofted solid or surface.
+  */
+  enum LoftParamType   
+  {
+    kLoftNoParam           = 0x00,
+    kLoftNoTwist           = 0x01,
+    kLoftAlignDirection    = 0x02,
+    kLoftSimplify          = 0x04,
+    kLoftClose             = 0x08,
+    kLoftPeriodic          = 0x10,
+    kLoftDefault           = kLoftNoTwist | kLoftAlignDirection | kLoftSimplify 
+  };
+
+  /** \details
+    Specifies the normals of the lofted object where it
+    passes through cross section curves.
+  */
+  enum LoftNormalsType  
+  {
+    kLoftRuled            = 0,
+    kLoftSmooth           = 1,
+    kLoftFirstNormal      = 2,
+    kLoftLastNormal       = 3,
+    kLoftEndsNormal       = 4,
+    kLoftAllNormal        = 5,
+    kLoftUseDraftAngles   = 6 
+  };
+
+    /** \details
+      Specifies how the entity interacts with collision detection.
+    */
+    enum CollisionType     
+    {
+      kCollisionTypeNone  = 0,
+      kCollisionTypeSolid = 1 
+    };
+
+  enum MeasurementValue
+  {
+    kEnglish = 0,  // English
+    kMetric  = 1   // Metric
+  };
+
+  enum ProxyImage
+  {
+    kProxyNotShow	    = 0,
+    kProxyShow	      = 1,
+    kProxyBoundingBox	= 2
+  };
+
+  enum FilletTrimMode   
+  { 
+    kTrimNone      = 0,
+    kTrimFirst     = 1,
+    kTrimSecond    = 2,
+    kTrimBoth      = 3 
+  };
+
+  /** \details
+    Used in text file writing functions to force text file encoding.
+  */
+  enum TextFileEncoding
+  {
+    kTextFileEncodingDefault = 0, // Chooses current system encoding automaticly
+    kTextFileEncodingANSI = 1, // Force ANSI character set encoding text writing
+    kTextFileEncodingUTF8 = 11, // Use UTF8 encoding for write file
+    kTextFileEncodingUTF16 = 21, // Chooses UTF16 endian automaticly
+    kTextFileEncodingUTF16LE = 22, // UTF16 LittleEndian
+    kTextFileEncodingUTF16BE = 23, // UTF16 BigEndian
+    kTextFileEncodingUTF32 = 31, // Chooses UTF32 endian automaticly
+    kTextFileEncodingUTF32LE = 32, // UTF32 LittleEndian
+    kTextFileEncodingUTF32BE = 33 // UTF32 BigEndian
+  };
+
+  enum LayerAdskType
+  {
+    kLayerSystemLights = 0,
+    kLayerConstraints  = 1
+  };
+}
+
+/** \details
+    This class represents a complete drawing file.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDatabase : public OdDbObject
+{
+protected:
+
+  OdDbDatabase();
+
+public:
+
+  OdResult subGetClassID(
+    void* pClsid) const;
+
+  ODRX_DECLARE_MEMBERS(OdDbDatabase);
+
+  void addRef();
+
+  void release();
+
+  /** \details
+    Returns the OdDbHostAppServices object associated with this database object.
+  */
+  OdDbHostAppServices* appServices() const;
+
+  /** \details
+    Adds the default set of objects and settings to this database object.
+
+    \remarks
+    This includes the ModelSpace and PaperSpace blocks, default table entries, system variable settings, etc.
+
+    \remarks
+    measurement must be one the following:
+
+    <table>
+    Name              Value
+    OdDb::kEnglish    0
+    OdDb::kMetric     1
+    </table>
+
+    \param measurement [in]  Units of measurement.
+  */
+  void initialize(
+    OdDb::MeasurementValue measurement = OdDb::kEnglish);
+
+  virtual ~OdDbDatabase();
+
+  /** \details
+    Adds an object to this database object, and returns its Object ID.
+
+    \param pObject [in]  Pointer to the object.
+    \param ownerId [in]  Object ID of the owner of pObject.
+    \param handle [in]  Handle for pObject
+
+    \remarks
+    A unique handle will be generated if handle is not supplied or is 0.
+
+  */
+  OdDbObjectId addOdDbObject(
+    OdDbObject* pObject,
+    OdDbObjectId ownerId = OdDbObjectId::kNull,
+    OdDbHandle handle = 0);
+
+  /** \details
+    Adds the specified name to the APPID table of this database object.
+
+    \param regAppName [in]  Application name.
+
+    \remarks
+    True if and only if the specified name had not been, and is now, in the APPID table.
+  */
+  bool newRegApp(
+    const OdString& regAppName);
+
+  /** \details
+    Returns the Object ID of the BlockTable of this database object.
+  */
+  OdDbObjectId getBlockTableId() const;
+
+  /** \details
+    Returns the Object ID of the LayerTable of this database object.
+  */
+  OdDbObjectId getLayerTableId() const;
+
+  /** \details
+    Returns the Object ID of the TextStyleTable of this database object.
+  */
+  OdDbObjectId getTextStyleTableId() const;
+
+  /** \details
+    Returns the Object ID of the LinetypeTable of this database object.
+  */
+  OdDbObjectId getLinetypeTableId() const;
+
+  /** \details
+    Returns the Object ID of the ViewTable of this database object.
+  */
+  OdDbObjectId getViewTableId() const;
+
+  /** \details
+    Returns the Object ID of the UCSTable of this database object.
+  */
+  OdDbObjectId getUCSTableId() const;
+
+  /** \details
+    Returns the Object ID of the ViewportTable of this database object.
+  */
+  OdDbObjectId getViewportTableId() const;
+
+  /** \details
+    Returns the Object ID of the RegAppTable of this database object.
+  */
+  OdDbObjectId getRegAppTableId() const;
+
+  /** \details
+    Returns the Object ID of the DimStyleTable of this database object.
+  */
+  OdDbObjectId getDimStyleTableId() const;
+
+  /** \details
+    Returns the Object ID of the MLineStyle dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getMLStyleDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the Group dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getGroupDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the Layout dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getLayoutDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the PlotStyleName dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getPlotStyleNameDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the NamedObjects dictionary of this database object.
+  */
+  OdDbObjectId getNamedObjectsDictionaryId() const;
+
+  /** \details
+    Returns the Object ID of the PlotSettings dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getPlotSettingsDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the Color dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getColorDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the Material dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getMaterialDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the VisualStyle dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getVisualStyleDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the TableStyle dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getTableStyleDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+  Returns the Object ID of the ScaleList dictionary of this database object.
+  \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getScaleListDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the current TableStyle of this database object.
+  */
+  OdDbObjectId tablestyle() const;
+
+  /** \details
+    Sets the Object ID of the current TableStyle of this database object.
+    \param objectId [in]  Object ID.
+  */
+  void setTablestyle(
+    OdDbObjectId objectId);
+
+  /** \details
+    Returns the Object ID of the MLeaderStyle dictionary of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getMLeaderStyleDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the current MLeaderStyle of this database object.
+  */
+  OdDbObjectId mleaderstyle() const;
+
+  /** \details
+    Sets the Object ID of the current MLeaderStyle of this database object.
+    \param objectId [in]  Object ID.
+  */
+  void setMLeaderstyle(
+    OdDbObjectId objectId);
+
+  /** \details
+    Returns the Object ID of the DetailViewStyle dictionary of this database object.
+    \param createIfNotFound [in]  Determines whether to create a DetailViewStyle dictionary if it does not exist.
+  */
+  OdDbObjectId getDetailViewStyleDictionaryId(
+    bool createIfNotFound = true) const;
+   
+  /** \details
+    Returns the Object ID of the current DetailViewStyle of this database object.
+  */
+  OdDbObjectId detailViewStyle() const;
+
+  /** \details
+    Sets the Object ID of the current DetailViewStyle of this database object.
+    \param objectId [in]  Object ID.
+  */
+  void setDetailViewStyle(
+    OdDbObjectId objectId);
+
+  /** \details
+    Returns the Object ID of the SectionViewStyle dictionary of this database object.
+    \param createIfNotFound [in]  Determines whether to create a SectionViewStyle dictionary if it does not exist.
+  */
+  OdDbObjectId getSectionViewStyleDictionaryId(
+    bool createIfNotFound = true) const;
+
+  /** \details
+    Returns the Object ID of the current SectionViewStyle of this database object.
+  */
+  OdDbObjectId sectionViewStyle() const;
+
+  /** \details
+    Sets the Object ID of the current SectionViewStyle of this database object.
+    \param objectId [in]  Object ID.
+  */
+  void setSectionViewStyle(
+    OdDbObjectId objectId);
+
+  /** \details
+    Returns the Object ID of the "ACAD" RegApp object of this database object.
+  */
+  OdDbObjectId getRegAppAcadId() const;
+
+  /** \details
+    Returns the Object ID of the "Continuous" Linetype object of this database object.
+  */
+  OdDbObjectId getLinetypeContinuousId() const;
+
+  /** \details
+    Returns the Object ID of the "ByLayer" Linetype object of this database object.
+  */
+  OdDbObjectId getLinetypeByLayerId() const;
+
+  /** \details
+    Returns the Object ID of the "ByBlock" Linetype object of this database object.
+  */
+  OdDbObjectId getLinetypeByBlockId() const;
+
+  /** \details
+    Returns the Object ID of the ModelSpace Block object of this database object.
+  */
+  OdDbObjectId getModelSpaceId() const;
+
+  /** \details
+    Returns the Object ID of the PaperSpace Block object of this database object.
+  */
+  OdDbObjectId getPaperSpaceId() const;
+
+  /** \details
+    Returns the Object ID of the "Standard" text style object of this database object.
+  */
+  OdDbObjectId getTextStyleStandardId() const;
+
+  /** \details
+    Returns the Object ID of the "Standard" dimension style object of this database object.
+  */
+  OdDbObjectId getDimStyleStandardId() const;
+
+  /** \details
+    Returns the Object ID of the "0" layer object of this database object.
+  */
+  OdDbObjectId getLayerZeroId() const;
+
+  /** \details
+    Returns the Object ID of the "DEFPOINTS" layer object of this database object.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+  */
+  OdDbObjectId getLayerDefpointsId(
+    bool createIfNotFound = false) const;
+
+  /** \details
+    Returns the Object ID of the specified system layer object of this database object.
+    \param layerType [in]  Type of system layer.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+
+    \remarks
+    layerType must be one of the following:
+
+    <table>
+    Name                        Value       Layer name
+    OdDb::kLayerSystemLights    0           *ADSK_SYSTEM_LIGHTS
+    OdDb::kLayerConstraints     1           *ADSK_CONSTRAINTS
+    </table>
+  */
+  OdDbObjectId getLayerAdskId(
+    OdDb::LayerAdskType layerType,
+    bool createIfNotFound = false) const;
+
+  /** \details
+    Returns the object ID of the section manager.
+
+    \remarks
+    The ID may be null if the database
+    has never contained any section planes.
+  */
+  OdDbObjectId getSectionManager() const;
+
+  /** \details
+    Returns the object ID of the point cloud dictionary.
+
+    \remarks
+    The ID may be null if the database
+    has never contained any point clouds.
+  */
+  OdDbObjectId getPointCloudDictionaryId() const;
+
+  /** \details
+    Returns the Class DXF Name for the specified class.
+
+    \param pClass [in]  Pointer to the class object.
+
+    \sa
+    OdRxClass
+  */
+  /*!DOM*/
+  const OdString classDxfName(
+    const OdRxClass* pClass);
+
+  /** \details
+    Returns the Object ID corresponding to the specified handle object in this database.
+
+    \param objHandle [in]  Database handle.
+    \param createIfNotFound [in]  Controls the creation of the object if it does not exist.
+    \param xRefId [in]  Not used.
+
+    \remarks
+    If objHandle is 0, this function will create a new unique handle and return a
+    newly created Object ID corresponding to this handle.
+
+    \note
+    createIfNotFound is for Teigha internal use only, and should always be false for Teigha applications.
+
+    \sa
+    OdDbObjectId
+  */
+  OdDbObjectId getOdDbObjectId(
+    const OdDbHandle& objHandle,
+    bool createIfNotFound = false,
+    OdUInt32 xRefId = 0);
+
+  /** \details
+    Writes the contents of this database object to the specified StreamBuf object.
+
+    \param pStreamBuf [in]  Pointer to the StreamBuf object to which the data are to be written.
+    \param fileType [in]  File type.
+    \param fileVersion [in]  File version.
+    \param saveThumbnailImage [in]  Controls the saving of a thumbnail image to the file.
+    \param dxfPrecision [in]  DXF file decimal digits precision. [0 .. 16].
+
+    \remarks
+    fileType must be one of the following:
+
+    <table>
+    Name          Value   Description
+    OdDb::kDwg    0       .dwg file.
+    OdDb::kDxf    1       .dxf file.
+    OdDb::kDxb    2       Binary .dxf file.
+    </table>
+
+    fileVersion must be one of the following:
+
+    <table>
+    OdDb::kDwg?    Name          Value  Description
+    n      OdDb::vAC09   11     Release 9
+    n      OdDb::vAC10   13     Release 10
+    y      OdDb::vAC12   16     Release 11-12
+    y      OdDb::vAC13   19     Release 13
+    y      OdDb::vAC14   21     Release 14
+    y      OdDb::vAC15   23     2000-2002
+    y      OdDb::vAC18   25     2004-2006
+    y      OdDb::vAC21   27     2007-2009
+    y      OdDb::vAC24   29     2010-2012
+    y      OdDb::vAC27   31     2013-2016
+    </table>
+
+    Throws:
+    OdError if the write is unsuccessful.
+  */
+  void writeFile(
+    OdStreamBuf* pStreamBuf,
+    OdDb::SaveType fileType,
+    OdDb::DwgVersion fileVersion,
+    bool saveThumbnailImage = false,
+    int dxfPrecision = 16);
+
+  /** \param filename [in]  Name of the file to which the data are to be written.
+  */
+  void writeFile(
+    const OdString& filename,
+    OdDb::SaveType fileType,
+    OdDb::DwgVersion fileVersion,
+    bool saveThumbnailImage = false,
+    int dxfPrecision = 16)
+  {
+    closeInput();
+    OdStreamBufPtr pFile = odSystemServices()->createFile(filename, Oda::kFileWrite, Oda::kShareDenyReadWrite, Oda::kCreateAlways);
+    writeFile(pFile, fileType, fileVersion, saveThumbnailImage, dxfPrecision);
+  }
+
+  /** \details
+    Reads the contents of the specified StreamBuf object or file into this database object.
+
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+    \param partialLoad [in]  Controls the partial loading of .dwg files.
+    \param pAuditInfo [in]  Pointer to an OdDbAuditInfo object.
+    \param password [in]  Password for file.
+    \param allowCPConversion [in]  If and only if true, allows code page conversion.
+
+    \remarks
+    Using this function in .tx code is not recommended.
+    In .tx modules use OdDbHostAppServices::readFile() or OdDbHostAppServices::recoverFile() instead.
+    This provides more control for host application which may override these virtual methods.
+
+    The specified OdDbAuditInfo object controls the audit, and receives the audit status.
+
+    If pAuditInfo is non-zero, a recover will be performed instead of a load.
+
+    Throws:
+    OdError if the read is unsuccessful.
+  */
+  void readFile(
+    OdStreamBuf* pStreamBuf,
+    bool partialLoad = false,
+    OdDbAuditInfo *pAuditInfo = 0,
+    const OdPassword& password = OdPassword(),
+    bool allowCPConversion = false );
+
+  /** \param filename [in]  Name of the file from which the data are to be read.
+    \param shareMode [in]  Share mode to use when opening the specified file.
+
+    \remarks
+    shareMode must be one of the following:
+
+    <table>
+    Name                         Value       Description
+    Oda::kShareDenyReadWrite     0x10        deny read/write mode
+    Oda::kShareDenyWrite         0x20        deny write mode
+    Oda::kShareDenyRead          0x30        deny read mode
+    Oda::kShareDenyNo            0x40        deny none mode
+    </table>
+
+  */
+  void readFile(
+    const OdString& filename,
+    bool partialLoad = false,
+    Oda::FileShareMode shareMode = Oda::kShareDenyWrite,
+    const OdPassword& password = OdPassword(),
+    bool allowCPConversion = false )
+  {
+    readFile(odSystemServices()->createFile(filename, Oda::kFileRead, shareMode), partialLoad, 0, password, allowCPConversion);
+  }
+
+  /** \details
+    Forces all data to be loaded from the input file associated with this database object, and closes the file.
+
+    \remarks
+    Client applications will normally not need to call this function.
+  */
+  /*!DOM*/
+  void closeInput();
+
+  /** \details
+    Returns the approximate number of objects in this database object.
+
+    \remarks
+    This function returns value greater than or equal to the number of objects
+    in this database object.
+
+    This number is used to construct an OdDbObjectIdArray that can hold all the objects in the database, avoiding
+    memory fragmentation and increasing performance.
+  */
+  OdInt32 approxNumObjects() const;
+
+  /** \details
+    Returns the version of this database object.
+
+    \remarks
+    The maintenance release version is returned if and only if pMaintReleaseVer != 0.
+
+    \param pMaintReleaseVer [in]  Pointer to the MaintReleaseVer object to receive the maintenance release version.
+  */
+  OdDb::DwgVersion version(
+    OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const;
+
+  /** \details
+    Returns the number of times this database object has been saved since it was opened.
+
+    \remarks
+    This number may be zero.
+  */
+  OdInt32 numberOfSaves() const;
+
+  /** \details
+    Returns the version to which this database object was last saved.
+
+    \param pMaintReleaseVer [in]  Pointer to the MaintReleaseVer object to receive the maintenance release version.
+
+    \remarks
+    The maintenance release version is returned if and only if pMaintReleaseVer != 0.
+  */
+  OdDb::DwgVersion lastSavedAsVersion(
+    OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const;
+
+  /** \details
+    Returns the FileType of the file from which this database object was read.
+
+    \remarks
+    originalFileType() returns one of the following:
+
+    <table>
+    Name         Value   Description
+    OdDb::kDwg    0       .dwg file.
+    OdDb::kDxf    0       .dxf file.
+    </table>
+  */
+  OdDb::SaveType originalFileType() const;
+
+  /** \details
+    Returns the version of the file from which this database object was read.
+
+    \param pMaintReleaseVer [in]  Pointer to the MaintReleaseVer object to receive the maintenance release version.
+
+    \remarks
+    The maintenance release version is returned if and only if pMaintReleaseVer != 0.
+  */
+  OdDb::DwgVersion originalFileVersion(
+    OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const;
+
+  /** \details
+    Returns the version of the application that created the file from which this database object was read.
+
+    \param pMaintReleaseVer [in]  Pointer to the MaintReleaseVer object to receive the maintenance release version.
+
+    \remarks
+    The maintenance release version is returned if and only if pMaintReleaseVer != 0.
+  */
+  OdDb::DwgVersion originalFileSavedByVersion(
+    OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const;
+
+   /** \details
+    Adds the specified reactor to this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+   */
+  void addReactor(
+    OdDbDatabaseReactor* pReactor) const;
+
+  /** \details
+    Removes the specified reactor from this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  void removeReactor(OdDbDatabaseReactor*
+    pReactor) const;
+
+  /** \details
+    Returns the R14 DIMFIT system variable of this database object.
+
+    \remarks
+    The DIMATFIT and DIMTMOVE values will be converted to DIMFIT. The complete mapping is as follows:
+
+    <table>
+    DIMTMOVE    DIMAFIT   DIMFIT
+    0           0         0
+    0           1         1
+    0           2         2
+    0           3         3
+    1           0         4
+    1           1         4
+    1           2         4
+    1           3         4
+    2           0         5
+    2           1         5
+    2           2         5
+    2           3         5
+    </table>
+  */
+  int dimfit() const;
+
+  /** \details
+    Returns the R14 DIMUNIT system variable of this database object.
+
+    \remarks
+    The DIMLUNIT and DIMFRAC values will be converted to DIMUNIT. The complete mapping is as follows:
+
+    <table>
+    DIMFRAC   DIMLUNIT  DIMUNIT
+    0         1         1
+    0         2         2
+    0         3         3
+    0         4         4
+    0         5         5
+    0         6         8
+    1         1         1
+    1         2         2
+    1         3         3
+    1         4         4
+    1         5         5
+    1         6         8
+    2         1         1
+    2         2         2
+    2         3         3
+    2         4         6
+    2         5         7
+    2         6         8
+    </table>
+
+    All other input combinations return 2.
+  */
+  int dimunit() const;
+
+  /** \details
+    Sets the R14 DIMFIT system variable of this database object.
+
+    \param val [in]  New value for DIMFIT. [0..5]
+
+    \remarks
+    The DIMFIT value will be converted to DIMATFIT and DIMTMOVE values. The complete mapping is as follows:
+  */
+  void setDimfit(
+    int val);
+
+  /** \details
+    Sets the R14 DIMUNIT system variable of this database object.
+
+    \param val [in]  New value for DIMUNIT. [1..7]
+
+    \remarks
+    The DIMUNIT value will be converted to DIMLUNIT and DIMFRAC values.
+  */
+  void setDimunit(
+    int val);
+
+  /** \details
+    Deep clones a set of objects, and appends the clones to the specified in owner object.
+
+    \param objectIds [in]  Array of Object IDs of the objects to be cloned.
+    \param ownerId [in]  Object ID of owner object.
+    \param idMap [in/out] ID map.
+    \param deferXlation [in] Defer translation.
+
+    \remarks
+    idMap associates the Object IDs of the original objects with the Object IDs of the newly created clones.
+
+    When cloning objects with different owner IDs, a separate call to this function is required for each
+    ownerId. In this case, all but the final call to this function should be made with deferXlation == true.
+    This defers translation until all objects have been cloned.
+
+    A deep clone is a clone of the specified objects and everything they own.
+
+    \sa
+    wblockCloneObjects()
+
+  */
+  void deepCloneObjects(
+    const OdDbObjectIdArray& objectIds,
+    OdDbObjectId ownerId,
+    OdDbIdMapping& idMap,
+    bool deferXlation = false);
+
+
+  /** \details
+    Shallow clones a set of objects, and appends the clones to the specified in owner object.
+
+    \param objectIds [in]  Array of Object IDs of the objects to be cloned.
+    \param ownerId [in]  Object ID of the owner object.
+    \param idMap [in/out] ID map.
+    \param deferXlation [in] Defer translation.
+
+    \remarks
+    idMap associates the Object IDs of the original objects with the Object IDs of the newly created clones.
+
+    When cloning objects with different owner IDs, a separate call to this function is required for each
+    ownerId. In this case, all but the final call to this function should be made with deferXlation == true.
+    This defers translation until all objects have been cloned.
+
+    A shallow clone is a clone of the specified objects, but not what they own.
+
+	duplicateRecordCloning must be one of the following:
+
+    <table>
+    Name                        Value   Description
+    OdDb::kDrcNotApplicable     0       Not applicable to the object.
+    OdDb::kDrcIgnore            1       If a duplicate record exists, use the existing record in the database, and ignore the clone.
+    OdDb::kDrcReplace           2       If a duplicate record exists, replace it with the cloned record.
+    OdDb::kDrcXrefMangleName    3       Incoming record names are mangled with <Xref>$0$<name>
+    OdDb::kDrcMangleName        4       Incoming record names are mangled with $0$<name>
+    OdDb::kDrcUnmangleName      5       Unmangle the names mangled by OdDb::kDrcMangleName, then default to OdDb::kDrcIgnore. Typically used by RefEdit when checking records into the original database.
+    </table>
+
+    \sa
+    deepCloneObjects()
+
+  */
+  void wblockCloneObjects(
+    const OdDbObjectIdArray& objectIds,
+    OdDbObjectId ownerId,
+    OdDbIdMapping& idMap,
+    OdDb::DuplicateRecordCloning duplicateRecordCloning,
+    bool deferXlation = false);
+
+  /** \details
+    Terminates a call to deepCloneObjects() or wblockCloneObjects().
+
+    \param idMap [in/out] ID map of the function call to be terminated.
+
+    \remarks
+    idMap associates the Object IDs of the original objects with the Object IDs of the newly created clones.
+
+    This call is necessary only when a call to deepCloneObjects() or wblockCloneObjects() is made with deferXlation == true,
+    and no call will be made with deferXlation == false.
+  */
+  void abortDeepClone(
+    OdDbIdMapping& idMap);
+
+  /** \details
+    Performs an audit operation on the header of this database object.
+
+    \param pAuditInfo [in]  Pointer to an OdDbAuditInfo object.
+
+    \remarks
+    The specified OdDbAuditInfo object controls the audit, and receives the audit status.
+  */
+  void audit(
+    OdDbAuditInfo* pAuditInfo);
+
+  /** \details
+    Starts a new transaction of this database object.
+  */
+  virtual void startTransaction();
+
+  /** \details
+    Ends the current transaction associated with this database object.
+
+    \remarks
+    This function commits all changes to objects since the start of the current transaction.
+  */
+  virtual void endTransaction();
+
+  /** \details
+    Aborts the current transaction associated with this database object.
+
+    \remarks
+    This function initiates an immediate rollback of all changes to objects
+    since the start of the current transaction. This rollback occurs for
+    all transaction-resident objects.
+  */
+  virtual void abortTransaction();
+
+  /** \details
+    Returns the number of active transactions associated with this database object.
+  */
+  virtual int numActiveTransactions();
+
+  /** \details
+    Adds a transaction reactor to this database object.
+
+    \param reactor [in]  Transaction reactor.
+  */
+  virtual void addTransactionReactor(
+    OdDbTransactionReactor* reactor);
+
+  /** \details
+    Removes the specified transaction reactor from this database object.
+
+    \param reactor [in]  Transaction reactor.
+  */
+  virtual void removeTransactionReactor(
+    OdDbTransactionReactor* reactor);
+
+
+  /** \details
+    Returns the thumbnail bitmap associated with this database object.
+
+    \remarks
+    The thumbnail is in Windows BITMAPINFO* format.
+
+    \param dataLength [out]  Receives the data length of the thumbnail.
+  */
+  const void* thumbnailBitmap(
+    OdUInt32& dataLength) const;
+
+  /** \details
+    Sets the thumbnail bitmap associated with this database object.
+
+    \remarks
+    The thumbnail is in Windows BITMAPINFO* format.
+
+    \param dataLength [in]  Data length of the thumbnail.
+    \param pBMPData [in]  Pointer to the bitmap data.
+  */
+  void setThumbnailBitmap(
+    const void* pBMPData,
+    OdUInt32 dataLength);
+
+  /** \details
+    Returns the state of the RetainOriginalThumbnailBitmap flag.
+  */
+  bool retainOriginalThumbnailBitmap() const;
+
+  /** \details
+    Controls the state of the RetainOriginalThumbnailBitmap flag.
+
+    \param retain [in]  Retain if and only if true.
+  */
+  void setRetainOriginalThumbnailBitmap(
+    bool retain);
+
+  void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+#define VAR_DEF(type, name, def_value, metric_def_value, reserve1, reserve2)\
+    SVARS_FUNC_MODIFIER type get##name() const;
+
+#include "SysVarDefs.h"
+
+#undef VAR_DEF
+#undef RO_VAR_DEF
+
+#define RO_VAR_DEF(type, name, def_value, metric_def_value, reserve1, reserve2)
+#define VAR_DEF(type, name, def_value, metric_def_value, reserve1, reserve2)\
+    SVARS_FUNC_MODIFIER void set##name(type val);
+
+#include "SysVarDefs.h"
+
+#undef RO_VAR_DEF
+#undef VAR_DEF
+
+#define VAR_DEF(type, name, dxf, def_value, metric_def_value, reserve1, reserve2)\
+    virtual type dim##name() const;\
+    virtual void setDim##name(type val);
+
+#include "DimVarDefs.h"
+
+#undef VAR_DEF
+
+  /** \details
+    Returns true if current Dimension Style is annotative
+  */
+  bool getDIMANNO() const;
+
+  /** \details
+    Returns the TDCREATE system variable of this database object.
+    \remarks
+    TDUCREATE represents the time and date, in Local Time, that the database was created.
+  */
+  OdDbDate getTDCREATE() const;
+
+  /** \details
+    Returns the TDUPDATE system variable of this database object.
+    \remarks
+    TDUUPDATE represents the time and date, in Local Time, that the database was last saved.
+  */
+  OdDbDate getTDUPDATE() const;
+
+  /** \details
+    Resets TDCREATE, TDUPDATE, TDINDWG and TDUSRTIMER system variables to the settings of the new drawing.
+    \remarks
+    TDCREATE and TDUPDATE will be set to the current system time and data. TDINDWG and TDUSRTIMER will be set to zero.
+  */
+  void resetTimes();
+
+  /** \details
+    Returns the specified system variable of this database object.
+
+    \param name [in]  Name of the system variable.
+
+    \remarks
+    Returns a SmartPointer to an OdResBuf object that contains the value.
+
+    System variable names are case-insensitive strings.
+
+    \sa
+    System Variables
+  */
+  OdResBufPtr getSysVar(
+    const OdString& name) const;
+
+  /** \details
+    Sets the specified system variable of this database object.
+
+    \param name [in]  Name of the system variable.
+    \param pValue [in]  Pointer to an OdResBuf object that contains the new value.
+
+    \remarks
+    System variable names are case-insensitive strings.
+
+    \sa
+    System Variables
+  */
+  void setSysVar(
+    const OdString& name,
+    const OdResBuf* pValue);
+
+  /** \details
+    Returns the next available handle number of this database object.
+    \remarks
+    Use OdDbHandle::getIntoAsciiBuffer() to return the hex string version of the handle.
+  */
+  OdDbHandle handseed() const;
+
+  /** \details
+    Copies the dimension variables of this database object to the
+    specified DimStyleTableRecord.
+
+    \param pDestination [in]  Pointer to the destination record.
+  */
+  void getDimstyleData(
+    OdDbDimStyleTableRecord* pDestination) const;
+
+
+  OdResult getDimstyleChildData(const OdRxClass *pDimClass,
+                                OdDbDimStyleTableRecord* pRec,
+                                OdDbObjectId &style) const;
+
+  OdDbObjectId getDimstyleChildId(const OdRxClass *pDimClass,
+                                  const OdDbObjectId &parentStyle) const;
+
+  OdDbObjectId getDimstyleParentId(const OdDbObjectId &childStyle) const;
+
+
+  /** \details
+    Copies the dimension style data from the specified DimStyleTableRecord
+    to the dimension variables of this database object.
+    \param pSource [in]  Pointer to the source record.
+  */
+  void setDimstyleData(
+    const OdDbDimStyleTableRecord* pSource);
+
+  /** \details
+    \param objectId [in]  Object ID of the source record.
+  */
+  void setDimstyleData(
+    OdDbObjectId objectId);
+
+  /** \details
+    Loads a linetype into this database object.
+
+    \param ltName [in] Name of the linetype to load.
+    \param filename [in] Name of the linetype file from which to load.
+    \param encode [in] Encoding used in linetype text file (if known).
+
+    \remarks
+    Wildcards are permitted in ltName; if "*" is specified, all LineTypes from filename will be loaded.
+
+    dlt must be one of the following:
+
+    <table>
+    Name                      Value   Description
+    OdDb::kDltNotApplicable     0       Not Applicable.
+    OdDb::kDltIgnore            1       Ignore duplicate LineTypes.
+    OdDb::kDltReplace           2       Replace duplicate LineTypes.
+    </table>
+
+    Throws:
+    An appropriate error if not successful.
+  */
+  void loadLineTypeFile(
+    const OdString& ltName,
+    const OdString& filename,
+    OdDb::DuplicateLinetypeLoading dlt = OdDb::kDltNotApplicable,
+    OdDb::TextFileEncoding encode = OdDb::kTextFileEncodingDefault);
+
+  /** \details
+      Returns the name of the file associated with this database object.
+  */
+  virtual OdString getFilename() const;
+
+  /** \details
+    Removes the Object IDs from the specified array that are hard referenced
+    in this database object.
+
+    \remarks
+    Any remaining Object IDs can be safely erased.
+
+    \note
+    This function does not modify this database object.
+
+    \param objectIds [in/out] Array of Object IDs.
+  */
+  virtual void purge(
+    OdDbObjectIdArray& objectIds) const;
+
+  virtual OdResult purge(
+    OdDbObjectIdGraph& objectIds) const;
+
+  /** \details
+      Returns a count of hard references to each of the specified Object IDs.
+
+      \param objectIds [in]  Array of Object IDs.
+      \param counts [out]  Receives an array of hard reference counts.
+
+      \note
+      counts must be the same size as objectIds.
+
+      Each element of counts will be incremented for each hard reference of the corresponding objectId
+      The caller must initialize the elements of count to zero or an appropriate value
+      before calling this function.
+  */
+  virtual void countHardReferences(
+    const OdDbObjectIdArray& objectIds,
+    OdUInt32* counts) const;
+
+  /** \details
+      Returns the Object ID of the active layout of this database object.
+  */
+  OdDbObjectId currentLayoutId() const;
+
+  /** \details
+    Sets the current layout of this database object.
+
+    \param layoutName [in]  Name of the layout.
+  */
+  virtual void setCurrentLayout(
+    const OdString& layoutName);
+
+  /** \param layoutId [in]  Object ID of layout.
+  */
+  virtual void setCurrentLayout(
+    const OdDbObjectId& layoutId);
+
+  /** \details
+      Returns the name of the active layout of this database object.
+
+      \param allowModel [in]  If and only if true, allows the ModelSpace layout name to be returned.
+
+      \remarks
+      If allowModel == false, an empty string will be returned if the active layout is ModelSpace.
+  */
+  virtual OdString findActiveLayout(
+    bool allowModel) const;
+
+  /** \details
+    Returns the Object ID of the BlockTableRecord associated with the active
+    layout of this database object.
+  */
+  virtual OdDbObjectId getActiveLayoutBTRId() const;
+
+  /** \details
+    Returns the Object ID of the specified layout in this database object.
+
+    \param layoutName [in]  Layout name.
+
+    \remarks
+    Returns a null Object ID if the specified layout is not found.
+  */
+  virtual OdDbObjectId findLayoutNamed(
+    const OdString& layoutName) const;
+
+  /** \details
+    Deletes the specified layout from this database object.
+
+    \param layoutName [in]  Layout name.
+  */
+  virtual void deleteLayout(
+    const OdString& layoutName);
+
+  /** \details
+    Creates a new layout with the specified name in this database object.
+
+    \remarks
+    The newly created layout is added to this database object along with its
+    newly created, associated OdDbBlockTableRecord.
+
+    \param layoutName [in]  Layout name.
+    \param pBlockTableRecId [in]  Pointer to the BlockTableRecID to receive the Object ID of the new BlockTableRecord object.
+  */
+  virtual OdDbObjectId createLayout(
+    const OdString& layoutName,
+    OdDbObjectId* pBlockTableRecId = 0);
+
+  /** \details
+    Returns the number of layouts in this database object.
+  */
+  virtual int countLayouts() const;
+
+  /** \details
+    Renames the specified layout in this database object.
+    \param oldName [in]  Old name.
+    \param newName [in]  New name.
+  */
+  virtual void renameLayout(
+    const OdString& oldName,
+    const OdString& newName);
+
+  /** \details
+      Starts undo recording of this database object.
+  */
+  void startUndoRecord();
+
+  /** \details
+      Returns true if undo information exists of this database object.
+  */
+  bool hasUndo() const;
+
+  /** \details
+    Performs an undo operation on this database object.
+
+    \remarks
+    All operations performed since the
+    last call to startUndoRecording will be undone.
+
+    At least 1 undo step is always supported by Teigha for internal needs.
+  */
+  void undo();
+
+  void blockUndoRecording(bool bBegin);
+
+  bool isUndoBlockStarted();
+
+  void setUndoMark();
+
+  bool hasUndoMark() const;
+
+  void undoBack();
+
+  int getUNDOMARKS() const;
+
+  void clearUndo();
+
+  /** \details
+    Returns true if redo information exists of this database object.
+  */
+  bool hasRedo() const;
+
+  /** \details
+    Performs a redo operation on this database object.
+
+    \remarks
+    Restores operations undone by the last undo.
+  */
+  void redo();
+
+  /** \details
+    Performs an audit operation on the this entire database object.
+
+    \param pAuditInfo [in]  Pointer to an AuditInfo object.
+
+    \remarks
+    The specified AuditInfo object controls the audit, and receives the audit status.
+  */
+  void auditDatabase(
+    OdDbAuditInfo *pAuditInfo);
+
+  void applyPartialUndo(
+    OdDbDwgFiler* pUndoFiler,
+    OdRxClass* pClassObj);
+
+  OdDbDwgFiler* undoFiler();
+
+  /** \details
+    Copies contents of pSource database to this database.  
+
+    \param sourceBlockName [in]  Name of the OdDbBlockTableRecord in pSource.
+    \param destinationBlockName [in]  Name for the new OdDbBlockTableRecord.
+    \param xfm [in]  Transformation matrix.
+    \param pSource [in]  Source database.
+    \param preserveSourceDatabase [in]  Isn't used. Objects from the source database are always copied, not moved.
+    
+    \remarks
+    The data that will be copied includes contents of the BlockTable, LayerTable, LinetypeTable, DimStyleTable, RegAppTable,
+	TextStyleTable, PlotStyleNameDictionary, PlotSettingsDictionary, MLStyleDictionary, ColorDictionary, MaterialDictionary, 
+	TableStyleDictionary, MLeaderStyleDictionary, ScaleListDictionary, VisualStyleDictionary, GroupDictionary. 
+	Unlike wblockCloneObjects() method, insert() also copies the sortens table. 
+	While copying duplicate objects, names will be ignored; a destination object that has the same name as the source object will be rewritten by the source one.
+
+	The arguments that are passed to the method define the specifics of copying the layout block contents. 
+
+	If destinationBlockName is specified and sourceBlockName is not specified, a new OdDbBlockTableRecord is created and all model space entities of pSource 
+	are copied into the new block.
+	
+	If both destinationBlockName and sourceBlockName are specified, all entities in the BlockTableRecord specified by sourceBlockName in pSource
+    are copied into the new OdDbBlockTableRecord and offset by the INSBASE value. Contents of layout blocks are copied only if sourceBlockName is a layout block name. 
+
+    If xfm is specified, all model space entities in pSource are copied into model space of this database object and transformed by xfm.
+  */
+  OdDbObjectId insert(
+    const OdString& destinationBlockName,
+    OdDbDatabase* pSource,
+    bool preserveSourceDatabase = true);
+
+  OdDbObjectId insert(
+    const OdString& sourceBlockName,
+    const OdString& destinationBlockName,
+    OdDbDatabase* pSource,
+    bool preserveSourceDatabase = true);
+
+  void insert(
+    const OdGeMatrix3d& xfm,
+    OdDbDatabase* pSource,
+    bool preserveSourceDatabase = true);
+
+  /** \details
+     Clones specified objects of this database to a new database.
+
+     \param outObjIds [in]  Array of Object IDs to be cloned.
+     \param basePoint [in]  WCS base point for the insertion.
+     \param blockId [in]  Object ID of the BlockTableRecord to be cloned.
+
+     \remarks
+     The method creates a new OdDbDatabase object, populates it with specified objects from this database using wblockClone() method and returns a SmartPointer 
+	 to the new database. If called with no arguments, the entire contents of this database are cloned. All objects are copied with their dependencies: 
+	 for example, if a text entity uses a specific textstyle, it will be copied as well; line entities will be copied with their linestyles, etc.
+  */
+  OdDbDatabasePtr wblock(
+    const OdDbObjectIdArray& outObjIds,
+    const OdGePoint3d& basePoint);
+
+  OdDbDatabasePtr wblock(
+    OdDbObjectId blockId);
+
+  OdDbDatabasePtr wblock();
+
+ /** \note
+    As implemented, this function does nothing but return a null SmartPointer.
+    It will be fully implemented in a future release.
+ */
+  OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*) const;
+
+  /** \details
+    Sets the security parameters of this database object.
+
+    \param secParams [in]  Security params.
+    \param setDbMod [in]  If and only if true, the DBMOD variable will be set if the security settings modified.
+
+    \note
+    As implemented, this function ignores setDbMod, and never modifies the DBMOD variable.
+    It will be fully implemented in a future release.
+  */
+  void setSecurityParams(
+    const OdSecurityParams& secParams,
+    bool setDbMod = true);
+
+  /** \details
+    Returns the security parameters of this database object.
+    \param secParams [in]  Security params.
+    \remarks
+    Returns true if and only if secParams.nFlags!=0 && secParams.password is not empty.
+  */
+  bool securityParams(
+    OdSecurityParams& secParams) const;
+  /** \details
+    Returns the OdFileDependencyManager object of this database object.
+  */
+  OdFileDependencyManagerPtr fileDependencyManager() const;
+  /** \details
+  Returns the OdDbObjectContextManager object of this database object.
+  */
+  OdDbObjectContextManagerPtr objectContextManager() const;
+
+  OdDbLayerStateManager* getLayerStateManager() const;
+
+  /** \details
+    Recalculates the extents of this database object.
+    \param bExact [in]  Enables more slow but exact extents calculation algorithm.
+  */
+  void updateExt(bool bExact = false);
+
+  /** \details
+      Returns true if and only if this database object was created by an educational version of the application.
+  */
+  bool isEMR() const;
+  /** \details
+    Returns the Object ID of the OdDbBlockTableRecord that references this database object as an Xref.
+  */
+  OdDbObjectId xrefBlockId() const;
+
+  /** \details
+    Returns true if and only if this database object is partially opened.
+  */
+  bool isPartiallyOpened() const;
+
+  /** \details
+    Returns true if and only if this database object is being loaded from file.
+  */
+  bool isDatabaseLoading() const;
+
+  /** \details
+    Returns true if and only if this database object is being converted after loading from file or before saving to file.
+  */
+  bool isDatabaseConverting() const;
+
+  /** \details
+    Returns pointer to OdDbAuditInfo if database is being loaded from file in Recover mode else returns Null.
+  */
+  OdDbAuditInfo* auditInfo() const;
+
+  /** \details
+    Sets the current UCS of this database object.
+
+    \param origin [in]  The WCS origin of the UCS.
+    \param xAxis [in]  The WCS X-axis of the UCS.
+    \param yAxis [in]  The WCS Y-axis of the UCS.
+    \param viewType [in]  Orthographic view type.
+    \param ucsId [in]  Object ID of the UCS.
+
+    \remarks
+    viewType must be one of the following:
+
+    <table>
+    Name                  Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS
+    OdDb::kTopView        1       Top view with respect to the UCS
+    OdDb::kBottomView     2       Bottom view with respect to the UCS
+    OdDb::kFrontView      3       Front view with respect to the UCS
+    OdDb::kBackView       4       Back view with respect to the UCS
+    OdDb::kLeftView       5       Left view with respect to the UCS
+    OdDb::kRightView      6       Right view with respect to the UCS
+    </table>
+  */
+  void setCurrentUCS(
+    OdDb::OrthographicView viewType);
+  void setCurrentUCS(
+    const OdDbObjectId& ucsId);
+  void setCurrentUCS(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& xAxis,
+    const OdGeVector3d& yAxis);
+
+  /** \details
+    Returns the UCS origin and orthographic view type for the current UCS.
+
+    \param viewType [in]  Orthographic view type.
+
+    \remarks
+    viewType must be one of the following:
+
+    <table>
+    Name            Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS
+    OdDb::kTopView        1       Top view with respect to the UCS
+    OdDb::kBottomView     2       Bottom view with respect to the UCS
+    OdDb::kFrontView      3       Front view with respect to the UCS
+    OdDb::kBackView       4       Back view with respect to the UCS
+    OdDb::kLeftView       5       Left view with respect to the UCS
+    OdDb::kRightView      6       Right view with respect to the UCS
+    </table>
+  */
+  OdGePoint3d getUCSBASEORG(
+    OdDb::OrthographicView viewType) const;
+
+  /** \details
+    Sets the UCS origin and orthographic view type for the current UCS.
+
+    \param origin [in]  The WCS origin of the UCS.
+    \param viewType [in]  Orthographic view type.
+
+    \remarks
+    viewType must be one of the following:
+
+    <table>
+    Name            Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS
+    OdDb::kTopView        1       Top view with respect to the UCS
+    OdDb::kBottomView     2       Bottom view with respect to the UCS
+    OdDb::kFrontView      3       Front view with respect to the UCS
+    OdDb::kBackView       4       Back view with respect to the UCS
+    OdDb::kLeftView       5       Left view with respect to the UCS
+    OdDb::kRightView      6       Right view with respect to the UCS
+    </table>
+  */
+  void setUCSBASEORG(
+    OdDb::OrthographicView viewType,
+    const OdGePoint3d& origin);
+
+  /** \details
+    Returns the UCS origin and orthographic view type for the current PaperSpace UCS.
+
+    \param viewType [in]  Orthographic view type.
+
+    \remarks
+    viewType must be one of the following:
+
+    <table>
+    Name                  Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS
+    OdDb::kTopView        1       Top view with respect to the UCS
+    OdDb::kBottomView     2       Bottom view with respect to the UCS
+    OdDb::kFrontView      3       Front view with respect to the UCS
+    OdDb::kBackView       4       Back view with respect to the UCS
+    OdDb::kLeftView       5       Left view with respect to the UCS
+    OdDb::kRightView      6       Right view with respect to the UCS
+    </table>
+  */
+   OdGePoint3d getPUCSBASEORG(
+    OdDb::OrthographicView viewType) const;
+
+ /** \details
+    Sets the UCS origin and orthographic view type for the current PaperSpace UCS.
+
+    \param origin [in]  The WCS origin of the UCS.
+    \param viewType [in]  Orthographic view type.
+
+    \remarks
+    viewType must be one of the following:
+
+    <table>
+    Name                  Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS
+    OdDb::kTopView        1       Top view with respect to the UCS
+    OdDb::kBottomView     2       Bottom view with respect to the UCS
+    OdDb::kFrontView      3       Front view with respect to the UCS
+    OdDb::kBackView       4       Back view with respect to the UCS
+    OdDb::kLeftView       5       Left view with respect to the UCS
+    OdDb::kRightView      6       Right view with respect to the UCS
+    </table>
+ */
+  void setPUCSBASEORG(
+    OdDb::OrthographicView viewType,
+    const OdGePoint3d& origin);
+
+  /** \details
+  Returns the database to its original state (when the xref was first read) by undoing
+  any modifications.
+  \remarks
+  This function should be used with restoreForwardingXrefSymbols when reading or
+  writing any xref object. 
+  */
+  void restoreOriginalXrefSymbols();
+
+  /** \details
+  Returns the database to its modified state (before any original state restoration) by
+  redoing modifications.
+  \remarks
+  This function should be used with restoreOriginalXrefSymbols when reading or
+  writing any xref object. The database requires write-access to symbol tables and 
+  records.
+  */
+  void restoreForwardingXrefSymbols();
+
+  /** \details
+    Requires a lineweight and returns True if the specified lineweight is valid, that is, a one of 
+    predefined lineweights in this database, or False otherwise.
+
+    \param weight [in]  The lineweight value.
+  */
+  static bool isValidLineWeight(int weight);
+
+  /** \details
+    Requires a lineweight and returns the nearest OdDb::LineWeight enum number for this database. For example, 
+    when the passed value is 8, the returned value is kLnWt009.
+
+    \param weight [in]  The lineweight value.
+  */
+  static OdDb::LineWeight getNearestLineWeight(int weight);
+
+  /*
+  bool plotStyleMode() const;
+
+
+  void forceWblockDatabaseCopy();
+
+  void auditXData(OdDbAuditInfo* pInfo);
+
+  OdDbUndoController* undoController() const;
+
+  void setDimblk(const OdChar*);
+  void setDimblk1(const OdChar*);
+  void setDimblk2(const OdChar*);
+  void setDimldrblk(const OdChar*);
+
+  void getDimstyleChildData(const OdRxClass *pDimClass,
+                            OdDbDimStyleTableRecordPtr& pRec,
+                            OdDbObjectId &style) const;
+
+  OdDbObjectId getDimstyleChildId(const OdRxClass *pDimClass,
+                                  OdDbObjectId &parentStyle) const;
+
+  OdDbObjectId getDimstyleParentId(OdDbObjectId &childStyle) const;
+
+  void getDimRecentStyleList(OdDbObjectIdArray& objIds) const;
+
+  void applyPartialOpenFilters(const OdDbSpatialFilter* pSpatialFilter,
+                               const OdDbLayerFilter* pLayerFilter);
+
+  void disablePartialOpen();
+
+  void newFingerprintGuid();
+
+  void newVersionGuid();
+
+  double viewportScaleDefault() const;
+
+  void setViewportScaleDefault(double newDefaultVPScale);
+
+  OdDbObjectId getPaperSpaceVportId() const;
+
+  virtual void copyLayout(const OdChar* copyname, const OdChar* newname);
+
+  virtual void cloneLayout(const OdDbLayout* pLBTR, const OdChar* newname, int newTabOrder);
+
+  virtual OdDbObjectId getNonRectVPIdFromClipId(const OdDbObjectId& clipId);
+
+  virtual bool isViewportClipped(short index);
+
+  */
+
+  OdDbObjectId byLayerMaterialId() const;
+  OdDbObjectId byBlockMaterialId() const;
+  OdDbObjectId globalMaterialId() const;
+
+  OdDbObjectId activeViewportId() const;
+
+  virtual OdDbUnitsFormatter& formatter();
+
+  void enableGraphicsFlush(bool bEnable);
+  void flushGraphics();
+
+// ODA_MT_DB_BEGIN
+  bool isMultiThreadedMode() const;
+  OdDb::MultiThreadedMode multiThreadedMode() const;
+  virtual void setMultiThreadedMode(OdDb::MultiThreadedMode);
+// ODA_MT_DB_END
+  
+  void setCannoscale(OdDbAnnotationScale* val);
+  OdDbAnnotationScalePtr cannoscale() const;
+
+
+private:
+  friend class OdDbDatabaseImpl;
+  OdDbDatabaseImpl* m_pImpl;
+};
+
+
+/** Fills in OdThumbnailImage object from stream. Throws appropriate exception if an error occurred.
+*/
+
+TOOLKIT_EXPORT void odDbGetPreviewBitmap(OdStreamBuf* pStreamBuf, OdThumbnailImage* pPreview);
+
+
+// The functions below provide write access to "Read-Only" *database* variables.
+// Actually they are a OdDb::kludge for bypassing non-implemented DD functionality
+// or to repair invalid drawings.
+// They should be used with care.
+
+/** \details
+    Sets the DWGCODEPAGE value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for DWGCODEPAGE.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetDWGCODEPAGE(
+  OdDbDatabase& db,
+  OdCodePageId val);
+
+/** \details
+    Sets the TDUCREATE system variable in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for TDUCREATE.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetTDUCREATE(
+  OdDbDatabase& db,
+  OdDbDate val);
+
+/** \details
+    Sets the TDUUPDATE value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for TDUUPDATE.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetTDUUPDATE(
+  OdDbDatabase& db,
+  OdDbDate val);
+
+/** \details
+    Sets the TDINDWG value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for TDINDWG.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetTDINDWG(
+  OdDbDatabase& db,
+  OdDbDate val);
+
+/** \details
+    Sets the TDUSRTIMER value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for TDUSRTIMER.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetTDUSRTIMER(
+  OdDbDatabase& db,
+  OdDbDate val);
+
+/** \details
+    Sets the PSTYLEMODE value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for PSTYLEMODE.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetPSTYLEMODE(
+  OdDbDatabase& db,
+  bool val);
+
+/** \details
+    Sets the UCSORG system variable in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for UCSORG.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetUCSORG(
+  OdDbDatabase& db,
+  OdGePoint3d val);
+
+/** \details
+    Sets the UCSXDIR value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for UCSXDIR.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetUCSXDIR(
+  OdDbDatabase& db,
+  OdGeVector3d val);
+
+/** \details
+    Sets the UCSYDIR value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for UCSYDIR.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetUCSYDIR(
+  OdDbDatabase& db,
+  OdGeVector3d val);
+
+/** \details
+    Sets the PUCSORG value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for PUCSORG.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetPUCSORG(
+  OdDbDatabase& db,
+  OdGePoint3d val);
+
+/** \details
+    Sets the PUCSXDIR value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for PUCSXDIR.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetPUCSXDIR(
+  OdDbDatabase& db,
+  OdGeVector3d val);
+
+/** \details
+    Sets the PUCSYDIR value in the specified OdDbDatabase instance.
+
+    \param db [in]  Database.
+    \param val [in]  Value for PUCSYDIR.
+
+    \note
+    This function provides write access to "Read-Only" system variables.
+    It may be used to bypass non-implemented Teigha functionality or to repair drawings,
+    and should be used with care.
+*/
+TOOLKIT_EXPORT void odDbSetPUCSYDIR(
+  OdDbDatabase& db,
+  OdGeVector3d val);
+
+
+ /** \details
+    Saves an line types to the specified file.
+    \param db [in]  OdDbDatabase object.
+    \param filename [in]  Name of the line type file to save.
+		\param encode [in]  Encoding used for writing linetype text file.
+ */
+extern TOOLKIT_EXPORT void odDbSaveLineTypeFile(OdDbDatabase &Db, OdStreamBuf &filename, OdDb::TextFileEncoding encode = OdDb::kTextFileEncodingDefault);
+
+ /** \details
+    Loads an MLineStyle into the specified database object.
+
+    \param db [in]  OdDbDatabase object.
+    \param patternName [in]  Name of the pattern to load.
+    \param filename [in]  Name of the MlineStyle file from which to load.
+    \param dlt [in]  Duplicate linetype loading.
+    \remarks
+    dlt must be one of the following:
+
+    <table>
+    Name                        Value   Description
+    OdDb::kDltNotApplicable     0       Not Applicable.
+    OdDb::kDltIgnore            1       Ignore duplicate LineTypes.
+    OdDb::kDltReplace           2       Replace duplicate LineTypes.
+    </table>
+
+    Throws:
+    An appropriate error if not successful.
+ */
+extern TOOLKIT_EXPORT void odDbLoadMlineStyleFile(
+  OdDbDatabase &db,
+  const OdString& patternName,
+    OdStreamBuf &filename,
+  OdDb::DuplicateLinetypeLoading dlt = OdDb::kDltNotApplicable );
+
+ /** \details
+    Saves an MLineStyle to the specified file.
+    \param db [in]  OdDbDatabase object.
+    \param filename [in]  Name of the MlineStyle file to save.
+ */
+extern TOOLKIT_EXPORT void odDbSaveMlineStyleFile(OdDbDatabase &Db, OdStreamBuf &filename );
+
+namespace OdDb
+{
+  TOOLKIT_EXPORT const char* DwgVersionToStr(DwgVersion ver);
+  TOOLKIT_EXPORT DwgVersion DwgVersionFromStr(const char* str);
+}
+
+
+#include "TD_PackPop.h"
+
+#endif /* _ODDBDATABASE_INCLUDED_ */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseCollection.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseCollection.h
new file mode 100755
index 0000000..2eba012
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseCollection.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBDATABASECOLLECTION_H_INCLUDED_
+#define _DBDATABASECOLLECTION_H_INCLUDED_
+
+#include "RxObject.h"
+
+/** \details
+    This class is a container class for OdDbDatabase objects.
+
+    Library: TD_Db
+    <group OdDb_Classes> 
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbDatabaseCollection : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbDatabaseCollection);
+
+  /** \details
+    Creates an Iterator object that provides access to the OdDbDatabase objects in this collection object.
+    
+    \remarks
+    Returns a SmartPointer to the Iterator object.
+  */
+  virtual OdRxIteratorPtr newIterator() = 0;
+  
+  /** \details
+    Returns the number of OdDbDatabase objects in this Collection object.
+  */
+  virtual int count() const = 0;
+};
+
+TOOLKIT_EXPORT OdDbDatabaseCollection* oddbDatabaseCollection();
+
+#endif //#ifndef _DBDATABASECOLLECTION_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseReactor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseReactor.h
new file mode 100755
index 0000000..24515df
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDatabaseReactor.h
@@ -0,0 +1,279 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBDATABASEREACTOR_INCLUDED_
+#define _ODDBDATABASEREACTOR_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "IdArrays.h"
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdDbDatabase events.
+    
+    \remarks
+    Events consist of the addition, modification, or deletion of objects 
+    from an OdDbDatabase instance.
+    
+    \note
+    The default implementations of all methods in this class do nothing.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDatabaseReactor : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbDatabaseReactor);
+  
+  OdDbDatabaseReactor() {}
+  
+  /** \details
+    Notification function called whenever an OdDbObject has been appended to an OdDbDatabase.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param pObject [in]  Pointer to the object being appended.
+    
+    \remarks
+    This function is called after the operation.
+  */
+  virtual void objectAppended(
+    const OdDbDatabase* pDb, 
+    const OdDbObject* pObject);
+
+  
+  /** \details
+    Notification function called whenever an OdDbObject has been unappended from an OdDbDatabase by an Undo operation.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param pObject [in]  Pointer to the object being unappended.
+
+    \remarks
+    This function is called after the operation.
+  */
+  virtual void objectUnAppended(
+    const OdDbDatabase* pDb, 
+    const OdDbObject* pObject);
+
+  
+  /** \details
+    Notification function called whenever an OdDbObject has been reappended to an OdDbDatabase by a Redo operation.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param pObject [in]  Pointer to the object being reappended.
+
+    \remarks
+    This function is called after the operation.
+  */
+  virtual void objectReAppended(
+    const OdDbDatabase* pDb, 
+    const OdDbObject* pObject);
+
+  
+  /** \details
+    Notification function called whenever an OdDbObject is about to be modified.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param pObject [in]  Pointer to the object being modified.
+    
+    \remarks
+    This function is called before the operations.
+    
+    \sa
+    objectModified
+  */
+  virtual void objectOpenedForModify(
+    const OdDbDatabase* pDb, 
+    const OdDbObject* pObject);
+
+  
+  /** \details
+    Notification function called whenever an OdDbObject has been modified.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param pObject [in]  Pointer to the object being modified.
+    
+    \remarks
+    This function is called after the operations.
+
+    \sa
+    objectOpenedForModify
+  */
+  virtual void objectModified(
+    const OdDbDatabase* pDb, 
+    const OdDbObject* pObject);
+    
+  
+  /** \details
+    Notification function called whenever an OdDbObject has been erased or unerased.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param pObject [in]  Pointer to the object being modified.
+    \param erased [in]  True if and only if the object is being erased.
+    
+    \remarks
+    This function is called after the operation.
+  */
+  virtual void objectErased(
+    const OdDbDatabase* pDb, 
+    const OdDbObject* pObject, 
+    bool erased = true);
+
+  /** \details
+    Notification function called whenever a database -resident system variable is about to change.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param name [in]  Name of the system variable being modified.
+    
+    \remarks
+    This function is called before the operation.
+    
+    \sa
+    headerSysVarChanged
+  */
+  virtual void headerSysVarWillChange(
+    const OdDbDatabase* pDb, 
+    const OdString& name);
+
+/*DOM-IGNORE-BEGIN*/    
+/*!DOM*/
+#define RO_VAR_DEF(type, name, d1, d2, r1, r2)
+/*!DOM*/
+#define RO_VAR_DEF_H(type, name, d1, d2, r1, r2)
+/*!DOM*/
+#define VAR_DEF(type, name, d1, d2, r1, r2)\
+  /** Description: Notification function called whenever the ##NAME system variable is about to change. \
+    Arguments: pDb (I) Pointer to the database being modified. \
+    Remarks: This function is called before the operation. \
+    Remarks: ##remarks \
+    Notes: ##notes \
+    See Also: ##see_also \
+  */\
+  SVARS_FUNC_MODIFIER void headerSysVar_##name##_WillChange(const OdDbDatabase* pDb);
+
+#include "SysVarDefs.h"
+
+#undef VAR_DEF
+#undef RO_VAR_DEF
+#undef RO_VAR_DEF_H
+
+/*!DOM*/
+#define VAR_DEF(type, name, dxf, d1, d2, r1, r2)\
+  /** Description: Notification function called whenever the DIM##NAME system variable is about to change. \
+    Arguments: pDb (I) Pointer to the database being modified. \
+    Remarks: This function is called before the operation. \
+    Remarks: ##remarks \
+    Notes: ##notes \
+    See Also: ##see_also \
+  */ \
+  virtual void headerSysVar_dim##name##_WillChange(const OdDbDatabase* pDb);
+
+#include "DimVarDefs.h"
+#undef VAR_DEF
+/*DOM-IGNORE-END*/
+
+  /** \details
+    Notification function called whenever a database -resident system variable has changed.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param name [in]  Name of the system variable being modified.
+    
+    \remarks
+    This function is called after the operation.
+    
+    \sa
+    headerSysVarWillChange
+  */
+  virtual void headerSysVarChanged(
+    const OdDbDatabase* pDb, 
+    const OdString& name);
+
+/*DOM-IGNORE-BEGIN*/
+/*!DOM*/
+#define VAR_DEF(type, name, d1, d2, r1, r2)\
+  /** Description: Notification function called whenever the ##NAME system variable has been changed. \
+    Arguments: pDb (I) Pointer to the database being modified. \
+    Remarks: This function is called after the operation. \
+    Remarks: ##remarks \
+    Notes: ##notes \
+    See Also: ##see_also \
+  */ \
+  SVARS_FUNC_MODIFIER void headerSysVar_##name##_Changed(const OdDbDatabase* pDb);
+
+#include "SysVarDefs.h"
+
+#undef VAR_DEF
+
+/*!DOM*/
+#define VAR_DEF(type, name, dxf, d1, d2, r1, r2)\
+  /** Description: Notification function called whenever the DIM##NAME system variable has been changed. \
+    Arguments: pDb (I) Pointer to the database being modified. \
+    Remarks: This function is called after the operation. \
+    Remarks: ##remarks \
+    Notes: ##notes \
+    See Also: ##see_also \
+  */ \
+  virtual void headerSysVar_dim##name##_Changed(const OdDbDatabase* pDb);
+
+#include "DimVarDefs.h"
+#undef VAR_DEF
+/*DOM-IGNORE-END*/
+
+  /** \details
+    Notification function called after the specified application is loaded and all its proxy
+    objects are resurrected.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    \param appname [in]  Name of the resurrecting application.
+    \param objectIds [in]  Object IDs of the resurrected objects.
+  */
+  virtual void proxyResurrectionCompleted(
+    const OdDbDatabase* pDb,
+    const OdString& appname, 
+    OdDbObjectIdArray& objectIds);
+
+  /** \details
+    Notification function called whenever a database is about to be deleted from memory.
+    \param pDb [in]  Pointer to the database being deleted.
+
+    \remarks
+    This function is called before the operation.
+  */
+  virtual void goodbye(
+    const OdDbDatabase* pDb);
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDatabaseReactor object pointers.
+*/
+typedef OdSmartPtr<OdDbDatabaseReactor> OdDbDatabaseReactorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBDATABASEREACTOR_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDate.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDate.h
new file mode 100755
index 0000000..066ccde
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDate.h
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBDATE_INCLUDED_
+#define _ODDBDATE_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdTimeStamp.h"
+
+class OdDbDwgFiler;
+
+/** \details
+    This class represents Date objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDate : public OdTimeStamp
+{
+public:
+  /** \param tStamp [in]  TimeStamp.
+    \param init [in]  Initial value.
+    
+    \remarks
+    The default constructor initializes the Julian date and time to zero.
+    
+    init must be one of the following:
+    
+    <table>
+    Name                 Value    Description
+    kInitZero            1        Zero.
+    kInitLocalTime       2        Workstation date in local time.
+    kInitUniversalTime   3        Workstation date in Universal (Greenwich Mean) Time..
+    </table>
+  */
+   OdDbDate();
+  OdDbDate(
+    const OdTimeStamp& tStamp);
+  OdDbDate(
+    InitialValue init);
+
+  OdDbDate operator=(
+    const OdTimeStamp& tStamp);
+
+  /** \details
+    Reads the .dwg file format data of this object from the specified file.
+       
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+  */
+  void dwgIn(
+    OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+  */
+  void dwgOut(
+    OdDbDwgFiler* pFiler) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBDATE_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDetailViewStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDetailViewStyle.h
new file mode 100755
index 0000000..5570ff6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDetailViewStyle.h
@@ -0,0 +1,395 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DETAILVIEWSTYLE_H
+#define OD_DETAILVIEWSTYLE_H
+
+#include "DbModelDocViewStyle.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents detail view style object.
+
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbDetailViewStyle : public OdDbModelDocViewStyle
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDetailViewStyle);
+
+  /** \details
+    Defines the identifier placement inside the detail view symbol. 
+  */
+	enum IdentifierPlacement {
+	  kOutsideBoundary = 0, // Identifier is placed outside of the detail view symbol boundary.
+    kOutsideBoundaryWithLeader = 1, // Identifier is placed outside of the detail view symbol boundary, and the leader between the identifier and the boundary is drawn.
+    kOnBoundary = 2, // Identifier is placed on the detail view symbol boundary.
+    kOnBoundaryWithLeader, // Identifier is placed on the detail view symbol boundary. If then the identifier is moved out of the boundary, the leader is added.
+  };
+
+  /** \details
+    Defines the edge type of the detail view symbol boundary. 
+  */
+  enum ModelEdge {
+    kSmooth = 0, // The edge of detail view symbol is to be smooth.
+    kSmoothWithBorder,
+    kSmoothWithConnectionLine,
+    kJagged,
+  };
+
+  /** \details
+    Default constructor. Creates an OdDbDetailViewStyle instance.
+  */
+  OdDbDetailViewStyle();
+  ~OdDbDetailViewStyle();
+
+  /** \details
+    Returns the object ID of the identifier's text style.
+
+    \returns
+    Text style object ID.
+  */
+  OdDbObjectId identifierStyleId() const;
+
+  /** \details
+    Sets the identifier's text style.
+
+    \param objId [in]  Object ID of the text style.
+
+	\returns
+    OdDb::eOk if successful.
+  */
+  OdResult setIdentifierStyleId(const OdDbObjectId& objId);
+
+  /** \details
+    Returns the identifier's color.
+  */
+  OdCmColor identifierColor() const;
+
+  /** \details
+    Sets the identifier's color.
+
+    \param color [in]  Color for the identifier.
+
+    \returns
+    Return OdDb::eOk if successful.
+  */
+  OdResult setIdentifierColor(const OdCmColor& color);
+
+  /** \details
+    Returns the identifier's text height.
+  */
+  double identifierHeight() const;
+
+  /** \details
+    Sets the identifier's text height.
+
+    \param height [in]   Text height.
+
+    \returns
+    Return OdDb::eOk if successful.
+  */
+  OdResult setIdentifierHeight(double height);
+
+  /** \details
+    Returns the identifier's offset between its arrow line and extension line.
+  */
+  double identifierOffset() const;
+
+  /** \details
+    Sets the identifier's offset between its arrow line and extension line.
+  */
+  OdResult setIdentifierOffset(double offset);
+
+  /** \details
+    Returns the placement for the label and identifier.
+  */
+  OdDbDetailViewStyle::IdentifierPlacement identifierPlacement() const;
+
+  /** \details
+    Sets the placement for the label and identifier.
+
+    \param placement [in]   Bit coded value that defines the placements of label and identifier.
+
+    \returns
+    OdDb::eOk if successful.
+  */
+  OdResult setIdentifierPlacement(OdDbDetailViewStyle::IdentifierPlacement placement);
+
+  /** \details
+    Returns the arrow symbol's object ID.
+  */
+  OdDbObjectId arrowSymbolId() const;
+
+  /** \details
+    Sets the arrow symbol's block.
+  */
+  OdResult setArrowSymbolId(const OdDbObjectId& arrowSymbolId);
+
+  /** \details
+    Returns the arrow symbol's color.
+  */
+  OdCmColor arrowSymbolColor() const;
+
+  /** \details
+    Sets the arrow symbol's color.
+  */
+  OdResult setArrowSymbolColor(const OdCmColor& color);
+
+  /** \details
+    Returns the arrow symbol's size.
+  */
+  double arrowSymbolSize() const;
+
+  /** \details
+    Sets the arrow symbol's size.
+  */
+  OdResult setArrowSymbolSize(double size);
+
+  /** \details
+    Returns whether arrowheads display.
+  */
+  bool showArrows() const;
+  OdResult setShowArrows(bool bValue);
+
+  /** \details
+    Returns the boundary line's lineweight.
+  */
+  OdDb::LineWeight  boundaryLineWeight() const;
+
+  /** \details
+    Sets the boundary line's lineweight.
+  */
+  OdResult setBoundaryLineWeight(OdDb::LineWeight lineweight);
+
+  /** \details
+    Returns the boundary line's color.
+  */
+  OdCmColor boundaryLineColor() const;
+
+  /** \details
+    Sets the boundary line's color.
+  */
+  OdResult setBoundaryLineColor(const OdCmColor& color);
+
+  /** \details
+    Returns the object ID of the boundary line's linetype.
+  */
+  OdDbObjectId boundaryLineTypeId() const;
+  
+  /** \details
+    Sets the boundary line's linetype.
+  */
+  OdResult setBoundaryLineTypeId(const OdDbObjectId &objId);
+
+  /** \details
+    Returns the connection line's lineweight.
+  */
+  OdDb::LineWeight connectionLineWeight() const;
+
+  /** \details
+    Sets the connection line's lineweight.
+  */
+  OdResult setConnectionLineWeight(OdDb::LineWeight lineweight);
+
+  /** \details
+    Returns the connection line's color.
+  */
+  OdCmColor connectionLineColor() const;
+
+  /** \details
+    Sets the connection line's color.
+  */
+  OdResult setConnectionLineColor(const OdCmColor& color);
+
+  /** \details
+    Returns the object ID of the connection line's linetype.
+  */
+  OdDbObjectId connectionLineTypeId() const;
+
+  /** \details
+    Sets the connection line's linetype.
+  */
+  OdResult setConnectionLineTypeId(const OdDbObjectId& objId);
+
+  /** \details
+    Returns the object ID of the view label's text style.
+  */
+  OdDbObjectId viewLabelTextStyleId() const;
+
+  /** \details
+    Sets the view label's text style.
+  */
+  OdResult setViewLabelTextStyleId(const OdDbObjectId &objId);
+
+  /** \details
+    Returns the view label's color.
+  */
+  OdCmColor viewLabelTextColor() const;
+
+  /** \details
+    Sets the view label's color.
+  */
+  OdResult setViewLabelTextColor(const OdCmColor& color);
+
+  /** \details
+    Returns the view label's text height.
+  */
+  double viewLabelTextHeight() const;
+  OdResult setViewLabelTextHeight(double height);
+
+  /** \details
+    Returns the view label's offset.
+  */
+  double viewLabelOffset() const;
+
+  /** \details
+    Sets the view label's offset.
+  */
+  OdResult setViewLabelOffset(double offset);
+
+  /** \details
+    Returns the view label's attachment.
+  */
+  OdDbModelDocViewStyle::AttachmentPoint viewLabelAttachment() const;
+
+  /** \details
+    Sets the view label's attachment.
+  */
+  OdResult setViewLabelAttachment(OdDbModelDocViewStyle::AttachmentPoint attachment);
+
+  /** \details
+    Returns the view label's text alignment.
+  */
+  OdDbModelDocViewStyle::TextAlignment viewLabelAlignment() const;
+
+  /** \details
+    Sets the view label's text alignment.
+  */
+  OdResult setViewLabelAlignment(OdDbModelDocViewStyle::TextAlignment alignment);
+
+  /** \details
+    Returns the view label's pattern.
+  */
+  OdString viewLabelPattern() const;
+
+  /** \details
+    Returns the view label's pattern.
+
+
+    pField  If the pattern uses fields,
+            they are copied 'pField'.
+
+    \returns
+    Pattern of the view label.
+  */
+  OdString getViewLabelPattern(OdDbField* pField = NULL) const;
+
+  /** \details
+    Sets the view label's pattern.
+    
+
+    pattern     Pattern to assign to the view label.
+    pField      (Optional) Specify a field to assign the pattern from the field
+                (instead of the pattern itself).
+
+    \returns
+    OdDb::eOk if successful.
+  */
+  OdResult setViewLabelPattern(const OdString& pattern,
+                                        const OdDbField* pField = NULL);
+
+  /** \details
+    Returns whether view label.
+  */
+  bool showViewLabel() const;
+  OdResult setShowViewLabel(bool bValue);
+
+  /** \details
+    Returns label and model edge.
+  */
+  OdDbDetailViewStyle::ModelEdge modelEdge() const;
+
+  /** \details
+    Sets the placement of labels and identifiers.
+  */
+  OdResult setModelEdge(OdDbDetailViewStyle::ModelEdge placement);
+
+  /** \details
+    Returns the border line's lineweight.
+  */
+  OdDb::LineWeight borderLineWeight() const;
+
+  /** \details
+    Sets the border line's lineweight.
+  */
+  OdResult setBorderLineWeight(OdDb::LineWeight lineweight);
+
+  /** \details
+    Returns the border line's color.
+  */
+  OdCmColor borderLineColor() const;
+
+  /** \details
+    Sets the border line's color.
+  */
+  OdResult setBorderLineColor(const OdCmColor& color);
+
+  /** \details
+    Returns the object ID of the border line's linetype.
+  */
+  OdDbObjectId borderLineTypeId() const;
+
+  /** \details
+    Sets the border line's linetype.
+  */
+  OdResult setBorderLineTypeId(const OdDbObjectId &objId);
+
+  // OdDbModelDocViewStyle overridden functions
+  virtual OdDbObjectId postViewStyleToDb(OdDbDatabase* pDb, const OdString& styleName);
+
+protected:
+  // OdDbObject overridden functions
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+//protected:
+//  // For internal use only
+//  virtual OdDbObjectPtr subDeepClone(OdDbObject* pOwner,
+//                                     OdDbIdMapping& idMap, bool isPrimary = true) const;
+//  virtual OdDbObjectPtr subWblockClone(OdDbObject* pOwner,
+//                                       OdDbIdMapping& idMap, bool isPrimary = true) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDetailViewStyle object pointers.
+*/
+typedef OdSmartPtr<OdDbDetailViewStyle> OdDbDetailViewStylePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DETAILVIEWSTYLE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnLSPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnLSPE.h
new file mode 100755
index 0000000..319925e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnLSPE.h
@@ -0,0 +1,166 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_DGNLS_PE_
+#define _OD_DB_DGNLS_PE_
+
+#include "DbLinetypeTableRecord.h"
+
+struct OdGiDgLinetypeModifiers;
+class OdGiSubEntityTraits;
+
+/** \details
+    This class defines the interface for the Linetype Table Record Protocol Extension classes.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDgnLSPE : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdDbDgnLSPE);
+
+    enum DgnLSSetupFlags
+    {
+      kDgnLSProcessed = 1
+    };
+
+    /** \details
+      Checks does Linetype Table Record contain attached DgnLS data.
+
+      \param pLTR [in]  Pointer to the Linetype Table Record.
+      \remarks
+      Returns true if Linetype Table Record have attached DgnLS data.
+    */
+    virtual bool hasDgnLSData(const OdDbLinetypeTableRecord *pLTR) const = 0;
+
+    /** \details
+      Setup traits by DgnLS data.
+
+      \param pLTR [in]  Pointer to the Linetype Table Record.
+      \param nResFlags [out]  setAttributes return flags.
+      \param pTraits [in]  Traits pointer which will be filled by DgnLS data.
+      \remarks
+      Returns kDgnLSProcessed if DgnLS data completely processed. Returns 0 if standard processing is required.
+    */
+    virtual OdUInt32 setupDgnLSData(const OdDbLinetypeTableRecord *pLTR, OdUInt32 &nResFlags, OdGiDrawableTraits *pTraits) const = 0;
+
+    /** \details
+      Prepare cache for DgnLS data.
+
+      \param pLTR [in]  Pointer to the Linetype Table Record.
+      \param pCache [out]  Pointer to cache object which will be filled by DgnLS data.
+      \remarks
+      Returns kDgnLSProcessed if DgnLS data completely processed. Returns 0 if standard processing is required.
+    */
+    virtual OdUInt32 prepareDgnLSCache(const OdDbLinetypeTableRecord *pLTR, OdRxObjectPtr &pCache) const = 0;
+
+    /** \details
+      Setup traits from DgnLS cache.
+
+      \param pCache [in]  Pointer to the DgnLS cache.
+      \param nResFlags [out]  setAttributes return flags.
+      \param pTraits [in]  Traits pointer which will be filled by DgnLS data.
+      \remarks
+      Returns kDgnLSProcessed if DgnLS data completely processed. Returns 0 if standard processing is required.
+    */
+    virtual OdUInt32 setupDgnLSCache(const OdRxObject *pCache, OdUInt32 &nResFlags, OdGiDrawableTraits *pTraits) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDgnLSPE object pointers.
+*/
+typedef OdSmartPtr<OdDbDgnLSPE> OdDbDgnLSPEPtr;
+
+/** \details
+    This class defines the interface for the Entity Protocol Extension classes.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDgnLSModifiersPE : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdDbDgnLSModifiersPE);
+
+    /** \details
+      Checks does Entity contain attached DgnLSModifiers data.
+
+      \param pEntity [in]  Pointer to the Entity.
+      \remarks
+      Returns true if Entity have attached DgnLSModifiers data.
+    */
+    virtual bool hasDgnLSModifiersXData(const OdDbEntity *pEntity) const = 0;
+
+    /** \details
+      Read DgnLSModifiers data from the Entity.
+
+      \param pEntity [in]  Pointer to the Entity.
+      \param pModifiers [out]  DgnLSModifiers read results.
+      \param pScale [out]  Optionally return linetype scale.
+      \remarks
+      Returns true if DgnLSModifiers data reading process successfully completed.
+    */
+    virtual bool readDgnLSModifiersXData(const OdDbEntity *pEntity, OdGiDgLinetypeModifiers &pModifiers, double *pScale = NULL) const = 0;
+
+    /** \details
+      Read and draw DgnLSModifiers data for the Entity.
+
+      \param pEntity [in]  Pointer to the Entity.
+      \param pTraits [out]  Traits where to place DgnLSModifiers read results.
+      \remarks
+      Returns true if DgnLSModifiers data reading process successfully completed.
+    */
+    virtual bool readDgnLSModifiersXData(const OdDbEntity *pEntity, OdGiSubEntityTraits *pTraits) const = 0;
+
+    /** \details
+      Write DgnLSModifiers data into the Entity.
+
+      \param pEntity [in]  Pointer to the Entity.
+      \param pModifiers [in]  DgnLSModifiers for write.
+      \param pScale [in]  Optional linetype scale.
+      \remarks
+      Returns true if DgnLSModifiers data writing process successfully completed.
+    */
+    virtual bool writeDgnLSModifiersXData(OdDbEntity *pEntity, const OdGiDgLinetypeModifiers &pModifiers, const double *pScale = NULL) const = 0;
+
+    /** \details
+      Remove DgnLSModifiers data from the Entity.
+
+      \param pEntity [in]  Pointer to the Entity.
+      \remarks
+      Returns true if DgnLSModifiers data removed from the Entity.
+    */
+    virtual bool removeDgnLSModifiersXData(OdDbEntity *pEntity) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDgnLSModifiersPE object pointers.
+*/
+typedef OdSmartPtr<OdDbDgnLSModifiersPE> OdDbDgnLSModifiersPEPtr;
+
+#endif //_OD_DB_DGNLS_PE_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnUnderlayHost.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnUnderlayHost.h
new file mode 100755
index 0000000..7f14a0c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDgnUnderlayHost.h
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_DB_DGNUNDERLAY_HOST__
+#define __OD_DB_DGNUNDERLAY_HOST__
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDgnUnderlayItem : public OdDbUnderlayItem
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbDgnUnderlayItem);
+
+  virtual bool useMasterUnits() const = 0;
+  virtual void setUseMasterUnits(bool useMaster) = 0;
+  virtual bool showRasterRef() const = 0;
+  virtual void setShowRasterRef(bool bShow) = 0;
+};
+
+typedef OdSmartPtr<OdDbDgnUnderlayItem> OdDbDgnUnderlayItemPtr;
+
+#endif // __OD_DB_DGNUNDERLAY_HOST__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiametricDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiametricDimension.h
new file mode 100755
index 0000000..ba9aa2b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiametricDimension.h
@@ -0,0 +1,154 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_DIAMETRIC_DIMENSION_
+#define _OD_DB_DIAMETRIC_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents Diametric Dimension entities in an OdDbDatabase instance.
+
+    \remarks
+    Diametric Dimension entities require two points defining the diameter of the
+    curve being dimensioned. In additional, an optional leaderLength may be 
+    used to specify how far the dimension line extends beyond the curve before
+    the dogleg to the annotation text. 
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDiametricDimension : public OdDbDimension
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbDiametricDimension);
+
+  OdDbDiametricDimension();
+  
+  /** \details
+    Sets the length from the chordPoint to the dogleg for this Dimension entity
+    (DXF 40).
+    
+    \param leaderLength [in]  Leader length.
+  */
+  void setLeaderLength(
+    double leaderLength);
+
+  /** \details
+    Returns the length from the chordPoint to the dogleg for this Dimension entity
+    (DXF 40).
+  */
+  double leaderLength() const; 
+  
+  /** \details
+    Returns the WCS chord point for this Dimension entity (DXF 15).
+    
+    \remarks
+    The chord point is the point at which the dimension line for this Dimension entity
+    intersects the curve being dimensioned, and would extend beyond it if the annotation
+    text is outside the curve.
+    
+    It is the point on the diameter opposite farChordPoint.
+  */
+  OdGePoint3d chordPoint() const;
+
+  /** \details
+    Sets the WCS chord point for this Dimension entity (DXF 15).
+    
+    \param chordPoint [in]  Chord point.
+    
+    \remarks
+    The chord point is the point at which the dimension line for this Dimension entity
+    intersects the curve being dimensioned, and would extend beyond it if the annotation
+    text is outside the curve.
+
+    It is the point on the diameter opposite farChordPoint.
+  */
+  void setChordPoint(
+    const OdGePoint3d& chordPoint);
+  
+  /** \details
+    Returns the WCS far chord point for this Dimension entity (DXF 10).
+    
+    \remarks
+    The far chord point is the point on the diameter opposite chordPoint.  
+  */
+  OdGePoint3d farChordPoint() const;
+
+  /** \details
+    Sets the WCS far chord point for this Dimension entity (DXF 10).
+
+    \param farChordPoint [in]  Far chord point.  
+
+    \remarks
+    The far chord point is the point on the diameter opposite chordPoint.  
+  */
+  void setFarChordPoint(
+    const OdGePoint3d& farChordPoint);
+
+  bool extArcOn() const;
+
+  double extArcStartAngle() const;
+  void setExtArcStartAngle(double newAngle);
+
+  double extArcEndAngle() const;
+  void setExtArcEndAngle(double newAngle);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDiametricDimension object pointers.
+*/
+typedef OdSmartPtr<OdDbDiametricDimension> OdDbDiametricDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionary.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionary.h
new file mode 100755
index 0000000..66a623e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionary.h
@@ -0,0 +1,337 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBDICTIONARY_INCLUDED_
+#define _ODDBDICTIONARY_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxIterator.h"
+#include "RxDefs.h"
+#include "DbObject.h"
+
+class OdDbDictionaryImpl;
+class OdDbObjectId;
+class OdString;
+
+/** \details
+    This class implements Iterator objects that traverse entries in OdDbDictionary objects in an OdDbDatabase instance.
+    
+    Library: TD_Db
+    
+    \remarks
+    An OdDbDictionaryIterator maintains a "current position" within the entries
+    of the associated dictionary, and can provide access to the key value and object at the
+    current position.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDictionaryIterator : public OdRxIterator
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbDictionaryIterator);
+
+  virtual ~OdDbDictionaryIterator() {}
+
+  /** \details
+      Returns the name (key) of the dictionary entry currently referenced
+      by this Iterator object.
+  */
+  virtual OdString name() const = 0;
+
+  /** \details
+      Opens the dictionary entry currently referenced by this Iterator object.    
+
+      \param mode [in]  Mode in which to open the object.
+
+      \remarks
+      Returns a SmartPointer to the opened object.
+  */
+  virtual OdDbObjectPtr getObject(
+    OdDb::OpenMode openMode = OdDb::kForRead) = 0;
+
+  /** \details
+      Returns the Object ID of the dictionary entry currently referenced by
+      this Iterator object.
+  */
+  virtual OdDbObjectId objectId() const = 0;
+
+  /** \details
+      Sets the current position of this Iterator to the dictionary entry containing the
+      specified ObjectId.
+
+      \param objectId [in]  Object ID of item to which the current position will be set.
+
+      \remarks
+      Returns true if and only if the current position was set to the specified item.
+  */
+  virtual bool setPosition(
+    OdDbObjectId objectId) = 0;
+
+  /** \details
+      Opens the dictionary entry currently referenced by this Iterator object in OdDb::kForRead mode.
+
+      \remarks
+      Returns a SmartPointer to the opened object.
+  */
+  virtual OdRxObjectPtr object() const;
+
+protected:
+  
+  OdDbDictionaryIterator() {}
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDictionaryIterator object pointers..
+*/
+typedef OdSmartPtr<OdDbDictionaryIterator> OdDbDictionaryIteratorPtr;
+
+/** \details
+    This class implements database -resident object dictionaries.
+    
+    \remarks
+    
+    * Each instance of OdDbDictionary is a single container object, in which
+       entries are searched, added, modified, and deleted.  
+    * Each OdDbDictionary entry associates a unique name (key) string with a unique OdDbObject.
+    * Anonymous names are signified by specifying a name starting with an asterisk; e.g., *U. 
+       A unique name (also starting with an asterisk) will be constructed for the entry.
+    * Entry names honor the rules of Symbol names:
+      * Names may be any length.
+      * Names are case-insensitve.
+      * Names may not contain any of the following characters: | * \ : ; < > ? " , equals.
+
+    \sa
+    OdDbDictionaryIterator
+    
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDictionary : public OdDbObject
+{
+  ODDB_DECLARE_MEMBERS(OdDbDictionary);
+
+protected:
+  OdDbDictionary();
+
+public:
+  /** \details
+    Returns the OdDbObject associated with the specified name (key) in this Dictionary object.
+
+    \param name [in]  Entry name.
+    \param mode [in]  Mode in which to open the object.
+    \param pStatus [out]  Receives eOk if successful, or an appropriate error code if not.
+
+    \remarks
+    Opens the associated OdDbObject in the specified mode.
+    
+    Returns a null SmartPointer or Object ID if the specified entry could not be opened.
+  */
+  OdDbObjectPtr getAt(
+    const OdString& name, 
+    OdDb::OpenMode mode) const;
+
+  OdDbObjectId getAt(
+    const OdString& name, 
+    OdResult* pStatus = 0) const;
+
+  /** \details
+    Returns the entry name (key) of the specified object in this Dictionary object.
+
+    \param objectId [in]  Object ID.
+    
+    \remarks
+    Returns an empty string if objectId is not in this Dictionary object.
+  */
+  OdString nameAt(
+    const OdDbObjectId& objectId) const;
+
+  /** \details
+    Returns true if and only if this Dictionary object has an entry with the specified name (key) or Object ID.
+
+    \param name [in]  Entry name.
+    \param objectId [in]  Object ID.
+  */
+  bool has(
+    const OdString& name) const;
+  bool has(
+    const OdDbObjectId& objectId) const;
+
+  /** \details
+    Returns the number of entries in this Dictionary object.
+  */
+  OdUInt32 numEntries() const;
+
+  /** \details
+    Removes the entry with the specified name (key) or Object ID from this Dictionary object, and returns
+    the Object ID of the removed entry.
+
+    \param name [in]  Entry name.
+    \param objectId [in]  Object ID.
+    
+    \note
+    Only the dictionary entry is removed; the associated object remains in the database without an owner.
+
+    The dictionary is removed as a persistent reactor on the associated object. 
+  */
+  OdDbObjectId remove(
+    const OdString& name);
+  void remove(
+    const OdDbObjectId& objectId);
+
+  /** \details
+    Changes the name (key) of the specified entry in this Dictionary object.
+
+    \param oldName [in]  Name of entry to change.
+    \param newName [in]  New name for the entry.
+
+    \remarks
+    Returns true and only if the entry name was successfully changed.
+  */
+  bool setName(
+    const OdString& oldName, 
+    const OdString& newName);
+
+  /** \details
+    Sets the value for the specified entry in this Dictionary object.
+
+    \remarks
+    Returns the Object ID of the newly added entry.
+    
+    If an entry the specified name exists in the dictionary, it is
+    erased, and a new entry created.
+
+    If an entry for this name does not exist in this dictionary, 
+    a new entry is created. 
+
+    \param name [in]  Name of entry to be changed.
+    \param newValue [in]  Database object to be added.
+  */
+  OdDbObjectId setAt(
+    const OdString& name, 
+    OdDbObject* newValue);
+
+  /** \details
+    Returns true if and only if this Dictionary object is the hard owner of its elements.
+     
+    \remarks
+    Hard ownership protects the elements from purge. Soft ownership does not. 
+  */
+  bool isTreatElementsAsHard() const;
+
+  /** \details
+    Sets the hard ownership property for this Dictionary object.
+
+    \param hard [in]  Controls ownership.
+
+    \remarks
+    Hard ownership protects the elements from purge. Soft ownership does not. 
+  */
+  void setTreatElementsAsHard(
+    bool doIt);
+
+  /** \details
+    Returns a new interator that can be used to traverse the entries in this Dictionary object.
+
+    \param iterType [in]  Type of Iterator.
+
+    \remarks
+    The Iterator type can be one of the following:
+
+    <table>
+    Name                      Description
+    OdRx::kDictCollated       Traverses the entries in the order they were added to the dictionary.
+    OdRx::kDictSorted         Traverses the entries in alphabetical order by key value.
+    </table>
+  */
+  OdDbDictionaryIteratorPtr newIterator(
+    OdRx::DictIterType iterType = OdRx::kDictCollated) const;
+
+  enum 
+  { 
+    kMaxSuggestNameSize = 2049 
+  };
+  /** \details
+    Returns a string suitable to be used as dictionary Key for this dictionary object.
+    The string is unique for this dictionary object and is as close to file name as possible.
+
+    \param strFilePath [in]  File path.
+    \param nMaxLength [in]  Maximum length of name generated.
+  */
+  OdString suggestName(const OdString& strFilePath, const int nMaxLength = kMaxSuggestNameSize) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+      Returns the merge style for this dictionary object.
+  */
+  virtual OdDb::DuplicateRecordCloning mergeStyle() const;
+
+  /** \details
+      Sets the merge style for this dictionary object.
+      
+      \param mergeStyle [in]  Merge style.
+  */
+  virtual void setMergeStyle(
+    OdDb::DuplicateRecordCloning mergeStyle);
+
+  virtual void goodbye(
+    const OdDbObject* pObject);
+
+  virtual void erased(
+    const OdDbObject* pObject, 
+    bool erasing = true);
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual void applyPartialUndo(
+    OdDbDwgFiler* pFiler,
+    OdRxClass* pClass);
+
+  virtual void subClose();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDictionary object pointers.
+*/
+typedef OdSmartPtr<OdDbDictionary> OdDbDictionaryPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryVar.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryVar.h
new file mode 100755
index 0000000..2f270ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryVar.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBDICTIONARYVAR_H
+#define OD_DBDICTIONARYVAR_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/** \details
+    This class represents Dictionary Variable objects in an OdDbDatabase instance.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDictionaryVar : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDictionaryVar);
+
+  OdDbDictionaryVar();
+
+  /** \details
+    Returns the schema number of this Dictionary Variable object (DXF 280).
+  */
+  OdInt16 getSchema() const;
+
+  /** \details
+    Sets the schema number of this Dictionary Variable object (DXF 280).
+    \param schemaNumber [in]  Schema number.
+  */
+  void setSchema(OdInt16 schemaNumber);
+
+  /** \details
+      Returns the value of this Dictionary Variable object  (DXF 1).
+  */
+  OdString value() const;
+  
+  /** \details
+      Returns the value of this Dictionary Variable object as a string, int, or bool.
+
+      \param val [out]  Receives the value of this object.
+  */
+  bool valueAs(OdString& val) const { val = value(); return true; }
+  bool valueAs(int& val) const;
+  bool valueAs(bool& val) const;
+  bool valueAs(double& val) const;
+  bool valueAs(OdGePoint2d& val) const;
+  bool valueAs(OdGePoint3d& val) const;
+
+  /** \details
+      Sets the value of this Dictionary Variable object  (DXF 1).
+      \param val [in]  Value for this object.
+  */
+  void setValue(const OdString& val);
+  void setValue(int val);
+  void setValue(bool val);
+  void setValue(double val);
+  void setValue(const OdGePoint2d& val);
+  void setValue(const OdGePoint3d& val);
+
+  virtual OdResult dxfIn(OdDbDxfFiler* pFiler);
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+};
+ 
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDictionaryVar object pointers.
+*/
+typedef OdSmartPtr<OdDbDictionaryVar> OdDbDictionaryVarPtr;
+
+#include "TD_PackPop.h"
+
+#endif  // OD_DBDICTIONARYVAR_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryWithDefault.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryWithDefault.h
new file mode 100755
index 0000000..ac73745
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDictionaryWithDefault.h
@@ -0,0 +1,78 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBDICTDFLT_H
+#define OD_DBDICTDFLT_H
+
+#include "TD_PackPush.h"
+
+#include "DbDictionary.h"
+
+/** \details
+    This class represents database -resident object dictionaries with 
+    with default entries.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDictionaryWithDefault : public OdDbDictionary
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDictionaryWithDefault);
+
+  OdDbDictionaryWithDefault();
+  
+  /** \details
+      Sets the Object ID of the default object associated with this dictionary 
+      (DXF 340).
+  */
+  void setDefaultId(
+    const OdDbObjectId& newId);
+
+  /** \details
+      Returns the Object ID of the default object associated with this dictionary 
+      (DXF 340).
+  */
+  OdDbObjectId defaultId() const;
+  
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDictionaryWithDefault.
+*/
+typedef OdSmartPtr<OdDbDictionaryWithDefault> OdDbDictionaryWithDefaultPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiesel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiesel.h
new file mode 100755
index 0000000..b00d484
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDiesel.h
@@ -0,0 +1,82 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+//
+// DbDiesel.h
+//
+
+// The original diesel engine was modified by ODA to be used inside DD
+
+#ifndef OD_DB_DIESEL_H
+#define OD_DB_DIESEL_H
+
+#include "OdaCommon.h"
+#include "DbDatabase.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group Other_Classes> 
+*/
+class ODRX_ABSTRACT OdDieselService
+{
+public:
+  virtual bool getSystemVariable(const OdString& sName, OdString& sValue) = 0;
+  virtual void getUnits(int* pAngularUnits, // (0) // AUNITS // 0 Degrees
+                                                             // 1 Degrees-Minutes-Seconds
+                                                             // 2 Gradians
+                                                             // 3 Radians
+                                                             // 4 Surveyor Units
+                        int* pAngularPrec, // (0) // AUPREC // number of decimal places of angular units
+                        int* pLinearUnits, // (2) // LUNITS // 1 Scientific
+                                                            // 2 Decimal
+                                                            // 3 Engineering
+                                                            // 4 Architectural
+                                                            // 5 Fractional
+                        int* pLinearPrec, // (4) // LUPREC // the number of decimal places of linear units
+                        int* pDimzin, // (0)(8 - metric) // DIMZIN // zero suppression in linear dimensions :
+                                                                   // 0 Suppress zero feet and exactly zero inches
+                                                                   // 1 Include zero feet and exactly zero inches
+                                                                   // 2 Include zero feet and suppress exactly zero inches
+                                                                   // 3 Suppress zero feet and include exactly zero inches
+                                                                   // 4 Suppress leading decimal zeros
+                                                                   // 8 Suppress trailing decimal zeros
+                                                                   // 12 Suppress leading and trailing decimal zeros
+                        int* pUnitMode) = 0; // (0) // UNITMODE // unit display format for Architectural Units and Surveyor's Units
+                                                                // 1 default
+                                                                // 1 in a format suitable for input
+
+  virtual bool getEnvironmentVariable(const OdString& sName, OdString& sValue) = 0;
+  virtual bool getDrawingProperty(const OdString& sName, OdString& sValue) = 0;
+};
+
+
+TOOLKIT_EXPORT int OdDieselEvaluate(const OdChar* in, OdChar* out, OdDieselService* pDieselService);
+TOOLKIT_EXPORT int OdDieselEvaluate(const OdChar* in, OdChar* out, OdDbDatabase* db);
+
+#include "TD_PackPop.h"
+
+#endif // OD_DB_DIESEL_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimAssoc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimAssoc.h
new file mode 100755
index 0000000..0f48674
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimAssoc.h
@@ -0,0 +1,544 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBDIMASSOC_H
+#define OD_DBDIMASSOC_H
+
+#include "TD_PackPush.h"
+
+#include "DbSubentId.h"
+#include "DbHandle.h"
+#include "DbObject.h"
+
+class OdDbDwgFiler;
+class OdDbDxfFiler;
+class OdGePoint3d;
+class OdDbIdMapping;
+
+
+/** \details
+    This class uniquely defines Xref subentities within an OdDbDatabase instance.  
+
+    \remarks
+    Each OdDbXrefFullSubentPath object consists of a OdDbSubentId object,
+    an ordered array of Object IDs, and an ordered array of entity handles. 
+    The SubentId consists the index and subentType
+    of the object. The array of Object IDs, and the array of handles, define the path to the 
+    subentity from the outermost entity (in PaperSpace or ModelSpace) 
+    to the entity containing the subentity.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXrefFullSubentPath : public OdDbFullSubentPath
+{
+public:
+  /** \details
+    Returns a reference to the embedded OdHandleArray object in this XrefFullSubentPath object.
+    
+    \param objectIds [out]  Receives the array reference.
+  */
+  OdHandleArray& xrefObjHandles();
+  const OdHandleArray& xrefObjHandles()const;
+
+  /** \details
+    Reads the .dwg file format data of this object from the specified file.
+       
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+  */
+  void dwgIn(OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+    
+  */
+  void dwgOut(OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Writes the DXF format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+    \param groupCodeOffset [in]  Group code offset.
+  */
+  void dxfOut(OdDbDxfFiler* pFiler, OdInt groupCodeOffset = 0) const;
+private:
+  OdHandleArray m_XrefObjHandles;
+};
+
+class OdDbOsnapPointRef;
+class OdDbViewport;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbOsnapPointRef object pointers.
+*/
+typedef OdSmartPtr<OdDbOsnapPointRef> OdDbOsnapPointRefPtr;
+//typedef OdArray<OdDbFullSubentPath> OdDbFullSubentPathArray;
+
+/** \details
+    This class defines a point reference between a dimension and
+	its corresponding object.
+
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPointRef : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPointRef);
+
+  virtual OdResult evalPoint(OdGePoint3d& pnt_wcs) = 0; 
+  virtual OdResult getEntities(OdDbFullSubentPathArray& ents, bool getLastPtRef = true) const = 0;
+  virtual bool isGeomErased() const = 0;
+  virtual bool isXrefObj(OdDbObjectIdArray& ids1, OdDbObjectIdArray& ids2, bool isMainObj = true) const = 0;
+  virtual OdResult updateXrefSubentPath() = 0;
+  virtual OdResult updateSubentPath(OdDbIdMapping& idMap) = 0;
+
+  virtual void dwgOutFields(OdDbDwgFiler* filer) const = 0;
+  virtual void dwgInFields(OdDbDwgFiler* filer) = 0;
+  virtual void dxfOutFields(OdDbDxfFiler* filer) const = 0;
+  virtual OdResult dxfInFields(OdDbDxfFiler* filer) = 0;
+
+  virtual void updateDueToMirror(bool inMirror = false) = 0;
+
+/** \details
+  Calculates transformation combined from OdDbViewport's MS2PS and BlockReference transformations
+*/
+  static bool calcTransform(const OdDbObjectIdArray& ids, OdGeMatrix3d& A_Ecs2Wcs);
+
+  /** \details
+  Returns matrix to convert MS coordinates to PS for given OdDbViewport entity
+  */
+  static OdGeMatrix3d mswcsToPswcs(const OdDbViewport* pVPort);
+/*
+  static OdResult  dwgInFields(OdDbDwgFiler* filer, OdDbDatabase* pDb, OdDbPointRef*& pPointRef);
+  static OdResult  dwgOutFields(OdDbDwgFiler* filer, OdDbDatabase* pDb, const OdDbPointRef* pPointRef);
+  static OdResult  dxfInFields(OdDbDxfFiler* filer, OdDbDatabase* pDb, OdDbPointRef*& pPointRef);
+  static OdResult  dxfOutFields(OdDbDxfFiler* filer, OdDbDatabase* pDb, const OdDbPointRef* pPointRef);
+  static OdDbEntityPtr subentPtr(const OdDbFullSubentPath& objPath, bool& isCloned, bool& reverseArc, bool& isStandAloneArc);
+  static OdGeMatrix3d wcsToDcsMatrix(const OdDbViewport* pVPort);
+*/
+};
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbOsnapPointRef : public OdDbPointRef
+{
+public:
+  OdDbOsnapPointRef();
+
+  ODRX_DECLARE_MEMBERS(OdDbOsnapPointRef);
+
+  /** \details
+    Returns the object snap mode for this OsnapPointRef object.
+    \remarks
+    osnapMode() returns one of the following:
+    
+    <table>
+    Name                      Value   Description 
+    OdDb::kOsModeEnd          1       End Point
+    OdDb::kOsModeMid          2       Mid Point
+    OdDb::kOsModeCen          3       Center
+    OdDb::kOsModeNode         4       Node
+    OdDb::kOsModeQuad         5       Quadrant
+    OdDb::kOsModeIntersec     6       Intersection
+    OdDb::kOsModeIns          7       Insertion point
+    OdDb::kOsModePerp         8       Perpendicular
+    OdDb::kOsModeTan          9       Tangent
+    OdDb::kOsModeNear         10      Nearest
+    OdDb::kOsModeApint        11      Apparent intersection
+    OdDb::kOsModePar          12      Parallel
+    OdDb::kOsModeStart        13      Start Point 
+    </table>
+ 
+  */
+  OdDb::OsnapMode osnapType() const;
+  /** \details
+    Sets the object snap mode for this OsnapPointRef object.
+ 
+    \remarks
+    osnapMode must be one of the following:
+    
+    <table>
+    Name                      Value   Description 
+    OdDb::kOsModeEnd          1       End Point
+    OdDb::kOsModeMid          2       Mid Point
+    OdDb::kOsModeCen          3       Center
+    OdDb::kOsModeNode         4       Node
+    OdDb::kOsModeQuad         5       Quadrant
+    OdDb::kOsModeIntersec     6       Intersection
+    OdDb::kOsModeIns          7       Insertion point
+    OdDb::kOsModePerp         8       Perpendicular
+    OdDb::kOsModeTan          9       Tangent
+    OdDb::kOsModeNear         10      Nearest
+    OdDb::kOsModeApint        11      Apparent intersection
+    OdDb::kOsModePar          12      Parallel
+    OdDb::kOsModeStart        13      Start Point
+    </table>
+  */
+  void setOsnapType(OdDb::OsnapMode osnapMode);
+
+  /** \details
+    Returns a reference to the OdDbXrefFullSubentPath of the main entity for the OsnapPointRef object. 
+  */
+  OdDbXrefFullSubentPath& mainEntity();
+  /** \details
+    Returns a reference to the OdDbXrefFullSubentPath of the intersecting entity for the OsnapPointRef object. 
+  */
+  OdDbXrefFullSubentPath& intersectEntity();
+
+  void getIdPath(OdDbFullSubentPath& idPath) const;
+  void setIdPath(const OdDbFullSubentPath& idPath);
+
+  void getIntIdPath(OdDbFullSubentPath& intIdPath) const;
+  void setIntIdPath(const OdDbFullSubentPath& intIdPath);
+
+  /** \details
+    Returns the near Osnap value for this OsnapPointRef object.
+  */
+  double nearPointParam() const;
+
+  /** \details
+    Returns the near Osnap value for this OsnapPointRef object.
+    \param nearOsnap [in]  Near Osnap value.
+  */
+  void setNearPointParam(double nearOsnap);
+
+  /** \details
+    Returns a reference to the Osnap point for this OsnapPointRef object.
+  */
+  OdGePoint3d point() const;
+  void setPoint(const OdGePoint3d& pt);
+
+  /** \details
+    Returns the last OsnapPointRef for this OsnapPointRef object.
+  */
+  const OdDbOsnapPointRef* lastPointRef() const;
+  OdDbOsnapPointRef* lastPointRef();
+
+  /** \details
+    Sets the last OsnapPointRef for this OsnapPointRef object.
+    \param pOsnapPointRef [in]  Pointer to the last OsnapPointRef object.
+  */
+  void setLastPointRef(OdDbOsnapPointRefPtr pOsnapPointRef);
+
+  virtual bool isGeomErased() const;
+  virtual bool isXrefObj(OdDbObjectIdArray& ids1, OdDbObjectIdArray& ids2, bool isMainObj = true) const;
+  virtual OdResult updateXrefSubentPath();
+  virtual OdResult updateSubentPath(OdDbIdMapping& idMap);
+  virtual OdResult evalPoint(OdGePoint3d &pt);
+  virtual OdResult getEntities(OdDbFullSubentPathArray& ents, bool getLastPtRef = true) const;
+  virtual void updateDueToMirror(bool inMirror = false);
+
+  void getXrefHandles(OdHandleArray& xrefHandles) const;
+  void setXrefHandles(const OdHandleArray& xrefHandles);
+  void getXrefIntHandles(OdHandleArray& xrefHandles) const;
+  void setXrefIntHandles(const OdHandleArray& xrefHandles);
+
+  /** \details
+    Reads the .dwg file format data of this object from the specified file.
+       
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+  */
+  void dwgInFields(OdDbDwgFiler* pFiler);
+  /** \details
+    Writes the .dwg file format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+  */
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  /** \details
+    Writes the DXF format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+  */
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler* filer);
+private:
+  OdDb::OsnapMode        m_OsnapMode;
+  OdDbXrefFullSubentPath m_MainEntity;
+  OdDbXrefFullSubentPath m_IntersectEntity;
+  double                 m_dNearOsnap;
+  OdGePoint3d            m_OsnapPoint;
+  OdDbOsnapPointRefPtr   m_pLastPointRef;
+  bool                   m_bUpdateDueToMirror;
+};
+
+/** \details
+    This class represents Associative Dimension objects in an OdDbDatabase instance.
+
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDimAssoc : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDimAssoc);
+
+  OdDbDimAssoc();
+
+  enum { kMaxPointRefs = 4 };
+  
+  enum PointType 
+  {
+    kXline1Point          = 0,
+    kXline2Point          = 1,
+    kOriginPoint          = 0,
+    kDefiningPoint        = 1,
+    kXline1Start          = 0,
+    kXline1End            = 1,
+    kXline2Start          = 2,
+    kXline2End            = 3,
+    kVertexPoint          = 2,
+    kChordPoint           = 0,
+    kCenterPoint          = 1,
+    kFarChordPoint        = 1,
+    kOverrideCenterPoint  = 2,
+    kAngLineStart         = 2,
+    kJogPoint             = 3,
+    kAngLineEnd           = 3,
+    kLeaderPoint          = 0
+  };
+
+  enum RotatedDimType
+  {
+    kUnknown       = 0,
+    kParallel      = 1,
+    kPerpendicular = 2
+  };
+
+  enum AssocFlags 
+  {
+    kFirstPointRef     = (1<<0),
+    kSecondPointRef    = (1<<1),
+    kThirdPointRef     = (1<<2),
+    kFourthPointRef    = (1<<3)
+  };
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+  /** \details
+    Returns the Object ID of the Dimension entity associated with this Associative Dimension object (DXF 330).
+  */
+  OdDbObjectId dimObjId() const;
+
+  /** \details
+    Sets the Object ID of the Dimension entity associated with this Associative Dimension object (DXF 330).
+    \param dimId [in]  Dimension Object ID.
+  */
+  void setDimObjId(const OdDbObjectId& dimId);
+
+  /** \details
+    Returns the associativity flag of this Associative Dimension object (DXF 90).
+  */
+  OdInt32 assocFlag() const;
+
+  /** \details
+    Returns the associativity flag of the specified Osnap Point Reference for this Associative Dimension object.
+  */
+  bool assocFlag(int pointIndex) const;
+
+  void setAssocFlag(int assocFlag);
+  // Sets the index of point reference being used and establishes or clears the association flag. 
+  void setAssocFlag(int pointIndex, bool flagValue);
+
+  /** \details
+    Returns the specified Osnap Point Reference for this Associative Dimension object.
+    
+    \param pointIndex [in]  Point index. The value should be 0, 1, 2, 3 or from the PointType enum 
+    
+    \remarks
+    pointIndex must be one of the following:
+   
+  */
+  OdDbOsnapPointRefPtr pointRef(int pointIndex) const;
+
+  /** \details
+    Sets the specified Osnap Point Reference for this Associative Dimension object.
+    
+    \param pointIndex [in]  Point index. The value should be 0, 1, 2, 3 or from the PointType enum 
+    \param pOsnapPointRef [in]  SmartPointer to the Osnap Point Reference.
+  */
+  void setPointRef(int pointIndex, OdDbOsnapPointRefPtr pOsnapPointRef);
+
+  /** \details
+  Returns the rotated dimension type of this Associative Dimension object (DXF 71).
+
+  \remarks
+  rotatedDimType() returns one of the following:
+
+  <table>
+  Name              Value
+  kParallel         1
+  kPerpendicular    2
+  </table>
+  */
+  RotatedDimType rotatedDimType() const;
+
+  /** \details
+  Sets the rotated dimension type of this Associative Dimension object (DXF 71).
+
+  \remarks
+  rotatedDimType must be one of the following:
+
+  <table>
+  Name              Value
+  kParallel         1
+  kPerpendicular    2
+  </table>
+  */
+  void setRotatedDimType(RotatedDimType dimType);
+
+  void addToPointRefReactor();
+  void addToDimensionReactor(bool isAdd = true);
+
+  OdResult removePointRef(int ptType);
+  OdResult updateDimension(bool update = true, bool skipReactors = false);
+  void removeAssociativity(bool force = true);
+  
+  /** \details
+  Returns the trans-space flag of this Associative Dimension object (DXF 70).
+  */
+  bool isTransSpatial() const;
+  /** \details
+  Sets the trans-space flag of this Associative Dimension object (DXF 70).
+  \param transSpace [out]  Trans-space flag.
+  */
+  void setTransSpatial(bool value);
+  
+
+  OdResult post(OdDbObjectId dimId, OdDbObjectId& dimAssocId, bool isActive = true);
+  OdResult getDimAssocGeomIds(OdDbObjectIdArray& geomIds) const;
+  bool isAllGeomErased() const;
+  
+  virtual void modifiedGraphics(const OdDbObject* pObj) ODRX_OVERRIDE;
+  virtual void copied(const OdDbObject* pObj, const OdDbObject* pNewObj) ODRX_OVERRIDE;
+  virtual void erased(const OdDbObject *pObj, bool erasing = true) ODRX_OVERRIDE;
+  virtual void openedForModify(const OdDbObject* pObject) ODRX_OVERRIDE;
+
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& idMap, OdDbObject* pOwner, bool bPrimary) const ODRX_OVERRIDE;
+  virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& idMap, OdDbObject* pOwner, bool bPrimary) const ODRX_OVERRIDE;
+
+protected:
+  OdResult setPointRefReactor(int ptType, bool isAdd = true);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDimAssoc object pointers.
+*/
+typedef OdSmartPtr<OdDbDimAssoc> OdDbDimAssocPtr;
+
+//
+// Inlines
+//
+
+inline
+OdHandleArray& OdDbXrefFullSubentPath::xrefObjHandles()
+{ 
+  return m_XrefObjHandles; 
+}
+
+inline
+const OdHandleArray& OdDbXrefFullSubentPath::xrefObjHandles() const
+{ 
+  return m_XrefObjHandles; 
+}
+
+inline
+OdDb::OsnapMode OdDbOsnapPointRef::osnapType() const
+{
+  return m_OsnapMode;
+}
+
+inline
+void OdDbOsnapPointRef::setOsnapType(OdDb::OsnapMode osnapMode)
+{
+  m_OsnapMode = osnapMode;
+}
+
+inline
+OdDbXrefFullSubentPath& OdDbOsnapPointRef::mainEntity()
+{
+  return m_MainEntity;
+}
+
+inline
+OdDbXrefFullSubentPath& OdDbOsnapPointRef::intersectEntity()
+{
+  return m_IntersectEntity;
+}
+
+inline
+double OdDbOsnapPointRef::nearPointParam() const
+{
+  return m_dNearOsnap;
+}
+
+inline
+void OdDbOsnapPointRef::setNearPointParam(double nearOsnap)
+{
+  m_dNearOsnap = nearOsnap;
+}
+
+inline
+OdGePoint3d OdDbOsnapPointRef::point() const
+{
+  return m_OsnapPoint;
+}
+inline
+void OdDbOsnapPointRef::setPoint(const OdGePoint3d& pt)
+{
+  m_OsnapPoint = pt;
+}
+
+inline
+const OdDbOsnapPointRef* OdDbOsnapPointRef::lastPointRef() const
+{
+  return m_pLastPointRef;
+}
+inline
+OdDbOsnapPointRef* OdDbOsnapPointRef::lastPointRef()
+{
+  return m_pLastPointRef;
+}
+
+inline
+void OdDbOsnapPointRef::setLastPointRef(OdDbOsnapPointRefPtr pOsnapPointRef)
+{
+  m_pLastPointRef = pOsnapPointRef;
+}
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBDIMASSOC_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimData.h
new file mode 100755
index 0000000..bf298b2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimData.h
@@ -0,0 +1,429 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDBDIMDATA_H
+#define ODDBDIMDATA_H
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+class OdDbDimData;
+
+typedef OdArray<OdDbDimData> OdDbDimDataArray;
+typedef OdArray<OdDbDimData*, OdMemoryAllocator<OdDbDimData*> > OdDbDimDataPtrArray;
+typedef OdGeVector3d (*DimDataSetValueFuncPtr) (OdDbDimData* pThis,
+                                                OdDbEntity* pEnt, 
+                                                double newValue,
+                                                const OdGeVector3d& offset);
+
+typedef OdGeVector3d (*DimDataSetCustomStringFuncPtr) (OdDbDimData* pThis,
+                                                       OdDbEntity* pEnt, 
+                                                       const OdString& sCustomString,
+                                                       const OdGeVector3d& offset);
+/** \details
+    This class passes parameters for the getGripPoints and moveGripPoints functions of OdDbEntity.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class OdDbDimData
+{
+public:
+  enum DimDataFlags
+  {
+    kDimEditable           = 0x0001,
+    kDimInvisible          = 0x0002,
+    kDimFocal              = 0x0004,
+    kDimHideIfValueIsZero  = 0x0008,
+    kDimEmptyData          = 0x0010,
+    kDimResultantLength    = 0x0020,
+    kDimDeltaLength        = 0x0040,
+    kDimResultantAngle     = 0x0080,
+    kDimDeltaAngle         = 0x0100,
+    kDimRadius             = 0x0200,
+    kDimCustomValue        = 0x0400,
+    kDimConstrained        = 0x0800,
+    kDimCustomString       = 0x1000
+  };
+
+  OdDbDimData();
+
+  OdDbDimData(OdDbDimension* pDim, 
+    DimDataSetValueFuncPtr setDimFunc = 0,
+    unsigned int bitFlags = 0,
+    void* appData = 0,
+    DimDataSetCustomStringFuncPtr setCustomStringFunc = 0);
+
+  ~OdDbDimData();
+
+  OdDbDimData(const OdDbDimData&);
+  OdDbDimData&  operator = (const OdDbDimData&);
+  OdDbDimensionPtr dimension() const;
+  void setDimension(OdDbDimension* pDim);
+  OdDbObjectId ownerId() const;
+  void setOwnerId(const OdDbObjectId& objId);
+  unsigned int bitFlags() const;
+  void setBitFlags(unsigned int flags);
+  bool isDimFocal() const;
+  void setDimFocal(bool focal);
+  bool isDimEditable() const;
+  void setDimEditable(bool editable);
+  bool isDimInvisible() const;
+  void setDimInvisible(bool invisible);
+  bool isDimHideIfValueIsZero() const;
+  void setDimHideIfValueIsZero(bool hide);
+  void *appData() const;
+  void setAppData(void* appData);
+  DimDataSetValueFuncPtr dimValueFunc() const;
+  void setDimValueFunc(DimDataSetValueFuncPtr funcPtr);
+  DimDataSetCustomStringFuncPtr customStringFunc() const;
+  void setCustomStringFunc(DimDataSetCustomStringFuncPtr funcPtr);
+  bool isDimResultantLength() const;
+  void setDimResultantLength(bool bValue);
+  bool isDimDeltaLength() const;
+  void setDimDeltaLength(bool bValue);
+  bool isDimResultantAngle() const;
+  void setDimResultantAngle(bool bValue);
+  bool isDimDeltaAngle() const;
+  void setDimDeltaAngle(bool bValue);
+  bool isDimRadius() const;
+  void setDimRadius(bool bValue);
+  bool isCustomDimValue() const;
+  void setCustomDimValue(bool custom);
+  bool isConstrained() const;
+  void setConstrain(bool bValue);
+  bool isCustomString() const;
+  void setCustomString(bool bValue);
+
+private:
+  OdDbDimensionPtr              m_pDim;
+  OdDbObjectId                  m_ownerId;
+  unsigned int                  m_bitFlags;
+  void*                         m_pAppData;
+  DimDataSetValueFuncPtr        m_pSetDimValueFunc;
+  DimDataSetCustomStringFuncPtr m_pSetCustomStringFunc;
+};
+
+inline OdDbDimData::OdDbDimData()
+  : m_bitFlags(0)
+  , m_pAppData (0)
+  , m_pSetDimValueFunc(0)
+  , m_pSetCustomStringFunc(0)
+{
+}
+
+inline
+OdDbDimData::OdDbDimData(OdDbDimension* pDim, 
+                         DimDataSetValueFuncPtr setValueFunc,
+                         unsigned int bitFlags,
+                         void* appData,
+                         DimDataSetCustomStringFuncPtr setCustomStringFunc)
+  : m_pDim(pDim)
+  , m_bitFlags(bitFlags)
+  , m_pAppData(appData)
+  , m_pSetDimValueFunc(setValueFunc)
+  , m_pSetCustomStringFunc(setCustomStringFunc)
+{
+}
+
+inline OdDbDimData::~OdDbDimData()
+{
+}
+
+inline OdDbDimensionPtr
+OdDbDimData::dimension() const
+{
+  return m_pDim;
+}
+
+inline void
+OdDbDimData::setDimension(OdDbDimension* pDim)
+{
+  m_pDim = pDim;
+}
+
+inline OdDbObjectId
+OdDbDimData::ownerId() const
+{
+  return m_ownerId;
+}
+
+inline void
+OdDbDimData::setOwnerId(const OdDbObjectId& objId)
+{
+  m_ownerId = objId;
+}
+
+inline unsigned int 
+OdDbDimData::bitFlags() const
+{
+  return m_bitFlags;
+}
+
+inline void
+OdDbDimData::setBitFlags(unsigned int flags)
+{
+  m_bitFlags = flags;
+}
+
+inline bool
+OdDbDimData::isDimFocal() const
+{
+  return 0 != (m_bitFlags & kDimFocal);
+}
+
+inline void
+OdDbDimData::setDimFocal(bool focal)
+{
+  if (focal)
+    m_bitFlags |= kDimFocal;
+  else
+    m_bitFlags &= ~kDimFocal;
+}
+
+inline bool
+OdDbDimData::isDimEditable() const
+{
+  return 0 != (m_bitFlags & kDimEditable);
+}
+
+inline void
+OdDbDimData::setDimEditable(bool editable)
+{
+  if (editable)
+    m_bitFlags |= kDimEditable;
+  else
+    m_bitFlags &= ~kDimEditable;
+}
+
+inline bool
+OdDbDimData::isDimInvisible() const
+{
+  return 0 != (m_bitFlags & kDimInvisible);
+}
+
+inline void
+OdDbDimData::setDimInvisible(bool invisible)
+{
+  if (invisible)
+    m_bitFlags |= kDimInvisible;
+  else
+    m_bitFlags &= ~kDimInvisible;
+}
+
+inline bool
+OdDbDimData::isDimHideIfValueIsZero() const
+{
+  return 0 != (m_bitFlags & kDimHideIfValueIsZero);
+}
+
+inline void
+OdDbDimData::setDimHideIfValueIsZero(bool hide)
+{
+  if (hide)
+    m_bitFlags |= kDimHideIfValueIsZero;
+  else
+    m_bitFlags &= ~kDimHideIfValueIsZero;
+}
+
+inline bool
+OdDbDimData::isDimResultantLength() const
+{
+  return 0 != (m_bitFlags & kDimResultantLength);
+}
+
+inline void
+OdDbDimData::setDimResultantLength(bool bValue)
+{
+  if (bValue)
+    m_bitFlags |= kDimResultantLength;
+  else
+    m_bitFlags &= ~kDimResultantLength;
+}
+
+inline bool
+OdDbDimData::isDimDeltaLength() const
+{
+  return 0 != (m_bitFlags & kDimDeltaLength);
+}
+
+inline void
+OdDbDimData::setDimDeltaLength(bool bValue)
+{
+  if (bValue)
+    m_bitFlags |= kDimDeltaLength;
+  else
+    m_bitFlags &= ~kDimDeltaLength;
+}
+
+inline bool
+OdDbDimData::isDimResultantAngle() const
+{
+  return 0 != (m_bitFlags & kDimResultantAngle);
+}
+
+inline void
+OdDbDimData::setDimResultantAngle(bool bValue)
+{
+  if (bValue)
+    m_bitFlags |= kDimResultantAngle;
+  else
+    m_bitFlags &= ~kDimResultantAngle;
+}
+
+inline bool
+OdDbDimData::isDimDeltaAngle() const
+{
+  return 0 != (m_bitFlags & kDimDeltaAngle);
+}
+
+inline void
+OdDbDimData::setDimDeltaAngle(bool bValue)
+{
+  if (bValue)
+    m_bitFlags |= kDimDeltaAngle;
+  else
+    m_bitFlags &= ~kDimDeltaAngle;
+}
+
+inline bool
+OdDbDimData::isDimRadius() const
+{
+    return 0 != (m_bitFlags & kDimRadius);
+}
+
+inline void
+OdDbDimData::setDimRadius(bool bValue)
+{
+  if (bValue)
+    m_bitFlags |= kDimRadius;
+  else
+    m_bitFlags &= ~kDimRadius;
+}
+
+inline bool
+OdDbDimData::isCustomDimValue() const
+{
+  return 0 != (m_bitFlags & kDimCustomValue);
+}
+
+inline void
+OdDbDimData::setCustomDimValue(bool custom)
+{
+  if (custom)
+    m_bitFlags |= kDimCustomValue;
+  else
+    m_bitFlags &= ~kDimCustomValue;
+}
+
+inline bool
+OdDbDimData::isConstrained() const
+{
+  return 0 != (m_bitFlags & kDimConstrained);
+}
+
+inline void
+OdDbDimData::setConstrain(bool bValue)
+{
+  if (bValue)
+    m_bitFlags |= kDimConstrained;
+  else
+    m_bitFlags &= ~kDimConstrained;
+}
+
+inline bool
+OdDbDimData::isCustomString() const
+{
+  return 0 != (m_bitFlags & kDimCustomString);
+}
+
+inline void
+OdDbDimData::setCustomString(bool bValue)
+{
+  if (bValue)
+    m_bitFlags |= kDimCustomString;
+  else
+    m_bitFlags &= ~kDimCustomString;
+}
+
+inline void*
+OdDbDimData::appData() const
+{
+  return m_pAppData;
+}
+
+inline void
+OdDbDimData::setAppData(void* appData)
+{
+  m_pAppData = appData;
+}
+
+inline DimDataSetValueFuncPtr
+OdDbDimData::dimValueFunc() const
+{
+  return m_pSetDimValueFunc;
+}
+
+inline void
+OdDbDimData::setDimValueFunc(DimDataSetValueFuncPtr funcPtr)
+{
+  m_pSetDimValueFunc = funcPtr;
+}
+
+inline DimDataSetCustomStringFuncPtr
+OdDbDimData::customStringFunc() const
+{
+  return m_pSetCustomStringFunc;
+}
+
+inline void
+OdDbDimData::setCustomStringFunc(DimDataSetCustomStringFuncPtr funcPtr)
+{
+  m_pSetCustomStringFunc = funcPtr;
+}
+
+inline OdDbDimData& OdDbDimData::operator = (const OdDbDimData& src)
+{
+  if (this == &src)
+    return *this;
+  
+  m_pDim = src.dimension()->clone();
+  m_ownerId = src.ownerId();
+  m_pSetDimValueFunc = src.dimValueFunc();
+  m_pSetCustomStringFunc = src.customStringFunc();
+  m_bitFlags = src.bitFlags();
+  m_pAppData = src.appData();
+  return *this;
+}
+
+inline OdDbDimData::OdDbDimData(const OdDbDimData& src)
+{
+  *this = src;
+}
+
+#include "TD_PackPop.h"
+
+#endif // ODDBDIMDATA_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTable.h
new file mode 100755
index 0000000..d1124be
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTable.h
@@ -0,0 +1,82 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBDIMSTYLETABLE_INCLUDED
+#define _ODDBDIMSTYLETABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTable.h"
+
+class OdDbDimStyleTableRecord;
+
+/** \details
+    This class implements the DimensionStyleTable, which represents dimension styles in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDimStyleTable: public OdDbSymbolTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDimStyleTable);
+
+  /** \note
+    Teigha applications typically will not use this constructor, insofar as 
+    the OdDbDatabase class creates its own instance.
+  */
+  OdDbDimStyleTable();
+
+  OdDbObjectId add(
+    OdDbSymbolTableRecord* pRecord);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDimStyleTable object pointers.
+*/
+typedef OdSmartPtr<OdDbDimStyleTable> OdDbDimStyleTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBDIMSTYLETABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTableRecord.h
new file mode 100755
index 0000000..ab0e7d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimStyleTableRecord.h
@@ -0,0 +1,543 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBDIMSTYLETABLERECORD_INCLUDED
+#define _ODDBDIMSTYLETABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+
+/** \details
+    This namespace contains utility functions for Dimension Style processing.
+
+    <group TD_Namespaces>
+*/
+namespace OdDmUtil
+{
+  /** \details
+    Returns the R14 DIMFIT value corresponding to the specified DIMATFIT and DIMTMOVE values.
+
+    \param dimatfit [in]  DIMATFIT value.
+    \param dimtmove [in]  DIMTMOVE value.
+    
+    \remarks
+    The complete mapping is as follows:
+    
+    <table>
+    DIMTMOVE    DIMAFIT   DIMFIT
+    0           0         0
+    0           1         1
+    0           2         2
+    0           3         3
+    1           0         4
+    1           1         4
+    1           2         4
+    1           3         4
+    2           0         5
+    2           1         5
+    2           2         5
+    2           3         5
+    </table>
+    
+    All other input combinations return 3.
+  */
+  int TOOLKIT_EXPORT dimfit(
+    int dimatfit, 
+    int dimtmove);
+  
+  /** \details
+    Returns the R14 DIMUNIT value corresponding to the specified DIMLUNIT and DIMFRAC values.
+
+    \param dimlunit [in]  DIMLUNIT value.
+    \param dimfrac [in]  DIMFRAC value.    
+
+    \remarks
+    The complete mapping is as follows:
+    
+    <table>
+    DIMFRAC   DIMLUNIT  DIMUNIT
+    0         1         1 
+    0         2         2
+    0         3         3
+    0         4         4
+    0         5         5
+    0         6         8
+    1         1         1 
+    1         2         2
+    1         3         3
+    1         4         4
+    1         5         5
+    1         6         8
+    2         1         1 
+    2         2         2
+    2         3         3
+    2         4         6
+    2         5         7
+    2         6         8
+    </table>
+    
+    All other input combinations return 2.
+  */
+  int TOOLKIT_EXPORT dimunit(
+    int dimlunit, 
+    int dimfrac);
+  
+  /** \details
+    Returns the R15 DIMATFIT value corresponding to the specified R14 DIMFIT value.
+
+    \param dimfit [in]  DIMFIT value.
+    
+    \remarks
+    The complete mapping is as follows:
+    
+    <table>
+    dimfit  dimatfit
+    0       0
+    1       1
+    2       2
+    3       3
+    4       3
+    5       3
+    other   3
+    </table>
+    
+  */
+  int TOOLKIT_EXPORT dimatfit(
+    int dimfit);
+  
+  /** \details
+    Returns the R15 DIMTMOVE value corresponding to the specified R14 DIMFIT value.
+    
+    \param dimfit [in]  DIMFIT value.
+    
+    \remarks
+    The complete mapping is as follows:
+    
+    <table>
+    dimfit  dimtmove
+    0       0
+    1       0
+    2       0
+    3       0
+    4       1
+    5       2
+    other   0
+    </table>
+  */
+  int TOOLKIT_EXPORT dimtmove(
+    int dimfit);
+  
+  /** \details
+    Returns the R15 DIMLUNIT value corresponding to the specified R14 DUMUNIT value.
+    
+    \param dimunit [in]  DIMUNIT value.
+    
+    \remarks
+    The complete mapping is as follows:
+    
+    <table>
+    dimunit    dimlunit
+    1          1
+    2          2
+    3          3
+    4          4
+    5          5
+    6          4
+    7          5
+    8          6
+    other      2
+    </table>
+  */
+  int TOOLKIT_EXPORT dimlunit(
+    int dimunit);
+  
+  /** \details
+    Returns the R15 DIMFRAC value corresponding to the specified R14 DUMUNIT value.
+    
+    \param dimunit [in]  DIMUNIT value.
+    
+    \remarks
+    The complete mapping is as follows:
+    
+    <table>
+    dimunit    dimfrac
+    1          0
+    2          0
+    3          0
+    4          0
+    5          0
+    6          2
+    7          2
+    8          0
+    other      0
+    </table>
+  */
+  int TOOLKIT_EXPORT dimfrac(
+    int dimunit);
+    
+  /** \details
+    Returns the local name of the specified dimension arrowhead.
+    \param blockId [in]  Object ID of the dimension arrowhead.
+  */
+  OdString TOOLKIT_EXPORT arrowName(
+    OdDbObjectId blockId);
+  
+  /** \details
+    Returns true if and only if the specified arrowhead name is that of a built-in arrowhead.
+
+    \param arrowheadName [in]  Arrowhead name.
+
+    \remarks
+    The built-in arrowheads are as follows:
+    
+    <table>
+    BLOCK NAME    UI STRING
+    ArchTick      "Architectural tick"
+    BoxBlank      "Box"
+    BoxFilled     "Box filled"
+    Closed        "Closed"
+    ClosedBlank   "Closed blank"
+    DatumBlank    "Datum triangle"
+    DatumFilled   "Datum triangle filled"
+    Dot           "Dot"
+    DotBlank      "Dot blank"
+    DotSmall      "Dot small"
+    Integral      "Integral"
+    None          "None"
+    Oblique       "Oblique"
+    Open          "Open"
+    Open30        "Open 30"
+    Open90        "Right angle"
+    Origin        "Origin indicator"
+    Origin2       "Origin indicator 2"
+    Small         "Dot small blank"
+    </table>
+  */
+  bool TOOLKIT_EXPORT isBuiltInArrow(
+    const OdString& arrowheadName);
+  
+  /** \details
+    Returns true if and only if the specified arrowhead name is that of a built-in arrowhead 
+    that is treated as having zero length.  
+      
+    \param arrowheadName [in]  Arrowhead name.
+
+    \remarks
+    The built-in zero-length arrowheads are as follows:
+
+    <table>
+    BLOCK NAME
+    ArchTick
+    DotSmall
+    Integral
+    None
+    Oblique
+    Small
+    </table>
+  */
+  bool TOOLKIT_EXPORT isZeroLengthArrow(
+    const OdString& arrowheadName);
+  
+  /** \details
+    Returns the Object ID of the arrowhead block with the specified arrowhead name.
+
+    \param arrowheadName [in]  Arrowhead name.
+    \param pDb [in]  Database containing the arrowhead.
+  */
+  OdDbObjectId TOOLKIT_EXPORT findArrowId(
+    const OdString& arrowheadName, 
+    const OdDbDatabase* pDb);
+  
+  /** \details
+    Returns the Object ID of the arrowhead block with the specified arrowhead name, creating
+    this block if necessary.
+
+    \param arrowheadName [in]  Arrowhead name.
+    \param pDb [in]  Database containing the arrowhead.
+  */
+  OdDbObjectId TOOLKIT_EXPORT getArrowId(
+    const OdString& arrowheadName, 
+    OdDbDatabase* pDb);
+
+  /*
+       OdString globalArrowName(const OdChar* pName);  
+       OdString globalArrowName(OdDbObjectId blockId);
+       OdString arrowName(const OdChar* pName);
+  */
+
+}
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum DimArrowFlags
+  {
+    kFirstArrow  = 0, // First arrowhead
+    kSecondArrow = 1  // Second arrowhead
+  };
+}
+
+/** \details
+    This class represents Dimension Style records in the OdDbDimStyleTable in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDimStyleTableRecord: public OdDbSymbolTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDimStyleTableRecord);
+  
+  OdDbDimStyleTableRecord();
+
+/*DOM-IGNORE-BEGIN*/  
+#define VAR_DEF(type, name, dxf, def_value, metric_def_value, reserve1, reserve2)\
+  /** Description: Returns the DIM##NAME value of this Dimension Style. \
+    Remarks: ##remarks \
+    Notes: ##notes \
+  */ \
+  type dim##name() const; \
+  \
+  /** Description: Sets the DIM##NAME value for this Dimension Style.  \
+    Arguments: val (I) New value for DIM##NAME.  ##RANGE \
+    Remarks: ##remarks \
+    Notes: ##notes \
+    See Also: ##see_also \
+  */ \
+  void setDim##name(type val);
+
+#include "DimVarDefs.h"
+#undef VAR_DEF
+/*DOM-IGNORE-END*/
+  
+  void setDimblk(
+    const OdString& val);
+
+  void setDimblk1(
+    const OdString& val);
+  void setDimblk2(
+  const OdString& val);
+  void setDimldrblk(
+    const OdString& val);
+
+  // 2005-2006 support
+  
+  /** \details
+    Returns the background text color and flags for this Dimension Style.
+    \param bgrndTxtColor [out]  Receives the background text color.
+  */
+  OdUInt16 getBgrndTxtColor(OdCmColor& bgrndTxtColor) const;
+  
+  /** \details
+    Sets the background text color and flags for this Dimension Style.
+    \param bgrndTxtColor [in]  Background text color.
+    \param bgrndTxtFlags [in]  Background text flags.
+  */
+  void setBgrndTxtColor(const OdCmColor& bgrndTxtColor, OdUInt16 bgrndTxtFlags);
+
+  /** \details
+    Returns the extension line fixed length enable flag for this Dimension Style.
+  */
+  bool getExtLineFixLenEnable() const;
+
+  /** \details
+    Controls the extension line fixed length enable flag for this Dimension Style.
+    \param extLineFixLenEnable [in]  Extension line fixed length flag.
+  */
+  void setExtLineFixLenEnable(bool extLineFixLenEnable);
+
+  /** \details
+    Returns the extension line fixed length for this Dimension Style.
+  */
+  double getExtLineFixLen() const;
+
+  /** \details
+    Sets the extension line fixed length for this Dimension Style.
+    \param extLineFixLen [in]  Extension line fixed length.
+  */
+  void setExtLineFixLen(double extLineFixLen);
+
+  /** \details
+    Returns the arc symbol type for this Dimension Style.
+    \remarks
+    getArcSymbolType() returns one of the following:
+    
+    <table>
+    Value   Description
+    0       Arc symbol precedes text.
+    1       Arc symbol is above text.
+    2       No arc symbol.
+    </table>
+  */
+  OdUInt16 getArcSymbolType() const;
+  /** \details
+    Sets the arc symbol type for this Dimension Style.
+    \param arcSymbolType [in]  Arc symbol type.
+
+    \remarks
+    getArcSymbolType() must be one of the following:
+    
+    <table>
+    Value   Description
+    0       Arc symbol precedes text.
+    1       Arc symbol is above text.
+    2       No arc symbol.
+    </table>
+  */
+  void setArcSymbolType(OdUInt16 arcSymbolType);
+
+  /** \details
+    Returns the jog angle for this Dimension Style.
+    \note
+    All angles are expressed in radians. 
+  */
+  double getJogAngle() const;
+  /** \details
+    Sets the jog angle for this Dimension Style.
+    \param jogAngle [in]  Jog angle. 
+    \note
+    All angles are expressed in radians. 
+  */
+  void setJogAngle(double jogAngle);
+
+  /** \details
+    Returns the Object ID of the dimension line linetype for this Dimension Style.
+  */
+  OdDbObjectId getDimLinetype() const;
+
+  /** \details
+    Sets the Object ID of the dimension line linetype for this Dimension Style.
+
+    \param linetypeId [in]  Dimension line linetype Object ID.
+  */
+  void setDimLinetype(const OdDbObjectId& linetypeId);
+
+  /** \details
+    Returns the Object ID of the first extension line linetype for this Dimension Style.
+  */
+  OdDbObjectId getDimExt1Linetype() const;
+
+  /** \details
+    Sets the Object ID of the first extension line linetype for this Dimension Style.
+    
+    \param linetypeId [in]  First extension line linetype Object ID.
+  */
+  void setDimExt1Linetype(const OdDbObjectId& linetypeId);
+
+  /** \details
+    Returns the Object ID of the second extension line linetype for this Dimension Style.
+  */
+  OdDbObjectId getDimExt2Linetype() const;
+  /** \details
+    Sets the Object ID of the second extension line linetype for this Dimension entity.
+    
+    \param linetypeId [in]  Second extension line linetype Object ID.
+  */
+  void setDimExt2Linetype(const OdDbObjectId& linetypeId);
+
+  double jogSymbolHeight();
+
+  void setJogSymbolHeight(double value);
+  void setDIMTALN(bool value);
+  bool getDIMTALN() const;
+
+  void setDIMBREAK(double value);
+  double getDIMBREAK() const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /** \details
+    Returns the Object ID of the arrowhead block for the specified arrowhead type.
+
+    \param arrowType [in]  Arrow type.
+    
+    \remarks
+    arrowType must be one of the following:
+    
+    <table>
+    Name           Value    Description    
+    kFirstArrow    0        First arrowhead
+    kSecondArrow   1        Second arrowhead
+    </table>
+  */
+  OdDbObjectId arrowId(
+    OdDb::DimArrowFlags arrowType) const;
+
+  /** \details
+    Returns true if and only if this Dimension Style has been modified for recompute.
+  */
+  bool isModifiedForRecompute() const;
+
+  /*
+  OdString dimpost() const;
+  OdString dimapost() const;
+  OdString dimblk() const;
+  OdString dimblk1() const;
+  OdString dimblk2() const;
+  
+  int dimfit() const;
+  int dimunit() const;
+    
+  void setDimfit(int fit);
+  void setDimunit(int unit);
+  */
+  OdResult subErase( bool erasing );
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDimStyleTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbDimStyleTableRecord> OdDbDimStyleTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBDIMSTYLETABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimension.h
new file mode 100755
index 0000000..b098906
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDimension.h
@@ -0,0 +1,784 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBDIM_H
+#define OD_DBDIM_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "DbMText.h"
+#include "Ge/GeScale3d.h"
+
+class OdDbDimStyleTableRecord;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDimStyleTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbDimStyleTableRecord> OdDbDimStyleTableRecordPtr;
+
+/** \details
+    This class is the base class for all Dimension classes in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDimension : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDimension);
+
+  OdDbDimension();
+
+  /** \details
+    Returns the position of the dimension text for this Dimension entity (DXF 11 as WCS).
+
+    \remarks
+    This position is the middle center point of the dimension text, which is itself a 
+    middle-center justified MText entity.  
+  */
+  OdGePoint3d textPosition() const;
+  
+  /** \details
+    Sets the position of the dimension text for this Dimension entity (DXF 11 as WCS).
+
+    \param textPosition [in]  Text position.  
+    
+    \remarks
+    This position is the middle center point of the dimension text, which is itself a 
+    middle-center justified MText entity.  
+  */
+  void setTextPosition(
+    const OdGePoint3d& textPosition);
+
+  /** \details
+    Returns true if and only if the dimension text for this Dimension entity
+    is in the default position (DXF 70, bit 0x80 == 0).
+  */
+  bool isUsingDefaultTextPosition() const;
+
+  /** \details
+    Sets the dimension text for this Dimension entity to not use the default position (DXF 70, sets bit 0x80).
+  */
+  void useSetTextPosition();
+
+  /** \details
+    Sets the dimension text for this Dimension entity to use the default position (DXF 70, clears bit 0x80).
+  */
+  void useDefaultTextPosition();
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    \param normal [in]  Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+
+  virtual bool isPlanar() const { return true; }
+
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+  /** \details
+    Returns the elevation of this entity in the OCS (DXF 30).
+    
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  double elevation() const;
+
+  /** \details
+    Sets the elevation of this entity in the OCS (DXF 30).
+
+    \param elevation [in]  Elevation.    
+
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  void setElevation(
+    double elevation);
+
+  /** \details
+    Returns the user-supplied dimension text for this Dimension Entity (DXF 1).
+
+    \remarks
+    * If no text is to appear, "." will be returned.
+    * If only the default text is to appear, "" will be returned.
+    * The default text is represented as "<>" within the returned text.
+  */
+  const OdString dimensionText() const;
+
+  /** \details
+    Sets the user-supplied dimension text for this Dimension Entity (DXF 1).
+    
+    \param dimensionText [in]  Dimension text.
+
+    \remarks
+    * If no text is to appear, supply ".".
+    * If only the default text is to appear, supply an empty string "".
+    * The default text is represented as "<>" within the supplied text.
+     
+  */
+  void setDimensionText(
+    const OdString& dimensionText);
+    
+  /** \details
+    Returns the rotation angle for the dimension text for this Dimension entity (DXF 53).
+
+    \note
+    All angles are expressed in radians.
+  */
+  double textRotation() const;
+
+  /** \details
+    Sets the rotation angle for the dimension text for this Dimension entity (DXF 53).
+    
+    \param textRotation [in]  Text rotation.
+    \note
+    All angles are expressed in radians.
+  */
+  void setTextRotation(
+    double textRotation);
+
+  /** \details
+    Returns the Object ID of the dimension style (OdDbDimStyleTableRecord) for this Dimension entity (DXF 3).
+  */
+  OdDbObjectId dimensionStyle() const;
+
+  /** \details
+    Sets the Object ID of the dimension style (OdDbDimStyleTableRecord) for this Dimension entity (DXF 3).
+    \param objectID [in]  Object ID.
+  */
+  void setDimensionStyle(
+    OdDbObjectId objectID);
+
+  /** \details
+    Returns the dimension text attachment point for this Dimension entity (DXF 71).
+  */
+  OdDbMText::AttachmentPoint textAttachment() const;
+
+  /** \details
+    Sets the dimension text attachment point for this Dimension entity (DXF 71).
+    \param attachmentPoint [in]  Attachment Point.
+  */
+  void setTextAttachment(
+    OdDbMText::AttachmentPoint attachmentPoint);
+
+  /** \details
+    Returns the dimension text line spacing style for this Dimension entity (DXF 72).
+  */
+  OdDb::LineSpacingStyle textLineSpacingStyle() const;
+
+  /** \details
+    Sets the dimension text line spacing style for this Dimension entity (DXF 72).
+    \param lineSpacingStyle [in]  Line spacing style.
+  */
+  void setTextLineSpacingStyle(
+    OdDb::LineSpacingStyle lineSpacingStyle);
+
+  /** \details
+    Returns the dimension text line spacing factor for this Dimension entity (DXF 41).
+    
+    \sa
+    OdDb::LineSpacingStyle
+  */
+  double textLineSpacingFactor() const;
+
+  /** \details
+    Sets the dimension text line spacing factor for this Dimension entity (DXF 41).
+    
+    \param lineSpacingFactor [in]  Line spacing factor. [0.25 .. 4.0]
+    
+    \sa
+    OdDb::LineSpacingStyle
+  */
+  void setTextLineSpacingFactor(
+    double lineSpacingFactor);
+
+  /** \details
+    Copies the dimension style settings, including overrides, of this Dimension entity into the specified
+    dimension style table record.
+    
+    \param pRecord [out]  Receives the effective dimension style data associated with entity.
+    
+    \remarks
+    The copied data includes the dimension style data with all applicable overrides. 
+  */
+  void getDimstyleData(
+    OdDbDimStyleTableRecord *pRecord) const;
+
+  /** \details
+    Copies the dimension style settings, including overrides, from the specified
+    dimension style table record to this Dimension entity.
+    
+    \param pDimstyle [in]  Pointer to a non- database -resident dimension style record.
+    \param dimstyleID [in]  Database-resident dimension style record.
+
+    \remarks
+    The copied data includes the dimension style with all applicable overrides. 
+  */
+  void setDimstyleData(
+    const OdDbDimStyleTableRecord* pDimstyle);
+  void setDimstyleData(
+    OdDbObjectId dimstyleID);
+
+  /** \details
+    Returns the horizontal rotation angle for this Dimension entity (DXF 51).
+    \note
+    All angles are expressed in radians.
+  */
+  double horizontalRotation() const;
+
+  /** \details
+    Sets the horizontal rotation angle for this Dimension entity (DXF 51).
+    \param horizontalRotation [in]  Horizontal rotation angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void setHorizontalRotation(
+    double horizontalRotation);
+
+
+  /** \details
+    Returns the Object ID of the dimension block (OdDbBlockTableRecord) associated with this Dimension entity (DXF 2).
+  */
+  OdDbObjectId dimBlockId() const;
+
+  /** \details
+    Sets the Object ID of the dimension block (OdDbBlockTableRecord) associated with this Dimension entity.
+   
+    \param dimBlockId [in]  Object ID of the OdDbBlockTableRecord.
+    \param singleReferenced [in]  True if and only if the dimension block is referenced only by this Dimension entity (DXF 70 bit 0x20).
+  */
+  void setDimBlockId(
+    const OdDbObjectId& dimBlockId, 
+    bool singleReferenced = true);
+
+  /** \details
+    Returns true and only if this Dimension entity has the only reference to its 
+    associated OdDbBlockTableRecord (DXF 70 bit 0x20).
+  */
+  bool isSingleDimBlockReference() const;
+
+  /** \details
+    Returns the WCS relative position of the block associated with this Dimension entity (DXF 12).
+      
+    \remarks
+    dimBlockPosition is the insertion point of the block with respect to the primary
+    definition point (DXF 10) of the dimension block.      
+  */
+  OdGePoint3d dimBlockPosition() const;
+
+  /*!DOM*/
+  /** \details
+    Sets the relative position of the dimension block referenced by this Dimension entity,
+    in WCS (DXF 12). 
+    
+    \param dimBlockPosition [in] Dimension block position.
+    
+    \note
+    For Teigha internal use only. Dimension update sets it to 0,0,0
+  */
+  void setDimBlockPosition(
+    const OdGePoint3d& dimBlockPosition);
+
+
+  /** \details
+    Returns the rotation angle of the dimension block referenced by this Dimension entity (DXF 54).
+    \note
+    All angles are expressed in radians.    
+  */
+  double dimBlockRotation() const;
+
+  /*!DOM*/
+  /** \details
+    Sets the rotation of the dimension block referenced by this Dimension entity (DXF 54). 
+    
+    \note
+    For Teigha internal use only. Dimension update sets it to 0.
+    
+    \param dimBlockRotation [in] Dimension block rotation in radians.
+  */
+  void setDimBlockRotation(
+    double dimBlockRotation);
+
+  /** \details
+    Returns the scale of the dimension block referenced by this Dimension entity.
+    
+    \note
+    This is not saved to a DXF file.
+  */
+  OdGeScale3d dimBlockScale() const;
+
+  /*!DOM*/
+  /** \details
+    Sets the scale of the dimension block referenced by this Dimension entity.
+    
+    \note
+    For Teigha internal use only. Dimension update sets it to 1,1,1
+    
+    \param dimBlockScale [in] Dimension block scale.
+  */
+  void setDimBlockScale(
+    const OdGeScale3d& dimBlockScale);
+
+  /** \details
+    Returns the transformation matrix applied to dimension block referenced by this Dimension entity.
+    
+    \remarks
+    The transformation consists of position, scale, rotation angle and normal.
+    It does not include block's base point.
+  */
+  OdGeMatrix3d dimBlockTransform() const;
+  
+  /** \details
+    Recomputes the dimension block referenced by this Dimension entity.
+    
+    \remarks
+    The OdDbBlockTableRecord of the dimension block is updated to reflect any changes made to this Dimension
+    entity since the last time the block table record was updated.
+
+    \param forceUpdate [in]  If true, the OdDbBlockTableRecord is updated even if the dimension has not been changed.
+  */
+  void recomputeDimBlock(
+    bool forceUpdate = true);
+
+  /** \details
+    Returns the measurement (DXF 42) stored in this Dimension entity.
+      
+    \remarks
+    Returns -1.0 if the stored measurement value is invalid. 
+
+    Does not recompute the measurement.
+
+    This Dimension entity need not be opened for write to call this function.
+    
+    \sa
+    measurement()
+  */
+  double getMeasurement() const;
+
+  /** \details
+    Returns the measurement (DXF 42) for this Dimension entity.
+    
+    \remarks
+    Recomputes the measurement if the stored measurement value is invalid (-1.0).
+    
+    This Dimension entity must be opened for write to call this function.
+
+    \sa
+    getMeasurement()
+  */
+  double measurement();
+
+
+  // 2005-2006 support
+  
+  /** \details
+    Returns the background text color and flags for this Dimension entity.
+    \param bgrndTxtColor [out]  Receives the background text color.
+  */
+  OdUInt16 getBgrndTxtColor(OdCmColor& bgrndTxtColor) const;
+  
+  /** \details
+    Sets the background text color and flags for this Dimension entity.
+    \param bgrndTxtColor [in]  Background text color.
+    \param bgrndTxtFlags [in]  Background text flags.
+  */
+  void setBgrndTxtColor(const OdCmColor& bgrndTxtColor, OdUInt16 bgrndTxtFlags );
+
+  /** \details
+    Returns the extension line fixed length enable flag for this Dimension entity.
+  */
+  bool getExtLineFixLenEnable() const;
+
+  /** \details
+    Controls the extension line fixed length enable flag for this Dimension entity.
+    \param extLineFixLenEnable [in]  Extension line fixed length flag.
+  */
+  void setExtLineFixLenEnable(bool extLineFixLenEnable);
+
+  /** \details
+    Returns the extension line fixed length for this Dimension entity.
+  */
+  double getExtLineFixLen() const;
+
+  /** \details
+    Sets the extension line fixed length for this Dimension entity.
+    \param extLineFixLen [in]  Extension line fixed length.
+  */
+  void setExtLineFixLen(double extLineFixLen);
+
+  /** \details
+    Returns the Object ID of the dimension line linetype for this Dimension entity.
+  */
+  OdDbObjectId getDimLinetype() const;
+
+  /** \details
+    Sets the Object ID of the dimension line linetype for this Dimension entity.
+
+    \param linetypeId [in]  Dimension line linetype Object ID.
+  */
+  void setDimLinetype(const OdDbObjectId& linetypeId);
+
+  /** \details
+    Returns the Object ID of the first extension line linetype for this Dimension entity.
+  */
+  OdDbObjectId getDimExt1Linetype() const;
+
+  /** \details
+    Sets the Object ID of the first extension line linetype for this Dimension entity.
+    
+    \param linetypeId [in]  First extension line linetype Object ID.
+  */
+  void setDimExt1Linetype(const OdDbObjectId& linetypeId);
+
+  /** \details
+    Returns the Object ID of the second extension line linetype for this Dimension entity.
+  */
+  OdDbObjectId getDimExt2Linetype() const;
+
+  /** \details
+    Sets the Object ID of the second extension line linetype for this Dimension entity.
+    
+    \param linetypeId [in]  Second extension line linetype Object ID.
+  */
+  void setDimExt2Linetype(const OdDbObjectId& linetypeId);
+
+  /** \details
+    Returns the flip flag of the first arrowhead for this Dimension entity.
+  */
+  bool getArrowFirstIsFlipped() const;
+
+  /** \details
+    Returns the flip flag of the second arrowhead for this Dimension entity.
+  */
+  bool getArrowSecondIsFlipped() const;
+  
+  /** \details
+    Sets the flip flag of the first arrowhead for this Dimension entity.
+
+    \param bIsFlipped [in]  Flip flag value.
+  */
+  void setArrowFirstIsFlipped(bool bIsFlipped);
+
+  /** \details
+    Sets the flip flag of the second arrowhead for this Dimension entity.
+
+    \param bIsFlipped [in]  Flip flag value.
+  */
+  void setArrowSecondIsFlipped(bool bIsFlipped);
+
+  enum DimInspect 
+  {
+    kShapeRemove  = 0x00,     // No inspection label displays.
+    kShapeRound   = 0x01,     // Inspection label displays with a rounded end (this is the default).
+    kShapeAngular = 0x02,     // Inspection label displays with an angular end.
+    kShapeNone    = 0x04,     // Inspection label displays without a bounding shape.
+    kShapeLabel   = 0x10,     // Inspection label displays with a prefix, including a separator and alpha field.
+    kShapeRate    = 0x20      // Inspection label displays at a specified frequency.
+  };
+
+  bool inspection() const;
+  void setInspection(bool val);
+
+  int inspectionFrame() const;
+  void setInspectionFrame(int frame);
+
+  OdString inspectionLabel() const;
+  void setInspectionLabel(const OdString& label);
+
+  OdString inspectionRate() const;
+  void setInspectionRate(const OdString& label);
+
+/**DOM-IGNORE-BEGIN*/
+#define VAR_DEF(type, name, dxf, def_value, metric_def_value, reserve1, reserve2)\
+  /** Description: Returns the DIM##NAME value of this Dimension entity.  \
+    Remarks: ##remarks \
+    \
+    Remarks: \
+    The value from the dimension style of this Dimension entity will be returned unless \
+    that value has been overridden, in which case, the override value will be returned. \
+    \
+    Notes: ##notes \
+    See Also: ##see_also \
+  */ \
+  virtual type dim##name() const; \
+\
+  /** Description: Sets the DIM##NAME override for this Dimension entity. \
+    Arguments: val (I) New value for DIM##NAME.  ##RANGE \
+    Remarks: ##remarks \
+    Notes: ##notes \
+    See Also: ##see_also \
+  */ \
+virtual void setDim##name(type val);
+/**DOM-IGNORE-END*/
+
+#include "DimVarDefs.h"
+#undef  VAR_DEF
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  OdResult subGetClassID(void* pClsid) const;
+
+  OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  /* Replace OdRxObjectPtrArray */
+  
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE; 
+
+  void subClose();
+
+  virtual void modified (
+    const OdDbObject* pObject);
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+  
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm, 
+    OdDbEntityPtr& pCopy) const ODRX_OVERRIDE;
+
+  /** \note
+     This function is an override for OdDbEntity::subSetDatabaseDefaults() to set 
+     the dimension style of this entity to the current style for the specified database.
+  */
+  void subSetDatabaseDefaults(
+    OdDbDatabase *pDb,
+    bool doSubents);
+
+  virtual void appendToOwner(
+    OdDbIdPair& idPair, 
+    OdDbObject* pOwnerObject, 
+    OdDbIdMapping& ownerIdMap) ODRX_OVERRIDE;
+
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  /** \details
+    Returns the formatted measurement value.
+    
+    \param formattedMeasurement [out]  Receives the formatted measurement.
+    \param measurementValue [in]  Measurement value to be formatted.
+    \param dimensionText [in]  Dimension text for formatting
+    
+    \remarks
+    measurementValue is formatted per the specified dimension text and the 
+    effective dimension style.
+  */
+  void formatMeasurement(
+    OdString& formattedMeasurement, 
+    double measurementValue, 
+    const OdString& dimensionText);
+
+  OdResult explodeGeometry(OdRxObjectPtrArray& entitySet) const;
+
+  OdDbObjectPtr dimBlock(OdDb::OpenMode openMode = OdDb::kForRead);
+
+  /*
+      void generateLayout();
+      void getOsnapPoints(OdDb::OsnapMode osnapMode, const OdDbFullSubentPath& subentId,
+                          const OdGePoint3d& pickPoint, const OdGePoint3d& lastPoint,
+                          const OdGeMatrix3d& viewXform, OdGePoint3dArray& snapPoints,
+                          OdDbIntArray& geomIds ) const;
+  */
+
+  virtual OdResult subGetCompoundObjectTransform(OdGeMatrix3d & xM) const ODRX_OVERRIDE;
+
+  // Dynamic dimensions support
+  // (The methods are NOT related to constraint support)
+  
+  bool isDynamicDimension() const;
+  void setDynamicDimension(
+    bool bDynamic);
+
+  // Dimensional constraint support
+
+  bool isConstraintObject() const;
+  OdResult isConstraintObject(
+    bool& isConstraintObject,
+    bool& hasExpression,
+    bool& isReferenceConstraint) const;
+
+  bool  isConstraintDynamic() const;
+  OdResult setConstraintDynamic(
+    bool bDynamic);
+
+  bool  shouldParticipateInOPM() const;
+  void  setShouldParticipateInOPM(
+    bool bShouldParticipate);
+  
+  void setDIMTALN(bool val);
+  bool getDIMTALN() const;
+
+  void removeTextField();
+  void fieldToMText(OdDbMTextPtr& pDimMText);
+  void fieldFromMText(OdDbMTextPtr& pDimMText);
+
+  OdGeMatrix3d getEcs( ) const;
+  
+  /** \details
+  Resets defined width and defined height for MText
+
+  */
+  void resetTextDefinedSize();
+
+  /** \details
+    Sets defined width and defined height for MText
+
+    \param width [in]  MText width
+    \param height [in]  MText height
+  */
+  void setTextDefinedSize(
+    double width,
+    double height);
+
+  /** \details
+    Gets defined width and defined height for MText
+
+    \param width [out]  MText width
+    \param height [out]  MText height
+  */
+  void textDefinedSize(
+    double& width,
+    double& height) const;
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDimension object pointers.
+*/
+typedef OdSmartPtr<OdDbDimension> OdDbDimensionPtr;
+
+class OdDbDimensionObjectContextData;
+
+  /** \details
+    This class is the Dimension Recompute Protocol Extension class.
+   
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+  */
+class TOOLKIT_EXPORT OdDbDimensionRecomputePE : public OdRxObject
+{
+public:
+  /** \details
+    Sets the measurement value for the specified Dimension entity.
+    
+    \param pDimension [in]  Pointer to the dimension entity.
+    \param measurementValue [in]  Measurement value.
+  */
+  static void setMeasurementValue(OdDbDimension* pDimension, double measurementValue);
+  /** \details
+    Resets the dimension block insertion parameters for the specified Dimension entity.
+    
+    \param pDimension [in]  Pointer to the dimension entity.
+
+    \remarks
+    * The insertion point is set to (0,0).
+    * The X-, Y- and Z-scale factors are set 1.0.
+    * The rotation angle is set to 0.0. 
+  */
+  static void resetDimBlockInsertParams(OdDbDimension* pDimension);
+
+  ODRX_DECLARE_MEMBERS(OdDbDimensionRecomputePE);
+
+  /** \details
+    Recomputes the dimension measurement for the specified Dimension entity.
+    
+    \param pDimension [in]  Pointer to the dimension entity.
+  */
+  virtual void recomputeDimMeasurement(OdDbDimension* pDimension) = 0;
+
+  /** \details
+    Recomputes the dimension block referenced by the specified Dimension entity.
+    
+    \remarks
+    The OdDbBlockTableRecord of the dimension block is updated to reflect any changes made to this Dimension
+    entity since the last time the block table record was updated.
+
+    \param pDimension [in]  Pointer to the dimension entity.
+  */
+  virtual void recomputeDimBlock(OdDbDimension* pDimension, OdDbDimensionObjectContextData* ctx) = 0;
+
+
+  /** \details
+    Returns the formatted measurement value.
+    
+    \param pDimension [in]  Pointer to the dimension entity.
+    \param formattedMeasurement [out]  Receives the formatted measurement.
+    \param measurementValue [in]  Measurement value to be formatted.
+    \param dimensionText [in]  Dimension text for formatting
+    
+    \remarks
+    measurementValue is formatted per the specified dimension text and the 
+    effective dimension style.
+  */
+  virtual void formatMeasurement(OdDbDimension* pDimension, OdString& formattedMeasurement, 
+     double measurementValue, const OdString& dimensionText ) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDimensionRecomputePE object pointers.
+*/
+typedef OdSmartPtr<OdDbDimensionRecomputePE> OdDbDimensionRecomputePEPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDynBlockReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDynBlockReference.h
new file mode 100755
index 0000000..bed5998
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbDynBlockReference.h
@@ -0,0 +1,279 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbDynBlock_h_Included_
+#define _DbDynBlock_h_Included_
+
+
+#include "DbEvalGraph.h"
+#include "TD_PackPush.h"
+
+// Forward class declarations
+
+class OdDbBlockReference;
+class OdDbDynBlockReference;
+class OdDbDynBlockReferenceProperty;
+class OdDbDynBlockReferencePropertyImpl;
+class OdDbDynBlockReferenceImpl;
+struct OdDbBlkParamPropertyDescriptor;
+class OdDbBlockParameter;
+class OdDbDynBlockTableRecordImpl;
+typedef OdSmartPtr<OdDbBlockParameter> OdDbBlockParameterPtr;
+
+/** \details
+    This class is a utility class referencing properties of dynamic blocks.
+    
+    \remarks
+    
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+*/
+class DYNBLOCKS_EXPORT OdDbDynBlockReferenceProperty : public OdRxObject
+{
+public:
+
+  enum UnitsType {
+    kNoUnits  = 0,  // No units defined.
+    kAngular  = 1,  // Angle.
+    kDistance = 2,  // Distance.
+    kArea     = 3   // 2D area.
+  };
+
+  OdDbDynBlockReferenceProperty ();
+  virtual ~OdDbDynBlockReferenceProperty ();
+
+  /** 
+    \param other [in]  Constant reference to the dynamic block reference property.
+  */
+  OdDbDynBlockReferenceProperty (const OdDbDynBlockReferenceProperty& other);
+
+  OdDbDynBlockReferenceProperty& operator=(
+    const OdDbDynBlockReferenceProperty& other);
+
+  /** \details
+    Returns the Object ID of the dynamic block reference that owns this property.
+  */
+  OdDbObjectId blockId() const;
+
+  /** \details
+    Returns the name of this property.
+    \remarks
+    All property names in a given block reference are guaranteed unique.
+  */
+  OdString propertyName()  const;
+
+  /** \details
+    Returns the type of the property value.
+  */
+  OdResBuf::ValueType propertyType() const;
+
+  /** \details
+    Returns true if and only if this property is Read-Only.
+  */
+  bool readOnly() const;
+
+  
+  /** \details
+    Returns true if and only if this property is displayed on the Property Palette.
+  */
+  bool show() const;
+
+  /** \details
+    Returns true if and only if this property is visible in the current visibility state.
+  */
+  bool visibleInCurrentVisibilityState() const;
+
+  /** \details
+    Returns the description of this property.
+  */
+  OdString description () const;
+
+  /** \details
+    Returns the units of this property.
+    
+    \remarks
+    This function may be used to format property values.
+    
+    unitsType() returns one of the following:
+    
+    <table>
+    Name        Value   Description
+    kNoUnits    0       No units defined.
+    kAngular    1       Angle.
+    kDistance   2       Distance.
+    kArea       3       2D area.
+    </table>
+  */
+  UnitsType             unitsType () const;
+
+
+  /** \details
+    Returns an array of allowed values for this property.
+    \param allowedValues [out]  Receives an an array of allowed values.
+  */
+  void getAllowedValues(OdResBufArray& allowedValues);
+
+  /** \details
+    Returns the current value of the property on the dynamic block reference.
+  */
+  OdResBufPtr value () const;
+
+  /** \details
+    Sets the current value of the property on the dynamic block reference.
+    \param value [in]  Value.
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool setValue (const OdResBufPtr& value);
+
+  /** \details
+    Returns a parameter smart pointer.
+  */
+  OdDbBlockParameterPtr getParameter();
+  
+  /** \details
+    Returns a parameter descriptor.
+    
+    \param parameterId [out]  Parameter ID.
+    \param pDescriptor [out]  Parameter descriptor.     
+  */
+  void getDescriptor(OdDbEvalNodeId& parameterId, OdDbBlkParamPropertyDescriptor& pDescriptor);
+
+private:
+  friend class OdDbDynBlockReferencePropertyImpl;
+  OdDbDynBlockReferencePropertyImpl* m_pImpl;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDynBlockReferenceProperty object pointers.
+*/
+typedef OdSmartPtr<OdDbDynBlockReferenceProperty> OdDbDynBlockReferencePropertyPtr;
+/** \details
+    This template class is a specialization of the OdArray class for OdDbDynBlockReferencePropertyPtr objects.
+*/
+typedef OdArray<OdDbDynBlockReferencePropertyPtr> OdDbDynBlockReferencePropertyArray;
+
+/** \details
+    This class is a utility class providing access to information on dynamic block references. 
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+*/
+class DYNBLOCKS_EXPORT OdDbDynBlockReference
+{
+  ODRX_HEAP_OPERATORS();
+public:
+  
+  /** 
+    \param blockRefId [in]  Object ID of the dynamic block reference.
+  */
+  OdDbDynBlockReference(const OdDbObjectId& blockRefId);
+
+  /** 
+    \param pRef [in]  Pointer to the dynamic block reference.
+  */
+  OdDbDynBlockReference(OdDbBlockReference* pRef);
+
+  virtual ~OdDbDynBlockReference ();
+
+  /** \details
+    Returns true if and only if the specified Block Table Record 
+    contains dynamic block information.
+    
+    \param blockTableRecordId [in]  Block Table Record Object ID.
+    
+    \remarks
+    If blockTableRecordId is not specified, the Block Reference specified
+    in the constructor will be used.
+  */
+  static bool isDynamicBlock (const OdDbObjectId& blockTableRecordId);
+  bool isDynamicBlock () const;
+
+  /** \details
+    Returns the Object ID of the block reference.
+  */
+  OdDbObjectId blockId() const;
+
+
+  /** \details
+    Returns an array of the dynamic block properties of the block reference.
+    
+    \param properties [out]  Receives an array of properties.
+    
+    \remarks
+    An empty array will be returned if the block reference has no dynamic block properties.
+  */
+  void getBlockProperties(OdDbDynBlockReferencePropertyArray& properties) const;
+
+  /** \details
+    Resets all properties in the block reference to those of the block definition.
+  */
+  void resetBlock();
+
+  /** \details
+    Converts the dynamic block reference to a static block.
+    
+    \param newBlockName [in]  New block name.
+    
+    \remarks
+    If newBlockName is not specified, an anonymous block is created.
+  */
+  bool convertToStaticBlock();
+  bool convertToStaticBlock (const OdString& newBlockName);
+
+  /** \details
+    Returns the Object ID of the dynamic block BlockTableRecord.
+    
+    \remarks
+    Returns NULL if the block reference is not a dynamic block. 
+  */
+  OdDbObjectId dynamicBlockTableRecord () const;
+
+  /** \details
+    Returns the ObjectID of the anonymous block BlockTableRecord used to draw the dynamic block.
+  */
+  OdDbObjectId anonymousBlockTableRecord () const; 
+
+private:
+  OdDbDynBlockReference();
+
+  OdDbDynBlockReferenceImpl* m_pImpl;
+};
+
+class DYNBLOCKS_EXPORT OdDbDynBlockTableRecord
+{
+  ODRX_HEAP_OPERATORS();
+public:
+  OdDbDynBlockTableRecord(OdDbObjectId blockId);
+  ~OdDbDynBlockTableRecord();
+  bool isDynamicBlock() const;
+  OdDbObjectId blockTableRecordId() const;
+  void getAnonymousBlockIds(OdDbObjectIdArray& anonymousIds) const;
+  void updateAnonymousBlocks() const;
+private:
+  OdDbDynBlockTableRecord();
+  OdDbDynBlockTableRecordImpl* m_pImpl;
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEllipse.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEllipse.h
new file mode 100755
index 0000000..dddf967
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEllipse.h
@@ -0,0 +1,750 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_ELIPSE_H
+#define _OD_DB_ELIPSE_H /*!DOM*/
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the ellipse object (Ellipse entity) in the database. This class 
+  inherits the base functionality of entities. The ellipse entity can represent either an 
+  elliptical closed figure (ellipse) or unclosed elliptical segment (elliptical arc) in world
+  space. When the start angle coincides with the end angle, the figure is closed and this 
+  class represents an ellipse. When the start angle differs from the end angle on 1e-6, the 
+  figure is unclosed and this class represents an elliptical arc. 
+
+  \remarks
+  The ellipse must have (StartAngle = 0) and (EndAngle = Oda2PI).
+  The elliptical arc has (EndAngle - StartAngle) > 1e-6.
+  The radius ratio must be in the range [1e-6 to 1.0].
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+  <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+  \sa
+  <link db_ellipse.html, Working with Ellipses>
+
+  OdDbCircle, OdDbArc classes
+*/
+class TOOLKIT_EXPORT OdDbEllipse : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbEllipse);
+
+  /** \details
+    Builds an instance of the ellipse object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_ellipse_overview.html, Overview of Ellipses>
+  */
+  OdDbEllipse();
+
+
+  /** \details
+    Returns the WCS coordinates of the center for the elliptical figure (ellipse or arc) 
+    (DXF 10) as three-dimensional point instance.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    OdDbEllipse::setCenter() method
+  */
+  OdGePoint3d center() const;
+
+
+  /** \details
+    Sets the center of the elliptical figure (ellipse or arc) (DXF 10) in WCS.
+    The initial value is (0,0,0) by default.
+    
+    \param center [in]  Three-dimensional point instance to set the center.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    OdDbEllipse::center() method
+  */
+  void setCenter( const OdGePoint3d& center );
+
+
+  /** \details
+    Returns the WCS unit vector which is the normal to the plane of the ellipse entity 
+    (DXF 210). The normal defines the orientation of the ellipse plane in world space.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+  */
+  OdGeVector3d normal() const;
+
+
+  /** \details
+    Returns the WCS major axis vector for the elliptical figure (ellipse or arc). The 
+    major axis defines the major radius and rotation of the elliptical figure in the plane.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    OdDbEllipse::minorAxis(), OdDbEllipse::radiusRatio() methods
+  */
+  OdGeVector3d majorAxis() const;
+
+
+  /** \details
+    Returns the WCS minor axis vector for the elliptical figure (ellipse or arc). 
+    The minor axis defines the minor radius. The minor axis is perpendicular to the 
+    major axis. The minor radius less than or equal the major radius.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    OdDbEllipse::majorAxis(), OdDbEllipse::radiusRatio() methods
+  */
+  OdGeVector3d minorAxis() const;
+
+
+  /** \details
+    Returns the ratio of the minor radius to the major radius for the elliptical figure 
+    (ellipse or arc). The radius ratio is in the range [1e-6 to 1.0].
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    OdDbEllipse::minorAxis(), OdDbEllipse::minorAxis(), OdDbEllipse::setRadiusRatio() methods
+  */
+  double radiusRatio() const;
+
+
+  /** \details
+    Sets the ratio of the minor radius to the major radius for the elliptical figure 
+    (ellipse or arc) in the range [1e-6 to 1.0]. The initial value is 1.0 by default.
+
+    \param radiusRatio [in]  Radius ratio as a Double value.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    OdDbEllipse::minorAxis(), OdDbEllipse::minorAxis(), OdDbEllipse::radiusRatio() methods
+  */
+  void setRadiusRatio( double radiusRatio );
+
+
+  /** \details
+    Returns the start angle of the elliptical figure (ellipse or arc) in radians (DXF 50).
+
+    \remarks
+    The start angle is measured counterclockwise from the major axis. When (StartAngle = 0) 
+    and (EndAngle = Oda2PI) and (EndAngle - StartAngle) > 1e-6, the figure is closed, 
+    that is an ellipse.
+
+    \sa
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::setStartAngle(), OdDbEllipse::endAngle() methods
+  */
+  double startAngle() const;
+
+
+  /** \details
+    Sets the start angle for the elliptical figure (ellipse or arc) in the range �2PI  
+    radians (DXF 50). A positive value specifies the angle measured from the major axis  
+    counterclockwise. A negative value specifies the angle measured from the major axis  
+    clockwise. The initial value is zero by default.
+
+    \param startAngle [in]  Start angle as a Double.
+    
+    \remarks
+    If an angle value is negative, this method automatically converts it to the positive 
+    equivalent. If an angle value is more than 2PI, this method automatically convertes 
+    it to the range 0 to 2PI. When (StartAngle = 0) and (EndAngle = Oda2PI) and 
+    (EndAngle - StartAngle) > 1e-6, the figure is closed, that is an ellipse.
+
+    \sa
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::startAngle(), OdDbEllipse::setEndAngle() methods
+  */
+  void setStartAngle( double startAngle );
+
+
+  /** \details
+    Returns the end angle of the elliptical figure (ellipse or arc) in radians (DXF 51).
+
+    \remarks
+    The end angle is measured counterclockwise from the major axis. When (StartAngle = 0)  
+    and (EndAngle = Oda2PI) and (EndAngle - StartAngle) > 1e-6, the figure is closed,  
+    that is an ellipse.
+
+    \sa
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::setEndAngle(), OdDbEllipse::startAngle() methods
+  */
+  double endAngle() const;
+
+
+  /** \details
+    Sets the end angle for the elliptical figure (ellipse or arc) in the range �2PI 
+    radians (DXF 51). A positive value specifies the angle measured from the major axis 
+    counterclockwise. A negative value specifies the angle measured from the major axis 
+    clockwise. The initial value is 2PI by default.
+
+    \param endAngle [in]  End angle as a Double value.
+
+    \remarks
+    If an angle value is negative, this method automatically converts it to the positive 
+    equivalent. If an angle value is more than 2PI, this method automatically convertes 
+    it to the range 0 to 2PI. When (StartAngle = 0) and (EndAngle = Oda2PI) and 
+    (EndAngle - StartAngle) > 1e-6, the figure is closed, that is an ellipse.
+
+    \sa
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::endAngle(), OdDbEllipse::setStartAngle() methods
+  */
+  void setEndAngle( double endAngle );
+
+
+  /** \details
+    Returns the parameter value corresponding to the specified angle value.
+
+    \param angle [in]  Angle as a Double value in radians.
+
+    \remarks
+    Can be used to retrieve the DXF 41 & 42 values.
+
+    \sa
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+  */
+  double paramAtAngle( double angle ) const;
+
+
+  /** \details
+    Returns the angle value corresponding to the specified parameter value.
+
+    \param param [in]  Parameter as a Double value in radians.
+
+    \sa
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+  */
+  double angleAtParam( double param ) const;
+
+
+  /** \details
+    {NoAutoLink}
+    Gets the properties for the ellipse entity. This method passes the properties 
+    through own arguments.
+
+    \param center [out]  Receives the WCS center.
+    \param unitNormal [out]  Receives the WCS unit normal.
+    \param majorAxis [out]  Receives the WCS major axis.
+    \param radiusRatio [out]  Receives the radius ratio.
+    \param startAngle [out]  Receives the start angle.
+    \param endAngle [out]  Receives the end angle.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+  */
+  void get(OdGePoint3d& center,
+    OdGeVector3d& unitNormal,
+    OdGeVector3d& majorAxis,
+    double& radiusRatio,
+    double& startAngle,
+    double& endAngle) const;
+
+
+  /** \details
+    {NoAutoLink}
+    Sets the properties for the ellipse entity.
+
+    \param center [in]  WCS center.
+    \param unitNormal [in]  WCS unit normal.
+    \param majorAxis [in]  WCS major axis.
+    \param radiusRatio [in]  Radius ratio.
+    \param startAngle [in]  Start angle.
+    \param endAngle [in]  End angle.    
+
+    \remarks
+    All angles are expressed in radians. A closed ellipse entity must have (StartAngle = 0)
+    and (EndAngle = Oda2PI) and (EndAngle - StartAngle) > 1e-6. The radius ratio must be in 
+    the range [1e-6 to 1.0]. The major axis must be perpendicular to the normal within 1e-6.
+  
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_specific.html, Specific Ellipse Properties>
+
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+  */
+  void set(const OdGePoint3d& center,
+    const OdGeVector3d& unitNormal,
+    const OdGeVector3d& majorAxis,
+    double radiusRatio,
+    double startAngle = 0.0,
+    double endAngle = Oda2PI);
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+
+  /** \details
+    Determines whether the elliptical figure is planar as a Boolean value and returns True.
+    This method is inherited from the OdDbEntity class.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    \sa
+    <link db_ellipse.html, Working with Ellipses>
+
+    OdDbEllipse::getPlane(), OdDbEntity::isPlanar() methods
+  */
+  virtual bool isPlanar() const;
+
+
+  /** \details
+    Gets a plane in which the ellipse entity places. This method is inherited from the  
+    OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the plane parameters as 
+                a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type
+                    (returns kPlanar - planar entity).
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    \sa
+    <link db_ellipse.html, Working with Ellipses>
+
+    OdDbCircle::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  /** \details
+    Gets the start parameter value of the elliptical figure (ellipse or arc). The 
+    OdDbEllipse::setStartParam() method sets this value. Parameter is an angle 
+    measured counterclockwise from the major axis in the range 0 to 2PI radians as 
+    if the elliptical figure was a circular figure with a major radius.
+
+    \param startParam [out]  Reference to a variable in which this method must save the start    
+                   parameter value as a Double value in radians.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::setStartParam(), OdDbEllipse::getEndParam() methods
+  */
+  virtual OdResult getStartParam( double& startParam ) const;
+
+
+  /** \details
+    Sets the start parameter for the elliptical figure (ellipse or arc) (DXF 41).
+    Parameter is an angle measured from the major axis in the range 0 to 2PI 
+    radians as if the elliptical figure was a circular figure with a major radius.
+    A positive value specifies the start parameter measured counterclockwise
+    A negative value specifies the start parameter measured clockwise. The initial
+    value is zero by default.
+
+    \param startParam [in]  Start parameter as a Double value in radians.
+
+    \remarks
+    If an parameter value is negative, this method automatically converts it to the 
+    positive equivalent. If an angle value is more than 2PI, this method automatically 
+    convertes it to the range 0 to 2PI. When (StartParam = 0) and (EndParam = Oda2PI) and 
+    (EndParam - StartParam) > 1e-6, the figure is closed, that is an ellipse.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::getStartParam(), OdDbEllipse::setEndParam() methods
+  */
+  void setStartParam( double startParam );
+
+
+  /** \details
+    Gets the end parameter value of the elliptical figure (ellipse or arc). The 
+    OdDbEllipse::setEndParam() method sets this value. Parameter is an angle 
+    measured counterclockwise from the major axis in the range 0 to 2PI radians 
+    as if the elliptical figure was a circular figure with a major radius.
+
+    \param endParam [out]  Reference to a variable in which this method must save the end    
+                 parameter value as a Double value in radians.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::setEndParam(), OdDbEllipse::getStartParam() methods
+  */
+  virtual OdResult getEndParam( double& endParam ) const;
+
+
+  /** \details
+    Sets the end parameter for the elliptical figure (ellipse or arc) (DXF 42).
+    Parameter is an angle measured from the major axis in the range 0 to 2PI 
+    radians as if the elliptical figure was a circular figure with a major radius.
+    A positive value specifies the end parameter measured counterclockwise
+    A negative value specifies the end parameter measured clockwise. The initial
+    value is 2PI by default.
+
+    \param endParam [in]  End parameter as a Double value in radians.
+
+    \remarks
+    If an parameter value is negative, this method automatically converts it to the 
+    positive equivalent. If an angle value is more than 2PI, this method automatically 
+    convertes it to the range 0 to 2PI. When (StartParam = 0) and (EndParam = Oda2PI) and 
+    (EndParam - StartParam) > 1e-6, the figure is closed, that is an ellipse.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+
+    <link db_elliptical_arc_specific.html, Specific Elliptical Arc Properties>
+
+    OdDbEllipse::getEndParam(), OdDbEllipse::setStartParam() methods
+  */
+  void setEndParam( double endParam );
+
+
+  /** \details
+    Computes the WCS coordinates of the start point on the elliptical figure (ellipse or arc) 
+    for which the parameter equals the start value. When the elliptical figure is closed, the 
+    end point coincides with the start point. When the elliptical figure is unclosed, the 
+    start point corresponds to the start angle.
+
+    \param startPoint [out]  Reference to a variable in which this method must save the start 
+                   point as three-dimensional point instance.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getStartPoint( OdGePoint3d& startPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the end point on the elliptical figure (ellipse or arc) 
+    for which the parameter equals the end value. When the elliptical figure is closed, the 
+    end point coincides with the start point. When the elliptical figure is unclosed, the 
+    end point corresponds to the end angle.
+
+    \param endPoint [out]  Reference to a variable in which this method must save the end  
+                 point as three-dimensional point instance.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getEndPoint( OdGePoint3d& endPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the point on the elliptical figure (ellipse or arc)  
+    at the specified parameter value. Parameter is an angle measured counterclockwise  
+    from the major axis in the range 0 to 2PI radians as if the elliptical figure was  
+    a circular figure with a major radius.
+
+    \param param [in]  Parameter value specifying the point on the elliptical curve as a Double 
+              value in radians.
+    \param pointOnCurve [out] Reference to a variable in which this method must save the 
+                     three-dimensional point instance corresponding to the parameter.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getPointAtParam( double param, OdGePoint3d& pointOnCurve ) const;
+
+
+  /** \details
+    Computes the parameter at the point placed on the elliptical figure (ellipse or arc). 
+    Parameter is an angle measured counterclockwise from the major axis in the range 
+    0 to 2PI radians as if the elliptical figure was a circular figure with a major radius.
+
+    \param pointOnCurve [in]  Three-dimensional point instance which specifies the point on 
+                     the elliptical curve. 
+    \param param [out] Reference to a variable in which this method must save the parameter   
+              value as a Double value in radians.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getParamAtPoint( const OdGePoint3d& pointOnCurve, double& param ) const;
+
+
+  /** \details
+    Computes the distance along the elliptical figure (ellipse or arc) measured from the 
+    start point to the point on the elliptical curve specified the parameter.
+
+    \param param [in]  Parameter value specifying the point on the elliptical curve as a Double 
+              value in radians. 
+    \param dist  [out] Reference to a variable in which this method must save the distance value 
+              as a Double value in drawing units.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+
+  /** \details
+    Computes the parameter at the distance along the elliptical figure (ellipse or arc). 
+    Parameter is an angle measured counterclockwise from the major axis in the range  
+    0 to 2PI radians as if the elliptical figure was a circular figure with a major radius.
+
+    \param dist [in]   Distance value along the elliptical curve as a Double value in drawing units. 
+    \param param [out]  Reference to a variable in which this method must save the parameter value  
+              as a Double value in radians.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+
+  /** \details
+    Computes the first derivative for the specified parameter of the elliptical figure 
+    (ellipse or arc) and returns the three-dimensional vector instance.
+
+    \param param [in]  Parameter value specifying the point on the elliptical curve as a Double 
+              value in radians. 
+    \param firstDeriv [out] Reference to a variable in which this method must save the first  
+                   derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getFirstDeriv( double param, OdGeVector3d& firstDeriv ) const;
+
+
+  /** \details
+    Computes the second derivative for the specified parameter of the elliptical figure   
+    (ellipse or arc) and returns the three-dimensional vector instance.
+
+    \param param [in]  Parameter value specifying the point on the elliptical curve as a Double 
+              value in radians. 
+    \param secondDeriv [out] Reference to a variable in which this method must save the second   
+                    derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getSecondDeriv( double param, OdGeVector3d& secondDeriv ) const;
+
+
+  /** \details
+    When an elliptical figure is unclosed, this method returns the area calculated for the 
+    closed figure formed by the elliptical arc and a line passed from the end point to the 
+    start point. When an elliptical figure is closed, this method returns the area of the 
+    ellipse. 
+
+    \param vArea [out]  Reference to a variable in which this method must save the area
+              as a Double value.
+
+    \sa
+    <link db_ellipse_sample.html, Example of Working with the Ellipse Object>
+
+    <link db_elliptical_arc_sample.html, Example of Working with the Elliptical Arc>
+
+    \sa
+    <link db_ellipse_compute.html, Computed Ellipse and Elliptical Arc Properties>
+  */
+  virtual OdResult getArea( double& vArea ) const;
+
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+  virtual OdResult reverseCurve();
+};
+
+/** \details
+  The typified smart pointer for the ellipse object (Ellipse entity). This template  
+  class is specialization of the OdSmartPtr class for the OdDbEllipse class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbEllipse> OdDbEllipsePtr;
+
+#include "TD_PackPop.h"
+
+#endif //_OD_DB_ELIPSE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntity.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntity.h
new file mode 100755
index 0000000..bc36860
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntity.h
@@ -0,0 +1,1287 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBENTITY_INCLUDED_
+#define _ODDBENTITY_INCLUDED_ /* { Secret} */
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeLine3d.h"
+#include "Ge/GePlane.h"
+#include "CmColor.h"
+#include "IntArray.h"
+#include "DbDatabase.h"
+#include "DbSubentId.h"
+#include "GsMarkerArray.h"
+
+class OdGePlane;
+class OdGeMatrix3d;
+class OdDbFullSubentPath;
+class OdGePoint3d;
+class OdGeVector3d;
+class OdDbBlockTableRecord;
+
+class OdDbGripData;
+template <class T> class OdSharedPtr;
+typedef OdSharedPtr<OdDbGripData> OdDbGripDataPtr;
+typedef OdArray<void*, OdMemoryAllocator<void*> > OdDbVoidPtrArray;
+
+/** \details
+    This template class is a specialization of the OdArray class template for OdDbGripData smart pointers.
+*/
+typedef OdArray<OdDbGripDataPtr> OdDbGripDataPtrArray;
+
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbEntity pointers.
+*/
+typedef OdSmartPtr<OdDbEntity> OdDbEntityPtr;
+
+/** \details
+  This template class is a specialization of the OdArray class for OdDbEntity object SmartPointers.
+*/
+typedef OdArray<OdDbEntityPtr> OdDbEntityPtrArray;
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+
+  enum Intersect
+  {
+    kOnBothOperands    = 0,
+    kExtendThis        = 1,
+    kExtendArg         = 2,
+    kExtendBoth        = 3
+  };
+
+  enum EntSaveAsType
+  {
+    kNoSave = 0,
+    kSaveAsR12,
+    kSaveAsR13,
+    kSaveAsR14
+  };
+
+  enum OsnapMode
+  {
+    kOsModeEnd      = 1,  // Endpoint
+    kOsModeMid      = 2,  // Midpoint
+    kOsModeCen      = 3,  // Center
+    kOsModeNode     = 4,  // Node
+    kOsModeQuad     = 5,  // Quadrant
+    kOsModeIntersec = 6,  // Intersection
+    kOsModeIns      = 7,  // Insertion point
+    kOsModePerp     = 8,  // Perpendicular
+    kOsModeTan      = 9,  // Tangent
+    kOsModeNear     = 10, // Nearest
+    kOsModeApint    = 11, // Apparent intersection
+    kOsModePar      = 12, // Parallel
+    kOsModeStart    = 13  // Startpoint
+  };
+
+  enum Planarity
+  {
+    kNonPlanar = 0,
+    kPlanar    = 1,
+    kLinear    = 2
+  };
+
+  enum DragStat
+  {
+    kDragStart = 0,
+    kDragEnd   = 1,
+    kDragAbort = 2
+  };
+
+  enum GripStat
+  {
+    kGripsDone          = 0,
+    kGripsToBeDeleted   = 1,
+    kDimDataToBeDeleted = 2
+  };
+}
+
+/** \details
+    This class is the base class for all graphical objects contained in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbEntity : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbEntity);
+
+  OdDbEntity();
+
+  /** \details
+    Returns the Object ID of the OdDbBlockTableRecord that owns this entity.
+  */
+  OdDbObjectId blockId() const;
+
+  /** \details
+    Returns the color information of this entity as an OdCmColor instance.
+  */
+  OdCmColor color() const;
+
+  /** \details
+    Sets the color information of this entity from an OdCmColor instance.
+
+    \param color [in]  OdCmColor object.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                  this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setColor(
+    const OdCmColor &color,
+    bool doSubents = true);
+
+  /** \details
+    Returns the color index of this entity (DXF 62).
+
+    \remarks
+    Returns a value in the range [0 .. 256].
+
+    * 0 indicates a color of BYBLOCK.
+    * 256 indicates a color of BYLAYER.
+  */
+  OdUInt16 colorIndex() const;
+
+  /** \details
+    Returns the OdCmEntityColor settings of this object.
+  */
+  virtual OdCmEntityColor entityColor() const;
+
+  /** \details
+    Sets the color index of this entity (DXF 62).
+
+    \param colorIndex [in]  Color index.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                  this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    colorIndex will be in the range [0 .. 256].
+    * 0 indicates a color of BYBLOCK.
+    * 256 indicates a color of BYLAYER.
+  */
+  virtual OdResult setColorIndex(
+    OdUInt16 colorIndex,
+    bool doSubents = true);
+
+  /** \details
+      Returns the Object ID of the OdDbColor object referenced by this entity.
+  */
+  OdDbObjectId colorId() const;
+
+  /** \details
+    Assigns the specified OdDbColor object to this entity.
+
+    \param colorId [in]  Object ID of the OdDbColor object.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                  this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setColorId(
+    OdDbObjectId colorId,
+    bool doSubents = true);
+
+  /** \details
+    Returns the transparency setting of this entity.
+  */
+  OdCmTransparency transparency() const;
+
+  /** \details
+    Sets the transparency setting of this entity, and returns eOk if successful.
+
+    \param transparency [in]  OdCmTransparency object be assigned.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                  this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    If you override this function, you must call OdDbEntity::setTransparency(), passing to it the calling arguments.
+  */
+  virtual OdResult setTransparency(
+    const OdCmTransparency& transparency,
+    bool doSubents = true);
+
+  /** \details
+    Returns the name of the plotStyleName string associated with this entity (DXF 390).
+  */
+  OdString plotStyleName() const;
+
+  /** \details
+    Returns the PlotStyleName of this entity.
+
+    \param plotStyleNameId [out]  Receives the Object ID of the Plot Style Name of this entity.
+  */
+  OdDb::PlotStyleNameType getPlotStyleNameId(OdDbObjectId& plotStyleNameId) const;
+
+  /** \details
+    Sets the plot style of this entity.
+
+    \param plotStyleName [in]  Name of the plot style.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                  this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setPlotStyleName(
+    const OdString& plotStyleName,
+    bool doSubents = true);
+
+  /** \param plotStyleNameType [in]  Plot Style Name Type.
+    \param plotStyleNameId [in]  Object ID of the plot style name.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    plotStyleNameId is used only when plotStyleNameType == kPlotStyleNameById.
+
+    plotStyleNameType must be one of the following:
+
+    <table>
+    Name                                 Value
+    OdDb::kPlotStyleNameByLayer          0
+    OdDb::kPlotStyleNameByBlock          1
+    OdDb::kPlotStyleNameIsDictDefault    2
+    OdDb::kPlotStyleNameById             3
+    </table>
+  */
+  virtual OdResult setPlotStyleName(
+    OdDb::PlotStyleNameType plotStyleNameType,
+    OdDbObjectId plotStyleNameId = OdDbObjectId::kNull,
+    bool doSubents = true);
+
+  /** \details
+    Returns the name of the layer referenced by this entity (DXF 8).
+  */
+  OdString layer() const;
+
+  /** \details
+    Returns the Object ID of the OdDbLayerTableRecord referenced by this entity.
+  */
+  OdDbObjectId layerId() const;
+
+  /** \details
+    Sets the layer to be referenced by this entity (DXF 8).
+
+    \param layerName [in]  Name of the layer.
+    \param layerId [in]  Object ID of the LayerTableRecord.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setLayer(
+    const OdString& layerName,
+    bool doSubents = true,
+    bool allowHiddenLayer = false);
+
+  virtual OdResult setLayer(
+    OdDbObjectId layerId,
+     bool doSubents = true,
+     bool allowHiddenLayer = false);
+
+
+  /** \details
+    Returns the name of the linetype referenced by this entity (DXF 6).
+  */
+  OdString linetype() const;
+
+  /** \details
+    Returns the Object ID of the linetype referenced by this entity (DXF 6).
+  */
+  OdDbObjectId linetypeId() const;
+
+  /** \details
+    Sets the linetype to be referenced by this entity (DXF 6).
+
+    \param linetypeName [in]  Name of the linetype.
+    \param linetypeID [in]  Object ID of the linetype.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setLinetype(
+    const OdString& linetypeName,
+    bool doSubents = true);
+  virtual OdResult setLinetype(
+    OdDbObjectId linetypeID,
+    bool doSubents = true);
+
+  /** \details
+    Returns the name of the material referenced by this entity (DXF 347).
+  */
+  OdString material() const;
+
+  /** \details
+    Returns the Object ID of the material referenced by this entity (DXF 347).
+  */
+  OdDbObjectId materialId() const;
+
+  /** \details
+    Sets the material to be referenced by this entity (DXF 347).
+
+    \param materialName [in]  Name of the material.
+    \param materialID [in]  Object ID of the material.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setMaterial(
+    const OdString& materialName,
+    bool doSubents = true);
+  virtual OdResult setMaterial(
+    OdDbObjectId materialID,
+    bool doSubents = true);
+
+
+  enum VisualStyleType
+  {
+    kFullVisualStyle,
+    kFaceVisualStyle,
+    kEdgeVisualStyle
+  };
+
+  /** \details
+    Returns the Object ID of the *visual style* used by this entity.
+  */
+  OdDbObjectId visualStyleId(
+    VisualStyleType vstype = kFullVisualStyle) const;
+
+  /** \details
+    Sets the *visual style* to be used by this entity.
+
+    \param visualStyleId [in]  Object ID of the *visual style*.
+    \param vstype [in]  Type of the *visual style*.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setVisualStyle(
+    OdDbObjectId visualStyleId,
+    VisualStyleType vstype = kFullVisualStyle,
+    bool doSubents = true);
+
+  /** \details
+    Returns OdGiMapper used to map a material to the entity.
+    Returns null if the default mapper is used.
+  */
+  virtual const OdGiMapper* materialMapper() const;
+
+  /** \details
+    Sets the mapper used to map a material to the entity.
+
+    \param mapper [in]  The mapper of a material.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Use null to apply the default mapper.
+  */
+  virtual void setMaterialMapper(
+    const OdGiMapper* mapper,
+    bool doSubents = true);
+
+  /** \details
+    Returns the linetype scale of this entity (DXF 48).
+  */
+  double linetypeScale() const;
+
+  /** \details
+    Sets the Linetype scale of this entity (DXF 48).
+
+    \param linetypeScale [in]  Linetype scale factor.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setLinetypeScale(
+    double linetypeScale,
+    bool doSubents = true);
+
+  /** \details
+    Returns the visibility status of this entity. It takes into account both permanent (DXF 60)
+    and temporary visibility statuses: the entity is visible only if it's visible in both parts.
+
+    \remarks
+    visibility() returns one of the following:
+
+    <table>
+    Name                 Value
+    OdDb::kInvisible     1
+    OdDb::kVisible       0
+    </table>
+  */
+  OdDb::Visibility visibility() const;
+
+  /** \details
+    Sets the visibility status of this entity (DXF 60).
+
+    \param visibility [in]  Visibility status.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    visibility must be one of the following:
+
+    <table>
+    Name                 Value
+    OdDb::kInvisible     1
+    OdDb::kVisible       0
+    </table>
+  */
+  ODRX_SEALED_VIRTUAL OdResult setVisibility(
+    OdDb::Visibility visibility,
+    bool doSubents = true) ODRX_SEALED;
+
+  /** \details
+    Returns the temporary (not saved) visibility status of this entity.
+
+    \remarks
+    tempVisibility() returns one of the following:
+
+    <table>
+    Name                 Value
+    OdDb::kInvisible     1
+    OdDb::kVisible       0
+    </table>
+  */
+  OdDb::Visibility tempVisibility() const;
+
+  /** \details
+    Sets the temporary (not saved to file) visibility status of this entity.
+
+    \param visibility [in]  Visibility status, must be one of the following:
+    <table>
+    Name                 Value
+    OdDb::kInvisible     1
+    OdDb::kVisible       0
+    </table>
+  */
+  void setTempVisibility(OdDb::Visibility visibility);
+
+  /** \details
+    Returns the lineweight property of this entity (DXF 370).
+  */
+  OdDb::LineWeight lineWeight() const;
+
+  /** \details
+    Sets the lineweight property of this entity (DXF 370).
+
+    \param lineWeight [in]  Lineweight.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setLineWeight(
+    OdDb::LineWeight lineWeight,
+    bool doSubents = true);
+
+  /** \details
+    Returns the CastShadows flag for this entity..
+  */
+  virtual bool                castShadows() const;
+
+  /** \details
+    Controls the CastShadows flag for this entity.
+    \param castShadows [in]  CastShadows flag.
+  */
+  virtual void                setCastShadows(bool castShadows);
+
+  /** \details
+    Returns the ReceiveShadows flag for this entity..
+  */
+  virtual bool                receiveShadows() const;
+
+  /** \details
+    Controls the Receivehadows flag for this entity.
+    \param receiveShadows [in]  ReceiveShadows flag.
+  */
+  virtual void                setReceiveShadows(bool receiveShadows);
+
+  /** \details
+    Returns the CollisionType for this entity.
+    \remarks
+    Subclasses may override this method to customize how the class interacts
+    in collision-aware features.
+  */
+  virtual OdDb::CollisionType collisionType() const;
+
+ /** \details
+    Copies the properties from the specified entity to this entity.
+    \param pSource [in]  Pointer to the source entity.
+    \param doSubents [in]  If and only if true, applies the change to all sub-entities owned by
+                this entity.
+ */
+  void setPropertiesFrom(
+    const OdDbEntity* pSource,
+    bool doSubents = true);
+
+  /** \details
+    Returns true if and only if this entity is planar.
+  */
+  virtual bool isPlanar() const;
+
+  /** \details
+    Returns the plane that contains this entity.
+
+    \param plane [out]   Receives the plane that contains this entity.
+    \param planarity [out]  Receives the planarity of this entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    planarity and plane return values as follows::
+
+    <table>
+    planarity     Value    Description    plane
+    kNonPlanar    0        Non-planar     Not set
+    kPlanar       1        Planar         Entity plane
+    kLinear       2        Linear         Arrbitrary plane containing this entity
+    </table>
+  */
+  virtual OdResult getPlane(
+    OdGePlane& plane,
+    OdDb::Planarity& planarity) const;
+
+  /** \details
+    Returns the WCS geometric extents of this entity.
+
+    \param extents [out]  Receives the extents.
+
+    \remarks
+    Returns eOk if successful, or eInvalidExtents if not.
+
+    The extents are the WCS corner points of a box, aligned with the
+    WCS axes, that encloses the 3D extents of this entity.
+  */
+
+  void subHandOverTo(
+    OdDbObject* pNewObject);
+
+  /** \details
+    Applies the specified 3D transformation matrix to this entity.
+
+    \param xfm [in]  3D transformation matrix.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  ODRX_SEALED_VIRTUAL OdResult transformBy(
+    const OdGeMatrix3d& xfm) ODRX_SEALED;
+
+  /** \details
+    Creates a copy of this entity, and applies the supplied transformation
+    to the newly created copy.
+
+    \param xfm [in]  3D transformation matrix.
+    \param pCopy [out]  Receives a SmartPointer to the newly created copy.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  ODRX_SEALED_VIRTUAL OdResult getTransformedCopy(
+    const OdGeMatrix3d& xfm,
+    OdDbEntityPtr& pCopy) const ODRX_SEALED;
+
+  /** \details
+    Explodes this entity into a set of simpler entities.
+
+    \param entitySet [in/out] Receives an array of pointers to the new entities.
+
+    \returns
+    Returns eOk if successful, or an appropriate error code if not.
+
+    \remarks
+    Entities resulting from the explosion are appended to the specified array.
+    The newly created entities are not database resident.
+    The default implementation of this function returns eNotApplicable. This function can be
+    overridden in custom classes.
+  */
+  ODRX_SEALED_VIRTUAL OdResult explode(
+    OdRxObjectPtrArray& entitySet) const ODRX_SEALED;
+
+  /** \details
+    Explodes this entity into a set of simpler entities, and adds them to the specified block table record.
+
+    \param pBlockRecord [in]  Pointer to the Block Table Record.
+    \param ids [in/out] Receives an array of Object IDs of the new entities.
+
+    \remarks
+    Entities resulting from the explosion are appended to the specified array.
+
+    The newly created entities are database resident or not depending on the block table record
+    they are appended to. If block table record is database resident the entities are database
+    resident as well. If block table record is not database resident newly created entities are not
+    database resident.
+
+    The default implementation of this function returns eNotApplicable. This function can be
+    overridden in custom classes.
+  */
+  virtual OdResult explodeToBlock(
+    OdDbBlockTableRecord *pBlockRecord,
+    OdDbObjectIdArray *ids = 0);
+
+  /** \details
+    Explodes this entity into a set of simpler entities.
+
+    \param entitySet [in/out] Receives an array of pointers to the new entities.
+
+    \remarks
+    The newly created entities will be not database resident. Entities resulting from the explosion are appended to the specified array.
+    The default implementation of this function calls subWorldDraw() and makes
+    entities from geometry generated by subWorldDraw(). This function can be
+    overridden in custom classes.
+    
+    \returns
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult explodeGeometry(
+    OdRxObjectPtrArray& entitySet) const;
+
+  /** \details
+    Explodes this entity into a set of simpler entities, and adds them to the specified block.
+
+    \param pBlockRecord [in]  Pointer to the Block Table Record.
+    \param ids [in/out] Receives array of Object IDs of the new entities.
+
+    \remarks
+    The newly created entities are database resident or not depending on the block table record
+    they are appended to. If block table record is database resident the entities are database
+    resident too. If block table record is not database resident newly created entities are not
+    database resident.
+    Entities resulting from the explosion are appended to the specified array.
+    The default implementation of this function calls subWorldDraw() and makes
+    entities from geometry generated by subWorldDraw(). This function can be
+    overridden in custom classes.
+  */
+  virtual OdResult explodeGeometryToBlock(
+    OdDbBlockTableRecord *pBlockRecord,
+    OdDbObjectIdArray *ids = 0);
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+
+  /** \details
+    Applies the default properties of the specified database to this entity.
+
+    \param pDb [in]  Pointer to the database whose default values are to be used.
+    \param doSubents [in]  Set to true if subentities should be processed
+
+    \remarks
+    If pDb is null, the database containing this entity is used.
+
+    The following properties are set
+    * color
+    * layer
+    * linetype
+    * linetype scale
+    * lineweight
+    * plotstyle
+    * visibility
+  */
+  void setDatabaseDefaults(
+    OdDbDatabase* pDb = 0,
+    bool doSubents = false);
+
+  /** \details
+    Called by setDatabaseDefaults() after the values are set.
+
+    \param pDb [in]  Pointer to the database whose default values are to be used.
+    \param doSubents [in]  Set to true if subentities should be processed
+
+    \remarks
+    If pDb is null, the database containing this entity is used.
+
+    This function allows custom classes to inspect and modify the values set by setDatabaseDefaults.
+
+    The default implementation of this function returns eNotApplicable. This function can be
+    overridden in custom classes.
+
+    \note
+    This function is not intended to be called by the user.
+  */
+  virtual void subSetDatabaseDefaults(
+    OdDbDatabase* pDb,
+    bool doSubents);
+
+  virtual void applyPartialUndo(
+    OdDbDwgFiler* pUndoFiler,
+    OdRxClass* pClassObj);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  void appendToOwner(
+    OdDbIdPair& idPair,
+    OdDbObject* pOwnerObject,
+    OdDbIdMapping& ownerIdMap);
+
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdGiDrawable* drawable();
+
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+
+    virtual void subList() const;
+    virtual OdResult subGetClassID(void* pClsid) const;
+
+  /** \details
+    This function is called as the first operation of the swapIdWith() function.
+
+    \param otherId [in]  Object ID of object with which to swap.
+    \param swapXdata [in]  XData will be swaped if and only if swapXData is true.
+    \param swapExtDict [in]  Extension dictionaries will be swapped if and only if swapExtDict is true.
+
+    \remarks
+    This function allows derived classes
+    to implement custom behavior during the swapIdWith operation.
+
+    The default implementation of this function does nothing. This function can be
+    overridden in custom classes.
+
+
+
+    \sa
+    OdDbObject::swapIdWith
+  */
+  void subSwapIdWith(
+    const OdDbObjectId& otherId,
+    bool swapXdata = false,
+    bool swapExtDict = false);
+
+   virtual OdResult subErase( bool erasing) ODRX_OVERRIDE;
+
+  /** \details
+    Sets the bit flag indicating the entity's geometry is changed.
+
+    \param graphicsModified [in]  New value.
+
+    \remarks
+    If true, assures that modifiedGraphics() will be called as the entity is being closed, even
+    if the object was not opened for write.
+  */
+  void recordGraphicsModified(bool graphicsModified = true);
+
+  virtual void copyFrom(const OdRxObject* pSource);
+
+/* No implementation
+  Cause this entity, and any other entity who's draw bit is set, to be be drawn.
+    void draw();
+  */
+
+  /** \details
+    This method is triggered by the standard LIST command and is to be display
+    the dxf format contents of the entity to the display.
+  */
+  ODRX_SEALED_VIRTUAL void list() const ODRX_SEALED;
+
+  virtual OdResult getGeomExtents(OdGeExtents3d& extents) const ODRX_SEALED;
+
+  ODRX_SEALED_VIRTUAL void highlight(bool bDoIt = true, const OdDbFullSubentPath* pSubId = 0,
+    bool highlightAll = false) const ODRX_SEALED;
+
+  /** \details
+    Returns all appropriate object snap points of this entity.
+
+    \param osnapMode [in]  The object snap mode being queried.
+    \param gsSelectionMark [in]  The GS marker of the subentity being queried.
+    \param pickPoint [in]  The WCS point being queried.
+    \param lastPoint [in]  The WCS point picked before pickPoint.
+    \param xWorldToEye [in]  The WCS->DCS transformation matrix.
+    \param snapPoints [in/out] Receives an array of UCS object snap points.
+
+    \remarks
+    Object snap points are appended to the specified array.
+
+    osnapMode must be one of the following:
+
+    <table>
+    Name                      Value   Description
+    OdDb::kOsModeEnd          1       Endpoint
+    OdDb::kOsModeMid          2       Midpoint
+    OdDb::kOsModeCen          3       Center
+    OdDb::kOsModeNode         4       Node
+    OdDb::kOsModeQuad         5       Quadrant
+    OdDb::kOsModeIntersec     6       Intersection
+    OdDb::kOsModeIns          7       Insertion point
+    OdDb::kOsModePerp         8       Perpendicular
+    OdDb::kOsModeTan          9       Tangent
+    OdDb::kOsModeNear         10      Nearest
+    OdDb::kOsModeApint        11      Apparent intersection
+    OdDb::kOsModePar          12      Parallel
+    OdDb::kOsModeStart        13      Unknown
+    </table>
+
+  */
+  ODRX_SEALED_VIRTUAL OdResult getOsnapPoints(
+    OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark,
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint,
+    const OdGeMatrix3d& xWorldToEye,
+    OdGePoint3dArray& snapPoints ) const ODRX_SEALED;
+
+  ODRX_SEALED_VIRTUAL OdResult getOsnapPoints(
+    OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark,
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint,
+    const OdGeMatrix3d& xWorldToEye,
+    OdGePoint3dArray& snapPoints,
+    const OdGeMatrix3d& insertionMat) const ODRX_SEALED;
+  
+  ODRX_SEALED_VIRTUAL bool isContentSnappable() const ODRX_SEALED;
+
+  /** \details
+    Returns all grip points of this entity.
+
+    \param gripPoints [in/out] Receives an array of WCS grip points.
+
+    \remarks
+    Grip points are appended to the specified array.
+  */
+  ODRX_SEALED_VIRTUAL OdResult getGripPoints( OdGePoint3dArray& gripPoints ) const ODRX_SEALED;
+
+  /** \details
+    Moves the specified grip points of this entity.
+
+    \param indices [in]  Array of indicies.
+    \param offset [in] The direction and magnitude of the grip points offset (WCS).
+
+    \remarks
+    Each element in gripPoints has a corresponding entry in indices, which specifies the index of
+    the grip point as returned by getGripPoints.
+  */
+  ODRX_SEALED_VIRTUAL OdResult moveGripPointsAt(
+    const OdIntArray& indices,
+    const OdGeVector3d& offset ) ODRX_SEALED;
+
+  /** \details
+    Returns OdDbGripData objects for grip points of this entity.
+
+    \param grips [in/out] Receives an array of OdDbGripData objects.
+
+    \remarks
+    Grip points are appended to the specified array.
+  */
+  ODRX_SEALED_VIRTUAL OdResult getGripPoints(
+    OdDbGripDataPtrArray& grips,
+    const double curViewUnitSize,
+    const int gripSize,
+    const OdGeVector3d& curViewDir,
+    const int bitFlags ) const ODRX_SEALED;
+
+  /** \details
+    Moves the specified grip points of this entity.
+
+    \param gripAppData [in]  Array of appData pointers from the OdDbGripData objects (one for each grip point to be moved).
+    \param offset [in] The direction and magnitude of the grip points offset (WCS).
+  */
+  ODRX_SEALED_VIRTUAL OdResult moveGripPointsAt(
+    const OdDbVoidPtrArray& grips,
+    const OdGeVector3d& offset,
+    int bitFlags ) ODRX_SEALED;
+
+  /** \details
+    Returns all stretch points of this entity.
+
+    \param stretchPoints [in/out] Receives an array of WCS stretch points.
+
+    \remarks
+    Stretch points are appended to the specified array.
+  */
+  ODRX_SEALED_VIRTUAL OdResult getStretchPoints( OdGePoint3dArray& stretchPoints ) const ODRX_SEALED;
+
+  /** \details
+    Moves the specified stretch points of this entity.
+
+    \param stretchPoints [in]  Array of moved grip points.
+    \param indices [in]  Array of indicies.
+    \param offset [in] The direction and magnitude of the stretch points offset (WCS).
+
+    \remarks
+    Each element in stretchPoints has a corresponding entry in indices, which specifies the index of
+    the stretch point as returned by getStretchPoints.
+  */
+  ODRX_SEALED_VIRTUAL OdResult moveStretchPointsAt(
+    const OdIntArray& indices,
+    const OdGeVector3d& offset ) ODRX_SEALED;
+
+  /** \details
+    Notification function called when this entity is involved in a drag operation.
+
+    \param status [in]  Status of the drag operation.
+  */
+  virtual void dragStatus( const OdDb::DragStat status );
+
+  /** \details
+    Notification function called when this entity is involved in a grip operation.
+
+    \param status [in]  Status of the grip operation.
+  */
+  ODRX_SEALED_VIRTUAL void gripStatus( const OdDb::GripStat status ) ODRX_SEALED;
+
+  /** \details
+    Returns the cloneMeForDragging flag for this entity.
+  */
+  ODRX_SEALED_VIRTUAL bool cloneMeForDragging() ODRX_SEALED;
+
+  /** \details
+    Returns the hideMeForDragging flag for this entity.
+  */
+  ODRX_SEALED_VIRTUAL bool hideMeForDragging() const ODRX_SEALED;
+
+  /** \details
+    Creates a geometric representation of this entity for saving proxy graphics or converting to previous formats.
+
+    \param pWd [in]  Pointer to the OdGiWorldDraw object.
+    \param ver [in]  Specifies the reason why the method is called.
+
+    \remarks
+    The default implementation of this function calls worldDraw().
+    This function can be overridden in custom classes.
+  */
+  virtual void saveAs(
+    OdGiWorldDraw* pWd,
+    OdDb::DwgVersion ver ) const;
+
+
+
+  /** \details
+    Is applicable for compound objects only which return the kDrawableIsCompoundObject flag
+    from subSetAttributes(). The matrix returned is the one that
+    is passed to pushModelTransform before rendering nested objects.
+    Default implementation returns OdDb::eNotApplicable and the identity matrix in xM.
+  */
+  ODRX_SEALED_VIRTUAL OdResult getCompoundObjectTransform(OdGeMatrix3d & xM) const ODRX_SEALED;
+
+  /** \details
+    Intersects this entity with other entity if possible.
+
+    \param pEnt   [in] Pointer to other entity
+    \param inType [in] Determines type of intersection to be calculated
+  */
+  ODRX_SEALED_VIRTUAL OdResult intersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+                             OdGePoint3dArray& points, OdGsMarker thisGsMarker = 0,
+                             OdGsMarker otherGsMarker = 0) const ODRX_SEALED;
+
+  ODRX_SEALED_VIRTUAL OdResult intersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+                             const OdGePlane& projPlane, OdGePoint3dArray& points,
+                             OdGsMarker thisGsMarker = 0, OdGsMarker otherGsMarker = 0) const ODRX_SEALED;
+
+  /** \details
+    Uses the bounding box of this object to determine an intersection array of points.
+  */
+  OdResult boundingBoxIntersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+                                OdGePoint3dArray& points, OdGsMarker thisGsMarker, OdGsMarker otherGsMarker) const;
+
+  OdResult boundingBoxIntersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+                                const OdGePlane& projPlane, OdGePoint3dArray& points,
+                                OdGsMarker thisGsMarker, OdGsMarker otherGsMarker) const;
+
+  /** \details
+	Returns all subentity paths by graphic system marker for complex entities, that has
+	the ability to associate an integer identifier (GS marker) with each graphic primitive or 
+	with groups of primitives during draw themself.
+
+	\param type [in]  The subentity type being queried.
+	\param gsMarker [in]  The GS marker of the subentity being queried.
+	\param pickPoint [in]  The WCS point being queried.
+	\param xrm [in]  The WCS->DCS transformation matrix.
+	\param subentPaths [out] The array of OdDbFullSubentPath objects.
+	\param pEntAndInsertStack [in] The array of objectIds of the objects that are the nested containers of the subentity.
+
+	\remarks
+	Subentity type must be one of the following:
+
+	<table>
+    Name                      Value   Description
+    OdDb::kFaceSubentType     1		  Face subentity
+    OdDb::kEdgeSubentType     2		  Edge subentity
+    OdDb::kVertexSubentType   3		  Vertex subentity
+    OdDb::kMlineSubentCache   4		  Not used yet
+	OdDb::kClassSubentType    5		  MultiType subentity
+	</table>
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult getSubentPathsAtGsMarker(OdDb::SubentType type, OdGsMarker gsMark, 
+										const OdGePoint3d& pickPoint,const OdGeMatrix3d& xfm, 
+										OdDbFullSubentPathArray& subentPaths, 
+										const OdDbObjectIdArray* pEntAndInsertStack = 0) const ODRX_SEALED;
+
+  /** \details
+	Returns all graphic system marker by subentity paths for complex entities, that has
+	the ability to associate an integer identifier (GS marker) with each graphic primitive or 
+	with groups of primitives during draw themself.
+
+	\param subPath [in]  The OdDbFullSubentPath to the subentity.
+	\param gsMarkers [in/out] The array of integer identifiers (GS markers).
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult getGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+    OdGsMarkerArray& gsMarkers) const ODRX_SEALED;
+
+  /** \details
+	Gets the grip points and supporting information about the grips for a subentity.
+
+	\param path [in]  The OdDbFullSubentPath to the subentity.
+	\param grips [in/out] Receives an array of pointers of OdDbGripData objects, one object for each grip point in the subentity.
+	\param curViewUnitSize [in] The size (in pixels) of one drawing unit in the current viewport.
+	\param gripSize [in] The current grip size (in pixels).
+	\param curViewDir [in] The view direction in the current viewport.
+	\param bitflags [in] The bitmap of one or more flags specified by the GetGripPointsFlags enumeration.
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult getGripPointsAtSubentPath( const OdDbFullSubentPath& path, OdDbGripDataPtrArray& grips,
+											  const double curViewUnitSize, const int gripSize,
+                        const OdGeVector3d& curViewDir, const OdUInt32 bitflags) const ODRX_SEALED;
+
+  /** \details
+	Applies a vector offset to one or more grip points exposed by subentities on the object.
+
+	\param paths [in]  The array of OdDbFullSubentPath objects.
+	\param gripAppData [in]  The array of pointers of OdDbGripData objects.
+	\param offset [in]  The vector (in WCS coordinates) indicating the direction and magnitude of the translation.
+	\param bitflags [in]  The bitmap of one or more flags specified by the GetGripPointsFlags enumeration.
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult moveGripPointsAtSubentPaths( const OdDbFullSubentPathArray& paths,
+    const OdDbVoidPtrArray& gripAppData, const OdGeVector3d& offset, const OdUInt32 bitflags) ODRX_SEALED;
+
+  /** \details
+	Deletes one or more subentities from an entity.
+
+	\param paths [in]  The array of OdDbFullSubentPath objects.
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult deleteSubentPaths(const OdDbFullSubentPathArray& paths) ODRX_SEALED;
+
+  /** \details
+  Add one or more subentities to an entity.
+
+  \param paths [in]  The array of OdDbFullSubentPath objects.
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult addSubentPaths(const OdDbFullSubentPathArray& paths) ODRX_SEALED;
+
+  /** \details
+	Create an object by OdDbFullSubentPath to the subentity.
+
+	\param path [in]  The OdDbFullSubentPath to the subentity.
+  */
+
+  ODRX_SEALED_VIRTUAL OdDbEntityPtr subentPtr(const OdDbFullSubentPath& path) const ODRX_SEALED;
+
+  /** \details
+	Applies a geometric transformation to one or more subentities on an object. 
+
+	\param paths [in]  The array of OdDbFullSubentPath objects.
+	\param xform [in]  The WCS transformation to apply to each of the supplied subentities.
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult transformSubentPathsBy(const OdDbFullSubentPathArray &paths, const OdGeMatrix3d & xform) ODRX_SEALED;
+
+  /** \details
+	Obtains the CLSID of the wrapper coclass for the subentity.
+
+	\param path [in]  The OdDbFullSubentPath to the subentity.
+	\param clsId [in/out] The pointer to a CLSID structure whose contents are set to the CLSID of the wrapper for the subentity.
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult getSubentClassId( const OdDbFullSubentPath& path, void* clsId ) ODRX_SEALED;
+
+  /** \details
+	Returns the geometric extents for a subentity.
+
+	\param path [in]  The OdDbFullSubentPath to the subentity.
+	\param extents [in/out] The geometric extents, expressed in world coordinates, of the subentity.
+  */
+
+  ODRX_SEALED_VIRTUAL OdResult getSubentPathGeomExtents( const OdDbFullSubentPath& path, OdGeExtents3d& extents ) ODRX_SEALED;
+
+  ODRX_SEALED_VIRTUAL  void  subentGripStatus(OdDb::GripStat status, const OdDbFullSubentPath& subentity) ODRX_SEALED;
+  
+  /** \details
+  Returns the entity coordinate system matrix.
+
+  \remarks
+  Default implementation returns Identity matrix.
+  */
+  virtual OdGeMatrix3d getEcs() const;
+
+protected:
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+  virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm,
+    OdDbEntityPtr& pCopy) const;
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+  virtual OdResult subGetCompoundObjectTransform(OdGeMatrix3d & xM) const;
+
+  virtual bool subCloneMeForDragging();
+  virtual bool subHideMeForDragging() const;
+
+  virtual void subGripStatus( const OdDb::GripStat status );
+
+  virtual OdResult subGetOsnapPoints(
+    OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark,
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint,
+    const OdGeMatrix3d& xWorldToEye,
+    OdGePoint3dArray& snapPoints ) const;
+  
+  virtual OdResult subGetOsnapPoints(
+    OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark,
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint,
+    const OdGeMatrix3d& xWorldToEye,
+    OdGePoint3dArray& snapPoints,
+    const OdGeMatrix3d& insertionMat) const;
+  
+  virtual bool subIsContentSnappable() const;
+
+  virtual OdResult subGetGripPoints( OdGePoint3dArray& gripPoints ) const;
+  virtual OdResult subMoveGripPointsAt(const OdIntArray& indices,const OdGeVector3d& offset );
+  virtual OdResult subGetGripPoints(
+    OdDbGripDataPtrArray& grips,
+    const double curViewUnitSize,
+    const int gripSize,
+    const OdGeVector3d& curViewDir,
+    const int bitFlags ) const;
+  virtual OdResult subMoveGripPointsAt(
+    const OdDbVoidPtrArray& grips,
+    const OdGeVector3d& offset,
+    int bitFlags );
+  virtual OdResult subGetStretchPoints( OdGePoint3dArray& stretchPoints ) const;
+  virtual OdResult subMoveStretchPointsAt(
+    const OdIntArray& indices,
+    const OdGeVector3d& offset );
+
+  virtual OdResult subIntersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+    OdGePoint3dArray& points, OdGsMarker thisGsMarker = 0,
+    OdGsMarker otherGsMarker = 0) const;
+
+  virtual OdResult subIntersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+    const OdGePlane& projPlane, OdGePoint3dArray& points,
+    OdGsMarker thisGsMarker = 0, OdGsMarker otherGsMarker = 0) const;
+
+  virtual void subHighlight(bool bDoIt = true, const OdDbFullSubentPath* pSubId = 0,
+    bool highlightAll = false) const;
+
+  virtual OdDb::Visibility subVisibility() const;
+  virtual OdResult subSetVisibility(OdDb::Visibility visibility, bool doSubents = true);
+
+  virtual OdResult subGetGeomExtents(
+      OdGeExtents3d& extents) const;
+  virtual OdResult subDeleteSubentPaths(const OdDbFullSubentPathArray& paths);
+  virtual OdResult subAddSubentPaths(const OdDbFullSubentPathArray& paths);
+
+  virtual OdResult subMoveGripPointsAtSubentPaths( const OdDbFullSubentPathArray& paths, 
+    const OdDbVoidPtrArray& gripAppData, const OdGeVector3d& offset, const OdUInt32 bitflags);
+  virtual OdResult subGetGripPointsAtSubentPath( const OdDbFullSubentPath& path, OdDbGripDataPtrArray& grips,
+    const double curViewUnitSize, const int gripSize,
+    const OdGeVector3d& curViewDir, const OdUInt32 bitflags) const;
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type, OdGsMarker gsMark, 
+    const OdGePoint3d& pickPoint,const OdGeMatrix3d& xfm, 
+    OdDbFullSubentPathArray& subentPaths, 
+    const OdDbObjectIdArray* pEntAndInsertStack = 0) const;
+  virtual OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+    OdGsMarkerArray& gsMarkers) const;
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& path) const;
+  virtual OdResult subTransformSubentPathsBy(const OdDbFullSubentPathArray &paths, const OdGeMatrix3d & xform);
+  virtual OdResult subGetSubentClassId( const OdDbFullSubentPath& path, void* clsId ) const;
+  virtual OdResult subGetSubentPathGeomExtents( const OdDbFullSubentPath& path, OdGeExtents3d& extents ) const;
+  virtual void subSubentGripStatus(OdDb::GripStat status, const OdDbFullSubentPath& subentity);
+
+  friend class OdDbPropertiesOverrule;
+  friend class OdDbOsnapOverrule;
+  friend class OdDbTransformOverrule;
+  friend class OdDbGripOverrule;
+  friend class OdDbSubentityOverrule;
+  friend class OdDbHighlightOverrule;
+  friend class OdDbVisibilityOverrule;
+  friend class OdDbGeometryOverrule;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _ODDBENTITY_INCLUDED_ */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityIntersectionPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityIntersectionPE.h
new file mode 100755
index 0000000..6da5333
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityIntersectionPE.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_DB_INTERSECTIONPE_
+#define _OD_DB_INTERSECTIONPE_
+
+
+#include "DbEntity.h"
+
+/** \details
+    This class defines the interface for the Entity Intersection Protocol Extension classes.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbEntityIntersectionPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbEntityIntersectionPE);
+
+  /** \details
+    Intersects this entity with other entity if possible.
+    
+    \param pEnt   [in] Pointer to other entity
+    \param inType [in] Determines type of intersection to be calculated
+  */
+  virtual OdResult intersectWith(
+    const OdDbEntity* pThisEnt, const OdDbEntity* pEnt, 
+    OdDb::Intersect intType, OdGePoint3dArray& points, 
+    OdGsMarker thisGsMarker = 0, OdGsMarker otherGsMarker = 0) const = 0;
+
+  virtual OdResult intersectWith(
+    const OdDbEntity* pThisEnt, const OdDbEntity* pEnt, 
+    OdDb::Intersect intType, const OdGePlane& projPlane, OdGePoint3dArray& points,
+    OdGsMarker thisGsMarker = 0, OdGsMarker otherGsMarker = 0) const = 0;
+
+  /** \details
+    Uses the bounding box of this object to determine an intersection array of points.
+  */
+  virtual OdResult boundingBoxIntersectWith(
+    const OdDbEntity* pThisEnt, const OdDbEntity* pEnt, 
+    OdDb::Intersect intType, OdGePoint3dArray& points, 
+    OdGsMarker thisGsMarker, OdGsMarker otherGsMarker) const = 0;
+
+  virtual OdResult boundingBoxIntersectWith(
+    const OdDbEntity* pThisEnt, const OdDbEntity* pEnt, 
+    OdDb::Intersect intType, const OdGePlane& projPlane, OdGePoint3dArray& points,
+    OdGsMarker thisGsMarker, OdGsMarker otherGsMarker) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class
+  for OdDbEntityIntersectionPE object pointers.
+*/
+typedef OdSmartPtr<OdDbEntityIntersectionPE> OdDbEntityIntersectionPEPtr;
+
+#endif //_OD_DB_INTERSECTIONPE_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityOverrule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityOverrule.h
new file mode 100755
index 0000000..9ba8726
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityOverrule.h
@@ -0,0 +1,549 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBENTITYOVRRULE_H_INCLUDED_
+#define _DBENTITYOVRRULE_H_INCLUDED_
+
+#include "RxOverrule.h"
+#include "DbEntity.h"
+
+/** \details
+  This class overrules a subset of osnap linked operations which an entity specifies. 
+  It is used as a base class for classes derived from OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+
+  Library: TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbOsnapOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbOsnapOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbOsnapOverrule();
+
+  /** \details
+    Overrules the OdDbEntity::subGetOsnapPoints() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param osnapMode [in]  Osnap mode to be requested.
+    \param gsSelectionMark [in]  GS marker of the subentity involved in the snap operation.
+    \param pickPoint [in]  WCS coordinates of the point picked during the snap operation.
+    \param lastPoint [in]  WCS coordinates of the point selected just before pickPoint.
+    \param xWorldToEye [in]  A transformation matrix to transform from WCS to DCS.
+    \param snapPoints [in]  An existing array to append osnap points.
+    \param insertionMat [in]  A transformation matrix for block transformation.
+  */
+  virtual OdResult getOsnapPoints(
+    const OdDbEntity* pSubject,
+    OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark,
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint,
+    const OdGeMatrix3d& xWorldToEye,
+    OdGePoint3dArray& snapPoints );
+
+  virtual OdResult getOsnapPoints(
+    const OdDbEntity* pSubject,
+    OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark,
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint,
+    const OdGeMatrix3d& xWorldToEye,
+    OdGePoint3dArray& snapPoints,
+    const OdGeMatrix3d& insertionMat);
+
+  /** \details
+    Returns True when it is a block entity which requires investigating the block definition, or False otherwise.
+
+    \remarks
+    The application can override this function to inform the host application: don't investigate the compounded objects 
+    that use a block definition for osnap points. This method is not called for objects that don't use a block definition 
+    in the worldDraw() implementation.
+
+    \param pSubject [in]  A raw pointer to an entity.
+  */
+  virtual bool isContentSnappable(const OdDbEntity* pSubject);
+};
+
+/** \details
+  This class overrules a subset of transformation linked operations which an entity specifies. 
+  It is used as a base class for classes derived from OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+  
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbTransformOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbTransformOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbTransformOverrule();
+
+  /** \details
+    Overrules OdDbEntity::subTransformBy() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param xform [in]  Transformation matrix.
+  */
+  virtual OdResult transformBy(OdDbEntity* pSubject, const OdGeMatrix3d& xform);
+
+  /** \details
+    Overrules OdDbEntity::subGetTransformedCopy() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param xform [in]  A transformation matrix.
+    \param pEnt [in/out] A reference to an empty pointer in which a pointer to the transformed copy of the entity should be saved.
+  */
+  virtual OdResult getTransformedCopy(const OdDbEntity* pSubject, const OdGeMatrix3d& xform, OdDbEntityPtr& pEnt);
+
+  /** \details
+    Overrules OdDbEntity::subExplode() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param entitySet [in/out] An array of pointers to new entities; this array can contain the pointers from other entities; 
+                    all entities which are a result of the exploding operation are appended to this array.
+  */
+  virtual OdResult explode(const OdDbEntity* pSubject, OdRxObjectPtrArray& entitySet);
+
+  /** \details
+    Overrules OdDbEntity::subCloneMeForDragging() method and calls it in the default implementation.
+    This method returns True when a clone will be created for the dragging operation, or False otherwise.
+
+    \param pSubject [in]  A raw pointer to an entity.
+  */
+  virtual bool cloneMeForDragging(OdDbEntity* pSubject);
+
+  /** \details
+    Overrules OdDbEntity::subHideMeForDragging() method and calls it in the default implementation.
+    This method returns True when the original object should be hidden during the dragging operation, 
+    or False otherwise.
+
+    \param pSubject [in]  A raw pointer to an entity.
+  */
+  virtual bool hideMeForDragging(const OdDbEntity* pSubject);
+};
+
+/** \details
+  This class overrules a subset of grip linked operations which an entity specifies. 
+  It is used as a base class for classes derived from OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGripOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGripOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbGripOverrule();
+
+  /** \details
+    Overrules OdDbEntity::subGetGripPoints() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param gripPoints [in/out] An existing array to which the grip points should be appended.
+    \param gripsData [in] An array of pointers to dynamically allocated grip data objects. 
+    \param curViewUnitSize [in] A size of one drawing unit in the current viewport (in pixels).
+    \param gripSize [in] A size of current grip point (in pixels).
+    \param curViewDir [in] A vector that specifies the view direction in the current viewport.
+    \param bitFlags [in] Mask of one or more flags specified by the OdDbGripOperations::GetGripPointsFlags enumeration.
+  */
+  virtual OdResult getGripPoints( const OdDbEntity* pSubject, OdGePoint3dArray& gripPoints );
+
+  virtual OdResult getGripPoints(const OdDbEntity* pSubject, 
+    OdDbGripDataPtrArray& gripsData,
+    const double curViewUnitSize,
+    const int gripSize,
+    const OdGeVector3d& curViewDir,
+    const int bitFlags );
+
+  /** \details
+    Overrules OdDbEntity::subMoveGripPointsAt() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param indices [in]  An array containing the indices corresponding to grip points obtained from 
+                the getGripPoints() method that indicate which grip points are now "hot."
+    \param grips [in] An array of pointers referring to each grip point to be moved.
+    \param offset [in] A vector that indicates the direction and magnitude which the grip points have been translated.
+    \param bitFlags [in] Mask of one or more flags specified by the OdDbGripOperations::GetGripPointsFlags enumeration.
+  */
+  virtual OdResult moveGripPointsAt(OdDbEntity* pSubject, 
+    const OdIntArray& indices,
+    const OdGeVector3d& offset );
+
+  virtual OdResult moveGripPointsAt(OdDbEntity* pSubject,
+    const OdDbVoidPtrArray& grips,
+    const OdGeVector3d& offset,
+    int bitFlags );
+
+  /** \details
+    Overrules OdDbEntity::subGetStretchPoints() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param stretchPoints [in/out] An existing array to which the stretch points should be appended.
+  */
+  virtual OdResult getStretchPoints(const OdDbEntity* pSubject,
+    OdGePoint3dArray& stretchPoints);
+
+  /** \details
+    Overrules OdDbEntity::subMoveStretchPointsAt() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param indices [in]  An array containing the indices that indicate which stretch points are being translated.
+  */
+  virtual OdResult moveStretchPointsAt(OdDbEntity* pSubject,
+    const OdIntArray & indices,
+    const OdGeVector3d& offset);
+
+  /** \details
+    Overrules OdDbEntity::subGripStatus() method and calls it in the default implementation.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param status [in]  The status of the grip operation specified by the OdDbGripOperations::GripStatus enumeration.
+  */
+   virtual void gripStatus(OdDbEntity* pSubject, const OdDb::GripStat status);
+};
+
+/** \details
+  This class overrules a subset of subentity linked operations which an entity specifies. 
+  It is used as a base class for classes derived from OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+    
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSubentityOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSubentityOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbSubentityOverrule();
+
+  /** \details
+    Overrules OdDbEntity::subDeleteSubentPaths() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param paths [in]  An array of full subentity path objects identifying the subentities to be deleted from the entity.
+  */
+  virtual OdResult deleteSubentPaths(OdDbEntity* pSubject, const OdDbFullSubentPathArray& paths);
+
+  /** \details
+    Overrules OdDbEntity::subAddSubentPaths() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param paths [in]  An array of full subentity path objects identifying the subentities to be added to the entity.
+  */
+  virtual OdResult addSubentPaths(OdDbEntity* pSubject, const OdDbFullSubentPathArray& paths);
+
+  /** \details
+    Overrules OdDbEntity::subTransformSubentPathsBy() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param paths [in]  An array of full subentity path objects identifying the subentities to be transformed.
+    \param xform [in]  A transformation matrix to be applied to each subentity.
+  */
+  virtual OdResult transformSubentPathsBy(OdDbEntity* pSubject,
+    const OdDbFullSubentPathArray& paths,
+    const OdGeMatrix3d&            xform);
+
+  /** \details
+    Overrules OdDbEntity::subGetGripPointsAtSubentPath() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param path [in]  A full subentity path object identifying the subentity.
+    \param grips [in]  An array of pointers to dynamically allocated grip data objects.
+    \param curViewUnitSize [in]  A size of one drawing unit in the current viewport (in pixels).
+    \param gripSize [in]  A size of current grip point (in pixels).
+    \param curViewDir [in]  A vector that specifies the view direction in the current viewport.
+    \param bitFlags [in]  Mask of one or more flags specified by the OdDbGripOperations::GetGripPointsFlags enumeration.
+  */
+  virtual OdResult getGripPointsAtSubentPath(
+    const OdDbEntity*              pSubject,
+    const OdDbFullSubentPath&      path,
+    OdDbGripDataPtrArray&          grips,
+    const double                   curViewUnitSize,
+    const int                      gripSize,
+    const OdGeVector3d&            curViewDir,
+    const OdUInt32                 bitflags);
+
+  /** \details
+    Overrules OdDbEntity::subMoveGripPointsAtSubentPaths() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param paths [in]  An array of full subentity path objects identifying the subentities to be moved.
+    \param gripAppData [in]  An array of pointers referring to each grip point to be moved.
+    \param offset [in]  A vector that indicates the direction and magnitude of the translation to be applied to the grips.
+    \param bitFlags [in]  Mask of one or more flags specified by the OdDbGripOperations::GetGripPointsFlags enumeration.
+  */
+  virtual OdResult moveGripPointsAtSubentPaths(
+    OdDbEntity*                    pSubject,
+    const OdDbFullSubentPathArray& paths,
+    const OdDbVoidPtrArray&        gripAppData,
+    const OdGeVector3d&            offset,
+    const OdUInt32                 bitflags);
+
+  /** \details
+    Overrules the OdDbEntity::subGetSubentPathsAtGsMarker() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param type [in]  A subentity type specified by the OdDb::SubentType enumeration.
+    \param gsMark [in]  GS marker representing a specific subentity.
+    \param pickPoint [in]  WCS coordinates of the point picked during the selection of the entity.
+    \param viewXform [in]  A transformation matrix to transform from WCS to DCS.
+    \param subentPaths [out]  An array of full subentity path objects identifying the subentities generated from the GS marker.
+    \param pEntAndInsertStack [in]  An array of object IDs that are the nested containers of the subentity.
+  */
+  virtual  OdResult getSubentPathsAtGsMarker(
+    const OdDbEntity*      pSubject,
+    OdDb::SubentType       type,
+    OdGsMarker             gsMark, 
+    const OdGePoint3d&     pickPoint,
+    const OdGeMatrix3d&    viewXform, 
+    OdDbFullSubentPathArray&   subentPaths, 
+    const OdDbObjectIdArray* pEntAndInsertStack = 0);
+
+  /** \details
+    Overrules the OdDbEntity::subGetGsMarkersAtSubentPath() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param subPath [in]  A full subentity path object identifying the subentity.
+    \param gsMarkers [out]   An array with GSMarkers for the subentities.
+  */
+  virtual  OdResult getGsMarkersAtSubentPath(
+    const OdDbEntity*         pSubject,
+    const OdDbFullSubentPath& subPath, 
+    OdGsMarkerArray& gsMarkers);
+
+  /** \details
+    Overrules the OdDbEntity::subentPtr() method and calls it in the default implementation.
+    This method returns a smart pointer to the subentity if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param id [in]  A full subentity path object identifying the subentity.
+  */
+  virtual OdDbEntityPtr subentPtr(const OdDbEntity* pSubject, const OdDbFullSubentPath& id);
+
+  /** \details
+    Overrules the OdDbEntity::subGetCompoundObjectTransform() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param xMat [out]  A transformation matrix to be filled for nested objects.
+  */
+  virtual OdResult getCompoundObjectTransform(const OdDbEntity* pSubject, OdGeMatrix3d & xMat);
+
+  /** \details
+    Overrules OdDbEntity::subGetSubentPathGeomExtents() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param path [in]  A full subentity path object identifying the subentity.
+    \param extents [out]  An extents object in which subentity extents should be saved.
+  */
+  virtual OdResult getSubentPathGeomExtents(const OdDbEntity* pSubject,
+    const OdDbFullSubentPath& path, 
+    OdGeExtents3d& extents);
+
+  /** \details
+    Overrules OdDbEntity::subentGripStatus() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param status [in]  A status of the grip operation specified by the OdDb::GripStat enumeration.
+    \param path [in]  A full subentity path object identifying the subentity whose grip status is to be changed.
+  */
+  virtual void subentGripStatus(OdDbEntity* pSubject, 
+    OdDb::GripStat status,
+    const OdDbFullSubentPath& subentity);
+
+  /** \details
+    Overrules OdDbEntity::subGetSubentClassId() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param path [in]  A full subentity path object identifying the subentity.
+    \param clsId [out]  A pointer to the class description structure whose contents are set for the subentity.
+  */
+  virtual OdResult getSubentClassId(const OdDbEntity* pSubject,
+    const OdDbFullSubentPath& path,
+    void*                    clsId);
+};
+
+/** \details
+  This class overrules a subset of highlight linked operations which an entity specifies. 
+  It is used as a base class for classes derived from OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+    
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbHighlightOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbHighlightOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbHighlightOverrule();
+
+  /** \details
+    Overrules OdDbEntity::subHighlight() method and calls it in the default implementation.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param bDoIt [in]  Indicates whether to highlight.
+    \param pSubId [in]  A full subentity path that identifies the subentity to be highlighted.
+    \param highlightAll [in]  Indicates whether to highlight in all viewports.
+  */
+  virtual void highlight(const OdDbEntity* pSubject, bool bDoIt = true, const OdDbFullSubentPath* pSubId = 0,
+    bool highlightAll = false);
+};
+
+/** \details
+  This class overrules a subset of visibility linked operations which an entity specifies. 
+  It is used as a base class for classes derived from OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbVisibilityOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbVisibilityOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbVisibilityOverrule();
+
+  /** \details
+    Overrules OdDbEntity::subVisibility() method and calls it in the default implementation.
+    This method returns the visibility state of the object as the OdDb::Visibility enumeration.
+
+    \param pSubject [in]  A raw pointer to an entity.
+  */
+  virtual OdDb::Visibility visibility(const OdDbEntity* pSubject);
+
+  /** \details
+    Overrules OdDbEntity::subSetVisibility() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param visibility [in]  A visibility state as the OdDb::Visibility enumeration.
+    \param doSubents [in]  Indicates whether the new value should be applied to the subentitites.
+  */
+  virtual OdResult setVisibility(OdDbEntity* pSubject, OdDb::Visibility visibility, bool doSubents = true);
+};
+
+/** \details
+  This class overrules a subset of geometry linked operations which an entity specifies. 
+  It is used as a base class for classes derived from OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+    
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeometryOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeometryOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbGeometryOverrule();
+
+  /** \details
+    Overrules OdDbEntity::subIntersectWith() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pThisEnt [in]  A raw pointer to an entity.
+    \param pEnt [in]  An entity with which this entity is intersected.
+    \param intType [in]  Type of intersection.
+    \param points [out]  An array of points in which the intersection points should be appended.
+    \param thisGsMarker [in]  GS marker of the subentity of this entity which is involved in the intersection.
+    \param otherGsMarker [in]  GS marker of the subentity of the entity pointed to by pEnt which is involved in the intersection.
+  */
+  virtual OdResult intersectWith(const OdDbEntity* pThisEnt,
+    const OdDbEntity* pEnt, OdDb::Intersect intType,
+    OdGePoint3dArray& points, OdGsMarker thisGsMarker = 0,
+    OdGsMarker otherGsMarker = 0);
+  /** \details
+    Overrules OdDbEntity::subIntersectWith() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pThisEnt [in]  A raw pointer to an entity.
+    \param pEnt [in]  An entity with which this entity is intersected.
+    \param intType [in]  Type of intersection.
+    \param projPlane [in]  A projection plane for the intersection of the two entities.
+    \param points [out]  An array of points in which the intersection points should be appended.
+    \param thisGsMarker [in]  GS marker of the subentity of this entity which is involved in the intersection.
+    \param otherGsMarker [in]  GS marker of the subentity of the entity pointed to by pEnt which is involved in the intersection.
+  */
+  virtual OdResult intersectWith(const OdDbEntity* pThisEnt,
+    const OdDbEntity* pEnt, OdDb::Intersect intType,
+    const OdGePlane& projPlane, OdGePoint3dArray& points,
+    OdGsMarker thisGsMarker = 0, OdGsMarker otherGsMarker = 0);
+
+  /** \details
+    Overrules OdDbEntity::subGetGeomExtents() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+    \param extents [out]  An extents object in which entity extents should be saved.
+  */
+  virtual OdResult getGeomExtents(const OdDbEntity* pSubject, OdGeExtents3d& extents);
+};
+
+#endif //_DBENTITYOVRRULE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityWithGrData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityWithGrData.h
new file mode 100755
index 0000000..a3fb9f6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEntityWithGrData.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_ENTITYWITHGRDATA_
+#define _OD_DB_ENTITYWITHGRDATA_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+
+/** \details
+    This class is the Protocol Extension for OdDbEntity objects with stored graphics data.
+    
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbEntityWithGrDataPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbEntityWithGrDataPE);
+  virtual bool worldDraw( const OdDbEntity* entity, OdGiWorldDraw* pWd ) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbEntityWithGrData object pointers.
+*/
+typedef OdSmartPtr<OdDbEntityWithGrDataPE> OdDbEntityWithGrDataPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbErrorInvalidSysvar.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbErrorInvalidSysvar.h
new file mode 100755
index 0000000..f4a26e8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbErrorInvalidSysvar.h
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODDBERRORINVALIDSYSVAR_INCLUDED_
+#define _ODDBERRORINVALIDSYSVAR_INCLUDED_
+
+/** \details
+    This class implements OdError objects with Result codes of eInvalidIndex,
+    and the names, lower limits and upper limits of the variables associated with the errors.
+    
+    Library: TD_Db
+    <group Error_Classes> 
+*/
+class TOOLKIT_EXPORT OdError_InvalidSysvarValue : public OdError
+{
+public:
+  /** \param name [in]  Name of Sysvar.
+    \param limmin [in]  Lower limit for Sysvar.
+    \param limmax [in]  Upper limit for Sysvar.
+  */
+  OdError_InvalidSysvarValue(const OdString& name);
+  OdError_InvalidSysvarValue(const OdString& name, int limmin, int limmax);
+  OdError_InvalidSysvarValue(const OdString& name, double limmin, double limmax);
+#if OD_SIZEOF_LONG == 4
+  OdError_InvalidSysvarValue(const OdString& name, OdInt32 limmin, OdInt32 limmax);
+#endif
+  OdResBufPtr limmin() const;
+  /** \details
+    Returns the upper limit for the Sysvar associated with this OdError object.
+  */
+  OdResBufPtr limmax() const;
+  /** \details
+    Returns the name of the Sysvar associated with this OdError object.
+  */
+  OdString name() const;
+};
+
+/** \details
+    This class implements OdError objects with Result codes of eUnknownSysvar,
+    a the names  of the variables associated with the errors.
+    
+    Library: TD_Db
+    <group Error_Classes> 
+*/
+class TOOLKIT_EXPORT OdError_UnknownSysvar : public OdError
+{
+public:
+  /** \param name [in]  Name of Sysvar.
+  */
+  OdError_UnknownSysvar(const OdString& name);
+  /** \details
+    Returns the name of the Sysvar associated with this OdError object.
+  */
+  OdString name() const;
+};
+
+/** \details
+    This class implements OdError objects with Result codes of eInvalidInput,
+    a the names of the variables associated with the errors.
+    
+    Library: TD_Db
+    <group Error_Classes> 
+*/
+class TOOLKIT_EXPORT OdError_ModelSpaceSysvar : public OdError
+{
+public:
+  /** \param name [in]  Name of Sysvar.
+  */
+  OdError_ModelSpaceSysvar(const OdString& name);
+  /** \details
+    Returns the name of the Sysvar associated with this OdError object.
+  */
+  OdString name() const;
+};
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalGraph.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalGraph.h
new file mode 100755
index 0000000..e6266d9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalGraph.h
@@ -0,0 +1,1099 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbEvalGraph_h_Included_
+#define _DbEvalGraph_h_Included_
+
+#include "SmartPtr.h"
+#include "DbObject.h"
+
+#include "TD_PackPush.h"
+
+// Forward class declarations
+
+class  OdDbEvalGraph;
+class  OdDbEvalEdgeInfo;
+class  OdDbEvalExpr;
+class  OdDbEvalConnectable;
+class  OdDbEvalContext;
+class  OdDbEvalContextPair;
+class  OdDbEvalContextIterator;
+class  OdResBuf;
+class  OdDbImpEvalContext;
+class  OdDbImpEvalContextIterator;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbEvalGraph object pointers.
+*/
+typedef OdSmartPtr<OdDbEvalGraph> OdDbEvalGraphPtr;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbEvalContextIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbEvalContextIterator> OdDbEvalContextIteratorPtr;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbEvalExpr object pointers.
+*/
+typedef OdSmartPtr<OdDbEvalExpr> OdDbEvalExprPtr;
+
+typedef unsigned long OdDbEvalNodeId;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbEvalNodeId objects.
+*/
+typedef OdArray<OdDbEvalNodeId, OdMemoryAllocator<OdDbEvalNodeId> > OdDbEvalNodeIdArray;
+/** \details
+    This template class is a specialization of the OdArray class for OdDbEvalEdgeInfo objects.
+*/
+typedef OdArray<OdDbEvalEdgeInfo> OdDbEvalEdgeInfoArray;
+/** \details
+    This template class is a specialization of the OdArray class for OdDbEvalExprPtr object SmartPointers.
+*/
+typedef OdArray<OdDbEvalExprPtr> OdDbEvalExprPtrArray;
+/** \details
+    This template class is a specialization of the OdArray class for OdResBufPtr object SmartPointers.
+*/
+typedef OdArray<OdResBufPtr> OdResBufArray;
+
+#include "OdPlatformSettings.h"
+#include "StringArray.h"
+
+#ifdef DYNBLOCKS_DLL_EXPORTS
+#ifndef SWIG
+#define DYNBLOCKS_EXPORT        OD_TOOLKIT_EXPORT
+#else
+#define DYNBLOCKS_EXPORT        
+#endif
+#define DYNBLOCKS_EXPORT_STATIC OD_STATIC_EXPORT
+#else       
+#ifndef SWIG
+#define DYNBLOCKS_EXPORT        OD_TOOLKIT_IMPORT
+#else
+#define DYNBLOCKS_EXPORT        
+#endif
+#define DYNBLOCKS_EXPORT_STATIC OD_STATIC_IMPORT
+#endif
+
+/** \details
+    This class implements the behavior of dynamic blocks with a network of interrelated
+    elements.
+
+    \remarks
+    Each element (OdDbEvalExpr object) depends on zero or more other elements. The
+    dependencies are represented as edges to dependent nodes from the nodes
+    on which they depend.
+
+    In response to OdDbEvalGraph::evaluate(), this class traverses the graph and invokes
+    OdDbEvalExpr::evaluate() for each of the elements in the graph in the proper order.
+
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+
+    \sa
+    * OdDbEvalConnectable
+    * OdDbEvalContext
+    * OdDbEvalContextIterator
+    * OdDbEvalContextPair
+    * OdDbEvalEdgeInfo
+    * OdDbEvalExpr
+*/
+class DYNBLOCKS_EXPORT OdDbEvalGraph : public OdDbObject
+{
+public:
+
+  enum NodeId {
+    kNullNodeId = 0
+  };
+
+  ODDB_DECLARE_MEMBERS(OdDbEvalGraph);
+
+  OdDbEvalGraph();
+  virtual ~OdDbEvalGraph();
+
+  /* Management */
+
+  /** \details
+    Returns true if and only there is a graph with the specified key on the specified object or database.
+    \param pObj [in]  Pointer to the object.
+    \param key [in]  Graph key.
+  */
+  static bool hasGraph(const OdDbObject* pObj,
+    const OdString& key);
+
+  /** \details
+    Returns the Graph object with the specified key on the specified object or database.
+    \param pObj [in]  Pointer to the object.
+    \param key [in]  Graph key.
+    \param openMode [in]  Mode in which to open the Graph object.
+  */
+  static OdDbEvalGraphPtr getGraph(const OdDbObject* pObj,
+    const OdString& pKey,
+    const OdDb::OpenMode openMode = OdDb::kForRead );
+
+
+  /** \details
+    Creates a graph with the specified key on the specified object or database.
+    \param pObj [in]  Pointer to the object.
+    \param key [in]  Graph key.
+    \remarks
+    Returns true if and only if successful.
+  */
+  static bool createGraph(OdDbObject* pObj,
+    const OdString& key);
+
+
+  /** \details
+    Removes the graph with the specified key on the specified object or database.
+    \param pObj [in]  Pointer to the object.
+    \param key [in]  Graph key.
+    \remarks
+    Returns true if and only if there was a graph with the specified key.
+  */
+  static bool removeGraph(OdDbObject* pObj,
+    const OdString& pKey);
+
+  /** \param pDb [in]  Pointer to the database.
+  */
+  static bool hasGraph(OdDbDatabase* pDb,
+    const OdString& key);
+
+  /** \param pDb [in]  Pointer to the database.
+  */
+  static OdDbEvalGraphPtr getGraph(OdDbDatabase* pDb,
+    const OdString& key,
+    const OdDb::OpenMode openMode = OdDb::kForRead );
+
+  /** \param pDb [in]  Pointer to the database.
+  */
+  static bool createGraph(OdDbDatabase* pDb,
+    const OdString& key);
+
+  /** \param pDb [in]  Pointer to the database.
+  */
+  static bool removeGraph(OdDbDatabase* pDb,
+    const OdString& key);
+
+  /** \details
+    Adds a node to this Graph object.
+    \param pNode [in]  Pointer to the GsNode object.
+    \remarks
+    Returns the node ID of the newly added node.
+
+    \note
+    For database resident Graphs, the user is expected to close returned nodes
+    when done for them. This includes the pNode argument.
+  */
+  virtual OdDbEvalNodeId addNode(OdDbEvalExpr* pNode);
+
+  /** \details
+    Removes a node from this Graph object.
+    \param nodeId [in]  Node ID.
+    \remarks
+    Returns true if and only if the node existed.
+  */
+  virtual bool removeNode  (const OdDbEvalNodeId& nodeId);
+
+  /** \param pNode [in]  Pointer to the GsNode object.
+
+    \remarks
+    If pNode is specified, it is assumed the node is open for read or write.
+  */
+  virtual bool removeNode (OdDbEvalExpr* pNode);
+
+  /** \details
+    Returns an array of the node IDs of all nodes in this Graph object.
+    \param allNodes [out]  Receives an array of node IDs.
+  */
+  virtual void getAllNodes (OdDbEvalNodeIdArray& allNodes) const;
+
+  /** \details
+    Opens and returns a SmartPointer to the specified node in this Graph object.
+    \param nodeId [in]  Node ID.
+    \param openMode [in]  Mode in which to open the Node object.
+  */
+  virtual OdDbEvalExprPtr getNode( const OdDbEvalNodeId& nodeId, OdDb::OpenMode openMode = OdDb::kForRead ) const;
+
+
+  /** \details
+    Adds the specified edge to this Graph object.
+
+    \param idFrom [in]  Node ID of the node at the start of the edge.
+    \param idTo [in]  Node ID of the node at the end of the edge.
+
+    \remarks
+    Creates an outgoing reference to idTo in idFrom, and an incoming reference to idFrom in idTo.
+
+    Throws:
+    OdError(eInvalidOwnerObject) if the specified GraphNode objects are not in the same Graph object.
+  */
+  virtual bool addEdge(const OdDbEvalNodeId& idFrom,
+    const OdDbEvalNodeId& idTo);
+
+  /** \param invertible [in]  True if and only if the edge is invertible.
+
+    \remarks
+    An invertible edge can have its originating and terminating nodes swapped
+    based on which of the nodes is activated.
+  */
+  virtual bool addEdge(const OdDbEvalNodeId& idFrom,
+    const OdDbEvalNodeId& idTo,
+    bool  invertible);
+
+
+  /** \details
+    Removes the specified edge from this Graph object.
+
+    \param idFrom [in]  Node ID of the node at the start of the edge.
+    \param idTo [in]  Node ID of the node at the end of the edge.
+
+    \remarks
+    Creates an outgoing reference to idTo in idFrom, and an incoming reference to idFrom in idTo.
+
+    Throws:
+    OdError(eInvalidOwnerObject) if the specified GraphNode objects are not in the same Graph object.
+  */
+  virtual bool removeEdge(const OdDbEvalNodeId& idFrom,
+    const OdDbEvalNodeId& idTo);
+
+  /** \details
+    Returns an array of the incoming edges for the specified node of this Graph object.
+
+    \param nodeId [in]  Node ID.
+    \param edges [in]  Receives an array of edges.
+  */
+  virtual void getIncomingEdges(const OdDbEvalNodeId& nodeId,
+    OdDbEvalEdgeInfoArray& edges) const;
+
+  /** \details
+    Returns an array of the outgoing edges for the specified node of this Graph object.
+
+    \param nodeId [in]  Node ID.
+    \param edges [in]  Receives an array of edges.
+  */
+  virtual void getOutgoingEdges(const OdDbEvalNodeId& nodeId,
+    OdDbEvalEdgeInfoArray& edges) const;
+
+
+  /** \details
+    Returns the edge information for the specified edge of this Graph object.
+    \param idFrom [in]  Node ID of the node at the start of the edge.
+    \param idTo [in]  Node ID of the node at the end of the edge.
+    \param edgeInfo [out]  Receives the edge information.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool getEdgeInfo(const OdDbEvalNodeId& idFrom,
+    const OdDbEvalNodeId& idTo, OdDbEvalEdgeInfo& edgeInfo) const;
+
+
+  /** \details
+    Moves the nodes and edges from the specified Graph object to this Graph object.
+    \param pGraphToAdd [in]  Pointer to the Graph object to add.
+  */
+  virtual void addGraph(OdDbEvalGraph* pGraphToAdd);
+
+  /* Evaluation */
+
+  /** \details
+    Evaluates this Graph object.
+
+    \remarks
+    Evaluation is accomplished by traversing the activated nodes on the Graph,
+    invoking OdDbEvalExpr::evaluate() on each of the visited nodes.
+
+    Nodes may be activated with either the activate() method, or by
+    supplying an activatedNodes argument.
+
+    \note
+    Nodes not activated are deactivated.
+
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool evaluate() const;
+
+  /** \param pContext [in]  Pointer to the Context object for the evaluation.
+  */
+  virtual bool evaluate(
+    const OdDbEvalContext* pContext) const;
+
+  /** \param pActivatedNodes [in]  Pointer to an array of node IDs to activate.
+  */
+  virtual bool evaluate(
+    const OdDbEvalContext* pContext,
+    const OdDbEvalNodeIdArray* pActivateNodes) const;
+
+
+  /** \details
+    Activates the specified nodes in this Graph object.
+
+    \param activatedNodes [in]  Array of node IDs to activate.
+
+    \note
+    Nodes not activated are deactivated.
+
+    \remarks
+    Returns true if and only if the graph is non-cyclic.
+  */
+  virtual bool activate(
+    const OdDbEvalNodeIdArray& activatedNodes) const;
+
+
+  /** \param pActiveSubgraph [in]  Pointer to an array to receive the node IDs that would visited, given the activated nodes.
+  */
+  virtual bool activate(
+    const OdDbEvalNodeIdArray& activatedNodes,
+    OdDbEvalNodeIdArray* pActiveSubgraph) const;
+
+  /** \param pCycleNodes [in]  Pointer to an array to receive the node IDs that would be cyclic, given the activated nodes.
+  */
+  virtual bool activate(
+    const OdDbEvalNodeIdArray& activatedNodes,
+    OdDbEvalNodeIdArray* pActiveSubgraph,
+    OdDbEvalNodeIdArray* pCycleNodes) const;
+
+
+  /** \details
+    Returns true if and only if the specified node in this Graph object is active.
+
+    \param nodeId [in]  Node ID.
+    \param isActive [in]  True if and only if node is active.
+
+    \note
+    The return value of this function is always true. The active state of the node is returned via isActive.
+  */
+  virtual bool getIsActive(const OdDbEvalNodeId& nodeId,
+    bool& isActive) const;
+
+  /** \details
+    Returns true if and only if the specified Graph object is equal to this one.
+
+    \param pOther [in]  Pointer to the other Graph object.
+
+    \remarks
+    Returns true if and only if
+
+                this->subgraph(pOther) && pOther->subgraph(this)
+  */
+  virtual bool equals(const OdDbEvalGraph* pOther) const;
+
+
+  /** \details
+    Returns true if and only if the specified Graph object is a subgraph of this one.
+
+    \param pOther [in]  Pointer to the other Graph object.
+  */
+  virtual bool isSubgraphOf(const OdDbEvalGraph* pOther) const;
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+  virtual void applyPartialUndo(OdDbDwgFiler* pFiler, OdRxClass* pClassObj) ODRX_OVERRIDE;
+  virtual void copyFrom(const OdRxObject* p) ODRX_OVERRIDE;
+  virtual OdResult postInDatabase(OdDbDatabase*);
+  virtual void subHandOverTo(
+    OdDbObject* pNewObject) ODRX_OVERRIDE;
+};
+
+
+/** \details
+    This class holds the directed edge information between pairs of nodes in an OdDbEvalGraph instance.
+
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+
+    \sa
+    * OdDbEvalConnectable
+    * OdDbEvalContext
+    * OdDbEvalContextIterator
+    * OdDbEvalContextPair
+    * OdDbEvalExpr
+    * OdDbEvalGraph
+*/
+class DYNBLOCKS_EXPORT OdDbEvalEdgeInfo
+{
+public:
+  OdDbEvalEdgeInfo()
+    : mFlags(0), mRefCount(0)
+  {
+    mIdFrom = OdDbEvalGraph::kNullNodeId;
+    mIdTo = OdDbEvalGraph::kNullNodeId;
+  }
+
+  /** \param fromId [in]  Node Id of the "from" Node object sharing the edge.
+    \param toId [in]  Node Id of the "to" Node object sharing the edge.
+    \param flags [in]  For internal use only.
+    \param count [in]  Number of times this edge was added to the graph.
+  */
+  OdDbEvalEdgeInfo(OdDbEvalNodeId fromId,
+    OdDbEvalNodeId toId,
+    long           flags,
+    unsigned long  count)
+    : mIdFrom(fromId), mIdTo(toId), mFlags(flags), mRefCount(count)
+  {}
+
+  /** \details
+    Returns the Object ID of the originating node of this edge.
+  */
+  OdDbEvalNodeId from () const;
+
+  /** \details
+    Returns the Object ID of the terminating node of this edge.
+  */
+  OdDbEvalNodeId to () const;
+  /** \details
+    Returns the number of times this edge was added to the graph.
+  */
+  unsigned long refCount() const;
+
+  /** \details
+    Returns true if and only if this edge is invertible.
+    \remarks
+    An invertible edge can have its originating and terminating nodes swapped
+    based on which of the nodes is activated.
+  */
+  bool isInvertible () const;
+  /** \details
+    Returns true if and only if this edge is suppressed.
+    \remarks
+    As suppressed edge is temporarily removed from the graph during activation or evaluation. This applies only to
+    invertible pairs of edges.
+  */
+  bool isSuppressed  () const;
+
+  bool operator == (const OdDbEvalEdgeInfo& other) const;
+
+private:
+  OdDbEvalNodeId mIdFrom;
+  OdDbEvalNodeId mIdTo;
+  long mFlags;
+  unsigned long mRefCount;
+};
+
+
+/** \details
+    This class represents single nodes in OdDbEvalGraph objects.
+
+    \remarks
+    Each node reprsents an action or expression. The OdDbEvalGraph object calls each owned node's
+    evaluate() method while traversing the graph within the OdDbEvalGraph::evaluate() method.
+
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+
+    \sa
+    * OdDbEvalConnectable
+    * OdDbEvalContext
+    * OdDbEvalContextIterator
+    * OdDbEvalContextPair
+    * OdDbEvalEdgeInfo
+    * OdDbEvalGraph
+*/
+class DYNBLOCKS_EXPORT OdDbEvalExpr : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbEvalExpr);
+
+  OdDbEvalExpr();
+  virtual ~OdDbEvalExpr();
+
+  /** \details
+    Opens the OdDbEvalGraph object that owns this Node object.
+
+    \param openMode [in]  Mode in which to open the Graph object.
+
+    \remarks
+    Returns a SmartPointer to the opened OdDbEvalGraph if successful, otherwise a null SmartPointer.
+  */
+  OdDbEvalGraphPtr getGraph( OdDb::OpenMode openMode = OdDb::kForRead ) const;
+
+  /** \details
+    Returns the node ID of this Node object.
+
+    \remarks
+    An unique ID is assigned when a Node object it added to a Graph.
+
+    Returns OdDbGraph::kNullId if this Node object is not graph-resident.
+  */
+  OdDbEvalNodeId nodeId() const;
+
+  /** \details
+    Notification function called whenever this Node object has been added to a Graph object.
+
+    \param pGraph [in]  Pointer to the Graph object.
+
+    \remarks
+    Called by OdDbEvalGraph::addNode().
+
+    This function is called after the operation.
+  */
+  virtual void addedToGraph (OdDbEvalGraph* pGraph);
+
+  /** \details
+    Notification function called whenever this Node object has been removed a Graph object.
+
+    \param pGraph [in]  Pointer to the Graph object.
+
+    \remarks
+    Called by OdDbEvalGraph::removeNode().
+
+    This function is called after the operation.
+  */
+  virtual void removedFromGraph (OdDbEvalGraph* pGraph);
+
+
+  /** \details
+    Notification function called whenever a Node object with a shared edge
+    to this Node object has been removed a Graph object.
+
+    \param adjNodeId [in]  Node Id of the adjacent Node object.
+
+    \remarks
+    Called by OdDbEvalGraph::removeNode().
+
+    This function is called after the operation.
+  */
+  virtual void adjacentNodeRemoved (const OdDbEvalNodeId& adjNodeId);
+
+
+  /** \details
+    Notification function called whenever an edge of this Node object has been removed.
+
+    \param adjEdgeNodeId [in]  Node Id of the Node object sharing the edge.
+
+    \remarks
+    Called by OdDbEvalGraph::removeEdge().
+
+    This function is called after the operation.
+  */
+  virtual void adjacentEdgeRemoved (const OdDbEvalNodeId& adjEdgeNodeId);
+
+
+  /** \details
+    Notification function called whenever an edge has been added the Graph object.
+
+    \param fromId [in]  Node Id of the "from" Node object sharing the edge.
+    \param toId [in]  Node Id of the "to" Node object sharing the edge.
+    \param isInvertible [in]  True if and only if the edge the edge is invertible.
+    \remarks
+    Called by OdDbEvalGraph::addEdge().
+
+    When the edge is invertible, this function is called twice.
+
+    This function is called after the operation.
+  */
+  virtual void adjacentEdgeAdded (const OdDbEvalNodeId& fromId,
+    const OdDbEvalNodeId& toId,
+    bool isInvertible);
+
+
+  /** \details
+    Notification function called whenever this Node object
+    is about to be moved to another Graph object.
+
+    \param pFromGraph [in]  Pointer to the Graph object from which this Node object will be moved.
+
+    \remarks
+    Called by OdDbEvalGraph::addGraph().
+
+    This function is called before the operation.
+  */
+  virtual void movedFromGraph (OdDbEvalGraph* pFromGraph);
+
+  /** \details
+    Notification function called whenever this Node object
+    has been moved to another Graph object.
+
+    \param pIntoGraph [in]  Pointer to the Graph object into which this Node object was moved.
+
+    \remarks
+    Called by OdDbEvalGraph::addGraph().
+
+    This function is called after the operation.
+  */
+  virtual void movedIntoGraph (OdDbEvalGraph* pIntoGraph);
+
+
+
+  /** \details
+    Notification function called whenever a Node object
+    has been copied to another Graph object.
+
+    \param pIntoGraph [in]  Pointer to the Graph object into which a Node object was copied.
+
+    \remarks
+    Called by OdDbEvalGraph::copyFrom().
+
+    This function is called after the operation.
+  */
+  virtual void copiedIntoGraph(OdDbEvalGraph* pIntoGraph);
+
+  /** \details
+    Returns true if and only if this Node object can be activated.
+
+    \remarks
+    The default implementation of this function always returns true.
+  */
+  virtual bool isActivatable  () const;
+
+  /** \details
+    Notification function called whenever this Node object has been activated.
+
+    \param argumentActivateList [in]  Array of node IDs being activated.
+
+    \remarks
+    Called by OdDbEvalGraph::activate() or by OdDbEvalGraph::evaluate().
+
+    When the edge is invertible, this function is called twice.
+
+    This function is called after the operation.
+  */
+  virtual void activated           (OdDbEvalNodeIdArray& argumentActiveList);
+
+  /** \details
+    Notification function called whenever the Graph object is about to be traversed.
+
+    \param nodeIsActive [in]  True if and only if this Node object has been activated.
+
+    \remarks
+    Called by OdDbEvalGraph::evaluate().
+
+    This function is called before the operation.
+  */
+  virtual void graphEvalStart (bool nodeIsActive);
+
+
+  /** \details
+    Notification function called whenever the Graph object has been traversed.
+
+    \param nodeIsActive [in]  True if and only if this Node object has been activated.
+
+    \remarks
+    Called by OdDbEvalGraph::evaluate().
+
+    This function is called after the operation.
+  */
+  virtual void graphEvalEnd(bool nodeIsActive);
+
+  /** \details
+    Notification function called whenever the Graph object travesal is been terminated.
+
+    \param nodeIsActive [in]  True if and only if this Node object has been activated.
+
+    \remarks
+    Called by OdDbEvalGraph::evaluate().
+
+    This function is called after the operation.
+  */
+  virtual void graphEvalAbort(bool nodeIsActive);
+
+  /** \details
+    Evaluates the expression represented by this Node object.
+    \param evalContext [in]  Evaluation context.
+
+    \remarks
+    Called by OdDbEvalGraph::evaluate().
+
+    Returns true if and only if successful. Returning false terminates the Traversal.
+
+    evalContext may be NULL.
+  */
+  virtual bool evaluate(const OdDbEvalContext* evalContext);
+
+  /** \details
+    Returns true if and only if the specified Node object is equal to this Node object.
+
+    \param pOther [in]  Pointer to the other Node object.
+    \note
+    The default implementation of this function does nothing but
+    throw an eNotImplemented error.
+  */
+  virtual bool equals(const OdDbEvalExpr* pOther) const;
+
+  /** \details
+    Returns the value of the evaluated expression of this Node object.
+    \remarks
+    The value is updated with a call to OdDbEvalExpr::evaluate().
+  */
+  OdResBufPtr value() const;
+
+  OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  virtual OdResult postInDatabase(OdDbDatabase*);
+
+protected:
+
+  OdResBufPtr m_lastValue;
+  friend class OdDbEvalExprImpl;
+};
+
+
+/** \details
+    This class implements a runtime inspection interface for OdDbEvalExpr objects.
+
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+
+    \sa
+    * OdDbEvalContext
+    * OdDbEvalContextIterator
+    * OdDbEvalContextPair
+    * OdDbEvalEdgeInfo
+    * OdDbEvalExpr
+    * OdDbEvalGraph
+*/
+class DYNBLOCKS_EXPORT OdDbEvalConnectable : public OdDbEvalExpr
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbEvalConnectable);
+
+  virtual ~OdDbEvalConnectable();
+
+  /** \details
+    Returns an array of Connection names for this Connectable object.
+    \param connectionNames [out]  Receives an array of Connection names.
+  */
+  virtual void getConnectionNames (OdStringArray& connectionNames) const;
+
+  /** \details
+    Returns true if and only if this Connectable object has a connection with the specified name.
+    \param connectionName [in]  Connection name.
+  */
+  virtual bool hasConnectionNamed (const OdString& connectionName) const;
+
+
+  /** \details
+    Returns the type of the specified connection for this Connectable object.
+    \param connectionName [in]  Connection name.
+    \param connectionType [out]  Receives the connection type.
+    \remarks
+    Returns true if and only if a connection with the specified name exists.
+  */
+  virtual bool getConnectionType  (
+    const OdString& connectionName,
+    OdResBuf::ValueType& connectionType) const;
+
+
+  /** \details
+    Returns the value of the specified connection for this Connectable object.
+    \param connectionName [in]  Connection name.
+    \remarks
+    Returns a NULL SmartPointer if a connection with the specified name does not exist.
+  */
+  virtual OdResBufPtr getConnectionValue( const OdString& connectionName) const;
+
+
+  /** \details
+    Sets the value of the specified connection for this Connectable object.
+    \param connectionName [in]  Connection name.
+    \param pValue [in]  Pointer to the value.
+    \remarks
+    Returns true if and only if a connection with the specified name exists.
+  */
+  virtual bool setConnectionValue ( const OdString& connectionName, const OdResBuf* pValue);
+
+
+  /** \details
+    Connects this Connectable object to the specified Connectable object.
+
+    \remarks
+    Both objects must graph-resident.
+
+    \param thisConnectionName [in]  Connection name on this object.
+    \param sourceConnectableId [in]  Object ID of the other Connectable object.
+    \param sourceConnectionName [in]  Connection name on the other Connectable object.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool connectTo (
+    const OdString&      thisConnectionName,
+    OdDbEvalNodeId sourceConnectableId,
+    const OdString&      sourceConnectionName);
+
+
+  /** \details
+    Disconnects this Connectable object from the specified Connectable object.
+
+    \remarks
+    Both objects must graph-resident.
+
+    \param thisConnectionName [in]  Connection name on this object.
+    \param sourceConnectableId [in]  Object ID of the other Connectable object.
+    \param sourceConnectionName [in]  Connection name on the other Connectable object.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool disconnectFrom (
+    const OdString&      thisConnectionName,
+    OdDbEvalNodeId sourceConnectableId,
+    const OdString&      sourceConnectionName);
+
+  /** \details
+    Returns true if and only if a connection is allowed from this Connectable object
+    to the specified Connectable object.
+
+    \remarks
+    Both objects must graph-resident.
+
+    \param thisConnectionName [in]  Connection name on this object.
+    \param sourceConnectableId [in]  Object ID of the other Connectable object.
+    \param sourceConnectionName [in]  Connection name on the other Connectable object.
+  */
+  virtual bool connectionAllowed (
+    const OdString&      thisConnectionName,
+    OdDbEvalNodeId sourceConnectableId,
+    const OdString&      sourceConnectionName) const;
+
+
+  /** \details
+    Returns an array of Connectable objects to which this Connectable object
+    is connected.
+
+    \param thisConnectionName [in]  Connection name on this object.
+    \param connectedObjects [out]  Receives an array of object IDs.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool getConnectedObjects (
+    const OdString&      thisConnectionName,
+    OdDbEvalNodeIdArray& connectedObjects) const;
+
+  /** \details
+    Returns an array Connection names shared between this OdDbEvalConnectable object and another.
+
+    \param thisConnectionName [in]  Connection name on this object.
+    \param sourceConnectableId [in]  ID of the other Connectable object.
+    \param sourceConnectionNames [out]  Receives an array of connection names.
+
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool getConnectedNames (
+    const OdString&      thisConnectionName,
+    OdDbEvalNodeId sourceConnectableId,
+    OdStringArray&       sourceConnectionNames) const;
+protected:
+
+  OdDbEvalConnectable();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbEvalConnectable object pointers.
+*/
+typedef OdSmartPtr<OdDbEvalConnectable> OdDbEvalConnectablePtr;
+
+/** \details
+    This class represents application data used during the evaluation of an OdDbEvalGraph object.
+
+    \remarks
+    The graph passes the OdDbEvalContext object passed to OdDbEvalGraph::evaluate() to each node
+    in the graph traversed as a result of calling OdDbEvalExpr::evaluate().
+
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+
+    \sa
+    * OdDbEvalConnectable
+    * OdDbEvalContextIterator
+    * OdDbEvalContextPair
+    * OdDbEvalEdgeInfo
+    * OdDbEvalExpr
+    * OdDbEvalGraph
+*/
+class DYNBLOCKS_EXPORT OdDbEvalContext : public OdRxObject
+{
+public:
+
+  OdDbEvalContext();
+
+
+  virtual ~OdDbEvalContext();
+
+  ODRX_DECLARE_MEMBERS(OdDbEvalContext);
+
+
+  /** \details
+    Inserts the specified ContextPair into this Context object.
+    \param pair [in]  ContextPair to insert.
+    \remarks
+    Replaces any ContextPair with the same key.
+  */
+  virtual void insertAt (const OdDbEvalContextPair& pair);
+
+
+  /** \details
+    Removes the ContextPair with the specified key from this Context object.
+    \param key [in]  Key of ContextPair to remove.
+  */
+  virtual void removeAt (const OdString& key);
+
+
+  /** \details
+    Returns the ContextPair with the specified key from this Context object.
+
+    pair (I/0) Specifies / receives the ContextPair.
+
+    \remarks
+    pair is initialized with the key of the ContextPair to return. If the key exists in this Context object,
+    its associated value replaces the value in the specified ContextPair.
+
+    Returns true if and only if the pari exists.
+  */
+  virtual bool getAt (OdDbEvalContextPair& pair) const;
+
+
+  /** \details
+    Returns an Iterator object that can be used to traverse this Context object.
+  */
+  virtual OdDbEvalContextIteratorPtr newIterator() const;
+
+private:
+  OdDbImpEvalContext* m_pImp;
+  friend class OdDbImpEvalContextIterator;
+};
+
+/** \details
+    This class represents key - value pairs stored in an OdDbEvalContext object.
+
+    \remarks
+    Values stored are void pointers. Neither OdDbEvalContext nor OdDbEvalContextPair
+    manage the memory allocated to the values.
+
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+
+    \sa
+    * OdDbEvalConnectable
+    * OdDbEvalContext
+    * OdDbEvalContextIterator
+    * OdDbEvalEdgeInfo
+    * OdDbEvalExpr
+    * OdDbEvalGraph
+*/
+class DYNBLOCKS_EXPORT OdDbEvalContextPair
+{
+public:
+
+  OdDbEvalContextPair();
+
+  /** \param key [in]  ContextPair key.
+    \param value [in]  ContextPair value.
+  */
+  OdDbEvalContextPair(const OdString& key, void *value);
+
+  virtual ~OdDbEvalContextPair();
+
+  /** \details
+    Sets the key of this ContextPair object.
+    \param key [in]  ContextPair key.
+  */
+  void setKey (const OdString& key);
+
+  /** \details
+    Returns the key of this ContextPair object.
+    \param key [in]  ContextPair key.
+  */
+  const OdString key () const;
+
+  /** \details
+    Sets the value of this ContextPair object.
+    \param value [in]  ContextPair value.
+
+    \remarks
+    It is up to the caller to allocate and free memory pointed to by value.
+  */
+  void setValue (void* value);
+
+  /** \details
+    Returns the value of this ContextPair object.
+    \param value [in]  ContextPair value.
+  */
+  void*       value    () const;
+
+private:
+  OdString mKey;
+  void* mValue;
+};
+
+
+/** \details
+    This class implements iterators for OdDbEvalContextPair objects in an OdDbEvalContext instance.
+
+    \remarks
+    Instances are returned by OdDbEvalContext::newIterator()
+
+    Library: TD_DynBlocks
+    <group OdDb_Classes>
+
+    \sa
+    * OdDbEvalConnectable
+    * OdDbEvalContext
+    * OdDbEvalContextPair
+    * OdDbEvalEdgeInfo
+    * OdDbEvalExpr
+    * OdDbEvalGraph
+*/
+class DYNBLOCKS_EXPORT OdDbEvalContextIterator : public OdRxObject
+{
+public:
+  OdDbEvalContextIterator();
+
+  virtual ~OdDbEvalContextIterator();
+
+  ODRX_DECLARE_MEMBERS(OdDbEvalContextIterator);
+
+  /** \details
+    Sets this Iterator object to reference the EvalContextPair that it would normally return first.
+
+    \remarks
+    Allows multiple traversals of the Iterator list.
+  */
+  virtual void start();
+
+  /** \details
+    Increments this Iterator object.
+  */
+  virtual bool   next();
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+  virtual bool   done() const;
+
+  /** \details
+    Returns the ContextPair pointed to by this Iterator Object.
+  */
+  virtual OdDbEvalContextPair contextPair() const;
+
+private:
+  OdDbImpEvalContextIterator* m_pImp;
+  friend class OdDbImpEvalContext;
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalWatchers.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalWatchers.h
new file mode 100755
index 0000000..5671d6f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbEvalWatchers.h
@@ -0,0 +1,249 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODDB_EVALWATCHERS_H_
+#define _ODDB_EVALWATCHERS_H_
+
+#include "RxObject.h"
+#include "RxModule.h"
+#include "DbEntity.h"
+#include "DbHatch.h"
+
+/** \details
+    This class is the base Protocol Extension class for classes used for catching 
+    evaluation requests from associated objects.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This class can be used for OdDbHatch, OdDbDimAssoc, OdDbLeader and OdDbDimension classes.
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbEvalWatcherPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbEvalWatcherPE);
+
+  /** \details
+    Notification function called whenever an object receives a modified notification 
+    from an associated object.
+
+    \param pObj [in]  Pointer to the object that received the notification.
+    \param pAssocObj [in]  Pointer to the associated object.
+    
+    \remarks
+    This function is called whenever the associated object is being closed after being modified.
+
+    The default implementation of this function does nothing.
+    This function can be overridden in custom classes.
+  */
+  virtual void modified(OdDbObject* pObj, const OdDbObject* pAssocObj) = 0;
+  virtual void openedForModify(OdDbObject* pObj, const OdDbObject* pAssocObj);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbEvalWatcherPE object pointers.
+*/
+typedef OdSmartPtr<OdDbEvalWatcherPE> OdDbEvalWatcherPEPtr;
+
+
+/** \details
+    This class is the Protocol Extension class for updating OdDbHatch objects.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This protocol extension is added to the OdDbHatch class by Teigha while initializing.
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbHatchWatcherPE : public OdDbEvalWatcherPE
+{
+public:
+  virtual void modified(OdDbObject* pObj, const OdDbObject* pAssocObj);
+
+  /** \details
+    Notification function called whenever an OdDbHatch object is modified.
+
+    \param pHatch [in]  Pointer to the hatch object.
+    
+    \remarks
+    This function is called whenever the hatch object is being closed after being modified.
+
+    \remarks
+    This protocol extension is added to the OdDbHatch class by Teigha during initialization.
+
+    The default implementation of this function does nothing.
+    This function can be overridden in custom classes.
+  */
+  virtual void modifiedItself(OdDbHatch* pHatch);
+
+  /** \details
+    Updates the boundary of an OdDbHatch object.
+    
+      \param pHatch [in]  Pointer to the hatch object.
+      \param assocObjIds [in]  Array of modified associated OdDbEntity object IDs.
+  */
+  virtual void evaluate(OdDbHatch* pHatch, const OdDbObjectIdArray& assocObjIds);
+
+  /** \details
+    Returns a loop from the specified OdDbEntity object IDs for the specified OdDbHatch entity.
+
+    \param pHatch [in]  The OdDbHatch object.
+    \param loopType [in/out] Type of loop being updated.
+    \param objectIds [in] Array of OdDbEntity object IDs that comprise the loop.
+    \param edges [in/out] Array of edges that comprise the loop.
+  */
+  virtual void getLoopFromIds(const OdDbHatch* pHatch, 
+    OdUInt32& loopType, 
+    OdDbObjectIdArray& objectIds, 
+    EdgeArray& edges);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbHatchWatcherPE object pointers.
+*/
+typedef OdSmartPtr<OdDbHatchWatcherPE> OdDbHatchWatcherPEPtr;
+
+
+/** \details
+    This class is the Protocol Extension class for updating OdDbLeader objects.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This protocol extension is added to the OdDbLeader class by Teigha while initializing.
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbLeaderWatcherPE : public OdDbEvalWatcherPE
+{
+public:
+  virtual void modified(OdDbObject* pObj, const OdDbObject* pAssocObj);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLeaderWatcherPE object pointers.
+*/
+typedef OdSmartPtr<OdDbLeaderWatcherPE> OdDbLeaderWatcherPEPtr;
+
+
+/** \details
+    This class is the Protocol Extension class for updating OdDbDimension objects when their
+    associated OdDbDimStyleTableRecord objects are modified.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This protocol extension is added to the OdDbDimension class by Teigha while initializing.
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbDimensionWatcherPE : public OdDbEvalWatcherPE
+{
+public:
+  virtual void modified(OdDbObject* pObj, const OdDbObject* pDimStyle);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDimensionWatcherPE object pointers.
+*/
+typedef OdSmartPtr<OdDbDimensionWatcherPE> OdDbDimensionWatcherPEPtr;
+
+/** \details
+    This class is the Protocol Extension class for updating OdDbFcf objects when their
+    associated OdDbDimStyleTableRecord objects are modified.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This protocol extension is added to the OdDbFcf class by Teigha while initializing.
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbFcfWatcherPE : public OdDbEvalWatcherPE
+{
+public:
+  virtual void modified(OdDbObject* pObj, const OdDbObject* pDimStyle);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbFcfWatcherPE object pointers.
+*/
+typedef OdSmartPtr<OdDbFcfWatcherPE> OdDbDFcfWatcherPEPtr;
+
+/** \details
+    This class is the base Protocol Extension class for updating OdDbDimAssoc objects when their
+    associated objects are copied or erased.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This class can be used for OdDbDimAssoc class.
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbDimAssocWatcherPE : public OdDbEvalWatcherPE
+{
+public:
+    virtual void copied(OdDbObject *pObj, const OdDbObject *pAssocObj, const OdDbObject *pNewObj) = 0;
+    virtual void erased(OdDbObject *pObj, const OdDbObject *pAssocObj, bool erasing = true) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDimAssocWatcherPE object pointers.
+*/
+typedef OdSmartPtr<OdDbDimAssocWatcherPE> OdDbDimAssocWatcherPEPtr;
+
+/** \details
+    This class is the Protocol Extension class for updating OdDbTable objects when their
+    associated OdDbTableStyle objects are modified.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This protocol extension is added to the OdDbDimension class by Teigha while initializing.
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbTableWatcherPE : public OdDbEvalWatcherPE
+{
+public:
+  virtual void modified(OdDbObject* pObj, const OdDbObject* pTableStyle);
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbTableWatcherPE object pointers.
+*/
+typedef OdSmartPtr<OdDbTableWatcherPE> OdDbTableWatcherPEPtr;
+
+
+#endif // _ODDB_EVALWATCHERS_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExport.h
new file mode 100755
index 0000000..22ea075
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExport.h
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+/*  DbExport.h
+
+*/
+#ifndef _DB_EXPORT_DEFINED
+#define _DB_EXPORT_DEFINED
+
+#include "OdPlatformSettings.h"
+
+#ifdef ODA_DB_EXPORTS
+  #define TOOLKIT_EXPORT            OD_TOOLKIT_EXPORT
+  #define TOOLKIT_EXPORT_GLOBAL     OD_DLL_EXPORT
+  #define TOOLKIT_EXPORT_STATIC     OD_STATIC_EXPORT
+#else
+  #define TOOLKIT_EXPORT            OD_TOOLKIT_IMPORT
+  #define TOOLKIT_EXPORT_GLOBAL     OD_DLL_IMPORT
+  #define TOOLKIT_EXPORT_STATIC     OD_STATIC_IMPORT
+#endif
+
+
+#ifdef ODAFIRST_DLL_EXPORTS
+  #define FIRSTDLL_EXPORT           OD_TOOLKIT_EXPORT
+  #define FIRSTDLL_EXPORT_STATIC    OD_STATIC_EXPORT
+#else
+  #define FIRSTDLL_EXPORT           OD_TOOLKIT_IMPORT
+  #define FIRSTDLL_EXPORT_STATIC    OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _DB_EXPORT_DEFINED */
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExtrudedSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExtrudedSurface.h
new file mode 100755
index 0000000..5c7862f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbExtrudedSurface.h
@@ -0,0 +1,161 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbExtrudedSurface_h_Included_
+#define _DbExtrudedSurface_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbSurface.h"
+#include "DbSweepOptions.h"
+
+/** \details
+    This class implements a three-dimensional extruded surface entity.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbExtrudedSurface : public OdDbSurface
+{
+public:
+  OdDbExtrudedSurface ();
+  ODDB_DECLARE_MEMBERS(OdDbExtrudedSurface);
+
+  /** \details
+    Creates an extruded surface by sweeping a planar curve, region, or planar surface in the direction of the given vector using a distance equal to the length of the vector. 
+    	
+
+    \param pSweepEnt      [in] A pointer to the curve, region, or planar surface to be swept.
+    \param directionVec 	[in] A vector determining the distance and direction of the sweeping.
+    \param sweepOptions		[in] Sweep options.
+    \param OdStreamBuf 		[in] A pointer to an output stream buffer.
+	
+    \returns Returns eOk if successful or an appropriate error code otherwise.
+	
+	\remarks
+    Additional extruding parameters (for example, draft angle) can be specified with the sweepOptions object.
+	
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createExtrudedSurface (OdDbEntity* pSweepEnt,
+    const OdGeVector3d& directionVec, OdDbSweepOptions& sweepOptions, const OdStreamBuf *pSat = 0);
+
+  /** \details
+    Returns the sweep entity used to create the extruded surface.
+  */
+  OdDbEntityPtr getSweepEntity () const;
+
+  /** \details
+    Returns the extrusion vector.
+  */
+  OdGeVector3d getSweepVec() const;
+  
+  /** \details
+    Sets the extrusion vector.
+	
+	\param sweepVec [in] A new extrusion vector.
+  */
+  void setSweepVec(const OdGeVector3d& sweepVec);
+
+  /** \details
+    Returns the extrusion height.
+  */
+  double getHeight() const;
+
+  /** \details
+    Sets the extrusion height.
+	
+    \param height [in] A new height value.
+	
+    \remarks
+     This method is implemented only for Spatial modeler and returns eNotImplementedYet status 
+     for other modelers. 
+  */
+  void setHeight(double height);
+
+  /** \details
+    Returns sweep options.
+	
+    \param sweepOptions [out] A reference to an OdDbSweepOptions object containing sweep option values.
+  */
+  void getSweepOptions (OdDbSweepOptions& sweepOptions) const;
+
+  /** \details
+    Sets sweep options.
+	
+    \param sweepOptions [in] An OdDbSweepOptions object containing new option values.
+	
+    \remarks
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status 
+    for other modelers. 
+  */
+  void setSweepOptions (const OdDbSweepOptions& sweepOptions);
+
+  /** \details
+    Sets all data that defines the parameters of an extruded surface.
+	
+
+	sweepVec 		  [in] A new extrusion vector.
+	sweepOptions 	[in] An OdDbSweepOptions object containing new option values.
+	
+	\returns Returns eOk if extrude data is successfully set or an appropriate error code otherwise.
+	
+  \remarks
+	This method is implemented only for Spatial modeler and returns eNotImplementedYet status 
+	for other modelers. 
+  */
+  OdResult setExtrude(const OdGeVector3d& sweepVec,
+    const OdDbSweepOptions& sweepOptions);
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm );
+
+  // OdDbObject methods
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isDependent() const { return false; }
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbExtrudedSurface object pointers.
+*/
+typedef OdSmartPtr<OdDbExtrudedSurface> OdDbExtrudedSurfacePtr;
+
+#include "TD_PackPop.h"
+#endif //_DbExtrudedSurface_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFace.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFace.h
new file mode 100755
index 0000000..7f84eb6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFace.h
@@ -0,0 +1,206 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_FACE_
+#define _OD_DB_FACE_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+  <group OdDb_Classes> 
+
+  This class implements the /3d face/ object (3D Face entity) in the database. 
+  This class inherits the base functionality of entities. 
+
+  \sa
+  TD_Db
+    
+  \sa
+  <link db_face_sample.html, Example of Working with the 3D Face Object>
+
+  \sa
+  <link db_face.html, Working with 3D Faces>
+*/
+class TOOLKIT_EXPORT OdDbFace : public OdDbEntity
+{
+public:                
+  ODDB_DECLARE_MEMBERS(OdDbFace);
+
+  /** \details
+    Builds an instance of the /3d face/ entity.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_face_overview.html, Overview of 3D Faces>
+  */
+  OdDbFace();
+
+
+  /** \details
+    Gets the WCS coordinates of the vertex belonged to the 3d face entity using its index 
+    (DXF 10, 11, 12, or 13).
+
+    \param vertexIndex [in]  Vertex index 0, 1, 2, or 3.
+    \param vertexValue [out]  Reference to a variable in which this method must save the 3d face vertex 
+                    as a three-dimensional point instance.
+
+    \sa
+    <link db_face_sample.html, Example of Working with the 3D Face Object>
+
+    \sa
+    <link db_face_specific.html, Specific 3D Face Properties>
+
+    OdDbFace::setVertexAt() method
+  */
+  void getVertexAt( OdUInt16 vertexIndex, OdGePoint3d& vertexValue ) const;
+
+
+  /** \details
+    Sets the WCS coordinates of the vertex belonged to the 3d face entity using its index 
+    (DXF 10, 11, 12, or 13).
+
+    \param pointIndex [in]  Vertex index 0, 1, 2, or 3.
+    \param pointValue [in]  Three-dimensional point instance to be set the vertex.
+
+    \sa
+    <link db_face_sample.html, Example of Working with the 3D Face Object>
+
+    \sa
+    <link db_face_specific.html, Specific 3D Face Properties>
+
+    OdDbFace::getVertexAt() method
+  */
+  void setVertexAt( OdUInt16 vertexIndex, const OdGePoint3d& vertexValue );
+
+
+  /** \details
+    Determines the visiblity of 3d face edge at the specified index (DXF 70) and returns 
+    True if the edge is visible or False if the edge is invisible. 
+
+    \param edgeIndex [in]  Edge index 0, 1, 2, or 3.
+
+    \sa
+    <link db_face_sample.html, Example of Working with the 3D Face Object>
+
+    \sa
+    <link db_face_specific.html, Specific 3D Face Properties>
+
+    OdDbFace::makeEdgeVisibleAt(), OdDbFace::makeEdgeInvisibleAt() methods
+  */
+  bool isEdgeVisibleAt( OdUInt16 edgeIndex ) const;
+
+
+  /** \details
+    Turns to visible the 3d face edge at the specified index (DXF 70).
+
+    \param edgeIndex [in]  Edge index 0, 1, 2, or 3.
+
+    \sa
+    <link db_face_sample.html, Example of Working with the 3D Face Object>
+
+    \sa
+    <link db_face_specific.html, Specific 3D Face Properties>
+
+    OdDbFace::isEdgeVisibleAt(), OdDbFace::makeEdgeInvisibleAt() methods
+  */
+  void makeEdgeVisibleAt( OdUInt16 edgeIndex );
+
+
+  /** \details
+    Turns to invisible the 3d face edge at the specified index (DXF 70).
+
+    \param edgeIndex [in]  Edge index 0, 1, 2, or 3.
+
+    \sa
+    <link db_face_sample.html, Example of Working with the 3D Face Object>
+
+    \sa
+    <link db_face_specific.html, Specific 3D Face Properties>
+
+    OdDbFace::makeEdgeVisibleAt(), OdDbFace::isEdgeVisibleAt() methods
+  */
+  void makeEdgeInvisibleAt( OdUInt16 edgeIndex );
+
+  virtual OdResult getPlane(
+    OdGePlane& plane,
+    OdDb::Planarity& planarity) const;
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm);
+
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                        OdGsMarker gsMark, 
+                                        const OdGePoint3d& ,
+                                        const OdGeMatrix3d& , 
+                                        OdDbFullSubentPathArray& subentPaths, 
+                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
+
+
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                        OdGsMarkerArray& gsMarkers) const;
+};
+
+/** \details
+  The typified smart pointer for the /3d face/ object (3D Face entity). This template class 
+  is specialization of the OdSmartPtr class for the OdDbFace object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbFace> OdDbFacePtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFaceRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFaceRecord.h
new file mode 100755
index 0000000..69c026c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFaceRecord.h
@@ -0,0 +1,138 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_FACERECORD_
+#define _OD_DB_FACERECORD_
+
+#include "TD_PackPush.h"
+
+#include "DbVertex.h"
+
+/** \details
+  This class represents OdDbPolyFaceMesh faces in an OdDbDatabase instance. 
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbFaceRecord : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbFaceRecord);
+
+  OdDbFaceRecord();
+
+  /** \details
+    Returns the index of the parent PolyFaceMesh vertex that defines the specified corner (DXF 71-74) of
+    this FaceRecord entity.
+    
+    \param cornerIndex [in]  Corner index. [0 .. 3].
+
+    \remarks
+    Vertex indices start at 1.  
+    
+    Negative indices indicate the following edge is invisible. 
+    
+    A zero value for cornerIndex == 3 indicates a triangular face.
+  */
+  OdInt16 getVertexAt(
+    int cornerIndex) const;
+
+  /** \details
+    Sets the specified corner (DXF 71-74) of this FaceRecord entity to the specified index of 
+    the parent PolyFaceMesh mesh vertex. 
+    
+    \param cornerIndex [in]  Corner index. [0 .. 3].
+    \param vertexIndex [in]  Vertex index.
+    
+    \remarks
+    Vertex indices start at 1.  
+    
+    Negative indices indicate the following edge is invisible.
+
+    A zero value vertexIndex for cornerIndex == 3 defines a triangular face.
+  */
+  void setVertexAt(
+    int cornerIndex, 
+    OdInt16 vertexIndex);
+  
+  /** \details
+    Returns true if and only if the specified edge of this FaceRecord entity is visible (sign of DXF 71-74)
+
+    \param edgeIndex [in]  Edge index. [0 .. 3]
+  */
+  bool isEdgeVisibleAt(
+    int edgeIndex) const;
+  
+  /** \details
+    Sets visible the specified edge of this FaceRecord entity (sign of DXF 71-74)
+
+    \param edgeIndex [in]  Edge index. [0 .. 3]
+  */
+  void makeEdgeVisibleAt(
+    int edgeIndex);
+
+  /** \details
+    Sets invisible the specified edge of this FaceRecord entity (sign of DXF 71-74)
+
+    \param edgeIndex [in]  Edge index. [0 .. 3]
+  */
+  void makeEdgeInvisibleAt(
+    int edgeIndex);
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subErase(
+    bool erasing);
+
+  /** \note
+    Always returns eInvalidExtents.
+  */
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbFaceRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbFaceRecord> OdDbFaceRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFcf.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFcf.h
new file mode 100755
index 0000000..fa75c18
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFcf.h
@@ -0,0 +1,434 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef DBFCF_H
+#define DBFCF_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "DbDimStyleTableRecord.h"
+
+/** \details
+    This class represents feature control frames in an OdDbDatabase instance.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbFcf : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbFcf);
+
+  OdDbFcf();
+
+  enum whichLine 
+  {
+    kAll = -1
+  };
+  
+  /** \details
+    Sets the text string of this feature control frame (DXF 1).
+    
+    \param fcfText [in]  Text of this feature control frame.
+    
+    \remarks
+    The following escape sequences are used to specify the feature control frame:
+
+    <table>
+    Sequence        Meaning
+    \n	            newline 
+    {\\Fgdt;a}	    angularity
+    {\\Fgdt;b}	    perpendicularity
+    {\\Fgdt;c}	    flatness
+    {\\Fgdt;d}	    profile of a surface
+    {\\Fgdt;e}	    circularity
+    {\\Fgdt;f}	    parallelism
+    {\\Fgdt;g}	    cylindricity
+    {\\Fgdt;h}	    circular runout
+    {\\Fgdt;i}	    symmetry
+    {\\Fgdt;j}	    positional (+)
+    {\\Fgdt;k}	    profile of a line
+    {\\Fgdt;l}	    least material condition
+    {\\Fgdt;m}	    maximum material condition
+    {\\Fgdt;n}	    diameter
+    {\\Fgdt;p}	    positional(P)
+    {\\Fgdt;r}	    concentricity
+    {\\Fgdt;s}	    regardless of feature size
+    {\\Fgdt;t}	    total runout
+    {\\Fgdt;u}	    straightness
+    %%v	            vertical side of frame box
+    </table>
+  */
+  virtual void setText(
+    const OdString& fcfText);
+  
+  /** \details
+    Returns the text string of this feature control frame (DXF 1).
+
+    \param lineNo [in]  Index of the line desired.
+
+    \remarks
+    The following escape sequences are used to specify the feature control frame:
+    
+    <table>
+    Sequence        Meaning
+    \n	            newline 
+    {\\Fgdt;a}	    angularity
+    {\\Fgdt;b}	    perpendicularity
+    {\\Fgdt;c}	    flatness
+    {\\Fgdt;d}	    profile of a surface
+    {\\Fgdt;e}	    circularity
+    {\\Fgdt;f}	    parallelism
+    {\\Fgdt;g}	    cylindricity
+    {\\Fgdt;h}	    circular runout
+    {\\Fgdt;i}	    symmetry
+    {\\Fgdt;j}	    positional (+)
+    {\\Fgdt;k}	    profile of a line
+    {\\Fgdt;l}	    least material condition
+    {\\Fgdt;m}	    maximum material condition
+    {\\Fgdt;n}	    diameter
+    {\\Fgdt;p}	    positional (P)
+    {\\Fgdt;r}	    concentricity
+    {\\Fgdt;s}	    regardless of feature size
+    {\\Fgdt;t}	    total runout
+    {\\Fgdt;u}	    straightness
+    %%v	            vertical side of frame box
+    </table>
+      
+    \note
+    lineNo is not currently implemented. All lines of text will be returned, separated by \n.
+  */
+  virtual const OdString text(
+    int lineNo = kAll) const;
+
+  /** \details
+    Sets the insertion point of this feature control frame (WCS equivalent of DXF 10).
+
+    \param insPoint [in]  Insertion point.
+
+    \remarks
+    The insertion point is the middle of the left edge of the feature control frame.
+  */
+  virtual void setLocation(
+    const OdGePoint3d& insPoint);
+
+  /** \details
+    Returns the insertion point of this feature control frame (WCS equivalent of DXF 10).
+    
+    \remarks
+    The insertion point is the middle of the left edge of the feature control frame.
+  */
+  virtual OdGePoint3d location() const;
+
+  /** \details
+    Sets the orientation vectors of this feature control frame (DXF 210 and 11).
+    \param normal [in]  WCS normal to plane of feature control frame.
+    \param direction [in]  WCS X-axis direction vector of feature control frame. 
+  */
+  virtual void setOrientation(
+    const OdGeVector3d& normal, 
+    const OdGeVector3d& direction);
+
+  /** \details
+    Returns the WCS normal to the plane of this feature control frame (DXF 210).
+  */
+  virtual OdGeVector3d normal() const;
+
+  /** \details
+    Returns the WCS X-axis direction vector of this feature control frame (DXF 11).
+  */
+  virtual OdGeVector3d direction() const;
+
+  /** \details
+    Sets the dimension style (OdDbDimStyleTableRecord) to used by this feature control frame (DXF 3).
+    
+    \param dimStyleId [in]  Object ID of the dimension style.
+  */
+  virtual void setDimensionStyle(
+    OdDbHardPointerId dimStyleId);
+
+  /** \details
+    Returns the dimension style (OdDbDimStyleTableRecord) used by this feature control frame (DXF 3).
+  */
+  virtual OdDbHardPointerId dimensionStyle() const;
+
+  /** \details
+    Returns the DIMCLRD value of this object.  
+    \remarks
+    DIMCLRD specifies the color of dimension lines, leader lines, frames, and arrowheads. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   OdCmColor dimclrd() const;
+
+  /** \details
+    Returns the DIMCLRT value of this object.  
+    \remarks
+    DIMCLRT specifies the color of dimension text. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+  */
+  OdCmColor dimclrt() const;
+
+  /** \details
+    Returns the DIMGAP value of this object.  
+    \remarks
+    DIMGAP specifies the gap between dimension text and dimension lines.
+
+    A negative value for DIMGAP draws a reference box round the dimension text.
+
+    Text is placed inside a dimension line only if there will be two line segments
+    each as long as abs(DIMGAP). 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   double dimgap() const;
+
+  /** \details
+    Returns the DIMSCALE value of this object.  
+    \remarks
+    DIMSCALE is an scale factor applied to all dimension variables that
+    regulate sizes, offsets, and distances.
+
+    DIMSCALE serves as an overall "volume control" for dimensions
+    and leaders.
+
+    <table>
+    Value        Description
+    0,0          A "reasonable" value is computed for model space viewports.
+    > 0.0        If set to the inverse of the plot scale, plotted dimensions will be at the sizes specified by the other dimension variables. 
+    </table>
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   double dimscale() const;
+
+  /** \details
+    Returns the DIMTXSTY value of this object.  
+    \remarks
+    DIMTXSTY specifies the text style of the dimension text. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   OdDbObjectId dimtxsty() const;
+
+  /** \details
+    Returns the DIMTXT value of this object.  
+    \remarks
+    DIMTXT specifies the size of the dimension text. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   double dimtxt() const;
+
+  /** \details
+    Sets the DIMCLRD override for this object. 
+    \param val [in] New value for DIMCLRD.   
+    \remarks
+    DIMCLRD specifies the color of dimension lines, leader lines, frames, and arrowheads. 
+  */
+  void setDimclrd(
+    const OdCmColor& val);
+
+  /** \details
+    Sets the DIMCLRT override for this object. 
+    \param val [in] New value for DIMCLRT.   
+    \remarks
+    DIMCLRT specifies the color of dimension text. 
+  */
+   void setDimclrt(
+    const OdCmColor& val);
+
+  /** \details
+    Sets the DIMGAP override for this object. 
+    \param val [in] New value for DIMGAP.   
+    \remarks
+    DIMGAP specifies the gap between dimension text and dimension lines.
+
+    A negative value for DIMGAP draws a reference box round the dimension text.
+
+    Text is placed inside a dimension line only if there will be two line segments
+    each as long as abs(DIMGAP). 
+  */
+   void setDimgap(
+    double val);
+
+  /** \details
+    Sets the DIMSCALE override for this object. 
+    \param val [in] New value for DIMSCALE.   
+    \remarks
+    DIMSCALE is an scale factor applied to all dimension variables that
+    regulate sizes, offsets, and distances.
+
+    DIMSCALE serves as an overall "volume control" for dimensions
+    and leaders.
+
+    <table>
+    Value        Description
+    0.0          A "reasonable" value is computed for model space viewports.
+    > 0.0        If set to the inverse of the plot scale, plotted dimensions will be at the sizes specified by the other dimension variables. 
+    </table>
+  */
+   void setDimscale(
+    double val);
+
+  /** \details
+    Sets the DIMTXSTY override for this object. 
+    \param val [in] New value for DIMTXSTY.   
+    \remarks
+    DIMTXSTY specifies the text style of the dimension text. 
+  */
+   void setDimtxsty(
+    OdDbObjectId val);
+
+  /** \details
+    Sets the DIMTXT override for this object. 
+    \param val [in] New value for DIMTXT.   
+    \remarks
+    DIMTXT specifies the size of the dimension text. 
+  */
+   void setDimtxt(
+    double val);
+
+  virtual OdResult subGetClassID(void* pClsid) const ODRX_OVERRIDE;
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+  
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  /** \note
+     This function is an override for OdDbEntity::subSetDatabaseDefaults() to set 
+     the dimension style of this entity to the current style for the specified database.
+  */
+  virtual void subSetDatabaseDefaults(OdDbDatabase *pDb, bool doSubents) ODRX_OVERRIDE;
+
+  /** \details
+    Returns the WCS bounding points of this feature control frame.
+    
+    \param boundingPoints [out]  Receives the bounding points.
+    
+    \remarks
+    The points are returned as follows:
+    
+    <table>
+    Point                Corner
+    boundingPoints[0]    Top left
+    boundingPoints[1]    Top right
+    boundingPoints[2]    Bottom right
+    boundingPoints[3]    Bottom left
+    </table>
+  */
+  virtual void getBoundingPoints(
+    OdGePoint3dArray& boundingPoints) const ;
+
+  virtual void subClose() ODRX_OVERRIDE;
+
+  virtual void modified(const OdDbObject* pObject) ODRX_OVERRIDE;
+
+  /** \details
+    Copies the dimension style settings, including overrides, of this entity into the specified
+    dimension style table record.
+    
+    \param pRecord [out]  Receives the effective dimension style data.
+    
+    \remarks
+    The copied data includes the dimension style data with all applicable overrides. 
+  */
+  void getDimstyleData(
+    OdDbDimStyleTableRecord *pRecord) const;
+
+  /** \details
+    Copies the dimension style settings, including overrides, from the specified
+    dimension style table record to this entity.
+    
+    \param pDimstyle [in]  Pointer to non- database -resident dimension style record.
+    \param dimstyleID [in]  Database-resident dimension style record.
+
+    \remarks
+    The copied data includes the dimension style with all applicable overrides. 
+  */
+  void setDimstyleData(
+    const OdDbDimStyleTableRecord* pDimstyle);
+  void setDimstyleData(
+    OdDbObjectId dimstyleID);
+
+  /** \details
+    Appends the consecutive distinct corner points of this feature control frame to the specified array.
+    
+    \param ptArray [in/out] Receives corner points.
+  */
+  virtual void getBoundingPline(
+    OdGePoint3dArray& 
+    ptArray) const;
+  /*
+      virtual void getGripPoints(OdGePoint3dArray&, OdDbIntArray&, OdDbIntArray&) const;
+      virtual void moveGripPointsAt(const OdDbIntArray&, const OdGeVector3d&);
+  */
+  
+  virtual OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver, 
+    OdDbObjectId& replaceId, 
+    bool& exchangeXData) ODRX_OVERRIDE;
+
+  virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const ODRX_OVERRIDE;
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& idMap, OdDbObject* owner, bool bPrimary) const ODRX_OVERRIDE;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbFcf object pointers.
+*/
+typedef OdSmartPtr<OdDbFcf> OdDbFcfPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbField.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbField.h
new file mode 100755
index 0000000..759fb85
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbField.h
@@ -0,0 +1,519 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_DBFIELD_H
+#define OD_DBFIELD_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "DbFieldValue.h"
+#include "OdValue.h"
+
+class OdDbField;
+typedef OdSmartPtr<OdDbField> OdDbFieldPtr;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbField object pointers.
+*/
+typedef OdArray<OdDbFieldPtr> OdDbFieldArray;
+
+
+/** \details
+  Library: TD_Db
+  <group !!RECORDS_TD_APIRef>
+*/
+      typedef struct OdFd
+{
+  enum EvalFields
+  {
+    kEvalRecursive = 1
+  };
+  
+} OdFd;
+
+class OdDbField;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbField object pointers.
+*/
+typedef OdSmartPtr<OdDbField> OdDbFieldPtr;
+
+//*************************************************************************
+// OdDbField
+//*************************************************************************
+
+/** \details
+    This class represents Field objects in an OdDbDatabase instance.
+    
+    \remarks
+    Field objects store both the Field expression and their evaluated values.
+    
+    Fields can be evaluated by an evaluator to any one of the following data types: Long,         
+    Double, String, Date, Point, 3dPoint, ObjectId, Buffer, and Resbuf.       
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbField : public OdDbObject
+{
+public:
+  enum State
+  {
+    kInitialized        = 0x01,       // Field was initialized by the evaluator.
+    kCompiled           = 0x02,       // Field was compiled.
+    kModified           = 0x04,       // Field was modified, but not evaluated.
+    kEvaluated          = 0x08,       // Field was evaluated.
+    kHasCache           = 0x10,       // Field has evaluated cache.
+    kHasFormattedString = 0x20        // Internal use only. 
+  };
+  
+  enum EvalOption
+  {
+    kDisable            = 0,          // Do not evaluate field.
+    kOnOpen             = 0x01,       // Evaluate field when a drawing is opened.
+    kOnSave             = 0x02,       // Evaluate field when a drawing is saved.
+    kOnPlot             = 0x04,       // Evaluate field when a drawing is printed.
+    kOnEtransmit        = 0x08,       // Evaluate field when a drawing is etransmitted.
+    kOnRegen            = 0x10,       // Evaluate field when a drawing is regenerated.
+    kOnDemand           = 0x20,       // Evaluate field when demanded.
+    kAutomatic          = (kOnOpen | kOnSave | kOnPlot |  kOnEtransmit | kOnRegen | kOnDemand) // Evaluate automatically.
+  };
+  
+  enum EvalContext
+  {
+    kOpen               = 0x01,       // Field is being evaluated when a drawing is opened.
+    kSave               = 0x02,       // Field is being evaluated when a drawing is saved.
+    kPlot               = 0x04,       // Field is being evaluated when a drawing is printed.
+    kEtransmit          = 0x08,       // Field is being evaluated when a drawing is etransmitted.
+    kRegen              = 0x10,       // Field is being evaluated when a drawing is regenerated.
+    kDemand             = 0x20,       // Field is being evaluated when demanded.
+    kPreview            = 0x40        // Field is being evaluated when a drawing is previewed.
+  };
+  
+  enum EvalStatus
+  {
+    kNotYetEvaluated    = 0x01,       // Evaluation not performed.
+    kSuccess            = 0x02,       // Evaluation complete: Successful.
+    kEvaluatorNotFound  = 0x04,       // Evaluator for the field not found.
+    kSyntaxError        = 0x08,       // Evaluation complete: Syntax error in field code.
+    kInvalidCode        = 0x10,       // Evaluation complete: Invalid field code.
+    kInvalidContext     = 0x20,       // Evaluation complete: Invalid context to evaluate field.
+    kOtherError         = 0x40        // Evaluation complete: Other evaluation error.
+  };
+  
+  enum FieldCodeFlag
+  {
+    kRawCode            = 0x00,       // Returns the raw main field code. Ignored by setFieldCode().
+    kFieldCode          = 0x01,       // Returns the raw field code with child codes substituted. Ignored by setFieldCode().
+    kEvaluatedText      = 0x02,       // Returns the evaluated text. Ignored by setFieldCode().
+    kEvaluatedChildren  = 0x04,       // Returns the field code with evaluated text for child fields. Ignored by setFieldCode().
+    kObjectReference    = 0x08,       // Returns embedded text as references to child fields. Ignored by setFieldCode().
+    kAddMarkers         = 0x10,       // Returns embedded text as field codes enclosed in field markers. Ignored by setFieldCode().
+    kEscapeBackslash    = 0x20,       // Converts single backslashes to double backslashes. Ignored by setFieldCode().
+    kStripOptions       = 0x40,       // Strips the standard options from the field code. Ignored by setFieldCode().
+    kPreserveFields     = 0x80,       // Internal use only. Ignored by getFieldCode().
+    kTextField          = 0x100,      // Treats the field as text with embedded fields. Ignored by getFieldCode().
+    kPreserveOptions    = 0x200,      // Ignored by getFieldCode(). For internal use.
+    kDetachChildren     = 0x400,      // Ignored by getFieldCode(). For internal use.
+    kChildObjectReference = 0x800,    // Get child fields as object references. For internal use. 
+    kForExpression      = 0x1000      // Get the value in a format used in arithmatic expressions (e.g. vector child values are put in square brackets). For internal use. Ignored by setFieldCode().
+  };
+  
+  enum FilingOption
+  {
+    kSkipFilingResult   = 0x01        // Don't file field value.
+  };
+  
+public:
+  ODDB_DECLARE_MEMBERS(OdDbField);
+  
+  OdDbField();
+
+  // OdDbField(const OdString& fieldCode, bool bTextField = false);
+  // ~OdDbField(void);
+  
+  /** \details
+    Sets this Field object as a property of the specified object, and
+    adds it to the database.
+    
+    \param pOwner [in]  Pointer to the Owner object.
+    \param propertyName [in]  Name of the property.
+    
+    \remarks
+    The specified object must be database resident.
+  */
+  OdResult setInObject(
+    OdDbObject* pOwner, 
+    const OdString& propertyName);
+  
+  /** \details
+    Adds this Field object and its Child objects to the specified database.
+    
+    \param pDb [in]  Pointer to the database in which to post.
+  */
+  OdResult postInDatabase(
+    OdDbDatabase* pDb);
+  
+  /** \details
+    Returns the state of this Field object.
+    
+    \remarks
+    state() returns a combination of zero or more of the following: 
+    
+    <table>
+    Name                   Value    Description
+    kInitialized           0x01     Field was initialized by the evaluator.
+    kCompiled              0x02     Field was compiled.
+    kModified              0x04     Field code was modified, but not evaluated.
+    kEvaluated             0x08     Field was evaluated.
+    kHasCache              0x10     Field has evaluated cache.
+    kHasFormattedString    0x20     Internal use only. 
+    </table>
+  */
+  OdDbField::State state() const;
+  
+  /** \details
+    Returns the evaluation status of this Field object.
+    
+    \remarks
+    evaluationStatus() returns a combination of one or more of the following: 
+    
+    <table>
+    Name                   Value    Description
+    kNotYetEvaluated       0x01     Evaluation not complete.
+    kSuccess               0x02     Evaluation complete: Successful.
+    kEvaluatorNotFound     0x04     Evaluator for the field not found.
+    kSyntaxError           0x08     Evaluation complete: Field code syntax error.
+    kInvalidCode           0x10     Evaluation complete: Invalid field code.
+    kInvalidContext        0x20     Evaluation complete: Invalid context to evaluate field.
+    kOtherError            0x40     Evaluation complete: Other evaluation error.
+    </table>
+  */
+  OdDbField::EvalStatus evaluationStatus() const; 
+                                          // OdUInt32* errCode = 0, 
+                                         // OdString* errMsg = 0) const;
+
+  /** \details
+    Returns the evaluation option of this Field object.
+    
+    \remarks
+    evaluationOption() returns a combination of one or more of the following: 
+    
+    <table>
+    Name                   Value    Description
+    kDisable               0x00     Do not evaluate field.
+    kOnOpen                0x01     Evaluate field when a drawing is opened.
+    kOnSave                0x02     Evaluate field when a drawing is saveed.
+    kOnPlot                0x04     Evaluate field when a drawing is printed.
+    kOnEtransmit           0x08     Evaluate field when a drawing is etransmitted.
+    kOnRegen               0x10     Evaluate field when a drawing is regenerated.
+    kOnDemand              0x20     Evaluate field when demanded.
+    kAutomatic             0x3F     Evaluate field automatically.
+    </table>
+  */
+  OdDbField::EvalOption evaluationOption() const;
+  
+  /** \details
+    Sets the evaluation option for this Field object.
+    
+    \param evaluationOption [in]  Evaluation option.
+    
+    \remarks
+    evaluationStatus must be  a combination of one or more of the following: 
+    
+    <table>
+    Name                   Value    Description
+    kDisable               0        Do not evaluate field.
+    kOnOpen                0x01     Evaluate field when a drawing is opened.
+    kOnSave                0x02     Evaluate field when a drawing is saved.
+    kOnPlot                0x04     Evaluate field when a drawing is printed.
+    kOnEtransmit           0x08     Evaluate field when a drawing is etransmitted.
+    kOnRegen               0x10     Evaluate field when a drawing is regenerated.
+    kOnDemand              0x20     Evaluate field when demanded.
+    kAutomatic             0x3F     Evaluate field automatically.
+    </table>
+  */
+  OdResult setEvaluationOption(
+    OdDbField::EvalOption evaluationOption);
+    
+  /** \details
+    Returns the filing option of this Field object.
+    
+    \remarks
+    filingOption() returns zero or more of the following: 
+    
+    <table>
+    Name                   Value    Description
+    kSkipFilingResult      0x01     Do not file field value.
+    </table>
+  */
+  OdDbField::FilingOption filingOption() const;
+  
+  /** \details
+    Sets the filing option for this Field object.
+    
+    \remarks
+    filingOption must be zero or more of the following: 
+    
+    <table>
+    Name                   Value    Description
+    kSkipFilingResult      0x01     Do not file field value.
+    </table>
+  */
+  OdResult setFilingOption(
+    OdDbField::FilingOption filingOption);
+  
+  /** \details
+    Returns the ID of the evaluator for this Field object.
+    
+    \remarks
+    Returns an empty string if no evaluator has been set for this Field object, or if
+    the evaluator cannot be found.
+  */
+  OdString evaluatorId() const;
+
+  /** \details
+    Sets the ID of the evaluator for this Field object.
+
+    \param evaluatorId [in]  Evaluator ID.
+  */
+  OdResult setEvaluatorId(
+    const OdString& evaluatorId);
+  
+  /** \details
+    Returns true if and only if this Field object is text with child fields.
+  */
+  bool isTextField() const;
+
+  // OdResult convertToTextField (void);
+
+  // OdString getFieldCode     (OdDbField::FieldCodeFlag nFlag, OdArray<OdDbField*>* pChildFields = 0, 
+  //                           OdDb::OpenMode mode = OdDb::kForRead) const;
+  
+  /** \details
+    Returns the field code of this Field object in the specified form..
+    
+    \param flags [in]  Field code flags.
+    
+    \remarks
+    flags() returns a combination of one or more of the following:
+    
+    <table>
+    Name                   Value    Description
+    kFieldCode             0x01     Returns the raw field code. 
+    kEvaluatedText         0x02     Returns the evaluated text.
+    kEvaluatedChildren     0x04     Returns the field code with evaluated text for child fields.
+    kObjectReference       0x08     Returns the field code as an object reference.
+    kAddMarkers            0x10     Includes markers around field codes.
+    kEscapeBackslash       0x20     Converts single backslashes to double backslashes.
+    kStripOptions          0x40     Strips the standard options from the field code.
+    kPreserveFields        0x80     Internal use only. Ignored.
+    kTextField             0x100    Treats the field as text with embedded fields. Ignored.
+    </table>
+  */
+  OdString getFieldCode(
+    OdDbField::FieldCodeFlag flags);
+
+  //                      OdArray<OdDbField*>* pChildFields = 0, 
+  //                      OdDb::OpenMode mode = OdDb::kForRead) const;
+
+
+  /** \details
+    Sets the field code of this Field object in the specified form.
+    
+    \param fieldCode [in]  Field code.
+    \param flags [in]  Field code flags.
+    \param pChildFields [in]  Pointer to an array of child fields.
+    
+    \remarks
+    Child fields are the embedded fields of text fields, and 
+    nested fields of non-text fields.
+    
+    flags must be a combination of one or more of the following:
+    
+    <table>
+    Name                   Value    Description
+    kFieldCode             0x01     Returns the raw field code. Ignored.
+    kEvaluatedText         0x02     Returns the evaluated text. Ignored. 
+    kEvaluatedChildren     0x04     Returns the field code with evaluated text for child fields. Ignored.
+    kObjectReference       0x08     Returns the field code as an object reference. Ignored.
+    kAddMarkers            0x10     Includes markers around field codes. Ignored.
+    kEscapeBackslash       0x20     Converts single backslashes to double backslashes. Ignored.
+    kStripOptions          0x40     Strips the standard options from the field code. Ignored.
+    kPreserveFields        0x80     Internal use only.
+    kTextField             0x100    Treats the field as text with embedded fields.
+    </table>
+  */
+  OdResult setFieldCode(
+    const OdString& fieldCode, 
+    OdDbField::FieldCodeFlag flags = (OdDbField::FieldCodeFlag) 0,
+    OdDbFieldArray* pChildFields = 0);
+  
+  /** \details
+    Returns the number of child fields in this Field object.
+  */
+  OdUInt32  childCount() const;
+  
+  /** \details
+    Returns the specified child field in this Field object, and opens it in the specified mode.
+    
+    \param childIndex [in]  Child index.
+    \param openMode [in]   Mode to apply to the child field.
+  */
+  OdDbFieldPtr getChild(
+    OdUInt32 childIndex, 
+    OdDb::OpenMode openMode);
+
+  /** \details
+    Returns the output format for this Field object.
+  */
+  OdString getFormat() const;
+
+  /** \details
+    Sets the output format for this Field object.
+    
+    \param format [in]  Output format.
+    
+    \note
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setFormat(
+    const OdString& format);
+          
+
+  /** \details
+    Returns the evaluated Field object. 
+
+    \remarks
+    After creating a field object and setting the field code, 
+    call this method to evaluate the field.
+    If pDb is null, the field's database will be used if the field is a database resident. 
+    If it is null and the field is not a database resident, evaluation will fail if the 
+    field requires a database.
+
+    \param nContext [in]  Context in which the field is evaluated; the context flag can be one of the 
+    \param predefined OdDbField::EvalContext enum flags or a user-defined context flag.
+    \param pDb [in] Database to be used for the evaluation; can be null.
+    \param pNumFound [out] Pointer to receive the number of fields evaluated; can be null if not required.  
+    \param pNumEvaluated [out] Pointer to receive the number of fields evaluated; can be null if this information is not required. 
+  */
+  OdResult evaluate(
+    int nContext, 
+    OdDbDatabase* pDb = 0, 
+    int* pNumFound = 0, 
+    int* pNumEvaluated = 0);
+  
+  
+  /** \details
+    Returns the data type of this Field object in the specified form.
+    
+    \remarks
+    Returns kUnknown if the field has yet to be evaluated.
+
+    dataType() returns one of the following:
+    
+    <table>
+    Name                            Value
+    OdFieldValue::kUnknown          0
+    OdFieldValue::kLong             0x01
+    OdFieldValue::kDouble           0x02
+    OdFieldValue::kString           0x04
+    OdFieldValue::kDate             0x08
+    OdFieldValue::kPoint            0x10
+    OdFieldValue::k3dPoint          0x20
+    OdFieldValue::kObjectId         0x40
+    OdFieldValue::kBuffer           0x80
+    OdFieldValue::kResbuf           0x100
+    </table>
+  */
+  OdValue::DataType dataType() const;
+
+  /** \details
+    Returns the field evaluation string using the output format for this Field object.
+    
+    \param pValue [in]  Receives a SmartPointer to the evaluation string.
+    
+    \remarks
+    If returning an OdString, returns an empty string if not successful.
+    If returning an OdResult, returns eOk if successful, or returns an appropriate error code if unsuccessful.
+
+    \note
+    The string pointed to by pValue must be freed by the caller.
+  */
+              OdString getValue() const;
+  OdResult getValue(
+    OdFieldValue& pValue) const;
+            
+  bool  hasHyperlink() const;
+
+  OdResult getHyperlink(OdString& psName,
+                        OdString& psDescription, 
+                        OdString& psSubLocation,
+                        OdString& psDisplayString) const;
+
+  OdResult setHyperlink(const OdString& psName, 
+                        const OdString& psDescription, 
+                        const OdString& psSubLocation = OdString::kEmpty);
+
+  OdResult removeHyperlink();
+  
+  /** \details
+    Returns the data for the specified key of this Field object.
+    
+    \param key [in]  Key.
+  */
+  OdFieldValue getData(
+    const OdString& key) const;
+  
+  /** \details
+    Sets the data for the specified key of this Field object.
+    
+    \param key [in]  Key.
+    \param pData [in]  Pointer to the object containing the data. 
+  */
+  OdResult setData(
+    const OdString& key, 
+    const OdFieldValue& pData);
+
+public:
+  // Base class overrides
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual void subClose();
+};
+
+#define TEXT_FIELD_NAME OD_T("TEXT")
+
+TOOLKIT_EXPORT OdDbFieldPtr copyTextFieldToObject(OdDbFieldPtr srcField, OdDbObject* pObj);
+
+#include "TD_PackPop.h"
+#endif // OD_DBFIELD_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFieldValue.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFieldValue.h
new file mode 100755
index 0000000..d583c05
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFieldValue.h
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_DBFIELDVALUE_H
+#define OD_DBFIELDVALUE_H
+
+#include "TD_PackPush.h"
+#include "OdValue.h"
+
+class OdFieldValueImpl;
+class OdDbObjectId;
+class OdResBuf;
+class OdDbDwgFiler;
+class OdDbDxfFiler;
+
+/** \details
+    This class represents Field Values for OdField objects in an OdDbDatabase instance.
+    
+    \remarks
+    Field objects store both the Field expression and their evaluated values.
+    
+    Fields can be evaluated by an evaluator to any one of the following data types: OdInt32,         
+    Double, String, Date, Point, 3dPoint, ObjectId, Buffer, and Resbuf.       
+
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdFieldValue : public OdValue 
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFieldValue);
+  
+  OdFieldValue();
+  /** \param value [in]  Value.
+    \param date [in]  Date value
+    \param x [in]  X-coordinate of the point.
+    \param y [in]  Y-coordinate of the point.
+    \param z [in]  Z-coordinate of the point.
+    \param buffer [in]  Buffer.
+    \param bufferSize [in]  Buffer size.
+    \param resBuf [in]  ResBuf list.
+    \param objectId [in]  Object ID.
+  */
+  OdFieldValue(const OdFieldValue& value);
+  OdFieldValue(const OdString& value);
+  OdFieldValue(OdInt32 value);
+  OdFieldValue(double value);
+  OdFieldValue(const OdInt64& date);
+  OdFieldValue(double x, double y);
+  OdFieldValue(double x, double y, double z);
+  OdFieldValue(const OdDbObjectId& objectId);
+  OdFieldValue(const OdResBuf& resBuf);
+  // OdFieldValue(const OdRxVariantValue& var);
+  OdFieldValue(const void* buffer, OdInt32 bufferSize);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdFieldValue object pointers.
+*/
+typedef OdSmartPtr<OdFieldValue> OdFieldValuePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBFIELDVALUE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFiler.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFiler.h
new file mode 100755
index 0000000..b782be7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFiler.h
@@ -0,0 +1,1427 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef FILER_INCLUDED
+#define FILER_INCLUDED
+
+#include <float.h>
+#include "RxObject.h"
+#include "OdStreamBuf.h"
+#include "DbObjectId.h"
+
+class OdString;
+class OdGeScale3d;
+class OdBinaryData;
+class OdDbFilerController;
+class OdDbDatabase;
+class OdResBuf;
+typedef OdSmartPtr<OdResBuf> OdResBufPtr;
+class OdDbObjectId;
+class OdGePoint2d;
+class OdGePoint3d;
+class OdGeVector2d;
+class OdGeVector3d;
+class OdDbAuditInfo;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the abstract base class for classes that are used for file I/O operations
+    utilizing the .dwg and .dxf file formats.
+    
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbFiler : public OdRxObject
+{
+public:
+  OdDbFiler() {}
+
+  ODRX_DECLARE_MEMBERS(OdDbFiler);
+
+  /** \details
+    Returns the current status of this Filer object.    
+
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual OdResult filerStatus() const;
+
+  /** \details
+    Resets the current status of this Filer object to eOk.    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual void resetFilerStatus();
+
+  enum FilerType
+  {
+    kFileFiler         = 0, // .dwg and .dxf files
+    kCopyFiler         = 1,
+    kUndoFiler         = 2,  
+    kBagFiler          = 3,
+    kIdXlateFiler      = 4,
+    kPageFiler         = 5,
+    kDeepCloneFiler    = 6,
+    kIdFiler           = 7,
+    kPurgeFiler        = 8,
+    kWblockCloneFiler  = 9
+  };
+
+  /** \details
+    Returns the type of this Filer object.
+  */
+  virtual FilerType filerType() const = 0;
+
+  /** \details
+    Returns the database with which this Filer object is associated.  
+  */
+  virtual OdDbDatabase* database() const;
+
+  /** \details
+    Returns the version of this the file which this Filer object is associated.
+    
+    \remarks
+    The maintenance release version is returned if and only if pMaintReleaseVer != 0. 
+
+    \param pMaintReleaseVer [in]  Pointer to the MaintReleaseVer to receive the maintenance release version.
+  */
+  virtual OdDb::DwgVersion dwgVersion(
+    OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const;
+
+  /** \details
+    Returns the AuditInfo with which this Filer object is associated.  
+  */
+  OdDbAuditInfo * getAuditInfo() const;
+
+  /** \details
+    Sets the FilerController with which this Filer object is associated.
+    
+    \param pFilerController [in]  Pointer to the FilerController.
+  */
+  virtual void setController(
+    OdDbFilerController * pFilerController);
+
+  /** \details
+    Returns the FilerController with which this Filer object is associated.
+  */
+  virtual OdDbFilerController* controller() const;
+};
+
+///////////////////////////////////////////////////////////////////////
+/** \details
+  <group Other_Classes>
+
+  This class defines a function that returns the data type using 
+  the specified group code (DXF code). 
+
+  \sa
+  <link db_rb_verify.html, Determining the Data Type by Group Code>  
+*/
+class TOOLKIT_EXPORT OdDxfCode
+{
+public:
+  /** \details
+    Defines codes for data types.
+  */
+  typedef enum
+  {
+    Unknown         = 0,
+    Name            = 1,
+    String          = 2,
+    Bool            = 3,
+    Integer8        = 4,
+    Integer16       = 5,
+    Integer32       = 6,
+    Double          = 7,
+    Angle           = 8,
+    Point           = 9,
+    BinaryChunk     = 10,
+    LayerName       = 11,
+    Handle          = 12,
+    ObjectId        = 13,
+    SoftPointerId   = 14,
+    HardPointerId   = 15,
+    SoftOwnershipId = 16,
+    HardOwnershipId = 17,
+    Integer64       = 18
+  } Type;
+
+  /** \details
+    Returns the data type for the specified group code (DXF code).
+
+    \sa
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    \sa
+    <link db_rb_type.html, Getting and Setting Tagged Data>
+  */
+  static Type _getType( int code );
+};
+
+/** \details
+    This class is the abstract base class for classes that are used for file I/O operations
+    with DXF formats.
+    
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDxfFiler : public OdDbFiler
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbDxfFiler);
+  OdDbDxfFiler() {}
+
+  /** \details
+    Moves the I/O pointer to the specified location in this Filer object.
+    
+    \param offset [in]  Number of bytes.
+    \param seekType [in]  Seek type.
+    
+    \remarks
+    seekType must be one of the following:
+    
+    <table>
+    Name                    Value       Description.
+    OdDb::kSeekFromStart    SEEK_SET    Start of file.
+    OdDb::kSeekFromCurrent  SEEK_CUR    Current position of I/O pointer.
+    OdDb::kSeekFromEnd      SEEK_END    End of file.
+    </table>
+
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual void seek(
+    OdInt64 offset, 
+    OdDb::FilerSeekType seekType);
+  
+  /** \details
+    Returns the current I/O pointer position of this Filer object.
+    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual OdUInt64 tell() const;
+
+  /** \details
+    Returns the number of decimal places for DxfOut filing with this Filer object.
+    
+    \remarks
+    Returns kDfltPrec for DxfIn filing.
+    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual int precision() const;
+
+  /** \details
+    Sets the number of decimal places DxfOut filing with this Filer object.
+    
+    \param precision [in]  Decimal places.
+    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual void setPrecision(
+    int decimalDigits);
+
+  /** \details
+    Number of decimal digits written to ASCII DXF files.
+  */
+  enum 
+  { 
+    kDfltPrec = -1, 
+    kMaxPrec = DBL_DIG + 1 
+  };
+
+  /** \details
+    Indicates the start of xdata in this Filer object.
+  */
+  virtual void writeXDataStart();
+  
+  /** \details
+    Returns true if and only if default values are normally written 
+    to the file associated with this Filer object.
+  */
+    virtual bool includesDefaultValues() const;
+
+  /** \details
+    Returns true if and only if this Filer object is at the end of an object's data.
+    
+    \remarks
+    This will be true when the filter is at any of the following:
+
+    * A subclass data marker.
+    * The start of an object's xdata.
+    * The start of embedded object's data.
+    * The start of another object's data.
+    * The end of a file.
+
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual bool atEOF();
+  
+  /** \details
+    Returns true if and only if this Filer object is at the end of an object's data.
+    
+    \remarks
+    This will be true when the filter is at any of the following:
+    
+    * The start of another object's data.
+    * The end of a file.
+    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual bool atEndOfObject();
+  
+  /** \details
+    Returns true if and only if this Filer object is at the start of an object's xdata.
+    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual bool atExtendedData();
+
+  /** \details
+    Returns true if and only if this Filer object is at a subclass data marker with the specified subClassName.
+
+    \param subClassName [in]  Subclass name.
+    
+    \remarks
+    If true, the Filer advances the file pointer to the next item.
+     
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual bool atSubclassData(
+    const OdString& subClassName);
+
+  /** \details
+    Returns true if and only if this Filer object is at start of an embedded object.
+    
+    \remarks
+    If true, the Filer advances the file pointer to the next item.
+     
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual bool atEmbeddedObjectStart();
+
+  /** \details
+    Reads the next item of this Filer object, and returns its group code.
+    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+  virtual int nextItem();
+  
+  /** \details
+    Reads the next item of this Filer object, and returns a SmartPointer to its ResBuf.
+  */
+  virtual OdResBufPtr nextRb();
+  
+  /** \details
+    Writes the specified ResBuf object to this Filer object.
+    \param pRb [in]  Pointer to the ResBuf object.
+  */
+  virtual void writeRb(
+    const OdResBuf* pRb);
+
+  /** \details
+    Resets this Filer object to where it was before the last item was read.
+    
+    \note
+    The default implementation of this function does nothing but
+    throw an exception.
+  */
+    virtual void pushBackItem();
+  
+  /** \details
+    Returns the string value of the current item of this Filer object.
+    \param value [out]  Receives the value.
+  */
+  OdString rdString();
+  virtual void rdString(
+    OdString &value) = 0;
+
+  /** \details
+    Returns the bool value of the current item of this Filer object.
+  */
+  virtual bool rdBool() = 0;
+
+  /** \details
+    Returns the Int8 value of the current item of this Filer object.
+  */
+  virtual OdInt8 rdInt8() = 0;
+
+  /** \details
+    Returns the Int16 value of the current item of this Filer object.
+  */
+  virtual OdInt16 rdInt16() = 0;
+
+  /** \details
+    Returns the Int32 value of the current item of this Filer object.
+  */
+  virtual OdInt32 rdInt32() = 0;
+  
+  /** \details
+  Returns the Int64 value of the current item of this Filer object.
+  */
+  virtual OdInt64 rdInt64() = 0;
+
+  /** \details
+    Returns the UInt8 value of the current item of this Filer object.
+  */
+  virtual OdUInt8 rdUInt8() = 0;
+  
+  /** \details
+    Returns the UInt16 value of the current item of this Filer object.
+  */
+  virtual OdUInt16 rdUInt16() = 0;
+  
+  /** \details
+    Returns the UInt32 value of the current item of this Filer object.
+  */
+  virtual OdUInt32 rdUInt32() = 0;
+  
+  /** \details
+  Returns the UInt64 value of the current item of this Filer object.
+  */
+  virtual OdUInt64 rdUInt64() = 0;
+
+  /** \details
+    Returns the handle value of the current item of this Filer object.
+  */
+  virtual OdDbHandle rdHandle() = 0;
+  
+  /** \details
+    Returns the Object ID value of the current item of this Filer object.
+  */
+  virtual OdDbObjectId rdObjectId() = 0;
+
+  /** \details
+  Returns the angle value of the current item of this Filer object.
+  */
+  virtual double rdAngle() = 0;
+
+  /** \details
+    Returns the double value of the current item of this Filer object.
+  */
+  virtual double rdDouble() = 0;
+ 
+  /** \details
+    Returns the 2D point value of the current item of this Filer object.
+    \param value [out]  Receives the value.
+  */
+  virtual void rdPoint2d(
+    OdGePoint2d& value) = 0;
+    
+  /** \details
+    Returns the 3D point value of the current item of this Filer object.
+    \param value [out]  Receives the value.
+  */
+  virtual void rdPoint3d(
+    OdGePoint3d& value) = 0;
+
+  /** \details
+    Returns the 2D vector value of the current item of this Filer object.
+    \param value [out]  Receives the value.
+  */
+  virtual void rdVector2d(
+    OdGeVector2d& value) = 0;
+
+  /** \details
+    Returns the 3D vector value of the current item of this Filer object.
+    \param value [out]  Receives the value.
+  */
+  virtual void rdVector3d(
+    OdGeVector3d& value) = 0;
+  
+  /** \details
+    Returns the scale value of the current item of this Filer object.
+    \param value [out]  Receives the value.
+  */
+  virtual void rdScale3d(
+    OdGeScale3d& value) = 0;
+    
+  /** \details
+    Returns the BinaryData value of the current item of this Filer object.
+    
+    \param value [out]  Receives the value.
+  */
+  virtual void rdBinaryChunk(
+    OdBinaryData& value) = 0;
+
+  /** \details
+    Copies the current item from the specified Filer object to this one.
+    \param pSource [in]  Pointer to the source Filer.
+  */
+  virtual void copyItem(
+    OdDbDxfFiler * pSource);
+
+  /** \details
+    Writes the specified name value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+  virtual void wrName(
+    int groupCode,
+    const OdString& value) = 0;
+    
+  /** \details
+    Writes the specified string value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrString(
+    int groupCode, 
+    const OdString& value) = 0;
+    
+  /** \details
+    Writes the specified optional string value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != NULL) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    void wrStringOpt(
+    int groupCode, 
+    const OdString& value);
+
+  /** \details
+    Writes the specified subclass data marker to this Filer object.
+      
+    \param value [in]  Value.
+  */
+    void wrSubclassMarker(
+    const OdString &value);
+
+  /** \details
+    Writes the embedded object start marker to this Filer object.
+  */
+    void wrEmbeddedObjectStart();
+
+  /** \details
+    Writes the specified bool value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrBool(
+    int groupCode, 
+    bool value) = 0;
+    
+  /** \details
+    Writes the specified optional bool value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrBoolOpt(
+    int groupCode, 
+    bool value, 
+    bool defaultValue);
+
+  /** \details
+    Writes the specified Int8 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrInt8(
+    int groupCode, 
+    OdInt8 value) = 0;
+    
+  /** \details
+    Writes the specified optional Int8 value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrInt8Opt(
+    int groupCode, 
+    OdInt8 value, 
+    OdInt8 defaultValue);
+
+  /** \details
+    Writes the specified UInt8 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrUInt8(
+    int groupCode, 
+    OdUInt8 value) = 0;
+  /** \details
+    Writes the specified optional UInt8 value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrUInt8Opt(
+    int groupCode, 
+    OdUInt8 value, 
+    OdUInt8 defaultValue);
+
+  /** \details
+    Writes the specified Int16 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrInt16(
+    int groupCode, 
+    OdInt16 value) = 0;
+    
+  /** \details
+    Writes the specified optional Int16 value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrInt16Opt(
+    int groupCode, 
+    OdInt16 value, 
+    OdInt16 defaultValue);
+
+  /** \details
+    Writes the specified UInt16 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrUInt16(
+    int groupCode, 
+    OdUInt16 value) = 0;
+    
+  /** \details
+    Writes the specified optional UInt16 value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrUInt16Opt(
+    int groupCode, 
+    OdUInt16 value, 
+    OdUInt16 defaultValue);
+
+  /** \details
+    Writes the specified Int32 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrInt32(
+    int groupCode, 
+    OdInt32 value) = 0;
+    
+  /** \details
+    Writes the specified optional Int32 value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrInt32Opt(
+    int groupCode, 
+    OdInt32 value, 
+    OdInt32 defaultValue);
+
+  /** \details
+    Writes the specified UInt32 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrUInt32(
+    int groupCode, 
+    OdUInt32 value) = 0;
+    
+  /** \details
+    Writes the specified optional UInt32 value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrUInt32Opt(
+    int groupCode, 
+    OdUInt32 value, 
+    OdUInt32 defaultValue);
+
+  /** \details
+    Writes the specified Int64 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrInt64(
+    int groupCode, 
+    OdInt64 value) = 0;
+
+  /** \details
+    Writes the specified optional Int64 value to this Filer object.
+
+    \remarks
+    value is written if and only if
+    (value != default) || (includesDefaultValues() == true)
+
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrInt64Opt(
+    int groupCode, 
+    OdInt64 value, 
+    OdInt64 defaultValue);
+
+  /** \details
+    Writes the specified UInt64 value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrUInt64(
+    int groupCode, 
+    OdUInt64 value) = 0;
+
+  /** \details
+    Writes the specified optional UInt64 value to this Filer object.
+
+    \remarks
+    value is written if and only if
+    (value != default) || (includesDefaultValues() == true)
+
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrUInt64Opt(
+    int groupCode, 
+    OdUInt64 value, 
+    OdUInt64 defaultValue);
+
+  /** \details
+    Writes the specified bool value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrHandle(
+    int groupCode, 
+    OdDbHandle value) = 0;
+
+  /** \details
+    Writes the specified Object ID value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+  */
+    virtual void wrObjectId(
+    int groupCode, 
+    OdDbObjectId value) = 0;
+    
+  /** \details
+    Writes the specified optional Object ID value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != NULL) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+  */
+  void wrObjectIdOpt(
+    int groupCode, 
+    OdDbObjectId value);
+
+  /** \details
+    Writes the specified angle value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param precision [in]  Decimal places.
+  */
+    virtual void wrAngle(
+    int groupCode, 
+    double value, 
+    int precision = kDfltPrec) = 0;
+    
+  /** \details
+    Writes the specified optional angle value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+    \param precision [in]  Decimal places.
+  */
+  void wrAngleOpt(
+    int groupCode, 
+    double value, 
+    double defaultValue = 0., 
+    int precision = kDfltPrec);
+
+  /** \details
+    Writes the specified double value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param precision [in]  Decimal places.
+  */
+    virtual void wrDouble(
+    int groupCode, 
+    double value, 
+    int precision = kDfltPrec) = 0;
+    
+  /** \details
+    Writes the specified optional double value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+    \param precision [in]  Decimal places.
+  */
+  void wrDoubleOpt(
+    int groupCode, 
+    double value, 
+    double defaultValue = 0., 
+    int precision = kDfltPrec);
+
+  /** \details
+    Writes the specified 2D point value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param precision [in]  Decimal places.
+  */
+    virtual void wrPoint2d(
+    int groupCode, 
+    const OdGePoint2d& value, 
+    int precision = kDfltPrec) = 0;
+    
+  /** \details
+    Writes the specified optional 2D point value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+    \param precision [in]  Decimal places.
+  */
+  void wrPoint2dOpt(
+    int groupCode, 
+    const OdGePoint2d& value, 
+    const OdGePoint2d& defaultValue, 
+    int precision = kDfltPrec);
+
+  /** \details
+    Writes the specified 3D point value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param precision [in]  Decimal places.
+  */
+    virtual void wrPoint3d(
+    int groupCode, 
+    const OdGePoint3d& value, 
+    int precision = kDfltPrec) = 0;
+    
+  /** \details
+    Writes the specified optional 3D point value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+    \param precision [in]  Decimal places.
+  */
+  void wrPoint3dOpt(
+    int groupCode, 
+    const OdGePoint3d& value, 
+    const OdGePoint3d& defaultValue, 
+    int precision = kDfltPrec);
+
+  /** \details
+    Writes the specified 2D vector value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param precision [in]  Decimal places.
+  */
+    virtual void wrVector2d(
+    int groupCode, 
+    const OdGeVector2d& value, 
+    int precision = kDfltPrec) = 0;
+    
+  /** \details
+    Writes the specified optional 2D vector value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+    \param precision [in]  Decimal places.
+  */
+  void wrVector2dOpt(
+    int groupCode, 
+    const OdGeVector2d& value, 
+    const OdGeVector2d& defaultValue, 
+    int precision = kDfltPrec);
+
+  /** \details
+    Writes the specified 3D vector value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param precision [in]  Decimal places.
+  */
+    virtual void wrVector3d(
+    int groupCode, 
+    const OdGeVector3d& value, 
+    int precision = kDfltPrec) = 0;
+    
+  /** \details
+    Writes the specified optional 3D vector value to this Filer object.
+    
+    \remarks
+    value is written if and only if
+              (value != default) || (includesDefaultValues() == true)
+     
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param defaultValue [in]  Default value.
+    \param precision [in]  Decimal places.
+  */
+  void wrVector3dOpt(
+    int groupCode, 
+    const OdGeVector3d& value, 
+    const OdGeVector3d& defaultValue, 
+    int precision = kDfltPrec);
+
+  /** \details
+    Writes the specified 2D scale  value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param precision [in]  Decimal places.
+  */
+    virtual void wrScale3d(
+    int groupCode, 
+    const OdGeScale3d& value, 
+    int precision = kDfltPrec) = 0;
+
+  /** \details
+    Writes the specified BinaryChunk value to this Filer object.
+    \param groupCode [in]  Group code.
+    \param value [in]  Value.
+    \param numBytes [in]  Number of bytes.
+    \param buffer [in]  array of bytes.
+  */
+    virtual void wrBinaryChunk(
+    int groupCode, 
+    const OdUInt8* buffer, 
+    OdUInt32 numBytes) = 0;
+    
+  void wrBinaryChunk(
+    int groupCode, 
+    const OdBinaryData& value);
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDxfFiler object pointers.
+*/
+typedef OdSmartPtr<OdDbDxfFiler> OdDbDxfFilerPtr;
+
+/** \details
+    This class implements OdError objects with Result codes of eDwgObjectImproperlyRead.
+    
+    Library: TD_Db
+    <group Error_Classes> 
+*/
+class TOOLKIT_EXPORT OdError_DwgObjectImproperlyRead : public OdError
+{
+public:
+  OdError_DwgObjectImproperlyRead() : OdError(eDwgObjectImproperlyRead){}
+};
+
+/** \details
+    This class is the abstract base class for classes that are used for file I/O operations
+    with the .dwg file format.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDwgFiler : public OdDbFiler
+{
+public:
+  OdDbDwgFiler() {}
+
+  ODRX_DECLARE_MEMBERS(OdDbDwgFiler);
+
+  /** \details
+    Moves the I/O pointer to the specified location in this Filer object.
+    
+    \param offset [in]  Number of bytes.
+    \param seekType [in]  Seek type.
+    
+    \remarks
+    seekType must be one of the following:
+    
+    <table>
+    Name                    Value       Description.
+    OdDb::kSeekFromStart    SEEK_SET    Start of file.
+    OdDb::kSeekFromCurrent  SEEK_CUR    Current position of I/O pointer.
+    OdDb::kSeekFromEnd      SEEK_END    End of file.
+    </table>
+  */
+  virtual void seek(
+    OdInt32 offset, 
+    OdDb::FilerSeekType seekType) = 0;
+
+  /** \details
+    Returns the current I/O pointer position of this Filer object.
+  */
+  virtual OdUInt32 tell() const = 0;
+
+  /** \details
+    Returns the bool value of the current item of this Filer object.
+  */
+  virtual bool rdBool() = 0;
+
+  /** \details
+    Returns the string value of the current item of this Filer object.
+
+  */
+  virtual OdString rdString() = 0;
+
+  
+  /** \details
+    Returns the specified number of bytes from this Filer object.
+    \param buffer [out]  Receives the bytes.
+    \param numBytes [in]  Number of bytes.
+  */
+  virtual void rdBytes(
+    void* buffer, 
+    OdUInt32 numBytes) = 0;
+
+
+  /** \details
+    Returns the Int8 value of the current item of this Filer object.
+  */
+  virtual OdInt8 rdInt8() = 0;
+  
+  /** \details
+    Returns the UInt8 value of the current item of this Filer object.
+  */
+  virtual OdUInt8 rdUInt8() = 0;
+
+  /** \details
+    Returns the Int16 value of the current item of this Filer object.
+  */
+  virtual OdInt16 rdInt16() = 0;
+
+  /** \details
+    Returns the Int32 value of the current item of this Filer object.
+  */
+  virtual OdInt32 rdInt32() = 0;
+
+  /** \details
+    Returns the Int64 value of the current item of this Filer object.
+  */
+  virtual OdInt64 rdInt64() = 0;
+
+  /** \details
+    Returns the memory address value of the current item of this Filer object.
+  */
+  virtual void* rdAddress();
+
+  /** \details
+    Returns the double value of the current item of this Filer object.
+  */
+  virtual double rdDouble() = 0;
+
+  /** \details
+    Returns the handle value of the current item of this Filer object.
+  */
+  virtual OdDbHandle rdDbHandle() = 0;
+
+  /** \details
+    Returns the SoftOwnershipId value of the current item of this Filer object.
+  */
+  virtual OdDbObjectId rdSoftOwnershipId() = 0;
+
+  /** \details
+    Returns the HardOwnershipId value of the current item of this Filer object.
+  */
+  virtual OdDbObjectId rdHardOwnershipId() = 0;
+
+  /** \details
+    Returns the HardPointerId value of the current item of this Filer object.
+  */
+  virtual OdDbObjectId rdHardPointerId() = 0;
+
+  /** \details
+    Returns the SoftPointerId value of the current item of this Filer object.
+  */
+  virtual OdDbObjectId rdSoftPointerId() = 0;
+
+  /** \details
+    Returns the 2D point value of the current item of this Filer object.
+  */
+  virtual OdGePoint2d rdPoint2d() = 0;
+    
+  /** \details
+    Returns the 3D point value of the current item of this Filer object.
+  */
+  virtual OdGePoint3d rdPoint3d() = 0;
+
+  /** \details
+    Returns the 2D vector value of the current item of this Filer object.
+  */
+  virtual OdGeVector2d rdVector2d() = 0;
+
+  /** \details
+    Returns the 3D vector value of the current item of this Filer object.
+  */
+  virtual OdGeVector3d rdVector3d() = 0;
+  
+  /** \details
+    Returns the scale value of the current item of this Filer object.
+  */
+  virtual OdGeScale3d rdScale3d() = 0;
+
+  /** \details
+    Writes the specified bool value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrBool(
+    bool value) = 0;
+
+  /** \details
+    Writes the specified string value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrString(
+    const OdString &value) = 0;
+    
+  /** \details
+    Writes the specified number of bytes to this Filer object.
+    \param buffer [in]  array of bytes.
+    \param numBytes [in]  Number of bytes.
+  */
+  virtual void wrBytes(
+    const void* buffer, 
+    OdUInt32 numBytes) = 0;
+
+  /** \details
+    Writes the specified Int8 value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrInt8(
+    OdInt8 value) = 0;
+    
+  /** \details
+    Writes the specified UInt8 value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrUInt8(
+    OdUInt8 value) = 0;
+
+  /** \details
+    Writes the specified Int16 value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrInt16(
+    OdInt16 value) = 0;
+    
+  /** \details
+    Writes the specified Int32 value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrInt32(
+    OdInt32 value) = 0;
+
+  /** \details
+    Writes the specified Int64 value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrInt64(
+    OdInt64 value) = 0;
+
+  /** \details
+    Writes the specified memory address value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrAddress(
+    const void* value);
+    
+  /** \details
+    Writes the specified double value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrDouble(double value) = 0;
+
+  /** \details
+    Writes the specified handle value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrDbHandle(
+    const OdDbHandle& value) = 0;
+
+  /** \details
+    Writes the specified SoftOwnershipId value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrSoftOwnershipId(
+    const OdDbObjectId& value) = 0;
+    
+  /** \details
+    Writes the specified HardOwnershipId value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrHardOwnershipId(
+    const OdDbObjectId& value) = 0;
+
+  /** \details
+    Writes the specified SoftPointerId value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrSoftPointerId(
+    const OdDbObjectId& value) = 0;
+
+  /** \details
+    Writes the specified HardPointerId value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrHardPointerId(
+    const OdDbObjectId& value) = 0;
+
+  /** \details
+    Writes the specified 2D point value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrPoint2d(
+    const OdGePoint2d& value) = 0;
+
+  /** \details
+    Writes the specified 3D point value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrPoint3d(
+    const OdGePoint3d& value) = 0;
+  
+  /** \details
+    Writes the specified 2D vector value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrVector2d(
+    const OdGeVector2d& value) = 0;
+  
+  /** \details
+    Writes the specified 3D vector value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrVector3d(
+    const OdGeVector3d& value) = 0;
+  
+  /** \details
+    Writes the specified 3D scale value to this Filer object.
+    \param value [in]  Value.
+  */
+    virtual void wrScale3d(
+    const OdGeScale3d& value) = 0;
+  /** \details
+    Returns true if and only if this Filer object wishes to see
+    all object references.
+    
+    \remarks
+    The default implementation of this function always returns true. 
+  */
+  virtual bool usesReferences() const;
+  
+  /*!DOM*/
+  /** \details
+  */
+  virtual void addReference(OdDbObjectId id, OdDb::ReferenceType rt);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDwgFiler object pointers.
+*/
+typedef OdSmartPtr<OdDbDwgFiler> OdDbDwgFilerPtr;
+
+
+/** \details
+    This class is the empty implementation of a base class 
+    for classes that are used as ID Filers.
+    
+    Library: TD_Db
+    
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdIdFiler : public OdDbDwgFiler
+{
+public:
+  OdIdFiler() : m_pController(NULL) {}
+
+  void seek(
+    OdInt32 offset, 
+    OdDb::FilerSeekType seekType);
+  
+  OdUInt32 tell() const;
+  
+  OdResult filerStatus() const;
+  
+  void resetFilerStatus();
+  
+  FilerType filerType() const;
+  
+  OdDb::DwgVersion dwgVersion(
+    OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const;
+    
+  bool rdBool();
+  
+  OdString rdString();
+  
+  void rdBytes(
+    void* buffer, 
+    OdUInt32 numBytes);
+
+  OdInt8 rdInt8();
+  OdUInt8 rdUInt8();
+  OdInt16 rdInt16();
+  OdInt32 rdInt32();
+  OdInt64 rdInt64();
+  double rdDouble();
+  OdDbHandle rdDbHandle();
+
+  OdDbObjectId rdSoftOwnershipId();
+  OdDbObjectId rdHardOwnershipId();
+  OdDbObjectId rdHardPointerId();
+  OdDbObjectId rdSoftPointerId();
+
+  OdGePoint2d rdPoint2d();
+  OdGePoint3d rdPoint3d();
+  OdGeVector3d rdVector3d();
+  OdGeVector2d rdVector2d();
+  OdGeScale3d rdScale3d();
+
+  void wrBool(
+    bool value);
+
+  void wrString(
+    const OdString &value);
+    
+  void wrBytes(
+    const void* buffer, 
+    OdUInt32 numBytes);
+
+  void wrInt8(
+    OdInt8 value);
+  void wrUInt8(
+    OdUInt8 value);
+  void wrInt16(
+    OdInt16 value);
+  void wrInt32(
+    OdInt32 value);
+  void wrInt64(
+    OdInt64 value);
+  void wrDouble(
+    double value);
+  void wrDbHandle(
+    const OdDbHandle& value);
+
+  void wrPoint2d(
+    const OdGePoint2d& value);
+  void wrPoint3d(
+    const OdGePoint3d& value);
+  void wrVector2d(
+    const OdGeVector2d& value);
+  void wrVector3d(
+    const OdGeVector3d& value);
+  void wrScale3d(
+    const OdGeScale3d& value);
+
+  void setController(
+    OdDbFilerController* pFilerController) { m_pController = pFilerController; }
+  OdDbFilerController* controller() const { return m_pController; }
+private:
+  OdDbFilerController* m_pController;
+};
+
+#include "TD_PackPop.h"
+
+#endif  // FILER_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFilter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFilter.h
new file mode 100755
index 0000000..16b7a75
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFilter.h
@@ -0,0 +1,81 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBFILTER_H
+#define OD_DBFILTER_H
+
+#include "DbObject.h"
+
+class OdRxClass;
+
+/** \details
+    The class is the base class for all OdDb Filter objects.
+
+    \sa
+    TD_Db
+
+    \remarks
+    This class defines a query and supplies a key to the 
+    OdDbCompositeFilteredBlockIterator object. The index corresponding
+    to this key obtained through indexClass().
+
+    \sa
+    * OdDbIndexFilterManager
+    * OdDbIndex
+    * OdDbFilteredBlockIterator
+    * OdDbCompositeFilteredBlockIterator    
+     
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbFilter : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbFilter);
+
+  OdDbFilter();
+  
+  /** \details
+    Returns the class descriptor of the OdDbIndex for this Filter object.
+    
+    \remarks
+    This function is used by the init() method of the OdDbCompositeFilteredBlockIterator object.
+  */
+  virtual OdRxClass* indexClass() const = 0;
+
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbFilter object pointers.
+*/
+typedef OdSmartPtr<OdDbFilter> OdDbFilterPtr;
+
+#endif // OD_DBFILTER_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFormattedTableData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFormattedTableData.h
new file mode 100755
index 0000000..026a78d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFormattedTableData.h
@@ -0,0 +1,384 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_DBFORMATTEDTABLEDATA_H
+#define OD_DBFORMATTEDTABLEDATA_H
+
+#include "DbObject.h"
+#include "DbLinkedTableData.h"
+
+#include "TD_PackPush.h"
+
+	/** \details
+    Work-in-progress. This class represents FormattedTableData objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+	<group OdDb_Classes>
+	*/
+class TOOLKIT_EXPORT OdDbFormattedTableData : public OdDbLinkedTableData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbFormattedTableData);
+
+  OdDbFormattedTableData();
+
+  virtual OdInt32 insertRowAndInherit(
+    OdInt32 nIndex, 
+    OdInt32 nInheritFrom,
+    OdInt32 nNumRows);
+
+  virtual OdInt32 insertColumnAndInherit(
+    OdInt32 nIndex, 
+    OdInt32 nInheritFrom,
+    OdInt32 nNumCols);
+
+  virtual void setFieldId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdDbObjectId& idField, 
+    OdDb::CellOption nFlag);
+
+  virtual void setFieldId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdDbObjectId& idField, 
+    OdDb::CellOption nFlag);
+
+  virtual void merge(
+    const OdCellRange& range);
+
+  virtual void unmerge(
+    const OdCellRange& range);
+
+  virtual bool isMerged(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdCellRange getMergeRange(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual bool isMergeAllEnabled(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+  
+  virtual void enableMergeAll(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    bool bEnable);
+
+  virtual bool isFormatEditable(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual double rotation(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual double rotation(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdInt32 nContent) const;
+
+  virtual void setRotation(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    double fRotation);
+
+  virtual void setRotation(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nContent,
+    double fRotation);
+
+  virtual double scale(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual double scale(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdInt32 nContent) const;
+
+  virtual void setScale(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    double fScale);
+
+  virtual void setScale(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nContent,
+    double fScale);
+
+  virtual bool isAutoScale(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual bool isAutoScale(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdInt32 nContent) const;
+
+  virtual void setAutoScale(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    bool bAutoScale);
+
+  virtual void setAutoScale(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nContent,
+    bool bAutoScale);
+
+  virtual OdDb::CellAlignment alignment(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual void setAlignment(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::CellAlignment nAlignment);
+
+  virtual OdCmColor contentColor(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdCmColor contentColor(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdInt32 nContent) const;
+
+  virtual void setContentColor(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdCmColor& color);
+
+  virtual void setContentColor(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nContent,
+    const OdCmColor& color);
+
+  virtual OdDbObjectId textStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdDbObjectId textStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdInt32 nContent) const;
+
+  virtual void setTextStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdDbObjectId& idTextStyle);
+
+  virtual void setTextStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nContent,
+    const OdDbObjectId& idTextStyle);
+
+  virtual double textHeight(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual double textHeight(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdInt32 nContent) const;
+
+  virtual void setTextHeight(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    double fTextHeight);
+
+  virtual void setTextHeight(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdInt32 nContent,
+    double fTextHeight);
+
+  virtual OdCmColor backgroundColor(OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual void setBackgroundColor(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdCmColor& color);
+
+  virtual OdDb::CellContentLayout contentLayout(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual void setContentLayout(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::CellContentLayout nLayout);
+
+  virtual OdDb::FlowDirection flowDirection() const;
+  
+  virtual void setFlowDirection(
+    OdDb::FlowDirection nDir);
+
+  virtual double margin(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::CellMargin nMargin) const;
+
+  virtual void setMargin(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::CellMargin nMargins, 
+    double fMargin);
+
+  virtual OdDb::GridLineStyle gridLineStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType) const;
+
+  virtual void setGridLineStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineTypes,
+    OdDb::GridLineStyle nLineStyle);
+
+  virtual OdDb::LineWeight gridLineWeight(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType) const;
+
+  virtual void setGridLineWeight(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineTypes, 
+    OdDb::LineWeight nLineWeight);
+
+  virtual OdDbObjectId gridLinetype(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType) const;
+
+  virtual void setGridLinetype(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineTypes, 
+    const OdDbObjectId& idLinetype);
+
+  virtual OdCmColor gridColor(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType) const;
+
+  virtual void setGridColor(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineTypes, 
+    const OdCmColor& color);
+
+  virtual OdDb::Visibility gridVisibility(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType) const;
+
+  virtual void setGridVisibility(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineTypes, 
+    OdDb::Visibility nVisibility);
+
+  virtual double gridDoubleLineSpacing(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType) const;
+
+  virtual void setGridDoubleLineSpacing(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineTypes, 
+    double fSpacing);
+
+  virtual void getGridProperty(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType, 
+    OdGridProperty& gridProp) const;
+
+  virtual void setGridProperty(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineTypes, 
+    const OdGridProperty& gridProp);
+
+  virtual void setGridProperty(
+    const OdCellRange& range,
+    OdDb::GridLineType nGridLineTypes, 
+    const OdGridProperty& gridProp);
+
+  virtual OdDb::CellProperty getOverride(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nContent) const;
+
+  virtual OdDb::GridProperty getOverride(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType) const;
+
+  virtual void setOverride(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nContent, 
+    OdDb::CellProperty nOverride);
+  
+  virtual void setOverride(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::GridLineType nGridLineType, 
+    OdDb::GridProperty nOverride);
+
+  virtual void removeAllOverrides(
+    OdInt32 nRow, 
+    OdInt32 nCol);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbFormattedTableData> OdDbFormattedTableDataPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBFORMATTEDTABLEDATA_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFrame.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFrame.h
new file mode 100755
index 0000000..3d30d88
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbFrame.h
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_DBFRAME_H
+#define OD_DBFRAME_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+    This class is the abstract base class for OdDbOleFrame graphical objects 
+    contained in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbFrame : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbFrame);
+
+  OdDbFrame();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbFrame object pointers.
+*/
+typedef OdSmartPtr<OdDbFrame> OdDbFramePtr;
+
+#include "TD_PackPop.h"
+
+#endif  // OD_DBRAME_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDwgIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDwgIO.h
new file mode 100755
index 0000000..9e18701
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDwgIO.h
@@ -0,0 +1,351 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GE_DWG_IO
+#define OD_GE_DWG_IO
+
+#include "Ge/GeLibVersion.h"
+
+class OdDbDwgFiler;
+
+class OdGeLineSeg2d;
+class OdGeCircArc2d;
+class OdGeEllipArc2d;
+class OdGeNurbCurve2d;
+class OdGeSegmentChain2d;
+
+
+/** \details
+    This class reads information from and writes information to a .dwg file.
+
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeEdgesDwgIO
+{
+public:
+/*	
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePoint2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeVector2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeMatrix2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeScale2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePoint2dArray& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeVector2dArray& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePoint3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeVector3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeMatrix3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeScale3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePoint3dArray& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeVector3dArray& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeTol& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeInterval& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeKnotVector& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeDoubleArray& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdIntArray& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCurveBoundary& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePosition2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePointOnCurve2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeLine2d& object);
+*/
+
+  /** \details
+    Writes information to a .dwg file.
+
+    \param pFiler [in]  Pointer to the OdDbDwgFiler object.
+    \param object [in]  OdGe object to be written.
+  */
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeLineSeg2d& object);
+
+/*
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeRay2d& object);
+*/
+
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCircArc2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeEllipArc2d& object);
+
+/*
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeExternalCurve2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCubicSplineCurve2d& object);
+*/
+
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeNurbCurve2d& object);
+
+/*
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCompositeCurve2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeOffsetCurve2d& object);
+*/
+
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeSegmentChain2d& object);
+
+/*
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePosition3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePointOnCurve3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePointOnSurface& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeLine3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeRay3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeLineSeg3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePlane& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeBoundedPlane& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCircArc3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeEllipArc3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCubicSplineCurve3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeNurbCurve3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCompositeCurve3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeOffsetCurve3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGePolyline3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeAugPolyline3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeExternalCurve3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCone& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeEllipCone& object);	// AE 03.09.2003 
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCylinder& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeEllipCylinder& object);	// AE 09.09.2003 
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeTorus& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeExternalSurface& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeOffsetSurface& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeNurbSurface& object);
+	static
+		void outFields(OdDbDwgFiler* pFiler,const OdGeExternalBoundedSurface& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeSphere& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeBoundBlock2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeBoundBlock3d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCurveCurveInt2d& object);
+	static
+    void outFields(OdDbDwgFiler* pFiler, const OdGeCurveCurveInt3d& object);
+	
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePoint2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeVector2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeMatrix2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeScale2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePoint2dArray& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeVector2dArray& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePoint3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeVector3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeMatrix3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeScale3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePoint3dArray& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeVector3dArray& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeTol& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeInterval& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeKnotVector& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeDoubleArray& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdIntArray& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCurveBoundary& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePosition2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePointOnCurve2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeLine2d& object);
+*/
+
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeLineSeg2d& object);
+
+/*
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeRay2d& object);
+*/
+
+  /** \details
+    Reads information from a .dwg file.
+
+    \param pFiler [in]  Pointer to the OdDbDwgFiler object.
+    \param object [in]  OdGe object to be read.
+  */
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCircArc2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeEllipArc2d& object);
+
+/*
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeExternalCurve2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCubicSplineCurve2d& object);
+*/
+
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeNurbCurve2d& object);
+
+/*
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCompositeCurve2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeOffsetCurve2d& object);
+*/
+
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeSegmentChain2d& object);
+
+/*
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePosition3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePointOnCurve3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePointOnSurface& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeLine3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeRay3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeLineSeg3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePlane& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeBoundedPlane& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCircArc3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeEllipArc3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCubicSplineCurve3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCompositeCurve3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeOffsetCurve3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeNurbCurve3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGePolyline3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeAugPolyline3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeExternalCurve3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCone& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeEllipCone& object);	// AE 03.09.2003 
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCylinder& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeEllipCylinder& object);	// AE 09.09.2003 
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeTorus& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeExternalSurface& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeOffsetSurface& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeNurbSurface& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeExternalBoundedSurface& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeSphere& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeBoundBlock2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeBoundBlock3d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCurveCurveInt2d& object);
+	static
+    void inFields(OdDbDwgFiler* pFiler, OdGeCurveCurveInt3d& object);
+*/	
+
+	static const OdGeLibVersion  OdGeDwgIOVersion;
+};
+
+#endif // OD_GE_DWG_IO
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDxfIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDxfIO.h
new file mode 100755
index 0000000..72831f0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeEdgesDxfIO.h
@@ -0,0 +1,349 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GE_DXF_IO
+#define OD_GE_DXF_IO
+
+#include "Ge/GeLibVersion.h"
+
+class OdDbDxfFiler;
+
+class OdGeLineSeg2d;
+class OdGeCircArc2d;
+class OdGeEllipArc2d;
+class OdGeNurbCurve2d;
+class OdGeSegmentChain2d;
+
+/** \details
+    This class reads information from and writes information to a DXF file.
+
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeEdgesDxfIO
+{
+public:
+/*
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePoint2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeVector2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeMatrix2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeScale2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePoint2dArray& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeVector2dArray& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePoint3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeVector3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeMatrix3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeScale3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePoint3dArray& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeVector3dArray& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeTol& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeInterval& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeKnotVector& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeDoubleArray& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdIntArray& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCurveBoundary& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePosition2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePointOnCurve2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeLine2d& object);
+*/
+
+  /** \details
+    Writes information to a DXF file.
+
+    \param pFiler [in]  Pointer to the OdDbDxfFiler object.
+    \param object [in]  OdGe object to be written.
+  */
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeLineSeg2d& object);
+
+/*
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeRay2d& object);
+*/
+
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCircArc2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeEllipArc2d& object);
+
+/*
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeExternalCurve2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCubicSplineCurve2d& object);
+*/
+
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeNurbCurve2d& object);
+
+/*    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCompositeCurve2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeOffsetCurve2d& object);
+*/
+
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeSegmentChain2d& object);
+
+/*
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePosition3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePointOnCurve3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePointOnSurface& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeLine3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeRay3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeLineSeg3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePlane& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeBoundedPlane& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCircArc3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeEllipArc3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCubicSplineCurve3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeNurbCurve3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCompositeCurve3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeOffsetCurve3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGePolyline3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeAugPolyline3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeExternalCurve3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCone& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeEllipCone& object);	// AE 03.09.2003 
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCylinder& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeEllipCylinder& object);	// AE 09.09.2003 
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeTorus& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeExternalSurface& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeOffsetSurface& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeNurbSurface& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler,const OdGeExternalBoundedSurface& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeSphere& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeBoundBlock2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeBoundBlock3d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCurveCurveInt2d& object);
+    static
+    void outFields(OdDbDxfFiler* pFiler, const OdGeCurveCurveInt3d& object);
+
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePoint2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeVector2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeMatrix2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeScale2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePoint2dArray& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeVector2dArray& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePoint3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeVector3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeMatrix3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeScale3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePoint3dArray& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeVector3dArray& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeTol& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeInterval& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeKnotVector& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeDoubleArray& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdIntArray& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCurveBoundary& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePosition2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePointOnCurve2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeLine2d& object);
+*/
+
+  /** \details
+    Reads information from a DXF file.
+
+    \param pFiler [in]  Pointer to the OdDbDxfFiler object.
+    \param object [in]  OdGe object to be read.
+  */
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeLineSeg2d& object);
+
+/*
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeRay2d& object);
+*/
+
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCircArc2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeEllipArc2d& object);
+
+/*
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeExternalCurve2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCubicSplineCurve2d& object);
+*/
+
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeNurbCurve2d& object);
+
+/*
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCompositeCurve2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeOffsetCurve2d& object);
+*/
+
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeSegmentChain2d& object);
+
+/*
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePosition3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePointOnCurve3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePointOnSurface& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeLine3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeRay3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeLineSeg3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePlane& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeBoundedPlane& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCircArc3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeEllipArc3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCubicSplineCurve3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeNurbCurve3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCompositeCurve3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeOffsetCurve3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGePolyline3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeAugPolyline3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeExternalCurve3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCone& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeEllipCone& object);	// AE 03.09.2003 
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCylinder& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeEllipCylinder& object);	// AE 09.09.2003 
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeTorus& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeExternalSurface& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeOffsetSurface& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeNurbSurface& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeExternalBoundedSurface& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeSphere& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeBoundBlock2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeBoundBlock3d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCurveCurveInt2d& object);
+    static
+    void inFields(OdDbDxfFiler* pFiler, OdGeCurveCurveInt3d& object);
+*/
+
+  static const OdGeLibVersion  OdGeDxfIOVersion;
+};
+
+#endif // OD_GE_DXF_IO
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoData.h
new file mode 100755
index 0000000..bc6d905
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoData.h
@@ -0,0 +1,575 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODDB_GEODATA_INCLUDED_
+#define _ODDB_GEODATA_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/*class OdDbGeoDataReactor
+{
+public:
+  virtual ~OdDbGeoDataReactor() {}
+
+  virtual OdResult geoCoordinateSystemWillChange(OdDbDatabase* pDb, const OdString& oldId, const OdString& newId)
+  {
+    return eOk;
+  }
+
+  virtual void geoCoordinateSystemChanged(OdDbDatabase* pDb, const OdString& oldId, const OdString& newId) {}
+};*/
+
+/** \details
+  This class represents GeoData objects in an OdDbDatabase instance.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeoData: public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbGeoData);
+  /** \details
+    Default constructor.
+  */
+  OdDbGeoData();
+
+  /** \details
+    This enumeration represents the type of design coordinates.
+  */
+  enum TypeOfCoordinates
+  {
+    kCoordTypUnknown = 0,   // Unknown
+    kCoordTypLocal,         // Local grid
+    kCoordTypGrid,          // Projected grid
+    kCoordTypGeographic     // Geographic (latitude/longitude)
+  };
+
+  /** \details
+    This enumeration represents the scale estimation method.
+  */
+  enum ScaleEstimationMethod
+  {
+    kScaleEstMethodUnity = 1,       // Unity
+    kScaleEstMethodUserDefined,     // User defined scale factor
+    kScaleEstMethodReferencePoint,  // Grid scale at reference point
+    kScaleEstMethodPrismoidal       // Prismoidal
+  };
+
+  /** \details
+    Returns the Object ID of the block table record.
+  */
+  OdDbObjectId blockTableRecordId() const;
+  
+  /** \details
+    Sets the Object ID of the block table record.
+    
+    \param blockId [in] Object ID of the block table record.
+  */
+  void setBlockTableRecordId(const OdDbObjectId& blockId);
+  
+  /** \details
+    Posts this OdDbGeoData object to the database.
+    
+    \param objId [out] Object ID of the posted OdDbGeoData object.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    Call the setBlockTableRecordId() method to set the block table record 
+    before calling the postToDb() method.
+  */
+  OdResult postToDb(OdDbObjectId& objId);
+
+  /** \details
+    Erases this OdDbGeoData object from the database.
+    
+    \returns Returns eOK if the object was successfully erased, or an appropriate error code if not.
+  */
+  OdResult eraseFromDb();
+
+  /** \details
+    Returns the type of design coordinates.
+    
+    \remarks
+    The type of design coordinates can be one of the following:
+* kCoordTypUnknown
+* kCoordTypLocal
+* kCoordTypGrid
+* kCoordTypGeographic 
+  */
+  TypeOfCoordinates coordinateType() const;
+  
+  /** \details
+    Sets the type of design coordinates.
+    
+    \param designCoordinateType [in] Type of coordinates for setting.
+    
+    \remarks
+    The designCoordinateType can be one of the following:
+* kCoordTypUnknown
+* kCoordTypLocal
+* kCoordTypGrid
+* kCoordTypGeographic 
+		The current implementation supports only kCoordTypGrid and kCoordTypGeographic 
+		types and recalculates coordinates correctly only if the Unit of the drawing is set to meter. 
+  */
+  void setCoordinateType(TypeOfCoordinates designCoordinateType);
+
+  /** \details
+    Returns the design coordinates of the point associated with the point position
+    specified by the setReferencePoint() method.
+
+    \remarks
+    There is no a default value for the point's design coordinates. They must be specified 
+    clearly by the application that creates an OdDbGeoData object.
+  */
+  OdGePoint3d designPoint() const;
+  
+  /** \details
+    Sets the design coordinates of the point associated with the point position
+    specified by the setReferencePoint() method.
+
+    \param point [in] Point design coordinates.
+    
+    \remarks
+    There is no default value for the point's design coordinates. They must be specified 
+    clearly by the application that creates an OdDbGeoData object.
+  */
+  void setDesignPoint(const OdGePoint3d& point);
+
+  /** \details
+    Returns the reference point associated with the design coordinates that is set 
+    by the setDesignPoint() method.
+  */
+  OdGePoint3d referencePoint() const;
+  
+  /** \details
+    Sets the reference point associated with the design coordinates that is set 
+    by the setDesignPoint() method.
+    
+    \param point [in] Reference point.
+    
+    \remarks
+    If the type of coordinate is kCoordTypLocal, the point argument is defined by the 
+    setCoordinateSystem() method of this object. 
+  */
+  void setReferencePoint(const OdGePoint3d& point);
+
+  /** \details
+    Returns the current value of the horizontal unit scale.
+    
+    \returns Returns the factor that is used to multiply the X or Y coordinate 
+    in the design database to produce the equivalent value in meters.
+    
+    \remarks
+    Default value is 1.0. 
+  */ 
+  double horizontalUnitScale() const;
+  /** \details
+    Returns the horizontal unit type.
+    
+    \returns If the current value of the horizontal unit scale was set by the setHorizontalUnit() method, 
+    this method returns the OdDb::UnitsValue used at that time.   
+  */
+  OdDb::UnitsValue horizontalUnits () const;
+  
+  /** \details
+    Sets the current value of the horizontal unit scale.
+    
+    \param horzUnitScale [in] Double value that is used to multiply the X or Y coordinate 
+    to produce the equivalent value in meters.
+  */ 
+  void setHorizontalUnitScale(double horzUnitScale);
+  
+  /** \details
+    Sets the linear unit in which X and Y cooordinates are expressed.
+    
+    \param horizUnits [in] Unit system in which horizontal X and Y coordinates are expressed.
+  */
+  void setHorizontalUnits (OdDb::UnitsValue horizUnits);
+
+  /** \details
+    Returns the current value of the vertical unit scale.
+    
+    \returns Returns the factor that is used to multiply the X or Y coordinate 
+    in the design database to produce the equivalent value in meters.
+  */ 
+  double verticalUnitScale() const;
+  /** \details
+    Returns the vertical unit type.
+    
+    \returns If the current value of the vertical unit scale was set by setVerticalUnits() method, 
+    this method returns the OdDb::UnitsValue used at that time.   
+  */
+  OdDb::UnitsValue verticalUnits () const;
+  /** \details
+    Sets the current value of the vertical unit scale.
+    
+    \param horzUnitScale [in] Double value that is used to multiply the X or Y coordinate 
+    to produce the equivalent value in meters.
+  */ 
+  void setVerticalUnitScale(double vertUnitScale);
+  /** \details
+    Sets the vertical unit.
+    
+    \param vertUnits [in] Vertical unit.
+  */
+  void setVerticalUnits(OdDb::UnitsValue vertUnits);
+  
+  /** \details
+    Returns the copy of the vector that defines the direction of the vertical axis 
+    of a local coordinate system.
+    
+    \remarks
+    The default value of the vector is (0, 0, 1).
+  */
+  OdGeVector3d upDirection() const;
+  /** \details
+    Sets the current value of the vector that defines the direction of the vertical axis 
+    of a local coordinate system.
+    
+    \param vec [in] Reference to the OdGeVector3d object.
+    
+    \remarks
+    The vector default value is (0, 0, 1).
+  */
+  void setUpDirection(const OdGeVector3d& vec);
+
+  /** \details
+    Returns the azimuth of the Y axis relative to true north in radians east of north.
+  */
+  double northDirection() const;
+  /** \details
+    Returns the copy of the 2D vector that defines the direction of true north in terms of design coordinates.
+  */
+  OdGeVector2d northDirectionVector() const;
+  /** \details
+    Sets the current value of the 2D vector that defines the direction of true north in terms of design coordinates.
+    
+    \param north [in] 2D vector.
+    
+    \remarks
+    The default value is (0,1).
+  */
+  void setNorthDirectionVector(const OdGeVector2d& north);
+
+  /** \details
+    Returns the current value of the scale estimation method of this object.
+  */
+  ScaleEstimationMethod scaleEstimationMethod() const;
+  /** \details
+    Sets the current value of the scale estimation method of this object.
+    
+    \param value [in] ScaleEstimationMethod enum value.
+  */
+  void setScaleEstimationMethod(ScaleEstimationMethod value);
+
+  /** \details
+    Returns the current value of the scale factor of this object.
+    
+    \remarks
+    The default value is 1.0. 
+  */
+  double scaleFactor() const;
+  /** \details
+    Sets the user-defined scale factor of this object.
+    
+    \param value [in] Scale value.
+    
+    \remarks
+    The default value is 1.0. 
+  */
+  void setScaleFactor(double value);
+
+  /** \details
+    Returns the boolean value that controls the application of the sea-level 
+    correction to horizontal coordinates during a local-to-grid transformation process.
+    
+    \remarks
+    The default value is false. 
+  */
+  bool doSeaLevelCorrection() const;
+  /** \details
+    Sets the boolean value that controls the application of the sea-level 
+    correction to horizontal coordinates during a local-to-grid transformation process.
+    
+    \param seaLevelCorrectionOn [in] Boolean value to enable (true) or 
+    disable (false) sea-level correction.
+    
+    \remarks
+    The default value is false. 
+  */
+  void setDoSeaLevelCorrection(bool seaLevelCorrectionOn);
+
+  /** \details
+    Returns the current value of the object's sea level elevation.
+  */
+  double seaLevelElevation() const;
+  /** \details
+    Sets the object's sea level elevation.
+    
+    \param value [in] Sea level evaluation value.
+  */
+  void setSeaLevelElevation(double value);
+
+  /** \details
+    Returns the radius of curvature of the ellipsoid model 
+    that is used in the sea-level correction algorithm.
+    
+    \remarks
+    The radius is measured in meters.
+  */
+  double coordinateProjectionRadius() const;
+  /** \details
+    Sets the radius of curvature of the ellipsoid model 
+    that is used in the sea-level correction algorithm.
+    
+    \param value [in] Radius value, in meters.
+  */
+  void setCoordinateProjectionRadius(double value);
+
+  /** \details
+    Returns the current coordinate system definition.
+  */
+  OdString coordinateSystem() const;
+  /** \details
+    Sets the current coordinate system definition.
+    
+    \param coordSystem [in] String that represents a coordinate system.
+		
+		\remarks
+		When the coordinate system is changed, mesh point arrays are not changed. 
+		To get access to these arrays, use set/getMeshPointMaps(), getMeshPointMap() and 
+		addMeshPointMap() methods.		
+  */
+  OdResult setCoordinateSystem(const OdString& coordSystem);
+
+  /** \details
+    Returns the geoRSS tag.
+  */
+  OdString geoRSSTag() const;
+  /** \details
+    Sets the user generated geoRSS tag.
+    
+    \param rssTag [in] GeoRSS tag value.
+  */
+  void setGeoRSSTag(const OdString& rssTag);
+
+  /** \details
+    Returns the current value of the ObservationFrom property.
+  */
+  OdString observationFrom() const;
+  /** \details
+    Sets the current value of the ObservationFrom property.
+    
+    \param from [in] New value of the ObservationFrom property.
+  */
+  void setObservationFrom(const OdString& from);
+
+  /** \details
+    Returns the current value of the ObservationTo property.
+  */
+  OdString observationTo() const;
+  /** \details
+    Sets the current value of the ObservationTo property.
+    
+    \param to [in] New value of the ObservationTo property.
+  */
+  void setObservationTo(const OdString& to);
+
+  /** \details
+    Returns the current value of the ObservationCoverage property.
+  */
+  OdString observationCoverage() const;
+  /** \details
+    Sets the current value of the ObservationCoverage property.
+    
+    \param coverage [in] New value of the ObservationCoverage property.
+  */
+  void setObservationCoverage(const OdString& coverage);
+
+  /** \details
+    Returns the number of points in the transformation mesh.
+  */
+  int numMeshPoints() const;
+  /** \details
+    Returns the design points and the associated reference points in the object's transformation mesh.
+    
+    \param index [in] Number of the points to be fetched.
+    \param srcPt [out] Source point.
+    \param dstPt [out] Destination point.
+  */
+  void getMeshPointMap(int index, OdGePoint2d& srcPt, OdGePoint2d& dstPt) const;
+  /** \details
+    Returns the object's transformation mesh points.
+    
+    \param srcPts [out] Array of all design points.
+    \param dstPts [out] Array of all reference points.
+    
+    \remarks
+    The returned arrays are valid if they contain the same number of points and are not empty.
+  */
+  void getMeshPointMaps(OdGePoint2dArray& srcPts, OdGePoint2dArray& dstPts) const;
+  /** \details
+    Inserts a new design/reference point association into the mesh.
+    
+    \param index [in] Array index.
+    \param srcPt [in] Source point.
+    \param dstPt [in] Destination point.
+    
+    \remarks
+    The new point association is inserted before the array index parameter. 
+    If the index specification is invalid, the new point association is appended to the end 
+    of the mesh array.
+  */
+  void addMeshPointMap(int index, const OdGePoint2d& srcPt, const OdGePoint2d& dstPt);
+  /** \details
+    Replaces the object's transformation mesh point arrays.
+
+    \param srcPts [in] Array of design points.
+    \param dstPts [in] Array of associated reference points.
+  */
+  void setMeshPointMaps(const OdGePoint2dArray& srcPts, const OdGePoint2dArray& dstPts);
+  /** \details
+    Resets both object's transformation mesh point arrays.
+  */
+  void resetMeshPointMaps();
+
+  /** \details
+    Returns the number of faces in the mesh triangulation.
+  */
+  int numMeshFaces() const;
+  /** \details
+    Returns the three vertex indexes for the specified face.
+
+    \param faceIndex [in] Face index.
+    \param p0 [out] The first vertex index.
+    \param p1 [out] The second vertex index.
+    \param p2 [out] The third vertex index.
+  */
+  void getMeshFace(int faceIndex, int& p0, int& p1, int& p2) const;
+  /** \details
+    Sets the three vertex indexes for the specified triangle face.
+
+    \param faceIndex [in] Face index.
+    \param p0 [in] The first vertex index.
+    \param p1 [in] The second vertex index.
+    \param p2 [in] The third vertex index.
+  */
+  void addMeshFace(int faceIndex, int p0, int p1, int p2);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Transforms the design point into an equivalent geographic point.
+
+    \param dwgPt [in] Point, in design coordinates, to be transformed.
+    \param geoPt [out] Geographic equivalent of the dwgPt.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+        
+    \remarks
+    Longitude ordinate is transformed in the X member of the OdGePoint3d object, 
+    latitude ordinate is transformed in the Y member of the OdGePoint3d object and 
+    the elevation (altitude) is transformed in the Z member of the OdGePoint3d object.
+  */
+  OdResult transformToLonLatAlt(const OdGePoint3d& dwgPt, OdGePoint3d& geoPt) const;
+  /** \details
+    Transforms the design point into an equivalent geographic point.
+
+    \param x [in] X ordinate of the design point.
+    \param y [in] Y ordinate of the design point.
+    \param z [in] Z ordinate of the design point.
+    \param lon [out] Longitude ordinate of the transformed point. 
+    \param lat [out] Latitude ordinate of the transformed point. 
+    \param alt [out] Altitude (elevation) ordinate of the transformed point. 
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  OdResult transformToLonLatAlt(double x, double y, double z, double& lon, double& lat, double& alt) const;
+  
+  /** \details
+    Transforms the geographic point into an equivalent design point.
+
+    \param geoPt [in] Geographic point to be transformed.
+    \param dwgPt [out] Transformed equivalent in design coordinates.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+        
+    \remarks
+    Longitude ordinate is transformed in the X member of the OdGePoint3d object, 
+    latitude ordinate is transformed in the Y member of the OdGePoint3d object and 
+    the elevation (altitude) is transformed in the Z member of the OdGePoint3d object.
+  */
+  OdResult transformFromLonLatAlt(const OdGePoint3d& geoPt, OdGePoint3d& dwgPt) const;
+  /** \details
+     Transforms the geographic point into an equivalent design point.
+
+    \param lon [in] Longitude ordinate of the point to be transformed. 
+    \param lat [in] Latitude ordinate of the point to be transformed. 
+    \param alt [in] Altitude ordinate of the point to be transformed. 
+    \param x [out] X ordinate of the transformed point.
+    \param y [out] Y ordinate of the transformed point.
+    \param z [out] Z ordinate of the transformed point.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  OdResult transformFromLonLatAlt(double lon, double lat, double alt, double& x, double& y, double& z) const;
+};
+
+//GLOBAL API FUNCTIONS
+  /** \details
+		Global method which is used for getting the OdDbGeoData object ID.
+		
+		\param pDb [in/out] Pointer to a database. 
+    \param objId [out] OdDbGeoData object ID. 
+		
+		\returns Returns eOK if successful, or an appropriate error code if not.
+  */
+TOOLKIT_EXPORT OdResult oddbGetGeoDataObjId(OdDbDatabase *pDb, OdDbObjectId& objId);
+
+//TOOLKIT_EXPORT OdResult oddbRegisterGeoDataReactor(OdDbGeoDataReactor *reactor);
+//TOOLKIT_EXPORT void oddbRemoveGeoDataReactor(OdDbGeoDataReactor *reactor);
+
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbGeoData object pointers.
+*/
+typedef OdSmartPtr<OdDbGeoData> OdDbGeoDataPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_ODDB_GEODATA_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoDataPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoDataPE.h
new file mode 100755
index 0000000..2aeb0eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoDataPE.h
@@ -0,0 +1,129 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef _OD_DB_GEODATA_PE_
+#define _OD_DB_GEODATA_PE_
+
+#include "RxObject.h"
+#include "SmartPtr.h"
+#include "DbExport.h"
+
+#include "DbGeoData.h"
+
+#include "TD_PackPush.h"
+/** \details
+An abstract class that represents a protocol extension for an OdDbGeoData object.
+
+<group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbGeoDataPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeoDataPE);
+  
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdDbGeoDataPE() {};
+  /** \details
+    Transforms the geographic point into an equivalent design point.
+    
+    \param pGeoData [in] Pointer to an OdDbGeoData object.
+    \param dblLongitude [in] Longitude ordinate of the point to be transformed. 
+    \param dblLatitude [in] Latitude ordinate of the point to be transformed. 
+    \param dblAltitude [in] Altitude ordinate of the point to be transformed. 
+    \param dblDwgX [out] X ordinate of the transformed point.
+    \param dblDwgY [out] Y ordinate of the transformed point.
+    \param dblDwgZ [out] Z ordinate of the transformed point.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult transformFromLonLatAlt(const OdDbGeoData* pGeoData, const double& dblLongitude, const double& dblLatitude, const double& dblAltitude,
+                                                             double& dblDwgX, double& dblDwgY, double& dblDwgZ) = 0;
+  /** \details
+    Transforms the design point into an equivalent geographic point.
+    
+    \param pGeoData [in] Pointer to an OdDbGeoData object.
+    \param dblDwgX [in] X ordinate of the design point.
+    \param dblDwgY [in] Y ordinate of the design point.
+    \param dblDwgZ [in] Z ordinate of the design point.
+    \param dblLongitude [out] Longitude ordinate of the transformed point. 
+    \param dblLatitude [out] Latitude ordinate of the transformed point. 
+    \param dblAltitude [out] Altitude (elevation) ordinate of the transformed point. 
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult transformToLonLatAlt(const OdDbGeoData* pGeoData, const double& dblDwgX, const double& dblDwgY, const double& dblDwgZ,
+                                                             double& dblLongitude, double& dblLatitude, double& dblAltitude) = 0;
+  /** \details
+    This method is used for user validation.
+    
+    \param coordinateSystem [in] Coordinate system name.
+     
+    \returns Returns true if validation passed successfully, or false if not.
+  */
+  virtual bool validateCs(const OdString & coordinateSystem) = 0;
+  
+  /** \details
+    Returns xml representation of the coordinate system.
+    
+    \param pGeoData [in] Pointer to an OdDbGeoData object.
+    \param inputName [in] Coordinate system name.
+    \param resultXml [out] Xml representation of the coordinate system.
+     
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult parseCsName(const OdDbGeoData* pGeoData, const OdString & inputName, OdString & resultXml) = 0;
+  
+  /** \details
+    This method is called when the coordinate system will be changed.
+    
+    \param pGeoData [in/out] Pointer to an OdDbGeoData object.
+    \param oldName [in] Coordinate system name.
+     
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult geoCoordinateSystemWillChange(OdDbGeoData* pGeoData, const OdString& newName) = 0;
+  
+  /** \details
+    This method is called when the coordinate system is changed.
+    
+    \param pGeoData [in/out] Pointer to an OdDbGeoData object.
+    \param oldName [in] Coordinate system name.
+     
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult geoCoordinateSystemChanged(OdDbGeoData* pGeoData, const OdString& oldName) = 0;
+  
+  /** \details
+    Parses and returns the coordinate system ID.
+    
+    \param xml [in] String with xml representation of coordinate system.
+  */
+  virtual OdString parseIdFromXml(const OdString& xml) = 0;
+};
+
+typedef OdSmartPtr<OdDbGeoDataPE> OdDbGeoDataPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_OD_DB_GEODATA_PE_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoPositionMarker.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoPositionMarker.h
new file mode 100755
index 0000000..4dc0b20
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGeoPositionMarker.h
@@ -0,0 +1,257 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBGEOPOSITIONMARKER_INCLUDED_
+#define _ODDBGEOPOSITIONMARKER_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "DbEntity.h"
+#include "OdString.h"
+#include "DbMText.h"
+
+/** \details
+<group OdDb_Classes>
+
+Class represents a geographical location aware marker object with a label. 
+*/
+class TOOLKIT_EXPORT OdDbGeoPositionMarker : public OdDbEntity
+{
+public:
+  /** \details
+  Enumerator representing alignment type of label text.
+  */
+  enum OdTextAlignmentType {
+    /** Left-justified label text.*/
+    kLeftAlignment              = 0,
+    /** Label text center alignment.*/
+    kCenterAlignment            = 1,
+    /** Right-justified label text.*/
+    kRightAlignment             = 2
+  };
+
+  ODDB_DECLARE_MEMBERS(OdDbGeoPositionMarker);
+  /** \details
+  Creates an instance of the OdDbGeoPositionMarker class.
+  
+  \remarks
+  Use the static pseudo-constructor createObject() instead of it.
+  */ 
+  OdDbGeoPositionMarker();
+  
+  virtual ~OdDbGeoPositionMarker();
+  
+  /** \details 
+  Returns the current value of the insertion point of the position marker.
+  */
+  OdGePoint3d       position() const;
+  
+  /** \details 
+  Sets a new value of the insertion point of the position marker.
+  
+  \param position [in] New insertion point coordinates.
+  
+  \returns Returns eOk if the new value of the insertion point was successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setPosition(const OdGePoint3d &position);
+  
+  /** \details 
+  Returns the current radius value of the position marker.
+  */
+  double            radius() const; 
+  
+  /** \details 
+  Sets a new radius value of the position marker.
+  
+  \param radius [in] A new radius value to be set.
+  
+  \returns Returns eOk if the new radius value was successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setRadius(double radius);
+  
+  /** \details 
+  Returns the current position marker text label value.
+  */
+  OdString          text() const;
+  
+  /** \details 
+  Sets a new text label value of the position marker.
+  
+  \param text [in] A new text label value to be set.
+  
+  \returns Returns eOk if the new text label value was successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setText(const OdString& text);
+  
+  /** \details 
+  Returns the copy of the current position marker multiline text label value.
+  */  
+  OdDbMTextPtr      mtext() const;
+  
+  /** \details 
+  Sets a new multiline text label value of the position marker as a copy of the input parameter's referenced value.
+  
+  \param pMText [in] A new multiline text label value to be set, which is represented as a pointer to an OdDbMText.
+  
+  \returns Returns eOk if the new multiline text label value was successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setMText(const OdDbMText * pMText);
+  
+  /** \details 
+  Returns the current value of the multiline text label visibility flag.
+  The visibility flag indicates that the multiline text label is visible (if true).
+  */  
+  bool              mtextVisible() const;
+  
+  /** \details 
+  Sets a new value of the  multiline text label visibility flag.
+  The visibility flag indicates that the multiline text label is visible (if true).
+  
+  \param visible [in] A new flag value to be set.
+  
+  \returns Returns eOk if the new value of the multiline text label visibility flag was successfully set or returns an appropriate error code in the other case.
+  */  
+  OdResult          setMTextVisible(bool visible);
+  
+  /** \details 
+  Returns the current value of the landing gap of the position marker.
+  */  
+  double            landingGap() const;
+  
+  /** \details 
+  Sets a new value of the landing gap of the position marker.
+  
+  \param landingGap [in] A new landing gap value to be set.
+  
+  \returns Returns eOk if the new value of the landing gap was successfully set or returns an appropriate error code in the other case.
+  */ 
+  OdResult          setLandingGap(double landingGap);
+
+  /** \details 
+  Returns the current value of the label text frame enabling flag.
+  The frame enabling flag indicates that the label text has a frame (if true).
+  */  
+  bool              enableFrameText() const;
+  
+  /** \details 
+  Sets a new value of the label text frame enabling flag.
+  The frame enabling flag indicates that the label text has a frame (if true).
+  
+  \param enableFrameText [in] A new flag value to be set.
+  
+  \returns Returns eOk if the new value of the label text frame enabling flag was successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setEnableFrameText(bool enableFrameText);
+  
+  /** \details 
+  Returns the current value of the label text alignment type.
+  */ 
+  OdTextAlignmentType textAlignmentType() const;
+  
+  /** \details 
+  Sets a new value of the label text alignment type.
+    
+  \param textAlignmentType [in] A new alignment type value to be set represented as a value of the OdTextAlignmentType enumeration.
+  
+  \returns Returns eOk if the new value of the label text alignment type was successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setTextAlignmentType(OdTextAlignmentType textAlignmentType);
+ 
+  /** \details 
+  Returns the current value of the position marker notes as an OdString.
+  */ 
+  OdString          notes() const;
+  
+  /** \details 
+  Sets a new value of position marker notes.
+    
+  \param notes [in] A new notes value to be set.
+  
+  \returns Returns eOk if the new value of position marker notes was successfully set or returns an appropriate error code in the other case.
+  */  
+  OdResult          setNotes(const OdString& notes);
+  
+  /** \details 
+  Returns the current value of the insertion point of the position marker.
+  */  
+  OdGePoint3d       geoPosition() const;
+  
+  /** \details 
+  Sets a new value of the geographical location of the position marker.
+    
+  \param position [in] A new value of the geographical location coordinates (where x, y, z are longitude, latitude and alleviation) that should be set.
+  
+  \returns Returns eOk if the new value of the geographical location of the position marker was successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setGeoPosition(const OdGePoint3d &position);
+
+  /** \details 
+  Returns the current value of the geographical location of the position marker.
+  
+  \param lat [out] A reference to a double variable to store the latitude value.
+  \param lon [out] A reference to a double variable to store the longitude value.
+  \param alt [out] A reference to a double variable to store the alleviation value.
+  
+  \returns Returns eOk if the new values of the geographical location parameters of the position marker were successfully set into output variables or returns an appropriate error code in the other case.
+  */  
+  OdResult          latLonAlt(double &lat, double &lon, double &alt) const;
+  
+  /** \details 
+  Sets a new value of the geographical location of the position marker.
+  
+  \param lat [in] A double value of the latitude.
+  \param lon [in] A double value of the longitude.
+  \param alt [in] A double value of the alleviation.
+  
+  \returns Returns eOk if the new values of the geographical location parameters of the position marker were successfully set or returns an appropriate error code in the other case.
+  */
+  OdResult          setLatLonAlt(double lat, double lon, double alt);
+  
+  /** \details 
+  Returns the current value of the normal of the position marker as an OdGeVector3d object.
+  */
+  OdGeVector3d      normal() const;
+  
+  /** \details 
+  Returns the current value of the label text style of the position marker as an OdDbObjectId.
+  */
+  OdDbObjectId      textStyle() const;
+
+  virtual OdResult  dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void      dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult  dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void      dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual bool      subWorldDraw(OdGiWorldDraw* pWorldDraw) const;
+  virtual void      subViewportDraw(OdGiViewportDraw* pViewportDraw) const;
+
+  virtual OdResult  subTransformBy(const OdGeMatrix3d& xform);
+  virtual void      subClose();
+
+  virtual OdResult  subGetGeomExtents(OdGeExtents3d& extents) const;
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbGeoPositionMarker object pointers.
+*/
+typedef OdSmartPtr<OdDbGeoPositionMarker> OdDbGeoPositionMarkerPtr;
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGraph.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGraph.h
new file mode 100755
index 0000000..29a1aa4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGraph.h
@@ -0,0 +1,672 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBGRAPH_H_INCLUDED_
+#define _ODDBGRAPH_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdaDefs.h"
+#include "RxObject.h"
+#include "OdArray.h"
+
+class OdDbGraph;
+class OdDbGraphNode;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbGraphNode object pointers.
+*/
+typedef OdArray<OdDbGraphNode*, OdMemoryAllocator<OdDbGraphNode*> > OdDbGraphNodeArray;
+
+/** \details
+    This class implements generic node objects for generic graphs.
+    
+    \remarks
+    A graph consists of a collection of nodes bi-directionally linked by directional edges.
+    
+    An edge connected to a node is represented as a pointer or reference to the node at the other
+    end of the edge.
+ 
+    References are classified as either incoming or outgoing. Every incoming reference has
+    a corresponding outgoing reference and vice versa.
+
+    Each GraphNode object can have any number of references associated with it, enabling the
+    implementation of any graph structure.
+
+    \sa
+    
+    * OdDbGraph
+    * OdDbGraphStack
+    * OdDbXrefGraph
+    * OdDbXrefGraphNode
+    
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGraphNode : public OdRxObject
+{
+  friend class OdDbGraph;
+public:
+  OdDbGraphNode() : m_pData(0), m_flags(0), m_pOwner(0) {}
+
+  ODRX_DECLARE_MEMBERS(OdDbGraphNode);
+
+  virtual ~OdDbGraphNode();
+  
+  enum Flags
+  {
+    kNone         = 0x00, // None.
+    kVisited      = 0x01, // Used internally by OdDbGraph::findCycles() and while traversing a graphs with cycles.
+    kOutsideRefed = 0x02, // Used internally by Xref detach.
+    kSelected     = 0x04, // User selection. Set by getOutgoing.
+    kInList       = 0x08, // Is *in* list. Set by getOutgoing.
+    kListAll      = 0x0E, // Used to *clear* kSelected, kInList, and kOutsideRefed.
+    kFirstLevel   = 0x10, // The *node* is connected to the root *node*. Read Only.
+    kUnresTree    = 0x20, // The tree is unresolved.
+    kAll          = 0x2F  // Used to *clear* all but kFirstLevel.
+  };
+  
+  /** \details
+    Returns the data associated with this GraphNode object.
+  */
+  void* data() const { return m_pData; }
+
+  /** \details
+    Sets the data associated with this GraphNode object.
+    
+    \param pData [in] Pointer to the data.
+  */
+  void setData(
+    void* pData) { m_pData = pData; }
+  
+  /** \details
+    Return the number of outgoing references associated with this GraphNode object.
+  */
+  int numOut() const { return m_outgoing.size(); }
+  
+  /** \details
+    Return the number of incoming references associated with this GraphNode object.
+  */
+  int numIn() const { return m_incoming.size(); } 
+   
+  /** \details
+    Returns the specified incoming reference of this GraphNode object.
+    
+    \param refIndex [in]  Reference index. 
+    
+    \remarks
+    Returns a null pointer if and only if the index is not valid.
+  */
+  OdDbGraphNode* in(
+    int refIndex) const { return m_incoming.at(refIndex); }
+
+  /** \details
+    Returns the specified outgoing reference of this GraphNode object.
+    
+    \param refIndex [in]  Reference index. 
+    \remarks
+    Returns a null pointer if and only if the index is not valid.
+  */
+  OdDbGraphNode* out(
+    int refIndex) const { return m_outgoing.at(refIndex); }
+  
+  /** \details
+    Creates an outgoing reference, in this GraphNode object, to the specified GraphNode object.  
+    
+    \param pTo [in]  Pointer to the outgoing GraphNode.
+
+    \remarks
+    Creates an incoming reference to this GraphNode object in *pTo.
+    
+    Throws:
+    OdError(eInvalidOwnerObject) if the specified GraphNode object are not in the same Graph object as this
+    GraphNode object.
+    
+    \sa
+    OdDbGraph::addEdge
+  */
+  void addRefTo(
+    OdDbGraphNode* pTo);
+  
+  /** \details
+    Removes the outgoing reference, in this GraphNode object, to the specified GraphNode object.  
+    
+    \param pTo [in]  Pointer to the outgoing GraphNode.
+
+    \remarks
+    Removes the incoming reference to this GraphNode object in the outgoing GraphNode object.
+    
+    The specified GraphNode object must be part of the same graph as this GraphNode object.
+  */
+  void removeRefTo(
+    OdDbGraphNode* pNode);
+
+  /** \details
+    Removes all references in and to this GraphNode object.  
+    
+    \remarks
+    Always called by ~OdDbGraphNode().
+  */
+  void disconnectAll();
+  
+  /** \details
+    Returns the Graph object to which this GraphNode object is attached.
+  */
+  OdDbGraph* owner() const { return m_pOwner; }
+  
+  /** \details
+    Returns true if and only if the all the specified set flag bits are set in this GraphNode object.
+    
+    \param flags [in]  Flag bits.
+    
+    \remarks
+    flags must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value    Description
+    kNone             0x00     None.
+    kVisited          0x01     Used internally by OdDbGraph::findCycles() and while traversing a graphs with cycles.
+    kOutsideRefed     0x02     Used internally by Xref detach.
+    kSelected         0x04     User selection. Set by getOutgoing.
+    kInList           0x08     Is in list. Set by getOutgoing.
+    kListAll          0x0E     Used to clear kSelected, kInList, kOutsideRefed.
+    kFirstLevel       0x10     The node is connected to the root node. Read Only.
+    kUnresTree        0x20     The tree is unresolved.
+    kAll              0x2F     Used to clear all but kFirstLevel.
+    </table>
+  */
+  bool isMarkedAs(
+    OdUInt8 flags) const { return ((m_flags & flags)==flags); }
+  
+  /** \details
+    Sets the specified set flag bits in this GraphNode object.
+    
+    \param flags [in]  Flag bits.
+    
+    \remarks
+    flags must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value    Description
+    kNone             0x00     None.
+    kVisited          0x01     Used internally by OdDbGraph::findCycles() and while traversing a graphs with cycles.
+    kOutsideRefed     0x02     Used internally by Xref detach.
+    kSelected         0x04     User selection. Set by getOutgoing.
+    kInList           0x08     Is in list. Set by getOutgoing.
+    kListAll          0x0E     Used to clear kSelected, kInList, kOutsideRefed.
+    kFirstLevel       0x10     The node is connected to the root node. Read Only.
+    kUnresTree        0x20     The tree is unresolved.
+    kAll              0x2F     Used to clear all but kFirstLevel.
+    </table>
+  */
+  void markAs(
+    OdUInt8 flags)
+  {
+    if(!GETBIT(flags, kFirstLevel))
+    {
+      m_flags |= flags;
+    }
+    else
+    {
+      throw OdError(eInvalidInput);
+    }
+  }
+
+  /** \details
+    Clears the specified set flag bits in this GraphNode object.
+    
+    \param flags [in]  Flag bits.
+    
+    \remarks
+    flags must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value    Description
+    kNone             0x00     None.
+    kVisited          0x01     Used internally by OdDbGraph::findCycles() and while traversing a graphs with cycles.
+    kOutsideRefed     0x02     Used internally by Xref detach.
+    kSelected         0x04     User selection. Set by getOutgoing.
+    kInList           0x08     Is in list. Set by getOutgoing.
+    kListAll          0x0E     Used to clear kSelected, kInList, kOutsideRefed.
+    kFirstLevel       0x10     The node is connected to the root node. Read Only.
+    kUnresTree        0x20     The tree is unresolved.
+    kAll              0x2F     Used to clear all but kFirstLevel.
+    </table>
+  */
+  void clear(
+    OdUInt8 flags)
+  {
+    if(!GETBIT(flags, kFirstLevel))
+    {
+      m_flags &= (~flags);
+    }
+    else
+    {
+      throw OdError(eInvalidInput);
+    }
+  }
+
+    
+  /** \details
+    Marks this GraphNode object and all nested outgoing GraphNode objects with the specified flags.
+    
+    \param flags [in]  Flag bits.
+    \param pNodeArray [in]  Pointer to a GraphNode array.  
+
+    \remarks
+    If pNodeArray is specified, this function appends this GraphNode object and all 
+    nested outgoing GraphNode objects, to the specified array. While tranversing a branch,
+    if any GraphNode object already has the flag bits set, the branch is no longer followed.
+
+    The user must clear the flags with OdDbGraph::clearAll() or OdDbGraphNode::clear() when done with them.
+    
+    flags must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value    Description
+    kNone             0x00     None.
+    kVisited          0x01     Used internally by OdDbGraph::findCycles() and while traversing a graphs with cycles.
+    kOutsideRefed     0x02     Used internally by Xref detach.
+    kSelected         0x04     User selection. Set by getOutgoing.
+    kInList           0x08     Is in list. Set by getOutgoing.
+    kListAll          0x0E     Used to clear kSelected, kInList, kOutsideRefed.
+    kFirstLevel       0x10     The node is connected to the root node. Read Only.
+    kUnresTree        0x20     The tree is unresolved.
+    kAll              0x2F     Used to clear all but kFirstLevel.
+    </table>
+    
+    \note
+    This function is not implemented, and will generate a link error if you reference it.
+  */
+  void markTree(
+    OdUInt8 flags, 
+    OdDbGraphNodeArray* pNodeArray = 0);
+  
+  // Circularity detection methods
+  
+  /** \details
+    Returns the number of outgoing cyclical references associated with this GraphNode object.
+    
+    \note
+    This function returns valid results only if OdDbGraph::findCycles() has been called
+    with no intervening changes to the graph.
+  */
+  int numCycleOut() const { return m_cycleOut.size(); }
+
+  /** \details
+    Returns the number of incoming cyclical references associated with this GraphNode object.
+    
+    \note
+    This function returns valid results only if OdDbGraph::findCycles() has been called
+    with no intervening changes to the graph.
+  */
+  int numCycleIn() const { return m_cycleIn.size(); }
+  
+  /** \details
+    Returns the specified incoming cyclical reference of this GraphNode object.
+    
+    \param refIndex [in]  Reference index. 
+
+    \remarks
+    Returns a null pointer if and only if the index is not valid.
+
+    \note
+    This function returns valid results only if OdDbGraph::findCycles() has been called
+    with no intervening changes to the graph.
+  */
+  OdDbGraphNode* cycleIn(
+    int refIndex) const { return m_cycleIn[refIndex]; }
+
+  /** \details
+    Returns the specified outgoing cyclical reference of this GraphNode object.
+    
+    \param refIndex [in]  Reference index. 
+
+    \remarks
+    Returns a null pointer if and only if the index is not valid.
+
+    \note
+    This function returns valid results only if OdDbGraph::findCycles() has been called
+    with no intervening changes to the graph.
+  */
+  OdDbGraphNode* cycleOut(
+    int refIndex) const  { return m_cycleOut[refIndex]; }
+  
+  /** \details
+    Returns the next outgoing cyclical reference of this GraphNode object.
+    
+    \remarks
+    This function returns cycleOut(0).
+
+    \remarks
+    Returns a null pointer if cycleOut(0) == 0.
+
+    \note
+    This function returns valid results only if OdDbGraph::findCycles() has been called
+    with no intervening changes to the graph.
+  */
+  OdDbGraphNode* nextCycleNode() const { return cycleOut(0); }
+  
+  /** \details
+    Returns true if and only if this GraphNode object is part of a cyclical reference.
+
+    \note
+    This function returns valid results only if OdDbGraph::findCycles() has been called
+    with no intervening changes to the graph.
+  */
+  bool isCycleNode() const { return (numCycleOut() != 0 || numCycleIn() != 0); }
+  
+private:
+  void setOwner(
+    OdDbGraph* pGraph) 
+  {
+    if(m_pOwner)
+    {
+      ODA_FAIL();
+      throw OdError(eInvalidOwnerObject);
+    }
+    m_pOwner = pGraph;
+  }
+  
+  friend struct if_leaf_push_to;
+  friend struct clear_cycles;
+  friend void break_edge(OdDbGraphNode* , OdDbGraphNode* );
+  
+  void*               m_pData;
+  OdUInt8             m_flags;
+  OdDbGraphNodeArray  m_outgoing;
+  OdDbGraphNodeArray  m_incoming;
+  OdDbGraph*          m_pOwner;
+  OdDbGraphNodeArray  m_cycleOut;
+  OdDbGraphNodeArray  m_cycleIn;
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdDbGraphNode object pointers.
+*/
+typedef OdSmartPtr<OdDbGraphNode> OdDbGraphNodePtr;
+
+/** \details
+    This class implements stacks for OdDbGraphNode object pointers.
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class OdDbGraphStack
+{
+public:
+  /** \param initPhysicalLength [in]  Initial Physical Length.
+      \param initGrowLength [in]  Initial Grow Length.
+
+
+    \remarks
+    Physical Length is the maximum number of entries in this Stack object before it automatically grows.
+    
+    Grow Length is the number of entries by which the Physical Length will grow as required.
+  */
+  OdDbGraphStack(
+    int initPhysicalLength = 0, 
+    int initGrowLength = 8)
+    : m_stack(initPhysicalLength, initGrowLength) {}
+
+  ~OdDbGraphStack() {}
+
+  /** \details
+    Pushes the specified GraphNode onto this Stack object.
+    
+    \param pNode [in]  Pointer to the node to be pushed.
+  */
+  void push(
+    OdDbGraphNode* pNode) { m_stack.push_back(pNode); }
+
+  /** \details
+    Pops and returns the GraphNode at the top of this Stack object.
+    
+    \remarks
+    Returns a null pointer if this Stack object is empty.
+  */
+  OdDbGraphNode* pop()
+  {
+    if(!isEmpty())
+    {
+      OdDbGraphNode* pRes = top();
+      m_stack.removeLast();
+      return pRes;
+    }
+    return 0;
+  }
+
+
+  /** \details
+    Returns the OdDbGraphNode at the top of this Stack object.
+
+    \remarks
+    Returns a null pointer if this Stack object is empty.
+  */
+  OdDbGraphNode* top() const { return isEmpty() ? 0 : m_stack.last(); }
+
+  /** \details
+    Returns true if and only if this Stack object is empty.
+  */
+  bool isEmpty() const { return m_stack.empty(); }
+private:
+  OdDbGraphNodeArray  m_stack;
+};
+
+/** \details
+    This class implements generic graph objects.
+    
+    \remarks
+    A graph consists of a collection of nodes bi-directionally linked by directional edges.
+    
+    An edge connected to a node is represented as a pointer or reference to the node at the other
+    end of the edge.
+ 
+    References are classified as either incoming or outgoing. Every incoming reference has
+    a corresponding outgoing reference and vice versa.
+
+    Each GraphNode object can have any number of references associated with it, enabling the
+    implementation of any graph structure.
+
+    \sa
+    * OdDbGraphNode
+    * OdDbGraphStack
+    * OdDbXrefGraph
+    * OdDbXrefGraphNode
+    
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGraph
+{
+  friend class OdDbGraphNode;
+public:
+  OdDbGraph() : m_bDirty(false), m_nNonCycleNodes(0) {}
+  virtual ~OdDbGraph();
+  
+  /** \details
+    Returns the specified GraphNode object of this Graph object.
+    
+    \param nodeIndex [in]  Node index. 
+  */
+  OdDbGraphNode* node(
+    int nodeIndex) const { return m_nodes.at(nodeIndex); }
+  
+  /** \details
+    Returns the root (first) GraphNode object of this Graph object.
+    
+    \remarks
+    Returns a null pointer if isEmpty().
+  */
+  OdDbGraphNode* rootNode() const;
+  
+  /** \details
+    Returns the specified incoming reference of this Graph object.
+    
+    \param refIndex [in]  Reference index. 
+  */
+  int numNodes() const { return m_nodes.size(); }
+
+  /** \details
+    Returns true if and only if this Graph object is empty.
+  */
+  bool isEmpty() const { return numNodes() == 0; }
+  
+  /** \details
+    Adds the specifed GraphNode object to this Graph object.
+    
+    \param pNode [in]  Pointer to the GraphNode object.
+    
+    \remarks
+    *pNode must be created with new(), and should not be deleted once added to this Graph object; 
+    This Graph object will delete the GraphNode when it is no longer needed.
+    
+    Throws:
+    OdError(eInvalidOwnerObject) if the specified GraphNode object already has an owner.
+  */
+    void addNode(
+    OdDbGraphNode* pNode);
+  
+  /** \details
+    Adds the specified edge to this Graph object.
+
+    \param pFrom [in]  Pointer to the GraphNode at the start of the edge.
+    \param pTo [in]  Pointer to the GraphNode at the end of the edge.
+    
+    \remarks
+    Creates an outgoing reference to *pTo in *pFrom, and an incoming reference to *pFrom in *pTo. 
+        
+    Throws:
+    OdError(eInvalidOwnerObject) if the specified GraphNode objects are not in the same Graph object.
+  */
+    void addEdge(
+    OdDbGraphNode* pFrom, 
+    OdDbGraphNode* pTo);
+  
+  /** \details
+    Removes the specified node from this GraphNode object, and all references to it. 
+
+    \param pNode [in]  Pointer to the GraphNode object.
+  */
+    void delNode(
+    OdDbGraphNode* pNode);
+  
+  /** \details
+    Removes all nodes and cycle nodes from this Graph object.
+
+    \remarks
+    Always called by ~OdDbGraph().  
+  */
+  void reset();
+
+  /** \details
+    Clears the specified set flag bits in the GraphNode objects of this Graph object.
+    
+    \param flags [in]  Flag bits.
+    
+    \remarks
+    flags must be a combination of one or more of the following:
+    
+    <table>
+    Name                             Value    Description
+    OdDbGraphNode::kNone             0x00     None.
+    OdDbGraphNode::kVisited          0x01     Used internally by OdDbGraph::findCycles() and while traversing a graphs with cycles.
+    OdDbGraphNode::kOutsideRefed     0x02     Used internally by Xref detach.
+    OdDbGraphNode::kSelected         0x04     User selection. Set by getOutgoing.
+    OdDbGraphNode::kInList           0x08     Is in list. Set by getOutgoing.
+    OdDbGraphNode::kListAll          0x0E     Used to clear kSelected, kInList, kOutsideRefed.
+    OdDbGraphNode::kFirstLevel       0x10     The node is connected to the root node. Read Only.
+    OdDbGraphNode::kUnresTree        0x20     The tree is unresolved.
+    OdDbGraphNode::kAll              0x2F     Used to clear all but kFirstLevel.
+    </table>
+
+    OdDbGraphNode::kListAll and OdDbGraphNode::kAll are intended to be used with this function.
+  */
+  void clearAll(
+    OdUInt8 flags);
+  
+  /** \details
+    Adds to the specified array, the nested outgoing GraphNode objects from the specified GraphNode objects.
+    \param outgoing [in/out] Array of GraphNode objects. 
+
+    \remarks
+    The user must clear the kListAll flags with OdDbGraph::clearAll() or OdDbGraphNode::clear() when done with them.
+  */
+  void getOutgoing(
+    OdDbGraphNodeArray& outgoing);
+  
+  /** \details
+    Finds the cyclical nodes for this Graph object.
+    \param pStart [in]  Pointer to the starting node from which to search. Usually defaulted.
+
+    \returns
+    Returns true if and only if there are any cyclical GraphNodes.
+    
+    \remarks
+    This function must be called with no intervening changes to the graph, prior to querying cycle information.
+  */
+  virtual bool findCycles(
+    OdDbGraphNode* pStart = 0);
+  /** \remarks
+    Removes the specified edge, and updates the cyclical information for this Graph object.
+
+    \param pFrom [in]  Pointer to the GraphNode at the start of the edge.
+    \param pTo [in]  Pointer to the GraphNode at the end of the edge.
+  */
+  void breakCycleEdge(
+    OdDbGraphNode* pFrom, 
+    OdDbGraphNode* pTo);
+  
+protected:
+  /** \details
+    Removes all cyclical information determined by findCycles.
+    
+    \ewmarks
+    This function does not remove cyclical edges, and is intended
+    only for error cleanup.
+    
+    \sa
+    breakCycleEdge
+  */
+  void clearAllCycles();
+private:
+  OdDbGraph(
+    const OdDbGraph&);
+  OdDbGraph& operator =(
+    const OdDbGraph&);
+  
+  void removeLeaves(
+    OdDbGraphStack& stack);
+  void setDirty() { m_bDirty = true; }
+  bool isDirty() const { return m_bDirty; }
+  bool m_bDirty;
+  OdDbGraphNodeArray::size_type m_nNonCycleNodes;
+  OdDbGraphNodeArray m_nodes;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBGRAPH_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGrip.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGrip.h
new file mode 100755
index 0000000..5af0612
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGrip.h
@@ -0,0 +1,756 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBGRIP_INCLUDED_
+#define _ODDBGRIP_INCLUDED_ /*!DOM*/
+
+#include "TD_PackPush.h"
+#include "Ge/GePoint3d.h"
+#include "SharedPtr.h"
+#include "DbStubPtrArray.h"
+#include "GsMarkerArray.h"
+
+class OdDbDimData;
+typedef OdArray<OdDbDimData*, OdMemoryAllocator<OdDbDimData*> > OdDbDimDataPtrArray;
+
+class OdGiWorldDraw;
+class OdGiViewportDraw;
+class OdGiViewport;
+class OdDbGripData;
+class OdDbCustomOsnapMode;
+typedef void* ODHMENU;
+
+/** \details
+    This template class is a specialization of the OdArray class template for OdDbGripData shared pointers.
+*/
+typedef OdArray<OdDbGripData> OdDbGripDataArray;
+
+typedef OdSmartPtr<OdDbCustomOsnapMode> OdDbCustomOsnapModePtr;
+
+/** \details
+    This namespace contains functions for working with OdDbEntity.
+
+    <group TD_Namespaces>
+*/
+namespace OdDbGripOperations
+{
+  enum DrawType
+  {
+    kWarmGrip = 0,
+    kHoverGrip,
+    kHotGrip,
+    kDragImageGrip
+  };
+
+  enum GripStatus
+  {
+    kGripStart = 0,
+    kGripEnd,
+    kGripAbort,
+    kStretch,
+    kMove,
+    kRotate,
+    kScale,
+    kMirror,
+    kDimFocusChanged,
+    kPopUpMenu
+  };
+
+  enum GripFlags
+  {
+    kSkipWhenShared           = 0x001,
+    kDisableRubberBandLine    = 0x002,
+    kDisableModeKeywords      = 0x004,
+    kDrawAtDragImageGripPoint = 0x008,
+    kTriggerGrip              = 0x010,
+    kTurnOnForcedPick         = 0x020,
+    kMapGripHotToRtClk        = 0x040,
+    kGizmosEnabled            = 0x080,
+    kGripIsPerViewport        = 0x100
+  };
+
+  enum GripContextFlags
+  {
+    kSharedGrip    = 0x01,
+    kMultiHotGrip  = 0x02
+  };
+
+  enum GetGripPointsFlags
+  {
+    kGripPointsOnly    = 0x01,
+    kCyclableGripsOnly = 0x02,
+    kDynamicDimMode    = 0x04
+  };
+
+  enum MoveGripPointsFlags
+  {
+    kOsnapped  = 0x01,
+    kPolar     = 0x02,
+    kOtrack    = 0x04,
+    kZdir      = 0x08,
+    kKeyboard  = 0x10
+  };
+}
+
+namespace OdDb
+{
+  enum OsnapMask
+  {
+    kOsMaskEnd          = 0x000001,
+    kOsMaskMid          = 0x000002,
+    kOsMaskCen          = 0x000004,
+    kOsMaskNode         = 0x000008,
+    kOsMaskQuad         = 0x000010,
+    kOsMaskInt          = 0x000020,
+    kOsMaskIns          = 0x000040,
+    kOsMaskPerp         = 0x000080,
+    kOsMaskTan          = 0x000100,
+    kOsMaskNear         = 0x000200,
+    kOsMaskQuick        = 0x000400,
+    kOsMaskApint        = 0x000800,
+    kOsMaskImmediate    = 0x010000,
+    kOsMaskAllowTan     = 0x020000,
+    kOsMaskDisablePerp  = 0x040000,
+    kOsMaskRelCartesian = 0x080000,
+    kOsMaskRelPolar     = 0x100000,
+    kOsMaskNoneOverride = 0x200000
+  };
+}
+
+typedef bool (*GripWorldDrawPtr)(
+  OdDbGripData* pThis,
+  OdGiWorldDraw* pWd,
+  OdDbStub* entId,
+  OdDbGripOperations::DrawType type,
+  OdGePoint3d* imageGripPoint,
+  double dGripSize );
+
+typedef void (*GripViewportDrawPtr)(
+  OdDbGripData* pThis,
+  OdGiViewportDraw* pWd,
+  OdDbStub* entId,
+  OdDbGripOperations::DrawType type,
+  OdGePoint3d* imageGripPoint,
+  int gripSize );
+
+typedef OdResult (*GripOperationPtr)(
+  OdDbGripData* pThis,
+  OdDbStub* entId,
+  int iContextFlags );
+
+typedef void (*GripOpStatusPtr)(
+  OdDbGripData* pThis,
+  OdDbStub* entId,
+  OdDbGripOperations::GripStatus status );
+
+typedef const OdChar* (*GripToolTipPtr)( OdDbGripData* pThis );
+
+typedef void (*ContextMenuItemIndexPtr)( unsigned itemIndex );
+
+typedef void (*GripDimensionPtr)(
+  OdDbGripData* pThis,
+  OdDbStub* entId,
+  double dimScale,
+  OdDbDimDataPtrArray& dimData );
+
+typedef OdResult (*GripRtClkHandler)(
+  OdDbGripDataArray& hotGrips,
+  const OdDbStubPtrArray& ents, 
+  OdString& menuName, ODHMENU& menu,
+  ContextMenuItemIndexPtr& cb );
+
+typedef OdResult (*GripInputPointPtr)(
+  OdDbGripData* pThis, OdDbStub* entId, bool& changedPoint,
+  OdGePoint3d& newPoint, const OdGiViewport& viewContext,
+  OdDbStub* viewportId, bool pointComputed, int history,
+  const OdGePoint3d& lastPoint, const OdGePoint3d& rawPoint,
+  const OdGePoint3d& grippedPoint, const OdGePoint3d& cartesianSnappedPoint,
+  const OdGePoint3d& osnappedPoint, OdDb::OsnapMask osnapMask,
+  const OdArray<OdDbCustomOsnapModePtr>& customOsnapModes,
+  OdDb::OsnapMask osnapOverrides,
+  const OdArray<OdDbCustomOsnapModePtr>& customOsnapOverrides,
+  const OdDbStubPtrArray& pickedEntities,
+  const OdArray<OdDbStubPtrArray>& nestedPickedEntities,
+  const OdGsMarkerArray& gsSelectionMark,
+  const OdDbStubPtrArray& keyPointEntities,
+  const OdArray<OdDbStubPtrArray>& nestedKeyPointEntities,
+  const OdGsMarkerArray& keyPointGsSelectionMark,
+  const OdArray<OdSharedPtr<OdGeCurve3d> >& alignmentPaths, const OdGePoint3d& computedPoint); 
+
+/** \details
+    This class passes parameters for the getGripPoints and moveGripPoints functions of OdDbEntity.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class OdDbGripData
+{
+public:
+  ODRX_HEAP_OPERATORS();
+
+  OdDbGripData();
+
+  OdDbGripData(const OdDbGripData&);
+
+  OdDbGripData(const OdGePoint3d& pt, void* AppData,
+    GripOperationPtr hotGrip, GripOperationPtr hoverGrip,
+    GripRtClkHandler RtClk, GripWorldDrawPtr wd,
+    GripViewportDrawPtr vd, GripOpStatusPtr stat,
+    GripToolTipPtr tt, GripDimensionPtr hoverDim,
+    GripDimensionPtr hotGripDim,
+    unsigned bitFlags, OdGePoint3d* altBasePt,
+    GripInputPointPtr inputPointFunc);
+
+  OdDbGripData(const OdGePoint3d& pt, void* AppData,
+    OdRxClass* pAppDataClass,
+    GripOperationPtr hotGrip, GripOperationPtr hoverGrip,
+    GripRtClkHandler RtClk, GripWorldDrawPtr wd,
+    GripViewportDrawPtr vd, GripOpStatusPtr stat,
+    GripToolTipPtr tt, GripDimensionPtr hoverDim,
+    GripDimensionPtr hotGripDim,
+    unsigned bitFlags, OdGePoint3d* altBasePt,
+    GripInputPointPtr inputPointFunc);
+
+  void setAllData(const OdGePoint3d& pt, void* AppData,
+    GripOperationPtr hotGrip, GripOperationPtr hoverGrip,
+    GripRtClkHandler RtClk, GripWorldDrawPtr wd,
+    GripViewportDrawPtr vd, GripOpStatusPtr stat,
+    GripToolTipPtr tt, GripDimensionPtr hoverDim,
+    GripDimensionPtr hotGripDim,
+    unsigned bitFlags, OdGePoint3d* altBasePt,
+    GripInputPointPtr inputPointFunc, 
+    OdRxClass* pAppDataClass);
+
+  OdDbGripData& operator = (const OdDbGripData&);
+
+  const OdGePoint3d& gripPoint() const;
+  void setGripPoint( const OdGePoint3d& pt );
+
+  void* appData() const;
+  void setAppData( void* pAppData );
+
+  OdRxClass* appDataOdRxClass() const;
+  void setAppDataOdRxClass(OdRxClass* pClass);
+
+  GripOperationPtr hotGripFunc() const;
+  void setHotGripFunc( GripOperationPtr pf );
+
+  GripOperationPtr hoverFunc() const;
+  void setHoverFunc( GripOperationPtr pf );
+
+  GripWorldDrawPtr worldDraw() const;
+  void setWorldDraw( GripWorldDrawPtr pf );
+  
+  GripViewportDrawPtr viewportDraw() const;
+  void setViewportDraw( GripViewportDrawPtr pf );
+  
+  GripOpStatusPtr gripOpStatFunc() const;
+  void setGripOpStatFunc( GripOpStatusPtr pf );
+
+  GripToolTipPtr toolTipFunc() const;
+  void setToolTipFunc( GripToolTipPtr pf );
+
+  OdGePoint3d* alternateBasePoint() const;
+  void setAlternateBasePoint( OdGePoint3d* altBasePt );
+
+  unsigned bitFlags() const;
+  void setBitFlags( unsigned flags );
+
+  bool skipWhenShared() const;
+  void setSkipWhenShared( bool skip );
+
+  bool isRubberBandLineDisabled() const;
+  void disableRubberBandLine( bool disable );
+
+  bool areModeKeywordsDisabled() const;
+  void disableModeKeywords( bool disable );
+
+  bool drawAtDragImageGripPoint() const;
+  void setDrawAtDragImageGripPoint( bool atDragPoint );
+
+  bool triggerGrip() const;
+  void setTriggerGrip( bool trigger );
+
+  bool forcedPickOn() const;
+  void setForcedPickOn( bool on );
+
+  bool mapGripHotToRtClk() const;
+  void setMapGripHotToRtClk( bool on );
+
+  bool gizmosEnabled() const;
+  void setGizmosEnabled( bool on );
+
+  bool gripIsPerViewport() const;
+  void setGripIsPerViewport(bool on);
+
+  GripDimensionPtr hoverDimensionFunc() const;
+  void setHoverDimensionFunc( GripDimensionPtr pf );
+
+  GripDimensionPtr hotGripDimensionFunc() const;
+  void setHotGripDimensionFunc( GripDimensionPtr pf );
+
+  GripRtClkHandler rtClk() const;
+  void setRtClk( GripRtClkHandler pf );
+
+  GripInputPointPtr inputPointFunc() const;
+  void setInputPointFunc( GripInputPointPtr pf );
+
+private:
+  void*               m_pAppData;
+  OdRxClass*          m_pAppDataClass;
+  OdGePoint3d         m_gripPt;
+  OdGePoint3d*        m_pAltBasePt;
+  GripOperationPtr    m_pHotGripFunc;
+  GripOperationPtr    m_pHoverFunc;
+  GripWorldDrawPtr    m_pWorldDraw;
+  GripViewportDrawPtr m_pViewportDraw;
+  GripOpStatusPtr     m_pGripOpStatFunc;
+  GripToolTipPtr      m_pToolTipFunc;
+  unsigned        m_bitFlags;
+  GripInputPointPtr   m_pInputPointFunc;
+  GripRtClkHandler    m_pRtClk;
+  GripDimensionPtr    m_pHoverDimensionFunc;
+  GripDimensionPtr    m_pHotGripDimensionFunc;
+};
+
+//
+// Inline methods
+//
+
+inline OdDbGripData::OdDbGripData()
+  : m_pAppData(0)
+  , m_pAppDataClass(0)
+  , m_pAltBasePt(0)
+  , m_pHotGripFunc(0)
+  , m_pHoverFunc(0)
+  , m_pWorldDraw(0)
+  , m_pViewportDraw(0)
+  , m_pGripOpStatFunc(0)
+  , m_pToolTipFunc(0)
+  , m_bitFlags(0)
+  , m_pInputPointFunc(0)
+  , m_pRtClk(0)
+  , m_pHoverDimensionFunc(0)
+  , m_pHotGripDimensionFunc(0)
+{
+}
+
+inline OdDbGripData::OdDbGripData(const OdDbGripData& srcData)
+{
+  m_gripPt                = srcData.gripPoint();
+  m_pAppData              = srcData.appData();
+  m_pAppDataClass         = srcData.appDataOdRxClass();
+  m_pHotGripFunc          = srcData.hotGripFunc();
+  m_pHoverFunc            = srcData.hoverFunc();
+  m_pRtClk                = srcData.rtClk();
+  m_pWorldDraw            = srcData.worldDraw();
+  m_pViewportDraw         = srcData.viewportDraw();
+  m_pGripOpStatFunc       = srcData.gripOpStatFunc();
+  m_pToolTipFunc          = srcData.toolTipFunc();
+  m_pHoverDimensionFunc   = srcData.hoverDimensionFunc();
+  m_pHotGripDimensionFunc = srcData.hotGripDimensionFunc();
+  m_bitFlags              = srcData.bitFlags();
+  m_pAltBasePt            = srcData.alternateBasePoint();
+  m_pInputPointFunc       = srcData.inputPointFunc();
+}
+
+inline
+OdDbGripData::OdDbGripData(const OdGePoint3d& pt, void* AppData,
+                           GripOperationPtr hotGrip, GripOperationPtr hoverGrip,
+                           GripRtClkHandler RtClk, GripWorldDrawPtr wd,
+                           GripViewportDrawPtr vd, GripOpStatusPtr stat,
+                           GripToolTipPtr tt, GripDimensionPtr hoverDim,
+                           GripDimensionPtr hotGripDim,
+                           unsigned bitFlags, OdGePoint3d* altBasePt,
+                           GripInputPointPtr inputPointFunc)
+  : m_pAppData(AppData)
+  , m_pAppDataClass(0)
+  , m_gripPt(pt)
+  , m_pAltBasePt(altBasePt)
+  , m_pHotGripFunc(hotGrip)
+  , m_pHoverFunc(hoverGrip)
+  , m_pWorldDraw(wd)
+  , m_pViewportDraw(vd)
+  , m_pGripOpStatFunc(stat)
+  , m_pToolTipFunc(tt)
+  , m_bitFlags(bitFlags)
+  , m_pInputPointFunc(inputPointFunc)
+  , m_pRtClk(RtClk)
+  , m_pHoverDimensionFunc(hoverDim)
+  , m_pHotGripDimensionFunc(hotGripDim)
+{
+}
+
+inline
+OdDbGripData::OdDbGripData(const OdGePoint3d& pt, void* AppData,
+                           OdRxClass* pAppDataClass,
+                           GripOperationPtr hotGrip, GripOperationPtr hoverGrip,
+                           GripRtClkHandler RtClk, GripWorldDrawPtr wd,
+                           GripViewportDrawPtr vd, GripOpStatusPtr stat,
+                           GripToolTipPtr tt, GripDimensionPtr hoverDim,
+                           GripDimensionPtr hotGripDim,
+                           unsigned bitFlags, OdGePoint3d* altBasePt,
+                           GripInputPointPtr inputPointFunc)
+  : m_pAppData(AppData)
+  , m_pAppDataClass(pAppDataClass)
+  , m_gripPt(pt)
+  , m_pAltBasePt(altBasePt)
+  , m_pHotGripFunc(hotGrip)
+  , m_pHoverFunc(hoverGrip)
+  , m_pWorldDraw(wd)
+  , m_pViewportDraw(vd)
+  , m_pGripOpStatFunc(stat)
+  , m_pToolTipFunc(tt)
+  , m_bitFlags(bitFlags)
+  , m_pInputPointFunc(inputPointFunc)
+  , m_pRtClk(RtClk)
+  , m_pHoverDimensionFunc(hoverDim)
+  , m_pHotGripDimensionFunc(hotGripDim)
+{
+}
+
+inline OdDbGripData& OdDbGripData::operator = (const OdDbGripData& rightSide)
+{
+  m_gripPt                = rightSide.gripPoint();
+  m_pAppData              = rightSide.appData();
+  m_pAppDataClass         = rightSide.appDataOdRxClass();
+  m_pHotGripFunc          = rightSide.hotGripFunc();
+  m_pHoverFunc            = rightSide.hoverFunc();
+  m_pRtClk                = rightSide.rtClk();
+  m_pWorldDraw            = rightSide.worldDraw();
+  m_pViewportDraw         = rightSide.viewportDraw();
+  m_pGripOpStatFunc       = rightSide.gripOpStatFunc();
+  m_pToolTipFunc          = rightSide.toolTipFunc();
+  m_pHoverDimensionFunc   = rightSide.hoverDimensionFunc();
+  m_pHotGripDimensionFunc = rightSide.hotGripDimensionFunc();
+  m_bitFlags              = rightSide.bitFlags();
+  m_pAltBasePt            = rightSide.alternateBasePoint();
+  m_pInputPointFunc       = rightSide.inputPointFunc();
+
+  return *this;
+}
+
+
+inline void
+OdDbGripData::setAllData(const OdGePoint3d& pt, void* pAppData,
+                         GripOperationPtr hotGrip, GripOperationPtr hoverGrip,
+                         GripRtClkHandler RtClk, GripWorldDrawPtr wd,
+                         GripViewportDrawPtr vd, GripOpStatusPtr stat,
+                         GripToolTipPtr tt, GripDimensionPtr hoverDim,
+                         GripDimensionPtr hotGripDim,
+                         unsigned bitFlags, OdGePoint3d* altBasePt,
+                         GripInputPointPtr inputPointFunc, 
+                         OdRxClass* pAppDataClass)
+{
+  m_gripPt = pt;
+  m_pAppData = pAppData;
+  m_pAppDataClass = pAppDataClass;
+  m_pHotGripFunc = hotGrip;
+  m_pHoverFunc = hoverGrip;
+  m_pRtClk = RtClk;
+  m_pWorldDraw = wd;
+  m_pViewportDraw = vd;
+  m_pGripOpStatFunc = stat;
+  m_pToolTipFunc= tt;
+  m_pHoverDimensionFunc = hoverDim;
+  m_pHotGripDimensionFunc = hotGripDim;
+  m_bitFlags = bitFlags;
+  m_pAltBasePt = altBasePt;
+  m_pInputPointFunc = inputPointFunc;
+}
+
+inline const OdGePoint3d& OdDbGripData::gripPoint() const
+{
+  return m_gripPt;
+}
+
+inline void OdDbGripData::setGripPoint( const OdGePoint3d& pt )
+{
+  m_gripPt = pt;
+}
+
+inline void* OdDbGripData::appData() const
+{
+  return m_pAppData;
+}
+
+inline void OdDbGripData::setAppData( void* pAppData )
+{
+  m_pAppData = pAppData;
+}
+
+inline OdRxClass* OdDbGripData::appDataOdRxClass() const
+{
+    return m_pAppDataClass;
+}
+
+inline void OdDbGripData::setAppDataOdRxClass(OdRxClass* appDataClass)
+{
+    m_pAppDataClass = appDataClass;
+}
+
+inline GripOperationPtr OdDbGripData::hotGripFunc() const
+{
+  return m_pHotGripFunc;
+}
+
+inline void OdDbGripData::setHotGripFunc( GripOperationPtr pf )
+{
+  m_pHotGripFunc = pf;
+}
+
+inline GripOperationPtr OdDbGripData::hoverFunc() const
+{
+  return m_pHoverFunc;
+}
+
+inline void OdDbGripData::setHoverFunc( GripOperationPtr pf )
+{
+  m_pHoverFunc = pf;
+}
+
+inline GripWorldDrawPtr OdDbGripData::worldDraw() const
+{
+  return m_pWorldDraw;
+}
+
+inline void OdDbGripData::setWorldDraw( GripWorldDrawPtr pf )
+{
+  m_pWorldDraw = pf;
+}
+
+inline GripViewportDrawPtr OdDbGripData::viewportDraw() const
+{
+  return m_pViewportDraw;
+}
+
+inline void OdDbGripData::setViewportDraw( GripViewportDrawPtr pf )
+{
+  m_pViewportDraw = pf;
+}
+
+inline GripOpStatusPtr OdDbGripData::gripOpStatFunc() const
+{
+  return m_pGripOpStatFunc;
+}
+
+inline void OdDbGripData::setGripOpStatFunc( GripOpStatusPtr pf )
+{
+  m_pGripOpStatFunc = pf;
+}
+
+inline GripToolTipPtr OdDbGripData::toolTipFunc() const
+{
+  return m_pToolTipFunc;
+}
+
+inline void OdDbGripData::setToolTipFunc( GripToolTipPtr pf )
+{
+  m_pToolTipFunc = pf;
+}
+
+inline OdGePoint3d* OdDbGripData::alternateBasePoint() const
+{
+  return m_pAltBasePt;
+}
+
+inline void OdDbGripData::setAlternateBasePoint( OdGePoint3d* altBasePt )
+{
+  m_pAltBasePt = altBasePt;
+}
+
+inline unsigned OdDbGripData::bitFlags() const
+{
+  return m_bitFlags;
+}
+
+inline void OdDbGripData::setBitFlags( unsigned flags )
+{
+  m_bitFlags = flags;
+}
+
+inline bool OdDbGripData::skipWhenShared() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kSkipWhenShared);
+}
+
+inline void OdDbGripData::setSkipWhenShared( bool skip )
+{
+  if (skip)
+    m_bitFlags |= OdDbGripOperations::kSkipWhenShared;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kSkipWhenShared;
+}
+
+inline bool OdDbGripData::isRubberBandLineDisabled() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kDisableRubberBandLine);
+}
+
+inline void OdDbGripData::disableRubberBandLine( bool disable )
+{
+  if (disable)
+    m_bitFlags |= OdDbGripOperations::kDisableRubberBandLine;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kDisableRubberBandLine;
+}
+
+inline bool OdDbGripData::areModeKeywordsDisabled() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kDisableModeKeywords);
+}
+
+inline void OdDbGripData::disableModeKeywords( bool disable )
+{
+  if (disable)
+    m_bitFlags |= OdDbGripOperations::kDisableModeKeywords;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kDisableModeKeywords;
+}
+
+inline bool OdDbGripData::drawAtDragImageGripPoint() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kDrawAtDragImageGripPoint);
+}
+
+inline void OdDbGripData::setDrawAtDragImageGripPoint( bool atDragPoint )
+{
+  if (atDragPoint)
+    m_bitFlags |= OdDbGripOperations::kDrawAtDragImageGripPoint;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kDrawAtDragImageGripPoint;
+}
+
+inline bool OdDbGripData::triggerGrip() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kTriggerGrip);
+}
+
+inline void OdDbGripData::setTriggerGrip( bool trigger )
+{
+  if (trigger)
+    m_bitFlags |= OdDbGripOperations::kTriggerGrip | OdDbGripOperations::kSkipWhenShared;
+  else
+    m_bitFlags &= ~(OdDbGripOperations::kTriggerGrip | OdDbGripOperations::kSkipWhenShared);
+}
+
+inline bool OdDbGripData::forcedPickOn() const
+{
+    return 0 != (m_bitFlags & OdDbGripOperations::kTurnOnForcedPick);
+}
+
+inline void OdDbGripData::setForcedPickOn( bool on )
+{
+  if (on)
+    m_bitFlags |= OdDbGripOperations::kTurnOnForcedPick;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kTurnOnForcedPick;
+}
+
+inline bool OdDbGripData::mapGripHotToRtClk() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kMapGripHotToRtClk);
+}
+
+inline void OdDbGripData::setMapGripHotToRtClk( bool on )
+{
+  if (on)
+    m_bitFlags |= OdDbGripOperations::kMapGripHotToRtClk;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kMapGripHotToRtClk;
+}
+
+inline bool OdDbGripData::gizmosEnabled() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kGizmosEnabled);
+}
+
+inline void OdDbGripData::setGizmosEnabled( bool on )
+{
+  if (on)
+    m_bitFlags |= OdDbGripOperations::kGizmosEnabled;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kGizmosEnabled;
+}
+
+inline bool OdDbGripData::gripIsPerViewport() const
+{
+  return 0 != (m_bitFlags & OdDbGripOperations::kGripIsPerViewport);
+}
+
+inline void OdDbGripData::setGripIsPerViewport(bool on)
+{
+  if (on)
+    m_bitFlags |= OdDbGripOperations::kGripIsPerViewport;
+  else
+    m_bitFlags &= ~OdDbGripOperations::kGripIsPerViewport;
+}
+
+inline GripDimensionPtr OdDbGripData::hoverDimensionFunc() const
+{
+  return m_pHoverDimensionFunc;
+}
+
+inline void OdDbGripData::setHoverDimensionFunc(GripDimensionPtr pf)
+{
+  m_pHoverDimensionFunc = pf;
+}
+
+inline GripDimensionPtr OdDbGripData::hotGripDimensionFunc() const
+{
+  return m_pHotGripDimensionFunc;
+}
+
+inline void OdDbGripData::setHotGripDimensionFunc(GripDimensionPtr pf)
+{
+  m_pHotGripDimensionFunc = pf;
+}
+
+inline GripRtClkHandler OdDbGripData::rtClk() const
+{
+  return m_pRtClk;
+}
+
+inline void OdDbGripData::setRtClk(GripRtClkHandler pf)
+{
+  m_pRtClk = pf;
+}
+
+inline GripInputPointPtr OdDbGripData::inputPointFunc() const
+{
+  return m_pInputPointFunc;
+}
+
+inline void OdDbGripData::setInputPointFunc(GripInputPointPtr pf)
+{
+  m_pInputPointFunc = pf;
+}
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBGRIP_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGripPoints.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGripPoints.h
new file mode 100755
index 0000000..a8b36d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGripPoints.h
@@ -0,0 +1,283 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _ODDBGPIPPOINTS_INCLUDED_
+#define _ODDBGPIPPOINTS_INCLUDED_
+
+#include "RxObject.h"
+#include "RxModule.h"
+#include "IntArray.h"
+#include "DbEntity.h"
+#include "Gi/GiDrawable.h"
+
+
+/** \details
+    This class is the Grip Points Protocol Extension class.
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbGripPointsPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGripPointsPE);
+  
+  /** \details
+    Returns all grip points of the specified entity.
+
+    \param pEntity [in]  Pointer to the entity.
+    \param gripPoints [in/out] Receives an array of WCS grip points.
+
+    \remarks
+    Grip points are appended to the specified array.
+    
+    \returns 
+    Returns eOk if successful, or an appropriate error code if not.
+    The default implementation of this function returns eNotImplemented.
+  */
+  virtual OdResult getGripPoints(
+    const OdDbEntity* pEntity,
+    OdGePoint3dArray& gripPoints ) const;
+
+  /** \details
+    Moves the specified grip points of the specified entity.
+    
+    \param pEntity [in]  Pointer to the entity.
+    \param indices [in]  Array of indicies.
+    \param offset [in] The direction and magnitude of the grip points offset (WCS).
+    
+    \remarks
+    Each element in gripPoints has a corresponding entry in indices, which specifies the index of 
+    the grip point as returned by getGripPoints.
+    
+    \returns
+    Returns eOk if successful, or an appropriate error code if not.
+    The default implementation of this function returns eNotImplemented.
+  */
+    virtual OdResult moveGripPointsAt(
+    OdDbEntity* pEntity,
+    const OdIntArray& indices,
+    const OdGeVector3d& offset );
+
+  /** \details
+    Returns OdDbGripData objects for grip points of this entity.
+
+    \param pEntity [in]  Pointer to the entity.
+    \param grips [in/out] Receives an array of OdDbGripData objects.
+
+    \remarks
+    Grip points are appended to the specified array.
+    When eNotImplemented is returned, the application should call the other overload of the getGripPoints() method.
+    The default implementation of this function returns eNotImplemented.
+  */
+  virtual OdResult getGripPoints(
+    const OdDbEntity* pEntity,
+    OdDbGripDataPtrArray& grips,
+    const double curViewUnitSize,
+    const int gripSize,
+    const OdGeVector3d& curViewDir,
+    const int bitFlags ) const;
+
+  /** \details
+    Moves the specified grip points of this entity.
+    
+    \param pEntity [in]  Pointer to the entity.
+    \param grips [in]  Array of OdDbGripData identifiers.
+    \param offset [in] The direction and magnitude of the grip points offset (WCS).
+
+    \remarks
+    The default implementation of this function returns eNotImplemented. 
+  */
+    virtual OdResult moveGripPointsAt(
+    OdDbEntity* pEntity,
+    const OdDbVoidPtrArray& grips,
+    const OdGeVector3d& offset,
+    int bitFlags );
+
+  /** \details
+    Returns all stretch points of the specified entity.
+
+    \param pEntity [in]  Pointer to the entity.
+    \param stretchPoints [in/out]  Receives an array of WCS stretch points.
+
+    \remarks
+    Stretch points are appended to the specified array.
+    
+    Returns eOk if successful, or an appropriate error code if not.
+    The default implementation of this function returns eNotImplemented.
+  */
+  virtual OdResult getStretchPoints(
+    const OdDbEntity* pEntity,
+    OdGePoint3dArray& stretchPoints ) const;
+  /** \details
+    Moves the specified stretch points of this entity.
+    
+    \param pEntity [in]  Pointer to the entity.
+    \param indices [in]  Array of indicies.
+    \param offset [in] The direction and magnitude of the stretch points offset (WCS).
+    
+    \remarks
+    Each element in stretchPoints has a corresponding entry in indices, which specifies the index of 
+    the stretch point as returned by getStretchPoints.
+    
+    Returns eOk if successful, or an appropriate error code if not.
+    The default implementation of this function returns eNotImplemented.
+  */
+    virtual OdResult moveStretchPointsAt(
+    OdDbEntity* pEntity,
+    const OdIntArray& indices,
+    const OdGeVector3d& offset );
+
+  /** \details
+    Returns all appropriate object snap points of the specified entity.
+    
+    \param pEntity [in]  Pointer to the entity.
+    \param osnapMode [in]  The object snap mode being queried.
+    \param gsSelectionMark [in]  The GS marker of the subentity being queried.
+    \param pickPoint [in]  The WCS point being queried.
+    \param lastPoint [in]  The WCS point picked before pickPoint.
+    \param viewXform [in]  The WCS->DCS transformation matrix.
+    \param ucs [in]  The WCS->UCS transformation matrix.
+    \param snapPoints [in/out] Receives an array of UCS object snap points.
+    
+    \remarks
+    Object snap points are appended to the specified array.
+    
+    osnapMode must be one of the following:
+    
+    <table>
+    Name                      Value   Description 
+    OdDb::kOsModeEnd          1       Endpoint
+    OdDb::kOsModeMid          2       Midpoint
+    OdDb::kOsModeCen          3       Center
+    OdDb::kOsModeNode         4       Node
+    OdDb::kOsModeQuad         5       Quadrant
+    OdDb::kOsModeIntersec     6       Intersection
+    OdDb::kOsModeIns          7       Insertion point
+    OdDb::kOsModePerp         8       Perpendicular
+    OdDb::kOsModeTan          9       Tangent
+    OdDb::kOsModeNear         10      Nearest
+    OdDb::kOsModeApint        11      Apparent intersection
+    OdDb::kOsModePar          12      Parallel
+    OdDb::kOsModeStart        13      Unknown 
+    </table>
+   
+    The default implementation of this function returns eNotImplemented.
+  */
+    virtual OdResult getOsnapPoints( 
+    const OdDbEntity* pEntity, 
+    OdDb::OsnapMode osnapMode, 
+    OdGsMarker gsSelectionMark, 
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint, 
+    const OdGeMatrix3d& xWorldToEye, 
+    OdGePoint3dArray& snapPoints ) const;
+
+  /** \details
+  Returns all appropriate object snap points of the specified entity.
+
+  \param pEntity [in]  Pointer to the entity.
+  \param osnapMode [in]  The object snap mode being queried.
+  \param gsSelectionMark [in]  The GS marker of the subentity being queried.
+  \param pickPoint [in]  The WCS point being queried.
+  \param lastPoint [in]  The WCS point picked before pickPoint.
+  \param viewXform [in]  The WCS->DCS transformation matrix.
+  \param ucs [in]  The WCS->UCS transformation matrix.
+  \param snapPoints [in/out] Receives an array of UCS object snap points.
+  \param insert [in] Current insertion matrix
+
+  \remarks
+  Object snap points are appended to the specified array.
+
+  osnapMode must be one of the following:
+
+  <table>
+  Name                      Value   Description 
+  OdDb::kOsModeEnd          1       Endpoint
+  OdDb::kOsModeMid          2       Midpoint
+  OdDb::kOsModeCen          3       Center
+  OdDb::kOsModeNode         4       Node
+  OdDb::kOsModeQuad         5       Quadrant
+  OdDb::kOsModeIntersec     6       Intersection
+  OdDb::kOsModeIns          7       Insertion point
+  OdDb::kOsModePerp         8       Perpendicular
+  OdDb::kOsModeTan          9       Tangent
+  OdDb::kOsModeNear         10      Nearest
+  OdDb::kOsModeApint        11      Apparent intersection
+  OdDb::kOsModePar          12      Parallel
+  OdDb::kOsModeStart        13      Unknown 
+  </table>
+
+  The default implementation of this function returns eNotImplemented.
+  */
+    virtual OdResult getOsnapPoints( 
+    const OdDbEntity* pEntity, 
+    OdDb::OsnapMode osnapMode, 
+    OdGsMarker gsSelectionMark, 
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint, 
+    const OdGeMatrix3d& xWorldToEye, 
+    OdGePoint3dArray& snapPoints,
+    const OdGeMatrix3d& insert) const;
+
+  /** \details
+	Gets the grip points and supporting information about the grips for a subentity.
+
+  \param pEntity [in]  Pointer to the entity.
+	\param path [in]  The OdDbFullSubentPath to the subentity.
+	\param grips [in/out] Receives an array of pointers of OdDbGripData objects, one object for each grip point in the subentity.
+	\param curViewUnitSize [in] The size (in pixels) of one drawing unit in the current viewport.
+	\param gripSize [in] The current grip size (in pixels).
+	\param curViewDir [in] The view direction in the current viewport.
+	\param bitflags [in] The bitmap of one or more flags specified by the GetGripPointsFlags enumeration.
+  */
+
+  virtual OdResult getGripPointsAtSubentPath(   const OdDbEntity* pEntity,
+                        const OdDbFullSubentPath& path, OdDbGripDataPtrArray& grips,
+											  const double curViewUnitSize, const int gripSize,
+											  const OdGeVector3d& curViewDir, const OdUInt32 bitflags) const;
+
+  /** \details
+	Applies a vector offset to one or more grip points exposed by subentities on the object.
+
+  \param pEntity [in]  Pointer to the entity.
+	\param paths [in]  The array of OdDbFullSubentPath objects.
+	\param gripAppData [in]  The array of pointers of OdDbGripData objects.
+	\param offset [in]  The vector (in WCS coordinates) indicating the direction and magnitude of the translation.
+	\param bitflags [in]  The bitmap of one or more flags specified by the GetGripPointsFlags enumeration.
+  */
+
+  virtual OdResult moveGripPointsAtSubentPaths(OdDbEntity* pEntity,
+                        const OdDbFullSubentPathArray& paths, const OdDbVoidPtrArray& gripAppData,
+												const OdGeVector3d& offset, const OdUInt32 bitflags);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbGripPointsPE object pointers.
+*/
+typedef OdSmartPtr<OdDbGripPointsPE> OdDbGripPointsPEPtr;
+
+#endif //_ODDBGPIPPOINTS_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGroup.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGroup.h
new file mode 100755
index 0000000..3a34c6e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGroup.h
@@ -0,0 +1,454 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBGROUP_INCLUDED_
+#define _ODDBGROUP_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+class OdDbGroupIterator;
+class OdCmColor;
+class OdDbGroupImpl;
+class OdDbGroup;
+
+/** \details
+    This class defines Iterator objects that traverse entries in OdDbGroup 
+    objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGroupIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGroupIterator);
+
+  /** \details
+    Returns the entity currently referenced by this Iterator object.
+  
+    \param openMode [in]  Mode in which to open the current entity.
+
+    \remarks
+    Returns a null SmartPointer if not successful.
+  */
+  virtual OdDbObjectPtr getObject(
+    OdDb::OpenMode openMode) = 0;
+
+  /** \details
+    Returns the Object ID of the entity currently referenced by this Iterator object.
+  */
+  virtual OdDbObjectId objectId() const = 0;
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() const = 0;
+
+  /** \details
+    Sets this Iterator object to reference the entity following the current entity.
+    
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+    virtual bool next() = 0;
+
+  /*
+     virtual OdResult subGetClassID(void* pClsid) const;
+  */
+protected:
+  OdDbGroupIterator() {}
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbGroupIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbGroupIterator> OdDbGroupIteratorPtr;
+
+/** \details
+    This class represents Group objects in an OdDbDatabase instance.
+
+    \remarks
+    Only top level entities in ModelSpace or PaperSpace can be placed in a Group.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGroup: public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbGroup);
+
+  OdDbGroup();
+
+  /** \details
+    Creates an Iterator object that provides access to the entities in this Group object.
+  */
+  OdDbGroupIteratorPtr newIterator();
+
+  /** \details
+    Returns the description of this Group object (DXF 300).
+  */
+  OdString description() const;
+
+  /** \details
+    Sets the description of this Group object (DXF 300).
+    \param description [in]  Description.
+  */
+  void setDescription(
+    const OdString& description);
+
+  /** \details
+    Returns true if and only if this Group object is selectable (DXF 71).
+  */
+  bool isSelectable() const;
+
+  /** \details
+    Sets this Group object as selectable (DXF 71).
+
+    \param selectable [in]  Selectable flag.
+  */
+  void setSelectable(
+    bool selectable);
+
+  /** \details
+    Returns the name of this Group object.
+  */
+  OdString name() const;
+
+  /** \details
+    Sets the name for this Group object.
+    \param name [in]  Name.
+  */
+  void setName(const OdString& name);
+
+  /** \details
+    Returns true if and only if this Group object is inaccessible.
+      
+    \remarks
+    Currently, only groups in Xrefs are flagged as inaccessable.  
+  */
+  bool isNotAccessible() const;
+
+  /** \details
+    Returns true if and only if this Group object is anonymous (DXF 70).
+  */
+  bool isAnonymous() const;
+
+  /** \details
+    Sets this Group object as anonymous (DXF 70).
+    
+    \remarks
+    The name of this Group object will be set to an automatically generated anonymous group name.
+  */
+  void setAnonymous();
+
+  /** \details
+    Appends the specified entity or entities to this Group object.  
+
+    \param objectId [in]  Object ID of the entity to be appended.
+  */
+  void append(
+    OdDbObjectId objectId);
+
+  /** \param objectIds [in]  Object IDs of the entities to be appended.
+  */
+  void append(
+    const OdDbObjectIdArray& objectIds);
+
+  /** \details
+    Prepends the specified entity or entities to this Group object.  
+
+    \param objectId [in]  Object ID of the entity to be prepended.
+  */
+  void prepend(
+    OdDbObjectId objectId);
+
+  /** \param objectIds [in]  Object IDs of the entities to be prepended.
+  */
+  void prepend(
+    const OdDbObjectIdArray& objectIds);
+
+  /** \details
+    Inserts the specified entity or entities to this Group object at the specified index.  
+
+    \param objectId [in]  Object ID of the entity to be inserted.
+    \param insertionIndex [in]  Insertion index.
+  */
+  void insertAt(
+    OdUInt32 insertionIndex, 
+    OdDbObjectId objectId);
+
+  /** \param objectIds [in]  Object IDs of the entities to be inserted.
+  */
+  void insertAt(
+    OdUInt32 insertionIndex, 
+    const OdDbObjectIdArray& objectIds);
+
+  /** \details
+    Removes the specified entity or entities from this Group object.
+    
+    \param objectId [in]  Object ID of the entity to be removed.
+  */
+  void remove(
+    OdDbObjectId objectId);
+
+  /** \details
+    Removes the entity at the specified index, 
+    or the specified entities at or above the specified index,
+    from this Group object.
+
+    \param entityIndex [in]  Entity index.
+    
+  */
+  void removeAt(
+    OdUInt32 entityIndex);
+
+  /** \param objectIds [in]  Object IDs of the entities to be removed.
+  */
+  void remove(
+    const OdDbObjectIdArray& objectIds);
+
+  /** \param objectIds [in]  Object IDs of the entities to be inserted.
+
+    \remarks
+    If any of the entities in objectIds are not in this Group object,
+    or are at an index > index, none of the entities will be removed.
+        
+  */
+  void removeAt(
+    OdUInt32 index, 
+    const OdDbObjectIdArray& objectIds);
+
+  /** \details
+    Replaces the specified entity in this Group object with 
+    the specified entity currently not in this Group object.
+
+    \param oldId [in]  Object ID of the entity to be 
+    \param newId [in]  Object ID of the entity to replace oldId.
+  */
+  void replace(
+    OdDbObjectId oldId, 
+    OdDbObjectId newId);
+
+  /** \details
+    Rearranges the entities within this Group object.
+
+    \param fromIndex [in]  Index of the first entity to be moved.
+    \param toIndex [in]  Destination index of the first entity moved.
+    \param numItems [in]  Number of objects to move.
+      
+    \remarks
+    This function transfers numItems starting at the fromIndex to the toIndex. 
+  */
+  void transfer(
+    OdUInt32 fromIndex, 
+    OdUInt32 toIndex, 
+    OdUInt32 numItems);
+
+  /** \details
+    Clears the contents of this Group object.
+    
+    \remarks
+    After clearing, this Group object contains no entities.
+  */
+  void clear();
+
+  /** \details
+    Returns the number of entities in this Group object.
+  */
+  OdUInt32 numEntities() const;
+
+  /** \details
+    Returns true if and only if this Group object contains the specified entity.
+    
+    \param pEntity [in]  Pointer to the entity being tested.
+  */
+  bool has(
+    const OdDbEntity* pEntity) const;
+
+  /** \details
+    Returns the number of entities in this Group object, and their Object IDs.
+
+    \param objectIds [out]  Receives the Object IDs.
+  */
+  OdUInt32 allEntityIds(
+    OdDbObjectIdArray& objectIds) const;
+
+  /** \details
+    Returns the index of the specified entity within this Group object.
+
+    \param objectId [in]  Object ID of the entity.
+    \param index [out]  Index of objectId within this Group.
+
+    Throws:
+    <table>
+    Exception            Cause
+    eInvalidInput        objectId is not in this Group object.
+    </table>
+  */
+  void getIndex(
+    OdDbObjectId objectId, 
+    OdUInt32& index) const;
+
+  /** \details
+    Reverses the order of the entities in this Group object.
+  */
+  void reverse();
+
+  /** \details
+      Sets the color of all entities in this Group object to the specified color.
+  void setColor(const OdCmColor &color);
+  */
+
+  /** \details
+    Sets the color index of all entities in this Group object to the specified value.
+    
+    \param colorIndex [in]  Color index.
+  */
+  void setColorIndex(
+    OdUInt16 colorIndex);
+
+  /** \details
+    Sets the color of all entities in this Group object to the specified value.
+
+    \param color [in]  Color.
+  */
+  void setColor(
+    const OdCmColor& color);
+
+  /** \details
+    Sets the layer of all entities in this Group object to the specified value.
+    
+    \param layer [in]  Layer name.
+  */
+  void setLayer(
+    const OdString& layer);
+
+  /** \param layerId [in]  Object ID of the LayerTableRecord.  
+  */
+  void setLayer(
+    OdDbObjectId layerId);
+
+  /** \details
+    Sets the linetype of all entities in this Group object to the specified value.
+    
+    \param linetype [in]  Linetype name.
+  */
+  void setLinetype(
+    const OdString& linetype);
+
+  /** \param linetypeId [in]  Object ID of linetype.
+  */
+  void setLinetype(
+    OdDbObjectId linetypeID);
+
+  /** \details
+    Sets the linetype scale of all entities in this Group object to the specified value.
+    
+    \param linetypeScale [in]  Linetype scale.
+  */
+  void setLinetypeScale(
+    double linetypeScale);
+
+  /** \details
+    Sets the visibility of all entities in this Group object to the specified value.
+    
+    \param visibility [in]  Visibility.
+  */
+  void setVisibility(
+    OdDb::Visibility visibility);
+
+  /** \details
+    Sets the PlotStyleName of all entities in this Group object to the specified value.
+
+    \param plotStyleName [in]  PlotStyleName.
+  */
+  void setPlotStyleName(
+    const OdString& plotStyleName);
+
+  /** \details
+    Sets the lineweight of all entities in this Group object to the specified value.
+    
+    \param lineWeight [in]  Lineweight.
+  */
+  void setLineweight(
+    OdDb::LineWeight lineWeight);
+
+  OdResult setHighlight(
+    bool newVal);
+  OdResult setMaterial( 
+    const OdString& materialName);
+  OdResult setMaterial(
+    OdDbObjectId materialID);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual void copied (
+    const OdDbObject* pObject, 
+    const OdDbObject* pNewObject);
+
+  virtual void appendToOwner(
+    OdDbIdPair& idPair, 
+    OdDbObject* pOwnerObject, 
+    OdDbIdMapping& ownerIdMap);
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual void subClose() ODRX_OVERRIDE;
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+  virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  /*
+      void setHighlight(bool newVal);
+      virtual void applyPartialUndo(OdDbDwgFiler* undoFiler, OdRxClass* classObj);
+      virtual OdResult subErase(bool erasing = true);
+      virtual void goodbye(const OdDbObject* dbObj);
+  */
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbGroup object pointers.
+*/
+typedef OdSmartPtr<OdDbGroup> OdDbGroupPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_ODDBGROUP_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGsManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGsManager.h
new file mode 100755
index 0000000..34b8531
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbGsManager.h
@@ -0,0 +1,177 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __DBGSMANAGER_H_INCLUDED_
+#define __DBGSMANAGER_H_INCLUDED_
+
+class OdDbObjectId;
+class OdDbViewport;
+class OdDbDatabase;
+class OdGiContextForDbDatabase;
+
+#include "Gs/Gs.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Library: TD_Db
+    <group OdGs_Classes> 
+*/
+class TOOLKIT_EXPORT OdGsLayoutHelper : public OdGsDevice
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsLayoutHelper);
+  /** \details
+    Returns the Layout object associated with this LayoutHelper object.
+  */
+  virtual OdDbObjectId layoutId() const = 0;
+  /** \details
+    Returns the active GsView object of the Layout object associated with this LayoutHelper object.
+  */
+  virtual OdGsViewPtr activeView() const = 0;
+  /** \details
+    Sets the active GsView object of the Layout object associated with this LayoutHelper object.
+    \param pView [in]  Pointer to the GsView.
+  */
+  virtual void makeViewActive(OdGsView* pView) = 0;
+  /** \details
+    Return the OdGsModel object associated with this layout helper.
+  */
+  virtual OdGsModel* gsModel() = 0;
+
+  /** \details
+    Returns the underlying OdGsDevice object associated with this LayoutHelper object.
+  */
+  virtual OdGsDevicePtr underlyingDevice() const = 0;
+
+  /** \details
+    Sets the active viewport
+    \param at [in]  Pick point in device coordinates.
+  */
+  virtual bool setActiveViewport(const OdGePoint2d& screenPt) = 0;
+
+  /** \details
+    \param id [in]  ObjectId of viewport which will be made active.
+  */
+  virtual bool setActiveViewport(const OdDbObjectId& id) = 0;
+
+  /** \details
+    Restores layout GsView database linkages state.
+  */
+  virtual void restoreGsViewDbLinkState() = 0;
+
+  /** \details
+    Checks does underlying device supports Gs state saving/loading.
+  */
+  virtual bool supportLayoutGsStateSaving() const = 0;
+  /** \details
+    Stores Gs state compatible with this LayoutHelper object.
+    \param pStream [in]  Pointer onto OdStreamBuf object into which Gs state will be stored.
+    \param nFlags [in]  Optional flags.
+  */
+  virtual bool storeLayoutGsState(OdStreamBuf* pStream, OdUInt32 nFlags = 0) const = 0;
+  /** \details
+    Extracts Layout object Id from Gs state stream.
+    \param pStream [in]  Pointer onto OdStreamBuf object into which Gs state will be stored.
+    \param pDb [in]  Opened database pointer.
+    \param layoutObjId [out]  Layout object Id will be returned through this argument.
+    \param nFlags [in]  Optional flags.
+  */
+  static bool extractLayoutIdForGsState(OdStreamBuf* pStream, OdDbDatabase *pDb, OdDbObjectId &layoutObjId, OdUInt32 nFlags = 0);
+  /** \details
+    Restores Gs state compatible with this LayoutHelper object.
+    \param pStream [in]  Pointer onto OdStreamBuf object from which Gs state will be restored.
+    \param nFlags [in]  Optional flags.
+    \param pRetFiler [out]  Returns filer object invoked for state loading.
+  */
+  virtual bool restoreLayoutGsState(OdStreamBuf* pStream, OdUInt32 nFlags = 0) = 0;
+};
+
+typedef OdSmartPtr<OdGsLayoutHelper> OdGsLayoutHelperPtr;
+
+
+/** \details
+    Library: TD_Db
+    <group OdGs_Classes> 
+*/
+class TOOLKIT_EXPORT OdGsPaperLayoutHelper : public OdGsLayoutHelper
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsPaperLayoutHelper);
+
+  virtual OdGsViewPtr overallView() const = 0;
+  virtual void makeViewOverall(OdGsView* pView) = 0;
+  virtual void initGsView(OdGsView* pView, const OdDbViewport* pVp) = 0;
+
+  virtual OdGsViewPtr addViewport(const OdDbViewport* pVp);
+  virtual OdGsViewPtr insertViewport(int viewIndex, const OdDbViewport* pVp);
+};
+
+typedef OdSmartPtr<OdGsPaperLayoutHelper> OdGsPaperLayoutHelperPtr;
+
+
+/** \details
+
+    Library: TD_Db
+    <group OdGs_Classes> 
+*/
+class TOOLKIT_EXPORT OdGsModelLayoutHelper : public OdGsLayoutHelper
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsModelLayoutHelper);
+};
+
+typedef OdSmartPtr<OdGsModelLayoutHelper> OdGsModelLayoutHelperPtr;
+
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDbGsManager
+{
+  /** \details
+      Populates OdGsDevice-derived object with OdGsViews-derived objects.
+      Returns OdGsDevice-derived wrapper that handles some OdGsDevice's calls.
+  */
+  TOOLKIT_EXPORT OdGsLayoutHelperPtr setupActiveLayoutViews(OdGsDevice* pDevice,
+    OdGiContextForDbDatabase* pGiCtx);
+
+  /** \details
+      Populates OdGsDevice-derived object with OdGsViews-derived objects.
+      Returns OdGsDevice-derived wrapper that handles some OdGsDevice's calls.
+  */
+  TOOLKIT_EXPORT OdGsLayoutHelperPtr setupLayoutViews(OdDbObjectId layoutId, OdGsDevice* pDevice, 
+    OdGiContextForDbDatabase* pGiCtx);
+
+  /** \details
+      Setups OdGsDevice-derived object with the palette associated with specified layout.
+  */
+  TOOLKIT_EXPORT void setupPalette(OdGsDevice* device, OdGiContextForDbDatabase* giContext,
+    OdDbStub* layoutId = 0, ODCOLORREF palBackground = ODRGBA(0,0,0,0));
+}
+
+#include "TD_PackPop.h"
+
+#endif // __DBGSMANAGER_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHandle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHandle.h
new file mode 100755
index 0000000..81f6ee4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHandle.h
@@ -0,0 +1,201 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDBHANDLE
+#define ODDBHANDLE /*!DOM*/
+
+#include "TD_PackPush.h"
+
+#include "DbRootExport.h"
+#include "OdArrayPreDef.h"
+#include "OdaDefs.h"
+#include "OdString.h"
+
+/** \details
+  Returns the decimal value of a hexadecimal digit.
+  
+  \param hexDigit [in]  Hex digit.
+  
+  Examples:  
+  getHexValue('A') returns 10, etc.
+*/
+DBROOT_EXPORT int getHexValue(
+  int hexDigit);
+
+/** \details
+  Returns the 64 bit integer value corresponding to the passed in string.
+  \param pStr [in] String representation of an integer.
+*/
+//TOOLKIT_EXPORT OdInt64 atoi64(const OdChar* pStr);
+//TOOLKIT_EXPORT void    i64toA(const OdInt64 &val, OdChar* pStr);
+
+/** \details
+    This class encapsulates the 64-bit integer handles associated with OdDbObject instances.
+    
+    Library: TD_Db
+    
+    \remarks
+    Handles are persistent and unique within a database. Handles are not, 
+	however, unique between databases.
+    
+    <group OdDb_Classes>
+*/
+class DBROOT_EXPORT OdDbHandle
+{
+public:
+  OdDbHandle() : m_val(0) {}
+
+  OdDbHandle(const OdDbHandle& value) : m_val(value.m_val) {}
+
+  OdDbHandle(OdUInt64 value) : m_val(value) {}
+  
+  OdDbHandle(const OdChar* value) { *this = value; }
+  OdDbHandle(const char* value) { *this = value; }
+  OdDbHandle(const OdString& value) { *this = (const OdChar*)value; }
+  OdDbHandle(const OdAnsiString& value) { *this = (const char*)value; }
+  OdDbHandle(int value) : m_val(value) {}
+
+  OdDbHandle& operator=(OdUInt64 value) 
+  {
+    m_val = value;
+    return *this;
+  }
+  
+  OdDbHandle& operator=(const OdChar* value);
+  OdDbHandle& operator=(const char* value);
+
+  OdDbHandle& operator=(const OdDbHandle& value)
+  {
+    m_val = value.m_val;
+    return *this;
+  }
+  OdDbHandle& operator=(int value)
+  {
+    m_val = value;
+    return *this;
+  }
+
+  operator OdUInt64() const { return m_val; }
+  
+  /** \details
+    Returns the hexidecmal representation of this Handle object as a null terminated string.
+    
+    \param pBuf [in]  Pointer to the buffer to receive the string.
+    
+    \note
+    The buffer must be at least 17 bytes long.
+  */
+    void getIntoAsciiBuffer(
+    OdChar* pBuf) const;
+    
+  /** \details
+    Returns the hexidecmal representation of this Handle object as an OdString.
+  */
+  OdString ascii() const;
+  /** \details
+    Returns true and only if this Handle object is null.
+  */
+  bool isNull() const { return m_val == 0; }
+  
+  bool operator == (
+    OdUInt64 value) const { return m_val == value; }
+  
+  bool operator != (
+    OdUInt64 value) const { return m_val != value; }
+  
+  bool operator > (
+    OdUInt64 value) const { return m_val > value; }
+  
+  bool operator < (
+    OdUInt64 value) const { return m_val < value; }
+  
+  bool operator <= (
+    OdUInt64 value) const { return m_val < value || m_val == value; }
+  
+  bool operator >= (
+    OdUInt64 value) const { return m_val > value || m_val == value; }
+  
+  OdDbHandle& operator+=(
+    const OdInt64& value)
+  {
+    m_val += value;
+    ODA_ASSERT_ONCE(!isNull()); // check handle stuff overflow
+    return *this;
+  }
+  OdDbHandle operator+(
+    const OdInt64& value)
+  {
+    OdDbHandle res;
+    res.m_val = m_val + value;
+    return res;
+  }
+
+  /** \details
+    Returns the this Handle object as an array OdUInt8[8].
+    
+    \param bytes [in]  array of bytes to receive the handle.
+    
+    \remarks
+    The low order byte is returned in bytes[0].
+    
+    \note
+    The buffer must be at least 17 bytes long.
+  */
+    void bytes(
+    OdUInt8 * bytes) const
+  {
+    OdUInt64 val = m_val;
+    *bytes++ = (OdUInt8)(val & 0xFF);
+    val >>= 8;
+    *bytes++ = (OdUInt8)(val & 0xFF);
+    val >>= 8;
+    *bytes++ = (OdUInt8)(val & 0xFF);
+    val >>= 8;
+    *bytes++ = (OdUInt8)(val & 0xFF);
+    val >>= 8;
+    *bytes++ = (OdUInt8)(val & 0xFF);
+    val >>= 8;
+    *bytes++ = (OdUInt8)(val & 0xFF);
+    val >>= 8;
+    *bytes++ = (OdUInt8)(val & 0xFF);
+    val >>= 8;
+    *bytes = (OdUInt8)(val & 0xFF);
+  }
+
+private:
+    OdUInt64  m_val;
+};
+
+
+/** \details
+  This template class is a specialization of the OdArray class for OdDbHandle objects.
+*/
+typedef OdArray<OdDbHandle> OdHandleArray;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatch.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatch.h
new file mode 100755
index 0000000..57766f8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatch.h
@@ -0,0 +1,1238 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBHATCH_H
+#define OD_DBHATCH_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "Ge/GePoint2dArray.h"
+#include "IntArray.h"
+//#include "Ge/GeVoidPointerArray.h"
+#include "CmColorArray.h"
+#include "HatchPattern.h"
+
+#define HATCH_PATTERN_NAME_LENGTH 32
+
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGeCurve2d object pointers.
+*/
+typedef OdArray<OdGeCurve2d*> EdgeArray;
+
+
+/** \details
+    This class represents Hatch entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    \remarks
+    
+    Loops must be closed, simple, and continuous. 
+    They must be self-intersecting itself only at their endpoints.
+    Their start points and end points must coincide. 
+    The outer loops must be appended before all of their inner loops.
+    
+    Teigha provides limited validation of the hatch boundary in order to maintain API efficiency
+    and performance.
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbHatch : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbHatch);
+
+  OdDbHatch();
+
+  enum HatchLoopType
+  {
+    kDefault             = 0,        // Not yet specified.
+    kExternal            = 1,        // Defined by external entities.
+    kPolyline            = 2,        // Defined by OdGe polyline.
+    kDerived             = 4,        // Derived from a picked point.
+    kTextbox             = 8,        // Defined by text.
+    kOutermost           = 0x10,     // Outermost loop.
+    kNotClosed           = 0x20,     // Open loop.
+    kSelfIntersecting    = 0x40,     // Self-intersecting loop.
+    kTextIsland          = 0x80,     // Text loop surrounded by an even number of loops.
+    kDuplicate           = 0x100,    // Duplicate loop.
+    kIsAnnotative        = 0x200,    // The bounding area is an annotative block.
+    kDoesNotSupportScale = 0x400,    // The bounding type does not support scaling
+    kForceAnnoAllVisible = 0x800,    // Forces all annotatives to be visible
+    kOrientToPaper       = 0x1000,   // Orients hatch loop to paper
+    kIsAnnotativeBlock   = 0x2000    // Describes if the hatch is an annotative block.
+  };
+
+  enum HatchEdgeType
+  {
+    kLine     = 1,  // Linear.         
+    kCirArc   = 2,  // Circular arc.
+    kEllArc   = 3,  // Elliptical arc.
+    kSpline   = 4   // Spline curve.
+  };
+
+  enum HatchPatternType
+  {
+    kUserDefined     = 0, // User-defined hatch.
+    kPreDefined      = 1, // Defined in acad.pat and acadiso.pat. 
+    kCustomDefined   = 2  // In its own PAT file.
+  };
+
+  enum HatchStyle
+  {
+    kNormal   = 0, // Hatch toggles on each boundary.
+    kOuter    = 1, // Hatch turns off after first inner loop.
+    kIgnore   = 2  // Hatch ignores inner loop
+  };
+
+  enum HatchObjectType 
+  {
+    kHatchObject      = 0, // Classic hatch
+    kGradientObject   = 1  // Color gradient
+  };
+
+  enum GradientPatternType 
+  {
+    kPreDefinedGradient    = 0, // Predefined gradient pattern.
+    kUserDefinedGradient   = 1  // User-defined gradient pattern.
+  };
+
+  /** \details
+    Returns the elevation of this entity in the OCS (DXF 30).
+    
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  double elevation() const;
+
+  /** \details
+    Sets the elevation of this entity in the OCS (DXF 30).
+
+    \param elevation [in] Elevation.    
+
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  void setElevation(
+    double elevation);
+
+   /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+   */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+
+    \param normal [in] Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+
+  /** \details
+    Returns true if and only if this entity is planar.
+  */
+  virtual bool isPlanar() const { return true; }
+
+  /** \details
+    Returns the plane that contains the curve and curve's configuration.
+
+    \param plane [out] Plain.
+
+    \param planarity [out] Curve's configuration.
+
+    \remarks
+    planarity and plane return values as follows:
+    
+    <table>
+    planarity     Value     Description     plane
+    kNonPlanar    0         Non-planar.     Not set.
+    kPlanar       1         Planar.         Entity plane.
+    kLinear       2         Linear.         Arrbitrary plane containing this entity.
+    </table>
+
+    \returns Returns eOk if getting was successful 
+      or an appropriate OdResult error code in the other case.
+  */
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+  /** \details
+    Returns the number of loops in this hatch (DXF 91).
+  */
+  int numLoops() const;
+
+  /** \details
+    Returns the type of loop at the specified index (DXF 92). 
+    
+    \param loopIndex [in]  Loop index. 
+    
+    \remarks
+    The loop type consists of a combination of bits from the HatchLoopType enumeration.
+  */
+  OdInt32 loopTypeAt(
+    int loopIndex) const;
+
+   /** \details
+    Returns the specified loop from this Hatch entity.
+
+    \param loopIndex [in]  Loop index.
+    \param edgePtrs [out]  Receives a set of OdGeCurve2d pointers to the edges that comprise this loop.
+    
+    \remarks
+    Should be called with edgePtrs if the loop is not a polyline loop.
+   */
+  void getLoopAt(
+    int loopIndex, 
+    EdgeArray& edgePtrs) const;
+
+  /** \details
+    Returns the specified loop from this Hatch entity.
+
+    \param loopIndex [in]  Loop index.
+    \param vertices [out]  Receives the vertices that comprise this loop.
+    \param bulges [out]  Receives a set of bulges corresponding to the vertices array.
+    
+    \remarks
+    Should be called with vertices and bulges if the loop is a polyline loop.
+   */
+  void getLoopAt(
+    int loopIndex, 
+    OdGePoint2dArray& vertices, 
+    OdGeDoubleArray& bulges) const;
+
+  /** \details
+    Appends a loop onto this Hatch entity.
+
+    \param loopType [in]  Type of loop being appended.
+    \param edgePtrs [in]  Array OdGeCurve pointers to the edges that comprise this loop.
+    
+    \remarks
+    
+    loopType is one of the following:
+    
+    <table>
+    Name                Value     Description
+    kDefault            0         Not yet specified.
+    kExternal           1         Defined by external entities.
+    kPolyline           2         Defined by OdGe polyline.
+    kDerived            4         Derived from a picked point.
+    kTextbox            8         Defined by text.
+    kOutermost          0x10      Outermost loop.
+    kNotClosed          0x20      Open loop.
+    kSelfIntersecting   0x40      Self-intersecting loop.
+    kTextIsland         0x80      Text loop surrounded by an even number of loops.
+    kDuplicate          0x100     Duplicate loop.
+    </table>
+    
+    edgePtrs may contain pointers to only the following objects:
+
+    <table>
+    Name
+    OdGeLineSeg2d
+    OdGeCircArc2d
+    OdGeEllipArc2d
+    OdGeNurbCurve2d
+    </table>
+  */
+  void appendLoop(
+    OdInt32 loopType,
+    const EdgeArray& edgePtrs);
+
+  /** \details
+    Appends a loop onto this Hatch entity.
+
+    \param loopType [in]  Type of loop being appended.
+    \param vertices [in]  The vertices that comprise this loop.
+    \param bulges [in]  The bulges corresponding to the vertices array.
+    
+    \remarks
+    
+    loopType is one of the following:
+    
+    <table>
+    Name                Value     Description
+    kDefault            0         Not yet specified.
+    kExternal           1         Defined by external entities.
+    kPolyline           2         Defined by OdGe polyline.
+    kDerived            4         Derived from a picked point.
+    kTextbox            8         Defined by text.
+    kOutermost          0x10      Outermost loop.
+    kNotClosed          0x20      Open loop.
+    kSelfIntersecting   0x40      Self-intersecting loop.
+    kTextIsland         0x80      Text loop surrounded by an even number of loops.
+    kDuplicate          0x100     Duplicate loop.
+    </table>
+  */
+  void appendLoop(
+    OdInt32 loopType,
+    const OdGePoint2dArray& vertices,
+    const OdGeDoubleArray& bulges);
+
+  /** \details
+    Appends a loop onto this Hatch entity.
+
+    \param loopType [in]  Type of loop being appended.
+    \param dbObjIds [in]  Array of OdDbEntity Object IDs that comprise the loop.
+    
+    \remarks
+    
+    loopType is one of the following:
+    
+    <table>
+    Name                Value     Description
+    kDefault            0         Not yet specified.
+    kExternal           1         Defined by external entities.
+    kPolyline           2         Defined by OdGe polyline.
+    kDerived            4         Derived from a picked point.
+    kTextbox            8         Defined by text.
+    kOutermost          0x10      Outermost loop.
+    kNotClosed          0x20      Open loop.
+    kSelfIntersecting   0x40      Self-intersecting loop.
+    kTextIsland         0x80      Text loop surrounded by an even number of loops.
+    kDuplicate          0x100     Duplicate loop.
+    </table>
+  */
+  void appendLoop(
+    OdInt32 loopType, 
+    const OdDbObjectIdArray& dbObjIds);
+
+  /** \details
+    Appends an ordered loop onto this Hatch entity.
+
+    \param loopType [in]  Type of loop being appended.
+    \param edgePtrs [in]  Array OdGeCurve pointers to the edges that comprise this loop.
+    
+    \remarks
+    
+    loopType is one of the following:
+    
+    <table>
+    Name                Value     Description
+    kDefault            0         Not yet specified.
+    kExternal           1         Defined by external entities.
+    kPolyline           2         Defined by OdGe polyline.
+    kDerived            4         Derived from a picked point.
+    kTextbox            8         Defined by text.
+    kOutermost          0x10      Outermost loop.
+    kNotClosed          0x20      Open loop.
+    kSelfIntersecting   0x40      Self-intersecting loop.
+    kTextIsland         0x80      Text loop surrounded by an even number of loops.
+    kDuplicate          0x100     Duplicate loop.
+    </table>
+    
+    edgePtrs may contain pointers to only the following objects:
+
+    <table>
+    Name
+    OdGeLineSeg2d
+    OdGeCircArc2d
+    OdGeEllipArc2d
+    OdGeNurbCurve2d
+    </table>
+  */
+  void appendOrderedLoop(OdInt32 loopType, const EdgeArray& edgePtrs);
+ 
+  /** \details
+    Inserts a loop into this Hatch entity on the specified index.
+
+    \param loopIndex [in]  Loop index.
+    \param loopType [in]  Type of loop being appended.
+    \param edgePtrs [in]  Array OdGeCurve pointers to the edges that comprise this loop.
+
+    \remarks
+    loopType is one of the following:
+    
+    <table>
+    Name                Value     Description.
+    kDefault            0         Not yet specified.
+    kExternal           1         Defined by external entities.
+    kPolyline           2         Defined by OdGe polyline.
+    kDerived            4         Derived from a picked point.
+    kTextbox            8         Defined by text.
+    kOutermost          0x10      Outermost loop.
+    kNotClosed          0x20      Open loop.
+    kSelfIntersecting   0x40      Self-intersecting loop.
+    kTextIsland         0x80      Text loop surrounded by an even number of loops.
+    kDuplicate          0x100     Duplicate loop.
+    </table>
+  */
+  void insertLoopAt(
+    int loopIndex, 
+    OdInt32 loopType,
+    const EdgeArray& edgePtrs);
+
+  /** \details
+    Inserts a loop into this Hatch entity on the specified index.
+
+    \param loopIndex [in]  Loop index.
+    \param loopType [in]  Type of loop being appended.
+    \param vertices [in]  The vertices that comprise this loop.
+    \param bulges [in]  The bulges corresponding to the vertices array.
+
+    \remarks
+    loopType is one of the following:
+    
+    <table>
+    Name                Value     Description.
+    kDefault            0         Not yet specified.
+    kExternal           1         Defined by external entities.
+    kPolyline           2         Defined by OdGe polyline.
+    kDerived            4         Derived from a picked point.
+    kTextbox            8         Defined by text.
+    kOutermost          0x10      Outermost loop.
+    kNotClosed          0x20      Open loop.
+    kSelfIntersecting   0x40      Self-intersecting loop.
+    kTextIsland         0x80      Text loop surrounded by an even number of loops.
+    kDuplicate          0x100     Duplicate loop.
+    </table>
+  */
+  void insertLoopAt(
+    int loopIndex, 
+    OdInt32 loopType,
+    const OdGePoint2dArray& vertices,
+    const OdGeDoubleArray& bulges);
+
+  /** \details
+    Inserts a loop into this Hatch entity on the specified index.
+
+    \param loopIndex [in]  Loop index.
+    \param loopType [in]  Type of loop being appended.
+    \param dbObjIds [in]  Array of OdDbEntity Object IDs that comprise the loop.
+
+    \remarks
+    loopType is one of the following:
+    
+    <table>
+    Name                Value     Description.
+    kDefault            0         Not yet specified.
+    kExternal           1         Defined by external entities.
+    kPolyline           2         Defined by OdGe polyline.
+    kDerived            4         Derived from a picked point.
+    kTextbox            8         Defined by text.
+    kOutermost          0x10      Outermost loop.
+    kNotClosed          0x20      Open loop.
+    kSelfIntersecting   0x40      Self-intersecting loop.
+    kTextIsland         0x80      Text loop surrounded by an even number of loops.
+    kDuplicate          0x100     Duplicate loop.
+    </table>
+  */
+  void insertLoopAt(
+    int loopIndex, OdInt32 loopType,
+    const OdDbObjectIdArray& dbObjIds);
+
+  /** \details
+    Removes the specified loop from this Hatch entity.
+
+    \param loopIndex [in]  Loop index.
+  */
+  void removeLoopAt(
+    int loopIndex);
+
+  /** \details
+    Returns true if and only if this hatch is associative (DXF 71).
+
+    \remarks
+    Associative hatch is automatically recalculated 
+    when its boundaries are modified.
+  */
+  bool associative() const;
+
+  /** \details
+    Controls the associative flag for this hatch (DXF 71).
+    \param isAssociative [in]  Controls the associative flag.
+
+    \remarks
+    Associative hatch is automatically recalculated 
+    when its boundaries are modified.
+  */
+  void setAssociative(
+    bool isAssociative);
+
+  /** \details
+    Returns the Object IDs comprising the specified associative loop in this Hatch entity.
+
+    \param loopIndex [in]  Loop index.
+    \param dbObjIds [out]  Receives the boundary Object IDs.
+    
+    \remarks
+    Returns nothing if this Hatch entity is not associative.
+  */
+  void getAssocObjIdsAt(
+    int loopIndex, 
+    OdDbObjectIdArray& dbObjIds) const;
+
+  /** \details
+    Returns the Object IDs comprising all the associative boundaries in this Hatch entity.
+
+    \param dbObjIds [out]  Receives the boundary Object IDs.
+
+    \remarks
+    Returns nothing if this Hatch entity is not associative.
+  */
+  void getAssocObjIds(
+    OdDbObjectIdArray& dbObjIds) const;
+
+  /** \details
+    Sets the Object IDs comprising the specified associative loop in this Hatch entity.
+
+    \param loopIndex [in]  Loop index.
+    \param dbObjIds [in]  The set of boundary Object ID's that make up the specified loop.
+
+    \remarks
+    Adds the Object ID of this hatch to the reactors of the boundary objects.
+  */
+  void setAssocObjIdsAt(
+    int loopIndex, 
+    const OdDbObjectIdArray& dbObjIds);
+
+  /** \details
+    Removes all Object IDs that are associated with this Hatch entity.
+  */
+  void removeAssocObjIds();
+
+  /** \details
+    Returns the hatch pattern type for this Hatch entity (DXF 76).
+    
+    \remarks
+    
+    patternType() returns one of the following:
+    
+    <table>
+    Name              Value
+    kUserDefined      0
+    kPreDefined       1
+    kCustomDefined    2 
+    </table>
+  */
+  OdDbHatch::HatchPatternType patternType() const;
+
+  /** \details
+    Returns true if and only if this hatch is solid fill (DXF 70).
+  */
+  bool isSolidFill() const;
+
+  
+  /** \details
+      Returns the name of the pattern for this Hatch entity (DXF 2).
+  */
+  OdString patternName() const;
+
+  /** \details
+    Sets the pattern data for this Hatch entity.
+    
+    \param patType [in]  Pattern type.
+    \param patName [in]  Pattern name.
+    
+    \remarks
+    patType must be one of the following:
+    
+    <table>
+    Name              Value
+    kUserDefined      0
+    kPreDefined       1
+    kCustomDefined    2
+    </table>
+     
+    patName is ignored for patType == kUserDefined; appearance is defined by setPatternAngle(),
+    setPatternSpace() and setPatternDouble(). 
+  */
+  void setPattern(
+    OdDbHatch::HatchPatternType patType, 
+    const OdString& patName);
+
+  /** \details
+    Sets the pattern data for this Hatch entity.
+    
+    \param patType [in]  Pattern type.
+    \param patName [in]  Pattern name.
+    \param angle [in]  Pattern angle.
+    \param scale [in]  Pattern scale.
+    \param pat [in]  Pattern definition (as in PAT file)
+    \param basePt [in]  Base point.
+    
+    \remarks
+    patType must be one of the following:
+    
+    <table>
+    Name              Value
+    kUserDefined      0
+    kPreDefined       1
+    kCustomDefined    2
+    </table>
+     
+    patName is ignored for patType == kUserDefined; appearance is defined by setPatternAngle(),
+    setPatternSpace() and setPatternDouble(). 
+  */
+  void setPattern(
+    OdDbHatch::HatchPatternType patType, 
+    const OdString& patName,
+    double angle, 
+    double scale,
+    const OdHatchPattern& pat,
+    OdGePoint2d basePt = OdGePoint2d());
+
+  /** \details
+    Returns the pattern angle for this Hatch entity (DXF 52).
+    
+    \remarks
+    All angles are expressed in radians.
+  */
+  double patternAngle() const;
+
+  /** \details
+    Sets the pattern angle for this Hatch entity (DXF 52).
+
+    \remarks
+    All angles are expressed in radians.
+  */
+  void setPatternAngle(
+    double angle);
+
+  /** \details
+    Returns the pattern spacing for this Hatch entity (DXF 41).
+    
+    \remarks
+    Pattern spacing is the distance between parallel lines for kUserDefined hatch.
+  */
+  double patternSpace() const;
+
+  /** \details
+    Sets the pattern spacing for this Hatch entity (DXF 41).
+
+    \param space [in]  Pattern spacing.
+    
+    \remarks
+    Pattern spacing is the distance between parallel lines for kUserDefined hatch.
+  */
+  void setPatternSpace(
+    double space);
+
+  /** \details
+    Returns the pattern scale for this Hatch entity (DXF 41).
+  */
+  double patternScale() const;
+
+  /** \details
+    Sets the pattern scale for this Hatch entity (DXF 41).
+    
+    \param scale [in]  Pattern scale.
+  */
+  void setPatternScale(
+    double scale);
+
+  /** \details
+    Returns the pattern double flag for this Hatch entity (DXF 77).
+      
+    \remarks
+    Setting the pattern double flag causes a second set of lines, at 90� to the first, for kUserDefined hatch.
+  */
+  bool patternDouble() const;
+
+  /** \details
+    Sets the pattern double flag for this Hatch entity (DXF 77).
+
+    \param isDouble [in]  Sets the pattern double flag if true, clears it otherwise.
+    
+    \remarks
+    Setting the pattern double flag causes a second set of lines, at 90� to the first, for kUserDefined hatch.
+  */
+  void setPatternDouble(
+    bool isDouble);
+
+ /** \details
+    Returns the number of pattern definition lines for this Hatch entity (DXF 78).
+ */
+  int numPatternDefinitions() const;
+
+  /** \details
+    Returns the specified pattern definition line for this Hatch entity.
+
+    \param lineIndex [in]  Line index.
+    \param lineAngle [out]  Receives the line angle (DXF 53).
+    \param baseX [out]  Receives the line base point X (DXF 43).
+    \param baseY [out]  Receives the line base point Y (DXF 44).
+    \param offsetX [out]  Receives the line offset X (DXF 45).
+    \param offsetY [out]  Receives the line offset Y (DXF 46).
+    \param dashes [out]  Receives the line dash lengths (DXF 79, 49).
+  */
+  void getPatternDefinitionAt(
+    int lineIndex, 
+    double& lineAngle, 
+    double& baseX,
+    double& baseY, 
+    double& offsetX, 
+    double& offsetY,
+    OdGeDoubleArray& dashes) const;
+
+  /** \details
+    Returns the hatch style of this hatch entity (DXF 75).
+      
+    \remarks
+    hatchStyle is one of the following:
+    
+    <table>
+    Name          Value
+    kNormal       0
+    kOuter        1
+    kIgnore       2
+    </table>
+  */
+  OdDbHatch::HatchStyle hatchStyle() const;
+
+  /** \details
+    Sets the hatch style of this Hatch entity (DXF 75).
+    
+    \param hatchStyle [in]  Hatch style.
+    
+    \remarks
+    hatchStyle is one of the following:
+    
+    <table>
+    Name          Value
+    kNormal       0
+    kOuter        1
+    kIgnore       2
+    </table>
+  */
+  void setHatchStyle(
+    OdDbHatch::HatchStyle hatchStyle);
+
+  /** \details
+    Returns the number of seed points for this Hatch entity (DXF 98).
+  */
+  int numSeedPoints() const;
+
+  /** \details
+    Returns the specified seed point from this Hatch entity (DXF 10).
+
+    \param seedIndex [in]  Seed point index.
+  */
+  const OdGePoint2d& getSeedPointAt(
+    unsigned seedIndex) const;
+
+  /** \details
+    Sets the specified seed point for this Hatch entity (DXF 10).
+
+    \param seedIndex [in]  Seed point index.
+    \param point [in]  Seed point.
+  */
+  void setSeedPointAt(
+    unsigned seedIndex, 
+    OdGePoint2d& point);
+
+  /** \details
+    Appends the specified seed point to this Hatch entity (DXF 10).
+
+    \param point [in]  Seed point.
+  */
+  void appendSeedPoint(const OdGePoint2d& point);
+
+  /** \details
+  Remove a specified seed point from this Hatch entity.
+
+  \param seedIndex [in]  Seed point index.
+  */
+  void removeSeedPointAt(int seedPointIndex);
+
+  /** \details
+    Returns the pixel size for intersection and ray casting.
+  */
+  double pixelSize() const;
+
+  /** \details
+    Sets the pixel size for intersection and ray casting.
+
+    \param pixelSize [in]  Pixel size.
+  */
+  void setPixelSize(
+    double pixelSize);
+
+  /** \details
+    Reads the .dwg file data of this object.
+
+    \param pFiler [in]  Filer object from which data are read.
+
+    \remarks
+    This function is called by dwgIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 
+    2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dwgInFields(pFiler) returned. 
+    4) Call the OdDbDwgFiler(pFiler) methods to read each of the object's data items in the order they were written. 
+    5) Return pFiler->filerStatus().
+
+    \returns Returns eOk if reading was successful 
+      or an appropriate OdResult error code in the other case.
+  */
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file data of this object.
+
+    \param pFiler [in]  Pointer to the filer to which data are written.
+
+    \remarks
+    This function is called by dwgIn() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 
+    2) Call the parent class's dwgOutFields(pFiler). 
+    3) Call the OdDbDwgFiler(pFiler) methods to write each of the object's data items in the order they were written.
+
+    \returns Returns eOk if writing was successful 
+      or an appropriate OdResult error code in the other case.
+  */
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF data of this object.
+
+    \param pFiler [in] Pointer to the filer from which data are read.
+
+    \remarks
+    This function is called by dxfIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 
+    2) Call the parent class's dwgInFields(pFiler).
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) returned.
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written.
+    5) Return pFiler->filerStatus().
+
+    \returns Returns eOk if reading was successful 
+      or an appropriate OdResult error code in the other case.
+  */
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Writes the DXF data of this object.
+
+    \param pFiler [in]  Pointer to the filer to which data are to be written.
+
+    \remarks
+    This function is called by dxfOut() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 
+	2) Call the parent class's dxfOutFields(pFiler). 
+	3) Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items in the order they were written.
+
+    \returns Returns eOk if writing was successful 
+      or an appropriate OdResult error code in the other case.
+  */
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pWd) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm, 
+    OdDbEntityPtr& pCopy) const ODRX_OVERRIDE;
+
+  OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver,
+    OdDbObjectId& replaceId,
+    bool& exchangeXData);
+
+  void subSetDatabaseDefaults(
+    OdDbDatabase *pDb,
+    bool doSubents);
+
+  /** \details
+    Evaluates the hatch for this Hatch entity.
+    \param bUnderestimateNumLines [in]  Underestimates the hatch count before aborting.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult evaluateHatch(
+    bool bUnderestimateNumLines = false) const;
+
+  /** \details
+    Returns the number of hatch lines in this Hatch entity.
+    
+    \remarks
+    Returns zero if the hatch pattern is SOLID. 
+  */
+  int numHatchLines() const;
+  
+  /** \details
+    Returns the hatch line data for the specified hatch line in this Hatch entity.
+      
+    \param lineIndex [in]  Line index.
+    \param startPoint [out]  Receives the start point.
+    \param endPoint [out]  Receives the end point.
+  */
+  void getHatchLineDataAt(
+    int lineIndex, 
+    OdGePoint2d& startPoint, 
+    OdGePoint2d& endPoint) const;
+  
+  /** \details
+    Returns all the hatch line data for this Hatch entity.
+    
+    \param startPoints [out]  Receives the start points.
+    \param endPoints [out]  Receives the end points.
+  */
+  void getHatchLinesData(
+    OdGePoint2dArray& startPoints, 
+    OdGePoint2dArray& endPoints) const;
+  
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+  virtual void modifiedGraphics(
+    const OdDbObject* pObject);
+
+  /* virtual void subSwapIdWith(OdDbObjectId otherId, bool swapXdata = false, bool swapExtDict = false);
+  virtual void swapReferences(const OdDbIdMapping& idMap);*/
+
+
+  /** \details
+    Returns the hatch object type of this Hatch entity.
+    
+    \remarks
+    hatchObjectType is one of the following:
+    
+    <table>
+    Name                Value     Description
+    kHatchObject        0         Classic hatch
+    kGradientObject     1         Color gradient
+    </table>
+  */
+  OdDbHatch::HatchObjectType hatchObjectType() const;
+
+  /** \details
+    Sets the hatch object type of this Hatch entity.
+    
+    \param hatchObjectType [in]  Hatch object type.
+    
+    \remarks
+    hatchObjectType is one of the following:
+    
+    <table>
+    Name                Value     Description
+    kHatchObject        0         Classic hatch
+    kGradientObject     1         Color gradient
+    </table>
+  */
+  void setHatchObjectType(
+    OdDbHatch::HatchObjectType hatchObjectType);
+  
+  /** \details
+    Returns true if and only if this Hatch entity is a color gradient.
+  */
+  virtual bool isGradient() const;
+
+  /** \details
+    Returns true if and only if this Hatch entity is of type kHatchObject.
+  */
+  virtual bool isHatch() const;
+  
+  /** \details
+    Returns the gradient type of this Hatch entity.
+    
+    \remarks
+    gradientType is one of the following:
+    
+    <table>
+    Name                    Value
+    kPreDefinedGradient     0
+    kUserDefinedGradient    1
+    </table>
+  */
+  OdDbHatch::GradientPatternType gradientType() const;
+  
+  /** \details
+      Returns the name of the gradient of this Hatch entity.
+  */
+  OdString gradientName() const;
+  
+  /** \details
+    Sets the gradient type and name for this Hatch entity.
+    \param gradientType [in]  Gradient type.
+    \param gradientName [in]  Gradient name: SPHERICAL, HEMISPHERICAL, CURVED,
+    LINEAR, CYLINDER, INVSPHERICAL, INVHEMISPHERICAL, INVCURVED, INVLINEAR,
+    or INVCYLINDER.
+    
+    \remarks
+    gradientType is one of the following:
+    
+    <table>
+    Name                    Value
+    kPreDefinedGradient     0
+    kUserDefinedGradient    1
+    </table>
+  */
+  void setGradient(
+    OdDbHatch::GradientPatternType gradientType, 
+    const OdString& gradientName);
+  
+  /** \details
+    Returns the angle of the gradient for this Hatch entity.
+      
+    \remarks
+    All angles are expressed in radians.  
+  */
+  double gradientAngle() const;
+
+  /** \details
+    Returns the angle of the gradient for this Hatch entity.
+
+    \param angle [in]  Gradient angle.
+          
+    \remarks
+    All angles are expressed in radians.  
+  */
+  void setGradientAngle(double angle);
+  
+  /** \details
+    Returns the colors and interpolation values describing the gradient fill for this Hatch entity.
+    
+    \param colors [out]  Array of colors defining the gradient.
+    \param values [out]  Array of interpolation values for the gradient.
+  */
+  void getGradientColors(
+    OdCmColorArray& colors, 
+    OdGeDoubleArray& values) const;
+  
+  /** \details
+    Returns the colors and interpolation values describing the gradient fill for this Hatch entity.
+    
+    \param colors [in]  Array of colors defining the gradient.
+    \param values [in]  Array of interpolation values for the gradient.
+
+    \remarks
+    count must be two for the current implementation.
+    
+    Throws:
+    <table>
+    Exception             Cause
+    eInvalidInput         count < 2 || values[0] != 0. || values[count-1] != 1.
+    eNotImplementedYet    count > 2
+    </table>
+  */
+  void setGradientColors(
+    OdUInt32 count, 
+    const OdCmColor* colors, 
+    const double* values);
+  
+  /** \details
+    Returns the oneColorMode for this Hatch entity.
+  */
+  bool getGradientOneColorMode() const;
+
+  /** \details
+    Controls the oneColorMode for this Hatch entity.
+    \param oneColorMode [in]  Controls the oneColorMode.
+  */
+  void setGradientOneColorMode(
+    bool oneColorMode);
+  
+  /** \details
+    Returns the luminance value for this Hatch entity.
+    
+    \remarks
+    Returns a value in the range. [0.0 .. 1.0].
+    
+    If the gradient is using oneColorMode, this function returns 
+    the luminance value applied to the first color.
+  */
+  double getShadeTintValue() const;
+  
+  /** \details
+    Sets the luminance value for this Hatch entity.
+    
+    \param luminance [in]  Luminace value. [0.0 .. 1.0]
+    
+    If the gradient is using oneColorMode, this function sets 
+    the luminance value applied to the first color.
+  */
+  void setShadeTintValue(
+    double luminance);
+  
+  /** \details
+    Returns the interpolation value between the 
+    default and shifted values of the gradient's definition. 
+    
+    \remarks
+    A gradientShift of 0 indicates a fully unshifted gradient.
+    A gradientShift of 1 indicates a fully shifted gradient.
+  */
+  double gradientShift() const;
+  
+  /** \details
+      Sets the interpolation value between the 
+      default and shifted values of the gradient's definition. 
+
+      \param gradientShift [in]  Shift value.
+	  
+      \remarks
+      A gradientShift of 0 indicates a fully unshifted gradient.
+      A gradientShift of 1 indicates a fully shifted gradient.
+  */
+  void setGradientShift(double gradientShift);
+  
+  /** \details
+    Returns the interpolated color of the gradient definition.
+
+    \param value [in]  Interpolation value.
+    \param color [out]  Receives the interpolated color.
+  */
+  void evaluateGradientColorAt(
+    double value, 
+    OdCmColor& color) const;
+
+  /** \details
+    This function appends this object to the specified owner object.
+
+    \param idPair  [in]  ID pair to append.
+    \param pOwnerObject  [in]  Pointer to the owner object.
+    \param ownerIdMap  [in/out]  Owner's ID map.
+
+    \remarks
+    Adds a record to the specified ID map. 
+    This function is used internally to subDeepClone() and subWblockClone().
+  */
+  void appendToOwner(
+    OdDbIdPair& idPair, 
+    OdDbObject* pOwnerObject , 
+    OdDbIdMapping& ownerIdMap);
+
+  void subClose();
+
+  /** \details
+    Sets the pattern data for this Hatch entity directly, bypassing OdHatchPatternManager (DXF 76 and DXF 2).
+    
+    \param patType [in]  Pattern type.
+    \param patName [in]  Pattern name.
+    \param angle [in]  Pattern angle.
+    \param scale [in]  Pattern scale.
+    \param pat [in]  Pattern definition (already scaled and rotated)
+    
+    \remarks
+    patType must be one of the following:
+    
+    <table>
+    Name              Value
+    kUserDefined      0
+    kPreDefined       1
+    kCustomDefined    2
+    </table>
+     
+    patName is ignored for patType == kUserDefined; appearance is defined by setPatternAngle(),
+    setPatternSpace() and setPatternDouble().
+    
+    \remarks
+    angle and scale are not applied to the pattern.
+  */
+  void setRawPattern(
+    OdDbHatch::HatchPatternType patType, 
+    const OdString& patName,
+    double angle, 
+    double scale,
+    const OdHatchPattern& pat);
+
+
+  /** \details
+    Returns the hatch pattern definition for this Hatch entity as it appears in the PAT file.
+  */
+  OdHatchPattern getPattern() const;
+
+
+  /** \details
+    Returns the hatch pattern definition for this Hatch entity as it appears in the DWG/DXF file.
+  */
+  OdHatchPattern getRawPattern() const;
+
+  /** \details
+    Sets the origin point to the current Hatch object.
+
+    \param pt [in] Origin point.
+  */
+  void setOriginPoint(const OdGePoint2d& pt);
+
+  /** \details
+    Returns the origin point of the current Hatch object as OdGePoint2d object.
+  */
+  OdGePoint2d originPoint() const;
+
+  virtual OdResult explodeGeometry(OdRxObjectPtrArray& entitySet) const;
+
+  /** \details
+    Returns the area of this entity.
+
+    \param area [out]  Receives the area.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getArea(double& area) const;
+
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type, OdGsMarker gsMark, 
+    const OdGePoint3d& pickPoint,const OdGeMatrix3d& xfm, 
+    OdDbFullSubentPathArray& subentPaths, 
+    const OdDbObjectIdArray* pEntAndInsertStack = 0) const;
+  virtual OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+    OdGsMarkerArray& gsMarkers) const;
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& path) const;
+
+  /** \details
+      Returns the hatch background color.
+  */
+  OdCmColor backgroundColor() const;
+
+  /** \details
+      Sets the hatch background color.
+  */
+  void setBackgroundColor(const OdCmColor& color);
+
+  OdGeMatrix3d getEcs( ) const;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbHatch object pointers.
+*/
+typedef OdSmartPtr<OdDbHatch> OdDbHatchPtr;
+
+TOOLKIT_EXPORT EdgeArray oddbCreateEdgesFromEntity(const OdDbEntity* pEnt, const OdGePlane& hatchPlane);
+
+#include "TD_PackPop.h"
+
+#endif /* OD_DBHATCH_H */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatchPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatchPE.h
new file mode 100755
index 0000000..f229563
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHatchPE.h
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_HATCH_PE_
+#define _OD_DB_HATCH_PE_
+
+
+#include "DbHatch.h"
+
+/** \details
+    This class defines the interface for the Hatch Protocol Extension classes.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbHatchPE : public OdRxObject
+{
+public:
+	ODRX_DECLARE_MEMBERS(OdDbHatchPE);
+
+  /** \details
+    Returns the area of this entity.
+
+    \param pHatch [in]  Pointer to the hatch.
+    \param area [out]  Receives the area.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+	virtual OdResult getArea(const OdDbHatch* pHatch, double& area) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbHatchPE object pointers.
+*/
+typedef OdSmartPtr<OdDbHatchPE> OdDbHatchPEPtr;
+
+#endif //_OD_DB_HATCH_PE_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHelix.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHelix.h
new file mode 100755
index 0000000..d37d869
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHelix.h
@@ -0,0 +1,186 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDB_DBHELIX_H
+#define ODDB_DBHELIX_H
+
+#include "TD_PackPush.h"
+
+#include "DbSpline.h"
+
+/** \details
+    <group OdDb_Classes> 
+
+    This class represents Helix entities in an OdDbDatabase instance.
+
+    Library: TD_Db
+*/
+class TOOLKIT_EXPORT OdDbHelix : public OdDbSpline
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbHelix);
+
+  OdDbHelix();  
+
+  enum ConstrainType
+  {
+    kTurnHeight = 0,
+    kTurns      = 1,
+    kHeight     = 2
+  };
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Explodes this entity into a set of simpler entities.  
+
+    \param entitySet [in/out] Receives an array of pointers to the new entities.
+    
+    \returns
+    Returns eOk if successful, or an appropriate error code if not.
+
+    \remarks
+    Entities resulting from the explosion are appended to the specified array.
+    
+    The newly created entities are not database resident.
+    
+    The default implementation of this function returns eNotApplicable. This function can be
+    overridden in custom classes.
+  */
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const; /* Replace OdRxObjectPtrArray */
+
+  /** \details
+    Applies the specified 3D transformation matrix to this entity.
+
+    \param xfm [in]  3D transformation matrix.
+
+    \returns
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  // This functions creates the helix geometry based on the values set 
+  // in prior function calls. Without calling this function, 
+  // no geometry will be visible on the screen. 
+  void createHelix();
+
+  // Returns the start point of the axis for the helix.
+  OdGePoint3d axisPoint() const;
+
+  // Sets the start point of the axis for the helix.
+  // axisPoint Input the 3D point where the axis starts  
+  // bMoveStartPoint Input Boolean indicating whether to 
+  // relocate the start point by the same offset
+  void setAxisPoint(const OdGePoint3d& axisPoint, bool bMoveStartPoint = true);
+
+  // Returns the start point of the helix
+  OdGePoint3d startPoint() const;
+
+  // Sets the start point of the helix 
+  void setStartPoint(const OdGePoint3d &startPoint);
+
+  // Vector of the axis of the helix
+  OdGeVector3d axisVector() const;
+
+  // Sets the vector for the axis for the helix 
+  void setAxisVector(const OdGeVector3d& axisVector);
+
+  // Height of the helix
+  double height() const;
+
+  // Sets the height of the helix
+  void setHeight(double dHeight);
+
+  // Base radius of the helix
+  double baseRadius() const;
+
+  // Sets the base radius of the helix
+  void setBaseRadius(double dRadius);
+
+  // Top radius of the helix
+  double topRadius() const;
+
+  // Sets the top radius of the helix
+  void setTopRadius(double dRadius);
+
+  // Number of turns (revolutions) of the helix
+  double turns() const;
+
+  // Sets the number of turns (revolutions)
+  void setTurns(double dTurns);
+
+  // Turn height (distance between threads)
+  double turnHeight() const;
+
+  // Sets the turn height (distance between threads)
+  void setTurnHeight(double dTurnHeight);
+
+  // Returns the twist of the helix (clockwise or counter-clockwise)
+  // true means "counter-clockwise"
+  bool twist() const;
+
+  // Sets the twist of the helix (is counter-clockwise)
+  void setTwist(bool bTwist);
+
+  // Returns the constrain property of the helix
+  ConstrainType constrain() const;
+
+  // Sets the constrain property of the helix
+  void setConstrain(ConstrainType constrain);
+
+  // Returns the turn slope angle of the helix
+  double turnSlope() const;
+
+  // Returns the total length of the helix
+  double totalLength() const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult reverseCurve();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbHelix object pointers.
+*/
+typedef OdSmartPtr<OdDbHelix> OdDbHelixPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppProgressMeter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppProgressMeter.h
new file mode 100755
index 0000000..adc3c9b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppProgressMeter.h
@@ -0,0 +1,100 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDB_HOSTAPPPROGRESSMETER_INCLUDED_
+#define _ODDB_HOSTAPPPROGRESSMETER_INCLUDED_
+
+
+#include "TD_PackPush.h"
+
+
+#include "DbRootExport.h"
+#include "OdString.h"
+
+
+/** \details
+    This class is the base class for platform specific progress metering
+    within Teigha.
+
+    Library: TD_Db
+
+    \remarks
+    This class receives progress notifications during various database operations such
+    as loading or saving a file.
+
+    Calls to an instance of this class will always come in the following order:
+
+    1.  setLimit (called once).
+    2.  start (called once).
+    3.  meterProgress (called repeatedly).
+    4.  stop (called once).
+
+    <group OdDb_Classes>
+*/
+class DBROOT_EXPORT OdDbHostAppProgressMeter
+{
+public:
+  virtual ~OdDbHostAppProgressMeter();
+
+    /** \details
+    Notification function called to initialize this ProgressMeter object.
+    \param displayString [in]  String to be displayed.
+    */
+  virtual void start(
+    const OdString& displayString = OdString::kEmpty) = 0;
+
+  /** \details
+    Notification function called to terminate this ProgressMeter object.
+  */
+  virtual void stop() = 0;
+
+  /** \details
+    Notification function called to increment this ProgressMeter object.
+
+    \remarks
+    The completion percentage may be calculated by dividing the number of times
+    this function is called by the value set by setLimit.
+
+    \note
+    Throwing an exception indicates that the operation associated with this ProgressMeter object
+    should be halted.
+  */
+  virtual void meterProgress() = 0;
+
+  /** \details
+    Notification function called to specify the maximum number of times this
+    ProgressMeter object will be incremented.
+
+    \param max [in]  Maximum meterProgress calls.
+  */
+  virtual void setLimit(
+    int max) = 0;
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // _ODDB_HOSTAPPPROGRESSMETER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppServices.h
new file mode 100755
index 0000000..ea9890c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHostAppServices.h
@@ -0,0 +1,727 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBHOSTAPPLICATIONSERVICES_INCLUDED_
+#define _ODDBHOSTAPPLICATIONSERVICES_INCLUDED_
+
+
+#include "TD_PackPush.h"
+
+#include "SmartPtr.h"
+#include "DbBaseHostAppServices.h"
+#include "DbLayoutManager.h"
+#include "OdStreamBuf.h"
+#include "DbDatabase.h"
+#include "OdFont.h"
+#include "OdBinaryData.h"
+#include "DbSecurity.h"
+#include "DbPlotSettingsValidator.h"
+
+
+class OdDbKey;
+class OdDbAbstractClipBoundaryDefinition;
+class ClipBoundaryArray;
+class OdHatchPatternManager;
+class OdDbPageController;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPageController object pointers.
+*/
+typedef OdSmartPtr<OdDbPageController> OdDbPageControllerPtr;
+
+
+/** \details
+    This class is the base class for platform specific operations within Teigha.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+    {noAutoLink}
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbHostAppServices : public OdDbBaseHostAppServices
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbHostAppServices);
+
+  OdDbHostAppServices();
+  virtual ~OdDbHostAppServices();
+
+  /** \details
+    Returns the fully qualified path to the specified file.
+
+    \param filename [in]  Name of the file to find.
+    \param pDb [in]  Pointer to the database context.
+    \param hint [in]  Hint that indicates the type of file that is required.
+
+    \remarks
+    Returns an empty string if the file is not found.
+
+    This function is called by Teigha when access is needed to a
+    file, such as a font file, a template file, etc.
+
+    pDb == 0 specifies that this file search is not related to a database.
+
+    If pDb != 0, call pDb->getFilename() to determine the path to the DWG
+    file associated with the database.
+
+    The typical search order is as follows:
+
+    1.  The filename itself.
+    2.  The current directory.
+    3.  The drawing directory (for shx font, image, and xref files).
+    4.  The directories listed in the "ACAD" environment variable.
+    5.  The Windows fonts directory (only for TTF fonts on Windows).
+
+    hint must be one of the following:
+
+    <table>
+    Name                    Value     Description Extension
+    kDefault                0         Any file.                         any
+    kFontFile               1         Can be either SHX or TTF file.    SHX or TTF
+    kCompiledShapeFile      2         SHX file.                         SHX
+    kTrueTypeFontFile       3         TTF file.                         TTF
+    kEmbeddedImageFile      4         Image file.                       ISM
+    kXRefDrawing            5         Drawing template file.            DWT
+    kPatternFile            6         Pattern file (PAT)                PAT
+    kTXApplication          7         Teigha(R) Xtension file.            TX
+    kFontMapFile            8         FontMap file                      FMP
+    kUnderlayFile           9         Underlay file
+    kTextureMapFile        10
+    </table>
+
+    \note
+    The client application can, in fact return any non-null string, so long as
+    the application can handle that string in OdDbSystemServices::createFile.
+  */
+  virtual OdString findFile(
+    const OdString& filename,
+    OdDbBaseDatabase* pDb = 0,
+    FindFileHint hint = kDefault);
+
+  /** \details
+    Returns an instance of an OdDbHostAppProgressMeter.
+  */
+  virtual OdDbHostAppProgressMeter* newProgressMeter();
+
+  /** \details
+    Notification function called whenever Teigha no longer needs the specified
+    ProgressMeter object.
+
+    \param pProgressMeter [in]  Pointer to the ProgressMeter object no longer needed by Teigha.
+
+    \note
+    The default implementation of this function does nothing but return.
+  */
+  virtual void releaseProgressMeter(
+    OdDbHostAppProgressMeter* pProgressMeter);
+
+  /** \details
+    Returns the static OdRxClass description object associated with the database.
+
+    \remarks
+    Returns OdDbDatabase::desc();
+  */
+  virtual OdRxClass* databaseClass() const;
+
+  /** \details
+    Creates an instance of an OdDbDatabase object.
+
+    \param createDefault [in]  If and only if true, the newly created database
+            will be populated with the default set of objects (all tables, ModelSpace and PaperSpace blocks
+            etc.)
+    \param measurement [in] Units of measurement for creating the database.
+
+    \remarks
+    Returns the newly created database.
+
+    This HostAppServices object will be associated with the newly created database.
+
+    measurement must be one of the following:
+
+    <table>
+    Name              Value   Description
+    OdDb::kEnglish    0       English
+    OdDb::kMetric     1       Metric
+    </table>
+
+  */
+  virtual OdDbDatabasePtr createDatabase(
+    bool createDefault = true,
+    OdDb::MeasurementValue measurement = OdDb::kEnglish) const;
+
+  /** \details
+    Loads the contents of the specified StreamBuf or DWG/DXF file into the
+    database with which this HostAppServices object is associated.
+
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+    \param partialLoad [in]  Controls the partial loading of .dwg files.
+    \param password [in]  Password for file.
+    \param allowCPConversion [in]  If and only if true, allows code page conversion.
+
+    \remarks
+    Returns a SmartPointer to the database containing the contents of the file.
+  */
+  virtual OdDbDatabasePtr readFile(
+    OdStreamBuf* pStreamBuf,
+    bool allowCPConversion = false,
+    bool partialLoad = false,
+    const OdPassword& password = OdPassword());
+
+  /** \details
+    Performs a recover operation on the specified StreamBuf file.
+
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+    \param pAuditInfo [in]  Pointer to an OdDbAuditInfo object.
+    \param password [in]  Password for file.
+
+
+    \remarks
+    The specified AuditInfo object controls the audit, and receives the audit status.
+
+    When overriding this function for a custom class, first call OdDbObject::audit(pAuditInfo)
+    to validate the audit operation.
+  */
+  virtual OdDbDatabasePtr recoverFile(
+    OdStreamBuf* pStreamBuf,
+    OdDbAuditInfo *pAuditInfo = 0,
+    const OdPassword& password = OdPassword());
+
+  /** \details
+    \param filename [in]  Path of the DWG/DXF file to read.
+    \param shareMode [in]  Sharing mode to use when opening the file.
+
+    \remarks
+    shareMode must be one of the following:
+
+    <table>
+    Name                         Value       Description
+    Oda::kShareDenyReadWrite     0x10        deny read/write mode
+    Oda::kShareDenyWrite         0x20        deny write mode
+    Oda::kShareDenyRead          0x30        deny read mode
+    Oda::kShareDenyNo            0x40        deny none mode
+    </table>
+  */
+  virtual OdDbDatabasePtr readFile(
+    const OdString& filename,
+    bool allowCPConversion = false,
+    bool partialLoad = false,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    const OdPassword& password = OdPassword())
+  {
+    Oda::FileAccessMode nDesiredAccess = Oda::kFileRead;
+    return readFile(odSystemServices()->createFile(filename, nDesiredAccess, shareMode),
+      allowCPConversion, partialLoad, password);
+  }
+
+
+  /** \details
+    Returns the name of the client program.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getLibName()
+  */
+  virtual const OdString program();
+
+  /** \details
+    Returns the name of the client product.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    \note
+    The default implementation of this function returns program().
+  */
+  virtual const OdString product();
+
+  /** \details
+    Returns the name of the client company.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getCompanyName().
+  */
+  virtual const OdString companyName();
+
+  /** \details
+    Returns the name of the client product code.
+
+    \remarks
+    This function is typically used for populating "About" information.
+
+    prodcode() returns one of the following:
+
+    <table>
+    Name          Value   Description
+    kProd_ACAD    1       Plain
+    kProd_LT      2       Lite
+    kProd_OEM     3       OEM
+    kProd_OdDb    4       ..
+    </table>
+
+    \note
+    The default implementation of this function returns kProd_OEM, and should not be overridden.
+  */
+  virtual ProdIdCode prodcode();
+
+  /** \details
+    Returns the release major and minor version string of the client application.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getLibVersion().
+  */
+  virtual const OdString releaseMajorMinorString();
+
+  /** \details
+    Returns the release major version of the client application.
+
+    \note
+    The default implementation of this function returns TD_MAJOR_VERSION.
+  */
+  virtual int releaseMajorVersion();
+
+  /** \details
+    Returns the release minor version of the client application.
+
+    \note
+    The default implementation of this function returns TD_MINOR_VERSION.
+  */
+  virtual int releaseMinorVersion();
+
+  /** \details
+    Returns the release version string of the client application.
+
+    \note
+    The default implementation of this function returns oddbGetLibraryInfo()->getLibVersion().
+  */
+  virtual const OdString versionString();
+
+  /** \details
+    Displays the specified warning message.
+
+    \param warnVisGroup [in]  Group of warning message visibility (always visible if empty).
+    \param message [in]  Warning message.
+    \param warningOb [in]  Warning object.
+    \param objectId [in]  Object ID of the object associated with the warning.
+
+    \note
+    These functions call odSystemServices()->warning(message) to display the warning.
+  */
+  TD_USING(OdDbBaseHostAppServices::warning);
+  //virtual void warning(
+  //  const OdString& message) { odSystemServices()->warning(NULL, message); };
+  //virtual void warning(
+  //  const char* warnVisGroup,
+  //  const OdString& message) { odSystemServices()->warning(warnVisGroup, message); };
+  //virtual void warning(
+  //  OdWarning warningOb) { warning(NULL, getErrorDescription(warningOb)); }
+  //virtual void warning(
+  //  const char* warnVisGroup,
+  //  OdWarning warningOb) { warning(warnVisGroup, getErrorDescription(warningOb)); }
+  virtual void warning(
+    OdWarning warningOb,
+    OdDbObjectId objectId) { warning(NULL, warningOb, objectId); }
+  virtual void warning(
+    const char* warnVisGroup,
+    OdWarning warningOb,
+    OdDbObjectId objectId);
+  virtual void warning(
+    const OdError& err)  { warning(NULL, err.description()); }
+  virtual void warning(
+    const char* warnVisGroup,
+    const OdError& err)  { warning(warnVisGroup, err.description()); }
+
+  /** \details
+    Returns the error description associated with the specified error code.
+    \param errorCode [in]  Error code.
+
+    \note
+    The default implementation of this function returns formatMessage(errorCode).
+  */
+  virtual OdString getErrorDescription(
+    unsigned int errorCode);
+
+  /** \details
+    Returns a formatted message corresponding to the specified error code(s).
+    \param errorCode [in]  Error code.
+  */
+  virtual OdString formatMessage(
+    unsigned int errorCode,...);
+#ifdef ODA_FORMAT
+  virtual OdString formatMessage(unsigned int errorCode, long i, const OdString& str) { return formatMessage(errorCode, i, (void*)str.c_str()); }
+#endif
+
+
+  /** \details
+    Returns true if and only if Teigha is to do full-time CRC checking on database filing operations.
+
+    \remarks
+    The default implementation of this function always returns false.
+    Override this function to return true or false as desired to control this checking.
+  */
+  virtual bool doFullCRCCheck();
+
+  /** \details
+    Returns an alternate UndoController object for Teigha.
+
+    \remarks
+    The default implementation of this function always returns a null SmartPointer.
+
+    Each database requires at most 2 undo controllers (for undo and redo).
+  */
+  virtual OdDbUndoControllerPtr newUndoController();
+
+  /** \details
+    Print the audit report for the specified AuditInfo object.
+
+    \param pAuditInfo [in]  Pointer to an OdDbAuditInfo object.
+    \param strLine [in]  The string to print.
+    \param printDest [in]  Print destination.
+
+    \remarks
+    The default implementation of this function does nothing but return.
+  */
+  virtual void auditPrintReport(
+    OdAuditInfo* pAuditInfo,
+    const OdString& strLine,
+    int printDest) const;
+
+  /** \details
+    Returns the PlotSettingsValidator object associated with HostAppServices object.
+
+    \remarks
+    If no PlotSettingsValidator object is associated with this HostAppServices object, one is created and
+    associated with it.
+  */
+  virtual OdDbPlotSettingsValidator* plotSettingsValidator();
+
+  /** \details
+    Locates the TTF or TTC file containing the specified font description.
+
+    \param description [in]  Font description.
+    \param filename [out]  Receives the name of the TrueType font file.
+
+    \remarks
+    Returns true and the filename if and only if the font file was found.
+
+    \note
+    The non-Windows builds of this function do nothing but return.
+  */
+  virtual bool ttfFileNameByDescriptor(
+    const OdTtfDescriptor& description,
+    OdString& filename) = 0;
+
+#define REGVAR_DEF(type, name, unused3, unused4, unused5)\
+protected:\
+  /*!DOM*/ \
+  type  m_##name;\
+public:\
+  /*!DOM*/ \
+  SVARS_FUNC_MODIFIER type get##name() const;\
+  \
+  /*!DOM*/ \
+  SVARS_FUNC_MODIFIER void set##name(type val);
+
+#include "SysVarDefs.h"
+
+#undef REGVAR_DEF
+
+
+  virtual OdString getAlternateFontName() const;
+
+  /** \details
+    Returns the name of the font mapping file used by the getPreferableFont function.
+
+    \sa
+    Font Handling
+
+    \note
+    The default implementation of this function does nothing but return an empty string.
+    It will be fully implemented in a future release.
+  */
+  virtual OdString getFontMapFileName() const;
+
+  /** \details
+    Returns the preferable font name for the specified font name and type.
+
+
+    \param fontName [in]  Font name.
+    \param fontType [in]  Font type.
+
+    \remarks
+    This function is called as the first step in the process of resolving a font file.
+    The default implementation tries to locate a font mapping file by calling
+    getFontMapFileName, and substitutes the font name based on the contents of this
+    file.
+
+    fontType must be one of the following:
+
+    <table>
+    Name                    Value    Description
+    kFontTypeUnknown        0        Unknown.
+    kFontTypeShx            1        SHX font.
+    kFontTypeTrueType       2        TrueType font.
+    kFontTypeShape          3        Shape file.
+    kFontTypeBig            4        BigFont file.
+    </table>
+
+    \sa
+    Font Handling
+  */
+  virtual OdString getPreferableFont(
+    const OdString& fontName,
+    OdFontType fontType);
+
+  /** \details
+    Returns the font to be used when the specified font is not found.
+
+    \param fontName [in]  Font name.
+    \param fontType [in]  Font type.
+
+    \remarks
+    fontType must be one of the following:
+
+    <table>
+    Name                    Value    Description
+    kFontTypeUnknown        0        Unknown.
+    kFontTypeShx            1        SHX font.
+    kFontTypeTrueType       2        TrueType font.
+    kFontTypeShape          3        Shape file.
+    kFontTypeBig            4        BigFont file.
+    </table>
+
+    The default implementation of this function calls getAlternateFontName for
+    fonts that are not of type kFontTypeShape or kFontTypeBig. When they are,
+    and empty string is returned.
+
+    Client code could override this function to perform custom substitution
+    for these types of fonts.
+
+    \sa
+    Font Handling
+  */
+  virtual OdString getSubstituteFont(
+    const OdString& fontName,
+    OdFontType fontType);
+
+  /** \details
+    Returns the typeface name of the TTF font which has the character.
+
+    \param pFont [in]        Current font.
+    \param unicodeChar [in]  Current symbol.
+    \param pDb [in]          Pointer to the database context.
+
+    \sa
+    Font Handling
+
+    \note
+    The default implementation uses Windows API for getting the font.
+  */
+  virtual OdString getSubstituteFontByChar(
+    const OdFont& pFont,
+    OdChar unicodeChar, OdDbDatabase *pDb);
+
+  /** \details
+    Collects folders with TrueType fonts.
+
+    \param aDirs [out]   Array names of folders.
+
+    \sa
+    Font Handling
+  */
+  virtual bool getSystemFontFolders(
+     OdStringArray& aDirs);
+
+  /** \details
+    Collects TrueType font paths.
+
+    \param res [out]      Array of full file names of TrueType fonts.
+    \param sPath [in]    Array of folders paths with TrueType files.
+    \param sFilter [in]  File name filter.
+
+    \sa
+    Font Handling
+  */
+  virtual void collectFilePathsInDirectory(OdStringArray& res, // out
+    const OdString& sPath, // in
+    const OdString& sFilter = L"*.*");
+
+  /** \details
+    Returns the PatternManager associated with this HostAppServices object.
+
+    \remarks
+    If no PatternManager object is associated with this HostAppServices object, one is created and
+    associated with it.
+  */
+  virtual OdHatchPatternManager* patternManager() = 0;
+
+  /** \details
+    Notification function called whenever a drawing file requires a *password.*
+
+    \param dwgName [in]  Drawing file requiring the password.
+    \param isXref [in]  True if and only if the drawing file is being opened as an Xref.
+    \param password [out]  Password.
+
+    \remarks
+    Prompts the user for a password and returns said password.
+
+    Returns false if the user cancels the password entry, or
+    if there is no user.
+
+    \note
+    The default implementation of this function does nothing but return false.
+  */
+  virtual bool getPassword(
+    const OdString& dwgName,
+    bool isXref,
+    OdPassword& password);
+
+  /* { Secret } */
+  virtual OdPwdCachePtr getPasswordCache();
+
+  /** \details
+    Returns an alternate PageController object for Teigha.
+
+    \remarks
+    The paging type will be determined by the overridden OdDbPageController::pagingType
+    function in the returned instance.
+
+    A null SmartPointer indicates no paging of database objects is to be done.
+
+    \note
+    The default implementation of this function always returns a null SmartPointer.
+  */
+  virtual OdDbPageControllerPtr newPageController();
+
+  /** \details
+  Callback method to use with paging functionality.
+
+  \remarks
+  Return eInvalidInput in case if pDb is null.
+
+  \note
+  The default implementation of this function calls odDbPageObjects.
+  */
+  virtual OdResult pageObjects(OdDbDatabase* pDb);
+
+  /** \details
+    Prompts the user for a filename, and returns their response.
+
+    \param flags [in]  Dialog behavior.
+    \param dialogCaption [in]  Dialog caption.
+    \param defExt [in]  Default file extension without "."
+    \param defFilename [in]  Default filename.
+    \param filter [in]  Filter pattern.
+
+    \remarks
+    flags must be one of the following:
+
+    <table>
+    Name                  Value   Description
+    kGfpForOpen           0       For Open.
+    kGfpForSave           1       For Save.
+    kGfpOverwritePrompt   2       Enable overwrite prompt displaying when exist file selected for saving.
+    </table>
+
+    This function is intended for the selection of filenames via dialog boxes,
+    although other methods may be used.
+
+    * Returns "canceled" if the user cancels the request.
+    * Returns "unsupported" if the application does not support this user input.
+
+    \note
+    The default implementation of this function does nothing but return "unsupported".
+  */
+  virtual OdString fileDialog(
+    int flags,
+    const OdString& dialogCaption = OdString::kEmpty,
+    const OdString& defExt = OdString::kEmpty,
+    const OdString& defFilename = OdString::kEmpty,
+    const OdString& filter = OdString::kEmpty);
+
+  virtual OdDbLayoutManagerPtr layoutManager() const;
+
+  /** \details
+  Returns non-zero if the application copy is educational.
+  */
+  virtual OdUInt32 educationalPlotStamp() const;
+
+  /** \details
+    Returns the OdDgHostAppServices object used for reading dgn files.
+  */
+  virtual OdDbBaseHostAppServices* getDgnHostAppServices() const;
+
+  /** \details
+    Returns thumbnail preview size. Default implementation returns sizes based on THUMBSIZE Registry variable.
+  */
+  virtual void getThumbSize(unsigned int& nWidth, unsigned int& nHeight);
+
+  /** \details
+    Returns the path to the temporary files folder.
+  */
+  virtual OdString getTempPath() const;
+
+  virtual OdStreamBufPtr getHistoryFile(OdDbDatabase*);
+#ifdef SWIG
+  friend class OdDbHostAppServices2;
+private:
+#endif
+  virtual OdDbKey* key() const = 0;
+protected:
+  OdMutex                       m_LayoutManagerMutex;
+  OdMutex                       m_ValidatorMutex;
+  OdMutex                       m_PwdCacheMutex;
+//  OdMutex                       m_WarningMutex;
+  OdDbLayoutManagerPtr          m_pLayoutManager;
+  OdDbPlotSettingsValidatorPtr  m_pValidator;
+  OdPwdCachePtr                 m_pPwdCache;
+};
+
+/** \details
+    This class implements platform-dependent operations and progress metering.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT OdDbHostAppServices2 : public OdDbHostAppServices
+{
+  virtual OdDbKey* key() const;
+protected:
+  mutable OdMutex               m_KeyMutex;
+};
+
+#include "TD_PackPop.h"
+
+#endif /* _ODDBHOSTAPPLICATIONSERVICES_INCLUDED_ */
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHyperlink.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHyperlink.h
new file mode 100755
index 0000000..0c52298
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbHyperlink.h
@@ -0,0 +1,363 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _ODDBHYPERLINK_INCLUDED_
+#define _ODDBHYPERLINK_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "RxObject.h"
+#include "DbObject.h"
+#include "DbStubPtrArray.h"
+
+/** \details
+    This class is the base class for Hyperlink objects.
+    
+    Library: TD_Db
+    
+    \remarks
+    OdDbHyperlink objects contain the following data:
+    
+    <table>
+    Name               Description 
+    Hyperlink Name     A filename or URL.
+    Sublocation        A named view, range of cells, etc.
+    Description        A display name for the Hyperlink.
+    </table>
+    
+    
+    \sa
+    * OdDbEntityHyperlinkPE
+    * OdDbHyperlink
+    * OdDbHyperlinkCollection
+
+    <group OdDb_Classes>
+*/
+class DBROOT_EXPORT OdDbHyperlink
+{
+public:
+  /** \details
+  Flags that can be set on the hyperlink object
+  */
+  enum HLinkFlags 
+  {
+    kUndefined = 0,
+    kConvertDwgToDwf = 0x1
+  };
+
+  OdDbHyperlink() {};
+  virtual ~OdDbHyperlink(){};
+  
+  /** \details
+    Returns the name associated with this Hyperlink object.
+  */
+  virtual const OdString name() const = 0;   
+
+  /** \details
+    Sets the name associated with this Hyperlink object.
+    
+    \param name [in]  Name for this Hyperlink object.
+  */
+  virtual void setName(
+    const OdString& name) = 0; 
+  
+  /** \details
+    Returns the description associated with this Hyperlink object.
+  */
+  virtual const OdString description() const = 0;  
+
+  /** \details
+    Sets the description associated with this Hyperlink object.
+    
+    \param description [in]  Description for this Hyperlink object.
+
+    \remarks
+    "<Name> - <SubLocation>" will be returned by getDisplayString() if description is null.
+  */
+  virtual void setDescription(
+    const OdString& description) = 0;
+  
+  /** \details
+    Returns the sublocation associated with this Hyperlink object.
+  */
+  virtual const OdString subLocation() const = 0;  
+
+  /** \details
+    Sets the sublocation associated with this Hyperlink object.
+    
+    \param subLocation [in]  Sublocation for this Hyperlink object.
+  */
+  virtual void setSubLocation(
+    const OdString& subLocation) = 0;
+  
+  /** \details
+    Returns the display string associated with this Hyperlink object.
+
+    \remarks
+    Returns "<Name> - <SubLocation>" will be returned if description() is null.
+  */
+  virtual const OdString getDisplayString() const = 0;  
+  
+  /** \details
+    Returns true if and only if this Hyperlink object is associated with the outermost container.
+  */
+  virtual bool isOutermostContainer() const = 0;
+  
+  /** \details
+    Returns the nesting level of this Hyperlink object.
+  */
+
+  virtual int getNestedLevel() const = 0;
+
+  /** \details
+  Get flags that can be set on the hyperlink object
+  */
+  virtual OdInt32 flags() const  = 0;
+
+  /** \details
+  Set flags that can be set on the hyperlink object
+  */
+  virtual void setFlags(OdInt32 lFlags) = 0;
+
+};
+
+/** \details
+    This class is a container object for OdDbHyperlink objects.
+    
+    \sa
+    * OdDbEntityHyperlinkPE
+    * OdDbHyperlink
+    * OdDbHyperlinkCollection
+
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class DBROOT_EXPORT OdDbHyperlinkCollection : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbHyperlinkCollection);
+  OdDbHyperlinkCollection() {};
+  virtual ~OdDbHyperlinkCollection(){};
+  
+  /** \details
+    Creates a HyperLink object, and adds it to the start of this HyperlinkCollection object.
+
+    \param name [in]  Name for the Hyperlink object.
+    \param description [in]  Description for the Hyperlink object.
+    \param subLocation [in]  Sublocation for the Hyperlink object.
+  */
+  virtual void addHead(
+    const OdString& name, 
+    const OdString& description, 
+    const OdString& subLocation = OdString::kEmpty) = 0;
+
+  /** \details
+    Creates a HyperLink object, and adds it to the end of this HyperlinkCollection object.
+
+    \param name [in]  Name for the Hyperlink object.
+    \param description [in]  Description for the Hyperlink object.
+    \param subLocation [in]  Sublocation for the Hyperlink object.
+  */
+  virtual void addTail(
+    const OdString& name, 
+    const OdString& description, 
+    const OdString& subLocation = OdString::kEmpty) = 0;
+
+  /** \details
+    Creates a HyperLink object, and inserts it into this HyperlinkCollection object at the specified index.
+
+
+    \param name [in]  Name for the Hyperlink object.
+    \param description [in]  Description for the Hyperlink object.
+    \param subLocation [in]  Sublocation for the Hyperlink object.
+    \param hyperlinkIndex [in]  Hyperlink index.
+    
+    \remarks
+    Objects at or after index are moved toward the tail.
+  */
+  virtual void addAt(
+    const int hyperlinkIndex,
+    const OdString& name, 
+    const OdString& description, 
+    const OdString& subLocation = OdString::kEmpty) = 0;
+
+  /** \details
+    Removes the first HyperLink object in this HyperlinkCollection object
+  */
+  virtual void removeHead() = 0;
+
+  /** \details
+    Removes the last HyperLink object in this HyperlinkCollection object
+  */
+  virtual void removeTail() = 0;
+
+  /** \details
+    Removes the HyperLink object at the specified location in this HyperlinkCollection object.
+
+    \param hyperlinkIndex [in]  Hyperlink index.
+  */
+  virtual void removeAt(
+    const int hyperlinkIndex) = 0;
+  
+  /** \details
+    Returns the number of HyperLink objects in this HyperlinkCollection object.
+  */
+  virtual int count() const = 0;
+  
+  
+  /** \details
+    Returns the HyperLink object at the specified location in this HyperlinkCollection object.
+
+    \param hyperlinkIndex [in]  Hyperlink index.
+  */
+  virtual OdDbHyperlink * item(
+    const int hyperlinkIndex) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbHyperlinkCollection object pointers.
+*/
+typedef OdSmartPtr<OdDbHyperlinkCollection> OdDbHyperlinkCollectionPtr;
+
+
+/** \details
+    This class is the Hyperlink Protocol Extension class.
+
+    \remarks
+    This class provides access to the Hyperlink objects
+    associated with OdDbDatabase objects.
+    
+    \sa
+    * OdDbEntityHyperlinkPE
+    * OdDbHyperlink
+    * OdDbHyperlinkCollection
+
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class DBROOT_EXPORT OdDbEntityHyperlinkPE : public OdRxObject
+{
+public:
+  
+  OdDbEntityHyperlinkPE();
+  virtual ~OdDbEntityHyperlinkPE();
+
+  ODRX_DECLARE_MEMBERS(OdDbEntityHyperlinkPE);
+  
+  /** \details
+    Creates a HyperlinkCollection object containing the Hyperlink objects
+    associated with the specified objects.
+    
+    \param pObject [in]  Pointer to the object.
+    \param objectIds [in]  Array of Object IDs.
+    \param oneOnly [in]  If and only if true, returns only the first Hyperlink.  
+    \param ignoreBlockDefinition [in]  If and only if true, ignores the Hyperlink objects associated with
+                              block definitions.
+    \remarks
+    Returns the HyperlinkColection object.                          
+
+    \note
+    As implemented, ignoreBlockDefinition is ignored.
+    It will be fully implemented in a future release.
+  */
+  virtual OdDbHyperlinkCollectionPtr getHyperlinkCollection(
+    const OdRxObject* pObject, 
+    bool oneOnly = false, 
+    bool ignoreBlockDefinition = true) = 0;
+
+  virtual OdDbHyperlinkCollectionPtr getHyperlinkCollection(
+    const OdDbStubPtrArray*& objectIds,
+    bool oneOnly = false,                                               
+    bool ignoreBlockDefinition = true) = 0;
+
+  /** \details
+    Associates the specified HyperlinkCollection object with the specified object.
+    
+    \param pObject [in]  Pointer to the target object.
+    \param pHCO [in]  Pointer to the HyperlinkCollection object.
+    
+    \note Hyperlink objects with null name, description, or sublocation will
+    not be added to the object. 
+  */
+  virtual void setHyperlinkCollection(
+    const OdRxObject * pObject, 
+    OdDbHyperlinkCollection * pHCO) = 0;
+  
+  /** \details
+    Returns the number of Hyperlink objects associated with the specified objects.
+
+    \param pObject [in]  Pointer to the object.
+    \param objectIds [in]  Array of Object IDs.
+    \param ignoreBlockDefinition [in]  If and only if true, ignores the Hyperlink objects associated with
+                              block definitions.
+
+    \note
+    As implemented, ignoreBlockDefinition is ignored.
+    It will be fully implemented in a future release.
+  */
+  virtual unsigned int getHyperlinkCount(
+    const OdRxObject * pObject, 
+    bool ignoreBlockDefinition = true) = 0;
+  
+  virtual unsigned int getHyperlinkCount(
+    const OdDbStubPtrArray *& idContainers, 
+    bool ignoreBlockDefinition = true) = 0;
+  
+  /** \details
+    Returns true if and only if one or more of the specified objects has 
+    Hyperlink objects associated with them.
+
+    \param pObject [in]  Pointer to the object.
+    \param objectIds [in]  Array of Object IDs.
+    \param ignoreBlockDefinition [in]  If and only if true, ignores the Hyperlink objects associated with
+                              block definition.
+
+    \note
+    As implemented, ignoreBlockDefinition is ignored.
+    It will be fully implemented in a future release.
+  */
+  virtual bool hasHyperlink(
+    const OdRxObject * pObject, 
+    bool ignoreBlockDefinition = true) = 0;
+  
+  
+  virtual bool hasHyperlink(
+    const OdDbStubPtrArray *& objectIds, 
+    bool ignoreBlockDefinition = true) = 0;
+  
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbEntityHyperlinkPE object pointers.
+*/
+typedef OdSmartPtr<OdDbEntityHyperlinkPE> OdDbEntityHyperlinkPEPtr;
+
+/** \details
+    This registration allows you to catch the invoking of each hyperlink destructor.
+*/
+typedef void (*ODDBHYPERLINK_CALLBACK)(const OdDbHyperlink*);
+DBROOT_EXPORT void odrxRegisterHyperlinkDestructorCallback(ODDBHYPERLINK_CALLBACK callbackFunc);
+DBROOT_EXPORT void odrxUnregisterHyperlinkDestructorCallback();
+#include "TD_PackPop.h"
+#endif // _ODDBHYPERLINK_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdBuffer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdBuffer.h
new file mode 100755
index 0000000..00c5573
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdBuffer.h
@@ -0,0 +1,139 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBIDBUFFER_H
+#define OD_DBIDBUFFER_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/** \details
+    This class is the base class for Iterator classes used to access the 
+    Object ID's in an OdDbIdBuffer object.
+
+    <group OdDb_Classes>
+*/
+class  OdDbIdBufferIterator : public OdRxObject
+{
+public:
+  /** \details
+      Sets this iterator to point to the first element in the associated container. 
+  */
+  virtual void start() = 0;
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() const = 0;
+
+  /** \details
+      Increments the current object for this iterator to the next object in the associated container.
+  */
+  virtual void next() = 0;
+
+  /** \details
+      Returns the Object ID of the current object referenced by this iterator.
+  */
+  virtual OdDbObjectId id() const = 0;
+
+  /** \details
+      If the specified Object ID is present in the associated container, makes this object the 
+      current object referenced by this iterator. If the specified Object ID is not found, 
+      the current object referenced by this iterator will be invalid, and done() returns true.
+  */
+  virtual bool seek(OdDbObjectId id) = 0;
+
+  /** \details
+      Removes the Object ID referenced by this iterator as the current element.  The element 
+      immediately following the removed element becomes the current element for this iterator. 
+  */
+  virtual void removeCurrentId() = 0;
+};
+
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbIdBufferIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbIdBufferIterator> OdDbIdBufferIteratorPtr;
+
+/** \details
+    Represents an ID buffer object in an OdDbDatabase instance.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbIdBuffer : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbIdBuffer);
+
+  /** \details
+      Constructor (no arguments).
+  */
+  OdDbIdBuffer();
+
+  /** \details
+      Returns an Iterator object that can be used to traverse the Object ID's in the OdDbIdBuffer object.
+
+      \returns
+      SmartPointer to the new iterator.
+  */
+  OdDbIdBufferIteratorPtr newIterator();
+
+  /** \details
+      Appends an Object ID onto this object's ID list.
+  */
+  void addId(const OdDbObjectId &id);
+
+  /** \details
+      Returns the number of Object ID's referenced by this OdDbIdBuffer object.
+  */
+  int numIds() const;
+
+  /** \details
+      Clears this object's Object ID list.
+  */
+  void removeAll();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+ 
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbIdBuffer object pointers.
+*/
+typedef OdSmartPtr<OdDbIdBuffer> OdDbIdBufferPtr;
+
+#include "TD_PackPop.h"
+
+#endif  // OD_DBIDBUFFER_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdMapping.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdMapping.h
new file mode 100755
index 0000000..1fe5d4d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIdMapping.h
@@ -0,0 +1,399 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODDBIDMAPPING_INCLUDED__
+#define __ODDBIDMAPPING_INCLUDED__
+
+#include "TD_PackPush.h"
+
+#include "OdaDefs.h"
+#include "DbObjectId.h"
+#include "DbObject.h"
+#include "RxObject.h"
+
+class OdDbDatabase;
+class OdDbIdMapping;
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbIdMapping object pointers.
+*/
+typedef OdSmartPtr<OdDbIdMapping> OdDbIdMappingPtr;
+
+/** \details
+    This class is the element class for OdDbMapping, 
+    which is used in deepclone operations to map
+    Object IDs from the original objects to their clones.
+  
+    \sa
+    TD_Db
+    
+    \remarks
+    Key is the Object ID of the original object.  
+    Value is the Object ID of the cloned object.  
+    
+    <group OdDb_Classes>
+*/
+class OdDbIdPair
+{
+public:
+  /** \param source [in]  OdDbIdPair to be copied.
+    \param key [in]  Object ID to use as key.
+    \param value [in]  Object ID to use as Value.
+    \param cloned [in]  Key object has been cloned.
+    \param ownerXlated [in]  Owner of key object has been translated.
+    \param primary [in]  Key object is primary.
+  */
+  OdDbIdPair()
+    : m_bCloned(false), m_bOwnerXlated(false), m_bPrimary(false) { }
+    
+  OdDbIdPair(
+    const OdDbIdPair& source)
+    : m_Key(source.key())
+    , m_Value(source.value())
+    , m_bCloned(source.isCloned())
+    , m_bOwnerXlated(source.isOwnerXlated())
+    , m_bPrimary(source.isPrimary()){ }
+
+  OdDbIdPair(
+    const OdDbObjectId& key)
+    : m_Key(key)
+    , m_bCloned(false)
+    , m_bOwnerXlated(false)
+    , m_bPrimary(false){ }
+    
+  OdDbIdPair(
+    const OdDbObjectId& key, 
+    const OdDbObjectId& value, 
+    bool cloned = false,
+    bool ownerXlated = true,
+    bool primary = false)
+    : m_Key(key)
+    , m_Value(value)
+    , m_bCloned(cloned)
+    , m_bOwnerXlated(ownerXlated)
+    , m_bPrimary(primary) { }
+
+  
+  /** \details
+    Returns the key for this IdPair object.
+  */
+  OdDbObjectId key() const { return m_Key; } 
+
+  /** \details
+    Returns the value for this IdPair object.
+  */
+  OdDbObjectId value() const { return m_Value; }
+
+  /** \details
+    Returns true if and only if the key object for this IdPair object has been cloned.
+  */
+  inline bool isCloned() const { return m_bCloned; }
+  
+  /** \details
+    Returns true if the key object for this IdPair is primary.
+  */
+  inline bool isPrimary() const { return m_bPrimary; }
+  
+  /** \details
+    Returns true if and only if the owner of the key object for this IdPair object has been translated.
+  */
+  inline bool isOwnerXlated() const { return m_bOwnerXlated; }
+  
+  /** \details
+    Sets the parameters for this IdPair object according to the arguments.
+
+    \param key [in]  Object ID to use as key.
+    \param value [in]  Object ID to use as Value.
+    \param cloned [in]  Key object has been cloned.
+    \param ownerXlated [in]  Owner of key object has been translated.    
+  */
+  OdDbIdPair& set(
+    const OdDbObjectId& key, 
+    const OdDbObjectId& value,
+    bool cloned = false,
+    bool ownerXlated = true,
+    bool primary = false)
+  {
+    setKey(key);
+    setValue(value);
+    setCloned(cloned);
+    setOwnerXlated(ownerXlated);
+    return *this;
+  }
+
+    
+  /** \details
+    Sets the key for this IdPair object.
+
+    \param key [in]  Object ID to use as key.
+  */
+  void setKey(
+    const OdDbObjectId& key) { m_Key = key; }
+    
+  /** \details
+    Sets the value for this IdPair object.
+
+    \param value [in]  Object ID to use as Value.
+  */
+  void setValue(
+    const OdDbObjectId& value) { m_Value = value; }
+    
+  /** \details
+    Controls the cloned setting for this IdPair object.
+
+    \param cloned [in]  Key object has been cloned.
+  */
+  void setCloned(
+    bool cloned) { m_bCloned = cloned; }
+
+  /** \details
+    Controls the primary setting for this IdPair object.
+
+    \param cloned [in]  Key object is primary.
+  */
+    void setPrimary(bool primary) { m_bPrimary = primary; }
+
+  /** \details
+    Controls the owner translated setting for this IdPair object.
+
+    \param ownerXlated [in]  Owner of key object has been translated.    
+  */
+  void setOwnerXlated(
+    bool ownerXlated) { m_bOwnerXlated = ownerXlated; }
+  
+private:
+  OdDbObjectId m_Key;
+  OdDbObjectId m_Value;
+  bool m_bCloned;
+  bool m_bOwnerXlated;
+  bool m_bPrimary;
+};
+
+class OdDbIdMappingIter;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbIdMappingIter object pointers.
+*/
+typedef OdSmartPtr<OdDbIdMappingIter> OdDbIdMappingIterPtr;
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum DeepCloneType
+  {
+    kDcCopy           = 0,    // Copy, Array, Mirror
+    kDcExplode        = 1,    // Explode
+    kDcBlock          = 2,    // Block definition
+    kDcXrefBind       = 3,    // Xref Bind
+    kDcSymTableMerge  = 4,    // Xref Attach, DxfIn, IgesIn
+    kDcInsert         = 6,    // Insert of a .dwg file
+    kDcWblock         = 7,    // Wblock
+    kDcObjects        = 8,    // OdDbDatabase::deepCloneObjects()
+    kDcXrefInsert     = 9,    // Xref Insert, Xref BInd
+    kDcInsertCopy     = 10,   // Insert() 
+    kDcWblkObjects    = 11    // Wblock objects
+  };
+}
+
+/** \details
+    This class is used in deepclone operations to map, using OdDbIdPair objects,
+    Object IDs from the original objects to their clones.
+    
+    \sa
+    TD_Db
+    
+    \remarks
+    There is no mechanism to clear all the mappings in an OdDbIdMapping instance; a new
+    instance must be created for each deepclone operation.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbIdMapping : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbIdMapping);
+
+  OdDbIdMapping() {}
+  
+  static OdDbIdMappingPtr createObject(OdDb::DeepCloneType);
+  
+  /** \details
+    Adds the specified IdPair object to this IdMapping object.
+    
+    \param idPair [in]  IdPair to add.
+  */
+  virtual void assign(
+    const OdDbIdPair& idPair) = 0;
+
+  /** \details
+    Returns the value of the IdPair in this IdMapping object
+    that matches the key in the specified IdPair object.
+    
+    \param idPair [in/out] Supplies the key and receives the value.
+    
+    \remarks
+    Returns true if and only if the key is found. 
+  */
+  virtual bool compute(
+    OdDbIdPair& idPair) const = 0;
+  /** \details
+    Deletes the IdPair with the specified key from this IdMapping object.
+    
+    \param key [in]  Object ID key to delete.
+  */
+  virtual bool del(
+    const OdDbObjectId& key) = 0;
+
+  /** \details
+    Creates an Iterator object that provides access to the IdPair objects in this IdMapping object.
+  */
+   virtual OdDbIdMappingIterPtr newIterator() = 0;
+  
+  /** \details
+    Returns the destination database for the deepclone operation using this IdMapping object. 
+  */
+  virtual OdDbDatabase* destDb() const = 0;
+  
+  /** \details
+    Sets the destination database for the deepclone operation using this IdMapping object.
+    
+    \param pDb [in]  Pointer to the destination database. 
+  */
+  virtual void setDestDb(
+    OdDbDatabase* pDb) = 0;
+
+  /** \details
+    Returns the source database for the deepclone operation using this IdMapping object. 
+  */
+  virtual OdDbDatabase* origDb() const = 0;
+  
+  /** \details
+    Notification function called whenever the Xref Block ID is about to be inserted
+    into the destination database.
+    
+    Returns the ObjectID of the Xref Block.
+  */
+  virtual OdDbObjectId insertingXrefBlockId() const = 0;
+  
+  /** \details
+    Returns the type of deepclone operation using this IdMapping object.
+    
+    \remarks
+    deepCloneContext() returns one of the of the following:
+    
+    <table>
+    Name                Value   Description
+    kDcCopy             0       Copy Array Mirror
+    kDcExplode          1       Explode
+    kDcBlock            2       Block definition
+    kDcXrefBind         3       Xref Bind
+    kDcSymTableMerge    4       Xref Attach DxfIn IgesIn
+    kDcInsert           6       Insert of a .dwg file
+    kDcWblock           7       Wblock
+    kDcObjects          8       OdDbDatabase::deepCloneObjects()
+    kDcXrefInsert       9       Xref Insert Xref BInd
+    kDcInsertCopy       10      Insert() 
+    kDcWblkObjects      11      Wblock objects
+    </table>
+    
+  */
+  virtual OdDb::DeepCloneType deepCloneContext() const = 0;
+  
+  /** \details
+    Returns the type of duplicate record cloning for IdMapping object.
+    
+    \remarks
+    duplicateRecordCloning() returns one of the of the following:
+    
+    <table>
+    Name                  Value   Description
+    kDrcNotApplicable     0       Not applicable to the object.
+    kDrcIgnore            1       If a duplicate record exists, use the existing record in the database, and ignore the clone.
+    kDrcReplace           2       If a duplicate record exists, replace it with the cloned record.
+    kDrcXrefMangleName    3       Incoming record names are mangled with <Xref>$0$<name>
+    kDrcMangleName        4       Incoming record names are mangled with $0$<name>
+    kDrcUnmangleName      5       Unmangle the names mangled by kDrcMangleName, then default to kDrcIgnore. Typically used by RefEdit when checking records into the original database.  
+    </table>
+
+  */
+  virtual OdDb::DuplicateRecordCloning duplicateRecordCloning() const = 0;
+};
+
+/** \details
+    This class defines Iterator objects that 
+    traverse OdDbIdPair records in OdDbIdMapping instances.
+
+    \sa
+    TD_Db
+  
+    \remarks
+    Instances are returned by OdDbIdMapping::newIterator().
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbIdMappingIter : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbIdMappingIter);
+
+  OdDbIdMappingIter() {}
+  
+  /** \details
+    Sets this Iterator object to reference the OdIdPair that it would normally return first.
+     
+    \remarks
+    Allows multiple traversals of the Iterator list.
+  */
+    virtual void start() = 0;
+  
+  /** \details
+    Returns the IdPair pointed to by this Iterator Object.
+    
+    \param idPair [out]  IdPair.
+  */
+   virtual void getMap(
+    OdDbIdPair& idPair) = 0;
+
+  /** \details
+    Increments this Iterator object.
+  */
+  virtual void next() = 0;
+  
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() = 0;
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // __ODDBIDMAPPING_INCLUDED__
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbImage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbImage.h
new file mode 100755
index 0000000..0604d03
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbImage.h
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBIMAGE_H
+#define OD_DBIMAGE_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+class OdGiSentScanLines;
+class OdGiRequestScanLines;
+
+/** \details
+    This class is the abstract base class for image entities 
+    contained in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbImage : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbImage);
+
+  OdDbImage();
+
+  /* 
+    virtual OdGiSentScanLines* getScanLines(const OdGiRequestScanLines&) const;
+    virtual bool freeScanLines(OdGiSentScanLines*) const;    
+    virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+    virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+    virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+    virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  */
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbImage object pointers.
+*/
+typedef OdSmartPtr<OdDbImage> OdDbImagePtr;
+
+#include "TD_PackPop.h"
+
+#endif  // OD_DBIMAGE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIndex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIndex.h
new file mode 100755
index 0000000..20df0f8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbIndex.h
@@ -0,0 +1,523 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBINDEX_H
+#define OD_DBINDEX_H
+
+#include "TD_PackPush.h"
+
+class OdDbDate;
+class OdDbIndexIterator; 
+class OdDbFilter;
+class OdDbIndexUpdateData;
+class OdDbBlockChangeIterator;
+class OdDbFilter;
+class OdDbBlockTableRecord;
+class OdDbBlockChangeIterator;
+class OdDbIndexUpdateData;
+class OdDbBlockChangeIteratorImpl;
+class OdDbIndexUpdateDataImpl;
+class OdDbIndexUpdateDataIteratorImpl;
+class OdDbFilteredBlockIterator;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbFilteredBlockIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbFilteredBlockIterator> OdDbFilteredBlockIteratorPtr;
+
+#include "DbFilter.h"
+
+extern void processBTRIndexObjects(
+  OdDbBlockTableRecord* pBlock, 
+  int indexCtlVal,
+  OdDbBlockChangeIterator* pBlkChgIter,
+  OdDbIndexUpdateData* pIdxUpdData);
+
+
+/** \details
+    This class iterates through changed entities in an OdDbBlockTableRecord instance.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlockChangeIterator
+{
+private:
+  friend class OdDbBlockChangeIteratorImpl;
+  OdDbBlockChangeIteratorImpl* m_pImpl;
+  OdDbBlockChangeIterator() : m_pImpl(0) {}
+  OdDbBlockChangeIterator(
+    const OdDbBlockChangeIterator&);
+public:
+
+  /** \details
+    Sets this Iterator object to reference the entity that it would normally return first.
+     
+    \remarks
+    Allows multiple traversals of the iterator list.
+  */
+    void start();
+
+  /** \details
+    Returns the Object ID of the entity currently referenced by this Iterator object.
+  */
+    OdDbObjectId id() const;
+  
+  /** \details
+    Sets this Iterator object to reference the entity following the current entity.
+  */
+    void next();
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    bool done(); 
+  
+  /** \details
+    Returns the Object ID of the entity currently referenced by this Iterator object, 
+    and the flags and data associated with it.
+    
+    \param currentId [out]  Receives the current Object ID.
+    \param flags [out]  Receives the 8-bit flags.
+    \param data [out]  Receives the 32-bit data
+  */
+    void curIdInfo(
+    OdDbObjectId& currentId, 
+    OdUInt8& flags, 
+    OdUInt32& data) const;
+    
+  /** \details
+    Sets the flags and data associated with the object currently referenced by this Iterator object.
+    
+    \param flags [in]  Current object 8-bit flags.
+    \param data [in]  Current object 32-bit data
+  */
+    void setCurIdInfo(
+    OdUInt8 flags, 
+    OdUInt32 data);
+  
+  /** \details
+    Returns the OdDbIndexUpdateData object associating Object IDs to data and flags. 
+  */
+  OdDbIndexUpdateData* updateData() const;
+  
+  /** \details
+    Clears the processed bit (0x04) of the flags of entities being traversed.
+  */
+  void clearProcessedFlags();
+};
+
+/** \details
+    This class associates Index specific flags and data with an OdDbObjectId. 
+    
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbIndexUpdateData 
+{
+  friend class OdDbIndexUpdateDataImpl;
+  OdDbIndexUpdateDataImpl* m_pImpl;
+  OdDbIndexUpdateData() : m_pImpl(0) {}
+  OdDbIndexUpdateData(
+    const OdDbIndexUpdateData&);
+public:
+  enum UpdateFlags 
+  { 
+    kModified   = 1, // Modified RO
+    kDeleted    = 2, // Deleted RO
+    kProcessed  = 4, // Processed RW
+    kUnknownKey = 8  // Unknown key
+  };
+  /** \details
+    Returns the Object ID of the OdDbBlockTableRecord instance that owns this OdDbIndexUpdateData object.
+  */
+  OdDbObjectId objectBeingIndexedId() const;
+
+  
+  /** \details
+    Adds the specified Object ID to this OdDbIndexUpdateData object.
+
+    \param Object ID [in] Object ID to be added.
+  */
+  void addId(
+    OdDbObjectId objectId);
+  
+  /** \details
+    Sets the flags associated with the specified Object ID in this OdDbIndexUpdateData object.
+    
+    \param objectID [in]  Object ID.
+    \param flags [in]  8-bit flags.
+    
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool setIdFlags(
+    OdDbObjectId objectId, 
+    OdUInt8 flags);
+
+  /** \details
+    Sets the data associated with the specified Object ID in this OdDbIndexUpdateData object.
+    
+    \param objectID [in]  Object ID.
+    \param data [in]  32-bit data.
+    
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool setIdData(
+    OdDbObjectId objectId, 
+    OdUInt32 data);
+
+  /** \details
+    Returns the data associated with the specified Object ID in this OdDbIndexUpdateData object.
+    
+    \param objectID [in]  Object ID.
+    \param data [out]  32-bit data.
+    
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool getIdData(
+    OdDbObjectId objectId, 
+    OdUInt32& data) const;
+
+  /** \details
+    Returns the flags associated with the specified Object ID in this OdDbIndexUpdateData object.
+    
+    \param objectID [in]  Object ID.
+    \param flags [out]  Receives the 8-bit flags.
+    
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool getIdFlags(
+    OdDbObjectId objectId, 
+    OdUInt8& flags) const; 
+
+  /** \details
+    Returns the flags and data associated with the specified Object ID in this OdDbIndexUpdateData object.
+    
+    \param objectID [in]  Object ID.
+    \param flags [out]  Receives the 8-bit flags.
+    \param data [out]  Receives the 32-bit data.
+    
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool getFlagsAndData(
+    OdDbObjectId objectId, 
+    OdUInt8& flags, 
+    OdUInt32& data) const;
+};
+
+/** \details
+    This class iterates through OdDbIndexUpdateData instances.    
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbIndexUpdateDataIterator
+{
+  friend class OdDbIndexUpdateDataIteratorImpl;
+  OdDbIndexUpdateDataIteratorImpl* m_pImpl;
+public:
+  OdDbIndexUpdateDataIterator(
+    const OdDbIndexUpdateData* pIndexUpdateData);
+  
+  /** \details
+    Sets this Iterator object to reference the entity that it would normally return first.
+     
+    \remarks
+    Allows multiple traversals of the iterator list.
+  */
+    void start();
+
+  /** \details
+    Returns the Object ID of the entity currently referenced by this Iterator object.
+  */
+    OdDbObjectId id() const;
+  
+ /** \details
+    Sets this Iterator object to reference the entity following the current entity.
+ */
+    void next();
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    bool done(); 
+  
+  /** \details
+    Returns the Object ID of the entity currently referenced by this Iterator object, 
+    and the flags and data associated with it.
+    
+    \param currentId [out]  Receives the current Object ID.
+    \param flags [out]  Receives the 8-bit flags.
+    \param data [out]  Receives the 32-bit data
+  */
+    void currentData(
+    OdDbObjectId& currentId, 
+    OdUInt8& flags, 
+    OdUInt32& data) const;
+};
+
+
+/** \details
+    The class is the base class for all OdDb Index objects.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbIndex : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbIndex);
+
+  OdDbIndex();
+  
+  
+  /** \details
+    Creates an Iterator object that provides access to the entities in this Index object.
+    
+    \param pFilter [in]  Pointer to the filter to be applied to this Index object.
+  */
+   virtual OdDbFilteredBlockIteratorPtr newIterator(
+    const OdDbFilter* pFilter) const;
+ 
+  /** \details
+    Fully rebuilds this Index object from the entities in the block table record object.
+    \param pIdxData [in]  Pointer to the OdDbIndexUpdateData object to be used in the rebuild. 
+  */
+   virtual void rebuildFull(
+    OdDbIndexUpdateData* pIdxData);
+  
+  /** \details
+    Sets the Julian lastUpdatedAt timestamp for this Index object.
+    
+    \param time [in]  Julian date.
+  */
+  void setLastUpdatedAt(
+    const OdDbDate& time);
+    
+  /** \details
+    Returns the Julian lastUpdatedAt timestamp for this Index object.
+  */
+  OdDbDate lastUpdatedAt() const;
+  
+  /** \details
+    Sets the UT lastUpdatedAt timestamp for this Index object.
+    
+    \param time [in]  UT date.
+  */
+  void setLastUpdatedAtU(
+    const OdDbDate& time);
+    
+  /** \details
+    Returns the UT lastUpdatedAt timestamp for this Index object.
+  */
+  OdDbDate lastUpdatedAtU() const;
+  
+  /** \details
+    Returns true if and only if this Index object is up to date.
+  */
+  bool isUptoDate() const; 
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+protected:
+ 
+  /** \details
+    Called by OdDbIndexFilterManager::updateIndexes() when only modifications are being registered. 
+
+    \param iterator [in]  Iterator of modified entities.
+    
+    \remarks
+    Modified entities includes added, deleted, and changed entities.
+    
+    \note
+    This class must be implemented in custom classes derived from OdDbIndex. A full rebuild may be performed if desired.
+  */
+ virtual void rebuildModified(
+    OdDbBlockChangeIterator* iterator);
+  
+  friend class OdDbIndexImpl;
+  friend void processBTRIndexObjects(
+    OdDbBlockTableRecord* pBTR, 
+    int indexCtlVal, 
+    OdDbBlockChangeIterator* pBlkChgIter, 
+    OdDbIndexUpdateData* pIdxUpdData );
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbIndex object pointers.
+*/
+typedef OdSmartPtr<OdDbIndex> OdDbIndexPtr;
+
+class OdDbBlockTableRecord;
+class OdDbBlockReference;
+
+/** \details
+    This namespace provides functions pertaining to indices and filters.
+    
+    \sa
+    TD_Db
+    
+    <group TD_Namespaces>
+*/
+namespace OdDbIndexFilterManager
+{
+  /** \details
+    Updates all Index objects associated with all block table record objects in the specified
+    OdDbDatabase object.
+    
+    \param pDb [in]  Pointer to the database object.
+  */
+  TOOLKIT_EXPORT void updateIndexes(
+    OdDbDatabase* pDb);
+  
+  /** \details
+    Adds the specified Index object to the specified block table record object.
+    
+    \param pBTR [in]  Pointer to the block table record object.
+    \param pIndex [in]  Pointer to the Index object.
+    
+    \remarks
+    An index of the same OdRxClass as the specified index will be deleted.
+  */
+  TOOLKIT_EXPORT void addIndex(
+    OdDbBlockTableRecord* pBTR, 
+    OdDbIndex* pIndex);
+  
+  /** \details
+    Removes the specified Index object from the specified block table record object.
+    
+    \param pBTR [in]  Pointer to the Block Table Record.
+    \param key [in]  Class descriptor to specify the index.
+  */
+  TOOLKIT_EXPORT void removeIndex(
+    OdDbBlockTableRecord* pBTR, 
+    const OdRxClass* key);
+
+  
+  /** \details
+    Returns the specified Index object.
+    
+    \param pBTR [in]  Pointer to the block table record object.
+    \param key [in]  Class descriptor to specify the index object.
+    \param readOrWrite [in]  Mode in which to open the index object.
+  */
+  TOOLKIT_EXPORT OdDbIndexPtr getIndex(
+    const OdDbBlockTableRecord* pBTR, 
+    const OdRxClass* key, 
+    OdDb::OpenMode readOrWrite = OdDb::kForRead);
+
+  /** \param btrIndex [in]  Position of the Index object within the block table record object.
+  */
+    TOOLKIT_EXPORT OdDbIndexPtr getIndex(
+    const OdDbBlockTableRecord* pBTR, 
+    int btrIndex, 
+    OdDb::OpenMode readOrWrite = OdDb::kForRead);
+  
+  /** \details
+    Returns the number of indices associated with the block table record object.
+    
+    \param pBTR [in]  Pointer to the block table record object.
+  */
+  TOOLKIT_EXPORT int numIndexes(
+    const OdDbBlockTableRecord* pBTR);
+  
+  /** \details
+    Adds the specified Filter object to the specified block reference entity.
+    
+    \param pBlkRef [in]  Pointer to the block reference entity.
+    \param pFilter [in]  Pointer to the Filter object.
+    
+    \remarks
+    An filter of the same OdRxClass as the specified filter will be deleted.
+  */
+  TOOLKIT_EXPORT void addFilter(
+    OdDbBlockReference* pBlkRef, 
+    OdDbFilter* pFilter);
+  
+  /** \details
+    Removes the specified Filter object from the specified block reference entity.
+    
+    \param pBlkRef [in]  Pointer to the block reference entity.
+    \param key [in]  Class descriptor to specify the filter.
+  */
+  TOOLKIT_EXPORT void removeFilter(
+    OdDbBlockReference* pBlkRef, 
+    const OdRxClass* key);
+  
+  /** \details
+    Returns the specified Filter object.
+    
+    \param pBlkRef [in]  Pointer to the block reference entity.
+    \param key [in]  Class descriptor to specify the filter object.
+    \param readOrWrite [in]  Mode in which to open the filter object.
+  */
+  TOOLKIT_EXPORT OdDbFilterPtr getFilter(
+    const OdDbBlockReference* pBlkRef, 
+    const OdRxClass* key, 
+    OdDb::OpenMode readOrWrite);
+  
+  /** \param btrIndex [in]  Position of the Index object within the block table record object.
+  */
+    TOOLKIT_EXPORT OdDbFilterPtr getFilter(
+    const OdDbBlockReference* pBlkRef, 
+    int btrIndex, 
+    OdDb::OpenMode readOrWrite);
+  
+  /** \details
+    Returns the number of indices associated with the block reference entity.
+    
+    \param pBlkRef [in]  Pointer to the block reference entity.
+  */
+  TOOLKIT_EXPORT int numFilters(
+    const OdDbBlockReference* pBlkRef);
+}
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBINDEX_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbJoinEntityPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbJoinEntityPE.h
new file mode 100755
index 0000000..e3685b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbJoinEntityPE.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBJOINENTITYPE_H
+#define OD_DBJOINENTITYPE_H
+
+#include "DbEntity.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  This abstract class declares the base JOIN functionality for entities that allows searching 
+  intersections between them and uniting them in a single curve using the protocol extension mechanism.
+
+  Library: TD_Db    
+  <group Join_Classes>
+*/
+class TOOLKIT_EXPORT OdDbJoinEntityPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbJoinEntityPE);
+
+  /** \details
+    This pure virtual method that must be implemented in derived class to provide the 
+    join operation between entities. Returns eOk if the join is successful, otherwise, eInvalidInput.
+    
+    \param primaryEntity [in]  Smart pointer to the primary entity that should be updated using 
+                      parameters of other entities joined to it, when it is possible. 
+    \param otherEntities [in] Array of smart pointers to other entities that are joined to the primary entity.
+    \param joinedEntityIndices [out] Reference to an array of entity indices from the array of other entities 
+                            (second argument) that were joined successfully. 
+  */
+  virtual OdResult joinEntities(OdDbEntityPtr primaryEntity, const OdDbEntityPtrArray& otherEntities, OdGeIntArray& joinedEntityIndices) const = 0;
+
+  /** \details
+    This virtual method that must be implemented in derived class to provide the join operation of 
+    two supported entities. Returns eOk if the join is successful, otherwise, eInvalidInput.
+    Some implementations can require the same type for primary and secondary entities.
+    
+    \param primaryEntity [in]  Smart pointer to the primary entity that should be updated using 
+                      parameters of the secondary entity joined to it, when it is possible. 
+    \param secondaryEntity [in] Smart pointer to the secondary entity that represents own parameters 
+                        for the primary entity joined to it.
+  */
+  virtual OdResult joinEntity(OdDbEntityPtr primaryEntity, OdDbEntityPtr secondaryEntity) const;
+};
+
+/** \details
+  The typified smart pointer for join operation of entities. This  
+  template class is specialization of the OdSmartPtr class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbJoinEntityPE> OdDbJoinEntityPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBJOINENTITYPE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerFilter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerFilter.h
new file mode 100755
index 0000000..b3fcbae
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerFilter.h
@@ -0,0 +1,120 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBLYFILT_H
+#define OD_DBLYFILT_H
+
+#include "TD_PackPush.h"
+
+#include "DbFilter.h"
+
+/** \details
+    This class implements LayerFilter objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+    
+    \remarks
+    A LayerFilter is a set of layers whose corresponding entities are  
+    traversed during filtered block traversal. 
+    
+    LayerFilter objects objects may optionally be saved in the drawing database 
+    for efficient Xref demand loading.
+*/
+class TOOLKIT_EXPORT OdDbLayerFilter : public  OdDbFilter
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLayerFilter);
+
+  OdDbLayerFilter();
+
+  virtual OdRxClass* indexClass() const;
+
+  /** \details
+    Returns true if and only if all the layer names in this LayerFilter object
+    are present in the specified OdDbDatabase.
+    
+    \param pDb [in]  Pointer to the database to be queried.
+      
+    \remarks
+    If pDb is null, the database containing this object is used.
+  */
+  virtual bool isValid(
+    OdDbDatabase* pDb = 0) const;
+
+  /** \details
+    Adds the specified layer name to this LayerFilter object.
+    
+    \param layerName [in]  Layer name to be added. 
+  */
+  void add(
+    const OdString& layerName);
+
+  /** \details
+    Removes the specified layer name from this LayerFilter object. 
+
+    \param layerName [in]  Layer name to be removed. 
+  */
+  void remove(
+    const OdString& layerName);
+
+  /** \details
+    Returns the layer name associated with the specified index in this LayerFilter object.
+    
+    \param layerIndex [in]  Index to be queried. 
+  */
+  OdString getAt(
+    int layerIndex) const;
+
+  /** \details
+    Returns the number of layers stored in this LayerFilter object. 
+  */
+  int layerCount() const;
+
+  OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLayerFilter object pointers.
+*/
+typedef OdSmartPtr<OdDbLayerFilter> OdDbLayerFilterPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBLYFILT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerIndex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerIndex.h
new file mode 100755
index 0000000..94b5234
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerIndex.h
@@ -0,0 +1,85 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBLYINDX_H
+#define OD_DBLYINDX_H
+
+#include "TD_PackPush.h"
+
+#include "DbIndex.h"
+
+class OdDbLayerTable;
+
+/** \details
+    This class implements Layer Index objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLayerIndex: public OdDbIndex
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLayerIndex);
+
+  OdDbLayerIndex();
+
+  OdDbFilteredBlockIteratorPtr newIterator(
+    const OdDbFilter* pFilter) const;
+  
+  virtual void rebuildFull(
+    OdDbIndexUpdateData* pIdxData);
+  
+  //void compute(OdDbLayerTable* pLT, OdDbBlockTableRecord* pBTR);
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+protected:
+  virtual void rebuildModified(
+    OdDbBlockChangeIterator* iterator);
+};
+
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLayerIndex object pointers.
+*/
+typedef OdSmartPtr<OdDbLayerIndex> OdDbLayerIndexPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBLYINDX_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerState.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerState.h
new file mode 100755
index 0000000..3c743fb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerState.h
@@ -0,0 +1,460 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef DBLAYERSTATEMANAGER_H
+#define DBLAYERSTATEMANAGER_H
+
+#include "TD_PackPush.h"
+#include "StringArray.h"
+
+/** \details
+  This class implements an interface for manipulating LayerStates in multiple OdDbDatabase instances.
+  
+  Library: TD_Db
+  <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbLayerState
+{
+public:
+  enum Mask
+  {
+    kDefMask          = (long)0xFFFFFFFF,
+    kNone             = 0x0000,
+    kOn               = 0x0001,
+    kFrozen           = 0x0002,
+    kLocked           = 0x0004,
+    kPlot             = 0x0008,
+    kNewViewport      = 0x0010,
+    kColor            = 0x0020,
+    kLineType         = 0x0040,
+    kLineWeight       = 0x0080,
+    kPlotStyle        = 0x0100,
+    kCurrentViewport  = 0x0200,
+    kTransparency     = 0x0400,
+
+    kAll              = kOn | kFrozen | kLocked | kPlot | kNewViewport |
+                        kColor | kLineType | kLineWeight | kPlotStyle |
+                        kCurrentViewport | kTransparency,
+
+    kHidden           = 0x8000        
+  };
+  
+  enum
+  {
+    kUndefDoNothing     = 0x00,
+    kUndefTurnOff       = 0x01,
+    kUndefFreeze        = 0x02,
+    kRestoreAsOverrides = 0x04
+  };
+
+  /** \details
+    Returns the Object ID of the LayerStates dictionary for the specified database.
+    \param pDb [in]  Pointer to the database.
+    \param createIfNotFound [in]  Controls the creation of the dictionary if it does not exist.
+  */
+  static OdDbObjectId dictionaryId(OdDbDatabase *pDb, bool createIfNotFound = false);
+  
+  /** \details
+    Returns true if and only if the specified database
+    has a LayerState with the specified name.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+  */
+  static bool has(OdDbDatabase *pDb, const OdString &layerStateName);
+  
+  /** \details
+    Saves the current LayerState of the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    \param layerStateMask [in]  LayerState mask.
+    \param viewportId [in]  Viewport whose LayerState is to be saved.
+    
+    \remarks
+    layerStateMask determines which layer attributes are to be stored in the LayerState.  
+    layerStateMask must be a combination of one or more of the following:
+    
+    <table>
+    Name                   Value        
+    kNone                  0x0000       
+    kOn                    0x0001       
+    kFrozen                0x0002       
+    kLocked                0x0004       
+    kPlot                  0x0008       
+    kNewViewport           0x0010       
+    kColor                 0x0020       
+    kLineType              0x0040       
+    kLineWeight            0x0080       
+    kPlotStyle             0x0100        
+    kCurrentViewport       0x0200     
+    kTransparency          0x0400
+    kAll                   kOn | kFrozen | kLocked | kPlot | kNewViewport |
+                           kColor | kLineType | kLineWeight | kPlotStyle |
+                           kCurrentViewport | kTransparency       
+    kHidden                0x8000        
+    </table>
+    
+  */
+  static void save(OdDbDatabase *pDb, const OdString &layerStateName, int layerStateMask, const OdDbObjectId &viewportId = OdDbObjectId::kNull);
+
+  /** \details
+    Restores the specified LayerState of the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    \param layerStateMask [in]  LayerState mask.
+    \param viewportId [in]  Viewport whose LayerState is to be saved.
+    \param undefAction [in]  Action for undefined layers.
+    
+    \remarks
+    undefAction specified the action for layers not defined in the LayerState.
+    undefAction must be one of the following:
+    
+    <table>
+    Name               Value  
+    kUndefDoNothing    0      
+    kUndefTurnOff      1        
+    kUndefFreeze       2
+    </table>
+    
+    layerStateMask determines which layer attributes are to be restored from the LayerState.  
+    layerStateMask must be a combination of one or more of the following:
+    
+    <table>
+    Name                   Value        
+    kDefMask               0xFFFFFFFF   
+    kNone                  0x0000       
+    kOn                    0x0001       
+    kFrozen                0x0002       
+    kLocked                0x0004       
+    kPlot                  0x0008       
+    kNewViewport           0x0010       
+    kColor                 0x0020       
+    kLineType              0x0040       
+    kLineWeight            0x0080       
+    kPlotStyle             0x0100        
+    kCurrentViewport       0x0200        
+    kTransparency          0x0400
+    kAll                   kOn | kFrozen | kLocked | kPlot | kNewViewport |
+                           kColor | kLineType | kLineWeight | kPlotStyle |
+                           kCurrentViewport | kTransparency       
+    kHidden                0x8000        
+    </table>
+    
+  */
+  static void restore(OdDbDatabase *pDb, const OdString &layerStateName,
+    int flags = kUndefDoNothing, const int layerStateMask = kDefMask, const OdDbObjectId& viewportId = OdDbObjectId::kNull);
+  /** \details
+    Sets the LayerState mask for the specified LayerState in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    \param layerStateMask [in]  LayerState mask.
+    
+    \remarks
+    layerStateMask determines which layer attributes are to be restored from the LayerState.  
+    layerStateMask must be a combination of one or more of the following:
+    
+    <table>
+    Name                   Value        
+    kNone                  0x0000       
+    kOn                    0x0001       
+    kFrozen                0x0002       
+    kLocked                0x0004       
+    kPlot                  0x0008       
+    kNewViewport           0x0010       
+    kColor                 0x0020       
+    kLineType              0x0040       
+    kLineWeight            0x0080       
+    kPlotStyle             0x0100        
+    kCurrentViewport       0x0200        
+    kTransparency          0x0400
+    kAll                   kOn | kFrozen | kLocked | kPlot | kNewViewport |
+                           kColor | kLineType | kLineWeight | kPlotStyle |
+                           kCurrentViewport | kTransparency       
+    kHidden                0x8000        
+    </table>
+    
+  */
+  static void setMask(OdDbDatabase *pDb, const OdString &layerStateName, int layerStateMask);
+  
+  /** \details
+    Returns the LayerState mask for the specified LayerState in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    
+    \remarks
+    The layer state mask determines which layer attributes are to be restored from the LayerState.  
+
+    mask() returns a combination of one or more of the following:
+    
+    <table>
+    Name                   Value        
+    kNone                  0x0000       
+    kOn                    0x0001       
+    kFrozen                0x0002       
+    kLocked                0x0004       
+    kPlot                  0x0008       
+    kNewViewport           0x0010       
+    kColor                 0x0020       
+    kLineType              0x0040       
+    kLineWeight            0x0080       
+    kPlotStyle             0x0100        
+    kCurrentViewport       0x0200        
+    kTransparency          0x0400
+    kAll                   kOn | kFrozen | kLocked | kPlot | kNewViewport |
+                           kColor | kLineType | kLineWeight | kPlotStyle |
+                           kCurrentViewport | kTransparency       
+    kHidden                0x8000        
+    </table>
+    
+  */
+  static int  mask(OdDbDatabase *pDb, const OdString &layerStateName);
+
+  /** \details
+    Removes the specified LayerState from the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+  */
+  static void remove(OdDbDatabase *pDb, const OdString &layerStateName);
+ 
+  /** \details
+    Renames the specified LayerState in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param oldName [in]  Old name.
+    \param newName [in]  New name.
+  */
+  static void rename(OdDbDatabase *pDb, const OdString &oldName, const OdString &newName);
+
+  enum ImportResult
+  {
+    kImported,
+    kAlreadyExists
+  };
+
+  /** \details
+    Imports the LayerState from the specified file to the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.    
+    \param pName [out]  Optional pointer to the string where imported layer state name will be stored.
+
+    Returns one of the following:
+
+    <table>
+    Name               Value  
+    kImported          0      
+    kAlreadyExists     1        
+    </table>
+  */
+  static ImportResult importData(OdDbDatabase *pDb, OdStreamBuf* pStreamBuf, OdString* pName = 0);
+
+  /** \details
+    Exports the LayerState from the specified database to the specified file.
+
+    \param pDb [in]  Pointer to the database.
+    \param pStreamBuf [in]  Pointer to the StreamBuf object to which the data are to be written.
+    \param layerStateName [in]  LayerState name.
+  */
+  static void exportData(OdDbDatabase *pDb, const OdString &layerStateName, OdStreamBuf* pStreamBuf);
+  
+  /** \details
+    Sets the description of the specified LayerState in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    \param description [in]  Description.
+  */
+      static void setDescription(OdDbDatabase *pDb, const OdString &layerStateName, const OdString &description);
+  /** \details
+    Returns the description of the specified LayerState in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+  */
+      static OdString description(OdDbDatabase *pDb, const OdString &layerStateName);
+
+  /** \details
+    Returns true if and only if there is viewport data associated with specified LayerState in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+  */
+      static bool hasViewportData(OdDbDatabase *pDb, const OdString &layerStateName);
+
+  /** \details
+    Adds more layers to a layer state.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    \param layerIds [in]  Array of object Ids of layers to be added to the layer state 
+  */
+      static OdResult addLayerStateLayers(const OdString &sName, OdDbObjectIdArray layerIds);
+
+  /** \details
+    Removes layers from a layer state.
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    \param layerNames [in]  Array of names of layers to be removed from the layer state.
+  */
+      static OdResult removeLayerStateLayers(OdDbDatabase* pDb, const OdString sName, const OdStringArray& layerNames);
+
+  /** \details
+    Creates a layer state where specified layers are assigned one state (e.g. ON), 
+    and all the others are assigned other state (e.g. OFF).
+
+    \param pDb [in]  Pointer to the database.
+    \param layerStateName [in]  LayerState name.
+    \param layerIds [in]  Array of object Ids of layers to be added to the layer state 
+    \param mask [in]  created 
+  */
+  static OdResult saveGroup(OdDbDatabase *pDb, const OdString &sName,
+    const OdDbObjectIdArray& pLayers, int mask = kOn,
+    int includedLayersState = kOn, int otherLayersState = kNone);
+};
+
+class OdDbLayerStateManagerReactor;
+class OdDbLayerStateManagerImpl;
+
+/** \details
+  Library: TD_Db
+  <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbLayerStateManager: public OdRxObject
+{
+protected:
+  OdDbLayerStateManager(OdDbLayerStateManagerImpl*);
+public:
+  ODRX_DECLARE_MEMBERS(OdDbLayerStateManager);
+  OdDbLayerStateManager();
+  ~OdDbLayerStateManager();
+
+  enum LayerStateMask {
+    kNone           = 0x0000,
+    kOn             = 0x0001,
+    kFrozen         = 0x0002,
+    kLocked         = 0x0004,
+    kPlot           = 0x0008,
+    kNewViewport    = 0x0010,
+    kColor          = 0x0020,
+    kLineType       = 0x0040,
+    kLineWeight     = 0x0080,
+    kPlotStyle      = 0x0100,
+    kCurrentViewport = 0x0200,
+    kTransparency   = 0x0400,
+    kAll            = kOn | kFrozen | kLocked | kPlot | kNewViewport |
+    kColor | kLineType | kLineWeight | kPlotStyle |
+    kCurrentViewport | kTransparency,
+    kStateIsHidden  = 0x8000,        
+    kLastRestored   = 0x10000,        
+    kDecomposition  = kAll | 0x20000
+  };
+
+  enum {
+    kUndefDoNothing = 0,
+    kUndefTurnOff = 1,
+    kUndefFreeze = 2,
+    kRestoreAsOverrides = 4
+  };
+
+  bool                addReactor(OdDbLayerStateManagerReactor * pReactor);
+  bool                removeReactor(OdDbLayerStateManagerReactor * pReactor);
+
+  OdDbObjectId        layerStatesDictionaryId(bool bCreateIfNotPresent=false);
+  bool                hasLayerState(const OdString& sName);
+  OdResult   saveLayerState(const OdString& sName, LayerStateMask mask);
+  OdResult   restoreLayerState(const OdString& sName);
+  OdResult   setLayerStateMask(const OdString& sName, LayerStateMask mask);
+  OdResult   getLayerStateMask(const OdString& sName, LayerStateMask &returnMask);
+  OdResult   deleteLayerState(const OdString& sName);
+  OdResult   renameLayerState(const OdString& sName, const OdString& sNewName);
+  OdResult   importLayerState(OdStreamBuf* pStreamBuf);
+  OdResult   importLayerState(OdStreamBuf* pStreamBuf, OdString& sName);
+  OdResult   exportLayerState(const OdString& sNameToExport, OdStreamBuf* pStreamBuf);
+  OdResult   saveLayerState(const OdString& sName, LayerStateMask mask, const OdDbObjectId& idVp);
+  OdResult   restoreLayerState(const OdString& sName, const OdDbObjectId& idVp, int nRestoreFlags = 0, const LayerStateMask* pClientMask = NULL);
+  OdResult   setLayerStateDescription(const OdString& sName, const OdString& sDesc);
+  OdResult   getLayerStateDescription(const OdString& sName, OdString& sDesc);
+  bool       layerStateHasViewportData(const OdString&  sName);
+  OdResult   importLayerStateFromDb(const OdString& pStateName, OdDbDatabase* pDb);
+  OdResult   getLayerStateNames(OdStringArray& lsArray, bool bIncludeHidden = true, bool bIncludeXref = true);
+  OdResult   getLastRestoredLayerState(OdString& sName, OdDbObjectId &restoredLSId);
+  OdResult   getLayerStateLayers(OdStringArray& layerArray, const OdString& sName, bool bInvert = false);
+  bool       compareLayerStateToDb(const OdString& sName, const OdDbObjectId& idVp);
+  OdResult   addLayerStateLayers(const OdString& sName, const OdDbObjectIdArray& layerIds);
+  OdResult   removeLayerStateLayers(const OdString& sName, const OdStringArray& layerNames);
+  bool       isDependentLayerState(const OdString& sName);
+  OdDbDatabase* getDatabase() const;
+protected:
+  OdDbLayerStateManagerImpl* m_pImpl;
+  friend class OdDbLayerStateManagerImpl;
+  friend class OdDbDatabase;
+};
+
+
+/** \details
+  Library: TD_Db
+  <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbLayerStateManagerReactor : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbLayerStateManagerReactor);
+
+  virtual void layerStateCreated(const OdString& layerStateName,
+    const OdDbObjectId& layerStateId);
+  virtual void layerStateCompareFailed(const OdString& layerStateName,
+    const OdDbObjectId& layerStateId);
+
+  virtual void layerStateToBeRestored(const OdString& layerStateName,
+    const OdDbObjectId& layerStateId);
+  virtual void layerStateRestored(const OdString& layerStateName,
+    const OdDbObjectId& layerStateId);
+  virtual void abortLayerStateRestore(const OdString& layerStateName,
+    const OdDbObjectId& layerStateId);
+
+
+  virtual void layerStateToBeDeleted(const OdString& layerStateName,
+    const OdDbObjectId& layerStateId);
+  virtual void layerStateDeleted(const OdString& layerStateName);
+  virtual void abortLayerStateDelete(const OdString& layerStateName,
+    const OdDbObjectId& layerStateId);
+
+  virtual void layerStateToBeRenamed(const OdString& oldLayerStateName,
+    const OdString& newLayerStateName);
+  virtual void layerStateRenamed(const OdString& oldLayerStateName,
+    const OdString& newLayerStateName);
+  virtual void abortLayerStateRename(const OdString& oldLayerStateName,
+    const OdString& newLayerStateName);
+};
+
+typedef OdSmartPtr<OdDbLayerStateManagerReactor> OdDbLayerStateManagerReactorPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef DBLAYERSTATEMANAGER_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTable.h
new file mode 100755
index 0000000..7ac7003
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTable.h
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBLAYERTABLE_INCLUDED
+#define _ODDBLAYERTABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTable.h"
+
+class OdDbLayerTableRecord;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /layer table/ object, which represents a container for storing 
+  and accessing of /layer record/ objects in the database. This class inherits the base 
+  functionality of predefined tables.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_layer_sample_table.html, Example of Working with the Layer Table Object>
+
+  <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+  \sa
+  <link db_layer.html, Working with Layers>
+
+  OdDbLayerTableRecord class
+*/
+class TOOLKIT_EXPORT OdDbLayerTable: public OdDbSymbolTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLayerTable);
+
+  /** \details
+    Builds an instance of the /layer table/ object.
+    
+    Applications typically will not use this constructor, insofar as the database object 
+    creates own instance of the layer table. The /layer table/ object exists in the database 
+    a prior.
+  */
+  OdDbLayerTable();
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+
+  /** \details
+    Generates usage data for each record in the /layer table/ object.
+    
+    \remarks
+    Usage data can be accessed via the OdDbLayerTableRecord::isInUse() method.
+  */
+  void generateUsageData();
+};
+
+/** \details
+  The typified smart pointer for the /layer table/ object. This template class is specialization 
+  of the OdSmartPtr class for the OdDbLayerTable object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbLayerTable> OdDbLayerTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBLAYERTABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTableRecord.h
new file mode 100755
index 0000000..4b692f6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayerTableRecord.h
@@ -0,0 +1,773 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBLAYERTABLETABLERECORD_INCLUDED
+#define _ODDBLAYERTABLETABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+#include "CmColor.h"
+
+class OdDbLayerTable;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /layer record/ object, which represents a layer in the database. 
+  This class inherits the base functionality of named records. 
+
+  \sa
+  TD_Db
+    
+  \sa
+  <link db_layer_sample_table.html, Example of Working with the Layer Table Object>
+
+  <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+  \sa
+  <link db_layer.html, Working with Layers>
+
+  OdDbLayerTable class
+*/
+class TOOLKIT_EXPORT OdDbLayerTableRecord : public OdDbSymbolTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLayerTableRecord);
+
+  /** \details
+    Builds an instance of the /layer record/ object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_layer_add_name.html, Adding and Naming Layers>
+  */
+  OdDbLayerTableRecord();
+
+  typedef OdDbLayerTable TableType;
+
+
+  /** \details
+    Determines whether the /layer record/ object is invisible and accessible for regenerating, 
+    printing, selecting, and editing (DXF 70, bit 0x01) and returns True if the layer is frozen 
+    or False if the layer is thawed.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::setIsFrozen() method
+  */
+  bool isFrozen() const;
+
+
+  /** \details
+    Sets the Freeze status as a Boolean value (DXF 70, bit 0x01). The initial value is False 
+    (Thawed) by default.
+
+    \param bStatus [in]  True - to freeze the layer, or False - to thaw the layer.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::isFrozen() method
+  */
+  void setIsFrozen( bool bStatus );
+
+
+  /** \details
+    Determines whether the /layer record/ object is invisible (DXF 62, negative is off, positive 
+    is on) and returns True if the layer is off (invisible) or False if the layer is on (visible).
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::setIsOff() method
+  */
+  bool isOff() const;
+
+
+  /** \details
+    Sets the On-Off status as a Boolean value (DXF 62). The initial value is False (Visible) by 
+    default.
+
+    \param bStatus [in]  True - to make the layer invisible (off), or False - to make the layer visible (on).
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::isOff() method
+  */
+  void setIsOff( bool bStatus );
+
+
+  /** \details
+    Returns true if and only if the layer is frozen in new viewports (DXF 70, bit 0x02).
+
+    \sa
+    OdDbLayerTableRecord::setVPDFLT() method
+  */
+  bool VPDFLT() const;
+
+
+  /** \details
+    Sets the Freeze status in new viewports for the layer as a Boolean value (DXF 70, bit 0x02).
+
+    \param bStatus [in]  True - to specify the frozen layers for new viewports, or 
+                False - to specify the thawed layers for new viewports.
+
+    \sa
+    OdDbLayerTableRecord::VPDFLT() method
+  */
+  void setVPDFLT( bool bStatus );
+
+
+  /** \details
+    Determines whether the /layer record/ object is accessible for selecting and editing 
+    (DXF 70, bit 0x04) and returns True if the layer is locked or False if the layer is editable.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::setIsLocked() method
+  */
+  bool isLocked() const;
+
+
+  /** \details
+    Sets the Lock status as a Boolean value (DXF 70, bit 0x04). The initial value is False 
+    (Editable) by default.
+
+    \param bStatus [in]  True - to lock the layer, or False - to unlock the layer.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::isLocked() method
+  */
+  void setIsLocked( bool bStatus );
+
+
+  /** \details
+    Determines whether the /layer record/ object is accessible for printing (DXF 290) and 
+    returns True if the layer is plottable or False if the layer is unplottable.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::setIsPlottable() method
+  */
+  bool isPlottable() const;
+
+
+  /** \details
+    Sets the Plot status as a Boolean value (DXF 290). The initial value is True (Plottable) 
+    by default.
+
+    \param bStatus [in]  True - to make the layer plottable, or False - to make the layer no plottable.
+
+    \remarks
+    Some layers cannot be set to plottable; e.g., the "Defpoints" Layer.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::isPlottable() method
+  */
+  void setIsPlottable( bool bStatus );
+
+
+  /** \details
+    Determines whether the /layer record/ object is displayed for the host application and 
+    returns True if the layer is hidden or False if the layer is shown.
+
+    \remarks
+    The static isHidden() method checks the Hidden status for the specified layer ID.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::setIsHidden() method
+  */
+  bool isHidden() const;
+  static bool isHidden( const OdDbObjectId& idLayer );
+
+
+  /** \details
+    Sets the Hidden status as a Boolean value. The initial value is False (Shown) by default.
+
+    \param bStatus [in]  True - to hide the layer, or False - to show the layer.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::isHidden() method
+  */
+  void setIsHidden( bool bStatus );
+
+
+  /** \details
+    Determines whether the /layer record/ object is reconciled with another object and returns 
+    True if the layer is reconciled, or False if the layer is not reconciled.
+
+    \remarks
+    The static isReconciled() method checks the Reconcile status for the specified layer ID.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::setIsReconciled() method
+  */
+  bool isReconciled() const;
+  static bool isReconciled( const OdDbObjectId& idLayer );
+
+
+  /** \details
+    Sets the Reconcile status as a Boolean value.
+
+    \param bStatus [in]  True - to set the Reconcile status, or False - to clear the Reconcile status.
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTableRecord::isReconciled() method
+  */
+  void setIsReconciled( bool bStatus = true );
+
+
+  /** \details
+    Returns the transparency for the /layer record/ object (as XData). This transparency is 
+    used when the Transparency property of an entity belonged to the layer is set to the byLayer 
+    value. The actual transparency value can depend on the viewport in which the entity is rendered.
+
+    \param idViewport  [in] Object ID of the viewport for which the transparency value should be obtained.
+    \param pIsOverride [out] Pointer to the Boolean variable in which this method saves the result:  
+                    True if it is the specific transparency previously specified for the viewport, or   
+                    False if it is own transparency and the layer does not store a transparency for 
+                    the specified viewport.
+
+    \remarks
+    The same layer can have different transparencies in different viewports. Therefore this method 
+    is overdriven. The method without arguments returns the own transparency of the layer. The method 
+    with two arguments returns the specific transparency specified for the viewport or own transparency 
+    if the specific transparency is not specified for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::setTransparency() method
+  */
+  OdCmTransparency transparency() const;
+  OdCmTransparency transparency( const OdDbObjectId& idViewport, bool* pIsOverride = 0 ) const;
+
+
+  /** \details
+    Sets the transparency for the /layer record/ object (as XData) and returns eOk if successful. 
+    This transparency is used when the Transparency property of an entity belonged to this layer 
+    is set to byLayer value. The initial value is byAlpha = 100% value (solid) by default. The same 
+    entity can be rendered using different transparencies in different viewports.
+
+    \param cmTransparency [in]  Reference to the transparency instance to be set as an Alpha-value in 
+                       range 1 to 255.
+    \param idViewport     [in] Object ID of the viewport in which the layer must have the specific transparency.
+
+    \remarks
+    The same layer can have different transparencies in different viewports. Therefore this method 
+    is overdriven. The method with one argument sets the own transparency of the layer. The method 
+    with two arguments sets the specific transparency for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    <link cm.html, Colors and Transparencies>
+
+    OdDbLayerTableRecord::transparency() method
+  */
+  OdResult setTransparency( const OdCmTransparency& cmTransparency );
+  void setTransparency( const OdCmTransparency& cmTransparency, const OdDbObjectId& idViewport );
+
+
+  /** \details
+    Returns the color for the /layer record/ object (DXF 62). This color is used when 
+    the Color property of an entity belonged to the layer is set to byLayer value. The actual 
+    color value can depend on the viewport in which the entity is rendered.
+
+    \param idViewport  [in] Object ID of the viewport for which the color value should be obtained.
+    \param pIsOverride [out] Pointer to the Boolean variable in which this method saves the result:
+                    True if it is the specific color previously specified for the viewport, or 
+                    False if it is own color and the layer does not store a color for the 
+                    specified viewport.
+
+    \remarks
+    The same layer can have different colors in different viewports. Therefore this method is 
+    overdriven. The method without arguments returns the own color of the layer. The method 
+    with two arguments returns the specific color specified for the viewport or own color 
+    if the specific color is not specified for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::setColor() method
+  */
+  OdCmColor color() const;
+  OdCmColor color( const OdDbObjectId& viewportId, bool* pIsOverride = 0 ) const;
+
+
+  /** \details
+    Sets the color for the /layer record/ object (DXF 62). This color is used when the 
+    Color property of an entity belonged to this layer is set to byLayer value. The initial 
+    value is Foreground (index 7) by default. The same entity can be rendered using different 
+    colors in different viewports.
+
+    \param cmColor    [in] Reference to the color instance to be set.
+    \param idViewport [in] Object ID of the viewport in which the layer must have the specific color.
+
+    \remarks
+    The same layer can have different colors in different viewports. Therefore this method is 
+    overdriven. The method with one argument sets the own color of the layer. The method with 
+    two arguments sets the specific color for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    <link cm.html, Colors and Transparencies>
+
+    OdDbLayerTableRecord::color() method
+  */
+  void setColor( const OdCmColor& cmColor );
+  void setColor( const OdCmColor& cmColor, const OdDbObjectId& idViewport );
+
+  
+  /** \details
+    Returns the color index for the /layer record/ object (DXF 62). When the color method is 
+    set to byColor, this method returns an equivalent color index.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::setColorIndex() method
+  */
+  OdInt16 colorIndex() const;
+
+
+  /** \details
+    Sets the color index for the /layer record/ object (DXF 62) as an Integer value. The initial   
+    value is 7 (Foreground) by default.
+
+    \param idxColor [in]  Color index in range 1 to 255.
+
+    \remarks
+    When the index outs the range 1 to 255, this method generates an exception. This method sets  
+    the color method to byACI.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::colorIndex() method
+  */
+  void setColorIndex( OdInt16 idxColor );
+
+
+  /** \details
+    Returns the lineweight of the /layer record/ object (DXF 370). This lineweight is used when  
+    the Lineweight property of an entity belonged to this layer is set to ByLayer value. The actual 
+    lineweight can depend on the viewport in which the entity is rendered.
+
+    \param idViewport  [in] Object ID of the viewport for which the lineweight should be obtained.
+    \param pIsOverride [out] Pointer to the Boolean variable in which this method saves the result:
+                    True if it is the specific lineweight previously specified for the viewport, or 
+                    False if it is own lineweight and the layer does not store a lineweight for the 
+                    specified viewport.
+
+    \remarks
+    The same layer can have different lineweights in different viewports. Therefore this method is 
+    overdriven. The method without arguments returns the own lineweight of the layer. The method with 
+    two arguments returns the specific lineweight specified for the viewport or own lineweight if the 
+    specific lineweight is not specified for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::setLineWeight() method
+  */
+  OdDb::LineWeight lineWeight() const;
+  OdDb::LineWeight lineWeight( const OdDbObjectId& idViewport, bool* pIsOverride = 0 ) const;
+
+
+  /** \details
+    Sets the lineweight for the /layer record/ object (DXF 370). This lineweight is used when the 
+    Lineweight property of an entity belonged to this layer is set to ByLayer value. The initial value 
+    is kLnWtByLwDefault by default. The same entity can be rendered using different lineweights in 
+    different viewports.
+
+    \param kLnWtEnum  [in] Lineweight (value of the enumerator).
+    \param idViewport [in] Object ID of the viewport in which the layer must have the specific lineweight.
+
+    \remarks
+    The same layer can have different lineweights in different viewports. Therefore this method is 
+    overdriven. The method with one argument sets the own lineweight of the layer. The method with 
+    two arguments sets the specific lineweight for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::lineWeight() method
+  */
+  void setLineWeight( OdDb::LineWeight kLnWtEnum );
+  void setLineWeight( OdDb::LineWeight kLnWtEnum, const OdDbObjectId& idViewport );
+
+
+  /** \details
+    Returns the ID of the /linetype record/ object associated with the /layer record/ object 
+    (DXF 6), or OdDb::kNULL when the layer is not associated with linetype. This linetype is 
+    used when the Linetype property of an entity belonged to this layer is set to ByLayer value. 
+    The actual linetype can depend on the viewport in which the entity is rendered.
+
+    \param idViewport  [in] Object ID of the viewport for which the linetype ID should be obtained.
+    \param pIsOverride [out] Pointer to the Boolean variable in which this method saves the result:
+                    True if it is the specific linetype previously specified for the viewport, or 
+                    False if it is own linetype and the layer does not store a linetype for the 
+                    specified viewport.
+
+    \remarks
+    The same layer can have different linetypes in different viewports. Therefore this method is 
+    overdriven. The method without arguments returns the own linetype of the layer. The method with 
+    two arguments returns the specific linetype specified for the viewport or own linetype if the 
+    specific linetype is not specified for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::setLinetypeObjectId() method
+  */
+  OdDbObjectId linetypeObjectId() const;
+  OdDbObjectId linetypeObjectId( const OdDbObjectId& idViewport, bool* pIsOverride = 0 ) const;
+
+
+  /** \details
+    Sets the ID of the linetype record object for the layer record object (DXF 6) as an 
+    ObDbObjectId instance. This method associates layer and linetype. This linetype is used when 
+    the Linetype property of an entity belonged to this layer is set to ByLayer value. The initial 
+    value associates the layer with the "Continuous" linetype by default. The same entity can be 
+    rendered using different linetypes in different viewports.
+
+    \param idLinetype [in]  Object ID of the linetype record object to associate it with the layer,
+                   or OdDb::kNull to disassociate the layer and linetype.
+    \param idViewport [in] Object ID of the viewport in which the layer must have the specific linetype.
+
+    \remarks
+    The same layer can have different linetypes in different viewports. Therefore this method is 
+    overdriven. The method with one argument sets the own linetype of the layer. The method with two 
+    arguments sets the specific linetype for the viewport.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::linetypeObjectId() method
+  */
+  void setLinetypeObjectId( OdDbObjectId idLinetype );
+  void setLinetypeObjectId( const OdDbObjectId& idLinetype, const OdDbObjectId& idViewport );
+
+
+  /** \details
+    Returns the ID of the material object associated with the /layer record/ object (DXF 347) 
+    or OdDb::kNULL when the layer is not associated with material. This material is used when 
+    the Material property of an entity belonged to this layer is set to ByLayer value.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::setMaterialId() method
+  */
+  OdDbObjectId materialId() const;
+
+
+  /** \details
+    Sets the ID of the material object for the /layer record/ object (DXF 347) as an ObDbObjectId 
+    instance. This method associates layer and material. The initial value associates the layer with 
+    the "Global" material by default.
+
+    \param idMaterial [in]  Object ID of the material object to associate it with the layer, 
+                   or OdDb::kNull to disassociate the layer and material.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::materialId() method
+  */
+  void setMaterialId( OdDbObjectId idMaterial );
+
+
+  /** \details
+    Retuns the name of the plot style associated with the /layer record/ object (DXF 390). This plot 
+    style is used when the PlotStyle property of an entity belonged to this layer is set to ByLayer 
+    value. The actual plot style can depend on the viewport in which the entity is rendered.
+
+
+    \param idViewport  [in] Object ID of the viewport for which the plot style ID should be obtained.
+    \param pIsOverride [out] Pointer to the Boolean variable in which this method saves the result:
+                    True if it is the specific plot style previously specified for the viewport, or 
+                    False if it is own plot style and the layer does not store a plot style for the 
+                    specified viewport.
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::plotStyleNameId(), OdDbLayerTableRecord::setPlotStyleName() methods
+  */
+  OdString plotStyleName() const;
+  OdString plotStyleName( const OdDbObjectId& idViewport, bool* pIsOverride = 0 ) const;
+
+
+  /** \details
+    Returns the ID of the /plot style/ object associated with the /layer record/ object (DXF 390) or 
+    OdDb::kNULL when the layer is not associated with plot style. This plot style is used when the 
+    PlotStyle property of an entity belonged to this layer is set to ByLayer value. The actual plot  
+    style can depend on the viewport in which the entity is rendered.
+
+    \param idViewport  [in] Object ID of the viewport for which the plot style ID should be obtained.
+    \param pIsOverride [out] Pointer to the Boolean variable in which this method saves the result:
+                    True if it is the specific plot style previously specified for the viewport, or 
+                    False if it is own plot style and the layer does not store a plot style for the 
+                    specified viewport.
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::plotStyleName(), OdDbLayerTableRecord::setPlotStyleName() methods
+  */
+  OdDbObjectId plotStyleNameId() const;
+  OdDbObjectId plotStyleNameId( const OdDbObjectId& idViewport, bool* pIsOverride = 0 ) const;
+
+
+  /** \details
+    Sets the name or ID of the /place holder/ object for the /layer record/ object (DXF 390). This 
+    method associates layer and plot style. The ID is an ObDbObjectId instance, the name is an 
+    OdString instance. This plot style is used when the PlotStyle property of an entity belonged to 
+    this layer is set to ByLayer value. The same entity can be rendered using different plot styles 
+    in different viewports.
+
+    \param sPlotStyleName [in]  Plot style name as non-empty string.
+    \param idPlotStyle    [in] Object ID of the /place holder/ object to associate it with the layer,
+                       or OdDb::kNull to disassociate the layer and plot style.
+    \param idViewport     [in] Object ID of the viewport in which the layer must have the specific plot style.
+
+    \remarks
+    The same layer can have different plot styles in different viewports. Therefore this method is 
+    overdriven. The method with one argument sets the own plot style of the layer using the plot style 
+    name or plot style ID. The method with two arguments sets the specific plot style for the viewport 
+    using the plot style name or plot style ID.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+    
+    <link OdDbPlaceHolder, OdDbPlaceHolder class>
+    
+    <link !!OVERLOADED_plotStyleName_OdDbLayerTableRecord, OdDbLayerTableRecord::plotStyleName()>, <link !!OVERLOADED_plotStyleNameId_OdDbLayerTableRecord, OdDbLayerTableRecord::plotStyleNameId()> methods
+  */
+  OdResult setPlotStyleName( const OdString& sPlotStyleName );
+  void setPlotStyleName( const OdString& sPlotStyleName, const OdDbObjectId& idViewport);
+  void setPlotStyleName( OdDbObjectId idPlotStyle );
+  void setPlotStyleName( const OdDbObjectId& idPlotStyle, const OdDbObjectId& idViewport);
+
+  
+  /** \details
+    Returns the description for the /layer record/ object.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::setDescription() method
+  */
+  OdString description() const;
+
+
+  /** \details
+    Sets the description for the /layer record/ object as a String value up to 255 letters length. 
+    The initial value is an empty string.
+
+    \param sDescription [in]  Description as a String value.
+    
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_properties.html, Specific Properties of Layers>
+
+    OdDbLayerTableRecord::description() method
+  */
+  void setDescription( const OdString& sDescription );
+
+
+  /** \details
+    Determines whether the /layer record/ object is in-use when the generateUsageData() method  
+    is called and returns True if the layer is in-use, or False if the layer is not use.
+    
+    \remarks
+    Returns True when the generateUsageData() of the /layer table/ object has not been called
+    or this /layer record/ object is not database resident.
+
+    \sa
+    <link db_layer_sample_record.html, Example of Working with the Layer Record Object>
+
+    \sa
+    <link db_layer_status.html, Status of Layers>
+
+    OdDbLayerTable::generateUsageData() method
+  */
+  bool isInUse() const;
+
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );
+
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields( OdDbDxfFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields_R12( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields_R12( OdDbDxfFiler* pFiler ) const;
+
+  virtual OdResult subGetClassID( void* pClsid ) const;
+
+  virtual OdResult subErase( bool erasing );
+
+  virtual OdUInt32 subSetAttributes( OdGiDrawableTraits* pTraits ) const;
+
+  virtual bool subWorldDraw( OdGiWorldDraw* pWd ) const;
+
+  virtual void subViewportDraw( OdGiViewportDraw* pVd ) const;
+
+  OdGiDrawable* drawable();
+
+  void removeAllOverrides();
+
+  void removeColorOverride( const OdDbObjectId& idViewport );
+
+  void removeLinetypeOverride( const OdDbObjectId& idViewport );
+
+  void removeLineWeightOverride( const OdDbObjectId& idViewport );
+
+  void removePlotStyleOverride( const OdDbObjectId& idViewport );
+
+  void removeTransparencyOverride( const OdDbObjectId& idViewport );
+
+  void removeViewportOverrides( const OdDbObjectId& idViewport );
+
+  bool hasOverrides( const OdDbObjectId& idViewport ) const;
+
+  bool hasAnyOverrides() const;
+};
+
+/** \details
+  The typified smart pointer for the /layer record/ object. This template class is 
+  specialization of the OdSmartPtr class for the OdDbLayerTableRecord object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbLayerTableRecord> OdDbLayerTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBLAYERTABLETABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayout.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayout.h
new file mode 100755
index 0000000..a91b139
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayout.h
@@ -0,0 +1,346 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBLAYOUT_H
+#define OD_DBLAYOUT_H
+
+#include "TD_PackPush.h"
+
+#include "DbPlotSettings.h"
+
+class OdGiRasterImage;
+typedef OdSmartPtr<OdGiRasterImage> OdGiRasterImagePtr;
+
+class OdString;
+
+/** \details
+    This class represents Layout objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLayout : public OdDbPlotSettings
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLayout);
+
+  /** \details
+      Constructor (no arguments).
+  */
+  OdDbLayout();
+
+  ///////// BEGIN ODA SPECIFIC /////////////
+
+  /** \details
+    Returns the minimum limits for this Layout object (DXF 10).
+  */
+  const OdGePoint2d& getLIMMIN() const;
+
+  /** \details
+    Sets the minimum limits for this Layout object (DXF 10).
+    
+    \param limMin [in]  Minimum limits.
+  */
+  void setLIMMIN(
+    const OdGePoint2d& limMin);
+
+  /** \details
+    Returns the maximum limits for this Layout object (DXF 11).
+  */
+  const OdGePoint2d& getLIMMAX() const;
+
+  /** \details
+    Sets the maximum limits for this Layout object (DXF 11).
+
+    \param limMax [in]  Maximum limits.
+  */
+  void setLIMMAX(
+    const OdGePoint2d& limMax);
+
+  /** \details
+    Returns the minimum extents for this Layout object (DXF 14).
+  */
+  const OdGePoint3d& getEXTMIN() const;
+
+  /** \details
+    Sets the minimum extents for this Layout object (DXF 14).
+    
+    \param extMin [in]  Minimum extents.
+  */
+  void setEXTMIN(
+    const OdGePoint3d& extMin);
+
+  /** \details
+    Returns the maximum extents for this Layout object (DXF 15).
+  */
+  const OdGePoint3d& getEXTMAX() const;
+
+  /** \details
+    Sets the maximum extents for this Layout object (DXF 15).
+    
+    \param extMax [in]  Maximum extents.
+  */
+  void setEXTMAX(
+    const OdGePoint3d& extMax);
+
+  /** \details
+    Returns the insertion base for this Layout object (DXF 12).
+  */
+  const OdGePoint3d& getINSBASE() const;
+
+  /** \details
+    Sets the insertion base for this Layout object (DXF 12).
+
+    \param insBase [in]  Insertion base.
+  */
+  void setINSBASE(
+    const OdGePoint3d& insBase);
+
+  /** \details
+    Returns the LIMCHECK variable for this Layout object (DXF 70, bit 0x02).
+  */
+  bool getLIMCHECK() const;
+
+  /** \details
+    Sets the LIMCHECK variable for this Layout object (DXF 70, bit 0x02).
+    
+    \param limCheck [in]  LIMCHECK variable.  
+  */
+  void setLIMCHECK(
+    bool limCheck);
+
+  /** \details
+    Returns the PSLTSCALE variable for this Layout object (DXF 70, bit 0x01).
+  */
+  bool getPSLTSCALE() const;
+
+  /** \details
+    Sets the PSLTSCALE variable for this Layout object (DXF 70, bit 0x01).
+      
+    \param psLtScale [in]  PSLTSCALE variable.
+  */
+  void setPSLTSCALE(
+    bool psLtScale);
+
+  ///////// END ODA SPECIFIC /////////////
+
+  
+  /** \details
+    Returns the Object ID of the PaperSpace OdDbBlockTableRecord associated with this Layout object (DXF 330).
+  */
+  OdDbObjectId getBlockTableRecordId() const;
+
+  /** \details
+    Associates this Layout object with the specified PaperSpace OdDbBlockTableRecord (DXF 330).
+    
+    \param blockTableRecordId [in]  Block table record Object Id.
+  */
+  virtual void setBlockTableRecordId(
+    const OdDbObjectId& blockTableRecordId);
+
+  /** \details
+    Adds this Layout object to the layout dictionary in the specified database, and associates 
+    this Layout object with the specified PaperSpace OdDbBlockTableRecord. 
+
+    \param pDb [in]  Pointer to the database
+    \param blockTableRecordId [in]  Block table record Object Id.
+  */
+  virtual void addToLayoutDict(
+    OdDbDatabase* pDb, 
+    OdDbObjectId blockTableRecordId);
+  
+  /** \details
+    Returns the name of this Layout object (DXF 1).
+  */
+  OdString getLayoutName() const;
+
+  /** \details
+    Sets the name of this Layout object (DXF 1).
+      
+    \param layoutName [in]  Layout name.  
+  */
+  virtual void setLayoutName(const OdString& layoutName);
+  
+  /** \details
+    Returns the tab order for this Layout object (DXF 71).
+    
+    \remarks
+    The tab order determines the order in which layout tabs are to be displayed.
+  */
+  int getTabOrder() const;
+
+  /** \details
+    Sets the tab order for this Layout Ooject (DXF 71).
+    
+    \param tabOrder [in]  Tab order.
+
+    \remarks
+    The tab order determines the order in which layout tabs are to be displayed.
+    
+    Tab order should be sequential for all Layout objects in the database.
+  */
+  virtual void setTabOrder(
+    int tabOrder);
+  
+  /** \details
+    Returns true if and only if this layout tab is selected.
+  */
+  bool getTabSelected() const;
+
+  /** \details
+    Controls the selected status for this Layout object.
+    
+    \param tabSelected [in]  Controls selected status. 
+    
+    \remarks
+    Selected Layout objects are included in selection sets for operations effecting multiple layouts.
+  */
+  virtual void setTabSelected(
+    bool tabSelected);
+
+  
+  /** \details
+    Returns an array of OdDbObjectIds of all the OdDbViewports that exist in the Paper Space layout.
+    The first ID in the list will be the overall Paper Space viewport.
+    If the list returned is empty, then this layout is Model Space or has never been switched to (activated).
+  */
+  OdDbObjectIdArray getViewportArray() const;
+
+  /** \details
+    Returns the thumbnail bitmap associated with this layout object.
+
+    \remarks
+    The thumbnail is in Windows BITMAPINFO* format.
+
+    \param dataLength [out]  Receives the data length of the thumbnail.
+  */
+  const void* thumbnailBitmap(
+    OdUInt32& dataLength) const;
+
+  /** \details
+    Sets the thumbnail bitmap associated with this layout object.
+
+    \remarks
+    The thumbnail is in Windows BITMAPINFO* format.
+
+    \param dataLength [in]  Data length of the thumbnail.
+    \param pBMPData [in]  Pointer to the bitmap data.
+  */
+  void setThumbnailBitmap(
+    const void* pBMPData,
+    OdUInt32 dataLength);
+
+  /** \details
+    Returns the preview image associated with the layout object.
+
+    \remarks
+    Layout previews are stored as .png images. To create layout preview Teigha requires Raster Services module supporting .png format.
+  */
+   OdGiRasterImagePtr getPreviewImage () const;
+
+  /** \details
+    Sets a new preview image for the layout object.
+
+    \param image [in]  A pointer to an OdGiRasterImage object to be set as a new preivew thumbnail.
+
+    \remarks
+    Layout previews are stored as .png images. To create layout preview Teigha requires Raster Services module supporting .png format.
+  */
+   void setPreviewImage (
+      const OdGiRasterImage* image);
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual void appendToOwner (
+    OdDbIdPair& idPair, 
+    OdDbObject* pOwnerObject, 
+    OdDbIdMapping& ownerIdMap);
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Returns the Object ID of the viewport that was last active
+    in this Layout object (DXF 331).
+  */
+  OdDbObjectId activeViewportId() const;
+
+  /** \details
+    Makes the specified viewport the active viewport of this Layout object (DXF 331).
+
+    \param viewportId [in]  Object ID of the active viewport.      
+  */
+  void setActiveViewportId(
+    OdDbObjectId viewportId);
+
+  /** \details
+      Returns the Object ID of the overall viewport of this Layout object.
+  */
+  OdDbObjectId overallVportId() const;
+
+  OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  void subViewportDraw(
+    OdGiViewportDraw* vPd) const;
+
+  OdResult getGeomExtents(OdGeExtents3d& extents) const;
+
+  void subClose();
+
+  bool annoAllVisible() const;
+
+  void setAnnoAllVisible(bool newVal);
+};
+
+// !!! SYMBOL RENAMED !!! USE activeViewportId()
+
+#define lastActiveVportId() activeViewportId()
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLayout object pointers.
+*/
+typedef OdSmartPtr<OdDbLayout> OdDbLayoutPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutManager.h
new file mode 100755
index 0000000..b9a47c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutManager.h
@@ -0,0 +1,279 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBLAYOUTMANAGER_INCLUDED_
+#define _ODDBLAYOUTMANAGER_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "DbDatabase.h"
+#include "DbLayout.h"
+
+class OdDbLayoutManagerImpl;
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdDbLayout events.
+    
+    \remarks
+    The default implementations of all methods in this class do nothing but return.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLayoutManagerReactor : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbLayoutManagerReactor);
+  /** \details
+    Notification function called whenever a layout has been added to an OdDbDatabase.
+    
+    \param layoutName [in]  Layout name.
+    \param layoutId [in]  Object ID of layout.
+    
+ 	  \remarks
+	  This function is called after the operation.
+  */
+    virtual void layoutCreated(
+    const OdString& layoutName, 
+    const OdDbObjectId& layoutId);
+    
+  /** \details
+    Notification function called whenever a layout is about to be removed from an OdDbDatabase.
+    
+    \param layoutName [in]  Layout name.
+    \param layoutId [in]  Object ID of layout.
+    
+ 	  \remarks
+	  This function is called before the operation.
+  */
+  virtual void layoutToBeRemoved(
+    const OdString& layoutName, 
+    const OdDbObjectId& layoutId);
+
+  /** \details
+    Notification function called whenever a layout has been removed from an OdDbDatabase.
+    
+    \param layoutName [in]  Layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called before the operation.
+  */
+  virtual void layoutRemoved(
+    const OdString& layoutName, 
+    const OdDbObjectId& layoutId);
+    
+  /** \details
+    Notification function called whenever the removal of a layout has been terminated.
+    
+    \param layoutName [in]  Layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called before the operation.
+  */
+  virtual void abortLayoutRemoved(
+    const OdString& layoutName, 
+    const OdDbObjectId& layoutId);
+
+  /** \details
+    Notification function called whenever a layout is about to be copied.
+    
+    \param layoutName [in]  Layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called before the operation.
+  */
+  virtual void layoutToBeCopied(
+    const OdString& layoutName, 
+    const OdDbObjectId& layoutId);
+    
+  /** \details
+    Notification function called whenever a layout has been copied.
+    
+    \param oldLayoutName [in]  Old layout name.
+    \param oldLayoutId [in]  Object ID of the old layout.
+    \param newLayoutName [in]  New layout name.
+    \param newLayoutId [in]  Object ID of the new layout.
+    
+ 	  \remarks
+	  This function is after the operation.
+  */
+  virtual void layoutCopied(
+    const OdString& oldLayoutName, 
+    const OdDbObjectId& oldLayoutId,
+    const OdString& newLayoutName, 
+    const OdDbObjectId& newLayoutId);
+
+  /** \details
+    Notification function called whenever the copying of a layout has been terminated.
+    
+    \param layoutName [in]  Layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void abortLayoutCopied(
+    const OdString& layoutName, 
+    const OdDbObjectId& layoutId);
+
+  /** \details
+    Notification function called whenever a layout is about to be renamed.
+    
+    \param oldLayoutName [in]  Old layout name.
+    \param newLayoutName [in]  New layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called before the operation.
+  */
+  virtual void layoutToBeRenamed(
+    const OdString& oldLayoutName,
+    const OdString& newLayoutName, 
+    const OdDbObjectId& layoutId);
+
+  /** \details
+    Notification function called whenever a layout has been renamed.
+    
+    \param oldLayoutName [in]  Old layout name.
+    \param newLayoutName [in]  New layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void layoutRenamed(
+    const OdString& oldLayoutName,
+    const OdString& newLayoutName, 
+    const OdDbObjectId& layoutId);
+    
+  /** \details
+    Notification function called whenever the renaming of a layout has been terminated.
+    
+    \param oldLayoutName [in]  Old layout name.
+    \param newLayoutName [in]  New layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void abortLayoutRename(
+    const OdString& oldLayoutName,
+    const OdString& newLayoutName, 
+    const OdDbObjectId& layoutId);
+    
+  /** \details
+    Notification function called whenever the active layout has changed.
+    
+    \param newLayoutName [in]  New layout name.
+    \param newLayoutId [in]  Object ID of the new layout.
+    
+ 	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void layoutSwitched(
+    const OdString& newLayoutName, 
+    const OdDbObjectId& newLayoutId);
+    
+  /** \details
+    Notification function called whenever the plot style table associated with a layout has changed.
+    
+    \param newTableName [in]  New PlotStyleTable name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void plotStyleTableChanged(
+    const OdString& newTableName, 
+    const OdDbObjectId& layoutId);
+
+  /** \details
+    Notification function called before the active layout gets deactivated.
+    
+    \param layoutName [in]  Layout name.
+    \param layoutId [in]  Object ID of the layout.
+    
+ 	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void layoutToBeDeactivated(
+    const OdString& layoutName, 
+    const OdDbObjectId& layoutId);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLayoutManagerReactor object pointers. 
+*/
+typedef OdSmartPtr<OdDbLayoutManagerReactor> OdDbLayoutManagerReactorPtr;
+
+/** \details
+    This class modifies and accesses Layout objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLayoutManager : public OdRxObject  
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbLayoutManager);
+
+  OdDbLayoutManager();
+  virtual ~OdDbLayoutManager();
+  virtual void setCurrentLayout(OdDbDatabase* pDb, const OdDbObjectId& layoutId);
+  virtual OdString findActiveLayout(const OdDbDatabase* pDb, bool allowModel) const;
+  virtual OdDbObjectId getActiveLayoutBTRId(const OdDbDatabase* pDb) const;
+  virtual OdDbObjectId findLayoutNamed(const OdDbDatabase* pDb, const OdString& name) const;
+  virtual void deleteLayout(OdDbDatabase* pDb, const OdString& delname);
+  virtual OdDbObjectId createLayout(OdDbDatabase* pDb, const OdString& newname, OdDbObjectId* pBlockTableRecId = 0);
+  virtual void renameLayout(OdDbDatabase* pDb, const OdString& oldname, const OdString& newname);
+  virtual OdDbObjectId cloneLayout(OdDbDatabase* pDb, const OdDbLayout* pLayout, const OdString& newname, int newTabOrder = 0);
+
+  virtual OdDbObjectId getNonRectVPIdFromClipId(const OdDbObjectId& clipId) const;
+  virtual bool isVpnumClipped(const OdDbDatabase* pDb, int index) const;
+  virtual int countLayouts(const OdDbDatabase* pDb) const;
+  virtual void addReactor(OdDbLayoutManagerReactor * newObj);
+  virtual void removeReactor(OdDbLayoutManagerReactor * delObj);
+private:
+  friend class OdDbLayoutManagerImpl;
+protected:
+  OdDbLayoutManager(OdDbLayoutManagerImpl* pImpl);
+  OdDbLayoutManagerImpl* m_pImpl;
+};
+
+typedef OdSmartPtr<OdDbLayoutManager> OdDbLayoutManagerPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_ODDBLAYOUTMANAGER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutPaperPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutPaperPE.h
new file mode 100755
index 0000000..4efd36c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLayoutPaperPE.h
@@ -0,0 +1,98 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbLayoutPaperPE_h_Included_
+#define _DbLayoutPaperPE_h_Included_
+
+#include "SmartPtr.h"
+
+class OdDbLayout;
+class OdGePoint3d;
+
+/** \details
+    This class is the Protocol Extension class for OdDbLayout objects.
+    
+    \remarks
+    The Protocol Extension class can be registered on the OdDbLayout class 
+    to provide a vectorization client the opportunity to customize the drawing
+    of the background paper during PaperSpace vectorization.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbLayoutPaperPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbLayoutPaperPE);
+
+  /** \details
+      This function is called during vectorization to draw the paper.  
+
+      \param pThis [in]  The layout that is being vectorized.
+      \param pWd [in/out] Draw object that can be used by this function to set the 
+        necessary attributes and create the necessary geometry.
+      \param points [in] Contains the 4 corners of the paper.
+
+      \returns
+      true if the paper was successfully drawn, otherwise false, in which case
+      the layout will do a default rendering of the paper.
+  */
+  virtual bool drawPaper(const OdDbLayout* pThis, OdGiWorldDraw* pWd, OdGePoint3d* points) = 0;
+
+  /** \details
+      This function is called during vectorization to draw the paper border.
+
+      \param pThis [in]  The layout that is being vectorized.
+      \param pWd [in/out] Draw object that can be used by this function to set the 
+        necessary attributes and create the necessary geometry.
+      \param points [in] Contains the 4 corners of the paper.
+
+      \returns
+      true if the border was successfully drawn, otherwise false, in which case
+      the layout will do a default rendering of the border.
+  */
+  virtual bool drawBorder(const OdDbLayout* pThis, OdGiWorldDraw* pWd, OdGePoint3d* points) = 0;
+
+  /** \details
+      This function is called during vectorization to draw the paper margins.
+
+      \param pThis [in]  The layout that is being vectorized.
+      \param pWd [in/out] Draw object that can be used by this function to set the 
+        necessary attributes and create the necessary geometry.
+      \param points [in] Contains the 4 margin points.
+
+      \returns
+      true if the margins were successfully drawn, otherwise false, in which case
+      the layout will do a default rendering of the margins.
+  */
+  virtual bool drawMargins(const OdDbLayout* pThis, OdGiWorldDraw* pWd, OdGePoint3d* points) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLayoutPaperPE object pointers.
+*/
+typedef OdSmartPtr<OdDbLayoutPaperPE> OdDbLayoutPaperPEPtr;
+
+#endif //_DbLayoutPaperPE_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLeader.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLeader.h
new file mode 100755
index 0000000..932f56f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLeader.h
@@ -0,0 +1,744 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBLEOD_H
+#define OD_DBLEOD_H 1
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+#include "DbDimStyleTableRecord.h"
+
+/** \details
+    This class represents Leader entities in an OdDbDatabase instance.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLeader : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLeader);
+
+  OdDbLeader();
+    
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  virtual OdGeVector3d normal() const;
+  
+  /** \details
+    Returns the number of vertices in this Leader entity (DXF 76).
+  */
+  virtual int numVertices() const;
+
+  /** \details
+    Appends the specified WCS vertex to this Leader entity.
+     
+    \param vertex [in]  Vertex to append.
+       
+    \remarks
+    Returns true if and only if the vertex was appended.
+
+    The specified vertex is projected onto the plane of this Leader, parallel to its normal.
+
+    \note
+    If the specified vertex is inside a 2e-10 cube surrounding the
+    previous vertex, it will not be appended.
+  */
+  virtual bool appendVertex(
+    const OdGePoint3d& vertex);
+
+  /** \details
+    Removes the last vertex of this Leader entity.
+  */
+  virtual void removeLastVertex();
+
+  /** \details
+    Returns the WCS first vertex of this Leader entity.
+  */
+  virtual OdGePoint3d firstVertex() const;
+
+  /** \details
+    Returns the WCS last vertex of this Leader entity.
+  */
+  virtual OdGePoint3d lastVertex() const;
+
+  /** \details
+    Returns the specified WCS vertex of this Leader entity.
+    \param vertexIndex [in]  Vertex index.
+  */
+  virtual OdGePoint3d vertexAt(
+    int vertexIndex) const;
+
+  /** \details
+    Sets the specified WCS vertex of this Leader entity.
+
+    \param vertexIndex [in]  Vertex index.
+    \param vertex [in]  WCS value for the vertex.
+
+    \remarks
+    Returns true if and only if the vertex was set.
+  */
+  virtual bool setVertexAt(
+    int vertexIndex, 
+    const OdGePoint3d& vertex);
+  
+  /** \details
+    Returns true if and only if this Leader entity has an arrowhead (DXF 71).
+  */
+  bool isArrowHeadEnabled() const;
+
+  /** \details
+    Returns true if arrowhead is currently enabled for this leader:
+  1. Arrow head is enabled (isArrowHeadEnabled() returns true).
+  2. DIMASZ (arrow size) is non-zero
+  3. First leader's segment length is greater or equal to (DIMASZ  DIMSCALE  2).
+  */
+  virtual bool hasArrowHead() const;
+
+  /** \details
+    Enables the arrowhead for this Leader entity (DXF 71).
+  */
+  virtual void enableArrowHead();
+
+  /** \details
+    Disables the arrowhead for this Leader entity (DXF 71).
+  */
+  virtual void disableArrowHead();
+
+  /** \details
+    Returns true if and only if this Leader entity has a hookline (DXF 75).
+  */
+  virtual bool hasHookLine() const;
+
+  /** \details
+    Returns true if the hookline is codirectional with the
+    OCS X-axis of this Leader entity, or false if it is antidirectional with it.
+  */
+  virtual bool isHookLineOnXDir() const;
+
+  /** \details
+    Sets this Leader entity to use a spline-fit leader line (DXF 72).
+  */
+  virtual void setToSplineLeader();
+
+  /** \details
+    Sets this Leader to use a straight line segments (DXF 72).
+  */
+  virtual void setToStraightLeader();
+
+  /** \details
+    Returns true if and only if this Leader entity uses a spline-fit leader line (DXF 72).
+  */
+  virtual bool isSplined() const;
+  
+  /** \details
+    Returns the dimension style (OdDbDimStyleTableRecord) used by this Leader entity (DXF 3).
+  */
+  virtual OdDbHardPointerId dimensionStyle() const;
+
+  /** \details
+    Sets the dimension style (OdDbDimStyleTableRecord) to used by this Leader entity (DXF 3).
+    
+    \param dimStyleId [in]  Object ID of the dimension style.
+  */
+  virtual void setDimensionStyle(
+    const OdDbHardPointerId& dimStyleId);
+    
+  /** \details
+    Sets the annotation entity of this Leader entity (DXF 340).
+      
+    \param annoId [in]  The Object ID of the annotation entity.
+    \param xDir [in]  WCS X-axis of the annotation entity.
+    \param annotationWidth [in]  Annotation entity width.
+    \param annotationHeight [in]  Annotation entity height.
+    \param hookLineOnXDir [in]  True to set hookline codirectional with the
+                       OCS X-axis of this annotation entity, or false to set it antidirectional with it.
+    
+    \remarks
+    This Leader entity is appended to the persistent reactor list of the annotation entity.
+    
+    The annotation entity must be one of, or a subclass of one of, the following
+    
+    <table>
+    Name        Entity type          Description
+    kMText      OdDbMText            MText 
+    kFcf        OdDbFcf              Feature control frame (Tolerance)  
+    kBlockRef   OdDbBlockReference   Block reference
+    </table>
+
+    Other than annoId, the parameters are usually set with evaluateLeader().      
+  */
+  virtual void attachAnnotation(
+    OdDbObjectId annoId);
+
+  virtual void attachAnnotation(
+    OdDbObjectId annoId,
+    OdGeVector3d xDir,
+    double annotationWidth,
+    double annotationHeight,
+    bool hookLineOnXDir);
+
+  /** \details
+    Removes this Leader entity from the persistent reactor list of its annotation entity,
+    and sets the annotation Object ID to NULL.
+  */
+  virtual void detachAnnotation();
+
+  /** \details
+     Returns the annotation Object ID of the annotation entity associated with this Leader entity (DXF 340).
+  */
+  virtual OdDbObjectId annotationObjId() const;
+
+  /** \details
+    Returns the OCS X-axis of the annotation entity associated with this Leader entity (DXF 211).
+  */
+  virtual OdGeVector3d annotationXDir() const;
+
+  /** \details
+    Returns the annotation offset of this Leader entity (DXF 213).
+    
+    \remarks
+    The annotation offset determines the final leader endpoint of this Leader entity
+    
+    <table>
+    annoType()     Final Leader Endpoint
+    kMText         annotationOffset() + OdDbMText::location() � OdGeVector3d(dimgap(), 0, 0) 
+    kFcf           annotationOffset() + OdDbFcf::location()   � OdGeVector3d(dimgap(), 0, 0)
+    kBlockRef      annotationOffset() + OdDbBlockReference::position()
+    kNoAnno        lastVertex() 
+    </table>
+    
+    \note
+    dimgap() is subtracted if the annotation is to the right of the Leader entity (isHookLikeOnXDir() == true)
+    and added if it is to the left.
+  */
+  virtual OdGeVector3d annotationOffset() const;
+
+  /** \details
+    Sets the annotation offset of this leader (DXF 213).
+    
+    \param offset [in]  Annotation offset.
+
+    \remarks
+    The annotation offset determines the final leader endpoint of this Leader entity
+    
+    <table>
+    annoType()     Final Leader Endpoint
+    kMText         annotationOffset() + OdGeVector3d(� dimgap(), 0, 0) + OdDbMText::location()
+    kFcf           annotationOffset() + OdGeVector3d(� dimgap(), 0, 0) + OdDbFcf::location()
+    kBlockRef      annotationOffset() + OdDbBlockReference::position()
+    kNoAnno        lastVertex() 
+    </table>
+    
+    \note
+    dimgap() is added if isHookLikeOnXDir() is true, subtracted if it is false.
+  */
+  virtual void setAnnotationOffset(
+    const OdGeVector3d& offset);
+  
+  /** \details
+    The type of annotation used by a Leader entity. 
+  */
+  
+  enum AnnoType
+  { 
+    kMText      = 0,   // OdDbMText
+    kFcf        = 1,   // OdDbFcf
+    kBlockRef   = 2,   // OdDbBlockReference.
+    kNoAnno     = 3    // No annotation.
+  };
+
+  /** \details
+    Returns the annotation type associated with this Leader entity (DXF 73).
+
+    \remarks
+    annoType() returns one of the following:
+    
+    <table>
+    Name        Value    Entity type          Description
+    kMText      0        OdDbMText            MText 
+    kFcf        1        OdDbFcf              Feature control frame (Tolerance)  
+    kBlockRef   2        OdDbBlockReference   Block reference
+    kNoAnno     3        --                   No annotation
+    </table>
+  */
+  AnnoType annoType() const;
+
+  /** \details
+      Returns the height of the annotation entity associated with this Leader entity (DXF 40).
+  */
+  double annoHeight() const;
+
+  /** \details
+      Returns the width of the annotation entity associated with this Leader entity (DXF 41).
+  */
+  double annoWidth() const;
+  
+  /** \details
+    Returns the DIMASZ value of this object.  
+    \remarks
+    DIMASZ specifies the arrowhead size for dimensions. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual double dimasz() const;
+
+  /** \details
+    Returns the DIMCLRD value of this object.  
+    \remarks
+    DIMCLRD specifies the color of dimension lines, leader lines, and arrowheads. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual OdCmColor dimclrd() const;
+
+  /** \details
+    Returns the DIMGAP value of this object.  
+    \remarks
+    DIMGAP specifies the gap between dimension text and dimension lines.
+
+    A negative value for DIMGAP draws a reference box round the dimension text.
+
+    Text is placed inside a dimension line only if there will be two line segments
+    each as long as abs(DIMGAP). 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual double dimgap() const;
+
+  /** \details
+    Returns the DIMLWD value of this object.  
+    \remarks
+    DIMLWD specifies the lineweight for dimension lines. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual OdDb::LineWeight dimlwd() const;
+
+  /** \details
+    Returns the DIMLDRBLK value of this object.  
+    \remarks
+    DIMLDRBLK specifies the arrowhead block at the ends of leader lines.
+
+    A null value specifies the default arrowhead is to be used. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual OdDbObjectId dimldrblk() const;
+
+  /** \details
+    Returns the DIMSAH value of this object.  
+    \remarks
+    DIMSAH controls the generation of separate arrowheads for dimension lines.
+
+    <table>
+    Value    Arrowhead Blocks
+    false    DIMBLK
+    true     DIMBLK1 and DIMBLK2 
+    </table>
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+  virtual bool dimsah() const;
+
+  /** \details
+    Returns the DIMSCALE value of this object.  
+    \remarks
+    DIMSCALE is an scale factor applied to all dimension variables that
+    regulate sizes, offsets, and distances.
+
+    DIMSCALE serves as an overall "volume control" for dimensions
+    and leaders.
+
+    <table>
+    Value        Description
+    0.0          A "reasonable" value is computed for model space viewports.
+    > 0.0        If set to the inverse of the plot scale, plotted dimensions will be at the sizes specified by the other dimension variables. 
+    </table>
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual double dimscale() const;
+
+  /** \details
+    Returns the DIMTAD value of this object.  
+    \remarks
+    DIMTAD specifies the dimension text vertical position.
+
+    <table>
+    Value        Description
+    0            Centered about the dimension line.
+    1            Above the dimension line, unless DIMTIH==1 and the dimension line is not horizontal.
+    2            Side of the dimension line farthest from the defining points.
+    3            JIS standard. 
+    </table>
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual int dimtad() const;
+
+  /** \details
+    Returns the DIMTXSTY value of this object.  
+    \remarks
+    DIMTXSTY specifies the text style of the dimension text. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual OdDbObjectId dimtxsty() const;
+
+  /** \details
+    Returns the DIMTXT value of this object.  
+    \remarks
+    DIMTXT specifies the size of the dimension text. 
+    
+    \remarks
+    The value from the dimension style of this object will be returned unless 
+    that value has been overridden, in which case, the override value will be returned. 
+    
+  */
+   virtual double dimtxt() const;
+  
+  /** \details
+    Sets the DIMASZ override for this object. 
+    \param val [in] New value for DIMASZ.   
+    \remarks
+    DIMASZ specifies the arrowhead size for dimensions. 
+  */
+   virtual void setDimasz(
+    double val);
+
+  /** \details
+    Sets the DIMCLRD override for this object. 
+    \param val [in] New value for DIMCLRD.   
+    \remarks
+    DIMCLRD specifies the color of dimension lines, leader lines, and arrowheads. 
+  */
+   virtual void setDimclrd(
+    const OdCmColor& val);
+
+  /** \details
+    Sets the DIMGAP override for this object. 
+    \param val [in] New value for DIMGAP.   
+    \remarks
+    DIMGAP specifies the gap between dimension text and dimension lines.
+
+    A negative value for DIMGAP draws a reference box round the dimension text.
+
+    Text is placed inside a dimension line only if there will be two line segments
+    each as long as abs(DIMGAP). 
+  */
+   virtual void setDimgap(
+    double val);
+
+  /** \details
+    Sets the DIMLDRBLK override for this object. 
+    \param val [in] New value for DIMLDRBLK.   
+    \remarks
+    DIMLDRBLK specifies the arrowhead block at the ends of leader lines.
+
+    A null value specifies the default arrowhead is to be used. 
+  */
+   virtual void setDimldrblk(
+    OdDbObjectId val);
+  virtual void setDimldrblk(
+    const OdString& val);
+
+  /** \details
+    Sets the DIMLWD override for this object. 
+    \param val [in] New value for DIMLWD.   
+    \remarks
+    DIMLWD specifies the lineweight for dimension lines. 
+  */
+   virtual void setDimlwd(
+    OdDb::LineWeight val); 
+
+  /** \details
+    Sets the DIMSAH override for this object. 
+    \param val [in] New value for DIMSAH.   
+    \remarks
+    DIMSAH controls the generation of separate arrowheads for dimension lines.
+
+    <table>
+    Value    Arrowhead Blocks
+    false    DIMBLK
+    true     DIMBLK1 and DIMBLK2 
+    </table>
+  */
+   virtual void setDimsah(
+    bool val);
+
+  /** \details
+    Sets the DIMSCALE override for this object. 
+    \param val [in] New value for DIMSCALE.   
+    \remarks
+    DIMSCALE is an scale factor applied to all dimension variables that
+    regulate sizes, offsets, and distances.
+
+    DIMSCALE serves as an overall "volume control" for dimensions
+    and leaders.
+
+    <table>
+    Value        Description
+    0.0          A "reasonable" value is computed for model space viewports.
+    > 0.0        If set to the inverse of the plot scale, plotted dimensions will be at the sizes specified by the other dimension variables. 
+    </table>
+  */
+   virtual void setDimscale(
+    double val);
+
+  /** \details
+    Sets the DIMTAD override for this object. 
+    \param val [in] New value for DIMTAD.  [0..3] 
+    \remarks
+    DIMTAD specifies the dimension text vertical position.
+
+    <table>
+    Value        Description
+    0            Centered about the dimension line.
+    1            Above the dimension line, unless DIMTIH==1 and the dimension line is not horizontal.
+    2            Side of the dimension line farthest from the defining points.
+    3            JIS standard. 
+    </table>
+  */
+   virtual void setDimtad(
+    int val);
+
+  /** \details
+    Sets the DIMTXSTY override for this object. 
+    \param val [in] New value for DIMTXSTY.   
+    \remarks
+    DIMTXSTY specifies the text style of the dimension text. 
+  */
+   virtual void setDimtxsty(
+    OdDbObjectId val);
+
+  /** \details
+    Sets the DIMTXT override for this object. 
+    \param val [in] New value for DIMTXT.   
+    \remarks
+    DIMTXT specifies size of the dimension text. 
+  */
+   virtual void setDimtxt(
+    double val);
+    
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+
+  ODRX_SEALED_VIRTUAL void subViewportDraw(
+    OdGiViewportDraw* pVd) const ODRX_OVERRIDE;
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE; 
+
+  virtual void subClose() ODRX_OVERRIDE;
+
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const ODRX_OVERRIDE;
+ 
+  virtual bool isPlanar() const;
+
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+  virtual OdResult getStartParam(
+    double& startParam) const;
+
+  virtual OdResult getEndParam (
+  double& endParam) const;
+
+  virtual OdResult getStartPoint(
+    OdGePoint3d& startPoint) const;
+
+  virtual OdResult getEndPoint(
+    OdGePoint3d& endPoint) const;
+
+  virtual OdResult getPointAtParam(
+    double param, 
+    OdGePoint3d& pointOnCurve) const ODRX_OVERRIDE;
+
+  virtual OdResult getParamAtPoint(
+    const OdGePoint3d& pointOnCurve, 
+    double& param) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xform,
+    OdDbEntityPtr& pEnt) const ODRX_OVERRIDE;
+
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+  virtual OdResult getFirstDeriv (
+    double param,
+    OdGeVector3d& firstDeriv) const;
+
+  virtual OdResult getSecondDeriv (
+    double param,
+    OdGeVector3d& secondDeriv) const;
+
+  virtual OdResult getArea(
+    double& area) const;
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  /** \details
+     This function is an override for OdDbEntity::subSetDatabaseDefaults() to set 
+     the dimension style of this entity to the current style for the specified database.
+  */
+  void subSetDatabaseDefaults(
+    OdDbDatabase *pDb,
+    bool doSubents);
+  
+  /** \details
+    Updates this the geometry of this leader per its relationship to its
+    annotation entity.
+  */
+  virtual OdResult evaluateLeader();
+
+  
+  /** \details
+    Support for persistent reactor to annotation entity.
+  */
+  virtual void modifiedGraphics(
+    const OdDbObject* pObject);
+  
+  virtual void erased(
+    const OdDbObject* pObject, 
+    bool erasing = true);
+
+  /** \details
+    Copies the dimension style settings, including overrides, of this entity into the specified
+    dimension style table record.
+    
+    \param pRecord [out]  Receives the effective dimension style data associated with entity.
+    
+    \remarks
+    The copied data includes the dimension style data with all applicable overrides. 
+  */
+  void getDimstyleData(
+    OdDbDimStyleTableRecord *pRecord) const;
+
+  /** \details
+    Copies the dimension style settings, including overrides, from the specified
+    dimension style table record to this entity.
+    
+    \param pDimstyle [in]  Pointer to a non- database -resident dimension style record.
+    \param dimstyleID [in]  Database-resident dimension style record.
+
+    \remarks
+    The copied data includes the dimension style with all applicable overrides. 
+  */
+  void setDimstyleData(
+    const OdDbDimStyleTableRecord* pDimstyle);
+  void setDimstyleData(
+    OdDbObjectId dimstyleID);
+
+  /** \details
+    Sets the plane to contain this Leader entity.
+
+    \param leaderPlane [in]  Leader plane.
+      
+    \remarks
+    Any associativity of this Leader entity will be broken.
+  */
+  virtual void setPlane(
+    const OdGePlane& leaderPlane);
+
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+    OdGsMarker gsMark, 
+    const OdGePoint3d& ,
+    const OdGeMatrix3d& , 
+    OdDbFullSubentPathArray& subentPaths, 
+    const OdDbObjectIdArray* pEntAndInsertStack ) const;
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+    OdGsMarkerArray& gsMarkers) const;
+
+    enum gsMarkType {
+    kArrowMark          = 3,
+    kLeaderLineMark     = kArrowMark  + 1
+  };
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLeader object pointers.
+*/
+typedef OdSmartPtr<OdDbLeader> OdDbLeaderPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLibraryInfo.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLibraryInfo.h
new file mode 100755
index 0000000..1766f8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLibraryInfo.h
@@ -0,0 +1,74 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _LIBRARYINFO_H_
+#define _LIBRARYINFO_H_
+
+#include "DbRootExport.h"
+#include "OdString.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class encapsulates a set of character strings containing 
+    describing the Teigha library.
+
+    \remarks
+
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class DBROOT_EXPORT OdDbLibraryInfo
+{
+public:
+  /** \details
+    Returns the Library Name (Teigha).
+  */
+  virtual const OdString getLibName() const = 0;
+  /** \details
+    Returns the Library Version (#.##.##).
+  */
+  virtual const OdString getLibVersion() const = 0;
+  
+  /** \details
+    Returns the Company Name (Open Design Alliance Inc. ("Open Design")).
+  */
+  virtual const OdString getCompanyName() const = 0;
+  /** \details
+    Returns the Copyright Message (Copyright � yyyy, Open Design Alliance Inc. ("Open Design")).
+  */
+  virtual const OdString getCopyright() const = 0;
+
+  /** \details
+    Returns the Library Build Comments.
+  */
+  virtual const OdString getBuildComments() const = 0;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _LIBRARYINFO_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLight.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLight.h
new file mode 100755
index 0000000..8678703
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLight.h
@@ -0,0 +1,185 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_DB_LIGHT__
+#define __OD_DB_LIGHT__
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "Gi/GiLightTraits.h"
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLight : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLight);
+
+  OdDbLight();
+
+  enum PhysicalIntensityMethod
+  {
+    kPeakIntensity = 0,
+    kFlux,
+    kIlluminance
+  };
+
+  enum LampColorType
+  {
+    kKelvin = 0,
+    kPreset
+  };
+
+  enum LampColorPreset
+  {
+    kD65White = 0,
+    kFluorescent,
+    kCoolWhite,
+    kWhiteFluorescent,
+    kDaylightFluorescent,
+    kIncandescent,
+    kXenon,
+    kHalogen,
+    kQuartz,
+    kMetalHalide,
+    kMercury,
+    kPhosphorMercury,
+    kHighPressureSodium,
+    kLowPressureSodium,
+    kCustom
+  };
+
+  enum GlyphDisplayType
+  {
+    kGlyphDisplayAuto = 0,
+    kGlyphDisplayOn,
+    kGlyphDisplayOff
+  };
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual OdResult subErase(bool erasing);
+  virtual void subHighlight(bool bDoIt = true, const OdDbFullSubentPath* pSubId = 0, bool highlightAll = false) const;
+
+  virtual DrawableType drawableType() const;
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+
+  OdString name() const;
+  void setName(OdString name);
+
+  OdGiDrawable::DrawableType lightType() const;
+  void setLightType(OdGiDrawable::DrawableType type);
+
+  bool isOn() const;
+  void setOn(bool value);
+
+  bool isPlottable() const;
+  void setIsPlottable(bool plot);
+
+  OdCmColor lightColor() const;
+  void setLightColor(const OdCmColor& color);
+
+  double intensity() const;
+  void setIntensity(double intensity);
+
+  void setShadowParameters(const OdGiShadowParameters& params);
+  const OdGiShadowParameters &shadowParameters() const;
+
+  void setLightAttenuation(const OdGiLightAttenuation& params);
+  const OdGiLightAttenuation &lightAttenuation() const;
+
+  void setPosition(const OdGePoint3d& pos);
+  OdGePoint3d position() const;
+
+  OdGePoint3d targetLocation() const;
+  void setTargetLocation(const OdGePoint3d& newVal);
+
+  void setHotspotAndFalloff(double hotspot, double falloff);
+  double hotspotAngle() const;
+  double falloffAngle() const;
+
+  OdGeVector3d lightDirection() const;
+  void setLightDirection(const OdGeVector3d& lightvec);
+
+  // Photometric properties
+
+  PhysicalIntensityMethod physicalIntensityMethod() const;
+  void setPhysicalIntensityMethod(PhysicalIntensityMethod physIntMethod);
+
+  double physicalIntensity() const;
+  void setPhysicalIntensity(double physIntensity);
+
+  double illuminanceDistance() const;
+  void setIlluminanceDistance(double illumDistance);
+
+  LampColorType lampColorType() const;
+  void setLampColorType(LampColorType colorType);
+
+  double lampColorTemp() const;
+  void setLampColorTemp(double colorTemp);
+
+  LampColorPreset lampColorPreset() const;
+  void setLampColorPreset(LampColorPreset colorPreset);
+
+  OdGiColorRGB lampColorRGB() const;
+  void setLampColorRGB(const OdGiColorRGB &color);
+  OdCmColor resultingColor() const;
+
+  OdString webFile() const;
+  void setWebFile(const OdString &webFile);
+
+  OdGeVector3d webRotation() const;
+  void setWebRotation(const OdGeVector3d &rotation);
+
+  bool hasTarget() const;
+  void setHasTarget(bool bTarget);
+
+  GlyphDisplayType glyphDisplay() const;
+  void setGlyphDisplay(GlyphDisplayType type);
+};
+
+typedef OdSmartPtr<OdDbLight> OdDbLightPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_DB_LIGHT__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLine.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLine.h
new file mode 100755
index 0000000..8fb8919
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLine.h
@@ -0,0 +1,472 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_LINE_
+#define _OD_DB_LINE_
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the line object (Line entity) in the database. This class 
+  inherits the base functionality of entities. A line is a straight segment in world space.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_line_sample.html, Example of Working with the Line Object>
+
+  \sa
+  <link db_line.html, Working with Lines>
+
+  OdDbXline, OdDbRay, OdDbMline classes
+*/
+class TOOLKIT_EXPORT OdDbLine : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLine);
+
+  /** \details
+    Builds an instance of the line object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_line_overview.html, Overview of Lines>
+  */
+  OdDbLine();
+
+
+  /** \details
+    Returns the WCS coordinates of the start point of the line (DXF 10) as 
+    three-dimensional point instance.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::setStartPoint(), OdDbLine::endPoint() method
+  */
+  OdGePoint3d startPoint() const;
+
+
+  /** \details
+    Sets the start point of the line (DXF 10) in WCS. The initial value is (0,0,0) by default.
+    
+    \param geStartPoint [in]  Three-dimensional point instance to set the start point.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::startPoint(), OdDbLine::setEndPoint() methods
+  */
+  void setStartPoint( const OdGePoint3d& geStartPoint );
+
+
+  /** \details
+    Returns the WCS coordinates of the end point of the line (DXF 11) as 
+    three-dimensional point instance.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::setEndPoint(), OdDbLine::startPoint() methods
+  */
+  OdGePoint3d endPoint() const;
+
+
+  /** \details
+    Sets the end point of the line (DXF 11) in WCS. The initial value is (0,0,0) by default.
+    
+    \param geEndPoint [in]  Three-dimensional point instance to set the end point.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::endPoint(), OdDbLine::setStartPoint() methods
+  */
+  void setEndPoint( const OdGePoint3d& geEndPoint );
+
+
+  /** \details
+    Returns the thickness of the line entity (DXF 39) in drawing units. Thickness is the extrusion 
+    length along the normal. A positive value defines the thickness to be drawn along the normal 
+    direction. A negative value defines the thickness to be drawn in the opposite direction from  
+    the normal. A zero value defines a line without thickness.
+    
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::setThickness() method
+  */
+  double thickness() const;
+
+
+  /** \details
+    Sets the thickness of the line entity (DXF 39) in drawing units. Thickness is the 
+    extrusion length along the normal. A positive value extrudes along the normal. 
+    A negative value extrudes opposite from the normal. A zero value defines a line  
+    without thickness. The initial value is zero by default.
+
+    \param vThickness [in]  Thickness as a Double value.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::thickness() method
+  */
+  void setThickness( double vThickness );
+
+
+  /** \details
+    Returns the WCS unit vector which is the normal to the plane of the line entity (DXF 210).
+    The normal defines the orientation of the line plane in world space.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::setNormal() method
+  */
+  OdGeVector3d normal() const;
+
+
+  /** \details
+    Sets the WCS normal to the plane of the line entity (DXF 210). The normal defines 
+    the orientation of the line plane in world space. The initial value is (0,0,1) by default.
+
+    \param geVector [in]  Three-dimensional vector instance to set the normal.
+
+    \remarks
+    This method automatically converts the specified vector to the unit vector.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_specific.html, Specific Line Properties>
+
+    OdDbLine::normal() method
+  */
+  void setNormal( const OdGeVector3d& geVector );
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+  
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+
+  /** \details
+    Determines whether the line entity is planar as a Boolean value and returns True.
+    This method is inherited from the OdDbEntity class.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line.html, Working with Lines>
+
+    OdDbLine::getPlane(), OdDbEntity::isPlanar() methods
+  */
+  virtual bool isPlanar() const;
+
+
+  /** \details
+    Gets an arbitrary plane passed through the line entity. This method is inherited from the  
+    OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the plane parameters as 
+                a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type 
+                    (returns kLinear - arbitrary plane).
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line.html, Working with Lines>
+
+    OdDbLine::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  /** \details
+    Gets the start parameter value. The start parameter equals a zero for lines.
+    Parameter is a distance measured from the start point in drawing units.
+
+    \param startParam [out]  Reference to a variable in which this method must save the start    
+                   parameter value as a Double value.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getStartParam( double& startParam ) const;
+
+
+  /** \details
+    Gets the end parameter value. The end parameter equals the line length.
+    Parameter is a distance measured from the start point in drawing units.
+
+    \param endParam [out]  Reference to a variable in which this method must save the end    
+                 parameter value as a Double value.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getEndParam( double& endParam ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the start point on the line for which the parameter 
+    equals zero.
+
+    \param startPoint [out]  Reference to a variable in which this method must save the start 
+                   point as three-dimensional point instance.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getStartPoint( OdGePoint3d& startPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the end point on the line for which the parameter 
+    equals the line length.
+
+    \param endPoint [out]  Reference to a variable in which this method must save the end  
+                 point as three-dimensional point instance.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getEndPoint( OdGePoint3d& endPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the point on the line at the specified parameter value.
+    Parameter is a distance measured from the start point in drawing units.
+    
+    \param param [in]  Parameter value specifying the point on the line as a Double value. 
+    \param pointOnCurve [out]  Reference to a variable in which this method must save the 
+                     three-dimensional point instance corresponding to the parameter.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getPointAtParam( double param, OdGePoint3d& pointOnCurve ) const;
+
+
+  /** \details
+    Computes the parameter at the point placed on the line. Parameter is a distance
+    measured from the start point in drawing units.
+
+    \param pointOnCurve [in]  Three-dimensional point instance which specifies the point on 
+                     the line. 
+    \param param [out] Reference to a variable in which this method must save the parameter   
+              value as a Double value.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getParamAtPoint( const OdGePoint3d& pointOnCurve, double& param ) const;
+
+
+  /** \details
+    Computes the distance along the line measured from the start point in drawing units   
+    at the specified parameter.
+
+    \param param [in]  Parameter value specifying the point on the line as a Double value. 
+    \param dist  [out] Reference to a variable in which this method must save the distance value 
+              as a Double value.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+
+  /** \details
+    Computes the parameter at the distance along the line. Parameter is a distance 
+    measured from the start point in drawing units.
+
+    \param dist [in]   Distance value along the line as a Double value in drawing units. 
+    \param param [out]  Reference to a variable in which this method must save the parameter value  
+              as a Double value.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+
+  /** \details
+    Computes the first derivative for the specified parameter of the line entity and returns
+    the three-dimensional vector instance. The first derivative is constant for any point of 
+    the line.
+
+    \param param [in]  Parameter value specifying the point on the line as a Double value. 
+    \param firstDeriv [out]  Reference to a variable in which this method must save the first   
+                   derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getFirstDeriv( double param, OdGeVector3d& firstDeriv ) const;
+
+
+  /** \details
+    Computes the second derivative for the specified parameter of the line entity and returns 
+    the three-dimensional vector instance. The second derivative is constant for any point 
+    of the line.
+
+    \param param [in]  Parameter value specifying the point on the line as a Double value. 
+    \param secondDeriv [out]  Reference to a variable in which this method must save the second  
+                    derivative as three-dimensional vector instance.
+
+    \sa
+    <link db_line_sample.html, Example of Working with the Line Object>
+
+    \sa
+    <link db_line_compute.html, Computed Line Properties>
+  */
+  virtual OdResult getSecondDeriv( double param, OdGeVector3d& secondDeriv ) const;
+
+
+  /** \details
+    Returns a zero for the line entity.
+  */
+  virtual OdResult getArea( double& area ) const;
+
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  /*
+     void getOffsetCurvesGivenPlaneNormal(
+       const OdGeVector3d& normal, double offsetDist,
+       OdRxObjectPtrArray& offsetCurves) const;
+  */
+
+  OdGeMatrix3d getEcs( ) const;
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+  virtual OdResult reverseCurve();
+};
+
+/** \details
+  The typified smart pointer for the line object (Line entity). This template class 
+  is specialization of the OdSmartPtr class for the OdDbLine class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbLine> OdDbLinePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTable.h
new file mode 100755
index 0000000..6700a0c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTable.h
@@ -0,0 +1,203 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBLINETYPETABLE_INCLUDED
+#define _ODDBLINETYPETABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTable.h"
+
+class OdDbLinetypeTableRecord;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements bidirectional iterator for instances of the /linetype record/ object
+  within the /linetype table/ object.
+
+  Library: TD_Db
+
+  \sa
+  <link db_linetype_sample_table.html, Example of Working with the Linetype Table Object>
+
+  \sa
+  <link db_linetype_iterate.html, Iterating through Linetypes>
+
+  OdDbSymbolTableIterator class
+*/
+class TOOLKIT_EXPORT OdDbLinetypeTableIterator : public OdDbSymbolTableIterator
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbLinetypeTableIterator);
+
+protected:
+  /** \details
+    Builds an instance of the /linetype iterator/ object.
+    
+    \remarks
+    Use the OdDbLinetypeTable::newIterator() method instead it.
+  */
+  OdDbLinetypeTableIterator();
+  OdDbLinetypeTableIterator( OdDbSymbolTableIteratorImpl* pImpl );
+};
+
+/** \details
+  The typified smart pointer for the /linetype iterator/ object. This template class is specialization 
+  of the OdSmartPtr class for the OdDbLinetypeTableIterator object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbLinetypeTableIterator> OdDbLinetypeTableIteratorPtr;
+
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /linetype table/ object, which represents a container for storing 
+  and accessing of /linetype record/ objects in the database. This class inherits the base 
+  functionality of predefined tables.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_linetype_sample_table.html, Example of Working with the Linetype Table Object>
+
+  <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+  \sa
+  <link db_linetype.html, Working with Linetypes>
+
+  OdDbLinetypeTableRecord class
+*/
+class TOOLKIT_EXPORT OdDbLinetypeTable : public OdDbSymbolTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLinetypeTable);
+
+  /** \details
+    Builds an instance of the /linetype table/ object.
+    
+    Applications typically will not use this constructor, insofar as the database object 
+    creates own instance of the linetype table. The /linetype table/ object exists in the  
+    database a prior.
+  */
+  OdDbLinetypeTable();
+
+
+  /** \details
+    Gets a /linetype record/ object from the /linetype table/ object. This method is inherited
+    from the OdDbSymbolTable class which is base class for all predefined tables. For more details, 
+    see: OdDbSymbolTable::getAt() method.
+  */
+  virtual OdDbObjectId getAt( const OdString& recordName, 
+                              bool getErasedRecord = false) const;
+  OdDbSymbolTableRecordPtr getAt( const OdString& recordName,
+                                  OdDb::OpenMode openMode, 
+                                  bool getErasedRecord = false) const;
+
+  /** \details
+    Checks whether the /linetype table/ object contains the /linetype record/ object specified by 
+    the name or Object ID. This method is inherited from the OdDbSymbolTable class which is base 
+    class for all predefined tables. For more details, see: OdDbSymbolTable::has() method.
+  */
+  bool has( const OdString& recordName ) const;
+  bool has( const OdDbObjectId& objectId ) const;
+
+
+  /** \details
+    Adds an instance of the /linetype record/ object in the container of the /linetype table/ object.
+    This method is inherited from the OdDbSymbolTable class which is base class for all predefined 
+    tables. For more details, see: OdDbSymbolTable::add() method.
+  */
+  virtual OdDbObjectId add( OdDbSymbolTableRecord* pRecord );
+
+
+  /** \details
+    Creates an instance of the /linetype iterator/ object which is the bidirectional iterator for 
+    traversing through /linetype record/ objects in the container of the /linetype table/ object.
+    This method is inherited from the OdDbSymbolTable class which is base class for all predefined 
+    tables. For more details, see: OdDbSymbolTable::newIterator() method.
+  */
+  OdDbSymbolTableIteratorPtr newIterator( 
+    bool atBeginning = true, 
+    bool skipDeleted = true) const;
+
+
+  /** \details
+    Returns the Object ID of the predefined linetype record object assigned as "ByLayer" linetype 
+    in the database.
+
+    \sa
+    <link db_linetype_collection.html, Organization of Linetypes>
+
+    OdDbDatabase::getLinetypeByLayerId(), OdDbDatabase::getLinetypeByBlockId(), 
+    OdDbDatabase::getLinetypeContinuousId() methods
+  */
+  const OdDbObjectId& getLinetypeByLayerId() const;
+
+  /** \details
+    Returns the Object ID of the predefined linetype record object assigned as "ByBlock" linetype 
+    in the database.
+
+    \sa
+    <link db_linetype_collection.html, Organization of Linetypes>
+
+    OdDbDatabase::getLinetypeByLayerId(), OdDbDatabase::getLinetypeByBlockId(), 
+    OdDbDatabase::getLinetypeContinuousId() methods
+  */
+  const OdDbObjectId& getLinetypeByBlockId() const;
+
+
+  virtual OdResult subGetClassID( void* pClsid ) const;
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );
+
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;
+
+  virtual void dxfOut( OdDbDxfFiler* pFiler ) const;
+
+  /*
+    virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+    virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  */
+};
+
+/** \details
+  The typified smart pointer for the /linetype table/ object. This template class is specialization 
+  of the OdSmartPtr class for the OdDbLinetypeTable object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbLinetypeTable> OdDbLinetypeTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBLINETYPETABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTableRecord.h
new file mode 100755
index 0000000..6076f2e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinetypeTableRecord.h
@@ -0,0 +1,602 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODDBLINETYPETABLERECORD_INCLUDED
+#define _ODDBLINETYPETABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+
+class OdGeVector2d;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /linetype record/ object, which represents a linetype in the database. 
+  This class inherits the base functionality of named records. 
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_linetype_sample_table.html, Example of Working with the Linetype Table Object>
+
+  <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+  <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+  \sa
+  <link db_linetype.html, Working with Linetypes>
+
+  OdDbLinetypeTable class
+*/
+class TOOLKIT_EXPORT OdDbLinetypeTableRecord : public OdDbSymbolTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLinetypeTableRecord);
+
+  /** \details
+    Builds an instance of the /linetype record/ object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_linetype_add_name.html, Adding and Naming Linetypes>
+  */
+  OdDbLinetypeTableRecord();
+
+
+  /** \details
+    Returns the simple ASCII representation of the linetype (DXF 3). It is a comment or series 
+    of underscores, dots, dashes, and spaces to show a representation of the linetype.
+
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_properties.html, Specific Properties of Linetypes>
+
+    OdDbLinetypeTableRecord::setComments() method
+  */
+  const OdString comments() const;
+
+
+  /** \details
+    Sets the simple ASCII representation or comment for the /linetype record/ object (DXF 3).
+    It can be a comment or series of underscores, dots, dashes, and spaces to show a representation 
+    of the linetype. The initial value is an empty string by default.
+
+    \param sComment [in]  Comment as an arbitrary string up to 47 characters.
+
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_properties.html, Specific Properties of Linetypes>
+
+    OdDbLinetypeTableRecord::comments() method
+  */
+  void setComments( const OdString& sComment );
+
+
+  /** \details
+    Determines whether or not the alignment is scaled to fit (DXF 72) and returns True if the 
+    alignment is scaled to fit or False if the alignment is not scaled to fit.
+    
+    \remarks
+    When DXF 72 code contains the letter 'S', the alignment is scaled to fit (True). 
+    When DXF 72 code contains the letter 'A', the alignment is not scaled to fit (False).
+
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_properties.html, Specific Properties of Linetypes>
+
+    OdDbLinetypeTableRecord::setIsScaledToFit() method
+  */
+  bool isScaledToFit() const;
+
+
+  /** \details
+    Sets the alignment scaling to fit for the linetype (DXF 72).  
+    
+    \param bScaleToFit [in]  True - to set scaled to fit or False - to set no scaled to fit. 
+
+    \remarks
+    When DXF 72 code contains the letter 'S', the alignment is scaled to fit (True). 
+    When DXF 72 code contains the letter 'A', the alignment is not scaled to fit (False).
+
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_properties.html, Specific Properties of Linetypes>
+
+    OdDbLinetypeTableRecord::isScaledToFit() method
+  */
+  void setIsScaledToFit( bool bScaleToFit );
+
+
+  /** \details
+    Returns the total length of the linetype pattern in drawing units (DXF 40). This length is 
+    a sum of all dashes forming the linetype pattern.
+    
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_properties.html, Specific Properties of Linetypes>
+
+    OdDbLinetypeTableRecord::setPatternLength() method
+  */
+  double patternLength() const;
+
+
+  /** \details
+    Sets the total length of the linetype pattern in drawing units (DXF 40). This length must  
+    specify the sum of all dashes forming the linetype pattern. If the pattern length is set 
+    to zero, the /linetype record/ object automatically recalculates the pattern length. The 
+    initial value is zero by default.
+    
+    \param vLength [in]  Pattern length as a Double value.
+    
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_properties.html, Specific Properties of Linetypes>
+
+    OdDbLinetypeTableRecord::patternLength() method
+  */
+  void setPatternLength( double vLength );
+
+
+  /** \details
+    Returns the number of dashes in the linetype (DXF 73). If the number of dashes is a zero, 
+    the linetype defines a solid line. 
+
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setNumDashes() method
+  */
+  int numDashes() const;
+
+
+  /** \details
+    Sets the number of dashes for the linetype (DXF 73). If the number of dashes is set to zero, 
+    the linetype defines a solid line. If the linetype pattern contains dashes, it must contain 
+    at least two of them. The initial value is zero by default.
+
+    \param numberDashes [in]  Number of dashes [0,2..12].
+
+    \sa
+    <link db_linetype_sample_record.html, Example of Working with the Linetype Record Object>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::numDashes() method
+  */
+  void setNumDashes( int numberDashes );
+
+
+  /** \details
+    Returns the length of the linetype dash at the specified index in drawing units (DXF 49). 
+    If the length value is positive, the dash is drawn. If a length value is negative, the dash 
+    is not drawn (appears as a space). If the length value is zero, a point is drawn (appears 
+    as a dot).
+   
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setDashLengthAt() method
+  */
+  double dashLengthAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the length of the dash at the specified index in drawing units (DXF 49). A positive
+    value specifies the dash which is drawn (appears as a line). A negative value specifies 
+    the dash which is not drawn (appears as a space). A zero values specifies the dash which
+    is a point (appears as a dot). The initial value is zero by default.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param dashLength [in]  Dash length as a Double value.
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::dashLengthAt() method
+  */
+  void setDashLengthAt( int dashIndex, double dashLength );
+
+
+  /** \details
+    Returns the Object ID associated with an instance of the /text style record/ object 
+    (OdDbTextStyleTableRecord class) which specifies the characteristics of the shape 
+    inclusion inserted in the linetype dash at the specified index (DXF 340).  
+      
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \remarks
+    Returns OdDb::kNull if there is no shape or text at the specified index.
+    
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setShapeStyleAt() method
+  */
+  OdDbObjectId shapeStyleAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the Object ID associated with an instance of the /text style record/ object 
+    (OdDbTextStyleTableRecord class) for the linetype dash at the specified index as the
+    text style which specifies the characteristics of the shape inclusion inserted in 
+    in this linetype dash (DXF 340). The initial value is OdDb::kNull by default.
+      
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param idTextStyle [in]  Object ID of the /text style record/ object to be set.
+
+    \remarks
+    When a dash does not have an inclusion, the text style property is not applicable. 
+    When the shape code is zero and the text string is an empty, the dash does not contain 
+    an inclusion and a text style is not used. When either the shape code is non-zero or 
+    the text string is non-empty, the text style property is applicable and must store the 
+    Object ID of an existing text style.
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::shapeStyleAt() method
+  */
+  void setShapeStyleAt( int dashIndex, OdDbObjectId idTextStyle );
+
+
+  /** \details
+    Returns the code of the shape included in the dash at the specified index as an inclusion  
+    inside the linetype pattern (DXF 75). When the shape code is zero, the dash does not contain  
+    a shape inclusion. 
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setShapeNumberAt() method
+  */
+  OdUInt16 shapeNumberAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the code of the shape as an inclusion in the dash at the specified index inside  
+    the linetype pattern (DXF 75). A zero value removes the shape inclusion. The initial
+    value is zero by default.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param shapeNumber [in]  Shape code to be set as an Integer value.
+
+    \remarks
+    Applying a shape inclusion requires the availability of the .shx file which must be 
+    previously loaded and the anonymous text style that defines the shape parameters. 
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::shapeNumberAt() method
+  */
+  void setShapeNumberAt( int dashIndex, OdUInt16 shapeNumber );
+
+
+  /** \details
+    Returns the text string included in the dash at the specified index as an inclusion  
+    inside the linetype pattern (DXF 9). When the string is empty, the dash does not   
+    contain a text inclusion.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setTextAt() method
+  */
+  OdString textAt(int dashIndex) const;
+
+
+  /** \details
+    Sets the text string as an inclusion in the dash at the specified index inside the  
+    linetype pattern (DXF 9). An empty string removes the text inclusion. The initial
+    value is an empty string by default.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param textString [in]  Text string to be set.
+
+    \remarks
+    Applying a text inclusion requires the availability of a text style that defines the 
+    appearance and parameters of the text inside the dash.
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::textAt() method
+  */
+  void setTextAt( int dashIndex, const OdString& textString );
+
+
+  /** \details
+    Returns the inclusion offset inside the dash at the specified index (DXF 44, 45). This
+    offset defines the two-dimensional displacement to the insertion point of an inclusion 
+    relative to the end of the current dash that contains the text or shape as an inclusion. 
+    This method returns the offset as an instance of the two-dimensional vector object.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setShapeOffsetAt() method
+  */
+  OdGeVector2d shapeOffsetAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the inclusion offset inside the dash at the specified index (DXF 44, 45). This
+    offset specifies the two-dimensional displacement to the insertion point of an inclusion 
+    relative to the end of the current dash that contains the text or shape.
+    
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param shapeOffset [in]  Offset as an instance of the two-dimensional vector object.
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::shapeOffsetAt() method
+  */
+  void setShapeOffsetAt( int dashIndex, const OdGeVector2d& shapeOffset );
+
+
+  /** \details
+    Returns the factor by which the text or shape scales within the dash at the specified
+    index (DXF 46). If the scale factor is less than 1.0, the inclusion is condensed. If 
+    the scale factor is greater than 1.0, the inclusion is expanded. If the scale factor 
+    equals 1.0, the height of the associated text style defines the inclusion size.
+      
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setShapeScaleAt() method
+  */
+  double shapeScaleAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the factor by which the text or shape scales within the dash at the specified
+    index (DXF 46). A value less than 1.0 condenses the inclusion. A value greater than 
+    1.0 expandes the inclusion. A value 1.0 defines inclusion size specified the associated 
+    text style.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param shapeScale [in]  Scale factor as a positive non-zero Double value.
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::shapeScaleAt() method
+  */
+  void setShapeScaleAt( int dashIndex, double shapeScale );
+
+
+  /** \details
+    Returns the angle on which the inclusion (shape or text) is rotated within the dash  
+    at the specified index (DXF 50) counterclockwise relative to the direction vector of  
+    the linetype in the range -2PI to 2PI radians. If the angle is positive, the inclusion 
+    is rotated counterclockwise. If the angle is negative, the inclusion is rotated clockwise.
+    If the angle is zero, the direction of the linetype and inclusion are the same.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setShapeRotationAt() method
+  */
+  double shapeRotationAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the angle on which the inclusion (shape or text) is rotated within the dash  
+    at the specified index (DXF 50) counterclockwise relative to the direction vector of  
+    the linetype in the range -2PI to 2PI radians. A positive angle rotates the inclusion 
+    counterclockwise. A negative angle rotates the inclusion clockwise. A zero angle indicates 
+    that the direction of the linetype and inclusion are the same. If an absolute angle value 
+    is greater than 2PI, it converts to the range �2PI. The initial value is zero by default.
+      
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param shapeRotation [in]  Rotation angle as a Double value in radians.
+    
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::shapeRotationAt() method
+  */
+  void setShapeRotationAt( int dashIndex, double shapeRotation );
+
+
+  /** \details
+    Determines whether the inclusion (text or shape) is UCS-oriented inside the dash at the 
+    specified index (DXF 74, bit 0x01) and returns True if the inclusion is oriented relative 
+    to the current UCS or False if the inclusion is oriented relative to the line within which 
+    it is embedded. 
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setShapeIsUcsOrientedAt() method
+  */
+  bool shapeIsUcsOrientedAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the UCS-orientation of the inclusion (text or shape) inside the dash at the specified 
+    index (DXF 74, bit 0x01) either relative to the current UCS (byUCS) or relative to the line  
+    within which it is embedded (byLine). The initial value is False (byLine) by default.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param isUcsOriented [in]  True - to orient the inclusion byUCS, or False - to orient the inclusion 
+                      byLine.
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::shapeIsUcsOrientedAt() method
+  */
+  void setShapeIsUcsOrientedAt( int dashIndex, bool isUcsOriented );
+
+  /** \details
+    Determines whether the inclusion (text or shape) is Upright-oriented inside the dash at the 
+    specified index (DXF 74, bit 0x08) and returns True if the inclusion is oriented upright.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::setShapeIsUprightAt() method
+  */
+  bool shapeIsUprightAt( int dashIndex ) const;
+
+
+  /** \details
+    Sets the Upright orientation of the inclusion (text or shape) inside the dash at the specified 
+    index (DXF 74, bit 0x08). The initial value is False by default.
+
+    \param dashIndex [in]  Dash index as an Integer value in range [0 <= dashIndex < numDashes].
+    \param isUpright [in]  True - to orient the inclusion Upright.
+
+    \sa
+    <link db_linetype_sample_dash.html, Example of Working with the Linetype Dash>
+
+    \sa
+    <link db_linetype_pattern.html, Working with the Linetype Pattern>
+
+    OdDbLinetypeTableRecord::shapeIsUprightAt() method
+  */
+  void setShapeIsUprightAt( int dashIndex, bool isUpright );
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );
+
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields( OdDbDxfFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields_R12( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields_R12( OdDbDxfFiler* pFiler ) const;
+
+  virtual OdResult subGetClassID( void* pClsid ) const;
+
+  virtual OdGiDrawable* drawable();
+
+  virtual OdUInt32 subSetAttributes( OdGiDrawableTraits* pTraits ) const;
+  
+  virtual OdResult subErase( bool erasing );
+};
+
+/** \details
+  The typified smart pointer for the /linetype record/ object. This template class is 
+  specialization of the OdSmartPtr class for the OdDbLinetypeTableRecord object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbLinetypeTableRecord> OdDbLinetypeTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBLINETYPETABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedData.h
new file mode 100755
index 0000000..d9acea4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedData.h
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_DBLINKEDDATA_H
+#define OD_DBLINKEDDATA_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+	/** \details
+    Work-in-progress. This class represents LinkedData objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+	<group OdDb_Classes> 
+	*/
+class TOOLKIT_EXPORT OdDbLinkedData : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLinkedData);
+
+  OdDbLinkedData();
+
+  // virtual void clear(void);
+  // virtual bool isEmpty(void) const;
+
+  virtual const OdString name (void) const;
+  virtual void setName(const OdString& name);
+  virtual const OdString description(void) const;
+  virtual void setDescription(const OdString& description);
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbLinkedData> OdDbLinkedDataPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBLINKEDDATA_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedTableData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedTableData.h
new file mode 100755
index 0000000..ea952eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLinkedTableData.h
@@ -0,0 +1,427 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_DBLINKEDTABLEDATA_H
+#define OD_DBLINKEDTABLEDATA_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "DbTableStyle.h"
+#include "DbLinkedData.h"
+#include "DbDataLink.h"
+#include "DbField.h"
+
+/** \details
+    Work-in-progress. This class represents LinkedTableData objects in an OdDbDatabase instance.
+    This enables linking to Excel data.
+
+    \sa
+    TD_Db
+
+	<group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbLinkedTableData : public OdDbLinkedData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLinkedTableData);
+
+  OdDbLinkedTableData();
+
+  virtual void setSize(
+    OdInt32 nRows, 
+    OdInt32 nCols);
+
+  virtual OdInt32 numColumns() const;
+
+  virtual OdString getColumnName(
+    OdInt32 nIndex) const;
+
+  virtual void setColumnName(
+    OdInt32 nIndex, 
+    const OdString name);
+
+  virtual OdInt32 appendColumn(
+    OdInt32 nNumCols);
+
+  virtual OdInt32 insertColumn(
+    OdInt32 nIndex, 
+    OdInt32 nNumCols);
+
+  virtual void deleteColumn(
+    OdInt32 nIndex, 
+    OdInt32 nNumColsToDelete);
+
+  virtual OdInt32 numRows() const;
+
+  virtual bool canInsert(
+    OdInt32 nIndex, 
+    bool bRow) const;
+
+  virtual OdInt32 appendRow(
+    OdInt32 nNumRows);
+
+  virtual OdInt32 insertRow(
+    OdInt32 nIndex, 
+    OdInt32 nNumRows);
+
+  virtual bool canDelete(
+    OdInt32 nIndex, 
+    OdInt32 nCount, 
+    bool bRow) const;
+
+  virtual void deleteRow(
+    OdInt32 nIndex, 
+    OdInt32 nNumRowsToDelete);
+
+  virtual bool isContentEditable(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdDb::CellState cellState(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual void setCellState(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::CellState nCellState);
+
+  virtual OdString getToolTip(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual void setToolTip(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdString& sToolTip);
+
+  virtual OdInt32 getCustomData(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual void setCustomData(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nData);
+
+  virtual OdValue getCustomData(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdString& sKey ) const;
+
+  virtual void setCustomData(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdString& sKey, 
+    const OdValue* pData);
+
+  virtual OdUInt32 numContents(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdUInt32 createContent(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nIndex);
+  
+  virtual void moveContent(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdInt32 nFromIndex, 
+    OdInt32 nToIndex);
+
+  virtual void deleteContent(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent);
+
+  virtual void deleteContent(
+    OdInt32 nRow, 
+    OdInt32 nCol);
+
+  virtual void deleteContent(
+    const OdCellRange& range);
+
+  virtual OdDb::CellContentType contentType(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdDb::CellContentType contentType(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent) const;
+
+  virtual void getDataType(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdValue::DataType& nDataType, 
+    OdValue::UnitType& nUnitType) const;
+
+  virtual void getDataType(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent,
+    OdValue::DataType& nDataType, 
+    OdValue::UnitType& nUnitType) const;
+
+  virtual void setDataType(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdValue::DataType nDataType, 
+    OdValue::UnitType nUnitType);
+
+  virtual void setDataType(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent,
+    OdValue::DataType nDataType, 
+    OdValue::UnitType nUnitType);
+
+  virtual OdString dataFormat(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdString dataFormat(
+    OdInt32 nRow, 
+    OdInt32 nCol,
+    OdUInt32 nContent) const;
+
+  virtual void setDataFormat(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdString sFormat);
+
+  virtual void setDataFormat(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent,
+    const OdString sFormat);
+
+  virtual OdValue getValue(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdValue getValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    OdValue::FormatOption nOption) const;
+
+  virtual void setValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdValue& value);
+
+  virtual void setValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdValue& value);
+
+  virtual void setValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdValue& value,
+    OdValue::ParseOption nOption);
+
+  virtual OdString getText(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdString getText(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent) const;
+
+  virtual OdString getText(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    OdValue::FormatOption nOption) const;
+
+  virtual void setText(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdString& sText);
+
+  virtual void setText(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdString& sText);
+
+  virtual bool hasFormula(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent) const;
+
+  virtual OdString getFormula(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent) const;
+
+  virtual void setFormula(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdString sFormula);
+
+  virtual OdDbObjectId getFieldId(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdDbObjectId getFieldId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent) const;
+
+  virtual void setFieldId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdDbObjectId& idField);
+
+  virtual void setFieldId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdDbObjectId& idField);
+
+  virtual OdDbFieldPtr getField(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent,
+    OdDb::OpenMode mode) const;
+
+  virtual OdDbObjectId getBlockTableRecordId(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual OdDbObjectId getBlockTableRecordId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent) const;
+
+  virtual void setBlockTableRecordId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdDbObjectId& idBTR);
+
+  virtual void setBlockTableRecordId(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdDbObjectId& idBTR);
+ 
+  virtual OdString getBlockAttributeValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdDbObjectId& idAttDef) const;
+  
+  virtual OdString getBlockAttributeValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdDbObjectId& idAttDef) const;
+  
+  virtual void setBlockAttributeValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdDbObjectId& idAttDef, 
+    const OdString sAttValue);
+  
+  virtual void setBlockAttributeValue(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdUInt32 nContent, 
+    const OdDbObjectId& idAttDef, 
+    const OdString sAttValue);
+
+  virtual bool isLinked(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+  virtual OdDbObjectId getDataLink(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+  virtual OdDbDataLinkPtr getDataLink(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    OdDb::OpenMode mode) const;
+  virtual OdInt32 getDataLink(
+    const OdCellRange& pRange, 
+    OdDbObjectIdArray& dataLinkIds) const;
+  virtual void setDataLink(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdDbObjectId& idDataLink,
+    bool bUpdate);
+  virtual void setDataLink(
+    const OdCellRange& range, 
+    const OdDbObjectId& idDataLink,
+    bool bUpdate);
+  virtual OdCellRange getDataLinkRange(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+  virtual void removeDataLink(
+    OdInt32 nRow, 
+    OdInt32 nCol);
+  virtual void removeDataLink(void);
+
+  virtual void updateDataLink(
+    OdInt32 nRow,
+    OdInt32 nCol, 
+    OdDb::UpdateDirection nDir,
+    OdDb::UpdateOption nOption);
+  virtual void updateDataLink(
+    OdDb::UpdateDirection nDir, 
+    OdDb::UpdateOption nOption);
+
+  virtual void clear();
+  virtual void copyFrom(
+    const OdRxObject* pSource);
+  virtual void copyFrom(const OdDbLinkedTableData* pSrc,
+    OdDb::TableCopyOption nOption);
+  virtual void copyFrom(const OdDbLinkedTableData* pSrc, 
+    OdDb::TableCopyOption nOption, 
+    const OdCellRange& srcRange, 
+    const OdCellRange& targetRange,
+    OdCellRange* pNewTargetRange);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbLinkedTableData> OdDbLinkedTableDataPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBLINKEDTABLEDATA_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftOptions.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftOptions.h
new file mode 100755
index 0000000..43f3e48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftOptions.h
@@ -0,0 +1,400 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbLoftOptions_h_Included_
+#define _DbLoftOptions_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbEntity.h"
+#include "ModelerGeometryCreator.h"
+
+class OdDbLoftOptionsImpl;
+
+/** \details
+  Class for setting options used for creating lofted surfaces and lofted solids (by calling OdDbLoftedSurface::createLoftedSurface() or OdDb3dSolid::createLoftedSolid() methods). 
+  Loft options are used to control the shape of the resulting surface or solid object. 
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLoftOptions
+{
+public:
+  /** \details 
+    Creates an OdDbLoftOptions object. 
+  */
+  OdDbLoftOptions();
+  
+  /** \details 
+    Copy constructor for the OdDbLoftOptions class.
+  */
+  OdDbLoftOptions(const OdDbLoftOptions& src);
+  
+  /** \details 
+    Destroys the OdDbLoftOptions object. 
+  */
+  ~OdDbLoftOptions();
+
+  /** \details 
+    Assigns to the OdDbLoftOptions object another object (assignment operator). 
+  
+    \param rhs [in] Another OdDbLoftOptions object to assign.
+  */
+  OdDbLoftOptions& operator = (const OdDbLoftOptions& rhs);
+
+  /** \details
+    Enumeration for specifying plane normal lofting regimes.
+  */
+  enum NormalOption 
+  {
+    /** Plane normal lofting is off: surface direction is calculated at each cross-section. */
+    kNoNormal       = 0, 
+    /** Direction of the surface at the first cross-section will be the same as the plane normal of the cross-section.*/
+    kFirstNormal    = 1, 
+    /** Direction of the surface at the last cross-section will be the same as the plane normal of the cross-section.*/
+    kLastNormal     = 2, 
+    /** Direction of the surface at the first and last cross-sections will be the same as the plane normal of the cross-section.*/
+    kEndsNormal     = 3, 
+    /** Direction of the surface at each cross-section will be the same as the plane normal of the cross-section.*/
+    kAllNormal      = 4, 
+    /** Direction of the surface at each cross-section will be the same as the plane normal of the cross-section.*/
+    kUseDraftAngles = 5 
+  };
+
+  /** \details
+    Returns the start draft angle in radians. 
+    This is the surface take-off direction at the first cross section. 
+    The default value is 0; no draft angle is applied and the optimum angle is calculated at the first cross section.
+  */
+  double draftStart() const;
+
+  /** \details
+    Sets the start draft angle. 
+    This is the surface take-off direction at the first cross section. 
+    The default value is 0; no draft angle is applied and the optimum angle is calculated at the first cross section.
+    
+    \param angle [in]  A new value of the start draft angle (radians).
+  */
+  void setDraftStart(double angle);
+
+  /** \details
+    Returns the end draft angle in radians. 
+    This is the surface take-off direction at the last cross section. 
+    The default value is 0; no draft angle is applied and the optimum angle is calculated at the last cross section.
+  */
+  double draftEnd() const;
+
+  /** \details
+    Sets the end draft angle. 
+    This is the surface take-off direction at the last cross section. 
+    The default value is 0; no draft angle is applied and the optimum angle is calculated at the last cross section.
+  
+    \param angle [in]  A new value of the end draft angle (radians).
+  */
+  void setDraftEnd(double angle);
+
+  /** \details
+    Returns the start draft magnitude.
+    The value returned by the method determines the magnitude of the surface tangent vector at the first cross-section. 
+    The default value is 0; the optimum magnitude is calculated at the last cross section.
+  */
+  double draftStartMag() const;
+
+  /** \details
+    Sets the start draft magnitude.
+    The value set by the method determines the magnitude of the surface tangent vector at the first cross-section. 
+    The default value is 0; the optimum magnitude is calculated at the last cross section.
+    
+    \param startMag [in]  A new value of the start draft magnitude.
+  */
+  void setDraftStartMag(double startMag);
+
+  /** \details
+    Returns the end draft magnitude.
+    
+    The value returned by the method determines the magnitude of the surface tangent vector at the last cross-section. 
+    The default value is 0; the optimum magnitude is calculated at the last cross section.
+  */
+  double draftEndMag() const;
+
+  /** \details
+    Sets the end draft magnitude.
+    
+    The value set by the method determines the magnitude of the surface tangent vector at the last cross-section. 
+    The default value is 0; the optimum magnitude is calculated at the last cross section.
+    
+    \param startMag [in]  A new value of the end draft magnitude.
+  */
+  void setDraftEndMag(double val);
+
+  /** \details
+    Returns the flag determining whether arc length parameterization is applied. 
+  */
+  bool arcLengthParam() const;
+
+  /** \details
+    Sets the flag determining whether arc length parameterization is applied.
+    
+    \param alParam [in]  A new value of the arc length parameterizaton flag.
+  */
+  void setArcLengthParam(bool alParam);
+
+  /** \details
+    Returns the flag determining whether the noTwist option is applied.
+    THe option noTwist can be used to minimize the amount of twist in the surface when the cross-sections are all closed. 
+    The default value is true; the start point of each closed cross-section is aligned with the other cross-sections to minimize twist.
+  */
+  bool noTwist() const;
+
+  /** \details
+    Sets the flag determining whether the noTwist option is applied.
+    The option noTwist can be used due to minimize the amount of twist in the surface when the cross-sections are all closed. 
+    The default value is true; the start point of each closed cross-section is aligned with the other cross-sections to minimize twist.
+    
+    \param noTwist [in]  A new value of noTwist flag.
+  */
+  void setNoTwist(bool noTwist);
+
+  /** \details
+    Returns the value of the direction alignment flag.
+    
+    THe direction alignment flag is used to orient each of the cross sections so that the normal vector of each cross section points towards the next cross section. 
+    The default value is true. 
+    If the cross sections are not all oriented in the same direction, then this flag should be used to avoid creating a twisted or self-intersecting surface.
+  */
+  bool alignDirection() const;
+
+  /** \details
+    Sets the value of the direction alignment flag.
+    
+    The direction alignment flag is used to orient each of the cross sections so that the normal vector of each cross section points towards the next cross section. 
+    The default value is true. 
+    If the cross sections are not all oriented in the same direction, then this flag should be used to avoid creating a twisted or self-intersecting surface.
+    
+    \param alignDir [in]  A new value of the direction alignment flag.
+  */
+  void setAlignDirection(bool alignDir);
+
+  /** \details
+    Returns the value of the simplify flag. 
+    If the simplify flag is set to true, simple surface types (such as plane, cylinder, cone, sphere and torus) are created whenever all of the cross sections lie on such a surface. 
+    If the simplify flag is set to false, a general surface type will be created. 
+    The default value is true. 
+  */
+  bool simplify() const;
+
+  /** \details
+    Sets the value of the simplify flag. 
+  
+    If the simplify flag is set to true, simple surface types (such as plane, cylinder, cone, sphere and torus) are created whenever all of the cross sections lie on such a surface. 
+    If the simplify flag is set to false, a general surface type will be created. 
+    The default value is true. 
+    
+    \param simplify [in]  A new value of the simplify flag.
+  */
+  void setSimplify(bool simplify);
+
+  /** \details
+    Returns the value of the closed flag. 
+    
+    If the closed flag is set to true, the created surface starts and ends at the first cross section (i.e. the surface is closed). 
+    If all of the cross sections are closed, the resulting surface takes a torus-like shape.
+    If the closed flag is set to false, the surface is opened or capped with a planar surface at the first and last cross sections. 
+    If the flag is set, then there must be at least three cross sections. 
+    
+    The default value is false. 
+  */
+  bool closed() const;
+
+  /** \details
+    Sets the value of the closed flag. 
+    
+    If the closed flag is set to true, the created surface starts and ends at the first cross section (i.e. the surface is closed). 
+    If all of the cross sections are closed, the resulting surface takes a torus-like shape.
+    If the closed flag is set to false, the surface is opened or capped with a planar surface at the first and last cross sections. 
+    If the flag is set, then there must be at least three cross sections. 
+    
+    The default value is false.   
+    
+    \param closed [in]  A new value of the closed flag.
+  */
+  void setClosed(bool closed);
+
+  /** \details
+    Returns the value of the ruled flag.
+    
+    If the flag is set to true, a ruled surface will be created between each pair of cross sections, which leads to a coarser surface.  
+    If the flag is set to false, then a single smooth surface is created. 
+    The default value is false.
+  */
+  bool ruled() const;
+
+  /** \details
+    Sets the value of the ruled flag.
+    
+    If the flag is set to true, a ruled surface will be created between each pair of cross sections, which leads to a coarser surface.  
+    If the flag is set to false, then a single smooth surface is created. 
+    The default value is false.
+    
+    \param ruled [in]  A new value of the ruled flag.
+  */
+  void setRuled(bool ruled);
+
+  /** \details
+    Returns the virtual guide option. 
+  */
+  bool virtualGuide() const;
+
+  /** \details
+    Sets the virtual guide flag. 
+    
+    \param virtGuide [in]  A new value of the virtual guide flag.
+  */
+  void setVirtualGuide(bool virtGuide);
+
+  /** \details
+    Returns the plane normal flag. 
+    
+    The default value of the flag is kNoNormal. 
+  */
+  OdDbLoftOptions::NormalOption normal() const;
+
+  /** \details
+    Sets the plane normal flag.
+    The default value of the flag is kNoNormal. 
+    
+    \param option [in]  A new value of the plane normal flag.
+  */
+  void setNormal(OdDbLoftOptions::NormalOption option);
+
+  /** \details
+    Sets loft options from the current values of system variables.
+    
+    \param pDb [in]  A reference to a database object that is used to get access to system variable values.
+    
+    \returns Returns eOk if options were successfully set or an appropriate error otherwise.
+  */
+  OdResult setOptionsFromSysvars(const OdDbDatabase& pDb);
+
+  /** \details
+    Sets the system variables values from loft options values.
+    
+    \param pDb [out]  A reference to a database object that is used to change system variables values.
+    
+    \returns Returns eOk if system variables were successfully set or an appropriate error otherwise.
+  */
+  OdResult setSysvarsFromOptions(OdDbDatabase& pDb);
+
+  /** \details
+    Validates the loft options values.
+
+    \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+    
+    \returns Returns eOk if the options values are all valid. 
+  */
+  OdResult checkOptions(bool displayErrorMessages = false);
+
+  /** \details
+    Checks whether cross section curves and path curves are valid for the lofting operation.
+  
+    \param crossSectionCurves   [in]  A list of cross-section curves.
+    \param guideCurves          [in]  A list of guide curves.
+    \param pPathCurve           [in]  A pointer to a path curve (can be NULL).
+    \param allOpen              [out] A passed-in parameter indicating whether all of the cross-section curves are open.
+    \param allClosed            [out] A passed-in parameter indicating whether all of the cross-section curves are closed.
+    \param allPlanar            [out] A passed-in parameter indicating whether all of the cross-section curves are planar.
+    \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+  
+    \returns Returns eOk if curves are valid or eInvalidInput otherwise.
+  
+    \remarks 
+    The method is called by createLoftedSurface() and createLoftedSolid() methods, so it is not necessary to call the method separately.
+    The method combines calls to check CrossSectionCurves(), checkGuideCurves(), and checkPathCurve() into a single function.
+  */
+  OdResult checkLoftCurves(
+    OdDbEntityPtrArray& crossSectionCurves,
+    OdDbEntityPtrArray& guideCurves,
+    OdDbEntity* pPathCurve,
+    bool& allOpen, 
+    bool& allClosed, 
+    bool& allPlanar,
+    bool displayErrorMessages = false);
+
+  /** \details
+    Checks whether cross section curves are valid for the lofting operation. 
+   
+    \param crossSectionCurves   [in]  A list of cross-section curves.
+    \param allOpen              [out] A passed-in parameter indicating whether all of the cross-section curves are open.
+    \param allClosed            [out] A passed-in parameter indicating whether all of the cross-section curves are closed.
+    \param allPlanar            [out] A passed-in parameter indicating whether all of the cross-section curves are planar.
+    \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+    
+    \returns Returns eOk if curves are valid or eInvalidInput otherwise.
+    
+    \remarks 
+    The method is called by createLoftedSurface() and createLoftedSolid() methods, so it is not necessary to call the method separately().
+  */
+  OdResult checkCrossSectionCurves(
+    OdDbEntityPtrArray& crossSectionCurves,
+    bool& allOpen, 
+    bool& allClosed, 
+    bool& allPlanar,
+    bool displayErrorMessages = false);
+
+  /** \details
+    Checks whether guide curves are valid for the lofting operation.
+    
+
+    \param guideCurves          [in] A list of guide curves.
+    \param displayErrorMessages [in] Indicates whether error messages are displayed. Default value is false.
+    
+    \returns Returns eOk if guide curves are valid or eInvalidInput otherwise.
+    
+    \remarks 
+    The method is called by createLoftedSurface() and createLoftedSolid() methods, so it is not necessary to call the method separately().
+  */
+  OdResult checkGuideCurves(OdDbEntityPtrArray& guideCurves,
+    bool displayErrorMessages = false);
+
+  /** \details
+    Checks whether a path curve is valid for the lofting operation.
+
+    \param pPathCurve           [in] A pointer to the path curve (can be NULL).
+    \param displayErrorMessages [in] Indicates whether error messages are displayed. Default value is false.
+    
+    \returns Returns eOk if a path curve is valid or eInvalidInput otherwise.
+    
+    \remarks     
+    The method is called by createLoftedSurface() and createLoftedSolid() methods, so it is not necessary to call the method separately().
+  */
+  OdResult checkPathCurve(OdDbEntity *pPathCurve,
+    bool displayErrorMessages = false);
+
+
+private:
+  friend class OdDbLoftOptionsImpl;
+  OdDbLoftOptionsImpl *m_pImpl;
+};
+
+#include "TD_PackPop.h"
+#endif // _DbLoftOptions_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftedSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftedSurface.h
new file mode 100755
index 0000000..96c15bb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLoftedSurface.h
@@ -0,0 +1,161 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbLoftedSurface_h_Included_
+#define _DbLoftedSurface_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbSurface.h"
+#include "DbLoftOptions.h"
+
+
+/** \details
+    This class implements a three-dimensional lofted surface entity.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLoftedSurface : public OdDbSurface
+{
+public:
+  OdDbLoftedSurface ();
+  ODDB_DECLARE_MEMBERS(OdDbLoftedSurface);
+
+  /** \details
+  Creates a lofted surface from the specified curves according to the specified lofting options. 
+	
+	\param crossSectionCurves 	[in] A new height value.
+	\param guideCurves 	        [in] An array of curve entities to be used as cross sections during the lofting process.
+	\param pPathCurve 	        [in] A path curve.
+	\param loftOptions          [in] A set of loft options.
+	\param pSat 				[in] A pointer to an output stream buffer.
+	
+	\returns Returns eOk if a lofted surface was successfully created or an appropriate error code otherwise.
+
+	\remarks
+	All curve entities must be either open or closed. 
+	When all curves are closed, this method accepts a point entity as the first and (or) last array element.
+    This means that each curve in the guideCurves array must intersect each of the cross-section curves, so the guide curves form a net-like structure with the cross-section curves. 
+	The cross-section and guide curves will be allocated on the created surface. 
+	If any guide curves are specified, then pPathCurve should be NULL. 
+	If pPathCurve is not NULL, then the created surface follows its shape (as close as possible). 
+	The path curve does not need to intersect the cross-section curves and does not even need to be near the cross sections. 
+	If the pPathCurve parameter is specified (not NULL), then the guideCurves array must be empty. 
+  */
+  virtual OdResult createLoftedSurface(
+    OdDbEntityPtrArray& crossSectionCurves,
+    OdDbEntityPtrArray& guideCurves,
+    OdDbEntity* pPathCurve, 
+    OdDbLoftOptions& loftOptions, const OdStreamBuf *pSat = 0 );
+
+  /** \details
+    Returns the number of cross section curves.
+  */
+  int           numCrossSections () const;
+  
+  /** \details
+    Returns a cross section curve with specified index.
+	
+	\param idx [in]  An index of a cross section.
+	
+	\remarks
+	The index for cross sections is zero-based (i.e., starts with 0). 
+  */
+  OdDbEntityPtr getCrossSection ( int idx ) const;
+  
+  /** \details
+    Returns the number of guide curves used by the surface.
+  */
+    int           numGuideCurves () const;
+  
+  /** \details
+  Returns a guide curve with specified index.
+	
+	\param idx [in]  An index of the guide curve.
+	
+	\remarks
+	The index for guide curves is zero-based (i.e., starts with 0). 
+  */
+  OdDbEntityPtr getGuideCurve ( int idx ) const;
+  
+  /** \details
+    Returns the path entity along which the surface is lofting.
+  */
+  OdDbEntityPtr getPathEntity () const;
+  
+  
+
+  /** \details
+  Returns the loft options used to create this surface.
+	
+	\param loftOptions [out]  An instance of the OdDbLoftOptions class passed from the method with the loft option values.
+  */
+  void          getLoftOptions ( OdDbLoftOptions& loftOptions ) const;
+
+  
+  /** \details
+  Sets new loft option values and recreates the surface. 
+	
+	\param loftOptions [in]  New loft option values to be set.
+	
+	\returns Returns eOk if the lofted surface was successfully recreated with new options or an appropriate error code otherwise.
+	
+  \remarks 
+	This method is implemented only for Spatial modeler and returns eNotImplementedYet status 
+	for other modelers. 
+  */
+  OdResult setLoftOptions ( const OdDbLoftOptions& loftOptions );
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm );
+
+  // OdDbObject methods
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isDependent() const { return false; }
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLoftedSurfacePtr object pointers.
+*/
+typedef OdSmartPtr<OdDbLoftedSurface> OdDbLoftedSurfacePtr;
+
+#include "TD_PackPop.h"
+#endif //_DbLoftedSurface_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLongTransaction.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLongTransaction.h
new file mode 100755
index 0000000..485c364
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbLongTransaction.h
@@ -0,0 +1,235 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef ODDBLONGTRANSWORKSETITERATOR_INCLUDED
+#define ODDBLONGTRANSWORKSETITERATOR_INCLUDED
+
+#include "DbObject.h"
+
+/** \details
+    This class implements Iterator objects that traverse OdDbLongTransaction worksets.
+
+    <group OdDb_Classes> 
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbLongTransWorkSetIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbLongTransWorkSetIterator);
+  
+  /** \details
+    Sets this Iterator object to reference the entity that it would normally return first.
+  
+    \param incRemovedObjs [in]  True to include removed objects.
+    \param incSecondaryObjs [in]  True to include secondary objects.
+       
+    \remarks
+    Allows multiple traversals of the iterator list.
+  */
+    virtual void start(
+    bool incRemovedObjs = false, 
+    bool incSecondaryObjs = false) = 0; 
+  
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() = 0;
+
+  /** \details
+    Sets this Iterator object to reference the entity following the current entity.
+  */
+    virtual void step() = 0;
+  
+  /** \details
+    Returns the object ID of the entity currently referenced by this Iterator object.
+  */
+    virtual OdDbObjectId objectId() const = 0;
+  
+  /** \details
+    Returns true if and only if the entity currently referenced by this Iterator object has been erased.
+    
+    \note
+    The default iterators return only non-erased objects. 
+  */
+    virtual bool curObjectIsErased() const = 0;
+
+  /** \details
+    Returns true if and only if the entity currently referenced by this Iterator object has been 
+    removed from the work set.
+
+    \note
+    The default iterators return only non-removed objects.
+  */
+    virtual bool curObjectIsRemoved() const = 0;
+
+  /** \details
+    Returns true if and only if the entity currently referenced by this Iterator 
+    object is a Primary object.
+
+    \remarks
+    Primary objects are in the work set because they have been explicitly added to it.
+    
+    Non-Primary objects are in the work set only because they are referenced by Primary objects.
+    
+    \note
+    The default iterators return only Primary objects.
+  */
+    virtual bool curObjectIsPrimary() const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbLongTransWorkSetIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbLongTransWorkSetIterator> OdDbLongTransWorkSetIteratorPtr;
+
+/** \details
+    This class implements the tracking of long transactions.
+    
+    \remarks
+    This class creates and appends OdcDbLongTransaction objects to the database and 
+    and returns the object ID of the OdDbLongTransaction object. Destruction of the
+    OdDbLongTransaction object is handled by the database.
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbLongTransaction : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLongTransaction);
+
+  OdDbLongTransaction();
+  
+  enum
+  {
+    kSameDb        = 0, // Entities are checked out from a normal block in the current *database*.
+    kXrefDb        = 1, // Entities are checked out from ModelSpace or an Xref dependent block in an Xref *database*.
+    kUnrelatedDb   = 2  // Entities are checked out from ModelSpace or a block in an unrelated *database*.
+  };
+  
+  /** \details
+    Returns the type of the pending long transaction:
+    
+    \remarks
+    type will return one of the following
+    
+    <table>
+    Name           Value   Description
+    kSameDb        0       Entities are checked out from a normal block or layout in the current database.
+    kXrefDb        1       Entities are checked out from ModelSpace or an Xref dependent block in an Xref database.
+    kUnrelatedDb   2       Entities are checked out from ModelSpace or a block in an unrelated database.
+    </table>
+    
+  */
+  int type() const;
+  
+  /** \details
+    Returns the object ID of the block from which the entities are cloned.
+  */
+  OdDbObjectId originBlock() const;
+
+  /** \details
+    Returns the object ID of the block to which the entities are cloned.
+  */
+  OdDbObjectId destinationBlock() const;
+  
+  
+  /** \details
+    Returns the long transaction name.
+    
+    \remarks
+    Returns the name of the origin block or layout.
+  */
+  OdString getLongTransactionName() const;
+  
+  /** \details
+    Adds the specified object to the current work set.
+
+    \param objectId [in]  Object ID to be added.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.   
+    
+    objectId must be in the same database as the the transaction. 
+    
+    objectId can specify objects from either the origin block or destination block. 
+    Objects from the destination block will be cloned; objects from the origin block will not.
+  */
+  OdResult addToWorkSet(OdDbObjectId ObjectId);
+  /** \details
+    Removes the specified object from the current work set.
+
+    \param objectId [in]  Object ID to be removed.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.   
+  */
+  OdResult removeFromWorkSet(OdDbObjectId id);
+  
+  /** \details
+    Synchronizes work set.
+    \remarks
+    removeFromWorkSet() does not remove from the work set objects referenced by removed objects. 
+    syncWorkSet() removes them.
+  */
+  OdResult syncWorkSet();
+  
+  /** \details
+    Creates an Iterator object that provides access to the entities in the work set.
+    \param incRemovedObjs [in]  True to include removed and erased objects from the work set.
+    \param incSecondaryObj [in]  True to include objects referenced by objects in the work set.
+  */
+  OdDbLongTransWorkSetIteratorPtr newWorkSetIterator(
+    bool incRemovedObjs = false, 
+    bool incSecondaryObjs = false) const;
+  
+  /** \details
+    Returns the object ID from which the workSetId was cloned.
+    \param workSetId [in]  Work set object ID..
+  */
+  OdDbObjectId originObject(
+    OdDbObjectId workSetId) const;
+
+  /** \details
+    Returns true if and only if the specified object ID is in the work set.
+    
+    \param objectId [in]  Object ID being tested.
+    \param getErased [in]  True to return true for erased and removed objects in the work set.
+  */
+  bool workSetHas(OdDbObjectId 
+    ObjectId, 
+    bool getErased = false) const;
+  
+  /** \details
+    Returns a pointer to the OdDbMapping object used for OdLongTransationReactor callbacks used for checkin/checkout.
+  */
+  OdDbIdMapping* activeIdMap();
+
+  void applyPartialUndo(OdDbDwgFiler* pUndoFiler, OdRxClass* pClassObj);
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult subErase(bool erasing);
+};
+
+typedef OdSmartPtr<OdDbLongTransaction> OdDbLongTransactionPtr;
+
+#endif // ODDBLONGTRANSWORKSETITERATOR_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMInsertBlock.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMInsertBlock.h
new file mode 100755
index 0000000..be3acf3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMInsertBlock.h
@@ -0,0 +1,237 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_MINSERT_BLOCK_
+#define _OD_DB_MINSERT_BLOCK_
+
+#include "TD_PackPush.h"
+
+#include "DbBlockReference.h"
+
+class OdDbMInsertBlockImpl;
+
+/** \details
+    This class represents arrayed instances of block references (MInserts) in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    \remarks
+    Creating an OdDbMInsertBlock instance with exactly one row and column creates an OdDbBlockReference instance. 
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbMInsertBlock : public OdDbBlockReference
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMInsertBlock);
+
+  OdDbMInsertBlock();
+  
+  /** \details
+    Returns the number of columns for this MInsert (DXF 70).
+  */
+  OdUInt16 columns() const;
+
+  /** \details
+    Sets the number of columns for this MInsert (DXF 70).
+    \param numColumns [in]  Number of columns.
+  */
+  void setColumns(OdUInt16 numColumns);
+  
+  /** \details
+    Returns the number of rows for this MInsert (DXF 71).
+  */
+  OdUInt16 rows() const;
+
+  /** \details
+    Sets the number of rows for this MInsert (DXF 71).
+    \param numRows [in]  Number of rows.
+  */
+  void  setRows(OdUInt16 numRows);
+  
+  /** \details
+    Returns the column spacing for this MInsert (DXF 44).
+  */
+  double columnSpacing() const;
+
+  /** \details
+    Sets the column spacing for this MInsert (DXF 44).
+    \param colSpacing [in]  Column spacing.
+  */
+  void  setColumnSpacing(double colSpacing);
+  
+  /** \details
+    Returns the row spacing for this MInsert (DXF 45).
+  */
+  double rowSpacing() const;
+
+  /** \details
+    Sets the row spacing for this MInsert (DXF 45).
+    \param rowSpacing [in]  Row spacing.
+  */
+  void  setRowSpacing(
+    double rowSpacing);
+
+  /** \details
+    Reads the .dwg file data of this object.
+    
+    \param pFiler [in]  Filer object from which data are read.
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dwgIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler). 
+    3) If it returns eOK, continue; otherwise return whatever the parent's dwgInFields(pFiler) returned. 
+    4) Call the OdDbDwgFiler(pFiler) methods to read each of the object's data items in the order 
+    they were written. 
+    5) Return pFiler->filerStatus().
+  */   
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dwg file data of this object.
+    
+    \param pFiler [in]  Pointer to the filer to which data are written.
+    
+    \remarks 
+    This function is called by dwgIn() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dwgOutFields(pFiler). 
+    3) Call the OdDbDwgFiler (pFiler) methods to write each of the object's data items in the 
+    order they were written.
+  */    
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in]  Pointer to the filer from which data are read. 
+    
+    \remarks 
+    Returns the filer status. 
+    This function is called by dxfIn() to allow the object to read its data. 
+    When overriding this function: 
+    1) Call assertWriteEnabled(). 2) Call the parent class's dwgInFields(pFiler).
+    3) If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) returned. 
+    4) Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written. 
+    5) Return pFiler->filerStatus().
+  */    
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in]  Pointer to the filer from which data are read. 
+    
+    \remarks 
+    This function is called by dxfOut() to allow the object to write its data. 
+    When overriding this function: 
+    1) Call assertReadEnabled(). 2) Call the parent class's dxfOutFields (pFiler). 
+    4) Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items 
+    in the order they were written.
+  */
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Overridables
+  */    
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /** \details
+    Applies the specified 3D transformation matrix to this entity.
+    
+    \param xfm [in] 3D transformation matrix.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  /** \details
+    Explodes this entity into a set of simpler entities, and adds them to the specified block 
+    table record.
+
+    \param pTargetBlkRec [out]  Pointer to the Block Table Record.
+    \param ids [in/out]  Receives an array of Object IDs of the new Block References.
+
+    \remarks
+    Entities resulting from the explosion are appended to the specified array.
+    The newly created entities are database resident or not depending on the block table 
+    record they are appended to. If block table record is database resident the entities 
+    are database resident as well. If block table record is not database resident newly 
+    created entities are not database resident.
+    The default implementation of this function returns eNotApplicable. This function can 
+    be overridden in custom classes.
+  */  
+  OdResult explodeToBlock(
+    OdDbBlockTableRecord *pTargetBlkRec, 
+    OdDbObjectIdArray *pResIdArray);
+
+  /** \details
+    This is subGetGeomExtents, a member of class OdDbBlockReference.
+    
+    \param extents [out] An output extents.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */ 
+  OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  /** \details
+    Returns true if the entity has no view-dependent graphics. In another case
+    returns false.
+    
+    \param pWd [in] Pointer to the OdGiWorldDraw object.
+  */
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  /** \details
+    Explodes this entity into a set of simpler entities. 
+    
+    \param entitySet [in] Receives an array of pointers to the new entities.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult subExplode(OdRxObjectPtrArray& entitySet) const;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbMInsertBlock object pointers.
+*/
+typedef OdSmartPtr<OdDbMInsertBlock> OdDbMInsertBlockPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeader.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeader.h
new file mode 100755
index 0000000..6a9c681
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeader.h
@@ -0,0 +1,1493 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_MLEADER_H
+#define OD_MLEADER_H
+
+#include "TD_PackPush.h"
+#include "DbMLeaderStyle.h"
+#include "DbEntity.h"
+#include "DbSubentId.h"
+#include "DbAttribute.h"
+#include "IntArray.h"
+
+#define MAX_LEADER_NUMBER     5000
+#define MAX_LEADERLINE_NUMBER 5000
+
+class OdDbAttribute;
+class OdDbMLeaderObjectContextData;
+
+/** \details
+    This class is the main class used for the multiple leader (MLeader) objects. 
+        
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMLeader : public OdDbEntity
+{
+public:
+  /** \details
+    Enumeration for MLeader move type.
+  */
+  enum MoveType {
+    /** \details
+      All MLeader points should be moved.
+    */
+    kMoveAllPoints,
+
+    /** \details
+      All MLeader points should be moved, except the arrowhead points of the leader line.
+    */
+    kMoveAllExceptArrowHeaderPoints,
+
+    /** \details
+      MLeader content points and dog-leg points should be moved.
+    */
+    kMoveContentAndDoglegPoints
+  };
+
+  /** \details
+    Enumeration for MLeader GS mark type.
+  */
+  enum gsMarkType {
+    /** \details
+      No GS mark.
+    */
+    kNone               = 0,
+
+    /** \details
+      GS mark of arrow.
+    */
+    kArrowMark          = 1,
+
+    /** \details
+      GS mark of leader line.
+    */
+    kLeaderLineMark     = kArrowMark  + MAX_LEADERLINE_NUMBER,
+
+    /** \details
+      GS mark of dog-leg.
+    */
+    kDoglegMark         = kLeaderLineMark + MAX_LEADERLINE_NUMBER,
+
+    /** \details
+      GS mark of MText content.
+    */
+    kMTextMark          = kDoglegMark + MAX_LEADER_NUMBER,
+
+    /** \details
+      GS mark of MText underline content (includes text frame if present).
+    */
+    kMTextUnderLineMark = kMTextMark + 1,
+
+    /** \details
+      GS mark of tolerance content.
+    */
+    kToleranceMark      = kMTextUnderLineMark + 1,
+
+    /** \details
+      GS mark of block content.
+    */
+    kBlockMark          = kToleranceMark + 1,
+
+    /** \details
+      GS mark of block attribute content.
+    */
+    kBlockAttribute     = kBlockMark + 1
+  };
+
+  /** \details
+      Enumeration for MLeader properties which can be overridden.
+  */
+  enum PropertyOverrideType {
+    /** \details
+      Leader line type.
+    */
+    kLeaderLineType         = 0,
+
+    /** \details
+      Leader line color.
+    */
+    kLeaderLineColor        = 1,
+
+    /** \details
+      Leader line type ID.
+    */
+    kLeaderLineTypeId       = 2,
+
+    /** \details
+      Leader line weight.
+    */
+    kLeaderLineWeight       = 3,
+
+    /** \details
+      Enable landing.
+    */
+    kEnableLanding          = 4,
+
+    /** \details
+      Landing gap.
+    */
+    kLandingGap             = 5,
+
+    /** \details
+      Enable dog-leg.
+    */
+    kEnableDogleg           = 6,
+
+    /** \details
+      Dog-leg length.
+    */
+    kDoglegLength           = 7,
+
+    /** \details
+      Arrow symbol ID.
+    */
+    kArrowSymbolId          = 8,
+
+    /** \details
+      Arrow symbol size.
+    */
+    kArrowSize              = 9,
+
+    /** \details
+      MLeader content type.
+    */
+    kContentType            = 10,
+
+    /** \details
+      Text style ID (of MText).
+    */
+    kTextStyleId            = 11,
+
+    /** \details
+      Text left attachment type (of MText).
+    */
+    kTextLeftAttachmentType = 12,
+
+    /** \details
+      Text angle type (of MText).
+    */
+    kTextAngleType          = 13,
+
+    /** \details
+      Text alignment type (of MText).
+    */
+    kTextAlignmentType      = 14,
+
+    /** \details
+      Text color (of MText).
+    */
+    kTextColor              = 15,
+
+    /** \details
+      Text height (of MText).
+    */
+    kTextHeight             = 16,
+
+    /** \details
+      Enable text frame.
+    */
+    kEnableFrameText        = 17,
+
+    /** \details
+      Enable use of default MText (from MLeaderStyle).
+    */
+    kDefaultMText           = 18,
+
+    /** \details
+      Block content block ID.
+    */
+    kBlockId                = 19,
+
+    /** \details
+      Block content color.
+    */
+    kBlockColor             = 20,
+
+    /** \details
+      Block content scale.
+    */
+    kBlockScale             = 21,
+
+    /** \details
+      Block content rotation.
+    */
+    kBlockRotation          = 22,
+
+    /** \details
+      Block content connection type.
+    */
+    kBlockConnectionType    = 23,
+
+    /** \details
+      MLeader scale.
+    */
+    kScale                  = 24,
+
+    /** \details
+      Text right attachment type (of MText).
+    */
+    kTextRightAttachmentType = 25,
+
+    /** \details
+      Text switch alignment type (of MText).
+    */
+    kTextSwitchAlignmentType = 26,
+
+    /** \details
+      Text attachment direction (of MText).
+    */
+    kTextAttachmentDirection = 27,
+
+    /** \details
+      Text top attachment type (of MText).
+    */
+    kTextTopAttachmentType   = 28,
+
+    /** \details
+      Text bottom attachment type (of MText).
+    */
+    kTextBottomAttachmentType = 29,
+
+    /** \details
+      Extend leader line to text.
+    */
+    kExtendLeaderToText      = 30,
+
+    /** \details
+      Size of bit set.
+    */
+    kSize = kExtendLeaderToText + 1
+  };
+
+
+  ODDB_DECLARE_MEMBERS(OdDbMLeader);
+
+  OdDbMLeader();
+
+  virtual OdResult dwgInFields (OdDbDwgFiler* filer) ODRX_OVERRIDE;
+
+  virtual void dwgOutFields(OdDbDwgFiler* filer) const ODRX_OVERRIDE;
+
+  virtual OdResult dxfInFields (OdDbDxfFiler* filer) ODRX_OVERRIDE;
+
+  virtual void dxfOutFields(OdDbDxfFiler* filer) const ODRX_OVERRIDE;
+
+protected:
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+
+  virtual void  subViewportDraw(OdGiViewportDraw* mode) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xform) ODRX_OVERRIDE;
+
+  /** \details
+	Returns all subentity paths by graphic system marker.
+
+	\param type [in]  The subentity type being queried. ( Only OdDb::kClassSubentType )
+	\param gsMarker [in]  The GS marker of the subentity being queried.
+	\param pickPoint [in]  The WCS point being queried. ( Not used )
+	\param xrm [in]  The WCS->DCS transformation matrix. ( Not used )
+	\param subentPaths [out] The array of OdDbFullSubentPath objects.
+	\param entAndInsertStack [in] The array of objectIds of the objects that are the nested containers of the subentity.
+  */
+
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type, OdGsMarker gsMark, 
+										const OdGePoint3d& pickPoint,const OdGeMatrix3d& xfm, 
+										OdDbFullSubentPathArray& subentPaths, 
+										const OdDbObjectIdArray* pEntAndInsertStack = 0) const ODRX_OVERRIDE;
+
+  /** \details
+	Returns all graphic system marker by subentity paths.
+
+	\param subPath [in]  The OdDbFullSubentPath to the subentity.
+	\param gsMarkers [in/out] The array of integer identifiers (GS markers).
+  */
+
+  virtual OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+											 OdGsMarkerArray& gsMarkers) const ODRX_OVERRIDE;
+
+  /** \details
+	Deletes one or more subentities from an entity.
+
+	\param paths [in]  The array of OdDbFullSubentPath objects.
+  */
+
+  virtual OdResult subDeleteSubentPaths(const OdDbFullSubentPathArray& paths) ODRX_OVERRIDE;
+
+  /** \details
+	Create an object by OdDbFullSubentPath to the subentity.
+
+	\param path [in]  The OdDbFullSubentPath to the subentity.
+  */
+
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& path) const ODRX_OVERRIDE;
+
+  virtual void subClose() ODRX_OVERRIDE;
+
+  virtual OdResult subExplode(OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+  virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const ODRX_OVERRIDE;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const ODRX_OVERRIDE;
+
+#if 0
+//////////////////////////////////////////////////////////////////////////////
+
+  virtual OdResult getGripEntityUCS(
+    const void* pGripAppData,
+    OdGeVector3d& normalVec,
+    OdGePoint3d& origin,
+    OdGeVector3d& xAxis) const;
+
+  virtual void  gripStatus(
+    const OdDb::GripStat status);
+
+/////////////////////////////////////////////////////////////////////////////////
+#endif
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xform,
+    OdDbEntityPtr& pEnt) const;
+
+
+public:
+  /** \details
+    Sets the override status for the specified PropertyOverrideType.
+
+    \param propertyType [in]  PropertyOverrideType which will be set.
+    \param isOverride [in]  true if an override for propertyType is to be set, false otherwise.
+  */
+  void setOverride(
+    PropertyOverrideType propertyType,
+    bool isOverride = true);
+
+  /** \details
+    Returns the override status for the specified PropertyOverrideType.
+
+    \param propertyType [in]  PropertyOverrideType for which status is to be returned.
+
+    \remarks
+    Returns true if an override has been set for the specified propertyType, false otherwise.
+  */
+  bool  isOverride(
+    PropertyOverrideType propertyType) const;
+
+  /** \details
+    Sets the MLeader scale, which affects arrowhead size and content scale.
+
+    \param scale [in]  The scale value.
+
+    \remarks
+    Returns eOk if successful.  Note that this function will set an override 
+    for kScale PropertyOverrideType.
+  */
+  OdResult setScale(
+    double scale);
+
+  /** \details
+    Returns the MLeader scale, which affects arrowhead size and content scale.
+
+  */
+  double  scale() const;
+
+  /** \details
+    Returns the specified attribute from the associated block content.
+
+    \param attdefId [in]  ObjectID of an attribute definition.
+    \param pAtt [out]  Returned attribute object corresponding to attdefId.
+
+    \remarks
+    If successful, returns eOk.
+  */
+  OdResult getBlockAttributeValue(
+    OdDbObjectId attdefId,
+    OdDbAttributePtr& pAtt) const;
+
+  /** \details
+    Sets the specified attribute within associated block content.
+
+    \param attdefId [in]  ObjectID of attribute definition.
+    \param pAtt [in]  Attribute object pointer.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult setBlockAttributeValue(
+    OdDbObjectId attdefId,
+    const OdDbAttribute* pAtt);
+
+  /** \details
+    Returns the WCS plane containing this MLeader object.
+  */
+  OdGePlane plane() const;
+
+  /** \details
+    Sets the WCS plane containing this MLeader object.
+
+    \param plane [in]  Place which will contain the MLeader.
+
+    \remarks
+    Note that MLeader geometry will be updated appropriately to reflect the new location.
+  */
+  void  setPlane(
+    const OdGePlane& plane);
+
+  OdGeVector3d  normal() const;
+
+  /** \details
+    Moves this MLeader object as specified by an input vector.
+
+    \param vector [in] Vector which specifies the direction and distance of the move.
+    \param moveType [in] Indicates how to move the MLeader.
+    \param bAutoSwitchDogleg [in] If true, automatically switch leader lines after movoing the MLeader.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult moveMLeader(
+    const OdGeVector3d& vector,
+    MoveType moveType,
+    bool bAutoSwitchDogleg = true);
+
+  /** \details
+    Returns the the extents of the content for this MLeader.
+
+    \param extents [out]  Receives the content extents.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult getContentGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  /** \details
+
+    \param leaderIndexes [out]  Returned indexes.
+  */
+  void getLeaderIndexes(
+    OdIntArray& leaderIndexes);
+
+  /** \details
+    Causes a new cluster to be added to this MLeader object, and returns the index of the new cluster.
+
+    \param leaderIndex [out]  Index of newly added cluster.
+
+    \remarks
+    A leader cluster consists of a dog-leg and leader lines.
+  */
+  void addLeader(
+    int& leaderIndex);
+
+  /** \details
+    Removes the leader cluster specified by the passed-in index.
+
+    \param leaderIndex [in]  Index of the cluster to be removed.
+
+    \remarks
+    A leader cluster consists of a dog-leg and leader lines.
+  */
+  void removeLeader(
+    int leaderIndex);
+
+  /** \details
+
+    \param leaderIndexes [out]  Receives the indexes of leader lines for this MLeader.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  void getLeaderLineIndexes(
+    OdIntArray& leaderLineIndexes);
+
+  /** \details
+    Adds a leader line to the leader cluster specified by the supplied index.
+
+    \param leaderIndex [in]  Leader cluster index.
+    \param leaderLineIndex [out]  Receives the index of the newly added leader line.
+  */
+  OdResult addLeaderLine(
+    int leaderIndex, 
+    int& leaderLineIndex);
+
+  /** \details
+    Adds a new leader line to this MLeader.  The first point of the new leader line is passed in.
+
+    \param point [in]  Specifies the first point of the new leader line.
+    \param leaderLineIndex [out]  Receives the index of the newly added leader line.
+
+    \remarks
+    Returns eOk if successful. 
+  */
+  OdResult addLeaderLine(
+    const OdGePoint3d& point, 
+    int& leaderLineIndex);
+
+  /** \details
+    Removes the leader line specified by the passed-in index.
+
+    \param leaderLineIndex [in]  Index of the leader line to remove.
+
+    \remarks
+    Note that removal of all leader lines will cause the leader cluster to be removed as well.
+  */
+  void removeLeaderLine(
+    int leaderLineIndex);
+
+  /** \details
+    Inserts a new first vertex into the specified leader line.
+
+    \param leaderLineIndex [in]  Index of the leader line to which the vertex will be added.
+    \param point [in]  The position of the vertex.
+  */
+  OdResult addFirstVertex(
+    int leaderLineIndex, const OdGePoint3d& point);
+
+  /** \details
+    Removes the first vertex from the specified leader line.
+
+    \param leaderLineIndex [in]  Index of the leader line from which the first vertex will be removed.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult removeFirstVertex(
+    int leaderLineIndex);
+
+  /** \details
+    Returns the first vertex from the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param point [out]  Receives the first vertex.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult getFirstVertex(
+    int leaderLineIndex, 
+    OdGePoint3d& point) const;
+
+  /** \details
+    Sets the first vertex of the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param point [in]  New position for the first vertex.
+
+    \remarks
+    Returns eOk if successful.  Note that this function only sets the values for an existing 
+    first vertex, but does not create any new vertices.
+  */
+  OdResult setFirstVertex(
+    int leaderLineIndex, 
+    const OdGePoint3d& point);
+
+  /** \details
+    Appends a new last vertex onto the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param point [in]  The new vertex position.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult addLastVertex(
+    int leaderLineIndex,
+    const OdGePoint3d& point);
+
+  /** \details
+    Removes the last vertex from the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult removeLastVertex(
+    int leaderLineIndex);
+
+  /** \details
+    Returns the last vertex from the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param point [out]  Receives the last vertex from the specified leader line.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult getLastVertex(
+    int leaderLineIndex,
+    OdGePoint3d& point) const;
+
+  /** \details
+    Sets the last vertex of the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param point [in]  New last vertex for specified leader line.
+    
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult setLastVertex(
+    int leaderLineIndex,
+    const OdGePoint3d& point);
+
+  /** \details
+    Returns the number of vertices in the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param num [out]  Receives the number of vertices in the specified leader line.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult numVertices(
+    int leaderLineIndex, 
+    int& num) const;
+
+  /** \details
+    Sets the position for a specified vertex in a specified leader line. 
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param index [in]  The index of the vertex to be set.
+    \param point [in]  New coordinate value for the specified vertex.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult setVertex(
+    int leaderLineIndex,
+    int index,
+    const OdGePoint3d& point);
+
+  /** \details
+    Returns the position of a specified vertex in a specified leader line. 
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param index [in]  The index of the vertex.
+    \param point [out]  Receives the position value for the specified vertex.
+    
+    \remarks
+    Returns eOk if successful.
+  */
+  void getVertex(
+    int leaderLineIndex,
+    int index, OdGePoint3d& point);
+
+  /** \details
+    Returns the index of the leader cluster which contains the specified leader line.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param leaderIndex [out]  Receives the index of the lead line owner.
+  */
+  void getLeaderIndex(
+    int leaderLineIndex,
+    int& leaderIndex); 
+
+  /** \details
+    Returns the indexes of all leader lines for the specified leader.
+
+    \param leaderIndex [in]  Leader index.
+    \param leaderLineIndexes [out]  Receives the indexes of the owned leader lines.
+  */
+  void getLeaderLineIndexes(
+    int leaderIndex,
+    OdIntArray& leaderLineIndexes);
+
+  /** \details
+    Sets the dog-leg direction for the specified leader cluster.
+
+    \param leaderIndex [in]  Leader index.
+    \param vector [in]  The new dog-leg direction.
+  */
+  void setDoglegDirection(
+    int leaderIndex,
+    const OdGeVector3d& vector);
+
+  /** \details
+    Returns the dog-leg direction for the specified leader cluster.
+
+    \remarks
+    \param leaderIndex [in] Leader index.
+    \param vector [out] Receives the dog-leg direction.
+  */
+  void getDoglegDirection(
+    int leaderIndex,
+    OdGeVector3d& vector);
+
+  /** \details
+    Sets the leader line type for this MLeader object.
+
+    \param leaderLineType [in]  Leader line type. 
+
+    \remarks
+    The kLeaderLineType PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setLeaderLineType(
+    OdDbMLeaderStyle::LeaderType leaderLineType);
+
+  /** \details
+    Returns the leader line type for this MLeader object.
+  */
+  OdDbMLeaderStyle::LeaderType  leaderLineType() const;
+
+  /** \details
+    Sets the leader line color for this MLeader.
+
+    \param leaderLineColor [in]  Leader line color.
+
+    \remarks
+    The kLeaderLineColor PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setLeaderLineColor(
+    const OdCmColor& leaderLineColor);
+
+  /** \details
+    Returns the leader line color for this MLeader.
+  */
+  OdCmColor leaderLineColor() const;
+
+  /** \details
+    Sets the leader line linetype for this MLeader by OdDbObjectId.
+
+    \param leaderLineTypeId [in]  Leader line type ObjectId.
+
+    \remarks
+    The kLeaderLineTypeId PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setLeaderLineTypeId(
+    OdDbObjectId leaderLineTypeId);
+
+  /** \details
+    Returns the leader line linetype for this MLeader by OdDbObjectId.
+  */
+  OdDbObjectId  leaderLineTypeId() const;
+
+  /** \details
+    Sets the leader line weight for this MLeader.
+
+    \param leaderLineWeight [in]  Leader line weight.
+
+    \remarks
+    The kLeaderLineWeight PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setLeaderLineWeight(
+    OdDb::LineWeight leaderLineWeight);
+
+  /** \details
+    Returns the leader line weight for this MLeader.
+  */
+  OdDb::LineWeight  leaderLineWeight() const;
+
+  /** \details
+    Sets the landing gap for this MLeader (gap between the leader tail and associated MText).
+
+    \param landingGap [in]  Landing gap (gap between the leader tail and associated MText).
+
+    \remarks
+    The kLandingGap PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setLandingGap(
+    double landingGap);
+
+  /** \details
+    Returns the landing gap for this MLeader (gap between the leader tail and associated MText).
+  */
+  double  landingGap() const;
+
+  /** \details
+    Sets the enabled/disabled status for leader landing line.
+
+    \param enableLanding [in]  Leader landing line enabled status.
+
+    \remarks
+    The kEnableLanding PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setEnableLanding(
+    bool enableLanding);
+
+  /** \details
+    Returns the enabled/disabled status for leader landing line.
+  */
+  bool  enableLanding() const;
+
+  /** \details
+    Sets the enabled/disabled status for dog-leg leader line.
+
+    \param enableDogleg [in]  Leader dog-leg line enabled status.
+
+    \remarks
+    The kEnableDogleg PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setEnableDogleg(
+    bool enableDogleg);
+
+  /** \details
+    Returns the enabled/disabled status for dog-leg leader line.
+  */
+  bool  enableDogleg() const;
+
+  /** \details
+    Sets the length for the dog-leg of the specified leader cluster.
+
+    \param leaderIndex [in]  Leader index.
+    \param dDoglegLength [in]  Dog-leg length.
+
+    \remarks
+    The kDoglegLength PropertyOverrideType override will be set as a result of
+    calling this function.
+  */
+  void setDoglegLength(
+    int leaderIndex,
+    double dDoglegLength);
+
+  /** \details
+    Returns the length for the dog-leg of the specified leader cluster.
+
+    \param leaderIndex [in] Leader index.
+  */
+  double doglegLength(
+    int leaderIndex );
+
+  //deprecated 
+  OdResult    setDoglegLength        (double doglegLength);
+  //deprecated 
+  double      doglegLength           () const;
+
+  /** \details
+    Sets the arrow symbol for this MLeader (by ObjectId).
+
+    \param arrowSymbolId [in]  Arrow symbol ObjectId.
+
+    \remarks
+    The kDoglegLength PropertyOverrideType override will be set as a result of
+    calling this function.  If this value is not set, the default arrow symbol 
+    will be used.
+  */
+  void setArrowSymbolId(
+    OdDbObjectId arrowSymbolId);
+
+  /** \details
+    Returns the arrow symbol for this MLeader (by ObjectId).
+  */
+  OdDbObjectId  arrowSymbolId() const;
+
+  /** \details
+    Sets the arrow size for this MLeader object.
+
+    \param arrowSize [in]  Arrow size.
+
+    \remarks
+    The kArrowSize PropertyOverrideType override will be set as a result of
+    calling this function.  
+  */
+  void setArrowSize(
+    double arrowSize);
+
+  /** \details
+    Returns the arrow size for this MLeader object.
+  */
+  double  arrowSize() const;
+
+  /** \details
+    Sets the content type for this MLeader object.
+
+    \param contentType [in]  Content type.
+
+    \remarks
+    The kContentType PropertyOverrideType override will be set as a result of
+    calling this function.  
+  */
+  void setContentType(
+    OdDbMLeaderStyle::ContentType contentType);
+
+  /** \details
+    Returns the content type for this MLeader object.
+  */
+  OdDbMLeaderStyle::ContentType contentType() const;
+
+  /** \details
+    Sets the textstyle used by MText content (by ObjectId).
+
+    \param textStyleId [in]  OdDbTextStyle ObjectId.
+
+    \remarks
+    The kTextStyleId PropertyOverrideType override will be set as a result of
+    calling this function.  
+  */
+  void setTextStyleId(
+    OdDbObjectId textStyleId);
+
+  /** \details
+    Return the textstyle used by MText content (by ObjectId).
+  */
+  OdDbObjectId  textStyleId() const;
+
+  /** \details
+    Sets the text attachment type used by MText content.
+
+    \param textAttachmentType [in]  Text attachment type.
+    \param leaderDirection [in]  Text leader direction type.
+
+    \remarks
+    The kTextLeftAttachmentType/kTextRightAttachmentType PropertyOverrideType override 
+    will be set as a result of calling this function.  
+  */
+  void setTextAttachmentType(
+      OdDbMLeaderStyle::TextAttachmentType textAttachmentType,
+      OdDbMLeaderStyle::LeaderDirectionType leaderDirection);
+
+  /** \details
+    Returns the text attachment type used by MText content.
+
+    \param leaderDirection [in]  Text leader direction type.
+  */
+  OdDbMLeaderStyle::TextAttachmentType  textAttachmentType(
+      OdDbMLeaderStyle::LeaderDirectionType leaderDirection) const;
+
+  /** \details
+    Sets the angle type for MText content, with respect to the last leader line segment.
+
+    \param textAngleType [in]  Text text angle type.
+
+    \remarks
+    The kTextAngleType PropertyOverrideType override will be set as a result 
+    of calling this function.  
+  */
+  void setTextAngleType(
+    OdDbMLeaderStyle::TextAngleType textAngleType);
+
+  /** \details
+    Returns the angle type for MText content, with respect to the last leader line segment.
+  */
+  OdDbMLeaderStyle::TextAngleType textAngleType() const;
+
+  /** \details
+    Sets the text alignment type for MText content.
+
+    \param textAlignmentType [in]  Text alignment type.
+
+    \remarks
+    The kTextAlignmentType PropertyOverrideType override will be set as a result 
+    of calling this function.  
+  */
+  void setTextAlignmentType(
+    OdDbMLeaderStyle::TextAlignmentType textAlignmentType);
+
+  /** \details
+    Returns the text alignment type for MText content.
+  */
+  OdDbMLeaderStyle::TextAlignmentType textAlignmentType() const;
+
+  /** \details
+    Sets the text color for MText content.
+
+    \param textColor [in]  Text color.
+
+    \remarks
+    The kTextColor PropertyOverrideType override will be set as a result 
+    of calling this function.
+  */
+  void setTextColor(const OdCmColor& textColor);
+
+  /** \details
+    Returns the text color for MText content.
+  */
+  OdCmColor textColor() const;
+
+  /** \details
+    Sets the text height for MText content.
+
+    \param textHeight [in]  Text height.
+
+    \remarks
+    The kTextHeight PropertyOverrideType override will be set as a result 
+    of calling this function.
+  */
+  void setTextHeight(
+    double textHeight);
+
+  /** \details
+    Returns the text height for MText content.
+  */
+  double  textHeight() const;
+
+  /** \details
+    Sets the text frame visibility for MText content.
+
+    \param enableFrameText [in]  True to enable the text frame, false otherwise.
+
+    \remarks
+    The kEnableFrameText PropertyOverrideType override will be set as a result 
+    of calling this function.
+  */
+  void setEnableFrameText(
+    bool enableFrameText);
+
+  /** \details
+    Returns the text frame visibility for MText content.
+  */
+  bool  enableFrameText() const;
+
+  /** \details
+    Sets the MText object to be associated with this MLeader.
+
+    \param pMText [in]  The MText object to associate with this MLeader (if NULL, 
+      the default MText defined in the associated MLeaderStyle is used).
+
+    \remarks
+    The kDefaultMText PropertyOverrideType override will be set as a result 
+    of calling this function.  The supplied MText object can be DBR or non-DBR.
+  */
+  void setMText(
+    const OdDbMText* pMText);
+
+  /** \details
+    Returns the MText content associated with this MLeader.
+  */
+  OdDbMTextPtr mtext() const;
+
+  /** \details
+    Sets the referenced block for this MLeader, by block ObjectId.
+
+    \param blockId [in]  Block table record ObjectId.
+
+    \remarks
+    The kBlockId PropertyOverrideType override will be set as a result 
+    of calling this function.  
+  */
+  void setBlockContentId(
+    OdDbObjectId blockId);
+
+  /** \details
+    Returns the referenced block for this MLeader, by block ObjectId.
+  */
+  OdDbObjectId  blockContentId() const;
+
+  /** \details
+    Sets the color used for block content.
+
+    \param blockColor [in]  Block color.
+
+    \remarks
+    The kBlockColor PropertyOverrideType override will be set as a result 
+    of calling this function.  
+  */
+  void setBlockColor(
+    const OdCmColor& blockColor);
+
+  /** \details
+    Returns the color used for block content.
+  */
+  OdCmColor blockColor() const;
+
+  /** \details
+    Sets the scale used by the referenced block.
+
+    \param scale [in]  Referenced block scale.
+
+    \remarks
+    The kBlockScale PropertyOverrideType override will be set as a result 
+    of calling this function.  
+  */
+  void setBlockScale(
+    const OdGeScale3d& scale);
+
+  /** \details
+    Returns the scale used by the referenced block.
+  */
+  OdGeScale3d blockScale() const;
+
+  /** \details
+    Sets the rotation used by the referenced block.
+
+    \param rotation [in]  Referenced block rotation.
+
+    \remarks
+    The kBlockRotation PropertyOverrideType override will be set as a result 
+    of calling this function.  
+  */
+  void setBlockRotation(
+    double rotation);
+
+  /** \details
+    Returns the rotation used by the referenced block.
+  */
+  double blockRotation() const;
+
+  /** \details
+    Sets the block connection type for this MLeader, which specifies how the 
+    referenced block is connected to the leader lines.
+
+    \param blockConnectionType [in]  Block connection type.
+
+    \remarks
+    The kBlockConnectionType PropertyOverrideType override will be set as a result 
+    of calling this function.  
+  */
+  void setBlockConnectionType(
+    OdDbMLeaderStyle::BlockConnectionType blockConnectionType);
+
+  /** \details
+    Returns the block connection type for this MLeader, which specifies how the 
+    referenced block is connected to the leader lines.
+  */
+  OdDbMLeaderStyle::BlockConnectionType blockConnectionType() const;
+
+  /** \details
+    Sets the annotation scale enabled status for this MLeader.
+
+    \param enableAnnotationScale [in]  true if annotation scale is to be enabled, false otherwise.
+  */
+  void setEnableAnnotationScale(
+    bool enableAnnotationScale);
+
+  /** \details
+    Returns the annotation scale enabled status for this MLeader.
+  */
+  bool  enableAnnotationScale() const;
+
+  /** \details
+    Sets the MLeaderStyle used for this MLeader, by ObjectId.
+
+    \param newStyleId [in]  New MLeaderStyle.
+  */
+  void setMLeaderStyle(
+    OdDbObjectId newStyleId);
+
+  /** \details
+    Returns the MLeaderStyle used for this MLeader, by ObjectId.
+  */
+  OdDbObjectId  MLeaderStyle();
+
+  /** \details
+    Returns the property set for the MLeader, including override values.
+
+    \param mleaderStyle [out]  Receives the properties of this MLeader.
+
+    \remarks
+    Returns eOk if successful. 
+  */
+  OdResult getOverridedMLeaderStyle(
+    OdDbMLeaderStyle& mleaderStyle);
+
+  /** \details
+    Sets the context data manager for this MLeader object.
+
+    \param pContextDataManager [in]  Pointer to a context data manager.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult setContextDataManager(
+    void* pContextDataManager);
+
+  /** \details
+    Returns the context data manager for this MLeader object.
+  */
+  void* getContextDataManager() const;
+
+  /** \details
+    Sets the position for the block referenced by this MLeader.
+
+    \param position [in]  Block position.
+  */
+  void setBlockPosition(
+    const OdGePoint3d& position);
+
+  /** \details
+    Returns the position for the block referenced by this MLeader.
+
+    \param position [out]  Receives the block position.
+  */
+  void getBlockPosition(
+    OdGePoint3d& position);
+
+  /** \details
+    Sets the location for the MText content associated with this MLeader.
+
+    \param location [in]  MLeader mtext location.
+  */
+  void setTextLocation(
+    const OdGePoint3d& location);
+
+  /** \details
+    Returns the location for the MText content associated with this MLeader.
+  
+    \param location [out]  Receives the MText location.
+  */
+  void getTextLocation(
+    OdGePoint3d& location);
+
+  /** \details
+    Sets the location for MLeader tolerance content.
+
+    \param location [in]  MLeader tolerance content location
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult setToleranceLocation(
+    const OdGePoint3d& location);
+
+  /** \details
+    Returns the location for MLeader tolerance content.
+
+    \param location [out]  Receives the MLeader tolerance content location.
+
+    Returns eOk if successful.
+  */
+  OdResult getToleranceLocation(
+    OdGePoint3d& location) const;
+
+  /** \details
+    Sets the arrow head symbol for a specified leader line, by ObjectId.
+
+    \param leaderLineIndex [in]  Leader line index.
+    \param arrowSymbolId [in]  Arrow symbol ObjectId.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  void setArrowSymbolId(
+    int leaderLineIndex,
+    OdDbObjectId arrowSymbolId);
+
+  /** \details
+    Returns the arrow head symbol for a specified leader line, by ObjectId.
+
+    \param leaderLineIndex [in]  Leader line index.
+  */
+  OdDbObjectId  arrowSymbolId(
+    int leaderLineIndex) const;
+
+  /** \details
+    Returns true if this MLeader has content, false otherwise.
+  */
+  bool  hasContent() const;
+
+  /** \details
+    Returns the connection point of this MLeader, for the speciefied direction.
+
+    \param vect [in]  The specified direction.
+    \param point [out]  Receives the connection point.
+  */
+  OdResult connectionPoint(
+    const OdGeVector3d& vect,
+    OdGePoint3d& point) const;
+
+  /** \details
+  Returns the connection point of this MLeader, for the speciefied direction.
+
+  \param vect [in]  The specified direction.
+  \param point [out]  Receives the connection point.
+  direction  The text attachment direction of MText. (Horizontally by default).  
+  */
+  OdResult connectionPoint(
+    const OdGeVector3d& vect,
+    OdGePoint3d& point,
+    OdDbMLeaderStyle::TextAttachmentDirection direction) const;
+
+  /** \details
+    Recomputes the dimension break points.
+
+    \remarks
+    Returns eOk if successful.
+  */
+    OdResult recomputeBreakPoints();
+
+  /** \details
+    Adds this MLeader object to the Model Space block of the specified database.
+
+    \param pDb [in]  Database to which this MLeader object should be added.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult postMLeaderToDb(
+    OdDbDatabase* pDb);
+
+  // dim associativity support
+
+  /** \details
+    Updates leader line positions.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult updateLeaderLinePosition();
+
+  /** \details
+    Removes the specified leader line's geometry association.
+
+    \param leaderLineIndex [in]  Leader line index.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult removeLeaderLineRefAssoc(
+    int leaderLineIndex) const;
+
+  /** \details
+    Updates this MLeaders's arrow head, landing gap, dog-leg length, and text height or block scale.
+
+    \param pContext [in]  MLeader context data.
+
+    \remarks
+    Returns eOk if successful.
+  */
+  OdResult updateContentScale(
+    OdDbMLeaderObjectContextData* pContext);
+
+  virtual bool isPlanar() const ODRX_OVERRIDE;
+  virtual OdResult getPlane(OdGePlane& plane, OdDb::Planarity& planarity) const ODRX_OVERRIDE;
+
+  /** \details
+    Sets the text attachment direction of MText.
+
+    \param direction [in]  The text attachment direction of MText.
+  */
+  void setTextAttachmentDirection(
+    OdDbMLeaderStyle::TextAttachmentDirection direction);
+
+  /** \details
+    Returns the text attachment direction of MText.
+  */
+  OdDbMLeaderStyle::TextAttachmentDirection textAttachmentDirection() const;
+
+  /** \details
+      Enumeration of the individual leader line properties which can be overridden.
+  */
+  enum LeaderLineOverrideType
+  {
+    /** \details
+      Leader line type (OdDbMLeaderStyle::LeaderType).
+    */
+    kOverrideLeaderType = 0,
+    /** \details
+      Leader line color.
+    */
+    kOverrideLineColor,
+    /** \details
+      Leader line linetype ID.
+    */
+    kOverrideLineTypeId,
+    /** \details
+      Leader line weight.
+    */
+    kOverrideLineWeight,
+    /** \details
+      Leader line arrow size.
+    */
+    kOverrideArrowSize,
+    /** \details
+      Leader line arrow symbol.
+    */
+    kOverrideArrowSymbolId  
+  };
+  
+  /** \details
+    Returns the override status for the specified line property.
+
+    \param leaderLineIndex [in]  leader line index for which status is to be returned.
+    \param value [in]  property identifier
+
+    \remarks
+    Returns true if an override has been set for the specified property, false otherwise.
+    (Override is set in the set* functions listed below, which accept leader line index as a first argument)
+  */
+  bool isOverride(int leaderLineIndex, LeaderLineOverrideType value);
+
+  void setLeaderLineType(
+    int leaderLineIndex,
+    OdDbMLeaderStyle::LeaderType leaderLineType);
+
+  OdDbMLeaderStyle::LeaderType leaderLineType(
+    int leaderLineIndex) const;
+
+  void setLeaderLineColor(
+    int leaderLineIndex,
+    const OdCmColor& leaderLineColor);
+
+  OdCmColor leaderLineColor(
+    int leaderLineIndex) const;
+
+  void setLeaderLineTypeId(
+    int leaderLineIndex,
+    OdDbObjectId leaderLineTypeId);
+
+  OdDbObjectId leaderLineTypeId(
+    int leaderLineIndex) const;
+
+  void setLeaderLineWeight(
+    int leaderLineIndex,
+    OdDb::LineWeight leaderLineWeight);
+
+  OdDb::LineWeight leaderLineWeight(
+    int leaderLineIndex) const;
+
+  void setArrowSize(
+    int leaderLineIndex,
+    double arrowSize);
+
+  double arrowSize(
+    int leaderLineIndex) const;
+
+  /** \details
+    Set extend to text mode.
+
+    \param bSet [in]  New value for extend to text mode flag.
+  */
+  void setExtendLeaderToText(bool bSet);
+
+  /** \details
+    Returns extend to text mode flag.
+  */
+  bool extendLeaderToText() const;
+
+protected:
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const ODRX_OVERRIDE;
+
+  virtual void subSetDatabaseDefaults(OdDbDatabase *pDb, bool doSubents) ODRX_OVERRIDE;
+
+  virtual void modified(const OdDbObject* pObj) ODRX_OVERRIDE;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbMLeader object pointers.
+*/
+typedef OdSmartPtr<OdDbMLeader> OdDbMLeaderPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_MLEADER_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderBreaks.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderBreaks.h
new file mode 100755
index 0000000..434d90c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderBreaks.h
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_MLEADERBREAKS_H
+#define OD_MLEADERBREAKS_H
+
+#include "DbMLeader.h"
+#include "Ge/GePoint3dArray.h"
+#include "TD_PackPush.h"
+
+struct TOOLKIT_EXPORT OdDbMLeaderBreaks
+{
+  struct BreakInfo
+  {
+    OdInt32 m_nSegment;
+    OdGePoint3dArray m_StartPoints;
+    OdGePoint3dArray m_EndPoints;
+  };
+  static OdResult getBreaks(const OdDbMLeader* pMleader, int leaderLineIndex, OdArray<BreakInfo>& breaks);
+  static OdResult setBreaks(OdDbMLeader* pMleader, int leaderLineIndex, const OdArray<BreakInfo>& breaks);
+  static OdResult getDoglegBreaks(const OdDbMLeader* pMleader, int leaderRootIndex, OdGePoint3dArray& startPoints, OdGePoint3dArray& endPoints);
+  static OdResult setDoglegBreaks(OdDbMLeader* pMleader, int leaderRootIndex, const OdGePoint3dArray& startPoints, const OdGePoint3dArray& endPoints);
+};
+
+#include "TD_PackPop.h"
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderStyle.h
new file mode 100755
index 0000000..3b4aec6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMLeaderStyle.h
@@ -0,0 +1,957 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBMLEADERSTYLE_H
+#define OD_DBMLEADERSTYLE_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "DbMText.h"
+
+class OdGeScale3d;
+class OdString;
+
+/** \details
+    This class represents MLeader Style objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+
+    OdDbMLeaderStyle objects are stored in the ACAD_MLEADERSTYLE dictionary 
+    in the Named Object Dictionary of an OdDbDatabase.
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMLeaderStyle : public OdDbObject
+{
+public:
+  /** \details
+    Enumeration for the content type of an MLeader.
+  */
+  enum ContentType {
+    /** \details
+      The MLeader has no content.
+    */
+    kNoneContent                = 0,
+
+    /** \details
+      The MLeader has block content.
+    */
+    kBlockContent               = 1,
+
+    /** \details
+      The MLeader has mtext content.
+    */
+    kMTextContent               = 2,
+
+    /** \details
+      The MLeader has tolerance content.
+    */
+    kToleranceContent           = 3
+  };
+
+  /** \details
+    Enumeration for the draw order type of an MLeader.
+  */
+  enum DrawMLeaderOrderType {
+    /** \details
+      MLeader content should be drawn first.
+    */
+    kDrawContentFirst           = 0,
+
+    /** \details
+      MLeader leaderline should be drawn first.
+    */
+    kDrawLeaderFirst            = 1
+  };
+
+  /** \details
+    Enumeration for MLeader Line draw order type.
+  */
+  enum DrawLeaderOrderType {
+    /** \details
+      MLeader leaderline head should be drawn first.
+    */
+    kDrawLeaderHeadFirst        = 0,
+
+    /** \details
+      MLeader leaderline tail should be drawn first.
+    */
+    kDrawLeaderTailFirst        = 1
+  };
+
+  /** \details
+    Enumeration for the leader type of MLeader.
+  */
+  enum LeaderType {
+    /** \details
+      Invisible leader.
+    */
+    kInVisibleLeader            = 0,
+
+    /** \details
+      Straight line leader.
+    */
+    kStraightLeader             = 1,
+    
+    /** \details
+      Spline leader.
+    */
+    kSplineLeader               = 2
+  };
+
+  /** \details
+    Enumeration for the text attachment direction of MLeader text.
+  */
+  enum TextAttachmentDirection {
+    /** \details
+      Horizontal.
+    */
+    kAttachmentHorizontal       = 0,
+    /** \details
+      Vertical.
+    */
+    kAttachmentVertical         = 1
+  };
+
+  /** \details
+    Enumeration for the text attachment type of MLeader text.
+  */
+  enum TextAttachmentType {
+    /** \details
+      Use the top of the top text line as the attachment point.
+    */
+    kAttachmentTopOfTop         = 0,
+
+    /** \details
+      Use the middle of the top text line as the attachment point.
+    */
+    kAttachmentMiddleOfTop      = 1,
+
+    /** \details
+      Use the middle of the text as the attachment point.
+    */
+    kAttachmentMiddle           = 2,
+
+    /** \details
+      Use the middle of the bottom text line as the attachment point.
+    */
+    kAttachmentMiddleOfBottom   = 3,
+
+    /** \details
+      Use the bottom of the bottom text line as the attachment point.
+    */
+    kAttachmentBottomOfBottom   = 4,
+
+    /** \details
+      Use the bottom of bottom text line as the attachment point. Underline the bottom line.
+    */
+    kAttachmentBottomLine       = 5,
+
+    /** \details
+      Use the bottom of the top text line as the attachment point. Underline the top line.
+    */
+    kAttachmentBottomOfTopLine  = 6,
+
+    /** \details
+      Use the bottom of the top text line as the attachment point.
+    */
+    kAttachmentBottomOfTop      = 7,
+
+    /** \details
+      Use the bottom of the top text line as the attachment point, and underline all content.
+    */
+    kAttachmentAllLine          = 8,
+
+    /** \details
+      Use the center of the mtext as the attachment point for vertical attachment.
+    */
+    kAttachmentCenter           = 9,
+
+    /** \details
+      Use the center of the mtext as the attachment point for vertical attachment, and overline/underline all content.
+    */
+    kAttachmentLinedCenter      = 10
+  };
+
+  /** \details
+    Enumeration for the text angle type of MLeader text.
+  */
+  enum TextAngleType {
+    /** \details
+      Text angle is specified according to the angle of the last leader line segment.
+    */
+    kInsertAngle                = 0,
+
+    /** \details
+      Text is unconditionally horizontal.
+    */
+    kHorizontalAngle            = 1,
+        
+    /** \details
+      Text angle is specified according to the angle of the last leader line segment, 
+      and text is always oriented right side up to be readable.
+    */
+    kAlwaysRightReadingAngle    = 2
+  };
+
+  /** \details
+    Enumeration for MLeader text alignment type.
+  */
+  enum TextAlignmentType {
+    /** \details
+      MLeader text is left justified.
+    */
+    kLeftAlignment              = 0,
+
+    /** \details
+      MLeader text is center justified.
+    */
+    kCenterAlignment            = 1,
+
+    /** \details
+      MLeader text is right justified.
+    */
+    kRightAlignment             = 2
+  };
+
+  /** \details
+    Enumeration for the block connection type of MLeader block content.
+  */
+  enum BlockConnectionType {
+    /** \details
+      MLeader should connect to the extents of the block.
+    */
+    kConnectExtents             = 0,
+
+    /** \details
+      MLeader should connect to the base point of the block.
+    */
+    kConnectBase                = 1
+  };
+
+  /** \details
+    Enumeration for the direction type of an MLeader.
+  */
+  enum LeaderDirectionType {
+    /** \details
+      Unknown direction type.
+    */
+    kUnknownLeader              = 0,
+
+    /** \details
+      Direction type of left.
+    */
+    kLeftLeader                 = 1,
+
+    /** \details
+      Direction type of right.
+    */
+    kRightLeader                = 2,
+
+    /** \details
+      Direction type of top.
+    */
+    kTopLeader                  = 3,
+
+    /** \details
+      Direction type of bottom.
+    */
+    kBottomLeader               = 4
+  };
+
+
+  /** \details
+    Enumeration for the segment angle type of an MLeader.
+  */
+  enum SegmentAngleType {
+    /** \details
+      Any.
+    */
+    kAny                        = 0, 
+
+    /** \details
+      Angle of 15 degrees.
+    */
+        k15                         = 1,
+
+    /** \details
+      Angle of 30 degrees.
+    */
+    k30                         = 2,
+
+    /** \details
+      Angle of 45 degrees.
+    */
+    k45                         = 3,
+
+    /** \details
+      Angle of 60 degrees.
+    */
+    k60                         = 4,
+
+    /** \details
+      Angle of 90 degrees.
+    */
+    k90                         = 6,
+
+    /** \details
+      Angle of 180 degrees.
+    */
+    kHorz                       = 12
+  };
+
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMLeaderStyle);
+
+  OdDbMLeaderStyle();
+
+  void setDatabaseDefaults( OdDbDatabase* pDb );
+
+//  virtual ~OdDbMLeaderStyle();
+
+  /** \details
+    Returns the name of this OdDbMLeaderStyle.
+  */
+  virtual OdString getName() const;
+ 
+  /** \details
+    Sets the name of this OdDbMLeaderStyle.
+
+    \param name [in]  Holds the name of OdDbMLeaderStyle.
+  */
+  virtual void   setName(
+    const OdString& name);
+
+  /** \details
+    Returns the description of this OdDbMLeaderStyle.
+  */
+  virtual OdString  description() const;
+
+  /** \details
+    Sets the description of this OdDbMLeaderStyle.
+
+    \param description [in]  OdDbMLeaderStyle description string.
+  */
+  virtual void   setDescription(
+    const OdString& description);
+
+  /** \details
+    Returns the set of bit flags this OdDbMLeaderStyle.
+  */
+  virtual OdUInt32       bitFlags() const;
+
+  /** \details
+    Sets the bit flags for this OdDbMLeaderStyle.
+
+    \param flags [in]  The bit flags for this OdDbMLeaderStyle.
+  */
+  virtual void setBitFlags(
+    OdUInt32 flags);
+
+  /** \details
+    Sets the content type for this OdDbMLeaderStyle.
+
+    \param contentType [in]  The content type.
+  */
+  void setContentType(
+    ContentType contentType);
+
+  /** \details
+    Returns the content type for this OdDbMLeaderStyle.
+  */
+  ContentType contentType() const;
+
+  /** \details
+    Sets the draw order for the content of OdDbMLeader objects using this OdDbMLeaderStyle.
+
+    \param drawMLeaderOrderType [in] Draw order type for MLeader content.
+  */
+  void setDrawMLeaderOrderType(
+    DrawMLeaderOrderType drawMLeaderOrderType);
+
+  /** \details
+    Returns the draw order for the content of OdDbMLeader objects using this OdDbMLeaderStyle.
+  */
+  DrawMLeaderOrderType  drawMLeaderOrderType() const;
+
+  /** \details
+    Sets the leader line draw order for OdDbMLeader objects using this OdDbMLeaderStyle.
+  
+    \param drawLeaderOrderType [in]  The Leader line draw order.
+  */
+  void setDrawLeaderOrderType(
+    DrawLeaderOrderType drawLeaderOrderType);
+
+  /** \details
+    Returns the leader line draw order for OdDbMLeader objects using this OdDbMLeaderStyle.
+  */
+  DrawLeaderOrderType drawLeaderOrderType() const;
+
+  /** \details
+    Sets the maximun number of segment points used for leader lines.
+
+    \param maxLeaderSegmentsPoints [in]  The maximum number of segment points.
+
+    \remarks
+    A value of 0 for maxLeaderSegmentsPoints indicates no limit.
+  */
+  void setMaxLeaderSegmentsPoints(
+    int maxLeaderSegmentsPoints);
+
+  /** \details
+    Returns the maximun number of segment points used for leader lines.
+  */
+  int maxLeaderSegmentsPoints() const;
+
+  /** \details
+    Sets the constraint angle for the first segment (used for creating OdDbMLeader objects).
+
+    \param angle [in]  Constraint angle.
+
+    \remarks
+    A value of kAny for "angle" indicates that no constraint is used.
+  */
+  void setFirstSegmentAngleConstraint(
+    SegmentAngleType angle);
+
+  /** \details
+    Returns the constraint angle for the first segment (used for creating OdDbMLeader objects).
+
+    \remarks
+    A return value of kAny indicates that no constraint is used.
+  */
+  SegmentAngleType  firstSegmentAngleConstraint() const;
+
+  /** \details
+    Sets the constraint angle for the second segment (used for creating OdDbMLeader objects).
+
+    \param angle [in]  Constraint angle.
+
+    \remarks
+    A value of kAny for "angle" indicates that no constraint is used.
+  */
+  void setSecondSegmentAngleConstraint(
+    SegmentAngleType angle);
+
+  /** \details
+    Sets the constraint angle for the second segment (used for creating OdDbMLeader objects).
+
+    \remarks
+    A return value of kAny indicates that no constraint is used.
+  */
+  SegmentAngleType  secondSegmentAngleConstraint() const;
+
+  /** \details
+    Sets the leader line type for this OdDbMLeaderStyle.
+
+    \param leaderLineType [in]  The leader line type.
+  */
+  void setLeaderLineType(
+    LeaderType leaderLineType);
+
+  /** \details
+    Returns the leader line type for this OdDbMLeaderStyle.
+  */
+  LeaderType  leaderLineType() const;
+
+  /** \details
+    Set the leader line color for this OdDbMLeaderStyle.
+
+    \param leaderLineColor [in]  The leader line color.
+  */
+  void setLeaderLineColor(
+    const OdCmColor& leaderLineColor);
+
+  /** \details
+    Returns the leader line color for this OdDbMLeaderStyle.
+  */
+  OdCmColor leaderLineColor() const;
+
+  /** \details
+    Sets the leader line linetype for this OdDbMLeaderStyle.
+
+    \param leaderLineTypeId [in]  The linetype Id.
+  */
+  void setLeaderLineTypeId(
+    OdDbObjectId leaderLineTypeId);
+
+  /** \details
+    Returns the leader line linetype for this OdDbMLeaderStyle.
+  */
+  OdDbObjectId  leaderLineTypeId() const;
+
+  /** \details
+    Sets the leader line lineweight for this OdDbMLeaderStyle.
+
+    \param leaderLineWeight [in]  The leader line lineweight.
+  */
+  void setLeaderLineWeight(
+    OdDb::LineWeight leaderLineWeight);
+
+  /** \details
+    Returns the leader line lineweight for this OdDbMLeaderStyle.
+  */
+  OdDb::LineWeight  leaderLineWeight() const;
+
+  /** \details
+    Sets the leader line landing for this OdDbMLeaderStyle.
+
+    \param enableLanding [in]  The leader line landing.
+
+    \remarks
+    If landing is disabled, landing gap is ignored.
+  */
+  void setEnableLanding(
+    bool enableLanding);
+
+  /** \details
+    Returns leader line landing for this OdDbMLeaderStyle.
+  */
+  bool  enableLanding() const;
+
+  /** \details
+    Sets the gap between the leader line tail and the MText associated with the OdDbMLeader.
+
+    \param landingGap [in]  The gap between the leader line tail and the MText associated with the OdDbMLeader.
+  */
+  void setLandingGap(
+    double landingGap);
+
+  /** \details
+    Returns the gap between the leader line tail and the MText associated with the OdDbMLeader.
+  */
+  double  landingGap() const;
+
+  /** \details
+    Sets the "dog leg" flag for this OdDbMLeaderStyle, which controls dog leg leader lines.
+
+    \param enableDogleg [in]  "Dog leg" flag.
+  */
+  void setEnableDogleg(
+    bool enableDogleg);
+
+  /** \details
+    Returns the "dog leg" flag for this OdDbMLeaderStyle, which controls dog leg leader lines.
+  */
+  bool  enableDogleg() const;
+
+  /** \details
+    Sets the "dog leg" leader line length for this OdDbMLeaderStyle.
+
+    \param doglegLength [in]  The "dog leg" leader line length.
+  */
+  void setDoglegLength(
+    double doglegLength);
+
+  /** \details
+    Returns the "dog leg" leader line length for this OdDbMLeaderStyle.
+  */
+  double  doglegLength() const;
+
+  /** \details
+    Sets the arrow symbol for this OdDbMLeaderStyle by name.
+
+    \param name [in]  Name of the arrow symbol.
+  */
+  void setArrowSymbolId(
+    const OdString& name);
+
+  /** \details
+    Sets the arrow symbol for this OdDbMLeaderStyle by OdDbObjectId.
+
+    \param arrowSymbolId [in]  OdDbObjectId of the arrow symbol.
+  */
+  void setArrowSymbolId(
+    OdDbObjectId arrowSymbolId);
+
+  /** \details
+    Returns the arrow symbol for this OdDbMLeaderStyle as an OdDbObjectId.
+  */
+  OdDbObjectId  arrowSymbolId() const;
+
+  /** \details
+    Sets the arrow size for this OdDbMLeaderStyle.
+
+    \param arrowSize [in]  The arrow size.
+  */
+  void setArrowSize(
+    double arrowSize);
+
+  /** \details
+    Returns the arrow size for this OdDbMLeaderStyle.
+  */
+  double  arrowSize() const;
+
+  /** \details
+    Sets the default text used in an associated MText balloon.
+
+    \param defaultMText [in]  The default text used in an associated MText balloon.
+  */
+  void setDefaultMText(
+    const OdDbMTextPtr defaultMText);
+
+  /** \details
+    Sets the default text used in an associated MText balloon.
+
+    \remarks
+    The returned MText object is cloned, and can be NULL if there is no default MText.
+  */
+  OdDbMTextPtr  defaultMText() const;
+
+  /** \details
+    Sets the text style for this OdDbMLeaderStyle by OdDbObjectId.
+
+    \param textStyleId [in]  The text style.
+  */
+  void setTextStyleId(
+    OdDbObjectId textStyleId);
+
+  /** \details
+    Returns the text style OdDbObjectId for this OdDbMLeaderStyle.
+  */
+  OdDbObjectId  textStyleId() const;
+
+  /** \details
+    Sets the text attachment type for this OdDbMLeaderStyle.
+
+    \param textAttachmentType [in]  The text attachment type.
+    \param leaderDirection [in]  The leader direction type.
+  */
+  void setTextAttachmentType(
+    TextAttachmentType textAttachmentType,
+    LeaderDirectionType leaderDirection);
+
+  /** \details
+    Returns the text attachment type for this OdDbMLeaderStyle.
+
+    \param leaderDirection [in]  The leader direction type.
+
+    \remarks
+    Returns the text attachment type.
+  */
+  TextAttachmentType  textAttachmentType(
+    LeaderDirectionType leaderDirection) const;
+
+  /** \details
+    Sets the text angle type for this OdDbMLeaderStyle.
+
+    \param textAngleType [in]  The text angle type.
+  */
+  void setTextAngleType(
+    TextAngleType textAngleType);
+
+  /** \details
+    Returns the text angle type for this OdDbMLeaderStyle.
+  */
+  TextAngleType textAngleType() const;
+
+  /** \details
+    Sets the text alignment type for this OdDbMLeaderStyle.
+
+    \param textAlignmentType [in]  The text alignment type.
+  */
+  void setTextAlignmentType(
+    TextAlignmentType textAlignmentType);
+
+  /** \details
+    Returns the text alignment type for this OdDbMLeaderStyle.
+  */
+  TextAlignmentType textAlignmentType() const;
+
+  /** \details
+    Sets the "always create left aligned text" property for this OdDbMLeaderStyle.
+
+    \param bAlwaysLeft [in]  If true, text will be left aligned for newly created OdDbMLeader objects.
+  */
+  void setTextAlignAlwaysLeft(
+    bool bAlwaysLeft);
+
+  /** \details
+    Returns the "always create left aligned text" property for this OdDbMLeaderStyle.
+  */
+  bool  textAlignAlwaysLeft() const;
+
+  /** \details
+    Sets the text color for this OdDbMLeaderStyle.
+
+    \param textColor [in]  The text color used for associated OdDbMText object.
+  */
+  void setTextColor(
+    const OdCmColor& textColor);
+
+  /** \details
+    Returns the text color for this OdDbMLeaderStyle.
+  */
+  OdCmColor textColor() const;
+
+  /** \details
+    Sets the text height for the associated OdDbMText object.
+  
+    \param textHeight [in]  The text height.
+  */
+  void setTextHeight(
+    double textHeight);
+
+  /** \details
+    Returns the text height for the associated OdDbMText object.
+  */
+  double  textHeight() const;
+
+  /** \details
+    Sets the display/hide property for the frame around associated text.
+  
+    \param enableFrameText [in]  True if a frame is to be displayed around associated text, false otherwise.
+  */
+  void setEnableFrameText(
+    bool enableFrameText);
+
+  /** \details
+    Returns true if a frame is to be displayed around associated text, false otherwise.
+  */
+  bool  enableFrameText() const;
+
+  /** \details
+    Sets the alignment space value for this OdDbMLeaderStyle.
+
+    \param alignSpace [in]  The alignment space value.
+  */
+  void setAlignSpace(
+    double alignSpace);
+
+  /** \details
+    Returns the alignment space value for this OdDbMLeaderStyle.
+  */
+  double  alignSpace() const;
+
+  /** \details
+    Sets the block to be associated with this OdDbMLeaderStyle by name.
+
+    \param name [in]  The name of the standard block.
+  */
+  void setBlockId(
+    const OdString& name);
+
+  /** \details
+    Sets the block to be associated with this OdDbMLeaderStyle by OdDbObjectId.
+
+    \param blockId [in]  OdDbObjectId of the OdDbBlockTableRecord associated with this OdDbMLeaderStyle.
+  */
+  void setBlockId(
+    OdDbObjectId blockId);
+
+  /** \details
+    Returns the OdDbObjectId of the block associated with this OdDbMLeaderStyle.
+  */
+  OdDbObjectId  blockId() const;
+
+  /** \details
+    Sets the color for block content associated with this OdDbMLeaderStyle.
+
+    \param blockColor [in]  The color for block content.
+  */
+  void setBlockColor(
+    const OdCmColor& blockColor);
+
+  /** \details
+    Returns the color for block content associated with this OdDbMLeaderStyle.
+  */
+  OdCmColor blockColor() const;
+
+  /** \details
+    Sets the scale for the block associated with this by OdDbMLeaderStyle.
+
+    \param scale [in]  The block scale.
+  */
+  void setBlockScale(
+    const OdGeScale3d& scale);
+
+  /** \details
+    Returns the scale for the block associated with this by OdDbMLeaderStyle.
+  */
+  OdGeScale3d blockScale() const;
+
+  /** \details
+    Enables/disables usage of the scale value set by setBlockScale().
+
+    \param enableBlockScale [in]  true if block scale is to be used, false otherwise.
+  */
+  void setEnableBlockScale(
+    bool enableBlockScale);
+
+  /** \details
+    Returns true if block scale (set by setBlockScale) is to be used, false otherwise.
+  */
+  bool  enableBlockScale() const;
+
+  /** \details
+    Sets the rotation value for the block referenced by this OdDbMLeaderStyle.
+
+    \param rotation [in]  The rotation value.
+  */
+  void setBlockRotation(
+    double rotation);
+
+  /** \details
+    Returns the rotation value for the block referenced by this OdDbMLeaderStyle.
+  */
+  double  blockRotation() const;
+
+  /** \details
+    Enables/disables usage of the rotation value set by setBlockRotation().
+
+    \param enableBlockRotation [in]  true if block rotation is to be used, false otherwise.
+
+  */
+  void setEnableBlockRotation(
+    bool enableBlockRotation);
+
+  /** \details
+    Returns true if block rotation (set by setBlockRotation) is to be used, false otherwise.
+  */
+  bool  enableBlockRotation() const;
+
+  /** \details
+    Sets the connection type for the associated block.
+
+    \param blockConnectionType [in]  The connection type.
+  */
+  void setBlockConnectionType(
+    BlockConnectionType blockConnectionType);
+
+  /** \details
+    Returns the connection type for the associated block.
+  */
+  BlockConnectionType blockConnectionType() const;
+
+  /** \details
+    Sets the scale factor for this OdDbMLeaderStyle.
+
+    \param scale [in]  Scale factor.
+  */
+  void setScale(
+    double scale);
+
+  /** \details
+    Returns the scale factor for this OdDbMLeaderStyle.
+  */
+  double  scale() const;
+
+  /** \details
+    Returns true if properties were modified, false otherwise.
+  */
+  bool  overwritePropChanged() const;
+
+  /** \details
+    Add this OdDbMLeaderStyle to the specified OdDbDatabase object.
+    
+    \param pDb [in]  Pointer of the database which will receive the OdDbMLeaderStyle object.
+    \param styleName [in]  Name of the style.
+    
+    \remarks
+    Returns the OdDbObjectID of the newly added OdDbMLeaderStyle object.
+  */
+  OdDbObjectId postMLeaderStyleToDb(
+    OdDbDatabase* pDb, 
+    const OdString& styleName);
+
+  /** \details
+    Sets the annotative flag for this OdDbMLeaderStyle.
+
+    \param isAnnotative [in]  The annotative status.
+  */
+  void setAnnotative(
+    bool isAnnotative);
+
+  /** \details
+    Returns the annotative flag for this OdDbMLeaderStyle.
+  */
+  bool  annotative() const;
+
+  /** \details
+    Sets the gap used in the process of breaking leader lines.
+
+    \param size [in]  The gap used in the process of breaking leader lines.
+  */
+  void setBreakSize (
+    double size);
+
+  /** \details
+    Returns the gap used in the process of breaking leader lines.
+  */
+  double  breakSize() const;
+
+  /** \details
+    Sets the text attachment direction of MText.
+
+    \param direction [in]  The text attachment direction of MText.
+  */
+
+  void setTextAttachmentDirection(
+    TextAttachmentDirection direction);
+
+  /** \details
+    Returns the text attachment direction of MText.
+  */
+  TextAttachmentDirection textAttachmentDirection() const;
+
+  /** \details
+    Sets horizontal mleader lines extend to text mode.
+
+    \param bSet [in]  Extend to text mode status.
+  */
+  void setExtendLeaderToText(bool bSet);
+
+  /** \details
+    Returns horizontal mleader lines extend to text mode.
+  */
+  bool extendLeaderToText() const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual void subClose();
+
+  OdResult subGetClassID(void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbMLeaderStyle object pointers.
+*/
+typedef OdSmartPtr<OdDbMLeaderStyle> OdDbMLeaderStylePtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMPolygon.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMPolygon.h
new file mode 100755
index 0000000..d4bc60f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMPolygon.h
@@ -0,0 +1,294 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBMPOLYGON_H_INCLUDED_
+#define _DBMPOLYGON_H_INCLUDED_
+
+#include "DbHatch.h"
+
+class OdDbCircle;
+class OdDb2dPolyline;
+class OdDbPolyline;
+class OdDbMPolygonCrossing;
+typedef OdArray<OdDbMPolygonCrossing,OdPlainObjectsAllocator<OdDbMPolygonCrossing> > OdDbMPolygonCrossingArray;
+class OdDbMPolygonNode;
+
+const double OdDbMPolygonCrossingFuzz = 1E-6;
+
+/** \details
+    This class processes one or more closed polygons as a single polygon.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMPolygon : public OdDbEntity {
+public:
+  OdDbMPolygon();
+  virtual ~OdDbMPolygon();
+
+  ODDB_DECLARE_MEMBERS(OdDbMPolygon);
+
+  virtual OdDbHatchPtr hatch();
+
+  virtual double elevation() const;
+  virtual void setElevation(double elevation);
+
+  virtual OdGeVector3d normal() const;
+  virtual void setNormal(const OdGeVector3d& normal);
+
+  virtual OdResult evaluateHatch(bool bUnderestimateNumLines = false);
+
+  virtual OdDbHatch::HatchPatternType patternType() const;
+
+  virtual const OdString& patternName() const;
+
+  virtual void setPattern(OdDbHatch::HatchPatternType patType,
+    const OdString& patName);
+
+  virtual double patternAngle() const;
+  virtual void setPatternAngle(double angle);
+
+  virtual double patternSpace() const;
+  virtual void setPatternSpace(double space);
+
+  virtual double patternScale() const;
+  virtual void setPatternScale(double scale);
+
+  virtual bool patternDouble() const;
+  virtual void setPatternDouble(bool isDouble);
+
+  virtual int numPatternDefinitions() const;
+  virtual void getPatternDefinitionAt(int index, 
+    double& angle,
+    double& baseX,
+    double& baseY,
+    double& offsetX,
+    double& offsetY,
+    OdGeDoubleArray& dashes)
+    const;
+
+  void setGradientAngle(double angle);
+  void setGradientShift( float shiftValue );
+  void setGradientOneColorMode( bool oneColorMode );
+  void setGradientColors( unsigned int count, 
+    const OdCmColor* colors,
+    const double* values );
+  void setGradient(OdDbHatch::GradientPatternType gradType,
+    const OdString& gradName);
+
+
+  virtual OdCmColor patternColor() const;
+  virtual void setPatternColor(const OdCmColor& pc);
+
+  /** \details
+    Returns the area of this entity.
+
+    \param area [out]  Receives the area.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getArea(double& area) const;
+
+  virtual OdGeVector2d getOffsetVector() const;
+
+  virtual OdResult appendLoopFromBoundary(const OdDbCircle* pCircle,
+    bool excludeCrossing = true, double tol = OdDbMPolygonCrossingFuzz);
+  virtual OdResult appendLoopFromBoundary(const OdDbPolyline* pPoly,
+    bool excludeCrossing = true, double tol = OdDbMPolygonCrossingFuzz);
+  virtual OdResult appendLoopFromBoundary(const OdDb2dPolyline* pPoly,
+    bool excludeCrossing = true, double tol = OdDbMPolygonCrossingFuzz);
+
+  /** \details
+    Returns the number of loops in the closed polygon.
+  */
+  virtual int numMPolygonLoops() const;
+
+  virtual OdResult getMPolygonLoopAt(int loopIndex, OdGePoint2dArray& vertices,
+    OdGeDoubleArray& bulges) const;
+
+  virtual OdResult appendMPolygonLoop(const OdGePoint2dArray& vertices,
+    const OdGeDoubleArray& bulges, bool excludeCrossing = true,
+    double tol = OdDbMPolygonCrossingFuzz);
+
+  virtual OdResult insertMPolygonLoopAt(int loopIndex, 
+    const OdGePoint2dArray& vertices, const OdGeDoubleArray& bulges, 
+    bool excludeCrossing = true, double tol = OdDbMPolygonCrossingFuzz);
+
+  virtual OdResult removeMPolygonLoopAt(int loopIndex);
+
+  /** \details
+    Declares the loop directions.
+  */
+  enum loopDir {
+    kExterior   = 0,   // Loop direction is counter-clockwise
+    kInterior   = 1,   // Loop direction is clockwise
+    kAnnotation = 2    // Text
+  };
+
+  /** \details
+    Gets the direction of the specified loop in the closed polygon.
+    Returns eOk if successful, or eInvalidInput if loop index is out of range.
+
+    \param lindex [in]  Loop index as an Ingeter value in the range 0 to numMPolygonLoops()-1.
+    \param dir [out]  Reference to a variable in which the loop direction must be saved.
+  */
+  virtual OdResult getLoopDirection(int lindex, OdDbMPolygon::loopDir& dir) const;
+
+  /** \details
+    Sets the direction for the specified loop in the closed polygon.
+    Returns eOk if successful, or eInvalidInput if loop index is out of range.
+
+    \param lindex [in]  Loop index as an Ingeter value in range 0 to numMPolygonLoops()-1.
+    \param dir [in]  Loop direction.
+  */
+  virtual OdResult setLoopDirection(int lindex, OdDbMPolygon::loopDir dir);
+
+  virtual bool isPointOnLoopBoundary(const OdGePoint3d& worldPt, int loop,
+    double tol = OdDbMPolygonCrossingFuzz) const;
+  virtual int isPointInsideMPolygon(const OdGePoint3d& worldPt, OdGeIntArray& loopsArray,
+    double tol = OdDbMPolygonCrossingFuzz) const;
+  /* Not implemented
+
+
+  virtual OdResult getMPolygonTree(OdDbMPolygonNode*& loopNode) const;
+  virtual void deleteMPolygonTree(OdDbMPolygonNode* loopNode) const;
+
+  virtual double getPerimeter() const;
+  virtual bool isBalanced() const;
+
+  virtual OdResult balanceTree();
+  virtual OdResult balanceDisplay();
+
+  //virtual OdResult getLoopAtGsMarker(OdGsMarker gsMark, int &loop) const;
+  virtual void getChildLoops(int curLoop, OdGeIntArray& selectedLoopIndexes) const;
+  virtual int getParentLoop(int curLoop) const;
+  virtual int getClosestLoopTo(const OdGePoint3d& worldPt) const;
+
+  // Mpolyon loop crossing and inside methods.
+  //
+
+  virtual OdResult loopCrossesItself(bool& crosses, bool findAll,
+    OdDbMPolygonCrossingArray& crossingsArray,
+    const OdGePoint2dArray& vertexPts, 
+    const OdGeDoubleArray& vertexBulges, 
+    double tol = OdDbMPolygonCrossingFuzz) const;
+
+  virtual bool loopCrossesItself(const OdGePoint2dArray& vertexPts, 
+    const OdGeDoubleArray& vertexBulges, 
+    double tol = OdDbMPolygonCrossingFuzz) const;
+
+  virtual OdResult loopCrossesMPolygon(bool& crosses, bool findAll,
+    OdDbMPolygonCrossingArray& crossingsArray,
+    const OdGePoint2dArray& testVertexPts, 
+    const OdGeDoubleArray& testVertexBulges, 
+    double tol = OdDbMPolygonCrossingFuzz) const;
+
+  virtual bool selfCrosses(const OdGePoint2dArray& vertexPts, 
+    const OdGeDoubleArray& vertexBulges,
+    double tol = OdDbMPolygonCrossingFuzz) const;
+
+  virtual bool includesTouchingLoops(double tol = OdDbMPolygonCrossingFuzz) const;
+
+  //virtual OdResult subGetClassID(void* pClsid) const;
+
+  virtual OdResult   intersectWith(
+    const OdDbEntity*   ent,
+    OdDb::Intersect     intType,
+    OdGePoint3dArray&   points,
+    OdGsMarker            thisGsMarker  = 0,
+    OdGsMarker            otherGsMarker = 0)
+    const;
+
+  virtual OdResult   intersectWith(
+    const OdDbEntity*   ent,
+    OdDb::Intersect     intType,
+    const OdGePlane&    projPlane,
+    OdGePoint3dArray&   points,
+    OdGsMarker            thisGsMarker  = 0,
+    OdGsMarker            otherGsMarker = 0)
+    const;
+
+  virtual OdResult   getOsnapPoints(
+    OdDb::OsnapMode       osnapMode,
+    OdGsMarker              gsSelectionMark,
+    const OdGePoint3d&    pickPoint,
+    const OdGePoint3d&    lastPoint,
+    const OdGeMatrix3d&   viewXform,
+    OdGePoint3dArray&        snapPoints,
+    OdDbIntArray&     geomIds) const;
+
+  virtual OdResult getGripPoints(OdGePoint3dArray&     gripPoints,
+    OdDbIntArray&  osnapModes,
+    OdDbIntArray&  geomIds) const;
+
+  virtual OdResult moveGripPointsAt(const OdDbIntArray& indices,
+    const OdGeVector3d& offset);
+
+  virtual OdResult getStretchPoints(OdGePoint3dArray& stretchPoints) const;
+
+  virtual OdResult moveStretchPointsAt( const OdDbIntArray& indices,
+    const OdGeVector3d& offset);
+
+  virtual OdResult createLoopsFromBoundaries (const OdDbObjectIdArray &ids,
+    OdIntArray &rejectedObjs,
+    bool excludeCrossing = true, double tol = OdDbMPolygonCrossingFuzz);
+  
+  virtual OdResult createLoops (const OdGePoint2dArrayArray &vertices,
+    const OdArray<OdGeDoubleArray> &bulges, OdIntArray &rejectedObjs,
+    bool excludeCrossing = true, double tol = OdDbMPolygonCrossingFuzz);
+  */
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult subTransformBy( 
+    const OdGeMatrix3d& xfn );
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual void subSetDatabaseDefaults(
+    OdDbDatabase* pDb, 
+    bool doSubents);
+
+  virtual void saveAs(
+    OdGiWorldDraw* pWd,
+    OdDb::DwgVersion ver ) const;
+};
+
+typedef OdSmartPtr<OdDbMPolygon> OdDbMPolygonPtr;
+
+#endif // _DBMPOLYGON_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMText.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMText.h
new file mode 100755
index 0000000..5702fb7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMText.h
@@ -0,0 +1,1112 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBMTEXT_H
+#define OD_DBMTEXT_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "TextDefs.h"
+#include "Ge/GePoint2d.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeDoubleArray.h"
+
+class OdGeVector3d;
+class OdGePoint2d;
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum LineSpacingStyle
+  {
+    kAtLeast = 1, // Larger characters on lines will increase line spacing.
+    kExactly = 2  // Line spacing is constant.
+  };
+}
+
+/** \details
+    This struct is used to describe a fragment of text created by explodeFragments().
+
+    \remarks
+    Each fragment contains a text string and its attributes.
+    Library: TD_Db
+    <group !!RECORDS_TD_APIRef>
+*/
+struct OdDbMTextFragment
+{
+  OdGePoint3d location;           // Insertion point.
+
+  /* OdGeVector3d normal;
+     OdGeVector3d direction;
+  */
+
+  OdString text;                  // Text string.
+
+  OdString font;                  // SHX Font.
+  OdString bigfont;               // SHX Bigfont.
+
+  OdGePoint2d extents;            // Extents in OCS.
+  double capsHeight;              // Height.
+  double widthFactor;             // Width factor.
+  double obliqueAngle;            // Obliquing angle.
+  double trackingFactor;          // Tracking factor.
+
+  // OdUInt16 colorIndex;
+
+  OdCmEntityColor color;          // Color.
+  bool vertical;                  // Text is vertical.
+
+  bool stackTop;                  // Text is top of stacked text.
+  bool stackBottom;               // Text is bottom of stacked text.
+
+  bool underlined;                // Text is underlined.
+  bool overlined;                 // Text is overlined.
+  bool strikethrough;
+
+  OdGePoint3d underPoints[2];     // Underline endpoints.
+  OdGePoint3d overPoints[2];      // Overline endpoints.
+  OdGePoint3d strikePoints[2];
+
+  //  true type font data
+
+  OdString  fontname;             // TrueType font name, or empty string.
+  int       charset;              // TrueType character set.
+  bool      bold;                 // Text is bold.
+  bool      italic;               // Text is italic.
+
+  // 0 - no change 1 - change to original 2 - change to other
+
+  int      changeStyle;           // 0 == No change; 1 == Change to original; 2 == Change to other
+  bool     lineBreak;             // Text is followed by a line break.
+  bool     newParagraph;          // Text fragment starts new paragraph.
+};
+
+/** \details
+    This struct is used by OdDbMText::getParagraphsIndent() to return indentation and tab data.
+    Library: TD_Db
+    <group !!RECORDS_TD_APIRef>
+*/
+struct OdDbMTextIndent
+{
+  double  paragraphInd;  // Subsequent line indent.
+
+  double  firstLineInd;  // First line indent.
+
+  OdGeDoubleArray tabs; // Tab settings.
+};
+
+typedef int(*OdDbMTextEnum)(
+    OdDbMTextFragment *,
+    void *);
+
+typedef OdArray<OdDbMTextIndent> OdDbMTextIndents;
+
+class OdDbText;
+
+/** \details
+    <group OdDb_Classes>
+
+    This class represents paragraph (multi-line) text (MText) entities in an OdDbDatabase instance.
+
+    Library: TD_Db
+
+    \sa
+    <link db_text_multi.html, Working with Multi-Line Text>
+
+    OdDbText, OdDbMline classes
+*/
+class TOOLKIT_EXPORT OdDbMText : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMText);
+
+  OdDbMText();
+
+  /** \details
+    Returns the insertion point of this MText entity (WCS equivalent of DXF 10).
+  */
+  OdGePoint3d location() const;
+
+  /** \details
+    Sets the insertion point of this MText entity (WCS equivalent of DXF 10).
+
+    \param location [in]  Insertion point.
+  */
+  void setLocation(
+    const OdGePoint3d& location);
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+
+    \param normal [in]  Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+
+  /** \details
+    Returns the WCS X-axis direction vector of this MText entity (DXF 11).
+  */
+  OdGeVector3d direction() const;
+
+  /** \details
+    Sets the WCS X-axis direction vector of this MText entity (DXF 11).
+
+    \param direction [in]  Direction vector.
+
+    \remarks
+    Direction and rotation are equivalent, and only one need be set when creating (or modifying) an MText entity.
+  */
+  void setDirection(
+    const OdGeVector3d& direction);
+
+  /** \details
+    Returns the rotation angle of this MText entity in radians (DXF 50).
+  */
+  double rotation() const;
+
+  /** \details
+    Sets the rotation angle of this MText entity in radians (DXF 50).
+
+    \param rotation [in]  Rotation angle in radians.
+  */
+  void setRotation(
+    double rotation);
+
+  /** \details
+    Returns the word-wrap width of this MText entity (DXF 41).
+
+    \remarks
+    Words exceeding this value will extend beyond this width.
+  */
+  double width() const;
+
+  /** \details
+    Sets the word-wrap width of this MText entity (DXF 41).
+
+    \param width [in]  Word-wrap width
+
+    \remarks
+    Words exceeding this value will extend beyond the Specified width.
+  */
+  void setWidth(
+    double width);
+
+  /** \details
+    Returns the Object ID of the text style of this MText entity (DXF 7).
+  */
+  OdDbObjectId textStyle() const;
+
+  /** \details
+    Sets the Object ID of the text style of this MText entity (DXF 7).
+
+    \param textStyleId [in]  Text style Object ID.
+  */
+  void setTextStyle(
+    OdDbObjectId textStyleId);
+
+  /** \details
+    Returns the text height of this MText entity (DXF 40).
+  */
+  double textHeight() const;
+
+  /** \details
+    Sets the text height of this MText entity (DXF 40).
+
+    \param height [in]  New text height value.
+
+    Throws:
+    Method generates the eInvalidInput exception when the text height is less than or equal to zero.
+  */
+  void setTextHeight(
+    double height);
+
+  enum AttachmentPoint
+  {
+    kTopLeft        = 1,    // Top Left
+    kTopCenter      = 2,    // Top Center
+    kTopRight       = 3,    // Top Right
+    kMiddleLeft     = 4,    // Middle Left
+    kMiddleCenter   = 5,    // Middle Center
+    kMiddleRight    = 6,    // Middle Right
+    kBottomLeft     = 7,    // Bottom Left
+    kBottomCenter   = 8,    // Bottom Center
+    kBottomRight    = 9,    // Bottom Right
+    kBaseLeft       = 10,   // Baseline Left /reserved for future use/
+    kBaseCenter     = 11,   // Baseline Center /reserved for future use/
+    kBaseRight      = 12,   // Baseline Right /reserved for future use/
+    kBaseAlign      = 13,   // Baseline Aligned /reserved for future use/
+    kBottomAlign    = 14,   // Bottom Aligned /reserved for future use/
+    kMiddleAlign    = 15,   // Middle Aligned /reserved for future use/
+    kTopAlign       = 16,   // Top Aligned /reserved for future use/
+    kBaseFit        = 17,   // Baseline Fit /reserved for future use/
+    kBottomFit      = 18,   // Bottom Fit /reserved for future use/
+    kMiddleFit      = 19,   // Middle Fit /reserved for future use/
+    kTopFit         = 20,   // Top Fit /reserved for future use/
+    kBaseMid        = 21,   // Baseline Middled /reserved for future use/
+    kBottomMid      = 22,   // Bottom Middled /reserved for future use/
+    kMiddleMid      = 23,   // Middle Middled /reserved for future use/
+    kTopMid         = 24    // Top Middled /reserved for future use/
+  };
+
+  /** \details
+    Returns the type of the attachment point of this MText entity (DXF 71).
+
+    \remarks
+    attachment() returns one of the following:
+
+    <table>
+    Name            Value
+    kTopLeft        1
+    kTopCenter      2
+    kTopRight       3
+    kMiddleLeft     4
+    kMiddleCenter   5
+    kMiddleRight    6
+    kBottomLeft     7
+    kBottomCenter   8
+    kBottomRight    9
+    </table>
+  */
+  AttachmentPoint attachment() const;
+
+  /** \details
+    Sets the type of the attachment point of this MText entity (DXF 71).
+    \param type [in]  Type of the attachment point.
+
+    \remarks
+    attachment must be one of the following:
+
+    <table>
+    Name            Value
+    kTopLeft        1
+    kTopCenter      2
+    kTopRight       3
+    kMiddleLeft     4
+    kMiddleCenter   5
+    kMiddleRight    6
+    kBottomLeft     7
+    kBottomCenter   8
+    kBottomRight    9
+    </table>
+
+    \note
+    setAttachment() keeps the location of this MText entity constant
+    while changing the attachment type, thereby changing the extents of (moving) this MText entity.
+
+    setAttachmentMovingLocation() moves the location of the MText entity
+    while changing the attachment type, thereby maintaining the extents (not moving) this MText entity.
+
+    Throws:
+    Method generates the eInvalidInput exception when the text attachment number is out of the range 1 to 9.
+
+    \sa
+    OdDbMText::setAttachmentMovingLocation() method
+  */
+  void setAttachment(
+    AttachmentPoint type);
+
+  enum FlowDirection
+  {
+    kLtoR     = 1,  // Left to Right
+    kRtoL     = 2,  // Right to Left
+    kTtoB     = 3,  // Top to Bottom
+    kBtoT     = 4,  // Bottom to Top
+    kByStyle  = 5   // By Style
+  };
+
+  /** \details
+    Returns the /flow direction/ of this MText entity (DXF 72).
+
+    \remarks
+    flowDirection() returns one of the following:
+
+    <table>
+    Name        Value
+    kLtoR       1
+    kRtoL       2
+    kTtoB       3
+    kBtoT       4
+    kByStyle    5
+    </table>
+  */
+  FlowDirection flowDirection() const;
+
+  /** \details
+    Sets the /flow direction/ of this MText entity (DXF 72).
+
+    \param flowDirection [in]  New /flow direction/ enumerator.
+
+    \remarks
+    flowDirection() returns one of the following:
+
+    <table>
+    Name        Value
+    kLtoR       1
+    kRtoL       2
+    kTtoB       3
+    kBtoT       4
+    kByStyle    5
+    </table>
+
+    Throws:
+    Method generates the eInvalidInput exception when the /flow direction/ is out of the range 1 to 5.
+  */
+  void setFlowDirection(
+    FlowDirection flowDirection);
+
+  /** \details
+    Returns a copy of the character content of this MText entity (DXF 1 & 3).
+  */
+  OdString contents() const;
+
+  /** \details
+    Sets the character content of this MText entity (DXF 1 & 3).
+
+    \param text [in]  New character content.
+  */
+  int setContents(const OdString& text);
+
+  /** \details
+  Sets the character content of this MText entity (DXF 1 & 3) from the RTF-encoded text string.
+
+    \param text [in]  New character content.
+  */
+  int setContentsRTF(const OdString& text);
+
+  /** \details
+    Returns the width of the bounding box of this MText entity.
+
+    \remarks
+    This value will probably be different than that returned by OdDbMText::width().
+  */
+  double actualWidth() const;
+
+  /** \details
+    Returns the non-break space string "\~".
+
+    \remarks
+    May be used in place of "\~" to make code more understandable.
+  */
+  static const OdString nonBreakSpace();
+
+  /** \details
+    Returns the overline on string "\O".
+
+    \remarks
+    May be used in place of "\O" to make code more understandable.
+  */
+  static const OdString overlineOn();
+
+  /** \details
+    Returns the overline off string "\o".
+
+    \remarks
+    May be used in place of "\o" to make code more understandable.
+  */
+  static const OdString overlineOff();
+
+  /** \details
+    Returns the underline on string "\L".
+
+    \remarks
+    May be used in place of "\L" to make code more understandable.
+  */
+  static const OdString underlineOn();
+
+  /** \details
+    Returns the underline off string "\l".
+
+    \remarks
+    May be used in place of "\l" to make code more understandable.
+  */
+  static const OdString underlineOff();
+
+  /** \details
+    Returns the color change string "\C".
+
+    \remarks
+    May be used in place of "\C" to make code more understandable.
+  */
+  static const OdString colorChange();
+
+  /** \details
+    Returns the font change string "\F".
+
+    \remarks
+    May be used in place of "\F" to make code more understandable.
+  */
+  static const OdString fontChange();
+
+  /** \details
+    Returns the height change string "\H".
+
+    \remarks
+    May be used in place of "\H" to make code more understandable.
+  */
+  static const OdString heightChange();
+
+  /** \details
+    Returns the width change string "\W".
+
+    \remarks
+    May be used in place of "\W" to make code more understandable.
+  */
+  static const OdString widthChange();
+
+  /** \details
+    Returns the oblique angle change string "\Q".
+
+    \remarks
+    May be used in place of "\Q" to make code more understandable.
+  */
+  static const OdString obliqueChange();
+
+  /** \details
+    Returns the track change string "\T".
+
+    \remarks
+    May be used in place of "\T" to make code more understandable.
+  */
+  static const OdString trackChange();
+
+  /** \details
+    Returns the line break string "\p".
+
+    \remarks
+    May be used in place of "\p" to make code more understandable.
+  */
+  static const OdString lineBreak();
+
+  /** \details
+    Returns the paragraph break string "\P".
+    \remarks
+    May be used in place of "\P" to make code more understandable.
+  */
+  static const OdString paragraphBreak();
+
+  /** \details
+    Returns the stacked text start string "\S".
+    \remarks
+    May be used in place of "\S" to make code more understandable.
+  */
+  static const OdString stackStart();
+
+  /** \details
+    Returns the alignment change string "\A".
+
+    \remarks
+    May be used in place of "\A" to make code more understandable.
+  */
+  static const OdString alignChange();
+
+  /** \details
+    Returns the begin block string "{".
+
+    \remarks
+    May be used in place of "{" to make code more understandable.
+  */
+  static const OdString blockBegin();
+
+  /** \details
+    Returns the end block string "}".
+
+    \remarks
+    May be used in place of "}" to make code more understandable.
+  */
+  static const OdString blockEnd();
+
+  /** \details
+    Returns the strike through on string "\K".
+
+    \remarks
+    May be used in place of "\K" to make code more understandable.
+  */
+  static const OdString strikethroughOn(); 
+
+  /** \details
+    Returns the strike through off string "\k".
+
+    \remarks
+    May be used in place of "\k" to make code more understandable.
+  */
+  static const OdString strikethroughOff();
+
+  /** \details
+    Sets the linespacing style of this MText entity (DXF 73).
+
+    \param lineSpacingStyle [in]  Linespacing style.
+
+    <table>
+    Name        Value
+    kAtLeast       1
+    kExactly       2
+    </table>
+
+    Throws:
+    Method generates the eInvalidInput exception when the linespacing style is not 1 or 2.
+  */
+  void setLineSpacingStyle(
+    OdDb::LineSpacingStyle lineSpacingStyle);
+
+  /** \details
+    Returns the linespacing style of this MText entity (DXF 73).
+  */
+  OdDb::LineSpacingStyle lineSpacingStyle() const;
+
+  /** \details
+    Sets the linespacing factor of this MText entity (DXF 44).
+
+    \param lineSpacingFactor [in]  Linespacing Factor.
+
+    Throws:
+    Method generates the eInvalidInput exception when the line spacing factor is out of the range 0.25 to 4.00.
+  */
+  void setLineSpacingFactor(
+    double lineSpacingFactor);
+
+  /** \details
+      Returns the linespacing factor of this MText entity (DXF 44).
+  */
+  double lineSpacingFactor() const;
+
+  /** \details
+    Returns the horizontal mode of this MText entity (used for DXF 71).
+
+    \remarks
+    horizontalMode returns one of the following:
+
+    <table>
+    Name                Value
+    OdDb::kTextLeft      0
+    OdDb::kTextCenter    1
+    OdDb::kTextRight     2
+    OdDb::kTextAlign     3
+    OdDb::kTextMid       4
+    OdDb::kTextFit       5
+    </table>
+
+  */
+  OdDb::TextHorzMode horizontalMode() const;
+
+  /** \details
+    Sets the horizontal mode of this MText entity (used for DXF 71).
+
+    \param horizontalMode [in]  Horizontal mode.
+
+    \remarks
+    horizontalMode must be one of the following:
+
+    <table>
+    Name                Value
+    OdDb::kTextLeft      0
+    OdDb::kTextCenter    1
+    OdDb::kTextRight     2
+    OdDb::kTextAlign     3
+    OdDb::kTextMid       4
+    OdDb::kTextFit       5
+    </table>
+
+    Throws:
+    Method generates the eNotApplicable exception when the horizontal mode is out of the range 0 to 5.
+  */
+  void setHorizontalMode(
+    OdDb::TextHorzMode horizontalMode);
+
+  /** \details
+    Returns the vertical mode of this MText entity (used for DXF 71).
+
+    \remarks
+    verticalMode() returns one of the following:
+
+    <table>
+    Name                  Value
+    OdDb::kTextBase       0
+    OdDb::kkTextBottom    1
+    OdDb::kkTextVertMid   2
+    OdDb::kkTextTop       3
+    </table>
+  */
+  OdDb::TextVertMode verticalMode() const;
+
+  /** \details
+    Sets the vertical mode of this MText entity (used for DXF 71).
+
+    \param verticalMode [in]  Vertical mode.
+
+    \remarks
+    verticalMode must be one of the following:
+
+    <table>
+    Name                  Value
+    OdDb::kTextBottom     1
+    OdDb::kTextVertMid    2
+    OdDb::kTextTop        3
+    </table>
+
+    Throws:
+    Method generates the eNotApplicable exception when the vertical mode is out of the range 1 to 3.
+  */
+  void setVerticalMode(
+    OdDb::TextVertMode verticalMode);
+
+  /** \details
+  Returns the entity coordinate system matrix.
+  */
+  OdGeMatrix3d getEcs( ) const;
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm);
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult explodeGeometry(
+    OdRxObjectPtrArray& entitySet) const;
+
+  OdResult subGetClassID(
+    void* pClsid) const;
+
+  void subClose();
+
+  /** \details
+    Explodes this MText entity into a sequence of simple text fragments, passing each
+    fragment to the specified function
+
+    \param fragmentFn [in]  Function pointer to the fragment elaboration callback function.
+    \param params [in]  Void pointer to the fragmentFn callback function's second argument.
+    \param ctxt [in]  Drawing context.
+
+    \remarks
+    The prototype of the fragment elaboration is as follows:
+
+            int (*OdDbMtextEnum)(OdDbMTextFragment *fragment, void *param)
+
+    If ctxt is null, the current OdGiWorldDraw object will be used.
+
+    The elaboration function should return 1 to continue, or 0 to terminate the explosion.
+
+    Each new line in this MText entity, and each change of text attributes, will start a new fragment.
+  */
+  void explodeFragments(
+    OdDbMTextEnum fragmentFn,
+    void *params,
+    OdGiWorldDraw *ctxt = 0) const;
+
+  /** \details
+    Returns the actual height of this MText entity (depends on contents).
+
+    \param ctxt [in]  Drawing context.
+
+    \remarks
+    If ctxt is null, the current OdGiWorldDraw object will be used.
+  */
+  double actualHeight(
+    OdGiWorldDraw *ctxt = 0) const;
+
+  /** \details
+    Returns the WCS actual bounding points of this MText entity.
+
+    \param boundingPoints [out]  Receives the bounding points.
+    \param dGapX [in]  specifies gap aroung actual text in X direction.
+    \param dGapY [in]  specifies gap aroung actual text in Y direction.
+
+    \remarks
+    The points are returned as follows:
+
+    <table>
+    Point                Corner
+    boundingPoints[0]    Top left
+    boundingPoints[1]    Top right
+    boundingPoints[2]    Bottom left
+    boundingPoints[3]    Bottom right
+    </table>
+  */
+  void getActualBoundingPoints(
+    OdGePoint3dArray& boundingPoints, double dGapX = 0., double dGapY = 0.) const;
+
+  /** \details
+    Returns the WCS bounding points of this MText entity box.
+
+    \param boundingPoints [out]  Receives the bounding points.
+
+    \remarks
+    The points are returned as follows:
+
+    <table>
+    Point                Corner
+    boundingPoints[0]    Top left
+    boundingPoints[1]    Top right
+    boundingPoints[2]    Bottom left
+    boundingPoints[3]    Bottom right
+    </table>
+  */
+  void getBoundingPoints(
+    OdGePoint3dArray& boundingPoints) const;
+
+  /** \details
+    Sets the type of the attachment point of this MText entity (DXF 71).
+
+    \param attachment [in]  Type of the attachment point.
+
+    \remarks
+    attachment must be one of the following:
+
+    <table>
+    Name            Value
+    kTopLeft        1
+    kTopCenter      2
+    kTopRight       3
+    kMiddleLeft     4
+    kMiddleCenter   5
+    kMiddleRight    6
+    kBottomLeft     7
+    kBottomCenter   8
+    kBottomRight    9
+    </table>
+
+    \note
+    setAttachment() keeps the location of this MText entity constant
+    while changing the attachment type, thereby changing the extents of (moving) this MText entity.
+
+    setAttachmentMovingLocation() adjusts the location of the MText entity
+    while changing the attachment type, so as to maintain the extents (not move) this MText entity.
+
+    \sa
+    OdDbMText::setAttachment() method
+  */
+  OdResult setAttachmentMovingLocation(
+    AttachmentPoint attachment);
+
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  /** \details
+    Returns true if and only if background fill is on of this MText entity (DXF 90, bit 0x01).
+  */
+  bool backgroundFillOn() const;
+
+  /** \details
+    Controls the background fill of this MText entity (DXF 90, bit 0x01).
+    \param bEnable [in]  True to enable background fill, false to disable.
+  */
+  void setBackgroundFill(
+    bool bEnable);
+
+  /** \details
+    Returns the /background fill color/ of this MText entity (DXF 63 and optionally 421 & 431).
+  */
+  OdCmColor getBackgroundFillColor() const;
+
+  /** \details
+    Sets the /background fill color/ of this MText entity (DXF 63 and optionally 421 & 431).
+    \param color [in]  New color value.
+  */
+  void setBackgroundFillColor(
+    const OdCmColor& color);
+
+  /** \details
+    Returns the background scale factor of this MText entity (DXF 45).
+
+    \remarks
+    The filled background area is extended by (ScaleFactor - 1) * TextHeight in all directions.
+  */
+  double getBackgroundScaleFactor() const;
+
+  /** \details
+    Sets the background scale factor of this MText entity (DXF 45).
+
+    \param scaleFactor [in]  Background scale factor. [1..5]
+
+    \remarks
+    The filled background area is extended by (ScaleFactor - 1) * TextHeight in all directions.
+
+    Throws:
+    Method generates the eInvalidInput exception when the scale factor is out of the range 1.0 to 5.0.
+  */
+  void setBackgroundScaleFactor(
+    const double scaleFactor);
+
+  /** \details
+    Returns the /background transparency/ of this MText entity (DXF 441).
+  */
+  OdCmTransparency getBackgroundTransparency() const;
+
+  /** \details
+    Sets the /background transparency/ of this MText entity (DXF 441).
+    \param transparency [in]  New transparency value.
+  */
+  void setBackgroundTransparency(
+    const OdCmTransparency& transparency);
+
+  /** \details
+    Returns true if and only if the /screen background color/ is
+    used as the/ background color/ of this MText entity (DXF 90, bit 0x02).
+  */
+  bool useBackgroundColorOn() const;
+
+  /** \details
+    Controls the use of the /screen background color/ as the /background color/
+    of this MText entity (DXF 90, bit 0x02).
+
+    \param enable [in]  True to use the /screen background color/, false to use
+               the setBackgroundFillColor() method.
+  */
+  void setUseBackgroundColor(
+    bool enable);
+
+  /** \details
+    Returns the paragraph indentation and tab data of this MText entity.
+    \param indents [out]  Receives the indentation and tab data.
+  */
+  void getParagraphsIndent(
+    OdDbMTextIndents& indents) const;
+
+  OdDbObjectId setField(
+    const OdString& fieldName,
+    OdDbField* pField);
+  OdResult removeField(
+    OdDbObjectId fieldId);
+  OdDbObjectId removeField(
+    const OdString& fieldName);
+
+  /** \details
+    Converts the fields in this MText entity to text, and removes the fields.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    The fields are not evaluated before conversion.
+  */
+  void convertFieldToText();
+
+  /** \details
+    This function is an override for OdDbEntity::subSetDatabaseDefaults() to set 
+    the dimension style of this entity to the current style for the specified database.
+  */
+  void subSetDatabaseDefaults(
+    OdDbDatabase *pDb,
+    bool doSubents);
+
+  enum ColumnType {
+    kNoColumns,
+    kStaticColumns,
+    kDynamicColumns
+  };
+
+  void setDynamicColumns(double width, double gutter, bool bAutoHeigh);
+  void setStaticColumns(double width, double gutter, OdInt16 count);
+
+  /** \details
+    Returns the column type of this MText entity.
+
+    \remarks
+    The type is returned as follows:
+
+    <table>
+    Name            Value
+    kNoColumns        1
+    kStaticColumns    2
+    kDynamicColumns   3
+    </table>
+  */
+  ColumnType getColumnType() const;
+
+  /** \details
+    Sets the column type of this MText entity.
+
+    \param colType [in]  Column type.
+
+    <table>
+    Name            Value
+    kNoColumns        1
+    kStaticColumns    2
+    kDynamicColumns   3
+    </table>
+  */
+  void setColumnType(ColumnType colType);
+
+  /** \details
+    Returns the column auto height status of this MText entity.
+  */
+  bool getColumnAutoHeight() const;
+
+  /** \details
+    Switches the column auto height status of this MText entity.
+
+    \param bAutoHeigh [in]  New column auto height status.
+
+    Throws:
+    Method generates the eNotApplicable exception when the column type is not set to kDynamicColumns.
+  */
+  void setColumnAutoHeight(bool bAutoHeigh);
+
+  /** \details
+    Returns the column count of this MText entity.
+  */
+  OdInt32 getColumnCount() const;
+
+  /** \details
+    Sets the column count of this MText entity.
+
+    \param numCol [in]  Number of columns.
+
+    Throws:
+    Method generates the eInvalidInput exception when the column count is out of the range 1 to 100.
+  */
+  void setColumnCount(OdInt32 numCol);
+
+  /** \details
+    Returns the column width of this MText entity.
+  */
+  double getColumnWidth() const;
+
+  /** \details
+    Sets the column width of this MText entity.
+
+    \param colWidth [in]  Width of columns.
+
+    Throws:
+    Method generates the eInvalidInput exception when the column width is a non-positive double value.
+  */
+  void setColumnWidth(double colWidth);
+
+  /** \details
+    Returns the column gutter of this MText entity.
+  */
+  double getColumnGutterWidth() const;
+
+  /** \details
+    Sets the column gutter of this MText entity.
+
+    \param colGutter [in]  Gutter of columns.
+
+    Throws:
+    Method generates the eInvalidInput exception when the column gutter is a negative value.
+  */
+  void setColumnGutterWidth(double colGutter);
+
+  /** \details
+    Returns the column flow reverse status of this MText entity.
+  */
+  bool getColumnFlowReversed() const;
+
+  /** \details
+    Switches the column flow reverse status of this MText entity.
+
+    \param bFlowRev [in]  New status.
+  */
+  void setColumnFlowReversed(bool bFlowRev);
+
+  /** \details
+    Returns the column height of this MText entity.
+
+    \param col [in]  Column number.
+  */
+  double getColumnHeight(OdInt16 col) const;
+
+  /** \details
+    Sets the column height of this MText entity.
+
+    \param col [in]  Column number.
+    \param colHeight [in]  Height of the specified column.
+
+    Throws:
+    Method generates the eInvalidInput exception when the column height is a non-positive double value.
+  */
+  void setColumnHeight(OdInt16 col, double colHeight);
+
+  /** \details
+    Returns the height of the box of this MText entity.
+  */
+  double height() const;
+
+  /** \details
+    Sets the height of the box of this MText entity.
+
+    \param value [in]  New height value.
+  */
+  void setHeight(double value);
+
+  virtual OdResult getPlane(OdGePlane& plane, OdDb::Planarity& planarity) const;
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+
+  /** \details
+    Returns the ascent of this MText entity.
+  */
+  double      ascent() const;
+
+  /** \details
+    Returns the descent of this MText entity.
+  */
+  double      descent() const;
+
+  /** \details
+    Sets the flag controlling mtext border's visibility.
+
+    \param bEnable [in]  - True means borders will be visible and false means borders will be invisible.
+  */
+  void setShowBorders(bool bEnable);
+
+  /** Gets the flag controlling mtext border's visibility.  
+  */
+  bool showBorders();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbMText object pointers.
+*/
+typedef OdSmartPtr<OdDbMText> OdDbMTextPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMatchProperties.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMatchProperties.h
new file mode 100755
index 0000000..2f131c5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMatchProperties.h
@@ -0,0 +1,104 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDBMATCHPROPERTIES_H
+#define ODDBMATCHPROPERTIES_H
+
+#include "RxObject.h"
+
+class OdDbEntity;
+
+/** \details
+    This class is an abstract base class for classes which 
+    to copy properties between entities.
+    
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT ODRX_ABSTRACT OdDbMatchProperties : public OdRxObject
+{
+public:
+  enum Flags
+  {
+    kColorFlag          = 0x00001,    // Color
+    kLayerFlag          = 0x00002,    // Layer
+    kLtypeFlag          = 0x00004,    // Linetype
+    kThicknessFlag      = 0x00008,    // Thickness
+    kLtscaleFlag        = 0x00010,    // Linetype Scale
+    kTextFlag           = 0x00020,    // Text
+    kDimensionFlag      = 0x00040,    // Dimension
+    kHatchFlag          = 0x00080,    // Hatch
+    kLweightFlag        = 0x00100,    // Lineweight
+    kPlotstylenameFlag  = 0x00200,    // Plotstyle Name
+    kPolylineFlag       = 0x00400,    // 
+    kViewportFlag       = 0x00800,
+    kTableFlag          = 0x01000,
+    kMaterialFlag       = 0x02000,
+    kShadowDisplayFlag  = 0x04000,
+    kMultileaderFlag    = 0x08000,
+    kTransparencyFlag   = 0x10000,
+    kSetAllFlagsOn      = 0x1FFFF     // All
+  };
+
+  ODRX_DECLARE_MEMBERS(OdDbMatchProperties);
+
+  /** \details
+  Copies the specified properties from the source entity to the destination entity.
+  \param pSource [in]  Pointer to the source.
+  \param pDestination [in]  Pointer to the destination.
+  \param flags [in]  Properties to copy.
+
+  \remarks
+  flags must be a combination of one or more of the following:
+
+  <table>
+  Name                  Value   Property
+  kColorFlag          0x00001   Color
+  kLayerFlag          0x00002   Layer
+  kLtypeFlag          0x00004   Linetype
+  kThicknessFlag      0x00008   Thickness
+  kLtscaleFlag        0x00010   Linetype Scale
+  kTextFlag           0x00020   Text
+  kDimensionFlag      0x00040   Dimension
+  kHatchFlag          0x00080   Hatch
+  kLweightFlag        0x00100   Lineweight
+  kPlotstylenameFlag  0x00200   Plotstyle Name
+  kPolylineFlag       0x00400    
+  kViewportFlag       0x00800
+  kTableFlag          0x01000
+  kMaterialFlag       0x02000
+  kShadowDisplayFlag  0x04000
+  kMultileaderFlag    0x08000
+  kTransparencyFlag   0x10000
+  kSetAllFlagsOn      0x1FFFF   All
+  </table>
+  */
+  virtual void copyProperties(
+    OdDbEntity* pSource, 
+    OdDbEntity* pDestination, 
+    unsigned int flags) const = 0;
+};
+
+#endif // ODDBMATCHPROPERTIES_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMaterial.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMaterial.h
new file mode 100755
index 0000000..c05dad7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMaterial.h
@@ -0,0 +1,462 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __ODDBMATERIAL_H__
+#define __ODDBMATERIAL_H__
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiMaterial.h"
+#include "DbObject.h"
+
+/** \details
+  This class represents Material properties for shaded entities.
+
+  <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbMaterial : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMaterial);
+
+  OdDbMaterial();
+  
+  /** \details
+    Sets the name of this Material object.
+    
+    \param name [in]  Name.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult setName(
+    const OdString& name);
+  /** \details
+    Returns the name of this Material object.
+  */
+  virtual OdString name() const;
+
+
+  /** \details
+    Sets the description of this Material object.
+    
+    \param description [in]  Description.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual void setDescription(
+    const OdString& description);
+  /** \details
+    Returns the description of this Material object.
+  */
+  virtual OdString description() const;
+
+
+  /** \details
+    Sets the ambient (shadow) component of this Material object.
+    
+    \param ambientColor [in]  Ambient color.
+
+  */
+  virtual void setAmbient(
+    const OdGiMaterialColor& ambientColor);
+    
+  /** \details
+    Returns the ambient (shadow) component of this Material object.
+    
+    \param ambientColor [out]  Receives the ambient color.
+
+  */
+  virtual void ambient(
+    OdGiMaterialColor& ambientColor) const;
+
+  /** \details
+    Sets the diffuse (main) component of this Material object.
+    
+    \param diffuseColor [in]  Diffuse color.
+    \param diffuseMap [in]  Diffuse map.
+  */
+  virtual void setDiffuse(
+    const OdGiMaterialColor& diffuseColor, 
+    const OdGiMaterialMap& diffuseMap);
+    
+  /** \details
+    Returns the diffuse (main) component of this Material object.
+    
+    \param diffuseColor [out]  Receives the diffuse color.
+    \param diffuseMap [out]  Receives the diffuse map.
+
+  */
+  virtual void diffuse(
+    OdGiMaterialColor& diffuseColor, 
+    OdGiMaterialMap& diffuseMap) const;
+
+
+  /** \details
+    Sets the specular (reflection) component of this Material object.
+    
+    \param specularColor [in]  Specular color.
+    \param specularMap [in]  Specular map.
+    \param glossFactor [in]  Gloss factor.
+    
+    \remarks
+    The specular component is viewpoint dependent, and most apparent when the entity is highlighted.
+  */
+  virtual void setSpecular(
+    const OdGiMaterialColor& specularColor, 
+    const OdGiMaterialMap& specularMap, 
+    double glossFactor);
+
+  /** \details
+    Returns the specular (reflection) component of this Material object.
+    
+    \param specularColor [out]  Receives the specular color.
+    \param specularMap [out]  Receives the specular map.
+    \param glossFactor [out]  Receives the gloss factor.
+    
+    \remarks
+    The specular component is viewpoint dependent, and most apparent when the entity is highlighted.
+  */
+  virtual void specular(
+    OdGiMaterialColor& specularColor, 
+    OdGiMaterialMap& specularMap, 
+    double& glossFactor) const;
+
+  /** \details
+    Sets the reflection component of this Material object.
+    
+    \param reflectionMap [in]  Reflection map.
+    
+    \remarks
+    The reflection component creates a mirror finish on the entity.
+  */
+  virtual void setReflection(const OdGiMaterialMap& reflectionMap);
+
+  /** \details
+    Returns the reflection component of this Material object.
+    
+    \param reflectionMap [out]  Receives the reflection map.
+    
+    \remarks
+    The reflection component creates a mirror finish on the entity .
+  */
+  virtual void reflection(OdGiMaterialMap& reflectionMap) const;
+
+
+  /** \details
+    Sets the opacity component of this Material object.
+    
+    \param opacityPercentage [in]  Opacity percentage.
+    \param opacityMap [in]  Opacity map.
+  */
+  virtual void setOpacity(
+    double opacityPercentage, 
+    const OdGiMaterialMap& opacityMap);
+
+  /** \details
+    Returns the opacity component of this Material object.
+    
+    \param opacityPercentage [out]  Receives the opacity percentage.
+    \param opacityMap [out]  Receives the opacity map.
+  */
+  virtual void opacity(
+    double& opacityPercentage, 
+    OdGiMaterialMap& opacityMap) const;
+
+  /** \details
+    Sets the bump component of this Material object.
+    
+    \param bumpMap [in]  Bump map.
+  */
+  virtual void setBump(const OdGiMaterialMap& bumpMap);
+
+  /** \details
+    Returns the bump component of this Material object.
+    
+    \param bumpMap [out]  Receives the bump map.
+  */
+  virtual void bump(OdGiMaterialMap& map) const;
+
+  /** \details
+    Sets the refraction component of this Material object.
+    
+    \param refractionIndex [in]  Refraction index.
+    \param refractionMap [in]  Refraction map.
+  */
+  virtual void setRefraction(
+    double refractionIndex, 
+    const OdGiMaterialMap& refractionMap);
+
+  /** \details
+    Returns the refraction component of this Material object.
+    
+    \param refractionIndex [out]  Receives the refraction index.
+    \param refractionMap [out]  Receives the refraction map.
+  */
+  virtual void refraction(
+    double& refractionIndex,
+    OdGiMaterialMap& refractionMap) const;
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+    
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+    
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+    
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual OdGiDrawable* drawable();
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+
+/*-------------- New in AC21--------------------*/
+
+  /** \details
+    Returns the translucence of this Material object.
+  */
+  virtual double translucence() const;
+
+  /** \details
+    Sets the translucence of this Material object.
+    \param translucence [in]  Translucense.
+  */
+  virtual void setTranslucence(double translucence);
+
+  /** \details
+    Returns the self-illumination of this Material object.
+  */
+  virtual double selfIllumination() const;
+
+  /** \details
+    Sets the self-illumination of this material object
+    \param selfIllumination [in]  Self-illumination.
+  */
+  virtual void setSelfIllumination(double selfIllumination);
+
+  /** \details
+    Returns the refelectivity of this Material object. 
+  */
+  virtual double reflectivity() const;
+
+  /** \details
+    Sets the reflectivity of this Material object.
+    \param reflectivity [in]  Reflectivity.
+  */
+  virtual void  setReflectivity(double reflectivity);
+
+  /** \details
+    Returns the mode of this Material object.
+  */
+  virtual OdGiMaterialTraits::Mode mode() const;
+
+  /** \details
+    Sets the mode of this Material object.
+    \param mode [in]  Mode.
+  */
+  virtual void setMode(OdGiMaterialTraits::Mode mode);
+
+  /** \details
+    Returns the channel flags of this material object.
+  */
+  virtual OdGiMaterialTraits::ChannelFlags channelFlags() const;
+  /** \details
+    Sets the channel flags for this material object.
+    \remarks
+    This allows multiple channels to be added to a material 
+    and each channel to be enabled or disabled individually.
+    \param channelFlags [in]  channel flags.
+  */
+  virtual void setChannelFlags(OdGiMaterialTraits::ChannelFlags channelFlags);
+
+  /** \details
+    Returns the illumination model of this Material object.
+    \remarks
+    The illumination model determines the type of shader used to render this Material object.
+  */
+  virtual OdGiMaterialTraits::IlluminationModel illuminationModel() const;
+
+  /** \details
+    Sets the illumination model of this Material object.
+    \param illuminationModel [in]  Illumination model.
+  */
+  virtual void setIlluminationModel(OdGiMaterialTraits::IlluminationModel illuminationMode);
+
+  /*---- Advanced material properties in AC21 XRec ----*/
+
+  /** \details
+    Returns the color bleed scale of this Material object.
+  */
+  virtual double colorBleedScale() const;
+
+  /** \details
+    Sets the color bleed scale of this Material object.
+    \param scale [in]  Color bleed scale.
+  */
+  virtual void setColorBleedScale(double scale);
+
+  /** \details
+    Returns the indirect bump scale of this Material object.
+  */
+  virtual double indirectBumpScale() const;
+
+  /** \details
+    Sets the indirect bump scale of this Material object.
+    \param scale [in]  Indirect bump scale.
+  */
+  virtual void setIndirectBumpScale(double scale);
+
+  /** \details
+    Returns the reflectance scale of this Material object.
+  */
+  virtual double reflectanceScale() const;
+
+  /** \details
+    Sets the reflectance scale of this Material object.
+    \param scale [in]  Reflectance scale.
+  */
+  virtual void setReflectanceScale(double scale);
+
+  /** \details
+    Returns the transmittance scale of this Material object.
+  */
+  virtual double transmittanceScale() const;
+
+  /** \details
+    Sets the transmittance scale of this Material object.
+    \param scale [in]  Transmittance scale.
+  */
+  virtual void setTransmittanceScale(double scale);
+
+  /** \details
+    Returns the two sided mode of this Material object.
+  */
+  virtual bool twoSided() const;
+
+  /** \details
+    Sets the two sided mode of this Material object.
+    \param flag [in]  Two sided mode flag.
+  */
+  virtual void setTwoSided(bool flag);
+
+  /** \details
+    Returns the luminance mode of this Material object.
+  */
+  virtual OdGiMaterialTraits::LuminanceMode luminanceMode() const;
+
+  /** \details
+    Sets the luminance mode of this Material object.
+    \param mode [in]  Luminance mode.
+  */
+  virtual void setLuminanceMode(OdGiMaterialTraits::LuminanceMode mode);
+
+  /** \details
+    Returns the luminance of this Material object.
+  */
+  virtual double luminance() const;
+
+  /** \details
+    Sets the luminance of this Material object.
+    \param value [in]  Luminance value.
+  */
+  virtual void setLuminance(double value);
+
+  /** \details
+    Returns the shininess of this Material object.
+    \remarks
+    See also specular gloss factor.
+  */
+  virtual double shininess() const;
+  
+  /** \details
+    Sets the shininess of this Material object.
+    \remarks
+    See also specular gloss factor.
+    \param value [in]  Shinincess value.
+  */
+  virtual void setShininess(double value);
+
+  /** \details
+    Returns the normalMap component of this Material object.
+    \param normalMap [out]  Receives the normalMap.
+    \param method [out]  Receives normal map method.
+    \param strength [out]  Receives normal map strength factor.
+  */
+  virtual void normalMap(OdGiMaterialMap &normalMap, OdGiMaterialTraits::NormalMapMethod &method, double &strength) const;
+
+  /** \details
+    Sets the normalMap component of this Material object.
+    
+    \param normalMap [in]  Normal map.
+    \param method [in]  Normal map method.
+    \param strength [in]  Normal map strength factor.
+  */
+  virtual void setNormalMap(const OdGiMaterialMap &normalMap, OdGiMaterialTraits::NormalMapMethod method, double strength);
+
+  /** \details
+    Returns the anonymous material mode of this Material object.
+  */
+  virtual bool isAnonymous() const;
+
+  /** \details
+    Sets the anonymous material mode of this Material object.
+    \param flag [in]  Anonymous mode flag.
+  */
+  virtual void setAnonymous(bool flag);
+
+  /** \details
+    Returns the global illumination mode of this Material object.
+  */
+  virtual OdGiMaterialTraits::GlobalIlluminationMode globalIllumination() const;
+
+  /** \details
+    Sets the global illumination mode of this Material object.
+    \param mode [in]  Global illumination mode.
+  */
+  virtual void setGlobalIllumination(OdGiMaterialTraits::GlobalIlluminationMode mode);
+
+  /** \details
+    Returns the final gather mode of this Material object.
+  */
+  virtual OdGiMaterialTraits::FinalGatherMode finalGather() const;
+
+  /** \details
+    Sets the final gather mode of this Material object.
+    \param mode [in]  Final gather mode.
+  */
+  virtual void setFinalGather(OdGiMaterialTraits::FinalGatherMode mode);
+
+  virtual OdResult subGetClassID(void* pClsid) const;
+
+  OdResult subErase( bool erasing );
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbMaterial object pointers.
+*/
+typedef OdSmartPtr<OdDbMaterial> OdDbMaterialPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMline.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMline.h
new file mode 100755
index 0000000..1fad163
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMline.h
@@ -0,0 +1,344 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBMLINE_H
+#define OD_DBMLINE_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+//#include "Ge/GeVoidPointerArray.h"
+
+/** \details
+  This struct contains enumerated types and data used by OdDbMline.
+  
+  <group !!RECORDS_TD_APIRef>
+*/
+struct Mline
+{
+  typedef OdInt8 MlineJustification;
+  enum
+  {
+    kTop = 0,
+    kZero,
+    kBottom
+  };
+  enum
+  {
+    kOpen = 0,
+    kClosed,
+    kMerged
+  };
+};
+
+class OdGePlane;
+
+/** \details
+  Library: TD_Db
+  <group !!RECORDS_TD_APIRef>
+*/
+      struct OdMLSegment
+{
+  OdGeDoubleArray m_AreaFillParams;
+  OdGeDoubleArray m_SegParams;
+};
+
+typedef OdArray<OdMLSegment> OdMLSegmentArray;
+
+/** \details
+    <group OdDb_Classes>
+
+    This class represents multi-line entities in an OdDbDatabase instance.
+    
+    Library: TD_Db
+
+    \sa
+    <link db_mline.html, Working with Multi-Lines>
+
+    OdDbXline, OdDbLine classes
+*/
+class TOOLKIT_EXPORT OdDbMline : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMline);
+
+  OdDbMline();
+
+  /** \details
+    Sets the Object ID of the MLine Style of this MLine entity (DXF 340).
+    \param styleId [in]  Object ID of the MLine Style
+  */
+  void setStyle(
+    const OdDbObjectId &styleId);
+
+  /** \details
+    Returns the Object ID of the MLine Style of this MLine entity (DXF 340).
+  */
+  OdDbObjectId style() const;
+
+  /** \details
+    Sets the justification of this MLine entity (DXF 70).
+    \param justification [in]  Justification.
+  */
+  void setJustification(Mline::MlineJustification justification);
+
+  /** \details
+    Returns the justification of this MLine entity (DXF 70).
+  */
+  Mline::MlineJustification justification() const;
+
+  /** \details
+    Sets the scale of this entity (DXF 40).
+  */
+  void setScale(
+    double scale);
+
+  /** \details
+    Returns the scale of this entity (DXF 40).
+  */
+  double scale() const;
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    \param normal [in]  Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+
+  /** \details
+    Appends a vertex onto the end of this MLine entity.
+
+    \param newVertex [in]  Vertex to append.
+    
+    \remarks
+    newVertex is projected onto the plane of this MLine entity, and this projected vertex
+    appended to it.     
+  */
+  void appendSeg(
+    const OdGePoint3d& newVertex);
+
+  /** \details
+    Returns and removes the last vertex from this MLine entity.
+
+    \param lastVertex [out]  Receives the last vertex.
+  */
+  void removeLastSeg
+    (OdGePoint3d& lastVertex);
+
+  /** \details
+    Moves the specified vertex of this MLine entity.
+
+    \param vertexIndex [in]  Vertex index.
+    \param newPosition [in]  New WCS position for specified vertex.
+
+    \remarks
+    newPosition is projected onto the plane of this MLine entity, and this projected vertex
+    replaces the specified vertex.     
+  */
+  void moveVertexAt(
+    int vertexIndex, 
+    const OdGePoint3d& newPosition);
+
+  /** \details
+    Controls the closed status of this MLine entity (DXF 71, bit 0x02).
+    
+    \param closedMline [in]  Sets this MLine closed if true, open if false.
+  */
+  void setClosedMline(
+    bool closedMline);
+
+  /** \details
+    Returns the closed status of this MLine entity(DXF 71, bit 0x02).
+    \remarks
+    Returns true if and only if this MLine entity is closed.
+  */
+  bool closedMline() const;
+
+  /** \details
+    Sets the "Suppress Start Caps" status of this MLine entity (DXF 71, bit 0x04).
+
+    \param suppressIt [in]  Suppresses start caps if true, enables start caps if false.
+  */
+  void setSupressStartCaps(
+    bool supressIt);
+
+  /** \details
+    Returns the "Suppress Start Caps" status of this MLine entity (DXF 71, bit 0x04).
+
+    \remarks
+    Returns true if and only if start caps are suppressed.
+  */
+  bool supressStartCaps() const;
+
+  /** \details
+    Sets the "Suppress End Caps" status of this MLine entity (DXF 71, bit 0x04).
+
+    \param suppressIt [in]  Suppresses end caps if true, enables end caps if false.
+  */
+  void setSupressEndCaps(
+    bool supressIt);
+
+  /** \details
+    Returns the "Suppress End Caps" status of this MLine entity (DXF 71, bit 0x04).
+
+    \remarks
+    Returns true if and only if end caps are suppressed.
+  */
+  bool supressEndCaps() const;
+
+  /** \details
+    Returns the number of vertices in this MLine entity (DXF 72).
+  */
+  int numVertices() const;
+
+  /** \details
+    Returns the specified vertex of this MLine entity (DXF 10 or 11).
+    \param vertexIndex [in]  Vertex index.
+  */
+  OdGePoint3d vertexAt(
+    int vertexIndex) const;
+
+  /** \details
+    Returns the direction vector of the segment starting at the specified vertex (DXF 12).
+    \param vertexIndex [in]  Vertex index.
+  */
+  OdGeVector3d axisAt(
+    int vertexIndex) const;
+
+  /** \details
+    Returns the direction vector of the miter starting at the specified vertex (DXF 13).
+    \param vertexIndex [in]  Vertex index.
+  */
+  OdGeVector3d miterAt(
+    int vertexIndex) const;
+
+  /** \details
+    Returns the element and area fill parameters at the specified vertex (DXF 41 and 42).
+    \param vertexIndex [in]  Vertex index.
+    \param params [out]  Receives the element and area fill parameters.
+  */
+  void getParametersAt(int index, OdMLSegmentArray& params) const;
+
+  /** \details
+    Sets the element and area fill parameters at the specified vertex (DXF 41 and 42).
+    \param vertexIndex [in]  Vertex index.
+    \param params [in]  Element and area fill parameters.
+  */
+  void setParametersAt(
+    int vertexIndex, 
+    const OdMLSegmentArray& params);
+
+  /** \details
+    Attempts to find which element of the Mline object contains the point.
+    \param pt [in]  Point to find intersection with Mline elements.
+    \remarks
+    If an element is not found that directly contains the point and the Mline object is not closed,
+    then the ends of the MLine object are virtually extended to see if point lies in the path of any
+    element. 
+    If successful, the index number of the element that contains point is returned.
+    If not successful, then -1 is returned.
+  */
+  int element(const OdGePoint3d &pt) const;
+
+  /** \details
+    Finds closest point to this Mline object.
+    \param pt [in]  Input point.
+    \param ptOut [out]  Output point.
+    \param bExtend [in]  Virtually extends Mline geometry.
+    \param bExcludeCaps [in]  Excludes Mline start/end caps and joints.
+  */
+  OdResult getClosestPointTo(const OdGePoint3d &pt, OdGePoint3d& ptOut, bool bExtend, bool bExcludeCaps = false) const;
+
+  /** \details
+    Finds closest point to this Mline object projected on specified plane.
+    \param pt [in]  Input point.
+    \param norm [in]  Plane normal.
+    \param ptOut [out]  Output point.
+    \param bExtend [in]  Virtually extends Mline geometry.
+    \param bExcludeCaps [in]  Excludes Mline start/end caps and joints.
+  */
+  OdResult getClosestPointTo(const OdGePoint3d &pt, const OdGeVector3d &norm, OdGePoint3d& ptOut, bool bExtend, bool bExcludeCaps = false) const;
+
+  void getPlane(OdGePlane &plane) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const; /* Replace OdRxObjectPtrArray */
+
+  virtual OdResult explodeGeometry(OdRxObjectPtrArray& entitySet) const;
+
+  virtual void subClose();
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+
+  virtual void subSetDatabaseDefaults(OdDbDatabase * pDb, bool doSubents);
+
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type,
+                                               OdGsMarker gsMark,
+                                               const OdGePoint3d& ,
+                                               const OdGeMatrix3d& ,
+                                               OdDbFullSubentPathArray& subentPaths,
+                                               const OdDbObjectIdArray* pEntAndInsertStack) const;
+
+  virtual OdResult subGetGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath,
+                                               OdGsMarkerArray& gsMarkers) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbMline object pointers.
+*/
+typedef OdSmartPtr<OdDbMline> OdDbMlinePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMlineStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMlineStyle.h
new file mode 100755
index 0000000..994229d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMlineStyle.h
@@ -0,0 +1,371 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBMLINESTYLE_H
+#define OD_DBMLINESTYLE_H
+
+#include "TD_PackPush.h"
+
+// Bricsys uses some of these constant :
+#define MSTYLE_DXF_FILL_ON (0x1)
+#define MSTYLE_DXF_SHOW_MITERS (0x2)
+#define MSTYLE_DXF_START_SQUARE_CAP (0x10)
+#define MSTYLE_DXF_START_INNER_ARCS (0x20)
+#define MSTYLE_DXF_START_ROUND_CAP (0x40)
+#define MSTYLE_DXF_END_SQUARE_CAP (0x100)
+#define MSTYLE_DXF_END_INNER_ARCS (0x200)
+#define MSTYLE_DXF_END_ROUND_CAP (0x400)
+#define MSTYLE_DXF_JUST_TOP (0x1000)
+#define MSTYLE_DXF_JUST_ZERO (0x2000)
+#define MSTYLE_DXF_JUST_BOT (0x4000)
+
+#include "DbObject.h"
+
+class OdDbMlineStyleImpl;
+
+/** \details
+    This class represents Mline Style objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+
+    OdDbMlineStyle objects are stored in the ACAD_MLINESTYLE dictionary 
+    in the Named Object Dictionary of an OdDbDatabase.
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMlineStyle: public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMlineStyle);
+
+  OdDbMlineStyle();
+
+  /** \details
+    Initializes or re-initializes this Mline Style object.
+
+    \remarks
+    Initialization is done as follows:
+  
+    <table>
+    Property      Value
+    Name          Empty string
+    Description   Empty string
+    FillColor     0
+    StartAngle    90�
+    EndAngle      90�
+    ElementList   Empty
+    </table>
+  */
+  void initMlineStyle();
+
+  /** \details
+    Copies the specified OdDdMlineStyle object to this Mline Style object. 
+
+    \param source [in]  Object to be cloned.
+    \param checkIfReferenced [in]  Currently ignored.
+    
+  */
+  void set(
+    const OdDbMlineStyle & source, 
+    bool checkIfReferenced = true);
+
+  /** \details
+    Sets the description for this Mline Style object (DXF 3).
+
+    \param description [in]  Description.
+  */
+  void setDescription(
+    const OdString& description);
+
+  /** \details
+    Returns the description for this Mline Style object (DXF 3).
+  */
+  const OdString description() const;
+
+  /** \details
+    Sets the name for this Mline Style object (DXF 2).
+
+    \param name [in]  Name.
+  */
+  void setName(
+    const OdString& name);
+
+  /** \details
+    Returns the name for this Mline Style object (DXF 2).
+  */
+  const OdString name() const;
+
+  /** \details
+    Controls the display of Miters for this Mline Style object (DXF 70, bit 0x02).
+
+    \param showThem [in]  True if and only if miters are to be displayed.  
+  */
+  void setShowMiters(
+    bool showThem);
+
+  /** \details
+    Returns the display of Miters for this Mline Style object (DXF 70, bit 0x02).
+    
+    \remarks
+    Returns true if and only if miters are displayed.
+  */
+  bool showMiters() const;
+
+  /** \details
+    Controls the display of Start Square Caps for this Mline Style object (DXF 70, bit 0x01).
+
+    \param showThem [in]  True if and only if Start Square Caps are to be displayed.  
+  */
+  void setStartSquareCap(
+    bool showThem);
+
+  /** \details
+    Returns the display of Start Square Caps for this Mline Style object (DXF 70, bit 0x01).
+
+    \remarks
+    Returns true if and only if Start Square Caps are to be displayed.
+  */
+  bool startSquareCap() const;
+
+  /** \details
+    Controls the display of Start Round Caps for this Mline Style object (DXF 70, bit 0x40).
+
+    \param showThem [in]  True if and only if Start Round Caps are to be displayed.  
+  */
+  void setStartRoundCap(
+    bool showThem);
+
+  /** \details
+    Returns the display of Start Round Caps for this Mline Style object (DXF 70, bit 0x40).
+    \remarks
+    Returns true if and only if Start Round Caps are to be displayed.
+  */
+  bool startRoundCap() const;
+
+  /** \details
+    Controls the display of Start Inner Arcs for this Mline Style object (DXF 70, bit 0x20).
+
+    \param showThem [in]  True if and only if Start Inners Arcs are to be displayed.  
+  */
+  void setStartInnerArcs(
+    bool showThem);
+
+  /** \details
+    Returns the display of Start Inner Arcs for this Mline Style object (DXF 70, bit 0x20).
+
+    \remarks
+    Returns true if and only if Start Inners Arcs are to be displayed.
+  */
+  bool startInnerArcs() const;
+
+  /** \details
+    Controls the display of End Square Caps for this Mline Style object (DXF 70, bit 0x80).
+
+    \param showThem [in]  True if and only if End Square Caps are to be displayed.
+      
+  */
+  void setEndSquareCap(
+    bool showThem);
+
+  /** \details
+    Returns the display of End Square Caps for this Mline Style object (DXF 70, bit 0x80).
+    \remarks
+    True if and only if End Square Caps are to be displayed.
+  */
+  bool endSquareCap() const;
+
+  /** \details
+    Controls the display of End Round Caps for this Mline Style object (DXF 70, bit 0x200).
+
+    \param showThem [in]  True if and only if End Round Caps are to be displayed.  
+  */
+  void setEndRoundCap(
+    bool showThem);
+
+  /** \details
+    Returns the display of End Round Caps for this Mline Style object (DXF 70, bit 0x200).
+    
+    \remarks
+    Returns true if and only if End Round Caps are to be displayed.
+  */
+  bool endRoundCap() const;
+
+
+  /** \details
+    Controls the display of End Inner Arcs for this Mline Style object (DXF 70, bit 0x100).
+
+    \param showThem [in]  True if and only if End Inner Arcs are to be displayed.  
+  */
+  void setEndInnerArcs(bool showThem);
+
+  /** \details
+    Returns the display of End Inner Arcs for this Mline Style object (DXF 70, bit 0x100).
+    \remarks
+    Returns true if and only if End Inner Arcs are to be displayed.
+  */
+  bool endInnerArcs() const;
+
+  /** \details
+    Sets the fill color for this Mline Style object (DXF 62).
+    
+    \param fillColor [in]  Fill Color.
+  */
+  void setFillColor(
+    const OdCmColor& fillColor);
+
+  /** \details
+    Returns the fill color for this Mline Style object (DXF 62).
+  */
+  OdCmColor fillColor() const;
+
+  /** \details
+    Controls the filled flag for this Mline Style object (DXF 70, bit 0x01).
+    
+    \param filled [in]  True for filled, false for not filled.
+  */
+  void setFilled(
+    bool filled);
+
+  /** \details
+    Returns the filled flag for this Mline Style object (DXF 70, bit 0x01).
+  */
+  bool filled() const;
+
+  /** \details
+    Sets the start angle for this Mline Style object (DXF 51).
+    
+    \param startAngle [in]  Start angle.
+  */
+  void setStartAngle(
+    double startAngle);
+  
+  /** \details
+    Returns the start angle for this Mline Style object (DXF 51).
+  */
+  double startAngle() const;
+
+  /** \details
+    Sets the end angle for this Mline Style object (DXF 52).
+    
+    \param endAngle [in]  End angle.
+  */
+  void setEndAngle(double endAngle);
+
+  /** \details
+      Returns the end angle for this Mline Style object (DXF 52).
+  */
+  double endAngle() const;
+
+  /** \details
+    Adds an element to this MLine Style object.
+
+    \param offset [in]  Offset of this element.
+    \param color [in]  Color of this element.
+    \param linetypeId [in]  Object ID of the linetype of this element.
+    \param checkIfReferenced [in]  Currently ignored.
+
+    \remarks
+    Returns the index of the newly added element.
+  */
+  int addElement(
+    double offset, 
+    const OdCmColor& color,
+    OdDbObjectId linetypeId, 
+    bool checkIfReferenced = true);
+
+  /** \details
+    Removes the specified element from this MLine Style object.
+
+    \param elementIndex [in]  Index of element to be removed.  
+  */
+  void removeElementAt(int elem);
+
+  /** \details
+      Returns the number of elements in this MLine Style (DXF 71).
+  */
+  int numElements() const;
+
+  /** \details
+    Sets the specified element of this MLine Style object.
+
+    \param elementIndex [in]  Index of element to modify.  
+    \param offset [in]  Offset of this element.
+    \param color [in]  Color of this element.
+    \param linetypeId [in]  Object ID of the linetype of this element.
+
+    \remarks
+    Returns the index of the newly added element.
+  */
+  void setElement(
+    int elementIndex, 
+    double offset, 
+    const OdCmColor& color,
+    OdDbObjectId linetypeId);
+
+  /** \details
+    Returns the values for the specified element of this MLine Style.
+
+    \param elementIndex [in]  Index of element to return.  
+    \param offset [out]  Receives the offset of this element.
+    \param color [out]  Receives the color of this element.
+    \param linetypeId [out]  Receives the Object ID for the linetype of this element.
+
+  */
+  void getElementAt(
+    int elementIndex, 
+    double& offset, 
+    OdCmColor& color,
+    OdDbObjectId& linetypeId) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual void appendToOwner(
+    OdDbIdPair& idPair,
+    OdDbObject* pOwnerObject,
+    OdDbIdMapping& ownerIdMap);
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbMlineStyle object pointers.
+*/
+typedef OdSmartPtr<OdDbMlineStyle> OdDbMlineStylePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelDocViewStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelDocViewStyle.h
new file mode 100755
index 0000000..581e7a5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelDocViewStyle.h
@@ -0,0 +1,218 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_MODELDOCVIEWSTYLE_H
+#define OD_MODELDOCVIEWSTYLE_H
+
+#include "TD_PackPush.h"
+#include "DbObject.h"
+
+/** \details
+
+    Library: TD_Db
+    <group OdDb_Classes> 
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbModelDocViewStyle : public OdDbObject
+{
+protected:
+  // Default constructor is protected since OdDbModelDocViewStyle is an abstract class.
+  OdDbModelDocViewStyle();
+
+public:
+  ODDB_DECLARE_MEMBERS(OdDbModelDocViewStyle);
+
+  /** \details
+    Defines the attachment point for the model documentation view label text. 
+  */
+  enum AttachmentPoint {
+    kAboveView    = 0,  // Label text is attached above the view.   
+    kBelowView    = 1,  // Label text is attached below the view.
+  };
+
+  /** \details
+    Defines the alignment for the model documentation view label text. 
+  */
+  enum TextAlignment {
+    kTextAlignmentLeft   = 0, // Left alignment is used for the view label text.
+    kTextAlignmentCenter = 1, // Center alignment is used for the view label text.
+    kTextAlignmentRight  = 2, // Right alignment is used for the view label text.
+  };
+
+  // Default destructor.
+  virtual ~OdDbModelDocViewStyle() = 0;
+
+  /** \details
+    Returns the name of this OdDbModelDocViewStyle object.
+  */
+  virtual OdString getName() const;
+
+  /** \details
+    Sets the name of this OdDbModelDocViewStyle object.
+
+    \param name [in]  Name.
+  */
+  virtual void setName(const OdString& name);
+
+  /** \details
+    Returns the description of this view style.
+  */
+  virtual OdString description() const;
+
+  /** \details
+    Sets the description of this view style.
+    
+    \param description [in]  Description.
+  */
+  virtual void setDescription(const OdString& description);
+
+  /** \details
+    Sets defaults values for the properties of this view style.
+  */
+  virtual void setDatabaseDefaults(OdDbDatabase* pDb);
+
+  /** \details
+    Includes this view style object in a OdDbDatabase object.
+    
+    \param pDb [in]  Pointer of the database to receive the OdDbModelDocViewStyle object.
+    \param styleName [in]  Name of the view style.
+    
+    \remarks
+    Returns the OdDbObjectID of the newly added OdDbModelDocViewStyle object.
+  */
+  virtual OdDbObjectId postViewStyleToDb(OdDbDatabase* pDb, 
+                                         const OdString& styleName) = 0;
+
+  /** \details
+    Specifies whether properties were changed. 
+	
+	\returns
+    True if properties were changed; returns false otherwise.
+  */
+  bool isModifiedForRecompute() const;
+
+  /** \details
+    Returns the default view name based on the specified index.
+
+    \param index [in]  Index of default name.
+  */
+  OdString defaultViewName(int index) const;
+
+  /** \details
+    Checks whether a label name is valid.
+
+    \param name [in]  Label name to check.
+
+    \returns
+    True if the specified name is a valid string.
+  */
+  bool isViewNameValid(const OdString& name) const;
+
+  ///** \details
+  //  Calculates a view label's position.
+  //
+  //  \param offsetVector [out] Offset (vector) of the view label.
+  //  \param textAlignment [out] Text alignment of the view label.
+  //  \param attachment [in] Use with the offset argument to specify label position.
+  //  \param offset [in] Use with the attachment argument to specify label position. 
+  //  \param minPt [in] Point located in the lower left corner of the view's bounding box. 
+  //  \param maxPt [in] Point located in the upper right corner of the view's bounding box. 
+  //
+  //  \returns
+  //  Position of the view label.
+  //*/
+  //static OdGePoint3d calculateViewLabelPosition(OdGeVector2d& offsetVector,
+  //                                              OdDbMText::AttachmentPoint& textAlignment,
+  //                                              OdDbModelDocViewStyle::AttachmentPoint attachment,
+  //                                              double offset,
+  //                                              const OdGePoint3d& minPt,
+  //                                              const OdGePoint3d& maxPt);
+
+  ///** \details
+  //  Sets the position of a view label.
+  //  
+  //  \param pMText [in] Pointer to MText object to be positioned as a label.
+  //  \param attachment [in] Use with the offset argument to specify label position. 
+  //  \param offset [in] Use with the attachment argument to specify label position.
+  //  \param minPt [in] Point located in the lower left corner of the view's bounding box.
+  //  \param maxPt [in] Point located in the upper right corner of the view's bounding box. 
+  //  
+  //  \returns
+  //  Position of the view label.
+  //*/
+  //static OdGeVector2d setViewLabelPosition(OdDbMText* pMText,
+  //                                         OdDbModelDocViewStyle::AttachmentPoint attachment,
+  //                                         double offset,
+  //                                         const OdGePoint3d& minPt,
+  //                                         const OdGePoint3d& maxPt);
+
+  ///** \details
+  //  Updates the position of a view label.
+  //
+  //  \param pMText [in] Pointer to MText object to be positioned as a label.
+  //  \param attachment [in] Specifies whether the label is attached. 
+  //  \param minPt [in] Point located in the lower left corner of the view's bounding box.
+  //  \param maxPt [in] Point located in the upper right corner of the view's bounding box. 
+  //
+  //  \returns
+  //  Position of the view label.
+  //*/
+  //static OdGeVector2d updateViewLabelPosition(OdDbMText* pMText,
+  //                                            OdDbModelDocViewStyle::AttachmentPoint attachment,
+  //                                            const OdGePoint3d& minPt,
+  //                                            const OdGePoint3d& maxPt);
+
+  OdString getDisplayName() const;
+  OdResult SetDispayName( const OdString& name );
+  bool canRename() const;
+  OdResult setCanRename(bool canRename);
+
+protected:
+  // OdDbObject overridden functions
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  enum
+  {
+    kCanRename = 1
+  };
+
+//protected:
+//  // For internal use only
+//  virtual OdDbObjectPtr subDeepClone(OdDbObject* pOwner,
+//                                     OdDbIdMapping& idMap, bool isPrimary = true) const;
+//  virtual OdDbObjectPtr subWblockClone(OdDbObject* pOwner,
+//                                       OdDbIdMapping& idMap, bool isPrimary = true) const;
+//private:
+//    friend class OdDbModelDocViewStyleImp;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbModelDocViewStyle object pointers.
+*/
+typedef OdSmartPtr<OdDbModelDocViewStyle> OdDbModelDocViewStylePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_MODELDOCVIEWSTYLE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelerGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelerGeometry.h
new file mode 100755
index 0000000..83d0101
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbModelerGeometry.h
@@ -0,0 +1,27 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMotionPath.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMotionPath.h
new file mode 100755
index 0000000..a8be5a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbMotionPath.h
@@ -0,0 +1,74 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DBMOTIONPATH_H_INCLUDED_
+#define _OD_DBMOTIONPATH_H_INCLUDED_
+
+#include "DbObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMotionPath : public OdDbObject
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbMotionPath);
+
+    OdDbMotionPath();
+    virtual ~OdDbMotionPath();
+
+    void setCameraPath(const OdDbObjectId &pathId);
+    OdDbObjectId cameraPath() const;
+
+    void setTargetPath(const OdDbObjectId &pathId);
+    OdDbObjectId targetPath() const;
+
+    void setViewTableRecordId(const OdDbObjectId &viewId);
+    OdDbObjectId viewTableRecordId() const;
+
+    void setFrames(OdUInt32 nFrames);
+    OdUInt32 frames() const;
+
+    void setFrameRate(OdUInt32 nRate);
+    OdUInt32 frameRate() const;
+
+    void setCornerDecel(bool bCornerDecel);
+    bool cornerDecel() const;
+
+    virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+    virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+    virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+    virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbMotionPath> OdDbMotionPathPtr;
+
+TOOLKIT_EXPORT OdDbObjectId oddbGetMotionPathDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbDictionaryPtr oddbGetMotionPathDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+
+#include "TD_PackPop.h"
+
+#endif // _OD_DBMOTIONPATH_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNamedPath.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNamedPath.h
new file mode 100755
index 0000000..4596368
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNamedPath.h
@@ -0,0 +1,106 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DBNAMEDPATH_H_INCLUDED_
+#define _OD_DBNAMEDPATH_H_INCLUDED_
+
+#include "DbObject.h"
+
+#include "TD_PackPush.h"
+
+class OdGeCurve3d;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbNamedPath : public OdDbObject
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbNamedPath);
+
+    virtual ~OdDbNamedPath();
+
+    virtual OdResult getGeometry(OdGeCurve3d *& pCurve) const = 0;
+  private:
+    OdDbNamedPath(); // noimpl
+};
+
+typedef OdSmartPtr<OdDbNamedPath> OdDbNamedPathPtr;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbCurvePath : public OdDbNamedPath
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbCurvePath);
+
+    OdDbCurvePath();
+    virtual ~OdDbCurvePath();
+
+    virtual OdResult getGeometry(OdGeCurve3d *& pCurve) const;
+
+    void setGeometry(const OdDbObjectId &curveId);
+    OdDbObjectId entityId() const;
+
+    virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+    virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+    virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+    virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbCurvePath> OdDbCurvePathPtr;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPointPath : public OdDbNamedPath
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbPointPath);
+
+    OdDbPointPath();
+    virtual ~OdDbPointPath();
+
+    virtual OdResult getGeometry(OdGeCurve3d *& pCurve) const;
+
+    void setGeometry(const OdGePoint3d &point);
+    OdGePoint3d point() const;
+
+    virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+    virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+    virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+    virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbPointPath> OdDbPointPathPtr;
+
+TOOLKIT_EXPORT OdDbObjectId oddbGetNamedPathDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbDictionaryPtr oddbGetNamedPathDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+
+#include "TD_PackPop.h"
+
+#endif // _OD_DBNAMEDPATH_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNurbSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNurbSurface.h
new file mode 100755
index 0000000..ef3cb06
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbNurbSurface.h
@@ -0,0 +1,702 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbNurbSurface_h_Included_
+#define _DbNurbSurface_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbSurface.h"
+#include <DbCurve.h>
+
+
+
+class OdGeKnotVector;
+
+/** \details
+  This template class is a specialization of the OdArray class for OdDbCurve object pointer arrays.
+*/
+typedef OdArray<OdDbCurvePtr> OdDbCurvePtrArray;
+
+/** \details
+    This class implements a three-dimensional NURB surface entity.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbNurbSurface : public OdDbSurface
+{
+public:
+  /** \details 
+    Creates an OdDbNurbSurface object.
+  */
+  OdDbNurbSurface ();
+  //virtual ~OdDbNurbSurface();
+  ODDB_DECLARE_MEMBERS(OdDbNurbSurface);
+
+  /** \details
+  Gets all NURB data.
+  
+  \param iUDegree 			    [out] Degree in the u direction. 
+  \param iVDegree 			    [out] Degree in the v direction.
+  \param bRational 		      [out] Determines whether the surface is rational.
+  \param iUNumControlPoints [out] The quantity of control points in the u direction.
+  \param iVNumControlPoints [out] The quantity of control points in the v direction.
+  \param ctrlPtsArr 		    [out] An array of control points (in WCS coordinates).
+  \param weights 			      [out] An array of the weights for each control point.
+  \param uKnots 			      [out] An array of the knot values in the u direction.
+  \param vKnots 			      [out] An array of the knot values in the v direction.
+
+  \returns Returns eOk if successful or an appropriate error code otherwise.
+
+  \remarks
+  The control points are represented with an AcGePoint3d array. 
+  The column indexes are for the v direction, and row indexes are for the u direction. 
+  For example, if the surface has n control points in the u direction and m control points in the v direction, the array looks like [0,0], [0,1], ...[0,n-1], ..., [m-1,0], [m-1,1], ...[m-1,n-1]. 
+  If the surface is rational, the weights array will contain the same number of entries as the ctrlPts array. The values in weights and ctrlPts arrays have the same sequential order as the control points array.
+  If the surface is not periodic in the u direction, the size of the uKnots vector is greater than the iUNumControlPoints value by the degree + 1. 
+  If the surface is periodic in the u direction, the size of the uKnots vector is greater than the iUNumControlPoints value by 1. 
+  Similarly, if the surface is not periodic in the v direction, the size of the vKnots vector is greater than the iUNumControlPoints by the degree + 1. 
+  If the surface is periodic in the v direction, the size of the vKnots vector is greater than the iUNumControlPoints by 1. 
+  */
+  OdResult get (int& iUDegree, int& iVDegree, bool& bRational, int& iUNumControlPoints, int& iVNumControlPoints,
+                OdGePoint3dArray& ctrlPtsArr, OdGeDoubleArray& weights, OdGeKnotVector& uKnots, OdGeKnotVector& vKnots) const;
+
+  /** \details
+  Set new data for the existing NURBS surface.
+  
+  \param iUDegree 			    [in] A new value for degrees in the u direction.
+  \param iVDegree 			    [in] A new value for degrees in the v direction. 
+  \param bRational 			    [in] Determines whether the surface is rational (new value).
+  \param IUNumControlPoints [in] A new value of the quantity of control points in the u direction.
+  \param iVNumControlPoints [in] A new value of the quantity of control points in the v direction. 
+  \param ctrlPtsArr 			  [in] A new array of control points (in WCS coordinates).
+  \param weights 			      [in] A new array of the weights for each control point.
+  \param uKnots 			      [in] A new array of the knot values in the u direction.
+  \param vKnots 			      [in] A new array of the knot values in the v direction.
+
+  \returns Returns eOk if successful or an appropriate error code otherwise.
+  
+  \remarks 
+  The column indexes is for the v direction, and row indexes are for the u direction. 
+  For example, if the surface has n control points in the u direction and m control points in the v direction, 
+  the array looks like [0,0], [0,1], ...[0,n-1], ..., [m-1,0], [m-1,1], ...[m-1,n-1]. 
+
+  If the surface is rational (bRational == true), the weights array must contain the same number of entries as the ctrlPts array. All weight values must be greater than 0.0. 
+  The values in weights and ctrlPts arrays must have the same sequential order as the control points array.
+  If the surface is not rational (bRational == false), the weight array must be empty.
+  
+  If the surface is not periodic in the u direction, the size of the uKnots vector must be equal to iUNumControlPoints + iUDegree + 1. 
+  If the surface is periodic in the u direction, the size of the uKnots vector must be iUNumControlPoints + 1. 
+  Similarly, if the surface is not periodic in the v direction, the size of the vKnots vector must be equal to iVNumControlPoints + iVDegree + 1. 
+  If the surface is periodic in the v direction, the size of the vKnots vector must be iVNumControlPoints + 1. 
+  Each knot must have a value greater than or equal to the value of its predecessor in the array. 
+  
+  If any of the passed-in parameters are not valid, the surface will not be created.
+
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult set (int iUDegree, int iVDegree, bool bRational, int iUNumControlPoints, int iVNumControlPoints,
+                const OdGePoint3dArray& ctrlPtsArr, const OdGeDoubleArray& weights, const OdGeKnotVector& uKnots, const OdGeKnotVector& vKnots); 
+
+  //OdDbObject methods
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  //virtual OdResult subGetClassID(void* pClsid) const;
+
+  /** \details
+  Returns the control points and the quantity of control points in both u and v directions.
+
+  \param iUCount  [out] The quantity of control points in u direction.
+  \param iVCount  [out] The quantity of control points in v direction.
+  \param points   [out] Array of control points (in WCS coordinates).
+
+  \returns Returns eOk if control point were successfully returned, or an appropriate error code in other case.
+
+  \remarks
+  The control points will be allocated in the passed-in OdGePoint3d array. 
+  The column indexes are for the v direction, and row indexes are for the u direction. 
+  For example, if the surface has n control points in the u direction and m control points in the v direction, 
+  the array looks like [0,0], [0,1], ...[0,vCount-1], ..., [uCount-1,0], [uCount-1,1], ...[uCount-1,vCount-1]. 
+  */
+  OdResult getControlPoints(int& iUCount, int& iVCount, OdGePoint3dArray& points) const;
+  
+  /** \details
+  Sets the control points. 
+
+  \param iUCount [in] The new value of the quantity of control points in the u direction.
+  \param iVCount [in] The new value of the quantity of control points in the v direction.
+  \param points  [in] New array of control points (in WCS coordinates).
+  
+  \returns Returns eOk if control points were successfully set or an appropriate error code in other case. 
+  Returns eFail if the surface doesn't contain the control point information.
+  Returns eInvalidInput if the uCount and vCount are not the same as the current numbers.
+
+  \remarks
+  The new quantity of control points in the u and v direction must be equal to the current values. 
+  New control points are allocated in an AcGePoint3d array. 
+  The column indexes are for the v direction, and row indexes are for the u direction. 
+  For example, if the surface has n control points in the u direction and m control points in the v direction, the array looks like [0,0], [0,1], ...[0,vCount-1], ..., [uCount-1,0], [uCount-1,1], ...[uCount-1,vCount-1].
+  */
+  OdResult setControlPoints(int iUCount, int iVCount, const OdGePoint3dArray& points);
+
+  /** \details
+  Returns the control point (in WCS coordinates) at the specified position in the control points vector.
+
+  \param iUIndex 	[in]  An index of a control point in the u direction. Index starts from the 0 value.
+  \param iVIndex  [in]  An index of a control point in the v direction. Index starts from the 0 value.
+  \param point 	  [out] The control point (in WCS coordinates) at specified index.
+  
+  \returns Returns eOk if a control point was returned successfully. If the surface doesn't contain the control point information, the method returns eFail. 
+  Returns eOutOfRange if the uIndex or vIndex are not valid.
+  */
+  OdResult getControlPointAt(int iUIndex, int iVIndex, OdGePoint3d& point) const;
+
+  /** \details
+  Sets a new control point (in WCS coordinates) at a specified position in the control points vector.
+
+  \param iUIndex  [in] An index of a control point in the u direction. Index starts from the 0 value.
+  \param iVIndex  [in] An index of a control point in the v direction. Index starts from the 0 value.
+  \param point    [in] A new control point (in WCS coordinates) to be set at the specified position.
+
+  \returns Returns eOk if a control point was returned successfully. If the surface doesn't contain the control point information, the method returns eFail. 
+  Returns eOutOfRange if the uIndex or vIndex are not valid.
+  
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult setControlPointAt(int iUIndex, int iVIndex, const OdGePoint3d& point);
+
+  /** \details
+  Returns the quantity of control points in the u direction.
+  
+  \param iCount [out] A passed-in parameter for returning the quantity of control points in the u direction.
+  
+  \returns Returns eOk if successful or eFail if the surface doesn't contain control point information.
+  */
+  OdResult getNumberOfControlPointsInU(int& iCount) const;
+  
+  /** \details
+  Returns the quantity of control points in the v direction.
+  
+  \param iCount [out] A passed-in parameter for returning the quantity of control points in the v direction.
+  
+  \returns Returns eOk if successful or eFail if the surface doesn't contain control point information.
+  */
+  OdResult getNumberOfControlPointsInV(int& iCount) const;
+
+  /** \details
+  Returns the knot vector in the u direction.
+
+  \param knots [out] A passed-in parameter for returning the knot vector in the u direction  
+
+  \returns Returns eOk if successful or eFail if the surface doesn't contain knot information.
+  */
+  OdResult getUKnots(OdGeKnotVector& knots) const;
+
+  /** \details
+  Returns the knot vector in the v direction.
+
+  \param knots [out] A passed-in parameter for returning the knot vector in the v direction  
+
+  \returns Returns eOk if successful or eFail if the surface doesn't contain knot information.
+  */
+  OdResult getVKnots(OdGeKnotVector& knots) const;
+
+  /** \details
+  Returns the quantity of knots in the u direction.
+  
+  \param iCount [out] A passed-in parameter for returning the quantity of knots in the u direction.
+
+  \returns Returns eOk if successful or eFail if the surface doesn't contain knot information.
+  */
+  OdResult getNumberOfKnotsInU(int& iCount) const;
+  
+  /** \details
+  Returns the quantity of knots in the v direction.
+  
+  \param iCount [out] A passed-in parameter for returning the quantity of knots in the v direction.
+
+  \returns Returns eOk if successful or eFail if the surface doesn't contain knot information.
+  */
+  OdResult getNumberOfKnotsInV(int& iCount) const;
+
+  /** \details
+  Returns the weight at a specified position (uIndex, vIndex) in the weights array. 
+  Returns valid weight value only when the surface is rational.
+  
+  \param iUIndex  [in]  An index of weight value in the u direction. Index starts from the 0 value.
+  \param iVIndex  [in]  An index of weight value in the v direction. Index starts from the 0 value.
+  \param weight   [out] A passed-in parameter for returning the weight value at the specified position.
+
+  \returns Returns eOk if the weight value was successfully returned.  
+  If the surface doesn't contain the weight information (weight array is empty or is NULL), returns eFail. 
+  If the uIndex or vIndex values are invalid, returns eOutOfRange.
+  */
+  OdResult getWeight(int iUIndex, int iVIndex, double& weight ) const;
+  
+  /** \details
+  Sets the weight value at a specified position in the weights array.
+
+  If the surface is not rational, the method does nothing.
+  
+  \param iUIndex  [in] An index of weight value in the u direction. Index starts from the 0 value.
+  \param iVIndex  [in] An index of weight value in the v direction. Index starts from the 0 value.
+  \param weight   [in] A new weight value to be set at a specified position.
+
+  \returns Returns eOk if a new weight value was successfully set. 
+  If the surface doesn't contain the weight information (weight array is empty or is NULL), returns eFail. 
+  If the uIndex or vIndex values are invalid, returns eOutOfRange.
+  
+  \remarks   
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult setWeight(int iUIndex, int iVIndex, double weight );
+
+  /** \details
+  Evaluates the position on the NURBS surface at the specified parameter value (u, v).
+  
+  \param dU   [in]  u direction parameter. 
+  \param dV   [in]  v direction parameter.
+  \param pos  [out] A passed-in parameter for returning the evaluated position on the surface.
+  
+  \returns Returns eOk if evaluation is successfully done. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the u or v value is out of range, returns eOutOfRange.
+  
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult evaluate(double dU, double dV, OdGePoint3d& pos) const;
+  
+  /** \details
+  Evaluates the position and first derivatives on the NURBS surface at the specified parameter value (u, v).
+
+  \param dU     [in]  u direction parameter. 
+  \param dV     [in]  v direction parameter.
+  \param pos    [out] A passed-in parameter for returning the evaluated position on the surface.
+  \param uDeriv [out] A passed-in parameter for returning the first derivative with respect to u.
+  \param vDeriv [out] A passed-in parameter for returning the first derivative with respect to v.
+
+  \returns 
+  Returns eOk if evaluation is successfully done. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the u or v value is out of range, returns eOutOfRange.
+ 
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult evaluate(double dU, double dV, OdGePoint3d& pos, OdGeVector3d& uDeriv, OdGeVector3d& vDeriv) const;
+
+  /** \details
+  Evaluates the position and first and second derivatives on the NURBS surface at the specified parameter value (u, v).
+  
+  \param dU       [in]  u direction parameter. 
+  \param dV       [in]  v direction parameter.
+  \param pos      [out] A passed-in parameter for returning the evaluated position on the surface.
+  \param uDeriv   [out] A passed-in parameter for returning the first derivative with respect to u.
+  \param vDeriv   [out] A passed-in parameter for returning the first derivative with respect to v.
+  \param uuDeriv  [out] A passed-in parameter for returning the second derivative with respect to u twice.
+  \param uvDeriv  [out] A passed-in parameter for returning the second derivative with respect to u and v. 
+  \param vvDeriv  [out] A passed-in parameter for returning the second derivative with respect to v twice. 
+
+  \returns Returns eOk if evaluation is successfully done. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the u or v value is out of range, returns eOutOfRange.
+
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult evaluate(double dU, double dV, OdGePoint3d& pos, OdGeVector3d& uDeriv, OdGeVector3d& vDeriv,
+                    OdGeVector3d& uuDeriv, OdGeVector3d& uvDeriv, OdGeVector3d& vvDeriv) const;
+  
+  /** \details
+  Evaluates the position and an arbitrary number of derivatives of the surface at the specified parameter value (u, v).
+
+  \param dU           [in]  u direction parameter. 
+  \param dV           [in]  v direction parameter.
+  \param iDerivDegree [in]  The degree of derivatives to evaluate.
+  \param point        [out] A passed-in parameter for returning the evaluated position on the surface.
+  \param derivatives  [out] A passed-in parameter for returning derivatives array of vectors, in the order of uDeriv, vDeriv, uuDeriv, uvDeriv, vvDeriv.
+
+  \returns Returns eOk if evaluation is successfully done. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the u or v value is out of range, returns eOutOfRange.
+
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult evaluate(double dU, double dV, int iDerivDegree, OdGePoint3d& point, OdGeVector3dArray& derivatives) const;
+
+  /** \details
+  Returns the degree of NURBS surface in the u direction.
+
+  \param iDegree [out] A passed-in parameter for returning the degree in the u direction.
+
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult getDegreeInU(int& iDegree) const;
+  
+  /** \details
+  Returns the degree of NURBS surface in the v direction.
+
+  \param iDegree [out] A passed-in parameter for returning the degree in the v direction.
+
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult getDegreeInV(int& iDegree) const;
+  
+  /** \details
+  Determines whether the surface is closed in the u direction.
+  
+  \param bIsClosed [out] A passed-in parameter for returning the indicator of whether the surface is closed in the u direction. 
+  bIsClosed is equal to true if the surface is closed in the u direction, otherwise it is equal to false.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult isClosedInU(bool& bIsClosed) const;
+  
+  /** \details
+  Determines whether the surface is closed in the v direction.
+  
+  \param bIsClosed [out] A passed-in parameter for returning the indicator of whether the surface is closed in the v direction.
+  bIsClosed is equal to true if the surface is closed in the v direction, otherwise it is equal to false.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult isClosedInV(bool& bIsClosed) const;
+
+  /** \details
+  Determines whether the surface is periodic in the u direction.
+  
+  \param bIsPeriodic [out] A passed-in parameter for returning the indicator of whether the surface is periodic in the u direction. 
+  bIsPeriodic is equal to true if the surface is periodic in the u direction, otherwise it is equal to false.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult isPeriodicInU(bool& bIsPeriodic) const;
+  
+  /** \details
+  Determines whether the surface is periodic in the v direction.
+  
+  \param bIsPeriodic [out] A passed-in parameter for returning the indicator of whether the surface is periodic in the v direction.
+  bIsPeriodic is equal to true if the surface is periodic in the v direction, otherwise it is equal to false.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult isPeriodicInV(bool& bIsPeriodic) const;
+
+  /** \details
+  Returns the period value in the u direction for the surface.
+  Returned value is valid only if the surface is periodic in the u direction.
+
+  \param dPeriod [out] A passed-in parameter for returning the period value in the u direction.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+
+  */
+  OdResult getPeriodInU(double& dPeriod) const;
+  
+  /** \details
+  Returns the period value in the v direction for the surface.
+  Returned value is valid only if the surface is periodic in the v direction.
+  
+  \param dPeriod [out] A passed-in parameter for returning the period value in the v direction.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult getPeriodInV(double& dPeriod) const;
+
+  /** \details
+  Determines whether the surface is rational.
+  If the surface is rational, the method returns true, otherwise the method returns false.
+  
+  \param bIsRational [out] A passed-in parameter for returning the indicator of whether the surface is rational.
+
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult isRational(bool& bIsRational) const;
+
+  /** \details
+  Determines whether the surface is planar. If the surface is planar, also returns the plane information and normal.
+  If the surface is planar, the method returns true via the bIsPlanar parameter, otherwise the method returns false.
+  
+  \param bIsPlanar    [out] A passed-in parameter for returning the indicator of whether the surface is planar.
+  \param ptOnSurface  [out] A passed-in parameter for returning the point on the surface (if the surface is planar).
+  \param normal       [out] A passed-in parameter for returning the plane normal (if the surface is planar).
+
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult isPlanar(bool& bIsPlanar, OdGePoint3d& ptOnSurface, OdGeVector3d& normal) const;
+
+  /** \details
+  Determines whether a specified point is on the surface.
+  If specified point is on the surface, the method returns true via bOnSurface, otherwise the method returns false.
+  
+  \param point      [in] A point.
+  \param bOnSurface [out] A passed-in parameter for returning the indicator of whether the specified point is on the surface.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult isPointOnSurface(const OdGePoint3d& point, bool& bOnSurface) const;
+
+  /** \details
+  Returns the normal vector at the specified parameter location ([u, v]).
+  
+  \param dU     [in]  u parameter.
+  \param dV     [in]  v parameter.
+  \param normal [out] A passed-in parameter for returning the normal vector.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. If the dU or dV values are invalid, returns eOutOfRange. 
+  */
+  OdResult getNormal(double dU, double dV, OdGeVector3d& normal) const;
+
+  /** \details
+  Returns the simple patches in the u direction.
+
+  \param span [out] A passed-in parameter for returning the number of simple patches in the u direction.
+
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult getNumberOfSpansInU(int& span) const;
+  
+  /** \details
+  Returns the simple patches in the v direction.
+
+  \param span [out]  A passed-in parameter for returning the number of simple patches in the v direction.
+
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult getNumberOfSpansInV(int& span) const;
+
+  /** \details
+  Returns the isolines at a specified u value.
+  The isolines are created in the v direction. 
+  If there are holes in the surface, there could be a number of isoline segments at a specified u value.
+
+  \param dU           [in]  u parameter.
+  \param lineSegments [out] A passed-in parameter for returning the array of isoline segments.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  OdResult getIsolineAtU(double dU, OdDbCurvePtrArray& lineSegments) const;
+  
+  /** \details
+  Returns the isolines at a specified v value.
+  The isolines are created in the u direction. 
+  If there are holes in the surface, there could be a number of isoline segments at a specified v value.
+
+  \param dV           [in]  v parameter.
+  \param lineSegments [out] A passed-in parameter for returning the array of isoline segments.
+  
+  \returns 
+  Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  
+
+  */
+  OdResult getIsolineAtV(double dV, OdDbCurvePtrArray& lineSegments) const;
+
+  /** \details
+  Inserts a knot at the specified u parameter.
+  The knot insertion doesn't modify the shape of the surface. 
+  It will add a new row of control points in the v direction and adjust the local control point's location.
+
+  \param dU [in]  u parameter.
+  
+  \returns Returns eOk if successful.
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the surface's knot multiplicity at the u parameter is bigger than the degree in the u direction, returns eInvalidInput.
+  
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult InsertKnotAtU(double dU);
+  
+/** \details
+  Inserts a knot at the specified v parameter.
+  The knot insertion doesn't modify the shape of the surface. 
+  It will add a new row of control points in the u direction and adjust the local control point's location.
+  
+  \param dV [in]  v parameter.
+  
+  \returns Returns eOk if successful. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the surface's knot multiplicity at the v parameter is bigger than the degree in the v direction, returns eInvalidInput.
+
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+*/
+  OdResult InsertKnotAtV(double dV);
+
+  /** \details
+  Inserts a row of control points at the given u knot parameter.
+
+  \param dU [in] u parameter.
+  \param vCtrlPts  [in] An array of control points to be added.
+  \param vWeights  [in] Array of weight values to add if the surface is rational.
+  
+  \returns Returns eOk if successful. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the dU parameter is out of range, returns eOutOfRange.
+
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult InsertControlPointsAtU(double dU, const OdGePoint3dArray& vCtrlPts, const OdGeDoubleArray& vWeights);
+  
+  /** \details
+  Inserts a row of control points at the given v knot parameter.
+  
+  \param dV       [in] v parameter.
+  \param uCtrlPts [in] An array of control points to be added.
+  \param vWeights [in] Array of weight values to add if the surface is rational.
+  
+  \returns Returns eOk if successful. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  If the dV parameter is out of range, returns eOutOfRange.
+  
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult InsertControlPointsAtV(double dV, const OdGePoint3dArray& uCtrlPts, const OdGeDoubleArray& uWeights);
+  
+  /** \details
+  Removes a row of control points at the specified position in the control points array.
+  The method modifies the shape of the surface.
+  
+  \param iUDegree [in] An index of the control point to remove from the array.
+  
+  \returns Returns eOk if successful. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+  
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult RemoveControlPointsAtU(int iUDegree);
+  
+  /** \details
+  Removes a row of control points at the specified position in the control points array.
+  The method modifies the shape of the surface.
+  
+  \param iVDegree [in] An index of the control point to remove from the array.
+  
+  \returns Returns eOk if successful. 
+  If the surface doesn't contain any NURBS information, returns eFail. 
+
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult RemoveControlPointsAtV(int iVDegree);
+
+  /** \details
+  Rebuilds the NURBS surface with a specified new degree and quantity of control points in the u and v directions.
+  This operation modifies the shape of the surface.
+  
+  \param iUDegree     [in] The new degree value in the u direction.
+  \param iVDegree     [in] The new degree value in the v direction.
+  \param iNumUCtrlPts [in] The new quantity of control point in the u direction.
+  \param iNumVCtrlPts [in] The new quantity of control point in the v direction.
+  \param bRestore     [in] Restore flag.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  
+  \remarks 
+  This method is not implemented. 
+  */
+  OdResult rebuild(int iUDegree, int iVDegree, int iNumUCtrlPts, int iNumVCtrlPts, bool bRestore = false);
+
+  /** \details
+  Adjusts the location and tangent of a point on the surface with the specified parameter ([u, v]). 
+  The local control points are adjusted accordingly. 
+  If the pointer uDeriv and vDeriv are equal to NULL, then only the location of the point is adjusted.
+  
+  \param dU     [in] u parameter.
+  \param dV     [in] v parameter.
+  \param point  [in] A new location of the point on the surface.
+  \param uDeriv [in] The tangent vector in the u direction.
+  \param vDeriv [in] The tangent vector in the v direction.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  
+  \remarks 
+  This method is not implemented. 
+  */
+  OdResult modifyPositionAndTangent(double dU, double dV, const OdGePoint3d& point, const OdGeVector3d* uDeriv = NULL, const OdGeVector3d* vDeriv = NULL);
+
+  /** \details
+  Returns the u and v parameter for a point on the surface.
+  
+  \param point [in] A point on the surface.
+  \param dU    [in] A passed-in parameter for returning the value of the u parameter.
+  \param dV    [in] A passed-in parameter for returning the value of the v parameter.
+  
+  \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  OdResult getParameterOfPoint(const OdGePoint3d& point, double& dU, double& dV) const;
+
+  /** \details
+  Creates a surface from a specified surface with conversion.
+  
+  \param pSource    [in] A pointer to the source surface.
+  \param version    [in] .dwg file version of the source surface.
+  \param transferId [in] Indicates whether the Id of the source surface is transferred to the surface.
+  
+  \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  OdResult convertFrom(OdDbSurface* pSource, OdDb::DwgVersion version, bool transferId = true);
+  // Overridden methods from AcDbEntity
+  //void dragStatus(const AcDb::DragStat status);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbNurbSurface object pointers.
+*/  
+typedef OdSmartPtr<OdDbNurbSurface> OdDbNurbSurfacePtr;
+
+#include "TD_PackPop.h"
+#endif //_DbNurbSurface_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjPtrArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjPtrArray.h
new file mode 100755
index 0000000..9e2341a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjPtrArray.h
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBOBJPTRAR_H
+#define OD_DBOBJPTRAR_H
+
+#include "OdArray.h"
+
+typedef OdArray<OdDbObjectPtr> OdDbObjPtrArray;
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObject.h
new file mode 100755
index 0000000..ff5dca3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObject.h
@@ -0,0 +1,1749 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBXOBJECT_INCLUDED_
+#define _ODDBXOBJECT_INCLUDED_ /*!DOM*/
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiDrawable.h"
+#include "DbObjectId.h"
+#include "OdString.h"
+#include "DbObjectReactor.h"
+#include "IdArrays.h"
+#include "ResBuf.h"
+#include "DebugStuff.h"
+
+class OdDbFiler;
+class OdDbDwgFiler;
+class OdDbDxfFiler;
+class OdGiDrawableTraits;
+class OdGiWorldDraw;
+class OdGiViewportDraw;
+class OdGsCache;
+class OdDbObjectImpl;
+class OdDbEntity;
+class OdDbDatabase;
+class OdDbIdMapping;
+class OdDbAuditInfo;
+class OdGeMatrix3d;
+class OdDbObjStorage;
+class OdString;
+class OdGePoint3d;
+class OdBinaryData;
+class OdDbIdPair;
+class OdDbField;
+class OdDbDictionary;
+class OdDbXrecord;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbXrecord object pointers.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbXrecord> OdDbXrecordPtr;
+
+/** \details
+    Declares the member functions for classes derived from OdDbObject. 
+        
+    \param ClassName [in]  Name of the derived class.
+    
+    \remarks
+    Classes derived 
+    from OdDbObject should invoke this macro in their class definitions, 
+    passing the name of the derived class.
+*/
+#define ODDB_DECLARE_MEMBERS(ClassName)\
+protected:                                \
+  ClassName(OdDbObjectImpl* pImpl);       \
+public:                                   \
+ODRX_DECLARE_MEMBERS (ClassName)
+
+/** \details
+  Creates a new instance of a derived class,
+  and returns a SmartPointer to it, without
+  incrementing the reference count of the new
+  object.
+  
+  \param ClassName [in]  Name of the derived class.
+*/
+#define DBOBJECT_CONSTR(ClassName) OdSmartPtr<ClassName> (new ClassName, kOdRxObjAttach)
+
+
+/** \details
+    This class implements OdError objects with Result codes of eXdataSizeExceeded,
+    and the Object IDs of the objects related to the errors.
+    
+    Library: TD_Db
+    <group Error_Classes> 
+*/
+class TOOLKIT_EXPORT OdError_XdataSizeExceeded : public OdError
+{
+public:
+  /** \param objectId [in]  Object ID of the object with the error.
+  */
+  OdError_XdataSizeExceeded(
+    const OdDbObjectId& objectId);
+};
+                            
+
+/** \details
+  <group TD_Namespaces>
+  {noAutoLink}
+*/
+namespace OdDb
+{ 
+  /** \details
+    \note
+    The file OdaDefs.h contains const definitions of DuplicateRecordCloning values
+    that do not require the "OdDb::" scope resolution qualifier. They should be
+    used only if there will be no naming conflicts.
+  */
+  enum DuplicateRecordCloning
+  {
+    kDrcNotApplicable  = 0,   // Not applicable to the object.
+    kDrcIgnore         = 1,   // If a duplicate record exists, use the existing record
+                              // in the *database*, and ignore the clone.
+    kDrcReplace        = 2,   // If a duplicate record exists, replace it with the cloned record.
+    kDrcXrefMangleName = 3,   // Incoming record names are mangled with <Xref>$0$<name>
+    kDrcMangleName     = 4,   // Incoming record names are mangled with $0$<name>
+    kDrcUnmangleName   = 5,   // Unmangle the names mangled by kDrcMangleName, then default to kDrcIgnore.
+                              // Typically used by RefEdit when checking records into the original *database*.  
+    kDrcMax            = kDrcUnmangleName //  The maximum value of this enum.
+  };
+
+  /** \note
+    The file OdaDefs.h contains const definitions of Visibility values
+    that do not require the "OdDb::" scope resolution qualifier. They should be
+    used only if there will be no naming conflicts.
+  */
+  enum Visibility
+  {
+    kInvisible = 1,
+    kVisible = 0
+  };
+
+  enum SaveType
+  {
+    kDwg   = 0,   // Save as .dwg file
+    kDxf   = 1,   // Save as .dxf file
+    kDxb   = 2,   // Save as binary .dxf file
+    kUnknown = -1 // Database was created from scratch
+  };
+}
+
+
+/** \details
+    This class is the base class for all objects contained in an OdDbDatabase instance (OdDb objects).
+
+    \remarks
+    
+    Creating and Deleting Database Objects
+    
+    * Database objects are normally created by calling OdDbXXXXX::createObject().
+       When an object is created, it will be in kOpenForWrite mode.  The delete
+       operator should never be called on database objects.  Instead, erase()
+       should be called, which marks the object as erased.
+    * OdDbObject instances should be created by calling the createObject() method.
+    * OdDbObject instances are created in kOpenForWrite mode.  
+    * Depending on other OdDbObject instances while constructing or deleting instances is prohibited.
+    * OdDbObject instances should be deleted from an OdDbDatabase with erase().
+    * Never access a pointer to a closed object.
+    * The delete operator must never be called on OdDbObject instances. Instead, the erase() method
+       should be called, which marks this object as erased.
+    
+    Accessing Database Objects
+    
+    * Database objects must be opened before they can be accessed.  
+    * Given a valid OdDbObjectId, a database object is opened by calling OdDbObjectId::safeOpenObject().  
+    * Database objects should be opened in the most restrictive mode possible, and should be released 
+       immediately when access is no longer needed.
+       
+    Object may be opened in any one of the following modes:
+    
+    <table>
+    Mode              Description
+    OdDb::kForRead    Allows operations that do not modify this object.  
+                      A database object can be opened in this mode any number of times (simultaneously), 
+                      if has not open in OdDb::kForWrite or OdDb::kForNotify mode.  
+                      An exception will be thrown if any type of write operation is attempted 
+                      on an object open in this mode.
+    OdDb::kForWrite   Allows read and write operations to be performed on this object.  
+                      An database object can be opened in this mode only if it is not
+                      already open in any mode.
+    OdDb::kForNotify  This object is opened for notification purposes.  
+                      A database object can be opened in this mode so long as it is 
+                      not already open in kNotify mode.
+    </table>
+    
+    \sa
+    * OdDbObjectId
+    * OdDbDatabase
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObject : public OdGiDrawable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbObject);
+
+protected:
+  OdDbObject();
+public:
+  ~OdDbObject();
+  
+  /** \details
+    Increments the reference count of this object.
+  */
+  void addRef();
+
+  /** \details
+    Decrements the reference count of this object.
+    \remarks
+    This object is deleted when the reference count reaches zero.
+  */
+  void release();
+
+  /** \details
+      Returns the reference count of this object.
+  */
+  long numRefs() const;
+  
+  /** \details
+    Returns the Object ID of this object.
+    
+    \remarks
+    Returns a null ID if this object has not been added to a database.
+  */
+  OdDbObjectId objectId() const;
+  
+  /** \details
+    Returns the persistent handle of this database object.
+  */
+  OdDbHandle getDbHandle() const;
+  
+  /** \details
+    Returns the persistent handle of this database object.
+  */
+  OdDbHandle handle() const 
+  { return getDbHandle (); }
+  
+  /** \details
+    Returns the Object ID of this object's owner.
+    
+    \remarks
+    Returns a null ID if this object has not been added to a database,
+    or if OdDbObject::setOwnerId has not been called.
+    
+    Throws:
+    <table>
+    Exception        Cause
+    eNotInDatabase   objectId().isNull()
+    </table>
+  */
+  OdDbObjectId ownerId() const;
+  
+  /** \details
+    Sets this object's ownerId data member. 
+    
+    \param ownerId [in]  Owner's objectId.
+    
+    \remarks
+    This function lets this object know its owner; it does not
+    notify the owner. 
+    
+    Throws:
+    <table>
+    Exception             Cause
+    eNotInDatabase        Owner is not in the database.
+    </table>
+  */
+  virtual void setOwnerId(
+    OdDbObjectId ownerId);
+    
+  /** \details
+    Returns the OdDbDatabase that contains this object.
+  */
+  OdDbDatabase* database() const;
+  
+  /** \details
+    Creates an OdDbDictionary extension dictionary of this object.
+
+    \remarks
+    If this object's extension dictionary has been erased, it will
+    be unerased.  
+    
+    An object owns its extension dictionary.
+  */
+  void createExtensionDictionary();
+  
+  /** \details
+    Returns the Object ID of this object's extension dictionary.  
+    
+    \remarks
+    Returns a null ID if this object does not have an extension dictionary, 
+    or if its extension dictionary has been erased.
+  */
+  OdDbObjectId extensionDictionary() const;
+  
+  /** \details
+    Releases and erases this object's extension dictionary if it exists and is empty. 
+    
+    \remarks
+    Returns true if and only if either the dictionary did not exist or was released.
+  */
+  bool releaseExtensionDictionary();  
+
+  // Opens/creates/unerases Xdictionary, and retrieves/creates Xrecord for the given name
+  //
+  
+  /** \details
+    Creates or retrieves the specified Xrecord in this object's extension dictionary.
+
+    \param xrecordName [in]  Xrecord name.
+    \param style [in]  Merge style.
+    
+    \remarks
+    Returns a SmartPointer to the specified Xrecord.
+    
+    * If the extension dictionary has been erased, it is unerased.
+    * If the extension dictionary does not exist, it is created.
+    * If the specified Xrecord does not exist, it is created.
+  */
+  OdDbXrecordPtr createXrecord(
+    const OdString& xrecordName, 
+    OdDb::DuplicateRecordCloning style = OdDb::kDrcIgnore);
+
+  /** \details
+    Upgrades this object from OdDb::kForRead to OdDb::kForWrite.
+  */
+  void upgradeOpen();
+  
+  /** \details
+    Downgrades this object from OdDb::kForWrite to OdDb::kForRead
+     
+    \remarks
+    Any pending changes to this object are committed to the database. 
+  */
+  void downgradeOpen();
+    
+  /** \details
+    Notification function called by the Teigha framework immediately before an object is opened. 
+
+    \param mode [in]  Mode in which the object is being opened.
+    
+    \remarks
+    This function is notified just before an object is to be opened; giving this function
+    the ability to cancel the object being opened.
+         
+    Returns eOk if and only if open() is to continue.
+
+    Overriding this function in a child class allows a child instance to be notified each time an
+    object is opened.
+
+    When overriding this function:
+    
+    1)  If the OdDbObject's state is incorrect, return 
+        something other than eOk.
+    
+    2)  If the parent class's subOpen() returns anything
+        other than eOk, immediately return it. 
+    
+    3)  If other actions are required before open, do them.
+    
+    4)  Return eOk.
+    
+    The default implementation of this function does nothing but return eOk.  This function can be
+    overridden in custom classes.
+  */
+  virtual OdResult subOpen(
+    OdDb::OpenMode mode);
+    
+
+  /** \details
+    Called as the first operation as this object is being closed, for
+    database -resident objects only. 
+    
+    \remarks
+    This function is notified just before the current open operation is to be closed, giving this function
+    the ability to perform necessary operatons.
+    
+    When overriding this function:
+    
+    1)  If the OdDbObject's state is incorrect, throw exception.
+    
+    2)  Call parent class's subClose().
+    
+    3)  If other actions are required before close, do them.
+    
+    The default implementation of this function does nothing.
+    This function can be overridden in custom classes.
+  */
+  virtual void subClose();
+  
+  /** \details
+    Sets the erased mode of this object. 
+    
+    \param eraseIt [in]  Boolean to specify if object is to be erased or unerased.
+                
+    \remarks
+    Erased objects are not deleted from the database or from memory.
+    
+    Erased objects are not filed when the database is saved or sent to a DXF file.
+  */
+  OdResult erase(
+    bool eraseIt = true);
+  
+  /** \details
+    Called as the first operation as this object is being erased or unerased. 
+
+    \param erasing [in]  A copy of the erasing argument passed to erase().
+
+    \remarks
+    This function is notified just before the current object is to be erased, giving this function
+    the ability to cancel the erase.
+         
+    Returns eOk if and only if erase() is to continue.
+
+    When overriding this function:
+    
+    1)  If the OdDbObject's state is incorrect, return 
+        something other than eOk.
+    
+    2)  If the parent class's subErase() returns anything
+        other than eOk, immediately return it. 
+    
+    3)  If other actions are required before erase, do them.
+    
+    4)  Return eOk.
+
+    If you must make changes to this object's state, either make them after
+    step 2, or roll them back if step 2 returns other than eOk. 
+    
+    The default implementation of this function does nothing but return eOk.  This function can be
+    overridden in custom classes.
+    
+  */
+  virtual OdResult subErase(
+    bool erasing);
+  
+  /** \details
+    Replaces this database -resident (DBRO) object with the specified non- database -resident (NDBRO) object,
+    while retaining this object's objectId, handle, owner, and reactor list.
+   
+    \param pNewObject [in]  Pointer to the object with which to replace this object in the database.
+    \param keepXData [in]  This object's XData will be retained if and only if keepXData is true.
+    \param keepExtDict [in]  This object's extension dictionary will be retained if and only if keepExtDict is true.
+                    
+    \remarks
+    This object must be open OdDb::kForWrite. 
+    
+    The replacement object will opened OdDb::kForWrite, and must be closed.
+    
+    It is up to the caller to delete the replaced (this) object.
+    
+    Throws:
+    <table>
+    Exception               Cause
+    eIllegalReplacement     This object is NDBRO or NewObject is DBRO.
+    </table>
+  */
+  void handOverTo(
+    OdDbObject* pNewObject, 
+    bool keepXData = true, bool 
+    keepExtDict = true);
+  
+  /** \details
+    Called as the first operation of the handOverTo function.  
+    
+    \param pNewObject [in]  Pointer to the object with which to replace this object in the database.
+
+    \remarks
+    This function allows custom classes to populate the new object.
+
+    \remarks
+    Overriding this function in a child class allows a child instance to be notified each time an
+    object is handed over.
+    
+    This function is notified just before an object is to be handed over; giving this function
+    the ability to cancel the handover.
+         
+    When overriding this function:
+    
+    1)  If the OdDbObject's state is incorrect, throw exception.
+    
+    2)  Call parent class's subHandover().
+    
+    3)  If other actions are required before handover, do them.
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+
+  */
+  virtual void subHandOverTo(
+    OdDbObject* pNewObject);
+  
+  /** \details
+    Swaps the objectIDs, handles, XData,and extension dictionary between
+    this object and another object.
+
+    \param otherId [in]  Object ID of object with which to swap.
+    \param swapXdata [in]  XData will be swapped if and only if swapXData is true.
+    \param swapExtDict [in]  Extension dictionaries will be swapped if and only if swapExtDict is true.
+    
+    Throws:
+    <table>
+    Exception               Cause
+    eIllegalReplacement     Either object is NDBRO.
+    </table>
+  */
+  void swapIdWith(
+    OdDbObjectId otherId, 
+    bool swapXdata = false, 
+    bool swapExtDict = false);
+  
+  /** \details
+    Called as the first operation of swapIdWith
+
+    \param otherId [in]  Object ID to be swapped with this object's Object ID.
+    \param swapXdata [in]  If and only if true, extended data are swapped.
+    \param swapExtDict [in]  If and only if true, extension dictionaries are swapped.
+
+    \remarks
+    This function is notified just before an object is to be opened; giving this function
+    the ability to cancel the object being swapped or perform necessary actions.
+         
+    When overriding this function:
+    
+    1)  If the OdDbObject's state is incorrect, throw exception.
+    
+    2)  Call parent class's subSwapIdWith().
+    
+    3)  If other actions are required before swapping IDs, do them.
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+ 
+  */
+  virtual void subSwapIdWith(
+    const OdDbObjectId& otherId, 
+    bool swapXdata = false, 
+    bool swapExtDict = false);
+    
+  /** \details
+    Perform an audit operation on this object.
+
+    \param pAuditInfo [in]  Pointer to an OdDbAuditInfo object.
+    
+    \remarks
+    The specified OdDbAuditInfo object controls the audit, and receives the audit status.
+    
+    When overriding this function for a custom class, first call OdDbObject::audit(pAuditInfo) 
+    to validate the audit operation.
+  */
+  virtual void audit(
+    OdDbAuditInfo* pAuditInfo);
+  
+  /** \details
+    Reads the .dwg file format data of this object from the specified file.
+       
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+    
+    \remarks
+    This function calls dwgInFields(pFiler),
+    then loads any Xdata associated with this object.
+  */
+  void dwgIn(
+    OdDbDwgFiler* pFiler);
+  
+  /** \details
+    Writes the .dwg file format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+    
+    \remarks
+    This function calls this object's dwgOutFields() function,
+    writes loads any Xdata associated with this object.
+  */
+  void dwgOut(
+    OdDbDwgFiler* pFiler) const;
+  
+  /** \details
+    Reads the DXF format data of this object from the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer from which the data are to be read.
+    
+    \remarks
+    Returns the filer status.
+
+    This function calls this object's dxfInFields(pFiler),
+    then loads any Xdata associated with this object.
+  */
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+  
+  /** \details
+    Writes the DXF format data of this object to the specified filer. 
+    
+    \param pFiler [in]  Pointer to the filer to which the data are to be written.
+    
+    \remarks
+    This function calls this object's dxfOutFields(pFiler) function,
+    writes any Xdata associated with this object.
+  */
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+  
+  /** \details
+    Reads the .dwg file data of this object. 
+
+    \param pFiler [in]  Filer object from which data are read.
+    
+    \remarks
+    Returns the filer status.
+    
+    This function is called by dwgIn() to allow the object to read its data.
+
+    When overriding this function:
+     
+    
+    1)  Call assertWriteEnabled(). 
+    2)  Call the parent class's dwgInFields(pFiler). 
+    3)  If it returns eOK, continue; otherwise return whatever the parent's dwgInFields(pFiler) returned. 
+    4)  Call the OdDbDwgFiler(pFiler) methods to read each of the object's data items in the order they were written.
+    5)  Return pFiler->filerStatus().
+  */
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  
+  /** \details
+    Writes the .dwg file data of this object. 
+
+    \param pFiler [in]  Pointer to the filer to which data are written.
+    
+    \remarks
+   
+    This function is called by dwgIn() to allow the object to write its data.
+
+    When overriding this function:
+     
+    
+    1)  Call assertReadEnabled(). 
+    2)  Call the parent class's dwgOutFields(pFiler). 
+    3)  Call the OdDbDwgFiler(pFiler) methods to write each of the object's data items in the order they were written.
+  */
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  
+  /** \details
+    Reads the DXF data of this object. 
+    
+    \param pFiler [in]  Pointer to the filer from which data are read.
+    
+    \remarks
+    Returns the filer status.
+    
+    This function is called by dxfIn() to allow the object to read its data.
+
+    When overriding this function:
+     
+    
+    1)  Call assertWriteEnabled(). 
+    2)  Call the parent class's dwgInFields(pFiler). 
+    3)  If it returns eOK, continue; otherwise return whatever the parent's dxfInFields(pFiler) returned. 
+    4)  Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written.
+    5)  Return pFiler->filerStatus().
+  */
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  
+  /** \details
+    Writes the DXF data of this object.
+
+    \param pFiler [in]  Pointer to the filer to which data are to be written.
+    
+    \remarks
+    
+    This function is called by dxfOut() to allow the object to write its data.
+
+    When overriding this function:
+     
+    
+    1)  Call assertReadEnabled(). 
+    2)  Call the parent class's dxfOutFields(pFiler). 
+    4)  Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items in the order they were written.
+  */
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  /** \details
+    Reads the DXF R12 format data of this object. 
+
+    \param pFiler [in]  Pointer to the filer from which data are to be read.
+    
+    \remarks
+    Returns the filer status.
+
+    This function is called by dxfIn() to allow the object to read its data.
+
+    When overriding this function:
+    
+    1)  Call assertWriteEnabled(). 
+    2)  Call the parent class's dxfInFields_R12(pFiler). 
+    3)  If it returns eOK, continue; otherwise return whatever the parent's dxfOutFields_R12(pFiler) returned. 
+    4)  Call the OdDbDxfFiler(pFiler) methods to read each of the object's data items in the order they were written.
+    5)  Return pFiler->filerStatus().
+  */
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+  
+  /** \details
+    Writes the DXF data of this object. 
+
+    \param pFiler [in]  Pointer to the filer to which data are to be written.
+    
+    \remarks
+    Returns the filer status.
+
+    This function is called by dxfOut() to allow the object to write its data.
+
+    When overriding this function:
+     
+    
+    1)  Call assertReadEnabled(). 
+    2)  Call the parent class's dxfOutFields(pFiler). 
+    3)  Use pFiler to call the OdDbDxfFiler methods to write each of the object's data items in the order they were written.
+  */
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+  
+  /** \details
+    Returns the merge style of this object.
+  */
+  virtual OdDb::DuplicateRecordCloning mergeStyle() const;
+  
+  /** \details
+    Returns a linked list of ResBufs containing
+    a copy of the XData of this object.
+
+    \param regappName [in]  Registered application for which to return XData. 
+
+    \remarks
+    If regappName is empty, all XData of this object will be returned.
+
+    If regappName is not empty, XData for only that application will be
+    returned.
+
+    Returns a null SmartPointer if there are no XData.
+  */
+  virtual OdResBufPtr xData(
+    const OdString& regappName = OdString::kEmpty) const;
+
+  
+  /** \details
+    Sets the XData of this object.
+    
+    \param pRb [in]  A pointer to the ResBuf list containing the XData.
+    
+    \remarks
+    The sublist for each RegApp, and the ResBuf list itself, must begin with a ResBuf with 
+    resbuf.restype == kDxfRegAppName and resbuf.rstring == a valid regAppName string. 
+    
+    Any existing XData for the specified regAppName will be replaced.
+    
+    To remove the regAppName and its XData, just provide the regAppName with no data. 
+    
+    If you override this method, you should supermessage this classes parent class
+    to add add the XData to the object.
+  */
+  virtual void setXData(
+    const OdResBuf* pRb);
+     
+  /** \details
+    Returns true if and only if this object's erased status has been toggled since it was opened.
+  */
+  bool isEraseStatusToggled() const;
+  
+  /** \details
+    Returns true if and only if this object is marked as erased.
+  */
+  bool isErased() const;
+  
+  /** \details
+    Returns true if and only if this object is open OdDb::kForRead.
+  */
+  bool isReadEnabled() const;
+  
+  /** \details
+    Returns true if and only if this object is open OdDb::kForWrite.
+  */
+  bool isWriteEnabled() const;
+  
+  /** \details
+    Returns true if and only if this object is open OdDb::kForNotify.
+  */
+  bool isNotifyEnabled() const;
+  
+  /** \details
+    Returns true if and only if this object's assertWriteEnabled() has been called since 
+    it was opened.
+  */
+  bool isModified() const;
+
+  /** \details
+  */
+//  void setModified (bool bModified);
+  
+  /** \details
+    Returns true if and only this object's assertWriteEnabled() and setXData() have been called since it was opened.
+  */
+  bool isModifiedXData() const;
+  
+  /** \details
+    Returns true if and only if an object derived from OdDbEntity has been modified.
+    
+    \remarks
+    
+    This function returns true if and only if an object derived from OdDbEntity
+    either
+    
+        1) Calls assertWriteEnabled()
+        
+        2) Calls recordGraphicsModified(true).
+  */
+  bool isModifiedGraphics() const;
+   
+  /** \details
+    Returns true if and only if this object has not been closed since it was created.
+  */
+  bool isNewObject() const;
+  
+  /** \details
+    Returns true if and only if this object is sending notification.
+  */
+  bool isNotifying() const;
+  
+  /** \details
+    Returns true if and only if this object is taking part in an Undo operation.
+  */
+  bool isUndoing() const;
+  
+//  bool isCancelling() const;
+
+  /** \details
+    Returns true if and only if a call to close would completely close this object at this time.
+    
+    \remarks
+    Returns true if and only if a this object is open OdDb::kForRead with only one reader, and is not
+    in a transaction.
+  */
+    bool isReallyClosing() const;
+  
+  /** \details
+    Returns true if and only this object is a database -resident object.
+  */
+  bool isDBRO() const;
+    
+  /** \details
+    Throws an exception if this object is not open OdDb::kForRead.
+    
+    \remarks
+    This function should be used only inside member functions that do not modify this object. 
+    It should be the first function called by these functions.
+    
+    Throws:
+    <table>
+    Exception             Cause
+    eNotOpenForRead       !isReadEnabled()
+    </table>
+  */
+  void assertReadEnabled() const;
+  
+  /** \details
+    Throws an exception if this object is not open OdDb::kForWrite,
+    and controls automatic undo and notification of modifications.
+    
+    \param autoUndo [in]  Specifies if automatic undo should be done.
+    \param recordModified [in]  Specifies if graphics are to be updated, and
+                        "openedForModify", "modified" and "modifiedGraphics"
+                        notifications are to be sent. 
+    
+    \remarks
+    This function should be used only inside member functions that modify this object. 
+    It should be the first function called by these functions.
+    
+    Throws:
+    <table>
+    Exception             Cause
+    eNotOpenForWrite     !isWriteEnabled()
+    </table>
+  */
+  void assertWriteEnabled(
+    bool autoUndo = true, 
+    bool recordModified = true);
+  
+  /** \details
+    Throws an exception if this object is not open OdDb::kForNotify.
+    
+    \remarks
+    This function should be used only inside member functions that are used only when this object
+    is open OdDb::kForNotify. It should be the first function called by these functions.
+    
+    Throws:
+    <table>
+    Exception            Cause
+    eInvalidOpenState    !isNotifyEnabled()
+    </table>
+  */
+  void assertNotifyEnabled() const;
+  
+  /** \details
+    Controls the undo recording of this object in OdDbDatabase.
+
+    \param disable [in]  Boolean to control undo recording.
+    
+    \remarks
+    Disabling undo recording does not erase the undo recording; it merely suspends it.
+    Undo recording is initially off for newly created OdDbDatabase objects.
+  */
+  void disableUndoRecording(
+    bool disable);
+  
+  /** \details
+    Returns the undo filer associated with this object.
+    
+    \remarks
+    This function is typically used by custom classes using partial Undo
+    to add Undo information to the filer that would be used by this
+    object applyPartialUndo().
+    
+    Throws:
+    <table>
+    Exception           Cause
+    eNotOpenForWrite    !isWriteEnabled()
+    </table>
+  */
+  OdDbDwgFiler* undoFiler();
+  
+  /** \details
+    Notification function called each time an Undo operation is performed 
+    this object is using partial Undo.
+    
+    \param pUndoFiler [in]  A pointer to the undo filer with the partial undo information.
+    \param pClassObj [in] A pointer to the OdRxClass object for the class that will handle the Undo.
+    
+    \remarks
+    An object indicates it's using the partial undo mechanism, if and only if
+    it has set autoUndo false in all calls to assertWriteEnabled().
+    
+    This member function must know which types of fields to scan, 
+    and must stop after reading what it it needs.
+
+    If the class type specified by pClassObj does not matches the class of this object,
+    this member function must call the parent class's applyPartialUndo() 
+    and return whatever it returns.
+
+    If it does match the class of this object, this member function must use pUndoFiler to read the undo data, 
+    then typically use this object's set() method.
+    
+    Throws:
+    <table>
+    Exception                   Cause
+    eNotThatKindOfClass         pClassObj != OdDbObject::desc()
+    </table>
+  */
+  virtual void applyPartialUndo(
+    OdDbDwgFiler* pUndoFiler, 
+    OdRxClass* pClassObj);
+  
+  /** \details
+    Adds the specified transient reactor to this object's reactor list.
+
+    \param pReactor [in]  Pointer to the transient reactor object.
+
+    \remarks
+    An object must be open either OdDb::kForRead or OdDb::kForWrite in order to add a transient reactor.
+  */
+  void addReactor(
+    OdDbObjectReactor* pReactor) const;
+  
+  /** \details
+    Removes the specified transient reactor from this object's reactor list.
+
+    \param pReactor [in]  Pointer to the transient reactor object.
+
+    \remarks
+    An object must be open either OdDb::kForRead or OdDb::kForWrite in order to remove a transient reactor.
+  */
+  void removeReactor(
+    OdDbObjectReactor* pReactor) const;
+  
+  /** \details
+    Adds the specified persistent reactor to this object's reactor list.
+
+    \param objId [in]  Object ID of the persistent reactor.
+
+    \remarks
+    An object must be open OdDb::kForWrite in order to add a persistent reactor.
+
+    If the persistent reactor does not have an owner, 
+    it isn't saved with the drawing. Non-graphical objects used as persistent 
+    reactors are typically stored in a dictionary in the Named Objects Dictionary 
+    or in an extension dictionary associated with some object.
+  */
+  virtual void addPersistentReactor(
+    const OdDbObjectId& objId);
+  
+  /** \details
+    Removes the specified persistent reactor from this object's reactor list.
+
+    \param objId [in]  Object ID of the persistent reactor.
+
+    \remarks
+    An object must be open OdDb::kForWrite in order to remove one of its persistent reactors.
+  */
+  virtual void removePersistentReactor(
+    const OdDbObjectId& objId);
+  
+  /** \details
+    This method returns true if objId is the Object ID of a reactor attached to this object. Otherwise, it returns false.
+
+    \param objId [in]  Object ID of the persistent reactor.
+  */
+  bool hasPersistentReactor(
+    const OdDbObjectId& objId) const;
+
+  /** \details
+    Returns Object IDs of this object's persistent reactors.
+  */
+  OdDbObjectIdArray getPersistentReactors() const;
+
+  /** \details
+    Returns this object's transient reactors.
+  */
+  OdDbObjectReactorArray getTransientReactors() const;
+  
+  /** \details
+    Allows a subobject of a complex object to notify its root object that it has been changed. 
+    
+    \param pSubObj [in]  Pointer to the modifiedsubobject.
+
+    \remarks
+    Here's how it's supposed to work:
+    
+    1)  The subobject class's close() calls its triggers a "modified" notification which
+        calls its xmitPropagateModify().
+    2)  The subobject class calls the its parent's recvPropagateModify() its object's pointer.
+    3)  The owner's class's recvPropagateModify() sends a "modified" notification to the top of its class.
+    
+    The default implementation of this function does nothing. This function can be overridden in custom classes.
+  */
+  virtual void recvPropagateModify(
+    const OdDbObject* pSubObj);
+  
+  /** \details
+    Allows a subobject of a complex object to notify its root object that it has been changed. 
+
+    \remarks
+    This function must be called within an subobject's close() method.
+    
+    The owner can then propagate the notification that it has been been modified.
+    
+    The default implementation of this function inform the database 
+    in which the owner resides has been modified; triggering any
+    OdDbDatabaseReactors attached to it. This function can be
+    overridden in custom classes.
+
+    When overriding this function, it should: 
+   
+    \remarks
+    Here's how it's supposed to work:
+    
+    1)  The subobject class's close() calls its triggers a "modified" notification which
+        calls its xmitPropagateModify().
+    2)  The subobject class calls the its owner's recvPropagateModify() its object's pointer.
+    3)  This owner's class's recvPropagateModify() sends a "modified" notification to the top of its class.
+  */
+  virtual void xmitPropagateModify() const;
+  
+  /** \details
+    Performs a deep clone of this object.
+    
+    \param ownerIdMap [in]  Owner's ID map.
+
+    \remarks
+    Returns a SmartPointer to the newly created clone,
+    and adds a record to the specified ID map. 
+
+    If the cloning operation fails, a null SmartPointer is returned.
+    
+    A deep clone is a clone of this object and everything it owns.
+    
+    This function should not be called by client code; use OdDbDatabase::deepCloneObjects() instead.
+
+    This function can be overridden in custom classes.
+
+    The default implementation of this function appends the cloned object to the specified owner object.   
+  */
+  ODRX_SEALED_VIRTUAL OdDbObjectPtr deepClone(OdDbIdMapping& ownerIdMap, OdDbObject* pOwner, bool bPrimary = true) const ODRX_SEALED;
+  
+  /** \details
+    Performs a shallow clone of this object. 
+    
+    \param ownerIdMap [in/out] Owner's ID map.
+
+    \remarks
+    Returns a SmartPointer to the newly created clone,
+    and adds a record to the specified ID map. 
+    If the cloning operation fails, a null SmartPointer is returned.
+   
+    A shallow clone is a clone of only this object.
+    
+    This function should not be called by client code; use OdDbDatabase::wblockCloneObjects() instead.
+
+    The default implementation of this function calls subWblockClone() for all objects hard-referenced by this object.
+    This function can be overridden in custom classes.
+    
+    \sa
+    subDeepClone()
+
+  */
+        ODRX_SEALED_VIRTUAL OdDbObjectPtr wblockClone(OdDbIdMapping& ownerIdMap, OdDbObject* pOwner, bool bPrimary = true) const ODRX_SEALED;
+  
+  
+  /** \details
+    This function appends this object to the specified owner object.
+    
+    \param idPair [in]  ID pair to append.
+    \param pOwnerObject [in]  Pointer to the owner object.
+    \param ownerIdMap [in/out] Owner's ID map.
+    
+    \remarks
+    Adds a record to the specified ID map.     
+    
+    This function is used internally to subDeepClone() and subWblockClone().
+    
+    Throws:
+    <table>
+    Exception              Cause
+    eInvalidOwnerObject    !pOwnerObject->get()
+    </table>
+    
+  */
+  virtual void appendToOwner(
+    OdDbIdPair& idPair, 
+    OdDbObject* pOwnerObject, 
+    OdDbIdMapping& ownerIdMap);
+
+  /** \details
+    Called on a new created cloned object to indicate that its Object ID is not valid. 
+    
+    \remarks
+    The flags are cleared when the OdDbObject::subDeepClone or OdDbObject::subWblockClone() operation has been completed.
+  */
+  void setOdDbObjectIdsInFlux();
+  
+  /** \details
+      Returns true if and only if this object's Object ID is not valid because
+      the OdDbObject::subDeepClone or OdDbObject::subWblockClone() have yet to be completed.
+  */
+  bool isOdDbObjectIdsInFlux() const;
+  
+  /** \details
+    Notification function called whenever the notifying object has had its clone() member function called. 
+    
+    \param pObject [in]  Pointer to the notifying object.
+    \param pNewObject [in]  Pointer to the object resulting from the copy.
+
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void copied(
+    const OdDbObject* pObject, 
+    const OdDbObject* pNewObject);
+  
+
+  /** \details
+    Notification function called whenever an object has been erased or unerased.
+
+    \param pObject [in]  Pointer to the object that was erased/unerased.
+    \param erasing [in]  True if and only if this object is being erased.
+    
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void erased(
+    const OdDbObject* pObject, 
+    bool erasing = true);
+  
+  /** \details
+    Notification function called just before an object is deleted from memory. 
+
+    \param pObject [in]  Pointer to the object that is being deleted.
+
+    \remarks
+    An object is deleted when its reference count reaches 0.
+
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void goodbye(
+    const OdDbObject* pObject);
+    
+  /** \details
+    Notification function called whenever an object is opened for modify OdDb::kForWrite.
+
+    \param pObject [in]  Pointer to the object that is being opened.
+
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void openedForModify(
+    const OdDbObject* pObject);
+  
+  /** \details
+      Notification function called whenever an object is opened OdDb::kForWrite, a function
+      has been called that could modify the contents of this object, and this object is now being
+      closed.
+
+      \param pObject [in]  Pointer to the object that is being closed after being modified.
+
+      \remarks
+      The default implementation of this function does nothing.  This function can be
+      overridden in custom classes.
+  */
+  virtual void modified(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever a method of the
+    specified subobject has called assertWriteEnabled()
+    
+    \param pObject [in]  Pointer to the notifying object.
+    \param pSubObj [in]  A pointer to the subobject owned by pObject.
+    
+    \remarks
+    Notification is made upon pObject->close() or pObject->cancel(). 
+ 
+    \note
+    This function is called only for the modification of the following:
+       
+    * Vertices of OdDb2dPolylines, OdDb3dPolylines, OdDbPolygonMeshs, and OdDbPolyFaceMeshes
+    * OdDbFaceRecords of OdDbPolyFaceMeshs 
+    * OdDbAttributes owned by OdDbBlockReferences, classes derived from OdDbBlockReference, and OdDbMInsertBlocks
+  */
+  virtual void subObjModified(
+    const OdDbObject* pObject, 
+    const OdDbObject* pSubObj);
+  
+  /** \details
+    Notification function called whenever the notifying
+    object is in the midst an Undo operation that
+    is undoing modifications.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    The notifying object is open OdDb::kForRead.
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void modifyUndone(
+    const OdDbObject* pObject);
+  
+  /** \details
+    Notification function called whenever the XData has been written
+    to the notifying object.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    Notification is made upon pObject->close() or pObject->cancel(). 
+
+    The notifying object is open OdDb::kForRead.
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void modifiedXData(
+    const OdDbObject* pObject);
+  
+  /** \details
+    Notification function called whenever the Undo process
+    processes the appending of the notifying object to the database.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    The notifying object is marked as erased. It is not removed the database, and can be unerased,
+    even 'before' it was created. 
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void unappended(
+    const OdDbObject* pObject);
+  
+  
+  /** \details
+    Notification function called whenever a Redo process
+    processes the reappending of the notifying object to the database.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void reappended(
+    const OdDbObject* pObject);
+  
+  /** \details
+    Returns true if and only if this object is a proxy object or entity.
+  */
+  bool isAProxy() const;  
+
+  /** \details
+    Notification function called immediately before an object is closed.
+
+    \param objectId [in]  Object ID of the object that is being closed.
+
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void objectClosed(
+    const OdDbObjectId& objectId);
+  
+  
+  /** \details
+    Notification function called whenever an object derived from OdDbEntity is modified.
+    
+    \param pObject [in]  Pointer to the modified object.
+    
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+    
+    This function is called whenever the following has occurred.
+    
+    1)  The calling object is opened OdDb::kForWrite.
+    
+    2)  One of its member functions either
+    
+        a Calls its assertWriteEnabled with recordModified == true.
+        
+        b Calls its recordGraphicsModified(true).
+    
+    3) The calling object is being closed.
+    
+    This function is called whenever the object as been modified. It therefore
+    indicates only that the graphics for it may have changed.
+            
+  */
+  virtual void modifiedGraphics(
+    const OdDbObject* pObject);
+    
+  /** \details
+    Copies the contents of the specified object into this object when possible.
+
+    \param pSource [in]  Pointer to the source object.
+
+    \remarks
+    The source object and this object need not be of the same type.  
+    This function is meaningful only when implemented by custom classes.
+    
+    Throws:
+    <table>
+    Exception           Cause
+    eNullObjectPointer  pSource->isNull()
+    </table>
+  */
+  virtual void copyFrom(
+    const OdRxObject* pSource);
+
+  /** \details
+    Returns true if and only if this object has its
+    bit set to override the filer version.
+  */
+       bool hasSaveVersionOverride() const;
+  
+  /** \details
+    Controls the flag specifying that this object
+    overrides the save filer version.
+    
+    \param hasSaveVersionOverride [in]  Has save version override.
+               
+    \remarks
+    By default, objects are saved in the highest of the your object's birth version and the filer version.
+  */
+       void setHasSaveVersionOverride(
+    bool hasSaveVersionOverride);
+  
+  /** \details
+    Returns the drawing and maintenance release version into which this object must be stored.
+
+    \param pFiler [in]  Pointer to the DWG/DXF filer to be used.
+    \param pMaintVer [out]  Receives the maintenance version. 
+
+    \remarks
+    The default implementation of this function returns filer->dwgVersion().  This function can be
+    overridden in custom classes.
+    
+    Do not use filer->dwgVersion() with dwg/dxf(in/out)Fields(); use self()->getObjectSaveVersion() instead. 
+  */
+  virtual OdDb::DwgVersion getObjectSaveVersion(
+    const OdDbFiler* pFiler,
+    OdDb::MaintReleaseVer* pMaintVer = 0) const;
+      
+  /** \details
+    Determines the behavior for custom objects when saving to .dwg or .dxf file. 
+    
+    \param format [in]  File type.
+    \param ver [in]  Drawing version to save as.
+    \param replaceId [out]  Object ID of the object replacing this object.
+    \param exchangeXData [out]  Set to true if and only if this function did not add XData to the replacement object.
+
+    \remarks
+    This function either
+    
+    * Returns an OdDbObjectPtr for a non- database -resident (NDBRO) replacement object, setting replaceId to OdDbObjectId::kNull.
+    * Returns NULL, setting replaceId for a database -resident (DBRO) replacement object.
+    
+    Custom objects can decompose themselves into other objects, adding additional XData as required. Teigha 
+    transfers XData from this object to the replacement object if and only if exchangeXData is true.
+    
+    The default implementation returns NULL and sets replaceId to OdDbObjectId::kNull.  This function can be
+    overridden in custom classes.
+
+    The method is not intended to be called by client code. For processing owned objects use *convertForSave()*
+    method.
+  */
+  virtual OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver, 
+    OdDbObjectId& replaceId, 
+    bool& exchangeXData);
+
+  virtual OdDbObjectPtr decomposeForSave(
+    OdDb::SaveType format, 
+    OdDb::DwgVersion ver, 
+    OdDbObjectId& replaceId, 
+    bool& exchangeXData);
+
+  /** \details
+    The method should be called from *decomposeForSave()* of custom container objects for owned child objects.
+    It calls child's decomposeForSave() method plus performs other required actions
+    (handOverTo, exchanging XData, etc.)
+    
+    \param ver [in]  Drawing version to save as.
+
+    \remarks
+  */
+  void convertForSave(OdDb::DwgVersion ver);
+
+  /** \details
+    After loading from file, performs necessary actions which require accessing other Database objects.
+    For example, processing round-trip data.
+    
+    \param format [in]  File type.
+    \param version [in]  Drawing version of file loaded.
+    \param pAuditInfo [in]  Pointer to an OdDbAuditInfo object. Can be Null. Not Null if drawing is being loaded in Recover mode.
+    If so, audit() will be called later.
+
+    \remarks
+    If an object in its dwgInFields() method accesses other database objects, it's non-thread-safe.
+    Such objects can't be loaded in MT mode. To enable MT loading of custom objects, its dwgInFields()
+    should not access other database objects. Such actions should be performed in composeForLoad().
+    composeForLoad() is called in single-thread mode after all thread-safe objects are loaded (their dwgInFields()
+    were called in MT mode).
+
+    Being overridden in custom classes, the function first should call the parent class method.
+    Parent class implementation takes care of parent class round-trip data and other actions which require
+    access to other objects.
+  */
+  virtual void composeForLoad(OdDb::SaveType format, OdDb::DwgVersion version, OdDbAuditInfo* pAuditInfo);
+
+  /** \details
+    Returns a pointer to the OdGiDrawable for the object. If the object doesn't have an associated OdGiDrawable object, this function returns NULL. 
+  */
+  virtual OdGiDrawable* drawable();
+
+  /** \details
+    Sets the values of this object's subentity traits, and returns with the calling object's subentity traits.
+
+    \param pTraits [in]  Pointer to the OdGiDrawableTraits object to be set.
+    
+    \remarks
+    When overriding subSetAttributes(), you must OR (|) the return value 
+    of <base class>::subSetAttributes(pTraits) with any flags you add. 
+    
+    A derived class may not remove flags for any reason.
+    
+    The default implementation does nothing but returns kDrawableNone. This function can be
+    overridden in custom classes.
+  */
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+  
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+  
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+  
+  /** \details
+    Return true if and only if this object is database -resident (DBRO).
+    
+    \remarks
+    Persistent objects belong to an object that must be opened and closed.
+
+    Non-persistent objects can be accessed through their pointers.
+  */
+    virtual bool isPersistent() const;
+  
+  /** Returns the database ID corresponding to this object.
+  */
+  virtual OdDbStub* id() const;
+    
+  /** \details
+    Returns the CLSID value associated with this object.
+    
+    \param pClsid [out]  Pointer to the CLSID value.
+    
+    \remarks
+    Valid only on Windows with Teigha built as a DLL.
+  */
+  ODRX_SEALED_VIRTUAL OdResult getClassID(void* pClsid) const ODRX_SEALED;
+
+  // Override of OdGiDrawable
+  
+  /** \details
+    Assigns the specified OdGsCache to the calling object.
+
+    \param pNode [in]  Pointer to the OdGsCache object.
+  */
+  void setGsNode(OdGsCache* pNode);
+
+  // Override of OdGiDrawable
+  
+  /** \details
+    Returns the OdGsCache of an OdGiDrawable object.
+  */
+  OdGsCache* gsNode() const;
+
+  /*
+    void upgradeFromNotify (bool& wasWritable);
+    void downgradeToNotify (bool wasWritable);
+    OdResult closeAndPage (bool onlyWhenClean = true);
+    virtual void swapReferences (const OdDbIdMapping& idMap);
+    virtual OdGiDrawable* drawable ();
+    OdDbObjPtrArray* reactors (); 
+    virtual OdRxObjectPtr clone (OdDbIdMapping& ownerIdMap) const;
+  */
+  
+  /** \details
+    Applies the 3D transformation matrix to the XData of this object.
+    
+    \param xfm [in]  3D transformation matrix.
+    
+    \remarks
+    Applies the transformation matrix to only the following XData data types:
+    
+    <table>
+    Name                Value
+    kDxfXdWorldXCoord   1011   
+    kDxfXdWorldYCoord   1021   
+    kDxfXdWorldZCoord   1031   
+    kDxfXdWorldXDisp    1012   
+    kDxfXdWorldYDisp    1022   
+    kDxfXdWorldZDisp    1032   
+    kDxfXdWorldXDir     1013   
+    kDxfXdWorldYDir     1023   
+    kDxfXdWorldZDir     1033   
+    kDxfXdDist          1041   
+    kDxfXdScale         1042   
+    </table>
+  */
+  void xDataTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  /** \details
+    Returns true if and only if this object has fields.
+  */
+  bool hasFields() const;
+  
+  /** \details
+    Returns, and optionally opens, the specified field object from the field dictionary of this object.
+    
+    \param fieldName [in]  Name (key) for the new entry.
+    \param mode [in]  Open mode.
+  */
+  OdDbObjectId getField(
+    const OdString& fieldName) const;
+  OdDbObjectPtr getField(
+    const OdString& fieldName, 
+    OdDb::OpenMode mode) const;
+
+  /** \details
+    Adds the specified field to the field dictionary of this object.
+    
+    \param fieldName [in]  Name (key) for the new entry.
+    \param pField [in]  Pointer to the field object.
+    
+    \remarks
+    Returns the Object ID of the new entry.
+  */
+  virtual OdDbObjectId setField(
+    const OdString& fieldName, 
+    OdDbField* pField);
+
+  /** \details
+    Removes the specified field from the field dictionary of this object.
+    
+    \param fieldName [in]  Name (key) for the entry.
+    \param fieldId [in]  Object ID for the field.
+    
+    \remarks
+    If fieldId is specified, returns eOk if successful, or an appropriate error code if not.
+    
+    If fieldName is specified, returns the Object ID of the removed field if successful, 
+    or a null Object ID if not.
+  */
+  virtual OdResult removeField(
+    OdDbObjectId fieldId);
+  virtual OdDbObjectId removeField(
+    const OdString& fieldName);
+
+  /** \details
+    Returns, and optionally opens, the field dictionary of this Object.
+    \param mode [in]  Open mode.
+    \remarks
+  */
+  OdDbObjectId getFieldDictionary() const;
+  OdDbObjectPtr getFieldDictionary(
+    OdDb::OpenMode mode) const;
+
+
+  /** \details
+      For Teigha internal use only
+  */
+  
+  /*!DOM*/
+  virtual OdRxClass* saveAsClass(
+    OdRxClass* pClass) const;
+
+protected: // overridables
+  virtual OdResult subGetClassID(void* pClsid) const;
+  virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& ownerIdMap, OdDbObject* pOwner, bool bPrimary) const;
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject* pOwner, bool bPrimary) const;
+
+  friend class OdDbSystemInternals;
+  friend class OdDbObjectOverrule;
+  friend class OdDbPropertiesOverrule;
+  friend class OdDbObjectImpl;
+  OdDbObjectImpl* m_pImpl;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for all objects contained 
+  in the database.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbObject> OdDbObjectPtr;
+
+
+/** \details
+    Returns the data for the specified object.
+        
+    \param id [in]  Object ID of the object.
+    \param pObj [in]  Pointer to the object.
+    \param regapps [in]  Registered application name to retrieve extended data for. 
+                May be a wildcard or comma separated list. If empty - no XData is returned.
+    
+    \remarks
+    Each OdResBuf in the list contains a single DXF group code and data value pertaining 
+    to the object.
+    
+    The object is opened in kForRead mode, and the returned list of data
+    is independent of the original object (it may be modified or deleted without 
+    affecting the original object).  To affect changes in the original object
+    via the returned OdResBuf data, oddbEntMod must be called.
+
+    throws:
+    An OdError exception will be thrown if the passed in object cannot be opened.
+*/
+TOOLKIT_EXPORT OdResBufPtr oddbEntGet( const OdDbObject* pObj, const OdString& regapps = OdString::kEmpty );
+
+inline OdResBufPtr oddbEntGet( const OdDbObjectId& id, const OdString& regapps = OdString::kEmpty )
+{
+  return oddbEntGet(id.safeOpenObject(), regapps);
+}
+
+
+/** \details
+    Sets the data for the specified object.
+        
+    \param id [in]  Object ID of the object.
+    \param pObj [in]  Pointer to the object.
+    
+    \remarks
+    Each OdResBuf in the list contains a single DXF group code and data value pertaining 
+    to the object.
+    
+    throws:
+    An OdError exception will be thrown if the passed in object cannot be opened in kForWrite
+    mode.
+*/
+TOOLKIT_EXPORT OdResult oddbEntMod( OdDbObject* pObj, OdResBuf* pRb );
+
+inline OdResult oddbEntMod( const OdDbObjectId& id, OdResBuf* pRb )
+{
+  return oddbEntMod(id.safeOpenObject(OdDb::kForWrite), pRb);
+}
+
+TOOLKIT_EXPORT OdDbObjectId oddbEntNext(OdDbObjectId id, OdDbDatabase* db);
+TOOLKIT_EXPORT OdDbObjectId oddbEntLast(OdDbDatabase* db);
+
+TOOLKIT_EXPORT OdResult oddbEntMake(OdDbDatabase* pDb, OdResBuf* pRb, OdDbObjectPtr& pObj);
+TOOLKIT_EXPORT OdResult oddbEntMakeX(OdDbDatabase* pDb, OdResBuf* pRb, OdDbObjectPtr& pObj);
+
+
+
+#include "TD_PackPop.h"
+
+#endif //_ODDBXOBJECT_INCLUDED_
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContext.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContext.h
new file mode 100755
index 0000000..ae70771
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContext.h
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBOBJECTCONTEXT_H__INCLUDED_
+#define _DBOBJECTCONTEXT_H__INCLUDED_
+
+#include "RxObject.h"
+#include "SmartPtr.h"
+
+////////////////////////////////////////////////////////////////////////
+// class OdDbObjectContext
+////////////////////////////////////////////////////////////////////////
+
+/** \details
+    This class represents a context that can determine what properties
+	and behaviors are available for custom objects. 
+
+    \remarks
+    An annotation scale is an example of an object that 
+	has a context that determines its available options and behavior.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObjectContext : public OdRxObject
+{
+public:
+
+  ODRX_DECLARE_MEMBERS(OdDbObjectContext);
+
+  virtual ~OdDbObjectContext ();
+
+   /** \details
+    Returns the name of the context.
+  
+	\remarks
+	When referencing a context, do not use the context name since it can change.
+	Use the context ID instead.
+   */
+    virtual OdString getName () const = 0;
+
+   /** \details
+    Sets a new name of a context.
+  
+	\param name [in]  New name of the context.
+ 
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+   */
+    virtual OdResult setName ( const OdString& name ) = 0;
+
+   /** \details
+    Returns the ID of the context.
+ 
+	\remarks
+	Use the context ID when referencing a context since it is unique. Do not use 
+	the context name since it can change.	
+   */
+    virtual OdIntPtr uniqueIdentifier () const = 0;
+
+  /** \details
+    Returns the name of the context collection to which the context belongs.
+  */
+    virtual OdString collectionName () const = 0;
+};
+
+typedef OdSmartPtr<OdDbObjectContext> OdDbObjectContextPtr;
+
+#endif //_DBOBJECTCONTEXT_H__INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextCollection.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextCollection.h
new file mode 100755
index 0000000..e0f318c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextCollection.h
@@ -0,0 +1,211 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDB_OBJECTCONTEXTCOLLECTION_H_INCLUDED_
+#define _ODDB_OBJECTCONTEXTCOLLECTION_H_INCLUDED_
+
+#include "DbObjectContext.h"
+#include "TD_PackPush.h"
+
+class OdDbObjectContextCollectionIterator;
+typedef OdSmartPtr<OdDbObjectContextCollectionIterator> OdDbObjectContextCollectionIteratorPtr;
+
+/** \details
+    This class represents a collection of objects that have context items defined.
+
+    \remarks
+    Implement this interface and register it with OdDbObjectContextContextManager
+	for each database that supports context items. A context collection can be made
+	current, locked, or unlocked.
+        
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT ODRX_ABSTRACT OdDbObjectContextCollection : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbObjectContextCollection);
+
+   /** \details
+    Returns the name of the context collection.
+  
+	\remarks
+	The context collection name is used by the context manager to identify the 
+	collection and the context items that it contains.
+   */
+    virtual OdString name() const = 0;
+
+   /** \details
+    Returns a pointer to the current context of the context collection.
+  
+	\param pRequestingObject [in]  Optional pointer to the object for which you want
+	the current context.
+ 
+	\remarks
+	If no current context exists, Null is returned.
+   */
+  virtual OdDbObjectContextPtr currentContext(
+    const OdDbObject* pRequestingObject) const = 0;
+
+   /** \details
+    Sets the current context of the context collection.
+  
+	\param pContext [in]  Pointer to the context for which a uniqueIdentifier is defined
+	to make current for the context collection.
+   */
+   virtual OdResult setCurrentContext(
+    const OdDbObjectContext* pContext) = 0;
+
+   /** \details
+    Copies a context and adds the copy to the context collection.
+  
+	\param pContext [in]  Pointer to the context for which a uniqueIdentifier is defined
+	to copy and add to the context collection.
+ 
+	\remarks
+	The new context is assigned a new uniqueIdentifier.
+	Returns eOk if successful, or an appropriate error code if not.
+   */
+  virtual OdResult addContext(
+    const OdDbObjectContext* pContext) = 0;
+
+   /** \details
+    Removes a context from the context collection.
+  
+	\param contextName [in]  Name of the context to delete from the context
+	collection.
+ 
+	\remarks
+	To remove the current context from a collection, first make a different
+	context current, then delete the desired context.
+	Returns eOk if successful, or an appropriate error code if not.
+   */
+  virtual OdResult removeContext(
+    const OdString& contextName) = 0;
+
+   /** \details
+    Internal use only.
+   */
+    virtual OdResult lockContext(
+    const OdDbObjectContext* pContext) = 0;
+ 
+   /** \details
+    Internal use only.
+   */
+    virtual OdResult unlockContext() = 0;
+
+   /** \details
+    Internal use only.
+   */
+    virtual bool locked() const = 0;
+
+   /** \details
+    Returns a pointer to a copy of a named context in the collection.
+  
+	\param contextName [in]  Name of the context.
+ 
+	\remarks
+	If no context exists with the specified name, Null is returned.
+   */
+  virtual OdDbObjectContextPtr getContext(
+    const OdString& contextName) const = 0;
+
+  /** \details
+    Returns whether a named context exists in the collection.
+  
+	\param contextName [in]  Name of the context.
+ 
+	\remarks
+	Returns True if the named context exists in the collection, 
+	or returns Null if it does not exist.
+  */
+  virtual bool hasContext(
+    const OdString& contextName) const = 0;
+
+   /** \details
+    Returns an Iterator to the contexts in the collection.
+   */
+  virtual OdDbObjectContextCollectionIteratorPtr newIterator() const = 0;
+};
+
+
+////////////////////////////////////////////////////////////////////////
+// class OdDbObjectContextCollectionIterator
+////////////////////////////////////////////////////////////////////////
+
+/** \details
+    This class implements Iterators for objects that have context items defined and
+	stored in a context collection (using the OdDbObjectContextCollections class).
+
+    \remarks
+    If an application supports context collections, you must implement this class. You
+	can get an Iterator using OdDbObjectContextCollection::newIterator().
+        
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT ODRX_ABSTRACT OdDbObjectContextCollectionIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbObjectContextCollectionIterator);
+
+   /** \details
+    Moves the Iterator to the start of the collection.
+ 
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+   */
+  virtual OdResult start() = 0;
+
+   /** \details
+    Moves the Iterator to the next context of the collection.
+ 
+	\remarks
+	Returns True if successful, or returns False if the Iterator is
+	at the end of the collection.
+   */
+  virtual bool next() = 0;
+
+   /** \details
+    Returns whether the Iterator is at the end of the collection.
+ 
+	\remarks
+	Returns True if the Iterator is at the end of the collection, or
+	returns False if it is not.
+   */
+  virtual bool done() const = 0;
+
+   /** \details
+    Returns a copy of the context located at the current position of the
+	Iterator.
+   */
+  virtual OdDbObjectContextPtr getContext() const = 0;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDB_OBJECTCONTEXTCOLLECTION_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextData.h
new file mode 100755
index 0000000..2d062a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextData.h
@@ -0,0 +1,771 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBOBJECTCONTEXTDATA_H_INCLUDED_
+#define _DBOBJECTCONTEXTDATA_H_INCLUDED_
+
+#include "DbObject.h"
+#include "DbHatch.h"
+#include "DbMText.h"
+
+class OdDbObjectContext;
+
+/** \details
+    This class defines the set of object properties that represent an object in 
+	some context.
+  
+    \remarks
+    The context data varies depending on the current context, for example, the current 
+	annotation scale. This class is intended for application developers only, 
+	not for TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObjectContextData : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbObjectContextData);
+  OdDbObjectContextData();
+
+  /*
+  virtual OdResult dwgInContext(OdDbDwgFiler*,OdDbObjectContext* &);
+  virtual void dwgOutContext(OdDbDwgFiler*) const;
+*/
+  virtual OdResult dwgInContextData(OdDbDwgFiler*);
+  virtual void dwgOutContextData(OdDbDwgFiler*) const;
+  virtual const OdDbObjectContext* context() const;
+  virtual bool matchesContext(const OdDbObjectContext&) const;
+  virtual void setContext(const OdDbObjectContext&);
+  virtual void setContextToNull();
+
+  bool fileToExtensionDictionary() const;
+  bool isDefaultContextData() const;
+  bool isModified() const;
+  void setFileToExtensionDictionary(bool);
+  void setModified(bool);
+  void setIsDefault(bool b);
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbObjectContextData> OdDbObjectContextDataPtr;
+
+/** \details
+    This class defines the set of object properties that represent an annotation scale.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAnnotScaleObjectContextData : public OdDbObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbAnnotScaleObjectContextData);
+  OdDbAnnotScaleObjectContextData();
+
+  virtual const OdDbObjectContext* context() const;
+  virtual void setContext(const OdDbObjectContext&);
+  /*
+  virtual OdResult dwgInContext(OdDbDwgFiler*,OdDbObjectContext*&);
+  virtual OdResult dwgOutContext(OdDbDwgFiler*) const;
+  virtual bool matchesContext(const OdDbObjectContext&) const;
+  virtual void setContextToNull();
+*/
+  virtual OdResult getScale(double&) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbAnnotScaleObjectContextData> OdDbAnnotScaleObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for an MText object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class OdDbMTextObjectContextData;
+typedef OdSmartPtr<OdDbMTextObjectContextData> OdDbMTextObjectContextDataPtr;
+
+/** <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMTextObjectContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMTextObjectContextData);
+  OdDbMTextObjectContextData();
+  /*
+  bool zeroWidth(double tol = 1e-10) const;
+  double rotation(const OdGeVector3d&) const;
+*/
+  OdGePoint3d location() const;
+  OdGeVector3d direction() const;
+  double actualHeight() const;
+  double actualWidth() const;
+  double definedHeight() const;
+  double definedWidth() const;
+  OdDbMText::AttachmentPoint attachment() const;
+  OdDb::TextHorzMode horizontalMode() const;
+  OdDb::TextVertMode verticalMode() const;
+
+  OdDbMText::ColumnType  columnType() const;
+  OdInt32 columnCount() const;
+  double columnGutter() const;
+  double columnHeight(OdInt32) const;
+  double columnWidth() const;
+  bool columnAutoHeight() const;
+  bool columnFlowReversed() const;
+  
+  void setLocation(const OdGePoint3d&);
+  void setDirection(const OdGeVector3d&);
+  void setActualHeight(double);
+  void setActualWidth(double);
+  void setDefinedHeight(double);
+  void setDefinedWidth(double);
+  void setAttachment(OdDbMText::AttachmentPoint);
+  //void setAttachmentMovingLocation(OdDbMText::AttachmentPoint, const OdGeVector3d&, double);
+  void setHorizontalMode(OdDb::TextHorzMode);
+  void setVerticalMode(OdDb::TextVertMode);
+  
+  void setColumnType(OdDbMText::ColumnType);
+  void setColumnCount(OdInt32);
+  void setColumnAutoHeight(bool);
+  void setColumnFlowReversed(bool);
+  void setColumnGutter(double);
+  void setColumnHeight(OdInt32,double);
+  void setColumnWidth(double);
+/*  
+  void  chgdirXattach();
+  void  chgYattach();
+  void  getCorners(OdGePoint3dArray&, const OdGeVector3d&, bool, double) const;
+  void  setDirFromAngle(double, const OdGeVector3d&);
+  void  xlateLocation(const OdGeVector3d&);
+*/
+  static OdDbMTextObjectContextDataPtr getMTextAnnoScaleDefaultContextData(const OdDbMText*);
+  virtual void copyFrom(const OdRxObject* pSource);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+    This class defines a set of annotation-specific properties for a Text object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbTextObjectContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbTextObjectContextData);
+  OdDbTextObjectContextData();
+  virtual OdGePoint2d alignmentPointInEcs() const;
+  //virtual void audit(OdDbAuditInfo *,OdDbText *,OdInt32 &,bool &);
+  virtual OdDb::TextHorzMode horizontalMode() const;
+  virtual OdGePoint2d positionInEcs() const;
+  virtual double rotation() const;
+  virtual void setAlignmentPointInEcs(const OdGePoint2d&);
+  virtual void setHorizontalMode(OdDb::TextHorzMode);
+  virtual void setPositionInEcs(const OdGePoint2d&);
+  virtual void setRotation(double);
+
+  //static OdDbTextObjectContextData* getTextAnnoScaleDefaultContextData(const OdDbText*);
+
+  virtual void copyFrom(const OdRxObject *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbTextObjectContextData> OdDbTextObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for an MText Attribute object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMTextAttributeObjectContextData : public OdDbTextObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMTextAttributeObjectContextData);
+  OdDbMTextAttributeObjectContextData();
+  virtual void setContext(const OdDbObjectContext&) ODRX_OVERRIDE;
+  virtual OdDbMTextObjectContextDataPtr getMTextObjectContextData() const;
+  virtual void setMTextObjectContextData(OdDbMTextObjectContextData*);
+  virtual void copyFrom(const OdRxObject *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbMTextAttributeObjectContextData> OdDbMTextAttributeObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Block Reference object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbBlkRefObjectContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlkRefObjectContextData);
+  OdDbBlkRefObjectContextData();
+
+  virtual OdGePoint3d positionInEcs() const;
+  virtual double rotation() const;
+  virtual OdGeScale3d  scaleFactors() const;
+  virtual void setPositionInEcs(const OdGePoint3d&);
+  virtual void setRotation(double);
+  virtual void setScaleFactors(const OdGeScale3d&);
+  //static OdDbBlkRefObjectContextData* getBlkAnnoScaleDefaultContextData(const OdDbBlockReference *);
+
+  //virtual void audit(OdDbAuditInfo *,OdDbBlockReference *,OdInt32 &,bool &);
+  virtual void copyFrom(const OdRxObject *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbBlkRefObjectContextData> OdDbBlkRefObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Dimension object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDimensionObjectContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDimensionObjectContextData);
+  OdDbDimensionObjectContextData();
+
+  virtual OdDbObjectId blockIndex() const;
+  virtual void setBlockIndex(OdDbObjectId);
+  void setNDBRDimBlock(OdDbBlockTableRecord*);
+  OdDbBlockTableRecordPtr getNDBRDimBlock()const;
+
+  enum OverrideCode
+  {
+    eDimtofl  = 1,
+    eDimsoxd   = 2,
+    eDimatfit = 4,
+    eDimtix   = 8,
+    eDimtmove = 16
+  };
+  virtual bool  hasOverride(OverrideCode) const;
+  virtual void setOverride(OverrideCode,bool);
+
+  // dimvar overrides
+  virtual OdInt16  dimatfit() const;
+  virtual bool  dimsoxd() const;
+  virtual bool  dimtix() const;
+  virtual OdInt16  dimtmove() const;
+  virtual bool  dimtofl() const;
+
+  virtual void setDimatfit(OdInt16);
+  virtual void setDimsoxd(bool);
+  virtual void setDimtix(bool);
+  virtual void setDimtmove(OdInt16);
+  virtual void setDimtofl(bool);
+
+  virtual bool  defTextLocation() const;
+  virtual OdGePoint2d  textLocation() const;
+  virtual double  textRotation() const;
+  virtual bool  getArrowFirstIsFlipped() const;
+  virtual bool  getArrowSecondIsFlipped() const;
+
+  virtual void setDefTextLocation(bool);
+  virtual void setTextLocation(const OdGePoint2d& /*,bool */);
+  virtual void setTextRotation(double);
+  virtual void  setArrowFirstIsFlipped(bool);
+  virtual void  setArrowSecondIsFlipped(bool);
+   
+   //  virtual double calcZeroDimScale(OdDbDatabase *);
+   //  OdResult createOrClearBlock(OdDbDatabase *);
+   //  virtual void addEntity(OdDbEntity *);
+   //   OdResult getEntityList(OdRxObjectPtrArray&, bool&) const;
+   //   virtual OdGePoint3d  getFlipArrowPickPoint() const;
+   //   bool  isBlockSpace(OdDbObjectId,OdDbDatabase *) const;
+   //   virtual bool  isFlipArrow() const;
+   //   virtual bool  isOwnDimBlock() const;
+   //   virtual bool  recomputeDimBlock() const;
+   //   void  releaseLayoutGeometry();
+   //   virtual void  setFlipArrow(bool);
+   //   virtual void  setFlipArrowPickPoint(OdGePoint3d &);
+   //   virtual OdResult setOwnDimBlock(bool);
+   //   virtual OdResult setRecomputeDimBlock(bool);
+   //   void  setToBeRemoved(bool);
+   //   OdResult stuffNewEntitiesInDatabase(bool,const OdGeMatrix3d&,wchar_t *);
+   //  OdResult geomExtents(OdGeExtents3d&, const BlockRefData&) const;
+   //  virtual OdRxObjectPtrArray const *  geometry() const;
+//   bool  toBeRemoved() const;
+//   OdResult updateContentsFromField(bool);
+//   static OdDbDimensionObjectContextData * getDimensionAnnoScaleDefaultContextData(const OdDbDimension*);
+//   static OdDbDimensionObjectContextData * getDimensionCurrentContextData(const OdDbDimension*);
+//  
+  virtual void copyFrom(const OdRxObject *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  void transformBy(const OdGeMatrix3d &mx);
+};
+
+typedef OdSmartPtr<OdDbDimensionObjectContextData> OdDbDimensionObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for an Aligned Dimension object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAlignedDimensionObjectContextData : public OdDbDimensionObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbAlignedDimensionObjectContextData);
+  OdDbAlignedDimensionObjectContextData();
+
+  OdGePoint3d dimLinePoint() const;
+  void setDimLinePoint(const OdGePoint3d&);
+
+  //static OdDbAlignedDimensionObjectContextData * getAlignedDimensionAnnoScaleDefaultContextData(const OdDbDimension*);
+
+  virtual void copyFrom(const OdRxObject* pSource);
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbAlignedDimensionObjectContextData> OdDbAlignedDimensionObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for an Angular Dimension object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbAngularDimensionObjectContextData : public OdDbDimensionObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbAngularDimensionObjectContextData);
+  OdDbAngularDimensionObjectContextData();
+
+  OdGePoint3d arcPoint() const;
+  void setArcPoint(const OdGePoint3d &);
+  //OdResult update2Line(const OdGePoint3d *,const OdGePoint3d*,double,const OdGeVector3d&);
+  //OdResult update3Point(const OdGePoint3d *,const OdGePoint3d*,double,const OdGeVector3d&);
+  //OdResult updateArc(const OdGePoint3d *,const OdGePoint3d *,double,const OdGeVector3d&);
+
+  //static OdDbAngularDimensionObjectContextData * getAngularDimensionAnnoScaleDefaultContextData(const OdDbDimension*);
+
+  virtual void copyFrom(const OdRxObject* pSource);
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbAngularDimensionObjectContextData> OdDbAngularDimensionObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Diametric Dimension object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDiametricDimensionObjectContextData : public OdDbDimensionObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDiametricDimensionObjectContextData);
+  OdDbDiametricDimensionObjectContextData();
+
+  OdGePoint3d chordPoint() const;
+  OdGePoint3d farChordPoint() const;
+  void setChordPoint(const OdGePoint3d&);
+  void setFarChordPoint(const OdGePoint3d&);
+
+  //static OdDbDiametricDimensionObjectContextData* getDiametricDimensionAnnoScaleDefaultContextData(const OdDbDimension*);
+
+  virtual void copyFrom(const OdRxObject* pSource);
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbDiametricDimensionObjectContextData> OdDbDiametricDimensionObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for an Ordinate Dimension object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbOrdinateDimensionObjectContextData : public OdDbDimensionObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbOrdinateDimensionObjectContextData);
+  OdDbOrdinateDimensionObjectContextData();
+
+  OdGePoint3d leaderEndPoint() const;
+  OdGePoint3d origin() const;
+  void setLeaderEndPoint(const OdGePoint3d&);
+  void setOrigin(const OdGePoint3d&);
+
+/*  static OdDbOrdinateDimensionObjectContextData * getOrdinateDimensionAnnoScaleDefaultContextData(const OdDbDimension*);
+*/
+  virtual void copyFrom(const OdRxObject* pSource);
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbOrdinateDimensionObjectContextData> OdDbOrdinateDimensionObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Radial Dimension object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRadialDimensionObjectContextData : public OdDbDimensionObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRadialDimensionObjectContextData);
+  OdDbRadialDimensionObjectContextData();
+
+  OdGePoint3d  chordPoint() const;
+  void setChordPoint(const OdGePoint3d&);
+
+  //static OdDbRadialDimensionObjectContextData * getRadialDimensionAnnoScaleDefaultContextData(const OdDbDimension*);
+
+  virtual void copyFrom(const OdRxObject* pSource);
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbRadialDimensionObjectContextData> OdDbRadialDimensionObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Large Radial Dimension object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRadialDimensionLargeObjectContextData : public OdDbRadialDimensionObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRadialDimensionLargeObjectContextData);
+  OdDbRadialDimensionLargeObjectContextData();
+
+  OdGePoint3d jogPoint() const;
+  OdGePoint3d overrideCenter() const;
+  void setJogPoint(const OdGePoint3d&);
+  void setOverrideCenter(const OdGePoint3d&);
+
+  //static OdDbRadialDimensionLargeObjectContextData * getRadialDimensionLargeAnnoScaleDefaultContextData(const OdDbDimension*);
+
+  virtual void copyFrom(const OdRxObject* pSource);
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbRadialDimensionLargeObjectContextData> OdDbRadialDimensionLargeObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Feature Control Frame object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbFcfObjectContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbFcfObjectContextData);
+  OdDbFcfObjectContextData();
+
+  virtual OdGeVector3d horizontal() const;
+  virtual OdGePoint3d location() const;
+  virtual void setHorizontal(const OdGeVector3d&);
+  virtual void setLocation(const OdGePoint3d&);
+
+  //static OdDbFcfObjectContextData * getFcfAnnoScaleDefaultContextData(const OdDbFcf*);
+
+  void transformBy(const OdGeMatrix3d&);
+  virtual void copyFrom(OdRxObject const *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbFcfObjectContextData> OdDbFcfObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Hatch Scale object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbHatchScaleContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbHatchScaleContextData);
+  OdDbHatchScaleContextData();
+
+//   virtual OdDbObjectContext *  context() const;
+//   virtual OdResult  setContext(const OdDbObjectContext&);
+
+  void appendLoop(OdInt32 loopType, const EdgeArray& edgePtrs);
+  void getLoopAt(const OdDbHatch*, OdInt32 i, OdInt32 &loopType, EdgeArray& edgePtrs) const;
+  void insertLoopAt(OdInt32 i, OdInt32 loopType, const EdgeArray& edgePtrs);
+  OdInt32 loopTypeAt(OdInt32 i) const;
+  OdInt32 numLoops() const;
+  void removeLoopAt(OdInt32 i);
+  void setLoopAt(OdInt32 i, OdInt32 loopType, const EdgeArray& edgePtrs);
+  void setLoopTypeAt(OdInt32 i, OdInt32 loopType);
+  void setNumLoops(OdInt32 i);
+
+  const OdHatchPattern& hatchPattern() const;
+  void  setHatchPattern(const OdHatchPattern&);
+  OdGeVector3d patternBaseAngle( ) const;
+  double  patternScale() const;
+  void  setPatternBaseAngle(const OdGeVector3d&);
+  void  setPatternScale(double);
+//   void  setSupportsContext(OdDbHatch *);
+
+//   void  transformBy(const OdGeMatrix3d&);
+//   void  transformBy(OdInt32,const OdGeMatrix2d&,OdInt32);
+//   void  transformBy(OdInt32,const OdGeMatrix3d&,const OdGeMatrix3d&,const OdGeMatrix3d&,OdGeVector3d,double);
+
+//   OdResult  updateHatchBoundary(const OdDbHatch*,const OdArray<OdHatchBoundaryLoop>&);
+//   void  verify(const OdArray<OdHatchBoundaryLoop>&) const;
+  void getHatchLineDataAt( const OdDbHatch*, OdInt32 n, OdGePoint2d& startPt, OdGePoint2d& endPt) const;
+  void getHatchLinesData( const OdDbHatch*, OdGePoint2dArray& startPts, OdGePoint2dArray& endPts) const;
+  void setHatchLineDataAt( OdInt32 n, const OdGePoint2d& startPt, const OdGePoint2d& endPt);
+  void setHatchLinesData( const OdGePoint2dArray& startPts, const OdGePoint2dArray& endPts);
+  bool isValidHatchLines(const OdDbHatch*) const;
+  void setEvaluateHatch(bool/*,bool*/);
+  OdInt32 numHatchLines(const OdDbHatch*) const;
+  void  transformBy(const OdGeMatrix2d&);
+
+  virtual void copyFrom(OdRxObject const *);
+  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbHatchScaleContextData> OdDbHatchScaleContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Hatch View object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbHatchViewContextData : public OdDbHatchScaleContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbHatchViewContextData);
+  OdDbHatchViewContextData();
+/*
+  OdResult appendHatchLine(const OdGePoint2d&,const OdGePoint2d&);
+  OdResult compressHatch();
+  virtual OdDbObjectContext * context() const;
+  virtual OdResult dwgInContext(OdDbDwgFiler *,OdDbObjectContext * &);
+  virtual OdResult dwgOutContext(OdDbDwgFiler *) const;
+  OdResult freeUncompressedHatch();
+  OdResult initCompression();
+  virtual bool matchesContext(const OdDbObjectContext&) const;
+  OdResult rotateHatchPattern(const OdDbHatch*,double);
+  virtual OdResult setContext(const OdDbObjectContext&);
+  OdResult setGrowLength(OdInt32);
+  OdResult setLogicalLength(OdInt32);
+  OdResult setPhysicalLength(OdInt32);
+  OdResult traceHatchBoundary(const OdDbHatch*) const;
+  bool viewChanged(const OdDbHatch*);
+*/
+  virtual void copyFrom(OdRxObject const *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdDbObjectId viewportId() const;
+  void setViewportId(OdDbObjectId id);
+  OdGeVector3d viewTarget() const;
+  void setViewTarget(const OdGeVector3d& v);
+  double viewRotation() const;
+  void setViewRotation(double a);
+};
+
+typedef OdSmartPtr<OdDbHatchViewContextData> OdDbHatchViewContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for a Leader object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbLeaderObjectContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbLeaderObjectContextData);
+  OdDbLeaderObjectContextData();
+
+  virtual bool addLast(const OdGePoint3d&);
+  virtual OdGeVector3d annotationOffset() const;
+  virtual OdGeVector3d blockInsertOffset() const;
+  virtual void clearFurtherVertices();
+  virtual OdResult endPoint(OdGePoint3d &) const;
+  virtual const OdGePoint3dArray& furtherVertices() const;
+  virtual OdGePoint3d getVertex(OdInt32) const;
+  //virtual bool hasHookLine(const OdGePoint3d&) const;
+  virtual bool hookLineDirSameAsHorizon() const;
+  virtual OdGeVector3d horizontal() const;
+  virtual OdInt32 numFurtherVertices() const;
+  virtual void removeLastVertex();
+  virtual OdResult setAnnotationOffset(const OdGeVector3d&);
+  virtual OdResult setBlockInsertOffset(const OdGeVector3d&);
+  virtual OdResult setFurtherVertices(const OdGePoint3dArray&);
+  virtual OdResult setHookLineDirSameAsHorizon(bool);
+  virtual OdResult setHorizontal(const OdGeVector3d&);
+  virtual void setVertex(OdInt32,const OdGePoint3d&);
+  //virtual OdResult transformBy(const OdGeMatrix3d&);
+
+  //static OdDbLeaderObjectContextData * getLeaderAnnoScaleDefaultContextData(OdDbLeader const *);
+
+  virtual void copyFrom(OdRxObject const *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbLeaderObjectContextData> OdDbLeaderObjectContextDataPtr;
+
+/** \details
+    This class defines a set of annotation-specific properties for an MLeader object.
+  
+    \remarks
+    This class is intended for application developers only, not TX developers.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbMLeaderObjectContextData : public OdDbAnnotScaleObjectContextData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMLeaderObjectContextData);
+  OdDbMLeaderObjectContextData();
+
+  //static OdDbMLeaderObjectContextData * getMLeaderAnnoScaleDefaultContextData(OdDbMLeader const *);
+  //virtual OdResult updateContentScale(OdDbMLeaderObjectContextData* pData);
+
+  virtual void copyFrom(OdRxObject const *);
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbMLeaderObjectContextData> OdDbMLeaderObjectContextDataPtr;
+
+#endif //_DBOBJECTCONTEXTDATA_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextInterface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextInterface.h
new file mode 100755
index 0000000..87ce64c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextInterface.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBOBJECTCONTEXTINTERFACE_H_INCLUDED_
+#define _DBOBJECTCONTEXTINTERFACE_H_INCLUDED_
+
+#include "RxObject.h"
+
+class OdDbObjectContext;
+class OdDbObject;
+
+/** \details
+    This class is the Protocol Extension class for OdDbObjectContext objects.
+    
+    \remarks
+    Implement this interface to use OdDbObjectContext objects, which can determine 
+	the properties and behaviors that are available for custom objects.
+        
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbObjectContextInterface : public OdRxObject
+{
+public:
+
+  ODRX_DECLARE_MEMBERS(OdDbObjectContextInterface);
+ 
+   /** \details
+    Returns whether a context collection is supported by a specified object.
+  
+	\param pObject [in]  Pointer to the object.
+	\param collectionName [in]  Name of the context collection.
+ 
+	\remarks
+	Returns True if the object supports the named context collection, or returns
+	False if it does not.
+   */
+      virtual bool supportsCollection( 
+    const OdDbObject* pObject,
+    const OdString&   collectionName ) const = 0;
+
+   /** \details
+    Returns whether a context is used by a specified object.
+  
+	\param pObject [in]  Pointer to the object.
+	\param context [in]  Name of the context.
+ 
+	\remarks
+	Returns True if the object uses the named context, or returns
+	False if it does not.
+   */
+      virtual bool hasContext ( 
+    const OdDbObject*        pObject,
+    const OdDbObjectContext& context ) const = 0;
+
+   /** \details
+    Adds a context to the specified object.
+  
+	\param pObject [in]  Pointer to the object.
+	\param context [in]  Name of the context to add.
+ 
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+   */
+      virtual OdResult addContext ( 
+    OdDbObject*              pObject,
+    const OdDbObjectContext& context ) const = 0;
+
+  /** \details
+    Removes a context from the specified object.
+  
+	\param pObject [in]  Pointer to the object.
+	\param context [in]  Name of the context to remove.
+ 
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+  */
+      virtual OdResult removeContext ( 
+    OdDbObject*              pObject,
+    const OdDbObjectContext& context ) const = 0;
+};
+
+typedef OdSmartPtr<OdDbObjectContextInterface> OdDbObjectContextInterfacePtr;
+
+#endif //_DBOBJECTCONTEXTINTERFACE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextManager.h
new file mode 100755
index 0000000..1dbed1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectContextManager.h
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDB_OBJECTCONTEXTMANAGER_H_INCLUDED_
+#define _ODDB_OBJECTCONTEXTMANAGER_H_INCLUDED_
+
+#include "RxObject.h"
+#include "TD_PackPush.h"
+
+class OdDbObjectContextCollection;
+class OdDbObjectContext;
+class OdDbObjectContextManagerImpl;
+
+////////////////////////////////////////////////////////////////////////
+// class OdDbObjectContextManager
+////////////////////////////////////////////////////////////////////////
+
+/** \details
+    This class returns and manages the context objects that are available in a drawing.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbObjectContextManager : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbObjectContextManager);
+
+  OdDbObjectContextManager(OdDbObjectContextManagerImpl*);
+
+  virtual ~OdDbObjectContextManager();
+
+  /** \details
+    Registers a context collection with the context manager.
+  
+	\param collectionName [in]  Name of the context collection.
+	\param pCollection [in]  Pointer to the context collection.
+ 
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+  */
+     OdResult registerContextCollection(
+    const OdString& collectionName,
+    OdDbObjectContextCollection* pCollection);
+
+  /** \details
+    Unregisters a context collection from the context manager.
+  
+	\param collectionName [in]  Name of the context collection.
+ 
+	\remarks
+	Returns eOk if successful, or an appropriate error code if not.
+  */
+      OdResult unregisterContextCollection(
+    const OdString& collectionName);
+
+   /** \details
+    Returns a pointer to a context collection using its name as an identifier.
+  
+	\param collectionName [out]  Name of the context collection.
+ 
+	\remarks
+	Returns a pointer to the registered context collection. 
+	If no collection exists	with the specified name, Null is returned.
+   */
+     OdDbObjectContextCollection* contextCollection(
+    const OdString& collectionName) const;
+
+protected:
+  OdDbObjectContextManagerImpl* m_pImpl;
+};
+
+#include "TD_PackPop.h"
+
+#endif //_ODDB_OBJECTCONTEXTMANAGER_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectId.h
new file mode 100755
index 0000000..b06f5a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectId.h
@@ -0,0 +1,534 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODDBOBJECTID_INCLUDED_
+#define _ODDBOBJECTID_INCLUDED_ /* {Secret } */
+
+#include "DbHandle.h"
+#include "OdError.h"
+#include "TD_PackPush.h"
+
+class OdDbDatabase;
+class OdDbObject;
+template <class T> class OdSmartPtr;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbObject object pointers.
+*/
+typedef OdSmartPtr<OdDbObject> OdDbObjectPtr;
+
+class OdDbStub;
+class OdDbStubExt;
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum OpenMode
+  {
+    kNotOpen           = -1,  // Object is not open.
+    kForRead           = 0,   // Object is open for reading.
+    kForWrite          = 1,   // Object is open for reading and/or writing.
+    kForNotify         = 2    // Object is open for notify.
+  };
+
+  enum ReferenceType
+  {
+    kSoftPointerRef     = 0,  // Soft Pointer Reference
+    kHardPointerRef     = 1,  // Hard Pointer Reference
+    kSoftOwnershipRef   = 2,  // Soft Ownership Reference
+    kHardOwnershipRef   = 3   // Hard Ownership Reference
+  };
+}
+
+/** \details
+    This class implements memory-resident ObjectId objects for OdDbDatabase objects.  
+
+    \remarks
+    Database objects reference
+    other database objects using ObjectId objects, and a database object pointer
+    can always be obtained from a valid ObjectId objects. The effect of this mechanism is
+    that database objects do not have to reside in memory unless they are explicitly
+    being examined or modified by the user.  
+    
+    The user must explicitly open an object
+    before reading or writing to it, and should release it when the operation
+    is completed.  This functionality allows Teigha to support partial loading of 
+    a database, where ObjectId objects exist for all objects in the database, but 
+    the actual database objects need not be loaded until they are accessed.  
+    It also allows database objects that are not in use to be swapped out of memory, 
+    and loaded back in when they are accessed.  ObjectId objects are not written out to a 
+    DWG/DXF file.  If a reference must be preserved to a database object that has been 
+    serialized, the object's database handle (OdDbHandle) should be used.
+
+    \sa
+    * OdDbHandle
+    * OdDbObject
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObjectId
+{
+public:
+  /** \remarks
+    This function guarantees that isNull() will 
+    return true if it is the first operation applied to this instance.
+  */
+  OdDbObjectId () : m_Id (0) { }
+
+  /** \details
+    For Teigha internal use only. 
+  */
+
+  /*!DOM*/
+  OdDbObjectId (
+    OdDbStub* objectId) : m_Id (objectId) { }
+
+  /** \details
+    The null ObjectId object.
+  */
+  TOOLKIT_EXPORT_STATIC static const OdDbObjectId kNull;
+
+  /** \details
+    Returns true and only if this ObjectId object is null.
+  */
+  bool isNull () const { return m_Id == 0; }
+
+  /** \details
+    Sets this Object ID to null.
+  */
+  void setNull () { m_Id = 0; }
+
+  /** \details
+    Returns true and only if this ObjectId object references a valid object.
+  */
+  bool isValid () const;
+
+  // VS2015 requires to create copy constructor explicity
+#if defined(_MSC_VER) && (_MSC_VER > 1800)
+  OdDbObjectId(const OdDbObjectId& objectId) = default;
+  OdDbObjectId& operator = (const OdDbObjectId& objectId) = default;
+#endif
+
+  /*!DOM*/
+
+  OdDbObjectId& operator = (
+    OdDbStub* objectId) { m_Id = objectId; return *this; }
+
+  bool operator < (
+    const OdDbObjectId& objectId) const;
+
+  bool operator > (
+    const OdDbObjectId& objectId) const;
+
+  bool operator >= (
+    const OdDbObjectId& objectId) const;
+
+  bool operator <= (
+    const OdDbObjectId& objectId) const;
+
+  bool operator == (
+    const OdDbObjectId& objectId) const;
+
+  bool operator != (
+    const OdDbObjectId& objectId) const;
+
+  bool operator ! () const { return isNull(); }
+
+  /** \details
+    For Teigha internal use only.
+  */
+  
+  /*!DOM*/
+  inline operator OdDbStub* () const { return (OdDbStub*)m_Id; }
+
+  /** \details
+    For Teigha internal use only. 
+  */
+  
+  /*!DOM*/
+  inline OdDbStubExt* operator -> () const { return (OdDbStubExt*)m_Id; }
+
+  /** \details
+    Returns the database with which this ObjectId object is associated.
+    
+    \remarks
+    Returns NULL if this ObjectId object is not associated with any database.
+  */
+  OdDbDatabase* database () const;
+
+  /** \details
+    Returns the original database with which this ObjectId object is associated.
+    
+    \remarks
+    If the object associated with this ObjectId object has been redirected to
+    a host database from an Xref database, this function returns
+    a pointer to the Xref database. 
+    
+    Otherwise, it returns a pointer to the database with which this ObjectId object is associated.
+  */
+  OdDbDatabase* originalDatabase () const;
+
+  /** \details
+    If this ObjectId object has been redirected from another database (possibly an Xref), this function
+    returns the actual ObjectId object for that database.
+  */
+  void convertToRedirectedId ();
+
+  /** \details
+    Returns true if and only if the object associated with this ObjectId object is erased.
+  */
+  bool isErased () const;
+
+  /** \details
+    Returns true if and only if this object associated with this ObjectId object is erased, or any of its ownership hierarchy
+    have been erased.
+  */
+  bool isEffectivelyErased () const;
+
+  /** \details
+    For Teigha internal use only. 
+  */
+  
+  /*!DOM*/
+  bool objectLeftOnDisk () const;
+
+  /** \details
+    Returns the database handle of the object referenced by this ObjectId object.
+    
+    \remarks
+    Returns NULL if no database object is referenced by this ObjectId object.
+
+    If this ObjectId object has been redirected from another database (possibly an Xref), this function
+    returns the handle for this database.
+  */
+  const OdDbHandle& getHandle () const;
+
+  /** \details
+    Returns the database handle of the object referenced by this ObjectId object.
+    
+    \remarks
+    Returns NULL if no database object is referenced by this ObjectgId object.
+
+    If this ObjectId object has been redirected from another database (possibly an Xref), this function
+    returns the handle for the original database.
+  */
+  const OdDbHandle& getNonForwardedHandle () const;
+
+  /** \details
+    Opens the database object associated with this ObjectId object, in the specified mode.
+
+    \param pObj [out]  Smart pointer to opened object
+    \param openMode [in]  Mode in which to open the object.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+
+    \remarks
+    Returns eOk if successful, otherwise an Error Code.
+    
+    openMode must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    OdDb::kForRead      0         Object is open for reading.
+    OdDb::kForWrite     1         Object is open for reading and/or writing.
+    OdDb::kForNotify    2         Object is open for notify.
+    </table>
+    
+  */
+  OdResult openObject (
+    OdDbObjectPtr& pObj,
+    OdDb::OpenMode openMode = OdDb::kForRead, 
+    bool openErasedOne = false) const;
+  /** \details
+    Opens the database object associated with this ObjectId object, in the specified mode.
+
+    \param openMode [in]  Mode in which to open the object.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+
+    \remarks
+    Returns a SmartPointer to the opened object if successful, otherwise a null SmartPointer.
+    
+    openMode must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    OdDb::kForRead      0         Object is open for reading.
+    OdDb::kForWrite     1         Object is open for reading and/or writing.
+    OdDb::kForNotify    2         Object is open for notify.
+    </table>
+    
+  */
+  OdDbObjectPtr openObject (
+    OdDb::OpenMode openMode = OdDb::kForRead, 
+    bool openErasedOne = false) const;
+  /** \details
+    Opens the database object associated with this ObjectId object, in the specified mode, or throws and exception if unsucessful.
+
+    \param openMode [in]  Mode in which to open the object.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+
+    \remarks
+    Returns a SmartPointer to the opened object.
+    
+    openMode must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    OdDb::kForRead      0         Object is open for reading.
+    OdDb::kForWrite     1         Object is open for reading and/or writing.
+    OdDb::kForNotify    2         Object is open for notify.
+    </table>
+
+    Throws:
+    
+    <table>
+    Exception           Cause
+    eNullObjectId       This ObjectId object is null.
+    ePermanentlyErased  Not opened and openErasedOne == 1
+    eWasErased          Not opened and openErasedOne == 0
+    </table>
+    
+  */
+    OdDbObjectPtr safeOpenObject (
+    OdDb::OpenMode openMode = OdDb::kForRead, 
+    bool openErasedOne = false) const;
+
+  /** \details
+    Binds the specified object.
+    
+    \param pObj [in]  Pointer to the object to bind.
+  */
+  void bindObject (
+    OdDbObject* pObj);
+
+protected:
+  friend class OdDbStub;
+  OdDbStub* m_Id;
+};
+
+/** \details
+    This class is a specialization of OdDbObjectId indicating a hard owner relationship.
+
+    \remarks
+    An OdDbHardOwnershipId reference to another object is used when the owner requires the owned
+    object, and the owned object cannot exist on its own.
+    
+    An OdDbHardOwnershipId reference to an object dictates that the owned object is written to 
+    .dwg and .dxf files whenever the owner object is written.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbHardOwnershipId : public OdDbObjectId
+{
+public:
+
+  OdDbHardOwnershipId () {}
+
+  OdDbHardOwnershipId (
+    const OdDbObjectId& objectId) : OdDbObjectId (objectId) {}
+
+  /*!DOM*/
+  OdDbHardOwnershipId (
+    OdDbStub* objectId) : OdDbObjectId (objectId) {}
+
+  OdDbHardOwnershipId& operator = (
+    const OdDbObjectId& objectId) { OdDbObjectId::operator= (objectId); return *this; }
+
+
+  /*!DOM*/
+  OdDbHardOwnershipId& operator = (
+    OdDbStub* objectId) { m_Id = objectId; return *this; }
+
+  bool operator != (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  /*!DOM*/
+  bool operator != (
+    OdDbStub* objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  bool operator == (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator== (objectId); }
+
+  /*!DOM*/
+  bool operator == (
+    OdDbStub* objectId) const { return OdDbObjectId::operator== (objectId); }
+};
+
+/** \details
+    This class is a specialization of OdDbObjectId indicating a soft owner relationship.
+
+    \remarks
+    An OdDbSoftOwnershipId reference to another object is used when the owner does not requires the owned
+    object, and the owned object cannot exist on its own.
+
+    An OdDbSoftOwnershipId reference to an object dictates that the owned object is written to 
+    .dwg and .dxf files whenever the owner object is written.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSoftOwnershipId : public OdDbObjectId
+{
+public:
+
+  OdDbSoftOwnershipId () {}
+
+  OdDbSoftOwnershipId (
+    const OdDbObjectId& objectId) : OdDbObjectId (objectId) {}
+
+  /*!DOM*/
+  OdDbSoftOwnershipId (
+    OdDbStub* objectId) : OdDbObjectId (objectId) {}
+
+  OdDbSoftOwnershipId& operator = (
+    const OdDbObjectId& objectId) { OdDbObjectId::operator= (objectId); return *this; }
+
+  /*!DOM*/
+  OdDbSoftOwnershipId& operator = (
+    OdDbStub* objectId) { m_Id = objectId; return *this; }
+    
+  bool operator != (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  /*!DOM*/
+  bool operator != (
+    OdDbStub* objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  bool operator == (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator== (objectId); }
+
+  /*!DOM*/
+  bool operator == (
+    OdDbStub* objectId) const { return OdDbObjectId::operator== (objectId); }
+
+};
+
+/** \details
+    This class is a specialization of OdDbObjectId indicating a hard pointer relationship.
+
+    \remarks
+    An OdDbHardPointerId reference to another object is used when one object depends on the existance of another, but
+    both are owned by other objects.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbHardPointerId : public OdDbObjectId
+{
+public:
+
+  OdDbHardPointerId () {}
+
+  OdDbHardPointerId (
+    const OdDbObjectId& objectId) : OdDbObjectId (objectId) {}
+
+  /*!DOM*/
+  OdDbHardPointerId (
+    OdDbStub* objectId) : OdDbObjectId (objectId) {}
+
+  OdDbHardPointerId& operator = (
+    const OdDbHardPointerId& objectId) { OdDbObjectId::operator= (objectId); return *this; }
+
+  OdDbHardPointerId& operator = (
+    const OdDbObjectId& objectId) { OdDbObjectId::operator= (objectId); return *this; }
+
+  /*!DOM*/
+  OdDbHardPointerId& operator = (
+    OdDbStub* objectId) { m_Id = objectId; return *this; }
+
+  bool operator != (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  /*!DOM*/
+  bool operator != (
+    OdDbStub* objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  bool operator == (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator== (objectId); }
+
+  /*!DOM*/
+  bool operator == (
+    OdDbStub* objectId) const { return OdDbObjectId::operator== (objectId); }
+};
+
+/** \details
+    This class is a specialization of OdDbObjectId indicating a soft pointer relationship.
+
+    \remarks
+    An OdDbSoftPointerId reference another object is used when neither object depends on the existance of the other.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSoftPointerId : public OdDbObjectId
+{
+public:
+  OdDbSoftPointerId () {}
+
+  OdDbSoftPointerId (
+    const OdDbObjectId& objectId) : OdDbObjectId (objectId) {}
+
+  /*!DOM*/
+  OdDbSoftPointerId (
+    OdDbStub* objectId) : OdDbObjectId (objectId) {}
+
+  OdDbSoftPointerId& operator = (
+    const OdDbSoftPointerId& objectId) { OdDbObjectId::operator= (objectId); return *this; }
+
+  OdDbSoftPointerId& operator = (
+    const OdDbObjectId& objectId) { OdDbObjectId::operator= (objectId); return *this; }
+
+  /*!DOM*/
+  OdDbSoftPointerId& operator = (
+    OdDbStub* objectId) { m_Id = (OdDbStub*)objectId; return *this; }
+
+  bool operator != (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  /*!DOM*/
+  bool operator != (
+    OdDbStub* objectId) const { return OdDbObjectId::operator!= (objectId); }
+
+  bool operator == (
+    const OdDbObjectId& objectId) const { return OdDbObjectId::operator== (objectId); }
+  /*!DOM*/
+  bool operator == (
+    OdDbStub* objectId) const { return OdDbObjectId::operator== (objectId); }
+
+};
+
+#include "TD_PackPop.h"
+
+#endif //_ODDBOBJECTID_INCLUDED_
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIdGraph.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIdGraph.h
new file mode 100755
index 0000000..a4b5dcf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIdGraph.h
@@ -0,0 +1,60 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBOBJECTIDGRAPH_H_INCLUDED_
+#define _ODDBOBJECTIDGRAPH_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdaDefs.h"
+#include "DbGraph.h"
+
+/** <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObjectIdGraphNode : public OdDbGraphNode
+{
+  OdDbObjectId m_Id;
+public:
+  ODRX_DECLARE_MEMBERS(OdDbObjectIdGraphNode);
+  OdDbObjectIdGraphNode() : OdDbGraphNode(){}
+  virtual ~OdDbObjectIdGraphNode();
+  OdDbObjectId id() const { return m_Id; }
+  void setId(OdDbObjectId id){ m_Id = id;}
+};
+
+/** <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObjectIdGraph : public OdDbGraph
+{
+public:
+  OdDbObjectIdGraph(){}
+  virtual ~OdDbObjectIdGraph();
+  OdDbObjectIdGraphNode* findNode(OdDbObjectId) const;
+  OdDbObjectIdGraphNode* idNode(int idx) const { return (OdDbObjectIdGraphNode*)node(idx); }
+};
+#include "TD_PackPop.h"
+
+#endif // _ODDBOBJECTIDGRAPH_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIterator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIterator.h
new file mode 100755
index 0000000..ac3a3e7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectIterator.h
@@ -0,0 +1,135 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBOBJECTITERATOR_INCLUDED_
+#define _ODDBOBJECTITERATOR_INCLUDED_
+
+#include "RxObject.h"
+#include "DbObjectId.h"
+
+class OdDbEntity;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbEntity object pointers.
+*/
+typedef OdSmartPtr<OdDbEntity> OdDbEntityPtr;
+
+/** \details
+    This class defines bidirectional Iterator objects that traverse entities contained in complex entities.
+    
+    
+    OdDbBlock Table Records in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    \remarks
+    Complex entities include the following:
+    
+    <table>
+    Entity               Iterated entities
+    OdDbBlockReference   All
+    OdDb2dPolyline       Vertex
+    OdDb3dPolyline       Vertex
+    OdDbPolyFaceMesh     Vertex
+    OdDbPolygonMesh      Vertex
+    </table>
+
+    This class cannot directly instantiated, but must be instantiated with the
+    iterator creation methods of the class to be iterated through.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObjectIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbObjectIterator);
+
+  OdDbObjectIterator() {}
+
+  /** \details
+    Sets this Iterator object to reference the entity that it would normally return first.
+     
+    \remarks
+    Allows multiple traversals of the iterator list.
+
+    \param atBeginning [in]  True to start at the beginning, false to start at the end. 
+    \param skipErased [in]  If and only if true, erased records are skipped.
+  */
+    virtual void start(
+    bool atBeginning = true, 
+    bool skipErased = true) = 0;
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() const = 0;
+
+  /** \details
+    Returns the Object ID of the entity currently referenced by this Iterator object.
+  */
+  virtual OdDbObjectId objectId() const = 0;
+
+  /** \details
+    Opens and returns the entity currently referenced by this Iterator object.
+
+    \param openMode [in]  Mode in which to open the entity.
+    \param openErasedEntity [in]  If and only if true, erased records will be opened or retrieved.
+
+    \remarks
+    Returns a SmartPointer to the opened entity if successful, otherwise a null SmartPointer.
+  */
+  virtual OdDbEntityPtr entity(
+    OdDb::OpenMode openMode = OdDb::kForRead, 
+    bool openErasedEntity = false) = 0;
+
+  /** \details
+    Steps this Iterator object.
+
+    \param forward [in]  True to step forward, false to step backward.
+    \param skipErased [in]  If and only if true, erased records are skipped.
+  */
+  virtual void step(
+    bool forward = true, 
+    bool skipErased = true) = 0;
+
+  /** \details
+    Positions this Iterator object at the specified record.
+    \param objectId [in]  Object ID of the entity.
+    \param pEntity [in] Pointer to the entity.
+  */
+    virtual bool seek(
+    OdDbObjectId objectId) = 0;
+  virtual bool seek(
+    const OdDbEntity* pEntity) = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbObjectIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbObjectIterator> OdDbObjectIteratorPtr;
+
+#endif //_ODDBOBJECTITERATOR_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectOverrule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectOverrule.h
new file mode 100755
index 0000000..1915f69
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectOverrule.h
@@ -0,0 +1,132 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBOBJECTOVERRULE_H_INCLUDED_
+#define _DBOBJECTOVERRULE_H_INCLUDED_
+
+#include "RxOverrule.h"
+#include "TD_PackPush.h"
+#include "DbObject.h"
+
+/** \details
+  This class overrules a subset of operations which an object of a database specifies. 
+  It is used as a base class for classes derived from OdDbObject to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+    
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbObjectOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbObjectOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbObjectOverrule();
+
+  /** \details
+    Overrules the OdDbObject::subOpen() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an object.
+    \param mode [in]  A mode to be opened in.
+  */
+  virtual OdResult open(OdDbObject* pSubject, OdDb::OpenMode mode);
+
+  /** \details
+    Overrules the OdDbObject::subClose() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an object.
+  */
+  virtual OdResult close(OdDbObject* pSubject);
+
+  /** \details
+    Overrules the OdDbObject::subErase() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an object.
+    \param erasing [in]  An erase status mode that was passed in the erase() method.
+  */
+  virtual OdResult erase(OdDbObject* pSubject, bool erasing);
+
+  /** \details
+    Overrules the OdDbObject::subDeepClone() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an object.
+    \param idMap [in]  A current object ID map.
+  */
+  virtual OdDbObjectPtr deepClone(const OdDbObject* pSubject, OdDbIdMapping& idMap, OdDbObject* pOwner, bool bPrimary = true);
+
+  /** \details
+    Overrules the OdDbObject::subWblockClone() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an object.
+    \param idMap [in]  A current object ID map.
+  */
+  virtual OdDbObjectPtr wblockClone(const OdDbObject* pSubject, OdDbIdMapping& idMap, OdDbObject* pOwner, bool bPrimary = true);
+};
+
+/** \details
+  This class overrules a subset of property linked operations which an object or entity specifies. 
+  It is used as a base class for classes derived from OdDbObject or OdDbEntity to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+    
+  Library:  TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPropertiesOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPropertiesOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbPropertiesOverrule();
+
+  /** \details
+    Overrules the OdDbObject::subGetClassID() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an object or entity.
+    \param pClsid [out]  A pointer to the corresponding COM wrapper class ID.
+  */
+  virtual OdResult getClassID(const OdDbObject* pSubject, void* pClsid);
+
+  /** \details
+    Overrules the OdDbEntity::subList() method and calls it in the default implementation.
+    This method returns eOk if successful.
+
+    \param pSubject [in]  A raw pointer to an entity.
+  */
+  virtual void list(const OdDbEntity* pSubject);
+};
+
+#include "TD_PackPop.h"
+
+#endif //_DBOBJECTOVERRULE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectReactor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectReactor.h
new file mode 100755
index 0000000..07b6d7f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbObjectReactor.h
@@ -0,0 +1,271 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _DB_OBJECT_REACTOR_INCLUDED_
+#define _DB_OBJECT_REACTOR_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "OdArrayPreDef.h"
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdDbObject events.
+
+    \note
+    The default implementations of all methods in this class do nothing but return.
+
+    \sa
+    TD_Db
+        
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbObjectReactor : public OdRxObject
+{
+protected:
+  OdDbObjectReactor() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdDbObjectReactor);
+  
+  /** \details
+    Not called.
+  */
+    virtual void cancelled(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever the notifying object has had its clone() member function called. 
+    
+    \param pObject [in]  Pointer to the notifying object.
+    \param pNewObject [in]  Pointer to the object resulting from the copy.
+
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void copied(
+    const OdDbObject* pObject, 
+    const OdDbObject* pNewObject);
+
+  /** \details
+    Notification function called whenever an object has been erased or unerased.
+
+    \param pObject [in]  Pointer to the object that was erased/unerased.
+    \param erasing [in]  True if and only if this object is being erased.
+    
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void erased(
+    const OdDbObject* pObject, 
+    bool erasing = true);
+
+  /** \details
+    Notification function called just before an object is deleted from memory. 
+    
+    \param pObject [in]  Pointer to the object that is being deleted.
+
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void goodbye(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever an object is opened for modify OdDb::kForWrite.
+
+    \param pObject [in]  Pointer to the object that is being opened.
+
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void openedForModify(
+    const OdDbObject* pObject);
+
+  /** \details
+      Notification function called whenever an object is opened OdDb::kForWrite, a function
+      has been called that could modify the contents of this object, and this object is now being
+      closed.
+
+      \param pObject [in]  Pointer to the object that is being closed after being modified.
+
+      \remarks
+      The default implementation of this function does nothing.  This function can be
+      overridden in custom classes.
+  */
+  virtual void modified(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever an object derived from OdDbEntity is modified.
+    
+    \param pObject [in]  Pointer to the modified object.
+    
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+    
+    This function is called whenever the following has occurred.
+    
+    1)  The calling object is opened OdDb::kForWrite.
+    
+    2)  One of its member functions either
+    
+        a Calls its assertWriteEnabled with recordModified == true.
+        
+        b Calls its recordGraphicsModified(true).
+    
+    3) The calling object is being closed.
+    
+    This function is called whenever the object as been modified. It therefore
+    indicates only that the graphics for it may have changed.
+            
+  */
+  virtual void modifiedGraphics(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever a method of the
+    specified subobject has called assertWriteEnabled()
+    
+    \param pObject [in]  Pointer to the notifying object.
+    \param pSubObj [in]  A pointer to the subobject owned by pObject.
+    
+    \remarks
+    Notification is made upon pObject->close() or pObject->cancel(). 
+ 
+    \note
+    This function is called only for the modification of the following:
+       
+    Vertices of OdDb2dPolylines, OdDb3dPolylines, OdDbPolygonMeshs, and OdDbPolyFaceMeshes
+    OdDbFaceRecords of OdDbPolyFaceMeshs 
+    OdDbAttributes owned by OdDbBlockReferences, classes derived from OdDbBlockReference, and OdDbMInsertBlocks
+  */
+  virtual void subObjModified(
+    const OdDbObject* pObject, 
+    const OdDbObject* pSubObj);
+  /** \details
+    Notification function called whenever the notifying
+    object is in the midst an Undo operation that
+    is undoing modifications.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    The notifying object is open OdDb::kForRead.
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void modifyUndone(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever the XData has been written
+    to the notifying object.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    Notification is made upon pObject->close() or pObject->cancel(). 
+
+    The notifying object is open OdDb::kForRead.
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void modifiedXData(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever the Undo process
+    processes the appending of the notifying object to the database.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    The notifying object is marked as erased. It is not removed the database, and can be unerased,
+    even 'before' it was created. 
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void unappended(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called whenever a Redo process
+    processes the reappending of the notifying object to the database.
+    
+    \param pObject [in]  Pointer to the notifying object.
+    
+    \remarks
+    
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void reappended(
+    const OdDbObject* pObject);
+
+  /** \details
+    Notification function called immediately before an object is closed.
+
+    \param objectId [in]  Object ID of the object that is being closed.
+
+    \remarks
+    The default implementation of this function does nothing.  This function can be
+    overridden in custom classes.
+  */
+  virtual void objectClosed(
+    const OdDbObjectId& objectId);
+
+  /** \details
+    Returns the first transient reactor of the specified class
+    that is attached to the specified object.
+
+    \param pObject [in]  Pointer to the notifying object.
+    \param pKeyClass [in]  Pointer to the class desciption.
+  */
+  static OdDbObjectReactor* findReactor(
+    const OdDbObject* pObject, 
+    const OdRxClass* pKeyClass);
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbObjectReactor object pointers.
+*/
+typedef OdSmartPtr<OdDbObjectReactor> OdDbObjectReactorPtr;
+/** \details
+    This template class is a specialization of the OdArray class for OdDbObjectReactor object SmartPointers.
+*/
+typedef OdArray<OdDbObjectReactorPtr> OdDbObjectReactorArray;
+
+#include "TD_PackPop.h"
+
+#endif // _DB_OBJECT_REACTOR_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOle2Frame.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOle2Frame.h
new file mode 100755
index 0000000..a2887c0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOle2Frame.h
@@ -0,0 +1,439 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_OLE2FRAME_
+#define _OD_DB_OLE2FRAME_
+
+#include "TD_PackPush.h"
+
+#include "DbOleFrame.h"
+#include "Ge/GePoint3d.h"
+
+class OdOleItemHandler;
+class COleClientItem;
+
+/** <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdRectangle3d
+{
+public:
+  OdGePoint3d upLeft;
+  OdGePoint3d upRight;
+  OdGePoint3d lowLeft;
+  OdGePoint3d lowRight;
+};
+
+/** \details
+    This class represents OLE2 entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbOle2Frame : public OdDbOleFrame
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbOle2Frame);
+
+  OdDbOle2Frame();
+  
+  OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  ODRX_SEALED_VIRTUAL bool subWorldDraw(
+    OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+
+  ODRX_SEALED_VIRTUAL void subViewportDraw(
+    OdGiViewportDraw* pVd) const ODRX_OVERRIDE;
+
+  ODRX_SEALED_VIRTUAL OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+  
+  /** \details
+    Returns the upper-left corner of the OLE object (DXF 10).
+    
+    \param point3d [out]  Receives the upper-left corner.
+  */
+  void getLocation(OdGePoint3d& 
+    point3d) const;
+
+  /** \details
+    Returns the corner points of the OLE object (DXF 10 & 11).
+    
+    \param rect3d [out]  Receives the corner points.
+  */
+  void position(
+    OdRectangle3d& rect3d) const;
+  
+  /** \details
+      Sets the corner points of the OLE object (DXF 10 & 11).
+    
+    \param rect3d [in]  Corner points.
+  */
+  void setPosition(
+    const OdRectangle3d& rect3d);
+
+  /** \details
+    Returns the user type-string for the OLE object (DXF 3).
+    
+    Examples:  
+    "Word Document"  
+    "Excel Chart"  
+  */
+  OdString getUserType() const;
+  
+  enum Type
+  {
+      kUnknown  = 0,
+      kLink     = 1,
+      kEmbedded = 2,
+      kStatic   = 3
+  };
+  /** \details
+    Returns the type of this OLE object (DXF 71).  
+    
+    \remarks
+    getType() returns one of the following:
+    
+    <table>
+    Name         Value
+    kUnknown     0
+    kLink        1
+    kEmbedded    2
+    kStatic      3
+    </table>
+  */
+  Type getType() const;
+
+  /** \details
+    Returns the filename and item to which this OLE object is linked.
+    
+    Example:
+    D:/My Documents/My Workbook.xls!Sheet2!R1C1:R10C10
+
+    \sa
+    getLinkPath()
+  */
+  OdString getLinkName() const;
+  
+  /** \details
+    Returns the filename to which this OLE object is linked.
+
+    Example:
+    D:/My Documents/My Workbook.xls
+             
+    \sa
+    getLinkName()
+  */
+  OdString getLinkPath() const;
+  
+  enum PlotQuality
+  {
+      kMonochrome   = 0,  // e.g., spreadsheet
+      kLowGraphics  = 1,  // e.g., color text & pie charts
+      kHighGraphics = 2,  // e.g., photograph 
+      kAutomatic    = 3   // e.g., Automatic
+  };
+
+  /** \details
+    Returns the output quality for this OLE object (DXF 73).
+    
+    \remarks
+    Controls the color depth and resolution when plotted.
+    
+    outputQuality() returns one of the following:
+
+    <table>
+    Name               Value    Example
+    kMonochrome        0        Spreadsheet
+    kLowGraphics       1        Color text & pie charts
+    kHighGraphics      2        Photograph 
+    kAutomatic         3        Automatic
+    </table>
+  */
+  PlotQuality outputQuality() const;
+
+  /** \details
+    Sets the output quality for this OLE object (DXF 73).
+    
+    \param quality [in]  Output quality.
+      
+    \remarks
+    Controls the color depth and resolution when plotted.
+
+    quality must be one of the following:
+    
+    <table>
+    Name               Value    Example
+    kMonochrome        0        Spreadsheet
+    kLowGraphics       1        Color text & pie charts
+    kHighGraphics      2        Photograph 
+    kAutomatic         3        Automatic
+    </table>
+  */
+  void setOutputQuality(
+    PlotQuality  quality);
+
+  /** \details
+    Returns the compound document data size for this OLE object.
+  */
+  OdUInt32 getCompoundDocumentDataSize() const;
+
+  /** \details
+    Writes the compound document data to the specified stream.
+    
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+  */
+  void getCompoundDocument(
+    OdStreamBuf& streamBuf) const;
+
+  /** \details
+    Reads the compound document data from the specified stream.
+    
+    \param nSize [in]  Size of compound data.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  void setCompoundDocument(
+    OdUInt32 nSize, 
+    OdStreamBuf& streamBuf);
+
+  OdResult subGetClassID(void* pClsid) const;
+  
+  /** \details
+    Returns the Item Handler for this OLE object.
+  */
+  const OdOleItemHandler* itemHandler() const;
+
+  
+  /** \details
+    Creates an Item Handler for this OLE object.
+    
+    \remarks
+    Returns the Item Handler.
+  */
+  OdOleItemHandler* getItemHandler();
+
+  void subClose();
+
+  /** \details
+    Returns unknown field.
+
+    \remarks
+    Was not accessible in DD1.12 (OdDbOle2FrameImpl::m_UnknownFromDWG)
+
+    \note
+    Currently Teigha does not handle this field.
+    This method will be removed or renamed in future releases.
+  */
+  OdInt32 unhandled_unknown0() const;
+
+  /** \details
+    Returns unknown field.
+
+    \remarks
+    Still unknown. OdDbOle2Frame::getUnknown1() in DD1.12
+
+    \note
+    Currently Teigha does not handle this field.
+    This method will be removed or renamed in future releases.
+  */
+  OdUInt8 unhandled_unknown1() const;
+
+  /** \details
+    Returns unknown field.
+
+    \remarks
+    Still unknown. OdDbOle2Frame::getUnknown2() in DD1.12
+
+    \note
+    Currently Teigha does not handle this field.
+    This method will be removed or renamed in future releases.
+  */
+  OdUInt8 unhandled_unknown2() const;
+
+  /** \details
+    Sets unknown fields.
+
+    \note
+    Currently Teigha does not handle these fields.
+    This method will be removed or renamed in future releases.
+  */
+  void unhandled_setUnknown(OdInt32 unk0 = 0, OdUInt8 unk1 = 0x80, OdUInt8 unk2 = 0x55);
+
+  /** \details
+
+    \remarks
+    OdDbOle2Frame::getPixelWidth() in DD1.12
+
+    \note
+    Currently Teigha does not handle this field.
+    This method will be removed or renamed in future releases.
+  */
+  OdUInt16 unhandled_himetricWidth() const;
+
+  /** \details
+
+    \remarks
+    OdDbOle2Frame::getPixelHeight() in DD1.12
+
+    \note
+    Currently Teigha does not handle this field.
+    This method will be removed or renamed in future releases.
+  */
+  OdUInt16 unhandled_himetricHeight() const;
+
+  /** \details
+    Sets unhandled fields.
+
+    \note
+    Currently Teigha does not handle these fields.
+    This method will be removed or renamed in future releases.
+  */
+  void unhandled_setHimetricSize(OdUInt16 w, OdUInt16 h);
+
+  // New properties
+
+  /** \details
+    Resets current OLE XData.
+
+    \param bInitSize [in]  Init actual OLE object size using current WCS size.
+  */
+  void reset(bool bInitSize = false);
+
+  /** \details
+    Returns automatically selectable by application plot quality.
+  */
+  bool autoOutputQuality() const;
+
+  /** \details
+    Sets plot quality to automatically selectable by application.
+
+    \param bFlag [in]  New value.
+  */
+  void setAutoOutputQuality(bool bFlag);
+
+  /** \details
+    Returns rotation angle for this OLE object.
+  */
+  double rotation() const;
+
+  /** \details
+    Sets rotation angle for this OLE object.
+
+    \param fAngle [in]  New value.
+  */
+  void setRotation(double fAngle);
+
+  /** \details
+    Returns actual width of this OLE object in WCS.
+  */
+  double wcsWidth() const;
+
+  /** \details
+    Sets actual width of this OLE object in WCS.
+
+    \param fWidth [in]  New OLE object WCS width.
+  */
+  void setWcsWidth(double fWidth);
+
+  /** \details
+    Returns actual height of this OLE object in WCS.
+  */
+  double wcsHeight() const;
+
+  /** \details
+    Sets actual height of this OLE object in WCS.
+
+    \param fHeight [in]  New OLE object WCS height.
+  */
+  void setWcsHeight(double fHeight);
+
+  /** \details
+    Returns percentage of the current OLE object width scale to original object width scale.
+  */
+  double scaleWidth() const;
+
+  /** \details
+    Sets new OLE object width scale relative to original object width.
+
+    \param fScale [in]  New width scale in percents.
+  */
+  void setScaleWidth(double fScale);
+
+  /** \details
+    Returns percentage of the current OLE object height scale to original object height scale.
+  */
+  double scaleHeight() const;
+
+  /** \details
+    Sets new OLE object height scale relative to original object height.
+
+    \param fScale [in]  New height scale in percents.
+  */
+  void setScaleHeight(double fScale);
+
+  /** \details
+    Returns lock aspect property.
+  */
+  bool lockAspect() const;
+
+  /** \details
+    Sets lock aspect property.
+
+    \param bFlag [in]  New value.
+  */
+  void setLockAspect(bool bLockAspect);
+
+  /** \details
+    Returns pointer to MFC COleClientItem object.
+
+    \note
+    Returns non-Null pointer only if OleItemHandler implementation is MFC-based and supports this method
+  */
+  COleClientItem * getOleClientItem() const;
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+  void subSetDatabaseDefaults(OdDbDatabase *pDb, bool);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbOld2Frame object pointers.
+*/
+typedef OdSmartPtr<OdDbOle2Frame> OdDbOle2FramePtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOleFrame.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOleFrame.h
new file mode 100755
index 0000000..25281cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOleFrame.h
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBOLE_H
+#define OD_DBOLE_H
+
+#include "TD_PackPush.h"
+
+#include "DbFrame.h"
+
+/** \details
+    This class is the abstract base class for OdDbOle2Frame graphical entities 
+    contained in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbOleFrame : public OdDbFrame
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbOleFrame);
+
+  OdDbOleFrame();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbOleFrame object pointers.
+*/
+typedef OdSmartPtr<OdDbOleFrame> OdDbOleFramePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBOLE_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOrdinateDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOrdinateDimension.h
new file mode 100755
index 0000000..bb64abf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbOrdinateDimension.h
@@ -0,0 +1,168 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_ORDINATE_DIMENSION_
+#define _OD_DB_ORDINATE_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents Ordinate Dimension entities in an OdDbDatabase instance.
+
+    \remarks
+    An Ordinate Dimension entity dimensions the horizontal or vertical distance between 
+    between the specified origin and the specified defining point.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbOrdinateDimension : public OdDbDimension
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbOrdinateDimension);
+
+  OdDbOrdinateDimension();
+  
+  /* OdDbOrdinateDimension(
+       bool useXAxis,
+       const OdGePoint3d& definingPoint,
+       const OdGePoint3d& leaderEndPoint,
+       const OdChar* dimText = 0,
+       OdDbObjectId dimStyle = OdDbObjectId::kNull);
+  */
+
+  /** \details
+    Returns true if and only if this Dimension entity measures the OCS X-axis distance
+    between the origin and the defining point. 
+    (DXF 70, bit 0x40 set).
+  */
+  bool isUsingXAxis() const;
+
+  /** \details
+    Returns true if and only if this Dimension entity measures the OCS Y-axis distance
+    between the origin and the defining point. 
+    (DXF 70, bit 0x40 cleared).
+  */
+  bool isUsingYAxis() const;
+
+  /** \details
+    Sets this Dimension entity to measure the OCS X-axis distance
+    between the origin and the defining point. 
+    (DXF 70, bit 0x40 set).
+  */
+  void useXAxis();
+
+  /** \details
+    Sets this Dimension entity to measure the OCS Y-axis distance
+    between the origin and the defining point. 
+    (DXF 70, bit 0x40 cleared).
+  */
+  void useYAxis();
+  
+  /** \details
+    Returns the WCS origin and primary definition point of this Dimension entity (DXF 10).
+    
+    \remarks
+    This Dimension entity measures the OCS X-axis or OCS Y-axis distance from the origin to the defining point.    
+  */
+  OdGePoint3d origin() const;
+
+  /** \details
+    Sets the WCS origin and primary definition point of this Dimension entity (DXF 10).
+
+    \param origin [in]  Origin.
+  
+    \remarks
+    This Dimension entity measures the OCS X-axis or OCS Y-axis distance from the origin to the defining point.    
+  */
+  void setOrigin(
+    const OdGePoint3d& origin);
+  
+  /** \details
+    Returns the WCS defining point for this Dimension entity (DXF 13).
+    \remarks
+    This Dimension entity measures the OCS X-axis or OCS Y-axis distance from the origin to the defining point.    
+  */
+  OdGePoint3d definingPoint() const;
+
+  /** \details
+    Sets the WCS defining point for this Dimension entity (DXF 13).
+    
+    \param definingPoint [in]  Defining point.
+    
+    \remarks
+    This Dimension entity measures the OCS X-axis or OCS Y-axis distance from the origin to the defining point.    
+  */
+  void setDefiningPoint(
+    const OdGePoint3d& definingPoint);
+  
+  /** \details
+    Returns the WCS leader end point for this Dimension entity (DXF 14).
+  */
+  OdGePoint3d leaderEndPoint() const;
+
+  /** \details
+    Sets the WCS leader end point for this Dimension entity (DXF 14).
+   
+    \param leaderEndPoint [in]  Leader end point. 
+  */
+  void setLeaderEndPoint(
+    const OdGePoint3d& leaderEndPoint);
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbOrdinateDimension object pointers.
+*/
+typedef OdSmartPtr<OdDbOrdinateDimension> OdDbOrdinateDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPageController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPageController.h
new file mode 100755
index 0000000..0a27052
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPageController.h
@@ -0,0 +1,184 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _ODDBPAGECONTROLLER_INCLUDED_
+#define _ODDBPAGECONTROLLER_INCLUDED_
+
+#include "RxObject.h"
+
+class OdDbDatabase;
+class OdDbObjectId;
+class OdStreamBuf;
+typedef OdSmartPtr<OdStreamBuf> OdStreamBufPtr;
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  /** \details
+      Flags that can be combined together (bit-wise) to describe a desired paging
+      behavior.
+
+      \sa
+      * OdDbPageController
+      * odDbPageObjects
+      * Paging Support
+  */
+  enum PagingType
+  {
+    /** \remarks
+        Enables unloading of objects in a partially opened OdDbDatabase instance.  
+        
+        Closed objects will be unloaded from memory 
+        during the next call to odDbPageObjects.  This behavior can be useful in environments
+        with limited heap space (such as Windows CE).
+    */
+    kUnload  = 0x01,  
+    /** \remarks
+        Enables paging of objects in an OdDbDatabase instance.
+
+        Closed Objects will be paged out during the next call to OdDbPageObjects.  
+        Paging will be implemented via a client-supplied OdDbPageController instance.
+    */
+    kPage    = 0x02   
+  };
+}
+
+/** \details
+    This class controls the paging support for an OdDbDatabase instance.
+
+    \sa
+    * Paging Support
+    * odDbPageObjects
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPageController : public OdRxObject
+{
+public:
+  typedef OdInt64 Key;
+
+  /** \details
+    Returns the paging type for this PageController object.
+      
+    \remarks
+    pagingType() returns a combination of zero or more of the following:
+    
+    <table>
+    Name            Value   Description
+    OdDb::kUnload   0x01    Enable unloading for objects in a partially opened OdDbDatabase instance.  
+    OdDb::kPage     0x02    Enable paging for objects in an OdDbDatabase instance.
+    </table>
+
+    \sa 
+    Paging Support
+  */
+  virtual int pagingType() const = 0;
+
+  /** \details
+    Pages in the specified data.
+    
+    \remarks
+    Returns a SmartPointer to an OdDbStreamBuf object containing the specified paged data from a client-supplied data source.
+      
+    \param key [in]  Paged data key, as returned by write().
+  */
+  virtual OdStreamBufPtr read(Key key) = 0;
+
+  /** \details
+    Pages out data as required to a client-supplied data source.
+
+    \param key [out]  Paged data key, as used by read().
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be written.
+
+    \remarks
+    Returns true if and only if the PageController implementation has successfully paged the data.
+
+    \note
+    Implementations of this function are expected to write the entire contents of pStreamBuf
+    to an external data source, and to set assign a unique value to the key argument that 
+    identifies this chunk of paged data.  This key value will be used in a subsequent calls
+    to read() to retrieve this specific paged data.
+  */
+  virtual bool write(Key& key, OdStreamBuf* pStreamBuf) = 0;
+
+  /** \details
+    Sets the OdDbDatabase instance served by this controller.
+
+    \param pDb [in]  Pointer to the database.
+    \remarks
+    The method is called by Teigha during initialization of database paging.
+  */
+  virtual void setDatabase(OdDbDatabase* pDb) = 0;
+
+  /** \details
+      Returns the OdDbDatabase instance served by this controller.
+  */
+  virtual OdDbDatabase* database() = 0;
+
+  /** \details
+    The method is called during unloading/paging of an object,
+    before anything else is done.
+
+    \param objectId [in]  Object ID.
+    \remarks
+    subPage() returns one of the of the following:
+    
+    <table>
+    Name              Description
+    eOk               Continue paging.
+    eSkipObjPaging    Skip paging of the specified object.
+    eStopPaging       Stop paging.
+    </table>
+      
+    \note
+    The default implementation does nothing but return eOk. This function can be
+    overridden in custom classes.
+  */
+  virtual OdResult subPage(const OdDbObjectId& objectId);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPageController object pointers.
+*/
+typedef OdSmartPtr<OdDbPageController> OdDbPageControllerPtr;
+
+/** \details
+    Pages the database objects for the specified OdDbDatabase instance that have been marked for 
+    paging since the last call to this function.  
+    
+    \remarks
+    See Paging Support for details.
+    
+    \param pDb [in]  Pointer to the database.
+*/
+TOOLKIT_EXPORT void odDbPageObjects(OdDbDatabase* pDb);
+
+#endif // _ODDBPAGECONTROLLER_INCLUDED_
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPersSubentManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPersSubentManager.h
new file mode 100755
index 0000000..438ef5f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPersSubentManager.h
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBPERSSUBENTMANAGER_INCLUDED_
+#define _ODDBPERSSUBENTMANAGER_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "DbObject.h"
+#include "ShHistory/DbManagerSubentData.h"
+#include "ShHistory/TD_3DSolidHistoryDef.h"
+
+/** \details
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbPersSubentManager : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPersSubentManager);
+
+  OdDbPersSubentManager();
+  virtual ~OdDbPersSubentManager();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  //test method
+  OdResult parseSubentData(SubentDataArray& pData);
+  //test method
+  OdUInt32 lastStepId();
+
+  static OdDbObjectId getInstanceFromDatabase(OdDbDatabase const * pDatabase);
+  static OdDbObjectId createIfItDoesNotExist(OdDbDatabase* pDatabase);
+};
+
+typedef OdSmartPtr<OdDbPersSubentManager> OdDbPersSubentManagerPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaceHolder.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaceHolder.h
new file mode 100755
index 0000000..078aa99
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaceHolder.h
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBPLACEHOLDER_H
+#define OD_DBPLACEHOLDER_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/** \details
+  This class implements Placeholder objects in an OdDbDatabase instance.
+  
+  \sa
+  TD_Db
+  
+  \remarks
+  Placeholder objects are designed to be added to dictionaries,
+  providing Object IDs that can be linked to dictionary keys. They are used in the
+  Plot Style Name dictionary.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPlaceHolder : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPlaceHolder);
+
+  OdDbPlaceHolder();
+  
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /*
+  virtual void subWblockClone(OdDbIdMapping& idMap) const;
+  */
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPlaceHolder object pointers.
+*/
+typedef OdSmartPtr<OdDbPlaceHolder> OdDbPlaceHolderPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaneSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaneSurface.h
new file mode 100755
index 0000000..aea4dd9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlaneSurface.h
@@ -0,0 +1,105 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbPlaneSurface_h_Included_
+#define _DbPlaneSurface_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbSurface.h"
+
+class OdDbRegion;
+
+/** \details
+    This class implements a three-dimensional planar surface entity.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPlaneSurface : public OdDbSurface
+{
+public:
+  /** \details
+  Creates a plane surface.
+  */
+  OdDbPlaneSurface ();
+  ODDB_DECLARE_MEMBERS(OdDbPlaneSurface);
+
+  /** \details
+  Creates the plane surface from a specified region.
+  
+  \param pRegion [in]  A pointer to a specified region that the plane surface must be created from.
+  
+  \returns Returns eOk if the plane surface was successfully created or an appropriate error otherwise.
+  */
+  virtual OdResult createFromRegion( OdDbRegion *pRegion );
+
+  // OdDbObject methods
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isDependent() const { return false; }
+
+  virtual OdResult subExplode(OdRxObjectPtrArray& entitySet) const;
+
+  /** \details
+  Returns the plane that contains this entity.
+
+  \param plane      [out] Receives the plane that contains this entity.
+  \param planarity  [out] Receives the planarity of this entity.
+
+  \returns Returns eOk if successful or an appropriate error code if not.
+
+  \remarks 
+  Output parameters planarity and plane are returned as described below:
+
+  <table>
+  planarity Value Description plane
+  kPlanar   1     Planar      Entity plane
+  </table>
+  */
+  virtual OdResult getPlane(OdGePlane& plane, OdDb::Planarity& planarity) const;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbPlaneSurface object pointers.
+*/  
+typedef OdSmartPtr<OdDbPlaneSurface> OdDbPlaneSurfacePtr;
+
+#include "TD_PackPop.h"
+#endif //_DbPlaneSurface_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettings.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettings.h
new file mode 100755
index 0000000..6708252
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettings.h
@@ -0,0 +1,718 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBPLOTSETTINGS_H
+#define OD_DBPLOTSETTINGS_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "Ge/GePoint2d.h"
+
+/** \details
+    This class represents PlotSettings objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPlotSettings : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPlotSettings);
+
+  OdDbPlotSettings();
+
+  enum PlotPaperUnits
+  {
+    kInches         = 0,   // Inches
+    kMillimeters    = 1,   // Millimeters
+    kPixels         = 2    // Pixels
+  };
+
+  enum PlotRotation
+  {
+    k0degrees       = 0,   // No rotation
+    k90degrees      = 1,   // 90� CCW
+    k180degrees     = 2,   // Inverted
+    k270degrees     = 3    // 90� CW
+  };
+
+  enum PlotType
+  {
+    kDisplay        = 0,   // Display
+    kExtents        = 1,   // Extents
+    kLimits         = 2,   // Limits
+    kView           = 3,   // View
+    kWindow         = 4,   // Window
+    kLayout         = 5    // Layout
+  };
+
+  enum StdScaleType
+  {
+    kScaleToFit     = 0,   // Scaled to Fit
+    k1_128in_1ft    = 1,   // 1/128" = 1'
+    k1_64in_1ft     = 2,   // 1/64" = 1'
+    k1_32in_1ft     = 3,   // 1/32" = 1'
+    k1_16in_1ft     = 4,   // 1/16" = 1'
+    k3_32in_1ft     = 5,   // 3/32" = 1'
+    k1_8in_1ft      = 6,   // 1/8" = 1'
+    k3_16in_1ft     = 7,   // 3/16" = 1'
+    k1_4in_1ft      = 8,   // 1/4" = 1'
+    k3_8in_1ft      = 9,   // 3/8" = 1'
+    k1_2in_1ft      = 10,  // 1/2" = 1'
+    k3_4in_1ft      = 11,  // 3/4" = 1'
+    k1in_1ft        = 12,  // 1" = 1'
+    k3in_1ft        = 13,  // 3" = 1'
+    k6in_1ft        = 14,  // 6" = 1'
+    k1ft_1ft        = 15,  // 1' = 1'
+    k1_1            = 16,  // 1:1
+    k1_2            = 17,  // 1:2
+    k1_4            = 18,  // 1:4
+    k1_5            = 19,  // 1:5
+    k1_8            = 20,  // 1:8
+    k1_10           = 21,  // 1:10
+    k1_16           = 22,  // 1:16
+    k1_20           = 23,  // 1:20
+    k1_30           = 24,  // 1:30
+    k1_40           = 25,  // 1:40
+    k1_50           = 26,  // 1:50
+    k1_100          = 27,  // 1:100
+    k2_1            = 28,  // 2:1
+    k4_1            = 29,  // 4:1
+    k8_1            = 30,  // 8:1
+    k10_1           = 31,  // 10:1
+    k100_1          = 32,  // 100:1
+    k1000_1         = 33,  // 1000:1
+    k1and1_2in_1ft  = 34  // 1.5"= 1' 
+  };
+
+  enum ShadePlotType 
+  {
+    kAsDisplayed    = 0, // As displayed
+    kWireframe      = 1, // Wireframe
+    kHidden         = 2, // Hidden lines removed
+    kRendered       = 3, // Rendered
+    kVisualStyle    = 4, // Visual style
+    kRenderPreset   = 5  // Render preset
+  };
+
+  enum ShadePlotResLevel 
+  {
+    kDraft          = 0, // Draft
+    kPreview        = 1, // Preview
+    kNormal         = 2, // Normal
+    kPresentation   = 3, // Presentation
+    kMaximum        = 4, // Maximum
+    kCustom         = 5  // Custom
+  };
+
+  /** \details
+    Adds this PlotSettings object to the PlotSettings dictionary in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+  */
+  void addToPlotSettingsDict(
+    OdDbDatabase *pDb);
+
+  /** \details
+    Returns the name of this PlotSettings object (DXF 1).
+  */
+  OdString getPlotSettingsName() const;
+
+  /** \details
+    Sets the name of this PlotSettings object (DXF 1).
+    
+    \param plotSettingsName [in]  PlotSettings name.  
+  */
+  void setPlotSettingsName(
+    const OdString& plotSettingsName);
+
+  /** \details
+    Returns the name of the system printer or plot configuration file for this PlotSettings object (DXF 2).
+  */
+  OdString getPlotCfgName() const;
+
+  /** \details
+    Returns the margins of the paper for this PlotSettings object.
+    
+    \param leftMargin [out]  Receives the left margin. 
+    \param bottomMargin[out] Receives the bottom margin.
+    \param rightMargin [out] Receives the right margin. 
+    \param topMargin [out] Receives the top margin.
+    
+    \remarks
+    Margins are measured from their respective edges to the plot area and are independent of plot rotation.
+    All distances are returned in millimeters, regardless of the drawing units. 
+  */
+  void getPlotPaperMargins(
+    double& leftMargin, 
+    double& bottomMargin,
+    double& rightMargin, 
+    double& topMargin) const;
+
+  /** \details
+    Returns the size of the paper for this PlotSettings object (DXF 44, 45).
+
+    \remarks
+    Paper size is the physical paper size and includes margins.
+    All distances are returned in millimeters, regardless of the drawing units. 
+  */
+  void getPlotPaperSize(
+    double& paperWidth, 
+    double& paperHeight) const;
+
+  /** \details
+    Returns the canonical media name for the paper id of this PlotSettings object (DXF 4).
+    
+    \sa
+    OdDbPlotSettingsValidator::getLocaleMediaName()
+  */
+  OdString getCanonicalMediaName() const;
+
+  /** \details
+    Returns the plot origin offset for this PlotSettings object (DXF 46, 47).
+
+    \param xCoordinate [out]  Receives the X-coordinate of the origin offset.
+    \param yCoordinate [out]  Receives the Y-coordinate of the origin offset.
+    
+    \remarks
+    The plot origin offset is measured with respect to the plot margin.
+    All distances are returned in millimeters, regardless of the drawing units. 
+  */
+  void getPlotOrigin(
+    double& xCoordinate, 
+    double& yCoordinate) const;
+
+  /** \details
+    Returns the plot paper units used for margins, offsets, paper size, and drawing units of this PlotSettings object (DXF 72).
+
+    \remarks
+    plotPaperUnits() returns one of the following:
+    
+    <table>
+    Name            Value   Description
+    kInches         0       Inches
+    kMillimeters    1       Millimeters
+    kPixels         2       Pixels
+    </table>
+  */
+  OdDbPlotSettings::PlotPaperUnits plotPaperUnits() const;
+
+  /** \details
+    Returns whether viewport borders are plotted for this PlotSettings object (DXF 70, bit 0x01).
+    
+    \remarks
+    Returns true if and only if viewport borders are to be plotted.
+  */
+  bool plotViewportBorders() const;
+
+  /** \details
+    Controls whether viewport borders are plotted for this PlotSettings object (DXF 70, bit 0x01).
+
+    \param plotViewportBorders [in]  True if and only if viewport borders are to be plotted.
+  */
+  void setPlotViewportBorders(
+    bool plotViewportBorders);
+
+  /** \details
+    Returns whether plotstyles are applied for this PlotSettings object (DXF 70, bit 0x20).
+      
+    \remarks
+    Returns true if and only if plot styles are to be plotted.
+  */
+  bool plotPlotStyles() const;
+
+  /** \details
+    Controls whether plotstyles are applied for this PlotSettings object (DXF 70, bit 0x20).
+    
+    \param plotPlotStyles [in]  True if and only if plot styles are to be plotted.
+  */
+  void setPlotPlotStyles(
+    bool plotPlotStyles);
+
+  /** \details
+    Returns whether plotstyles display for this PlotSettings object during layout mode (DXF 70, bit 0x02).
+  */
+  bool showPlotStyles() const;
+
+  /** \details
+    Controls whether plotstyles display for this PlotSettings object during layout mode (DXF 70, bit 0x02).
+
+    \param showPlotStyles [in]  True if and only if plot styles are to be shown.
+  */
+  void setShowPlotStyles(
+    bool showPlotStyles);
+
+  /** \details
+    Returns the plot rotation for this PlotSettings object (DXF 73).
+    
+    \remarks
+    plotRotation() returns one of the following:
+    
+    <table>
+    Name         Value    Description
+    k0degrees    0        No rotation
+    k90degrees   1        90� CCW
+    k180degrees  2        Inverted�
+    k270degrees  3        90� CW
+    </table>
+  */
+  OdDbPlotSettings::PlotRotation plotRotation() const;
+
+  /** \details
+    Returns true if an only if the plot is to be centered for this PlotSettings object (DXF 70, bit 0x04).
+  */
+  bool plotCentered() const;
+
+  /** \details
+    Returns true if and only if the hidden line removal algorithm 
+    is to be applied to PaperSpace entities for this PlotSettings object (DXF 70, bit 0x08). 
+  */
+  bool plotHidden() const;
+
+  /** \details
+    Controls the application of the hidden line removal algorithm 
+    to PaperSpace entities for this PlotSettings object (DXF 70, bit 0x08). 
+
+    \param plotHidden [in]  True if and only hidden lines are to be removed.
+  */
+  void setPlotHidden(bool plotHidden);
+
+  /** \details
+    Returns the plot type for this PlotSettings Object (DXF 74).
+
+    \remarks
+    plotType() returns one of the following:
+    
+    <table>
+    Name        Value   Description
+    kDisplay    0       Display
+    kExtents    1       Extents
+    kLimits     2       Limits
+    kView       3       View
+    kWindow     4       Window
+    kLayout     5       Layout
+    </table>
+  */
+  OdDbPlotSettings::PlotType plotType() const;
+
+  /** \details
+    Returns the corners of the plot window area for this PlotSettings object (DXF 48, 49, 140, 141).
+
+    \param xMin [in]  Receives the X-coordinate of the lower-left corner.      
+    \param yMin [in]  Receives the Y-coordinate of the lower-left corner.      
+    \param xMax [in]  Receives the X-coordinate of the upper-right corner.      
+    \param yMax [in]  Receives the Y-coordinate of the upper-right corner.      
+    
+    \remarks
+    The corners define the area to be plotted if and only if plotType == kWindow.
+  */
+  void getPlotWindowArea(
+    double& xMin, 
+    double& yMin,
+    double& xMax, 
+    double& yMax) const;
+
+  /** \details
+    Returns the plot view name for this PlotSettings object (DXF 6).
+
+    \remarks
+    This string specifies the named view to be plotted if and only if plotType == kView. 
+  */
+  OdString getPlotViewName() const;
+
+  /** \details
+    Returns true if and only if this PlotSettings object uses a standard scale (DXF 70, bit 0x10).
+  */
+  bool useStandardScale() const;
+
+  /** \details
+    Returns the custom print scale for this PlotSettings object (DXF 142, 143).
+    
+    \param numerator [in]  Receives PaperSpace units.
+    \param denominator [in]  Receives media units.
+    
+    \remarks
+    The custom print scale always reflects the scale that this PlotSettings object will use to plot.
+  */
+  void getCustomPrintScale(
+    double& numerator, 
+    double& denominator) const;
+
+  /** \details
+    Returns the current style sheet (DXF 7).
+  */
+  OdString getCurrentStyleSheet() const;
+
+  /** \details
+    Returns the standard scale type for this PlotSettings object (DXF 75).
+    
+    \remarks
+    stdScaleType() returns one of the of the following
+    
+    <table>
+    Name            Value   Scale
+    kScaleToFit     0       Scaled to Fit
+    k1_128in_1ft    1       1/128=1'
+    k1_64in_1ft     2       1/64=1'
+    k1_32in_1ft     3       1/32=1'
+    k1_16in_1ft     4       1/16=1'
+    k3_32in_1ft     5       3/32=1'
+    k1_8in_1ft      6       1/8=1'
+    k3_16in_1ft     7       3/16=1'
+    k1_4in_1ft      8       1/4=1'
+    k3_8in_1ft      9       3/8=1'
+    k1_2in_1ft      10      1/2=1'
+    k3_4in_1ft      11      3/4=1'
+    k1in_1ft        12      1=1'
+    k3in_1ft        13      3=1'
+    k6in_1ft        14      6=1'
+    k1ft_1ft        15      1'=1'
+    k1_1            16      1:1
+    k1_2            17      1:2
+    k1_4            18      1:4
+    k1_5            19      1:5
+    k1_8            20      1:8
+    k1_10           21      1:10
+    k1_16           22      1:16
+    k1_20           23      1:20
+    k1_30           24      1:30
+    k1_40           25      1:40
+    k1_50           26      1:50
+    k1_100          27      1:100
+    k2_1            28      2:1
+    k4_1            29      4:1
+    k8_1            30      8:1
+    k10_1           31      10:1
+    k100_1          32      100:1
+    k1000_1         33      1000:1
+    k1and1_2in_1ft  34      1.5"=1'
+    </table>
+  */
+  OdDbPlotSettings::StdScaleType stdScaleType() const;
+
+
+  /** \details
+    Returns the standard scale, as a floating point value, for this PlotSettings object (DXF 147).
+    
+    \param standardScale [out]  Receives the standard scale.
+  */
+  void getStdScale(
+    double& standardScale) const;
+
+  /** \details
+    Returns true if an only if lineweights are scaled for this PlotSettings object (DXF 70, bit 0x40).
+  */
+  bool scaleLineweights() const;
+
+  /** \details
+    Controls the scaling of lineweights for this PlotSettings object (DXF 70, bit 0x40).
+
+    \param scaleLineweights [in]  True if and only if lineweights are to be scaled.
+  */
+  void setScaleLineweights(
+    bool scaleLineweights);
+
+  /** \details
+    Returns true if an only if lineweights are printed for this PlotSettings object (DXF 70, bit 0x80).
+  */
+  bool printLineweights() const;
+
+  /** \details
+    Controls the printing of lineweights for this PlotSettings object (DXF 70, bit 0x80).
+
+    \param printLineweights [in]  True if and only if lineweights are to be printed.
+  */
+  void setPrintLineweights(bool printLineweights);
+
+  /** \details
+      TBC.  
+  bool textFill() const;
+
+  */
+
+  /** \details
+      TBC.
+  void setTextFill(bool textFill);
+  */
+
+  /** \details
+      TBC.
+  int getTextQuality() const;
+  */
+
+  /** \details
+      TBC.
+  void setTextQuality(int quality);
+  */
+
+  /** \details
+    Returns true if and only if viewports are to be plotted before other objects in PaperSpace
+    for this PlotSettings object (DXF 70, bit 0x200).
+  */
+  bool drawViewportsFirst() const;
+
+  /** \details
+    Controls the plotting of viewports before other objects in PaperSpace
+    for this PlotSettings object (DXF 70, bit 0x200).
+    
+    \param drawViewportsFirst [in]  True if and only if viewports are to be plotted first.
+  */
+  void setDrawViewportsFirst(
+    bool drawViewportsFirst);
+
+  /** \details
+    Returns true if and only if this PlotSettings object is of ModelSpace type (DXF 70, bit 0x400).
+    
+    \remarks
+    A PlotSettings object is of either ModelSpace type or PaperSpace type.
+  */
+  bool modelType() const;
+
+  /** \details
+    Controls the ModelSpace type of this PlotSettings object (DXF 70, bit 0x400).
+    
+    \param modelType [in]  True if and only if it is of ModelSpace type.
+    
+    \remarks
+    A PlotSettings object is of either ModelSpace type or PaperSpace type.
+  */
+  void setModelType(bool modelType);
+
+  /** \details
+    Returns the top margin of the paper for this PlotSettings object (DXF 43).
+  */
+  double getTopMargin() const;
+
+  /** \details
+    Returns the right margin of the paper for this PlotSettings object (DXF 42).
+  */
+  double getRightMargin() const;
+
+  /** \details
+    Returns the bottom margin of the paper for this PlotSettings object (DXF 41).
+  */
+  double getBottomMargin() const;
+
+  /** \details
+    Returns the left margin of the paper for this PlotSettings object (DXF 40).
+  */
+  double getLeftMargin() const;
+
+  /** \details
+    Returns the paper image origin of the paper for this PlotSettings object (DXF 148, 149).
+  */
+  OdGePoint2d getPaperImageOrigin() const;
+
+  /** \details
+    Sets the paper image origin (DXF 148, 149).
+    \param paperImageOrigin [in]  Paper image origin. 
+  */
+  void setPaperImageOrigin(OdGePoint2d paperImageOrigin);
+
+  // New to 2004 api
+
+  /** \details
+    Returns the shade plot type for this PlotSettings object (DXF 76).
+    
+    \remarks
+    shadePlotType() returns one of the following:
+    
+    <table>
+    Name           Value  Description
+    kAsDisplayed   0      As displayed
+    kWireframe     1      Wireframe
+    kHidden        2      Hidden lines removed
+    kRendered      3      Rendered
+    </table>
+    
+  */
+  OdDbPlotSettings::ShadePlotType shadePlot() const;
+
+  /** \details
+    Sets the shade plot type for this PlotSettings object (DXF 76).
+    
+    \param shadePlotType [in]  Shade Plot type.
+
+    \remarks
+    shadePlotType must be one of the following:
+    
+    <table>
+    Name           Value  Description
+    kAsDisplayed   0      As displayed
+    kWireframe     1      Wireframe
+    kHidden        2      Hidden lines removed
+    kRendered      3      Rendered
+    </table>
+    
+  */
+  OdResult setShadePlot(
+    OdDbPlotSettings::ShadePlotType shadePlot);
+
+  /** \details
+    Returns the shade plot resolution level for this PlotSettings object.
+    
+    \remarks
+    shadePlotResLevel controls the resolution at which shaded and 
+    vectorized viewports will plot.
+    
+    shadePlotResLevel() returns one of the following:
+    
+    <table>
+    Name            Value   Description
+    kDraft          0       Draft
+    kPreview        1       Preview
+    kNormal         2       Normal
+    kPresentation   3       Presentation
+    kMaximum        4       Maximum
+    kCustom         5       Custom
+    </table>
+
+  */
+  OdDbPlotSettings::ShadePlotResLevel shadePlotResLevel() const;
+
+  /** \details
+    Sets the shade plot resolution level for this PlotSettings object.
+    
+    \param shadePlotResLevel [in]  Shade plot resolution level.
+    
+    \remarks
+    shadePlotResLevel controls the resolution at which shaded and 
+    vectorized viewports will plot.
+
+    shadePlotResLevel must be one of the following:
+    
+    <table>
+    Name            Value   Description
+    kDraft          0       Draft
+    kPreview        1       Preview
+    kNormal         2       Normal
+    kPresentation   3       Presentation
+    kMaximum        4       Maximum
+    kCustom         5       Custom
+    </table>
+
+  */
+  void setShadePlotResLevel(
+    OdDbPlotSettings::ShadePlotResLevel shadePlotResLevel);
+
+  /** \details
+    Returns the shade plot custom DPI for this PlotSettings object.
+    
+    \remarks
+    shadePlotCustomDPI specifies the custom resolution at which shaded and 
+    vectorized viewports will plot if shadePlotResLevel == ShadePlotResLevel::kCustom.
+    
+    \note
+    shadePlotCustomDPI should be used only if the shade plot resolution level 
+    is set to ShadePlotResLevel::kCustom.
+  */
+  OdInt16 shadePlotCustomDPI() const;
+
+  /** \details
+    Sets the shade plot custom DPI for this PlotSettings object.
+    
+    \remarks
+    shadePlotCustomDPI specifies the custom resolution at which shaded and 
+    vectorized viewports will plot if shadePlotResLevel == ShadePlotResLevel::kCustom.
+    
+    \note
+    shadePlotCustomDPI should be used only if the shade plot resolution level 
+    is set to ShadePlotResLevel::kCustom.
+  
+    \param shadePlotCustomDPI [in]  Shade plot custom DPI.
+  */
+  void setShadePlotCustomDPI(
+    OdInt16 shadePlotCustomDPI);
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual void subClose();
+
+  virtual OdResult subErase(
+    bool erasing);
+  
+  virtual void subHandOverTo(
+    OdDbObject* pNewObject);
+
+  virtual void copyFrom(
+    const OdRxObject* pSource);
+
+// New in AC2007
+
+// Returns the OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object
+// referenced by this object.
+
+  /** \details
+    Returns the OdDbObjectId of the OdDbVisualStyle or OdDbRenderSettings object
+    referenced by this object.
+  */
+  OdDbObjectId    shadePlotId() const;
+
+  OdResult        setShadePlot(OdDbPlotSettings::ShadePlotType type,
+                               OdDbObjectId shadePlotId);
+  /** \details
+    Controls whether the output is vector-based when using shade plot settings of a viewport.
+  */
+  bool plotWireframe() const;
+  /** \details
+    Controls whether the output is raster-based when using shade plot settings of a viewport.
+  */
+  bool plotAsRaster () const;
+
+  /** \details
+    Returns true if and only if transparencies plotting is enabled for this OdDbRenderSettings object.
+  */
+  bool plotTransparency() const;
+  /** \details
+    Enables or disables transparencies plotting for this OdDbRenderSettings object.
+
+    \param bSet [in]  New transparencies plotting setting.
+  */
+  void setPlotTransparency(bool bSet);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPlotSettings object pointers.
+*/
+typedef OdSmartPtr<OdDbPlotSettings> OdDbPlotSettingsPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidator.h
new file mode 100755
index 0000000..572f25d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidator.h
@@ -0,0 +1,449 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBPLOTSETVAL_H
+#define OD_DBPLOTSETVAL_H
+
+#include "RxObject.h"
+#include "DbPlotSettings.h"
+#include "OdArray.h"
+
+class OdDbPlotSettings;
+
+typedef OdDbPlotSettings::PlotPaperUnits PlotPaperUnits;
+typedef OdDbPlotSettings::PlotRotation   PlotRotation;
+typedef OdDbPlotSettings::PlotType       PlotType;
+typedef OdDbPlotSettings::StdScaleType   StdScaleType;
+
+/** \details
+    This class defines access methods that validate data for
+    OdDbPlotSettings objects prior to setting the data on the
+    objects.
+    
+    \sa
+    TD_Db
+    
+    \remarks
+    Plot device and style lists should be refreshed with refreshLists() prior to
+    using the other methods in this class, in case any plot devices, PC3 files, or plot style tables were changed
+    after starting your application.
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPlotSettingsValidator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPlotSettingsValidator);
+
+  /** \details
+    Sets the plot device and media names for the specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param plotDeviceName [in]  Name of the system printer or PC3 file.
+    \param mediaName [in]  Media name.
+    
+    \note
+    (plotDeviceName == none_device) requires (mediaName == none_user_media)
+  */
+  virtual OdResult setPlotCfgName(
+    OdDbPlotSettings* pPlotSettings,
+    const OdString& plotDeviceName,
+    const OdString& mediaName = OdString::kEmpty) = 0;
+
+  /** \details
+    Sets the canonical (locale-independent) media name for the specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param mediaName [in]  Canonical media name.
+    
+    \remarks
+    The canonical media name is locale-independent.
+    
+    \sa
+    getLocaleMediaName()
+
+    \note
+    Canonical media names are case-sensitive.
+  */
+  virtual OdResult setCanonicalMediaName(
+    OdDbPlotSettings* pPlotSettings,
+    const OdString& mediaName) = 0;
+
+  /** \details
+    Sets the plot origin offset for the specified PlotSettings object.
+
+    \param xCoordinate [out]  X-coordinate of the origin offset.
+    \param yCoordinate [out]  Y-coordinate of the origin offset.
+    
+    \remarks
+    The plot origin offset is measured with respect to the plot margin.
+     
+    \note
+    All distances are returned in millimeters, regardless of the drawing units. 
+  */
+  virtual OdResult setPlotOrigin(
+    OdDbPlotSettings *pPlotSettings,
+    double xCoordinate,
+    double yCoordinate) = 0;
+
+
+  /** \details
+    Sets the plot paper units for the specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param plotPaperUnits [in]  Plot paper units.
+        
+    \remarks
+    The plot paper units determine the units of the margins, offsets, paper size, and drawing units.
+    
+    plotPaperUnits must be one of the following:
+    
+    <table>
+    Name            Value   Description
+    kInches         0       Inches
+    kMillimeters    1       Millimeters
+    kPixels         2       Pixels
+    </table>
+  */
+  virtual OdResult setPlotPaperUnits(
+    OdDbPlotSettings* pPlotSettings,
+    const PlotPaperUnits plotPaperUnits) = 0;
+
+
+  /** \details
+    Sets the plot rotation for specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param plotRotation [in]  Plot rotation.
+    
+    \remarks
+    plotRotation must be one of the following:
+    
+    <table>
+    Name         Value    Description
+    k0degrees    0        No rotation
+    k90degrees   1        90� CCW
+    k180degrees  2        Inverted�
+    k270degrees  3        90� CW
+    </table>
+  */
+  virtual OdResult setPlotRotation(
+    OdDbPlotSettings* pPlotSettings,
+    const PlotRotation plotRotation) = 0;
+
+  /** \details
+    Controls the centering of the plot for the specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param plotCentered [in]  Plot centered.
+  */
+  virtual OdResult setPlotCentered(
+    OdDbPlotSettings* pPlotSettings,
+    bool plotCentered) = 0;
+
+  /** \details
+    Sets the plot type for the specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param plotType [in]  Plot type.
+
+    \remarks
+    plotType must be one of the following:
+    
+    <table>
+    Name        Value   Description
+    kDisplay    0       Display
+    kExtents    1       Extents
+    kLimits     2       Limits
+    kView       3       View
+    kWindow     4       Window
+    kLayout     5       Layout
+    </table>
+  */
+  virtual OdResult setPlotType(
+    OdDbPlotSettings* pPlotSettings,
+    const PlotType plotType) = 0;
+
+  /** \details
+    Sets the corners of the plot window area for the specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param xMin [in]  X-coordinate of the lower-left corner.      
+    \param yMin [in]  Y-coordinate of the lower-left corner.      
+    \param xMax [in]  X-coordinate of the upper-right corner.      
+    \param yMax [in]  Y-coordinate of the upper-right corner.      
+    
+    \remarks
+    The corners define the area to be plotted if and only if plotType == kWindow.
+  */
+  virtual OdResult setPlotWindowArea(
+    OdDbPlotSettings* pPlotSettings,
+    double xMin,
+    double yMin,
+    double xMax,
+    double yMax) = 0;
+
+  /** \details
+    Sets the plot view name for the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param plotViewName [in]  Plot view name.
+  
+    \remarks
+    This string specifies the named view to be plotted if and only if plotType == kView. 
+  */
+  virtual OdResult setPlotViewName(
+    OdDbPlotSettings* pPlotSettings,
+    const OdString& plotViewName) = 0;
+
+  /** \details
+    Controls the use of a standard scale for the specified PlotSettings object.
+
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param useStandardScale [in]  Use standard scale.
+  */
+  virtual OdResult setUseStandardScale(
+    OdDbPlotSettings* pPlotSettings,
+    bool useStandardScale) = 0;
+
+  /** \details
+    Sets the custom print scale for the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param numerator [in]  Receives the PaperSpace units.
+    \param denominator [in]  Receives the media units.
+    
+    \remarks
+    The custom print scale always reflects the scale that this PlotSettings object will use to plot.
+  */
+  virtual OdResult setCustomPrintScale(
+    OdDbPlotSettings* pPlotSettings,
+    double numerator,
+    double denominator) = 0;
+
+  /** \details
+    Sets the current style sheet for the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param currentStyleSheet [in]  Name of current style sheet.
+  */
+  virtual OdResult setCurrentStyleSheet(
+    OdDbPlotSettings* pPlotSettings,
+    const OdString& currentStyleSheet) = 0;
+
+  /** \details
+    Sets the standard scale type for the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param stdScaleType [in]  Name of current style sheet.
+
+    \remarks
+    stdScaleType must be one of the of the following
+    
+    <table>
+    Name            Value   Scale
+    kScaleToFit     0       Scaled to Fit
+    k1_128in_1ft    1       1/128=1'
+    k1_64in_1ft     2       1/64=1'
+    k1_32in_1ft     3       1/32=1'
+    k1_16in_1ft     4       1/16=1'
+    k3_32in_1ft     5       3/32=1'
+    k1_8in_1ft      6       1/8=1'
+    k3_16in_1ft     7       3/16=1'
+    k1_4in_1ft      8       1/4=1'
+    k3_8in_1ft      9       3/8=1'
+    k1_2in_1ft      10      1/2=1'
+    k3_4in_1ft      11      3/4=1'
+    k1in_1ft        12      1=1'
+    k3in_1ft        13      3=1'
+    k6in_1ft        14      6=1'
+    k1ft_1ft        15      1'=1'
+    k1_1            16      1:1
+    k1_2            17      1:2
+    k1_4            18      1:4
+    k1_5            19      1:5
+    k1_8            20      1:8
+    k1_10           21      1:10
+    k1_16           22      1:16
+    k1_20           23      1:20
+    k1_30           24      1:30
+    k1_40           25      1:40
+    k1_50           26      1:50
+    k1_100          27      1:100
+    k2_1            28      2:1
+    k4_1            29      4:1
+    k8_1            30      8:1
+    k10_1           31      10:1
+    k100_1          32      100:1
+    k1000_1         33      1000:1
+    k1and1_2in_1ft  34      1.5"=1'
+    </table>
+  */
+  virtual OdResult setStdScaleType(
+    OdDbPlotSettings* pPlotSettings,
+    const StdScaleType stdScaleType) = 0;
+
+  /** \details
+    Sets the standard scale, as a floating point value, for the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param standardScale [in]  Standard scale.
+  */
+  virtual OdResult setStdScale(
+    OdDbPlotSettings* pPlotSettings,
+    double standardScale) = 0;
+  
+  /** \details
+    Returns an array of all available system printers and PC3 files.
+    
+    \remarks
+    Plot device and style lists should be refreshed with refreshLists() prior to
+    using the other methods in this class, in case any plot devices, PC3 files, or plot style tables were changed
+    after starting your application.
+    
+    \param deviceList [out]  Receives the plot device list.
+  */
+  virtual void plotDeviceList(
+    OdArray<const OdChar*> & deviceList) = 0;
+
+  /** \details
+    Returns an array canonical (locale-independent) media names for the specified
+    PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param mediaList [out]  Receives the media name list.
+
+    \remarks
+    Plot device and style lists should be refreshed with refreshLists() prior to
+    using the other methods in this class, in case any plot devices, PC3 files, or plot style tables were changed
+    after starting your application.
+  */
+  virtual OdResult canonicalMediaNameList(
+    OdDbPlotSettings* pPlotSettings,
+    OdArray<const OdChar*> & mediaList) = 0;
+
+  /** \details
+    Returns the locale-dependent media name for the specified PlotSettings object and canonical media name or index.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param canonicalName [out]  Locale-independent media name.
+    
+    \remarks
+    Plot device and style lists should be refreshed with refreshLists() prior to
+    using the other methods in this class, in case any plot devices were added or removed
+    after starting your application.
+  */
+  virtual OdString getLocaleMediaName(
+    OdDbPlotSettings *pPlotSettings,
+    const OdString&  canonicalName) = 0;
+
+  /** \param mediaIndex [in]  Media index.
+  */
+  virtual OdString getLocaleMediaName(
+    OdDbPlotSettings *pPlotSettings,
+    int mediaIndex) = 0;
+
+  /** \details
+    Sets the media name closest to the specified parameters for the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param paperWidth [in]  Paper width.
+    \param paperHeight [in]  Paper height.
+    \param plotPaperUnits [in]  Plot paper units.
+    \param matchPrintableArea [in]  True to match against printable area or physical media size.
+
+    \remarks
+    The plot paper units determine the units of the margins, offsets, paper size, and drawing units.
+
+    plotPaperUnits must be one of the following:
+    
+    <table>
+    Name            Value   Description
+    kInches         0       Inches
+    kMillimeters    1       Millimeters
+    kPixels         2       Pixels
+    </table>
+  */
+   virtual OdResult setClosestMediaName(
+    OdDbPlotSettings* pPlotSettings,
+    double paperWidth,
+    double paperHeight,
+    const PlotPaperUnits plotPaperUnits,
+    bool matchPrintableArea) = 0;
+
+  /** \details
+    Returns an array of all available plot style tables.
+    
+    \remarks
+    Plot device and style lists should be refreshed with refreshLists() prior to
+    using the other methods in this class, in case any plot devices, PC3 files, or plot style tables were changed
+    after starting your application.
+    
+    \param styleList [out]  Receives the plot style list.
+  */
+  virtual OdResult plotStyleSheetList(
+    OdArray<const OdChar*> & styleList) = 0;
+
+  /** \details
+    Refreshes the plot device and style lists for the specified PlotSettings object.
+    
+    \remarks
+    Plot device and style lists should be refreshed with refreshLists() prior to
+    using the other methods in this class, in case any plot devices, PC3 files, or plot style tables were changed
+    after starting your application.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+  */
+  virtual void refreshLists(
+    OdDbPlotSettings* pPlotSettings) = 0;
+
+
+  /** \details
+    Controls the Zoom to Paper on Update setting for the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+    \param zoomToPaperOnUpdate [in]  Zoom to Paper on Update.
+  */
+  virtual OdResult setZoomToPaperOnUpdate(
+    OdDbPlotSettings* pPlotSettings,
+    bool zoomToPaperOnUpdate) = 0;
+
+  /** \details
+    Applies the default plot configuration settings to the specified PlotSettings object.
+    
+    \param pPlotSettings [in]  Pointer to the PlotSettings object.
+  */
+  virtual OdResult setDefaultPlotConfig(
+    OdDbPlotSettings* pPlotSettings) = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPlotSettingsValidator object pointers.
+*/
+typedef OdSmartPtr<OdDbPlotSettingsValidator> OdDbPlotSettingsValidatorPtr;
+
+#endif // OD_DBPLOTSETVAL_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidatorPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidatorPE.h
new file mode 100755
index 0000000..c2521b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPlotSettingsValidatorPE.h
@@ -0,0 +1,104 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBPLOTSETVALPE_H
+#define OD_DBPLOTSETVALPE_H
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "OdString.h"
+#include "DbPlotSettings.h"
+
+/** \details
+    This class is the Plot Settings Validator Protocol Extension class.
+   
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPlotSettingsValidatorPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPlotSettingsValidatorPE);
+
+  struct psvPaperInfo
+  {
+    OdString canonicalName;
+    OdString localeName;
+
+    double w;
+    double h;
+
+    // ImageableArea
+    double left;
+    double top;
+    double right;
+    double bottom;
+
+    OdDbPlotSettings::PlotPaperUnits units;
+
+    psvPaperInfo()
+      : w(0.)
+      , h(0.)
+      , left(-HUGE_VAL)
+      , top(-HUGE_VAL)
+      , right(-HUGE_VAL)
+      , bottom(-HUGE_VAL)
+      , units(OdDbPlotSettings::kMillimeters)
+    {
+    }
+    bool operator==(const psvPaperInfo& p) const
+    {
+      return  canonicalName == p.canonicalName 
+        && localeName == p.localeName
+        && w == p.w
+        && h == p.h
+        && left == p.left
+        && top == p.top
+        && right == p.right
+        && bottom == p.bottom
+        && units == p.units;
+    }
+  };
+  
+  virtual OdResult getDeviceList(OdArray<OdString> &pDeviceList) = 0;
+  virtual OdResult getMediaList(const OdString &deviceName, OdArray<psvPaperInfo> &pMediaList, bool bUpdateMediaMargins) = 0;
+  virtual OdResult getDefaultMedia(const OdString &deviceName, OdString &defaultMedia) = 0;
+  virtual OdResult getMediaMargins(const OdString &deviceName, psvPaperInfo &pMediaInfo) = 0;
+  virtual OdResult getPlotStyleSheetList(OdArray<OdString> &pPlotStyleSheetList) = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPlotSettingsValidatorPE object pointers.
+*/
+typedef OdSmartPtr<OdDbPlotSettingsValidatorPE> OdDbPlotSettingsValidatorPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBPLOTSETVALPE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPoint.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPoint.h
new file mode 100755
index 0000000..b33f773
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPoint.h
@@ -0,0 +1,293 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_POINT_
+#define _OD_DB_POINT_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the point object (Point entity) in the database. 
+  This class inherits the base functionality of entities. 
+  
+  \sa
+  TD_Db
+
+  \sa
+  <link db_point_sample.html, Example of Working with the Point Object>
+
+  \sa
+  <link db_point.html, Working with Points>
+
+  <link db_point_appearance.html, Appearance and Size of Points>
+*/
+class TOOLKIT_EXPORT OdDbPoint : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPoint);
+
+  /** \details
+    Builds an instance of the point entity.
+    
+    \param gePoint [in]  WCS position for the point entity.
+
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_point_overview.html, Overview of Points>
+  */
+  OdDbPoint();
+  OdDbPoint( const OdGePoint3d& gePoint );
+
+
+  /** \details
+    Returns the WCS position of the point entity (DXF 10) as three-dimensional point
+    instance.
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::setPosition() method
+  */
+  OdGePoint3d position() const;
+
+
+  /** \details
+    Sets the WCS position of the point entity (DXF 10). The initial value is (0,0,0)
+    by default.
+
+    \param gePoint [in]  Three-dimensional point instance to set the point position.
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::position() method
+  */
+  void setPosition( const OdGePoint3d& gePoint );
+
+
+  /** \details
+    Returns the thickness of the point entity (DXF 39) in drawing units. Thickness is 
+    the extrusion length along the normal. A positive value defines the thickness to 
+    be drawn along the normal direction. A negative value defines the thickness to be 
+    drawn in the opposite direction from the normal. A zero value defines a trace without 
+    thickness.
+    
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::setThickness() method
+  */
+  double thickness() const;
+
+
+  /** \details
+    Sets the thickness of the point entity (DXF 39) in drawing units. Thickness is the 
+    extrusion length along the normal. A positive value extrudes along the normal. 
+    A negative value extrudes opposite from the normal. A zero value defines a trace  
+    without thickness. The initial value is zero by default.
+
+    \param vThickness [in]  Thickness value as a Double value.
+    
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::thickness() method
+  */
+  void setThickness( double vThickness );
+
+
+  /** \details
+    Returns the WCS unit vector which is the normal to the plane of the trace entity (DXF 210).
+    The normal defines the orientation of the trace plane in world space.
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::setNormal() method
+  */
+  OdGeVector3d normal() const;
+
+
+  /** \details
+    Sets the WCS normal to the plane of the trace entity (DXF 210). The normal defines 
+    the orientation of the trace plane in world space. The initial value is (0,0,1) by default.
+
+    \param geVector [in]  Three-dimensional vector instance to set the normal.
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::normal() method
+  */
+  void setNormal( const OdGeVector3d& geVector );
+
+
+  /** \details
+    Returns the ECS Rotation which defines the angle in radians between the OCS X-axis for  
+    the point based on the normal vector and the X-axis that will be used for displaying the  
+    point entity (DXF 50). A positive angle value is measured clockwise. A negative angle 
+    value is measured counterclockwise.
+
+    \remarks
+    The ECS Rotation is used when PDMODE is non-zero.
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::setEcsRotation() method
+  */
+  double ecsRotation() const;
+
+
+  /** \details
+    Sets the ECS Rotation which defines the angle in the range 0 to 2PI radians between the  
+    OCS X-axis for the point based on the normal vector and the X-axis that will be used for  
+    displaying the point entity (DXF 50). A positive angle rotates clockwise. A negative angle  
+    rotates counterclockwise. The initial value is zero by default.
+    
+    \param vAngle [in]  Rotation angle as a Double value.
+    
+    \remarks
+    The ECS Rotation is used when PDMODE is non-zero. This method does not convert to an  
+    equivalent angle and sets the specified angle value.
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point_specific.html, Specific Point Properties>
+
+    OdDbPoint::ecsRotation() method
+  */
+  void setEcsRotation( double vAngle );
+
+
+  /** \details
+    Determines whether the point entity is planar as a Boolean value and always returns True.
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point.html, Working with Points>
+
+    OdDbPoint::getPlane(), OdDbEntity::isPlanar() method
+  */
+  virtual bool isPlanar() const { return true; }
+
+
+  /** \details
+    Gets an arbitrary plane passed through the point entity. This method is inherited from the 
+    OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the plane parameters as 
+                a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type 
+                    (returns kLinear - arbitrary plane).
+
+    \sa
+    <link db_point_sample.html, Example of Working with the Point Object>
+
+    \sa
+    <link db_point.html, Working with Points>
+
+    OdDbPoint::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits *pTraits) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  The typified smart pointer for the point object (Point entity). This template class 
+  is specialization of the OdSmartPtr class for the OdDbPoint class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbPoint> OdDbPointPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbArgbColor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbArgbColor.h
new file mode 100755
index 0000000..41ce5ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbArgbColor.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_ARGBCOLOR_
+#define _OD_DB_ARGBCOLOR_
+
+#include "TD_PackPush.h"
+#include "DbPointCloudObjExports.h"
+#include "DbObject.h"
+
+
+/** \details
+  This class represents the HSL color for point cloud entities.
+
+  Library: AcDbPointCloudObj
+
+  <group OdDbPointCloud_Classes>
+*/
+struct DBPOINTCLOUDOBJ_EXPORT ColorModelHSL 
+{
+  ColorModelHSL();
+  ColorModelHSL(double, double, double, double);
+  bool operator == (const ColorModelHSL& color) const;
+
+  double hue; // 0-360
+  double saturation; // 0-1
+  double luminance; // 0-1
+  double alpha; // 0-1
+};
+
+/** \details
+  This class represents the color for point cloud entities.
+
+  Library: AcDbPointCloudObj
+
+  <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT ArgbColor 
+{
+public:
+	ArgbColor();
+  ArgbColor(ColorModelHSL);
+	ArgbColor(ODCOLORREF);
+
+  void setColor(const ColorModelHSL &);
+  ColorModelHSL color() const;
+
+  static ArgbColor COLORREFToArgb(ODCOLORREF);
+
+	ArgbColor gradientRgb(const ArgbColor &, const double) const;
+	ArgbColor gradientRgb(const ColorModelHSL &, const double) const;
+
+	void fromCOLORREF(ODCOLORREF);
+	ODCOLORREF toCOLORREF() const;
+
+private:
+  ColorModelHSL m_color;
+
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloud.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloud.h
new file mode 100755
index 0000000..f4a2257
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloud.h
@@ -0,0 +1,405 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_DB_POINTCLOUD_
+#define _OD_DB_POINTCLOUD_
+
+#include "DbPointCloudObjExports.h"
+#include "DbPointCloudClipping.h"
+#include "DbPointCloudIntensityStyle.h"
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+    This class represents PointCloud entities in an OdDbDatabase instance.
+
+    Library: AcDbPointCloudObj
+
+    <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloud : public OdDbEntity
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbPointCloud);
+
+  /** \details
+    Default constructor.
+  */
+  OdDbPointCloud();
+
+  /** \details
+    Destructor.
+  */
+  ~OdDbPointCloud() {}
+
+  // Properties
+
+  /** \details
+    Returns the transformation matrix for this point cloud entity.
+  */
+  OdGeMatrix3d transformation() const;
+
+ /** \details
+    Sets the transformation matrix for this point cloud entity.
+
+    \param transformation [in]  The transformation matrix to be applied for this point cloud entity.
+ */
+  OdResult setTransformation(const OdGeMatrix3d&);
+
+  /** \details
+    Gets the name of the indexed point cloud file (.pcg or .isd) for this point cloud entity stored in file.
+
+    \param fileName [out]  The filename.
+  */
+  bool  getSavedFileName(OdString &) const;
+
+  /** \details
+    Sets the name of the indexed point cloud file (.pcg or .isd) for this point cloud entity stored in file.
+
+    \param fileName [in]  The filename to be set.
+
+    \remarks
+    To be deprecated. Updating PointCloudDef object will update all Point Cloud Entities if PointCloudDefReactor is enabled.
+  */
+  bool  setSavedFileName(const OdString&);
+
+  /** \details
+    Gets the current file path of the indexed point cloud file (.pcg or .isd) for this point cloud entity located during run-time session (not saved in file).
+
+    \param fileName [out]  The filename.
+  */
+  bool  getIndexFile(OdString &) const;
+
+  /** \details
+    Sets the current file path of the indexed point cloud file (.pcg or .isd) for this point cloud entity for current run-time session (not saved in file).
+
+    \param fileName [in]  The filename to be set.
+
+    \remarks
+    To be deprecated. Updating PointCloudDef object will update all Point Cloud Entities if PointCloudDefReactor is enabled.
+  */
+  bool  setIndexFile(const OdString&);
+
+  /** \details
+    Gets the count of the source point cloud files (.las for example) for this point cloud entity.
+  */
+  OdUInt32 getSourceFileCount() const;
+
+  /** \details
+    Gets the name of the source point cloud file for this point cloud entity.
+
+    \param fileName [out]  The filename.
+    \param index [in]  index of the filenames array
+
+    Returns true if name was successfully set and false if index is invalid.
+  */
+  bool getSourceFile(OdUInt32 index, OdString & fileName) const;
+
+  /** \details
+    Clears source files for this point cloud entity.
+
+  */
+  void clearSourceFiles();
+
+  /** \details
+    Adds the name of the source point cloud file for this point cloud entity.
+
+    \param fileName [in]  The filename to be added.
+
+  */
+  bool addSourceFile(const OdString& fileName );
+
+
+  OdString getCoordSys() const;
+  void setCoordSys(const OdString&);
+
+  /** \details
+    Returns true if the point cloud entity is locked or false otherwise.
+  */
+  bool  locked() const;
+
+  /** \details
+    Sets the point cloud entity to be locked.
+  */
+  void  setLocked(bool);
+
+  bool useEntityColor()const;
+  void setUseEntityColor(bool);
+
+  /** \details
+    Returns the Object ID of the OdDbPointCloudDef object associated with this point cloud entity.
+  */
+  OdDbObjectId  pointCloudDefId() const;
+
+  /** \details
+    Sets the Object ID of the OdDbPointCloudDef object associated with this point cloud entity.
+
+    \param pointCloudDefId [in]  Object ID of the point cloud to be associated with this point cloud entity.
+  */
+  void  setPointCloudDefId(const OdDbObjectId);
+
+  /** \details
+    Returns the Object ID of the OdDbPointCloudDefReactor object associated with this point cloud entity.
+
+    \remarks
+    Each OdDbPointCloud object must have an OdDbPointCloudDefReactor associated with the OdDbPointCloudDef object it is using.
+
+  */
+  OdDbObjectId  reactorId() const;
+
+  /** \details
+    Sets the Object ID of the OdDbPointCloudDefReactor object associated with this point cloud entity.
+
+    \param pointCloudDefReactorId [in]  Object ID of a reactor for this point cloud entity.
+
+    \remarks
+    Each OdDbPointCloud object must have an OdDbPointCloudDefReactor associated with the OdDbPointCloudDef object it is using.
+  */
+  void  setReactorId(const OdDbObjectId);
+
+
+  /** \details
+    Returns the total number of points of this point cloud entity.
+  */
+  OdInt64 getPointCount();
+
+  /** \details
+    Sets the total number of points of this point cloud entity.
+
+    \param count [in]  Number od points.
+
+    \remarks
+    To be deprecated. Updating PointCloudDef object will update all Point Cloud Entities if PointCloudDefReactor is enabled.
+  */
+  void setPointCount(const OdUInt64 count);
+
+
+  /** \details
+    Returns the extents of this OdDbPointCloud object.
+  */
+  OdGeExtents3d extents() const;
+
+  /** \details
+    Sets the extents of this point cloud entity.
+
+    \param exts [in]  Extents of this Point Cloud entity.
+
+    \remarks
+    To be deprecated. Updating PointCloudDef object will update all Point Cloud Entities if PointCloudDefReactor is enabled.
+  */
+  void setExtents(const OdGeExtents3d & exts);
+
+  //Intensity
+
+
+  /** \details
+    Returns true only if intensity is shown for this point cloud entity.
+  */
+  bool  showIntensity() const;
+
+  /** \details
+    Enables/disables showing intensity for this point cloud entity.
+
+    \param intensity [in]  Value for option.
+    
+    \note
+    Returns eOk.
+  */
+  OdResult  setShowIntensity(const bool);
+  
+  
+  //bool hasIntensity() const;
+
+
+  /** \details
+    Returns an intensity scheme index for this point cloud entity.
+  */
+  int  getIntensityScheme() const;
+
+  /** \details
+    Sets an intensity scheme for this point cloud entity.
+
+    \param schemeIndex [in]  An intensity scheme index to be set.
+    
+    \note
+    Returns eOk.
+  */
+  OdResult  setIntensityScheme(const int);
+
+  const OdDbPointCloudIntensityStyle& intensityStyle() const;
+  OdDbPointCloudIntensityStyle* pIntensityStyle();
+  
+  // Clipping
+  /** \details
+    Returns true only if this point cloud entity is displayed as clipped.
+  */
+  bool  showClipping() const;
+
+  /** \details
+    Set whether this point cloud entity is displayed as clipped.
+
+    \param clipping [in]  Value for option.
+
+    \note
+    Returns eOk.
+  */
+  OdResult  setShowClipping(const bool);
+
+  /** \details
+    Returns the number of clipping boundaries (the size of the clipping boundaries array) for this point cloud entity.
+  */
+  int  clippingCount() const;
+
+
+  /** \details
+    Adds a clipping boundary to the clipping boundaries array for this point cloud entity.
+
+    \param boundary [in]  An OdDbPointCloudClipping object to be added.
+
+    \note
+    Returns true if the specified clipping boundary is successfully added or false if the boundary isn't valid.
+  */
+  bool  addClippingBoundary(OdDbPointCloudClipping const &);
+
+  /** \details
+    Removes a clipping boundary at the specified position from the clipping boundaries array for this point cloud entity.
+
+    \param nInd [in]  An index of the OdDbPointCloudClipping object in the clipping boundaries array to be removed.
+
+    \note
+    Returns true if the specified clipping boundary is successfully removed or false if the index is out of range.
+  */
+  bool  removeClippingBoundary(int);
+
+  /** \details
+    Resets all clipping boundaries for this point cloud entity.
+  */
+  void  resetClippingBoundary();
+
+
+  /** \details
+    Returns a pointer to a constant PointCloudClipping object at the specified position in the clipping boundaries array.
+    
+    \param nInd [in]  An index of the OdDbPointCloudClipping object.
+
+    \remarks
+    Returns NULL if the index is out of range.
+  */
+  OdDbPointCloudClipping const*  getConstPointCloudClipping(int) const;
+
+  /** \details
+    Returns a pointer to a PointCloudClipping object at the specified position in the clipping boundaries array.
+
+    \param nInd [in]  An index of the OdDbPointCloudClipping object.
+
+    \remarks
+    Returns NULL if the index is out of range.
+  */
+  OdDbPointCloudClipping*  getPointCloudClipping(int);
+
+  // File IO
+  virtual OdResult  dwgInFields(OdDbDwgFiler *);
+  virtual void  dwgOutFields(OdDbDwgFiler *) const;
+  virtual OdResult  dxfInFields(OdDbDxfFiler *);
+  virtual void  dxfOutFields(OdDbDxfFiler *) const;
+
+  // Rendering
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+
+
+  virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const;
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm);
+
+#if 0
+  // Require investigation
+  bool  clearSelection(const OdString&);
+  bool  select(PointCloudSelectionDef const &, const OdString &);
+  bool  selectNone();
+  bool  selectionId(const OdString&, struct _GUID &);
+
+  bool  hasIntensity() const;
+
+  IPointProcess *  ProcessPoints(IPointProcessor *, OdDbExtents *);
+  IPointProcess *  ProcessPoints(IPointProcessor *, OdPointCloudViewFrustum *);
+
+  bool  closestPoint(OdGePoint3d const &, OdGePoint3d const &,unsigned long &) const;
+  void  UsePointBuffer(IPointCloudDataBuffer *);
+
+  IPointCloudEngine *  getEngine() const;
+  OdResult  getNativeCloudExtent(OdDbExtents &) const;
+  bool  getPointCloudFileVersion(int &,int &) const;
+  void  getViewFrustum(OdGiViewport &,OdPointCloudViewFrustum &,bool) const;
+  bool  hasProperty(wchar_t const *,bool &) const;
+  bool  isValid() const;
+  void  markDirty();
+  void  onViewChanged();
+  IPointCloudDataBuffer *  pointData() const;
+  bool  readPoints(OdDbExtents &, unsigned long);
+  bool  readPoints(OdPointCloudViewFrustum &, unsigned long);
+  bool  readPoints(unsigned long);
+  OdResult  setPointCloudFilter(IPointCloudFilter *);
+  class IOdPcPointFilter *  setPointFilter(IOdPcPointFilter *);
+  void  setVisibleSelType(enum IPointCloudDataFile::selType);
+  enum IPointCloudDataFile::selType  visibleSelType() const;
+#endif
+
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPointCloud entity pointers.
+*/
+typedef OdSmartPtr<OdDbPointCloud> OdDbPointCloudPtr;
+
+/** \details
+  This method performs the whole point cloud entity creation routine: creates the OdDbPointCloud entity, appends it to the database,
+  applies specified attributes, creates the OdDbPointCloudDef object (if needed), restores or creates new links to the OdDbPointCloudDef object, adds reactors.
+
+  \param pBlockToAdd [in]  Pointer to the block table record to add the point cloud entity to.
+  \param newPointCloud [out]  Recieves a pointer to the created point cloud entity.
+  \param indexFile [in]  Index file path. 
+  \param sourceFile [in]  Source file path.
+  \param location [in]  Location of the entity.
+  \param scale [in]  Scale factor.
+  \param rotation [in]  Rotation angle.
+  \param vAxis [in]  Rotation axis.
+
+  \note
+  Returns eOk. 
+*/
+DBPOINTCLOUDOBJ_EXPORT OdResult oddbCreatePointCloudEntity(
+    OdDbBlockTableRecord* pBlockToAdd,
+    OdDbPointCloudPtr& newPointCloud,
+    const OdString& indexFile,
+    const OdString& sourceFile,
+    const OdGePoint3d& location = OdGePoint3d::kOrigin,
+    double             scale = 1.0,
+    double             rotation = 0.0,
+    const OdGeVector3d& vAxis = OdGeVector3d::kZAxis
+    );
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudClipping.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudClipping.h
new file mode 100755
index 0000000..b7d0bf2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudClipping.h
@@ -0,0 +1,156 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_POINTCLOUDCLIPPING_
+#define _OD_DB_POINTCLOUDCLIPPING_
+
+#include "TD_PackPush.h"
+#include "DbPointCloudObjExports.h"
+#include "DbObject.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GePoint2dArray.h"
+
+
+/** \details
+  This class represents clipping boundaries for point cloud entities.
+
+  Library: AcDbPointCloudObj
+
+  <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudClipping
+{
+public:
+  /** \details
+  Defines clipping boundary types.
+  */
+  enum ClipType
+  {
+    CT_BOX = 1,       //Box
+    CT_RECTANGLE = 2, //Rectangular boundary
+    CT_POLYLINE = 3   //Polyline boundary
+  };
+
+  /** \details
+    Default constructor. Creates an OdDbPointCloudClipping instance.
+  */
+  OdDbPointCloudClipping();
+
+  bool operator == (const OdDbPointCloudClipping&) const;
+
+  /** \details
+    Check whether the boundary is valid. Returns true only if a number of vertices matches the boundary type: 
+    box or rectangular boundary must have two vertices, polygonal - at least 3 vertices.
+  */
+  bool isValid() const;
+
+  /** \details
+    Returns the number of vertices of this clipping boundary.
+  */
+  OdInt16 length() const;
+
+
+  /** \details
+    Sets this clipping boundary to a parallelepiped clipping boundary with the specified diagonal vertices.
+
+    \param p1 [in]  - First corner.
+    \param p2 [in]  - Second corner.
+  */
+	void setBox(OdGePoint3d const &, OdGePoint3d const &);
+
+  /** \details
+    Sets this clipping boundary to a rectangle clipping boundary with the specified diagonal vertices.
+
+    \param p1 [in]  - First vertex.
+    \param p2 [in]  - Second vertex.
+  */
+	void setRectangle(OdGePoint2d const &, OdGePoint2d const &);
+
+  /** \details
+    Sets this clipping boundary to a polygonal clipping boundary with the specified vertices.
+
+    \param points [in]  - Array of vertices.
+  */
+  void setBoundary(const OdGePoint2dArray &);
+
+  OdResult dwgInFields(OdDbDwgFiler *pFiler);
+  void dwgOutFields(OdDbDwgFiler *pFiler) const;
+
+  OdResult dxfInFields(OdDbDxfFiler *pFiler);
+  void dxfOutFields(OdDbDxfFiler *pFiler, int &ind1, int &ind2, int &ind3) const;
+
+  /** \details
+    Returns the type of this clipping boundary.
+  */
+  ClipType type() const;
+
+  /** \details
+    Sets the maximum value of Z-coordinate.
+  */
+  void setZMax(const double);
+
+  /** \details
+    Sets the minimum value of Z-coordinate.
+  */
+  void setZMin(const double);
+
+/** \details
+    Returns the minimum value of Z-coordinate.
+*/
+  double zMax() const;
+
+  /** \details
+    Returns the minimum value of Z-coordinate.
+  */
+  double zMin() const;
+
+
+  /** \details
+    Sets the boundary to inverted.
+  */
+  void setInverted(const bool);
+
+  /** \details
+    Returns true if only the boundary is inverted.
+  */
+  bool isInverted() const;
+
+  /** \details
+    Returns closed boundary
+  */
+  const OdGePoint2dArray& vertices() const;
+
+
+private:
+  
+  OdInt16 m_type;
+  bool m_inverted;
+  double m_zMax;
+  double m_zMin;
+
+  OdGePoint2dArray m_points;
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudColorMap.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudColorMap.h
new file mode 100755
index 0000000..0199b3e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudColorMap.h
@@ -0,0 +1,213 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_POINTCLOUDCOLORMAP_
+#define _OD_DB_POINTCLOUDCOLORMAP_
+
+#include "DbPointCloudObjExports.h"
+#include "DbObject.h"
+#include "StringArray.h"
+
+#include "TD_PackPush.h"
+
+/** <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdPoinCloudColorSchemeCollectionReactor
+{
+public: 
+
+  virtual void PoinCloudColorSchemeCollectionChanged( class OdDbPointCloudColorMap* coloMap ) = 0;
+
+  virtual ~OdPoinCloudColorSchemeCollectionReactor();
+};
+
+/** <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudColorRamp
+{
+  friend class OdDbPointCloudColorMap;
+
+public:
+
+  OdDbPointCloudColorRamp();
+
+  OdDbPointCloudColorRamp( const OdDbPointCloudColorRamp& source );
+
+  OdDbPointCloudColorRamp& operator = (const OdDbPointCloudColorRamp& src);
+
+  ~OdDbPointCloudColorRamp();
+
+  OdInt32 numColors() const;
+
+  OdResult setNumColors( int count );
+
+  OdCmEntityColor color( int index ) const;
+
+  void setColor( int index, OdCmEntityColor color ) const;
+
+  bool visibility( int index ) const;
+
+  void setVisibility( int index, bool visibility );
+
+  void setFrom( const OdDbPointCloudColorRamp *source );
+
+  const OdString name() const;
+
+  void setName( const OdString &name );
+
+
+private:
+
+  // File IO
+  OdResult  dwgInFields( OdDbDwgFiler *pFiler );
+  void  dwgOutFields( OdDbDwgFiler *pFiler ) const;
+  OdResult  dxfInFields( OdDbDxfFiler *pFiler );
+  void  dxfOutFields( OdDbDxfFiler *pFiler ) const;
+
+  class OdDbPointCloudColorRampImpl *pImpl;
+};
+
+/** <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudClassificationColorRamp
+{
+  friend class OdDbPointCloudColorMap;
+
+public:
+
+  OdDbPointCloudClassificationColorRamp();
+
+  OdDbPointCloudClassificationColorRamp( const OdDbPointCloudClassificationColorRamp& source );
+
+  OdDbPointCloudClassificationColorRamp& operator = (const OdDbPointCloudClassificationColorRamp& src);
+
+  ~OdDbPointCloudClassificationColorRamp();
+
+  OdInt32 numColors() const;
+
+  OdResult setNumColors( int count );
+
+  OdCmEntityColor color( int index ) const;
+
+  void setColor( int index, OdCmEntityColor color ) const;
+
+  bool visibility( int index ) const;
+
+  void setVisibility( int index, bool visibility );
+
+  void setFrom( const OdDbPointCloudClassificationColorRamp *source );
+
+  const OdString name() const;
+
+  void setName( const OdString &name );
+
+private:
+
+  // File IO
+  OdResult  dwgInFields( OdDbDwgFiler *pFiler );
+  void  dwgOutFields( OdDbDwgFiler *pFiler ) const;
+  OdResult  dxfInFields( OdDbDxfFiler *pFiler );
+  void  dxfOutFields( OdDbDxfFiler *pFiler ) const;
+
+  class OdDbPointCloudClassificationColorRampImpl *pImpl;
+};
+
+/** \details
+This class represents PointCloudColorMap objects in an OdDbDatabase instance.
+
+Library: AcDbPointCloudObj
+
+<group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudColorMap : public OdDbObject
+{
+public:
+
+  ODDB_DECLARE_MEMBERS( OdDbPointCloudColorMap );
+
+  OdDbPointCloudColorMap();
+
+  virtual ~OdDbPointCloudColorMap(){};
+
+  static OdResult getColorMap( OdDbObjectId& id, OdDbDatabase *pDb, bool bCreateIfNone = true );
+
+  void addColorSchemeCollectionReactor( OdPoinCloudColorSchemeCollectionReactor *pReactor );
+
+  void removeColorSchemeCollectionReactor( OdPoinCloudColorSchemeCollectionReactor *pReactor );
+
+  void notifyColorSchemeCollectionReactor();
+
+  const OdString defaultIntensityColorScheme() const;
+
+  void setDefaultIntensityColorScheme( const OdString guid );
+
+  const OdString defaultElevationColorScheme() const;
+
+  void setDefaultElevationColorScheme( const OdString guid );
+
+  const OdString defaultClassificationColorScheme() const;
+
+  void setDefaultClassificationColorScheme( const OdString guid );
+
+  OdStringArray colorSchemeGUIDs() const;
+
+  bool colorScheme( const OdChar *GUID, OdDbPointCloudColorRamp& target ) const;
+
+  bool hasColorScheme( const OdChar *GUID ) const;
+
+  bool setColorScheme( const OdChar *GUID, const OdDbPointCloudColorRamp& target );
+
+  bool deleteColorScheme( const OdChar *GUID );
+
+  OdStringArray classificationSchemeGUIDs() const;
+
+  bool classificationScheme( const OdChar *GUID, OdDbPointCloudClassificationColorRamp& target ) const;
+
+  bool hasClassificationScheme( const OdChar *GUID ) const;
+
+  bool setClassificationScheme( const OdChar *GUID, const OdDbPointCloudClassificationColorRamp& target );
+
+  bool deleteClassificationScheme( const OdChar *GUID );
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  void getColorSchemeInUse( OdStringArray &GUIDs );
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  void getClassificationColorSchemeInUse( OdStringArray &GUIDs );
+
+  // File IO
+  virtual OdResult dwgInFields( OdDbDwgFiler *pFiler );
+  virtual void dwgOutFields( OdDbDwgFiler *pFiler ) const;
+  virtual OdResult dxfInFields( OdDbDxfFiler *pFiler );
+  virtual void dxfOutFields( OdDbDxfFiler *pFiler ) const;
+};
+
+
+typedef OdSmartPtr<OdDbPointCloudColorMap> OdDbPointCloudColorMapPtr;
+#include "TD_PackPop.h"
+
+#endif //_OD_DB_POINTCLOUDCOLORMAP_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudCropping.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudCropping.h
new file mode 100755
index 0000000..5911542
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudCropping.h
@@ -0,0 +1,154 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_POINTCLOUDCROPPING_
+#define _OD_DB_POINTCLOUDCROPPING_
+
+#include "TD_PackPush.h"
+#include "DbPointCloudObjExports.h"
+#include "DbObject.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GePoint2dArray.h"
+#include "Ge/GePlane.h"
+
+
+class OdGiGeometry;
+
+/** \details
+  This class represents cropping boundaries for point cloud entities.
+
+  Library: AcDbPointCloudObj
+
+  <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudCropping
+{
+public:
+  /** \details
+  Defines cropping boundary types.
+  */
+  enum CropType
+  {
+    CT_INVALID = 0,       //Box
+    CT_RECTANGLE,         //Rectangular boundary
+    CT_POLYLINE,          //Polyline boundary
+    CT_CIRCULAR           //Circular bounfary 
+  };
+
+  /** \details
+    Default constructor. Creates an OdDbPointCloudCropping instance.
+  */
+  OdDbPointCloudCropping();
+
+  bool operator == (const OdDbPointCloudCropping&) const;
+
+  /** \details
+    Check whether the boundary is valid. Returns true only if a number of vertices matches the boundary type: 
+    box or rectangular boundary must have two vertices, polygonal - at least 3 vertices.
+  */
+  bool isValid() const;
+
+  /** \details
+    Returns the number of vertices of this cropping boundary.
+  */
+  OdInt16 length() const; 
+
+  /** \details
+    Returns the type of this cropping boundary.
+  */
+  CropType type() const;
+
+  /** \details
+    Set type of this cropping boundary.
+  */
+  void setCropType( CropType type );
+
+  /** \details
+    Sets the boundary to inverted.
+  */
+  void setInverted(const bool);
+
+  /** \details
+    Returns true if only the boundary is inverted.
+  */
+  bool isInverted() const;
+
+  /** \details
+    Returns closed boundary
+  */
+  const OdGePoint3dArray& get() const;
+
+  /** \details
+    Returns closed boundary
+  */
+  void set( const OdGePoint3dArray& points) ;
+
+  /** \details
+
+  */
+  bool getCropPlane( OdGePlane& plane ) const;
+
+  /** \details
+
+  */
+  void setCropPlane( const OdGePlane& plane ) ;
+
+  /** \details
+
+  */
+  void setInside(const bool);
+
+  /** \details
+
+  */
+  bool isInside() const;
+
+  /** \details
+
+  */
+  void clear();
+
+  /** \details
+
+  */
+  virtual void draw( OdGiGeometry &geom );
+
+  OdResult dwgInFields( OdDbDwgFiler *pFiler );
+  void dwgOutFields( OdDbDwgFiler *pFiler ) const;
+
+  OdResult dxfInFields( OdDbDxfFiler *pFiler );
+  void dxfOutFields( OdDbDxfFiler *pFiler, OdInt16 &dvfInt8, OdInt16 &dxfInt32, OdInt16 &dxfXCoord, OdInt16 &dxfNormalX ) const;
+
+
+private:
+  
+  OdInt8 m_type;
+  bool m_isInside;
+  bool m_inverted;
+  OdGePlane m_plane;
+  OdGePoint3dArray m_points;
+};
+
+#include "TD_PackPop.h"
+
+#endif //_OD_DB_POINTCLOUDCROPPING_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDef.h
new file mode 100755
index 0000000..810d396
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDef.h
@@ -0,0 +1,236 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBPOINTCLOUDDEF_INCLUDED_
+#define _ODDBPOINTCLOUDDEF_INLUDED_ /* { Secret} */
+
+#include "DbPointCloudObjExports.h"
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/** \details
+    This class defines Point Cloud Definition objects in an OdDbDatabase instance.
+
+    \sa
+    AcDbPointCloudObj
+
+    \remarks
+    Point Cloud Definitions (OdDbPointCloudDef objects) work with Point Cloud (OdDbPointCloud) entities
+    in much the same way that Raster Image Definitions (OdDbRasterImageDef objects) work with Image References
+    (OdDbRasterImage entities).
+
+    <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudDef : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPointCloudDef);
+
+  /** \details
+    Default constructor. Constructs an empty OdDbPointCloudDef object.
+  */
+  OdDbPointCloudDef();
+
+  // Properties
+  /** \details
+    Returns the name of the external file containing the point cloud data (.pcg or .isd) for this PointCloud Definition object (as it is stored in file).
+    
+    \remarks
+    This PointCloudDef object must be open for reading.
+  */
+  OdString sourceFileName() const;
+
+  /** \details
+    Sets the name of the external file containing the point cloud data (.pcg or .isd) for this PointCloud Definition object (as it is stored in file).
+    
+    \note
+    Returns eOk if the file is accessible or eInvalidInput otherwise.
+  */
+  OdResult setSourceFileName(const OdString&);
+
+  /** \details
+    Returns the type of the source file containing the point cloud data for this PointCloud Definition object (as it is stored in file).
+
+    \remarks
+    This PointCloudDef object must be open for reading.
+  */
+  OdString  fileType(void) const;
+
+
+  /** \details
+    Returns the path name of the actual point cloud file being currently used for this PointCloud Definition object.
+
+    \remarks
+    This PointCloudDef object must be open for reading.
+  */
+  OdString activeFileName() const;
+
+
+  /** \details
+    Returns the path name of the actual point cloud file being currently used for this PointCloud Definition object.
+
+    \note
+    Returns eOk if the file is accessible or eInvalidInput otherwise.
+  */
+  OdResult setActiveFileName(const OdString&);
+
+  
+  /** \details
+    Returns true if and only if the point cloud file for this PointCloud definition object is loaded.
+  */
+  bool  isLoaded() const;
+
+
+  /** \details
+    Currently not implemented.
+  */
+  OdResult load(bool bModifyDatabase);
+
+  /** \details
+    Currently not implemented.
+  */
+  void unload(bool bModifyDatabase);
+
+  /** \details
+    Returns the number of OdDbPointCloud entities in the current drawing that are dependent upon this object.
+    
+    \param pbLocked [in]  If it's non-zero, then this function will set the true value at that pointer if any dependent entities reside on locked layers, or set false otherwise.
+  */
+  int entityCount(bool *) const;
+
+  /** \details
+    Returns the total number of points of this OdDbPointCloudDef object.
+  */
+  OdUInt64 totalPointsCount() const;
+
+  /** \details
+    Returns the default height of this OdDbPointCloudDef object.
+  */
+  double defaultHeight() const;
+
+  /** \details
+    Returns the default length of this OdDbPointCloudDef object.
+  */
+  double defaultLength() const;
+
+  /** \details
+    Returns the default width of this OdDbPointCloudDef object.
+  */
+  double defaultWidth() const;
+
+
+  /** \details
+    Calculates the extents of this OdDbPointCloudDef object.
+
+    \note
+    Returns eOk if the extents are valid or eInvalidExtents otherwise.
+  */
+  OdResult  getNativeCloudExtent(OdGeExtents3d &) const;
+
+  /** \details
+    Sets the extents for this OdDbPointCloudDef object.
+
+    \param exts [in]  Extents to be set.
+  */
+  void setExtents(const OdGeExtents3d &);
+
+  // File IO
+
+  virtual OdResult  dwgInFields(OdDbDwgFiler *);
+  virtual void  dwgOutFields(OdDbDwgFiler *) const;
+  virtual OdResult  dxfInFields(OdDbDxfFiler *);
+  virtual void  dxfOutFields(OdDbDxfFiler *) const;
+
+  static int classVersion();
+
+  // Helper functions to access Point Cloud Definition dictionary
+  /** \details
+    Returns Pointcloud Dictionary ID. Creates the dictionary, if one is not already present, in the specified OdDbDatabase instance.
+
+    \param Db [in]  The database.
+  */
+  static OdDbObjectId createPointCloudDictionary(OdDbDatabase&);
+
+  /** \details
+    Returns the Object ID of the point cloud dictionary in the specified OdDbDatabase instance.
+    \param Db [in]  The database.  
+  */
+  static OdDbObjectId pointCloudDictionary(const OdDbDatabase&);
+
+#if 0
+  OdResult  createThumbnailBitmap(struct tagBITMAPINFO * &,int,int) const;
+  bool  getPointCloudFileVersion(int &,int &) const;
+  bool  hasProperty(const OdString&,bool &) const;
+  bool  saveToVersion(const OdString&,int);
+#endif
+
+// OdDbObject overridden methods
+  virtual OdResult subErase(bool erasing) ODRX_OVERRIDE;
+  virtual void subClose() ODRX_OVERRIDE;
+  virtual void subHandOverTo(OdDbObject* pNewObj) ODRX_OVERRIDE;
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& idMap, OdDbObject* owner, bool bPrimary) const ODRX_OVERRIDE;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPointCloudDef object pointers.
+*/
+typedef OdSmartPtr<OdDbPointCloudDef> OdDbPointCloudDefPtr;
+
+
+/** \details
+  This class represents the point cloud definition reactor.
+ 
+  Library: AcDbPointCloudObj
+
+  <group OdDbPointCloud_Classes>
+*/
+class  DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudDefReactor : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPointCloudDefReactor);
+	OdDbPointCloudDefReactor();
+
+	static int classVersion();
+
+  // File IO
+  virtual OdResult  dwgInFields(OdDbDwgFiler *);
+  virtual void  dwgOutFields(OdDbDwgFiler *) const;
+  virtual OdResult  dxfInFields(OdDbDxfFiler *);
+  virtual void  dxfOutFields(OdDbDxfFiler *) const;
+
+  // Notifications
+  virtual void erased(OdDbObject const * , bool) ;   // not implemented
+	virtual void modified(OdDbObject const * ) ;
+
+	static bool isEnabled();
+	static void setEnable(bool);
+private:
+  static bool m_bEnabled;
+};
+typedef OdSmartPtr<OdDbPointCloudDefReactor> OdDbPointCloudDefReactorPtr;
+
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDefEx.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDefEx.h
new file mode 100755
index 0000000..118ebfa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudDefEx.h
@@ -0,0 +1,252 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBPOINTCLOUDDEFEX_INCLUDED_
+#define _ODDBPOINTCLOUDDEFEX_INCLUDED_
+
+
+#include "DbPointCloudObjExports.h"
+#include "StringArray.h"
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/** <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudDefEx : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS( OdDbPointCloudDefEx );
+
+  enum PropState
+  {
+    kNone = -1,
+    kSome = 0,
+    kAll = 1
+  };
+
+  enum Property
+  {
+    kColor = 1,
+    kIntensity = 2,
+    kClassification = 3,
+    kNormal = 4,
+    kSegmentation = 5,
+    kGeoGraphic = 6
+  };
+
+  /** \details
+  Default constructor. Constructs an empty OdDbPointCloudDefEx object.
+  */
+  OdDbPointCloudDefEx();
+
+  /** \details
+    Returns the name of the external file containing the point cloud ex data (.pcg or .isd) for this PointCloudEx Definition object (as it is stored in file).
+    
+    \remarks
+    This PointCloudDefEx object must be open for reading.
+  */
+  OdString sourceFileName() const;
+
+  /** \details
+    Sets the name of the external file containing the point cloud ex data (.pcg or .isd) for this PointCloudEx Definition object (as it is stored in file).
+    
+    \note
+    Returns eOk if the file is accessible or eInvalidInput otherwise.
+  */
+  OdResult setSourceFileName(const OdString&);
+
+  /** \details
+  Returns the path name of the actual point cloud file being currently used for this PointCloudEx Definition object.
+
+  \remarks
+  This PointCloudDef object must be open for reading.
+  */
+  const OdChar * activeFileName() const;
+
+
+  /** \details
+  Returns the path name of the actual point cloud file being currently used for this PointCloudEx Definition object.
+
+  \note
+  Returns eOk if the file is accessible or eInvalidInput otherwise.
+  */
+  OdResult setActiveFileName( const OdChar * pPathName );
+
+  /** \details
+    Returns the type of the source file containing the point cloud data for this PointCloudEx Definition object (as it is stored in file).
+
+    \remarks
+    This PointCloudDefEx object must be open for reading.
+  */
+  const OdChar * fileType() const;
+
+  // Helper functions to access Point Cloud Ex Definition dictionary
+  /** \details
+    Returns PointCloudEx Dictionary ID. Creates the dictionary, if one is not already present, in the specified OdDbDatabase instance.
+
+    \param Db [in]  The database.
+  */
+  static OdDbObjectId createPointCloudExDictionary(OdDbDatabase *pDb);
+
+  /** \details
+    Returns the Object ID of the point cloud dictionary in the specified OdDbDatabase instance.
+    \param Db [in]  The database.  
+  */
+  static OdDbObjectId pointCloudExDictionary(const OdDbDatabase *pDb);
+
+  /** \details
+    
+  */
+  static OdDbDictionary* getPointCloudExDictionary( OdDbPointCloudDefEx *pDefEx );
+
+  /** \details
+    Returns true if and only if the point cloud file for this PointCloudEx definition object is loaded.
+  */
+  bool  isLoaded() const;
+
+  /** \details
+
+  */
+  OdResult load();
+
+  /** \details
+
+  */
+  void unload();
+
+  /** \details
+    Returns the number of OdDbPointCloudEx entities in the current drawing that are dependent upon this object.
+    
+    \param pbLocked [in]  If it's non-zero, then this function will set the true value at that pointer if any dependent entities reside on locked layers, or set false otherwise.
+  */
+  int entityCount(bool *pbLocked) const;
+
+  /** \details
+    Returns the total number of points of this OdDbPointCloudDefEx object.
+  */
+  OdUInt64 totalPointsCount() const;
+
+  /** \details
+    Returns the default height of this OdDbPointCloudDefEx object.
+  */
+  double defaultHeight() const;
+
+  /** \details
+    Returns the default length of this OdDbPointCloudDefEx object.
+  */
+  double defaultLength() const;
+
+  /** \details
+    Returns the default width of this OdDbPointCloudDefEx object.
+  */
+  double defaultWidth() const;
+
+  /** \details
+    Calculates the extents of this OdDbPointCloudDefEx object.
+
+    \note
+    Returns eOk if the extents are valid or eInvalidExtents otherwise.
+  */
+  OdResult extents( OdGeExtents3d &exts ) const;
+
+  /** \details
+  NOT INPLEMENTED
+  */
+  int totalRegionsCount() const;
+
+  /** \details
+  NOT INPLEMENTED
+  */
+  int totalScansCount() const;
+
+  /** \details
+  NOT INPLEMENTED
+  */
+  const OdChar * coordinateSystemName() const;
+
+  /** \details
+  NOT INPLEMENTED
+  */
+  const OdChar * getRcsFilePath( const OdString &guid) const;
+
+  /** \details
+  NOT INPLEMENTED
+  */
+  void getAllRcsFilePaths( OdStringArray &list ) const;
+
+  /** \details
+  NOT INPLEMENTED
+  */
+  PropState hasProperty( Property prop ) const;
+
+  /** \details
+  NOT INPLEMENTED
+  */
+  OdResult createThumbnailBitmap( BITMAPINFO*& pBmpInfo, int width, int height ) const;
+
+
+
+  // File IO
+  virtual OdResult  dwgInFields( OdDbDwgFiler * );
+  virtual void  dwgOutFields( OdDbDwgFiler * ) const;
+  virtual OdResult  dxfInFields( OdDbDxfFiler * );
+  virtual void  dxfOutFields( OdDbDxfFiler * ) const;
+
+  static int classVersion();
+
+};
+
+typedef OdSmartPtr<OdDbPointCloudDefEx> OdDbPointCloudDefExPtr;
+
+/** <group OdDbPointCloud_Classes>
+*/
+class  DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudDefReactorEx : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS( OdDbPointCloudDefReactorEx );
+  OdDbPointCloudDefReactorEx( );
+
+  static int classVersion();
+
+  // File IO
+  virtual OdResult  dwgInFields( OdDbDwgFiler * );
+  virtual void  dwgOutFields( OdDbDwgFiler * ) const;
+  virtual OdResult  dxfInFields( OdDbDxfFiler * );
+  virtual void  dxfOutFields( OdDbDxfFiler * ) const;
+
+  // Notifications
+  virtual void erased( OdDbObject const *, bool );   // not implemented
+  virtual void modified( OdDbObject const * );
+
+  static bool isEnabled();
+  static void setEnable( bool );
+private:
+  static bool m_bEnabled;
+};
+
+typedef OdSmartPtr<OdDbPointCloudDefReactorEx> OdDbPointCloudDefReactorExPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_ODDBPOINTCLOUDDEFEX_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudEx.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudEx.h
new file mode 100755
index 0000000..a055ed8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudEx.h
@@ -0,0 +1,377 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_POINTCLOUDEX_
+#define _OD_DB_POINTCLOUDEX_
+
+#include "DbPointCloudObjExports.h"
+#include "DbPointCloudCropping.h"
+#include "DbPointCloudIntensityStyle.h"
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+This class represents PointCloudEx entities in an OdDbDatabase instance.
+
+Library: AcDbPointCloudObj
+
+<group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudEx : public OdDbEntity
+{
+public:
+
+  ODDB_DECLARE_MEMBERS( OdDbPointCloudEx );
+
+  /** \details
+    Default constructor.
+  */
+  OdDbPointCloudEx();
+
+  /** \details
+    Destructor.
+  */
+  ~OdDbPointCloudEx() {}
+
+  /** \details
+  Returns the Object ID of the OdDbPointCloudDefEx object associated with this point cloud ex entity.
+  */
+  OdDbObjectId pointCloudDefExId() const;
+
+  /** \details
+  Sets the Object ID of the OdDbPointCloudDefEx object associated with this point cloud ex entity.
+
+  \param pointCloudDefExId [in]  Object ID of the point cloud ex to be associated with this point cloud ex entity.
+  */
+  void setPointCloudDefExId( const OdDbObjectId pointCloudDefExId );  
+
+  /** \details
+  Returns the Object ID of the OdDbPointCloudDefReactorEx object associated with this point cloud ex entity.
+
+  \remarks
+  Each OdDbPointCloudEx object must have an OdDbPointCloudDefReactorEx associated with the OdDbPointCloudDefEx object it is using.
+
+  */
+  OdDbObjectId reactorId() const;
+
+  /** \details
+  Sets the Object ID of the OdDbPointCloudDefReactorEx object associated with this point cloud entity.
+
+  \param pointCloudDefReactorExId [in]  Object ID of a reactor for this point cloud ex entity.
+
+  \remarks
+  Each OdDbPointCloudEx object must have an OdDbPointCloudDefReactorEx associated with the OdDbPointCloudDefEx object it is using.
+  */
+  void setReactorId( const OdDbObjectId pointCloudDefReactorExId );
+
+  /** \details
+  Returns true if the point cloud entity ex is locked or false otherwise.
+  */
+  bool locked() const;
+
+  /** \details
+  Sets the point cloud entity ex to be locked.
+  */
+  void setLocked( bool bLocked );
+
+  /** \details
+  
+  */
+  double scale() const;
+
+  /** \details
+  
+  */
+  void setScale( double scale );
+
+  /** \details
+
+  */
+  double rotation() const;
+
+  /** \details
+
+  */
+  void setRotation( double newRotation );
+
+  /** \details
+
+  */
+  OdGePoint3d location() const;
+
+  /** \details
+
+  */
+  void setLocation( OdGePoint3d newLocation );
+
+  /** \details
+
+  */
+  void getNativeCloudExtent( OdGeExtents3d extents ) const;
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  unsigned int getVisiblePointCount( OdGeExtents3d extents );
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  unsigned int getLoadedVisiblePointCount( OdGeExtents3d extents );
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  unsigned int getDisplayedVisiblePointCount( OdGeExtents3d extents );
+
+  /** \details
+
+  */
+  bool getActiveFileName( OdString& fileName ) const;
+
+  /** \details
+
+  */
+  bool setActiveFileName( const OdChar* strActiveFileName );
+
+  /** \details
+
+  */
+  OdString getPointCloudName() const;
+
+  /** \details
+
+  */
+  OdResult setPointCloudName( const OdString& name );
+
+  //
+
+  /** \details
+
+  */
+  OdDbPointCloudCropping* getConstPointCloudCropping( int index );
+
+  /** \details
+
+  */
+  OdDbPointCloudCropping const* getConstPointCloudCropping( int index ) const;
+
+  /** \details
+
+  */
+  void addCroppingBoundary( OdDbPointCloudCropping const &boundary );
+
+  /** \details
+  
+  */
+  OdResult clearCropping();
+
+  /** \details
+
+  */
+  OdResult removeLastCropping();
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  bool getCroppingInvert() const;
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  OdResult setCroppingInvert( bool bInvert );
+
+  /** \details
+  NOT IMPLEMENTED
+  */
+  OdResult setInCreatingCroppingMode( bool bCreating );
+
+  /** \details
+  Returns true only if this point cloud ex entity is displayed as clipped.
+  */
+  bool showCropping() const;
+
+  /** \details
+  Set whether this point cloud ex entity is displayed as clipped.
+
+  \param cropping [in]  Value for option.
+
+  \note
+  Returns eOk.
+  */
+  OdResult setShowCropping( bool bShowCropping );
+
+  //
+
+  enum StylizationType
+  {
+    kTrueColor = 1,
+    kSingleColor,
+    kNormalRamp,
+    kHeightRamp,
+    kIntensityRamp,
+    kClassificationRamp
+  };
+
+  /** \details
+
+  */
+  StylizationType stylizationType() const;
+
+  /** \details
+
+  */
+  OdResult setStylizationType( StylizationType type );
+
+  //
+
+  /** \details
+
+  */
+  OdString getCurrentColorScheme() const;
+
+  /** \details
+
+  */
+  OdResult setCurrentColorScheme( const OdString &guid );
+
+  /** \details
+  test 
+  */
+  OdString getColorSchemeForStylization( StylizationType type ) const;
+
+  /** \details
+  test
+  */
+  OdResult setColorSchemeForStylization( const OdString &guid, StylizationType type );
+
+  //
+
+  enum DisplayOptionOutOfRange
+  {
+    kUseMinMaxColors = 0,
+    kUseRGBScanColors,
+    kHidePoints
+  };
+
+  /** \details
+
+  */
+  bool showIntensityAsGradient() const;
+
+  /** \details
+
+  */
+  void setShowIntensityAsGradient( bool bShowAsGradient );
+
+  /** \details
+
+  */
+  OdInt32 minIntensity() const;
+
+  /** \details
+
+  */
+  OdInt32 maxIntensity() const;
+
+  /** \details
+
+  */
+  OdResult setMinMaxIntensity( OdInt32 min, OdInt32 max );
+
+  /** \details
+
+  */
+  DisplayOptionOutOfRange intensityOutOfRangeBehavior() const;
+
+  /** \details
+
+  */
+  void setIntensityOutOfRangeBehavior( DisplayOptionOutOfRange displayOption );
+
+  /** \details
+
+  */
+  bool showElevationAsGradient() const;
+
+  /** \details
+
+  */
+  void setShowElevationAsGradient( bool bShowAsGradient );
+
+  /** \details
+
+  */
+  double minElevation() const;
+
+  /** \details
+
+  */
+  double maxElevation() const;
+
+  /** \details
+
+  */
+  OdResult setMinMaxElevation( double min, double max );
+
+  /** \details
+
+  */
+  bool elevationApplyToFixedRange() const;
+
+  /** \details
+
+  */
+  void setElevationApplyToFixedRange( bool bFixedRange );
+
+  /** \details
+
+  */
+  DisplayOptionOutOfRange elevationOutOfRangeBehavior() const;
+
+  /** \details
+
+  */
+  void setElevationOutOfRangeBehavior( DisplayOptionOutOfRange displayOption );
+
+
+
+  OdResult subTransformBy( const OdGeMatrix3d& xform );
+  bool subWorldDraw( OdGiWorldDraw* pWd ) const;
+  void subViewportDraw( OdGiViewportDraw* pVd ) const;
+
+  // File IO
+  virtual OdResult  dwgInFields( OdDbDwgFiler * );
+  virtual void  dwgOutFields( OdDbDwgFiler * ) const;
+  virtual OdResult  dxfInFields( OdDbDxfFiler * );
+  virtual void  dxfOutFields( OdDbDxfFiler * ) const;
+
+};
+
+typedef OdSmartPtr<OdDbPointCloudEx> OdDbPointCloudExPtr;
+
+#include "TD_PackPop.h"
+
+
+#endif //_OD_DB_POINTCLOUDEX_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudHostPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudHostPE.h
new file mode 100755
index 0000000..7b40e1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudHostPE.h
@@ -0,0 +1,209 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_DB_POINCLOUD_HOST__
+#define __OD_DB_POINCLOUD_HOST__
+
+#include "DbPointCloudObjExports.h"
+#include "Ge/GeExtents3d.h"
+
+class OdDbPointCloud;
+class OdDbPointCloudDef;
+class OdGiWorldDraw;
+class OdGiViewportDraw;
+class OdDbPointCloudEx;
+class OdDbPointCloudDefEx;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents an interface of a Point Cloud Object within the Teigha vectorization framework.
+
+    <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudItem : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPointCloudItem);
+
+  /** \details
+    Returns extents of Point Cloud Object.
+  */
+  virtual OdGeExtents3d extents() const = 0;
+
+  /** \details
+    Returns total number of points in Point Cloud Object.
+  */
+  virtual OdInt64 pointsCount() const = 0;
+
+
+  /** \details
+    Creates a viewport-independent geometric representation of a Point Cloud Entity.
+    
+    \remarks
+    Returns true if and only if the geometric representation can be generated in a
+    viewport-independent manner. 
+
+    \note
+    A return value of false indicates that viewportDrawPoints() must be called for this object.
+
+    Transformations and clipping boundaries are taken care of outside of this function by the Teigha framework.
+
+    The 3D GS will call this function at least once, but may cache subsequent display updates.
+
+    \param pEnt [in] Pointer to the OdDbPointCloud entity.
+    \param pWd [in]  Pointer to the OdGiWorldDraw interface.
+  */
+  virtual bool worldDrawPoints(const OdDbPointCloud* pEnt, OdGiWorldDraw* pWd) const = 0;
+
+  /** \details
+    Creates a viewport-dependent geometric representation of a Point Cloud Entity.
+
+    \remarks
+    This function is called once per viewport.
+
+    Transformations and clipping boundaries are taken care of outside of this function by the Teigha framework.
+
+    \param pEnt [in] Pointer to the OdDbPointCloud entity.
+    \param pVd [in] Pointer to the OdGiViewportDraw interface.
+  */
+  virtual void viewportDrawPoints(const OdDbPointCloud* pEnt, OdGiViewportDraw* pWd) const = 0;
+
+};
+
+typedef OdSmartPtr<OdDbPointCloudItem> OdDbPointCloudItemPtr;
+
+/** \details
+    This class represents an interface of a Point Cloud Ex Object within the Teigha vectorization framework.
+
+    <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudExItem : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPointCloudExItem);
+
+  /** \details
+    Returns extents of Point Cloud Object.
+  */
+  virtual OdGeExtents3d extents() const = 0;
+
+  /** \details
+    Returns total number of points in Point Cloud Object.
+  */
+  virtual OdInt64 pointsCount() const = 0;
+
+
+  /** \details
+    Creates a viewport-independent geometric representation of a Point Cloud Entity.
+    
+    \remarks
+    Returns true if and only if the geometric representation can be generated in a
+    viewport-independent manner. 
+
+    \note
+    A return value of false indicates that viewportDrawPoints() must be called for this object.
+
+    Transformations and clipping boundaries are taken care of outside of this function by the Teigha framework.
+
+    The 3D GS will call this function at least once, but may cache subsequent display updates.
+
+    \param pEnt [in] Pointer to the OdDbPointCloud entity.
+    \param pWd [in]  Pointer to the OdGiWorldDraw interface.
+  */
+  virtual bool worldDrawPoints(const OdDbPointCloudEx* pEnt, OdGiWorldDraw* pWd) const = 0;
+
+  /** \details
+    Creates a viewport-dependent geometric representation of a Point Cloud Entity.
+
+    \remarks
+    This function is called once per viewport.
+
+    \note
+    Transformations and clipping boundaries are taken care of outside of this function by the Teigha framework.
+
+    \param pEnt [in] Pointer to the OdDbPointCloud entity.
+    \param pVd [in] Pointer to the OdGiViewportDraw interface.
+  */
+  virtual void viewportDrawPoints(const OdDbPointCloudEx* pEnt, OdGiViewportDraw* pWd) const = 0;
+
+};
+
+typedef OdSmartPtr<OdDbPointCloudExItem> OdDbPointCloudExItemPtr;
+
+/** \details
+  This protocol extension, attached to the OdDbPointCloudDefinition class, returns
+  a pointer to an object of the class implementing the OdDbPointCloudItem interface given a file path
+  to a Point Cloud file.
+
+    <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudHostPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPointCloudHostPE);
+
+  OdDbPointCloudHostPE() {}
+
+  /** \details
+    Returns the OdResult status of the operation.
+
+    \param strPath [in] File path.
+    \param item [out] Pointer to object of class implementing the OdDbPointCloudItem interface for specified file.
+  */
+  virtual OdResult load(const OdString& strPath, OdDbPointCloudItemPtr& item) = 0;
+};
+
+typedef OdSmartPtr<OdDbPointCloudHostPE> OdDbPointCloudHostPEPtr;
+
+/** \details
+  This protocol extension, attached to the OdDbPointCloudDefinitionEx class, returns
+  a pointer to an object of the class implementing the OdDbPointCloudItem interface given a file path
+  to a Point Cloud file.
+
+    <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudExHostPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbPointCloudExHostPE);
+
+  OdDbPointCloudExHostPE() {}
+
+  /** \details
+    Returns the OdResult status of the operation.
+
+    \param strPath [in] File path.
+    \param item [out] Pointer to object of class implementing the OdDbPointCloudItem interface for specified file.
+  */
+  virtual OdResult load(const OdString& strPath, OdDbPointCloudExItemPtr& item) = 0;
+};
+
+typedef OdSmartPtr<OdDbPointCloudExHostPE> OdDbPointCloudExHostPEPtr;
+
+static const OdChar* szPointCloudHostModuleName = OD_T("PointCloudHost");
+
+#include "TD_PackPop.h"
+
+#endif // __OD_DB_POINCLOUD_HOST__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudIntensityStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudIntensityStyle.h
new file mode 100755
index 0000000..fed7c6a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudIntensityStyle.h
@@ -0,0 +1,154 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_POINTCLOUDINTENSITYSTYLE_
+#define _OD_DB_POINTCLOUDINTENSITYSTYLE_
+
+#include "TD_PackPush.h"
+#include "DbPointCloudObjExports.h"
+#include "DbObject.h"
+#include "DbArgbColor.h"
+
+// intensity color scheme (grayscale, spectrum, red, green, blue)
+// Maybe it the same as Intensity Style enum
+/*
+enum IntensityColorScheme 
+{
+  ISCHEME_GRAYSCALE = 0,
+  ISCHEME_SPECTRUM,
+  ISCHEME_SINGLE_RED,
+  ISCHEME_SINGLE_GREEN,
+  ISCHEME_SINGLE_BLUE
+};
+*/
+
+
+/** \details
+  This class represents intensity style for point cloud entities.
+
+  Library: AcDbPointCloudObj
+
+  <group OdDbPointCloud_Classes>
+*/
+class DBPOINTCLOUDOBJ_EXPORT OdDbPointCloudIntensityStyle
+{
+
+public:
+
+  /** \details
+    Default constructor. Creates an OdDbPointCloudIntensityStyle instance with the following parameters:
+    maxIntensity = 1.0, minIntensity = 0.0, highThreshold = 1.0, lowThreshold = 0.0.
+  */
+  OdDbPointCloudIntensityStyle();
+
+	/** \details
+    Returns the intensity high threshold value.
+	*/
+  double intensityHighThreshold() const;
+
+  /** \details
+    Returns the intensity low threshold value.
+  */
+	double intensityLowThreshold() const;
+
+  /** \details
+    Returns the intensity maximum value.
+  */
+	double maxIntensity() const;
+
+  /** \details
+    Returns the intensity minimum value.
+  */
+	double minIntensity() const;
+
+  /** \details
+    Sets the intensity high threshold value.
+
+    \param highThreshold [in]  Value to be set.
+  */
+	void setIntensityHighThreshold(const double);
+
+  /** \details
+    Sets the intensity low threshold value.
+
+    \param lowThreshold [in]  Value to be set.
+  */
+	void setIntensityLowThreshold(const double);
+
+  /** \details
+    Sets the intensity maximum value.
+
+    \param maxIntensity [in]  Value to be set.
+  */
+	void setMaxIntensity(const double);
+
+  /** \details
+    Sets the intensity minimum value.
+
+    \param minIntensity [in]  Value to be set.
+  */
+	void setMinIntensity(const double);
+
+  /** \details
+    Sets the bottom color.
+
+    \param color [in]  An ArgbColor object to define the bottom color.
+  */
+  void setColorBottom(const ArgbColor &);
+
+  /** \details
+    Sets the top color.
+
+    \param color [in]  An ArgbColor object to define the top color.
+  */
+  void setColorTop(const ArgbColor &);
+
+  /** \details
+    Calculates color according to the specified intensity value. 
+
+    \param intensityValue [in]  Input intensity value, must be in range (0, 1).
+
+    \note
+    An ArgbColor object with parameters calculated by specified intensity value.  
+  */
+ 	ArgbColor intensityColor(const double) const;
+
+  OdResult dwgInFields(OdDbDwgFiler *pFiler);
+  void dwgOutFields(OdDbDwgFiler *pFiler) const;
+
+  OdResult dxfInFields(OdDbDxfFiler *pFiler);
+  void dxfOutFields(OdDbDxfFiler *pFiler) const;
+
+private:
+  double m_maxIntensity;
+  double m_minIntensity;
+  double m_highThreshold;
+  double m_lowThreshold;
+
+  ArgbColor m_topColor;
+  ArgbColor m_bottomColor;
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjExports.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjExports.h
new file mode 100755
index 0000000..0f49f57
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjExports.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef _DBPOINTCLOUDOBJEXPORTS_DEFINED_
+#define _DBPOINTCLOUDOBJEXPORTS_DEFINED_
+
+#include "OdPlatformSettings.h"
+
+#ifdef ODDBPOINTCLOUDOBJ_EXPORTS
+#define DBPOINTCLOUDOBJ_EXPORT        OD_TOOLKIT_EXPORT
+#define DBPOINTCLOUDOBJ_EXPORT_STATIC OD_STATIC_EXPORT
+#else
+#define DBPOINTCLOUDOBJ_EXPORT        OD_TOOLKIT_IMPORT
+#define DBPOINTCLOUDOBJ_EXPORT_STATIC OD_STATIC_IMPORT
+#endif
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjModule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjModule.h
new file mode 100755
index 0000000..df3eec1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPointCloudObj/DbPointCloudObjModule.h
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DBPOINTCLOUDOBJMODULE_INCLUDED_
+#define _DBPOINTCLOUDOBJMODULE_INCLUDED_
+
+#include "RxDynamicModule.h"
+
+/** \details
+  This class represents the point cloud module.
+
+  Library: AcDbPointCloudObj
+
+  <group OdDbPointCloud_Classes>
+*/
+class DbPointCloudObjModule : public OdRxModule
+{
+protected:
+    void initApp();
+    void uninitApp();
+};
+
+typedef OdSmartPtr<DbPointCloudObjModule> DbPointCloudObjModulePtr;
+
+#endif //_DBPOINTCLOUDOBJMODULE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMesh.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMesh.h
new file mode 100755
index 0000000..f44c0e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMesh.h
@@ -0,0 +1,210 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_POLYFACE_MESH_
+#define _OD_DB_POLYFACE_MESH_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "DbObjectIterator.h"
+
+class OdDbPolyFaceMeshVertex;
+class OdDbSequenceEnd;
+class OdDbFaceRecord;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPolyFaceMeshVertex object pointers.
+*/
+typedef OdSmartPtr<OdDbPolyFaceMeshVertex> OdDbPolyFaceMeshVertexPtr;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSequenceEnd object pointers.
+*/
+typedef OdSmartPtr<OdDbSequenceEnd> OdDbSequenceEndPtr;
+
+/** \details
+    This class represents PolyFaceMesh entities in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+
+    \remarks
+    A PolyFaceMesh entity consists of a list of PolyFaceMeshVertex (coordinate) vertices 
+    and a list of OdDbFaceRecord face records.
+    Together they define a set of 3D faces.
+    
+    \note
+    Never derive from this class.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPolyFaceMesh : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPolyFaceMesh);
+
+  OdDbPolyFaceMesh();
+  
+  /** \details
+    Returns the number of vertices in this PolyFaceMesh entity (DXF 71).
+  */
+  OdInt16 numVertices() const;
+
+  /** \details
+    Returns the number of faces in this PolyFaceMesh entity (DXF 72).
+  */
+  OdInt16 numFaces() const;
+  
+  /** \details
+    Appends the specified face vertex onto this PolyFaceMesh entity.
+
+    \param pVertex [in]  Pointer to the vertex to append.
+
+    \remarks
+    Returns the Object ID of the appended face vertex.
+  */
+  OdDbObjectId appendVertex(
+    OdDbPolyFaceMeshVertex* pVertex);
+  
+  /** \details
+    Appends the specified face record onto this PolyFaceMesh entity.
+
+    \param pFaceRecord [in]  Pointer to the face record to append.
+
+    \remarks
+    Returns the Object ID of the newly appended face record.
+  */
+  OdDbObjectId appendFaceRecord(
+    OdDbFaceRecord* pFaceRecord);
+  
+  /** \details
+    Opens the specified vertex or face record owned by this PolyFaceMesh entity.
+
+    \param subObjId [in]  Object ID of vertex or face record to be opened.
+    \param mode [in]  Mode in which the object is being opened.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+    \remarks
+    Returns a SmartPointer to the opened object if successful, otherwise a null SmartPointer.
+  */
+  OdDbPolyFaceMeshVertexPtr openVertex(
+    OdDbObjectId subObjId, 
+    OdDb::OpenMode mode, 
+    bool openErasedOne = false);
+  
+  /** \details
+    Opens the OdDbSequenceEnd entity for this PolyfaceMesh entity.
+
+    \param mode [in]  Mode in which to open the OdDbSequenceEnd entity.
+
+    \remarks
+    Returns a SmartPointer to the newly opened OdDbSequenceEnd, or a null SmartPointer.
+
+    \note
+    This method is provided solely for applications that store XData on
+    OdDbSequenceEnd entities; this is not recommended. 
+  */
+  OdDbSequenceEndPtr openSequenceEnd(
+    OdDb::OpenMode mode);
+  
+  /** \details
+    Returns a SmartPointer to an iterator that can be used to traverse the vertices and face records owned 
+    by this PolyFaceMesh entity.
+  */
+  OdDbObjectIteratorPtr vertexIterator() const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  void subClose();
+
+  virtual bool isPlanar() const;
+  
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  /** \remarks
+    Creates and returns a set of OdDbFace entities.
+  */
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  /** \remarks
+    Creates and returns a set of OdDbFace entities.
+  */
+  virtual OdResult explodeGeometry(OdRxObjectPtrArray& entitySet) const;
+
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                        OdGsMarker gsMark, 
+                                        const OdGePoint3d& ,
+                                        const OdGeMatrix3d& , 
+                                        OdDbFullSubentPathArray& subentPaths, 
+                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
+
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                        OdGsMarkerArray& gsMarkers) const;
+
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbPolyFaceMesh object pointers.
+*/
+typedef OdSmartPtr<OdDbPolyFaceMesh> OdDbPolyFaceMeshPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMeshVertex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMeshVertex.h
new file mode 100755
index 0000000..276cda9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyFaceMeshVertex.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_POLYFACEMESH_VERTEX_
+#define _OD_DB_POLYFACEMESH_VERTEX_
+
+#include "TD_PackPush.h"
+
+#include "DbVertex.h"
+
+/** \details
+    This class represents OdDbPolyFaceMesh vertices in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPolyFaceMeshVertex : public OdDbVertex
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPolyFaceMeshVertex);
+
+  OdDbPolyFaceMeshVertex();
+  
+  /** \details
+    Returns the WCS position of this entity (DXF 10).
+  */
+  OdGePoint3d position() const;
+
+  /** \details
+    Sets the WCS position of this entity (DXF 10).
+    \param position [in]  Position.
+  */
+  void setPosition(
+    const OdGePoint3d& position);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subErase(
+    bool erasing);
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbPolyFaceMeshVertex object pointers.
+*/
+typedef OdSmartPtr<OdDbPolyFaceMeshVertex> OdDbPolyFaceMeshVertexPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMesh.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMesh.h
new file mode 100755
index 0000000..5934571
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMesh.h
@@ -0,0 +1,393 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_POLYGON_MESH_
+#define _OD_DB_POLYGON_MESH_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "DbObjectIterator.h"
+#include "DbPolygonMeshVertex.h"
+
+class OdDbSequenceEnd;
+typedef OdSmartPtr<OdDbPolygonMeshVertex> OdDbPolygonMeshVertexPtr;
+typedef OdSmartPtr<OdDbSequenceEnd> OdDbSequenceEndPtr;
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum PolyMeshType
+  {
+    kSimpleMesh        = 0, // Simple mesh
+    kQuadSurfaceMesh   = 5, // Quadratic B-spline fit
+    kCubicSurfaceMesh  = 6, // Cubic B-spline fit
+    kBezierSurfaceMesh = 8  // Bezier Surface fit
+  };
+}
+
+/** \details
+    This class represents PolygonMesh entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    \remarks
+    A PolygonMesh entity consists of a list of PolygonMeshVertex (coordinate) vertices
+    describing a M x N array of vertices, defining a set of 3D faces.   
+    
+    M is the number vertices in a row, N is the number of vertices in a column.
+    The first N vertices define the first column, the second N, the second column, etc.
+
+    The mesh may be closed in the M and/or N directions. A closed mesh is connected from the last row
+    or column to the first.
+
+    \note
+    Never derive from this class.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPolygonMesh : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPolygonMesh);
+
+  OdDbPolygonMesh();
+  
+  /** \details
+    Returns the mesh type of this PolygonMesh entity (DXF 75).
+    
+    \remarks
+    polyMeshType() returns one of the following:
+      
+    <table>
+    Name                       Value    Description
+    OdDb::kSimpleMesh          0        Simple Mesh
+    OdDb::kQuadSurfaceMesh     5        Quadratic B-spline fitting
+    OdDb::kCubicSurfaceMesh    6        Cubic B-spline fitting
+    OdDb::kBezierSurfaceMesh   8        Bezier Surface fitting
+    </table>
+  */
+  OdDb::PolyMeshType polyMeshType() const;
+
+  /** \details
+    Sets the mesh type of this PolygonMesh entity (DXF 75).
+
+    \param polyMeshType [in]  PolygonMesh type.
+    
+    \remarks
+    polyMeshType must be one of the following:
+      
+    <table>
+    Name                      Value    Description
+    OdDb::kSimpleMesh          0        Simple Mesh
+    OdDb::kQuadSurfaceMesh     5        Quadratic B-spline fitting
+    OdDb::kCubicSurfaceMesh    6        Cubic B-spline fitting
+    OdDb::kBezierSurfaceMesh   8        Bezier Surface fitting
+    </table>
+  */
+  void setPolyMeshType(
+    OdDb::PolyMeshType polyMeshType);
+
+  /** \details
+    Uses surfaceFit() to convert mesh type of this PolygonMesh entity (DXF 75).
+
+    \param polyMeshType [in]  PolygonMesh type.
+    
+    \remarks
+    polyMeshType must be one of the following:
+      
+    <table>
+    Name                      Value    Description
+    OdDb::kSimpleMesh          0        Simple Mesh
+    OdDb::kQuadSurfaceMesh     5        Quadratic B-spline fitting
+    OdDb::kCubicSurfaceMesh    6        Cubic B-spline fitting
+    OdDb::kBezierSurfaceMesh   8        Bezier Surface fitting
+    </table>
+  */
+  void convertToPolyMeshType(
+    OdDb::PolyMeshType polyMeshType);
+  
+  /** \details
+    Returns the number of vertices in the M direction for this PolygonMesh entity (DXF 71).
+  */
+  OdInt16 mSize() const;
+
+  /** \details
+    Sets the number of vertices in the M direction for this PolygonMesh entity (DXF 71).
+    \param mSize [in]  Number of vertices in M direction.  
+  */
+  void setMSize(
+    OdInt16 mSize);
+  
+  /** \details
+    Returns the number of vertices in the N direction for this PolygonMesh entity (DXF 72).
+  */
+  OdInt16 nSize() const;
+
+  /** \details
+    Sets the number of vertices in the N direction for this PolygonMesh entity (DXF 72).
+    \param nSize [in]  Number of vertices in N direction.  
+  */
+  void setNSize(OdInt16 nSize);
+  
+  /** \details
+    Returns true if and only if this PolygonMesh entity is closed in the M direction (DXF 70, bit 0x01).
+  */
+  bool isMClosed() const;
+
+  /** \details
+    Sets this PolygonMesh entity closed in the M direction (DXF 70, bit 0x01).
+  */
+  void makeMClosed();
+
+  /** \details
+    Sets this PolygonMesh entity opened in the M direction (DXF 70, bit 0x01).
+  */
+  void makeMOpen();
+  
+  /** \details
+    Returns true if and only if this PolygonMesh entity is closed in the N direction (DXF 70, bit 0x20).
+  */
+  bool isNClosed() const;
+
+  /** \details
+    Sets this PolygonMesh entity closed in the N direction (DXF 70, bit 0x20).
+  */
+  void makeNClosed();
+
+  /** \details
+    Sets this PolygonMesh entity opened in the N direction (DXF 70, bit 0x20).
+  */
+  void makeNOpen();
+  
+  /** \details
+    Returns the M surface density for this PolygonMesh entity (DXF 73).
+    
+    \remarks
+    This is the number of vertices in the M direction after a surfaceFit.
+     
+    Used instead of M if polyMeshType() != OdDb::kSimpleMesh.
+  */
+  OdInt16 mSurfaceDensity() const;
+
+  /** \details
+    Sets the M surface density for this PolygonMesh entity (DXF 73).
+    \param mSurfaceDensity [in]  M surface density. 
+      
+    \remarks
+    This is the number of vertices in the M direction after a surfaceFit.
+    
+    Used instead of M if polyMeshType() != OdDb::kSimpleMesh.
+  */
+  void setMSurfaceDensity(
+    OdInt16 mSurfaceDensity);
+  
+  /** \details
+    Returns the N surface density for this PolygonMesh entity (DXF 74).
+    
+    \remarks
+    This is the number of vertices in the N direction after a surfaceFit. 
+    
+    Used instead of N if polyMeshType() != OdDb::kSimpleMesh.
+  */
+  OdInt16 nSurfaceDensity() const;
+
+  /** \details
+    Sets the M surface density for this PolygonMesh entity (DXF 74).
+    \param nSurfaceDensity [in]  N surface density. 
+      
+    \remarks
+    This is the number of vertices in the N direction after a surfaceFit.
+    
+    Used instead of N if polyMeshType() != OdDb::kSimpleMesh.
+  */
+  void setNSurfaceDensity(
+    OdInt16 nSurfaceDensity);
+  
+  /** \details
+    Removes all the surface fit vertices for this PolygonMesh entity.
+  */
+  void straighten();
+
+  /** \details
+    Surface fits a smooth surface to this PolygonMesh entity.
+  */
+  void surfaceFit();
+
+  /** \param surfType [in]  Surface type (overrides SURFTYPE system variable).
+    \param surfU [in]  M Surface density (overrides SURFU system variable).
+    \param surfV [in]  N Surface density (overrides SURFV system variable.
+    \remarks
+    surfU and surfV will be in the range [2..200].
+
+    \remarks
+    surfType must be one of the following:
+      
+    <table>
+    Name                       Value    Description
+    OdDb::kQuadSurfaceMesh     5        Quadratic B-spline fitting
+    OdDb::kCubicSurfaceMesh    6        Cubic B-spline fitting
+    OdDb::kBezierSurfaceMesh   8        Bezier Surface fitting
+    </table>
+  */
+  void surfaceFit(
+    OdDb::PolyMeshType surfType, 
+    OdInt16 surfU, 
+    OdInt16 surfV);
+  
+   /** \details
+    Appends the specified vertex onto this PolygonMesh entity.
+
+    \param pVertex [in]  Pointer to the vertex to append.
+    \param vType [in]  Vertex type.
+    
+    \remarks
+    Returns the Object ID of the appended vertex.
+    
+    vType must be one of the following:
+    
+    <table>
+    Name                     Value   DXF 70   Description
+    OdDb::k3dSimpleVertex    0       0x40     Standard vertex.
+    OdDb::k3dControlVertex   1       0x10     Spline-fit or curve-fit control point.
+    OdDb::k3dFitVertex       2       0x08     Spline-fit or curve-fit generated vertex.
+    </table>
+   */
+  OdDbObjectId appendVertex(
+    OdDbPolygonMeshVertex* pVertex, 
+    OdDb::Vertex3dType vType = OdDb::k3dSimpleVertex);
+  
+  /** \details
+    Opens a vertex owned by this PolygonMesh entity.
+
+    \param vertId [in]  Object ID of vertex to be opened.
+    \param mode [in]  Mode in which to open the vertex.
+    \param openErasedOne [in]  If and only if true, erased objects will be opened.
+
+    \remarks
+    Returns a SmartPointer to the opened object if successful, otherwise a null SmartPointer.
+  */
+  OdDbPolygonMeshVertexPtr openVertex(
+    OdDbObjectId vertId, 
+    OdDb::OpenMode mode, 
+    bool openErasedOne = false);
+  
+  /** \details
+    Opens the OdDbSequenceEnd entity for this PolygonMesh entity.
+
+    \param mode [in]  Mode in which to open the OdDbSequenceEnd entity.
+
+    \remarks
+    Returns a SmartPointer to the newly opened OdDbSequenceEnd, or a null SmartPointer.
+
+    \note
+    This method is provided solely for applications that store XData on
+    OdDbSequenceEnd entities; this is not recommended. 
+  */
+  OdDbSequenceEndPtr openSequenceEnd(
+    OdDb::OpenMode mode);
+  
+  /** \details
+    Returns an Iterator that can be used to traverse the vertices owned 
+    by this PolygonMesh entity.
+  */
+  OdDbObjectIteratorPtr vertexIterator() const;
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  void subClose();
+
+  OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isPlanar() const;
+  
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  /** \remarks
+    Creates and returns a set of OdDbFace entities.
+  */
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  /** \remarks
+    Creates and returns a set of OdDbFace entities.
+  */
+  virtual OdResult explodeGeometry(OdRxObjectPtrArray& entitySet) const;
+
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                        OdGsMarker gsMark, 
+                                        const OdGePoint3d& ,
+                                        const OdGeMatrix3d& , 
+                                        OdDbFullSubentPathArray& subentPaths, 
+                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
+
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                        OdGsMarkerArray& gsMarkers) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbPolygonMesh object pointers.
+*/
+typedef OdSmartPtr<OdDbPolygonMesh> OdDbPolygonMeshPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMeshVertex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMeshVertex.h
new file mode 100755
index 0000000..d8cc0de
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolygonMeshVertex.h
@@ -0,0 +1,101 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_POLYGONMESH_VERTEX_
+#define _OD_DB_POLYGONMESH_VERTEX_
+
+#include "TD_PackPush.h"
+
+#include "DbVertex.h"
+
+/** \details
+    This class represents OdDbPolygonMesh vertices in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPolygonMeshVertex: public OdDbVertex
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPolygonMeshVertex);
+
+  /** \remarks
+    Newly created vertices are of type OdDb::k3dSimpleVertex.
+  */
+  OdDbPolygonMeshVertex();
+
+  /** \details
+    Returns the type of this Vertex entity.  
+    
+    \remarks
+    vertexType() returns one of the following:
+
+    <table>
+    Name                     Value   DXF 70   Description
+    OdDb::k3dSimpleVertex    0       0x40     Standard vertex.
+    OdDb::k3dControlVertex   1       0x10     Spline-fit or curve-fit control point.
+    OdDb::k3dFitVertex       2       0x08     Spline-fit or curve-fit generated vertex.
+    </table>
+  */
+  OdDb::Vertex3dType vertexType() const;
+  
+  /** \details
+    Returns the WCS position of this entity (DXF 10).
+  */
+  OdGePoint3d position() const;
+
+  /** \details
+    Sets the WCS position of this entity (DXF 10).
+    \param position [in]  Position.
+  */
+  void setPosition(
+    const OdGePoint3d& position);
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+  OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subErase(
+    bool erasing);
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbPolyFaceMeshVertex object pointers.
+*/
+typedef OdSmartPtr<OdDbPolygonMeshVertex> OdDbPolygonMeshVertexPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyline.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyline.h
new file mode 100755
index 0000000..8cb3f94
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbPolyline.h
@@ -0,0 +1,598 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBPL_H
+#define OD_DBPL_H
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+#include "Db2dPolyline.h"
+
+class OdDb2dPolyline;
+class OdGeLineSeg2d;
+class OdGeLineSeg3d;
+class OdGeCircArc2d;
+class OdGeCircArc3d;
+
+/** \details
+    This class represents Lightweight Polyline entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    OdDbPolyline entities differ from OdDb2dPolyline entities as follows:
+    * OdDbPolyline entities are stored as single objects, thereby improving
+       performance and reducing overhead compared to OdDb2DPolyline objects.
+    * Curve fitting and Spline fitting of OdDbPolyline entities are not supported.  
+    
+    \remarks
+    The number of vertices in an OdDbPolyline must be at least two. 
+    Polylines with less than two vertices should not left in or added to
+    the database.
+    
+    Since the nth Segment of a Polyline is the segment following the nth Vertex, 
+    the segment index and vertex index may be used interchangeably. 
+    
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbPolyline : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPolyline);
+
+  OdDbPolyline();
+
+  /** \details
+    Fills this OdDbPolyline entity with data from the specified OdDb2dPolyline entity.  
+    
+    \param pSource [in]  Pointer to the source OdDb2dPolyline entity.
+    \param transferId [in]  True to do a handOverTo() between the source OdDb2dPolyline 
+                   entity and this OdDbPolyline entity.  
+
+    \remarks
+    If and only if transferId is true, 
+      * This OdDbPolyline entity will be made database resident.
+      * It will assume the objectId, handle, extended entity data, extension
+         dictionary, and reactors of the source OdDb2dPolyline entity
+      * The source OdDb2dPolyline entity will be deleted.
+            
+    \remarks 
+    The source OdDb2dPolyline entity
+      * Must be non- database resident.
+      * Must by of type k2dSimplePoly or k2dFitCurvePoly.
+   
+    \returns
+    Returns one of the following:
+    
+    <table>
+    Name                   Description
+    eOk                    Success
+    AlreadyInDb            This entity is database resident
+    eIllegalEntityType     *pSource is not an OdDb2dPolyline
+    eNotApplicable         *pSource is not k2dSimplePoly or there is extended
+                           entity data attached to a vertex.
+    </table>
+  */
+  OdResult convertFrom(
+    OdDbEntity* pSource, 
+    bool transferId = true);
+
+  /** \details
+    Fills the specified OdDb2dPolyline with data from this OdDbPolyline entity.
+
+    \param pDest [in]  Pointer to the destination OdDb2dPolyline entity.
+    \param transferId [in]  True to do a handOverTo() between this OdDbPolyline entity 
+    and the destination OdDb2dPolyline entity.  
+
+    \remarks
+    If and only if transferId is true,
+      * The destination OdDb2dPolyline entity will be made database resident.
+      * It will assume the objectId, handle, extended entity data, extension
+         dictionary, and reactors of this OdDbPolyline entity. 
+      * This OdDbPolyline entity will made non- database resident, and may be deleted with the C++ delete operator.
+
+    \returns
+    Returns one of the following:
+    
+    <table>
+    Name                   Description
+    eOk                    Success
+    eIllegalReplacement    This entity is non- database resident.
+    eObjectToBeDeleted     This entity is now non- database resident, and should be deleted.
+    </table>
+  */
+  OdResult convertTo(
+    OdDb2dPolyline* pDest, 
+    bool transferId = true);
+
+  /** \details
+    Returns the OCS or WCS point of the specified vertex of this Polyline entity (DXF 10).
+
+    \param vertexIndex [in]  Vertex index.
+    \param point2d [out]  Receives the OCS point.
+    \param point3d [out]  Receives the WCS point.
+  */
+  void getPointAt(
+    unsigned int vertexIndex, 
+    OdGePoint2d& point2d) const;
+  void getPointAt(
+    unsigned int vertexIndex, 
+    OdGePoint3d& point3d) const;
+
+
+  enum SegType
+  {
+    kLine,        // Straight segment with length > 0.
+    kArc,         // Arc segment with length > 0.
+    kCoincident,  // Segment with length == 0.
+    kPoint,       // Polyline with 1 vertex.
+    kEmpty        // Polyline with 0 vertices.
+  };
+
+  /** \details
+    Returns the type of the specified segment of this Polyline entity.
+
+    \param segmentIndex [in]  Segment index.
+    \returns
+    Returns one of the following:
+    
+    <table>
+    Name           Description
+    kLine          Straight segment with length > 0.0
+    kArc           Arc segment with length > 0.0
+    kCoincident    Segment with length == 0.0
+    kPoint         Polyline with 1 vertex.
+    kEmpty         Polyline with 0 vertices.
+    </table>
+  */
+  SegType segType(
+    unsigned int segmentIndex) const;
+
+  /** \details
+    Returns the specified OCS or WCS line segment of this Polyline entity.
+    \param segmentIndex [in]  Segment index.
+    \param line2d [out]  Receives the OCS line segment.
+    \param line3d [out]  Receives the WCS line segment.
+  */
+  void getLineSegAt(
+    unsigned int segmentIndex, 
+    OdGeLineSeg2d& line2d) const;
+
+  void getLineSegAt(
+    unsigned int segmentIndex, 
+    OdGeLineSeg3d& line3d) const;
+
+  /** \details
+    Returns the specified OCS or WCS arc segment of this Polyline entity.
+    \param segmentIndex [in]  Segment index.
+    \param arc2d [out]  Receives the OCS arc segment.
+    \param arc3d [out]  Receives the WCS arc segment.
+  */
+  void getArcSegAt(
+    unsigned int segmentIndex, 
+    OdGeCircArc2d& arc2d) const;
+
+  void getArcSegAt(
+    unsigned int segmentIndex, 
+    OdGeCircArc3d& arc3d) const;
+
+  /** \details
+    Returns true if and only if the specified OCS point is on the specified segment
+    of this Polyline entity,
+    and returns the parameter of that point on the segment.
+    
+    \param segmentIndex [in]  Segment index.
+    \param point2d [in]  The OCS point to query.
+    \param param [out]  The parameter at that point.
+    
+    \remarks
+    The returned parameter will be in the parametric form of the segment (linear or arc).
+  */
+  virtual bool onSegAt(
+    unsigned int segmentIndex, 
+    const OdGePoint2d& point2d, 
+    double& param) const;
+
+  /** \details
+    Controls the closed state for this Polyline entity (DXF 70, bit 0x01=1).
+    
+    \param closed [in]  Controls closed.
+  */
+  void setClosed(
+    bool closed);
+
+  /** \details
+    Controls the linetype generation for this Polyline entity (DXF 70, bit 0x80).
+      
+    \remarks
+    Linetype generation on indicates that the linetype pattern of this Polyline entity
+    is continuously generated around all vertices.
+    
+    Linetype generation off indicates that the linetype pattern of this Polyline entity is
+    restarted at each vertex.
+    
+    \param plinegen [in]  Controls linetype generation.
+  */
+  void setPlinegen(
+    bool plinegen);
+
+  /** \details
+    Sets the elevation of this entity in the OCS (DXF 38).
+
+    \param elevation [in]  Elevation.    
+
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  void setElevation(
+    double elevation);
+
+  /** \details
+    Sets the thickness of this entity (DXF 39).
+    \param thickness [in]  Thickness.
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  void setThickness(
+    double thickness);
+
+  /** \details
+    Sets this Polyline entity to a constant width (DXF 43).
+    \param constantWidth [in]  Constant width.
+  */
+  void setConstantWidth(
+    double constantWidth);
+
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    \param normal [in]  Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+
+  /** \details
+    Returns true if and only if this Polyline entity consists solely of line segments.
+  */
+  bool isOnlyLines() const;
+
+  /** \details
+    Returns true if and only if linetype generation is on for this Polyline entity (DXF 70, bit 0x80).
+      
+    \remarks
+    Linetype generation on indicates that the linetype pattern of this Polyline entity
+    is continuously generated around all vertices.
+    
+    Linetype generation off indicates that the linetype pattern of this Polyline entity is
+    restarted at each vertex.
+  */
+  bool hasPlinegen() const;
+
+  /** \details
+    Returns the elevation of this entity in the OCS (DXF 30).
+    
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this entity.
+  */
+  double elevation() const;
+
+  /** \details
+    Returns the thickness of this entity (DXF 39).
+    
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  double thickness() const;
+
+  /** \details
+    Returns the constant width for this Polyline entity (DXF 43).
+  */
+  double getConstantWidth() const;
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+
+  /** \details
+    Inserts a vertex into this Polyline entity at the specified index.
+
+    \param vertexIndex [in]  Vertex index.
+    \param point2d [in]  OCS point of the vertex.
+    \param bulge [in]  Bulge value for the segment following the vertex.
+    \param startWidth [in]  Start width for the segment following the vertex.
+    \param endWidth [in]  End width for the segment following the vertex.
+    \param vertexIdentifier [in]  
+    
+    \remarks
+    The vertex is inserted before the specified vertex.
+    If vertexIndex == numVerts(), the vertex is appended to the Polyline.
+    
+    Bulge is the tangent of 1/4 the included angle of the arc segment, measured counterclockwise.
+  */
+  void addVertexAt(
+    unsigned int vertexIndex,
+    const OdGePoint2d& point2d,
+    double bulge = 0.,
+    double startWidth = -1.,
+    double endWidth = -1.,
+    OdInt32 vertexIdentifier = 0);
+
+  /** \details
+    Removes the specified vertex from this Polyline entity.
+    \param vertexIndex [in]  Vertex index.
+  */
+  void removeVertexAt(
+    unsigned int vertexIndex);
+
+  /** \details
+     Returns the number of vertices in this Polyline entity (DXF 90).
+  */
+  unsigned int numVerts() const;
+
+
+  /** \details
+    Returns the bulge of the specified segment of this Polyline entity.
+
+    \param index [in]  Segment index.
+    
+    \remarks
+    Bulge is the tangent of 1/4 the included angle of the arc segment, measured counterclockwise.
+  */
+  double getBulgeAt(
+    unsigned int index) const;
+
+  /** \details
+    Returns the vertex identifier of the specified segment of this Polyline entity.
+
+    \param index [in]  Segment index.
+  */
+  OdInt32 getVertexIdentifierAt(
+    unsigned int index) const;
+
+  /** \details
+    Returns the start and end widths for the specified segment of this Polyline entity.
+
+    \param segmentIndex [in]  Segment index.
+    \param startWidth [out]  Receives the start width for the vertex.
+    \param endWidth [out]  Receives the end width for the vertex.
+  */
+  void getWidthsAt(
+    unsigned int segmentIndex, 
+    double& startWidth,  
+    double& endWidth) const;
+
+  /** \details
+    Sets the OCS point for the specified vertex of this Polyline entity.
+    \param vertexIndex [in]  Vertex index.
+    \param point2d [in]  OCS point of vertex.
+  */
+  void setPointAt(
+    unsigned int vertexIndex, 
+    const OdGePoint2d& point2d);
+
+  /** \details
+    Sets the bulge of the specified segment of this Polyline entity.
+
+    \param index [in]  Segment index.
+    \param bulge [in]  Bulge.
+    
+    \remarks
+    Bulge is the tangent of 1/4 the included angle of the arc segment, measured counterclockwise.
+
+  */
+  void setBulgeAt(
+    unsigned int index, 
+    double bulge);
+
+  /** \details
+    Sets the *vertex identifier* of the specified segment of this Polyline entity.
+
+    \param index [in]  Segment index.
+    \param suggestedId [in]  Vertex identifier.
+  */
+  void setVertexIdentifierAt(
+    unsigned int index,
+    OdInt32 suggestedId);
+
+  /** \details
+    Sets the start and end widths for the specified segment of this Polyline entity.
+
+    \param index [in]  Segment index.
+    \param startWidth [in]  Start width for the vertex.
+    \param endWidth [in]  End width for the vertex.
+  */
+  void setWidthsAt(
+    unsigned int index, 
+    double startWidth, 
+    double endWidth);
+
+  /** \details
+    Compresses this Polyline entity.
+    
+    \remarks
+    Takes processing time, and should not be used until all edits are complete.
+  */
+  void minimizeMemory();
+
+  /** \details
+    Decompresses this Polyline entity to expedite modifications.
+  */
+  void maximizeMemory();
+
+  /** \details
+    Resets the vertex data for this Polyline entity.
+
+    \param reuse [in]  True to retain vertices.
+    \param numVerts [in]  Number of vertices to retain.
+      
+    \remarks
+    If reuse is true, the vertex list will be expanded or truncated 
+    such that exactly numVerts vertices exist.
+    
+    If reuse is false, all vertices will be deleted.
+  */
+  void reset(
+    bool reuse, 
+    unsigned int numVerts);
+
+  /** \details
+    Returns true if and only if any of the segments in this Polyline entity have non-zero bulges.
+  */
+  bool hasBulges() const;
+
+  /** \details
+    Returns true if and only if any of the segments in this Polyline entity have non-zero vertex identifiers.
+  */
+  bool hasVertexIdentifiers() const;
+
+  /** \details
+    Returns true if and only if any of the segments in this Polyline entity have start and end widths.
+  */
+  bool hasWidth() const;
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const ODRX_OVERRIDE;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const ODRX_OVERRIDE;
+
+  virtual bool isPlanar() const ODRX_OVERRIDE;
+
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+
+
+  /** \details
+      OdDbCurveMethods
+  */
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+  virtual OdResult getStartParam(
+    double& startParam) const;
+
+  virtual OdResult getEndParam (
+    double& endParam) const;
+
+  virtual OdResult getStartPoint(
+    OdGePoint3d& startPoint) const;
+
+  virtual OdResult getEndPoint(
+    OdGePoint3d& endPoint) const;
+
+  virtual OdResult getPointAtParam(
+    double param, 
+    OdGePoint3d& pointOnCurve) const;
+
+  virtual OdResult getParamAtPoint(
+    const OdGePoint3d& pointOnCurve, 
+    double& param) const;
+
+  virtual OdResult getFirstDeriv (
+    double param,
+    OdGeVector3d& firstDeriv) const;
+
+  virtual OdResult getSecondDeriv (
+    double param,
+    OdGeVector3d& secondDeriv) const;
+
+  virtual OdResult getArea(
+    double& area) const;
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult explodeGeometry(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type,
+                                            OdGsMarker gsMark, 
+                                            const OdGePoint3d& pickPoint,
+                                            const OdGeMatrix3d& viewXform, 
+                                            OdDbFullSubentPathArray& subentPaths, 
+                                            const OdDbObjectIdArray* pEntAndInsertStack) const;
+
+  virtual OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                                OdGsMarkerArray& gsMarkers) const;
+
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& path) const;
+
+  virtual OdResult reverseCurve();
+
+  /** \details
+  Returns the entity coordinate system matrix.
+  */
+  OdGeMatrix3d getEcs( ) const;
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbPolyline object pointers.
+*/
+typedef OdSmartPtr<OdDbPolyline> OdDbPolylinePtr;
+
+#include "TD_PackPop.h"
+
+#endif //OD_DBPL_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyEntity.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyEntity.h
new file mode 100755
index 0000000..b676b1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyEntity.h
@@ -0,0 +1,376 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_PROXY_ENTITY_
+#define _OD_DB_PROXY_ENTITY_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "IdArrays.h"
+
+/** \details
+    This class is the abstract base class for Proxy entities derived 
+    from OdDbEntity in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+    
+    \remarks
+    Proxy entities hold surrogate data for custom Teigha objects
+    when the parent application is not loaded, and allow Read-Only access
+    to data contained therein. 
+    
+    Whenever the parent application is loaded, the Proxy entities revert
+    to their custom objects.
+*/
+class TOOLKIT_EXPORT OdDbProxyEntity : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbProxyEntity);
+
+  OdDbProxyEntity();
+
+  enum GraphicsMetafileType
+  {
+    kNoMetafile   = 0, // No bounding box or graphics (R13 drawing files only)
+    kBoundingBox  = 1, // Bounding Box
+    kFullGraphics = 2  // Full Graphics
+  };
+
+  /** \details
+    Returns the GraphicsMetafileType for this Proxy entity;
+    
+    \remarks
+    graphicsMetafileType() returns one of the following
+    
+    <table>
+    Name            Value     Description
+    kNoMetafile     0         No bounding box or graphics (R13 drawing files only)
+    kBoundingBox    1         Bounding Box
+    kFullGraphics   2         Full Graphics
+    </table>
+  */
+  virtual OdDbProxyEntity::GraphicsMetafileType graphicsMetafileType() const;
+
+  virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+ /* Replace OdRxObjectPtrArray */
+ 
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+  /*
+     virtual bool subGetGeomExtents(OdGeExtents3d& extents) const;
+  */
+
+  enum
+  {
+    kNoOperation                = 0x000,
+    kEraseAllowed               = 0x001,
+    kTransformAllowed           = 0x002,
+    kColorChangeAllowed         = 0x004,
+    kLayerChangeAllowed         = 0x008,
+    kLinetypeChangeAllowed      = 0x010,
+    kLinetypeScaleChangeAllowed = 0x020,
+    kVisibilityChangeAllowed    = 0x040,
+    kCloningAllowed             = 0x080,
+    kLineWeightChangeAllowed    = 0x100,
+    kPlotStyleNameChangeAllowed = 0x200,
+    kDisableProxyWarning        = 0x400,
+    kMaterialChangeAllowed      = 0x800,
+    kAllButCloningAllowed       = 0xB7F,
+    kAllAllowedBits             = 0xBFF
+  };
+
+  /** \details
+    Returns the edit flags settings for the class associated with this Proxy entity.
+    
+    \remarks
+    These bits determine the allowable operations on this Proxy entity.
+    
+    proxyFlags() returns a combination of one or more of the following:
+    
+    <table>
+    Name                          Value       Methods enabled       
+    kNoOperation                  0x0         None
+    kEraseAllowed                 0x1         erase()
+    kTransformAllowed             0x2         transformBy()
+    kColorChangeAllowed           0x4         setColor(), setColorIndex()
+    kLayerChangeAllowed           0x8         setLayer() 
+    kLinetypeChangeAllowed        0x10        setLinetype()
+    kLinetypeScaleChangeAllowed   0x20        setLinetypeScale()
+    kVisibilityChangeAllowed      0x40        setVisibility()
+    kCloningAllowed               0x80        subDeepClone(), subWblockClone()
+    kLineWeightChangeAllowed      0x100       setLineWeight()
+    kPlotStyleNameChangeAllowed   0x200       setPlotStyleName()
+    kDisableProxyWarning          0x400
+    kMaterialChangeAllowed        0x800       setMaterial()
+    kAllButCloningAllowed         0xB7F       All of the above but cloning
+    kAllAllowedBits               0xBFF       All of the above
+    </table>
+  */
+  virtual int proxyFlags() const;
+
+  /** \details
+    Returns true if and only if the erase() method is allowed for this Proxy entity. 
+  */
+  bool eraseAllowed() const               { return GETBIT(proxyFlags(), kEraseAllowed); }
+  /** \details
+    Returns true if and only if the transformBy() method is allowed for this Proxy entity. 
+  */
+  bool transformAllowed() const           { return GETBIT(proxyFlags(), kTransformAllowed); }
+  /** \details
+    Returns true if and only if the setColor() and setColorIndex() methods are allowed for this Proxy entity. 
+  */
+  bool colorChangeAllowed() const         { return GETBIT(proxyFlags(), kColorChangeAllowed); }
+  /** \details
+    Returns true if and only if the setLayer() method is allowed for this Proxy entity. 
+  */
+  bool layerChangeAllowed() const         { return GETBIT(proxyFlags(), kLayerChangeAllowed); }
+  /** \details
+    Returns true if and only if the setLinetype() method is allowed for this Proxy entity. 
+  */
+  bool linetypeChangeAllowed() const      { return GETBIT(proxyFlags(), kLinetypeChangeAllowed); }
+  /** \details
+    Returns true if and only if the setLinetypeScale() method is allowed for this Proxy entity. 
+  */
+  bool linetypeScaleChangeAllowed() const { return GETBIT(proxyFlags(), kLinetypeScaleChangeAllowed); }
+  /** \details
+    Returns true if and only if the setVisibility() method is allowed for this Proxy entity. 
+  */
+  bool visibilityChangeAllowed() const    { return GETBIT(proxyFlags(), kVisibilityChangeAllowed); }
+  /** \details
+    Returns true if and only if the setLineWeight() method is allowed for this Proxy entity. 
+  */
+  bool lineWeightChangeAllowed() const    { return GETBIT(proxyFlags(), kLineWeightChangeAllowed); }
+  /** \details
+    Returns true if and only if the setPlotStyleName() method is allowed for this Proxy entity. 
+  */
+  bool plotStyleNameChangeAllowed() const { return GETBIT(proxyFlags(), kPlotStyleNameChangeAllowed); }
+  /** \details
+    Returns true if and only if the setMaterial() method is allowed for this Proxy entity. 
+  */
+  bool materialChangeAllowed() const    { return GETBIT(proxyFlags(), kMaterialChangeAllowed); }
+  /** \details
+    Returns true if and only the subDeepClone() and subWblockClone() methods are allowed for this Proxy entity. 
+  */
+  bool cloningAllowed() const             { return GETBIT(proxyFlags(), kCloningAllowed); }
+  /** \details
+    Returns true if and only if all but the subDeepClone() and subWblockClone() methods are allowed for this Proxy entity.
+    
+    \remarks
+    The allowed methods are as follows
+    
+    @untitled table
+    erase()
+    setColor()
+    setColorIndex()
+    setLayer() 
+    setLinetype()
+    setLinetypeScale()
+    setLineWeight()
+    setMaterial()
+    setPlotStyleName()
+    setVisibility()
+    transformBy()
+  */
+  bool allButCloningAllowed() const       { return (proxyFlags() & kAllAllowedBits) == (kAllAllowedBits ^ kAllButCloningAllowed); }
+  /** \details
+    Returns true if and only if all methods are allowed for this Proxy entity. 
+
+    \remarks
+    The allowed methods are as follows
+    
+    @untitled table
+    subDeepClone()
+    erase()
+    setColor()
+    setColorIndex()
+    setLayer() 
+    setLinetype()
+    setLinetypeScale()
+    setLineWeight()
+    setMaterial()
+    setPlotStyleName()
+    setVisibility()
+    transformBy()
+    subWblockClone()
+  */
+  bool allOperationsAllowed() const       { return (proxyFlags() & kAllAllowedBits) == kAllAllowedBits; }
+
+  /** \details
+    Returns true if and only this Proxy entity is a R13 format Proxy entity. 
+  */
+  bool isR13FormatProxy() const           { return GETBIT(proxyFlags(), 0x8000); }
+
+  /** \details
+    Returns the class name of the entity represented by this Proxy entity.
+  */
+  virtual OdString originalClassName() const;
+
+  /** \details
+    Returns the DXF name of the entity represented by this Proxy entity.
+  */
+  virtual OdString originalDxfName() const;
+
+  /** \details
+    Returns the application description of the entity represented by this Proxy entity.
+  */
+  virtual OdString applicationDescription() const;
+
+  /** \details
+    Returns an array of the Object IDs referenced by this Proxy entity.
+
+    \param objectIds [out]  Receives an array of the reference Object IDs.
+  */
+  virtual void getReferences(
+    OdTypedIdsArray& objectIds) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  /** \details
+      Sets the properties for this entity taking into account the proxy flags.
+  */
+  
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setColor(
+    const OdCmColor &color, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setColorIndex(
+    OdUInt16 colorIndex, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setColorId(
+    OdDbObjectId colorId, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setPlotStyleName(
+    const OdString& plotStyleName, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setPlotStyleName(
+    OdDb::PlotStyleNameType plotStyleNameType, 
+    OdDbObjectId newId = OdDbObjectId::kNull, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setLayer(
+    const OdString& layerName, 
+    bool doSubents = true,
+    bool allowHiddenLayer = false);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setLayer(
+    OdDbObjectId layerId, 
+    bool doSubents = true,
+    bool allowHiddenLayer = false);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setLinetype(
+    const OdString& linetypeName, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setLinetype(
+    OdDbObjectId linetypeID, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setLinetypeScale(
+    double linetypeScale, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult subSetVisibility(
+    OdDb::Visibility visibility, 
+    bool doSubents = true);
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setLineWeight(
+    OdDb::LineWeight lineWeight, 
+    bool doSubents = true);
+
+  /** \note
+    This function honors proxyFlags().
+  */
+  virtual OdResult setMaterial(
+    const OdString& materialName,
+    bool doSubents = true);
+  virtual OdResult setMaterial(
+    OdDbObjectId materialID,
+    bool doSubents = true);
+
+  virtual OdResult subErase(
+    bool erasing);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbProxyEntity object pointers.
+*/
+typedef OdSmartPtr<OdDbProxyEntity> OdDbProxyEntityPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyExt.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyExt.h
new file mode 100755
index 0000000..daecbff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyExt.h
@@ -0,0 +1,92 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_PROXY_EXT_
+#define _OD_DB_PROXY_EXT_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "IdArrays.h"
+
+class OdDbObject;
+
+/** \details
+    This class defines in interface for 
+    proxy entities and proxy objects in an OdDbDatabase instance.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbProxyExt : public OdRxObject
+{
+protected:
+  /** \details
+      Constructor (no arguments).
+  */
+  OdDbProxyExt();
+
+public:
+  ODRX_DECLARE_MEMBERS(OdDbProxyExt);
+
+  /** \details
+      Returns the edit flags for the class associated with this proxy.
+  */
+  virtual int proxyFlags(const OdDbObject* pProxy) const = 0;
+
+  /** \details
+      Returns the class name of the entity stored in this proxy.
+  */
+  virtual OdString originalClassName(const OdDbObject* pProxy) const = 0;
+
+  /** \details
+      Returns the DXF name of the entity stored in this proxy.
+  */
+  virtual OdString originalDxfName(const OdDbObject* pProxy) const = 0;
+
+  /** \details
+      Returns the application description for the class associated with this proxy.
+  */
+  virtual OdString applicationDescription(const OdDbObject* pProxy) const = 0;
+
+  /** \details
+      Returns the references maintained by this proxy.
+
+      \param ids [out]  Object ID array of references contained in this proxy.
+      \param types [out]  Reference type array, where each entry is associated with the 
+      corresponding entry in the ids array.
+  */
+  virtual void getReferences(const OdDbObject* pProxy, OdTypedIdsArray& ids) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbProxyExt object pointers.
+*/
+typedef OdSmartPtr<OdDbProxyExt> OdDbProxyExtPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyObject.h
new file mode 100755
index 0000000..0d609ed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbProxyObject.h
@@ -0,0 +1,169 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBPROXY_H
+#define OD_DBPROXY_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "IntArray.h"
+
+/** \details
+    This class is the abstract base class for Proxy objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbProxyObject : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbProxyObject);
+
+  OdDbProxyObject();
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfIn(OdDbDxfFiler* filer);
+
+  /** \details
+    Returns the edit flags for the class contained in this Proxy object.
+    \remarks
+    proxyFlags() returns a combination of one or more of the following:
+    
+    <table>
+    Name                     Value    Description
+    kNoOperation             0x0      None
+    kEraseAllowed            0x1      erase()
+    kCloningAllowed          0x80     subDeepClone(), subWblockClone()
+    kAllButCloningAllowed    0x1      erase()
+    kAllAllowedBits          0x81     erase(), subDeepClone(), subWblockClone()
+    kMergeIgnore             0x00     Keep orignal names.
+    kMergeReplace            0x100    Use clone.
+    kMergeMangleName         0x200    Create anonymous name.
+    </table>
+  */
+  int proxyFlags() const;
+
+  /** \details
+    Returns the class name of the object represented by this Proxy object.
+  */
+  OdString originalClassName() const;
+
+  /** \details
+    Returns the DXF name of the object represented by this Proxy object.
+  */
+  OdString originalDxfName() const;
+
+  /** \details
+    Returns the application description of the object represented by this Proxy object.
+  */
+  OdString applicationDescription() const;
+
+  /** \details
+    Returns an array of the Object IDs referenced by this Proxy object.
+
+    \param objectIds [out]  Receives an array of the reference Object IDs.
+  */
+  void getReferences(
+    OdTypedIdsArray& objectIds) const;
+
+  OdDb::DuplicateRecordCloning mergeStyle() const;
+
+  virtual OdDbObjectPtr subDeepClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  virtual OdDbObjectPtr subWblockClone(OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  enum
+  {
+    kNoOperation          = 0, 
+    kEraseAllowed         = 0x1, 
+    kCloningAllowed       = 0x80,
+    kAllButCloningAllowed = 0x1, 
+    kAllAllowedBits       = 0x81, 
+    kMergeIgnore          = 0,      
+    kMergeReplace         = 0x100,  
+    kMergeMangleName      = 0x200,
+    kDisableProxyWarning  = 0x400
+  };
+
+  /** \details
+    Returns true if and only if the erase() method is allowed for this Proxy entity. 
+  */
+  bool eraseAllowed() const               { return GETBIT(proxyFlags(), kEraseAllowed); }
+  /** \details
+    Returns true if and only if all but the subDeepClone() and subWblockClone() methods are allowed for this Proxy object.
+  */
+  bool allButCloningAllowed() const       { return (proxyFlags() & kAllAllowedBits) == (kAllAllowedBits ^ kAllButCloningAllowed); }
+
+  /** \details
+    Returns true if and only if the subDeepClone() and subWblockClone() methods are allowed for this Proxy object.
+  */
+  bool cloningAllowed() const             { return GETBIT(proxyFlags(), kCloningAllowed); }
+
+  /** \details
+    Returns true if and only if all methods are allowed for this Proxy entity. 
+
+    \remarks
+    The allowed methods are as follows
+    
+    @untitled table
+    subDeepClone()
+    erase()
+    subWblockClone()
+  */
+  bool allOperationsAllowed() const       { return (proxyFlags() & kAllAllowedBits) == kAllAllowedBits; }
+
+  /** \details
+    Returns true if and only this Proxy entity is a R13 format Proxy object. 
+  */
+  bool isR13FormatProxy() const           { return GETBIT(proxyFlags(), 32768); }
+
+  virtual OdResult subErase(
+    bool erasing);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbProxyObject object pointers.
+*/
+typedef OdSmartPtr<OdDbProxyObject> OdDbProxyObjectPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBPROXY_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimension.h
new file mode 100755
index 0000000..b722572
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimension.h
@@ -0,0 +1,145 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_RADIAL_DIMENSION_
+#define _OD_DB_RADIAL_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents Radial Dimension entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    \remarks
+    Radial Dimension entities require a point the curve being dimensioned and
+    a center point. In additional, leaderLength specifies
+    how far the dimension line extends beyond the curve before
+    the dogleg to the annotation text. 
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRadialDimension : public OdDbDimension
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRadialDimension);
+
+  OdDbRadialDimension();
+  
+  /* OdDbRadialDimension(  
+       const OdGePoint3d& center,
+       const OdGePoint3d& chordPoint,
+       double leaderLength,
+       const OdChar* dimText = 0,
+       OdDbObjectId dimStyle = OdDbObjectId::kNull);
+  */
+
+  /** \details
+    Sets the length from the chordPoint to the dogleg for this Dimension entity
+    (DXF 40).
+    
+    \param leaderLength [in]  Leader length.
+  */
+  void setLeaderLength(
+    double leaderLength);
+
+  /** \details
+    Returns the length from the chordPoint to the dogleg for this Dimension entity
+    (DXF 40).
+  */
+  double leaderLength() const; 
+  
+  /** \details
+    Returns the WCS center of the arc being dimensioned by this Dimension entity (DXF 10).
+  */
+  OdGePoint3d center() const;
+
+  /** \details
+    Sets the WCS center of the arc being dimensioned by this Dimension entity (DXF 10).
+    \param center [in]  Center.
+  */
+  void setCenter(
+    const OdGePoint3d& center);
+  
+  /** \details
+    Returns the WCS chord point for this Dimension entity (DXF 15).
+    
+    \remarks
+    The chord point is the point at which the dimension line for this Dimension entity
+    intersects the curve being dimensioned.
+  */
+  OdGePoint3d chordPoint() const;
+
+  /** \details
+    Sets the WCS chord point for this Dimension entity (DXF 15).
+    
+    \param chordPoint [in]  Chord point.
+    
+    \remarks
+    The chord point is the point at which the dimension line for this Dimension entity
+    intersects the curve being dimensioned.
+  */
+  void setChordPoint(
+    const OdGePoint3d& chordPoint);
+
+  bool extArcOn() const;
+  double extArcStartAngle() const;
+  void setExtArcStartAngle(double newAngle);
+  double extArcEndAngle() const;
+  void setExtArcEndAngle(double newAngle);
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbRadialDimension object pointers.
+*/
+typedef OdSmartPtr<OdDbRadialDimension> OdDbRadialDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimensionLarge.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimensionLarge.h
new file mode 100755
index 0000000..9a4e993
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRadialDimensionLarge.h
@@ -0,0 +1,171 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _OD_DB_RADIALDIMENSIONLARGE_DIMENSION_
+#define _OD_DB_RADIALDIMENSIONLARGE_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents Large (Jogged) Radial Dimension entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    \remarks
+    Jogged Radial Dimension entities are used to dimension arcs with large radii.
+    They require a point the curve being dimensioned and along with an overridden 
+    center point, a jog point, and a jog angle. 
+
+    <group OdDb_Classes>
+
+*/
+class TOOLKIT_EXPORT OdDbRadialDimensionLarge : public OdDbDimension
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRadialDimensionLarge);
+
+  OdDbRadialDimensionLarge();
+
+  /** \details
+    Returns the WCS center of the arc being dimensioned by this Dimension entity (DXF 10).
+  */
+  OdGePoint3d center() const;
+  
+  /** \details
+    Sets the WCS center of the arc being dimensioned by this Dimension entity (DXF 10).
+    \param center [in]  Center.
+  */
+  void setCenter(const OdGePoint3d& center);
+
+  /** \details
+    Returns the WCS chord point for this Dimension entity (DXF 15).
+    
+    \remarks
+    The chord point is the point at which the dimension line for this Dimension entity
+    intersects the curve being dimensioned.
+  */
+  OdGePoint3d chordPoint() const;
+
+  /** \details
+    Sets the WCS chord point for this Dimension entity (DXF 15).
+    
+    \param chordPoint [in]  Chord point.
+    
+    \remarks
+    The chord point is the point at which the dimension line for this Dimension entity
+    intersects the curve being dimensioned.
+  */
+  void setChordPoint(const OdGePoint3d & chordPoint);
+
+  /** \details
+    Returns the WCS override  center of the arc being dimensioned by this Dimension entity.
+  */
+  OdGePoint3d overrideCenter() const;
+
+  /** \details
+    Sets the WCS override center of the arc being dimensioned by this Dimension entity.
+    \param overrideCenter [in]  Override center.
+  */
+  void   setOverrideCenter(const OdGePoint3d& overrideCenter);
+
+  /** \details
+    Returns the jog point for this Dimension entity.
+  */
+  OdGePoint3d jogPoint() const;
+
+  /** \details
+    Sets the jog point for this Dimension entity.
+    \param jogPoint [in]  Jog point.
+  */
+  void   setJogPoint(const OdGePoint3d& jogPoint);
+
+  /** \details
+    Returns the jog angle for this Dimension entity.
+    \note
+    All angles are expressed in radians.
+  */
+  double jogAngle() const;
+
+  /** \details
+    Sets the jog angle for this Dimension entity.
+    \param jogAngle [in]  Jog angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void  setJogAngle(const double jogAngle);
+
+  // void   setOverrideCenterPP(const OdGePoint3d& p);
+  // void   setJogPointPP(const OdGePoint3d& p);
+  // void   setTextPositionPP(const OdGePoint3d& p);
+
+  /** \details
+      Returns status of extension arc property.
+  */
+  bool extArcOn() const;
+
+  double extArcStartAngle() const;
+  void setExtArcStartAngle(double newAngle);
+
+  double extArcEndAngle() const;
+  void setExtArcEndAngle(double newAngle);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /*
+  OdDbRadialDimensionLarge(
+  const OdGePoint3d& center,
+  const OdGePoint3d& chordPnt,
+  const OdGePoint3d& overrideCenter,
+  const OdGePoint3d& jogPnt,
+  double             jogAng,
+  const OdString*    dimText = 0,
+  OdDbObjectId       dimStyle = OdDbObjectId::kNull);
+  */
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRadialDimensionLarge object pointers.
+*/
+typedef OdSmartPtr<OdDbRadialDimensionLarge> OdDbRadialDimensionLargePtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImage.h
new file mode 100755
index 0000000..f6f5b09
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImage.h
@@ -0,0 +1,451 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __IMGENT_H
+#define __IMGENT_H /*!DOM*/
+
+#include "TD_PackPush.h"
+
+#include "Ge/GePoint2dArray.h"
+
+class OdRasterImageImpl;
+
+#include "DbImage.h"
+#include "DbRasterImageDef.h"
+
+/** \details
+    This class represents RasterImage entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRasterImage : public OdDbImage
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRasterImage);
+
+  OdDbRasterImage();
+
+  enum ClipBoundaryType
+  {
+    kInvalid, // Invalid
+    kRect,    // Rectangular
+    kPoly     // Polygonal
+  };
+
+  enum ImageDisplayOpt
+  {
+    kShow          = 1,   // Show
+    kShowUnAligned = 2,   // Show unaligned
+    kClip          = 4,   // Clip
+    kTransparent   = 8    // Transparent
+  };
+
+  /** \details
+    Sets the Object ID of the OdDbRasterImageDef object associated with this raster image entity (DXF 340).
+    \param imageDefId [in]  Object ID of image to be displayed.
+  */
+  virtual void setImageDefId(
+    OdDbObjectId imageDefId);
+
+  /** \details
+    Returns the Object ID of the OdDbRasterImageDef object associated with this raster image entity (DXF 340).
+  */
+  virtual OdDbObjectId imageDefId() const;
+
+  /** \details
+    Sets the OdDbRasterImageDefReactor object associated with this raster image entity (DXF 360).
+    \param reactorId [in]  Object ID of reactor for this image.
+    
+    \remarks
+    Each OdDbRasterImage object must have an OdDbRasterImageDefReactor associated with the OdDbRasterImageDef
+    object it is using. This call makes this OdDbRasterImage object the owner of the reactor object.
+  */
+  virtual void setReactorId(
+    OdDbObjectId reactorId);
+
+  /** \details
+    Returns the Object ID of the OdDbRasterImageDefReactor object associated with this raster image entity (DXF 360).
+
+    \remarks
+    Each OdDbRasterImage object must have an OdDbRasterImageDefReactor associated with the OdDbRasterImageDef
+    object it is using.
+  */
+  virtual OdDbObjectId reactorId() const;
+
+  /** \details
+    Sets the clip boundary for this raster image entity (DXF 71, 14, 24).
+
+    \param clipPoints [in]  Array of 2D points in pixel coordinates.
+  */
+  virtual void setClipBoundary(
+    const OdGePoint2dArray& clipPoints);
+
+  /** \details
+    Returns the clip boundary for this raster image entity (DXF 14, 24).
+    \remarks
+    The clip boundary is specified in pixel coordinates.
+  */
+  virtual const OdGePoint2dArray& clipBoundary() const;
+
+  /** \details
+    Returns the clipping state for this raster image entity (DXF 280).
+  */
+  bool isClipped() const;
+
+  /** \details
+    Adds the frame vertices of this raster image entity to the specified array.
+    
+    \param vertices [in/out] Receives the vertices of the image frame.
+
+    \remarks
+    If isClipped(), these are the vertices of the clip boundary. 
+    
+    If !isClipped(), these are the corners of the image.
+  */
+  virtual OdResult getVertices(
+    OdGePoint3dArray& vertices) const;
+
+  /** \details
+    Sets the clip boundary to coincide with the image corners of this raster image entity. 
+    
+    \remarks
+    Any existing boundary is deleted.
+  */
+  virtual void setClipBoundaryToWholeImage();
+
+  /** \details
+    Returns the clip boundary type of this this raster image entity (DXF 71).
+  */
+  ClipBoundaryType clipBoundaryType() const;
+
+  /** \details
+    Returns the pixel-to-model coordinate transformation matrix for this raster image entity.
+  */
+  virtual OdGeMatrix3d getPixelToModelTransform() const;
+
+  /** \details
+    Sets the brightness value for this raster image entity (DXF 281).
+    \param brightness [in]  Image brightness [0.0 .. 100.0].
+  */
+  virtual OdResult setBrightness( 
+    OdInt8 brightness );
+
+  /** \details
+    Returns the brightness value for this raster image entity (DXF 281).
+    \remarks
+    Returns a value in the range [0.0 .. 100.0].
+  */
+  virtual OdInt8 brightness() const;
+
+  /** \details
+    Sets the contrast value for this raster image entity (DXF 282).
+    \param contrast [in]  Image contrast. [0.0 .. 100.0]
+  */
+  virtual OdResult setContrast( 
+    OdInt8 contrast );
+
+  /** \details
+    Returns the contrast value for this raster image entity (DXF 282).
+    \remarks
+    Returns a value in the range [0.0 .. 100.0].  
+  */
+  virtual OdInt8 contrast() const;
+
+  /** \details
+    Sets the fade value for this raster image entity (DXF 283).
+
+    \param fade [in]  Image fade. [0.0 .. 100.0].
+  */
+  virtual OdResult setFade( 
+    OdInt8 fade );
+
+  /** \details
+    Returns the fade value for this raster image entity (DXF 283).
+    \remarks
+    Returns a value in the range [0.0 .. 100.0].  
+  */
+  virtual OdInt8 fade() const;
+
+  /** \details
+    Sets the specified image display option for this raster image entity (DXF 70).
+
+    \param optionIndex [in]  Option index.
+    \param value [in]  Value for option.
+    
+    \remarks
+    option is one of the following:
+    
+    <table>
+    Name              Value   Description
+    kShow             1       Show
+    kShowUnAligned    2       Show unaligned
+    kClip             4       Clip
+    kTransparent      8       Transparent
+    </table>
+  */
+  virtual void setDisplayOpt(
+    ImageDisplayOpt optionIndex, 
+    bool value);
+
+  /** \details
+    Returns the specified image display option for this raster image entity (DXF 70).
+
+    \param optionIndex [in]  Option to return.
+
+  */
+  virtual bool isSetDisplayOpt(
+    ImageDisplayOpt option) const;
+
+  /** \details
+    Returns the size in pixels of this raster image entity (DXF 13, 23).
+      
+    \param getCachedValue [in]  True to always return cached value. False to return the value from the OdDbRasterImageDef
+                        object of available.  
+  */
+  virtual OdGeVector2d imageSize(
+    bool getCachedValue = false) const;
+
+  /** \details
+    Returns the effective scale factor of this raster image entity.
+    
+    \remarks
+    The effective scale factor is the image size in drawing units divided by the original image size.
+    
+    If the original image size is unavalable, or the user has not defined a drawing unit, the
+    image width is assumed to be one drawing unit. 
+  */
+  virtual OdGeVector2d scale() const;
+
+  /** \details
+    Sets the orientation and origin of this raster image entity.
+
+    \param origin [in]  Lower-left corner. 
+    \param u [in]  Image width vector.
+    \param v [in]  Image height vector.
+    
+    \remarks
+    Returns true if and only if successful.
+    
+    \note
+    The actual height of the image is determined by the width and aspect ratio fo the original image. 
+    
+    These vectors define the outer edges of the raster image entity. 
+  */
+  virtual bool setOrientation(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& u,
+    const OdGeVector3d& v);
+
+  /** \details
+    Returns the orientation and origin of this raster image entity.
+
+    \param origin [out]  Receives the lower-left corner. 
+    \param u [out]  Receives the vector defining the image direction and width. 
+    \param v [out]  Receives the vector defining the direction of the height of the image.
+    
+    \note
+    These vectors define the outer edges of the raster image entity.
+  */
+  virtual void getOrientation(
+    OdGePoint3d& origin, 
+    OdGeVector3d& u, 
+    OdGeVector3d& v) const;
+
+  /** \details
+    Sets the ClipInverted flag value for this raster image entity.
+
+    \param val [in]  The ClipInverted flag value.
+  */
+  virtual void setClipInverted(bool val);
+
+  /** \details
+    Returns the ClipInverted flag value for this raster image entity.
+  */
+  virtual bool isClipInverted() const;
+
+
+  /** \details
+      TBC.
+  OdGiSentScanLines* getScanLines(const OdGiRequestScanLines& req) const;
+  bool freeScanLines(OdGiSentScanLines* pSSL) const;
+  */
+
+  /** \details
+       coment it for a while, because we do not know what it do
+     static Oda::ClassVersion classVersion();
+  */
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual void subClose() ODRX_OVERRIDE;
+
+  /*
+     virtual void subSwapIdWith(OdDbObjectId otherId, bool swapXdata = false, bool swapExtDict = false);
+  */
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const ODRX_OVERRIDE;
+
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const ODRX_OVERRIDE;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const ODRX_OVERRIDE;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+  virtual OdDbObjectPtr subDeepClone(
+    OdDbIdMapping& ownerIdMap, OdDbObject*, bool bPrimary) const ODRX_OVERRIDE;
+
+  /*
+  virtual void getOsnapPoints( OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark, const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint, const OdGeMatrix3d& viewXform,
+    OdGePoint3dArray& snapPoints, OdDbIntArray& geomIds) const;
+
+  virtual void getGripPoints(OdGePoint3dArray& gripPoints,
+    OdDbIntArray& osnapModes, OdDbIntArray& geomIds) const;
+
+  virtual void moveGripPointsAt(const OdDbIntArray& indices, const OdGeVector3d& offset);
+
+  virtual void getStretchPoints(OdGePoint3dArray& stretchPoints) const;
+
+  virtual void moveStretchPointsAt(const OdDbIntArray& indices, const OdGeVector3d& offset);
+
+  virtual void transformBy(const OdGeMatrix3d& xform);
+  virtual void getTransformedCopy(const OdGeMatrix3d& xform, OdDbEntity** ent) const;
+  virtual OdResult explode(OdRxObjectPtrArray& entitySet) const; //Replace OdRxObjectPtrArray
+  virtual bool subGetGeomExtents(OdGeExtents3d& extents) const;
+
+  virtual void getSubentPathsAtGsMarker(OdDb::SubentType type,
+    OdGsMarker gsMark, const OdGePoint3d& pickPoint,
+    const OdGeMatrix3d& viewXform, int& numPaths,
+    OdDbFullSubentPath*& subentPaths, int numInserts = 0,
+    OdDbObjectId* entAndInsertStack = 0) const;
+
+  virtual void getGsMarkersAtSubentPath(
+    const OdDbFullSubentPath& subPath,
+    OdGsMarkerArray& gsMarkers) const;
+
+  virtual OdDbEntityPtr subentPtr(const OdDbFullSubentPath& id) const;
+  virtual void saveAs(OdGiWorldDraw* mode, OdDb::EntSaveAsType st);
+  virtual void intersectWith(const OdDbEntity* ent,
+    OdDb::Intersect intType, OdGePoint3dArray& points,
+    OdGsMarker thisGsMarker = 0, OdGsMarker otherGsMarker = 0) const;
+
+  virtual void intersectWith(const OdDbEntity* ent,
+    OdDb::Intersect intType, const OdGePlane& projPlane,
+    OdGePoint3dArray& points, OdGsMarker thisGsMarker = 0,
+    OdGsMarker otherGsMarker = 0) const;
+  */
+};
+
+/** \details
+  Translates the specified point from pixel coordinates to model coordinates.
+
+  \param xf, [in] Pixel->Model transformation matrix.
+  \param pixelPoint [in] Pixel point.
+  \param modelPoint [out] Receives the Model point.
+*/
+inline void pixelToModel(
+  const OdGeMatrix3d& xfm,
+  const OdGePoint2d& pixelPoint,
+  OdGePoint3d& modelPoint)
+{
+  modelPoint.set(pixelPoint.x, pixelPoint.y, 0);
+  modelPoint.transformBy(xfm);
+}
+
+/** \details
+  Translates the specified point from model coordinates to pixel coordinates.
+  \param xfm [in]  Model->Pixel transformation matrix.
+  \param pixelPoint [out]  Receives the pixel point.
+  \param modelPoint [in]  Model point.
+  \param plane [in]  Plane on which modelPoint is to be projected prior to transformation.
+  \param viewDir [in]  Vector defining the projection direction.
+*/
+inline void modelToPixel(
+  const OdGeMatrix3d& xfm,
+  const OdGePoint3d& modelPoint,
+  OdGePoint2d& pixelPoint)
+{
+  OdGePoint3d modelPt = modelPoint;
+  modelPt.transformBy(xfm);
+  pixelPoint.set(modelPt.x, modelPt.y);
+}
+
+inline void modelToPixel(
+  const OdGeVector3d& viewDir,
+  const OdGeMatrix3d& xfm,
+  const OdGePlane& plane,
+  const OdGePoint3d& modelPoint,
+  OdGePoint2d& pixelPoint)
+{
+  OdGePoint3d ptOnPlane = modelPoint.project(plane, viewDir);
+  ptOnPlane.transformBy(xfm);
+  pixelPoint.set(ptOnPlane.x, ptOnPlane.y);
+}
+
+inline OdGeMatrix3d pixelToModelTransform(const OdGePoint3d& origin, 
+                                          const OdGeVector3d& u, 
+                                          const OdGeVector3d& v, 
+                                          double ySize)
+{
+  OdGeVector3d vOffset(0.5 * u + (ySize - 0.5) * v);
+  OdGeMatrix3d x;
+  x.setCoordSystem( origin + vOffset, u, -v, u.crossProduct(v));
+  return x;
+}
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbRasterImage object pointers.
+*/
+typedef OdSmartPtr<OdDbRasterImage> OdDbRasterImagePtr;
+
+#include "TD_PackPop.h"
+
+#endif // __IMGENT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImageDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImageDef.h
new file mode 100755
index 0000000..6b0a4de
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterImageDef.h
@@ -0,0 +1,430 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __DBRASTERIMAGEDEF_H
+#define __DBRASTERIMAGEDEF_H
+
+#include "TD_PackPush.h"
+
+// Forward declarations
+//
+
+class OdDbDictionary;
+
+#include "DbObjectReactor.h"
+#include "DbObject.h"
+#include "Gi/GiRasterImage.h"
+#include "Ge/GeVector2d.h"
+#include "RxObjectImpl.h"
+
+/** \details
+    This virtual base class defines Raster Image Definition objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+
+    \remarks
+    Raster Image Definitions (OdDbRasterImageDef objects) work with Raster Image (OdDbRasterImage) entities) 
+    in much the same way that Block Table Records (OdDbBlockTableRecord objects) work with Block References
+    (OdDbBlockReference entities).
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRasterImageDef : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRasterImageDef);
+
+  typedef OdGiRasterImage::Units Units;
+
+  OdDbRasterImageDef();
+  
+  OdResult subErase(
+    bool erasing);
+  virtual void subHandOverTo (
+    OdDbObject* pNewObject);
+  void subClose();
+
+  OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Sets the name of the source file containing the raster image for this Raster Image Definition object (DXF 1).
+    
+    \param pathName [in]  Path name.
+  */
+  OdResult setSourceFileName(const OdString& pathName);
+
+  /** \details
+    Returns the name of the source file containing the raster image for this Raster Image Definition object (DXF 1).
+    
+    \remarks
+    This function calls searchForActivePath() to determine the active path.
+    
+    \note
+    This RasterImageDef object must be open for reading.
+  */
+  OdString sourceFileName() const;
+
+  /** \details
+    Loads the source image file for this Raster Image Definition object.
+    
+    \param modifyDatabase [in]  If and only if true, undo recording will be done for this object.
+
+    \remarks
+    This function calls searchForActivePath() to determine the active path.
+    
+    If the image file is currently loaded, the file will not be read.
+    
+    "Lazy loading" implies that the image file will not be loaded until it is required.
+    
+  */
+  virtual OdResult load(
+    bool modifyDatabase = true);
+
+  /** \details
+    Unloads the image for this Raster Image Definition object. 
+    
+    \param modifyDatabase [in]  If and only if true, undo recording will be done for this object.
+
+    \remarks
+
+    \note
+    This RasterImageDef object must be open for writing.
+
+  */
+  virtual void unload(
+    bool modifyDatabase = true);
+
+  /** \details
+    Returns true if and only if the image file for this Raster Image Definition object is loaded (DXF 280).
+  */
+  virtual bool isLoaded() const;
+
+  /** \details
+    Returns the XY pixel size of the image for this Raster Image Definition (DXF 10).
+  */
+  virtual OdGeVector2d size() const;
+
+
+  /** \details
+    Returns the default physical pixel size, in mm/pixel, of the image for this Raster Image Definition object (DXF 10).
+    
+    \note
+    If the image has no default pixel size, 
+    this function returns 1.0/(image width in pixels) for XY resolutions.
+  */
+  virtual OdGeVector2d resolutionMMPerPixel() const;
+
+  /** \details
+    Sets the default physical pixel size, in mm/pixel, of the image for this Raster Image Definition object (DXF 10).
+    
+    \note
+    Loading the actual image file resets this value if the image has default pixel size.
+  */
+  virtual OdResult setResolutionMMPerPixel(const OdGeVector2d&);
+
+
+  int entityCount(bool* pbLocked = NULL) const;
+  void updateEntities() const;
+
+  /** \details
+    Returns the resolution units for the image for this Raster Image Definition object (DXF 281).
+  */
+  virtual OdGiRasterImage::Units resolutionUnits() const;
+
+  /** \details
+    Sets the resolution units for the image for this Raster Image Definition object (DXF 281).
+
+    \note
+    Loading the actual image file resets this value.
+  */
+  virtual void setResolutionUnits(enum OdGiRasterImage::Units);
+
+  /** \details
+    Returns the OdGiRasterImage object associated with this RasterImageDef object 
+  */
+  virtual OdGiRasterImagePtr image(bool load = true);
+
+  /** \details
+    Creates an image from the specified OdGiRasterImage object.
+    \param pImage [in]  Pointer to the RasterImage object.
+    \param modifyDatabase [in]  If and only if true, marks the associated OdDbDatabase instance as modified.
+    
+    \remarks
+    isLoaded() returns false if pImage is NULL. Otherwise, it is returns true..
+  */
+  virtual void setImage(OdGiRasterImage* pImage, bool modifyDatabase = true);
+
+  /** \details
+    Creates an image dictionary, if one is not already present, in the specified OdDbDatabase instance.
+
+    \param pDb [in]  Pointer to the database.
+    
+    \remarks
+    Returns the Object ID of the image dictionary.
+  */
+  static OdDbObjectId createImageDictionary(OdDbDatabase* pDb);
+
+  /** \details
+    Returns the Object ID of the image dictionary in the specified OdDbDatabase instance.
+    \param pDb [in]  Pointer to the database.  
+  */
+  static OdDbObjectId imageDictionary(OdDbDatabase* pDb);
+
+  enum 
+  { 
+    kMaxSuggestNameSize = 2049 
+  };
+
+  /** \details
+    Massages the original image filename to return a new
+    image name suitable for an image dictionary.
+    \param pImageDictionary [in]  Pointer to the image dictionary.
+    \param strFilePath [in]  new image file name. 
+    \param nMaxLength [in]  max length of the name returned
+  */
+  static OdString suggestName(const OdDbDictionary* pImageDictionary,
+                  const OdString& strFilePath, int nMaxLength = kMaxSuggestNameSize);
+
+  OdString activeFileName() const;
+  OdResult setActiveFileName(const OdString& pPathName);
+  /*   comment this out for a while
+
+  int colorDepth() const;
+  OdGiSentScanLines* makeScanLines(
+    const OdGiRequestScanLines* pReq,
+    const OdGeMatrix2d& pixToScreen,
+    OdGePoint2dArray* pActiveClipBndy = 0, // Data will be modified!
+    bool draftQuality = false,
+    bool isTransparent = false,
+    const double brightness = 50.0,
+    const double contrast = 50.0,
+    const double fade = 0.0
+    ) const;
+  OdString searchForActivePath();
+  void embed(); // this function is not implemented in ARX
+  bool isEmbedded() const;
+  OdString fileType() const;
+  void setUndoStoreSize(unsigned int maxImages = 10);
+  unsigned int undoStoreSize() const;
+  bool imageModified() const;
+  void setImageModified(bool modified);
+  void loadThumbnail(OdUInt16& maxWidth, OdUInt16& maxHeight,
+    OdUInt8* pPalette = 0, int nPaletteEntries = 0);
+  void unloadThumbnail();
+  void* createThumbnailBitmap(BITMAPINFO*& pBitmapInfo,
+    OdUInt8 brightness = 50, OdUInt8 contrast = 50, OdUInt8 fade = 0);
+  IeFileDesc* fileDescCopy() const;
+  void getScanLines(OdGiBitmap& bitmap,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0) const;
+  void openImage(IeImg*& pImage);
+  void closeImage();
+
+  */
+  static int classVersion();
+};
+
+
+
+
+/** \details
+    This class implements Raster Image Definition Reactor objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+    
+    \remarks
+    Raster Image Definition Reactor (OdDbRasterImageDefReactor) objects are used 
+    to notify Raster Image (OdDbRasterImage) objects 
+    of changes to their associated Raster Image Definition (OdDbRasterImage) objects.
+    
+    Modifications of Image Definition objects redraw their dependent Raster Image entities. 
+    Deletion of Image Definition objects delete their dependent Raster Image entities.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRasterImageDefReactor : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRasterImageDefReactor);
+
+  OdDbRasterImageDefReactor();
+
+  OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  void erased(
+    const OdDbObject* pObject, 
+    bool erasing = true);
+
+  void modified(
+    const OdDbObject* pObject);
+
+  enum DeleteImageEvent
+  {
+    kUnload = 1,
+    kErase = 2
+  };
+  /** \details
+    Controls notifications of OdDbRasterImage object events.
+    
+    \param enable [in]  If and only if true, enables notifications.
+  */
+  static void setEnable(
+    bool enable);
+
+  /** \details
+    Notification function called whenever an OdDbRasterImageDef object is about to be unloaded or erased.
+    
+    \param pImageDef [in]  Pointer to the OdDbRasterImageDef object sending this notification.
+    \param event [in]  Event triggering the notification.
+    \param cancelAllowed [in]  True to enable user cancellation, false to disable.
+    
+    \remarks
+    Returns true if and only if not cancelled. 
+    
+    event must be one of the following:
+    
+    <table>
+    Name      Value
+    kUnload   1
+    kErase    2
+    </table>
+    
+    
+    \note
+    Use imageModified() to determine if the Image Definition has been modified.
+  */
+  virtual bool onDeleteImage( 
+    const OdDbRasterImageDef* pImageDef,
+    DeleteImageEvent event,
+    bool cancelAllowed);
+
+  static int classVersion();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbRasterImageDefReactor object pointers.
+*/
+typedef OdSmartPtr<OdDbRasterImageDefReactor> OdDbRasterImageDefReactorPtr;
+
+/** \details
+    This class implements Raster Image Definition Transient Reactor objects in an OdDbDatabase instance.
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRasterImageDefTransReactor : public OdDbObjectReactor
+{
+protected:
+  OdDbRasterImageDefTransReactor() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdDbRasterImageDefTransReactor);
+
+  /** \details
+    Notification function called whenever an OdDbRasterImageDef object is about to be unloaded or erased.
+    
+    \param pImageDef [in]  Pointer to the OdDbRasterImageDef object sending this notification.
+    \param event [in]  Event triggering the notification.
+    \param cancelAllowed [in]  True to enable user cancellation, false to disable.
+    
+    \remarks
+    Returns true if and only if not cancelled. 
+    
+    event must be one of the following:
+    
+    <table>
+    Name                                 Value
+    OdDbRasterImageDefReactor::kUnload   1
+    OdDbRasterImageDefReactor::kErase    2
+    </table>
+  */
+  virtual bool onDeleteImage( const OdDbRasterImageDef* pImageDef,
+                              OdDbRasterImageDefReactor::DeleteImageEvent event,
+                              bool cancelAllowed ) = 0;
+};
+
+/*   comment this for a while */
+
+#if 0 /*!DOM*/
+
+
+/** \details
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRasterImageDefFileAccessReactor : public OdDbObjectReactor
+{
+protected:
+  OdDbRasterImageDefFileAccessReactor() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdDbRasterImageDefFileAccessReactor);
+
+  virtual void onAttach(const OdDbRasterImageDef*, const OdString& pPath) = 0;
+  virtual void onDetach(const OdDbRasterImageDef*, const OdString& pPath) = 0;
+  virtual bool onOpen(const OdDbRasterImageDef*, const OdString& pPath,
+    const OdString& pActivePath, bool& replacePath, OdString& replacementPath) = 0;
+
+  virtual bool onPathChange(const OdDbRasterImageDef*,
+    const OdString& pPath, const OdString& pActivePath,
+    bool& replacePath, OdString& replacementPath) = 0;
+
+  virtual void onClose(const OdDbRasterImageDef*, const OdString& pPath) = 0;
+
+  virtual void onDialog(OdDbRasterImageDef*,
+    const OdString& pCaption, const OdString& pFileExtensions) = 0;
+};
+
+#endif
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbRasterImageDef object pointers.
+*/
+typedef OdSmartPtr<OdDbRasterImageDef> OdDbRasterImageDefPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __DBRASTERIMAGEDEF_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterVariables.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterVariables.h
new file mode 100755
index 0000000..b2d3101
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRasterVariables.h
@@ -0,0 +1,246 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __IMGVARS_H
+#define __IMGVARS_H /*!DOM*/
+
+#include "TD_PackPush.h"
+
+class OdDbRasterVariables;
+
+#include "DbRasterImageDef.h"
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRasterVariables object pointers.
+*/
+typedef OdSmartPtr<OdDbRasterVariables> OdDbRasterVariablesPtr;
+
+/** \details
+    This class represents RasterVariables objects in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+   
+    \remarks
+    RasterVariables objects contain settings applicable to raster images.   
+    A single instance of this class is stored with every OdDbDatabase that contains raster images.
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRasterVariables : public OdDbObject
+{
+public:  
+  
+  ODDB_DECLARE_MEMBERS(OdDbRasterVariables);
+
+  OdDbRasterVariables();
+  
+  enum FrameSettings
+  {
+    kImageFrameInvalid  = -1, // Invalid
+    kImageFrameOff      = 0,  // Frame is off
+    kImageFrameAbove    = 1,  // Frame is above the image
+    kImageFrameBelow    = 2,  // Frame is below the image
+    kImageFrameOnNoPlot = 3   // New in R24 (AC24 support)
+  };
+
+  enum ImageQuality
+  {
+    kImageQualityInvalid  = -1, // Invalid
+    kImageQualityDraft    = 0,  // Draft quality
+    kImageQualityHigh     = 1   // High quality
+  };
+    
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields
+    (OdDbDxfFiler* pFiler) const;
+  
+  /** \details
+    Returns the image frame display (DXF 70).
+    
+    \remarks
+    imageFrame() returns one of the following:
+    
+    <table>
+    Name                  Value   Description
+    kImageFrameInvalid    -1      Invalid
+    kImageFrameOff        0       Frame is off
+    kImageFrameAbove      1       Frame is above the image
+    kImageFrameBelow      2       Frame is below the image
+    </table>
+    
+  */
+  virtual FrameSettings imageFrame() const;
+
+  /** \details
+    Sets the image frame display (DXF 70).
+    
+    \param imageFrame [in]  Image frame display.
+
+    \remarks
+    imageFrame must be one of the following:
+    
+    <table>
+    Name                  Value   Description
+    kImageFrameOff        0       Frame is off
+    kImageFrameAbove      1       Frame is above the image
+    kImageFrameBelow      2       Frame is below the image
+    </table>
+  */
+  virtual void setImageFrame( 
+    FrameSettings imageFrame );
+
+  /** \details
+    Returns the image display quality (DXF 71).
+
+    \remarks
+    imageQuality() returns one of the following:
+    
+    <table>
+    Name                    Value   Description
+    kImageQualityInvalid    -1      Invalid
+    kImageQualityDraft       0      Draft quality
+    kImageQualityHigh        1      High quality
+    </table>
+  */
+  virtual ImageQuality imageQuality() const;
+
+  /** \details
+    Sets the image display quality (DXF 71).
+    \param imageQuality [in]  Image Quality.
+
+    \remarks
+    imageQuality must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    kImageQualityInvalid    -1      Invalid
+    kImageQualityDraft       0      Draft quality
+    kImageQualityHigh        1      High quality
+    </table>
+  */
+  virtual void setImageQuality(
+    ImageQuality imageQuality );
+  
+  /** \details
+    Returns the real-world units corresponding to drawing units (DXF 72).
+
+    \remarks
+    units() returns one of the following:
+    
+    <table>
+    Name                                 Value
+    OdDbRasterImageDef::kNone            0 
+    OdDbRasterImageDef::kMillimeter      1 
+    OdDbRasterImageDef::kCentimeter      2 
+    OdDbRasterImageDef::kMeter           3 
+    OdDbRasterImageDef::kKilometer       4 
+    OdDbRasterImageDef::kInch            5 
+    OdDbRasterImageDef::kFoot            6 
+    OdDbRasterImageDef::kYard            7 
+    OdDbRasterImageDef::kMile            8 
+    OdDbRasterImageDef::kMicroinches     9 
+    OdDbRasterImageDef::kMils            10 
+    OdDbRasterImageDef::kAngstroms       11 
+    OdDbRasterImageDef::kNanometers      12 
+    OdDbRasterImageDef::kMicrons         13 
+    OdDbRasterImageDef::kDecimeters      14 
+    OdDbRasterImageDef::kDekameters      15 
+    OdDbRasterImageDef::kHectometers     16 
+    OdDbRasterImageDef::kGigameters      17 
+    OdDbRasterImageDef::kAstronomical    18 
+    OdDbRasterImageDef::kLightYears      19 
+    OdDbRasterImageDef::kParsecs         20
+    </table>
+  */
+  virtual OdDbRasterImageDef::Units userScale() const;
+
+  /** \details
+    Specifies the real-world units corresponding to drawing units  (DXF 72).
+    
+    \param units [in]  Real-world units.
+    
+    \remarks
+    units must be one of the following:
+    
+    <table>
+    Name                                 Value
+    OdDbRasterImageDef::kNone            0 
+    OdDbRasterImageDef::kMillimeter      1 
+    OdDbRasterImageDef::kCentimeter      2 
+    OdDbRasterImageDef::kMeter           3 
+    OdDbRasterImageDef::kKilometer       4 
+    OdDbRasterImageDef::kInch            5 
+    OdDbRasterImageDef::kFoot            6 
+    OdDbRasterImageDef::kYard            7 
+    OdDbRasterImageDef::kMile            8 
+    OdDbRasterImageDef::kMicroinches     9 
+    OdDbRasterImageDef::kMils            10 
+    OdDbRasterImageDef::kAngstroms       11 
+    OdDbRasterImageDef::kNanometers      12 
+    OdDbRasterImageDef::kMicrons         13 
+    OdDbRasterImageDef::kDecimeters      14 
+    OdDbRasterImageDef::kDekameters      15 
+    OdDbRasterImageDef::kHectometers     16 
+    OdDbRasterImageDef::kGigameters      17 
+    OdDbRasterImageDef::kAstronomical    18 
+    OdDbRasterImageDef::kLightYears      19 
+    OdDbRasterImageDef::kParsecs         20
+    </table>
+  */
+  virtual void setUserScale(
+    OdDbRasterImageDef::Units units);
+  
+  /** \details
+    Opens the RasterVariables object in the specified database.
+    
+    \param openMode [in]  Mode in which to open the RasterVariables object.
+    \param pDb [in]  Pointer to the database containg the RasterVariables object.
+
+
+    \remarks
+    Returns a SmartPointer to the RasterVariables object.
+
+    Creates a RasterVariables object if one does not exist.
+  */
+  static OdDbRasterVariablesPtr openRasterVariables(
+    OdDbDatabase* pDb,
+    OdDb::OpenMode openMode = OdDb::kForRead);
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // __IMGVARS_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRay.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRay.h
new file mode 100755
index 0000000..f42d4fd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRay.h
@@ -0,0 +1,382 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBRAY_H
+#define OD_DBRAY_H
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the ray object (Ray entity) in the database. 
+  This class inherits the base functionality of entities. A ray is a semi-infinite line.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_ray_sample.html, Example of Working with the Ray Object>
+
+  \sa
+  <link db_ray.html, Working with Rays>
+
+  OdDbXline, OdDbLine classes
+*/
+class TOOLKIT_EXPORT OdDbRay : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRay);
+
+  /** \details
+    Builds an instance of the ray object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_ray_overview.html, Overview of Rays>
+  */
+  OdDbRay();
+  
+  /*
+    void getOffsetCurvesGivenPlaneNormal(
+    const OdGeVector3d& normal, double offsetDist,
+    OdRxObjectPtrArray& offsetCurves) const; //Replace OdRxObjectPtrArray
+  */
+
+
+  /** \details
+    Returns the WCS coordinates of the base point from which the ray outs 
+    (DXF 10) as three-dimensional point instance.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_specific.html, Specific Ray Properties>
+
+    OdDbRay::setBasePoint() method
+  */
+  OdGePoint3d basePoint() const;
+
+
+  /** \details
+    Sets the base point of the from which the ray outs (DXF 10). The initial value is 
+    (0,0,0) by default.
+
+    \param geBasePoint [in]  Three-dimensional point instance to set the base point.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_specific.html, Specific Ray Properties>
+
+    OdDbRay::basePoint() method
+  */
+  void setBasePoint( const OdGePoint3d& geBasePoint ); 
+
+
+  /** \details
+    Returns the WCS unit direction vector of the ray (DXF 11) as three-dimensional 
+    vector instance. This vector orients the ray in would space.
+    
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_specific.html, Specific Ray Properties>
+
+    OdDbRay::setUnitDir() method
+  */
+  OdGeVector3d unitDir() const;
+
+
+  /** \details
+    Sets the direction vector of the ray (DXF 11) in WCS. The initial value is (0,0,1) 
+    by default.
+
+    \param geDirVector [in]  Three-dimensional vector instance to set the ray direction.
+
+    \remarks
+    The method automatically converts the specified coordinates to a unit vector.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_specific.html, Specific Ray Properties>
+
+    OdDbRay::unitDir() method
+  */
+  void setUnitDir( const OdGeVector3d& geDirVector );
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  /** \note
+    Always returns eInvalidExtents.
+  */
+  OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+
+  /** \details
+    Determines whether the ray entity is planar as a Boolean value and returns True.
+    This method is inherited from the OdDbEntity class.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray.html, Working with Rays>
+
+    OdDbRay::getPlane(), OdDbEntity::isPlanar() methods
+  */
+  virtual bool isPlanar() const;
+
+
+  /** \details
+    Gets an arbitrary plane passed through the ray entity. This method is inherited from the  
+    OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the plane parameters as 
+                a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type 
+                    (returns kLinear - arbitrary plane).
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray.html, Working with Rays>
+
+    OdDbRay::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  /** \details
+    Gets the start parameter value. The start parameter equals a zero for rays.
+
+    \param startParam [out]  Reference to a variable in which this method must save the start    
+                   parameter value as a Double value.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getStartParam( double& startParam ) const;
+
+
+  /** \details
+    This method is not applicable for the ray entity.
+
+    \param endParam [out]  Reference to a variable of a Double type.
+  */
+  virtual OdResult getEndParam( double& endParam ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the start point of the ray for which the parameter 
+    equals zero. The start point coincides with the base point.
+
+    \param startPoint [out]  Reference to a variable in which this method must save the start 
+                   point as three-dimensional point instance.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getStartPoint( OdGePoint3d& startPoint ) const;
+
+
+  /** \details
+    This method is not applicable for the ray entity.
+
+    \param endPoint [out]  Reference to a variable which is three-dimensional point instance.
+  */
+  virtual OdResult getEndPoint( OdGePoint3d& endPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the point on the ray at the specified parameter value.
+
+    \param param [in]  Parameter value specifying the point on the ray as a Double value. 
+    \param pointOnCurve [out]  Reference to a variable in which this method must save the 
+                     three-dimensional point instance corresponding to the parameter.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getPointAtParam( double param, OdGePoint3d& pointOnCurve ) const;
+
+
+  /** \details
+    Computes the parameter at the point placed on the ray.
+
+    \param pointOnCurve [in]  Three-dimensional point instance which specifies the point on 
+                     the ray. 
+    \param param [out] Reference to a variable in which this method must save the parameter   
+              value as a Double value.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getParamAtPoint( const OdGePoint3d& pointOnCurve, double& param ) const;
+
+
+  /** \details
+    Computes the distance along the ray measured from the base point in drawing units   
+    at the specified parameter.
+
+    \param param [in]  Parameter value specifying the point on the ray as a Double value. 
+    \param dist  [out] Reference to a variable in which this method must save the distance value 
+              as a Double value.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+
+  /** \details
+    Computes the parameter at the distance along the ray measured from the base point.
+
+    \param dist [in]   Distance value along the ray as a Double value in drawing units. 
+    \param param [out]  Reference to a variable in which this method must save the parameter value  
+              as a Double value.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+
+  /** \details
+    Computes the first derivative for the specified parameter of the ray entity and returns
+    the three-dimensional vector instance. The first derivative is constant for any point of 
+    the ray.
+
+    \param param [in]  Parameter value specifying the point on the ray as a Double value. 
+    \param firstDeriv [out]  Reference to a variable in which this method must save the first derivative  
+                   as three-dimensional vector instance.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getFirstDeriv( double param, OdGeVector3d& firstDeriv ) const;
+
+
+  /** \details
+    Computes the second derivative for the specified parameter of the ray entity and returns 
+    the three-dimensional vector instance. The second derivative has (0,0,0) coordinates for 
+    any point of the ray.
+
+    \param param [in]  Parameter value specifying the point on the ray as a Double value. 
+    \param secondDeriv [out]  Reference to a variable in which this method must save the second derivative  
+                    as three-dimensional vector instance.
+
+    \sa
+    <link db_ray_sample.html, Example of Working with the Ray Object>
+
+    \sa
+    <link db_ray_compute.html, Computed Ray Properties>
+  */
+  virtual OdResult getSecondDeriv( double param, OdGeVector3d& secondDeriv ) const;
+
+
+  /** \details
+    This method is not applicable for the ray entity.
+  */
+  virtual OdResult getArea( double& area ) const;
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+};
+
+/** \details
+  The typified smart pointer for the ray object (Ray entity). This template class 
+  is specialization of the OdSmartPtr class for the OdDbRay class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbRay> OdDbRayPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTable.h
new file mode 100755
index 0000000..630ab1c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTable.h
@@ -0,0 +1,69 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBREGAPPTABLE_INCLUDED
+#define _ODDBREGAPPTABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTable.h"
+
+class OdDbRegAppTableRecord;
+
+
+/** \details
+    This class implements the RegAppTable, which represents registered application names
+    for Extended Entity Data in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRegAppTable: public OdDbSymbolTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRegAppTable);
+
+  /** \note
+    Teigha applications typically will not use this constructor, insofar as 
+    this class is a base class.
+  */
+  OdDbRegAppTable();
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRegAppTable object pointers.
+*/
+typedef OdSmartPtr<OdDbRegAppTable> OdDbRegAppTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBREGAPPTABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTableRecord.h
new file mode 100755
index 0000000..0ace774
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegAppTableRecord.h
@@ -0,0 +1,81 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBREGAPPTABLERECORD_INCLUDED
+#define _ODDBREGAPPTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+
+/** \details
+    This class represents records in the OdDbRegAppTable in an OdDbDatabase instance.
+    
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRegAppTableRecord: public OdDbSymbolTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRegAppTableRecord);
+
+  OdDbRegAppTableRecord();
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subErase( bool erasing );
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRegAppTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbRegAppTableRecord> OdDbRegAppTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBREGAPPTABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegion.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegion.h
new file mode 100755
index 0000000..e93246a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRegion.h
@@ -0,0 +1,382 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEOMENT_DBREGION_H
+#define GEOMENT_DBREGION_H
+
+#include "TD_PackPush.h"
+#include "ModelerDefs.h"
+#include "DbEntity.h"
+#include "DbSubentId.h"
+
+class OdBrBrep;
+class OdModelerGeometry;
+
+/** \details
+    This class represents Region entities in an OdDbDatabase instance.
+
+    An OdDbRegion entity is a wrapper for an ACIS model that represents
+    the geometry of the OdDbRegion entity.
+
+    \sa
+    TD_Db
+    
+   <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbRegion : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRegion);
+
+  OdDbRegion();
+
+  /** \details
+  Writes the ACIS data of this entity to the specified StreamBuf object.
+
+  \param pStreamBuf [in] Pointer to the StreamBuf object to which the data is to be written.   
+  \param typeVer    [in] Type and version of the ACIS data to write.
+  
+  \returns Returns eOk if successful or an appropriate error code if not. 
+  */
+  OdResult acisOut(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer typeVer = kAfTypeVerAny);
+
+  /** \details
+  Reads the ACIS data for this entity from the specified StreamBuf object.
+
+  \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data is to be read.   
+  \param typeVer    [out] Receives the type and version of the ACIS data to return.
+
+  \returns eOk if successful or an appropriate error code in the other case.
+  
+  \remarks 
+  If typeVer is null, this function uses the type and version 
+  of this Region entity.
+  */
+  OdResult acisIn(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer *typeVer = 0);
+
+  /** \details
+  Returns the boundary representation of the 3D solid entity.
+  
+  \param brep [out]  Receives the boundary representation.
+  */
+  void brep(
+    OdBrBrep& brep);
+
+  /** \details
+  Returns true if and only if there is no ACIS model associated with this entity. 
+  */
+  bool isNull() const;
+
+  /** \details
+  Creates OdDbRegion entities from the closed loops defined by the specified curve segments.
+  
+  \param curveSegments  [in]  Array of curve segments. Each curve segment must be one of the following: OdDb3dPolyline, OdDbArc, OdDbCircle, OdDbEllipse, OdDbLine, OdDbPolyline, or OdDbSpline.
+  \param regions        [out] Receives an array of pointers to the regions.
+
+  \returns Returns eOk if successful, or an appropriate error code if not. 
+
+  \remarks 
+  The newly created regions are non-database residents. It is up to the caller to either add them
+  to an OdDbDatabase or to delete them.
+  */
+  static OdResult createFromCurves( 
+    const OdRxObjectPtrArray& curveSegments,
+    OdRxObjectPtrArray& regions );
+
+  /** \details
+  Returns the WCS normal to the plane of this entity (DXF 210).
+
+  \param normal [out]  Receives the normal.
+
+  \returns Returns eOk if successful or an appropriate error code if not. 
+  */
+  virtual OdResult getNormal(
+  OdGeVector3d& normal) const;
+
+  /** \details
+  Returns true if the region is planar or false in the other case.
+  */
+  virtual bool isPlanar() const;
+
+  /** \details
+  Returns the OdGePlane object that contains the region. If the region is Null, then the WCS X-Y plane is returned. 
+
+  \param plane      [out] A reference to the OdGePlane object that stores the containing plane.
+  \param planarity  [out] A reference to a variable containing information about planarity of the OdGePlane object.
+
+  \returns Returns eOk if successful or an appropriate error code in other case.
+
+  \remarks
+  If typeVer is null, this function uses the type and version 
+  of this region entity.
+  */
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+  TD_USING(OdDbEntity::getPlane);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver, 
+    OdDbObjectId& replaceId, 
+    bool& exchangeXData);
+
+  /** \details
+  Directly sets the contained modeler geometry of this entity.
+  
+  \param pGeometry [in]  Pointer to the modeler geometry.
+  
+  \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult setBody( const void* pGeometry );
+  
+  /** \details 
+  Returns the current modeler geometry. 
+  */
+  virtual void *body( ) const;
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+  
+  virtual OdResult subTransformBy( 
+    const OdGeMatrix3d& xfm );
+
+  /** \details
+  Creates a geometric representation of the region for saving proxy graphics or converting to previous formats.
+
+  \param pWd [in] Pointer to the OdGiWorldDraw object.
+  \param ver [in] Specifies the reason why the method is called.
+
+  \remarks
+  This method can be overridden in a custom classes.
+  */
+	  virtual void saveAs(
+    OdGiWorldDraw* pWd,
+    OdDb::DwgVersion ver ) const;
+
+  /** \details
+  Performs a Boolean operation between this and another region object. 
+  
+  Possible operation types are: 
+* kBoolUnite - unites two regions into one.
+* kBoolIntersect - returns the intersection of two regions.
+* kBoolSubtract - subtracts the region from the first one.
+
+  \param operation  [in] Type of Boolean operation. 	
+  \param otherRegion      [out] Pointer to other region object which also will contain the result of the Boolean operation.
+
+  \returns Returns eOk if the Boolean operation is successful or an appropriate error code if not. If the region is null, eInvalidInput is returned.
+
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  virtual OdResult booleanOper(OdDb::BoolOperType operation, OdDbRegion* otherRegion);
+
+  /** \details
+  Calculates the area of the region.
+  Area value is returned in square drawing units.
+  
+  \param area [out] Reference for returning the area value.
+
+  \returns Returns eOk if successful or an appropriate error code otherwise.
+  
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  virtual OdResult getArea(double& regionArea) const;
+
+  /** \details
+  Calculates the perimeter of the region.
+  Perimeter value is returned in drawing units.
+  
+  \param area [out] Reference for returning the perimeter value.
+
+  \returns Returns eOk if successful, or an appropriate error code otherwise.
+
+  \remarks 
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+    virtual OdResult getPerimeter(double&) const;
+
+  /** \details
+  Calculates the area properties of the region. 
+  
+  The method validates the origin, xAxis, and yAxis parameters to ensure that:
+* axes are perpendicular to each other.
+* axes and the origin lie in the same plane as the region.
+
+  \param origin        [in]  Origin of the coordinate system to use for evaluation (WCS). 
+  \param xAxis         [in]  X axis of the coordinate system to use for evaluation (WCS).
+  \param yAxis         [in]  Y axis of the coordinate system to use for evaluation (WCS).
+  \param perimeter     [out] Reference for returning the value of region's perimeter.
+  \param area          [out] Reference for returning the value of region's area.
+  \param centroid      [out] Reference for returning centroid of the region.
+  \param momInertia    [out] Static array for returning moments of inertia for the region.
+  \param prodInertia   [out] Reference for returning region's product of inertia.
+  \param prinMoments   [out] Static array for returning principal moments for the region. 
+  \param prinAxes      [out] Static array for returning principle axes of the region. 
+  \param radiiGyration [out] Static array for returning radii of gyration of the region. 
+  \param extentsLow    [out] Reference for returning region's minimum extents point. 
+  \param extentsHigh   [out] Reference for returning region's maximum extents point.
+
+  \returns Returns eOk if successful, or an appropriate error code otherwise.
+
+  \remarks 
+  Returned values are measured using the values of origin, xAxis, yAxis parameters. 
+  and are represented in WCS coordinates.
+
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  virtual OdResult getAreaProp( const OdGePoint3d& origin, const OdGeVector3d& xAxis,
+    const OdGeVector3d& yAxis, double& perimeter,
+    double& area, OdGePoint2d& centroid,
+    double momInertia[2], double& prodInertia,
+    double prinMoments[2], OdGeVector2d prinAxes[2],
+    double radiiGyration[2], OdGePoint2d& extentsLow,
+    OdGePoint2d& extentsHigh ) const;
+
+  /** \details
+	Finds the intersections of the specified entity with all the edges of the region's bounding box. 
+	
+
+  \param pEnt 		      [in]  Pointer to the entity which must be intersected with the region.
+  \param intType        [in]  Intersection type.
+  \param points 		    [out] Reference to the array of the appended points of intersection (point coordinates are represented in WCS).
+  \param thisGsMarker   [in]  GS marker of the subentity of the region involved in the intersection operation.
+  \param otherGsMarker  [in]  GS marker of the subentity of the entity represented by pEnt that is involved in the intersection operation.	
+    
+
+  \returns Returns eOk if successful or an appropriate error code in other case.
+
+  \remarks 
+	The intType parameter determines the extension of the region and the specified entity while calculating intersections:
+* OdDb::kOnBothOperands - do not extend the region or the entity represented with pEnt bounding box edges. 
+In this case the method calculates only where the bounding box lines actually intersect with the specified entity.
+* OdDb::kExtendThis - extend the region's bounding box edges (if necessary) when calculating intersections without extending the specified entity. 
+* OdDb::kExtendArg - extend the specified entity (if necessary) when calculating intersections without extending the region's bounding box edges.
+* OdDb::kExtendBoth - extend both the region's bounding box and the specified entity (if necessary) when calculating intersections.
+	
+	Any found intersection points are appended to the points array. All points are represented in WCS coordinates. 
+
+  The thisGsMarker and otherGsMarker parameters provide information for searching intersections between specified subentities. 
+	The default value for these parameters is zero.
+	
+	This method is implemented only for Spatial modeler and returns eNotImplementedYet status 
+	for other modelers. 
+  */
+  virtual OdResult subIntersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+    OdGePoint3dArray& points, OdGsMarker thisGsMarker = 0,
+    OdGsMarker otherGsMarker = 0) const;
+
+  /** \details
+  Projects the bounding box edges of the region and the specified entity onto the specified plane, finds the intersection points for the projections, 
+  and then projects them back onto the bounding box edge of the region.   
+   
+
+  \param pEnt 			    [in]  Pointer to the entity which must be intersected with the region.
+  \param intType 		    [in]  Intersection type.
+  \param projPlane 	    [in]  Projection plane for the apparent intersection of the specified entity and the region.
+  \param points 		    [out] Reference to the array of the appended points of intersection (points coordinates are represented in WCS).
+  \param thisGsMarker   [in]  GS marker of the subentity of the region involved in the intersection operation.
+  \param otherGsMarker  [in]  GS marker of the subentity of the entity represented by pEnt that is involved in the intersection operation.
+  
+  \returns Returns eOk if successful or an appropriate error code otherwise.
+  
+  \remarks 
+  All the points appended to the points array will be on its bounding box edges. The projections are parallel to the normal vector of the plane referenced with projPlane. 
+  Intersection type can be one of the following:
+* OdDb::kOnBothOperands - do not extend the region or the entity represented with pEnt bounding box edges. 
+  In this case the method calculates only where the bounding box lines actually intersect with the specified entity.
+* OdDb::kExtendThis - extend the region's bounding box edges (if necessary) when calculating intersections without extending the specified entity.  
+* OdDb::kExtendArg - extend the specified entity (if necessary) when calculating intersections without extending region's bounding box edges.
+* OdDb::kExtendBoth  extend both the region's bounding box and the specified entity (if necessary) when calculating intersections.
+
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  virtual OdResult subIntersectWith(const OdDbEntity* pEnt, OdDb::Intersect intType,
+    const OdGePlane& projPlane, OdGePoint3dArray& points,
+    OdGsMarker thisGsMarker = 0, OdGsMarker otherGsMarker = 0) const;
+
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& id) const;
+
+  virtual OdResult subGetGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath, OdGsMarkerArray& gsMarkers) const;
+
+  virtual OdResult subGetSubentPathsAtGsMarker(OdDb::SubentType type,
+                                               OdGsMarker gsMark, 
+                                               const OdGePoint3d& pickPoint,
+                                               const OdGeMatrix3d& viewXform, 
+                                               OdDbFullSubentPathArray& subentPaths, 
+                                               const OdDbObjectIdArray* pEntAndInsertStack = 0) const;
+
+  /** \details
+  Returns the number of changes occurred since the region was created.
+  */
+    virtual OdUInt32 numChanges() const;
+
+  virtual OdDbSubentId internalSubentId(void* ent) const;
+  virtual void* internalSubentPtr(const OdDbSubentId& id) const;
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  virtual OdResult subGetGeomExtents( OdGeExtents3d& extents) const;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbRegion object pointers.
+*/
+typedef OdSmartPtr<OdDbRegion> OdDbRegionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRenderSettings.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRenderSettings.h
new file mode 100755
index 0000000..57598cd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRenderSettings.h
@@ -0,0 +1,1284 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbRenderSettings_h_Included_
+#define _DbRenderSettings_h_Included_
+
+#include "Gi/GiEnvironment.h"
+
+/** \details
+    This class is a container class for the properties relevent to generic high-fidelity renderers.
+
+    \remarks
+    Database-resident OdDbRenderSettings objects are stored in the NamedObjectsDictionary
+    under ACAD_RENDER_SETTINGS. 
+    
+    In addition, the active RenderSettings are stored in the NamedObjectsDictionary 
+    under ACAD_RENDER_ACTIVE_SETTINGS. 
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbRenderSettings : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRenderSettings);
+
+  OdDbRenderSettings();
+  virtual ~OdDbRenderSettings();
+
+  /** \details
+    Returns the OdGiDrawable for this RenderSettings object.
+  */
+  virtual OdGiDrawable* drawable();
+
+  /** \details
+    Sets the name of this RenderSettings object.
+    \param name [in]  Name.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.    
+    \note
+    No check is made for RenderSettings objects with duplicate names.
+  */
+  OdResult setName(const OdString& name);
+
+  /** \details
+    Returns the name of this RenderSettings object.
+  */
+  OdString name() const;
+
+  /** \details
+    Sets the description of this RenderSettings object.
+    \param description [in]  Description.
+  */
+  void setDescription(const OdString& description);
+
+  /** \details
+    Returns the description of this RenderSettings object.
+  */
+  OdString description() const;
+
+  /** \details
+    Sets the DisplayIndex of this RenderSettings object.
+    \param displayIndex [in]  DisplayIndex.
+    \remarks
+    The DisplayIndex specfies the display order in the UI of the entries in the ACAD_RENDER_SETTINGS dictionary.
+    
+    DisplayIndices need not be positive or consecutive, and are not intended for use as ID numbers.
+  */
+  void setDisplayIndex(int displayIndex);
+
+  /** \details
+    Returns the DisplayIndex of this RenderSettings object.
+    \remarks
+    The DisplayIndex specfies the display order in the UI of the entries in the ACAD_RENDER_SETTINGS dictionary.
+    
+    DisplayIndices need not be positive or consecutive, and are not intended for use as ID numbers.
+  */
+  int displayIndex() const;
+
+  
+  /** \details
+    Controls the rendering of materials on a per-object basis for this RenderSettings object.
+    \param materialsEnabled [in]  Controls MaterialsEnabled.
+    \remarks
+    If true, materials are rendered on a per-object basis. If false, all objects
+    are rendered with the global material.
+    
+    The default value for MaterialsEnabled == true.  
+  */
+  void setMaterialsEnabled(bool materialsEnabled);
+
+  /** \details
+    Returns true if and only if materials are rendered on a per-object basis for this RenderSettings object.
+    \remarks
+    If true, materials are rendered on a per-object basis. If false, all objects
+    are rendered with the global material.
+    
+    The default value for MaterialsEnabled == true.  
+  */
+  bool materialsEnabled() const;
+
+  /** \details
+    Controls the sampling of image textures for this RenderSettings object.
+    \param textureSampling [in]  Controls TextureSampling.
+  */
+  void setTextureSampling(bool textureSampling);
+
+  /** \details
+    Returns true if and only if texture sampling is enabled for this RenderSettings object.
+  */
+  bool textureSampling() const;
+
+  /** \details
+    Controls the rendering of back-facing faces for this RenderSettings object.
+    \param backFacesEnabled [in]  Controls BackFacesEnabled.
+    \remarks
+    Back-facing faces are rendered if and only if BackFacesEanbled == true;
+    
+    \remarks
+    The default value for BackFacesEnabled == true;
+  */
+  void setBackFacesEnabled(bool backFacesEnabled);
+
+  /** \details
+    Returns true if and only if back-facing faces are rendered for this RenderSettings object.
+  */
+  bool backFacesEnabled() const;
+
+  /** \details
+    Controls the casting of shadows for this RenderSettings object.
+    \param shadowsEnabled [in]  Controls ShadowsEnabled.
+    \remarks
+    Shadows are cast if and only if ShadowsEnabled == true;
+    
+    \remarks
+    The default value for ShadowsEnabled == true;
+  */
+  void setShadowsEnabled(bool shadowsEnabled);
+
+  /** \details
+    Returns true if and only if shadows are cast for this RenderSettings object.
+  */
+  bool shadowsEnabled() const;
+
+
+  /** \details
+    Sets the full filename of the preview image for this RenderSettings object.
+    \param filename [in]  Filename.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    If the PreviewImageFileName is blank, no preview image is associated with this RenderSettings object.
+    
+    The default value for PreviewImageFileName is blank.
+  */
+  OdResult setPreviewImageFileName(const OdString& filename);
+
+  /** \details
+    Returns the full filename of the preview image for this RenderSettings object.
+    \remarks
+
+    If the PreviewImageFileName is blank, no preview image is associated with this RenderSettings object.
+    
+  */
+  OdString previewImageFileName() const;
+
+  /** \details
+    Controls the rendering of the diagnostic background for this RenderSettings object.
+    \param diagnosticBackgroundEnabled [in]  Controls DiagnosticBackgroundEnabled.
+    \remarks
+    The diagnostic (checker) background overrides the background for this RenderSettings object.
+    
+    The default value of DiagnosticBackgroundEnabled == false.
+  */
+  void setDiagnosticBackgroundEnabled(bool diagnosticBackgroundEnabled);
+
+  /** \details
+    Return true if and only if the diagnostic background is enabled for this RenderSettings object.
+  */
+  bool diagnosticBackgroundEnabled() const;
+
+  /** \details
+    Sets flag which is identifies does this render settings are predefined or not.
+    \param bSet [in]  Set flag.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setIsPredefined(bool bSet);
+
+  /** \details
+    Returns flag which is identifies does this render settings are predefined or not.
+  */
+  bool isPredefined() const;
+
+  // OdDbObject functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdGiDrawable functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits)const;
+
+  virtual bool operator==(const OdDbRenderSettings& settings);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRenderSettings object pointers.
+*/
+typedef OdSmartPtr<OdDbRenderSettings> OdDbRenderSettingsPtr;
+
+
+/** \details
+    This class is a container class for the properties relevent to mental ray renderers.
+
+    \remarks
+    Database-resident OdDbMentalRayRenderSettings objects are stored in the NamedObjectsDictionary
+    under ACAD_RENDER_SETTINGS. 
+    
+    In addition, the active RenderSettings are stored in the NamedObjectsDictionary 
+    under ACAD_RENDER_ACTIVE_SETTINGS. 
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbMentalRayRenderSettings : public OdDbRenderSettings
+{
+public:
+  /** \details
+    Shadow sampling multiplier for area lights.
+  */
+  enum ShadowSamplingMultiplier
+  {
+    kSamplingMultiplierZero         = 0, // 0
+    kSamplingMultiplierOneEighth    = 1, // 1/8
+    kSamplingMultiplierOneFourth    = 2, // 1/4
+    kSamplingMultiplierOneHalf      = 3, // 1/2
+    kSamplingMultiplierOne          = 4, // 1
+    kSamplingMultiplierTwo          = 5  // 2
+  };
+public:
+  ODDB_DECLARE_MEMBERS(OdDbMentalRayRenderSettings);
+
+  OdDbMentalRayRenderSettings();
+
+  virtual ~OdDbMentalRayRenderSettings();
+
+  /** \details
+    Controls the minimum and maximum sampling rates when rendering a pixel for this MentalRayRenderSettings object.
+    \param min [in]  Minimum sampling rate. [-3 .. 5]
+    \param max [in]  Maximum sampling rate. [-3 .. 5]
+    \returns
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    * Negative values enable subsampling.
+    * -3 specifies one sample per 64 pixels
+    * 5 specfies one sample per 1028 pixels
+    * The default value of min == -1
+    * The default value of max == 0
+    * Min <= Max
+  */
+  OdResult setSampling(int min, int max);
+
+  /** \details
+    Returns the minimum and maximum sampling rates when rendering a pixel for this MentalRayRenderSettings object.
+    \param min [out]  Receives the minimum sampling rate. [-3 .. 5]
+    \param max [out]  Receives the maximum sampling rate. [-3 .. 5]
+    \remarks
+    * Negative values enable subsampling.
+    * -3 specifies one sample per 64 pixels
+    * 5 specfies one sample per 1028 pixels
+    * The default value of min == -1
+    * The default value of max == 0
+  */
+  void sampling(int& min, int& max) const;
+
+  /** \details
+    Sets the sampling filter parameters for this MentalRayRenderSettings object.
+    \param filter [in]  Filter method.
+    \param width [in]  Width of the filter area in pixels. [0.0 .. 8.0]
+    \param height [in]  Height of the filter area in pixels. [0.0 .. 8.0]
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    The defaults are as follows:
+    
+    <table>
+    Argument     Default
+    filter     kBox
+    width      1.0
+    height     1.0
+    </table>
+  */
+  OdResult setSamplingFilter(OdGiMrFilter filter, double width,
+    double height);
+
+  /** \details
+    Returns the sampling filter parameters for this MentalRayRenderSettings object.
+    \param filter [out]  Receives the filter method.
+    \param width [out]  Receives the width of the filter area in pixels.
+    \param height [out]  Receives the height of the filter area in pixels.
+  */
+  void SamplingFilter(OdGiMrFilter& filter, double& width, double& height)
+    const;
+
+  /** \details
+    Sets the SamplingContrastColor for this MentalRayRenderSettings object.
+    \param red [in]  Red color channel threshold. [0.0 .. 1.0]
+    \param green [in]  Green channel threshold. [0.0 .. 1.0]
+    \param blue [in]  Blue channel threshold. [0.0 .. 1.0]
+    \param alpha [in]  Alpha channel threshold. [0.0 .. 1.0]
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    Additional color camples will be taken if the difference between
+    a sample and its surrounding samples exceeds the SamplingContrastColor.
+
+    The default value for each color channel is 1.0.
+    
+  */
+  OdResult setSamplingContrastColor(float red, float green, float blue, float alpha);
+
+  /** \details
+    Returns the SamplingContrastColor for this MentalRayRenderSettings object.
+    \param red [out]  Receives the red color channel threshold.
+    \param green [out]  Receives the green channel threshold.
+    \param blue [out]  Receives the blue channel threshold. 
+    \param alpha [out]  Receives the alpha channel threshold.
+  */
+  void samplingContrastColor(float& red, float& green, float& blue, float& alpha) const;
+
+  /** \details
+    Sets the method of computing ray-traced shadows for this MentalRayRenderSettings object.
+    \remarks
+    The default value for ShadowMode == krSimple.
+  */
+  void setShadowMode(OdGiMrShadowMode shadowMode);
+
+  /** \details
+    Returns the method of computing ray-traced shadows for this MentalRayRenderSettings object.
+  */
+  OdGiMrShadowMode shadowMode() const;
+
+  /** \details
+    Controls the generation of shadow maps for this MentalRayRenderSettings object.
+    \param shadowMapsEnabled [in]  Controls shadow maps.
+    \remarks
+    The default value of ShadowMapsEnabled == true;
+  */
+  void setShadowMapsEnabled(bool shadowMapsEnabled);
+
+  /** \details
+    Returns true if and only if shadow maps are generated for this MentalRayRenderSettings object.
+  */
+  bool shadowMapsEnabled() const;
+
+  /** \details
+    Controls ray tracing for this MentalRayRenderSettings object.
+    \param rayTracingEnabled [in]  Controls ray tracing.
+    \remarks
+    The default value of RayTracing == true;
+  */
+  void setRayTracingEnabled(bool rayTracingEnabled);
+
+  /** \details
+    Returns true if and only if ray tracing is enabled for this MentalRayRenderSettings object.
+  */
+  bool rayTracingEnabled() const;
+
+  /** \details
+    Sets the maximum ray trace depths for this MentalRayRenderSettings object.
+    
+    \param reflection [in]  Maximum number of ray reflections. 
+    \param refraction [in]  Maximum number of ray refractions.
+    \param sum [in]  Maximum number of ray reflections and refractions.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    The defaults are as follows:
+    
+    <table>
+    Argument      Default
+    reflection    2
+    refraction    2
+    sum           4
+    </table>
+  */
+  OdResult setRayTraceDepth(int reflection, int refraction,
+    int sum);
+
+  /** \details
+    Returns the maximum ray trace depths for this MentalRayRenderSettings object.
+    
+    \param reflection [out]  Receives the maximum number of ray reflections. 
+    \param refraction [out]  Receives the maximum number of ray refractions.
+    \param sum [out]  Receives the maximum number of ray reflections and refractions.
+  */
+  void rayTraceDepth(int& reflection, int& refraction, int& sum) const;
+
+  /** \details
+    Controls global illumination using photon mapping for this MentalRayRenderSettings object.
+    \param globalIlluminationEnabled [in]  Controls GlobalIllumination.
+    
+    \remarks
+    Global illumination permits indirect lighting effects such as color-bleeding.
+    
+    The default value of GlobalIllumination is false.
+  */
+  void setGlobalIlluminationEnabled(bool globalIlluminationEnabled);
+
+  /** \details
+    Returns true if and only if global illumination using photon mapping is 
+    enabled for this MentalRayRenderSettings object.
+  */
+  bool globalIlluminationEnabled() const;
+
+  /** \details
+    Sets the number of photons used for computing global illumination
+    near a sample point for this MentalRayRenderSettings object.
+    \param numPhotons [in]  Number of photons.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    The default value for GISampleCount == 500
+    \sa
+    setGISampleRadius
+    setGISampleRadiusEnabled
+  */
+  OdResult setGISampleCount(int numPhotons);
+
+  /** \details
+    Returns the number of photons used for computing global illumination
+    near a sample point for this MentalRayRenderSettings object.
+  */
+  int giSampleCount() const;
+
+  /** \details
+    Controls the use of the GISampleRadius for computing global illumination 
+    for this MentalRayRenderSettings object.
+    \param giSampleRadiusEnabled [in]  Controls GISampleRadiusEnabled.
+    \remarks
+    If GISampleRadiusEnabled == false, a default, the model space extents
+    are used to computer a default radius.
+    
+    The default value of GISampleRadiusEnabled == false.
+  */
+  void setGISampleRadiusEnabled(bool giSampleRadiusEnabled);
+
+  /** \details
+    Returns true if and only if the GISampleRadius is used for computing 
+    global illumination for this MentalRayRenderSettings object.
+  */
+  bool giSampleRadiusEnabled() const;
+
+  /** \details
+    Sets the radius for computing the photon count for global illumination for this 
+    MentalRayRenderSettings object.
+    
+    \param radius [in]  Sample radius.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    The default value for GISampleRadius == 1.0.
+    
+    \sa
+    setGISampleCount
+    setGISampleRadiusEnabled
+  */
+  OdResult setGISampleRadius(double radius);
+
+  /** \details
+    Returns the radius for computing the photon count for global illumination for this 
+    MentalRayRenderSettings object.
+  */
+  double giSampleRadius() const;
+
+  /** \details
+    Sets the average the number of photons shot per light for this 
+    MentalRayRenderSettings object.
+    \param numPhotons [in]  Number of photons.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    The default value for GIPhotonsPerLight == 10,000.
+  */
+  OdResult setGIPhotonsPerLight(int numPhotons);
+
+  /** \details
+    Returns the average the number of photons shot per light for this 
+    MentalRayRenderSettings object.
+  */
+  int giPhotonsPerLight() const;
+
+  /** \details
+    Sets the maximum photon trace depths for this MentalRayRenderSettings object.
+    
+    \param reflection [in]  Maximum number of photon reflections. 
+    \param refraction [in]  Maximum number of photon refractions.
+    \param sum [in]  Maximum number of photon reflections and refractions.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    The defaults are as follows:
+    
+    <table>
+    Argument      Default
+    reflection    5
+    refraction    5
+    sum           5
+    </table>
+  */
+  OdResult setPhotonTraceDepth(int reflection, int refraction,
+    int sum);
+
+  /** \details
+    Returns the maximum photon trace depths for this MentalRayRenderSettings object.
+    
+    \param reflection [out]  Receives the maximum number of photon reflections. 
+    \param refraction [out]  Receives the maximum number of photon refractions.
+    \param sum [out]  Receives the maximum number of photon reflections and refractions.
+  */
+  void photonTraceDepth(int& reflection, int& refraction, int& sum) const;
+
+  /** \details
+    Controls the application of final gathering for this MentalRayRenderSettings object.
+    \param finalGatheringEnabled [in]  Controls final gathering.
+    \remarks
+    Final gathering permits indirect lighting effects such as color-bleeding.
+  */
+  void setFinalGatheringEnabled(bool finalGatheringEnabled);
+
+  /** \details
+    Returns true if and only if final gathering is enabled for this MentalRayRenderSettings object.
+  */
+  bool finalGatheringEnabled() const;
+
+  /** \details
+    Sets the final gathering ray count for this MentalRayRenderSettings object.
+    \param fgRayCount [in]  Final gathering ray count.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    In order to compute indirect illumination of a scent,
+    FGRayCount rays are shot into the scene for each final gathering point.
+     
+    The default value for FGRayCount = 1000.
+  */
+  OdResult setFGRayCount(int fgRayCount);
+
+  /** \details
+    Returns the final gathering ray count for this MentalRayRenderSettings object.
+    
+    \remarks
+    In order to compute indirect illumination of a scent,
+    FGRayCount rays are shot into the scene for each final gathering point.
+  */
+  int fgRayCount() const;
+
+  /** \details
+    Controls the Final Gathering Sample Radius State for this MentalRayRenderSettings object.
+    
+    \param useMin [in]  True to use user-supplied minimum radius, false for default radius.
+    \param useMax [in]  True to use user-supplied maximum radius, false for default radius.
+    \param inPixels [in]  True if user-supplied radii are in pixels, false for drawing units.
+    \remarks
+    The default values for all parameters == false.
+  */
+  void setFGRadiusState(bool useMin, bool useMax, bool inPixels);
+
+  /** \details
+    Returns the the Final Gathering Sample Radius State for this MentalRayRenderSettings object.
+    
+    \param useMin [out]  Receives true if the user-supplied minimum radius is used, false for the default,
+    \param useMax [out]  Receives true if the user-supplied maximum radius is used, false for the default,
+    \param inPixels [out]  True if user-supplied radii are in pixels, false for drawing units.
+  */
+  void fgSampleRadiusState(bool& useMin, bool& useMax, bool& inPixels) const;
+
+  /** \details
+    Sets the Final Gathering Sample Radii for this MentalRayRenderSettings object.
+    \param minRadius [in]  Minimum radius.
+    \param maxRadius [in]  Maximum radius.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    Default values are are 0.1 for drawing units, and 0.5 for pixels.
+    
+    minRadius <= maxRadius 
+  */
+  OdResult setFGSampleRadius(double minRadius, double maxRadius);
+
+  /** \details
+    Returns the Final Gathering Sample Radii for this MentalRayRenderSettings object.
+    \param minRadius [out]  Receives the minimum radius.
+    \param maxRadius [in]  Receives the maximum radius.
+  */
+  void fgSampleRadius(double& minRadius, double& maxRadius) const;
+
+  /** \details
+    Sets the magnitude of indirect illumination for this MentalRayRenderSettings object.
+    \param energyMultiplier [in]  Energy multiplier.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    The default value for EnergyMultiplier is 1.0.
+    
+    EnergyMultiplier serves as a volume control for the photon emmision of every light.
+  */
+  OdResult setEnergyMultiplier(float energyMultiplier);
+
+  /** \details
+    Returns the magnitude of indirect illumination for this MentalRayRenderSettings object.
+    \remarks
+    EnergyMultiplier serves as a volume control for the photon emmision of every light.
+  */
+  float energyMultiplier() const;
+
+  /** \details
+    Sets the diagnostic image rendering mode for this MentalRayRenderSettings object.
+    \param diagnosticMode [in]  Diagnostic mode.
+  */
+  void setDiagnosticMode(OdGiMrDiagnosticMode diagnosticMode);
+
+  /** \details
+    Returns the diagnostic image rendering mode for this MentalRayRenderSettings object.
+    \param diagnosticMode [in]  Diagnostic mode.
+  */
+  OdGiMrDiagnosticMode diagnosticMode() const;
+
+  /** \details
+    Sets the Diagnostic Grid for this MentalRayRenderSettings object.
+    \param diagnosticGridMode [in]  Coordinate system for the grid.
+    \param gridSpace [in]  Distance between grid lines.
+    
+    \remarks
+    The default mode is krObject, the default grid space is 10.0.
+  */
+  OdResult setDiagnosticGridMode(
+    OdGiMrDiagnosticGridMode diagnosticGridMode, float gridSpace);
+
+  /** \details
+    Returns the Diagnostic Grid for this MentalRayRenderSettings object.
+    \param diagnosticGridMode [out]  Receives the coordinate system for the grid.
+    \param gridSpace [out]  Receives the distance between grid lines.
+  */
+  void diagnosticGridMode(
+    OdGiMrDiagnosticGridMode& diagnosticGridMode, float& gridSpace) const;
+
+  /** \details
+    Sets the Diagnostic Photon Mode for this MentalRayRenderSettings object.
+    \param diagnosticPhotonMode [in]  Diagnostic Photon Mode.
+    \remarks
+    The default value for DiagnosticPhotonMode == krDensity.
+  */
+  void setDiagnosticPhotonMode(
+    OdGiMrDiagnosticPhotonMode diagnosticPhotonMode);
+
+  /** \details
+    Returns the Diagnostic Photon Mode for this MentalRayRenderSettings object.
+  */
+  OdGiMrDiagnosticPhotonMode diagnosticPhotonMode() const;
+
+  /** \details
+    Controls the Diagnostic Samples Mode for this MentalRayRenderSettings object.
+    \param diagnosticSamplesMode [in]  Diagnostic Samples Mode
+    \remarks
+    The default value for DiagnosticSamplesMode == false.
+  */
+  void setDiagnosticSamplesMode(bool diagnosticSamplesMode);
+
+  /** \details
+    Returns the Diagnostic Samples Mode for this MentalRayRenderSettings object.
+    \remarks
+    The default value for DiagnosticSamplesMode == false.
+  */
+  bool diagnosticSamplesMode() const;
+
+  /** \details
+    Sets the Diagnostic BSP Mode for this MentalRayRenderSettings object.
+    \param diagnosticBSPMode [in]  Diagnostic BSP Mode.
+    \remarks
+    The default value for DiagnosticBSPMode is krDepth.
+  */
+  void setDiagnosticBSPMode(OdGiMrDiagnosticBSPMode diagnosticBSPMode);
+
+  /** \details
+    Returns the Diagnostic BSP Mode for this MentalRayRenderSettings object.
+    \param diagnosticBSPMode [in]  Diagnostic BSP Mode.
+    \remarks
+    The default value for DiagnosticBSPMode is krDepth.
+  */
+  OdGiMrDiagnosticBSPMode diagnosticBSPMode() const;
+
+  /** \details
+    Controls the creation of an MI file after rendering for this MentalRayRenderSettings object.
+    \param exportMIEnabled [in]  Export MI Enabled.
+    \remarks
+    The default value for ExportMIEnabled == false.
+    \sa
+    setExportMIFileName
+  */
+  void setExportMIEnabled(bool exportMIEnabled);
+
+  /** \details
+    Returns true if and only if an MI file is created after rendering for this MentalRayRenderSettings object.
+  */
+  bool exportMIEnabled() const;
+
+  /** \details
+    Sets the full filename of the exported MI file for this MentalRayRenderSettings object.
+    \param filename [in]  Filename.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    If the ExportMIFileName is blank, no MI file is associated with this MentalRayRenderSettings object.
+    
+    The default value for ExportMIFileName is blank.
+  */
+  OdResult setExportMIFileName(const OdString& filename);
+
+  /** \details
+    Returns the full filename of the exported MI file for this MentalRayRenderSettings object.
+  */
+  OdString exportMIFileName() const;
+
+  /** \details
+    Sets the image tile size used in rendering for this MentalRaySettings object.
+    \param tileSize [in]  Tile size. [4..512]
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    Larger values decrease rendering time and update frequency during rendering.
+    
+    The default value for TileSize is 32.
+  */
+  OdResult setTileSize(int tileSize);
+
+  /** \details
+    Returns the image tile size used in rendering for this MentalRaySettings object.
+  */
+  int tileSize() const;
+
+  /** \details
+    Sets the tile order used in tile rendering for this MentalRaySettings object.
+    \param tileOrder [in]  Tile order.
+    \remarks
+    The default value for TileOrder is krHilbert.
+  */
+  void setTileOrder(OdGiMrTileOrder tileOrder);
+
+  /** \details
+    Returns the tile order used in tile rendering for this MentalRaySettings object.
+  */
+  OdGiMrTileOrder tileOrder() const;
+
+ 
+  /** \details
+    Sets the maximum memory allocated for rendering for this MentalRaySettings object.
+    \param memoryLimit [in]  Memory limit (MB) [>= 128]
+    \remarks
+    
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    The renderer will decrease performance so as to stay below the memory limit.
+    
+    The default value for MemoryLimit is 1048.
+  */
+  OdResult setMemoryLimit(int memoryLimit);
+
+  /** \details
+    Returns the maximum memory allocated for rendering for this MentalRaySettings object.
+  */
+  int memoryLimit() const;
+
+  /** \details
+    Sets the final gathering mode for this MentalRaySettings object.
+    \param mode [in]  Final gathering mode.
+    \remarks
+    The default value for final gathering mode is krFinalGatherAuto.
+  */
+  OdResult setFinalGatheringMode(OdGiMrFinalGatheringMode mode);
+
+  /** \details
+    Returns the final gathering mode for this MentalRaySettings object.
+  */
+  OdGiMrFinalGatheringMode finalGatheringMode() const;
+
+  /** \details
+    Sets the light luminance scale factor for this MentalRaySettings object.
+    \param fLuminance [in]  Luminance scale factor.
+    \remarks
+    The default value for light luminance scale factor is 1500.0.
+  */
+  OdResult setLightLuminanceScale(double fLuminance);
+
+  /** \details
+    Returns the light luminance scale factor for this MentalRaySettings object.
+  */
+  double lightLuminanceScale() const;
+
+  /** \details
+    Sets the MI mode for this MentalRaySettings object.
+    \param eExportMIMode [in]  MI mode.
+    \remarks
+    The default value for MI mode is krExportMIOff.
+  */
+  OdResult setExportMIMode(OdGiMrExportMIMode eExportMIMode);
+
+  /** \details
+    Returns the MI mode for this MentalRaySettings object.
+  */
+  OdGiMrExportMIMode exportMIMode() const;
+
+  /** \details
+    Sets the shadow sampling multiplier for this MentalRaySettings object.
+    \param multiplier [in]  Shadow sampling multiplier.
+    \remarks
+    The default value for shadow sampling multiplier is kSamplingMultiplierOne.
+  */
+  OdResult setShadowSamplingMultiplier(ShadowSamplingMultiplier multiplier);
+
+  /** \details
+    Returns the shadow sampling multiplier for this MentalRaySettings object.
+  */
+  ShadowSamplingMultiplier shadowSamplingMultiplier() const;
+
+  // OdDbObject functions
+  
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdGiDrawable functions
+  
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  virtual bool operator==(const OdDbMentalRayRenderSettings& settings);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbMentalRayRenderSettings object pointers.
+*/
+typedef OdSmartPtr<OdDbMentalRayRenderSettings> OdDbMentalRayRenderSettingsPtr;
+
+
+/** \details
+    This class is a container class for the properties relevent to rapid RT renderers.
+
+    \remarks
+    Database-resident OdDbRapidRTRenderSettings objects are stored in the NamedObjectsDictionary
+    under ACAD_RENDER_RAPIDRT_SETTINGS.
+
+    In addition, the active RenderSettings are stored in the NamedObjectsDictionary
+    under ACAD_RENDER_ACTIVE_RAPIDRT_SETTINGS.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRapidRTRenderSettings : public OdDbRenderSettings
+{
+public:
+  /** \details
+    Rendring quit condition.
+  */
+  enum RenderTarget
+  {
+    krLevel = 0, // Quit by level
+    krTime,      // Quit by time
+    krInfinite   // Quit never
+  };
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRapidRTRenderSettings);
+
+  OdDbRapidRTRenderSettings();
+
+  virtual ~OdDbRapidRTRenderSettings();
+
+  /** \details
+    Sets render target.
+    \param target [in]  New render target value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setRenderTarget(RenderTarget target);
+
+  /** \details
+    Returns currently set render target.
+  */
+  RenderTarget renderTarget() const;
+
+  /** \details
+    Sets render level.
+    \param level [in]  New render level value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setRenderLevel(int level);
+
+  /** \details
+    Returns currently set render level.
+  */
+  int renderLevel() const;
+
+  /** \details
+    Sets render time.
+    \param time [in]  New render time value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setRenderTime(int time);
+
+  /** \details
+    Returns currently set render time.
+  */
+  int renderTime() const;
+
+  /** \details
+    Sets render lighting model.
+    \param mode [in]  New render lighting model value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setLightingModel(OdGiLightingMode mode);
+
+  /** \details
+    Returns currently set render lighting model.
+  */
+  OdGiLightingMode lightingModel() const;
+
+  /** \details
+    Sets render filter type.
+    \param type [in]  New render filter type value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setFilterType(OdGiFilterType type);
+
+  /** \details
+    Returns currently set render filter type.
+  */
+  OdGiFilterType filterType() const;
+
+  /** \details
+    Sets render filter width.
+    \param width [in]  New render filter width value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setFilterWidth(float width);
+
+  /** \details
+    Returns currently set render filter width.
+  */
+  float filterWidth() const;
+
+  /** \details
+    Sets render filter height.
+    \param height [in]  New render filter height value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setFilterHeight(float height);
+
+  /** \details
+    Returns currently set render filter height.
+  */
+  float filterHeight() const;
+
+  /** \details
+    Sets render filter width and height.
+    \param width [in]  New render filter width value.
+    \param height [in]  New render filter height value.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult setFilterDimensions(float width, float height)
+  {
+    OdResult result = setFilterWidth(width);
+    if (result == eOk)
+      result = setFilterHeight(height);
+    return result;
+  }
+
+  /** \details
+    Returns currently set render filter width and height.
+    \param width [out]  Render filter width value.
+    \param height [out]  Render filter height value.
+  */
+  void filterDimensions(float &width, float &height) const
+  {
+    width = filterWidth();
+    height = filterHeight();
+  }
+
+  // OdDbObject functions
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdGiDrawable functions
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  virtual bool operator==(const OdDbRapidRTRenderSettings& settings);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRapidRTRenderSettings object pointers.
+*/
+typedef OdSmartPtr<OdDbRapidRTRenderSettings> OdDbRapidRTRenderSettingsPtr;
+
+
+/** \details
+
+    \remarks
+    Database-resident OdDbRenderEnvironment objects are stored in the NamedObjectsDictionary
+    under ACAD_RENDER_ENVIRONMENT. 
+    
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbRenderEnvironment : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRenderEnvironment);
+
+  OdDbRenderEnvironment();
+  virtual ~OdDbRenderEnvironment();
+
+  void setFogEnabled(bool bEnable);
+
+  bool fogEnabled() const;
+
+  void setFogBackgroundEnabled(bool bEnable);
+
+  bool fogBackgroundEnabled() const;
+
+  void setFogColor(const OdCmEntityColor& color);
+
+  OdCmEntityColor fogColor() const;
+
+  OdResult setFogDensity(double dNear, double dFar);
+
+  void fogDensity(double& dNear, double& dFar) const;
+
+  OdResult setDistances(double dNear, double dFar);
+
+  void distances(double& dNear, double& dFar) const;
+
+  void setEnvironmentImageEnabled(bool bEnabled);
+
+  bool environmentImageEnabled() const;
+
+  OdResult setEnvironmentImageFileName(const OdString& sFileName);
+
+  OdString environmentImageFileName() const;
+
+  // OdDbObject functions
+
+  OdGiDrawable* drawable();
+  OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdGiDrawable functions
+
+  OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits)const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRenderEnvironment object pointers.
+*/
+typedef OdSmartPtr<OdDbRenderEnvironment> OdDbRenderEnvironmentPtr;
+
+
+/** \details
+    This class is a container for all global rendering properties. 
+
+    \remarks
+    Database-resident OdDbRenderGlobal objects are stored in the NamedObjectsDictionary
+    under ACAD_RENDER_GLOBAL.
+    
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbRenderGlobal : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRenderGlobal);
+
+  enum Procedure
+  {
+    krView = 0,
+    krCrop,
+    krSelected
+  };
+
+  enum Destination
+  {
+    krWindow = 0,
+    krViewport
+  };
+
+  OdDbRenderGlobal();
+  virtual ~OdDbRenderGlobal();
+
+  void setProcedureAndDestination(Procedure nProcedure, Destination nDestination);
+
+  void procedureAndDestination(Procedure& nProcedure, Destination& nDestination) const;
+
+  OdResult setProcedure(Procedure nProcedure);
+
+  Procedure procedure();
+
+  OdResult setDestination(Destination nDestination);
+
+  Destination destination();
+
+  void setSaveEnabled(bool bEnabled);
+
+  bool saveEnabled() const;
+
+  OdResult setSaveFileName(const OdString& sFileName);
+
+  OdString saveFileName() const;
+
+  OdResult setDimensions(int w, int h);
+
+  void dimensions(int& w, int& h) const;
+
+  void setPredefinedPresetsFirst(bool bPredefinedPresetsFirst);
+
+  bool predefinedPresetsFirst() const;
+
+  void setHighInfoLevel(bool bHighInfoLevel);
+
+  bool highInfoLevel() const;
+
+  OdResult setExposureType(OdGiMrExposureType type);
+
+  OdGiMrExposureType exposureType() const;
+
+  OdString dimensionName() const;
+
+  // OdDbObject functions
+
+  OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRenderGlobal object pointers.
+*/
+typedef OdSmartPtr<OdDbRenderGlobal> OdDbRenderGlobalPtr;
+
+
+/** \details
+
+    \remarks
+    Database-resident OdDbRenderEntry objects are stored in the NamedObjectsDictionary
+    under ACAD_RENDER_ENTRIES.
+    
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbRenderEntry : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRenderEntry);
+
+  OdDbRenderEntry();
+  virtual ~OdDbRenderEntry();
+
+  OdResult setImageFileName(const OdString &fileName);
+  OdString imageFileName() const;
+
+  void setDisplayIndex(int nDisplay);
+  int displayIndex() const;
+
+  OdResult setPresetName(const OdString &name);
+  OdString presetName() const;
+
+  OdResult setViewName(const OdString &name);
+  OdString viewName() const;
+
+  OdResult setDimensions(int w, int h);
+  void dimensions(int &w, int &h) const;
+  int dimensionW() const { int w, h; dimensions(w, h); return w; }
+  int dimensionH() const { int w, h; dimensions(w, h); return h; }
+
+  OdResult setStartTime(const OdDbDate &date);
+  const OdDbDate &startTime() const;
+
+  OdResult setEndTime(const OdDbDate &date);
+  const OdDbDate &endTime() const;
+
+  void setRenderTime(float fTime);
+  float renderTime() const;
+
+  void setMemoryAmount(int nAmount);
+  int memoryAmount() const;
+
+  void setMaterialCount(int nCount);
+  int materialCount() const;
+
+  void setLightCount(int nCount);
+  int lightCount() const;
+
+  void setTriangleCount(int nCount);
+  int triangleCount() const;
+
+  // OdDbObject functions
+
+  OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbRenderEntry object pointers.
+*/
+typedef OdSmartPtr<OdDbRenderEntry> OdDbRenderEntryPtr;
+
+
+TOOLKIT_EXPORT OdDbObjectId oddbGetRenderSettingsDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbDictionaryPtr oddbGetRenderSettingsDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbObjectId oddbGetRenderPlotSettingsDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbDictionaryPtr oddbGetRenderPlotSettingsDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbObjectId oddbGetRenderGlobalObjectId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbRenderGlobalPtr oddbGetRenderGlobalObject(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbObjectId oddbGetRenderEnvironmentObjectId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbRenderEnvironmentPtr oddbGetRenderEnvironmentObject(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbObjectId oddbGetActiveRenderSettingsObjectId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbRenderSettingsPtr oddbGetActiveRenderSettingsObject(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbObjectId oddbGetRenderEntriesDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbDictionaryPtr oddbGetRenderEntriesDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbObjectId oddbGetRenderRapidRTSettingsDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbDictionaryPtr oddbGetRenderRapidRTSettingsDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbObjectId oddbGetActiveRenderRapidRTSettingsObjectId(OdDbDatabase* pDb, bool createIfNotFound = false);
+TOOLKIT_EXPORT OdDbRenderSettingsPtr oddbGetActiveRenderRapidRTSettingsObject(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolveOptions.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolveOptions.h
new file mode 100755
index 0000000..8233034
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolveOptions.h
@@ -0,0 +1,153 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbRevolveOptions_h_Included_
+#define _DbRevolveOptions_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbSurface.h"
+
+class OdDbRevolveOptionsImpl;
+
+/** \details
+Class for setting options used for creating revolving surfaces and revolving solids 
+(by calling OdDbRevolvedSurface::createRevolvedSurface() or OdDb3dSolid::createRevolvedSolid() methods).
+Revolve options are used to control the shape of the resulting surface or solid object.
+
+<group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRevolveOptions
+{
+public:
+  /** \details 
+  Creates an instance of revolving surface options.
+  */
+  OdDbRevolveOptions();
+  
+  /** \details 
+  Creates a copy of another instance of revolving surface options (copy constructor).
+  
+  \param src [in] An instance of revolving surface options to be copied.
+  */
+  OdDbRevolveOptions(const OdDbRevolveOptions& src);
+  
+  /** \details 
+  Destroys the instance of revolving surface options.
+  */
+  ~OdDbRevolveOptions();
+  
+  /** \details 
+  Assigning operator for revolving surface options.
+  
+  \param src [in] An instance of revolving surface options to be assigned to this instance.
+  */
+  OdDbRevolveOptions& operator =(const OdDbRevolveOptions& src);
+
+  /** \details
+  Returns the draft angle in radians. 
+ 
+  Draft angle is an angle of a profile's taper relative to the axis while the profile is revolving around the axis.
+  The default value is equal to 0.0. 
+  */
+  double draftAngle() const;
+  
+  /** \details
+  Sets the draft angle.
+  
+  Draft angle is an angle of a profile's taper relative to the axis while the profile is revolving around the axis.
+  The default value is equal to 0.0. 
+  
+  \param ang [in]  A new draft angle (radians).
+  */
+  void setDraftAngle(double ang);
+
+  /** \details
+  Returns the twist angle in radians.
+
+  Twist angle is the angle of a profile's twisting while the profile is revolving around the axis in radians. 
+  The default value is equal to 0.0.
+  */
+  double twistAngle() const;
+  
+  /** \details
+  Sets the twist angle.
+  
+  Twist angle is the angle of a profile's twisting while the profile is revolving around the axis in radians. 
+  The default value is equal to 0.0.
+  
+  \param ang [in]  A new twist angle (radians).
+  */
+  void setTwistAngle(double ang);
+
+  /** \details
+  Returns the value of the close to axis option.
+  
+  If the close to axis option is equal to true, then the ends of the profile will be extended to the axis of revolution before revolving. 
+  The default value of the option is false.
+  */
+  bool closeToAxis() const;
+  
+  /** \details
+  Sets the value of the close to axis option.
+  
+  If the close to axis option is equal to true, then the ends of the profile will be extended to the axis of revolution before revolving. 
+  The default value of the option is false.
+  
+  \param val [in]  A new value of the close to axis option.
+
+  */
+  void setCloseToAxis(bool val);
+
+  /** \details
+  Checks whether a specified entity is valid for the revolve operation.
+  
+  \param pRevEnt              [in]  A pointer to the entity (curve or region) to be revolved.
+  \param axisPnt              [in]  A point on the axis of revolution.
+  \param axisDir              [in]  A vector determining the direction of the revolution axis.
+  \param closed               [out] A passed-in parameter for returning the indicator determining whether the revolved entity is closed.
+  \param endPointsOnAxis      [out] A passed-in parameter for returning the indicator determining whether the revolved entity is open and whether its endpoints lie on the axis of revolution.
+  \param planar               [out] A passed-in parameter for returning the indicator determining whether the revolved entity is planar.
+  \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+  
+  \returns Returns eOk if a specified entity is valid for revolving, or eInvalidInput otherwise.
+  
+  \remarks
+  The method is called by OdDbRevolvedSurface:: createRevolvedSurface() and OdDb3dSolid::createRevolvedSolid() methods, so it is not necessary for a client application to call it. 
+  */
+  OdResult checkRevolveCurve(
+    OdDbEntity* pRevEnt,
+    const OdGePoint3d& axisPnt,
+    const OdGeVector3d& axisDir,
+    bool& closed,
+    bool& endPointsOnAxis,
+    bool& planar,
+    bool displayErrorMessages = false);
+
+private:
+  friend class OdDbRevolveOptionsImpl;
+  OdDbRevolveOptionsImpl* m_pImpl;
+};
+
+#include "TD_PackPop.h"
+#endif //_DbRevolveOptions_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolvedSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolvedSurface.h
new file mode 100755
index 0000000..9f80ee4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRevolvedSurface.h
@@ -0,0 +1,205 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbRevolvedSurface_h_Included_
+#define _DbRevolvedSurface_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbSurface.h"
+#include "DbRevolveOptions.h"
+
+/** \details
+  This class implements a three-dimensional revolved surface entity.
+  
+  \sa
+  TD_Db
+ 
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRevolvedSurface: public OdDbSurface
+{
+public:
+  OdDbRevolvedSurface ();
+  ODDB_DECLARE_MEMBERS(OdDbRevolvedSurface);
+
+  /** \details
+  Creates a revolved surface from a specified curve, region, or planar surface and an axis of revolution.
+  
+  Axis of revolution is defined with a point (axisPnt) and vector (axisDir).
+  pRevEnt will be revolved counter clockwise about the axisDir vector.
+  
+  If startAngle is equal to 0, rotation starts from current position of pRevEnt.
+  
+  \param pRevEnt        [in] A pointer to the planar curve, region, or planar surface that is to be revolved.
+  \param axisPnt        [in] A point of the revolution axis.
+  \param axisDir        [in] A revolution axis' direction represented with an OdGeVector object.
+  \param revAngle       [in] An angle of rotation (radians).
+  \param startAngle     [in] A start angle of rotation (radians).
+  \param revolveOptions [in] Revolving options.
+  \param pSat           [in] A pointer to an output stream buffer.
+  
+  \returns  Returns eOk if surface was successfully created. 
+  If specified data is not valid, returns eInvalidInput.
+  */
+  virtual OdResult createRevolvedSurface ( OdDbEntity* pRevEnt,
+    const OdGePoint3d& axisPnt, const OdGeVector3d& axisDir,
+    double revAngle, double startAngle,
+    OdDbRevolveOptions& revolveOptions, const OdStreamBuf *pSat = 0 );
+
+  /** \details
+  Returns a pointer to the entity that is to be revolved.
+  Revolved entity can be a planar curve, region, or planar surface.
+  */
+  OdDbEntity*   getRevolveEntity () const;
+
+  /** \details
+  Returns a point on the revolution axis.
+  The returned point and the axis direction define the axis of revolution. 
+  */
+  OdGePoint3d getAxisPnt () const;
+  
+  /** \details
+  Sets the axis point. 
+
+  \param pnt [in] An axis point. The revolving entity revolves around this axis point.
+  
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  void setAxisPnt( const OdGePoint3d& pnt );
+  
+  /** \details
+  Returns a vector representing the axis of revolution.
+  */
+  OdGeVector3d getAxisVec () const;
+  
+  /** \details
+  Sets the axis vector for revolution.
+  The axis of revolution is defined by the axis point and axis vector. 
+  
+  \param vec [in]  A new axis vector.
+  
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  void setAxisVec( const OdGeVector3d& vec );
+
+  /** \details
+  Returns the revolution angle (in radians).
+  */
+  double getRevolveAngle () const;
+  
+  /** \details
+  Sets the angle of revolution.
+  
+  \param ang [in]  A new value of revolution angle (in radians).
+  
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  void setRevolveAngle ( double ang );
+  
+  /** \details
+  Returns the start revolution angle (in radians). 
+  */
+  double getStartAngle () const;
+  
+  /** \details
+  Sets the start revolution angle.
+  
+  \param startAng [in]  A new value of start revolution angle (in radians).
+  
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  void setStartAngle (double startAng);
+
+  /** \details
+  Returns current revolve options.
+  Revolve options are stored in the passed OdDbRevolveOptions object.  
+  
+  \param revolveOptions [out]  A passed-in parameter for returning current revolve options.
+  */
+  void getRevolveOptions ( OdDbRevolveOptions& revolveOptions ) const;
+  
+  /** \details
+  Sets the revolve options for the surface.
+  
+  \param revolveOptions [in]  An OdDbRevolveOptions object with the new values of revolution options to be set.
+  
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  void setRevolveOptions ( const OdDbRevolveOptions& revolveOptions );
+
+  /** \details
+  Sets all the data needed for the revolved surface.
+
+  \param axisPnt        [in] A new axis point to be set.
+  \param axisVec        [in] A new axis vector to be set.
+  \param revAngle       [in] A new value of revolution angle.
+  \param revolveOptions [in] A new revolution options object to be set.
+  
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  void setRevolve ( const OdGePoint3d& axisPnt, const OdGeVector3d& axisVec,
+    double revAngle, const OdDbRevolveOptions& revolveOptions );
+
+  OdResult subTransformBy(
+    const OdGeMatrix3d& xfm );
+
+  // OdDbObject methods
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isDependent() const { return false; }
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbRevolvedSurface object pointers.
+*/
+typedef OdSmartPtr<OdDbRevolvedSurface> OdDbRevolvedSurfacePtr;
+
+#include "TD_PackPop.h"
+#endif //_DbRevolvedSurface_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRootExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRootExport.h
new file mode 100755
index 0000000..8dcc894
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRootExport.h
@@ -0,0 +1,47 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+/*  DbRootExport.h
+
+*/
+#ifndef _DB_ROOT_EXPORT_DEFINED
+#define _DB_ROOT_EXPORT_DEFINED
+
+#include "OdPlatformSettings.h"
+
+#ifdef ODA_DBROOT_EXPORTS
+  #define DBROOT_EXPORT            OD_TOOLKIT_EXPORT
+  #define DBROOT_EXPORT_STATIC     OD_STATIC_EXPORT
+#else
+  #define DBROOT_EXPORT            OD_TOOLKIT_IMPORT
+  #define DBROOT_EXPORT_STATIC     OD_STATIC_IMPORT
+#endif
+
+
+#endif  /* _DB_ROOT_EXPORT_DEFINED */
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRotatedDimension.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRotatedDimension.h
new file mode 100755
index 0000000..f26681d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbRotatedDimension.h
@@ -0,0 +1,200 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _DB_ROTATED_DIMENSION_
+#define _DB_ROTATED_DIMENSION_
+
+#include "TD_PackPush.h"
+
+#include "DbDimension.h"
+
+/** \details
+    This class represents Rotated Dimension entities in an OdDbDatabase instance.
+
+    \remarks
+    A Rotated Dimension entity dimensions the distance between between any two points in space
+    as projected onto a line at the specfied rotation angle in the plane of the dimension.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbRotatedDimension : public OdDbDimension
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbRotatedDimension);
+
+  OdDbRotatedDimension();
+  
+  /* OdDbRotatedDimension(
+       double rotation,
+       const OdGePoint3d& xLine1Point,
+       const OdGePoint3d& xLine2Point,
+       const OdGePoint3d& dimLinePoint,
+       const OdChar* dimText = 0,
+       OdDbObjectId dimStyle = OdDbObjectId::kNull);
+  */
+
+  /** \details
+    Returns the WCS start point of the first extension line of this Dimension entity (DXF 13).
+      
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  OdGePoint3d xLine1Point() const;
+
+  /** \details
+    Sets the WCS start point of the first extension line of this Dimension entity (DXF 13).
+  
+    \param xLine1Point [in]  Start point.
+        
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  void setXLine1Point(
+    const OdGePoint3d& xLine1Point);
+  
+  /** \details
+    Returns the WCS start point of the second extension line of this Dimension entity (DXF 14).
+      
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  OdGePoint3d xLine2Point() const;
+
+  /** \details
+    Sets the WCS start point of the second extension line of this Dimension entity (DXF 14).
+  
+    \param xLine2Point [in]  Start point.
+        
+    \remarks
+    This point and the centerPoint define one side of 
+    the angle being dimensioned.
+  */
+  void setXLine2Point(
+    const OdGePoint3d& xLine2Point);
+  
+  /** \details
+    Returns the WCS point defining the location of dimension line for this Dimension entity (DXF 10).
+  */
+  OdGePoint3d dimLinePoint() const;
+
+  /** \details
+    Sets the WCS point defining the location of dimension line for this Dimension entity (DXF 10).
+    
+    \param dimLinePoint [in]  Dimension line point.
+  */
+  void setDimLinePoint(
+    const OdGePoint3d& dimLinePoint);
+  
+  /** \details
+    Returns the obliquing angle for this Dimension entity (DXF 52).
+    
+    \note
+    All angles are expressed in radians.
+  */
+  double oblique() const;
+
+  /** \details
+    Sets the obliquing angle for this Dimension entity (DXF 52).
+    
+    \param oblique [in]  Obliquing angle.
+    
+    \note
+    All angles are expressed in radians.
+  */
+  void setOblique(
+    double oblique);
+  
+  /** \details
+    Returns the rotation angle for this Dimension entity (DXF 50).
+    
+    \remarks
+    The rotation angle is measured from the OCS X-axis to the dimension line of
+    this Dimension entity.
+
+    \note
+    All angles are expressed in radians.
+  */
+  double rotation() const;
+
+  /** \details
+    Sets the rotation angle for this Dimension entity (DXF 50).
+    
+    \param rotation [in]  Rotation angle.
+
+    \remarks
+    The rotation angle is measured from the OCS X-axis to the dimension line of
+    this Dimension entity.
+
+    \note
+    All angles are expressed in radians.
+  */
+  void setRotation(double rotation);
+
+  bool jogSymbolOn() const;
+  void setJogSymbolOn(bool value);
+
+  OdGePoint3d jogSymbolPosition() const;
+  void setJogSymbolPosition(const OdGePoint3d& pt);
+
+  double jogSymbolHeight();
+  void setJogSymbolHeight(double value);
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbRotatedDimension object pointers.
+*/
+typedef OdSmartPtr<OdDbRotatedDimension> OdDbRotatedDimensionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSSet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSSet.h
new file mode 100755
index 0000000..e336fbe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSSet.h
@@ -0,0 +1,294 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DBSSET_H_
+#define _DBSSET_H_
+
+#include "Ge/GePoint3d.h"
+#include "DbDatabase.h"
+#include "DbObjectId.h"
+#include "DbObject.h"
+#include "DbObjectIterator.h"
+#include "ResBuf.h"
+#include "DbSubentId.h"
+#include "SSet.h"
+
+//class OdDbSelectionSet;
+//class OdDbBlockTableRecord;
+
+
+/** \details
+    This class is the abstract base class for all selection filters.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT ODRX_ABSTRACT OdDbSelectionFilter : public OdRxObject
+{
+protected:
+  OdDbSelectionFilter();
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSelectionFilter);
+
+  virtual bool accept(const OdDbObjectId& entityId) const = 0;
+};
+
+typedef OdSmartPtr<OdDbSelectionFilter> OdDbSelectionFilterPtr;
+
+
+class OdDbParametrizedSF;
+typedef OdSmartPtr<OdDbParametrizedSF> OdDbParametrizedSFPtr;
+
+/** \details
+    This class represents selection filter defined by ResBuf chain.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT ODRX_ABSTRACT OdDbParametrizedSF : public OdDbSelectionFilter
+{
+protected:
+  OdDbParametrizedSF();
+public:
+  static OdDbParametrizedSFPtr createObject(const OdResBuf* pSpec, const OdDbDatabase* pDb);
+
+  virtual void setSpecification(const OdResBuf* /*pSpec*/, const OdDbDatabase* /*pDb*/ = 0) {}
+  virtual OdResBufPtr specification() const { return OdResBufPtr(); }
+  virtual const OdDbDatabase* database() const { return 0; }
+};
+
+
+/** \details
+  This class implements iterators for OdDbSelectionSet objects.
+
+  \remarks
+
+  Instances are returned by OdDbSelectionSet::newIterator().
+
+  <group OdDb_Classes>
+*/
+//class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbSelectionSetIterator : public OdRxObject
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbSelectionSetIterator : public OdSelectionSetIterator
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSelectionSetIterator);
+
+  /** \details
+      Returns the Object ID of the entity at the current position specified by
+      this Iterator object.
+  */
+  virtual OdDbObjectId objectId() const = 0;
+  
+protected:
+  OdDbSelectionSetIterator();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSelectionSetIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbSelectionSetIterator>  OdDbSelectionSetIteratorPtr;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSelectionSet object pointers.
+*/
+typedef OdSmartPtr<OdDbSelectionSet>  OdDbSelectionSetPtr;
+
+/** \details
+    This class represents Selection Sets in an Teigha application.
+
+    \remarks
+    Only entities from an OdDbDatabase object's ModelSpace or PaperSpace may be
+    added to a Selection Set.
+
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbSelectionSet : public OdSelectionSet
+{
+protected:
+  OdDbSelectionSet();
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSelectionSet);
+
+  /** \details
+    Creates a SelectionSet object for the specified database. 
+    \param pDb [in]  Pointer to the database object for which to create the SelectionSet object.
+    \remarks
+    Returns a SmartPointer to the new SelectionSet object.
+  */
+  static OdDbSelectionSetPtr createObject(const OdDbDatabase *pDb);
+  
+  virtual const OdDbDatabase* database() const = 0;
+
+  /** \details
+      Returns an Iterator object that provides access to the entities in this Selection Set.
+  */
+  //virtual OdSelectionSetIteratorPtr newIterator() const = 0; 
+
+  virtual OdDbObjectIdArray objectIdArray() const = 0;
+
+  // operations on the selection set 
+
+  /** \details
+    Filter selection only.  
+
+    \param pDb [in]  Pointer to the database object for which to create the SelectionSet object.
+    \param pFilter [in] object of type OdDbSelectionFilter or pointer to a OdResBuf chain defining the filter.
+  */
+  static OdDbSelectionSetPtr select(const OdDbDatabase *pDb, const OdRxObject* pFilter = 0);
+
+  /** \details
+    Filter selection only.  
+
+    \param vpId [in]  id of OdDbViewportTableRecord  record or OdDbViewport entity in which to select.
+    \param nPoints [in] 
+    \param wcsPts [in] 
+    \param mode [in] 
+    \param pFilter [in] object of type OdDbSelectionFilter or pointer to a OdResBuf chain defining the filter.
+  */
+  static OdDbSelectionSetPtr select(
+    const OdDbObjectId& vpId,
+    int nPoints,
+    const OdGePoint3d* wcsPts,
+    OdDbVisualSelection::Mode mode = OdDbVisualSelection::kCrossing,
+    OdDbVisualSelection::SubentSelectionMode sm = OdDbVisualSelection::kDisableSubents,
+    const OdRxObject* pFilter = 0);
+
+  /** \details
+    Returns the number of entities in this group.
+  */
+  //virtual OdUInt32 numEntities() const = 0;
+
+  /** \details
+    Appends the specified entity to this SelectionSet object.  
+
+    \param entityId [in]  Object ID of the OdDbEntity. 
+    \param method [in] Selection method to associate with object
+  */
+  TD_USING(OdSelectionSet::append);
+  //virtual void append(OdDbStub* entityId, OdDbSelectionMethod* pMethod = 0) = 0;
+  virtual void append(const OdDbObjectId& entityId, OdDbSelectionMethod* pMethod = 0) = 0;
+
+  /** \details
+    Appends the specified entity to this SelectionSet object.  
+
+    \param entityIds [in]  Array of Object IDs of the OdDbEntity's.
+    \param method [in] Selection method to associate with objects
+  */
+  virtual void append(const OdDbObjectIdArray& entityIds, OdDbSelectionMethod* pMethod = 0);
+
+  /** \details
+  Appends the specified subentity to this SelectionSet object.  
+
+  \param subent [in]  Subentity path to append. 
+  */
+  //virtual void append(const OdDbBaseFullSubentPath& subent, OdDbSelectionMethod* pMethod = 0) = 0;
+  virtual void append(const OdDbFullSubentPath& subent, OdDbSelectionMethod* pMethod = 0) = 0;
+
+  /** \details
+    Appends the specified entity to this SelectionSet object.  
+
+    \param pSSet [in]  Other selection set to copy entities from. 
+  */
+  virtual void append(const OdSelectionSet* pSSet);
+
+  /** \details
+    Removes the specified entity from this SelectionSet object.  
+
+    \param entityId [in]  Object ID of the OdDbEntity. 
+  */
+  TD_USING(OdSelectionSet::remove);
+  //virtual void remove(OdDbStub* entityId) = 0;
+  virtual void remove(const OdDbObjectId& entityId) = 0;
+
+  /** \details
+    Removes the specified entity from this SelectionSet object.  
+
+    \param entityIds [in]  Array Object ID of the OdDbEntity. 
+  */
+  virtual void remove(const OdDbObjectIdArray& entityIds);
+
+  /** \details
+  Removes the specified subentity from this SelectionSet object.  
+
+  \param subent [in]  Subentity path  to remove. 
+  */
+  //virtual void remove(const OdDbBaseFullSubentPath& subent) = 0;
+  virtual void remove(const OdDbFullSubentPath& subent) = 0;
+
+  /** \details
+  Removes the specified entity from this SelectionSet object.  
+
+  \param pSSet [in]  Object ID of the OdDbEntity. 
+  */
+  virtual void remove(const OdSelectionSet* pSSet);
+
+  /** \details
+    Returns true if and only if the specified entity is a member
+    of this SelectionSet object.
+    \param entityId [in]  Object ID of the OdDbEntity. 
+  */
+  TD_USING(OdSelectionSet::isMember);
+  //virtual bool isMember(OdDbStub* entityId) const = 0;
+  virtual bool isMember(const OdDbObjectId& entityId) const = 0;
+
+  /** \details
+  Returns true if and only if the specified subentity is a member
+  of this SelectionSet object.
+  \param entityId [in]  Subentity path. 
+  */
+  //virtual bool isMember(const OdDbBaseFullSubentPath& subent) const = 0;
+  virtual bool isMember(const OdDbFullSubentPath& subent) const = 0;
+
+  TD_USING(OdSelectionSet::method);
+  //virtual OdDbSelectionMethodPtr method(OdDbStub* entityId) const = 0;
+  virtual OdDbSelectionMethodPtr method(const OdDbObjectId& entityId) const = 0;
+
+  /** \details
+  Returns the number of subentities selected inside the entity with the given id.
+  (analogous to acedSSSubentLength)
+  \param entityId [in]  entity id for the parent of the subentity
+
+  \remarks
+  Returns true if and only if not at the end of the list.
+  */
+  virtual OdUInt32 subentCount(const OdDbObjectId& entityId) const = 0;
+
+  /** \details
+  Returns the given subentity path inside the entity with the given id.
+  (analogous to acedSSSubentName)
+  \param entityId [in]  entity id for the parent of the subentity
+  \param i [in]  index of the subentity.
+  \param path [out]  Path to the subentity.
+
+  \remarks
+  Returns true if and only if "i" is valid index in the subentities array.
+  */
+  virtual bool getSubentity(const OdDbObjectId& entityId, OdUInt32 i, OdDbFullSubentPath& path) const = 0;
+  
+  /** \details
+    Returns the selection method for the given subentity
+  */
+  virtual OdDbSelectionMethodPtr method(const OdDbFullSubentPath& subent) const = 0;
+};
+
+#endif //_DBSSET_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSafeTransaction.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSafeTransaction.h
new file mode 100755
index 0000000..e0f1e26
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSafeTransaction.h
@@ -0,0 +1,116 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBSAFETRANSACTION_INCLUDED_
+#define _ODDBSAFETRANSACTION_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "StaticRxObject.h"
+#include "DbTransactionReactor.h"
+
+
+/** \details
+    This class implements Safe OdDbTransactionReactor objects.
+    
+    \remarks
+    These Reactor objects assure that all active database transactions for the 
+    tracked database will be aborted when an instance of this class is destroyed.
+
+    <group OdDb_Classes>
+*/
+class OdDbSafeTransaction : private OdStaticRxObject<OdDbTransactionReactor>
+{
+  int m_nCounter;
+  OdDbDatabase* m_pTrackedDB;
+
+  OdDbSafeTransaction& operator = (const OdDbSafeTransaction& other);
+
+  /** \details
+    Notification function called whenever a transaction has started.
+    \remarks
+    Increments the reference count of this Reactor object.
+  */
+void transactionStarted(OdDbDatabase* )  { ++m_nCounter; }
+  /** \details
+    Notification function called whenever a transaction has ended.
+    \param pTrackedDb [in]  Pointer to the tracked database.
+    \remarks
+    Decrements the reference count of this Reactor object.
+
+    This Reactor object is removed from the tracked database when the reference count reaches zero.
+  */
+  void transactionEnded(OdDbDatabase* pTrackedDb)
+  {
+    if(!--m_nCounter)
+      pTrackedDb->removeTransactionReactor(this);
+  }
+  /** \details
+    Notification function called whenever a transaction has been aborted.
+    \param pTrackedDb [in]  Pointer to the tracked database.
+    \remarks
+    Decrements the reference count of this Reactor object.
+
+    This Reactor object is removed from the tracked database when the reference count reaches zero.
+  */
+  void transactionAborted(OdDbDatabase* pTrackedDb)
+  {
+    if(!--m_nCounter)
+      pTrackedDb->removeTransactionReactor(this);
+  }
+public:
+  /** \param pTrackedDB [in]  Pointer to the tracked database.
+    
+    \remarks
+    Adds this Reactor object to the tracked database. 
+  */
+  OdDbSafeTransaction(OdDbDatabase* pTrackedDb)
+  : m_nCounter(0), m_pTrackedDB(pTrackedDb)
+  {
+    if (m_pTrackedDB)
+    {
+      m_pTrackedDB->addTransactionReactor(this);
+    }
+  }
+
+  /** \remarks
+    Removes this Reactor object from the tracked database,
+    and aborts all active transactions started since this Reactor object
+    was constructed. 
+  */
+	~OdDbSafeTransaction()
+  { 
+    m_pTrackedDB->removeTransactionReactor(this);
+    while(m_nCounter--)
+      m_pTrackedDB->abortTransaction();
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBSAFETRANSACTION_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbScale.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbScale.h
new file mode 100755
index 0000000..abe9156
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbScale.h
@@ -0,0 +1,278 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBSCALE_INCLUDED_
+#define _DBSCALE_INCLUDED_
+
+#include "DbObject.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /scale object/ that stores information about an /annotation scale/ as an 
+  element of the database container. The database stores the scale instances in the dictionary 
+  and associates the object ID with an each scale instance. The /scale dictionary/ is accessed from 
+  the /database object/ using the getScaleListDictionaryId() method. The /root drawing dictionary/, 
+  associates the "ACAD_SCALELIST" name with the /scale dictionary/.
+
+  \remarks
+  This class is intended for stand-alone applications only. TXSDK developers cannot use it.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+  <link db_scale_sample_dictionary.html, Example of Working with the Scale Dictionary Object>
+
+  \sa
+  <link db_scale.html, Working with Scales>
+
+  OdDbAnnotationScale class
+*/
+class TOOLKIT_EXPORT OdDbScale : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbScale);
+
+  /** \details
+    Builds an instance of the scale object.
+
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_scale_manipulate.html, Manipulating Objects of the Scale Dictionary>
+  */
+  OdDbScale();
+
+
+  /** \details
+    Returns the internal scale name as a String value. This name is used as a comment for the ratio 
+    of paper units to drawing units when the scale object is displayed in a list.
+  
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::setScaleName() method
+  */
+  class OdString scaleName() const;
+
+
+  /** \details
+    Sets the internal scale name as a String value. This name is used as a comment for the ratio 
+    of paper units to drawing units when the scale object is displayed in a list. The initial value 
+    is an empty string by default.
+  
+    \param sName [in]   Scale name as non-empty string.
+
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::scaleName() method
+  */
+  void setScaleName( const OdString& sName );
+
+
+  /** \details
+    Returns the scale factor as a positive Double value. This factor defines the ratio in which 
+    units of model space correlate to the units of paper space and indicates how many paper units 
+    fit to one drawing unit.
+  
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::paperUnits(), OdDbScale::drawingUnits() methods
+  */
+  double scale() const;
+
+
+  /** \details
+    Returns the number of drawing units as a positive Double value.
+  
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::setDrawingUnits(), OdDbScale::paperUnits(), OdDbScale::scale() methods
+  */
+  double drawingUnits() const;
+
+
+  /** \details
+    Sets the number of drawing units as a positive Double value. The initial value is 1.0 by default.
+  
+    \param vUnits [in]   value of drawing units.
+
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::drawingUnits(), OdDbScale::setPaperUnits(), OdDbScale::scale() methods
+  */
+  void setDrawingUnits( double vUnits );
+
+
+  /** \details
+    Returns the number of paper units as a positive Double value.
+  
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::setPaperUnits(), OdDbScale::drawingUnits(), OdDbScale::scale() methods
+  */
+  double paperUnits() const;
+
+
+  /** \details
+    Sets the number of paper units as a positive Double value. The initial value is 1.0 by default.
+  
+    \param vUnits [in]   value of paper units.
+
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::paperUnits(), OdDbScale::setDrawingUnits(), OdDbScale::scale() methods
+  */
+  void setPaperUnits( double vUnits );
+
+
+  /** \details
+    Determines whether the scale object is temporary stored in the database and returns True if the  
+    scale is temporary or False if the scale is fixed. 
+    
+    \remarks
+    The temporary scale typically exists because attached XREF objects in the drawing have dependencies 
+    on scales that are not directly referenced by other objects in the drawing. 
+
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::setIsTemporaryScale() method
+  */
+  bool isTemporaryScale() const;
+
+
+  /** \details
+    Sets the scale temporary status as a Boolean value. The initial value is False by default.
+
+    \remarks
+    The temporary scale typically exists because attached XREF objects in the drawing have  
+    dependencies on scales that are not directly referenced by other objects in the drawing. 
+
+    \param bStatus [in]   True if the scale is temporary or False if the scale is fixed.
+
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::isTemporaryScale() method
+  */
+  void setIsTemporaryScale( bool bStatus );
+
+
+  /** \details
+    Determines whether the scale object is selected as one-to-one (1:1) by default and returns True if 
+    the scale is selected (1:1) by default or False if the scale is not the default.
+
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::setIsUnitScale() method
+  */
+  bool isUnitScale() const;
+
+
+  /** \details
+    Sets the scale default status as a Boolean value. The initial value is False by default.
+
+    \param bStatus [in]   True if the scale is selected (1:1) by default or False if the scale is not the default.
+
+    \sa
+    <link db_scale_sample_object.html, Example of Working with the Scale Object>
+
+    \sa
+    <link db_scale.html, Working with Scales>
+
+    OdDbScale::isUnitScale() method
+  */
+  void setIsUnitScale( bool bStatus );
+
+  /*!DOM*/
+  /** \details
+    For internal use only.
+  */
+  void getXRefMangledName(OdString, OdString&, OdDbDatabase *);
+  /*!DOM*/  
+  /** \details
+    For internal use only.
+  */
+  static bool nameExists(const OdString&,OdString*,OdDbDatabase *);
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual void appendToOwner(OdDbIdPair& idPair, OdDbObject* pOwnerObject, OdDbIdMapping& ownerIdMap) ODRX_OVERRIDE;
+  virtual OdResult subErase(bool erasing) ODRX_OVERRIDE;
+  virtual void applyPartialUndo(OdDbDwgFiler* pFiler, OdRxClass* pClass) ODRX_OVERRIDE;
+};
+
+/** \details
+  The typified smart pointer for the scale object. This template class is a specialization of 
+  the OdSmartPtr class for OdDbScale object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbScale> OdDbScalePtr;
+
+
+#endif //_DBSCALE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSection.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSection.h
new file mode 100755
index 0000000..3061e30
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSection.h
@@ -0,0 +1,354 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OdDbSection_h_Included_
+#define _OdDbSection_h_Included_
+
+#include "DbEntity.h"
+#include "SmartPtr.h"
+#include "DbHatch.h"
+#include "TD_PackPush.h"
+#include "ModelerGeometry.h"
+
+class OdDbSectionSettings;
+typedef OdSmartPtr<OdDbSectionSettings> OdDbSectionSettingsPtr;
+
+class OdDbSection;
+typedef OdSmartPtr<OdDbSection> OdDbSectionPtr;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSection : public OdDbEntity
+{
+public:
+  enum State
+  {
+    kPlane              = 0x01,
+    kBoundary           = 0x02,
+    kVolume             = 0x04
+  };
+
+  enum SubItem
+  {
+    kNone               = 0x00,
+    kSectionLine        = 0x01,
+    kSectionLineTop     = 0x02,
+    kSectionLineBottom  = 0x04,
+    kBackLine           = 0x08,
+    kBackLineTop        = 0x10,
+    kBackLineBottom     = 0x20,
+    kVerticalLineTop    = 0x40,
+    kVerticalLineBottom = 0x80
+  };
+
+  enum Height
+  {
+    kHeightAboveSectionLine = 0x1,
+    kHeightBelowSectionLine = 0x2
+  };
+
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSection);
+
+  OdDbSection();
+  static OdDbSectionPtr createObject(const OdGePoint3dArray& pts,
+    const OdGeVector3d& verticalDir);
+  static OdDbSectionPtr createObject(const OdGePoint3dArray& pts,
+    const OdGeVector3d& verticalDir, const OdGeVector3d& vecViewingDir);
+
+  OdDbSection::State state() const;
+  void setState(OdDbSection::State nState);
+
+  const OdString getName() const;
+  void getName(OdString& sName) const;
+  void setName(const OdString& pszName);
+
+  OdGeVector3d viewingDirection () const;
+  OdResult setViewingDirection(const OdGeVector3d& dir);
+
+  OdGeVector3d verticalDirection() const;
+  OdResult setVerticalDirection(const OdGeVector3d& dir);
+
+  OdGeVector3d normal() const;
+  OdResult plane(OdGeVector3d& uAxis, OdGeVector3d& vAxis) const;
+
+  int indicatorTransparency() const;
+  void setIndicatorTransparency(int nTransparency);
+
+  OdCmColor indicatorFillColor  () const;
+  void setIndicatorFillColor(const OdCmColor& color);
+
+  int numVertices() const;
+  OdResult getVertex(int nIndex, 
+    OdGePoint3d& pt) const;
+  OdResult setVertex(int nIndex, 
+    const OdGePoint3d& pt);
+  OdResult addVertex(int nInsertAt, 
+    const OdGePoint3d& pt);
+  OdResult removeVertex(int nIndex);
+  void  getVertices(OdGePoint3dArray& pts) const;
+  OdResult setVertices(const OdGePoint3dArray& pts);
+
+  double height(OdDbSection::Height nHeightType) const;
+  OdResult setHeight(OdDbSection::Height nHeightType, double fHeight);
+
+  //bool  hitTest(const OdGePoint3d& ptHit, int* pSegmentIndex, OdGePoint3d* ptOnSegment, OdDbSection::SubItem* pSubItem) const;
+  OdResult createJog   (const OdGePoint3d& ptOnSection);
+  bool hasJogs() const;
+
+  OdDbObjectId getSettings() const;
+  OdDbSectionSettingsPtr getSettings(OdDb::OpenMode mode) const;
+
+  bool isLiveSectionEnabled() const;
+  void enableLiveSection(bool bEnable);
+
+  bool isSlice() const;
+  OdResult setIsSlice( bool bIsSlice );
+
+  double thicknesDepth() const;
+  OdResult setThicknesDepth( double depth );
+
+  double sectionPlaneOffset() const;
+  OdResult setSectionPlaneOffset( double offset );
+
+public:
+  // Base class overrides
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+
+  virtual OdResult subGetClassID(void* pClsid) const;
+  
+  virtual void subClose();
+  
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xform);
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+
+  //virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const;
+
+  OdResult generateSectionGeometry (OdDbEntity*             pEnt,
+                                    OdArray<OdDbEntityPtr>& intBoundaryEnts,
+                                    OdArray<OdDbEntityPtr>& intFillEnts,
+                                    OdArray<OdDbEntityPtr>& backgroundEnts,
+                                    OdArray<OdDbEntityPtr>& foregroundEnts,
+                                    OdArray<OdDbEntityPtr>& curveTangencyEnts) const;
+
+  // INTERNAL USE ONLY
+  OdResult generateSectionGeometry (OdDbEntity*             pEnt,
+                                    OdArray<OdDbEntityPtr>& intBoundaryEnts,
+                                    OdArray<OdDbEntityPtr>& intFillEnts,
+                                    OdArray<OdDbEntityPtr>& backgroundEnts,
+                                    OdArray<OdDbEntityPtr>& foregroundEnts,
+                                    OdArray<OdDbEntityPtr>& curveTangencyEnts,
+                                    bool                    bIsSetProperties) const;
+
+
+  double topPlane() const;
+  OdResult  setTopPlane(double);
+
+  double bottomPlane() const;
+  OdResult setBottomPlane(double);
+  
+  double elevation() const;
+  OdResult setElevation( double);
+};
+
+
+//*************************************************************************
+// OdDbSectionSettings
+//*************************************************************************
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSectionSettings : public OdDbObject
+{
+public:
+  enum SectionType
+  {
+    kLiveSection                = 0x1,
+    k2dSection                  = 0x2,
+    k3dSection                  = 0x4 
+  };
+
+  enum Geometry
+  {
+    kIntersectionBoundary       = 0x1,
+    kIntersectionFill           = 0x2,
+    kBackgroundGeometry         = 0x4,
+    kForegroundGeometry         = 0x8,
+    kCurveTangencyLines         = 0x10 
+  };
+
+  enum Generation
+  {
+    kSourceAllObjects           = 0x1,
+    kSourceSelectedObjects      = 0x2,
+
+    kDestinationNewBlock        = 0x10,
+    kDestinationReplaceBlock    = 0x20,
+    kDestinationFile            = 0x40
+  };
+
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSectionSettings);
+
+  OdDbSectionSettings();
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  void reset();
+  void reset(OdDbSectionSettings::SectionType nSecType);
+
+  OdDbSectionSettings::SectionType currentSectionType() const;
+  void setCurrentSectionType(OdDbSectionSettings::SectionType nSecType);
+
+  OdDbSectionSettings::Generation generationOptions(OdDbSectionSettings::SectionType nSecType) const;
+  void setGenerationOptions(OdDbSectionSettings::SectionType nSecType,
+    OdDbSectionSettings::Generation nOptions);
+
+  void getSourceObjects(OdDbSectionSettings::SectionType nSecType,
+    OdDbObjectIdArray& ids) const;
+  void setSourceObjects(OdDbSectionSettings::SectionType nSecType,
+    const OdDbObjectIdArray& ids);
+
+  OdDbObjectId destinationBlock(OdDbSectionSettings::SectionType nSecType) const;
+  void setDestinationBlock(OdDbSectionSettings::SectionType nSecType,
+    const OdDbObjectId& id);
+
+  const OdString destinationFile(OdDbSectionSettings::SectionType nSecType) const;
+  void setDestinationFile(OdDbSectionSettings::SectionType nSecType,
+    const OdString& pszFileName);
+
+  bool  visibility(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setVisibility(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    bool bVisible);
+  OdCmColor color(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setColor(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, const OdCmColor& color);
+  OdString layer(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setLayer(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    const OdString& pszLayer);
+  OdString linetype(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setLinetype (OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    const OdString& pszLinetype);
+  double linetypeScale(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setLinetypeScale(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    double fScale);
+  OdString plotStyleName(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setPlotStyleName(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    const OdString& pszPlotStyleName);
+  OdDb::LineWeight lineWeight(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setLineWeight(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    OdDb::LineWeight nLineWeight);
+  int   faceTransparency(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setFaceTransparency(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    int nTransparency);
+  int   edgeTransparency(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setEdgeTransparency(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    int nTransparency);
+  bool  hatchVisibility(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setHatchVisibility(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    bool bVisible);
+  void getHatchPattern(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    OdDbHatch::HatchPatternType& nPatternType, 
+    OdString& pszPatternName) const;
+  void setHatchPattern(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    OdDbHatch::HatchPatternType nPatternType, 
+    const OdString& pszPatternName);
+  double hatchAngle(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setHatchAngle(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    double fAngle);
+  double hatchSpacing(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setHatchSpacing(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    double fSpacing);
+  double hatchScale(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setHatchScale(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    double fScale);
+  bool  hiddenLine(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setHiddenLine(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    bool bHiddenLine);
+  bool  divisionLines(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry) const;
+  void setDivisionLines(OdDbSectionSettings::SectionType nSecType, 
+    OdDbSectionSettings::Geometry nGeometry, 
+    bool bShow);
+};
+
+
+#include "TD_PackPop.h"
+
+#endif //_OdDbSection_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionManager.h
new file mode 100755
index 0000000..b7e8cf7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionManager.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbSectionManager_h_Included_
+#define _DbSectionManager_h_Included_
+
+#include "DbSection.h"
+#include "TD_PackPush.h"
+
+
+class OdDbSection;
+class OdDbSectionManagerIterator;
+typedef OdSmartPtr<OdDbSectionManagerIterator> OdDbSectionManagerIteratorPtr;
+
+
+//*************************************************************************
+// OdDbSectionManager
+//*************************************************************************
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSectionManager : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSectionManager);
+
+  OdDbObjectId getSection(const OdString& pszName ) const;
+  OdDbSectionPtr getSection(const OdString& pszName, OdDb::OpenMode mode) const;
+  OdDbObjectId getLiveSection() const;
+  OdDbSectionPtr getLiveSection(OdDb::OpenMode mode) const;
+  int numSections() const;
+  OdDbSectionManagerIteratorPtr newIterator () const;
+  OdResult getUniqueSectionName(const OdString& pszBaseName, 
+    OdString& pszUniqueName) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+protected:
+  OdDbSectionManager();
+};
+
+typedef OdSmartPtr<OdDbSectionManager> OdDbSectionManagerPtr;
+
+//*************************************************************************
+// OdDbSectionManagerIterator
+//*************************************************************************
+
+class OdDbSectionManagerIteratorImpl;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSectionManagerIterator : public OdRxObject
+{
+  OdDbSectionManagerIteratorImpl* m_pImpl;
+  friend class OdDbSectionManager;
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSectionManagerIterator);
+  OdDbSectionManagerIterator();
+  ~OdDbSectionManagerIterator();
+
+  void  start();
+  void  step();
+  bool  done() const;
+
+  OdDbObjectId getSection() const;
+  OdDbSectionPtr getSection(OdDb::OpenMode openMode) const;
+};
+
+#include "TD_PackPop.h"
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionViewStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionViewStyle.h
new file mode 100755
index 0000000..2f0cf4f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionViewStyle.h
@@ -0,0 +1,617 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_SECTIONVIEWSTYLE_H
+#define OD_SECTIONVIEWSTYLE_H
+
+#include "DbModelDocViewStyle.h"
+#include "Ge/GeDoubleArray.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents detail view style objects.
+    
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbSectionViewStyle : public OdDbModelDocViewStyle
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSectionViewStyle);
+
+  /** \details
+    Defines identifier position types.
+  */
+  enum IdentifierPosition {
+    kEndCuttingPlane             = 0, // The identifier is placed at the end of the cutting plane.
+    kAboveDirectionArrowLine     = 1, // The identifier is placed above the direction arrow line.
+    kAboveDirectionArrowSymbol   = 2, // The identifier is placed above the direction arrow symbol.
+    kStartDirectionArrow         = 3, // The identifier is placed at the start of the direction arrow.
+    kEndDirectionArrow           = 4, // The identifier is placed at the end of the direction arrow.
+  };
+
+  /** \details
+    Defines section view symbol arrowhead direction.
+  */
+  enum ArrowDirection {
+    kTowardsCuttingPlane    = 0, // The arrowheads are oriented towards the cutting plane.
+    kAwayFromCuttingPlane   = 1, // The arrowheads are oriented away from the cutting plane.
+  };
+
+  /** \details
+    Default constructor. Creates an OdDbSectionViewStyle instance.
+  */
+  OdDbSectionViewStyle();
+  ~OdDbSectionViewStyle();
+   
+  /** \details
+    Returns the object ID of the style assigned to the identifier.
+  */
+  OdDbObjectId identifierStyleId() const;
+
+  /** \details
+    Sets the identifier's text style.
+
+
+    ObjectId The ID of the text style for the identifier.
+
+	\returns
+	OdDb::eOk if successful.
+  */
+  OdResult setIdentifierStyleId(const OdDbObjectId &objId);
+
+  /** \details
+    Returns the identifier's color.
+  */
+  OdCmColor identifierColor() const;
+
+  /** \details
+    Sets the identifier's color.
+  */
+  OdResult setIdentifierColor(const OdCmColor& color);
+
+  /** \details
+    Returns the identifier's height.
+  */
+  double identifierHeight() const;
+
+  /** \details
+    Sets the identifier's height.
+  */
+  OdResult setIdentifierHeight(double height);
+
+  /** \details
+    Returns the excluded characters that are specified for the identifier.
+  */
+  OdString identifierExcludeCharacters() const;
+
+  /** \details
+    Sets the characters to exclude for the identifier.
+
+
+    str   Characters to exclude, each separated by a comma. 
+
+    \returns
+    eOk if successful 
+    or 
+    eInvalidInput if incorrect format or invalid characters.
+  */
+  OdResult setIdentifierExcludeCharacters(const OdString& str);
+
+  /** \details
+    Returns the object ID of the arrow start symbol.
+  */
+  OdDbObjectId arrowStartSymbolId() const;
+
+  /** \details
+    Sets the arrow start symbol to use a specified block.
+  */
+  OdResult setArrowStartSymbolId(const OdDbObjectId &arrowSymbolId);
+
+  /** \details
+    Returns the object ID of the arrow end symbol.
+  */
+  OdDbObjectId arrowEndSymbolId() const;
+
+  /** \details
+    Sets the arrow end symbol to use a specified block.
+  */
+  OdResult setArrowEndSymbolId(const OdDbObjectId &arrowSymbolId);
+
+  /** \details
+    Returns the arrow symbol's color.
+  */
+  OdCmColor arrowSymbolColor() const;
+
+  /** \details
+    Sets the arrow symbol's color.
+  */
+  OdResult setArrowSymbolColor(const OdCmColor& color);
+
+  /** \details
+    Returns the arrow symbol's size.
+  */
+  double arrowSymbolSize() const;
+
+  /** \details
+    Sets the arrow symbol's size.
+  */
+  OdResult setArrowSymbolSize(double size);
+
+  /** \details
+    Returns the arrow symbol's extension length.
+  */
+  double arrowSymbolExtensionLength() const;
+
+  /** \details
+    Sets the arrow symbol's extension length.
+  */
+  OdResult setArrowSymbolExtensionLength(double length);
+
+  /** \details
+    Returns the plane line's lineweight.
+  */
+  OdDb::LineWeight planeLineWeight() const;
+
+  /** \details
+    Sets the plane line's lineweight.
+  */
+  OdResult setPlaneLineWeight(OdDb::LineWeight lineweight);
+
+  /** \details
+    Returns the plane line's color.
+  */
+  OdCmColor planeLineColor() const;
+
+  /** \details
+    Sets the plane line's color.
+  */
+  OdResult setPlaneLineColor(const OdCmColor& color);
+
+  /** \details
+    Returns the object ID of the plane line's linetype.
+  */
+  OdDbObjectId planeLineTypeId() const;
+
+  /** \details
+    Sets the plane line's linetype according to the linetype's object ID.
+  */
+  OdResult setPlaneLineTypeId(const OdDbObjectId &objId);
+
+  /** \details
+    Returns the bend line's color.
+  */
+  OdCmColor bendLineColor() const;
+
+  /** \details
+    Sets the bend line's color.
+  */
+  OdResult setBendLineColor(const OdCmColor& color);
+
+  /** \details
+    Returns the bend line's lineweight.
+  */
+  OdDb::LineWeight  bendLineWeight() const;
+
+  /** \details
+    Sets the bend line's lineweight.
+  */
+  OdResult setBendLineWeight(OdDb::LineWeight lineweight);
+
+  /** \details
+    Returns the object ID of the bend line's linetype.
+  */
+  OdDbObjectId bendLineTypeId() const;
+
+  /** \details
+    Sets the bend line's linetype.
+  */
+  OdResult setBendLineTypeId(const OdDbObjectId &objId);
+
+  /** \details
+    Returns the bend line's length.
+  */
+  double bendLineLength() const;
+
+  /** \details
+    Sets the bend line's length.
+  */
+  OdResult setBendLineLength(double length);
+
+  /** \details
+    Returns the end line's length.
+  */
+  double endLineLength() const;
+
+  /** \details
+    Sets the end line's length.
+  */
+  OdResult setEndLineLength(double length);
+
+  /** \details
+    Returns the object ID of the view label's text style.
+  */
+  OdDbObjectId viewLabelTextStyleId() const;
+
+  /** \details
+    Sets the view label's text style.
+  */
+  OdResult setViewLabelTextStyleId(const OdDbObjectId &objId);
+
+  /** \details
+    Returns the view label's color.
+  */
+  OdCmColor viewLabelTextColor() const;
+
+  /** \details
+    Sets the view label's color.
+  */
+  OdResult setViewLabelTextColor(const OdCmColor& color);
+
+  /** \details
+    Returns the view label's text height.
+  */
+  double viewLabelTextHeight() const;
+
+  /** \details
+    Sets the view label's text height.
+  */
+  OdResult setViewLabelTextHeight(double height);
+
+  /** \details
+    Returns the view label's offset.
+  */
+  double viewLabelOffset() const;
+
+  /** \details
+    Sets the view label's offset.
+  */
+  OdResult setViewLabelOffset(double offset);
+
+  /** \details
+    Returns the view label's attachment point.
+  */
+  OdDbModelDocViewStyle::AttachmentPoint viewLabelAttachment() const;
+
+  /** \details
+    Sets the view label's attachment point.
+  */
+  OdResult setViewLabelAttachment(OdDbModelDocViewStyle::AttachmentPoint attachment);
+
+  /** \details
+    Returns the view label's text alignment.
+  */
+  OdDbModelDocViewStyle::TextAlignment viewLabelAlignment() const;
+
+  /** \details
+    Sets the view label's text alignment.
+  */
+  OdResult setViewLabelAlignment(OdDbModelDocViewStyle::TextAlignment alignment);
+
+  /** \details
+    Returns the view label's pattern.
+  */
+  OdString viewLabelPattern() const;
+
+  /** \details
+    Returns the view label's pattern.
+
+
+    pField  (Optional) If the pattern uses fields,
+            they are copied 'pField'.
+    \returns
+    Pattern of the view label.
+  */
+  OdString getViewLabelPattern(OdDbField* pField = NULL) const;
+
+  /** \details
+    Sets the view label's pattern.
+    
+
+    pattern     Pattern to assign to the view label.
+    pField      (Optional) Specify a field to assign the pattern from the field
+                (instead of the pattern itself).
+
+    \returns
+    OdDb::eOk if successful.
+  */
+  OdResult setViewLabelPattern(const OdString& pattern,
+                               const OdDbField* pField = NULL);
+
+  /** \details
+    Returns the hatch pattern.
+  */
+  OdString hatchPattern() const;
+
+  /** \details
+    Sets the hatch pattern.
+  */
+  OdResult setHatchPattern(const OdString& pattern);
+
+  /** \details
+    Returns the hatch's color.
+  */
+  OdCmColor hatchColor() const;
+
+  /** \details
+    Sets the hatch's color.
+  */
+  OdResult setHatchColor(const OdCmColor& color);
+
+  /** \details
+    Returns the hatch's background color.
+  */
+  OdCmColor hatchBackgroundColor() const;
+
+  /** \details
+    Sets the hatch's background color.
+  */
+  OdResult setHatchBackgroundColor(const OdCmColor& color);
+
+  /** \details
+    Returns the hatch's scale.
+  */
+  double hatchScale() const;
+
+  /** \details
+    Sets the hatch's scale.
+  */
+  OdResult setHatchScale(double scale);
+
+  /** \details
+    Returns the hatch's angle array as a pointer to an OdGeDoubleArray object.
+  */
+  const OdGeDoubleArray& hatchAngles() const;
+
+  /** \details
+    Sets the hatch's angle array.
+    
+    \param angleArray [in]  Array of doubles to set hatch's angles used by section views.
+
+    \note
+    eOk if successful.
+
+    \remarks
+    Angles are set in radians. At least one angle value must be present in the array. The first element is used by the first section view component, the second element is used by the second component and so on. 
+    If the component number is more than the array size then the sequence is cycled. 
+  */
+  OdResult setHatchAngles(const OdGeDoubleArray& angleArray);
+
+  /** \details
+    Sets the hatch's transparency.
+    
+    \param transparency [in]  Transparency object to set hatch's transparency.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setHatchTransparency(const OdCmTransparency& transparency);
+
+  /** \details
+    Returns the hatch's transparency as an OdCmTransparency object.
+  */
+  OdCmTransparency hatchTransparency() const;
+
+  /** \details
+    Returns whether continuous labeling is enabled.
+  */
+  bool isContinuousLabeling() const;
+
+  /** \details
+    Sets whether continuous labeling is enabled or disabled.
+
+    \param bValue [in]  True if continuous labeling is to be enabled, false otherwise.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setContinuousLabeling(bool bValue);
+
+  /** \details
+    Returns whether arrowheads display.
+  */
+  bool showArrowheads() const;
+
+  /** \details
+    Sets whether arrowheads are shown or not.
+
+    \param bValue [in]  True if arrowheads are to be shown, false otherwise.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setShowArrowheads(bool bValue);
+
+  /** \details
+    Returns whether view labels display.
+  */
+  bool showViewLabel() const;
+
+  /** \details
+    Sets whether view labels are shown or not.
+
+    \param bValue [in]  True if view labels are to be shown, false otherwise.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setShowViewLabel(bool bValue);
+
+  /** \details
+    Returns whether plane lines display.
+  */
+  bool showAllPlaneLines() const;
+
+  /** \details
+    Sets whether plane lines are shown or not.
+
+    \param bValue [in]  True if plane lines are to be shown, false otherwise.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setShowAllPlaneLines(bool bValue);
+
+  /** \details
+    Returns whether identifiers at all bends of the cutting plane lines display.
+  */
+  bool showAllBendIndentifiers() const;
+
+  /** \details
+    Sets whether identifiers at all bends are shown or not.
+
+    \param bValue [in]  True if identifiers at all bends are to be shown, false otherwise.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setShowAllBendIndentifiers(bool bValue);
+
+  /** \details
+    Returns whether end lines and bend lines display.
+  */
+  bool showEndAndBendLines() const;
+
+  /** \details
+    Sets whether end lines and bend lines are shown or not.
+
+    \param bValue [in]  True if end lines and bend lines are to be shown, false otherwise.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setShowEndAndBendLines(bool bValue);
+
+  /** \details
+    Returns whether hatches display.
+  */
+  bool showHatching() const;
+
+  /** \details
+    Sets whether hatches are shown or not.
+
+    \param bValue [in]  True if hatches are to be shown, false otherwise.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setShowHatching(bool bValue);
+
+  ///** \details
+  //  Inspects the string that defines the excluded characters of an identifier and checks it
+  //  for valid characters and the correct format.
+  //
+  //  \param [in] str  String of characters that is set as the excluded characters for the identifier.
+  //
+  //  \returns
+  //  True if the string is formatted correctly; false otherwise.
+  //*/
+  //static bool validateIdentifierExcludeCharacters(const OdString& str);
+
+  /** \details
+    Returns view identifier position as an OdDbSectionViewStyle::IdentifierPosition value.
+  */
+  OdDbSectionViewStyle::IdentifierPosition viewIdentifierPosition() const;
+
+  /** \details
+    Sets view identifier position type.
+
+    \param type [in]  Identifier position type.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setViewIdentifierPosition(OdDbSectionViewStyle::IdentifierPosition type);
+
+  /** \details
+    Returns view identifier offset as a double value.
+  */
+  double viewIdentifierOffset() const;
+
+  /** \details
+    Sets view identifier offset.
+
+    \param offset [in]  View identifier offset.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setViewIdentifierOffset(double offset);
+
+  /** \details
+    Returns arrow position type for this OdDbSectionViewStyle object as an OdDbSectionViewStyle::ArrowDirection value.
+  */
+  OdDbSectionViewStyle::ArrowDirection arrowPosition() const;
+
+  /** \details
+    Sets section view symbol arrowhead direction for this OdDbSectionViewStyle object.
+
+    \param type [in]  Arrowhead direction.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setArrowPosition(OdDbSectionViewStyle::ArrowDirection type);
+
+  /** \details
+    Returns the end line's overshoot value.
+  */
+  double endLineOvershoot() const;
+
+  /** \details
+    Sets the end line's overshoot value.
+
+    \param length [in]  Line's overshoot length.
+
+    \note
+    eOk if successful.
+  */
+  OdResult setEndLineOvershoot(double length);
+
+  // OdDbModelDocViewStyle overridden functions
+  virtual OdDbObjectId postViewStyleToDb(OdDbDatabase* pDb, const OdString& styleName);
+
+protected:
+  // OdDbObject overridden functions
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+//protected:
+//  // For internal use only
+//  virtual OdDbObjectPtr subDeepClone(OdDbObject* pOwner,
+//                                     OdDbIdMapping& idMap, bool isPrimary = true) const;
+//  virtual OdDbObjectPtr subWblockClone(OdDbObject* pOwner,
+//                                       OdDbIdMapping& idMap, bool isPrimary = true) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSectionViewStyle object pointers.
+*/
+typedef OdSmartPtr<OdDbSectionViewStyle> OdDbSectionViewStylePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_SECTIONVIEWSTYLE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionablePE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionablePE.h
new file mode 100755
index 0000000..4ed754a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSectionablePE.h
@@ -0,0 +1,47 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#include "DbObject.h"
+
+#ifndef OD_SECTIONABLEPE_H
+#define OD_SECTIONABLEPE_H
+
+#include "TD_PackPush.h"
+
+class TOOLKIT_EXPORT OdDbSectionablePE : public OdRxObject
+{
+public:
+  OdDbSectionablePE() {}
+  ODRX_DECLARE_MEMBERS(OdDbSectionablePE);
+
+  virtual bool supportSection(const OdDbObject& pObject) = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSectionablePE object pointers.
+*/
+typedef OdSmartPtr<OdDbSectionablePE> OdDbSectionablePEPtr;
+
+#include "TD_PackPop.h"
+
+#endif //OD_SECTIONABLEPE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSecurity.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSecurity.h
new file mode 100755
index 0000000..43e9347
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSecurity.h
@@ -0,0 +1,180 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBSECURITY_INCLUDED_
+#define _ODDBSECURITY_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "OdArray.h"
+#include "DbExport.h"
+#include "OdString.h"
+
+enum
+{
+  SECURITYPARAMS_ENCRYPT_DATA     = 0x00000001,
+  SECURITYPARAMS_ENCRYPT_PROPS    = 0x00000002,
+
+  SECURITYPARAMS_SIGN_DATA        = 0x00000010,
+  SECURITYPARAMS_ADD_TIMESTAMP    = 0x00000020,
+
+  SECURITYPARAMS_ALGID_RC4        = 0x00006801
+};
+
+
+typedef OdString OdPassword;
+
+/** \details
+    This class represents the security parameters used by OdCrypt classes.
+    
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class OdSecurityParams
+{
+public:
+  OdSecurityParams()
+    : nFlags(0)
+    , nProvType(0)
+    , nAlgId (SECURITYPARAMS_ALGID_RC4)
+    , nKeyLength(40)
+  {}
+
+  OdUInt32    nFlags;
+  OdPassword  password;
+  OdUInt32    nProvType;
+  OdString   provName;
+  OdUInt32    nAlgId;
+  OdUInt32    nKeyLength;
+
+  OdString   sCertSubject;
+  OdString   sCertIssuer;
+  OdString   sCertSerialNum;
+  OdString   sComment;
+  OdString   sTimeServer;
+
+};
+
+/** \details
+    This class defines the interface for the 
+    encription/decription of byte data.
+    
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdCrypt : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdCrypt);
+
+  /** \details
+    Initializes this OdCrypt object with the specified security parameters.
+    \param securityParams [in]  Security parameters. 
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool initialize(const OdSecurityParams& securityParams) = 0;
+  /** \details
+    Encrypts the specified buffer.
+    
+    \param bufferSize [in]  Number of bytes.
+    \param buffer [in/out] Data to be encrypted.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool encryptData(OdUInt8* buffer, OdUInt32 bufferSize) = 0;
+
+  /** \details
+    Decrypts the specified buffer.
+    
+    \param bufferSize [in]  Number of bytes.
+    \param buffer [in/out] Data to be decrypted.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool decryptData(OdUInt8* buffer, OdUInt32 bufferSize) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdCrypt object pointers.
+*/
+typedef OdSmartPtr<OdCrypt> OdCryptPtr;
+
+/** \details
+    This class implements Iterator objects that traverse entries in OdPwdCache objects.
+
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdPwdIterator : public OdRxObject
+{
+public:
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() const = 0;
+  /** \details
+    Sets this Iterator object to reference the entry following the current entry.
+  */
+  virtual void next() = 0;
+  /** \details
+    Returns the Password object pointed to by this Iterator object. 
+
+    \param password [out]  Receives the Password object.
+  */
+  virtual void get(OdPassword& password) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdPwdIterator object pointers.
+*/
+typedef OdSmartPtr<OdPwdIterator> OdPwdIteratorPtr;
+
+/** \details
+  This class implements and manages a Password Cache.
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdPwdCache : public OdRxObject
+{
+public:
+  /** \details
+    Adds the specified Password object to this Cache object.
+
+    \param password [in]  Password object.
+  */
+  virtual void add(const OdPassword& password) = 0;
+  /** \details
+    Returns an Iterator object that can be 
+    used to traverse the OdPassword objects in this Stack object.
+  */
+  virtual OdPwdIteratorPtr newIterator() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdPwdCache object pointers.
+*/
+typedef OdSmartPtr<OdPwdCache> OdPwdCachePtr;
+
+#include "TD_PackPop.h"
+
+#endif  // _ODDBSECURITY_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSequenceEnd.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSequenceEnd.h
new file mode 100755
index 0000000..883148e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSequenceEnd.h
@@ -0,0 +1,86 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_SEQUENCE_END_
+#define _OD_DB_SEQUENCE_END_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+    This class represents SequenceEnd (Seqend) entities in an OdDbDatabase instance.  
+    
+    \remarks
+    OdDbSequenceEnd entities are automatically created and handled by Teigha for
+    complex objects such as OdDb2dPolyline and OdDbBlockReference.
+     
+    Client applications may add extended data or extension dictionaries to these 
+    entities, but should not create or delete them.
+
+    These entities have no associated geometries.
+ 
+    \note
+    Do not derive from this class.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSequenceEnd: public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSequenceEnd);
+
+  OdDbSequenceEnd();
+
+  // for lisp && bag filer - outputs (-2,owner)
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  // for vertices post-processing, when called from lisp
+  OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+  /** \note
+    Always returns eInvalidExtents.
+  */
+  virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const;
+  /** \note
+  Always returns eInvalidExtents.
+  */
+  virtual OdResult subErase(bool erasing);
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSequenceEnd object pointers.
+*/
+typedef OdSmartPtr<OdDbSequenceEnd> OdDbSequenceEndPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSetPlotSettingsPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSetPlotSettingsPE.h
new file mode 100755
index 0000000..04a4d9d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSetPlotSettingsPE.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBSETPLOTSETPE_H
+#define OD_DBSETPLOTSETPE_H
+
+#include "RxObject.h"
+#include "DbPlotSettings.h"
+
+class TOOLKIT_EXPORT OdDbSetPlotSettingsPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSetPlotSettingsPE);
+
+  virtual OdResult setPlotCfgName(OdDbPlotSettings *pPlotSettings, const OdString &plotCfgName);
+  virtual OdResult setPlotLayoutFlags(OdDbPlotSettings *pPlotSettings, OdInt16 flags);
+  virtual OdResult setMargins(OdDbPlotSettings *pPlotSettings, double left, double Bottom, double right, double top);
+  virtual OdResult setPlotPaperSize(OdDbPlotSettings *pPlotSettings, double paperWidth, double paperHeight);
+  virtual OdResult setMediaName(OdDbPlotSettings *pPlotSettings, OdString strPaperSize);
+  virtual OdResult setOrigin(OdDbPlotSettings *pPlotSettings, const OdGePoint2d &origin);
+  virtual OdResult setPlotPaperUnits(OdDbPlotSettings *pPlotSettings, OdDbPlotSettings::PlotPaperUnits units);
+  virtual OdResult setPlotRotation(OdDbPlotSettings *pPlotSettings, OdDbPlotSettings::PlotRotation plotRotation);
+  virtual OdResult setPlotType(OdDbPlotSettings *pPlotSettings, OdDbPlotSettings::PlotType plotType);
+  virtual OdResult setPlotWindowArea(OdDbPlotSettings *pPlotSettings, double xmin, double ymin, double xmax, double ymax);
+  virtual OdResult setPlotView(OdDbPlotSettings* pPlotSettings, OdDbObjectId plotViewId);
+  virtual OdResult setPrintScale(OdDbPlotSettings* pPlotSettings, double numerator, double denominator);
+  virtual OdResult setStyleSheet(OdDbPlotSettings* pPlotSettings, OdString styleSheet);
+  virtual OdResult setScaleType(OdDbPlotSettings* pPlotSettings, OdDbPlotSettings::StdScaleType scaleType);
+  virtual OdResult setScaleFactor(OdDbPlotSettings* pPlotSettings, double dScaleFactor);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSetPlotSettingsPE object pointers.
+*/
+typedef OdSmartPtr<OdDbSetPlotSettingsPE> OdDbSetPlotSettingsPEPtr;
+
+#endif // OD_DBSETPLOTSETPE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbShape.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbShape.h
new file mode 100755
index 0000000..27d3f75
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbShape.h
@@ -0,0 +1,280 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_SHAPE_
+#define _OD_DB_SHAPE_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+
+/** \details
+    <group OdDb_Classes>
+
+    This class represents Shape entities in an OdDbDatabase instance.
+    
+    \remarks
+    A Shape entity is a single character of an SHX font. It is specified by name() and/or shapeNumber() and styleId(). 
+  
+    Library: TD_Db
+
+    \sa
+    <link db_shape.html, Working with Shapes>
+
+    OdDbMText, OdDbText classes
+*/
+class TOOLKIT_EXPORT OdDbShape : public OdDbEntity
+{
+public:
+
+  /*
+    OdDbShape(const OdGePoint3d& position,
+      double size,
+      const OdChar* name,
+      double rotation = 0,
+      double widthFactor = 0);
+  */
+
+  ODDB_DECLARE_MEMBERS(OdDbShape);
+
+  OdDbShape();
+  /** \details
+    Returns the position of this entity (WCS equivalent of DXF 10).
+  */
+  OdGePoint3d position() const;
+  
+  /** \details
+    Sets the position of this entity (WCS equivalent of DXF 10).
+
+    \param position [in]  Position.
+  */
+  void setPosition(
+    const OdGePoint3d& position);
+
+  /** \details
+    Returns the size of this Shape entity (DXF 40).
+  */
+  double size() const;
+
+  /** \details
+    Sets the size of this Shape entity (DXF 40).
+    \param size [in]  Shape size.
+  */
+  void setSize(
+    double size);
+
+  /** \details
+    Returns the name of this Shape entity (DXF 2).
+    \remarks
+    The name is not part of a Shape entity, but is derived from shapeNumber() and styleId().
+  */
+  OdString name() const;
+
+  /** \details
+    Sets the name of this Shape entity (DXF 2).
+    
+    \remarks
+    The name is not part of a Shape entity, but is derived from shapeNumber() and shapeIndex().
+    It is more efficient to use setShapeNumber() and setStyleId() directly.
+  */
+  OdResult setName(
+    const OdString& name);
+
+  /** \details
+    Returns the rotation angle of this Shape entity (DXF 50).
+    \note
+    All angles are expressed in radians.
+  */
+  double rotation() const;
+  
+  /** \details
+    Sets the rotation angle of this Shape entity (DXF 50).
+    \param rotation [in]  Rotation angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void setRotation(
+    double rotation);
+
+  /** \details
+    Returns the relative X scale factor (width factor) for this Shape entity (DXF 41).
+  */
+  double widthFactor() const;
+
+  /** \details
+    Sets the relative X scale factor (width factor) for this Shape entity (DXF 41).
+    
+    \param widthFactor [in]  Width factor.
+  */
+  void setWidthFactor(
+    double widthFactor);
+
+ /** \details
+    Returns the oblique angle of this Shape entity (DXF 51).
+
+    \remarks
+    oblique() has a range of �1.48335 radians (�85�).
+    
+    Oblique angles are measured clockwise from the vertical.
+
+    \note
+    All angles are expressed in radians.  
+ */
+  double oblique() const;
+  
+  /** \details
+    Sets the oblique angle of this Shape entity (DXF 51).
+    \param oblique [in]  Oblique angle.
+    
+    \remarks
+    oblique() has a range of �1.48335 radians (�85�).
+    
+    Oblique angles are measured clockwise from the vertical.
+     
+    \note
+    All angles are expressed in radians.  
+  */
+  void setOblique(
+    double oblique);
+
+  /** \details
+    Returns the thickness of this entity (DXF 39).
+    
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  double thickness() const;
+  
+  /** \details
+    Sets the thickness of this entity (DXF 39).
+    \param thickness [in]  Thickness.
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  void setThickness(
+    double thickness);
+
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    \param normal [in]  Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+
+  bool isPlanar() const;
+
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+  /** \details
+    Returns the shape number of this Shape entity.
+    \remarks
+    A Shape entity is a single character of an SHX font. 
+    This function returns the code of that character.  
+  */
+  OdInt16 shapeNumber() const;
+
+  /** \details
+    Sets the shape number of this Shape entity.
+    \remarks
+    A Shape entity is a single character of an SHX font. 
+    This function sets the code of that character.
+    \param shapeNumber [in]  Shape number.  
+  */
+  void setShapeNumber(
+    OdInt16 shapeNumber);
+
+  /** \details
+    Returns the Object ID of the OdDbTextStyleTableRecord containing
+    the SHX font file for this Shape entity.
+
+    \remarks
+    A Shape entity is a single character of an SHX font. This function
+    returns a reference to that font.
+  */
+  OdDbObjectId styleId() const;
+
+  /** \details
+    Sets the Object ID of the OdDbTextStyleTableRecord containing
+    the SHX font file for this Shape entity.
+
+    \remarks
+    A Shape entity is a single character of an SHX font. This function
+    sets a reference to that font.
+    \param styleId [in]  Style Object ID.  
+  */
+  OdResult setStyleId(
+    OdDbObjectId styleId);
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  OdGeMatrix3d getEcs( ) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbShape object pointers.
+*/
+typedef OdSmartPtr<OdDbShape> OdDbShapePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSolid.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSolid.h
new file mode 100755
index 0000000..8944860
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSolid.h
@@ -0,0 +1,253 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_SOLID_
+#define _OD_DB_SOLID_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the two-dimensional /solid-filled/ object (Planar Solid entity) in the database. 
+  This class inherits the base functionality of entities. 
+  
+  \sa
+  TD_Db
+
+  \sa
+  <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+  \sa
+  <link db_solid2d.html, Working with Planar Solids>
+
+  OdDbTrace, OdDbEntity classes
+*/
+class TOOLKIT_EXPORT OdDbSolid : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSolid);
+
+  /** \details
+    Builds an instance of the /2D solid-filled/ entity.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_solid2d_overview.html, Overview of Planar Solids>
+  */
+  OdDbSolid();
+
+  /*  OdDbSolid(const OdGePoint3d& pt0,
+        const OdGePoint3d& pt1,
+        const OdGePoint3d& pt2,
+        const OdGePoint3d& pt3);
+      OdDbSolid(const OdGePoint3d& pt0,
+        const OdGePoint3d& pt1,
+        const OdGePoint3d& pt2);
+  */
+
+  /** \details
+    Gets the WCS coordinates of the vertex belonged to the planar solid entity using the 
+    specified index (DXF 10, 11, 12, or 13).
+
+    \param pointIndex [in]  Vertex index 0, 1, 2, or 3.
+    \param pointValue [out]  Reference to a variable in which this method must save the solid vertex as
+                   three-dimensional point instance.
+
+    \sa
+    <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+    \sa
+    <link db_solid2d_specific.html, Specific Planar Solid Properties>
+
+    OdDbSolid::setPointAt() method
+  */
+  void getPointAt( int pointIndex, OdGePoint3d& pointValue ) const;
+
+  
+  /** \details
+    Sets the WCS coordinates of the vertex belonged to the planar solid entity using the 
+    specified index (DXF 10, 11, 12, or 13).
+
+    \param pointIndex [in]  Vertex index 0, 1, 2, or 3.
+    \param pointValue [in]  Three-dimensional point instance to set the vertex position.
+
+    \sa
+    <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+    \sa
+    <link db_solid2d_specific.html, Specific Planar Solid Properties>
+
+    OdDbSolid::getPointAt() method
+  */
+  void setPointAt( int pointIndex, const OdGePoint3d& pointValue );
+
+
+  /** \details
+    Returns the thickness of the planar solid entity (DXF 39) in drawing units. Thickness 
+    is the extrusion length along the normal. A positive value defines the thickness to 
+    be drawn along the normal direction. A negative value defines the thickness to be drawn 
+    in the opposite direction from the normal. A zero value defines a planar solid without 
+    thickness.
+
+    \sa
+    <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+    \sa
+    <link db_solid2d_specific.html, Specific Planar Solid Properties>
+
+    OdDbSolid::setThickness() method
+  */
+  double thickness() const;
+
+
+  /** \details
+    Sets the thickness of the planar solid entity (DXF 39) in drawing units. Thickness is 
+    the extrusion length along the normal. A positive value extrudes along the normal. 
+    A negative value extrudes opposite from the normal. A zero value defines a planar solid  
+    without thickness. The initial value is zero by default.
+
+    \param vThickness [in]  Thickness as a Double value.
+
+    \sa
+    <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+    \sa
+    <link db_solid2d_specific.html, Specific Planar Solid Properties>
+
+    OdDbSolid::thickness() method
+  */
+  void setThickness( double vThickness );
+
+
+  /** \details
+    Returns the WCS unit vector which is the normal to the plane of the planar solid entity 
+    (DXF 210). The normal defines the orientation of the solid plane in world space.
+
+    \sa
+    <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+    \sa
+    <link db_solid2d_specific.html, Specific Planar Solid Properties>
+
+    OdDbSolid::setNormal() method
+  */
+  OdGeVector3d normal() const;
+
+  
+  /** \details
+    Sets the WCS normal to the plane of the planar solid entity (DXF 210). The normal defines 
+    the orientation of the solid plane in world space. The initial value is (0,0,1) by default.
+
+    \param geVector [in]  Three-dimensional vector instance to set the normal.
+
+    \remarks
+    This method automatically converts the specified vector to the unit vector.
+
+    \sa
+    <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+    \sa
+    <link db_solid2d_specific.html, Specific Planar Solid Properties>
+
+    OdDbSolid::normal() method
+  */
+  void setNormal( const OdGeVector3d& geVector );
+
+
+  /** \details
+    Gets the solid plane. This method is inherited from the OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the solid plane
+                parameters as a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type
+                    kNonPlanar - non-planar, kPlanar - planar entity, kLinear - arbitrary plane.
+
+    \sa
+    <link db_solid2d_sample.html, Example of Working with the Planar Solid Object>
+
+    \sa
+    <link db_solid2d.html, Working with Planar Solids>
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm);
+
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                        OdGsMarker gsMark, 
+                                        const OdGePoint3d& ,
+                                        const OdGeMatrix3d& , 
+                                        OdDbFullSubentPathArray& subentPaths, 
+                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
+
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                        OdGsMarkerArray& gsMarkers) const;
+
+  OdGeMatrix3d getEcs( ) const;
+};
+
+/** \details
+  The typified smart pointer for the two-dimensional /solid-filled/ object (Planar Solid entity).  
+  This template class is specialization of the OdSmartPtr class for the OdDbSolid class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbSolid> OdDbSolidPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSortentsTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSortentsTable.h
new file mode 100755
index 0000000..6a3e470
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSortentsTable.h
@@ -0,0 +1,241 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBSORTENTSTABLE_H
+#define OD_DBSORTENTSTABLE_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+#define STL_USING_UTILITY
+#include "OdaSTL.h"
+
+/** \details
+    This template class is a specialization of the std::pair class for OdDbHandle-OdDbSoftPointerId pairs.
+*/
+typedef std::pair<OdDbHandle, OdDbSoftPointerId> HandlePair;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbHandle-OdDbSoftPointerId pairs.
+*/
+typedef OdArray<HandlePair> HandlePairsArray;
+
+
+/** \details
+    This class implements the SortentsTable, which specifies the DrawOrder 
+    of entities in an OdDbDatabase instance.
+
+    \remarks
+    Each instance of this class contains the DrawOrder for a single OdDbBlockRecord. 
+    
+    When drawing entities in a Block Table Record, an iterator traverses the Block Table Record 
+    in the order of ascending handles. If there is a HandlePair in the SortentsTable corresponding
+    to the handle of the object about to be drawn, the entity specified by the entity ID in the HandlePair is
+    drawn in its stead. If there is no such HandlePair, the entity referenced by the iterator is drawn.
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSortentsTable : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSortentsTable);
+
+  OdDbSortentsTable();
+
+  /** \details
+    Function returns the handle that indicates the draw order.
+  */
+  void getSortHandle(const OdDbObjectId& id, OdDbHandle& h) const;
+
+  /** \details
+    Moves the entities with specified entity IDs to the bottom of this SortentsTable.
+
+    \param entityIds [in]  Entity IDs.
+  */
+  void moveToBottom(
+    OdDbObjectIdArray& entityIds);
+
+  /** \details
+    Moves the entities with specified entity IDs to the top of this SortentsTable.
+
+    \param entityIds [in]  Entity IDs.
+  */
+  void moveToTop(
+    OdDbObjectIdArray& entityIds); 
+
+  /** \details
+    Moves the entities with specified entity IDs below the target entity in this SortentsTable.
+
+    \param entityIds [in]  Entity IDs.
+    \param targetId [in]  Target entity ID.
+  */
+  void moveBelow(
+    OdDbObjectIdArray& entityIds, 
+    OdDbObjectId targetId);
+
+  /** \details
+    Moves the entities with specified entity IDs above  the target entity in this SortentsTable.
+
+    \param entityIds [in]  Entity IDs.
+    \param targetId [in]  Target entity ID.
+  */
+  void moveAbove(
+    OdDbObjectIdArray& entityIds, 
+    OdDbObjectId targetId);
+
+  /** \details
+    Swaps the DrawOrder of the specified entities in this SortentsTable.
+    
+    \param firstId [in]  First entity ID.
+    \param secondId [in]  Second entity ID.
+  */
+  void swapOrder(
+    OdDbObjectId firstId, 
+    OdDbObjectId secondId);
+
+  /** \details
+    Returns the Object ID of the Block Table Record to which this SortentsTable belongs.
+  */
+  OdDbObjectId  blockId() const; 
+        
+  ///  2005 functions
+  ///
+
+  /** \details
+    Returns true if and only if the first entity is drawn before the second with this SortentsTable.
+
+    \param firstID [in]  First entity ID.
+    \param secondID [in]  Second entity ID.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  bool firstEntityIsDrawnBeforeSecond(
+    OdDbObjectId firstID, 
+    OdDbObjectId secondID) const;
+
+  /** \details
+    Returns an array of the entity IDs of the entities in the associated Block Table Record,
+    in the DrawOrder for this SortentsTable.
+
+    \param entityIds [out]  Entity IDs.
+    \param honorSortentsMask [in]  SORTENTS mask. 
+
+    \remarks
+    If (honorSortentsMask ^ SORTENTS) != honorSortentsMask, the entities are returned unsorted.
+    
+    Returns eOk if successful, or an appropriate error code if not.
+    
+    \note
+    As implemented, honorSortentsMask is ignored.
+    It will be fully implemented in a future release.
+  */
+  void getFullDrawOrder(
+    OdDbObjectIdArray& entityIds, 
+    OdUInt8 honorSortentsMask = 0) const;
+
+  /** \details
+    Rearranges the specified entity IDs into their current relative DrawOrder for this SortentsTable.
+    
+    \param entityIds [in/out] Entity IDs.
+    \param honorSortentsMask [in] SORTENTS mask. 
+
+    \remarks
+    If (honorSortentsMask ^ SORTENTS) != honorSortentsMask, the entities are returned unsorted.
+
+    Returns eOk if successful, or an appropriate error code if not.
+
+    \note
+    As implemented, honorSortentsMask is ignored.
+    It will be fully implemented in a future release.
+  */
+  void getRelativeDrawOrder(
+    OdDbObjectIdArray& entityIds, 
+    OdUInt8 honorSortentsMask = 0) const;
+
+
+  /** \details
+    Sets the relative DrawOrder for the specified entities in this SortentsTable.
+
+    \param entityIds [in]  Entity IDs in DrawOrder.
+
+    \remarks
+    The DrawOrder of other entities are unaffected.
+    
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  void setRelativeDrawOrder(
+    const OdDbObjectIdArray& entityIds);
+
+  /** \details
+    Sets this SortentsTable from an array of HandlePair pairs.
+    
+    \param handlePairs [in]  HandlePairs.
+    
+    \note
+    Use of this function is not recommended.
+  */
+  void setAbsoluteDrawOrder(
+    const HandlePairsArray& handlePairs);
+
+  /** \details
+    Returns this SortentsTable as an array of HandlePair pairs.
+    
+    \param handlePairs [out]  Receives an array of HandlePairs.
+    
+    \note
+    Use of this function is not recommended.
+  */
+  void getAbsoluteDrawOrder(
+    HandlePairsArray& handlePairs);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSortentsTable object pointers.
+*/
+typedef OdSmartPtr<OdDbSortentsTable> OdDbSortentsTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif //OD_DBSORTENTSTABLE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialFilter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialFilter.h
new file mode 100755
index 0000000..bfb88df
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialFilter.h
@@ -0,0 +1,272 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBSPFILT_H
+#define OD_DBSPFILT_H
+
+#include "TD_PackPush.h"
+
+/** \details
+   Defines the disabled back or front clipping plane distance.
+*/
+   #define ODDB_INFINITE_XCLIP_DEPTH (1.0e+300)
+
+#include "DbFilter.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GePoint2dArray.h"
+
+class OdGeExtents3d;
+class OdDbBlockReference;
+
+class OdDbFilteredBlockIterator;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbFilteredBlockIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbFilteredBlockIterator> OdDbFilteredBlockIteratorPtr;
+
+struct OdGiClipBoundary;
+
+/** \details
+    This class implements Spatial Filter objects in an OdDbDatabase instance.
+
+    \remarks
+    Spatial Filter objects are extruded volumes based on a 2D boundary,
+    an extrusion direction, and front and back clipping distances.
+    
+    They implement Xref clipping boundaries.
+    
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSpatialFilter : public OdDbFilter
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSpatialFilter);
+
+  OdDbSpatialFilter();
+
+  OdRxClass* indexClass() const; 
+
+  /** \details
+    Returns clip boundary extents.
+
+    \param ext [out]  Output extents.
+  */
+  void queryBounds(OdGeExtents3d& ext) const;
+
+  /** \details
+    Returns the clip boundary definition of this Spatial Filter object.
+    
+    \param fromPoint [out]  Receives the WCS 'from' point.
+    \param toPoint [out]  Receives the  WCS 'to' point.
+    \param upDir [out]  Receives the WCS normal vector.
+    \param viewField [out]  Receives the WCS view field vector.
+  */
+  void getVolume(
+      OdGePoint3d& fromPoint, 
+      OdGePoint3d& toPoint, 
+      OdGeVector3d& upDir,
+      OdGeVector2d& viewField ) const;
+
+  /** \details
+    Sets the definition of this Spatial Filter object.
+
+    \param points [in]  Boundary definition.
+    \param normal [in]  WCS Positive extrusion vector.
+    \param elevation [in]  Elevation.
+    \param frontClip [in]  Front clip distance in the normal direction.
+    \param backClip [in]  Back clip distance in the -normal direction.
+    \param enabled [in]  Enables the clip volume. 
+    
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of the clip boundary.
+ 
+    Together elevation and normal define the ECS plane of the clip boundary.
+       
+    If only two points are provided in points, these points define the diagonal of a rectangle. Otherwise,
+    they define a non-self-intersecting polygon.
+    
+    The points are in the ECS defined by normal and elevation. 
+    
+    If the clip volume is disabled, this Spatial Filter object includes all of 3D space.
+  */
+  void setDefinition( 
+    const OdGePoint2dArray& points, 
+    const OdGeVector3d& normal = OdGeVector3d::kZAxis,
+    double elevation = 0.0,
+    double frontClip = ODDB_INFINITE_XCLIP_DEPTH,
+    double backClip = ODDB_INFINITE_XCLIP_DEPTH,
+    bool enabled = true); 
+
+  /** \param xToClipSpace [in]  The transformation matrix from WCS to ECS for the clip boundary.
+  */
+  void setDefinition(
+    const OdGePoint2dArray& points,
+    const OdGeMatrix3d& xToClipSpace, 
+    double frontClip = ODDB_INFINITE_XCLIP_DEPTH,
+    double backClip = ODDB_INFINITE_XCLIP_DEPTH,
+    bool enabled = true);
+
+  /** \details
+    Returns the definition of this Spatial Filter object.
+
+    \param points [out]  Receives the boundary definition.
+    \param normal [out]  Receives the WCS positive extrusion vector.
+    \param elevation [out]  Receives the elevation.
+    \param frontClip [out]  Receives the front clip distance in the normal direction.
+    \param backClip [out]  Receives the back clip distance in the -normal direction.
+    \param enabled [out]  Receives the status of the clip volume. 
+
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of the clip boundary.
+ 
+    Together elevation and normal define the ECS plane of the clip boundary.
+       
+    If only two points are provided in points, these points define the diagonal of a rectangle. Otherwise,
+    they define a non-self-intersecting polygon.
+    
+    The points are in the ECS defined by normal and elevation. 
+    
+    If the clip volume is disabled, this Spatial Filter object includes all of 3D space.
+  */
+  void getDefinition( 
+    OdGePoint2dArray& points, 
+    OdGeVector3d& normal,
+    double& elevation, 
+    double& frontClip, 
+    double& backClip,
+    bool& enabled ) const; 
+
+  /** \param clipBoundary [in]  Clip boundary.
+    \param enabled [in]  Enables the clip volume. 
+  */
+  void setDefinition(
+    const OdGiClipBoundary& clipBoundary,
+    bool enabled = true); 
+
+  /** \param clipBoundary [out]  Clip boundary.
+    \param enabled [out]  Receives the status of the clip volume. 
+    \param plotting [in]  Must be true if clip boundary will be plotted.
+  */
+  void getDefinition(
+    OdGiClipBoundary& clipBoundary,
+    bool& enabled,
+    bool plotting = false ) const; 
+
+  OdGeMatrix3d& getClipSpaceToWCSMatrix(OdGeMatrix3d& mat) const;
+  OdGeMatrix3d& getOriginalInverseBlockXform(OdGeMatrix3d& mat) const;
+
+  /** \details
+    Returns the boundary defintion of this Spatial Filter object.
+
+    \param points [out]  Receives the boundary definition.
+  */
+  void boundary(
+    OdGePoint2dArray& points) const;
+    
+  /** \details
+    Returns the WCS positive extrusion vector of this Spatial Filter object.
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Returns the WCS origin of this Spatial Filter object.
+  */
+  OdGePoint3d origin() const;
+
+  /** \details
+    Returns true if and only if front clipping is enabled for this Spatial Filter object.
+  */
+    bool frontClipEnabled() const;
+  
+  /** \details
+    Returns the front clipping distance for this Spatial Filter object.
+  */
+    double frontClipDist() const;
+  
+  /** \details
+    Returns true if and only if back clipping is enabled for this Spatial Filter object.
+  */
+    bool backClipDistEnabled() const;
+  /** \details
+    Returns the back clipping distance for this Spatial Filter object.
+  */
+    double backClipDist() const;
+  /** \details
+    Returns true if and only if the clip volume for this Spatial Filter object is enabled.
+    \remarks
+    If disabled, this Spatial Filter object includes all of 3D space.
+  */
+    bool isEnabled() const; 
+
+  /** \details
+    Sets the perspective camera position of this Spatial Filter object.
+
+    \param fromPoint [in]  Perspective camera position.
+  */
+  void setPerspectiveCamera(
+    const OdGePoint3d& fromPoint);
+  
+  /** \details
+    Returns true if and only if the specified extents intersect the clip boundary of the Spatial Filter object.
+  */
+  bool clipVolumeIntersectsExtents(
+    const OdGeExtents3d& extents) const;
+  
+  /** \details
+    Returns true if and only if setPerspectiveCamera() has been called for this Spatial Filter object.
+  */
+  bool hasPerspectiveCamera() const;
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  // TD Special :
+  bool isFilterInverted() const;
+  void setFilterInverted(bool bSet);
+  OdResult generateClipBoundaryFromPline(OdDbObjectId id);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSpatialFilter object pointers.
+*/
+typedef OdSmartPtr<OdDbSpatialFilter> OdDbSpatialFilterPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBSPFILT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialIndex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialIndex.h
new file mode 100755
index 0000000..0583e9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpatialIndex.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBSPINDX_H
+#define OD_DBSPINDX_H
+
+#include "TD_PackPush.h"
+
+#include "DbIndex.h"
+#include "DbBlockIterator.h"
+
+/** \details
+    This class implements Spatial Index objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSpatialIndex : public OdDbIndex
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSpatialIndex);
+
+  OdDbSpatialIndex();
+
+  OdDbFilteredBlockIteratorPtr newIterator(
+    const OdDbFilter* pFilter) const;
+  
+  void rebuildFull(
+    OdDbIndexUpdateData* pIdxData);
+  
+  OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+protected:
+
+  void rebuildModified(
+    OdDbBlockChangeIterator* iterator);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSpatialIndex object pointers.
+*/
+typedef OdSmartPtr<OdDbSpatialIndex> OdDbSpatialIndexPtr;
+
+class OdDbSpatialIndexIteratorImpl;
+class OdDbSpatialFilter;
+
+
+class OdDbSpatialIndexIterator;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSpatialIndexIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbSpatialIndexIterator> OdDbSpatialIndexIteratorPtr;
+
+/** \details
+    This class implements Iterator objects that traverse queries defined by OdDbSpatialFilter objects.
+    \sa
+    TD_Db
+    
+    \remarks
+    This class is used by OcDbSpatialIndex.
+     
+    <group OdDb_Classes>
+*/
+class OdDbSpatialIndexIterator : public OdDbFilteredBlockIterator
+{
+protected:
+  OdDbSpatialIndexIterator();
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSpatialIndexIterator);
+
+  static OdDbSpatialIndexIteratorPtr newIterator(
+    const OdDbSpatialIndex* pIndex, 
+    const OdDbSpatialFilter* pFilter);
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBSPINDX_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpline.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpline.h
new file mode 100755
index 0000000..5db88d6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSpline.h
@@ -0,0 +1,587 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDB_DBSPLINE_H
+#define ODDB_DBSPLINE_H
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+
+class OdGeKnotVector;
+
+/** \details
+    This class represents Spline entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbSpline : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSpline);
+
+  OdDbSpline();
+  
+  /** \details
+     Returns true if and only if this Spline entity is rational (DXF 70, bit 0x04).
+  */
+  bool isRational() const;
+  
+  /** \details
+    Returns the degree of this Spline entity (DXF 71).
+    \remarks
+    degree is in the range [1..25].  
+  */
+  int degree() const;
+  
+  /** \details
+      Increased the degree of this spline to the specified value.
+  */
+  void elevateDegree(int newDegree);
+    
+  /** \details
+    Returns the number of control points in this Spline entity (DXF 73).
+  */
+  int numControlPoints() const;
+  
+  /** \details
+    Returns the specified control point of this Spline entity (DXF 10).
+
+    \param controlPointIndex [in]  Control point index.
+    \param point [out]  Receives the control point.
+  */
+  void getControlPointAt(
+    int controlPointIndex, 
+    OdGePoint3d& point) const;
+  
+  /** \details
+      Sets the specified control point of this Spline entity (DXF 10).
+
+      \param controlPointIndex [in]  Control point index.
+      \param point [in]  Control point.
+  */
+  void setControlPointAt(
+    int controlPointIndex, 
+    const OdGePoint3d& point);
+  
+  /** \details
+    Returns the number of fit points in this Spline entity (DXF 74).
+  */
+  int numFitPoints() const;
+  
+  /** \details
+    Returns the specified fit point of this Spline entity (DXF 11).
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [out]  Receives the fit point.
+  */
+  OdResult getFitPointAt(
+    int fitPointIndex, 
+    OdGePoint3d& point) const;
+  
+  /** \details
+    Sets the specfied fit point of this Spline entity (DXF 11).
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Fit point.
+  */
+  void setFitPointAt(
+    int fitPointIndex, 
+    const OdGePoint3d& point);
+  
+  /** \details
+    Inserts a fit point into this Spline entity after the specified index.
+      
+    \param fitPointIndex [in]  Fit point index.
+    \param point [out]  Receives the fit point.
+    
+    \remarks
+    If fitPointIndex < 0, point is inserted at before the first fit point. 
+    
+    If fitPointIndex >= numFitPoints(), point is appended to the spline. 
+  */
+  void insertFitPointAt(
+    int fitPointIndex, 
+    const OdGePoint3d& point);
+  
+  /** \details
+    Removes the specified fit point from this Spline entity.
+
+    \param fitPointIndex [in]  Fit point index.
+  */
+  void removeFitPointAt(
+    int fitPointIndex);
+  
+  /** \details
+    Returns the curve fitting tolerance for this Spline entity (DXF 44).
+    
+    \remarks
+    This is the maximum drawing unit distance by which the Spline curve can deviate
+    from a fit points. 
+  */
+  double fitTolerance() const;
+  
+  /** \details
+    Sets the curve fitting tolerance for this Spline entity (DXF 44).
+    
+    \remarks
+    This is the maximum drawing unit distance by which the Spline curve can deviate
+    from a fit points. 
+    
+    \param fitTolerance [in]  Geometric tolerance.
+  */
+  void setFitTol(
+    double fitTolerance);
+  
+  /** \details
+    Returns the start point and end point WCS fit tangents for this Spline entity (DXF 12, 13).
+    \param startTangent [out]  Receives the start point tangent.
+    \param endTangent [out]  Receives the end point tangent.
+  */
+  OdResult getFitTangents(
+    OdGeVector3d& startTangent, 
+    OdGeVector3d& endTangent) const;
+  
+  /** \details
+    Sets the start point and end point WCS fit tangents for this Spline entity (DXF 12, 13).
+    \param startTangent [out]  Start point tangent.
+    \param endTangent [out]  End point tangent.
+  */
+  void setFitTangents(
+    const OdGeVector3d& startTangent, 
+    const OdGeVector3d& endTangent);
+  
+  /** \details
+    Returns true if and only if this Spline entity is constructed using fit points.
+  */
+  bool hasFitData() const;
+  
+  /** \details
+    Returns the fit data for this Spline entity.
+
+    \param fitPoints [out]  Receives the fit points.
+    \param degree [out]  Receives the degree.
+    \param fitTolerance [out]  Receives the fit tolerance.
+    \param tangentsExist [out]  Receives true if and only if start and end tangents are used.
+    \param startTangent [out]  Receives the start point tangent.
+    \param endTangent [out]  Receives the end point tangent.
+	\param knotParam [out]  Receives the knot parametrization.
+  */
+  OdResult getFitData(
+    OdGePoint3dArray& fitPoints, 
+    int& degree, 
+    double& fitTolerance, 
+    bool& tangentsExist, 
+    OdGeVector3d& startTangent, 
+    OdGeVector3d& endTangent ) const;
+  
+  OdResult getFitData(
+    OdGePoint3dArray& fitPoints, 
+    int& degree, 
+    double& fitTolerance, 
+    bool& tangentsExist, 
+    OdGeVector3d& startTangent, 
+    OdGeVector3d& endTangent,
+    OdGe::OdGeKnotParameterization& knotParam) const;
+  
+  /** \details
+    Sets the fit data for this Spline entity.
+    \param fitPoints [in]  Fit points.
+    \param degree [in]  Degree.
+    \param fitTolerance [in]  Fit tolerance.
+    \param startTangent [in]  Start point tangent.
+    \param endTangent [in]  End point tangent.
+	\param endTangent [in]  Knot parametrization.
+  */
+  void setFitData(
+    const OdGePoint3dArray& fitPoints, 
+    int degree, 
+    double fitTolerance, 
+    const OdGeVector3d& startTangent, 
+    const OdGeVector3d& endTangent );
+
+  void setFitData(
+    const OdGePoint3dArray& fitPoints, 
+    int degree, 
+    double fitTolerance, 
+    const OdGeVector3d& startTangent, 
+    const OdGeVector3d& endTangent,
+    OdGe::OdGeKnotParameterization knotParam);
+  
+  /** \details
+    Purges the fit data for this Spline entity.
+  */
+  void purgeFitData();
+  
+  /** \details
+      TBC.
+      void updateFitData();
+  */
+  
+  /** \details
+    Returns the NURBS data for this Spline entity.
+    \param degree [out]  Receives the degree.
+    \param rational [out]  Receives true if and only if this Spline entity is rational.
+    \param closed [out]  Receives true if and only if this Spline entity is closed.
+    \param periodic [out]  Receives true if and only if this Spline entity is periodic.
+    \param controlPoints [out]  Receives an array of WCS control points.
+    \param knots [out]  Receives the knot vector.
+    \param weights [out]  Receives an array of weights.
+    \param controlPtTol [out]  Receives the control point tolerance.
+    \param knotTol [out]  Receives the knot tolerance.
+  */
+  void getNurbsData(
+    int& degree, 
+    bool& rational, 
+    bool& closed, 
+    bool& periodic,
+    OdGePoint3dArray& controlPoints, 
+    OdGeDoubleArray& knots, 
+    OdGeDoubleArray& weights, 
+    double& controlPtTol,
+    double& knotTol) const;
+
+  void getNurbsData(
+    int& degree, 
+    bool& rational, 
+    bool& closed, 
+    bool& periodic,
+    OdGePoint3dArray& controlPoints, 
+    OdGeKnotVector& knots, 
+    OdGeDoubleArray& weights, 
+    double& controlPtTol) const;
+  
+  /** \details
+    Sets the NURBS data for this Spline entity.
+    \param degree [in]  Degree.
+    \param rational [in]  Controls if this Spline entity is rational.
+    \param closed [in]  Controls if this Spline entity closed.
+    \param periodic [in]  Controls if this Spline entity is periodic.
+    \param controlPoints [in]  Array of WCS control points.
+    \param knots [in]  Knot vector.
+    \param weights [in]  Array of weights.
+    \param controlPtTol [in]  Control point tolerance.
+    \param knotTol [in]  Knot tolerance.
+    
+    \remarks
+    * degree is in the range of [1..25]
+    * If rational is true, controlPoints.length() must equal weights.length()
+    * If periodic is false, then knots.length() must equal controlPoints.length() + degree + 1
+    * If periodic is true, then knots.length() must equal controlPoints.length(), 
+      the first and last controlPoints must be equal, and the first and last weights (if provided) must be equal.
+    * If two control points are within controlPtTol, they are treated as the same control point.
+    * If two knots are within knotTol, they are treated as the same knot.
+  */
+  void setNurbsData(int degree, 
+    bool rational, 
+    bool closed, 
+    bool periodic,
+    const OdGePoint3dArray& controlPoints, 
+    const OdGeDoubleArray& knots, 
+    const OdGeDoubleArray& weights,
+    double controlPtTol, 
+    double knotTol );
+  
+  void setNurbsData(
+    int degree, 
+    bool rational, 
+    bool closed, 
+    bool periodic,
+    const OdGePoint3dArray& controlPoints, 
+    const OdGeKnotVector& knots, 
+    const OdGeDoubleArray& weights,
+    double controlPtTol);
+  
+  /** \details
+    Returns the specified weight (DXF 41).
+    \param weightIndex [in]  Weight index.
+  */
+  double weightAt(
+    int weightIndex) const;
+  
+  /** \details
+    Sets the specified weight (DXF 41).
+    \param weightIndex [in]  Weight index.
+    \param weight [in]  Weight.
+  */
+  void setWeightAt(
+    int weightIndex, 
+    double weight);
+  
+  /** \details
+      Inserts a knot value into this spline.
+  */
+  void insertKnot(double param);
+  
+  /** \details
+     Reverses this Spline entity.
+     
+     \remarks
+     The start point becomes the end point, and vice versa.
+  */
+  virtual OdResult reverseCurve();
+  
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+  
+  /*
+     void getOffsetCurvesGivenPlaneNormal(const OdGeVector3d& normal,  //Replace OdRxObjectPtrArray
+                                          double offsetDist, 
+                                          OdRxObjectPtrArray& offsetCurves ) const;
+  */
+    
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual bool isPlanar() const;
+
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+
+
+  /** \details
+      OdDbCurve methods
+  */
+
+  virtual OdResult getPointAtParam(
+    double param, 
+    OdGePoint3d& pointOnCurve) const;
+
+  virtual OdResult getParamAtPoint(
+    const OdGePoint3d& pointOnCurve, 
+    double& param) const;
+
+  virtual OdResult getStartParam(
+    double& startParam) const;
+
+  virtual OdResult getEndParam (
+    double& endParam) const;
+
+  virtual OdResult getStartPoint(
+    OdGePoint3d& startPoint) const;
+
+  virtual OdResult getEndPoint(
+    OdGePoint3d& endPoint) const;
+
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+  virtual OdResult getFirstDeriv (
+    double param,
+    OdGeVector3d& firstDeriv) const;
+
+  virtual OdResult getSecondDeriv (
+    double param,
+    OdGeVector3d& secondDeriv) const;
+
+  virtual OdResult getArea(
+    double& area) const;
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  /** \details
+    Returns pointers to the curves that result from splitting this curve at the points corresponding 
+    to params.
+
+    \param params [in]  The parameter values corresponding to the split points.
+    \param entitySet [out]  Receives an array of pointers to the split curves.
+    
+    \remarks
+    * The first split curve will be from the start of this curve to params[0].
+    * The second split curve will be from params[0] to params[1].
+    * The last split curve will be from params[n-1] to the end of his curve.
+  */
+        virtual OdResult getSplitCurves(
+    const OdGeDoubleArray& params, 
+    OdRxObjectPtrArray& entitySet) const;
+
+  TD_USING(OdDbCurve::getSplitCurves);
+  
+  OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver,
+    OdDbObjectId& replaceId,
+    bool& exchangeXData);
+
+  /** \details
+    Defines the spline method (either by fit points or by control points).
+  */
+    enum SplineType 
+  {
+    kFitPoints = 0,     // By fit points.
+    kControlPoints = 1  // By control points.
+  };
+
+  /** \details
+    Returns the spline method (either by fit points or by control points).
+  */
+    SplineType type() const;
+
+  /** \details
+    Sets the spline method (either by fit points or by control points).
+
+    \param type [in]  spline type to be set.
+
+    \note
+    Returns the result of the operation: eOk if successful, or an appropriate error code if not.
+
+    \remarks
+    Changing type from kControlPoints to kFitPoints recalculates fit points from control points.
+  */
+ 
+  OdResult setType(SplineType type);
+
+  /** \details
+    Returns true if Control Vertices frame is visible.
+  */
+        bool cvFrame() const;
+
+  /** \details
+    Sets visibility of Control Vertices frame for this Spline entity.
+    \param bVisible [in]  Control vertices frame visiblity.
+  */
+        void setCvFrame(bool bVisible);
+
+   /** \details
+    Inserts a control point at the specified knot.
+    
+    \param knotParam [in]  The knot parameter to add the control point at.
+    \param ctrlPt [in]  Coordinates of the control point to be added.
+    \param weight [in] The weight to be assigned to the control point.
+    
+    \remarks
+    When called for a non-rational spline, weight is ignored.
+	
+	  \note
+    eOk if successful, or an appropriate error code if not.
+   */
+  OdResult insertControlPointAt(double knotParam, const OdGePoint3d& ctrlPt, double weight = 1.0);
+
+  /** \details
+    Deletes a control point at the specified index.
+    
+    \param index [in]  The index of the control point to be deleted.
+	
+	  \note
+    eOk if successful, or an appropriate error code if not.
+  */
+  OdResult removeControlPointAt(int index);
+
+/** \details
+    Returns true if the spline doesn't contain control points.
+*/
+   bool isNull() const;
+
+  /** \details
+    Modifies the position and tangent of the point with a specified parameter.
+
+    \param param [in]  Parameter value of the point.
+    \param point [in]  New position of the point.
+    \param deriv [in]  New value of the tangent vector at the point.
+           
+    \note
+    Returns true if and only if the point has successfully been adjusted.
+  */
+  bool modifyPositionAndTangent(double param, const OdGePoint3d& point, const OdGeVector3d* deriv);
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+
+  /** \details
+    Explodes this entity into a set of simpler entities.  
+
+    \param entitySet [in/out] Receives an array of pointers to the new entities.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    \note
+    Entities resulting from the explosion are appended to the specified array.
+    
+    The newly created entities are not database residents.
+    
+    The default implementation of this function returns eNotApplicable. This function can be
+    overridden in custom classes.
+  */
+  virtual OdResult subExplode(OdRxObjectPtrArray& entitySet) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSpline object pointers.
+*/
+typedef OdSmartPtr<OdDbSpline> OdDbSplinePtr;
+
+/** \details
+    This class represents Spline entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbSplinePE : public OdRxObject
+{
+public:
+    ODRX_DECLARE_MEMBERS(OdDbSplinePE);
+
+  virtual OdResult getParamAtPoint(
+    const OdDbCurve* pCurve,
+    const OdGePoint3d& pointOnCurve,
+    double& param) const = 0;
+
+  virtual OdResult getArea(
+    const OdDbCurve* pCurve,
+    double& area) const = 0;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdDbSplinePE object pointers.
+*/
+typedef OdSmartPtr<OdDbSplinePE> OdDbSplinePEPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbStubPtrArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbStubPtrArray.h
new file mode 100755
index 0000000..12ab25c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbStubPtrArray.h
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDBSTUBPTRARRAY_INCLUDED
+#define ODDBSTUBPTRARRAY_INCLUDED
+
+#include "OdArray.h"
+
+class OdDbStub;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbStub object pointers.
+*/
+typedef OdArray<OdDbStub*, OdMemoryAllocator<OdDbStub*> > OdDbStubPtrArray;
+
+#endif // ODDBSTUBPTRARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubDMesh.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubDMesh.h
new file mode 100755
index 0000000..4bc0300
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubDMesh.h
@@ -0,0 +1,286 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_SUBDMESH
+#define _OD_DB_SUBDMESH
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "DoubleArray.h"
+#include "DbSurface.h"
+#include "Db3dSolid.h"
+#include "CmEntityColorArray.h"
+
+#include "Int32Array.h"
+#include "Gi/GiGeometry.h"
+
+class OdDbSurface;
+class OdDb3dSolid;
+
+/** \details
+ This class represents SubDMesh entities in an OdDbDatabase instance.
+
+ \sa
+ TD_Db
+
+ <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSubDMesh : public OdDbEntity
+{
+public:
+ ODDB_DECLARE_MEMBERS(OdDbSubDMesh);
+ 
+ OdDbSubDMesh();
+
+ virtual bool subWorldDraw(
+   OdGiWorldDraw* pWd) const;
+
+ virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+ virtual OdDbObjectPtr decomposeForSave(OdDb::DwgVersion ver,
+   OdDbObjectId& replaceId,
+   bool& exchangeXData);
+
+ virtual OdResult dwgInFields(
+   OdDbDwgFiler* pFiler);
+
+ virtual void dwgOutFields(
+   OdDbDwgFiler* pFiler) const;
+
+ virtual OdResult dxfInFields(
+   OdDbDxfFiler* pFiler);
+
+ virtual void dxfOutFields(
+   OdDbDxfFiler* pFiler) const;
+
+ virtual OdResult subTransformBy(
+   const OdGeMatrix3d& xfm);
+
+ OdResult subGetGeomExtents(
+   OdGeExtents3d& extents) const;
+
+ virtual OdResult subExplode(
+   OdRxObjectPtrArray& entitySet) const;
+
+ OdResult setSubDMesh (const OdGePoint3dArray& vertexArray,
+   const OdInt32Array& faceArray,
+   OdInt32 subDLevel);
+
+ OdResult setSphere (double radius,
+   OdInt32 divAxis,
+   OdInt32 divHeight,
+   OdInt32 subDLevel);
+
+ OdResult setCylinder (double majorRadius,
+   double minorRadius,
+   double height,
+   OdInt32 divAxis,
+   OdInt32 divHeight,
+   OdInt32 divCap,
+   OdInt32 subDLevel);
+
+ OdResult setCone (double majorRadius,
+   double minorRadius,
+   double height,
+   OdInt32 divAxis,
+   OdInt32 divHeight,
+   OdInt32 divCap,
+   double radiusRatio,
+   OdInt32 subDLevel);
+
+ OdResult setTorus (double majorRadius,
+   OdInt32 divSection,
+   OdInt32 divSweepPath,
+   double sectionRadiusRatio,
+   double sectionRotate,
+   OdInt32 subDLevel);
+
+ OdResult setBox (double xLen,
+   double yLen,
+   double zLen,
+   OdInt32 divX,
+   OdInt32 divY,
+   OdInt32 divZ,
+   OdInt32 subDLevel);
+
+ OdResult setWedge (double xLen,
+   double yLen,
+   double zLen,
+   OdInt32 divLength,
+   OdInt32 divWidth,
+   OdInt32 divHeight,
+   OdInt32 divSlope,
+   OdInt32 divCap,
+   OdInt32 subDLevel);
+
+ OdResult setPyramid (double radius,
+   double height,
+   OdInt32 divLength,
+   OdInt32 divHeight,
+   OdInt32 divCap,
+   OdInt32 nSides,
+   double radiusRatio,
+   OdInt32 subDLevel);
+
+ OdResult subdDivideUp ();
+ OdResult subdDivideDown ();
+ OdResult subdRefine ();
+ OdResult subdRefine (const OdDbFullSubentPathArray& subentPaths);
+ OdResult subdLevel (OdInt32& result) const;
+
+ OdResult splitFace (const OdDbSubentId& subentFaceId,
+   const OdDbSubentId& subent0,
+   const OdGePoint3d& point0,
+   const OdDbSubentId& subent1,
+   const OdGePoint3d& point1);
+
+ OdResult extrudeFaces (const OdDbFullSubentPathArray& subentPaths,
+   double length,
+   const OdGeVector3d& dir,
+   double taper);
+
+ OdResult extrudeFaces (const OdDbFullSubentPathArray& subentPaths,
+   const OdGePoint3dArray& alongPath,
+   double taper);
+
+ OdResult isWatertight (bool& result) const;
+
+ OdResult numOfFaces (OdInt32& result) const;
+ OdResult numOfSubDividedFaces (OdInt32& result) const;
+ OdResult numOfSubDividedFacesAt (const OdDbFullSubentPathArray& subentPaths, OdInt32& result) const;
+ OdResult numOfVertices (OdInt32& result) const;
+ OdResult numOfSubDividedVertices (OdInt32& result) const;
+ OdResult numOfEdges (OdInt32& result) const;
+
+ OdResult getVertices (OdGePoint3dArray& vertexArray) const;
+ OdResult getEdgeArray (OdInt32Array& edgeArray) const;
+ OdResult getFaceArray (OdInt32Array& faceArray) const;
+ OdResult getNormalArray (OdGeVector3dArray& normalArray) const;
+
+ OdResult getSubDividedVertices (OdGePoint3dArray& vertexArray) const;
+ OdResult getSubDividedFaceArray (OdInt32Array& faceArray) const;
+ OdResult getSubDividedNormalArray(OdGeVector3dArray& normalArray) const;
+
+ OdResult getVertexAt (OdInt32 nIndex, OdGePoint3d& vertex) const;
+ OdResult setVertexAt (OdInt32 nIndex, const OdGePoint3d& vertex);
+ OdResult getVertexAt (const OdDbSubentId& id, OdGePoint3d& vertex) const;
+ OdResult setVertexAt (const OdDbSubentId& id, const OdGePoint3d& vertex);
+
+ OdResult getSubDividedVertexAt (OdInt32 nIndex, OdGePoint3d& vertex) const;
+ OdResult getSubDividedVertexAt (const OdDbSubentId& id, OdGePoint3d& vertex) const;
+
+ OdResult setCrease (double creaseVal);
+ OdResult setCrease (const OdDbFullSubentPathArray& subentPaths, double creaseVal);
+ OdResult getCrease (const OdDbFullSubentPathArray& subentPaths, OdDoubleArray& result) const;
+ OdResult getCrease (const OdDbSubentId& id, double& result) const;
+
+ OdResult getAdjacentSubentPath (const OdDbFullSubentPath& path,
+   OdDb::SubentType type,
+   OdDbFullSubentPathArray& subentPaths) const;
+
+ OdResult getSubentPath (OdInt32 nIndex,
+   OdDb::SubentType type,
+   OdDbFullSubentPathArray& subentPaths) const;
+
+ OdResult convertToSurface (bool bConvertAsSmooth, const OdDbSubentId& id, OdDbSurfacePtr& pSurface) const;
+ OdResult convertToSurface (bool bConvertAsSmooth, bool optimize, OdDbSurfacePtr& pSurface) const;
+ OdResult convertToSolid (bool bConvertAsSmooth, bool optimize, OdDb3dSolidPtr& pSolid) const;
+
+ OdResult getSubentColor (const OdDbSubentId& id, OdCmColor& color) const;
+ OdResult setSubentColor (const OdDbSubentId& id, const OdCmColor& color);
+ OdResult getSubentMaterial (const OdDbSubentId& id, OdDbObjectId& material) const;
+ OdResult setSubentMaterial (const OdDbSubentId& id, const OdDbObjectId& material);
+ OdResult getSubentMaterialMapper (const OdDbSubentId& id, OdGiMapper& mapper) const;
+ OdResult setSubentMaterialMapper (const OdDbSubentId& id, const OdGiMapper& mapper);
+
+ OdResult getFacePlane (const OdDbSubentId& id, OdGePlane& facePlane) const;
+
+ OdResult computeVolume (double &retVolume) const;
+ OdResult computeSurfaceArea (double &retSurfArea) const;
+
+
+
+ OdResult getVertexNormalArray(OdGeVector3dArray& arrNorm);
+ OdResult getVertexTextureArray(OdGePoint3dArray& arrPts);
+ OdResult getVertexColorArray(OdCmEntityColorArray& arrColor);
+ OdResult setVertexNormalArray(OdGeVector3dArray& arrNorm);
+ OdResult setVertexTextureArray(OdGePoint3dArray& arrPts);
+ OdResult setVertexColorArray(OdCmEntityColorArray& arrColor);
+
+ OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+   OdGsMarker gsMark, 
+   const OdGePoint3d& ,
+   const OdGeMatrix3d& , 
+   OdDbFullSubentPathArray& subentPaths, 
+   const OdDbObjectIdArray* pEntAndInsertStack ) const;
+ OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+   OdGsMarkerArray& gsMarkers) const;
+};
+
+/** \details
+ This template class is a specialization of the OdSmartPtr class for OdDbSubDMesh object pointers.
+*/
+typedef OdSmartPtr<OdDbSubDMesh> OdDbSubDMeshPtr;
+
+/** \details
+  Library: TD_Db
+  <group !!RECORDS_TD_APIRef>
+*/
+struct MeshFaceterSettings
+{
+  double faceterDevSurface;
+  double faceterDevNormal;
+  double faceterGridRatio;
+  double faceterMaxEdgeLength;
+  OdUInt16 faceterMaxGrid;
+  OdUInt16 faceterMinUGrid;
+  OdUInt16 faceterMinVGrid;
+  OdInt16 faceterMeshType;
+
+  MeshFaceterSettings()
+    : faceterDevSurface(0.)
+    , faceterDevNormal(0.)
+    , faceterGridRatio(0.)
+    , faceterMaxEdgeLength(0)
+    , faceterMaxGrid(0)
+    , faceterMinUGrid(0)
+    , faceterMinVGrid(0)
+    , faceterMeshType(0)  {}
+};
+
+typedef struct MeshFaceterSettings  OdDbFaceterSettings;
+
+TOOLKIT_EXPORT OdResult oddbGetObjectMesh(OdDbObject *pObj, 
+                                           const OdDbFaceterSettings *faceter,
+                                           OdGePoint3dArray& vertexArray, 
+                                           OdInt32Array& faceArray,
+                                           OdGiFaceData*& faceData);
+
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubentId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubentId.h
new file mode 100755
index 0000000..a80f349
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSubentId.h
@@ -0,0 +1,124 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDB_DBSUBENT_H
+#define ODDB_DBSUBENT_H /*!DOM*/
+
+#include "DbBaseSubentId.h"
+#include "DbObjectId.h"
+#include "IdArrays.h"
+
+/** \details
+    This class uniquely defines subentities within in an OdDbDatabase instance.  
+
+    \remarks
+    Each OdDbFullSubentPath object consists of a OdDbSubentId object and
+    an ordered array of Object IDs. The SubentId consists the index and subentType
+    of the object. The array of Object IDs defines the path to the 
+    subentity from the outermost entity (in PaperSpace or ModelSpace) 
+    to the entity containing the subentity.
+    
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbFullSubentPath : public OdDbBaseFullSubentPath
+{
+public:
+  OdDbFullSubentPath() 
+  {
+  }
+  OdDbFullSubentPath(OdDb::SubentType type, OdGsMarker index)
+    : OdDbBaseFullSubentPath(type, index)
+  {
+  }
+  OdDbFullSubentPath(OdDbObjectId entId, OdDbSubentId subId)
+    : OdDbBaseFullSubentPath(entId, subId)
+  {
+  }
+  OdDbFullSubentPath(OdDbObjectId entId, OdDb::SubentType type, OdGsMarker index)
+    : OdDbBaseFullSubentPath(entId, type, index)
+  {
+  }
+  OdDbFullSubentPath(OdDbObjectIdArray objectIds, OdDbSubentId subId)
+    : OdDbBaseFullSubentPath(*reinterpret_cast<OdDbStubPtrArray*>(&objectIds), subId)
+  {
+  }
+  OdDbFullSubentPath(OdDbStubPtrArray objectIds, OdDbSubentId subId)
+    : OdDbBaseFullSubentPath(objectIds, subId)
+  {
+  }
+
+  void objectIds(OdDbObjectIdArray& objectIdsArg) const
+  {
+    objectIdsArg = *reinterpret_cast<const OdDbObjectIdArray*>(&m_ObjectIds);
+  }
+
+  OdDbFullSubentPath& operator =(const OdDbFullSubentPath& fullSubentPath)
+  {
+    OdDbBaseFullSubentPath::operator=(fullSubentPath);
+    return *this;
+  }
+
+  bool operator==(const OdDbFullSubentPath& fullSubentPath) const
+  {
+    return OdDbBaseFullSubentPath::operator==(fullSubentPath);
+  }
+
+  /** \details
+    Returns a reference to the embedded OdDbObjectIdArray object in this FullSubentPath object.
+  */
+  const OdDbObjectIdArray& objectIds() const
+  {
+    return *reinterpret_cast<const OdDbObjectIdArray*>(&m_ObjectIds);
+  }
+  OdDbObjectIdArray& objectIds()
+  {
+    return *reinterpret_cast<OdDbObjectIdArray*>(&m_ObjectIds);
+  }
+  
+  /** \details
+    Returns a reference to, or a copy of, the embedded OdDbSubentId object in this FullSubentPath object.
+  */
+  const OdDbSubentId subentId() const
+  {
+    return m_SubentId;
+  }
+
+  OdDbSubentId& subentId()
+  {
+    return m_SubentId;
+  }
+};
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbFullSubentPath object pointers.
+*/
+typedef OdArray<OdDbFullSubentPath> OdDbFullSubentPathArray;
+
+#endif
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSun.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSun.h
new file mode 100755
index 0000000..77da822
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSun.h
@@ -0,0 +1,121 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_DBSUN_H_INCLUDED_
+#define _OD_DBSUN_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiLightTraits.h"
+#include "DbLight.h"
+
+
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSun : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSun);
+
+  OdDbSun();
+
+  virtual DrawableType drawableType() const;
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  
+  OdGiDrawable* drawable();
+
+  virtual bool isOn() const;
+
+
+  virtual void setOn(bool value);
+
+
+  virtual double intensity() const;
+
+
+  virtual void setIntensity(double intensity);
+
+ 
+  virtual const OdCmColor& sunColor() const;
+
+
+  virtual void setSunColor(const OdCmColor& color);
+
+
+  virtual const OdGiShadowParameters& shadowParameters() const;
+
+
+  virtual void setShadowParameters(const OdGiShadowParameters& params);
+
+
+  virtual void setDateTime(const OdDbDate& datetime);
+
+
+  virtual const OdDbDate& dateTime() const;
+
+
+  virtual void setDayLightSavingsOn(bool value);
+
+
+  virtual bool isDayLightSavingsOn() const;
+
+
+  virtual OdResult setAzimuth(double azimuth);
+
+
+  virtual double azimuth() const;
+
+
+  virtual OdResult setAltitude(double altitude);
+
+
+  virtual double altitude() const;
+
+
+  virtual const OdGeVector3d& sunDirection() const;
+
+
+  virtual void setSunDirection(const OdGeVector3d& sundir);
+
+
+  virtual void setSkyParameters(const OdGiSkyParameters& params);
+
+
+  virtual void skyParameters(OdGiSkyParameters& params) const;
+};
+
+typedef OdSmartPtr<OdDbSun> OdDbSunPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSurface.h
new file mode 100755
index 0000000..9bd9a36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSurface.h
@@ -0,0 +1,673 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DBSURFACE_H_INCLUDED_
+#define _DBSURFACE_H_INCLUDED_
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+
+#include "TD_PackPush.h"
+#include "ModelerDefs.h"
+#include "DbEntity.h"
+#include "Db3dSolid.h"
+
+class OdModelerGeometry;
+class OdStreamBuf;
+class OdBrBrep;
+
+class OdDbSurface;
+class OdDbNurbSurface;
+
+/** \details
+  This template class is a specialization of the OdArray class for OdDbSurface object pointer arrays.
+*/
+typedef OdArray<OdDbNurbSurface*, OdMemoryAllocator<OdDbNurbSurface*> > OdDbNurbSurfaceArray;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSurfacePtr object pointers.
+*/
+typedef OdSmartPtr<OdDbSurface> OdDbSurfacePtr;
+
+/** \details
+  Determines surface's edge extension types.
+*/
+enum EdgeExtensionType 
+{
+  /** kExtendEdge (0x00) - Edges are extended.*/
+  kExtendEdge  = 0x00,
+  /** kStretchEdge (0x01) - Edges are stretched.*/
+  kStretchEdge = 0x01,
+};
+
+/** \details
+    This class implements a three-dimensional surface entity.
+    
+    \sa
+    TD_Db
+   
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSurface : public OdDbEntity
+{
+public:
+  OdDbSurface();
+  ODDB_DECLARE_MEMBERS(OdDbSurface);
+
+  /** \details
+     Returns the number of isolines in the U direction of the surface, displayed in wireframe mode for visualization.
+  */
+  virtual OdUInt16 uIsolineDensity() const;
+
+  /** \details
+     Sets the number of isolines in the U direction of the surface, displayed in wireframe mode for visualization.
+     
+     \param numIsolines [in]  The number of isolines in the U direction of the surface, displayed in wireframe mode for visualization. 
+  */
+  virtual void setUIsolineDensity(OdUInt16 numIsolines);
+
+  /** \details
+     Returns the number of isolines in the V direction of the surface, displayed in wireframe mode for visualization.
+  */
+  virtual OdUInt16 vIsolineDensity() const;
+
+    /** \details
+     Sets the number of isolines in the V direction of the surface, displayed in wireframe mode for visualization.
+     
+     \param numIsolines [in]  The number of isolines in the V direction of the surface, displayed in wireframe mode for visualization. 
+    */
+  virtual void setVIsolineDensity(OdUInt16 numIsolines);
+
+  /** \details
+    Creates an extruded surface from a 2D entity with thickness
+    or a planar surface from a closed curve or region.
+    
+    \param pFromEntity [in] Input surface
+    \param pNewSurface [out] Resulting surface
+
+    \returns Returns eOk if an extruded surface was created successfully or an appropriate error code in the other case. 
+    
+    \remarks
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  static OdResult createFrom ( const OdDbEntity* pFromEntity, OdDbSurfacePtr& pNewSurface );
+
+  /** \details
+    Creates region (OdDbRegion class) entities for each face of the surface. 
+
+    \param regions [out]  Reference to an array of the OdDbRegion entities created from the face of the surface.
+  
+    \returns Returns eOk if successful, or an appropriate error code otherwise.
+    
+    \remarks
+    The surface must be planar. 
+    Regions created by the method are not included in the database, so the caller is responsible for managing memory of the created OdDbRegion objects.
+  
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult convertToRegion ( OdDbEntityPtrArray& regions );
+
+  /** \details
+    Creates a 3D solid object by thickening the surface by a specified amount. 
+    
+    \param thickness  [in] Amount to thicken the surface.
+    \param bBothSides [in] Flag indicating whether the thickening should be applied to both sides of the surface.
+    \param pSolid 	  [out] Reference to an OdDb3dSolid object pointer created during the thickening. If thickening fails, this parameter is NULL.
+    
+    \returns Returns eOk if successful, or an appropriate error code otherwise.
+    
+    \remarks
+    A solid created by this method is not included in the database, so the caller is responsible for managing memory allocated for the solid.
+    If thickness is less than zero, the surface will be thickened in the opposite direction.
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult thicken(double thickness, bool bBothSides, OdDb3dSolidPtr& pSolid) const;
+
+  /** \details
+    Calculates the total surface area.
+    
+    \param area [out]  A reference for returning the calculated surface area value.
+    
+    \returns Returns eOk if successful, or an appropriate error code otherwise.
+    
+    \remarks 
+    Method calculates the area of a single side of the surface.
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult getArea(double& area) const;
+
+  /** \details
+    Returns true if and only if there is no ACIS model associated with this entity. 
+  */
+  bool isNull() const;
+
+  /** \details
+    Writes the ACIS data of this entity to the specified StreamBuf object, 
+    or writes the specified ACIS solids to the specified file.
+
+    \param pStreamBuf [in] Pointer to the StreamBuf object to which the data is to be written. 
+    \param typeVer    [in] Type and version of the ACIS data to write.
+
+    \returns Returns eOk if successful or an appropriate error code otherwise. 
+  */
+  OdResult acisOut(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer typeVer = kAfTypeVerAny);
+
+  /** \details
+    Reads the ACIS data for this entity from the specified StreamBuf object,
+    or reads an array of ACIS solids from the specified file.
+
+    \param pStreamBuf [in] Pointer to the StreamBuf object from which the data is to be read.   
+    \param pTypeVer [in] Receives the type and version of the ACIS data read.
+
+    \returns Returns eOk if successful or an appropriate error code otherwise. 
+    If pTypeVer is not null, this function returns the version of the ACIS data
+    of this 3D solid entity.
+  */
+  OdResult acisIn(
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer *pTypeVer = 0);
+
+  /** \details
+    Returns the boundary representation of the 3D solid entity.
+    \param brep [out]  Receives the boundary representation.
+  */
+  void brep( OdBrBrep& brep );
+
+  virtual OdDbObjectPtr decomposeForSave(
+    OdDb::DwgVersion ver, 
+    OdDbObjectId& replaceId, 
+    bool& exchangeXData);
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm );
+
+  /** \details
+    Directly sets the contained modeler geometry of this entity.
+    
+    \param pGeometry [in]  Pointer to the modeler geometry.
+    
+    \returns Returns eOk if successful or an appropriate error code otherwise.
+  */
+  virtual OdResult setBody( const void* pGeometry );
+  
+  /** \details 
+    Returns the current modeler geometry. 
+  */
+  virtual void *body( ) const;
+
+  // OdDbObject methods
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /** This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  virtual OdDbSubentId internalSubentId(void* ent) const;
+  /** This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  virtual void* internalSubentPtr(const OdDbSubentId& id) const;
+
+  virtual OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& id) const;
+  /** \details
+    Creates new entities that represent the result of interference between the surface and specified entity. Created entities are appended to the specified array.
+    
+    \param interferenceObjects [out]  Output array of interference entities, which can contain OdDbSurface or curve entities.
+    \param pEntity             [in]   Pointer to an entity the surface must be interfered with. pEntity can point to the following entity types: OdDbSurface, OdDb3dSolid, OdDbRegion, or OdDbBody.
+    \param flags               [in]   Interference flags; equal to kDefault (0x00).
+    
+    \returns Returns eOk if interference entities are successfully created or an appropriate error code otherwise. 
+    For example, if interference entities are not created, eNoIntersection error code is returned.
+    eInvalidInput is returned if an unsupported entity or NULL pointer is provided as a value of pEntity.  
+    
+    \remarks 
+    Created entities are not included in the database, so caller is responsible for the correct handling of them. 
+    This means that caller must include created entities in the database or delete them when they are no longer needed.
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createInterferenceObjects(OdDbEntityPtrArray& interferenceObjects,
+                                             OdDbEntityPtr pEntity, 
+                                             unsigned int flags ) const;
+
+  /** \details
+    Performs a Boolean union operation with two surfaces: this one and another specified surface. Creates a new surface entity as a result. 
+    
+    \param pSurface 	  [in] Pointer to the other surface to be united with this surface.
+    \param pNewSurface  [out] Pointer to a new surface that represents the union operation result.
+    
+    \returns Returns eOk if the union operation is successfully performed or an appropriate error code otherwise. If the union operation fails, NULL is returned as a value of pNewSurface.
+    
+    \remarks 
+    Resulting surface is not included in the database, so caller is responsible for the correct handling of the memory pointed to with pNewSurface. 
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult booleanUnion(const OdDbSurfacePtr pSurface, OdDbSurfacePtr& pNewSurface);
+  
+  /** \details
+    Performs a Boolean subtraction operation with two surfaces: this one and another specified surface. Creates a new surface entity as a result of subtracting the specified surface from this surface. 
+
+    \param pSurface 	  [in] Pointer to the other surface to be subtracted from this surface.
+    \param pNewSurface  [out] Pointer to a new surface that represents the subtraction operation result.
+    
+    \returns Returns eOk if the subtraction operation is successfully performed, or an appropriate error code otherwise. 
+    If the subtraction operation fails, NULL is returned as a value of pNewSurface.
+    
+    \remarks 
+    Resulting surface is not included in the database, so caller is responsible for the correct handling of the memory pointed to with pNewSurface. 
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult booleanSubtract(const OdDbSurfacePtr pSurface, OdDbSurfacePtr& pNewSurface);
+  
+  /** \details
+    Performs a Boolean subtraction operation with a specified solid object and the surface. Creates a new surface entity as a result of subtracting the specified solid from this surface. 
+   
+    \param pSolid	      [in] Pointer to the specified solid to be subtracted from the surface.
+    \param pNewSurface  [out] Pointer to a new surface that represents the subtraction operation result.
+    
+    \returns Returns eOk if the subtraction operation is successfully performed or an appropriate error code otherwise. 
+    If the subtraction operation fails, NULL is returned as a value of pNewSurface.
+    
+    \remarks 
+    Resulting surface is not included in the database, so caller is responsible for the correct handling of the memory pointed to with pNewSurface. 
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult booleanSubtract(const OdDb3dSolidPtr pSolid, OdDbSurfacePtr& pNewSurface);
+  
+  /** \details
+    Performs a Boolean intersection operation for two surfaces: this one and another specified surface. 
+    Entities representing the intersections between two entities are stored in an array. 
+    
+    \param pSurface2 		        [in] Pointer to the other surface to be intersected with the surface.
+    \param intersectionEntities [out] A reference to an entity array for storing the results of the intersection operation. 
+	The resulting array can contain the following entity types: OdDbSurface, OdDbLine, OdDbCircle, OdDbArc, OdDbEllipse, and OdDbSpline.
+    
+    \returns Returns eOk if the intersection operation is successfully performed or an appropriate error code otherwise. 
+
+    \remarks 
+    Resulting entities are not included in the database, so the caller is responsible for the correct handling of the memory pointed to with the resulting array's items. 
+	
+	This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult booleanIntersect(const OdDbSurfacePtr pSurface2, OdDbEntityPtrArray& intersectionEntities);
+
+  /** \details
+    Performs a Boolean intersection operation between this surface and the specified solid object. 
+    Entities representing the intersections between the two entities are stored in an array. 
+    
+    \param pSolid			          [in]  Pointer to the solid object to be intersected with the surface.
+    \param intersectionEntities [out] A reference to an entity array for storing the results of the intersection operation between the solid and surface.
+	The resulting array can contain the following types of entities: OdDbSurface, OdDbLine, OdDbCircle, OdDbArc, OdDbEllipse, and OdDbSpline.
+
+    \returns Returns eOk if the intersection operation is successfully performed, or an appropriate error code otherwise. 
+
+    \remarks 
+    Resulting entities are not included in the database, so the caller is responsible for the correct handling of the memory pointed to with the result array's items. 
+	
+	This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult booleanIntersect(const OdDb3dSolidPtr pSolid, OdDbEntityPtrArray& intersectionEntities);
+
+  /** \details
+    Intersects the specified entity with the surface and imprints the intersection graph onto the surface. 
+    
+    In the case of creating a closed loop of edges, a new face is created. 
+    In the case of creating an open loop of edges, it can be added as a spur to an existing loop on a face or as a slit in the face. 
+
+    \param pEntity [in]  Pointer to the entity to be imprinted. 
+	The specified entity must one of the following types: OdDbCurve, OdDb3dSolid, OdDbSurface, OdDbBody, OdDbRegion, OdDbTrace, OdDbSolid, or OdDbFace.
+
+    \returns Returns eOk if the intersection operation is successfully performed or an appropriate error code otherwise. 
+
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+*/
+  virtual OdResult imprintEntity(const OdDbEntityPtr pEntity);
+  
+  /** \details
+    Intersects the specified plane with the surface and creates the intersection in a resulting array. 
+ 
+    \param sectionPlane   [in]  Pointer to a plane object used for the intersection (section cutting plane).
+    \param sectionObjects [out] A reference to an entity array for representing resulting sections.
+    
+    \returns 
+    Returns eOk if the intersection operation is successfully performed, or an appropriate error code otherwise. 
+
+    \remarks 
+    Resulting entities are not included in the database, so the caller is responsible for the correct handling of the memory pointed to with the result array's items. 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult createSectionObjects(const OdGePlane& sectionPlane, OdDbEntityPtrArray& sectionObjects) const;
+
+  /** \details
+    Slices the surface with the specified plane and sets the surface to be the portion on the positive normal side plane. 
+    
+    \param slicePlane      [in]   Reference to a plane object to be used for slicing the surface.
+    \param pNegHalfSurface [out]  Pointer to a new surface representing the negative side of the surface that is sliced by the specified plane.
+    \param pNewSurface     [out]  Pointer to a new surface representing the positive half of the surface that is sliced by the specified plane.
+    
+    \returns Returns eOk if the slicing operation is successfully performed or an appropriate error code otherwise. 
+    
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult sliceByPlane(const OdGePlane& slicePlane,
+                                OdDbSurfacePtr& pNegHalfSurface, 
+                                OdDbSurfacePtr& pNewSurface);
+  /** \details
+    Slices the surface with the specified surface. 
+
+    \param pSlicingSurface [in]  Pointer to the surface to be used to slice this surface. 
+    \param pNegHalfSurface [out] Pointer to a new surface object representing the other (negative) side of the sliced surface.
+    \param pNewSurface     [out] Pointer to a new surface object representing the positive side of the sliced surface.
+    
+    \returns Returns eOk if the slicing operation is successfully performed or an appropriate error code otherwise. 
+    
+    \remarks 
+    If the specified surface does not intersect this surface and this surface is left unchanged, pNegHalfSurface is set to NULL.
+    
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult sliceBySurface(const OdDbSurfacePtr pSlicingSurface, 
+                                  OdDbSurfacePtr& pNegHalfSurface,
+                                  OdDbSurfacePtr& pNewSurface);
+
+  /** \details
+    Creates associative chamfers at the specified edges of the surface. 
+    
+    \param edgeSubentIds    [in] Object IDs of edges at which the chamfer will be applied. 
+    \param baseFaceSubentId [in] Object ID of the base face where the chamfer will be applied.
+    \param baseDist         [in] Chamfer distance on the base face.  
+    \param otherDist        [in] Chamfer distance on the other faces.  
+    
+    \returns Returns eOk if creating the chamfer is successful or an appropriate error code otherwise. 
+    
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult chamferEdges(const OdArray<OdDbSubentId *> &edgeSubentIds,
+                                const OdDbSubentId& baseFaceSubentId, 
+                                double baseDist, 
+                                double otherDist);
+
+  /** \details
+    Creates rounded fillets along the specified edges of the surface.
+    
+    \param edgeSubentIds [in] Object IDs of the edges where the fillet will be applied. 
+    \param radius        [in] Array of radius values for the corresponding edges. 
+    \param startSetback  [in] Array of starting setback values for the corresponding edges. 
+    \param endSetback    [in] Array of ending setback values for the corresponding edge.
+    
+    \returns Returns eOk if creating the fillet is successful or an appropriate error code otherwise. 
+    
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult filletEdges( const OdArray<OdDbSubentId *> &edgeSubentIds,
+                                const OdGeDoubleArray& radius, 
+                                const OdGeDoubleArray& startSetback, 
+                                const OdGeDoubleArray& endSetback);
+
+  virtual OdResult setSubentColor(const OdDbSubentId& subentId, const OdCmColor& color);
+  virtual OdResult getSubentColor(const OdDbSubentId& subentId, OdCmColor& color) const;
+  virtual OdResult setSubentMaterial(const OdDbSubentId& subentId, const OdDbObjectId& matId);
+  virtual OdResult getSubentMaterial(const OdDbSubentId& subentId, OdDbObjectId& matId) const;
+  virtual OdResult setSubentMaterialMapper(const OdDbSubentId& subentId, const OdGiMapper& mapper);
+  virtual OdResult getSubentMaterialMapper(const OdDbSubentId& subentId, OdGiMapper& mapper) const;
+
+  virtual OdResult subGetGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath, 
+                                               OdGsMarkerArray& gsMarkers) const;
+
+  virtual OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                                OdGsMarker gsMark, 
+                                                const OdGePoint3d& pickPoint,
+                                                const OdGeMatrix3d& viewXform, 
+                                                OdDbFullSubentPathArray& subentPaths, 
+                                                const OdDbObjectIdArray* pEntAndInsertStack = 0) const;
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+
+  /** \details
+    Converts the surface to nurb surfaces.
+    
+    \param nurbSurfaceArray [in] Array of generated nurb surfaces.
+    
+    \returns Returns eOk if the converting operation was successfully finished or an appropriate error code otherwise. 
+        
+    \remarks 
+    Created nurb surfaces are not included in the database, so the caller must manage the memory occupied by nurb surface objects. 
+
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  virtual OdResult convertToNurbSurface(OdDbNurbSurfaceArray& nurbSurfaceArray);
+  
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits* pTraits) const;
+
+  /** \details
+    Trims a surface with specified cutting surfaces (curves). 
+    A surface can be trimmed by other surfaces or curves. When curves are used, the actual trimming boundary is formed by projecting 
+    the curves onto the surface, so the additional information of project direction needs to be provided.    
+
+    \param blankSurfaceId     [in] Reference to a surface to be trimmed.
+    \param toolIds            [in] Reference to an array of the cutting entity's IDs. Bodies of specified entities are used to trim the specified surface.
+    \param toolCurveIds       [in] Reference to an array of the cutting curve's IDs. The specified surface will be trimmed by projecting curves to it.
+    \param projVectors        [in] Reference to an array of projection direction for each cutting curve.
+    \param pickPoint          [in] Pick point that specifies which area of the specified surface must be trimmed.
+    \param viewVector         [in] Vector representing the view direction for creating a ray starting from the pick point.
+    \param bAutoExtend        [in] If this option is set, then when a tool body consists of a single face with analytic geometry, the underlying geometry will be extended as much as possible to make sure the surface is trimmed. The tool body supplied will not be modified. 
+    \param bAssociativeEnabled [in] Specifies whether the surface trimming operation should be associative.  
+    
+    \returns Returns eOk if the trimming operation was successfully finished or an appropriate error code otherwise. 
+    
+    \remarks 
+    This method is not implemented. 
+  */
+  static OdResult trimSurface(const OdDbObjectId&      blankSurfaceId, 
+                              const OdDbObjectIdArray& toolIds,
+                              const OdDbObjectIdArray& toolCurveIds, 
+                              const OdGeVector3dArray& projVectors,
+                              const OdGePoint3d&       pickPoint, 
+                              const OdGeVector3d&      viewVector,
+                              bool                     bAutoExtend,
+                              bool                     bAssociativeEnabled);
+
+  /** \details
+    Creates entities by projecting the specified entity along the projection direction to the surface.
+    
+    \param pEntityToProject 		[in] Pointer to the entity to be projected. If the entity to project is represented by an OdDbPoint object, an OdDbPoint object, representing the nearest point on the surface, is returned. 
+    \param projectionDirection 	[in] Vector specifying the direction of the projection.
+    \param projectedEntities 	  [out] Array of pointers to entities created by the projection.
+    
+    \returns Returns eOk if projecting operation was successfully finished or an appropriate error code otherwise. 
+    
+    \remarks 
+    All entities created as a result of projection are not included in the database, so the caller is responsible for managing the memory occupied with these entities.
+	
+	This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  OdResult projectOnToSurface(const OdDbEntity*   pEntityToProject,
+                              const OdGeVector3d& projectionDirection,
+                              OdDbEntityPtrArray& projectedEntities) const;
+
+  /** \details 
+    Returns the current perimeter value of the surface.
+    
+    \param dRegionPerimeter [in] A reference to a double value to store the perimeter. 
+
+    \returns Returns eOk if the perimeter was successfully returned to the calling subroutine or an appropriate error code in the other case.
+    
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  OdResult getPerimeter(double&) const;
+
+  /** \details 
+    Creates a ray which starts from a specified point and has a specified direction.
+
+    \param rayBasePoint [in]  A base point to start a ray from.
+    \param rayDir,      [in]  A ray direction.
+    \param rayRadius,   [in]  A ray radius. It defines the tolerance used for intersection checking.
+    \param subEntIds,   [out] A reference to a subentities array to return. Returned subentities can be one of the following: faces, edges, or vertices.
+    \param parameters   [out] An array of parameters to return. Parameters shows the intersection between a ray and subentities.
+
+    \returns Returns eOk if a ray was successfully created or an appropriate error code in the other case.
+
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+  OdResult rayTest( const OdGePoint3d&      rayBasePoint, 
+                    const OdGeVector3d&     rayDir,
+                    double                  rayRadius, 
+                    OdArray<OdDbSubentId> & subEntIds, 
+                    OdGeDoubleArray&        parameters) const;
+
+  /** \details 
+    Creates an offset surface. 
+    
+    \param pInputSurface    [in]  A pointer to a surface to be offset.
+    \param dOffsetDistance  [in]  An offset distance.
+    \param offsetSurface    [out] An offset surface to return.
+    
+    \returns Returns eOk if the offset surface was successfully created or an appropriate error code in the other case.
+  
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+
+  static OdResult createOffsetSurface ( OdDbEntity* pInputSurface,
+                                        double dOffsetDistance,
+                                        OdDbEntityPtr& offsetSurface);
+
+  /** \details 
+    Creates an offset surface and includes it in the current database. 
+    
+    \param pInputSurface        [in]  A pointer to a surface to be offset.
+    \param dOffsetDistance      [in]  An offset distance.
+    \param bAssociativeEnabled  [in]  An associativity flag value. The associativity flag indicates whether the patch surface associativity is enabled (if true) or not (if false).
+    \param offsetSurfaceId      [out] An offset surface identifier to return.
+    
+    \returns Returns eOk if the offset surface was successfully created or an appropriate error code in the other case.
+  
+    \remarks 
+    This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+    for other modelers. 
+  */
+
+  static OdResult createOffsetSurface ( OdDbEntity* pInputSurface,
+                                        double dOffsetDistance,
+                                        bool  bAssociativeEnabled,
+                                        OdDbObjectId& offsetSurfaceId);
+
+  /** \details  
+    This method is not implemented. 
+  */
+  static OdResult createFilletSurface ( const OdDbObjectId&  surfId1,
+                                        const OdGePoint3d&   pickPt1,
+                                        const OdDbObjectId&  surfId2,
+                                        const OdGePoint3d&   pickPt2,
+                                        double               dRadius,
+                                        OdDb::FilletTrimMode trimMode,
+                                        const OdGeVector3d&  projDir,
+                                        OdDbSurface*&        filletSurface);
+
+  /** \details
+    This method is not implemented. 
+  */
+  static OdResult createFilletSurface ( const OdDbObjectId&  surfId1,
+                                        const OdGePoint3d&   pickPt1,
+                                        const OdDbObjectId&  surfId2,
+                                        const OdGePoint3d&   pickPt2,
+                                        double               dRadius,
+                                        OdDb::FilletTrimMode trimMode,
+                                        const OdGeVector3d&  projDir,
+                                        bool                 bAssociativeEnabled,
+                                        OdDbObjectId&        filletSurfaceId);
+
+  /**  \details   
+    This method is not implemented. 
+  */
+  static OdResult createExtendSurface ( OdDbObjectId                 sourceSurface, 
+                                        const OdArray<OdDbSubentId>& edgesId,  
+                                        double                       dExtDist, 
+                                        EdgeExtensionType            extOption, 
+                                        bool                         bAssociativeEnabled, 
+                                        OdDbObjectId&                newExtendSurfaceId );
+
+  /** \details
+    This method is not implemented. 
+  */
+  OdResult extendEdges( OdDbFullSubentPathArray& edgesId,
+                        double                   dExtDist, 
+                        EdgeExtensionType        extOption, 
+                        bool                     bAssociativeEnabled );
+
+  virtual OdResult subGetGeomExtents( OdGeExtents3d& extents) const;
+};
+
+#include "TD_PackPop.h"
+#endif //_DBSURFACE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweepOptions.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweepOptions.h
new file mode 100755
index 0000000..4e3666e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweepOptions.h
@@ -0,0 +1,355 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbSweepOptions_h_Included_
+#define _DbSweepOptions_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbEntity.h"
+
+
+class OdDbSweepOptionsImpl;
+
+/** \details
+Class for setting options used for creating swept surfaces and swept solids (by calling OdDbSweptSurface::createSweptSurface() or OdDb3dSolid::createSweptSolid() methods).
+Sweep options are used to control the shape of the resulting surface or solid object.
+
+<group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSweepOptions
+{
+public:
+  /** \details 
+  Creates an instance of sweep options. 
+  */
+  OdDbSweepOptions ();
+  
+  /** \details 
+  Destroys the instance of sweep options. 
+  */  
+  ~OdDbSweepOptions ();
+  
+  /** \details 
+  Creates a copy of another instance of swept entity options (copy constructor).
+  
+  \param src [in] An instance of swept entity options to be copied.
+  */
+  OdDbSweepOptions ( const OdDbSweepOptions& src );
+  
+  /** \details 
+  Assigning operator for swept entity options.
+  
+  \param src [in] An instance of swept entity options to be assigned to this instance.
+  */
+  OdDbSweepOptions& operator = ( const OdDbSweepOptions& src );
+
+  /** \details
+  Alignment options enumerator for swept entities.
+  */
+  enum AlignOption 
+  {
+    kNoAlignment                = 0, // 
+    kAlignSweepEntityToPath     = 1, // 
+    kTranslateSweepEntityToPath = 2, // 
+    kTranslatePathToSweepEntity = 3 // 
+  };
+
+  /** \details
+  Miter options enumerator for swept entities.
+  */
+  enum MiterOption 
+  {
+    kDefaultMiter = 0,
+    kOldMiter     = 1,
+    kNewMiter     = 2,
+    kCrimpMiter   = 3,
+    kBendMiter    = 4
+  };
+
+  /** \details
+  Returns the draft angle (in radians).
+  The draft angle is the angle by which the profile will taper as it is swept. 
+  The default value is equal to 0.0. 
+  */
+  double  draftAngle () const;
+
+  /** \details
+  Sets the draft angle.
+  
+  The draft angle is the angle by which the profile will taper as it is swept. 
+  The default value is equal to 0.0. 
+
+  \param ang [in] A new draft angle (in radians).
+  */
+  void  setDraftAngle ( double ang );
+
+  /** \details
+  Returns the start draft distance.
+  The default value is equal to 0.0. 
+  */
+  double  startDraftDist () const;
+
+  /** \details
+  Sets the start draft distance.
+	The default value is equal to 0.0. 
+  
+  \param val [in] A new value of the start draft distance.
+  */
+  void  setStartDraftDist ( double val );
+
+  /** \details
+  Returns the end draft distance. 
+  The default value is equal to 0.0. 
+  */
+  double  endDraftDist () const;
+
+  /** \details
+  Sets the start draft distance.
+  The default value is equal to 0.0. 	  
+  
+  \param val [in] A new value of the end draft distance.
+  */
+  void  setEndDraftDist ( double val );
+
+  /** \details
+  Returns the twist angle in radians.
+  Twist angle is the angle by which the profile will be twisted as it is swept.
+  The default value is equal to 0.0. 
+  */
+  double  twistAngle () const;
+
+  /** \details
+  Sets the twist angle.
+  
+  Twist angle is the angle by which the profile will be twisted as it is swept.
+  The default value is equal to 0.0. 	  
+  
+  \param ang [in] A new twist angle (in radians).
+  */
+  void  setTwistAngle ( double ang );
+
+  /** \details
+  Returns the scale factor.
+  */
+  double  scaleFactor () const;
+
+  /** \details
+  Sets the scale factor.
+	  
+	\param val [in] A new value of the scale factor.
+  */
+  void  setScaleFactor ( double val );
+
+  /** \details
+  Returns the align angle.
+  */
+  double  alignAngle () const;
+
+  /** \details
+  Sets the align angle.
+	  
+  \param ang [in] A new value of the align angle.
+  */
+  void  setAlignAngle ( double ang );
+
+  /** \details
+  Returns the align option.
+  */
+  OdDbSweepOptions::AlignOption  align () const;
+
+  /** \details
+  Sets the align option.
+	  
+  \param val [in] A new value for the align option.
+  */
+  void  setAlign ( OdDbSweepOptions::AlignOption val );
+
+  /** \details
+  Returns the miter option.
+  */
+  OdDbSweepOptions::MiterOption  miterOption () const;
+
+  /** \details
+  Sets the miter option.
+	  
+  \param val [in]  A new value for the miter option.
+  */
+  void  setMiterOption ( OdDbSweepOptions::MiterOption val );
+
+  /** \details
+  Returns the align to start option.
+
+  If the option value is equal to true, alignment to the start of the curve is applied.
+  If the option value is equal to false, alignment to the end of the curve is applied.
+  */
+  bool  alignStart () const;
+
+  /** \details
+  Sets the align to start option.
+
+  If the option value is equal to true, alignment to the start of the curve is applied.
+	If the option value is equal to false, alignment to the end of the curve is applied.
+  
+  \param val [in] A new value of the align to start option.
+  */
+  void  setAlignStart ( bool val );
+
+  /** \details
+  Returns the base point for alignment.
+  */
+  OdGePoint3d  basePoint () const;
+
+  /** \details
+  Sets the base point for alignment.
+	  
+  \param pnt [in] A new base point for alignment.
+  */
+  void  setBasePoint ( const OdGePoint3d& pnt );
+
+  /** \details
+  Returns the bank flag.
+  */
+  bool  bank () const;
+
+  /** \details
+  Sets the bank flag.
+	  
+  \param val [in]  A new value for the bank flag.
+  */
+  void  setBank ( bool val );
+
+  /** \details
+  Returns the check self-intersections flag.
+  If this flag is disabled, a self-intersecting surface may be created.
+  */
+  bool  checkIntersections () const;
+
+  /** \details
+  Sets the check self-intersections flag.
+  
+	If this flag is disabled, a self-intersecting surface may be created.  
+  
+  \param val [in]  A new value of the check self-intersections flag.
+  */
+  void  setCheckIntersections ( bool val );
+
+  /** \details
+  Returns the twist vector.
+  */
+  OdGeVector3d  twistRefVec () const;
+
+  /** \details
+  Sets the twist vector.
+	  
+  \param vec [in]  A new twist vector.
+  */
+  void  setTwistRefVec ( const OdGeVector3d& vec );
+
+  /** \details
+  Returns the transformation associated with this entity.
+	  
+  \param mat [out] A passed-in parameter for returning the transformation matrix.
+  */
+  bool  getSweepEntityTransform ( OdGeMatrix3d& mat )const;
+
+  /** \details
+  Sets the transformation associated with this entity.
+	  
+  \param mat [in] A new transformation to be associated with the entity.
+  */
+  void  setSweepEntityTransform ( const OdGeMatrix3d& mat ); 
+  
+  /** \details
+  Sets the coordinate system transformation matrix to be applied to the sweep entity, using the sweep entity geometry for calculating the transformation matrix. 
+
+  \param sweepEntities        [out] Sweep entity geometry to be used for calculation of the sweep entity transformation matrix.
+  \param displayErrorMessages [in] Indicates whether error messages are displayed. Default value is false.
+  
+  \returns Returns eOk if transformation was successfully done.
+  */
+  OdResult  setSweepEntityTransform ( OdDbEntityPtrArray& sweepEntities,  bool displayErrorMessages = false );
+
+  /** \details
+  Returns the transformation associated with the start and end of the path curve.
+  
+  \param mat [in] A passed-in parameter for returning the transformation matrix of the path curve.
+	  
+  \returns Returns true if the transformation matrix was successfully returned, otherwise returns false.  
+  */
+  bool  getPathEntityTransform ( OdGeMatrix3d& mat )const;
+
+  /** \details
+  Sets the transformation associated with the start and end of the path curve.
+	  
+  \param mat [in] A new transformation matrix to be applied.
+  */
+  void  setPathEntityTransform ( const OdGeMatrix3d& mat ); 
+
+  /** \details
+  Sets the transformation associated with the start and end of the path curve.
+
+  \param pPathEnt             [in] A pointer to the new transformation matrix to be applied.
+  \param displayErrorMessages [in] Indicates whether error messages are displayed. Default value is false.
+  
+  \remarks
+  Before calling the method, setSweepEntityTranform() method must be called.
+  */
+  OdResult  setPathEntityTransform ( OdDbEntity *pPathEnt,  bool displayErrorMessages = false );
+
+  /** \details
+  Determines if the specified sweep entity is valid and returns the planarity of the sweep entity.
+
+  \param pSweepEnt            [in]  A pointer to the curve, region, or planar surface to be swept.
+  \param planarity            [out] A passed-in parameter for returning the planarity flag of the entity.
+  \param pnt                  [out] A passed-in parameter for returning the point on the sweep entity if planarity is kPlanar, or a point on the line if planarity is kLinear.
+  \param vec                  [out] A passed-in parameter for returning the normal vector of the entity if planarity is kPlanar, or the line direction if planarity is kLinear.
+  \param closed               [out] A passed-in parameter for returning the closed flag determining whether an entity to be swept is a closed entity.
+  \param approxArcLen         [out] A passed-in parameter for returning the approximate arc length.
+  \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+  
+  \returns If kPlanar is returned, then pnt and vec will specify the normal plane
+  of the entity. If kLinear is returned, then pnt and vec will specify
+  a defining point and direction of the sweep entity.
+  */
+  OdResult  checkSweepCurve ( OdDbEntity *pSweepEnt,
+    OdDb::Planarity& planarity, OdGePoint3d& pnt, OdGeVector3d& vec,
+    bool& closed, double& approxArcLen, bool displayErrorMessages = false );
+
+  /** \details
+  Determines if the passed-in path curve is valid.
+
+  \param pPathEnt             [in] A pointer to the path curve.
+  \param displayErrorMessages [in] Indicates whether error messages are displayed. Default value is false.
+  
+  \returns Returns eOk if curve is valid or eInvalidInput otherwise. 
+  */
+  OdResult  checkPathCurve ( OdDbEntity *pPathEnt,    bool displayErrorMessages = false );
+
+private:
+  friend class OdDbSweepOptionsImpl;
+  OdDbSweepOptionsImpl *m_pImpl;
+};
+
+#include "TD_PackPop.h"
+#endif //_DbSweepOptions_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweptSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweptSurface.h
new file mode 100755
index 0000000..928822a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSweptSurface.h
@@ -0,0 +1,126 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DbSweptSurface_h_Included_
+#define _DbSweptSurface_h_Included_
+
+#include "TD_PackPush.h"
+#include "DbSurface.h"
+#include "DbSweepOptions.h"
+
+/** \details
+This class implements a three-dimensional swept surface entity.
+
+\sa
+TD_Db
+
+<group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSweptSurface : public OdDbSurface
+{
+public:
+  OdDbSweptSurface ();
+  ODDB_DECLARE_MEMBERS(OdDbSweptSurface);
+
+  /** \details
+  Creates a swept surface by sweeping a specified curve, region, or planar surface along a specified path curve.
+
+
+  \param pSweepEnt    [in] A pointer to the curve, region, or planar surface to be swept.
+  \param pPathEnt     [in] A pointer to the curve entity that specifies the sweeping path along which a specified entity should to be swept.
+  \param sweepOptions [in] Additional sweep options.
+  
+  \returns  Returns eOk if a surface was successfully created or eFail for other modelers. 
+  If specified sweep information is not valid, returns eInvalidInput.
+  Returns eFail if the surface cannot be created.
+  
+  \remarks 
+  Additional parameters, such as a draft angle, can be set through the sweepOptions parameter.
+  */
+  virtual OdResult createSweptSurface ( OdDbEntity* pSweepEnt, OdDbEntity* pPathEnt, OdDbSweepOptions& sweepOptions, const OdStreamBuf *pSat = 0 );
+
+  /** \details
+  Returns the sweep entity that describes the surface.
+  */
+  OdDbEntityPtr getSweepEntity() const;
+  
+  /** \details
+  Returns the sweep path used when the surface was created.
+  */
+  OdDbEntityPtr getPathEntity() const;
+
+  /** \details
+  Returns the sweep options applied when the surface was created.
+  
+  \param sweepOptions [out]  A passed-in parameter for returning the current sweep options object.
+  */
+  void getSweepOptions ( OdDbSweepOptions& sweepOptions ) const;
+  
+  /** \details
+  Sets the new sweep option values for the surface.
+  
+  \param sweepOptions [in]  New options object to be set.
+  
+  \remarks
+  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
+  for other modelers. 
+  */
+  void setSweepOptions ( const OdDbSweepOptions& sweepOptions );
+
+  /** \details
+  Returns the length of the path curve entity. 
+
+  \param len [out]  A passed-in parameter for returning the length of the path curve.
+  
+  \returns Returns eOk if successful or eFail otherwise.
+  */
+  OdResult getPathLength ( double& len ) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm );
+
+  // OdDbObject methods
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool isDependent() const { return false; }
+};
+
+typedef OdSmartPtr<OdDbSweptSurface> OdDbSweptSurfacePtr;
+
+#include "TD_PackPop.h"
+#endif //_DbSweptSurface_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymUtl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymUtl.h
new file mode 100755
index 0000000..e1fc2fb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymUtl.h
@@ -0,0 +1,309 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef DBSYMUTL_DEFINED
+#define DBSYMUTL_DEFINED
+
+#include "TD_PackPush.h"
+
+#include "OdString.h"
+#include "DbObjectId.h"
+#include "DbSymbolTable.h"
+#include "DbSymbolTableRecord.h"
+#include "DbTextStyleTableRecord.h"
+#include "DbDictionary.h"
+#include "DbDatabase.h"
+
+// Predefined names
+#define AC_STRING(name, val) \
+extern TOOLKIT_EXPORT_GLOBAL const OdConstString name;
+#include "StdStrings.h"
+#undef AC_STRING
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDbSymUtil
+{
+  // --- DbSymbolUtilities Services  ---
+
+  TOOLKIT_EXPORT OdResult repairPreExtendedSymbolName(
+    OdString& newName,
+    const OdString& oldName,
+    const OdDbDatabase* pDb,
+    bool allowVerticalBar = false,
+    const OdChar symSubst = L'_',
+    bool insertPrefix = true);
+
+  /** \details
+    If the symbol name was repaired, then newName is a repaired symbol name. 
+    newName is empty if oldName did not need any repairing.
+    allowVerticalBar is a boolean to indicate if vertical bars are allowed in the symbol name 
+    
+    \returns
+    eInvalidInput      if the specified name is empty
+    eOk                in else case 
+  */
+  TOOLKIT_EXPORT OdResult repairSymbolName(
+    OdString& newName,
+    const OdString& oldName,
+    const OdDbDatabase* pDb,
+    bool allowVerticalBar = false,
+    const OdChar symSubst = L'_',
+    bool insertPrefix = true);
+  
+  TOOLKIT_EXPORT OdResult validatePreExtendedSymbolName(
+    const OdString& name,
+    const OdDbDatabase* pDb,
+    bool allowVerticalBar = false);
+
+  /** \details
+    This method validates name according to the rules for extended (AutoCAD 2000 and later) symbol names.
+    allowVerticalBar is a boolean to indicate if vertical bars are allowed in the symbol name 
+    
+    \returns
+    eOk            Symbol name is valid 
+    eInvalidInput  Symbol name contains invalid characters 
+  */
+  TOOLKIT_EXPORT OdResult validateSymbolName(
+    const OdString& name,
+    const OdDbDatabase* pDb,
+    bool allowVerticalBar = false);
+
+  TOOLKIT_EXPORT bool getMaxSymbolNameLength(
+    OdUInt32& maxLength,
+    OdUInt32& maxSize,
+    bool isNewName,
+    bool compatibilityMode); // true for extended names
+
+  inline OdString getSymbolName(const OdDbObjectId& objId)
+  {
+    OdDbSymbolTableRecordPtr pRec
+      = OdDbSymbolTableRecord::cast(objId.openObject(OdDb::kForRead, true).get());
+    if (!pRec.isNull())
+    {
+      return pRec->getName();
+    }
+    return OdString::kEmpty;
+  }
+
+  #define DBSYMUTL_MAKE_GETSYMBOLID_FUNC(T_TABLE) \
+  inline OdDbObjectId \
+  get ## T_TABLE ## Id(const OdString& name, const OdDbDatabase *pDb) \
+  { \
+    OdDbSymbolTablePtr pTable = pDb->get ## T_TABLE ## TableId().safeOpenObject(); \
+    ODA_ASSERT(!pTable->isOdDbObjectIdsInFlux()); \
+    return pTable->getAt(name); \
+  }
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(Viewport)
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(Block)
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(DimStyle)
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(Layer)
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(Linetype)
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(RegApp)
+  //DBSYMUTL_MAKE_GETSYMBOLID_FUNC(TextStyle)
+
+  inline OdDbObjectId getTextStyleId(const OdString& name, const OdDbDatabase *pDb)
+  {
+    OdDbSymbolTablePtr pTable = pDb->getTextStyleTableId().safeOpenObject();
+    ODA_ASSERT(!pTable->isOdDbObjectIdsInFlux());
+    OdDbTextStyleTableRecordPtr pRec = pTable->getAt(name, OdDb::kForRead);
+
+    if (pRec.get())
+      if (!pRec->isShapeFile())
+        return pRec->objectId();
+    return OdDbObjectId::kNull;
+  }
+
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(UCS)
+  DBSYMUTL_MAKE_GETSYMBOLID_FUNC(View)
+  #undef DBSYMUTL_MAKE_GETSYMBOLID_FUNC
+
+  inline OdDbObjectId getPlotstyleId(const OdString& name, const OdDbDatabase *pDb)
+  {
+    OdDbDictionaryPtr pDic = pDb->getPlotStyleNameDictionaryId(false).openObject();
+    if (!pDic.isNull())
+    {
+      ODA_ASSERT(!pDic->isOdDbObjectIdsInFlux());
+      return pDic->getAt(name);
+    }
+    return OdDbObjectId::kNull;
+  }
+
+  inline OdDbObjectId getMLStyleId(const OdString& name, const OdDbDatabase *pDb)
+  {
+    OdDbDictionaryPtr pDic = pDb->getMLStyleDictionaryId(false).openObject();
+    if (!pDic.isNull())
+    {
+      ODA_ASSERT(!pDic->isOdDbObjectIdsInFlux());
+      return pDic->getAt(name);
+    }
+    return OdDbObjectId::kNull;
+  }
+
+  inline OdDbObjectId getTableStyleId(const OdString& name, const OdDbDatabase *pDb)
+  {
+    OdDbDictionaryPtr pDic = pDb->getTableStyleDictionaryId(false).openObject();
+    if (!pDic.isNull())
+    {
+      ODA_ASSERT(!pDic->isOdDbObjectIdsInFlux());
+      return pDic->getAt(name);
+    }
+    return OdDbObjectId::kNull;
+  }
+
+  inline OdDbObjectId getMLeaderStyleId(const OdString& name, const OdDbDatabase *pDb)
+  {
+    OdDbDictionaryPtr pDic = pDb->getMLeaderStyleDictionaryId(false).openObject();
+    if (!pDic.isNull())
+    {
+      ODA_ASSERT(!pDic->isOdDbObjectIdsInFlux());
+      return pDic->getAt(name);
+    }
+    return OdDbObjectId::kNull;
+  }
+
+  inline OdDbObjectId getVisualStyleId(const OdString& name, const OdDbDatabase *pDb)
+  {
+    OdDbDictionaryPtr pDic = pDb->getVisualStyleDictionaryId(false).openObject();
+    if (!pDic.isNull())
+    {
+      ODA_ASSERT(!pDic->isOdDbObjectIdsInFlux());
+      return pDic->getAt(name);
+    }
+    return OdDbObjectId::kNull;
+  }
+
+  inline const OdString& linetypeByLayerName()
+  { return  byLayerNameStr; }
+
+  inline bool isLinetypeByLayerName(const OdString& name)
+  { return !odStrICmp(name, linetypeByLayerName()); }
+
+  inline const OdString& linetypeByBlockName()
+  { return  byBlockNameStr; }
+
+  inline bool isLinetypeByBlockName(const OdString& name)
+  { return !odStrICmp(name, linetypeByBlockName()); }
+
+  inline const OdString& linetypeContinuousName()
+  { return  linetypeContinuousNameStr; }
+
+  inline bool isLinetypeContinuousName(const OdString& name)
+  { return !odStrICmp(name, linetypeContinuousName()); }
+
+  inline const OdString& layerZeroName()
+  { return  layerZeroNameStr; }
+
+  inline bool isLayerZeroName(const OdString& name)
+  { return !odStrICmp(name, layerZeroName()); }
+
+  inline const OdString& layerDefpointsName()
+  { return  layerDefpointsNameStr; }
+
+  inline bool isLayerDefpointsName(const OdString& name)
+  { return !odStrICmp(name, layerDefpointsName()); }
+
+  inline const OdString& textStyleStandardName()
+  { return standardStr; }
+
+  inline const OdString& MLineStyleStandardName()
+  { return standardStr; }
+
+  inline bool isMLineStandardName(const OdString& name)
+  { return !odStrICmp(name, MLineStyleStandardName()); }
+
+  inline const OdString& dimStyleStandardName(OdDb::MeasurementValue measurement)
+  { return measurement == OdDb::kEnglish ? standardStr : metricDimStandardStr; }
+
+  inline const OdString& viewportActiveName()
+  { return viewportActiveNameStr; }
+
+  inline bool isViewportActiveName(const OdString& name)
+  { return !odStrICmp(name, viewportActiveName()); }
+
+  inline bool isTextStyleStandardName(const OdString& name)
+  { return !odStrICmp(name, textStyleStandardName()); }
+
+  TOOLKIT_EXPORT const OdDbObjectId& textStyleStandardId(OdDbDatabase* pDb);
+	TOOLKIT_EXPORT const OdDbObjectId& dimStyleStandardId(OdDbDatabase* pDb);
+  TOOLKIT_EXPORT const OdDbObjectId  MLineStyleStandardId(OdDbDatabase* pDb);
+
+  inline const OdString& blockModelSpaceName(OdDb::DwgVersion version = OdDb::kDHL_CURRENT)
+  { return version <= OdDb::vAC12 ? modelSpaceStr_R12 : modelSpaceStr; }
+
+  inline bool isBlockModelSpaceName(const OdString& pN, OdDb::DwgVersion version = OdDb::kDHL_CURRENT)
+  { return odStrICmp(pN, blockModelSpaceName(version)) == 0; }
+
+  inline const OdString& blockPaperSpaceName(OdDb::DwgVersion version = OdDb::kDHL_CURRENT)
+  { return version <= OdDb::vAC12 ? paperSpaceStr_R12 : paperSpaceStr; }
+
+  inline bool isBlockPaperSpaceName(const OdString& pN, OdDb::DwgVersion version = OdDb::kDHL_CURRENT)
+  { return odStrICmp(pN, blockPaperSpaceName(version)) == 0; }
+
+  inline const OdString& plotStyleNormalName()
+  { return plotStyleNormalNameStr;}
+
+  inline const OdString& TableStyleStandardName()
+  { return standardStr; }
+
+  inline bool isTableStandardName(const OdString& name)
+  { return !odStrICmp(name, TableStyleStandardName()); }
+
+  inline const OdString& MLeaderStyleStandardName()
+  { return standardStr; }
+
+  inline bool isMLeaderStandardName(const OdString& name)
+  { return !odStrICmp(name, MLeaderStyleStandardName()); }
+
+  inline const OdString& DetailViewStyleStandardName(OdDbDatabase* pDb)
+  {
+    ODA_ASSERT_ONCE(pDb);
+    return (pDb && pDb->getMEASUREMENT() == OdDb::kMetric) ? standardMetricDictStr : standardImperialDictStr;
+  }
+
+  inline bool isDetailViewStyleStandardName(OdDbDatabase* pDb, const OdString& name)
+  { 
+    return !odStrICmp(name, DetailViewStyleStandardName(pDb)); 
+  }
+
+  inline const OdString& SectionViewStyleStandardName(OdDbDatabase* pDb)
+  {
+    return DetailViewStyleStandardName(pDb);
+  }
+
+  inline bool isSectionViewStyleStandardName(OdDbDatabase* pDb, const OdString& name)
+  { 
+    return !odStrICmp(name, SectionViewStyleStandardName(pDb)); 
+  }
+}
+// namespace OdDbSymUtil
+
+#include "TD_PackPop.h"
+
+#endif // DBSYMUTL_DEFINED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTable.h
new file mode 100755
index 0000000..76b9a9d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTable.h
@@ -0,0 +1,294 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBSYMBOLTABLE_INCLUDED
+#define _ODDBSYMBOLTABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+class OdDbSymbolTableRecord;
+class OdDbSymbolTableIterator;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSymbolTableIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbSymbolTableIterator> OdDbSymbolTableIteratorPtr;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSymbolTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbSymbolTableRecord> OdDbSymbolTableRecordPtr;
+
+
+/** \details
+    This class implements OdError objects with Result codes of eDuplicateRecordName errors, 
+    and the Object IDs of the objects related to the errors.
+    
+    Library: TD_Db
+    <group Error_Classes> 
+*/
+class TOOLKIT_EXPORT OdError_DuplicateRecordName : public OdError
+{
+public:
+  /** \param existingRecordId [in]  Object ID of the existing record.
+  */
+  OdError_DuplicateRecordName(   
+    OdDbObjectId existingRecId);
+  /** \details
+    Returns the Object ID of the existing record.
+  */
+  OdDbObjectId existingRecordId() const;
+};
+
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /predefined table/ object, which represents a container for  
+  storing and accessing of /named record/ objects in the database.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_datasheet_sample_root.html, Example of Selecting a Predefined Table Object>
+
+  <link db_database_object_sample_about.html, Example of Using the Record-Table and Dictionary Interfaces for Getting Information about Objects>  
+
+  \sa
+  <link db_datasheet.html, Working with Predefined Tables of Named Records>
+
+  OdDbSymbolTableRecord class
+*/
+class TOOLKIT_EXPORT OdDbSymbolTable : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSymbolTable);
+
+  /** \details
+    Builds an instance of the /predefined table/ object.
+    
+    Applications typically will not use this constructor, insofar as the database object 
+    creates own instance of all predefined tables.
+  */
+  OdDbSymbolTable();
+
+  /** \details
+    Searches the /named record/ object in the /predefined table/ object using the
+    specified name and opnes it in the specified mode.
+
+    \param sName [in]  /Record name/ as a String value up to 255 characters long.
+    \param openMode [in]  Mode in which to open the record.
+    \param getErasedRecord [in]  If and only if true, erased records will be opened or retrieved.
+
+    \remarks
+    Returns a SmartPointer to the object if successful, otherwise a null SmartPointer.
+
+    \sa
+    <link db_datasheet_get_check.html, Getting and Checking Records>
+  */
+  virtual OdDbSymbolTableRecordPtr getAt(
+    const OdString& sName,
+    OdDb::OpenMode openMode, 
+    bool getErasedRecord = false) const;
+
+  virtual OdDbObjectId getAt(
+    const OdString& sName, 
+    bool getErasedRecord = false) const;
+
+
+  /** \details
+    Determines whether the /named record/ object exists in the /predefined table/ object
+    using the specified name or object ID, and returns True if and only if the /predefined table/
+    object contains the specified /named record/ object.
+
+    \param sName [in]  /Record name/ as a String value up to 255 characters long.
+    \param objectId [in]  Object ID.
+
+    \sa
+    <link db_datasheet_get_check.html, Getting and Checking Records>
+  */
+  virtual bool has( const OdString& sName ) const;
+  virtual bool has( const OdDbObjectId& objectId ) const;
+
+
+  /** \details
+    Returns an Iterator object that can be used to traverse through record objects
+    in the predefined table object.
+
+    \param atBeginning [in]  True - to start at the beginning, or False - to start at the end. 
+    \param skipDeleted [in]  True - to iterate only unerased records, or False - to iterate 
+                    through unerased and erased records.
+
+    \sa
+    <link db_datasheet_iterate.html, Iterating through Records>
+  */
+  virtual OdDbSymbolTableIteratorPtr newIterator( 
+    bool atBeginning = true, 
+    bool skipDeleted = true) const;
+
+
+  /** \details
+    Adds the specified named record object to the predefined table object and 
+    returns the Object ID of the added record object.
+
+    \param pRecord [in]  Pointer to the existing named record object to be added.
+
+    \remarks
+    The record object must be created and must be named before adding. Use the  
+    static pseudo-constructor createObject() for creating an instance of the 
+    specific record. The predefined table object excludes duplicates of records.
+
+    \sa
+    <link db_datasheet_add_delete.html, Adding, Naming, Deleting, Recovering Records>
+
+    OdError_DuplicateRecordName class
+  */
+  virtual OdDbObjectId add( OdDbSymbolTableRecord* pRecord );
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOut(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  The typified smart pointer for the /predefined table/ object. This template class is specialization 
+  of the OdSmartPtr class for the OdDbSymbolTable object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbSymbolTable> OdDbSymbolTablePtr;
+
+
+
+class OdDbSymbolTableIteratorImpl;
+
+/** \details
+    This class implements bidirectional Iterators for OdDbSymbolTable objects in an OdDbDatabase instance.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbSymbolTableIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSymbolTableIterator);
+
+  /** \details
+    Sets this Iterator object to reference the SymbolTableRecord that it would normally return first.
+     
+    \remarks
+    Allows multiple traversals of the iterator list.
+
+    \param atBeginning [in]  True to start at the beginning, false to start at the end. 
+    \param skipErased [in]  If and only if true, erased records are skipped.
+  */
+    virtual void start(
+    bool atBeginning = true, 
+    bool skipErased = true);
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() const;
+
+  /** \details
+    Returns the Object ID of the record currently referenced by this Iterator object.
+  */
+  virtual OdDbObjectId getRecordId() const;
+
+  /** \details
+    Opens the record currently referenced by this Iterator object.
+
+    \param openMode [in]  Mode in which to open the record.
+    \param openErasedRecord [in]  If and only if true, erased records will be opened.
+
+    \remarks
+    Returns a SmartPointer to the opened record if successful, otherwise a null SmartPointer.
+  */
+  virtual OdDbSymbolTableRecordPtr getRecord(
+    OdDb::OpenMode openMode = OdDb::kForRead,
+    bool openErasedRecord = false) const;
+
+  /** \details
+    Steps this Iterator object.
+
+    \param forward [in]  True to step forward, false to step backward.
+    \param skipErased [in]  If and only if true, erased records are skipped.
+  */
+  virtual void step(
+    bool forward = true, 
+    bool skipErased = true);
+
+  /** \details
+    Positions this Iterator object at the specified record.
+    \param objectId [in]  Object ID of the record.
+    \param pRecord [in]  Pointer to the record.
+  */
+    virtual void seek(
+    const OdDbObjectId& ObjectId);
+  virtual void seek(
+    const OdDbSymbolTableRecord* pRecord);
+
+  virtual ~OdDbSymbolTableIterator();
+protected:
+  friend class OdDbSymbolTable;
+
+  OdDbSymbolTableIterator();
+  OdDbSymbolTableIterator(
+    OdDbSymbolTableIteratorImpl* pImpl);
+
+  OdDbSymbolTableIteratorImpl* m_pImpl;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBSYMBOLTABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTableRecord.h
new file mode 100755
index 0000000..0909992
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSymbolTableRecord.h
@@ -0,0 +1,156 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBSYMBOLTABLERECORD_INCLUDED
+#define _ODDBSYMBOLTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+class OdString;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /named record/ object, which is the base class for all record 
+  objects in the database. 
+  
+  \sa
+  TD_Db
+
+  \sa
+  <link db_datasheet_sample_select.html, Example of Using the Record-Table Interface for Selecting Objects>
+
+  <link db_database_object_sample_about.html, Example of Using the Record-Table and Dictionary Interfaces for Getting Information about Objects>  
+
+  \sa
+  <link db_datasheet.html, Working with Predefined Tables of Named Records>
+
+  OdDbSymbolTable class
+*/
+class TOOLKIT_EXPORT OdDbSymbolTableRecord : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSymbolTableRecord);
+
+  /** \details
+    Builds an instance of the /named record/ object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_datasheet_add_delete.html, Adding, Naming, Deleting, Recovering Records>
+  */
+  OdDbSymbolTableRecord();
+
+
+  /** \details
+    Returns the name of the record object (DXF 2).
+
+    \sa
+    <link db_datasheet_add_delete.html, Adding, Naming, Deleting, Recovering Records>
+
+    OdDbSymbolTableRecord::setName() method
+  */
+  virtual OdString getName() const;
+
+
+  /** \details
+    Sets the name for the record object (DXF 2).
+
+    \param sName [in]  /Record name/ as a String value up to 255 characters long.
+
+    \remarks
+    The name is an arbitrary non-empty string that can contain letters, digits, blank spaces, 
+    underscores, and some special characters, but cannot contain inadmissible letters 
+    (see {Naming Objects|objects_naming.html}).
+
+    \sa
+    <link db_datasheet_add_delete.html, Adding, Naming, Deleting, Recovering Records>
+
+    OdDbSymbolTableRecord::getName() method
+  */
+  virtual void setName( const OdString& sName );
+
+
+  /** \details
+    Returns true if and only if this Record object is Xref dependent (DXF 70, bit 0x10).
+  */
+  bool isDependent() const;
+
+  /** \details
+    Returns true if and only if this Record object is Xref dependent and resolved (DXF 70, bit 0x20).
+  */
+  bool isResolved() const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  void appendToOwner(
+    OdDbIdPair& idPair, 
+    OdDbObject* pOwnerObject, 
+    OdDbIdMapping& ownerIdMap);
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+      Copies the contents of other into the messaged object, whenever feasible
+  */
+  virtual void copyFrom(
+    const OdRxObject* pSource);
+
+  virtual OdResult subErase(
+    bool erasing);
+
+  virtual void subSwapIdWith(
+    const OdDbObjectId& otherId, 
+    bool swapXdata = false, 
+    bool swapExtDict = false);
+};
+
+/** \details
+  The typified smart pointer for the /named record/ object. This template class is 
+  specialization of the OdSmartPtr class for the OdDbSymbolTableRecord object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbSymbolTableRecord> OdDbSymbolTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBSYMBOLTABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSystemServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSystemServices.h
new file mode 100755
index 0000000..2cec661
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbSystemServices.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODDBSYSTEMSERVICES_INCLUDED_
+#define _ODDBSYSTEMSERVICES_INCLUDED_
+
+#include "RxSystemServices.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for classes that provide platform-dependent file operations for
+    Teigha.
+*/
+typedef OdRxSystemServices OdDbSystemServices;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbSystemServices object pointers.
+*/
+typedef OdSmartPtr<OdDbSystemServices> OdDbSystemServicesPtr;
+
+TOOLKIT_EXPORT OdDbSystemServices* odSystemServices();
+
+/** \details
+    Performs Teigha system initialization.  
+    
+    \remarks
+    This function registers all classes supported by Teigha. Instances of these classes may
+    Thus be created by client applications. 
+    
+    It also allows the user to specify the OdDbSystemServices instance that to be used for file creation and access.  
+    
+    \note
+    This function should be called once per process prior to any other Teigha calls.
+    
+    \param pSystemServices [in]  Pointer to SystemServices object.
+	
+    \sa
+    TD_Db
+*/
+TOOLKIT_EXPORT void odInitialize(
+  OdDbSystemServices* pSystemServices);
+
+/** \details
+    Performs Teigha system uninitialization.  
+
+    \remarks
+    This function releases the dynamic class registration data and the OdDbSystemServices pointer 
+    associated with the earlier call to odInitialize.  
+    
+    \note
+    This function should be called once per process as the last operation performed by Teigha.
+
+    \sa
+    TD_Db
+*/
+TOOLKIT_EXPORT void odUninitialize();
+
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBSYSTEMSERVICES_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTable.h
new file mode 100755
index 0000000..5df3f21
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTable.h
@@ -0,0 +1,4984 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_DBTABLE_H
+#define OD_DBTABLE_H
+
+#include "TD_PackPush.h"
+#include "DbBlockReference.h"
+#include "DbTableStyle.h"
+#include "DbDataLink.h"
+#include "UInt32Array.h"
+
+// typedef for OdSubentPathArray
+//
+
+class OdDbTableImpl;
+class OdDbLinkedTableData;
+
+namespace OdDb
+{
+  /** \details
+  Enumerator representing table break options.
+  */
+  enum TableBreakOption  
+  { 
+    /** None.*/  
+    kTableBreakNone                 = 0,
+    /** Enable table breaking.*/ 
+    kTableBreakEnableBreaking       = 0x01,
+    /** Repeat top labels for all tables.*/
+    kTableBreakRepeatTopLabels      = 0x02,
+    /** Repeat bottom labels for all tables.*/
+    kTableBreakRepeatBottomLabels   = 0x04,
+    /** Allow manual positions for individual tables.*/
+    kTableBreakAllowManualPositions = 0x08,
+    /** Allow setting manual height of all tables individually.*/
+    kTableBreakAllowManualHeights   = 0x10
+  };
+  
+  /** \details
+  Enumerator representing flow direction options for table breaking.
+  */
+  enum TableBreakFlowDirection 
+  { 
+    /** Break tables in the direction from left to right.*/  
+    kTableBreakFlowRight      = 0x1,
+    /** Break tables in the directions from top to bottom (for top to bottom flow table) or from bottom to top (for bottom to top flow table).*/  
+    kTableBreakFlowDownOrUp   = 0x2,
+    /** Break tables in the direction from right to left.*/ 
+    kTableBreakFlowLeft       = 0x4
+  };
+
+  /** \details
+  Enumerator representing a location of the item in the table.
+  */
+  enum TableHitItem        
+  { 
+    /** There is no item at the specified point.*/  
+    kTableHitNone            = 0,
+    /** The item is a cell.*/  
+    kTableHitCell            = 0x1,
+    /** The item is at a row.*/
+    kTableHitRowIndicator    = 0x2,
+    /** The item is at a column.*/
+    kTableHitColumnIndicator = 0x4,
+    /** The item is at a grid line.*/
+    kTableHitGridLine        = 0x8,
+  };
+};
+
+/** \details
+    This class represents table entities in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbTable: public OdDbBlockReference
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbTable);
+
+  /** \details
+  Enumerator representing the table style overrides for an OdDbTable object.
+  */
+  enum TableStyleOverrides 
+  {
+    /** Title suppressed table style override for OdDbTable object.*/
+    kTitleSuppressed             = 1,
+    /** Header suppressed table style override for OdDbTable object.*/
+    kHeaderSuppressed            = 2,
+    /** Flow direction table style override for OdDbTable object.*/
+    kFlowDirection               = 3,   
+    /** Horizontal cell margin table style override for OdDbTable object.*/    
+    kHorzCellMargin              = 4,
+    /** Vertical cell margin table style override for OdDbTable object.*/    
+    kVertCellMargin              = 5,
+    /** Title row color table style override for OdDbTable object.*/   
+    kTitleRowColor               = 6,
+    /** Header row color table style override for OdDbTable object.*/ 
+    kHeaderRowColor              = 7,
+    /** Data row color table style override for OdDbTable object.*/ 
+    kDataRowColor                = 8,
+    /** Title row no fill table style override for OdDbTable object.*/
+    kTitleRowFillNone            = 9,
+    /** Header row no fill table style override for OdDbTable object.*/
+    kHeaderRowFillNone           = 10,
+    /** Data row no fill table style override for OdDbTable object.*/
+    kDataRowFillNone             = 11,
+    /** Title row fill color table style override for OdDbTable object.*/
+    kTitleRowFillColor           = 12,
+    /** Header row fill color table style override for OdDbTable object.*/
+    kHeaderRowFillColor          = 13,
+    /** Data row fill color table style override for OdDbTable object.*/
+    kDataRowFillColor            = 14,
+    /** Title row alignment table style override for OdDbTable object.*/
+    kTitleRowAlignment           = 15,
+    /** Header row alignment table style override for OdDbTable object.*/
+    kHeaderRowAlignment          = 16,
+    /** Data row alignment table style override for OdDbTable object.*/
+    kDataRowAlignment            = 17,
+    /** Title row text style table style override for OdDbTable object.*/
+    kTitleRowTextStyle           = 18,
+    /** Header row text style table style override for OdDbTable object.*/
+    kHeaderRowTextStyle          = 19,
+    /** Data row text style table style override for OdDbTable object.*/
+    kDataRowTextStyle            = 20,
+    /** Title row text height table style override for OdDbTable object.*/
+    kTitleRowTextHeight          = 21,
+    /** Header row text height table style override for OdDbTable object.*/
+    kHeaderRowTextHeight         = 22,
+    /** Data row text height table style override for OdDbTable object.*/
+    kDataRowTextHeight           = 23,
+    /** Title row data type table style override for OdDbTable object.*/
+    kTitleRowDataType            = 24,
+    /** Header row data type table style override for OdDbTable object.*/
+    kHeaderRowDataType           = 25,
+    /** Data row data type table style override for OdDbTable object.*/
+    kDataRowDataType             = 26,
+    /** Title row horizontal top gridline color table style override for OdDbTable object.*/
+    kTitleHorzTopColor           = 40,
+    /** Title row horizontal inside gridline color table style override for OdDbTable object.*/
+    kTitleHorzInsideColor        = 41,
+    /** Title row horizontal bottom gridline color table style override for OdDbTable object.*/
+    kTitleHorzBottomColor        = 42,
+    /** Title row vertical left gridline color table style override for OdDbTable object.*/
+    kTitleVertLeftColor          = 43,
+    /** Title row vertical inside gridline color table style override for OdDbTable object.*/
+    kTitleVertInsideColor        = 44,
+    /** Title row vertical right gridline color table style override for OdDbTable object.*/
+    kTitleVertRightColor         = 45,
+    /** Header row horizontal top gridline color table style override for OdDbTable object.*/
+    kHeaderHorzTopColor          = 46,
+    /** Header row horizontal inside gridline color table style override for OdDbTable object.*/
+    kHeaderHorzInsideColor       = 47,
+    /** Header row horizontal bottom gridline color table style override for OdDbTable object.*/
+    kHeaderHorzBottomColor       = 48,
+    /** Header row vertical left gridline color table style override for OdDbTable object.*/
+    kHeaderVertLeftColor         = 49,
+    /** Header row vertical inside gridline color table style override for OdDbTable object.*/
+    kHeaderVertInsideColor       = 50,
+    /** Header row vertical right gridline color table style override for OdDbTable object.*/
+    kHeaderVertRightColor        = 51,
+    /** Data row horizontal top gridline color table style override for OdDbTable object.*/
+    kDataHorzTopColor            = 52,
+    /** Data row horizontal inside gridline color table style override for OdDbTable object.*/
+    kDataHorzInsideColor         = 53,
+    /** Data row horizontal bottom gridline color table style override for OdDbTable object.*/
+    kDataHorzBottomColor         = 54,
+    /** Data row vertical left gridline color table style override for OdDbTable object.*/
+    kDataVertLeftColor           = 55,
+    /** Data row vertical inside gridline color table style override for OdDbTable object.*/
+    kDataVertInsideColor         = 56,
+    /** Data row vertical right gridline color table style override for OdDbTable object.*/
+    kDataVertRightColor          = 57,
+    /** Title row horizontal top gridline lineweight table style override for OdDbTable object.*/
+    kTitleHorzTopLineWeight      = 70,
+    /** Title row horizontal inside gridline lineweight table style override for OdDbTable object.*/
+    kTitleHorzInsideLineWeight   = 71,
+    /** Title row horizontal bottom gridline lineweight table style override for OdDbTable object.*/
+    kTitleHorzBottomLineWeight   = 72,
+    /** Title row vertical left gridline lineweight table style override for OdDbTable object.*/
+    kTitleVertLeftLineWeight     = 73,
+    /** Title row vertical inside gridline lineweight table style override for OdDbTable object.*/
+    kTitleVertInsideLineWeight   = 74,
+    /** Title row vertical right gridline lineweight table style override for OdDbTable object.*/
+    kTitleVertRightLineWeight    = 75,
+    /** Header row horizontal top gridline lineweight table style override for OdDbTable object.*/
+    kHeaderHorzTopLineWeight     = 76,
+    /** Header row horizontal inside gridline lineweight table style override for OdDbTable object.*/
+    kHeaderHorzInsideLineWeight  = 77,
+    /** Header row horizontal bottom gridline lineweight table style override for OdDbTable object.*/
+    kHeaderHorzBottomLineWeight  = 78,
+    /** Header row vertical left gridline lineweight table style override for OdDbTable object.*/
+    kHeaderVertLeftLineWeight    = 79,
+    /** Header row vertical inside gridline lineweight table style override for OdDbTable object.*/
+    kHeaderVertInsideLineWeight  = 80,
+    /** Header row vertical right gridline lineweight table style override for OdDbTable object.*/
+    kHeaderVertRightLineWeight   = 81,
+    /** Data row horizontal top gridline lineweight table style override for OdDbTable object.*/
+    kDataHorzTopLineWeight       = 82,
+    /** Data row horizontal inside gridline lineweight table style override for OdDbTable object.*/
+    kDataHorzInsideLineWeight    = 83,
+    /** Data row horizontal bottom gridline lineweight table style override for OdDbTable object.*/
+    kDataHorzBottomLineWeight    = 84,
+    /** Data row vertical left gridline lineweight table style override for OdDbTable object.*/
+    kDataVertLeftLineWeight      = 85,
+    /** Data row vertical inside gridline lineweight table style override for OdDbTable object.*/
+    kDataVertInsideLineWeight    = 86,
+    /** Data row vertical right gridline lineweight table style override for OdDbTable object.*/
+    kDataVertRightLineWeight     = 87,
+
+    /** Title row horizontal top gridline visibility table style override for OdDbTable object.*/
+    kTitleHorzTopVisibility      = 100,
+    /** Title row horizontal inside gridline visibility table style override for OdDbTable object.*/
+    kTitleHorzInsideVisibility   = 101,
+    /** Title row horizontal bottom gridline visibility table style override for OdDbTable object.*/
+    kTitleHorzBottomVisibility   = 102,
+    /** Title row vertical left gridline visibility table style override for OdDbTable object.*/
+    kTitleVertLeftVisibility     = 103,
+    /** Title row vertical inside gridline visibility table style override for OdDbTable object.*/
+    kTitleVertInsideVisibility   = 104,
+    /** Title row vertical right gridline visibility table style override for OdDbTable object.*/
+    kTitleVertRightVisibility    = 105,
+    /** Header row horizontal top gridline visibility table style override for OdDbTable object.*/
+    kHeaderHorzTopVisibility     = 106,
+    /** Header row horizontal inside gridline visibility table style override for OdDbTable object.*/
+    kHeaderHorzInsideVisibility  = 107,
+    /** Header row horizontal bottom gridline visibility table style override for OdDbTable object.*/
+    kHeaderHorzBottomVisibility  = 108,
+    /** Header row vertical left gridline visibility table style override for OdDbTable object.*/
+    kHeaderVertLeftVisibility    = 109,
+    /** Header row vertical inside gridline visibility table style override for OdDbTable object.*/
+    kHeaderVertInsideVisibility  = 110,
+    /** Header row vertical right gridline visibility table style override for OdDbTable object.*/
+    kHeaderVertRightVisibility   = 111,
+    /** Data row horizontal top gridline visibility table style override for OdDbTable object.*/
+    kDataHorzTopVisibility       = 112,
+    /** Data row horizontal inside gridline visibility table style override for OdDbTable object.*/
+    kDataHorzInsideVisibility    = 113,
+    /** Data row horizontal bottom gridline visibility table style override for OdDbTable object..*/
+    kDataHorzBottomVisibility    = 114,
+    /** Data row vertical left gridline visibility table style override for OdDbTable object..*/
+    kDataVertLeftVisibility      = 115,
+    /** Data row vertical inside gridline visibility table style override for OdDbTable object..*/
+    kDataVertInsideVisibility    = 116,
+    /** Data row vertical right gridline visibility table style override for OdDbTable object..*/
+    kDataVertRightVisibility     = 117,
+
+    /** Alignment table style override for table cell.*/
+    kCellAlignment               = 130,
+    /** Background no fill table style override for table cell.*/
+    kCellBackgroundFillNone      = 131,
+    /** Background color table style override for table cell.*/
+    kCellBackgroundColor         = 132,
+    /** Content color table style override for table cell.*/
+    kCellContentColor            = 133,
+    /** Text style table style override for table cell.*/
+    kCellTextStyle               = 134,
+    /** Text height table style override for table cell.*/
+    kCellTextHeight              = 135,
+    /** Top edge grid color table style override for table cell.*/
+    kCellTopGridColor            = 136,
+    /** Right edge grid color table style override for table cell.*/
+    kCellRightGridColor          = 137,
+    /** Bottom edge grid color table style override for table cell.*/
+    kCellBottomGridColor         = 138,
+    /** Left edge grid color table style override for table cell.*/
+    kCellLeftGridColor           = 139,
+    /** Top edge grid lineweight table style override for table cell.*/
+    kCellTopGridLineWeight       = 140,
+    /** Right edge grid lineweight table style override for table cell.*/
+    kCellRightGridLineWeight     = 141,
+    /** Bottom edge grid lineweight table style override for table cell.*/
+    kCellBottomGridLineWeight    = 142,
+    /** Left edge grid lineweight table style override for table cell.*/
+    kCellLeftGridLineWeight      = 143,
+    /** Top edge grid visibility table style override for table cell.*/
+    kCellTopVisibility           = 144,
+    /** Right edge grid visibility table style override for table cell.*/
+    kCellRightVisibility         = 145,
+    /** Bottom edge grid visibility table style override for table cell.*/
+    kCellBottomVisibility        = 146,
+    /** Left edge grid visibility table style override for table cell.*/
+    kCellLeftVisibility          = 147    
+  };
+
+  OdDbTable();
+  // virtual ~OdDbTable();
+
+
+  /** \details
+    Returns the Object ID of the OdDbTableStyle used by this table entity (DXF 342).
+  */
+  virtual OdDbObjectId tableStyle() const;
+
+  /** \details
+    Sets the Object ID of the OdDbTableStyle for use by this table entity (DXF 342).
+
+    \param tableStyleId [in]  Object ID of the table style.
+
+    \remarks
+    Method generates the eInvalidInput exception when the object ID is invalid.
+  */
+  virtual void setTableStyle(
+    const OdDbObjectId& tableStyleId);
+
+  /** \details
+    Returns the unit X-axis for this table entity in WCS coordinates (DXF 11, 21, 31).
+  */
+  virtual OdGeVector3d direction() const;
+  
+  /** \details
+    Sets the X-axis for this table entity in WCS coordinates (DXF 11, 21, 31).
+    
+    \param horizVector [in] Horizontal vector.
+  */
+  virtual void setDirection(
+    const OdGeVector3d& horizVector);
+
+  /** \details
+    Returns the number of rows in this table entity (DXF 91).
+    
+    \remarks
+    This includes title and header rows, if any. 
+  */
+  virtual OdUInt32 numRows() const;
+
+  /** \details
+    Sets the number of rows for this table entity (DXF 91).
+    
+    \param numRows [in]  Number of rows.
+    
+    \remarks
+    This includes title and header rows, if any. The number of rows must be greater than zero.
+    
+    Method generates the eInvalidInput exception when the number of rows is less than one.
+  */
+  virtual void setNumRows(
+    OdUInt32 numRows);
+
+  /** \details
+    Returns the number of columns in this table entity (DXF 92). 
+  */
+  virtual OdUInt32 numColumns() const;
+
+  /** \details
+    Sets the number of columns for this table entity (DXF 92). 
+    
+    \param numColumns [in]  Number of columns.
+    
+    \remarks
+    The number of columns must be greater than zero.
+    
+    Method generates the eInvalidInput exception when the number of columns is less than one.
+  */
+  virtual void setNumColumns(OdUInt32 numColumns);
+
+  /** \details
+    Returns the overall width of this table entity.
+  */
+  virtual double width() const;
+
+  /** \details
+    Sets the overall width for this table entity. 
+    
+    \param width [in]  Overall width.
+    
+    \remarks
+    Column widths may be adjusted proportionally.
+    
+    Method generates the eInvalidInput exception when the width is negative.
+
+    \sa
+    columWidth
+  */
+  virtual void setWidth(double width);
+
+  /** \details
+    Returns the width of the specified column in this table entity (DXF 142).
+    
+    \param column [in]  Column index. 
+  */
+  virtual double columnWidth(OdUInt32 column) const;
+  
+  /** \details
+    Sets the width of the specified column in this table entity (DXF 142).
+
+    \param column [in]  Column index. 
+    \param width [in]  Column width.
+
+    \remarks
+    Method generates the eInvalidInput exception when the column width is negative.
+  */
+  virtual void setColumnWidth(
+    OdUInt32 column, 
+    double width);
+  
+  /** \details
+    Sets the width of all columns in this table entity (DXF 142).
+
+    \param width [in]  Column width.
+
+    \remarks
+    Method generates the eInvalidInput exception when the column width is negative.
+  */
+  virtual void setColumnWidth(
+    double width);
+
+  /** \details
+    Returns the overall height of this table entity.
+  */
+  virtual double height() const;
+
+  /** \details
+    Sets the overall height of this table entity.
+    
+    \param height [in]  Overall height.
+      
+    \remarks
+    Row heights may be adjusted proportionally.
+    
+    Method generates the eInvalidInput exception when the height is negative.
+  */
+  virtual void setHeight(
+    double height);
+
+  /** \details
+    Returns the height of the specified row in this table entity (DXF 141).
+    
+    \param row [in]  Row index.
+  */
+  virtual double rowHeight(
+    OdUInt32 row) const;
+  
+  /** \details
+    Sets the height of the specified row in this table entity (DXF 141).
+
+    \param row [in]  Row index.
+    \param height [in]  Row height.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row height is negative.
+  */
+  virtual void setRowHeight(
+    OdUInt32 row, 
+    double height);
+    
+  /** \details
+    Sets the height of all rows in this table entity (DXF 141).
+
+    \param height [in]  Row height.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row height is negative.
+  */
+  virtual void setRowHeight(
+    double height);
+  
+  /** \details
+    Returns the minimum column width for the specified column in this table entity.
+    
+    \param column [in]  Column index. 
+  */
+  virtual double minimumColumnWidth(
+    OdUInt32 column) const;
+
+  /** \details
+    Returns the minimum row height for the specified row in this table entity.
+    
+    \param row [in]  Row index.
+  */
+  virtual double minimumRowHeight(
+    OdUInt32 row) const;    
+
+  /** \details
+    Returns the minimum overall width for this table entity.
+  */
+  virtual double minimumTableWidth() const;
+  
+  /** \details
+    Returns the minimum overall height for this table entity.
+  */
+  virtual double minimumTableHeight() const;        
+
+  //********************************************************************
+  // Get and set methods for table style overrides
+  //********************************************************************
+  
+  /** \details
+    Returns the horizontal cell margin for this table entity (DXF 40). 
+
+    \remarks
+    The horizontal cell margin is the horizontal space between the cell text and the cell border.
+  */
+  virtual double horzCellMargin() const;
+
+  /** \details
+    Sets the horizontal cell margin for this table entity (DXF 40).
+    
+    \param cellMargin [in]  Cell margin.
+    
+    \remarks
+    The horizontal cell margin is the horizontal space between the horizontal cell text and the cell border.
+    
+    Method generates the eInvalidInput exception when the cell margin is negative or zero.
+  */
+  virtual void setHorzCellMargin(
+    double cellMargin);
+
+  /** \details
+    Returns the vertical cell margin for this table entity (DXF 41). 
+
+    \remarks
+    The vertical cell margin is the vertical space between the cell text and the cell border.
+  */
+  virtual double vertCellMargin() const;
+
+  /** \details
+    Sets the vertical cell margin for this table entity (DXF 41).
+    
+    \param cellMargin [in]  Cell margin.
+    
+    \remarks
+    The vertical cell margin is the vertical space between the cell text and the cell border.
+    
+    Method generates the eInvalidInput exception when the vertical cell margin is negative or zero.
+  */
+  virtual void setVertCellMargin(double cellMargin);
+
+  /** \details
+    Returns the direction that this table entity flows from its first row to its last (DXF 70).
+
+    \remarks
+    flowDirection() Returns one of the following:
+    
+    <table>
+    Name          Value   Description
+    OdDb::kTtoB   0       Top to Bottom
+    OdDb::kBtoT   1       Bottom to Top
+    </table>
+  */
+  virtual OdDb::FlowDirection flowDirection() const; 
+
+  /** \details
+    Sets the direction that this table entity flows from its first row to its last. (DXF 70).
+
+    \param flowDirection [in]  Flow direction.
+    
+    \remarks
+    flowDirection must be one of the following: 
+         
+    <table>
+    Name          Value   Description
+    OdDb::kTtoB   0       Top to Bottom
+    OdDb::kBtoT   1       Bottom to Top
+    </table>
+
+    Method generates the eInvalidInput exception when the flow direction is not equal to 0 or 1.
+  */
+  virtual void setFlowDirection(
+    OdDb::FlowDirection flowDirection);
+
+  /** \details
+      Returns true if and only if the title row is suppressed for this table entity (DXF 280).
+  */
+  virtual bool isTitleSuppressed() const;
+
+  /** \details
+    Controls the suppression of the title row (DXF 280).
+    
+    \param suppress [in]  Controls suppression.
+  */
+  virtual void suppressTitleRow(
+    bool suppress);
+
+  /** \details
+    Returns true if and only if the header row is suppressed for this table entity (DXF 281). 
+  */
+  virtual bool isHeaderSuppressed() const;
+
+  /** \details
+    Controls the suppression of the header row for this table entity (DXF 280).
+    
+    \param suppress [in]  Controls suppression.
+  */
+  virtual void suppressHeaderRow(
+    bool suppress);
+
+  /** \details
+    Returns the cell alignment for the specified row type in this table entity (DXF 170).
+
+    \param rowType [in]  Row type.
+    
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+    
+    alignment() returns one of the following:
+    
+    <table>
+    Name                    Value   
+    OdDb::kTopLeft          1       
+    OdDb::kTopCenter        2 
+    OdDb::kTopRight         3
+    OdDb::kMiddleLeft       4
+    OdDb::kMiddleCenter     5
+    OdDb::kMiddleRight      6
+    OdDb::kBottomLeft       7 
+    OdDb::kBottomCenter     8
+    OdDb::kBottomRight      9
+    </table>
+  */
+  virtual OdDb::CellAlignment alignment(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+    
+/** \details
+    Returns the cell alignment for the specified cell in this table entity (DXF 170).
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    
+    alignment() returns one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTopLeft          1
+    OdDb::kTopCenter        2 
+    OdDb::kTopRight         3
+    OdDb::kMiddleLeft       4
+    OdDb::kMiddleCenter     5
+    OdDb::kMiddleRight      6
+    OdDb::kBottomLeft       7 
+    OdDb::kBottomCenter     8
+    OdDb::kBottomRight      9
+    </table>
+  */
+  virtual OdDb::CellAlignment alignment(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the cell alignment for the specified row types in this table entity (DXF 170).
+    
+    \param alignment [in]  Alignment.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+    
+    alignment must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTopLeft          1
+    OdDb::kTopCenter        2 
+    OdDb::kTopRight         3
+    OdDb::kMiddleLeft       4
+    OdDb::kMiddleCenter     5
+    OdDb::kMiddleRight      6
+    OdDb::kBottomLeft       7 
+    OdDb::kBottomCenter     8
+    OdDb::kBottomRight      9
+    </table>
+
+    Method generates the eInvalidInput exception when the alignment is out of the available range 1 to 9, 
+    when the row argument is more than the number of rows, or when the column argument is more than the number of columns.
+  */
+  virtual void setAlignment(
+    OdDb::CellAlignment alignment, 
+    OdUInt32 rowTypes = OdDb::kAllRows);
+
+  /** \details
+    Sets the cell alignment for the specified cell in this table entity (DXF 170).
+    
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param alignment [in]  Alignment.
+
+    Alignment must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTopLeft          1
+    OdDb::kTopCenter        2 
+    OdDb::kTopRight         3
+    OdDb::kMiddleLeft       4
+    OdDb::kMiddleCenter     5
+    OdDb::kMiddleRight      6
+    OdDb::kBottomLeft       7 
+    OdDb::kBottomCenter     8
+    OdDb::kBottomRight      9
+    </table>
+
+    Method generates the eInvalidInput exception when the alignment is out of the available range 1 to 9, 
+    when the row argument is more than the number of rows, or when the column argument is more than the number of columns.
+  */ 
+  virtual void setAlignment(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    OdDb::CellAlignment alignment);
+
+  /** \details
+    Returns true if and only if the background color for the specified row type is disabled for this table entity (DXF 283).
+
+    \param rowType [in]  Row type.
+
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual bool isBackgroundColorNone(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+    
+  /** \details
+    Returns true if and only if the background color for the specified cell is disabled for this table entity (DXF 283).
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual bool isBackgroundColorNone(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Controls the background color setting for the specified row types in this table entity (DXF 283). 
+
+    \param disable [in]  Disables the background color if true, enables if false.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+
+    Method generates the eInvalidInput exception when the row type mask is more than 7, 
+    the row argument is more than the number of rows, or the column argument is more than the number of columns.
+  */
+  virtual void setBackgroundColorNone(
+    bool disable, 
+    OdUInt32 rowTypes = OdDb::kAllRows);
+    
+  /** \details
+    Controls the background color setting for the specified cell in this table entity (DXF 283). 
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param disable [in]  Disables the background color if true, enables if false.
+
+    Method generates the eInvalidInput exception when the row type mask is more than 7, 
+    the row argument is more than the number of rows, or the column argument is more than the number of columns.
+  */
+  virtual void setBackgroundColorNone(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    bool disable);
+    
+  /** \details
+    Returns the background color for the specified row type in this table entity (DXF 63).
+
+    \param rowType [in]  Row type.
+
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual OdCmColor backgroundColor(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+    
+  /** \details
+    Returns the background color for the specified cell in this table entity (DXF 63).
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */    
+  virtual OdCmColor backgroundColor(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the background color for the specified row types in this table entity (DXF 63). 
+
+    \param color [in]  Background color.
+    \param rowTypes [in]  Row types.
+    
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+
+    Method generates the eInvalidInput exception when the row type mask is more than 7, 
+    the row argument is more than the number of rows, or the column argument is more than the number of columns.
+  */
+  virtual void setBackgroundColor(
+    const OdCmColor& color, 
+    OdUInt32 rowTypes = OdDb::kAllRows);
+    
+  /** \details
+    Sets the background color for the specified cell in this table entity (DXF 63). 
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param color [in]  Background color.
+    
+    Method generates the eInvalidInput exception when the row type mask is more than 7, 
+    the row argument is more than the number of rows, or the column argument is more than the number of columns.
+  */
+  virtual void setBackgroundColor(
+    OdUInt32 row, 
+    OdUInt32 column,
+    const OdCmColor& color);
+
+  /** \details
+    Returns the content color for the specified row type in this table entity (DXF 64).
+
+    \param rowType [in]  Row type.
+
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual OdCmColor contentColor(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+  
+  /** \details
+    Returns the content color for the specified cell in this table entity (DXF 64).
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual OdCmColor contentColor(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the content color for the specified row types in this table entity (DXF 64). 
+
+    \param color [in]  Content color.
+    \param nRowType [in]  Row types.
+
+    \remarks
+    nRowType must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+
+    Method generates the eInvalidInput exception when the row type mask is more than 7, the 
+    row argument is more than the number of rows, or the column argument is more than the number of columns.
+  */
+  virtual void setContentColor(
+    const OdCmColor& color, 
+    OdUInt32 nRowType = OdDb::kAllRows);
+  
+  /** \details
+    Sets the content color for the specified cell in this table entity (DXF 64). 
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param color [in]  Content color.
+   
+    Method generates the eInvalidInput exception when the row type mask is more than 7, the 
+    row argument is more than the number of rows, or the column argument is more than the number of columns.
+  */
+  virtual void setContentColor(
+    OdUInt32 row, 
+    OdUInt32 column,
+    const OdCmColor& color);
+
+  /** \details
+    Returns the Object ID of the text style for the specified row type in this table entity (DXF 7).
+
+    \param rowType [in]  Row type.
+    
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual OdDbObjectId textStyle(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+  
+  /** \details
+    Returns the Object ID of the text style for the specified cell in this table entity (DXF 7).
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual OdDbObjectId textStyle(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+    
+  /** \details
+    Sets the Object ID of the text style for the specified row types in this table entity (DXF 7).
+    
+    \param textStyleId [in]  Text style Object ID.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+
+    Method generates the eInvalidInput exception when the row type mask is more than 7 
+    or the object ID is invalid or kNull.
+  */
+  virtual void setTextStyle(
+    const OdDbObjectId& textStyleId, 
+    OdUInt32 rowTypes = OdDb::kAllRows);
+    
+  /** \details
+    Sets the Object ID of the text style for the specified cell in this table entity (DXF 7).
+    
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param textStyleId [in]  Text style Object ID.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows, 
+    the column argument is more than the number of columns, or the cell type is not OdDb::kTextCell.
+  */
+  virtual void setTextStyle(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    const OdDbObjectId& textStyleId);
+    
+  /** \details
+    Returns the text height for the specified row type in this table entity (DXF 140).
+
+    \param rowType [in]  Row type.
+    
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual double textHeight(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+    
+  /** \details
+    Returns the text height for the specified cell in this table entity (DXF 140).
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual double textHeight(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+
+  /** \details
+    Sets the text height for the specified row types or cell in this table entity (DXF 140).
+
+    \param height [in]  Text height.
+    \param rowTypes [in]  Row types.
+
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+    
+    Method generates the eInvalidInput exception when the row type mask is more than 7 or the text 
+    height is negative.
+  */
+  virtual void setTextHeight(
+    double height, 
+    OdUInt32 rowTypes = OdDb::kAllRows);
+    
+    
+  /** \details
+    Sets the text height for the specified cell in this table entity (DXF 140).
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param height [in]  Text height.
+
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows, 
+    the column argument is more than the number of columns, or the cell type is not OdDb::kTextCell.
+  */
+  virtual void setTextHeight(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    double height);
+
+  /** \details
+    Returns the grid lineweight for the specified gridline type and row type in this table entity (DXF 274-279).
+      
+    \param gridlineType [in]  Gridline type.
+    \param rowType [in]  Row type.
+
+    \remarks
+    gridlineType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kHorzTop          1       Top or bottom horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kHorzInside       2       All horizontal grid lines, excluding the bottom and top lines.
+    OdDb::kHorzBottom       4       Bottom or top horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kVertLeft         8       Left-most table's grid line.
+    OdDb::kVertInside       0x10    All vertical grid lines, excluding the left-most and right-most lines.
+    OdDb::kVertRight        0x20    Right-most table's grid line.
+    </table>
+    
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual OdDb::LineWeight gridLineWeight(
+    OdDb::GridLineType gridlineType,
+    OdDb::RowType rowType = OdDb::kDataRow) const; 
+
+  /** \details
+    Returns the grid lineweight for the specified cell and edge in this table entity (DXF 274-279).
+      
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param edgeType [in]  Edge type.
+
+
+    \remarks
+    edgeType must be one of the following:
+
+    <table>
+    Name                    Value   Description
+    OdDb::kTopMask          1       Top-edge index of the table cell.
+    OdDb::kRightMask        2       Right-edge index of the table cell.
+    OdDb::kBottomMask       4       Bottom-edge index of the table cell.
+    OdDb::kLeftMask         8       Left-edge index of the table cell.
+    </table>
+  */
+  virtual OdDb::LineWeight gridLineWeight(
+    OdUInt32 row, 
+    OdUInt32 column,
+    OdDb::CellEdgeMask edgeType) const;
+    
+  /** \details
+    Sets the grid lineweight for the specified gridline types and row types in this table entity (DXF 274-279).
+      
+    \param lineWeight [in]  Lineweight.      
+    \param gridlineTypes [in]  Gridline types.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    gridlineTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kHorzTop          1       Top or bottom horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kHorzInside       2       All horizontal grid lines, excluding the bottom and top lines.
+    OdDb::kHorzBottom       4       Bottom or top horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kVertLeft         8       Left-most table's grid line.
+    OdDb::kVertInside       0x10    All vertical grid lines, excluding the left-most and right-most lines.
+    OdDb::kVertRight        0x20    Right-most table's grid line.
+    </table>
+    
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows 
+    or the column argument is more than the number of columns.
+  */
+  virtual void setGridLineWeight(
+    OdDb::LineWeight lineWeight, 
+    OdUInt32 gridlineTypes, 
+    OdUInt32 rowTypes);
+    
+  /** \details
+    Sets the grid lineweight for the specified cell and edges in this table entity (DXF 274-279).
+       
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param edgeTypes [in]  Edge types.
+    \param lineWeight [in]  Lineweight. 
+
+    \remarks
+    edgeTypes must be a combination of one or more of the following:
+
+    <table>
+    Name                    Value   Description
+    OdDb::kTopMask          1       Top-edge index of the table cell.
+    OdDb::kRightMask        2       Right-edge index of the table cell.
+    OdDb::kBottomMask       4       Bottom-edge index of the table cell.
+    OdDb::kLeftMask         8       Left-edge index of the table cell.
+    </table>
+
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows 
+    or the column argument is more than the number of columns.
+  */    
+  virtual void setGridLineWeight(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    OdInt16 edgeTypes,
+    OdDb::LineWeight lineWeight);
+
+  /** \details
+    Returns the grid color for the specified gridline type and row type in this table entity (DXF 63,64,65,66,68,69).
+      
+    \param gridlineType [in]  Gridline type.
+    \param rowType [in]  Row type.
+
+    \remarks
+    gridlineType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kHorzTop          1       Top or bottom horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kHorzInside       2       All horizontal grid lines, excluding the bottom and top lines.
+    OdDb::kHorzBottom       4       Bottom or top horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    </table>
+    
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual OdCmColor gridColor(
+    OdDb::GridLineType gridlineType,
+    OdDb::RowType rowType = OdDb::kDataRow) const; 
+    
+  /** \details
+    Returns the grid color for the specified cell and edge in this table entity (DXF 63,64,65,66,68,69).
+      
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param edgeType [in]  Edge type.
+
+    \remarks
+    edgeType must be one of the following:
+
+    <table>
+    Name                    Value   Description
+    OdDb::kTopMask          1       Top-edge index of the table cell.
+    OdDb::kRightMask        2       Right-edge index of the table cell.
+    OdDb::kBottomMask       4       Bottom-edge index of the table cell.
+    OdDb::kLeftMask         8       Left-edge index of the table cell.
+    </table>
+  */
+  virtual OdCmColor gridColor(
+    OdUInt32 row, 
+    OdUInt32 column,
+    OdDb::CellEdgeMask edgeType) const;
+
+  /** \details
+    Returns the grid visibility for the specified gridline type and row type in this table entity (DXF 284-289).
+      
+    \param gridlineType [in]  Gridline type.
+    \param rowType [in]  Row type.
+
+    \remarks
+    gridVisibility() returns one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kInvisible        1
+    OdDb::kVisible          0 
+    </table>
+        
+    gridlineType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kHorzTop          1       Top or bottom horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kHorzInside       2       All horizontal grid lines, excluding the bottom and top lines.
+    OdDb::kHorzBottom       4       Bottom or top horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kVertLeft         8       Left-most table's grid line.
+    OdDb::kVertInside       0x10    All vertical grid lines, excluding the left-most and right-most lines.
+    OdDb::kVertRight        0x20    Right-most table's grid line.
+    </table>
+    
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual OdDb::Visibility gridVisibility(
+    OdDb::GridLineType gridlineType,
+    OdDb::RowType rowType = OdDb::kDataRow) const; 
+    
+  /** \details
+    Returns the grid visibility for the specified cell and edge in this table entity (DXF 284-289).
+      
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param edgeType [in]  Edge type.
+
+    \remarks
+    gridVisibility() returns one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kInvisible        1
+    OdDb::kVisible          0 
+    </table>
+        
+    edgeType must be one of the following:
+
+    <table>
+    Name                    Value   Description
+    OdDb::kTopMask          1       Top-edge index of the table cell.
+    OdDb::kRightMask        2       Right-edge index of the table cell.
+    OdDb::kBottomMask       4       Bottom-edge index of the table cell.
+    OdDb::kLeftMask         8       Left-edge index of the table cell.
+    </table>
+  */
+  virtual OdDb::Visibility gridVisibility(
+    OdUInt32 row, 
+    OdUInt32 column,
+    OdDb::CellEdgeMask edgeType) const;
+    
+/** \details
+    Sets the grid visibility for the specified gridline types and row types in this table entity (DXF 284-289).
+      
+    \param gridVisibility [in]  Grid visibility.      
+    \param gridlineTypes [in]  Gridline types.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    gridVisibility must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kInvisible        1
+    OdDb::kVisible          0 
+    </table>
+        
+    gridlineTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kHorzTop          1       Top or bottom horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kHorzInside       2       All horizontal grid lines, excluding the bottom and top lines.
+    OdDb::kHorzBottom       4       Bottom or top horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kVertLeft         8       Left-most table's grid line.
+    OdDb::kVertInside       0x10    All vertical grid lines, excluding the left-most and right-most lines.
+    OdDb::kVertRight        0x20    Right-most table's grid line.
+    </table>
+    
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows 
+    or the column argument is more than the number of columns.
+  */
+  virtual void setGridVisibility(
+    OdDb::Visibility gridVisiblity, 
+    OdUInt32 gridlineTypes, 
+    OdUInt32 rowTypes);
+
+  /** \details
+    Sets the grid visibility for the specified cell and edges in this table entity (DXF 284-289).
+       
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param edgeTypes [in]  Edge types.
+    \param gridVisibility [in]  Grid visibility. 
+
+    \remarks
+    gridVisibility must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kInvisible        1
+    OdDb::kVisible          0 
+    </table>
+        
+    edgeTypes must be a combination of one or more of the following:
+
+    <table>
+    Name                    Value   Description
+    OdDb::kTopMask          1       Top-edge index of the table cell.
+    OdDb::kRightMask        2       Right-edge index of the table cell.
+    OdDb::kBottomMask       4       Bottom-edge index of the table cell.
+    OdDb::kLeftMask         8       Left-edge index of the table cell.
+    </table>
+
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows 
+    or the column argument is more than the number of columns.
+*/
+  virtual void setGridVisibility(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    OdInt16 edgeTypes,
+    OdDb::Visibility gridVisibility);
+
+  /** \details
+    Returns the table style overrides for this table entity. 
+
+    \param overrides [out]  Receives an array of table style overrides for this table entity.         
+    
+    \remarks
+    Returns true only if successful.
+  */
+  virtual bool tableStyleOverrides( 
+    OdUInt32Array& overrides) const;
+
+  /** \details
+    Clears the table style overrides for this table entity and/or its cells. 
+
+    \param option [in]  Option.
+        
+    \remarks
+    option can be one of the following:
+    
+    <table>
+    Value   Description
+    0       Clears all overrides.         
+    1       Clears all table overrides.   
+    2       Clears all cell overrides.    
+    </table>
+  */
+  virtual void clearTableStyleOverrides(
+    int option = 0);
+   
+  /** \details
+    Returns the cell type of the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+
+    \remarks
+    cellType() returns one of the following:
+    
+    <table>
+    Name               Value    Description
+    OdDb::kTextCell    1        Text cell type
+    OdDb::kBlockCell   2        Block cell type
+    </table>
+  */
+  virtual OdDb::CellType cellType(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the cell type for the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param cellType [in]  Cell type.
+    
+    \remarks
+    cellType must be one of the following:
+    
+    <table>
+    Name               Value    Description
+    OdDb::kTextCell    1        Text cell type
+    OdDb::kBlockCell   2        Block cell type
+    </table>
+
+    Method generates the eInvalidInput exception when the text cell type number is out of the range 1 to 2, 
+    the row argument is more than the number of rows, or the column argument is more than the number of columns.
+  */
+  virtual void setCellType(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    OdDb::CellType cellType);
+
+  /** \details
+    Returns the cell extents for the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param isOuterCell [in]  If and only if true, ignores margins.
+    \param pts [out]  Receives the cell extents information.
+    
+    \remarks
+    If isOuterCell is true, this function returns the extents of the cell without regard to margins.
+    
+    If isOuterCell is false, this function returns the extents of cell reduced 
+    by the horizontal and vertical cell margins.
+
+    Method generates the eInvalidInput exception when the row argument is more than number of rows 
+    or the column argument is more than number of columns.
+  */
+  virtual void getCellExtents(
+    OdUInt32 row, 
+    OdUInt32 column,
+    bool isOuterCell, 
+    OdGePoint3dArray& pts) const;
+
+  /** \details
+    Returns the attachment point of the specified cell in this table entity.
+    
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than number of rows 
+    or the column argument is more than number of columns.
+  */
+  virtual OdGePoint3d attachmentPoint(
+    OdUInt32 row, 
+    OdUInt32 column) const; 
+
+ 
+  /** \details
+    Returns the cell style overrides for the specified cell in this table entity.
+      
+    \param row [in]  Row index of the 
+    \param column [in]  Column index of the cell.
+    \param overrides [out]  Receives the overrides.   
+  */
+  virtual bool cellStyleOverrides(
+    OdUInt32 row, 
+    OdUInt32 column,
+    OdUInt32Array& overrides) const;
+
+  /** \details
+    Clears the cell overrides for the specified cell in this table entity. 
+
+    \param row [in]  Row index of the 
+    \param column [in]  Column index of the cell.
+  */
+  void clearCellOverrides(
+    OdUInt32 row, 
+    OdUInt32 column);
+
+  /** \details
+    Deletes the content of the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than number of rows 
+    or the column argument is more than the number of columns.
+  */
+  virtual void deleteCellContent(
+    OdUInt32 row, 
+    OdUInt32 column);
+
+  /** \details
+    Returns the type of the specified row in this table entity.
+    
+    \param row [in]  Row index.
+  
+    \remarks
+    rowType() returns one of the following:
+
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual OdDb::RowType rowType(
+    OdUInt32 row) const;
+
+  /** \details
+    Returns the text string in the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual OdString textString(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the text string for the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param textString [in]  Text string.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows 
+    or the column argument is more than the number of columns.
+  */
+  virtual void setTextString(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    const OdString& textString);
+    
+  /** \details
+    Returns the Object ID of the OdDbField in the specified cell in this table entity. 
+      
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual OdDbObjectId fieldId(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the Object ID for OdDbField in the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param fieldId [in]  Object ID of the AdDbField.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number 
+    of rows, the column argument is more than the number of columns, or the cell type is not OdDb::kTextCell.
+  */
+  virtual void setFieldId(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    const OdDbObjectId& fieldId);
+
+
+  /** \details
+    Returns the text rotation angle for the specified cell in this table entity. 
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+
+    \remarks
+    textRotation() returns one of the following:
+    
+    <table>
+    Name                    Value     Description
+    OdDb::kDegrees000       0         0�
+    OdDb::kDegrees090       1         90� CCW
+    OdDb::kDegrees180       2         180�
+    OdDb::kDegrees270       3         90� CW
+    </table>
+  */
+  virtual OdDb::RotationAngle textRotation(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the text rotation angle of the text in the specified cell in this table entity. 
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param textRotation [in]  Text rotation angle.
+    
+    \remarks
+    textRotation must be one of the following:
+    
+    <table>
+    Name                    Value     Description
+    OdDb::kDegrees000       0         0�
+    OdDb::kDegrees090       1         90� CCW
+    OdDb::kDegrees180       2         180�
+    OdDb::kDegrees270       3         90� CW
+    </table>
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows, 
+    the column argument s more than the number of columns, or the cell type is not OdDb::kTextCell.
+  */
+  virtual void setTextRotation(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    OdDb::RotationAngle textRotation);
+  
+
+  /** \details
+    Returns true if and only if the block in the specified cell in this table entity is
+    automatically scaled and positioned to fit into the cell.
+     
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual bool isAutoScale(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Determines if the block in the specified cell in this table entity is to be
+    automatically scaled and positioned to fit into the cell.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param autoScale [in]  True to autoscale the block to the cell.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows, 
+    the column argument is more than the number of columns, or the cell type is not OdDb::kBlockCell.
+  */
+  virtual void setAutoScale(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    bool autoScale);
+ 
+  /** \details
+    Returns the Object ID of the block table record in the specified cell in this table entity. 
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual OdDbObjectId blockTableRecordId(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the Object ID of the block table record in the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param blockId [in]  Object ID of the block.
+    \param autoScale [in]  If true, autoscales the block to the cell.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows, 
+    the column argument is more than the number of columns, the cell type is not OdDb::kBlockCell, or 
+	the object ID is invalid or kNull.
+  */
+  virtual void setBlockTableRecordId(
+    OdUInt32 row, 
+    OdUInt32 column,
+    const OdDbObjectId& blockId, 
+    bool autoScale = false);
+
+  /** \details
+    Returns the scale factor of the block reference in the specified cell in this table entity. 
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual double blockScale(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the scale factor of the block reference in the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param blockScale [in]  Uniform scale factor.
+    
+    \remarks
+    blockScale cannot be zero.
+
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows,  
+    the column argument is more than the number of columns, or the cell type is not OdDb::kBlockCell.
+  */
+  virtual void setBlockScale(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    double blockScale);
+
+  /** \details
+    Returns the rotation angle of the block reference in the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+  */
+  virtual double blockRotation(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Sets the rotation angle of the block reference in the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param blockRotation [in]  Rotation angle.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows,  
+    the column argument is more than the number of columns, or the cell type is not OdDb::kBlockCell.
+  */
+  virtual void setBlockRotation(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    double blockRotation);
+
+  /** \details
+    Gets the attribute value for the specified Object ID OdDb::key for the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param attdefId [in]  Object ID of the OdDbAttributeDefinition.
+    \param attValue [out]  Receives the attribute value.
+  */
+  virtual void getBlockAttributeValue(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    const OdDbObjectId& attdefId, 
+    OdString& attValue) const;
+
+  /** \details
+    Sets the attribute value for the specified Object ID OdDb::key for the specified cell in this table entity.
+
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param attdefId [in]  Object ID of the OdDbAttributeDefinition.
+    \param attValue [out]  Sets the attribute value.
+
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows, 
+    the column argument is more than the number of columns, or the cell type is not OdDb::kBlockCell.
+  */
+  virtual void setBlockAttributeValue(
+    OdUInt32 row, 
+    OdUInt32 column,
+    const OdDbObjectId& attdefId, 
+    const OdString& attValue);
+
+  /** \details
+    Sets the grid color for the specified gridline types and row type in this table entity (DXF 63,64,65,66,68,69).
+      
+    \param color [in]  Grid color.
+    \param gridlineTypes [in]  Gridline types.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    gridlineTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kHorzTop          1       Top or bottom horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    OdDb::kHorzInside       2       All horizontal grid lines, excluding the bottom and top lines.
+    OdDb::kHorzBottom       4       Bottom or top horizontal table's grid line, depending on the flow direction of the table rows (down or up).
+    </table>
+    
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+    
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows or the 
+    column argument is more than the number of columns.
+  */
+  virtual void setGridColor(
+    const OdCmColor& color, 
+    OdUInt32 gridlineTypes, 
+    OdUInt32 rowTypes);
+    
+  /** \details
+    Sets the grid color for the specified cell and edges in this table entity (DXF 63,64,65,66,68,69).
+      
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param edgeTypes [in]  Edge types.
+    \param color [in]  Grid color.
+
+    \remarks
+    edgeTypes must be a combination of one or more of the following:
+
+    <table>
+    Name                    Value   Description
+    OdDb::kTopMask          1       Top-edge index of the table cell.
+    OdDb::kRightMask        2       Right-edge index of the table cell.
+    OdDb::kBottomMask       4       Bottom-edge index of the table cell.
+    OdDb::kLeftMask         8       Left-edge index of the table cell.
+    </table>
+    
+    Method generates the eInvalidInput exception when the row argument is more than the number of rows or the 
+    column argument is more than the number of columns.
+  */
+  virtual void setGridColor(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    OdInt16 edgeTypes,
+    const OdCmColor& color);
+  
+  /** \details
+    Inserts the specified number of columns into this table entity at the specified column index.
+    
+    \param column [in]  Column index.
+    \param width [in]  Width of the inserted columns.
+    \param numColumns [in]  Number of columns to insert.
+
+    \remarks
+    Method generates the eInvalidInput exception when the column argument is more than the number 
+    of columns or the width is zero.
+  */
+  virtual void insertColumns(
+    OdUInt32 column, 
+    double width, 
+    OdUInt32 numColumns = 1);
+
+  /** \details
+    Deletes the specified number of columns from this table entity.
+
+    \param column [in]  Index of first column to delete.
+    \param numColumns [in]  Number of columns to delete. 
+
+    \remarks
+    Method generates the eInvalidInput exception when the number of deleted columns is more 
+    than the number of columns.
+  */
+  virtual void deleteColumns(
+    OdUInt32 column, 
+    OdUInt32 numColumns = 1);
+
+  /** \details
+    Inserts the specified number of rows into this table entity at the specified row index.
+
+    \param row [in]  Row index.
+    \param height [in]  Height of the inserted rows.
+    \param numRows [in]  Number of rows to insert.
+
+    \remarks
+    Method generates the eInvalidInput exception when the height is zero.
+  */
+    virtual void insertRows(
+    OdUInt32 row, 
+    double height, 
+    OdUInt32 numRows = 1);
+  
+  /** \details
+    Deletes the specified number of rows from this table entity.
+
+    \param row [in]  Index of first row to delete.
+    \param numRows [in]  Number of rows to delete. 
+
+    \remarks
+    Method generates the eInvalidInput exception when the number of deleted rows is more 
+    than the number of rows.
+  */
+  virtual void deleteRows(
+    OdUInt32 row, 
+    OdUInt32 numRows = 1);
+ 
+  /** \details
+    Merges a rectangular region of cells in this table entity.
+      
+    \param minRow [in]  Minimum row index of the merged cells.
+    \param maxRow [in]  Maximum row index of the merged cells. 
+    \param minColumn [in]  Minimum column index of the merged cells.
+    \param maxColumn [in]  Maximum column index of the merged cells. 
+
+    \remarks
+    Method generates the eInvalidInput exception when the minimum row index is more than the maximum 
+    row index, the minimum column index is more than the maximum column index, the maximum row index 
+    is more than the number of rows, or the maximum column index is more than the number of columns.
+  */
+    virtual void mergeCells(
+    OdUInt32 minRow, 
+    OdUInt32 maxRow,
+    OdUInt32 minColumn, 
+    OdUInt32 maxColumn);
+
+  /** \details
+    Unmerges a rectangular region of cells in this table entity.
+      
+    \param minRow [in]  Minimum row index of the merged cells.
+    \param maxRow [in]  Maximum row index of the merged cells. 
+    \param minColumn [in]  Minimum column index of the merged cells.
+    \param maxColumn [in]  Maximum column index of the merged cells. 
+
+    \remarks
+    Method generates the eInvalidInput exception when the minimum row index is more than the maximum 
+    row index, the minimum column index is more than the maximum column index, the maximum row index 
+    is more than the number of rows, or the maximum column index is more than the number of columns.
+  */
+    virtual void unmergeCells(
+    OdUInt32 minRow, 
+    OdUInt32 maxRow,
+    OdUInt32 minColumn, 
+    OdUInt32 maxColumn);
+    
+  /** \details
+    Returns true if and only if the specified cell has been merged, and returns the range of the merged cells 
+    in this table entity.
+    
+    \param row [in]  Row index.
+    \param column [in]  Column index.
+    \param minRow [out]  Receives the minimum row index of the merged cells.
+    \param maxRow [out]  Receives the maximum row index of the merged cells. 
+    \param minColumn [out]  Receives the minimum column index of the merged cells.
+    \param maxColumn [out]  Receives the maximum column index of the merged cells. 
+        
+    \remarks
+    Method generates the eInvalidInput exception when the row argument is more than the number
+    of rows or the column argument is more than the number of columns.
+  */
+  virtual bool isMergedCell(
+    OdUInt32 row, 
+    OdUInt32 column, 
+    OdUInt32* minRow = 0, 
+    OdUInt32* maxRow = 0,
+    OdUInt32* minColumn = 0, 
+    OdUInt32* maxColumn = 0) const;
+
+  /** \details
+    Returns cell property "merged height". The first cell may have a value > 1. Next cells have a value equal 1.
+
+    \param row [in]  Row index.
+    \param column [in]  Column index.
+  */
+  OdUInt32 mergedHeight(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Returns cell property "merged width". The first cell may have a value > 1. Next cells have a value equal 1.
+
+    \param row [in]  Row index.
+    \param column [in]  Column index.
+  */
+  OdUInt32 mergedWidth(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+
+  /** \details
+    Returns cell property "merged flag". The first cell has a value equal false. Next cells have a value equal to true.
+
+    \param row [in]  Row index.
+    \param column [in]  Column index.
+  */
+  bool mergedFlag(
+    OdUInt32 row, 
+    OdUInt32 column) const;
+  
+  /** \details
+    Updates this table entity according to its current table style.
+    
+    \remarks
+    Returns eOk if successful or an appropriate error code if not.
+  */
+  virtual OdResult generateLayout();
+
+  /** \details
+    Updates the block table record referenced by this table entity.
+    
+    \param forceUpdate [in]  Force an update of the block table record.
+    
+    \remarks
+    Returns eOk if successful or an appropriate error code if not.
+    
+    If forceUpdate is false, the block table record is updated 
+    if and only if this table entity has been changed since the 
+    block table record was last updated.
+    
+    If forceUpdate is true, the block table will be unconditionally updated.
+  */
+  virtual OdResult recomputeTableBlock(
+    bool forceUpdate = true);
+ 
+  //********************************************************************
+  // Methods for sub-selection  
+  //********************************************************************
+  //
+  
+  /** \details
+    Performs a hit test for the specified point and viewing direction in this table entity. Returns 
+    the row index and the column index of the cell, hit by the ray in the output arguments. 
+    Returns true if a table set is hit or returns false in the other case.
+    
+    \param wpt [in]  Input 3D picking point in WCS.
+    \param wviewVec [in]  3D vector in WCF that specifies the view direction for the hit test.
+    \param wxaper [in]  Width of aperture box centered at the hit point.
+    \param wyaper [in]  Height of aperture box centered at the hit point.
+    \param resultRowIndex [out]  Row index.
+    \param resultColumnIndex [out]  Column index.
+  */
+  virtual bool  hitTest(const OdGePoint3d& wpt, 
+                                    const OdGeVector3d& wviewVec,
+                                    double wxaper,
+                                    double wyaper,
+                                    OdInt32& resultRowIndex, 
+                                    OdInt32& resultColumnIndex) const;
+  /** \details
+    Performs a hit test for the specified point and viewing direction in this table entity. Returns 
+    the row index and the column index of the cell, hit by the ray in the output arguments. 
+    Returns true if a table set is hit or returns false in the other case.
+    
+    \param wpt [in]  Input 3D picking point in WCS.
+    \param wviewVec [in]  3D vector in WCS that specifies the view direction for the hit test.
+    \param wxaper [in]  Width of aperture box centered at the hit point.
+    \param wyaper [in]  Height of aperture box centered at the hit point.
+    \param resultRowIndex [out]  Row index.
+    \param resultColumnIndex [out]  Column index.
+    \param contentIndex [out]  Context index.
+    \param nItem [out]  Hit flags, which indicate the table item at the specified point.
+  */
+  virtual bool  hitTest(const OdGePoint3d& wpt, 
+                                    const OdGeVector3d& wviewVec,
+                                    double wxaper,
+                                    double wyaper,
+                                    OdInt32& resultRowIndex, 
+                                    OdInt32& resultColumnIndex,
+                                    OdInt32& contentIndex,
+                                    OdDb::TableHitItem& nItem) const;
+  /** \details
+    Selects a cell in this table by the specified point, viewing direction, and orientation.
+    Returns the row index and the column index of the selected cell that encloses the input point.
+       
+    \param wpt [in]  Input 3D picking point in WCS.
+    \param wvwVec [in]  3D vector in WCS that specifies the view direction for the hit test.
+    \param wvwxVec [in]  3D vector in WCS that specifies the view orientation for the hit test.
+    \param wxaper [in]  Width of aperture box centered at the hit point.
+    \param wyaper [in]  Height of aperture box centered at the hit point.
+    \param allowOutside [in]  Indicates whether a pick point outside the table will select a cell.
+    \param bInPickFirst [in]  If true, the entity is already in the pickfirst set; if false, the pickfirst logic should attempt to sub-select the entity directly.
+    \param resultRowIndex [out]  Row index.
+    \param resultColumnIndex [out]  Column index.
+    \param pPaths [out]  Pointer to an OdDbFullSubentPathArray.
+    
+    \remarks
+    Returns eOk if successful or an appropriate error code if not.
+    
+    If pPaths is not null, the cell subentities will be returned in pPaths.
+  */
+  virtual OdResult select(const OdGePoint3d& wpt, 
+                                   const OdGeVector3d& wvwVec, 
+                                   const OdGeVector3d& wvwxVec, 
+                                   double wxaper,
+                                   double wyaper,
+                                   bool allowOutside,
+                                   bool bInPickFirst, 
+                                   OdInt32& resultRowIndex, 
+                                   OdInt32& resultColumnIndex,
+                                   OdDbFullSubentPathArray* pPaths = 0) const;
+  /** \details
+    Selects a set of cells in this table by the specified window box, viewing direction, and orientation.
+    Returns the set of cells in the output arguments rowMin, rowMax, colMin, colMax.
+    
+    
+    \param wpt1 [in]  3D picking point in WCS that specifies the first corner point of the window box selection.
+    \param wpt2 [in]  3D picking point in WCS that specifies the second corner point of the window box selection.
+    \param wvwVec [in]  3D vector in WCS that specifies the view direction for the selection.
+    \param wvwxVec [in]  3D vector in WCS that specifies the view orientation for the hit test.
+    \param wxaper [in]  Width of aperture box centered at the hit point.
+    \param wyaper [in]  Height of aperture box centered at the hit point.
+    \param seltype [in]  Selection type.
+    \param bIncludeCurrentSelection [in]  Indicates whether the selected cells will include currently selected cells and newly selected cells or only newly selected cells.
+    \param bInPickFirst [in]  If true, the entity is already in the pickfirst set; if false, the pickfirst logic should attempt to sub-select the entity directly.
+    \param rowMin [out]  Lower bound of row index.
+    \param rowMax [out]  Upper bound of row index.
+    \param colMin [out]  Lower bound of column index.
+    \param colMax [out]  Upper bound of column index.
+    \param pPaths [out]  Pointer to an OdDbFullSubentPathArray.
+    
+    \remarks
+    Returns eOk if successful or an appropriate error code if not.
+    
+    If pPaths is not null, the cell sub-entities will be returned in pPaths.
+  */
+  virtual OdResult selectSubRegion(const OdGePoint3d& wpt1, 
+                                   const OdGePoint3d& wpt2,
+                                   const OdGeVector3d& wvwVec, 
+                                   const OdGeVector3d& wvwxVec,
+                                   double wxaper,
+                                   double wyaper,                             
+                                   OdDb::SelectType seltype,
+                                   bool bIncludeCurrentSelection,
+                                   bool bInPickFirst,                             
+                                   OdInt32& rowMin,
+                                   OdInt32& rowMax,
+                                   OdInt32& colMin,
+                                   OdInt32& colMax,
+                                   OdDbFullSubentPathArray* pPaths = 0) const;
+  /** \details
+    Returns an array of sub-entities of the current sub-selection cells in the output argument paths.
+    
+    \param pPaths [out]  Pointer to an OdDbFullSubentPathArray.
+    
+    \remarks
+    Returns true if successful or returns false if not.
+    
+    If pPaths is empty, there are no sub-selection cells.
+  */
+  virtual bool reselectSubRegion(OdDbFullSubentPathArray& paths) const;
+          
+  /** \details
+    Returns the row and column indexes of the cells in the sub-selection set.
+    
+    \param rowMin [out]  Lower bound of row index.
+    \param rowMax [out]  Upper bound of row index.
+    \param colMin [out]  Lower bound of column index.
+    \param colMax [out]  Upper bound of column index.
+    
+    \remarks
+    Returns eOk if successful, eSubSelectionSetEmpty if there are no sub-selection cells, or an appropriate error code if not.
+  */        
+  virtual OdResult getSubSelection(OdInt32& rowMin,
+                                    OdInt32& rowMax,
+                                    OdInt32& colMin,
+                                    OdInt32& colMax) const;
+
+  /** \details
+    Returns the range of cells in the sub-selection set.
+    
+    \remarks
+    If there are no sub-selection cells, returns invalid range.
+  */ 
+  OdCellRange  getSubSelection (void) const;
+
+  /** \details
+    Sets the cell range to the sub-selection set.
+    
+    \param range [in]  Cell range.
+    
+    \remarks
+    Returns eOk if successful or appropriate error code in the other case.
+  */  
+  virtual OdResult setSubSelection  (const OdCellRange& range);
+
+  /** \details
+    Sets the row and column indexes of the cells in the sub-selection set.
+    
+    \param rowMin [in]  Lower bound of row index.
+    \param rowMax [in]  Upper bound of row index.
+    \param colMin [in]  Lower bound of column index.
+    \param colMax [in]  Upper bound of column index.
+    
+    \remarks
+    Returns eOk if successful or eInvalidInput if the input indexes are out of range.
+  */
+  virtual OdResult setSubSelection(OdInt32 rowMin,
+                                    OdInt32 rowMax,
+                                    OdInt32 colMin,
+                                    OdInt32 colMax);
+  /** \details
+    Clears the sub-selection set of cells from this table.
+  */
+  virtual void clearSubSelection();
+
+  /** \details
+    Returns true if the table has a sub-selection set of cells, or returns false in the other case.
+  */
+  virtual bool hasSubSelection() const;
+  
+  virtual OdResult select_next_cell(OdInt32 dir,
+                                    OdInt32& resultRowIndex, 
+                                    OdInt32& resultColumnIndex,
+                                    OdDbFullSubentPathArray* pPaths = NULL,
+                                    bool bSupportTextCellOnly = true) const;
+
+  //********************************************************************
+  // Overridden methods from OdDbObject
+  //********************************************************************
+  //
+
+  virtual OdResult dwgInFields (
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields (
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  // virtual OdResult audit(OdDbAuditInfo* pAuditInfo);
+
+  void subClose();
+  
+  /** \remarks
+    This function is an override for OdDbEntity::subSetDatabaseDefaults() to set 
+    the dimension style of this entity to the current style for the specified database.
+  */
+  void subSetDatabaseDefaults(
+    OdDbDatabase *pDb,
+    bool doSubents);
+
+  // virtual void              objectClosed(const OdDbObjectId objId);
+  // virtual void              erased(const OdDbObject* dbObj,
+  //                                  bool pErasing = true);
+  virtual void modified(
+    const OdDbObject* pObj);
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  //********************************************************************
+  // Overridden methods from OdDbEntity
+  //********************************************************************
+  //
+  /*
+  virtual void              list() const;
+  */
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  /*
+  virtual OdResult getGripPoints(OdGePoint3dArray&, 
+                                          OdDbIntArray&,
+                                          OdDbIntArray&) const;
+
+  virtual OdResult moveGripPointsAt(const OdDbIntArray&,
+                                             const OdGeVector3d&);
+
+  virtual OdResult getStretchPoints(OdGePoint3dArray& stretchPoints)
+                                             const;
+
+  virtual OdResult moveStretchPointsAt(const OdDbIntArray& 
+                                               indices,
+                                               const OdGeVector3d& offset);
+
+  virtual OdResult getOsnapPoints(OdDb::OsnapMode osnapMode,
+                                           OdGsMarker   gsSelectionMark,
+                                           const OdGePoint3d&  pickPoint,
+                                           const OdGePoint3d&  lastPoint,
+                                           const OdGeMatrix3d& viewXform,
+                                           OdGePoint3dArray&      snapPoints,
+                                           OdDbIntArray&   geomIds)
+                                           const;
+  */
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm,
+    OdDbEntityPtr& pCopy) const;
+
+  virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const;
+
+  /*
+  virtual OdResult explode(OdDbVoidPtrArray& entitySet) const;
+  */
+
+  //********************************************************************
+  // Overridden methods from OdDbBlockReference required for OdDbTable
+  //********************************************************************
+  //
+  //OdGePoint3d            position() const;
+  // virtual OdResult setPosition(const OdGePoint3d&);
+
+  //OdGeVector3d           normal() const;
+  // virtual OdResult setNormal(const OdGeVector3d& newVal);
+
+  //********************************************************************
+  // Methods for internal use only
+  //********************************************************************
+  //
+  // TODO: Temporary method for navigating after editing cells
+  /*
+  virtual OdResult select_next_cell(int dir,
+                                   int& resultRowIndex, 
+                                   int& resultColumnIndex,
+                                   OdDbFullSubentPathArray* pPaths = 0,
+                                   bool bSupportTextCellOnly = true) const;
+
+  virtual void              setRegen();
+  virtual void              suppressInvisibleGrid(bool value);
+  virtual OdResult getCellExtents(int row, 
+                                       int column,
+                                       double& cellWidth,
+                                       double& cellHeight,
+                                       bool bAdjustForMargins) const;
+  */
+  
+  // NEW 2007
+  /** \details
+    Returns the data type and unit type of the specified row type. 
+    
+    \param nDataType [out]  Data type.
+    \param nUnitType [out]  Unit type.
+    \param type [in]  Row type.
+
+    \remarks  
+    type must be one of the following:
+    
+    <table>
+    Name                    Value   Description
+    OdDb::kTitleRow         1       The top-most or bottom-most row of the table, depending on the flow direction of the table rows (down or up).
+    OdDb::kHeaderRow        2       The first row, which is placed after or before the title row.
+    OdDb::kDataRow          4       The row, which is neither title row nor header row.  
+    </table>
+  */
+  virtual void getDataType(OdValue::DataType& nDataType,
+    OdValue::UnitType& nUnitType,
+    OdDb::RowType type) const;
+  
+  /** \details
+    Sets the data type and unit type for all row types. 
+    
+    \param nDataType [in]  Data type.
+    \param nUnitType [in]  Unit type.
+  */
+  virtual void setDataType(OdValue::DataType nDataType,
+    OdValue::UnitType nUnitType);
+
+  /** \details
+    Sets the data type and unit type for the specified row types. 
+    
+    \param nDataType [in]  Data type.
+    \param nUnitType [in]  Unit type.
+    \param nRowTypes [in]  Row types.
+  */
+  virtual void setDataType(OdValue::DataType nDataType, 
+    OdValue::UnitType nUnitType, 
+    int nRowTypes);
+
+  virtual OdString format(OdDb::RowType type) const;
+
+  virtual void setFormat(const OdString& pszFormat);
+
+  virtual void setFormat(const OdString& pszFormat, 
+    int nRowTypes);
+
+  /** \details
+    Returns the data type and unit type of the specified cell. 
+    
+    \param row [in]  Row index. Should be more than or equal to 0 and less than the number of rows.
+    \param col [in]  Column index. Should be more than or equal to 0 and less than the number of columns.
+    \param nDataType [out]  Data type.
+    \param nUnitType [out]  Unit type.
+  */
+  void getDataType(OdUInt32 row, OdUInt32 col,
+    OdValue::DataType& nDataType,
+    OdValue::UnitType& nUnitType) const;
+
+  /** \details
+    Sets the data type and unit type of the specified cell. 
+    
+    \param row [in]  Row index. Should be more than or equal to 0 and less than the number of rows.
+    \param col [in]  Column index. Should be more than or equal to 0 and less than the number of columns.
+    \param nDataType [in]  Data type.
+    \param nUnitType [in]  Unit type.
+  */
+  void setDataType(OdUInt32 row, OdUInt32 col, 
+    OdValue::DataType nDataType,
+    OdValue::UnitType nUnitType);
+  
+  /** \details
+    Returns the content value at the specified content index. 
+    
+    \param row [in]  Row index. Should be more than or equal to 0 and less than the number of rows.
+    \param col [in]  Column index. Should be more than or equal to 0 and less than the number of columns.
+  */
+  OdValue value(OdUInt32 row, OdUInt32 col) const;
+
+  /** \details
+    Sets the value of the first content of a cell. 
+    
+    \param row [in]  Row index. Should be more than or equal to 0 and less than the number of rows.
+    \param col [in]  Column index. Should be more than or equal to 0 and less than the number of columns.
+    \param val [in]  Content value.
+    
+    \returns
+    Returns eOk if successful or an appropriate error code.
+  */
+  void setValue(OdUInt32 row, OdUInt32 col, 
+    const OdValue& val);
+
+  /** \details
+    Sets the value of the first content of a cell. 
+    
+    \param row [in]  Row index. Should be more than or equal to 0 and less than the number of rows.
+    \param col [in]  Column index. Should be more than or equal to 0 and less than the number of columns.
+    \param pszText [in]  Text for converting to set value.
+    \param nOption [out]  Parse option.
+    
+    \returns
+    Returns eOk if successful or an appropriate error code.
+  */
+  void setValue(OdUInt32 row, OdUInt32 col, 
+    OdString& pszText,
+    OdValue::ParseOption nOption);
+  
+  /** \details
+    Resets the value in a specified cell. 
+    
+    \param row [in]  Row index.
+    \param col [in]  Column index.
+    
+    \returns
+    Returns eOk if successful, or returns eInvalidInput if row and col arguments refer to an invalid cell.
+  */
+  void resetValue(OdUInt32 row, OdUInt32 col);
+
+  OdString format(OdUInt32 row, OdUInt32 col) const;
+
+  void setFormat(OdUInt32 row, OdUInt32 col, 
+    const OdString& pszFormat);
+
+  /** \details
+    Returns true if the table break is enabled, or false otherwise.
+  */
+  bool isBreakEnabled(void) const;
+  
+  /** \details
+    Enables or disables table breaking.
+
+    \param bEnable [in] Value for enabling or disabling the table breaking.
+  */
+  void enableBreak (bool bEnable);
+  
+  /** \details
+    Returns table break flow direction of this table entity as an OdDb::TableBreakFlowDirection object.
+  */
+  OdDb::TableBreakFlowDirection breakFlowDirection(void) const;
+
+  /** \details
+    Sets table break flow direction of this table entity.
+
+    \param flowDir [in] Table break flow direction.
+  */
+  void setBreakFlowDirection (OdDb::TableBreakFlowDirection flowDir);
+
+   
+  /** \details
+    Returns the table break height of the specified table entity as an OdUInt32 value.
+
+    \param index [in] Sub-table index.
+    
+    \remarks
+    index parameter should be more than or equal to 0. 
+
+  */
+  double breakHeight (OdUInt32 index) const;
+  
+  /** \details
+    Sets the table break height of the specified table entity.
+
+    \param index [in] Sub-table index.
+    \param height [in] Sub-table break height.
+    
+    \remarks
+    index parameter should be more than or equal to 0. 
+
+  */
+  void setBreakHeight (OdUInt32 index, 
+    double height);
+
+  /** \details
+    Returns table break offset of the specified table entity as an OdUInt32 value.
+
+    \param index [in] Sub-table index.
+    
+    \remarks
+    index parameter should be more than or equal to 1. 
+  */
+  OdGeVector3d breakOffset (OdUInt32 index) const;
+
+  /** \details
+    Sets the table break offset of the specified table entity.
+
+    \param index [in] Sun-table index.
+    \param vec [in] Vector for table break offset.
+    
+    \remarks
+    index parameter should be more than or equal to 1. 
+  */
+  void setBreakOffset (OdUInt32 index, 
+    const OdGeVector3d& vec);
+
+  /** \details
+    Returns the table break option of this table entity as an OdDb::TableBreakOption object.
+    
+    \remarks
+    breakOption() returns one of the following:
+    
+    <table>
+    Name                                    Value       Description
+    OdDb::kTableBreakNone                   0           No table break.
+    OdDb::kTableBreakEnableBreaking         0x01        Enable table breaking. 
+    OdDb::kTableBreakRepeatTopLabels        0x02        Repeat top labels in all tables.  
+    OdDb::kTableBreakRepeatBottomLabels     0x04        Repeat bottom labels in all tables.
+    OdDb::kTableBreakAllowManualPositions   0x08        Allow manual position for each sub-table. 
+    OdDb::kTableBreakAllowManualHeights     0x10        Allow manual height for each sub-table.  
+    </table>
+  */
+  OdDb::TableBreakOption breakOption (void) const;
+ 
+  /** \details
+    Sets the table break option of this table entity.
+
+    \param option [in] Table break option.
+    
+    \remarks
+    option should be a combination of one or more of the following:
+    
+    <table>
+    Name                                    Value       Description
+    OdDb::kTableBreakNone                   0           No table break.
+    OdDb::kTableBreakEnableBreaking         0x01        Enable table breaking. 
+    OdDb::kTableBreakRepeatTopLabels        0x02        Repeat top labels in all tables.  
+    OdDb::kTableBreakRepeatBottomLabels     0x04        Repeat bottom labels in all tables.
+    OdDb::kTableBreakAllowManualPositions   0x08        Allow manual position for each sub-table. 
+    OdDb::kTableBreakAllowManualHeights     0x10        Allow manual height for each sub-table.  
+    </table>
+  */
+  void  setBreakOption (OdDb::TableBreakOption option);
+
+  /** \details
+    Returns the break spacing for this table entity.
+  */
+  double breakSpacing (void) const;
+
+  /** \details
+    Sets the break spacing for this table entity.
+
+    \param spacing [in]  Spacing value. 
+
+    \remarks
+    Method generates the eInvalidInput exception when the spacing is negative.
+  */
+  void setBreakSpacing (double spacing);
+
+  //********************************************************************
+  // New Methods
+  //********************************************************************
+
+  /** \details
+    Sets the size for this table entity.
+
+    \param rows [in]  Number of rows. 
+    \param cols [in]  Number of columns. 
+
+    \remarks
+    Method generates the eInvalidInput exception when the number of rows or columns is zero.
+  */
+  void setSize ( 
+    OdInt32 rows, 
+    OdInt32 cols);
+
+  /** \details
+    Checks if new rows or columns can be inserted into the specified index. Returns true if rows or columns can be inserted.
+
+    \param nIndex [in]  Index. 
+    \param bRow [in]  Flag that indicates what to check: "true" for rows or "false" for columns. 
+
+    \remarks
+    Method is not implemented yet and always returns true.
+  */
+  bool canInsert (
+    OdInt32 nIndex, 
+    bool bRow) const;
+
+  /** \details
+    Inserts rows at the specified index.
+
+    \param nIndex [in]  Index. 
+    \param nInheritFrom [in]  Row number in the table that the format will be inherited from. 
+    \param nNumRows [in]  Number of inserted rows. 
+  */
+  void insertRowsAndInherit  (
+    OdInt32 nIndex, 
+    OdInt32 nInheritFrom, 
+    OdInt32 nNumRows);
+
+  /** \details
+    Inserts columns at the specified index.
+
+    \param col [in]  Index. 
+    \param nInheritFrom [in]  Column number in the table that the format will be inherited from. 
+    \param nNumCols [in]  Number of inserted columns. 
+
+    \remarks
+    Method generates the eInvalidInput exception when the number of rows or columns is zero.
+  */
+  void insertColumnsAndInherit(
+    OdInt32 col, 
+    OdInt32 nInheritFrom, 
+    OdInt32 nNumCols);
+
+  /** \details
+    Checks if rows or columns can be deleted from the specified index. Returns true if rows or columns can be deleted.
+ 
+    \param nCount [in]  Number of rows or columns. 
+    \param bRow [in]  Flag that indicates what to check: "true"" for rows or "false" for columns. 
+
+    \remarks
+    Method is not implemented yet and always returns true.
+  */
+  bool canDelete (OdInt32 nIndex, 
+    OdInt32 nCount, 
+    bool bRow) const;
+
+  /** \details
+    Returns "empty flag" cell property. Returns true if cell is empty, or false if it is not.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  bool isEmpty (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Returns merge range of the cell as an object of the OdCellRange class.
+    Returns invalid merge range if the cell is not part of the merge range.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+  */
+  OdCellRange getMergeRange (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Returns "editing content flag" cell property. Returns true if cell content can be edited or false if it can not.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+  */
+  bool isContentEditable (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Returns "editing format flag" cell property. Returns true if cell format can be edited or false if it can not.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+  */
+  bool isFormatEditable (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Returns cell state.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+
+    \remarks
+    Cell state is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                                  Value
+    kCellStateNone                        0x00
+    kCellStateContentLocked               0x01
+    kCellStateContentReadOnly             0x02
+    kCellStateLinked                      0x04
+    kCellStateContentModifiedAfterUpdate  0x08
+    kCellStateFormatLocked                0x10
+    kCellStateFormatReadOnly              0x20
+    kCellStateFormatModifiedAfterUpdate   0x40
+    kAllCellStates                        (kCellStateContentLocked | kCellStateContentReadOnly | kCellStateLinked | kCellStateContentModifiedAfterUpdate | kCellStateFormatLocked | kCellStateFormatReadOnly | kCellStateFormatModifiedAfterUpdate)
+    </table>
+  */
+  OdDb::CellState cellState (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Sets the cell state.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nLock [in]  Cell state.
+
+    \remarks
+    Cell state should take one of the following values:
+    
+    <table>
+    Name                                  Value
+    kCellStateNone                        0x00
+    kCellStateContentLocked               0x01
+    kCellStateContentReadOnly             0x02
+    kCellStateLinked                      0x04
+    kCellStateContentModifiedAfterUpdate  0x08
+    kCellStateFormatLocked                0x10
+    kCellStateFormatReadOnly              0x20
+    kCellStateFormatModifiedAfterUpdate   0x40
+    kAllCellStates                        (kCellStateContentLocked | kCellStateContentReadOnly | kCellStateLinked | kCellStateContentModifiedAfterUpdate | kCellStateFormatLocked | kCellStateFormatReadOnly | kCellStateFormatModifiedAfterUpdate)
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  void  setCellState (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::CellState nLock);
+
+  /** \details
+    Returns the number of contents in the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  OdInt32 numContents (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Creates additional content for the cell. Returns index of the created content.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nIndex [in]  Index at which the content will be created. 
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  OdInt32 createContent (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nIndex);
+
+  /** \details
+    Moves content in the cell from one position to another.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nFromIndex [in]  Index of content to move.
+    \param nToIndex [in]  Target index of the content where it should be moved to.
+
+    \remarks
+    Method generates the eNotImplementedYet exception.
+  */
+  void  moveContent (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nFromIndex, 
+    OdInt32 nToIndex);
+
+  /** \details
+    Deletes content from the cells.
+      
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  deleteContent (
+    OdInt32 row, 
+    OdInt32 col);
+
+  /** \details
+    Deletes content from the cells.
+      
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+    \param nIndex [in]  Index of content.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+    */
+  void  deleteContent (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nIndex);
+
+  /** \details
+    Deletes content from the cells.
+
+    \param range [in]  Range of the cells.
+
+    \remarks
+    Method generates the eNotImplementedYet exception.
+  */
+  void  deleteContent (
+    const OdCellRange& range);
+
+  /** \details
+    Returns content type of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+
+    \remarks
+    Content type is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                     Value
+    kCellContentTypeUnknown  0x0
+    kCellContentTypeValue    0x1
+    kCellContentTypeField    0x2
+    kCellContentTypeBlock    0x4
+    </table>
+  */
+  OdDb::CellContentType contentType (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Returns content type of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+	\param nIndex [in]  Index of content.
+
+    \remarks
+    Content type is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                     Value
+    kCellContentTypeUnknown  0x0
+    kCellContentTypeValue    0x1
+    kCellContentTypeField    0x2
+    kCellContentTypeBlock    0x4
+    </table>
+  */
+  OdDb::CellContentType contentType (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nIndex) const;
+
+  /** \details
+    Returns the value of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+  */
+  OdValue value (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Returns the value of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param nOption [in]  Format option of value.
+
+    \remarks
+    Format option is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                  Value
+    kFormatOptionNone     0x00
+    kForEditing           0x01
+    kForExpression        0x02
+    kUseMaximumPrecision  0x04
+    kIgnoreMtextFormat    0x08
+    </table>
+  */
+  OdValue value (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    OdValue::FormatOption nOption) const;
+
+  /** \details
+    Sets a value to the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param val [in]  Value.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setValue (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdValue& val);
+
+  /** \details
+    Sets a value to the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param val [in]  Value.
+    \param nOption [in]  Parse option of value.
+
+    \remarks
+    Parse option is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                    Value
+    kParseOptionNone        0x00
+    kSetDefaultFormat       0x01
+    kPreserveMtextFormat    0x02
+    kConvertTextToValue     0x04
+    kChangeDataType         0x08
+    kParseTextForFieldCode  0x10
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setValue (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdValue& val, 
+    OdValue::ParseOption nOption);
+
+  /** \details
+    Sets a value to the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param sText [in]  Text of the value.
+    \param nOption [in]  Parse option of value.
+
+    \remarks
+    Parse option is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                    Value
+    kParseOptionNone        0x00
+    kSetDefaultFormat       0x01
+    kPreserveMtextFormat    0x02
+    kConvertTextToValue     0x04
+    kChangeDataType         0x08
+    kParseTextForFieldCode  0x10
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  void  setValue (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    OdString sText, 
+    OdValue::ParseOption nOption);
+
+  /** \details
+    Returns data format of the cell as an OdString value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+  */
+  OdString dataFormat (
+    OdInt32 row,
+    OdInt32 col) const;
+
+  /** \details
+    Returns data format of the cell as an OdString value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+  */
+  OdString dataFormat (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets the data format of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param sFormat [in]  Data format.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setDataFormat (
+    OdInt32 row, 
+    OdInt32 col, 
+    const OdString& sFormat);
+
+  /** \details
+    Sets data format of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param sFormat [in]  Data format.
+    \param nContent [in]  Number of content.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setDataFormat (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdString& sFormat);
+
+  /** \details
+    Returns text string of the cell as an OdString value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+  */
+  OdString textString (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Returns the text string of the cell as an OdString value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param nOption [in]  Format option of value.
+
+    \remarks
+    Format option is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                  Value
+    kFormatOptionNone     0x00
+    kForEditing           0x01
+    kForExpression        0x02
+    kUseMaximumPrecision  0x04
+    kIgnoreMtextFormat    0x08
+    </table>
+  */
+  OdString textString (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    OdValue::FormatOption nOption) const;
+
+  /** \details
+    Returns the text string of the cell as an OdString value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nOption [in]  Format option of value.
+
+    \remarks
+    Format option is an enumerator and takes one of the following values:
+    
+    <table>
+    Name                  Value
+    kFormatOptionNone     0x00
+    kForEditing           0x01
+    kForExpression        0x02
+    kUseMaximumPrecision  0x04
+    kIgnoreMtextFormat    0x08
+    </table>
+  */
+  OdString textString (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdValue::FormatOption nOption ) const;
+
+  /** \details
+    Sets a text string to the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param text [in]  Text string.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setTextString (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdString& text);
+
+  /** \details
+    Checks if the cell has a formula.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+  */
+  bool  hasFormula (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Returns the formula of the cell as an object of the OdString class.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+  */
+  OdString getFormula (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets the formula of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param pszFormula [in]  Formula.
+
+    \remarks
+    Method generates the eNotImplementedYet exception.
+  */
+  void  setFormula (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdString& pszFormula);
+
+  /** \details
+    Returns the field id of the cell as an object of the OdDbObjectId class.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+  */
+  OdDbObjectId  fieldId (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets a field id to the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param fieldId [in]  Field id.
+    \param nFlag [in]  Cell option.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setFieldId (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdDbObjectId& fieldId, 
+    OdDb::CellOption nFlag);
+
+  /** \details
+    Returns the id of the block table record of the cell as an object of the OdDbObjectId class.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+  */
+  OdDbObjectId  blockTableRecordId (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets the id of the block table record of the cell as an object of the OdDbObjectId class.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param blkId [in]  Id of block table record.
+    \param autoFit [in]  Flag that indicates whether the block should be auto fit.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setBlockTableRecordId (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdDbObjectId& blkId, 
+    bool autoFit);
+
+  /** \details
+    Returns the attribute value of the block cell using the specified object id key as an OdString value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param attdefId [in]  Object id.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  OdString  getBlockAttributeValue (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdDbObjectId& attdefId) const;
+
+  /** \details
+    Sets the attribute value of the block cell using the specified object id key as an OdString value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Number of content.
+    \param attdefId [in]  Object id.
+    \param atrValue [in]  Attribute value.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when content is not editable ( !isContentEditable() ).
+  */
+  void  setBlockAttributeValue (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdDbObjectId& attdefId, 
+    const OdString& atrValue);
+
+  /** \details
+    Returns the custom data value of the cell, column, or row as an OdInt32 value.
+    Use a valid row index and pass column index -1 to get row data.
+    Use a valid column index and pass row index -1 to get column data.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+  */
+  OdInt32  getCustomData (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Sets the custom data value of the cell, column, or row.
+    Use a valid row index and pass column index -1 to set row data.
+    Use a valid column index and pass row index -1 to set column data.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nData [in]  Custom data value. 
+  */
+  void  setCustomData (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nData);
+
+  /** \details
+    Returns the custom data value of the cell, column, or row as an OdInt32 value.
+    Use a valid row index and pass column index -1 to get row data.
+    Use a valid column index and pass row index -1 to get column data.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param sKey [in]  Key to use for the custom data. 
+  */
+  OdValue getCustomData (
+    OdInt32 row, 
+    OdInt32 col, 
+    const OdString sKey) const;
+
+  /** \details
+    Sets the custom data value of the cell, column, or row.
+    Use a valid row index and pass column index -1 to get row data
+    Use a valid column index and pass row index -1 to get column data
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param sKey [in]  Key to use for the custom data. 
+    \param pData [in]  Custom data value.  
+  */
+  void  setCustomData (
+    OdInt32 row, 
+    OdInt32 col, 
+    const OdString& sKey, 
+    const OdValue* pData);
+
+  /** \details
+    Returns the cell style as an OdString value.
+    Use a valid row index and pass column index -1 to get style for row.
+    Use a valid column index and pass row index -1 to get style for column.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+
+    \remarks
+    Cell style should be one of the following values:
+    
+    <table>
+    Name
+    _TITLE  
+    _HEADER
+    _DATA
+    </table>
+
+  */
+  OdString  cellStyle (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Sets the cell style.
+    Use a valid row index and pass column index -1 to set style for row.
+    Use a valid column index and pass row index -1 to set style for column.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell.   
+    \param sCellStyle [in]  Cell style.   
+
+    \remarks
+    Cell style should be one of the following values:
+    
+    <table>
+    Name
+    _TITLE  
+    _HEADER
+    _DATA
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  void  setCellStyle (
+    OdInt32 row, 
+    OdInt32 col, 
+    const OdString& sCellStyle);
+
+  /** \details
+    Returns the margin of the cell, row, or column as a double value.
+    Use a valid row index and pass column index -1 to get margin for row.
+    Use a valid column index and pass row index -1 to get margin for column.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nMargin [in]  Margin type. 
+
+    \remarks
+    Margin type should be one of following values:
+    
+    <table>
+    Name                    Value
+    kCellMarginTop          0x01
+    kCellMarginLeft         0x02
+    kCellMarginBottom       0x04
+    kCellMarginRight        0x08
+    kCellMarginHorzSpacing  0x10
+    kCellMarginVertSpacing  0x20
+    </table>
+  */
+  double margin (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::CellMargin nMargin) const;
+
+  /** \details
+    Sets the margin to the cell, row, or column.
+    Use a valid row index and pass column index -1 to set margin for row.
+    Use a valid column index and pass row index -1 to set margin for column.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nMargins [in]  Margin type. 
+    \param fMargin [in]  Margin. 
+
+    \remarks
+    Margin type should be a combination of one or more following values:
+    
+    <table>
+    Name                    Value
+    kCellMarginTop          0x01
+    kCellMarginLeft         0x02
+    kCellMarginBottom       0x04
+    kCellMarginRight        0x08
+    kCellMarginHorzSpacing  0x10
+    kCellMarginVertSpacing  0x20
+    </table>
+  */
+  void  setMargin (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::CellMargin nMargins, 
+    double fMargin);
+
+  /** \details
+    Returns the attachment point of the cell as an object of the OdGePoint3d class.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param content [in]  Content index. 
+
+    \remarks
+    Method generates the eNotImplementedYet exception.
+  */
+  OdGePoint3d  attachmentPoint (
+     OdInt32 row, 
+     OdInt32 col, 
+     OdInt32 content) const;
+
+  /** \details
+    Returns the color of the cell content as an object of the OdCmColor class.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index. 
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  OdCmColor  contentColor (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets the color of the cell content.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index. 
+    \param color [in]  Color content. 
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when format is not editable ( !isFormatEditable() ).
+  */
+  void  setContentColor (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdCmColor& color);
+
+  /** \details
+    Gets the data type of the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index. 
+    \param nDataType [out]  Reference to data type. 
+    \param nUnitType [out]  Reference to unit type. 
+
+    \remarks
+    Data type should take one of following values:
+    
+    <table>
+    Name       Value
+    kUnknown   0x00
+    kLong      0x01
+    kDouble    0x02
+    kString    0x04
+    kDate      0x08
+    kPoint     0x10
+    k3dPoint   0x20
+    kObjectId  0x40
+    kBuffer    0x80
+    kResbuf    0x100
+    kGeneral   0x200
+    kColor     0x400
+    </table>
+
+    Unit type should take one of following values:
+    
+    <table>
+    Name         Value
+    kUnitless    0x00
+    kDistance    0x01
+    kAngle       0x02
+    kArea        0x04
+    kVolume      0x08
+    kCurrency    0x10
+    kPercentage  0x20
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  void  getDataType (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    OdValue::DataType& nDataType, 
+    OdValue::UnitType& nUnitType) const;
+
+  /** \details
+    Sets the data type to the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nDataType [in]  Data type. 
+    \param nUnitType [in]  Unit type. 
+
+    \remarks
+    Data type should take one of following values:
+    
+    <table>
+    Name       Value
+    kUnknown   0x00
+    kLong      0x01
+    kDouble    0x02
+    kString    0x04
+    kDate      0x08
+    kPoint     0x10
+    k3dPoint   0x20
+    kObjectId  0x40
+    kBuffer    0x80
+    kResbuf    0x100
+    kGeneral   0x200
+    kColor     0x400
+    </table>
+
+    Unit type should take one of following values:
+    
+    <table>
+    Name         Value
+    kUnitless    0x00,
+    kDistance    0x01,
+    kAngle       0x02,
+    kArea        0x04,
+    kVolume      0x08,
+    kCurrency    0x10,
+    kPercentage  0x20
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when format is not editable ( !isFormatEditable() ).
+  */
+  void  setDataType (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    OdValue::DataType nDataType, 
+    OdValue::UnitType nUnitType);
+
+  /** \details
+    Returns the text style of the cell as an object of the OdDbObjectId class.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.  
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  OdDbObjectId  textStyle (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets the text style to the cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.  
+    \param id [in]  Text style id.  
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when format is not editable ( !isFormatEditable() ).
+  */
+  void  setTextStyle (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    const OdDbObjectId& id);
+
+  /** \details
+    Returns the text height of the cell as a double value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.  
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  double textHeight (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Returns the text height of the cell as a double value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.
+    \param height [in]  Text height.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when format is not editable ( !isFormatEditable() ).
+  */
+  void  setTextHeight (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    double height);
+
+  /** \details
+    Returns table rotation in radians as a double value.
+  */
+  double rotation() const;
+
+  /** \details
+    Returns the content rotation angle in radians as a double value.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  double rotation (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets table rotation in radians as a double value.
+
+    \param fAngle [in]  Rotation angle.
+  */
+  void  setRotation(double fAngle);
+
+  /** \details
+    Sets the content rotation angle in radians.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.
+    \param fAngle [in]  Rotation angle. 
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when format is not editable ( !isFormatEditable() ).
+    */
+  void  setRotation (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    double fAngle);
+
+  /** \details
+    Checks whether data in the cell is auto-scaled or not. Returns the auto-scaled flag as a boolean value.
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.
+  */
+  bool  isAutoScale (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets the auto-scaled flag to the cell.
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.
+    \param autoFit [in]  Auto-scaled flag.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when format is not editable ( !isFormatEditable() ).
+  */
+  void  setAutoScale (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    bool autoFit);
+
+  /** \details
+    Returns the scale value of the cell as a double value.
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  double scale (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent) const;
+
+  /** \details
+    Sets scale value to the cell.
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nContent [in]  Content index.
+    \param scale [in]  Scale value.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  void  setScale (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdInt32 nContent, 
+    double scale);
+
+  /** \details
+    Returns content layout of the cell.
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+
+    \remarks
+    Returning value should be one of following values:
+    
+    <table>
+    Name                                 Value
+    kCellContentLayoutFlow               0x1
+    kCellContentLayoutStackedHorizontal  0x2
+    kCellContentLayoutStackedVertical    0x4
+    </table>
+
+  */
+  OdDb::CellContentLayout contentLayout (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Sets content layout to the cell.
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nLayout [in]  Content layout.
+
+    \remarks
+    Content layout should take one of following values:
+    
+    <table>
+    Name                                 Value
+    kCellContentLayoutFlow               0x1
+    kCellContentLayoutStackedHorizontal  0x2
+    kCellContentLayoutStackedVertical    0x4
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+    Method generates the eIsWriteProtected when format is not editable ( !isFormatEditable() ).
+  */
+  void  setContentLayout (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::CellContentLayout nLayout);
+
+   /** \details
+    Checks whether the merge-all flag is enabled for the cell, row, or column. 
+    Returns true if the merge-all flag is enabled or false if it is not.
+ 
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+
+    \remarks
+    Method generates the eNotImplementedYet exception.
+  */
+   bool  isMergeAllEnabled (
+     OdInt32 row, 
+     OdInt32 col) const;
+
+  /** \details
+    Sets the merge-all flag to enabled for the cell, row, or column. 
+ 
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param bEnable [in]  merge-all flag. 
+
+    \remarks
+    Method generates the eNotImplementedYet exception.
+  */
+   void  enableMergeAll (
+     OdInt32 row, 
+     OdInt32 col, 
+     bool bEnable);
+
+  /** \details
+    Returns the override of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row property overrides.
+    Use a valid column index and pass row index -1 to get column property overrides.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nContent [in]  Content index. 
+
+    \remarks
+    Cell property should take one of the next values:
+    
+    <table>
+    Name                        Value
+    kCellPropInvalid            0x00000
+    kCellPropDataType           0x00001
+    kCellPropDataFormat         0x00002
+    kCellPropRotation           0x00004
+    kCellPropScale              0x00008
+    kCellPropAlignment          0x00010
+    kCellPropContentColor       0x00020
+    kCellPropTextStyle          0x00040
+    kCellPropTextHeight         0x00080
+    kCellPropAutoScale          0x00100
+    kCellPropBackgroundColor    0x00200
+    kCellPropMarginLeft         0x00400
+    kCellPropMarginTop          0x00800
+    kCellPropMarginRight        0x01000
+    kCellPropMarginBottom       0x02000
+    kCellPropContentLayout      0x04000
+    kCellPropMergeAll           0x08000
+    kCellPropFlowDirBtoT        0x10000
+    kCellPropMarginHorzSpacing  0x20000
+    kCellPropMarginVertSpacing  0x40000
+    kCellPropDataTypeAndFormat  (kCellPropDataType | kCellPropDataFormat)
+    kCellPropContent            (kCellPropDataType | kCellPropDataFormat | kCellPropRotation | kCellPropScale | kCellPropContentColor | kCellPropTextStyle | kCellPropTextHeight | kCellPropAutoScale)
+    kCellPropBitProperties      (kCellPropAutoScale | kCellPropMergeAll | kCellPropFlowDirBtoT)
+    kCellPropAll                (kCellPropDataType | kCellPropDataFormat | kCellPropRotation | kCellPropScale | kCellPropAlignment | kCellPropContentColor | kCellPropBackgroundColor | kCellPropTextStyle | kCellPropTextHeight | kCellPropMarginLeft | kCellPropMarginTop | kCellPropMarginRight | kCellPropMarginBottom | kCellPropMarginHorzSpacing | kCellPropMarginVertSpacing | kCellPropAutoScale | kCellPropMergeAll | kCellPropFlowDirBtoT | kCellPropContentLayout)
+    </table>
+  */
+   OdDb::CellProperty getOverride (
+     OdInt32 row, 
+     OdInt32 col, 
+     OdInt32 nContent) const;
+
+  /** \details
+    Returns the override in the grid line of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row property overrides.
+    Use a valid column index and pass row index -1 to get column property overrides.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype. 
+
+    \remarks
+    Grid property should take one of the following values:
+
+    <table>
+    Name                        Value
+    kGridPropInvalid            0x00
+    kGridPropLineStyle          0x01
+    kGridPropLineWeight         0x02
+    kGridPropLinetype           0x04
+    kGridPropColor              0x08
+    kGridPropVisibility         0x10
+    kGridPropDoubleLineSpacing  0x20
+    kGridPropAll                (kGridPropLineStyle | kGridPropLineWeight | kGridPropLinetype | kGridPropColor | kGridPropVisibility | kGridPropDoubleLineSpacing)
+    </table>
+
+    Grid linetype should take one of the following values:
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+   OdDb::GridProperty getOverride (
+     OdInt32 row, 
+     OdInt32 col, 
+     OdDb::GridLineType nGridLineType) const;
+
+  
+  /** \details
+    Sets the override in the cell, row, column, content, or grid line in the cell, row, or column. 
+    Use a valid row index and pass column index -1 to set row property overrides.
+    Use a valid column index and pass row index -1 to set column property overrides.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nContent [in]  Content index. 
+    \param nOverride [in]  Override. 
+
+    \remarks
+    Cell property should take one of the following values:
+    
+    <table>
+    Name                        Value
+    kCellPropInvalid            0x00000
+    kCellPropDataType           0x00001
+    kCellPropDataFormat         0x00002
+    kCellPropRotation           0x00004
+    kCellPropScale              0x00008
+    kCellPropAlignment          0x00010
+    kCellPropContentColor       0x00020
+    kCellPropTextStyle          0x00040
+    kCellPropTextHeight         0x00080
+    kCellPropAutoScale          0x00100
+    kCellPropBackgroundColor    0x00200
+    kCellPropMarginLeft         0x00400
+    kCellPropMarginTop          0x00800
+    kCellPropMarginRight        0x01000
+    kCellPropMarginBottom       0x02000
+    kCellPropContentLayout      0x04000
+    kCellPropMergeAll           0x08000
+    kCellPropFlowDirBtoT        0x10000
+    kCellPropMarginHorzSpacing  0x20000
+    kCellPropMarginVertSpacing  0x40000
+    kCellPropDataTypeAndFormat  (kCellPropDataType | kCellPropDataFormat)
+    kCellPropContent            (kCellPropDataType | kCellPropDataFormat | kCellPropRotation | kCellPropScale | kCellPropContentColor | kCellPropTextStyle | kCellPropTextHeight | kCellPropAutoScale)
+    kCellPropBitProperties      (kCellPropAutoScale | kCellPropMergeAll | kCellPropFlowDirBtoT)
+    kCellPropAll                (kCellPropDataType | kCellPropDataFormat | kCellPropRotation | kCellPropScale | kCellPropAlignment | kCellPropContentColor | kCellPropBackgroundColor | kCellPropTextStyle | kCellPropTextHeight | kCellPropMarginLeft | kCellPropMarginTop | kCellPropMarginRight | kCellPropMarginBottom | kCellPropMarginHorzSpacing | kCellPropMarginVertSpacing | kCellPropAutoScale | kCellPropMergeAll | kCellPropFlowDirBtoT | kCellPropContentLayout)
+    </table>
+  */
+   void  setOverride (
+     OdInt32 row, 
+     OdInt32 col, 
+     OdInt32 nContent, 
+     OdDb::CellProperty nOverride);
+
+  /** \details
+    Sets the override in the cell, row, column, content, or grid line in the cell, row, or column. 
+    Use a valid row index and pass column index -1 to set row property overrides.
+    Use a valid column index and pass row index -1 to set column property overrides.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype.
+    \param nOverride [in]  Override. 
+
+    \remarks
+    Grid linetype should take one of the next values:
+ 
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+   void  setOverride (
+     OdInt32 row, 
+     OdInt32 col, 
+     OdDb::GridLineType nGridLineType, 
+     OdDb::GridProperty nOverride);
+
+  /** \details
+    Removes all overrides in the cell, row, or column. 
+    Use a valid row index and pass column index -1 to remove row property overrides.
+    Use a valid column index and pass row index -1 to remove column property overrides.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+  */
+   void  removeAllOverrides (
+     OdInt32 row, 
+     OdInt32 col);
+  
+  /** \details
+    Returns the grid line style of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row grid line style.
+    Use a valid column index and pass row index -1 to get column grid line style.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype. 
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+
+    Grid line style should take one of the following values:
+    
+    <table>
+    Name                  Value
+    kGridLineStyleSingle  1
+    kGridLineStyleDouble  2
+    </table>
+  */
+  OdDb::GridLineStyle gridLineStyle (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineType) const;
+
+  /** \details
+    Sets the grid line style to the cell, row, or column. 
+    Use a valid row index and pass column index -1 to set row grid line style.
+    Use a valid column index and pass row index -1 to set column grid line style.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype. 
+    \param nLineStyle [in]  Grid line style. 
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+
+    Grid line style should take one of the following values:
+    
+    <table>
+    Name                  Value
+    kGridLineStyleSingle  1
+    kGridLineStyleDouble  2
+    </table>
+  */
+  void  setGridLineStyle (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineTypes, 
+    OdDb::GridLineStyle nLineStyle);
+
+  /** \details
+    Returns the grid lineweight of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row grid lineweight.
+    Use a valid column index and pass row index -1 to get column grid lineweight.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype. 
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+
+    Grid lineweight should take one of the following values:
+    
+    <table>
+    Name              Value
+    kLnWt000          0
+    kLnWt005          5
+    kLnWt009          9
+    kLnWt013          13
+    kLnWt015          15
+    kLnWt018          18
+    kLnWt020          20
+    kLnWt025          25
+    kLnWt030          30
+    kLnWt035          35
+    kLnWt040          40
+    kLnWt050          50
+    kLnWt053          53
+    kLnWt060          60
+    kLnWt070          70
+    kLnWt080          80
+    kLnWt090          90
+    kLnWt100          100
+    kLnWt106          106
+    kLnWt120          120
+    kLnWt140          140
+    kLnWt158          158
+    kLnWt200          200
+    kLnWt211          211
+    kLnWtByLayer      -1
+    kLnWtByBlock      -2
+    kLnWtByLwDefault  -3
+    </table>
+  */
+  OdDb::LineWeight gridLineWeight (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineType) const;
+
+  /** \details
+    Sets the grid lineweight of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to set row grid lineweight.
+    Use a valid column index and pass row index -1 to set column grid lineweight.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype.
+    \param nLineWeight [in]  Grid lineweight.
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+
+    Grid lineweight should take one of the following values:
+    
+    <table>
+    Name              Value
+    kLnWt000          0
+    kLnWt005          5
+    kLnWt009          9
+    kLnWt013          13
+    kLnWt015          15
+    kLnWt018          18
+    kLnWt020          20
+    kLnWt025          25
+    kLnWt030          30
+    kLnWt035          35
+    kLnWt040          40
+    kLnWt050          50
+    kLnWt053          53
+    kLnWt060          60
+    kLnWt070          70
+    kLnWt080          80
+    kLnWt090          90
+    kLnWt100          100
+    kLnWt106          106
+    kLnWt120          120
+    kLnWt140          140
+    kLnWt158          158
+    kLnWt200          200
+    kLnWt211          211
+    kLnWtByLayer      -1
+    kLnWtByBlock      -2
+    kLnWtByLwDefault  -3
+    </table>
+  */
+  void  setGridLineWeight (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineTypes, 
+    OdDb::LineWeight nLineWeight);
+
+  /** \details
+    Returns the grid linetype of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row grid linetype.
+    Use a valid column index and pass row index -1 to get column grid linetype.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetypes.
+
+    \remarks
+    Grid linetypes should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  OdDbObjectId    gridLinetype (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineType) const;
+
+  /** \details
+    Sets the grid linetype of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to set row grid linetype.
+    Use a valid column index and pass row index -1 to set column grid linetype.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineTypes [in]  Grid linetypes.
+    \param idLinetype [in]  Grid linetype to set.
+
+    \remarks
+    Grid linetypes should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  void  setGridLinetype (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineTypes, 
+    const OdDbObjectId& idLinetype);
+
+  /** \details
+    Returns the grid color of the cell, row, or column as an object of the OdCmColor class. 
+    Use a valid row index and pass column index -1 to get row grid line color.
+    Use a valid column index and pass row index -1 to get column grid line color.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype.
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  OdCmColor gridColor (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineType) const;
+
+  /** \details
+    Sets the grid color of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row grid line color.
+    Use a valid column index and pass row index -1 to get column grid line color.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridlineTypes [in]  Grid linetypes.
+    \param color [in]  Grid color.
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  void  setGridColor (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridlineTypes, 
+    const OdCmColor& color);
+
+  /** \details
+    Returns the grid visibility of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row grid visibility .
+    Use a valid column index and pass row index -1 to get column grid visibility .
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype.
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+
+    Grid visibility should take one of the following values:
+    
+    <table>
+    Name        Value
+    kInvisible  1
+    kVisible    0
+    </table>
+  */
+  OdDb::Visibility gridVisibility (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineType) const;
+
+  /** \details
+    Sets the grid visibility of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to set row grid visibility .
+    Use a valid column index and pass row index -1 to set column grid visibility .
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineTypes [in]  Grid linetypes.
+    \param nVisibility [in]  Grid line visibility.
+
+    \remarks
+    Grid linetypes should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+
+    Grid visibility should take one of the following values:
+    
+    <table>
+    Name        Value
+    kInvisible  1
+    kVisible    0
+    </table>
+  */
+  void  setGridVisibility (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineTypes, 
+    OdDb::Visibility nVisibility);
+
+  /** \details
+    Returns the grid double line spacing of the cell, row, or column as a double value. 
+    Use a valid row index and pass column index -1 to get row grid double line spacing.
+    Use a valid column index and pass row index -1 to get column grid double line spacing.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype.
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  double gridDoubleLineSpacing (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineType) const;
+
+  /** \details
+    Sets the grid double line spacing of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to set row grid double line spacing.
+    Use a valid column index and pass row index -1 to set column grid double line spacing.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineTypes [in]  Grid linetypes.
+    \param fSpacing [in]  Grid double line spacing.
+
+    \remarks
+    Grid linetypes should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  void  setGridDoubleLineSpacing(
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType 
+    nGridLineTypes, 
+    double fSpacing);
+
+  /** \details
+    Returns the grid line property of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row grid property.
+    Use a valid column index and pass row index -1 to get column grid property.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineType [in]  Grid linetype.
+    \param gridProp [out]  Grid line property.
+
+    \remarks
+    Grid linetype should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  void  getGridProperty (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineType, 
+    OdGridProperty& gridProp) const;
+
+  /** \details
+    Sets the grid line property of the cell, row, or column. 
+    Use a valid row index and pass column index -1 to get row grid property.
+    Use a valid column index and pass row index -1 to get column grid property.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param nGridLineTypes [in]  Grid linetypes.
+    \param gridProp [in]  Grid line property.
+
+    \remarks
+    Grid linetypes should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  void  setGridProperty (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::GridLineType nGridLineTypes, 
+    const OdGridProperty& gridProp);
+
+  /** \details
+    Sets the grid line property of the cell, row, or column. 
+
+    \param rangeIn [in]  Cell range, row range or column range.
+    \param nGridLineTypes [in]  Grid linetypes.
+    \param gridProp [in]  Grid line property.
+
+    \remarks
+    Grid linetypes should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  void  setGridProperty  (
+    const OdCellRange& rangeIn, 
+    OdDb::GridLineType nGridLineTypes, 
+    const OdGridProperty& gridProp);
+
+    /** \details
+    Checks if the cell is linked to a data source. 
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+
+    \remarks
+    Grid linetypes should take one of the following values:
+    
+    <table>
+    Name                 Value
+    kInvalidGridLine     0x00
+    kHorzTop             0x01
+    kHorzInside          0x02
+    kHorzBottom          0x04
+    kVertLeft            0x08
+    kVertInside          0x10
+    kVertRight           0x20
+    kHorzGridLineTypes   kHorzTop|kHorzBottom|kHorzInside
+    kVertGridLineTypes   kVertLeft|kVertRight|kVertInside
+    kOuterGridLineTypes  kHorzTop|kHorzBottom|kVertLeft|kVertRight
+    kInnerGridLineTypes  kHorzInside|kVertInside
+    kAllGridLineTypes    kOuterGridLineTypes|kInnerGridLineTypes
+    </table>
+  */
+  bool isLinked (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Returns the data link (OdDbDataLink) for the specified row and column.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell.
+  */
+  OdDbObjectId getDataLink (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Opens and returns the data link (OdDbDataLink) for the specified row and column.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell.
+    \param mode [in]  Open mode.
+
+    \remarks
+    Open mode should take one of the following values:
+    
+    <table>
+    Name        Value
+    kNotOpen    -1
+    kForRead    0
+    kForWrite   1
+    kForNotify  2
+    </table>
+  */
+  OdDbDataLinkPtr getDataLink (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::OpenMode mode) const;
+
+  /** \details
+    Returns the number of data links (OdDbDataLink) for the specified cell range.
+
+    \param pRange [in]  Cell range. 
+    \param dataLinkIds [out]  Array of data link IDs.
+  */
+  OdInt32 getDataLink (
+    const OdCellRange& pRange, 
+    OdDbObjectIdArray& dataLinkIds) const;
+
+  /** \details
+    Sets the data link (OdDbDataLink) for the specified row and column.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell.
+    \param idDataLink [in]  Array of data link IDs.
+    \param bUpdate [in]  Flag that indicates whether or not the data link should be updated after setting it.
+
+    \remarks
+    Method generates the eNotThatKindOfClass exception when idDataLink in not an OdDbDataLink object id.
+  */
+  void setDataLink (
+    OdInt32 row, 
+    OdInt32 col, 
+    const OdDbObjectId& idDataLink, 
+    bool bUpdate);
+
+  /** \details
+    Sets the data link (OdDbDataLink) for the specified cell range.
+
+    \param range [in]  Cell range. 
+    \param idDataLink [in]  Array of data link IDs.
+    \param bUpdate [in]  Flag that indicates whether or not the data link should be updated after setting it.
+
+    \remarks
+    Method generates the eNotThatKindOfClass exception when idDataLink in not an OdDbDataLink object id.
+  */
+  void setDataLink 
+    (const OdCellRange& range, 
+    const OdDbObjectId& idDataLink, 
+    bool bUpdate);
+
+  /** \details
+    Returns the data link cell range that includes the specified row and column.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell.
+  */
+  OdCellRange getDataLinkRange (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Removes the data link at the specified cell.
+
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell.
+
+    \remarks
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  void  removeDataLink (
+    OdInt32 row, 
+    OdInt32 col);
+
+  /** \details
+    Removes all data links.
+  */
+  void  removeDataLink (void);
+  
+  /** \details
+    Updates the data link of the cell. 
+ 
+    \param row [in]  Row index of the cell. 
+    \param col [in]  Column index of the cell. 
+    \param nDir [in]  Direction of update.
+    \param nOption [in]  Update option.
+
+    \remarks
+    Direction of update should take one of the following values:
+    
+    <table>
+    Name                          Value
+    kUpdateDirectionSourceToData  0x1
+    kUpdateDirectionDataToSource  0x2
+    </table>
+
+    Update option should take one of the following values:
+    
+    <table>
+    Name                                              Value
+    kUpdateOptionNone                                 0
+    kUpdateOptionSkipFormat                           0x20000
+    kUpdateOptionUpdateRowHeight                      0x40000
+    kUpdateOptionUpdateColumnWidth                    0x80000
+    kUpdateOptionAllowSourceUpdate                    0x100000
+    kUpdateOptionForceFullSourceUpdate                0x200000
+    kUpdateOptionOverwriteContentModifiedAfterUpdate  0x400000
+    kUpdateOptionOverwriteFormatModifiedAfterUpdate   0x800000
+    kUpdateOptionForPreview                           0x1000000
+    kUpdateOptionIncludeXrefs                         0x2000000
+    kUpdateOptionSkipFormatAfterFirstUpdate           0x4000000
+    </table>
+
+    Method generates the eInvalidInput exception when input row number and column number are less than 0 or greater than table size.
+  */
+  void  updateDataLink (
+    OdInt32 row, 
+    OdInt32 col, 
+    OdDb::UpdateDirection nDir, 
+    OdDb::UpdateOption nOption);
+
+  /** \details
+    Updates the data link in the table. 
+ 
+    \param nDir [in]  Direction of update
+    \param nOption [out]  Update option.
+
+    \remarks
+    Direction of update should take one of the following values:
+    
+    <table>
+    Name                          Value
+    kUpdateDirectionSourceToData  0x1
+    kUpdateDirectionDataToSource  0x2
+    </table>
+
+    Update option should take one of the following values:
+    
+    <table>
+    Name                                              Value
+    kUpdateOptionNone                                 0
+    kUpdateOptionSkipFormat                           0x20000
+    kUpdateOptionUpdateRowHeight                      0x40000
+    kUpdateOptionUpdateColumnWidth                    0x80000
+    kUpdateOptionAllowSourceUpdate                    0x100000
+    kUpdateOptionForceFullSourceUpdate                0x200000
+    kUpdateOptionOverwriteContentModifiedAfterUpdate  0x400000
+    kUpdateOptionOverwriteFormatModifiedAfterUpdate   0x800000
+    kUpdateOptionForPreview                           0x1000000
+    kUpdateOptionIncludeXrefs                         0x2000000
+    kUpdateOptionSkipFormatAfterFirstUpdate           0x4000000
+    </table>
+  */
+  void  updateDataLink (
+    OdDb::UpdateDirection nDir, 
+    OdDb::UpdateOption nOption);
+
+  /** \details
+    Returns the column name as an OdString value. 
+ 
+    \param nIndex [in]  Column index.
+  */
+  OdString  getColumnName (
+    OdInt32 nIndex) const;
+
+  /** \details
+    Sets the column name. 
+ 
+    \param nIndex [in]  Column index.
+    \param sName [in]  Column name.
+  */
+  void setColumnName (
+    OdInt32 nIndex, 
+    const OdString& sName);
+
+  /** \details
+    Returns the tooltip of the cell as an OdString value. 
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+  */
+  OdString getToolTip (
+    OdInt32 row, 
+    OdInt32 col) const;
+
+  /** \details
+    Sets the tooltip of the cell.
+
+    \param row [in]  Row index. 
+    \param col [in]  Column index. 
+    \param sToolTip [in]  Tooltip. 
+  */
+  void  setToolTip (
+    OdInt32 row, 
+    OdInt32 col, 
+    const OdString sToolTip);
+  // void  createTemplate (OdDbTableTemplate*& pTemplate, OdDb::TableCopyOption nCopyOption);
+  // void  getIndicatorSize (double& fWidth, double& fHeight) const;
+
+  /** \details
+    Copies the content from the source object. 
+ 
+    \param pSource [in]  Source object.  
+  */
+  virtual void copyFrom(
+    const OdRxObject* pSource);
+
+  /** \details
+    Copies the content and format from the source table. 
+ 
+    \param pSrc [in]  Source table.  
+    \param nOption [in]  Copy option.  
+  */
+  void copyFrom (
+    const OdDbLinkedTableData* pSrc, 
+    OdDb::TableCopyOption nOption);
+
+  /** \details
+    Copies the content and format from the source table. 
+  
+    \param pSrc [in]  Source table.  
+    \param nOption [in]  Copy option.  
+    \param srcRange [in]  Source cell range.  
+    \param targetRange [in]  Target cell range.  
+    \param pNewTargetRangeOut [out]  Target cell range.  
+  */
+  void copyFrom (const OdDbLinkedTableData* pSrc, 
+    OdDb::TableCopyOption nOption, 
+    const OdCellRange& srcRange, 
+    const OdCellRange& targetRange,
+    OdCellRange* pNewTargetRangeOut);
+
+  /** \details
+    Copies the content and format from the source table. 
+  
+    \param pSrc [in]  Source table.  
+    \param nOption [in]  Copy option.  
+    \param srcRange [in]  Source cell range.  
+    \param targetRange [in]  Target cell range.  
+    \param pNewTargetRangeOut [out]  Target cell range.  
+  */
+  void copyFrom  (const OdDbTable* pSrc, 
+    OdDb::TableCopyOption nOption, 
+    const OdCellRange& srcRange, 
+    const OdCellRange& targetRange,
+    OdCellRange* pNewTargetRangeOut);
+
+  /** \details
+    Appends this OdDbTable object to the specified owner object.  
+  
+    \param idPair [in]  ID pair to append.  
+    \param pOwnerObject [in]  Pointer to the owner object.  
+    \param ownerIdMap [in/out]  Owner's ID map.  
+  */  
+  void appendToOwner(
+    OdDbIdPair& idPair, 
+    OdDbObject* pOwnerObject, 
+    OdDbIdMapping& ownerIdMap);
+
+  /** \details
+    Returns true if regeneration of the table block is disabled. Otherwise, returns false.
+  */
+  bool isRegenerateTableSuppressed() const;
+
+  /** \details
+    This method allows the user to disable the regeneration of the table block during property changes. 
+
+    \param bSuppress [in]   Input boolean value to suppress or enable the regeneration of a table object.
+  */
+  void suppressRegenerateTable(bool bSuppress);
+
+  virtual OdResult subExplode(
+    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbTable object pointers.
+*/
+typedef OdSmartPtr<OdDbTable> OdDbTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableContent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableContent.h
new file mode 100755
index 0000000..80ff020
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableContent.h
@@ -0,0 +1,92 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBTABLECONTENT_H
+#define OD_DBTABLECONTENT_H
+
+#include "DbObject.h"
+#include "DbFormattedTableData.h"
+
+#include "TD_PackPush.h"
+
+	/** \details
+    Work-in-progress. This class represents TableContent objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+	<group OdDb_Classes>
+	*/
+class TOOLKIT_EXPORT OdDbTableContent : public OdDbFormattedTableData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbTableContent);
+
+  OdDbTableContent();
+
+  virtual OdDbObjectId tableStyleId() const;
+
+  virtual void setTableStyleId(
+    const OdDbObjectId& idTableStyle);
+
+  virtual const OdString cellStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol) const;
+
+  virtual void setCellStyle(
+    OdInt32 nRow, 
+    OdInt32 nCol, 
+    const OdString& pszCellStyle);
+
+  virtual double rowHeight(
+    OdInt32 nRow) const;
+
+  virtual void setRowHeight(
+    OdInt32 nRow, 
+    double fHeight);
+
+  virtual double columnWidth(
+    OdInt32 nCol) const;
+
+  virtual void setColumnWidth(
+    OdInt32 nCol, 
+    double fWidth);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbTableContent> OdDbTableContentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBTABLECONTENT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableStyle.h
new file mode 100755
index 0000000..bb49c51
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTableStyle.h
@@ -0,0 +1,1113 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_DBTABLESTYLE_H
+#define OD_DBTABLESTYLE_H
+
+#include "TD_PackPush.h"
+#include "DbObject.h"
+#include "DbColor.h"
+#include "OdValue.h"
+#include "StringArray.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  // OdDbTable and OdTbTableStyle specific enum
+  //
+  
+  enum CellType          
+  { 
+    kUnknownCell    = 0,
+    kTextCell       = 1,
+    kBlockCell      = 2,
+    kMultipleContentCell = 3
+  };
+
+  enum CellContentType   
+  { 
+    kCellContentTypeUnknown = 0x0,
+    kCellContentTypeValue   = 0x1,
+    kCellContentTypeField   = 0x2,
+    kCellContentTypeBlock   = 0x4
+  };
+
+  enum CellEdgeMask      
+  { 
+    kTopMask        = 0x1,
+    kRightMask      = 0x2,
+    kBottomMask     = 0x4,
+    kLeftMask       = 0x8 
+  };
+
+  enum SelectType
+  { 
+    kWindow         = 1,
+    kCrossing       = 2 
+  };
+
+  enum FlowDirection
+  { 
+    kTtoB           = 0,
+    kBtoT           = 1 
+  };
+
+  enum RotationAngle     
+  { 
+    kDegreesUnknown = -1,
+    kDegrees000     = 0,
+    kDegrees090     = 1,
+    kDegrees180     = 2,
+    kDegrees270     = 3 
+  };
+
+  enum CellAlignment
+  { 
+    kTopLeft        = 1,
+    kTopCenter      = 2,
+    kTopRight       = 3,
+    kMiddleLeft     = 4,
+    kMiddleCenter   = 5,
+    kMiddleRight    = 6,
+    kBottomLeft     = 7,
+    kBottomCenter   = 8,
+    kBottomRight    = 9 
+  };
+
+  enum GridLineType
+  { 
+    kInvalidGridLine= 0x00,
+    kHorzTop        = 0x01,
+    kHorzInside     = 0x02,
+    kHorzBottom     = 0x04,
+    kVertLeft       = 0x08,
+    kVertInside     = 0x10,
+    kVertRight      = 0x20,
+    kHorzGridLineTypes     = kHorzTop | kHorzBottom | kHorzInside,
+    kVertGridLineTypes     = kVertLeft | kVertRight | kVertInside,
+    kOuterGridLineTypes    = kHorzTop | kHorzBottom | kVertLeft | kVertRight,
+    kInnerGridLineTypes    = kHorzInside | kVertInside,
+    kAllGridLineTypes      = kOuterGridLineTypes | kInnerGridLineTypes
+  };
+
+
+  enum RowType
+  { 
+    kUnknownRow     = 0x0,
+    kDataRow        = 0x1,
+    kTitleRow       = 0x2,
+    kHeaderRow      = 0x4
+  };
+
+  enum TableStyleFlags
+  { 
+    kHorzInsideLineFirst  = 0x1,
+    kHorzInsideLineSecond = 0x2,
+    kHorzInsideLineThird  = 0x4,
+    kTableStyleModified   = 0x8
+  };
+
+
+  enum RowTypes
+  { 
+    kAllRows = kDataRow | kTitleRow | kHeaderRow 
+  };
+    
+  enum GridLineTypes 
+  {   
+    kAllGridLines = kHorzTop | kHorzInside | kHorzBottom | kVertLeft | kVertInside | kVertRight 
+  };
+
+  enum GridLineStyle  
+  { 
+    kGridLineStyleSingle = 1,
+    kGridLineStyleDouble = 2
+  };
+
+  enum CellMargin        
+  { 
+    kCellMarginTop         = 0x01,
+    kCellMarginLeft        = 0x02,
+    kCellMarginBottom      = 0x04,
+    kCellMarginRight       = 0x08,
+    kCellMarginHorzSpacing = 0x10,
+    kCellMarginVertSpacing = 0x20 
+  };
+
+  enum CellContentLayout
+  { 
+    kCellContentLayoutFlow              = 0x1,
+    kCellContentLayoutStackedHorizontal = 0x2,
+    kCellContentLayoutStackedVertical   = 0x4
+  };
+
+  enum CellState
+  { 
+    kCellStateNone                        = 0x00,
+    kCellStateContentLocked               = 0x01,
+    kCellStateContentReadOnly             = 0x02,
+    kCellStateLinked                      = 0x04,
+    kCellStateContentModifiedAfterUpdate  = 0x08,
+    kCellStateFormatLocked                = 0x10,
+    kCellStateFormatReadOnly              = 0x20,
+    kCellStateFormatModifiedAfterUpdate   = 0x40,
+    kAllCellStates  = (kCellStateContentLocked | kCellStateContentReadOnly |
+                       kCellStateLinked | kCellStateContentModifiedAfterUpdate | 
+                       kCellStateFormatLocked | kCellStateFormatReadOnly |
+                       kCellStateFormatModifiedAfterUpdate)
+  };
+
+  enum GridProperty      
+  { 
+    kGridPropInvalid           = 0x00,
+    kGridPropLineStyle         = 0x01,
+    kGridPropLineWeight        = 0x02,
+    kGridPropLinetype          = 0x04,
+    kGridPropColor             = 0x08,
+    kGridPropVisibility        = 0x10,
+    kGridPropDoubleLineSpacing = 0x20,
+    kGridPropAll               = (kGridPropLineStyle | kGridPropLineWeight | kGridPropLinetype |
+                                  kGridPropColor | kGridPropVisibility | kGridPropDoubleLineSpacing)
+  };
+
+  enum CellOption        
+  {
+    kCellOptionNone    = 0x0,
+    kInheritCellFormat = 0x1
+  };
+
+  enum CellProperty      
+  { 
+    kCellPropInvalid               = 0x00000,
+    kCellPropDataType              = 0x00001,
+    kCellPropDataFormat            = 0x00002,
+    kCellPropRotation              = 0x00004,
+    kCellPropScale                 = 0x00008,
+    kCellPropAlignment             = 0x00010,
+    kCellPropContentColor          = 0x00020,
+    kCellPropTextStyle             = 0x00040,
+    kCellPropTextHeight            = 0x00080,
+    kCellPropAutoScale             = 0x00100,
+    kCellPropBackgroundColor       = 0x00200,
+    kCellPropMarginLeft            = 0x00400,
+    kCellPropMarginTop             = 0x00800,
+    kCellPropMarginRight           = 0x01000,
+    kCellPropMarginBottom          = 0x02000,
+    kCellPropContentLayout         = 0x04000,
+    kCellPropMergeAll              = 0x08000,
+    kCellPropFlowDirBtoT           = 0x10000,
+    kCellPropMarginHorzSpacing     = 0x20000,
+    kCellPropMarginVertSpacing     = 0x40000,
+    kCellPropDataTypeAndFormat     = (kCellPropDataType | kCellPropDataFormat),
+    kCellPropContent               = (kCellPropDataType | kCellPropDataFormat | kCellPropRotation |
+                                      kCellPropScale | kCellPropContentColor |  kCellPropTextStyle | 
+                                      kCellPropTextHeight | kCellPropAutoScale),
+    kCellPropBitProperties         = (kCellPropAutoScale | kCellPropMergeAll | kCellPropFlowDirBtoT),
+    kCellPropAll                   = (kCellPropDataType | kCellPropDataFormat | kCellPropRotation |
+                                      kCellPropScale | kCellPropAlignment | kCellPropContentColor | kCellPropBackgroundColor | 
+                                      kCellPropTextStyle | kCellPropTextHeight | kCellPropMarginLeft | kCellPropMarginTop |
+                                      kCellPropMarginRight | kCellPropMarginBottom | kCellPropMarginHorzSpacing | 
+                                      kCellPropMarginVertSpacing | kCellPropAutoScale | kCellPropMergeAll | 
+                                      kCellPropFlowDirBtoT | kCellPropContentLayout)
+  };
+}
+
+  /** \details
+    This class represents the parameters of cells for OdDbTable entities..
+    
+    <group Other_Classes>
+  */
+class OdCellRange
+{
+public:
+  OdInt32  m_topRow;
+  OdInt32  m_leftColumn;
+  OdInt32  m_bottomRow;
+  OdInt32  m_rightColumn;
+
+  OdCellRange() : m_topRow(-1)
+    , m_leftColumn(-1)
+    , m_bottomRow(-1)
+    , m_rightColumn(-1) {}
+
+  OdCellRange(OdInt32 topRow, OdInt32 leftColumn, OdInt32 bottomRow, OdInt32 rightColumn)
+    : m_topRow(topRow)
+    , m_leftColumn(leftColumn)
+    , m_bottomRow(bottomRow)
+    , m_rightColumn(rightColumn)
+  {}
+
+  bool operator ==(
+    const OdCellRange& range) const
+  {
+    return ( m_topRow == range.m_topRow &&
+              m_leftColumn == range.m_leftColumn &&
+              m_bottomRow == range.m_bottomRow &&
+              m_rightColumn == range.m_rightColumn );
+  }
+  bool operator !=(
+    const OdCellRange& range) const
+  {
+    return !( *this == range);
+  }
+};
+
+typedef OdArray<OdCellRange> OdCellRangeArray;
+
+ /** \details
+    This class represents a grid for OdDbTable entities.
+    
+    <group Other_Classes>
+ */
+class OdGridProperty
+{
+public:
+
+  OdDb::GridProperty  m_propMask;
+  OdDb::GridLineStyle m_lineStyle;
+  OdDb::LineWeight    m_lineWeight;
+  OdDbHardPointerId   m_linetype;
+  OdCmColor           m_color;
+  OdDb::Visibility    m_visibility;
+  double              m_doubleLineSpacing;
+
+  OdGridProperty() : m_propMask(OdDb::kGridPropInvalid)
+    , m_lineStyle(OdDb::kGridLineStyleSingle)
+    , m_lineWeight(OdDb::kLnWtByBlock)
+    , m_visibility(OdDb::kVisible)
+    , m_doubleLineSpacing(0.0) {}
+
+};
+
+/** \details
+    This class represents TableStyles for OdDbTable entities in an OdDbDatabase instance.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbTableStyle : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbTableStyle);
+
+  OdDbTableStyle();
+  // virtual ~OdDbTableStyle();
+
+  // General Properties
+  //
+  
+  /** \details
+    Returns the name of this TableStyle object.
+  */
+  virtual OdString getName() const;
+
+  /** \details
+    Sets the name of this TableStyle object.
+
+    \param name [in]  Name.
+  */
+  virtual void setName(const OdString& name);
+
+  /** \details
+    Returns the description of this TableStyle object.
+  */
+  virtual OdString description() const;
+
+  /** \details
+    Sets the description of this TableStyle object.
+    
+    \param description [in]  Description.
+  */
+  virtual void setDescription(
+    const OdString& description);
+
+  /** \details
+    Returns the bit flags for this TableStyle object (DXF 71). 
+      
+    \remarks
+    bitFlags() returns a combination of zero or more of the following:
+    
+    <table>
+    Name                      Value
+    kHorzInsideLineFirst      1
+    kHorzInsideLineSecond     2
+    kHorzInsideLineThird      4
+    kTableStyleModified       8 
+    </table>
+  */
+  virtual OdUInt32 bitFlags() const;
+
+  /** \details
+    Sets the bit flags for this TableStyle object (DXF 71). 
+    
+    \param bitFlags [in]  Bit flags.
+    
+    \remarks
+    bitFlags must be a combination of one or more of the following:
+    
+    <table>
+    Name                      Value
+    kHorzInsideLineFirst      1
+    kHorzInsideLineSecond     2
+    kHorzInsideLineThird      4
+    kTableStyleModified       8 
+    </table>
+  */
+  virtual void setBitFlags(
+    OdUInt32 bitFlags);
+
+  /** \details
+    Returns the direction this TableStyle object flows from its first row to its last (DXF 70).
+
+    \remarks
+    flowDirection() returns one of the following:
+    
+    <table>
+    Name          Value   Description
+    OdDb::kTtoB   0       Top to Bottom
+    OdDb::kBtoT   1       Bottom to Top
+    </table>
+  */
+  virtual OdDb::FlowDirection flowDirection() const; 
+
+  /** \details
+    Sets the direction this TableStyle objectflows from its first row to its last. (DXF 70).
+
+    \param flowDirection [in]  Flow direction.
+    
+    \remarks
+    flowDirection must be one of the following: 
+         
+    <table>
+    Name          Value   Description
+    OdDb::kTtoB   0       Top to Bottom
+    OdDb::kBtoT   1       Bottom to Top
+    </table>
+  */
+  virtual void setFlowDirection(
+    OdDb::FlowDirection flowDirection);
+
+  /** \details
+    Returns the horizontal cell margin for this TableStyle object (DXF 40). 
+    \remarks
+    The horizontal cell margin is the horizontal space between the cell text and the cell border.
+  */
+  virtual double horzCellMargin() const;
+
+  /** \details
+    Sets the horizontal cell margin for this TableStyle object (DXF 40).
+    
+    \param cellMargin [in]  Cell margin.
+    
+    \remarks
+    The horizontal cell margin is the horizontal space between the cell text and the cell border.
+  */
+  virtual void   setHorzCellMargin(
+    double cellMargin);
+
+
+  /** \details
+    Returns the vertical cell margin for this TableStyle object (DXF 41). 
+
+    \remarks
+    The vertical cell margin is the vertical space between the cell text and the cell border.
+  */
+  virtual double vertCellMargin() const;
+
+  /** \details
+    Sets the vertical cell margin for this Table entity (DXF 41).
+    
+    \param cellMargin [in]  Cell margin.
+    
+    \remarks
+    The vertical cell margin is the vertical space between the cell text and the cell border.
+  */
+  virtual void setVertCellMargin(
+    double cellMargin);
+
+  /** \details
+      Returns true if and only if the title row is suppressed for this TableStyle object (DXF 280).
+  */
+  virtual bool isTitleSuppressed() const;
+
+  /** \details
+    Controls the suppression of the title row (DXF 280).
+    \param suppress [in]  Controls suppression.
+  */
+  virtual void suppressTitleRow(
+    bool suppress);
+
+  /** \details
+    Returns true if and only if the header row is suppressed for this TableStyle object (DXF 281). 
+  */
+  virtual bool isHeaderSuppressed() const;
+
+  /** \details
+      Controls the suppression of the header row for this TableStyle object (DXF 280).
+      \param enable [in]  Controls suppression.
+  */
+  virtual void suppressHeaderRow(
+    bool suppress);
+
+
+  /** \details
+    Returns the Object ID of the text style for the specified row type in this TableStyle object (DXF 7).
+
+    \param rowType [in]  Row type.
+    
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name              Value
+    kTitleRow         1
+    kHeaderRow        2
+    kDataRow          4
+    </table>
+  */
+  virtual OdDbObjectId textStyle(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+
+  /** \details
+    Sets the Object ID of the text style for the specified row types for this TableStyle object (DXF 7).
+    
+    \param rowTypes [in]  Row types.
+    \param textStyleId [in]  Text style Object ID.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value
+    kTitleRow         1
+    kHeaderRow        2
+    kDataRow          4
+    </table>
+  */
+  virtual void setTextStyle(
+    const OdDbObjectId textStyleId, 
+    int rowTypes = OdDb::kAllRows);
+
+  /** \details
+    Returns the text height for the specified row type in this TableStyle object (DXF 140).
+
+    \param rowType [in]  Row type
+    
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual double textHeight(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+
+  /** \details
+    Sets the text height for the specified row types in this TableStyle object (DXF 140).
+
+    \param rowTypes [in]  Row types.
+    \param height [in]  Text height.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value
+    kTitleRow         1
+    kHeaderRow        2
+    kDataRow          4
+    </table>
+  */
+  virtual void setTextHeight(
+    double height, 
+    int rowTypes = OdDb::kAllRows);
+
+  /** \details
+    Returns the cell alignment for the specified row type in this TableStyle object (DXF 170).
+
+    \param rowType [in]  Row type
+    
+    \remarks
+    rowType() returns one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+    
+    alignment() returns one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTopLeft          1
+    OdDb::kTopCenter        2 
+    OdDb::kTopRight         3
+    OdDb::kMiddleLeft       4
+    OdDb::kMiddleCenter     5
+    OdDb::kMiddleRight      6
+    OdDb::kBottomLeft       7 
+    OdDb::kBottomCenter     8
+    OdDb::kBottomRight      9
+    </table>
+  */
+  virtual OdDb::CellAlignment alignment(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+
+
+  /** \details
+    Sets the cell alignment for the specified row types in this TableStyle object (DXF 170).
+    
+    \param rowTypes [in]  Row types.
+    \param alignment [in]  Alignment.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+    
+    alignment must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTopLeft          1
+    OdDb::kTopCenter        2 
+    OdDb::kTopRight         3
+    OdDb::kMiddleLeft       4
+    OdDb::kMiddleCenter     5
+    OdDb::kMiddleRight      6
+    OdDb::kBottomLeft       7 
+    OdDb::kBottomCenter     8
+    OdDb::kBottomRight      9
+    </table>
+  */
+  virtual void setAlignment(
+    OdDb::CellAlignment alignment, 
+    int rowTypes = OdDb::kAllRows);
+
+  /** \details
+    Returns the text color for the specified row type in this TableStyle object (DXF 62).
+
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual OdCmColor color(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+    
+
+  /** \details
+    Sets the text color for the specified row types in this TableStyle object (DXF 62).
+
+    \param rowTypes [in]  Row types.
+    \param color [in]  Color.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual void setColor(
+    const OdCmColor& color,
+    int rowTypes = OdDb::kAllRows);
+
+  /** \details
+    Returns the background color for the specified row type in this TableStyle object (DXF 63).
+
+    \param rowType [in]  Row type.
+
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual OdCmColor backgroundColor(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+
+  /** \details
+    Sets the background color for the specified row type in this TableStyle object (DXF 63). 
+
+    \param rowTypes [in]  Row types.
+    \param color [in]  Background color.
+    
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual void setBackgroundColor(
+    const OdCmColor& color,
+    int rowTypes = OdDb::kAllRows);
+
+  /** \details
+    Returns true if and only if the background color for the specified row 
+    type is disabled for this TableStyle object (DXF 283).
+
+    \param rowType [in]  Row type
+    \param row [in]  Row index of the cell.
+    \param column [in]  Column index of the cell.
+
+    \remarks
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual bool isBackgroundColorNone(
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+
+  /** \details
+    Controls the background color setting for the specified row types or cell in this TableStyle object (DXF 283). 
+
+    \param disable [in]  Disables the background color if true, enables if false.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual void setBackgroundColorNone(
+    bool disable,
+    int rowTypes = OdDb::kAllRows);
+
+  //Gridline properties
+  //
+  
+  /** \details
+    Returns the grid lineweight for the specified gridline type and row type in this TableStyle object (DXF 274-279).
+      
+    \param gridlineType [in]  Gridline type.
+    \param rowType [in]  Row type.
+
+    \remarks
+    gridlineType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kHorzTop          1
+    OdDb::kHorzInside       2
+    OdDb::kHorzBottom       4
+    OdDb::kVertLeft         8
+    OdDb::kVertInside       0x10
+    OdDb::kVertRight        0x20
+    </table>
+    
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+    
+  */
+  virtual OdDb::LineWeight gridLineWeight(
+    OdDb::GridLineType gridlineType,
+    OdDb::RowType rowType = OdDb::kDataRow) const; 
+  
+  /** \details
+    Sets the grid lineweight for the specified gridline types and row types,
+    or the specified cell and edges in this Table entity (DXF 274-279).
+      
+    \param lineWeight [in]  Lineweight.      
+    \param gridlineTypes [in]  Gridline types.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    gridlineTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kHorzTop          1
+    OdDb::kHorzInside       2
+    OdDb::kHorzBottom       4
+    OdDb::kVertLeft         8
+    OdDb::kVertInside       0x10
+    OdDb::kVertRight        0x20
+    </table>
+    
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual void setGridLineWeight(
+    OdDb::LineWeight lineWeight, 
+    int gridlineTypes = OdDb::kAllGridLines, 
+    int rowTypes = OdDb::kAllRows);
+
+
+  /** \details
+    Returns the grid color for the specified gridline type and row type
+    in this TableStyle object (DXF 63,64,65,66,68,69).
+      
+    \param gridlineType [in]  Gridline type.
+    \param rowType [in]  Row type.
+
+    \remarks
+    gridlineType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kHorzTop          1
+    OdDb::kHorzInside       2
+    OdDb::kHorzBottom       4
+    </table>
+    
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual OdCmColor gridColor(
+    OdDb::GridLineType gridlineType,
+    OdDb::RowType rowType = OdDb::kDataRow) const; 
+
+  /** \details
+    Returns the grid color for the specified gridline types and row type
+    in this TableStyle object (DXF 63,64,65,66,68,69).
+      
+    \param gridlineTypes [in]  Gridline types.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    gridlineTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kHorzTop          1
+    OdDb::kHorzInside       2
+    OdDb::kHorzBottom       4
+    </table>
+    
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+  */
+  virtual void setGridColor(
+    const OdCmColor color, 
+    int gridlineTypes = OdDb::kAllGridLines, 
+    int rowTypes = OdDb::kAllRows);
+
+
+  /** \details
+    Returns the grid visibility for the specified gridline type and row type,
+    in this TableStyle object (DXF 284-289).
+      
+    \param gridlineType [in]  Gridline type.
+    \param rowType [in]  Row type.
+
+    \remarks
+    gridVisibility() returns one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kInvisible        1
+    OdDb::kVisible          0 
+    </table>
+        
+    gridlineType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kHorzTop          1
+    OdDb::kHorzInside       2
+    OdDb::kHorzBottom       4
+    OdDb::kVertLeft         8
+    OdDb::kVertInside       0x10
+    OdDb::kVertRight        0x20
+    </table>
+    
+    rowType must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+    
+  */
+  virtual OdDb::Visibility gridVisibility(
+    OdDb::GridLineType gridlineType,
+    OdDb::RowType rowType = OdDb::kDataRow) const; 
+
+
+/** \details
+    Sets the grid visibility for the specified gridline types and row types,
+    in this TableStyle object (DXF 284-289).
+      
+    \param gridVisibility [in]  Grid visibility.      
+    \param gridlineTypes [in]  Gridline types.
+    \param rowTypes [in]  Row types.
+
+    \remarks
+    gridVisibility must be one of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kInvisible        1
+    OdDb::kVisible          0 
+    </table>
+        
+    gridlineTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kHorzTop          1
+    OdDb::kHorzInside       2
+    OdDb::kHorzBottom       4
+    OdDb::kVertLeft         8
+    OdDb::kVertInside       0x10
+    OdDb::kVertRight        0x20
+    </table>
+    
+    rowTypes must be a combination of one or more of the following:
+    
+    <table>
+    Name                    Value
+    OdDb::kTitleRow         1
+    OdDb::kHeaderRow        2
+    OdDb::kDataRow          4
+    </table>
+    
+*/
+  virtual void setGridVisibility(
+    OdDb::Visibility gridVisiblity, 
+    int gridlineTypes = OdDb::kAllGridLines, 
+    int rowTypes = OdDb::kAllRows);
+
+
+  // NEW 2007
+
+  virtual void getDataType(
+    OdValue::DataType& nDataType,
+    OdValue::UnitType& nUnitType,
+    OdDb::RowType rowType = OdDb::kDataRow ) const;
+
+  virtual void setDataType(
+    OdValue::DataType nDataType, 
+    OdValue::UnitType nUnitType,
+    int rowTypes = OdDb::kAllRows);
+
+  virtual OdString format (
+    OdDb::RowType rowType = OdDb::kDataRow) const;
+
+  virtual void setFormat(
+    const OdString& pszFormat,
+    int rowTypes = OdDb::kAllRows);
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  // virtual OdResult audit(OdDbAuditInfo* pAuditInfo);
+
+  // Utility functions
+  //
+
+  /** \details
+    Applies the default properties of the specified database to this TableStyle object.
+    
+    \param pDb [in]  Pointer to the database whose default values are to be used.
+     
+    \remarks
+    If pDb is null, the database containing this object is used
+  */
+  void setDatabaseDefaults(OdDbDatabase* pDb = 0);
+
+  /** \details
+    Adds this TableStyle object to the specified database.
+  
+    \param pDb [in]  Pointer to the database in which to post.
+    \param styleName [in]  Name for the table style. 
+    \param tableStyleId [out]  Receives 
+
+    \remarks
+    Returns the Object ID of the posted table style.
+  */
+  virtual OdDbObjectId postTableStyleToDb(OdDbDatabase* pDb, const OdString& styleName);
+
+
+  const OdString  createCellStyle(void);
+
+  void createCellStyle(const OdString& cellStyle);
+
+  void createCellStyle(const OdString& cellStyle, const OdString& fromCellStyle);
+
+  void renameCellStyle(const OdString& oldName, const OdString& newName);
+
+  void deleteCellStyle(const OdString& cellStyle);
+
+  void copyCellStyle(const OdString& srcCellStyle, const OdString& targetCellStyle);
+
+  void copyCellStyle(const OdDbTableStyle* pSrc, const OdString& srcCellStyle, const OdString& targetCellStyle);
+  
+  void getUniqueCellStyleName(const OdString& baseName, OdString& sUniqueName) const;
+
+  bool isCellStyleInUse(const OdString& cellStyle) const;
+
+  OdInt32 numCellStyles(void) const;
+
+  OdInt32 getCellStyles(OdStringArray& cellstyles) const;
+
+  OdInt32 cellStyleId(const OdString& cellStyle) const;
+  OdString cellStyleName(OdInt32 cellStyle) const;
+
+  OdDbObjectId textStyle(const OdString& cellStyle) const;
+  void setTextStyle (const OdDbObjectId& id, const OdString& cellStyle);
+
+  double textHeight(const OdString& cellStyle) const;
+  void setTextHeight(double dHeight, const OdString& cellStyle);
+
+  OdDb::CellAlignment alignment(const OdString& cellStyle) const;
+  void setAlignment(OdDb::CellAlignment alignment, const OdString& cellStyle);
+
+  OdCmColor color(const OdString& cellStyle) const;
+  void setColor(const OdCmColor& color, const OdString& cellStyle);
+
+  OdCmColor backgroundColor(const OdString& cellStyle) const;
+  void setBackgroundColor(const OdCmColor& color, const OdString& cellStyle);
+
+  void getDataType(OdValue::DataType& nDataType, OdValue::UnitType& nUnitType, const OdString& cellStyle) const;
+  void setDataType(OdValue::DataType nDataType, OdValue::UnitType nUnitType, const OdString& cellStyle);
+
+  const OdString format(const OdString& cellStyle) const;
+  void setFormat(const OdString& format, const OdString& cellStyle);
+
+  OdInt32 cellClass(const OdString& cellStyle) const;
+  void setCellClass(OdInt32 nClass, const OdString& cellStyle);
+
+  double rotation(const OdString& cellStyle) const;
+  void setRotation(double rotation, const OdString& cellStyle);
+
+  bool isMergeAllEnabled (const OdString& cellStyle) const;
+  void enableMergeAll(bool bEnable, const OdString& cellStyle);
+
+  double margin(OdDb::CellMargin nMargin, const OdString& cellStyle) const;
+  void setMargin(OdDb::CellMargin nMargins, double fMargin, const OdString& cellStyle);
+
+  //Gridline properties
+  //
+  OdDb::LineWeight gridLineWeight(OdDb::GridLineType gridLineType, const OdString& cellStyle) const;
+  void setGridLineWeight(OdDb::LineWeight lineWeight, OdDb::GridLineType gridLineTypes, const OdString& cellStyle);
+
+  OdCmColor gridColor(OdDb::GridLineType gridLineType, const OdString& cellStyle) const;
+  void setGridColor(const OdCmColor color, OdDb::GridLineType gridLineTypes, const OdString& cellStyle);
+
+  OdDb::Visibility gridVisibility(OdDb::GridLineType gridLineType, const OdString& cellStyle) const;
+  void setGridVisibility(OdDb::Visibility visible, OdDb::GridLineType gridLineTypes, const OdString& cellStyle);
+
+  double gridDoubleLineSpacing(OdDb::GridLineType gridLineType, const OdString& cellStyle) const;
+  void setGridDoubleLineSpacing(double fSpacing, OdDb::GridLineType gridLineTypes, const OdString& cellStyle);
+
+  OdDb::GridLineStyle gridLineStyle(OdDb::GridLineType gridLineType, const OdString& cellStyle) const;
+  void setGridLineStyle(OdDb::GridLineStyle nLineStyle, OdDb::GridLineType gridLineTypes, const OdString& cellStyle);
+
+  OdDbObjectId gridLinetype(OdDb::GridLineType gridLineType, const OdString& cellStyle) const;
+  void setGridLinetype(const OdDbObjectId& id, OdDb::GridLineType gridLineTypes, const OdString& cellStyle);
+
+  void getGridProperty(OdGridProperty& gridProp, OdDb::GridLineType nGridLineTypes, const OdString& cellStyle) const;
+  void setGridProperty (const OdGridProperty& gridProp, OdDb::GridLineType nGridLineTypes, const OdString& cellStyle);
+
+  virtual OdResult subGetClassID(void* pClsid) const;
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbTableStyle object pointers.
+*/
+typedef OdSmartPtr<OdDbTableStyle> OdDbTableStylePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBTABLESTYLE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbText.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbText.h
new file mode 100755
index 0000000..3d8f34b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbText.h
@@ -0,0 +1,431 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBTEXT_H
+#define OD_DBTEXT_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "TextDefs.h"
+
+/** \details
+    <group OdDb_Classes>
+
+    This class represents single-line text entities in an OdDbDatabase instance.
+  
+    Library: TD_Db
+
+    \sa
+    <link db_text_single.html, Working with Single-Line Text>
+
+    OdDbMText, OdDbShape classes
+*/
+class TOOLKIT_EXPORT OdDbText: public OdDbEntity
+{
+public:
+  
+  ODDB_DECLARE_MEMBERS(OdDbText);
+  
+  OdDbText();
+  
+  /** \details
+    Returns the position of this entity (WCS equivalent of DXF 10).
+  */
+  OdGePoint3d position() const;
+  
+  /** \details
+    Sets the position of this entity (WCS equivalent of DXF 10).
+
+    \param position [in]  Position.
+  */
+  void setPosition(
+    const OdGePoint3d& position);
+  
+  /** \details
+    Returns the alignment point of this Text entity (WCS equivalent of DXF 11).
+  */
+  OdGePoint3d alignmentPoint() const;
+  
+  /** \details
+    Sets the alignment point of this Text entity (WCS equivalent of DXF 11).
+    \param alignment [in]  Alignment point.
+  */
+  void setAlignmentPoint(
+    const OdGePoint3d& alignment);
+  
+  /** \details
+    Return true if and only if this Text entity is in the default alignment.
+    \remarks
+    The default alignment is when horizontal mode is OdDb::kTextLeft and vertical mode is OdDb::kTextBase, or when horizontal mode is OdDb::kTextMiddle
+  */
+  bool isDefaultAlignment() const;
+  
+  /** \details
+    Returns the WCS normal to the plane of this entity (DXF 210).
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this entity (DXF 210).
+    \param normal [in]  Normal.
+  */
+  void setNormal(
+    const OdGeVector3d& normal);
+ 
+  /** \remarks
+      Always returns true.
+  */
+  virtual bool isPlanar() const { return true; }
+  
+  virtual OdResult getPlane(
+    OdGePlane& plane, 
+    OdDb::Planarity& planarity) const;
+  
+  /** \details
+    Returns the thickness of this entity (DXF 39).
+    
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  double thickness() const;
+  
+  /** \details
+    Sets the thickness of this entity (DXF 39).
+    \param thickness [in]  Thickness.
+    \remarks
+    Thickness is the extrusion length along the normal.
+  */
+  void setThickness(
+    double thickness);
+  
+  /** \details
+    Returns the oblique angle of this Text entity (DXF 51).
+
+    \remarks
+    The range of oblique is �1.48335 radians (�85�).
+    
+    Oblique angles are measured clockwise from the vertical.
+
+    \note
+    All angles are expressed in radians.  
+  */
+  double oblique() const;
+  
+  /** \details
+    Sets the oblique angle of this Text entity (DXF 51).
+    \param oblique [in]  Oblique angle.
+    
+    \remarks
+    The range of oblique is �1.48335 radians (�85�).
+    
+    Oblique angles are measured clockwise from the vertical.
+     
+    \note
+    All angles are expressed in radians.  
+  */
+  void setOblique(
+    double oblique);
+  
+  /** \details
+    Returns the rotation angle of this Text entity (DXF 50).
+    \note
+    All angles are expressed in radians.
+  */
+  double rotation() const;
+  
+  /** \details
+    Sets the rotation angle of this Text entity (DXF 50).
+    \param rotation [in]  Rotation angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void setRotation(
+    double rotation);
+  
+  /** \details
+    Returns the height of this Text entity (DXF 40).
+  */
+  double height() const;
+
+  /** \details
+    Sets the height of this Text entity (DXF 40).
+    \param height [in]  Text height.
+  */
+  void setHeight(
+    double height);
+  
+  /** \details
+    Returns the width factor of this Text entity (DXF 41).
+  */
+  double widthFactor() const;
+  
+  /** \details
+    Sets the width factor of this Text entity (DXF 40).
+    \param widthFactor [in]  Width factor.  
+  */
+  void setWidthFactor(
+    double widthFactor);
+  
+  /** Returns true if and only if this Text entity is mirrored in the X (horizontal) direction (DXF 71, bit 0x02).
+  */
+  bool isMirroredInX() const;
+  
+  /** Controls the mirroring of this Text entity in the X (horizontal) direction (DXF 71, bit 0x02).
+    \param mirror [in]  Controls mirroring.
+  */
+  void mirrorInX(
+    bool mirror);
+  
+  /** Returns true if and only if this Text entity is mirrored in the Y (vertical) direction (DXF 71, bit 0x04).
+  */
+  bool isMirroredInY() const;
+  
+  /** Controls the mirroring of this Text entity in the Y (vertical) direction (DXF 71, bit 0x04).
+    \param mirror [in]  Controls mirroring.
+  */
+  void mirrorInY(
+    bool mirror);
+  
+  /** \details
+    Returns the text string of this Text entity (DXF 1).
+  */
+  OdString textString() const;
+  
+  /** \details
+    Sets the text string of this Text entity (DXF 1).
+    \param textString [in]  Text string.
+    
+    \note
+    textString cannot exceed 256 characters excluding the null terminator.
+  */
+  void setTextString(
+    const OdString& textString);
+  
+  /** \details
+    Returns the Object ID of the text style of this Text entity (DXF 7).
+  */
+  OdDbObjectId textStyle() const;
+  
+  /** \details
+    Sets the Object ID of the text style of this Text entity (DXF 7).
+    \param textStyleId [in]  Text style Object ID.
+  */
+  void setTextStyle(
+    OdDbObjectId textStyleId);
+  
+  /** \details
+    Returns the horizontal mode of this Text entity (DXF 72).
+
+    \remarks
+    horizontalMode returns one of the following:
+    
+    <table>
+    Name                 Value
+    OdDb::kTextLeft      0
+    OdDb::kTextCenter    1 
+    OdDb::kTextRight     2
+    OdDb::kTextAlign     3
+    OdDb::kTextMid       4    
+    OdDb::kTextFit       5
+    </table>
+  */
+  OdDb::TextHorzMode horizontalMode() const;
+  
+  /** \details
+    Returns the horizontal mode of this Text entity (DXF 72).
+
+    \param horizontalMode [in]  Horizontal mode.
+
+    \remarks
+    horizontalMode returns one of the following:
+    
+    <table>
+    Name                 Value
+    OdDb::kTextLeft      0
+    OdDb::kTextCenter    1 
+    OdDb::kTextRight     2
+    OdDb::kTextAlign     3
+    OdDb::kTextMid       4    
+    OdDb::kTextFit       5
+    </table>
+  */
+  void setHorizontalMode(OdDb::TextHorzMode horizontalMode);
+  
+  /** \details
+    Returns the vertical mode of this Text entity (DXF 73).
+
+    \remarks
+    verticalMode() returns one of the following:
+    
+    <table>
+    Name                 Value
+    OdDb::kTextBase      0
+    OdDb::kTextBottom    1 
+    OdDb::kTextVertMid   2
+    OdDb::kTextTop       3
+    </table>
+  */
+  OdDb::TextVertMode verticalMode() const;
+
+  /** \details
+    Sets the vertical mode of this Text entity (DXF 73).
+
+    \param verticalMode [in]  Vertical mode.
+    \remarks
+    verticalMode must be one of the following:
+    
+    <table>
+    Name                 Value
+    OdDb::kTextBase      0
+    OdDb::kTextBottom    1 
+    OdDb::kTextVertMid   2
+    OdDb::kTextTop       3
+    </table>
+  */
+  void setVerticalMode(
+    OdDb::TextVertMode verticalMode);
+  
+  /** \details
+    Evokes the spell checker on this Text entity.
+    
+    \remarks
+    Returns 0 is successful, or 1 if not.
+  */
+  int correctSpelling();
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+  
+  /** \details
+    Adjusts the position of this Text entity if its alignent is not left baseline.
+    
+    \param pDb [in]  Pointer to database used to resolve the text style of this
+            Text entity.
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    \note
+    This function is called by Teigha when a Text entity is closed.
+
+    If this Text entity is database resident, pDb is ignored.
+    
+    If this Text entity is not database resident, pDb cannot be NULL.
+  */
+  virtual void adjustAlignment(
+    OdDbDatabase* pDb = 0);
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+  
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+  
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+  
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+  
+  void subClose();
+  
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  virtual OdResult subGetTransformedCopy(
+    const OdGeMatrix3d& xfm, 
+    OdDbEntityPtr& pCopy) const ODRX_OVERRIDE;
+
+  /** \details
+    Returns the WCS bounding points of this Text entity.
+    
+    \param boundingPoints [out]  Receives the bounding points.
+    
+    \remarks
+    The points are returned as follows:
+    
+    <table>
+    Point                Corner
+    boundingPoints[0]    Top left
+    boundingPoints[1]    Top right
+    boundingPoints[2]    Bottom right
+    boundingPoints[3]    Bottom left
+    </table>
+  */
+  void getBoundingPoints(
+    OdGePoint3dArray& boundingPoints) const;
+
+  /* Constructor. */
+  /*OdDbText(const OdGePoint3d& position,
+      const OdChar* text,
+      OdDbObjectId style = OdDbObjectId::kNull,
+      double height = 0,
+      double rotation = 0);
+  */
+
+  OdDbObjectId setField(
+    const OdString& fieldName, 
+    OdDbField* pField);
+  OdResult removeField(
+    OdDbObjectId fieldId);
+  OdDbObjectId removeField(
+    const OdString& fieldName);
+
+  /** \details
+    Converts the fields in this Text entity to text, and removes the fields.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    The fields are not evaluated before conversion.
+  */
+  void convertFieldToText();
+
+  /** \note
+    This function is an override for OdDbEntity::subSetDatabaseDefaults() to set 
+    the text style of this entity to the current style and text size for the specified database.
+  */
+  virtual void subSetDatabaseDefaults(OdDbDatabase *pDb, bool doSubents) ODRX_OVERRIDE;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbText object pointers.
+*/
+typedef OdSmartPtr<OdDbText> OdDbTextPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDBTEXT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextIterator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextIterator.h
new file mode 100755
index 0000000..a17e663
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextIterator.h
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbTextIterator_h_Included_
+#define _DbTextIterator_h_Included_
+
+#include "DbExport.h"
+#include "OdCodePage.h"
+#include "Gi/GiTextStyle.h"
+
+class TOOLKIT_EXPORT OdDbTextIterator;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbTextIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbTextIterator> OdDbTextIteratorPtr;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class can can be used to parse the text received in a client override of
+    OdGiConveyorGeometry::textProc.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbTextIterator : public OdBaseTextIterator
+{
+public:
+  /** \details
+    Creates an TextIterator object for the specified data.
+
+    \param textString [in]  Text string to be parsed.
+    \param length [in]  Length of string in bytes.
+    \param raw [in]  If and only if true, character sequences in the form of %%c will be treated as raw text.
+    \param codePageId [in]  Object ID of the Code Page of the text.
+    \param pTextStyle [in]  Pointer to the TextStyle object associated with the specified text.
+
+    \remarks
+    Returns a SmartPointer to the new OdDbTextIterator object.
+  */
+  static OdDbTextIteratorPtr createObject(const OdChar* textString, 
+                                          int length, 
+                                          bool raw, 
+                                          OdCodePageId codePageId, 
+                                          const OdGiTextStyle* pTextStyle);
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTable.h
new file mode 100755
index 0000000..cbe0e1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTable.h
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBTEXTSTYLETABLE_INCLUDED
+#define _ODDBTEXTSTYLETABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTable.h"
+
+class OdDbTextStyleTableRecord;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /text style table/ object, which represents a container for 
+  storing and accessing of /text style record/ objects in the database. This class inherits 
+  the base functionality of predefined tables.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_textstyle_sample_table.html, Example of Working with the Text Style Table Object>
+
+  <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+  \sa
+  <link db_textstyle.html, Working with Text Styles>
+
+  OdDbTextStyleTableRecord class
+*/
+class TOOLKIT_EXPORT OdDbTextStyleTable: public OdDbSymbolTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbTextStyleTable);
+
+  /** \details
+    Builds an instance of the /text style table/ object.
+    
+    Applications typically will not use this constructor, insofar as the database object 
+    creates own instance of the text style table. The /text style table/ object exists in 
+    the database a prior.
+  */
+  OdDbTextStyleTable();
+
+  typedef OdDbTextStyleTableRecord RecordType;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  /** \details
+    Adds an instance of the /text style record/ object in the container of the /text style table/ 
+    object. This method is inherited from the OdDbSymbolTable class which is base class for all 
+    predefined tables. For more details, see: OdDbSymbolTable::add() method.
+  */
+  virtual OdDbObjectId add( OdDbSymbolTableRecord* pRecord );
+};
+
+/** \details
+  The typified smart pointer for the /text style table/ object. This template class is specialization 
+  of the OdSmartPtr class for the OdDbTextStyleTable object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbTextStyleTable> OdDbTextStyleTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBTEXTSTYLETABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTableRecord.h
new file mode 100755
index 0000000..3586adb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTextStyleTableRecord.h
@@ -0,0 +1,483 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBTEXTSTYLETABLERECORD_INCLUDED
+#define _ODDBTEXTSTYLETABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /text style record/ object, which represents a text style in 
+  the database. This class inherits the base functionality of named records. 
+
+  \sa
+  TD_Db
+    
+  \sa
+  <link db_textstyle_sample_table.html, Example of Working with the Text Style Table Object>
+
+  <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+  \sa
+  <link db_textstyle.html, Working with Text Styles>
+
+  OdDbTextStyleTable class
+*/
+class TOOLKIT_EXPORT OdDbTextStyleTableRecord : public OdDbSymbolTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbTextStyleTableRecord);
+
+  /** \details
+    Builds an instance of the /text style record/ object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_textstyle_add_name.html, Adding and Naming Text Styles>
+  */
+  OdDbTextStyleTableRecord();
+
+
+  /** \details
+    Determines whether the font file associated with this text style should be interpreted as  
+    a set of shapes or letters (DXF 70, bit 0x01) and returns True if the font file is a set 
+    of shapes or False if the font file is a set of letters. 
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::setIsShapeFile() method
+  */
+  bool isShapeFile() const;
+
+
+  /** \details
+    Sets the interpretation of the associated font file as a Boolean value (DXF 70, bit 0x01). 
+    The initial value is False (Letters) by default.
+
+    \param bShapeFile [in]  True - to determine the font file as a set of shapes, or
+                   False - to determine the font file as a set of letters.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::isShapeFile() method
+  */
+  void setIsShapeFile( bool bShapeFile );
+
+
+  /** \details
+    Determines whether text is drawn vertically or horizontally from the start position 
+    (DXF 70, bit 0x04) and returns True if text is vertical or False if text is horizontal.
+    
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::setIsVertical() method
+  */
+  bool isVertical() const;
+
+
+  /** \details
+    Sets the orientation typeface as a Boolean value (DXF 70, bit 0x04). The initial value is False 
+    (Horizontal) by default.
+
+    \param bVertical [in]  True - to make the vertical text, or False - to make the horizontal text.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::isVertical() method
+  */
+  void setIsVertical( bool bVertical );
+
+
+  /** \details
+    Determines whether text is drawn backward or forward from the start position 
+    (DXF 71, bit 0x02) and returns True if text is backward or False if text is forward.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::setIsBackwards() method
+  */
+  bool isBackwards() const;
+
+
+  /** \details
+    Sets the direction typeface as a Boolean value (DXF 71, bit 0x02). The initial value is False 
+    (Forward) by default.
+    
+    \param bBackwards [in]  True - to draw the text backward, or False - to draw the text forward.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::isBackwards() method
+  */
+  void setIsBackwards( bool bBackwards );
+
+
+  /** \details
+    Determines whether letters are placed up or down relative to the baseline when text is drawn 
+    (DXF 71, bit 0x04) and returns True if letters are placed up or False if letters are placed 
+    upside down.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::setIsUpsideDown() method
+  */
+  bool isUpsideDown() const;
+
+
+  /** \details
+    Sets the letter side typeface as a Boolean value (DXF 71, bit 0x04). The initial value is False 
+    (Upside) by default.
+    
+    \param bUpsideDown [in]  True - to draw the text downside, or False - to draw the text upside.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::isUpsideDown() method
+  */
+  void setIsUpsideDown( bool bUpsideDown );
+
+
+  /** \details
+    Returns the height scale factor of the text boundary (DXF 40). This factor influences on the width 
+    and height together and is used for proportional scaling of letters, spaces, and the text boundary.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::setTextSize() method
+  */
+  double textSize() const;
+
+
+  /** \details
+    Sets the text size which is the height scale factor of the text boundary (DXF 40). This factor 
+    influences on the text width and text height together and is used for proportional scaling of 
+    letters, spaces, and the text boundary. A value less than 1.0 decreases the text. A value 
+    greater than 1.0 increases the text. The initial value is 0.0 by default.
+
+    \param vSize [in]  Text size as a positive Double value.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::textSize() method
+  */
+  void setTextSize( double vSize );
+
+
+  /** \details
+    Returns the width scale factor of the text boundary (DXF 41). This factor influences only on the 
+    width and is used for scaling of letters and spaces when the height is constant.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::setXScale() method
+  */
+  double xScale() const;
+
+
+  /** \details
+    Sets the width scale factor of the text boundary (DXF 41). This factor influences only on the  
+    text width and is used for scaling of letters and spaces when the height is constant. A value 
+    less than 1.0 condenses the text. A value greater than 1.0 expandes the text. The initial value 
+    is 1.0 by default.
+
+    \param xFactor [in]  X-scale factor as a positive non-zero Double value.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::xScale() method
+  */
+  void setXScale( double xFactor );
+
+
+  /** \details
+    Returns the obliquing angle in range �1.48335 radians (�85�) (DXF 50). This angle influences on
+    the lean of letters. Negative angles will have Oda2PI added to them.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::setObliquingAngle() method
+  */
+  double obliquingAngle() const;
+
+
+  /** \details
+    Sets the obliquing angle of letters in range �1.48335 radians (�85�) (DXF 50). A positive angle 
+    leans the letters clockwise (to the right). A negative value leans the letters counterclockwise 
+    (to the left). A negative value is converted to its positive equivalent by adding the value 2*PI. 
+    The initial value is 0.0 by default.
+    
+    \param vAngle [in]  Obliquing angle in radians as a Double value in range �1.48335.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::obliquingAngle() method
+  */
+  void setObliquingAngle( double vAngle );
+
+
+  /** \details
+    Returns the prior size of the text most recently created with this text style (DXF 42). This value  
+    is automatically updated after creating any text object that refers to this text style. This value 
+    is also used as a default value when the height scale factor is set to zero.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::setPriorSize() method
+  */
+  double priorSize() const;
+
+
+  /** \details
+    Sets the prior size of the text most recently created with this text style (DXF 42). This value  
+    is automatically updated after creating any text object that refers to this text style.
+    
+    \param vSize [in]  Prior size as a positive non-zero Double value.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_properties.html, Specific Properties of Text Styles>
+
+    OdDbTextStyleTableRecord::priorSize() method
+  */
+  void setPriorSize( double vSize );
+
+
+  /** \details
+    Returns the name of the /uni-font/ file associated with this text style (DXF 3).
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::setFileName(), OdDbTextStyleTableRecord::bigFontFileName() methods
+  */
+  OdString fileName() const;
+
+
+  /** \details
+    Sets the name of the /uni-font/ file and associates this uni-font with the text style (DXF 3). 
+    This /uni-font/ defines the shape of typical letters for text.
+
+    \param sUniFont [in]  Uni-font filename without path to be associated with the text style as a String value.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::fileName(), OdDbTextStyleTableRecord::setBigFontFileName() methods
+  */
+  void setFileName( const OdString& sUniFont );
+
+
+  /** \details
+    Returns the name of the /big-font/ file associated with this text style (DXF 4).
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::setBigFontFileName(), OdDbTextStyleTableRecord::fileName() methods
+  */
+  OdString bigFontFileName() const;
+
+
+  /** \details
+    Sets the name of the /big-font/ file and associates this big-font with the text style (DXF 4). 
+    This /big-font/ defines the shape of Asian-language letters and special characters for text.
+
+    \param sBigFont [in]  Big-font filename without path to be associated with the text style as a String value.
+
+    \sa
+    <link db_textstyle_sample_record.html, Example of Working with the Text Style Record Object>
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::bigFontFileName(), OdDbTextStyleTableRecord::setFileName() methods
+  */
+  void setBigFontFileName( const OdString& sBigFont );
+
+
+  /** \details
+    Gets the characteristics of the Windows-font associated with the text style.
+
+    \param typeface [out]  Typeface name of the /Windows-font/.
+    \param bold [out]  True if and only if Bold font.
+    \param italic [out]  True if and only if Italic font.
+    \param charset [out]  Windows character set identitier.
+    \param pitchAndFamily [out]  Windows pitch and character family identifier.
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::setFont() method
+  */
+  void font( OdString& typeface,
+	     bool& bold,
+	     bool& italic,
+	     int& charset,
+	     int& pitchAndFamily) const;
+
+
+  /** \details
+    Associates the /Windows-font/ with the text style and sets its characteristics.
+
+    \param typeface [in]  Typeface name of the /Windows-font/.
+    \param bold [in]  True - to set the Bold font.
+    \param italic [in]  True - to set the Italic font.
+    \param charset [in]  Windows character set identitier.
+    \param pitchAndFamily [in]  Windows pitch and character family identifier.
+    
+    \remarks
+    If typeface is an empty string, this method disassociates the /Windows-font/ with this text style
+    and removes information about it.
+
+    \sa
+    <link db_textstyle_font.html, Fonts of Text Styles>
+
+    OdDbTextStyleTableRecord::font() method
+  */
+  void setFont( const OdString& typeface,
+		bool bold,
+		bool italic,
+		int charset,
+		int pitchAndFamily);
+
+
+  virtual OdResult subGetClassID( void* pClsid ) const;
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );
+
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields( OdDbDxfFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields_R12( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields_R12( OdDbDxfFiler* pFiler ) const;
+  
+  OdResult dxfIn( OdDbDxfFiler* pFiler );
+
+  virtual void subClose();
+
+  virtual OdResult subErase( bool erasing );
+
+  virtual void subHandOverTo( OdDbObject* pNewObject );
+
+  virtual OdUInt32 subSetAttributes( OdGiDrawableTraits* pTraits ) const;
+};
+
+/** \details
+  The typified smart pointer for the /text style record/ object. This template class is 
+  specialization of the OdSmartPtr class for the OdDbTextStyleTableRecord object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbTextStyleTableRecord> OdDbTextStyleTableRecordPtr;
+
+class OdGiTextStyle;
+TOOLKIT_EXPORT void giFromDbTextStyle(const OdDbTextStyleTableRecord* pTStyle, OdGiTextStyle& giStyle);
+TOOLKIT_EXPORT void giFromDbTextStyle(OdDbObjectId styleId, OdGiTextStyle& giStyle);
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBTEXTSTYLETABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTrace.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTrace.h
new file mode 100755
index 0000000..7a2dad2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTrace.h
@@ -0,0 +1,270 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_TRACE_
+#define _OD_DB_TRACE_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the two-dimensional /solid-filled/ object (Trace entity) in the database. 
+  This class inherits the base functionality of entities. 
+  
+  \sa
+  TD_Db
+
+  \sa
+  <link db_trace_sample.html, Example of Working with the Trace Object>
+
+  \sa
+  <link db_trace.html, Working with Traces>
+
+  OdDbSolid, OdDbEntity classes
+*/
+class TOOLKIT_EXPORT OdDbTrace : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbTrace);
+
+  /** \details
+    Builds an instance of the /2D solid-filled/ entity.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_trace_overview.html, Overview of Traces>
+  */
+  OdDbTrace();
+
+  /* OdDbTrace(const OdGePoint3d& pt0,
+       const OdGePoint3d& pt1,
+       const OdGePoint3d& pt2,
+       const OdGePoint3d& pt3);
+  */
+
+  /** \details
+    Gets the WCS coordinates of the vertex belonged to the trace entity using the specified 
+    index (DXF 10, 11, 12, or 13).
+
+    \param pointIndex [in]  Vertex index 0, 1, 2, or 3.
+    \param pointValue [out]  Reference to a variable in which this method must save the trace vertex 
+                   as three-dimensional point instance.
+
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace_specific.html, Specific Trace Properties>
+
+    OdDbTrace::setPointAt() method
+  */
+  void getPointAt( int pointIndex, OdGePoint3d& pointValue ) const;
+
+  
+  /** \details
+    Sets the WCS coordinates of the vertex belonged to the trace entity using the 
+    specified index (DXF 10, 11, 12, or 13).
+
+    \param pointIndex [in]  Vertex index 0, 1, 2, or 3.
+    \param pointValue [in]  Three-dimensional point instance to set the vertex position.
+
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace_specific.html, Specific Trace Properties>
+
+    OdDbTrace::getPointAt() method
+  */
+  void setPointAt( int pointIndex, const OdGePoint3d& pointValue );
+
+
+  /** \details
+    Returns the thickness of the trace entity (DXF 39) in drawing units. Thickness is the 
+    extrusion length along the normal. A positive value defines the thickness to be drawn 
+    along the normal direction. A negative value defines the thickness to be drawn in the 
+    opposite direction from the normal. A zero value defines a trace without thickness.
+
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace_specific.html, Specific Trace Properties>
+
+    OdDbTrace::setThickness() method
+  */
+  double thickness() const;
+
+
+  /** \details
+    Sets the thickness of the trace entity (DXF 39) in drawing units. Thickness is the 
+    extrusion length along the normal. A positive value extrudes along the normal. 
+    A negative value extrudes opposite from the normal. A zero value defines a trace  
+    without thickness. The initial value is zero by default.
+
+    \param vThickness [in]  Thickness as a Double value.
+    
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace_specific.html, Specific Trace Properties>
+
+    OdDbTrace::thickness() method
+  */
+  void setThickness( double vThickness );
+
+
+  /** \details
+    Returns the WCS unit vector which is the normal to the plane of the trace entity 
+    (DXF 210). The normal defines the orientation of the trace plane in world space.
+
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace_specific.html, Specific Trace Properties>
+
+    OdDbTrace::setNormal() method
+  */
+  OdGeVector3d normal() const;
+
+  
+  /** \details
+    Sets the WCS normal to the plane of the trace entity (DXF 210). The normal defines 
+    the orientation of the trace plane in world space. The initial value is (0,0,1) by default.
+
+    \param geVector [in]  Three-dimensional vector instance to set the normal.
+
+    \remarks
+    This method automatically converts the specified vector to the unit vector.
+
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace_specific.html, Specific Trace Properties>
+
+    OdDbTrace::normal() method
+  */
+  void setNormal( const OdGeVector3d& geVector );
+
+
+  /** \details
+    Determines whether vertices of the trace entity place in the same plane as a Boolean value
+    and returns True if the entity is planar or False if the entity is non-planar.
+    This method is inherited from the OdDbEntity class.
+
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace.html, Working with Traces>
+
+    OdDbTrace::getPlane(), OdDbEntity::isPlanar() methods
+  */
+  virtual bool isPlanar() const;
+
+
+  /** \details
+    Gets the trace plane. This method is inherited from the OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the trace plane
+                parameters as a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type
+                    kNonPlanar - non-planar, kPlanar - planar entity, kLinear - arbitrary plane.
+
+    \sa
+    <link db_trace_sample.html, Example of Working with the Trace Object>
+
+    \sa
+    <link db_trace.html, Working with Traces>
+
+    OdDbTrace::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
+                                        OdGsMarker gsMark, 
+                                        const OdGePoint3d& ,
+                                        const OdGeMatrix3d& , 
+                                        OdDbFullSubentPathArray& subentPaths, 
+                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
+
+
+  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
+                                        OdGsMarkerArray& gsMarkers) const;
+
+  OdGeMatrix3d getEcs( ) const;
+};
+
+/** \details
+  The typified smart pointer for the two-dimensional /solid-filled/ object (Trace entity). 
+  This template class is specialization of the OdSmartPtr class for the OdDbTrace class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbTrace> OdDbTracePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTransactionReactor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTransactionReactor.h
new file mode 100755
index 0000000..b5e3b79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTransactionReactor.h
@@ -0,0 +1,177 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBTRANSACTIONREACTOR_INCLUDED_
+#define _ODDBTRANSACTIONREACTOR_INCLUDED_
+
+#include "TD_PackPush.h"
+
+class OdDbDatabase;
+
+#include "RxObject.h"
+
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdDbTransaction events.
+
+    \note
+    The default implementations of all methods in this class do nothing but return.
+
+    \sa
+    TD_Db
+        
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbTransactionReactor : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbTransactionReactor);
+  
+  OdDbTransactionReactor() {}
+  /** \details
+    Notification function called to indicate a new transaction is about to start.
+    
+    \param pDb [in]  Pointer to the database sending the notification.
+    
+    \sa
+    * transactionAborted
+    * transactionAboutToAbort
+    * transactionAboutToEnd
+    * transactionEnded
+    * transactionStarted
+  */
+  virtual void transactionAboutToStart(
+    OdDbDatabase* pDb);
+  
+  /** \details
+    Notification function called to indicate a new transaction has started.
+    
+    \param pDb [in]  Pointer to the database sending the notification.
+    
+    \sa
+    * transactionAborted
+    * transactionAboutToAbort
+    * transactionAboutToEnd
+    * transactionAboutToStart
+    * transactionEnded
+  */
+  virtual void transactionStarted(
+    OdDbDatabase* pDb);
+
+  /** \details
+    Notification function called to indicate a transaction is about to end.
+    
+    \param pDb [in]  Pointer to the database sending the notification.
+    
+    \sa
+    * transactionAborted
+    * transactionAboutToAbort
+    * transactionAboutToStart
+    * transactionEnded
+    * transactionStarted
+  */
+  virtual void transactionAboutToEnd(
+    OdDbDatabase* pDb);
+
+  /** \details
+    Notification function called to indicate a transaction has ended.
+    
+    \param pDb [in]  Pointer to the database sending the notification.
+    
+    \sa
+    * transactionAborted
+    * transactionAboutToAbort
+    * transactionAboutToEnd
+    * transactionAboutToStart
+    * transactionStarted
+  */
+  virtual void transactionEnded(
+    OdDbDatabase* pDb);
+
+  /** \details
+    Notification function called to indicate a transaction is about to be terminated.
+    
+    \param pDb [in]  Pointer to the database sending the notification.
+    
+    \sa
+    * transactionAborted
+    * transactionAboutToEnd
+    * transactionAboutToStart
+    * transactionEnded
+    * transactionStarted
+  */
+  virtual void transactionAboutToAbort(
+    OdDbDatabase* pDb);
+
+  /** \details
+    Notification function called to indicate a transaction has been terminated.
+    
+    \param pDb [in]  Pointer to the database sending the notification.
+    
+    \sa
+    * transactionAboutToAbort
+    * transactionAboutToEnd
+    * transactionAboutToStart
+    * transactionEnded
+    * transactionStarted
+  */
+  virtual void transactionAborted(
+    OdDbDatabase* pDb);
+
+  /** \details
+    Notification function called to indicate the outermost transaction has ended.
+    
+    \param pDb [in]  Pointer to the database sending the notification.
+  */
+  virtual void endCalledOnOutermostTransaction(
+    OdDbDatabase* pDb);
+
+  /** \details
+    Notification function called when the transaction resident object is involved in a swapIdWith() operation.
+    
+    \param pTransObj [in]  Pointer to the first transaction resident object.
+    \param pOtherTransObj [in]  Pointer to the second transaction resident object.
+    \param pDb [in]  Pointer to the database sending the notification.
+
+    \remarks
+    According to database transactions implementation the both objects are transaction-resident or not.
+    So this function will be called only once in OdDbObject::swapIdWith() method.
+  */
+  virtual void objectIdSwapped(
+    const OdDbObject* pTransObj,
+    const OdDbObject* pOtherTransObj,
+    OdDbDatabase* pDb);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbTransactionReactor object pointers.
+*/
+typedef OdSmartPtr<OdDbTransactionReactor> OdDbTransactionReactorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBTRANSACTIONREACTOR_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTypedId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTypedId.h
new file mode 100755
index 0000000..d426103
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbTypedId.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBTYPEDID_INCLUDED_
+#define _ODDBTYPEDID_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbObjectId.h"
+
+
+/** \details
+    This class adds reference types to memory-resident Object ID objects for OdDbDatabase objects.  
+
+    <group OdDb_Classes>
+*/
+class OdDbTypedId : public OdDbObjectId
+{
+  OdDb::ReferenceType m_rt;
+
+public:
+  /** \param source [in]  Source object.
+    \param refType [in]  Reference type.
+  */
+  OdDbTypedId( OdDbObjectId source = 0, OdDb::ReferenceType refType = OdDb::kSoftPointerRef ) 
+      : OdDbObjectId(source), m_rt(refType) { }
+
+  /** \details
+    Returns the refernece type for this TypedId object.
+  */
+	OdDb::ReferenceType getRefType() const { return m_rt; }
+  /** \details
+    Sets the refernece type for this TypedId object.
+
+    \param refType [in]  Reference type.
+  */
+	void setRefType(OdDb::ReferenceType refType) { m_rt = refType; }
+	OdDbTypedId& operator=(const OdDbObjectId& rhs)	{	*((OdDbObjectId*)this) = rhs; return *this; }
+};
+
+#include "TD_PackPop.h"
+
+#endif //_ODDBTYPEDID_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTable.h
new file mode 100755
index 0000000..013a155
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTable.h
@@ -0,0 +1,86 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBUCSTABLE_INCLUDED
+#define _ODDBUCSTABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTable.h"
+
+class OdDbUCSTableRecord;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the /UCS table/ object, which represents a container for storing and 
+  accessing of UCS record objects in the database. The UCS is user coordinate system. This 
+  class inherits the base functionality of predefined tables.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_ucs_sample_table.html, Example of Working with the UCS Table Object>
+
+  <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+  \sa
+  <link db_ucs.html, Working with UCSs>
+
+  OdDbUCSTableRecord class
+*/
+class TOOLKIT_EXPORT OdDbUCSTable: public OdDbSymbolTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbUCSTable);
+
+  /** \details
+    Builds an instance of the /UCS table/ object.
+    
+    Applications typically will not use this constructor, insofar as the database object 
+    creates own instance of the UCS table. The /UCS table/ object exists in the database 
+    a prior.
+  */
+  OdDbUCSTable();
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+
+/** \details
+  The typified smart pointer for the /UCS table/ object. This template class is specialization 
+  of the OdSmartPtr class for the OdDbUCSTable object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbUCSTable>  OdDbUCSTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBUCSTABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTableRecord.h
new file mode 100755
index 0000000..8a9b6f3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUCSTableRecord.h
@@ -0,0 +1,238 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBUCSTABLERECORD_INCLUDED
+#define _ODDBUCSTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbSymbolTableRecord.h"
+#include "ViewportDefs.h"
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the UCS record object, which represents a UCS in the database. 
+  The UCS is user coordinate system. This class inherits the base functionality of named 
+  records. 
+
+  \sa
+  TD_Db
+    
+  \sa
+  <link db_ucs_sample_table.html, Example of Working with the UCS Table Object>
+
+  <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+  \sa
+  <link db_ucs.html, Working with UCSs>
+
+  OdDbUCSTable class
+*/
+class TOOLKIT_EXPORT OdDbUCSTableRecord: public OdDbSymbolTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbUCSTableRecord);
+
+  /** \details
+    Builds an instance of the UCS record object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_ucs_add_name.html, Adding and Naming UCSs>
+  */
+  OdDbUCSTableRecord();
+
+
+  /** \details
+    Returns three-dimensional point of the origin of the user coordinate system (UCS) 
+    in the world coordinate system (WCS) for the UCS record object (DXF 10).
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::setOrigin() method
+  */
+  OdGePoint3d origin() const;
+
+
+  /** \details
+    Sets the origin of the user coordinate system (UCS) relative to the origin of the  
+    world coordinate system (WCS) for the UCS record object (DXF 10).
+    
+    \param gePoint  [in] Three-dimensional point instance which stores the X,Y,Z coordinates of the origin.
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::origin() method
+  */
+  void setOrigin( const OdGePoint3d& gePoint );
+
+
+  /** \details
+    Returns three-dimensional vector of the X-axis of the user coordinate system (UCS) 
+    in the world coordinate system (WCS) for the UCS record object (DXF 11).
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::setXAxis() method
+  */
+  OdGeVector3d xAxis() const;
+
+
+  /** \details
+    Sets the three-dimensional vector of the X-axis of the user coordinate system (UCS)
+    relative to X-axis of the world coordinate system (WCS) for the UCS record object (DXF 11).
+    
+    \param geXVector [in] Three-dimensional vector instance which stores the X,Y,Z coordinates of the X-axis.
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::xAxis() method
+  */
+  void setXAxis( const OdGeVector3d& geXVector );
+
+
+  /** \details
+    Returns three-dimensional vector of the Y-axis of the user coordinate system (UCS) 
+    in the world coordinate system (WCS) for the UCS record object (DXF 12).
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::setYAxis() method
+  */
+  OdGeVector3d yAxis() const;
+
+
+  /** \details
+    Sets the three-dimensional vector of the Y-axis of the user coordinate system (UCS)
+    relative to Y-axis of the world coordinate system (WCS) for the UCS record object (DXF 12).
+    
+    \param geYVector [in] Three-dimensional vector instance which stores the X,Y,Z coordinates of the Y-axis.
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::yAxis() method
+  */
+  void setYAxis( const OdGeVector3d& geYVector );
+
+
+  /** \details
+    Returns the three-dimensional point of the origin of the user coordinate system (UCS)
+    for the specified orthographic view in the world coordinate system (WCS) (DXF 13), when 
+    the UCSBASE system variable is set to this UCS record object.
+    
+    \param nView [in]  Identifier of the orthographic view.
+
+    \remarks
+    The orthographic view identifier can take the following values: 1-Top, 2-Bottom, 3-Front, 
+    4-Back, 5-Left, 6-Right.
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::setUcsBaseOrigin() method
+  */
+  OdGePoint3d ucsBaseOrigin(OdDb::OrthographicView nView) const;
+
+
+  /** \details
+    Sets the origin of the user coordinate system (UCS) (DXF 13) for the specified 
+    orthographic view (DXF 71) in the world coordinate system (WCS), when the UCSBASE 
+    system variable is set to this UCS record object.
+
+    \param gePoint [in] Three-dimensional point instance which stores the X,Y,Z coordinates of  
+                 the origin for the orthographic view.
+    \param nView [in] Identifier of the orthographic view.
+
+    \remarks
+    The orthographic view identifier can take the following values: 1-Top, 2-Bottom, 3-Front, 
+    4-Back, 5-Left, 6-Right.
+
+    \sa
+    <link db_ucs_sample_record.html, Example of Working with the UCS Record Object>
+
+    \sa
+    <link db_ucs_properties.html, Specific Properties of UCSs>
+
+    OdDbUCSTableRecord::ucsBaseOrigin() method
+  */
+  void setUcsBaseOrigin( const OdGePoint3d& gePoint, OdDb::OrthographicView nView );
+
+
+  virtual OdResult subGetClassID( void* pClsid ) const;
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );
+
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields( OdDbDxfFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields_R12( OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields_R12( OdDbDxfFiler* pFiler ) const;
+};
+
+/** \details
+  The typified smart pointer for the UCS record object. This template class is specialization 
+  of the OdSmartPtr class for the OdDbUCSTableRecord object.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbUCSTableRecord> OdDbUCSTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBUCSTABLERECORD_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayDefinition.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayDefinition.h
new file mode 100755
index 0000000..a6f3907
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayDefinition.h
@@ -0,0 +1,184 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_DB_UNDERLAY_DEFINITION__
+#define __OD_DB_UNDERLAY_DEFINITION__
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "DbUnderlayHost.h"
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbUnderlayDefinition : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbUnderlayDefinition);
+
+  void setSourceFileName(const OdString& name);
+  OdString getSourceFileName() const;
+
+  OdString getActiveFileName() const;
+
+  void setItemName(const OdString& item);
+  OdString getItemName() const;
+
+  void setUnderlayItem(const OdString& sourceFileName, const OdString& activeFileName, OdDbUnderlayItemPtr pItem);
+  OdDbUnderlayItemPtr getUnderlayItem() const;
+
+  OdResult load(const OdString& password);
+  void unload();
+  bool isLoaded() const;
+  static OdString dictionaryKey(const OdRxClass* underlayDefinitionType);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdDbObjectId postDefinitionToDb(OdDbDatabase* pDb, const OdString& defName);
+};
+
+typedef OdSmartPtr<OdDbUnderlayDefinition> OdDbUnderlayDefinitionPtr;
+
+
+// These inheritants are for registering OdDbUnderlayHostPE protocol extension
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDwfDefinition : public OdDbUnderlayDefinition
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDwfDefinition);
+  
+  OdDbDwfDefinition();
+
+  bool isDWFx() const;
+};
+
+typedef OdSmartPtr<OdDbDwfDefinition> OdDbDwfDefinitionPtr;
+
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDgnDefinition : public OdDbUnderlayDefinition
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDgnDefinition);
+
+  OdDbDgnDefinition();
+
+  // Specific DGNUnderlay functions
+  bool useMasterUnits() const;
+  void setUseMasterUnits(bool useMaster);
+
+  int xrefDepth() const;
+  void setXrefDepth(int depth);
+
+  bool showRasterRef() const;
+  void setShowRasterRef(bool bShow);
+};
+
+typedef OdSmartPtr<OdDbDgnDefinition> OdDbDgnDefinitionPtr;
+
+/** \details
+
+<group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPdfDefinition : public OdDbUnderlayDefinition
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPdfDefinition);
+
+  OdDbPdfDefinition();
+};
+
+typedef OdSmartPtr<OdDbPdfDefinition> OdDbPdfDefinitionPtr;
+
+/** \details
+
+<group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbNavisworksDefinition : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS( OdDbNavisworksDefinition );
+
+  OdDbNavisworksDefinition();
+
+  void setSourceFileName( const OdString& fname );
+  OdString sourceFileName() const;
+
+  OdString activeFileName() const;
+  OdResult setActiveFileName( const OdString& fname );
+
+  bool getDWGModelItemVisible() const;
+  void setDWGModelItemVisible( bool bVisible );
+
+  OdGeExtents3d getExtents() const;
+
+  OdResult load();
+  void unload();
+  bool isLoaded() const;
+
+  OdString fileType() const;
+
+  int entityCount( int *pLockCount ) const;
+
+  int fileFound() const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler );
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler ) const;
+
+
+};
+
+typedef OdSmartPtr<OdDbNavisworksDefinition> OdDbNavisworksDefinitionPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_DB_UNDERLAY_DEFINITION__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayHost.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayHost.h
new file mode 100755
index 0000000..04c1f64
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayHost.h
@@ -0,0 +1,177 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_DB_UNDERLAY_HOST__
+#define __OD_DB_UNDERLAY_HOST__
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiRasterImage.h"
+#include "DbDatabase.h"
+#include "DbEntity.h"
+
+class OdGePoint2d;
+class OdUnderlayLayer;
+
+const int kItemVersionNumber = 1;
+
+class OdUnderlayLayerImpl;
+
+/** <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdUnderlayLayer
+{
+public:
+    OdUnderlayLayer();
+    ~OdUnderlayLayer();
+
+    enum State
+    {
+      kOff = 0,
+      kOn = 1
+    };
+
+    OdString name() const;
+    State state() const;
+    void setName(const OdString& name);
+    void setState(State state);
+
+    OdUnderlayLayer& operator =(const OdUnderlayLayer& source);
+    OdUnderlayLayer(const OdUnderlayLayer & source);
+
+private:
+    OdUnderlayLayerImpl* m_pImpl;
+};
+
+struct OdDbUnderlayDrawContext
+{
+   OdUInt8 contrast; 
+   OdUInt8 fade;
+   bool monochrome;
+   bool adjustColorForBackground;
+   OdArray<OdUnderlayLayer> layers;
+};
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbUnderlayItem : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbUnderlayItem);
+
+  virtual OdString getName() const = 0;
+
+  virtual OdGiRasterImagePtr getThumbnail() const = 0;
+
+  virtual void getExtents(OdGePoint2d& min, OdGePoint2d& max) const = 0;
+
+  virtual OdDb::UnitsValue getUnits() const = 0;
+
+  virtual bool usingPartialContent() const = 0;
+
+  virtual bool worldDraw(OdGiWorldDraw* pWd, const OdDbUnderlayDrawContext& context) const = 0;
+
+  virtual void viewportDraw(OdGiViewportDraw* pVd, const OdDbUnderlayDrawContext& context) const = 0;
+
+  virtual OdGeMatrix3d modelTransform() const = 0;
+
+  virtual OdResult getOsnapPoints(const OdGeMatrix3d& modelToWorld,
+                                  OdDb::OsnapMode     osnapMode,
+                                  OdGsMarker            gsSelectionMark,
+                                  const OdGePoint3d&  pickPoint,
+                                  const OdGePoint3d&  lastPoint,
+                                  const OdGeMatrix3d& viewXform,
+                                  const OdGeMatrix3d& ucs,
+                                  OdGePoint3dArray&   snapPoints,
+                                  OdIntArray&         geomIds) const = 0;
+
+  virtual OdDbEntityPtr getSubEntityAtGsMarker(const OdGeMatrix3d& modelToWorld, OdGsMarker gsSelectionMark) const = 0;
+
+  virtual OdResult intersectWith(const OdGeMatrix3d& modelToWorld,
+                                 const OdDbEntity* pEnt,
+                                 OdDb::Intersect intType,
+                                 const OdGePlane* projPlane,
+                                 OdGePoint3dArray& points,
+                                 OdGsMarker thisGsMarker,
+                                 OdGsMarker otherGsMarker) const = 0;
+
+  virtual OdUInt32 underlayLayerCount() const { return 0; }
+  virtual OdResult getUnderlayLayer(int /*idx*/, OdUnderlayLayer& /*layer*/) const { return eNotImplemented; }
+
+  int version() const;
+};
+
+typedef OdSmartPtr<OdDbUnderlayItem> OdDbUnderlayItemPtr;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbUnderlayFile : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbUnderlayFile);
+
+  virtual int getItemCount() const = 0;
+  virtual OdDbUnderlayItemPtr getItem(int i) const = 0;
+  virtual OdDbUnderlayItemPtr getItem(OdString name) const = 0;
+};
+
+typedef OdSmartPtr<OdDbUnderlayFile> OdDbUnderlayFilePtr;
+
+// Instance of this PE should be registered for each OdDbUnderlayDefinition inheritant
+
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbUnderlayHostPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbUnderlayHostPE);
+
+  OdDbUnderlayHostPE();
+
+  virtual OdResult load(OdString path, OdString password, OdDbUnderlayFilePtr& result) = 0;
+};
+
+typedef OdSmartPtr<OdDbUnderlayHostPE> OdDbUnderlayHostPEPtr;
+
+TOOLKIT_EXPORT void oddbConvertRgbToHsl(const OdGeVector3d& rgb, OdGeVector3d& hsl);
+TOOLKIT_EXPORT void oddbConvertHslToRgb(const OdGeVector3d& hsl, OdGeVector3d& rgb);
+TOOLKIT_EXPORT void oddbUnderlayHostGetAdjustedColor(OdGeVector3d& rgbResult,
+                                                     const OdGeVector3d& rgbInputColor,
+                                                     const OdGeVector3d& rgbCurrentBackgroundColor,
+                                                     const OdGeVector3d& hslFadedContrastColor,
+                                                     const OdDbUnderlayDrawContext& drawContext);
+
+// DGNUnderlay extensions
+#include "DbDgnUnderlayHost.h"
+
+#include "TD_PackPop.h"
+
+#endif // __OD_DB_UNDERLAY_HOST__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayReference.h
new file mode 100755
index 0000000..315f4a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnderlayReference.h
@@ -0,0 +1,284 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_DB_UNDERLAY_REFERENCE__
+#define __OD_DB_UNDERLAY_REFERENCE__
+
+#include "TD_PackPush.h"
+#include "DbEntity.h"
+#include "Ge/GePoint2dArray.h"
+
+/** \details
+    This class represents underlays, where OdDbUnderlayReference controls the placement of the
+	underlay in the drawing and OdDbUnderlayDefinition links to the underlay content.
+	
+    <group Other_Classes>
+*/
+class OdUnderlayLayer;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbUnderlayReference : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbUnderlayReference);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* traits) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual void subViewportDraw(
+    OdGiViewportDraw* pVd) const;
+
+  // method with wrong input parameters - must be removed in next release
+  virtual OdResult subGetOsnapPoints(
+    OdDb::OsnapMode osnapMode, 
+    OdGsMarker        gsSelectionMark, 
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint, 
+    const OdGeMatrix3d& viewXform, 
+    const OdGeMatrix3d& ucs, 
+    OdGePoint3dArray& snapPoints ) const { return eNotApplicable; }
+
+  virtual OdResult subGetOsnapPoints(
+    OdDb::OsnapMode osnapMode,
+    OdGsMarker gsSelectionMark,
+    const OdGePoint3d& pickPoint,
+    const OdGePoint3d& lastPoint,
+    const OdGeMatrix3d& xWorldToEye,
+    OdGePoint3dArray& snapPoints ) const;
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  OdGePoint3d position() const;
+  void setPosition(const OdGePoint3d& position);
+
+  OdGeScale3d scaleFactors() const;
+  void setScaleFactors(const OdGeScale3d& scale);
+
+  double rotation() const;
+  void setRotation(double rotation);
+
+  OdGeVector3d normal() const;
+  void setNormal(const OdGeVector3d& normal);
+
+  OdGeMatrix3d transform() const;
+  OdResult setTransform(const OdGeMatrix3d& transform);
+
+  OdDbObjectId definitionId() const;
+  void setDefinitionId(OdDbObjectId id);
+
+  const OdGePoint2dArray& clipBoundary() const;
+  void setClipBoundary(const OdGePoint2d* clipBoundary, OdUInt32 nbPts);
+
+  bool isClipped() const;
+  void setIsClipped(bool value);
+
+  OdUInt8 contrast() const;
+  void setContrast(OdUInt8 value);
+
+  OdUInt8 fade() const;
+  void setFade(OdUInt8 value);
+
+  bool isOn() const;
+  void setIsOn(bool value);
+
+  bool isMonochrome() const;
+  void setIsMonochrome(bool value);
+
+  bool isAdjustedForBackground() const;
+  void setIsAdjustedForBackground(bool value);
+
+  // must be overriden
+
+  virtual bool isFrameVisible() const = 0;
+  virtual bool isFramePlottable() const = 0;
+
+  OdUInt32 underlayLayerCount() const;
+  OdResult getUnderlayLayer(int index, OdUnderlayLayer& layer) const;
+  OdResult setUnderlayLayer(int index, const OdUnderlayLayer& layer);
+
+  static OdUInt8 contrastLowerLimit();
+  static OdUInt8 contrastUpperLimit();
+  static OdUInt8 contrastDefault();
+  static OdUInt8 fadeLowerLimit();
+  static OdUInt8 fadeUpperLimit();
+  static OdUInt8 fadeDefault();
+
+  bool isClipInverted() const;
+  void setClipInverted(bool value);
+  OdResult generateClipBoundaryFromPline(OdDbObjectId plId);
+
+  OdGeMatrix3d getEcs( ) const;
+};
+
+typedef OdSmartPtr<OdDbUnderlayReference> OdDbUnderlayReferencePtr;
+
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDwfReference : public OdDbUnderlayReference
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDwfReference);
+
+  OdDbDwfReference();
+
+  virtual bool isFrameVisible() const;
+  virtual bool isFramePlottable() const;
+
+  virtual bool subIsContentSnappable() const;
+  virtual OdResult subGetClassID(void* pClsid) const;
+};
+
+typedef OdSmartPtr<OdDbDwfReference> OdDbDwfReferencePtr;
+
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDgnReference : public OdDbUnderlayReference
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDgnReference);
+
+  OdDbDgnReference();
+
+  virtual bool isFrameVisible() const;
+  virtual bool isFramePlottable() const;
+
+  virtual bool subIsContentSnappable() const;
+  virtual OdResult subGetClassID(void* pClsid) const;
+
+  void setXrefDepth(OdInt32 depth);
+};
+
+typedef OdSmartPtr<OdDbDgnReference> OdDbDgnReferencePtr;
+
+/** \details
+
+<group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbPdfReference : public OdDbUnderlayReference
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbPdfReference);
+
+  OdDbPdfReference();
+
+  virtual bool isFrameVisible() const;
+  virtual bool isFramePlottable() const;
+
+  virtual bool subIsContentSnappable() const;
+  virtual OdResult subGetClassID(void* pClsid) const;
+
+  virtual OdUInt32 subSetAttributes(OdGiDrawableTraits *traits) const;
+
+  static OdUInt8 contrastDefault();
+  static OdUInt8 fadeDefault();
+};
+
+typedef OdSmartPtr<OdDbPdfReference> OdDbPdfReferencePtr;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbNavisworksReference : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS( OdDbNavisworksReference );
+
+  OdDbNavisworksReference();
+  
+  OdGePoint3d getInsertionPoint() const;
+  void setInsertionPoint( const OdGePoint3d& position );
+
+  double getScale() const;
+  void setScale( double scale );
+
+  double getRotation() const;
+  void setRotation( double rotation );
+
+  OdGeMatrix3d getTransformation() const;
+  OdResult setTransformation( const OdGeMatrix3d& transform );
+
+  OdDbObjectId getDefinitionId() const;
+  void setDefinitionId( OdDbObjectId id );
+
+  OdResult getHostDwgVisibility( bool &bVisibility )const;
+  OdResult setHostDwgVisibility( bool bVisibility );
+
+  OdResult getName( OdString &name )const;
+  OdResult getSavedPath( OdString &path )const;
+
+  double getInsertionUnitScaleFactor()const;
+  void setInsertionUnit( OdDb::UnitsValue unitsVal );
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm );
+
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* traits ) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd ) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler );
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler ) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler );
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler ) const;
+};
+
+typedef OdSmartPtr<OdDbNavisworksReference> OdDbNavisworksReferencePtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_DB_UNDERLAY_REFERENCE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoController.h
new file mode 100755
index 0000000..21469cf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoController.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODDBUNDOCONTROLLER_INCLUDED_
+#define _ODDBUNDOCONTROLLER_INCLUDED_
+
+#include "RxObject.h"
+#include "RxIterator.h"
+#include "DbRootExport.h"
+
+class OdStreamBuf;
+
+/** \details
+  <group OdDb_Classes>
+*/
+class DBROOT_EXPORT ODRX_ABSTRACT OdDbUndoControllerRecord : public OdRxObject
+{
+protected:
+  OdDbUndoControllerRecord();
+public:
+  ODRX_DECLARE_MEMBERS(OdDbUndoControllerRecord);
+
+  virtual OdUInt32 options() const = 0;
+};
+
+typedef OdSmartPtr<OdDbUndoControllerRecord> OdDbUndoControllerRecordPtr;
+
+
+/** \details
+    This class defines the interface for Undo Controller objects for OdDbDatabase instances.
+    \remarks
+    The implementer manages resources for storing undo and redo information.
+    <group OdDb_Classes>
+*/
+class DBROOT_EXPORT ODRX_ABSTRACT OdDbUndoController : public OdRxObject
+{
+public:
+  enum
+  {
+    kDefault    = 0,
+    kBlockBegin = 1,
+    kBlockEnd   = 2,
+    kMarker     = 3
+  };
+
+  ODRX_DECLARE_MEMBERS(OdDbUndoController);
+  /** \details
+    Saves undo information in some manner.
+    \param pStream [in]  stream that contains single undo step data.
+    \param nSize [in]  size of undo information (starting from current stream position).
+    \remarks
+    Implementer should save nSize bytes from specified stream.
+  */
+  virtual void pushData(OdStreamBuf* pStream, OdUInt32 nSize, OdUInt32 opt = kDefault) = 0;
+
+  /** \details
+    Returns true if undo information is stored inside this object
+    and can be taken back via call popData.
+  */
+  virtual bool hasData() const = 0;
+
+  /** \details
+    Gives back most recent single undo step data.
+    \param pStream [out]  stream
+    \remarks
+    Implementer should write back single undo step data
+    saved in this object via the most recent call pushData into specified stream
+    and then free internal resources used for storing undo step.
+  */
+  virtual OdUInt32 popData(OdStreamBuf* pStream) = 0;
+
+  virtual OdRxIteratorPtr newRecordStackIterator() const = 0;
+
+  virtual void clearData() = 0;
+};
+
+/** \details
+ This template class is a specialization of the OdSmartPtr class for OdDbUndoController object pointers.
+*/
+typedef OdSmartPtr<OdDbUndoController> OdDbUndoControllerPtr;
+
+
+#endif // _ODDBUNDOCONTROLLER_INCLUDED_
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoDisablerAuto.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoDisablerAuto.h
new file mode 100755
index 0000000..9bf59e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUndoDisablerAuto.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBUNDODISABLERAUTO_
+#define _ODDBUNDODISABLERAUTO_
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class, for the duration of its existence,
+    disables Undo Recording for its associated object.
+    
+    <group OdDb_Classes>
+*/
+class OdDbUndoDisablerAuto
+{
+  OdDbObject* m_pObj;
+public:
+  /** \details
+    Constructor -- Disables Undo recording.
+  */
+  /** \param pObj [in]  Pointer to the object whose Undo Recording is to be disabled.
+  */
+  OdDbUndoDisablerAuto(OdDbObject* pObj)
+    : m_pObj(pObj)
+  {
+    pObj->disableUndoRecording(true);
+  }
+  /** \details
+    Destructor -- Enables Undo recording.
+  */
+  ~OdDbUndoDisablerAuto()
+  {
+    m_pObj->disableUndoRecording(false);
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODDBUNDODISABLERAUTO_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatter.h
new file mode 100755
index 0000000..deb0335
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatter.h
@@ -0,0 +1,103 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBUNITSFORMATTER_H_INCLUDED_
+#define _ODDBUNITSFORMATTER_H_INCLUDED_
+
+#include "OdUnitsFormatter.h"
+
+class OdGePoint3d;
+class OdSting;
+class OdCmColor;
+
+/** \details
+    This class defines the interface for a Units Formatter. 
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbUnitsFormatter : public OdUnitsFormatter
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdDbUnitsFormatter);
+
+  /** \details
+    Returns the specified color value or OdDbColor object as a string.
+    \param value [in]  Value to format.
+  */
+  static OdString formatColor(const OdCmColor& value);
+
+  /** \details
+    Returns the specified string as an OdCmColor object.
+    \param string [in]  String to unformat.
+  */
+  static OdCmColor unformatColor(const OdString& string);
+
+  /** \details
+    Returns the specified WCS angle as an angle in the UCS.
+    \param wcsAngle [in]  WCS angle.
+    \note
+    All angles are expressed in radians.
+  */
+  virtual double toUserAngle(double wcsAngle) const = 0;
+
+  /** \details
+    Returns the specified UCS angle as an angle in the WCS.
+    \param ucsAngle [in]  UCS angle.
+    \note
+    All angles are expressed in radians.
+  */
+  virtual double fromUserAngle(double ucsAngle) const = 0;
+
+  /** \details
+    Returns the specified 3D point value as a string.
+    \param value [in]  Value to format.
+    \remarks
+    The returned value depends on the DIMZIN, LUNITS, LUPREC, and UNITMODE system variables.
+  */
+  virtual OdString formatPoint(const OdGePoint3d& value) const = 0;
+
+  /** \details
+    Returns the specified string as a point value.
+    \param string [in]  String to unformat.
+  */
+  virtual OdGePoint3d unformatPoint(const OdString& string) const = 0;
+
+  /** \details
+    Returns the specified WCS point as a UCS point.
+    \param wcsPt [in]  WCS point.
+  */
+  virtual OdGePoint3d toUCS(const OdGePoint3d& wcsPt) const = 0;
+
+  /** \details
+    Returns the specified UCS point as a WCS point.
+    \param ucsPt [in]  UCS point.
+  */
+  virtual OdGePoint3d fromUCS(const OdGePoint3d& ucsPt) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbUnitsFormatter object pointers.
+*/
+typedef OdSmartPtr<OdDbUnitsFormatter> OdDbUnitsFormatterPtr;
+
+
+#endif //#ifndef _ODDBUNITSFORMATTER_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatterImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatterImpl.h
new file mode 100755
index 0000000..4315d95
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUnitsFormatterImpl.h
@@ -0,0 +1,139 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBUNITSFORMATTER_H_IMPL_
+#define _ODDBUNITSFORMATTER_H_IMPL_
+
+#include "TD_PackPush.h"
+
+#include "DbUnitsFormatter.h"
+
+/** \details
+This class provides default implementation for OdDbUnitsFormatter. 
+<group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbUnitsFormatterImpl : public OdDbUnitsFormatter
+{ 
+protected:
+  OdDbUnitsFormatterImpl();
+public:
+  ODRX_DECLARE_MEMBERS(OdDbUnitsFormatterImpl);
+
+  /** \details
+  Returns the specified color value or OdCmColorBase object as a string.
+  \param value [in]  Value to format.
+  */
+  virtual OdString formatCmColor(const OdCmColorBase& value) const;
+
+  /** \details
+  Returns the specified string as an wrapped OdCmColorBase object.
+  \param string [in]  String to unformat.
+  */
+  virtual OdSharedPtr<OdCmColorBase> unformatCmColor(const OdString& string) const;
+
+  /** \details
+  Returns the specified distance value as a string.
+  \param value [in]  Value to format.
+  \remarks
+  The returned value depends on the DIMZIN, LUNITS, LUPREC, and UNITMODE system variables.
+  */
+  virtual OdString formatLinear(double value) const;
+
+  /** \details
+  Returns the specified string as a distance value.
+  \param string [in]  String to unformat.
+  \remarks
+  The returned value depends on the UNITMODE system variable.
+  */
+  virtual double unformatLinear(const OdString& string) const;
+
+  /** \details
+  Returns the specified angle value as a string.
+  \param value [in]  Value to format.
+  \remarks
+  The returned value depends on the ANGBASE, AUNITS, AUPREC, DIMZIN, and UNITMODE system variables.
+  \note
+  All angles are expressed in radians.
+  */
+  virtual OdString formatAngle(double value) const;
+
+  /** \details
+  Returns the specified string as an angle value.
+  \param string [in]  String to unformat.
+  \remarks
+  The returned value depends on the ANGBASE system variable.
+  \note
+  All angles are expressed in radians.
+  */
+  virtual double unformatAngle(const OdString& string) const;
+
+  /** \details
+  Returns the specified WCS angle as an angle in the UCS.
+  \param wcsAngle [in]  WCS angle.
+  \note
+  All angles are expressed in radians.
+  */
+  virtual double toUserAngle(double wcsAngle) const;
+
+  /** \details
+  Returns the specified UCS angle as an angle in the WCS.
+  \param ucsAngle [in]  UCS angle.
+  \note
+  All angles are expressed in radians.
+  */
+  virtual double fromUserAngle(double ucsAngle) const;
+
+  /** \details
+  Returns the specified 3D point value as a string.
+  \param value [in]  Value to format.
+  \remarks
+  The returned value depends on the DIMZIN, LUNITS, LUPREC, and UNITMODE system variables.
+  */
+  virtual OdString formatPoint(const OdGePoint3d& value) const;
+
+  /** \details
+  Returns the specified string as a point value.
+  \param string [in]  String to unformat.
+  */
+  virtual OdGePoint3d unformatPoint(const OdString& string) const;
+
+  /** \details
+  Returns the specified WCS point as a UCS point.
+  \param wcsPt [in]  WCS point.
+  */
+  virtual OdGePoint3d toUCS(const OdGePoint3d& wcsPt) const;
+
+  /** \details
+  Returns the specified UCS point as a WCS point.
+  \param ucsPt [in]  UCS point.
+  */
+  virtual OdGePoint3d fromUCS(const OdGePoint3d& ucsPt) const;
+
+  void setDatabase(OdDbDatabase* db);
+protected:
+  OdDbDatabase* m_pDb;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBUNITSFORMATTER_H_IMPL_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUserIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUserIO.h
new file mode 100755
index 0000000..bb482c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbUserIO.h
@@ -0,0 +1,117 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBUSERIO_H_INCLUDED_
+#define _ODDBUSERIO_H_INCLUDED_
+
+#include "DbExport.h"
+#include "OdPlatform.h"
+#include "Ed/EdUserIO.h"
+#include "Ed/EdBaseUserIO.h"
+#include "DbSSet.h"
+
+class OdCmColor;
+class OdSelectionSet;
+class OdGsModel;
+
+
+typedef OdSmartPtr<OdSSetTracker> OdSSetTrackerPtr;
+
+/** \details
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdEdSSetTracker : public OdSSetTracker
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdSSetTracker);
+
+  virtual bool append(OdDbStub* id, const OdDbSelectionMethod* pMethod);
+  virtual bool remove(OdDbStub* id, const OdDbSelectionMethod* pMethod);
+
+  virtual bool append(const OdDbObjectId& entId, const OdDbSelectionMethod* pMethod) = 0;
+  virtual bool remove(const OdDbObjectId& entId, const OdDbSelectionMethod* pMethod) = 0;
+};
+
+typedef OdSmartPtr<OdEdSSetTracker> OdEdSSetTrackerPtr;
+
+
+/** \details
+    This class implements geometric interactive user IO functionality for custom interactive command objects.
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdDbUserIO : public OdEdBaseUserIO
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbUserIO);
+
+  virtual void setPickfirst(OdSelectionSet* pSSet) = 0;
+
+  virtual OdSelectionSetPtr pickfirst() = 0;
+    
+  /** \details
+    Returns user input of a color.
+
+    \param prompt [in]  Message displayed to prompt the user.
+    \param options [in]  Combination of OdEd::GetPointOptions enum values. 
+    \param pDefaultValue [in]  Pointer to a default value to return if an empty string is received as input.
+    \param keywords [in]  Keyword string.
+    \param pTracker [in]  Pointer to a User IO tracker.
+    
+    \remarks
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.
+    
+    If prompt is an empty string, a default prompt string is used.  
+  */
+  virtual OdCmColor getColor(const OdString& prompt,
+                             int options = OdEd::kInpDefault,
+                             const OdCmColor* pDefaultValue = 0,
+                             const OdString& keywords = OdString::kEmpty,
+                             OdEdColorTracker* pTracker = 0) = 0;
+
+  /** \details
+      Launches interactive object selection to fill selection set.
+
+      \param prompt [in]  Message displayed to prompt the user.
+      \param options [in]  Combination of OdEd::GetPointOptions enum values. 
+      \param pDefaultValue [in]  Pointer to a default value to return if an empty string is received as input.
+      \param keywords [in]  Keyword string.
+      \param pTracker [in]  Pointer to a User IO tracker.
+
+      \remarks
+      Each subsequent call to this function modifies current selection set.
+      Returned value is guaranteed to be not null.
+  */
+  virtual OdSelectionSetPtr select(const OdString& prompt = OdString::kEmpty,
+                                   int options = OdEd::kSelDefault,
+                                   const OdSelectionSet* pDefaultValue = 0,
+                                   const OdString& keywords = OdString::kEmpty,
+                                   OdSSetTracker* pTracker = 0) = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbUserIO object pointers.
+*/
+typedef OdSmartPtr<OdDbUserIO> OdDbUserIOPtr;
+
+#endif //#ifndef _ODDBUSERIO_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVbaProject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVbaProject.h
new file mode 100755
index 0000000..1749d42
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVbaProject.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBVBAPROJECT_H
+#define OD_DBVBAPROJECT_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+/** \details
+    This class represents VBA Project objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbVbaProject : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbVbaProject);
+
+  OdDbVbaProject();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Returns the project data for this VBA Project object.
+
+    \param vbaProject [out]  Receives the project data.
+  */
+  void getVbaProject(OdBinaryData& vbaProject) const;
+
+  /** \details
+    Sets the project data for this VBA Project object.
+
+    \param vbaProject [out]  Project data.
+  */
+  void setVbaProject(const OdBinaryData& vbaProject);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbVbaProject object pointers.
+*/
+typedef OdSmartPtr<OdDbVbaProject> OdDbVbaProjectPtr;
+
+#include "TD_PackPop.h"
+
+#endif //OD_DBVBAPROJECT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVertex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVertex.h
new file mode 100755
index 0000000..f3583eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVertex.h
@@ -0,0 +1,81 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_DB_VERTEX_
+#define _OD_DB_VERTEX_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum Vertex3dType
+  {
+    k3dSimpleVertex  = 0,  // Standard vertex.
+    k3dControlVertex = 1,  // Spline-fit or curve-fit control point.
+    k3dFitVertex     = 2   // Spline-fit or curve-fit generated vertex.
+  };
+}
+
+/** \details
+    The class is the base class for all OdDb vertices.
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbVertex: public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbVertex);
+
+//  OdDbVertex();
+
+  OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  OdResult subTransformBy(const OdGeMatrix3d& xform);
+
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbVertex object pointers.
+*/
+typedef OdSmartPtr<OdDbVertex> OdDbVertexPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTable.h
new file mode 100755
index 0000000..671c17b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTable.h
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBVIEWTABLE_INCLUDED
+#define _ODDBVIEWTABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbAbstractViewTable.h"
+
+class OdDbViewTableRecord;
+
+/** \details
+    This class implements the ViewTable, which represents stored views in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbViewTable: public OdDbAbstractViewTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewTable);
+
+  /** \note
+    Teigha applications typically will not use this constructor, insofar as 
+    this class is a base class.
+  */
+  OdDbViewTable();
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbViewTable object pointers.
+*/
+typedef OdSmartPtr<OdDbViewTable> OdDbViewTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBVIEWTABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTableRecord.h
new file mode 100755
index 0000000..f383eca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewTableRecord.h
@@ -0,0 +1,198 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBVIEWTABLERECORD_INCLUDED
+#define _ODDBVIEWTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbAbstractViewTableRecord.h"
+#include "DbAnnotationScale.h"
+
+/** \details
+    This class represents View records in the OdDbViewTable in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbViewTableRecord : public OdDbAbstractViewTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewTableRecord);
+
+  OdDbViewTableRecord();
+
+  /** \details
+    Returns true if and only if this View is a Paper Space view (DXF 70, bit 0x01).
+  */
+  bool isPaperspaceView() const;
+  
+  /** \details
+    Controls if this View is a Paper Space view (DXF 70, bit 0x01).
+    
+    \param pspaceView [in]  True for Paper Space, false for Model space.
+  */
+  void setIsPaperspaceView(
+    bool pspaceView);
+  
+  /** \details
+    Returns true if and only if there is a UCS associated with this View.
+  */
+  bool isUcsAssociatedToView() const;
+  /** \details
+    Disassociates any UCS associated with this View.
+  */
+  void disassociateUcsFromView();
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  // new in 2005
+  
+  /** \details
+    Returns the name of the category of this View.
+  */
+  OdString getCategoryName() const;
+
+  /** \details
+    Sets the name of the category of this View.
+    \param categoryName [in]  Category name.
+  */
+  void setCategoryName(
+    const OdString& categoryName);
+
+  /** \details
+    Returns the name of the layer state of this View.
+  */
+  OdString getLayerState() const;
+  /** \details
+    Sets the name of the layer state of this View.
+    \param layerStateName [in]  Layer State name.
+  */
+  void setLayerState(
+    const OdString& layerStateName);
+
+  /** \details
+    Returns the Object ID of the OdDbLayout of this View.
+  */
+  OdDbObjectId getLayout() const;
+
+  /** \details
+    Sets the Object ID of the Layout of this View.
+    \param layoutId [in]  Layout ID.
+  */
+  void setLayout(
+    OdDbObjectId layoutId);
+
+  /** \details
+    Returns true if and only if this View is associated with a Paper Space Viewport.
+  */
+  bool isViewAssociatedToViewport() const;
+  
+  /** \details
+    Controls if this View is associated with a Viewport.
+    \param viewAssociated [in]  Controls association.
+  */
+  void setViewAssociatedToViewport (
+    bool viewAssociated);
+
+  /** \details
+    Returns the thumbnail information for this view.
+    
+    \param pThumbnail [out]  Receives a pointer to the thumbnail.
+    
+    \remarks
+    Thumbnail information consists of a packed BITMAPINFO structure 
+    immediately followed in memory by the thumbnail data.
+  */
+  void getThumbnail (
+    OdBinaryData* pThumbnail) const;
+  /** \details
+    Sets the thumbnail information for this view.
+    
+    \param pThumbnail [in]  Pointer to the thumbnail.
+
+    \remarks
+    Thumbnail information consists of a packed BITMAPINFO structure 
+    immediately followed in memory by the thumbnail data.
+  */
+  void setThumbnail(
+    const OdBinaryData* pThumbnail);
+
+  //  void setParametersFromViewport(OdDbObjectId objId);
+  
+  // new R21 methods
+  
+  bool isCameraPlottable () const;
+  void setIsCameraPlottable(bool plottable);
+
+  OdDbObjectId camera() const;
+  void setCamera(const OdDbObjectId &cameraId);
+
+  virtual void subClose();
+
+  virtual void subSwapIdWith(
+    const OdDbObjectId& otherId,
+    bool swapXdata = false,
+    bool swapExtDict = false);
+
+  // Live Section
+
+  OdDbObjectId liveSection() const;
+  void setLiveSection(const OdDbObjectId& liveSectionId);
+
+  OdResult setAnnotationScale(const OdDbAnnotationScale* pScaleObj);
+  OdDbAnnotationScalePtr annotationScale() const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbViewTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbViewTableRecord> OdDbViewTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBVIEWTABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewport.h
new file mode 100755
index 0000000..ba2c7dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewport.h
@@ -0,0 +1,1068 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_VIEWPORT_
+#define _OD_DB_VIEWPORT_
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+#include "DbSymbolTable.h"
+#include "ViewportDefs.h"
+#include "DbXrefObjectId.h"
+
+#include "Gi/GiViewportTraits.h"
+
+class OdGeExtents3d;
+class OdGeMatrix3d;
+class OdGsView;
+class OdDbSun;
+
+/** \details
+    This class represents PaperSpace Viewport entities in an OdDbDatabase instance.
+  
+    \sa
+    TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbViewport : public OdDbEntity
+{
+protected:
+  /* void dxfOutXData(OdDbDxfFiler* pFiler) const;
+  */
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewport);
+
+  OdDbViewport();
+
+  /** \details
+    Returns the height of this Viewport object (DXF 41).
+
+    \note
+    If this Viewport object is an overall viewport,
+    the values returned by width() and height() must be divided by a
+    factor of 1.058, and the parameters of setWidth and setHeight() 
+    must be multiplied by a like factor.                        
+  */
+  double height() const;
+
+  /** \details
+    Sets the height of this Viewport object (DXF 41).
+    \param height [in]  Height.
+
+    \note
+    If this Viewport object is an overall viewport,
+    the values returned by width() and height() must be divided by a
+    factor of 1.058, and the parameters of setWidth and setHeight() 
+    must be multiplied by a like factor.                        
+  */
+  void setHeight(
+    double height);
+
+  /** \details
+    Returns the width of this Viewport object (DXF 40).
+
+    \note
+    If this Viewport object is an overall viewport,
+    the values returned by width() and height() must be divided by a
+    factor of 1.058, and the parameters of setWidth and setHeight() 
+    must be multiplied by a like factor.                        
+  */
+  double width() const;
+
+  /** \details
+    Sets the width of this Viewport object (DXF 40).
+    \param width [in]  Width.
+
+    \note
+    If this Viewport object is an overall viewport,
+    the values returned by width() and height() must be divided by a
+    factor of 1.058, and the parameters of setWidth and setHeight() 
+    must be multiplied by a like factor.                        
+  */
+  void setWidth(
+    double width);
+
+  /** \details
+    Returns the WCS center point of this Viewport object (DXF 10).
+  */
+  OdGePoint3d centerPoint() const;
+
+  /** \details
+    Sets the WCS center point of this Viewport object (DXF 10).
+    \param centerPoint [in]  Center point.
+  */
+  void setCenterPoint(
+    const OdGePoint3d& centerPoint);
+
+  /** \details
+    Returns the ID number of this Viewport object.
+    \remarks
+    Returns -1 if this Viewport object is inactive.
+  */
+  OdInt16 number() const;
+
+  /** \details
+    Returns true if and only if this Viewport object is on (DXF 90, bit 0x20000).
+  */
+  bool isOn() const;
+
+  /** \details
+    Turns on this Viewport object (DXF 90, bit 0x20000, DXF 68 non-zero).
+  */
+  void setOn();
+
+  /** \details
+    Turns off this Viewport object (DXF 90, bit 0x20000, DXF 68 zero).
+  */
+  void setOff();
+
+  /** \details
+    Returns the WCS view target of this Viewport object (DXF 17).
+  */
+  OdGePoint3d viewTarget() const;
+
+  /** \details
+    Sets the WCS view target of this Viewport object (DXF 17).
+    \param viewTarget [in]  View target.
+  */
+  void setViewTarget(
+    const OdGePoint3d& viewTarget);
+
+  /** \details
+    Returns the WCS view direction of this Viewport object (DXF 16).
+  */
+  OdGeVector3d viewDirection() const;
+
+  /** \details
+    Sets the WCS view direction of this Viewport object (DXF 16).
+    \param viewDirection [in]  View direction.
+  */
+  void setViewDirection(
+    const OdGeVector3d& viewDirection);
+
+  /** \details
+    Returns the DCS view height of this Viewport object (DXF 45).
+  */
+  double viewHeight() const;
+
+  /** \details
+    Sets the DCS view height of this Viewport object (DXF 45).
+    \param viewHeight [in]  View height.
+  */
+  void setViewHeight(
+    double viewHeight);
+
+  /** \details
+    Returns the DCS view center of this Viewport object (DXF 12).
+  */
+  OdGePoint2d viewCenter() const;
+
+  /** \details
+    Sets the DCS view center of this Viewport object (DXF 12).
+    \param viewCenter [in]  View center.
+  */
+  void setViewCenter(
+    const OdGePoint2d& viewCenter);
+
+  /** \details
+    Returns the DCS twist angle of this Viewport object (DXF 51).
+    
+    \note
+    All angles are expressed in radians.
+  */
+  double twistAngle() const;
+
+  /** \details
+    Sets the DCS twist angle of this Viewport object (DXF 51).
+    \param twistAngle [in]  Twist angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void setTwistAngle(
+    double twistAngle);
+
+  /** \details
+    Returns the perspective mode lens length (in mm) of this Viewport object (DXF 42).
+  */
+  double lensLength() const;
+
+  /** \details
+    Sets the perspective mode lens length of this Viewport object (DXF 42).
+    \param lensLength [in]  Lens length (mm).
+  */
+  void setLensLength(
+    double lensLength);
+
+  /** \details
+    Returns true if and only if front clipping is on for this Viewport object (DXF 90, bit 0x02).
+  */
+  bool isFrontClipOn() const;
+
+  /** \details
+    Turns on front clipping for this Viewport object (DXF 90, bit 0x02).
+  */
+  void setFrontClipOn();
+
+  /** \details
+    Turns off front clipping for this Viewport object (DXF 90, bit 0x02).
+  */
+  void setFrontClipOff();
+
+  /** \details
+    Returns true if and only if back clipping is on for this Viewport object (DXF 90, bit 0x04).
+  */
+  bool isBackClipOn() const;
+
+  /** \details
+    Turns on back clipping for this Viewport object (DXF 90, bit 0x04).
+  */
+  void setBackClipOn();
+
+  /** \details
+    Turns off back clipping for this Viewport object (DXF 90, bit 0x04).
+  */
+  void setBackClipOff();
+
+  /** \details
+    Returns true if and only if the front clipping plane passes through the camera (DXF 90, bit 0x10).
+    \remarks
+    If true, the front clipping plane ignores the front clip distance.
+  */
+  bool isFrontClipAtEyeOn() const;
+
+  /** \details
+    Sets the front clipping plane to pass through the camera (DXF 90, bit 0x10).
+    \remarks
+    The front clipping plane ignores the front clip distance.
+  */
+  void setFrontClipAtEyeOn();
+
+  /** \details
+    Sets the front clipping plane to utilize the front clip distance (DXF 90, bit 0x10).
+  */
+  void setFrontClipAtEyeOff();
+
+  /** \details
+      Returns the front clip distance of this Viewport object (DXF 43).
+  */
+  double frontClipDistance() const;
+
+  /** \details
+    Sets the front clip distance of this Viewport object (DXF 43).
+    \param frontClipDistance [in]  Front clip distance.
+  */
+  void setFrontClipDistance(
+    double frontClipDistance);
+
+  /** \details
+    Returns the back clip distance of this Viewport object (DXF 44).
+  */
+  double backClipDistance() const;
+
+  /** \details
+    Sets the back distance of this Viewport object (DXF 44).
+    \param backClipDistance [in]  Back clip distance.
+  */
+  void setBackClipDistance(
+    double backClipDistance);
+
+  /** \details
+     Returns true if and only if perspective is on for this Viewport object (DXF 90, bit 0x01).
+  */
+  bool isPerspectiveOn() const;
+
+  /** \details
+    Sets perspective on for this Viewport object (DXF 90, bit 0x01).
+  */
+  void setPerspectiveOn();
+
+  /** \details
+    Sets perspective off for this Viewport object (DXF 90, bit 0x01).
+  */
+  void setPerspectiveOff();
+
+  /** \details
+    Returns true if and only if UCS follow mode is on for this Viewport object (DXF 90, bit 0x08).
+  */
+  bool isUcsFollowModeOn() const;
+
+  /** \details
+    Sets UCS follow mode on for this Viewport object (DXF 90, bit 0x08).
+  */
+  void setUcsFollowModeOn();
+
+  /** \details
+    Sets UCS follow mode off for this Viewport object (DXF 90, bit 0x08).
+  */
+  void setUcsFollowModeOff();
+
+  /** \details
+    Returns true if and only if the UCS icon is visible for this Viewport object (DXF 90, bit 0x20).
+  */
+  bool isUcsIconVisible() const;
+
+  /** \details
+    Sets UCS icon visible on for this Viewport object (DXF 90, bit 0x20).
+  */
+  void setUcsIconVisible();
+
+  /** \details
+    Sets UCS icon visible false for this Viewport object (DXF 90, bit 0x20).
+  */
+  void setUcsIconInvisible();
+
+  /** \details
+    Returns true if and only if the UCS icon is at the UCS origin for this Viewport object (DXF 90, bit 0x40).
+  */
+  bool isUcsIconAtOrigin() const;
+
+  /** \details
+    Sets the UCS icon to the UCS origin for this Viewport object (DXF 90, bit 0x40).
+  */
+  void setUcsIconAtOrigin();
+
+  /** \details
+    Sets the UCS icon to the corner of this Viewport object (DXF 90, bit 0x40).
+  */
+  void setUcsIconAtCorner();
+
+  /** \details
+    Returns true if and only if fast zooms are on for this Viewport object (DXF 90, bit 0x80).
+  */
+  bool isFastZoomOn() const;
+
+  /** \details
+    Sets fast zooms on for this Viewport object (DXF 90, bit 0x80).
+  */
+  void setFastZoomOn();
+
+  /** \details
+    Sets fast zooms off for this Viewport object (DXF 90, bit 0x80).
+  */
+  void setFastZoomOff();
+
+  /** \details
+    Returns the circle zoom percent of this Viewport object (DXF 72).
+    \remarks
+    circleSides() has a range of [1..20000]
+  */
+  OdUInt16 circleSides() const;
+
+  /** \details
+    Sets the circle zoom percent of this Viewport object (DXF 72).
+    \param circleSides [in]  circle zoom percent [1,20000].
+  */
+  void setCircleSides(
+    OdUInt16 circleSides);
+
+  /** \details
+    Returns true if and only if the snap mode is on for this Viewport object (DXF 90, bit 0x100).
+  */
+  bool isSnapOn() const;
+
+  /** \details
+    Sets the snap mode on for this Viewport object (DXF 90, bit 0x100).
+  */
+  void setSnapOn();
+
+  /** \details
+    Sets the snap mode off for this Viewport object (DXF 90, bit 0x100).
+  */
+  void setSnapOff();
+
+  /** \details
+    Returns true if and only if isometric snap style is on for this Viewport object (DXF 90, bit 0x400).
+  */
+  bool isSnapIsometric() const;
+
+  /** \details
+    Sets the isometric snap style on for this Viewport object (DXF 90, bit 0x400).
+  */
+  void setSnapIsometric();
+
+  /** \details
+    Sets the isometric snap style off for this Viewport object (DXF 90, bit 0x400).
+  */
+  void setSnapStandard();
+
+  /** \details
+    Returns the UCS snap angle of this Viewport object (DXF 50).
+  */
+  double snapAngle() const;
+
+  /** \details
+    Sets the UCS snap angle of this Viewport object (DXF 50).
+    \param snapAngle [in]  Snap angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void setSnapAngle(
+    double snapAngle);
+
+  /** \details
+    Returns the UCS snap base point of this Viewport object (DXF 13).
+  */
+  OdGePoint2d snapBasePoint() const;
+
+  /** \details
+    Sets the UCS snap base point of this Viewport object (DXF 13).
+    \param snapBasePoint [in]  Snap base point.
+  */
+  void setSnapBasePoint(
+    const OdGePoint2d& snapBasePoint); 
+  
+  /** \details
+    Returns the snap increment of this Viewport object (DXF 14).
+  */
+  OdGeVector2d snapIncrement() const;
+
+  /** \details
+    Sets the snap increment of this Viewport object (DXF 14).
+    \param snapIncrement [in]  Snap increment.
+  */
+  void setSnapIncrement(
+    const OdGeVector2d& snapIncrement);
+  
+  /** \details
+    Returns the snap IsoPair of this Viewport object (DXF 14).
+    \remarks
+    snapIsoPair() returns one of the following:
+    
+    <table>
+    Value    Description
+    0        Left isoplane
+    1        Top isoplane
+    2        Right isoplane
+    </table>
+  */
+  OdUInt16 snapIsoPair() const;
+
+  /** \details
+    Sets the snap IsoPair of this Viewport object (DXF 14).
+    \param snapIsoPair [in]  Snap IsoPair.
+    \remarks
+    snapIsoPair must be one of the following:
+    
+    <table>
+    Value    Description
+    0        Left isoplane
+    1        Top isoplane
+    2        Right isoplane
+    </table>
+  */
+  void setSnapIsoPair(
+    OdUInt16 snapIsoPair);
+  
+  /** \details
+    Returns true if and only if the grid is on for this Viewport object (DXF 90, bit 0x200).
+  */
+  bool isGridOn() const;
+
+  /** \details
+    Sets the grid on for this Viewport object (DXF 90, bit 0x200).
+  */
+  void setGridOn();
+
+  /** \details
+    Sets the grid off for this Viewport object (DXF 90, bit 0x200).
+  */
+  void setGridOff();
+  
+  /** \details
+    Returns the grid increment of this Viewport object (DXF 15).
+  */
+  OdGeVector2d gridIncrement() const;
+
+  /** \details
+    Sets the grid increment of this Viewport object (DXF 15).
+    \param gridIncrement [in]  Grid increment.
+  */
+  void setGridIncrement(
+    const OdGeVector2d& gridIncrement);
+  
+  /** \details
+    Returns true if and only if this Viewport object will have hidden lines removed during plotting. (DXF 90, bit 0x800).
+  */
+  bool hiddenLinesRemoved() const;
+
+  /** \details
+    Sets this Viewport object to have hidden shown lines during plotting. (DXF 90, bit 0x800).  
+  */
+  void showHiddenLines();
+
+  /** \details
+    Sets this Viewport object to have hidden lines removed during plotting. (DXF 90, bit 0x800).  
+  */
+  void removeHiddenLines();
+  
+  /** \details
+    Freezes the specified layers in this Viewport object (DXF 341)
+    
+    \param layerIds [in]  Object IDs of the layers to be frozen.
+
+    \remarks
+    Other viewports are unaffected by this function.
+  */
+  void freezeLayersInViewport(
+    const OdDbObjectIdArray& layerIds);
+
+  /** \details
+    Thaws the specified layers in this Viewport object (DXF 341)
+    
+    \param layerIds [in]  Object IDs of the layers to be thawed.
+
+    \remarks
+    Other viewports are unaffected by this function.
+  */
+  void thawLayersInViewport(
+    const OdDbObjectIdArray& layerIds);
+
+  /** \details
+      Thaws all layers in this Viewport object.
+  */
+  void thawAllLayersInViewport();
+
+  /** \details
+    Returns true and only if the specified layer is frozen in this Viewport object.
+    \param layerId [in]  Layer ID of the layer to be queried.
+  */
+  bool isLayerFrozenInViewport(
+    const OdDbObjectId& layerId) const;
+
+  /** \details
+    Returns all layers that are frozen in this Viewport object.
+    \param layerIds [out]  Receives the Object IDs of the frozen layers.
+  */
+  void getFrozenLayerList(
+    OdDbObjectIdArray& layerIds) const;
+  
+  /** \details
+     Updates the display to reflect changes in this Viewport object.
+     
+     \remarks
+     Closing this Viewport object automatically calls this function. 
+     
+     Throws:
+     eNotImplemented
+  */
+  void updateDisplay() const;
+  
+  
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+  
+  /** \details
+    Returns true if and only if scale factor of this Viewport object is locked (DXF 90, bit 0x4000).
+  */
+  bool isLocked() const;
+
+  /** \details
+    Locks the scale factor of this Viewport object (DXF 90, bit 0x4000).
+  */
+  void setLocked();
+
+  /** \details
+    Unlocks the scale factor of this Viewport object (DXF 90, bit 0x4000).
+  */
+  void setUnlocked();
+  
+  /** \details
+    Not implemented. The value returned is not saved to file. Always returns true.
+  */
+  bool isTransparent() const;
+
+  /** \details
+    Not implemented. The set value is not saved to file.
+  */
+  void setTransparent();
+
+  /** \details
+    Not implemented. The set value is not saved to file.
+  */
+  void setOpaque();
+  
+  enum StandardScaleType
+  {
+    kScaleToFit,    // Scaled to Fit
+    kCustomScale,   // Scale is not a standard scale
+    k1_1,           // 1:1
+    k1_2,           // 1:2
+    k1_4,           // 1:4
+    k1_5,           // 1:5
+    k1_8,           // 1:8
+    k1_10,          // 1:10
+    k1_16,          // 1:16
+    k1_20,          // 1:20
+    k1_30,          // 1:30
+    k1_40,          // 1:40
+    k1_50,          // 1:50
+    k1_100,         // 1:100
+    k2_1,           // 2:1
+    k4_1,           // 4:1
+    k8_1,           // 8:1
+    k10_1,          // 10:1
+    k100_1,         // 100:1
+    k1_128in_1ft,   // 1/128"= 1'
+    k1_64in_1ft,    // 1/64"= 1'
+    k1_32in_1ft,    // 1/32"= 1'
+    k1_16in_1ft,    // 1/16"= 1'
+    k3_32in_1ft,    // 3/32"= 1'
+    k1_8in_1ft,     // 1/8" = 1'
+    k3_16in_1ft,    // 3/16"= 1'
+    k1_4in_1ft,     // 1/4" = 1'
+    k3_8in_1ft,     // 3/8" = 1'
+    k1_2in_1ft,     // 1/2" = 1'
+    k3_4in_1ft,     // 3/4" = 1'
+    k1in_1ft,       // 1" = 1'
+    k1and1_2in_1ft, // 1 1/2"= 1'
+    k3in_1ft,       // 3" = 1'
+    k6in_1ft,       // 6" = 1'
+    k1ft_1ft        // 1' = 1'
+  };
+  
+  enum ShadePlotType
+  {
+      kAsDisplayed  = 0,     // As displayed
+      kWireframe    = 1,     // Wireframe
+      kHidden       = 2,     // Hidden
+      kRendered     = 3,     // Rendered
+      kVisualStyle  = 4,     // Visual style
+      kRenderPreset = 5      // Render preset
+  };
+
+  /** \details
+    Returns the custom scale of this Viewport object.
+  */
+  double customScale() const;
+
+  /** \details
+    Sets the custom scale of this Viewport object.
+    \param customScale [in]  Custom scale.
+  */
+  void setCustomScale(
+    double customScale);
+  
+  /** \details
+    Returns the standard scale type of this Viewport object/
+  */
+  StandardScaleType standardScale() const;
+
+  /** \details
+    Sets the standard scale type of this Viewport object.
+    \param standardScale [in]  Standard scale type.
+  */
+  void setStandardScale(
+    const StandardScaleType standardScale);
+  
+  /** \details
+    Returns the name of the plot style sheet applied to objects in this Viewport object (DXF 1).
+  */
+  OdString plotStyleSheet() const;
+
+  /** \details
+    Returns the plot style sheet name associated with this Viewport object.
+  */
+  OdString effectivePlotStyleSheet() const;
+
+  /** \details
+   Sets the plot style sheet name associated with this Viewport object.
+  */
+  void setPlotStyleSheet(
+    const OdString& plotStyleSheetName);
+  
+  /** \details
+    Returns true if and only if non-rectangular clipping is enabled for this Viewport object (DXF 90, bit 0x10000).
+  */
+  bool isNonRectClipOn() const;
+
+  /** \details
+    Sets non-rectangular clipping on for this Viewport object (DXF 90, bit 0x10000).
+  */
+  void setNonRectClipOn();
+
+  /** \details
+    Sets non-rectangular clipping off for this Viewport object (DXF 90, bit 0x10000).
+  */
+  void setNonRectClipOff();
+  
+  /** \details
+    Returns the Object ID of the clipping entity for this Viewport object (DXF 340).
+  */
+  OdDbObjectId nonRectClipEntityId() const;
+
+  /** \details
+    Sets the Object ID of the clipping entity for this Viewport object (DXF 340).
+    
+    \param clipEntityId [in]  Object ID of the clipping entity.
+    
+    \remarks
+    The following entity types are acceptable clipping entities:
+
+    @untitled table
+    OdDb2dPolyline
+    OdDb3dPolyline
+    OdDbCircle
+    OdDbEllipse
+    OdDbFace
+    OdDbPolyline
+    OdDbRegion
+    OdDbSpline
+    
+    \note
+    A clipping entity must be in the same PaperSpace as this Viewport.
+  */
+  void setNonRectClipEntityId(
+    OdDbObjectId clipEntityId);
+  
+  /*
+     virtual void erased(const OdDbObject* , bool);
+     virtual void modified(const OdDbObject *);
+     virtual void copied(const OdDbObject* pDbObj,const OdDbObject* pNewObj);
+     virtual void subObjModified(const OdDbObject* pDbObj, const OdDbObject* pSubObj);
+  */
+  
+  /** \details
+    Returns the origin, X-axis, and Y-Axis of the UCS associated with this Viewport object.
+
+    \param origin [out]  Receives the UCS origin (DXF 110).
+    \param xAxis [out]  Receives the UCS X-axis (DXF 111).
+    \param yAxis [out]  Receives the UCS Y-axis (DXF 112).
+  */
+  void getUcs(OdGePoint3d& origin, 
+    OdGeVector3d& xAxis, 
+    OdGeVector3d& yAxis) const;
+
+  /** \details
+    True if and only if the UCS associated with this Viewport object
+    is orthographic with respect to UCSBASE (DXF 79).
+
+    \param viewType [out]  Receives the orthographic view type.
+    \param pDb [in]  Working database. If object is a database resident this parameter is ignored.
+
+    \remarks
+    Returns the type of orthographic view.
+    
+    viewType must be one of the following:
+    
+    <table>
+    Name                  Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS 
+    OdDb::kTopView        1       Top view with respect to the UCS 
+    OdDb::kBottomView     2       Bottom view with respect to the UCS 
+    OdDb::kFrontView      3       Front view with respect to the UCS 
+    OdDb::kBackView       4       Back view with respect to the UCS 
+    OdDb::kLeftView       5       Left view with respect to the UCS 
+    OdDb::kRightView      6       Right view with respect to the UCS 
+    </table>
+  */
+  bool isUcsOrthographic(
+    OdDb::OrthographicView& viewType,
+    const OdDbDatabase* pDb = 0) const;
+
+  /** \details
+    Returns the Object ID of the UCS associated with this Viewport object (DXF 345 or 346).
+  */
+  OdDbObjectId ucsName() const;
+
+  /** \details
+    Returns the elevation of the UCS plane of this entity (DXF 146).
+    
+    \remarks
+    The elevation is the distance from the WCS origin to the UCS plane of this entity.
+  */
+  double elevation() const;
+  
+  /** \details
+    Sets the UCS associated with this Viewport object 
+
+    \param origin [in]  The WCS origin of the UCS (DXF 110).
+    \param xAxis [in]  The WCS X-axis of the UCS (DXF 111).
+    \param yAxis [in]  The WCS Y-axis of the UCS(DXF 112).
+    \param viewType [in]  Orthographic view type (DXF 79).
+    \param pDb [in]  Working database. If object is a database resident this parameter is ignored.
+    \param ucsId [in]  Object ID of the UCS (DXF 345 or 346).
+
+    viewType must be one of the following:
+    
+    <table>
+    Name            Value   View type
+    OdDb::kNonOrthoView   0       Non-orthographic with respect to the UCS 
+    OdDb::kTopView        1       Top view with respect to the UCS 
+    OdDb::kBottomView     2       Bottom view with respect to the UCS 
+    OdDb::kFrontView      3       Front view with respect to the UCS 
+    OdDb::kBackView       4       Back view with respect to the UCS 
+    OdDb::kLeftView       5       Left view with respect to the UCS 
+    OdDb::kRightView      6       Right view with respect to the UCS 
+    </table>
+  */
+  void setUcs(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& xAxis, 
+    const OdGeVector3d& yAxis);
+
+  void setUcs(
+    OdDb::OrthographicView viewType, const OdDbDatabase* pDb = 0);
+
+  void setUcs(
+    const OdDbObjectId& ucsId);
+
+  /** \details
+    Sets the UCS associated with this Viewport object to the WCS. 
+  */
+  void setUcsToWorld();
+
+  /** \details
+    Sets the elevation of the UCS plane of this Viewport object (DXF 146).
+    \param elevation [in]  Elevation.
+    \remarks
+    The elevation is the distance from the WCS origin to the plane of this Viewport object.
+  */
+  void setElevation(
+    double elevation);
+  
+  /*
+  bool isViewOrthographic(OdDb::OrthographicView& view) const;
+
+  void setViewDirection(OdDb::OrthographicView view);
+  */
+  
+  /** \details
+    Returns true if and only if the UCS that is associated with this Viewport object will become active
+    with the activation of this Viewport object.
+  */
+  bool isUcsSavedWithViewport() const;
+
+  /** \details
+    Controls the activation of the UCS that is associated with this Viewport object 
+    with the activation of this Viewport object.
+    
+    \param ucsPerViewport [in]  Controls activation of the UCS.
+  */
+  void setUcsPerViewport(
+    bool ucsPerViewport);
+  
+  /** \details
+    Set the render mode of this Viewport object (DXF 281).
+    \param renderMode [in]  Render mode.
+    \remarks
+    renderMode must be one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  void setRenderMode(
+    OdDb::RenderMode renderMode);
+
+  /** \details
+    Returns the render mode of this Viewport object (DXF 281).
+
+    \remarks
+    renderMode() returns one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  OdDb::RenderMode renderMode() const;
+
+  /** \details
+    Returns the shade plot type of the current viewport. 
+
+    \remarks
+    shadePlot determines how this Viewport object will plot.
+  */
+  ShadePlotType shadePlot() const;
+
+  /** \details
+    Set the shade plot type of this Viewport object (DXF 281).
+    \param shadePlot [in]  Shade plot type.
+    \remarks
+    shadePlot determines how this Viewport object will plot.
+  */
+  void setShadePlot(
+    const ShadePlotType shadePlot);
+
+  // New in R21 functions
+
+  OdDbObjectId shadePlotId() const;
+  void         setShadePlot(const ShadePlotType type, const OdDbObjectId& shadePlotId);
+
+  bool         plotWireframe() const;
+  bool         plotAsRaster() const;
+
+  OdDbObjectId background() const;
+  void         setBackground(const OdDbObjectId& backgroundId);
+
+  // Visual Styles
+
+  OdDbObjectId visualStyle() const;
+  void         setVisualStyle(const OdDbObjectId& visualStyle);
+
+  // Viewport Lighting
+
+  bool                isDefaultLightingOn() const;
+  void                setDefaultLightingOn(bool on);
+  OdGiViewportTraits::DefaultLightingType defaultLightingType() const;
+  void                setDefaultLightingType(OdGiViewportTraits::DefaultLightingType typ);
+
+  // Brightness controls the relative intensity of lights.
+
+  double              brightness() const;
+  void                setBrightness(double);
+
+  // Contrast controls intensity of ambient light, relative to other lights.
+
+  double              contrast() const;
+  void                setContrast(double);
+
+  OdCmColor           ambientLightColor() const;
+  void                setAmbientLightColor(const OdCmColor& clr);
+
+  // A single sun (distant light) can be associated with each viewport.
+
+  OdDbObjectId        sunId() const;
+  OdDbObjectId        setSun(OdDbSun* pSun);
+
+  void toneOperatorParameters(OdGiToneOperatorParameters &params) const;
+  void setToneOperatorParameters(const OdGiToneOperatorParameters &params);
+
+  OdResult setAnnotationScale(const OdDbAnnotationScale* pScaleObj);
+  OdDbAnnotationScalePtr annotationScale() const;
+  
+  bool isGridBoundToLimits() const;
+  void setGridBoundToLimits(bool bNewVal);
+
+  bool isGridAdaptive() const;
+  void setGridAdaptive(bool bNewVal);
+
+  bool isGridSubdivisionRestricted() const;
+  void setGridSubdivisionRestricted(bool bNewVal);
+
+  bool isGridFollow() const;
+  void setGridFollow(bool bNewVal);
+
+  OdUInt16 gridMajor() const;
+  void setGridMajor(OdUInt16);
+
+  // View association methods
+
+  void setModelView(const OdDbXrefObjectId &objId);
+  OdDbXrefObjectId getModelView() const;
+  void removeModelView();
+  OdResult syncModelView();
+
+  void setSheetView(const OdDbObjectId &objId);
+  OdDbObjectId getSheetView() const;
+  void removeSheetView();
+
+  void setLabelBlock(const OdDbObjectId objId);
+  OdDbObjectId getLabelBlock() const;
+  void removeLabelBlock();
+
+  // OdGsView association methods
+
+  OdGsView* gsView() const;
+  void setGsView(OdGsView*);
+
+  // OdDbEntity overrides
+
+  virtual void subSetDatabaseDefaults(
+    OdDbDatabase* pDb, 
+    bool doSubents);
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  void subClose();
+
+  OdResult subErase(
+    bool erasing);
+
+  /** \details
+    Adjusts the parameters of this Viewport object such that the view is zoomed 
+    to the extents of the drawing.
+  */
+  void zoomExtents();
+
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  virtual OdResult subTransformBy(
+  const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
+
+  void modified(const OdDbObject* pObj);
+
+  void erased(const OdDbObject* pObj, bool pErasing);
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+
+  virtual OdResult explodeGeometry(OdRxObjectPtrArray& entitySet) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewport object pointers.
+*/
+typedef OdSmartPtr<OdDbViewport> OdDbViewportPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTable.h
new file mode 100755
index 0000000..f29a2a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTable.h
@@ -0,0 +1,99 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBVIEWPORTTABLE_INCLUDED
+#define _ODDBVIEWPORTTABLE_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbAbstractViewTable.h"
+
+class OdDbViewportTableRecord;
+
+/** \details
+    This class implements the ViewportTable, which represents tiled viewports in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    \note
+    Do not derive from this class.
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbViewportTable: public OdDbAbstractViewTable
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewportTable);
+
+  /** \note
+    Teigha applications typically will not use this constructor, insofar as 
+    this class is a base class.
+  */
+  OdDbViewportTable();
+
+  /** \details
+    Makes the specified viewport the active viewport of this ViewportTable object.
+
+    \param viewportId [in]  Object ID of the active viewport.      
+  */
+  void SetActiveViewport(
+    OdDbObjectId viewportId);
+
+  /** \details
+    Returns the active viewport of this ViewportTable object.
+  */
+  OdDbObjectId getActiveViewportId() const;
+
+  /** \details
+    Deletes the specified configuration from this ViewportTable object.
+    
+    \param configName [in]  Configuration name to delete.
+  */
+  void DeleteConfiguration(
+    const OdString& configName);
+
+  OdDbObjectId add(
+    OdDbSymbolTableRecord* pRecord);
+
+  OdResult dxfIn(
+    OdDbDxfFiler* pFiler);
+
+  OdResult subGetClassID(
+    void* pClsid) const;
+
+  void subClose();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbTextStyleTable object pointers.
+*/
+typedef OdSmartPtr<OdDbViewportTable> OdDbViewportTablePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBVIEWPORTTABLE_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTableRecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTableRecord.h
new file mode 100755
index 0000000..f7d9606
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbViewportTableRecord.h
@@ -0,0 +1,370 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBVIEWPORTTABLERECORD_INCLUDED
+#define _ODDBVIEWPORTTABLERECORD_INCLUDED
+
+#include "TD_PackPush.h"
+
+#include "DbAbstractViewTableRecord.h"
+
+class OdGsDCRect;
+class OdDbViewportTable;
+class OdGeExtents;
+class OdGeMatrix3d;
+
+/** \details
+    This class represents tiled viewport records in the OdDbViewportTable in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbViewportTableRecord : public OdDbAbstractViewTableRecord
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewportTableRecord);
+
+  OdDbViewportTableRecord();
+
+  typedef OdDbViewportTable TableType;
+
+/** \details
+    Returns the lower left corner of this Viewport (DXF 10).
+    
+    \remarks
+    * point == (0.0, 0.0) corresponds to the lower-left corner of the graphics area.
+    * point == (1.0, 1.0) corresponds to the upper-right corner of the graphics area.
+*/
+  OdGePoint2d lowerLeftCorner() const;
+
+  /** \details
+    Sets the lower-left corner of this Viewport (DXF 10).
+    
+    \param point [in]  Lower-left corner.
+    
+    \remarks
+    * point == (0.0, 0.0) corresponds to the lower-left corner of the graphics area.
+    * point == (1.0, 1.0) corresponds to the upper-right corner of the graphics area.
+  */
+  void setLowerLeftCorner(
+    const OdGePoint2d& point);
+
+  /** \details
+    Returns the upper right corner of this Viewport (DXF 11).
+    
+    \remarks
+    * point == (0.0, 0.0) corresponds to the lower-left corner of the graphics area.
+    * point == (1.0, 1.0) corresponds to the upper-right corner of the graphics area.
+  */
+  OdGePoint2d upperRightCorner() const;
+
+  /** \details
+    Sets the upper right corner of this Viewport (DXF 11).
+
+    \param point [in]  Upper-right corner.
+    
+    \remarks
+    * point == (0.0, 0.0) corresponds to the lower-left corner of the graphics area.
+    * point == (1.0, 1.0) corresponds to the upper-right corner of the graphics area.
+  */
+  void setUpperRightCorner(
+    const OdGePoint2d& point);
+
+  /** \details
+    Returns true if and only if this Viewport will display
+    a plan view whenever the UCS for this Viewport changes.
+    (DXF 71, bit 0x08).
+  */
+  bool ucsFollowMode() const;
+
+  /** \details
+    Controls the display of 
+    a plan view in this Viewport whenever the UCS for this Viewport changes.
+    (DXF 71, bit 0x08).
+
+    \param ucsFollowMode [in]  Controls UCSFollowMode.
+  */
+  void setUcsFollowMode(
+    bool ucsFollowMode);
+
+  /** \details
+    Returns the circle zoom percent for this Viewport (DXF 72).
+    \remarks
+    circleSides() returns a number in the range [1..20000].
+  */
+  OdUInt16 circleSides() const;
+
+  /** \details
+    Sets the circle zoom percent for this Viewport (DXF 72).
+    \param circleSides [in]  circle zoom percent [1..20000].
+  */
+  void setCircleSides(
+    OdUInt16 circleSides);
+
+  /** \details
+    Returns true if and only if this Viewport will display a UCS icon (DXF 74, bit 0x01).
+  */
+  bool iconEnabled() const;
+
+  /** \details
+    Controls the display of a UCS icon by this Viewport (DXF 74, bit 0x01).
+
+    \param iconEnabled [in]  Controls the display.
+  */
+  void setIconEnabled(
+    bool iconEnabled);
+
+  /** \details
+    Returns true if and only if this Viewport will display a UCS icon at the UCS origin (DXF 74, bit 0x02).
+  */
+  bool iconAtOrigin() const;
+
+  /** \details
+    Controls the display of a UCS icon at the UCS origin by this Viewport (DXF 74, bit 0x02).
+    \param atOrigin [in]  Controls the display.   
+  */
+  void setIconAtOrigin(
+    bool atOrigin);
+
+  /** \details
+    Returns true if and only if this Viewport will display a grid (DXF 76).
+  */
+  bool gridEnabled() const;
+
+  /** \details
+    Controls the display of a grid by this Viewport (DXF 76).
+    \param gridEnabled [in]  Controls the display.
+  */
+  void setGridEnabled(
+    bool gridEnabled);
+
+  /** \details
+    Returns the grid increments for this Viewport (DXF 15, 25).
+  */
+  OdGePoint2d gridIncrements() const;
+
+  /** \details
+    Sets the grid increments for this Viewport (DXF 15, 25).
+    \param gridIncrements [in]  Grid increments.
+  */
+  void setGridIncrements(
+    const OdGePoint2d& gridIncrements);
+
+  /** \details
+    Returns true and only if snap is enabled for this Viewport (DXF 75).
+  */
+  bool snapEnabled() const;
+
+  /** \details
+    Controls the snap for this Viewport (DXF 75).
+    \param snapEnabled [in]  Controls the snap.
+  */
+  void setSnapEnabled(
+    bool snapEnabled);
+
+  /** \details
+    Returns true and only if isometric snap is enabled for this Viewport (DXF 75).
+  */
+  bool isometricSnapEnabled() const;
+
+  /** \details
+    Controls the isometric snap for this Viewport (DXF 75).
+    \param isometricSnapEnabled [in]  Controls the isometric snap.
+  */
+  void setIsometricSnapEnabled(bool isometricSnapEnabled);
+  /** \details
+    Returns the snap IsoPair for this Viewport (DXF 78).
+    
+    \remarks
+    snapPair() returns one of the following:
+    
+    <table>
+    Description      Value
+    Left isoplane    0
+    Top isoplane     1
+    Right isoplane   2
+    </table>
+  */
+  OdInt16 snapPair() const;
+  
+  
+  /** \details
+    Returns the snap IsoPair for this Viewport (DXF 78).
+    
+    \remarks
+    snapPair must be one of the following:
+    
+    <table>
+    Description      Value
+    Left isoplane    0
+    Top isoplane     1
+    Right isoplane   2
+    </table>
+  */
+  void setSnapPair(
+    OdInt16 snapPair);
+
+
+  /** \details
+    Returns the snap rotation angle for this Viewport (DXF 50).
+    \note
+    All angles are expressed in radians.
+  */
+  double snapAngle() const;
+  /** \details
+    Sets the snap rotation angle for this Viewport (DXF 50).
+    \param snapAngle [in]  Snap angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void setSnapAngle(double snapAngle);
+  /** \details
+    Returns the snap Base for this Viewport (DXF 13, 23).
+    \note
+    All angles are expressed in radians.
+  */
+  OdGePoint2d snapBase() const;
+  /** \details
+    Sets the snap Base for this Viewport (DXF 13, 23).
+    \param snapBase [in]  Snap base.
+    \note
+    All angles are expressed in radians.
+  */
+  void setSnapBase(
+    const OdGePoint2d& snapBase);
+  /** \details
+    Returns the snap increments for this Viewport (DXF 14, 24).
+  */
+    OdGePoint2d snapIncrements() const;
+  /** \details
+    Sets the snap increments for this Viewport (DXF 14, 24).
+    \param snapIncrements [in]  Snap increments.
+  */
+    void setSnapIncrements(const OdGePoint2d& snapIncrements);
+
+  /** \details
+    Returns true if and only if the UCS saved with this Viewport will become
+    active whenever this Viewport is made active (DXF 65).
+  */
+  bool isUcsSavedWithViewport() const;
+
+  /** \details
+    Controls the UcsPerViewport for this Viewport (DXF 65).
+    
+    \param ucsPerViewport [in]  Controls UcsPerViewport.
+    \remarks
+    If and only if UcsPerViewport is true, The UCS saved with this Viewport will become
+    active whenever this Viewport is made active>
+  */
+  void setUcsPerViewport( bool ucsPerViewport);
+
+  /** \details
+    Returns true if and only if the fast zooms are enabled for this Viewport (DXF 73).
+  */
+  bool fastZoomsEnabled() const;
+  
+  /** \details
+    Controls fast zooms for this Viewport (DXF 73).
+    \param fastZoomsEnabled [in]  Fast zooms enabled.
+  */
+  void setFastZoomsEnabled(
+    bool fastZoomsEnabled);
+
+  // New R21 grid management API
+
+  bool isGridBoundToLimits() const;
+  void setGridBoundToLimits(bool enabled);
+       
+  bool isGridAdaptive() const;
+  void setGridAdaptive(bool enabled);
+       
+  bool isGridSubdivisionRestricted() const;
+  void setGridSubdivisionRestricted(bool enabled);
+       
+  bool isGridFollow() const;
+  void setGridFollow(bool enabled);
+
+  OdInt16 gridMajor() const;
+  void setGridMajor(OdInt16 value);
+
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult dxfInFields_R12(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields_R12(
+    OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Returns the OdGsView associated with this Viewpoint.
+  */
+  OdGsView* gsView() const;
+  /** \details
+    Sets the OdGsView associated with this Viewpoint.
+    \param pGsView [in]  Pointer to the GsView.
+  */
+  void setGsView(OdGsView* pGsView);
+  
+  /** \details
+      Returns the OdGiDrawable for this Viewport.
+  */
+  OdGiDrawable* drawable();
+
+  OdResult subGetClassID(void* pClsid) const;
+
+  virtual void copyFrom(const OdRxObject* pSource);
+
+  /** \details
+      Adjusts the parameters in this Viewport such that the view is zoomed 
+      to the extents of the drawing.
+  */
+  void zoomExtents();
+
+  void subClose();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbViewportTableRecord object pointers.
+*/
+typedef OdSmartPtr<OdDbViewportTableRecord> OdDbViewportTableRecordPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBVIEWPORTTABLERECORD_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVisualStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVisualStyle.h
new file mode 100755
index 0000000..124356c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbVisualStyle.h
@@ -0,0 +1,332 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBVISUALSTYLE_H
+#define OD_DBVISUALSTYLE_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "Gi/GiVisualStyle.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  // Legacy (shademode) styles
+  const wchar_t kszVSFlat[]                 = L"Flat";
+  const wchar_t kszVSFlatWithEdges[]        = L"FlatWithEdges";
+  const wchar_t kszVSGouraud[]              = L"Gouraud";
+  const wchar_t kszVSGouraudWithEdges[]     = L"GouraudWithEdges";
+
+  // Visual Styles
+  const wchar_t kszVS2DWireframe[]   = L"2dWireframe";
+  const wchar_t kszVS3DWireframe[]   = L"Wireframe"; // Was "3dWireframe" before (#11263)
+  const wchar_t kszVSBasic[]         = L"Basic";
+  const wchar_t kszVSHidden[]        = L"Hidden";    // Was "3D Hidden" before   (#11263)
+  const wchar_t kszVSRealistic[]     = L"Realistic";
+  const wchar_t kszVSConceptual[]    = L"Conceptual";
+  const wchar_t kszVSCustom[]        = L"Custom";
+  const wchar_t kszVSShadesOfGray[]  = L"Shades of Gray";
+  const wchar_t kszVSSketchy[]       = L"Sketchy";
+  const wchar_t kszVSXRay[]          = L"X-Ray";
+
+  // AirMax Visual Styles
+  const wchar_t kszVSShadedWithEdges[]      = L"Shaded with edges";
+  const wchar_t kszVSShaded[]               = L"Shaded";
+
+  // Highlight Visual Styles (internal use only)
+  const wchar_t kszVSDim[]           = L"Dim";
+  const wchar_t kszVSBrighten[]      = L"Brighten";
+  const wchar_t kszVSThicken[]       = L"Thicken";
+  const wchar_t kszVSTransparent[]   = L"Transparent";
+  const wchar_t kszVSLinePattern[]   = L"Linepattern";
+  const wchar_t kszVSFacePattern[]   = L"Facepattern";
+  const wchar_t kszVSColorChange[]   = L"ColorChange";
+
+  // Edge Style Override Visual Styles (internal use only)
+  const wchar_t kszVSJitterOff[]     = L"JitterOff";
+  const wchar_t kszVSOverhangOff[]   = L"OverhangOff";
+  const wchar_t kszVSEdgeColorOff[]  = L"EdgeColorOff";
+}
+/** \details
+    This class represents a visual style (a collection of properties) in an OdDbDatabase instance.
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbVisualStyle : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbVisualStyle);
+
+  /** \details
+      Default constructor.
+  */
+  OdDbVisualStyle();
+
+  /** \details
+      Sets the description for the visual style.
+
+      \param pDescription [in]  Reference to a string that contains the description for this visual style to set.
+  */
+  void setDescription(const OdString& pDescription);
+
+  /** \details
+      Returns the description for the visual style as a string.
+  */
+  const OdString description () const;
+
+  /** \details
+      Sets the type of the visual style. All available types are defined in the OdGiVisualStyle::Type enumeration.  
+
+      \param type [in]  The visual style type to set.
+  */
+  void setType(OdGiVisualStyle::Type type);
+
+  /** \details
+      Returns the type of the visual style. All available types are defined in the OdGiVisualStyle::Type enumeration.  
+  */
+  OdGiVisualStyle::Type type() const;
+
+  /** \details
+      Sets the face style of the visual style.  
+
+      \param faceStyle [in]  Reference to the OdGiFaceStyle object to set.
+  */
+  void setFaceStyle(const OdGiFaceStyle& faceStyle);
+
+  /** \details
+      Returns a reference to a face style of the visual style.  
+  */
+  const OdGiFaceStyle& faceStyle() const;
+
+  /** \details
+      Sets the edge style of the visual style.
+
+      \param edgeStyle [in]  Reference to the OdGiEdgeStyle object to set.
+  */
+  void setEdgeStyle(const OdGiEdgeStyle& edgeStyle);
+
+  /** \details
+      Returns a reference to an edge style of the visual style.  
+  */
+  const OdGiEdgeStyle& edgeStyle() const;
+
+  /** \details
+      Sets the display style of the visual style.
+
+      \param displayStyle [in]  Reference to the OdGiDisplayStyle object to set.
+  */
+  void setDisplayStyle(const OdGiDisplayStyle& displayStyle);
+
+  /** \details
+      Returns a reference to a display style of the visual style.  
+  */
+  const OdGiDisplayStyle& displayStyle() const;
+
+  /** \details
+      Determines whether the visual style is for internal use only.
+
+      \returns
+      true - if the visual style is for internal use only.
+      false - otherwise.
+  */
+  bool isInternalUseOnly() const;
+
+  /** \details
+      Sets a flag that indicates the visual style is for internal use only.
+
+      \param bInternalUseOnly [in]  Boolean value to set.
+  */
+  void setInternalUseOnly(bool bInternalUseOnly);
+
+  /** \details
+      Creates a face style of the visual style.
+
+      \returns
+      A smart pointer to the created OdGiFaceStyle object.
+  */
+  static OdGiFaceStylePtr createFaceStyle();
+
+  /** \details
+      Creates an edge style of the visual style.
+
+      \returns
+      A smart pointer to the created OdGiEdgeStyle object.
+  */
+  static OdGiEdgeStylePtr createEdgeStyle();
+
+  /** \details
+      Creates a display style of the visual style.
+
+      \returns
+      A smart pointer to the created OdGiDisplayStyle object.
+  */
+  static OdGiDisplayStylePtr createDisplayStyle();
+
+  /** \details
+      Creates a OdGiVisualStyle instance.
+
+      \returns
+      A smart pointer to the created OdGiVisualStyle object.
+  */
+  static OdGiVisualStylePtr createVisualStyle();
+
+  /** \details
+      Sets a property of the visual style.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param pVal [in]  Pointer to the OdGiVariant property value to set.
+      \param op [in]  OdGiVisualStyleOperations::Operation to use for setting the property. 
+  */
+  void setTrait(OdGiVisualStyleProperties::Property prop, const OdGiVariant *pVal,
+                OdGiVisualStyleOperations::Operation op = OdGiVisualStyleOperations::kSet);
+  /** \details
+      Sets an integer property of the visual style.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param nVal [in]  Integer property value to set.
+      \param op [in]  OdGiVisualStyleOperations::Operation to use for setting the property. 
+  */
+  void setTrait(OdGiVisualStyleProperties::Property prop, OdInt32 nVal,
+                OdGiVisualStyleOperations::Operation op = OdGiVisualStyleOperations::kSet);
+  
+  /** \details
+      Sets a boolean property of the visual style.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param bVal [in]  Boolean property value to set.
+      \param op [in]  OdGiVisualStyleOperations::Operation to use for setting the property. 
+  */
+  void setTrait(OdGiVisualStyleProperties::Property prop, bool bVal,
+                OdGiVisualStyleOperations::Operation op = OdGiVisualStyleOperations::kSet);
+  
+  /** \details
+      Sets a double property of the visual style.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param dVal [in]  Boolean property value to set.
+      \param op [in]  OdGiVisualStyleOperations::Operation to use for setting the property. 
+  */
+  void setTrait(OdGiVisualStyleProperties::Property prop, double dVal,
+                OdGiVisualStyleOperations::Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+      Sets a color property of the visual style with given RGB component values.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param red [in]  Red component value to set.
+      \param green [in]  Green component value to set.
+      \param blue [in]  Blue component value to set.
+      \param op [in]  OdGiVisualStyleOperations::Operation to use for setting the property. 
+  */
+  void setTrait(OdGiVisualStyleProperties::Property prop, double red, double green, double blue,
+                OdGiVisualStyleOperations::Operation op = OdGiVisualStyleOperations::kSet);
+  
+  /** \details
+      Sets a color property of the visual style by the given OdCmColor value.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param pColor [in]  Pointer to the OdCmColor value to set.
+      \param op [in]  OdGiVisualStyleOperations::Operation to use for setting the property. 
+  */
+  void setTrait(OdGiVisualStyleProperties::Property prop, const OdCmColor *pColor,
+                OdGiVisualStyleOperations::Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+      Sets a string property of the visual style.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param strVal [in]  Reference to the OdString value to set.
+      \param op [in]  OdGiVisualStyleOperations::Operation to use for setting the property. 
+  */
+  void setTrait(OdGiVisualStyleProperties::Property prop, const OdString &strVal,
+                OdGiVisualStyleOperations::Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+      Gets a property of the visual style and an operation that is currently used for this property.
+
+      \param prop [in]  OdGiVisualStyleProperties::Property to set.
+      \param op [out]  Output OdGiVisualStyleOperations::Operation that is currently in effect for this property. 
+
+      \returns
+      Returns a smart pointer to the OdGiVariant value of the property.
+  */
+  OdGiVariantPtr trait(OdGiVisualStyleProperties::Property prop, OdGiVisualStyleOperations::Operation *pOp = NULL) const;
+
+  /** \details
+      Sets a property flag for the visual style (for properties that are bitfield enumerations).
+
+      \param flagProp [in]  OdGiVisualStyleProperties::Property to set.
+      \param flagVal [in]  Flag value to set. 
+      \param bEnable [in]  Boolean value that defines if the flag is enabled. Use true to enable the flag, false to disable.
+  */
+  void setTraitFlag(OdGiVisualStyleProperties::Property flagProp, OdUInt32 flagVal, bool bEnable = true);
+
+  /** \details
+      Gets a property flag from the visual style (for properties that are bitfield enumerations).
+
+      \param flagProp [in]  OdGiVisualStyleProperties::Property to get.
+      \param flagVal [in]  Flag value to get. 
+      
+      \returns
+      true - if the flag is enabled.
+      false - otherwise.
+  */
+  bool traitFlag(OdGiVisualStyleProperties::Property flagProp, OdUInt32 flagVal) const;
+
+  /** \details
+      Gets a name (key) of the OdGiVisualStyle object in the dictionary.
+
+      \param value [out]  A reference to a string value to get the name.
+  */
+  void name(OdString &value) const;
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdGiDrawable* drawable();
+
+  virtual OdUInt32 subSetAttributes(
+    OdGiDrawableTraits* pTraits) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbVisualStyle object pointers.
+*/
+typedef OdSmartPtr<OdDbVisualStyle> OdDbVisualStylePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DBVISUALSTYLE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeout.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeout.h
new file mode 100755
index 0000000..ab537e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeout.h
@@ -0,0 +1,75 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_WIPEOUT_H
+#define OD_WIPEOUT_H
+
+#include "TD_PackPush.h"
+
+#include "DbRasterImage.h"
+
+/** \details
+  This class represents wipeout entities in an OdDbDatabase instance.
+  Library: TD_Db
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbWipeout : public OdDbRasterImage
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbWipeout);
+
+  OdDbWipeout();
+
+  /** \details
+      Sets orientation and boundary for this Wipeout entity (DXF 10, 11, 12, 71, 14, 24).
+      \param boundary [in]  Array of planar WCS points.
+  */
+  void setBoundary(const OdGePoint3dArray& boundary);
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const ODRX_OVERRIDE;
+
+  virtual OdResult subGetClassID(void* pClsid) const ODRX_OVERRIDE;
+};
+ 
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbWipeout object pointers.
+*/
+typedef OdSmartPtr<OdDbWipeout> OdDbWipeoutPtr;
+
+#include "TD_PackPop.h"
+
+#endif  // OD_WIPEOUT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeoutVariables.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeoutVariables.h
new file mode 100755
index 0000000..f84aeaf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbWipeoutVariables.h
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBWIPEOUTVARIABLES_H
+#define OD_DBWIPEOUTVARIABLES_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+
+
+class OdDbWipeoutVariables;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbWipeoutVariables object pointers.
+*/
+typedef OdSmartPtr<OdDbWipeoutVariables> OdDbWipeoutVariablesPtr;
+
+/** \details
+    Represents the Wipeout Variables object in an OdDbDatabase instance.
+    
+    Library: TD_Db
+  
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbWipeoutVariables : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbWipeoutVariables);
+
+  OdDbWipeoutVariables();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Returns the frame display flag for this Variables object (DXF 70).
+  */
+  bool showFrame() const;
+
+  /** \details
+    Sets the frame display flag for this Variables object (DXF 70).
+    \param showFrame [in]  Controls frame visibility
+    \param bUpdateWIPEOUTFRAME [in]  Controls if WIPEOUTFRAME system variable is also updated.
+
+    \remarks
+    WIPEOUTFRAME was introduced in 2013 file format and should be used to control
+    frame visiblity. bUpdateWIPEOUTFRAME argument added to keep existing code working.
+  */
+  void setShowFrame(bool showFrame, bool bUpdateWIPEOUTFRAME = true);
+
+  /** \details
+    Opens the Wipeout Variables object in the specified database.
+    \param openMode [in]  Mode in which to open the wipeout variables object.
+    \param pDb [in]  Pointer to the database that contains the wipeout variables object.
+
+    \remarks
+    If the Wipeout Variables object does not exist in the specified database
+    it is created.
+    
+    Returns a SmartPointer to the Wipeout Variables object.
+  */
+  static OdDbWipeoutVariablesPtr openWipeoutVariables(OdDbDatabase* pDb,
+    OdDb::OpenMode openMode = OdDb::kForRead);
+};
+
+#include "TD_PackPop.h"
+
+#endif //OD_DBWIPEOUTVARIABLES_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXline.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXline.h
new file mode 100755
index 0000000..f13ad2e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXline.h
@@ -0,0 +1,369 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_DBXLINE_H
+#define OD_DBXLINE_H
+
+#include "TD_PackPush.h"
+
+#include "DbCurve.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+
+/** \details
+  <group OdDb_Classes>
+
+  This class implements the Xline object (Infinity Line entity) in the database. 
+  This class inherits the base functionality of entities. It is used as a construction 
+  line passed through a point.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_xline_sample.html, Example of Working with the Xline Object>
+
+  \sa
+  <link db_xline.html, Working with Infinite Lines>
+
+  OdDbRay, OdDbLine classes
+*/
+class TOOLKIT_EXPORT OdDbXline : public OdDbCurve
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbXline);
+
+  /** \details
+    Builds an instance of the Xline object.
+    
+    \remarks
+    Use the static pseudo-constructor instead it.
+    See: <link db_xline_overview.html, Overview of Infinite Lines>
+  */
+  OdDbXline();
+
+
+  /** \details
+    Returns the WCS coordinates of the base point through which the inifinity line passes 
+    (DXF 10) as three-dimensional point instance.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_specific.html, Specific Infinite Line Properties>
+
+    OdDbXline::setBasePoint() method
+  */
+  OdGePoint3d basePoint() const;
+
+
+  /** \details
+    Sets the base point of the infinity line (DXF 10). The initial value is (0,0,0) by default.
+
+    \param geBasePoint [in]  Three-dimensional point instance to set the base point.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_specific.html, Specific Infinite Line Properties>
+
+    OdDbXline::basePoint() method
+  */
+  void setBasePoint( const OdGePoint3d& geBasePoint );
+
+
+  /** \details
+    Returns the WCS unit direction vector of the infinity line (DXF 11) as 
+    three-dimensional vector instance. This vector orients the infinity line
+    in would space.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_specific.html, Specific Infinite Line Properties>
+
+    OdDbXline::setUnitDir() method
+  */
+  OdGeVector3d unitDir() const;
+
+
+  /** \details
+    Sets the unit direction vector of the infinity line (DXF 11) in WCS.
+    The initial value is (0,0,1) by default.
+
+    \param geDirVector [in]  Three-dimensional vector instance to set the infinity line direction.
+
+    \remarks
+    The method automatically converts the specified coordinates to a unit vector.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_specific.html, Specific Infinite Line Properties>
+
+    OdDbXline::unitDir() method
+  */
+  void setUnitDir( const OdGeVector3d& geDirVector );
+
+
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  virtual bool subWorldDraw(
+    OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subGetGeomExtents(
+    OdGeExtents3d& extents) const;
+
+  /* OdDbEntity methods */
+
+  virtual OdResult subTransformBy(
+    const OdGeMatrix3d& xfm);
+
+  virtual bool isClosed() const;
+
+  virtual bool isPeriodic() const;
+
+
+  /** \details
+    Determines whether the infinity line entity is planar as a Boolean value and returns True.
+    This method is inherited from the OdDbEntity class.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline.html, Working with Infinite Lines>
+
+    OdDbXline::getPlane(), OdDbEntity::isPlanar() methods
+  */
+  virtual bool isPlanar() const;
+
+
+  /** \details
+    Gets an arbitrary plane passed through the infinity line entity. This method is inherited   
+    from the OdDbEntity class.
+
+    \param gePlane [out]  Reference to a variable in which this method must save the plane parameters as 
+                a plane instance.
+    \param gePlanarity [out] Reference to a variable in which this method must save the plane type
+                    (returns kLinear - arbitrary plane).
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline.html, Working with Infinite Lines>
+
+    OdDbXline::isPlanar(), OdDbEntity::getPlane() methods
+  */
+  virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const;
+
+
+  /** \details
+    This method is not applicable for the infinity line entity.
+
+    \param startParam [out]  Reference to a variable of a Double type.
+  */
+  virtual OdResult getStartParam( double& startParam ) const;
+
+
+  /** \details
+    This method is not applicable for the infinity line entity.
+
+    \param endParam [out]  Reference to a variable of a Double type.
+  */
+  virtual OdResult getEndParam ( double& endParam ) const;
+
+
+  /** \details
+    This method is not applicable for the infinity line entity.
+
+    \param startPoint [out]  Reference to a variable which is three-dimensional point instance.
+  */
+  virtual OdResult getStartPoint( OdGePoint3d& startPoint ) const;
+
+
+  /** \details
+    This method is not applicable for the infinity line entity.
+
+    \param endPoint [out]  Reference to a variable which is three-dimensional point instance.
+  */
+  virtual OdResult getEndPoint( OdGePoint3d& endPoint ) const;
+
+
+  /** \details
+    Computes the WCS coordinates of the point on the infinity line at the specified 
+    parameter value.
+
+    \param param [in]  Parameter value specifying the point on the infinity line as a Double value. 
+    \param pointOnCurve [out]  Reference to a variable in which this method must save the 
+                     three-dimensional point instance corresponding to the parameter.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_compute.html, Computed Infinite Line Properties>
+  */
+  virtual OdResult getPointAtParam( double param, OdGePoint3d& pointOnCurve ) const;
+
+
+  /** \details
+    Computes the parameter at the point placed on the infinite line.
+
+    \param pointOnCurve [in]  Three-dimensional point instance which specifies the point on 
+                     the infinite line. 
+    \param [out] Reference to a variable in which this method must save the parameter   
+              value as a Double value.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_compute.html, Computed Infinite Line Properties>
+  */
+  virtual OdResult getParamAtPoint( const OdGePoint3d& pointOnCurve, double& param ) const;
+
+
+  /** \details
+    Computes the distance along the infinite line measured from the base point in drawing units   
+    at the specified parameter.
+
+    \param param [in]  Parameter value specifying the point on the infinite line as a Double value. 
+    \param dist  [out] Reference to a variable in which this method must save the distance value 
+              as a Double value.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_compute.html, Computed Infinite Line Properties>
+  */
+  virtual OdResult getDistAtParam( double param, double& dist ) const;
+
+
+  /** \details
+    Computes the parameter at the distance along the infinite line measured from the base point.
+
+    \param dist [in]   Distance value along the infinite line as a Double value in drawing units. 
+    \param param [out]  Reference to a variable in which this method must save the parameter value  
+              as a Double value.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_compute.html, Computed Infinite Line Properties>
+  */
+  virtual OdResult getParamAtDist( double dist, double& param ) const;
+
+
+  /** \details
+    Computes the first derivative for the specified parameter of the infinity line entity and 
+    returns the three-dimensional vector instance. The first derivative is constant for any  
+    point of the infinite line.
+
+    \param param [in]  Parameter value specifying the point on the infinite line as a Double value. 
+    \param firstDeriv [out]  Reference to a variable in which this method must save the first derivative  
+                   as three-dimensional vector instance.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_compute.html, Computed Infinite Line Properties>
+  */
+  virtual OdResult getFirstDeriv ( double param, OdGeVector3d& firstDeriv ) const;
+
+
+  /** \details
+    Computes the second derivative for the specified parameter of the infinity line entity and
+    returns the three-dimensional vector instance. The second derivative has (0,0,0) coordinates
+    for any point of the infinite line.
+
+    \param param [in]  Parameter value specifying the point on the infinite line as a Double value. 
+    \param secondDeriv [out]  Reference to a variable in which this method must save the second derivative  
+                    as three-dimensional vector instance.
+
+    \sa
+    <link db_xline_sample.html, Example of Working with the Xline Object>
+
+    \sa
+    <link db_xline_compute.html, Computed Infinite Line Properties>
+  */
+  virtual OdResult getSecondDeriv( double param, OdGeVector3d& secondDeriv ) const;
+
+
+  /** \details
+    This method is not applicable for the infinity line entity.
+  */
+  virtual OdResult getArea( double& area ) const;
+
+
+  TD_USING(OdDbCurve::getFirstDeriv);
+  TD_USING(OdDbCurve::getSecondDeriv);
+
+  /*
+  void getOffsetCurvesGivenPlaneNormal(
+    const OdGeVector3d& normal, double offsetDist,
+    OdRxObjectPtrArray& offsetCurves) const; //Replace OdRxObjectPtrArray
+  */
+
+  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
+  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
+};
+
+/** \details
+  The typified smart pointer for the Xline object (Infinity line entity). This template 
+  class is specialization of the OdSmartPtr class for the OdDbXline class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbXline> OdDbXlinePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrecord.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrecord.h
new file mode 100755
index 0000000..222cdb1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrecord.h
@@ -0,0 +1,233 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDB_XRECORD_H
+#define ODDB_XRECORD_H /*!DOM*/
+
+#include "TD_PackPush.h"
+
+//#define ODDB_XRECORD_CLASS          "OdDbXrecord"
+
+#include "DbObject.h"
+#include "DbFiler.h"
+
+class OdDbXrecordIteratorImpl;
+
+/** \details
+    This class implements Iterators for the data lists in OdDbXrecord instances.  
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXrecordIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbXrecordIterator);
+
+  /** \details
+    Sets this Iterator object to reference the first ResBuf structure in the XRecord data list.
+     
+    \remarks
+    Allows multiple traversals of the data list.
+  */
+    void start();
+
+  /** \details
+    Returns true if and only if the traversal is complete.
+  */
+    bool done() const;
+ 
+  /** \details
+    Sets this Iterator object to reference the next ResBuf structure in the XRecord data list.
+
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+   bool next();
+  
+  /** \details
+    Returns the restype field of the current ResBuf structure in the XRecord data list.
+  */
+  int curRestype() const;
+  
+  /** \details
+    Returns a copy of the current ResBuf structure in the XRecord data list.
+    \param pDb [in]  Pointer to the OdDbDatabase used for Object ID resolution when this XRecord object is not database resident.
+  */
+  OdResBufPtr getCurResbuf(OdDbDatabase* pDb = 0) const;
+protected:
+  OdDbXrecordIterator(
+    OdDbXrecordIteratorImpl* pIterImpl);
+  OdDbXrecordIteratorImpl* m_pImpl;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbXrecordIterator object pointers.
+*/
+typedef OdSmartPtr<OdDbXrecordIterator> OdDbXrecordIteratorPtr;
+
+
+/** \details
+    This class implements XRecord objects in an OdDbDatabase, container objects
+    used attach arbitrary data to other OdDb objects.
+
+    \sa
+    TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXrecord : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbXrecord);
+
+  OdDbXrecord();
+
+  /** \details
+    Returns a copy of the ResBuf list owned by the XRecord object.
+
+    \param pDb [in]  Pointer to the OdDbDatabase used for Object ID resolution when this XRecord object is not database resident.
+    \param pStatus [in]  Pointer an OdResult to receive the status. 
+    
+    \remarks
+    If pStatus != NULL, returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResBufPtr rbChain(
+    OdDbDatabase* pDb = 0, 
+    OdResult* pStatus = 0) const;
+
+  /** \details
+    Returns an Iterator object that can be used to traverse this XRecord object.
+
+
+    \remarks
+    This method can be faster than using rbChain()
+
+    \param pDb [in]  Pointer to the OdDbDatabase used for Object ID resolution when this XRecord object is not database resident.
+  */
+  OdDbXrecordIteratorPtr newIterator(
+    OdDbDatabase* pDb = 0) const;
+
+  /** \details
+    Sets the data in this XRecord object to the data in the specified ResBuf chain. 
+    \param pDb [in]  Pointer to the OdDbDatabase used for Object ID resolution when this XRecord object is not database resident.
+    \param pRb [in]  Pointer to the first ResBuf in the ResBuf chain.
+  */
+  OdResult setFromRbChain(const OdResBuf* pRb, OdDbDatabase* pDb = 0);
+  
+  /** \details
+    Appends the data in the specified ResBuf chain to the data in this XRecord.
+
+    \param pRb [in]  Pointer to the first ResBuf in the ResBuf chain.
+    \param pDb [in]  Pointer to the OdDbDatabase used for Object ID resolution when this XRecord object is not database resident.
+  */
+  OdResult appendRbChain(
+    const OdResBuf* pRb, 
+    OdDbDatabase* pDb = 0);
+
+  /** \details
+    Returns true if and only if this XRecord object is set to translate 
+    data chain Object IDs during subDeepClone() and subWblockClone() operations.
+  */
+  bool isXlateReferences() const;
+
+  /** \details
+    Controls if this XRecord object is to translate 
+    data chain Object IDs during subDeepClone() and subWblockClone() operations.
+
+    \param xlateReferences [in]  Translate references, if and only if true. 
+  */
+  void setXlateReferences(
+    bool isXlateReferences);
+  
+  virtual OdResult dwgInFields(
+    OdDbDwgFiler* pFiler);
+
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+  
+  /** \details
+      Returns the merge style for this XRecord object (DXF 280).
+  */
+  virtual OdDb::DuplicateRecordCloning mergeStyle() const;
+
+   /** \details
+      Sets the merge style for this XRecord object (DXF 280).
+      
+      \param mergeStyle [in]  Merge style.
+   */
+  virtual void setMergeStyle(
+    OdDb::DuplicateRecordCloning mergeStyle);
+  
+  virtual OdResult subGetClassID(
+    void* pClsid) const;
+
+  enum
+  {
+    kOpenExisting     = 0,
+    kCreateIfNotFound = 1
+  };
+
+  /** \details
+    Opens for writing the specified XRecord object of the specified OdDbObject. 
+    \param creationFlag [in]  Creation flag. 
+    \param pObject [in]  Pointer to the Object.
+    \param key [in]  XRecord key.
+    \param keys [in]  Array of XRecord keys defining the path to the XRecord.
+    \param mergeStyle [in]  Merge style.
+    \remarks
+    Returns a SmartPointer to the opened XRecord, or NULL if the specified XRecord object
+    does not exist and creationFlag == kOpenExisting. 
+    
+    creationFlag must be one of the following:
+    
+    <table>
+    Name                  Value
+    kOpenExisting         0
+    kCreateIfNotFound     1
+    </table>
+    
+  */
+  static OdDbXrecordPtr open(OdDbObject* pObject, const OdString &key,
+    int creationFlag = kOpenExisting,
+    OdDb::DuplicateRecordCloning mergeStyle = OdDb::kDrcIgnore);
+
+  static OdDbXrecordPtr open(OdDbObject* pObject, const OdArray<OdString> &keys,
+    int creationFlag = kOpenExisting,
+    OdDb::DuplicateRecordCloning mergeStyle = OdDb::kDrcIgnore);
+};
+
+#include "TD_PackPop.h"
+
+#endif //ODDB_XRECORD_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefGraph.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefGraph.h
new file mode 100755
index 0000000..d958891
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefGraph.h
@@ -0,0 +1,264 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODDBXREFGRAPH_H_INCLUDED_
+#define _ODDBXREFGRAPH_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbGraph.h"
+#include "DbObjectId.h"
+#include "OdString.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum XrefStatus
+  {
+    kXrfNotAnXref     = 0,  // Not an Xref.
+    kXrfResolved      = 1,  // Resolved.
+    kXrfUnloaded      = 2,  // Unloaded.
+    kXrfUnreferenced  = 3,  // Unreferenced.
+    kXrfFileNotFound  = 4,  // File Not Found.
+    kXrfUnresolved    = 5   // Unresolved.
+  };  
+}
+
+class OdDbXrefGraphNode;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbXrefGraphNode object pointers.
+*/
+typedef OdSmartPtr<OdDbXrefGraphNode> OdDbXrefGraphNodePtr;
+
+/** \details
+    This class is a derived class for representing an Xref database.
+
+    \remarks
+    OdDbXrefGraph::getFrom() will populate an XrefGraph object with the Xref tree for a specified database.
+
+    \sa
+    * OdDbGraph
+    * OdDbGraphStack
+    * OdDbXrefGraph
+    * OdDbXrefGraphNode
+
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXrefGraphNode : public OdDbGraphNode
+{
+protected:
+  OdDbXrefGraphNode() : m_status(OdDb::kXrfNotAnXref) {}
+public:
+
+  ODRX_DECLARE_MEMBERS(OdDbXrefGraphNode);
+
+  virtual ~OdDbXrefGraphNode();
+  
+  /** \details
+    Returns the name associated with this XrefGraphNode object.
+  */
+  OdString name() const { return m_sName; }
+
+  /** \details
+    Returns the Object ID of the BlockTableRecord associated with this XrefGraphNode object.
+  */
+  OdDbObjectId blockId() const { return m_blockId; }
+
+  /** \details
+    Returns the database relevent to this XrefGraphNode object.
+  */
+  OdDbDatabase* database() const { return (OdDbDatabase*)data(); }
+  
+  /** \details
+    Sets the name associated with this XrefGraphNode object.
+    
+    \param name [in]  Name.
+  */
+  void setName(
+    const OdString& name) { m_sName = name; }
+    
+  /** \details
+    Sets the Object ID of the BlockTableRecord associated with this XrefGraphNode object.
+
+    \param blockId [in]  Object ID of BlockTableRecord.
+  */
+  void setBlockId(
+    OdDbObjectId blockId) { m_blockId = blockId; }
+   
+  /** \details
+    Sets the database relevent to this XrefGraphNode object.
+
+    \param pDb [in]  Pointer to the database.
+  */
+  void setDatabase(
+    OdDbDatabase* pDb) { setData(pDb); }
+  
+  /** \details
+    Returns true if and only if this XrefGraphNode represents an Xref that is not directly referenced
+    by the host drawing.
+  */
+  bool isNested() const { return !isMarkedAs(kFirstLevel); }
+
+  /** \details
+    Returns the status for this XrefGraphNode object.
+    
+    \remarks
+    xrefStatus() returns one of the following:
+
+    <table>
+    Name                      Value   Description
+    OdDb::kXrfNotAnXref       0       Not an Xref.
+    OdDb::kXrfResolved        1       Resolved.
+    OdDb::kXrfUnloaded        2       Unloaded.
+    OdDb::kXrfUnreferenced    3       Unreferenced.
+    OdDb::kXrfFileNotFound    4       File Not Found.
+    OdDb::kXrfUnresolved      5       Unresolved.
+    </table>
+      
+  */
+    OdDb::XrefStatus xrefStatus() const { return m_status; }
+
+
+  /** \details
+    Sets the status for this XrefGraphNode object.
+    
+    \remarks
+    xrefStatus must be one of the following:
+
+    <table>
+    Name                      Value   Description
+    OdDb::kXrfNotAnXref       0       Not an Xref.
+    OdDb::kXrfResolved        1       Resolved.
+    OdDb::kXrfUnloaded        2       Unloaded.
+    OdDb::kXrfUnreferenced    3       Unreferenced.
+    OdDb::kXrfFileNotFound    4       File Not Found.
+    OdDb::kXrfUnresolved      5       Unresolved.
+    </table>
+      
+  */
+    void setXrefStatus(
+    OdDb::XrefStatus xrefStatus) { m_status = xrefStatus; }
+
+  
+private:
+  OdString          m_sName;
+  OdDbObjectId      m_blockId;
+  OdDb::XrefStatus  m_status;
+  // OdDbDatabase* uses base class data() member
+};
+
+
+/** \details
+    This class is a derived class for representing the Xref tree of a database.
+    
+    \remarks
+    This class uses XrefGraphNode objects to represent an Xref database at each node.
+
+    \sa
+    * OdDbGraph
+    * OdDbGraphStack
+    * OdDbXrefGraph
+    * OdDbXrefGraphNode
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXrefGraph : public OdDbGraph
+{
+  OdDbXrefGraph(const OdDbXrefGraph&);
+  OdDbXrefGraph& operator =(const OdDbXrefGraph&);
+public:
+  OdDbXrefGraph() {}
+  virtual ~OdDbXrefGraph();
+  
+  /** \details
+    Returns the XrefGraphNode object corresponding to the specified parameter.
+    
+    \param name [in]  Name.
+    \param blockId [in]  Object ID of BlockTableRecord.
+    \param pDb [in]  Pointer to the database.
+    \param nodeIndex [in]  Node index. 
+    
+    \remarks
+    Return a null pointer if the specified node is not found.
+    
+    \note
+    getFrom() will populate an XrefGraph object with the Xref tree of a specified database.
+  */
+  OdDbXrefGraphNode* xrefNode(
+    const OdString& name) const;
+  OdDbXrefGraphNode* xrefNode(
+    OdDbObjectId blockId) const;
+  OdDbXrefGraphNode* xrefNode(
+    const OdDbDatabase* pDb) const;
+  OdDbXrefGraphNode* xrefNode(
+    int nodeIndex) const { return(OdDbXrefGraphNode*)node(nodeIndex); }
+    
+  /** \details
+    Returns the XrefGraphNode associated with the host drawing of this XrefGraph object.
+    
+    \remarks
+    Returns rootNode().
+  */
+    OdDbXrefGraphNode* hostDwg() const { return(OdDbXrefGraphNode*)rootNode(); }  
+  /** \details
+    Marks the unresolved Xrefs in this XrefGraph object, and their nested Xrefs, with the kUnresTree flag.
+    
+    \remarks
+    Not implemented, reserved.
+    Returns true if and only if there are any unresolved Xrefs.
+  */
+  bool markUnresolvedTrees();
+  
+  // cycle detection
+  
+  // virtual bool findCycles(OdDbGraphNode* pStart = 0);
+
+  /** \details
+    Populate the specified XrefGraph object with the Xref tree of the specified database.
+    
+    \param pDb [in]  Pointer to the database.
+    \param xrefGraph [out]  Receives the Xref tree. 
+    \param includeGhosts [in]  Ignored.
+
+    \remarks
+    xrefGraph is reset at the start of this function.
+  */
+  static void getFrom(
+    OdDbDatabase* pDb, 
+    OdDbXrefGraph& xrefGraph, 
+    bool includeGhosts = false);
+};
+#include "TD_PackPop.h"
+
+#endif // _ODDBXREFGRAPH_H_INCLUDED_
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefObjectId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefObjectId.h
new file mode 100755
index 0000000..b4eb9d5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DbXrefObjectId.h
@@ -0,0 +1,100 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBXREFOBJECTID_H_INCLUDED_
+#define _ODDBXREFOBJECTID_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbObjectId.h"
+
+/** \details
+    This class representing an Xref database object Id.
+
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXrefObjectId
+{
+  protected:
+    OdDbObjectId m_objectId;
+    OdDbHandle   m_objectHandle;
+  public:
+    OdDbXrefObjectId() { }
+
+    bool operator ==(const OdDbXrefObjectId& xrefId) const
+    { return (xrefId.m_objectId == m_objectId) && (xrefId.m_objectHandle == m_objectHandle); }
+    bool operator !=(const OdDbXrefObjectId& xrefId) const
+    { return (xrefId.m_objectId != m_objectId) || (xrefId.m_objectHandle != m_objectHandle); }
+
+    bool isXref() const { return !m_objectHandle.isNull(); }
+    bool isValid() const { return m_objectId.isValid(); }
+
+    bool isNull() const { return m_objectId.isNull(); }
+    void setNull()
+    {
+      m_objectId = OdDbObjectId::kNull;
+      m_objectHandle = OdDbHandle();
+    }
+
+    OdDbObjectId getLocalId() const
+    {
+      if (isXref())
+        throw OdError(eInvalidXrefObjectId);
+      return m_objectId;
+    }
+    void setLocalId(const OdDbObjectId &objectId)
+    {
+      m_objectId = objectId;
+      m_objectHandle = OdDbHandle();
+    }
+
+    OdDbObjectId getXrefId(OdDbHandle &objectHandle)
+    {
+      if (!isXref())
+        throw OdError(eInvalidXrefObjectId);
+      objectHandle = m_objectHandle;
+      return m_objectId;
+    }
+    void setXrefId(const OdDbObjectId &objectId, const OdDbHandle &objectHandle)
+    {
+      if (objectId.isNull())
+        throw OdError(eNullObjectId);
+      if (objectHandle.isNull())
+        throw OdError(eNullHandle);
+      m_objectId = objectId;
+      m_objectHandle = objectHandle;
+    }
+
+    OdDbObjectId resolveObjectId() const;
+
+    void serializeToResbuf(OdResBufPtr &pResBuf, OdResBufPtr &pLastResBuf) const;
+    void serializeFromResbuf(const OdResBufPtr pResBuf, OdResBufPtr &pNextResBuf, const OdDbDatabase* pDb);
+
+    // Helpers
+    static void seekToResbuf(OdResBufPtr &pResBuf, OdResBufPtr &pLastResBuf);
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODDBXREFOBJECTID_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DebugStuff.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DebugStuff.h
new file mode 100755
index 0000000..f7ab2d8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DebugStuff.h
@@ -0,0 +1,277 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __DEBUG_STUFF__INCLUDED
+#define __DEBUG_STUFF__INCLUDED
+
+
+#if defined(_DEBUG) || !defined(NDEBUG)
+#define ODA_DIAGNOSTICS
+#endif // _DEBUG
+
+#ifdef ODA_DIAGNOSTICS
+
+#include "OdaDefs.h"
+
+void FIRSTDLL_EXPORT OdAssert(const char* expresssion, const char* filename, int nLineNo);
+void FIRSTDLL_EXPORT OdAssert(const char* group, 
+                              const char* expresssion, const char* fileName, int nLineNo);
+void FIRSTDLL_EXPORT OdTrace(const OdChar* szFormat, ...);
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+void FIRSTDLL_EXPORT OdTrace(const __wchar_t* lpszFormat, ...);
+#endif
+
+inline void oda_noop(void) {}
+#define ODA_ASSERT(exp) ((!(exp)) ? OdAssert(#exp, __FILE__, __LINE__) : oda_noop())
+#define ODA_VERIFY(exp) ODA_ASSERT(exp)
+#define ODA_ASSERT_ONCE(exp)\
+{ static bool was_here = false;\
+  if (!was_here && !(exp))\
+  { was_here = true;\
+    OdAssert(#exp, __FILE__, __LINE__);\
+  }\
+}
+#define ODA_FAIL() OdAssert("Invalid Execution.", __FILE__, __LINE__)
+#define ODA_FAIL_ONCE()\
+{ static bool was_here = false;\
+  if (!was_here)\
+  { was_here = true;\
+    OdAssert("Invalid Execution.", __FILE__, __LINE__);\
+  }\
+}
+
+#define ODA_FAIL_M(message) (void)( (OdAssert(message, __FILE__, __LINE__), 0) )
+#define ODA_FAIL_M_ONCE(message)\
+{ static bool was_here = false;\
+  if (!was_here)\
+  { was_here = true;\
+    OdAssert(message, __FILE__, __LINE__);\
+  }\
+}
+
+
+#define ODA_ASSERT_X(grp, exp) (void)( (exp) || (OdAssert((const char*)#grp, (const char*)#exp, __FILE__, __LINE__), 0) )
+#define ODA_VERIFY_X(grp, exp) ODA_ASSERT_X(grp, exp)
+#define ODA_ASSERT_ONCE_X(grp, exp)\
+{ static bool was_here = false;\
+  if (!was_here && !(exp))\
+  { was_here = true;\
+    OdAssert(#grp, #exp, __FILE__, __LINE__);\
+  }\
+}
+#define ODA_FAIL_X(grp) OdAssert(#grp, "Invalid Execution.", __FILE__, __LINE__)
+#define ODA_FAIL_ONCE_X(grp)\
+{ static bool was_here = false;\
+  if (!was_here)\
+  { was_here = true;\
+    OdAssert(#grp, "Invalid Execution.", __FILE__, __LINE__);\
+  }\
+}
+#define ODA_ASSERT_VAR(code) code // to declare variables for assert conditions only
+#define ToOdInt8  (val) (ODA_ASSERT((  (OdInt8)val) == val), (OdInt8)  val)
+#define ToOdUInt8 (val) (ODA_ASSERT(( (OdUInt8)val) == val), (OdUInt8) val)
+#define ToOdInt16 (val) (ODA_ASSERT((( OdInt16)val) == val), (OdInt16) val)
+#define ToOdUInt16(val) (ODA_ASSERT(((OdUInt16)val) == val), (OdUInt16)val)
+#define ToOdInt32 (val) (ODA_ASSERT(( (OdInt32)val) == val), (OdInt32) val)
+#define ToOdUInt32(val) (ODA_ASSERT(((OdUInt32)val) == val), (OdUInt32)val)
+
+#else // ODA_DIAGNOSTICS
+
+#define ODA_ASSERT(condition) 
+#define ODA_VERIFY(condition)         (void)(condition)
+#define ODA_ASSERT_ONCE(condition)
+#define ODA_FAIL() 
+#define ODA_FAIL_ONCE() 
+#define ODA_FAIL_M(message) 
+#define ODA_FAIL_M_ONCE(message) 
+
+#define ODA_ASSERT_X(grp, exp)
+#define ODA_VERIFY_X(grp, exp)         (void)(exp)
+#define ODA_ASSERT_ONCE_X(grp, exp)
+#define ODA_FAIL_X(grp)
+#define ODA_FAIL_ONCE_X(grp)
+#define ODA_ASSERT_VAR(code)
+
+#define ToOdInt8  (val) ((OdInt8)  val)
+#define ToOdUInt8 (val) ((OdUInt8) val)
+#define ToOdInt16 (val) ((OdInt16) val)
+#define ToOdUInt16(val) ((OdUInt16)val)
+#define ToOdInt32 (val) ((OdInt32) val)
+#define ToOdUInt32(val) ((OdUInt32)val)
+
+#define ODA_NON_TRACING
+
+#endif // ODA_DIAGNOSTICS
+
+#ifndef ODA_NON_TRACING
+  #define ODA_TRACE OdTrace
+  #define ODA_TRACE0(szFormat) OdTrace(OD_T(szFormat))
+  #define ODA_TRACE1(szFormat, param1) OdTrace(OD_T(szFormat), param1)
+  #define ODA_TRACE2(szFormat, param1, param2) OdTrace(OD_T(szFormat), param1, param2)
+  #define ODA_TRACE3(szFormat, param1, param2, param3) OdTrace(OD_T(szFormat), param1, param2, param3)
+#else // ODA_NON_TRACING
+  #define ODA_TRACE
+  #define ODA_TRACE0(szFormat) 
+  #define ODA_TRACE1(szFormat, param1) 
+  #define ODA_TRACE2(szFormat, param1, param2) 
+  #define ODA_TRACE3(szFormat, param1, param2, param3) 
+#endif // ODA_NON_TRACING
+
+// Use this macro to perform compilation time check.
+// For example:   ODA_ASSUME(sizeof(double) == 8)
+#ifdef __GNUC__
+  #define ODA_ASSUME(expr) extern char __attribute((unused)) OdaAssumeArray[expr];
+#else
+  #define ODA_ASSUME(expr) extern char OdaAssumeArray[expr];
+#endif    
+
+#if defined(_MSC_VER)
+
+#pragma warning (push)
+#pragma warning ( disable : 4100 )  // Unreferenced formal parameter
+#pragma warning ( disable : 4512 )  //assignment operator could not be generated
+
+#include <memory>
+
+// Memory allocation
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC) && (_MSC_VER >= 1200) && !defined(_ARM_)
+#include <malloc.h>
+#include <crtdbg.h>
+#include "OdError.h"
+
+inline void* operator new(size_t nSize, const char* /*LPCSTR*/ lpszFileName, int nLine)
+{
+  void* pRes = _malloc_dbg(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
+  if(!pRes) throw OdError(eOutOfMemory);
+  return pRes;
+}
+
+inline void  operator delete(void * pMem, const char* /*LPCSTR lpszFileName*/, int /*nLine*/)
+{
+  _free_dbg(pMem, _NORMAL_BLOCK);
+}
+
+#ifndef DEBUG_NEW
+#define DEBUG_NEW new(__FILE__, __LINE__)
+#endif
+
+#else //#ifdef _CRTDBG_MAP_ALLOC
+
+//inline void* operator new(size_t nSize) { return Oda::mem_alloc(nSize); }
+//inline void  operator delete(void* pMem) { Oda::mem_free(pMem); }
+
+#endif  //_CRTDBG_MAP_ALLOC
+#pragma warning (pop)
+
+#include <new.h>
+
+#endif  // _MSC_VER
+
+// Cause Compiler to print a message to output console with File and Line# for 
+// Double-Click response
+// Ex:
+// #pragma MARKMESSAGE("Warning! Implementation is incorrect!")
+#ifndef MARKMESSAGE
+  #if defined(_MSC_VER)
+    #pragma warning (disable:4081)
+  #endif
+  #if defined(_MSC_VER) && defined(_DEBUG)
+    #define _schSTR(x)  #x
+    #define _schSTR2(x) _schSTR(x)
+    #define MARKMESSAGE(desc) message(__FILE__ "(" _schSTR2(__LINE__) "): " #desc)
+  #else
+    #if defined(__sun) && !defined(__GNUC__)
+      #define MARKMESSAGE(desc) dummy_pragma
+    #else
+      #define MARKMESSAGE(desc) 
+    #endif
+  #endif
+#endif  // MARKMESSAGE
+
+#if defined(OD_DIAGNOSTICS) && defined(_MSC_VER) && defined(_DEBUG) &&  (_MSC_VER < 1400)
+#pragma function(memcpy)
+inline void * memcpy(void * dest, const void * src, size_t size)
+{ // Memory blocks must not overlap
+  ODA_ASSERT(((char*)dest > (char*)src && (char*)dest >= ((char*)src + size)) ||
+             ((char*)dest < (char*)src && ((char*)dest + size) <= (char*)src) ||
+                     dest == src );
+  return memmove(dest, src, size);
+}
+#endif // _MSC_VER
+
+// _MSC_VER default behaviour is 'If both parameters of atan2 are 0, the function returns 0'
+// Other compilers (e.g. BB6) can throw exception.
+#if defined(__BORLANDC__) || defined(__BCPLUSPLUS__)
+#include <math.h>
+  inline double OD_ATAN2(double y, double x)
+  {
+    if (x == 0. && y == 0.)
+      return 0.;
+    return atan2(y,x);
+  }
+
+#elif defined(_DEBUG) && defined(_MSC_VER) && defined(ODA_LINT)
+  FIRSTDLL_EXPORT double OD_ATAN2(double y, double x);
+  #define atan2(x, y) Do_not_use_atan2_directly__Use__OD_ATAN2_instead
+
+#else
+  #define OD_ATAN2(y,x)  (atan2(y,x)) // Safe for MSVC and hope for others. CoreRegression test should show.
+#endif
+
+
+#if defined(ODA_LINT) && defined(_DEBUG)
+  FIRSTDLL_EXPORT double OD_ASIN(double a);
+  #define asin(a)   Do_not_use_asin_directly__Use__OD_ASIN_instead
+
+  FIRSTDLL_EXPORT double OD_ACOS(double a);
+  #define acos(a)   Do_not_use_acos_directly__Use__OD_ACOS_instead
+#else
+#define OD_ASIN(a) asin(a)
+#define OD_ACOS(a) acos(a)
+#endif
+
+#ifdef _MSC_VER
+#define OD_WARNING_PUSH warning(push)
+#define OD_WARNING_DISABLE(number) warning(disable : number)
+#define OD_WARNING_POP  warning(pop)
+#define OD_WARNING_SUPPRESS(number)  warning(suppress : number)
+#else
+  #if defined(__sun) && !defined(__GNUC__)
+    #define OD_WARNING_PUSH dummy_pragma
+    #define OD_WARNING_DISABLE(number)  dummy_pragma
+    #define OD_WARNING_POP  dummy_pragma
+    #define OD_WARNING_SUPPRESS(number) dummy_pragma
+  #else
+    #define OD_WARNING_PUSH
+    #define OD_WARNING_DISABLE(number)
+    #define OD_WARNING_POP
+    #define OD_WARNING_SUPPRESS(number)
+  #endif
+#endif
+
+#endif // __DEBUG_STUFF__INCLUDED
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSComponent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSComponent.h
new file mode 100755
index 0000000..d21996a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSComponent.h
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSCOMPONENT_H
+#define ODDGNLS_DBLSCOMPONENT_H
+
+#include "DbLSObject.h"
+
+#include "TD_PackPush.h"
+
+enum OdDbLSComponentType
+{
+  kLSSymbolComponent        = 1,
+  kLSCompoundComponent      = 2,
+  kLSStrokePatternComponent = 3,
+  kLSPointComponent         = 4,
+  kLSInternalComponent      = 6
+};
+
+/** \details
+    Dgn Line Style Component Base Class.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSComponent : public OdDbLSObject
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSComponent);
+
+    /** \note
+      Teigha applications typically will not use this constructor, insofar as 
+      this class is a base class.
+    */
+    OdDbLSComponent();
+
+    OdDbLSComponentType componentType() const;
+    void setComponentType(OdDbLSComponentType type);
+
+    const OdUInt8 *componentUID() const;
+
+    OdString description() const;
+    void setDescription(const OdString &str);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSComponent object pointers.
+*/
+typedef OdSmartPtr<OdDbLSComponent> OdDbLSComponentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSCOMPONENT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSCompoundComponent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSCompoundComponent.h
new file mode 100755
index 0000000..c047a68
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSCompoundComponent.h
@@ -0,0 +1,92 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSCOMPOUNDCOMPONENT_H
+#define ODDGNLS_DBLSCOMPOUNDCOMPONENT_H
+
+#include "DbLSComponent.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Dgn Line Style Compound Component.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSCompoundComponent : public OdDbLSComponent
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSCompoundComponent);
+
+    OdDbLSCompoundComponent();
+
+    /** \details
+      Append new component to compound component.
+
+      \param comId [in]  Identifier of component to add.
+      \param compOffset [in]  Component offset to add.
+    */
+    void appendComponent(const OdDbObjectId &compId, double compOffset = 0.0);
+    /** \details
+      Remove existing component from this compound component.
+
+      \param nComponent [in]  Index of component to remove.
+    */
+    void deleteComponent(OdUInt32 nComponent);
+
+    /** \details
+      Returns count of components in this compound component.
+    */
+    OdUInt32 numberComponents() const;
+
+    /** \details
+      Returns component identifier from this compound component.
+
+      \param nComponent [in]  Index of component to retreive identifier.
+    */
+    OdDbObjectId component(OdUInt32 nComponent) const;
+
+    /** \details
+      Returns component offset from this compound component.
+
+      \param nComponent [in]  Index of component to retreive offset.
+    */
+    double offsetToComponent(OdUInt32 nComponent) const;
+    /** \details
+      Reset component offset of existing component in this compound component.
+
+      \param nComponent [in]  Index of component to reset offset.
+      \param newOffset [in]  New component offset.
+    */
+    void setOffsetToComponent(OdUInt32 nComponent, double newOffset);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSCompoundComponent object pointers.
+*/
+typedef OdSmartPtr<OdDbLSCompoundComponent> OdDbLSCompoundComponentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSCOMPOUNDCOMPONENT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSDefinition.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSDefinition.h
new file mode 100755
index 0000000..8314ab0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSDefinition.h
@@ -0,0 +1,208 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSDEFINITION_H
+#define ODDGNLS_DBLSDEFINITION_H
+
+#include "DbLSObject.h"
+
+#include "TD_PackPush.h"
+
+enum MSLSUnits
+{
+  kMSLSMasterUnits = 0, // Master Units
+  kMSLSUORS        = 1, // Design UORs
+  kMSLSDeviceUnits = 2  // Device Units
+};
+
+/** \details
+    Dgn Line Style Definition.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSDefinition : public OdDbLSObject
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSDefinition);
+
+    OdDbLSDefinition();
+
+    /** \details
+      Returns initial component for Line Style.
+    */
+    OdDbObjectId component() const;
+    /** \details
+      Sets initial component for Line Style.
+
+      \param compId [in]  Identifier of component.
+    */
+    void setComponent(const OdDbObjectId &compId);
+
+    /** \details
+      Returns component unique identifier.
+
+      \remarks
+      16 bytes of data.
+    */
+    const OdUInt8 *componentUID() const;
+
+    /** \details
+      Returns true if Line Style marked as continuous.
+    */
+    bool isContinuous() const;
+    /** \details
+      Marks Line Style as continuous.
+
+      \param bSet [in]  New value to set.
+    */
+    void setIsContinuous(bool bSet);
+
+    /** \details
+      Returns true if Line Style comes from RSC file, elsewhere it is embedded in Design file.
+    */
+    bool isElement() const;
+    /** \details
+      Sets flag which indicate that this Line Style comes from RSC file.
+
+      \param bSet [in]  New value to set.
+    */
+    void setIsElement(bool bSet);
+
+    /** \details
+      Returns true if Line Style marked as physical.
+
+      \remarks
+      If true, prevents the Global Line Style Scale and the Annotation Scale factors from being applied.
+    */
+    bool isPhysical() const;
+    /** \details
+      Marks this Line Style as physical.
+
+      \param bSet [in]  New value to set.
+    */
+    void setIsPhysical(bool bSet);
+
+    /** \details
+      Returns true if Line Style marked to scale inside shared cells independently.
+    */
+    bool isSCScaleIndependent() const;
+    /** \details
+      Sets shared cell scale independent flag to this Line Style.
+
+      \param bSet [in]  New value to set.
+    */
+    void setIsSCScaleIndependent(bool bSet);
+
+    /** \details
+      Returns true if Line Style marked as snappable.
+
+      \remarks
+      If true, allows you to snap to the individual components of a line style.
+      If false, allows you to snap to the underlying line of a line style.
+    */
+    bool isSnappable() const;
+    /** \details
+      Sets snappable flag for this Line Style.
+
+      \param bSet [in]  New value to set.
+    */
+    void setIsSnappable(bool bSet);
+
+    /** \details
+      Returns name of this Line Style.
+    */
+    OdString name() const;
+    /** \details
+      Sets name for this Line Style.
+
+      \param str [in]  Name to set.
+    */
+    void setName(const OdString &str);
+
+    /** \details
+      Returns the style number for this Line Style.
+    */
+    OdInt32 styleNumber() const;
+    /** \details
+      Sets style number for this Line Style.
+
+      \param nStyle [in]  Style number to set.
+      \remarks
+      Typically it is null.
+    */
+    void setStyleNumber(OdInt32 nStyle);
+
+    /** \details
+      Returns the Line Style scale stored in definition.
+
+      \remarks
+      Typically it is null.
+    */
+    double unitDef() const;
+    /** \details
+      Sets the Line Style scale stored in definition.
+
+      \param fUnit [in]  New scale factor to set.
+      \remarks
+      It will be used as multiplier for unitScale if will be set as non-zero.
+    */
+    void setUnitDef(double fUnit);
+
+    /** \details
+      Returns unit scale for this Line Style.
+
+      \remarks
+      Typically it is 1.0.
+    */
+    double unitScale() const;
+    /** \details
+      Sets the unit scale factor for this Line Style.
+
+      \param fUnit [in]  New scale factor to set.
+    */
+    void setUnitScale(double fUnit);
+
+    /** \details
+      Returns type of units used for this Line Style.
+
+      \remarks
+      Typically it is set to kMSLSMasterUnits.
+    */
+    MSLSUnits unitsType() const;
+    /** \details
+      Sets type of units used for this Line Style.
+
+      \param type [in]  New type to set.
+    */
+    void setUnitsType(MSLSUnits type);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSDefinition object pointers.
+*/
+typedef OdSmartPtr<OdDbLSDefinition> OdDbLSDefinitionPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSDEFINITION_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSInternalComponent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSInternalComponent.h
new file mode 100755
index 0000000..4304199
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSInternalComponent.h
@@ -0,0 +1,94 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSINTERNALCOMPONENT_H
+#define ODDGNLS_DBLSINTERNALCOMPONENT_H
+
+#include "DbLSStrokePatternComponent.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Dgn Line Style Internal Component.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSInternalComponent : public OdDbLSStrokePatternComponent
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSInternalComponent);
+
+    OdDbLSInternalComponent();
+
+    /** \details
+      Returns hardware style for this internal component.
+
+      \remarks
+      Typically it is similar with lineCode.
+    */
+    OdUInt32 hardwareStyle() const;
+    /** \details
+      Sets hardware style for this internal component.
+
+      \param nStyle [in]  New style to set.
+    */
+    void setHardwareStyle(OdUInt32 nStyle);
+
+    /** \details
+      Returns true if hardware style is set.
+
+      \remarks
+      Typically true for [1-7] line codes.
+    */
+    bool isHardwareStyle() const;
+    /** \details
+      Sets flag which is incicate that hardware style is set for this internal component.
+
+      \param bSet [in]  New flag to set.
+    */
+    void setIsHardwareStyle(bool bSet);
+
+    /** \details
+      Returns Design line code for this internal component.
+
+      \remarks
+      Internal components in Design file could be in [0-7] range.
+    */
+    OdUInt32 lineCode() const;
+    /** \details
+      Sets Design line code for this internal component.
+
+      \param nCode [in]  New code to set.
+    */
+    void setLineCode(OdUInt32 nCode);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSInternalComponent object pointers.
+*/
+typedef OdSmartPtr<OdDbLSInternalComponent> OdDbLSInternalComponentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSINTERNALCOMPONENT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSMisc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSMisc.h
new file mode 100755
index 0000000..0b462bd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSMisc.h
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSMISCELLANEOUS_H
+#define ODDGNLS_DBLSMISCELLANEOUS_H
+
+#include "OdaCommon.h"
+#include "DbDictionary.h"
+
+#include "OdDgnLSExport.h"
+
+#include "TD_PackPush.h"
+
+// Miscellaneous DgnLS functions. Helpful for importing.
+
+// Dictionary operations
+
+ODDGNLS_EXPORT const OdConstString &oddbDgnLSGetComponentsDictionaryName();
+ODDGNLS_EXPORT const OdConstString &oddbDgnLSGetDefinitionKeyName();
+
+ODDGNLS_EXPORT OdDbObjectId oddbDgnLSGetComponentsDictionaryId(OdDbDatabase* pDb, bool createIfNotFound = false);
+ODDGNLS_EXPORT OdDbDictionaryPtr oddbDgnLSGetComponentsDictionary(OdDbDatabase* pDb, OdDb::OpenMode mode, bool createIfNotFound = false);
+
+// UID operations
+
+ODDGNLS_EXPORT void oddbDgnLSInitializeImportUID(OdUInt8 *pUID);
+ODDGNLS_EXPORT void oddbDgnLSIncrementUID(OdUInt8 *pUID);
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSMISCELLANEOUS_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSObject.h
new file mode 100755
index 0000000..9e9fa82
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSObject.h
@@ -0,0 +1,106 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSOBJECT_H
+#define ODDGNLS_DBLSOBJECT_H
+
+#include "DbObject.h"
+
+#include "OdDgnLSExport.h"
+
+#include "TD_PackPush.h"
+
+/* DgnLS classes hierarchy:
+   - OdDbLSObject
+   ---- OdDbLSDefinition
+   ---- OdDbLSComponent
+   -------- OdDbLSCompoundComponent
+   -------- OdDbLSPointComponent
+   -------- OdDbLSStrokePatternComponent
+   ------------ OdDbLSInternalComponent
+   -------- OdDbLSSymbolComponent
+*/
+
+/** \details
+    Basic object for all DgnLS objects.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSObject : public OdDbObject
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSObject);
+
+    /** \note
+      Teigha applications typically will not use this constructor, insofar as 
+      this class is a base class.
+    */
+    OdDbLSObject();
+
+    virtual OdResult dwgInFields(OdDbDwgFiler *pFiler);
+    virtual void dwgOutFields(OdDbDwgFiler *pFiler) const;
+    virtual OdResult dxfInFields(OdDbDxfFiler *pFiler);
+    virtual void dxfOutFields(OdDbDxfFiler *pFiler) const;
+
+#ifdef ODA_DIAGNOSTICS
+    /** \details
+      Debug data output for entire objects hierarchy.
+    */
+    void trace() const;
+#endif
+
+    /** \details
+      Returns component unique identifier.
+
+      \remarks
+      16 bytes of data.
+    */
+    virtual const OdUInt8 *componentUID() const = 0;
+
+    /** \details
+      Sets component unique identifier.
+
+      \param pUID [in]  Input unique identifier represented as 16 bytes of data.
+    */
+    void setComponentUID(const OdUInt8 *pUID);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSObject object pointers.
+*/
+typedef OdSmartPtr<OdDbLSObject> OdDbLSObjectPtr;
+
+// Inlines section
+
+inline void OdDbLSObject::setComponentUID(const OdUInt8 *pUID)
+{
+  assertWriteEnabled();
+  OdUInt8 *pUIDOut = const_cast<OdUInt8*>(componentUID());
+  for (int i = 0; i < 16; i++)
+    pUIDOut[i] = pUID[i];
+}
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSOBJECT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSPointComponent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSPointComponent.h
new file mode 100755
index 0000000..298733e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSPointComponent.h
@@ -0,0 +1,168 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSPOINTCOMPONENT_H
+#define ODDGNLS_DBLSPOINTCOMPONENT_H
+
+#include "DbLSComponent.h"
+#include "DbLSSymbolReference.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Dgn Line Style Point Component.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSPointComponent : public OdDbLSComponent
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSPointComponent);
+
+    OdDbLSPointComponent();
+
+    /** \details
+      Inserts new symbol for stroke into this point component.
+
+      \param symCompId [in]  Identifier of symbol to set.
+      \param fXOffset [in]  Symbol offset in X direction.
+      \param fYOffset [in]  Symbol offset in Y direction.
+      \param fAngle [in]  Symbol rotation angle in radians.
+      \param nStroke [in]  Index of stroke for symbol insert.
+      \remarks
+      Returns pointer to newly added symbol reference which could be used for additional modifications.
+    */
+    OdDbLSSymbolReference *insertSymbolForStroke(const OdDbObjectId &symCompId, double fXOffset = 0.0, double fYOffset = 0.0, double fAngle = 0.0,
+                                                 OdInt32 nStroke = 0);
+    /** \details
+      Inserts new symbol for stroke into this point component.
+
+      \param symCompId [in]  Identifier of symbol to set.
+      \param nStroke [in]  Index of stroke for symbol insert.
+      \remarks
+      Returns pointer to newly added symbol reference which could be used for additional modifications.
+    */
+    OdDbLSSymbolReference *insertSymbolForStroke(const OdDbObjectId &symCompId, OdInt32 nStroke);
+    /** \details
+      Inserts new symbol for stroke into this point component as copy of existing symbol.
+
+      \param pSymbol [in]  Symbol reference for clone.
+      \param nStroke [in]  Index of stroke for symbol insert.
+      \remarks
+      Returns pointer to newly added symbol reference which could be used for additional modifications.
+    */
+    OdDbLSSymbolReference *insertSymbolForStroke(const OdDbLSSymbolReference *pSymbol, OdInt32 nStroke);
+
+    /** \details
+      Inserts new symbol for vertex into this point component.
+
+      \param symCompId [in]  Identifier of symbol to set.
+      \param fXOffset [in]  Symbol offset in X direction.
+      \param fYOffset [in]  Symbol offset in Y direction.
+      \param fAngle [in]  Symbol rotation angle in radians.
+      \param at [in]  Type of vertex for this symbol.
+      \remarks
+      Returns pointer to newly added symbol reference which could be used for additional modifications.
+    */
+    OdDbLSSymbolReference *insertSymbolForVertex(const OdDbObjectId &symCompId, double fXOffset = 0.0, double fYOffset = 0.0, double fAngle = 0.0,
+                                                 OdDbLSSymbolReference::VertexMask at = OdDbLSSymbolReference::kLSAtOrigin);
+    /** \details
+      Inserts new symbol for vertex into this point component.
+
+      \param symCompId [in]  Identifier of symbol to set.
+      \param at [in]  Type of vertex for this symbol.
+      \remarks
+      Returns pointer to newly added symbol reference which could be used for additional modifications.
+    */
+    OdDbLSSymbolReference *insertSymbolForVertex(const OdDbObjectId &symCompId, OdDbLSSymbolReference::VertexMask at);
+    /** \details
+      Inserts new symbol for vertex into this point component as copy of existing symbol.
+
+      \param pSymbol [in]  Symbol reference for clone.
+      \param nStroke [in]  Index of stroke for symbol insert.
+      \remarks
+      Returns pointer to newly added symbol reference which could be used for additional modifications.
+    */
+    OdDbLSSymbolReference *insertSymbolForVertex(const OdDbLSSymbolReference *pSymbol, OdDbLSSymbolReference::VertexMask at);
+
+    /** \details
+      Removes existing symbol for stroke from this point component.
+
+      \param nStroke [in]  Index of stroke for remove symbol.
+    */
+    void deleteSymbolForStroke(OdInt32 nStroke);
+    /** \details
+      Removes existing symbol for vertex from this point component.
+
+      \param at [in]  Type of vertex for remove symbol.
+    */
+    void deleteSymbolForVertex(OdDbLSSymbolReference::VertexMask at);
+
+    /** \details
+      Returns count of symbols in this point component symbols list.
+
+      \remarks
+      Returns count of both symbol lists for stroke and for vertex.
+    */
+    OdUInt32 numberSymbols() const;
+
+    /** \details
+      Returns stroke component identifier associated with this point component.
+    */
+    OdDbObjectId strokeComponent() const;
+    /** \details
+      Sets stroke component identifier associated with this point component.
+
+      \param strokeCompId [in]  Identifier of stroke component.
+    */
+    void setStrokeComponent(const OdDbObjectId &strokeCompId);
+
+    /** \details
+      Returns symbol by index in point component symbols list.
+
+      \param nSym [in]  Index of symbol.
+    */
+    OdDbLSSymbolReference *symbol(OdUInt32 nSym);
+    /** \details
+      Returns symbol by stroke index.
+
+      \param nStroke [in]  Stroke index.
+    */
+    OdDbLSSymbolReference *symbolForStroke(OdInt32 nStroke);
+    /** \details
+      Returns symbol by vertex type.
+
+      \param at [in]  Type of vertex.
+    */
+    OdDbLSSymbolReference *symbolForVertex(OdDbLSSymbolReference::VertexMask at);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSPointComponent object pointers.
+*/
+typedef OdSmartPtr<OdDbLSPointComponent> OdDbLSPointComponentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSPOINTCOMPONENT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStroke.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStroke.h
new file mode 100755
index 0000000..88634ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStroke.h
@@ -0,0 +1,230 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSSTROKE_H
+#define ODDGNLS_DBLSSTROKE_H
+
+#include "OdaCommon.h"
+#include "DbFiler.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Dgn Line Style Stroke.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+struct OdDbLSStroke
+{
+  enum WidthMode
+  {
+    kLSNoWidth    = 0, // Stroke haven't width.
+    kLSWidthLeft  = 1, // Stroke have width only for left side.
+    kLSWidthRight = 2, // Stroke have width only for right side.
+    kLSWidthFull  = 3  // Stroke have width only for left and right sides.
+  };
+  enum CapMode
+  {
+    kLSCapsClosed   = 0, // Closed stroke caps.
+    kLSCapsOpen     = 1, // Open stroke caps.
+    kLSCapsExtended = 2, // Extended stroke caps.
+    kLSCapsHexagon  = 3, // Hexagonal stroke caps.
+    kLSCapsOctagon  = 4, // Octagonal stroke caps.
+    kLSCapsDecagon  = 5, // Decagonal stroke caps.
+    kLSCapsArc      = 30 // Round stroke caps.
+  };
+
+protected:
+  bool m_bIsDash; // true - dash; false - gap
+  bool m_bBypassCorner;
+  bool m_bCanBeScaled; // Variable length
+  /* InvertAt boolean flags:
+     - Invert at: None: true, true.
+     - Invert at: Origin: false, true.
+     - Invert at: End: true, false.
+     - Invert at: Both: false, false.
+     - for non-RSC LineStyles (( Border ), ( Center ) and etc.) them always false.
+     - them always false for internal components.
+  */
+  bool m_bDontInvertAtOrigin;
+  bool m_bDontInvertAtEnd;
+  double m_fLength;
+  double m_fStartWidth;
+  double m_fEndWidth;
+  WidthMode m_WidthMode;
+  CapMode m_CapMode;
+
+public:
+  OdDbLSStroke()
+    : m_bIsDash(false)
+    , m_bBypassCorner(false)
+    , m_bCanBeScaled(false)
+    , m_bDontInvertAtOrigin(false)
+    , m_bDontInvertAtEnd(false)
+    , m_fLength(1.0)
+    , m_fStartWidth(0.0)
+    , m_fEndWidth(0.0)
+    , m_WidthMode(kLSNoWidth)
+    , m_CapMode(kLSCapsClosed)
+  {
+  }
+  
+  /** \details
+    Returns true if this stroke is dash.
+  */
+  bool isDash() const { return m_bIsDash; }
+  /** \details
+    Returns true if this stroke is gap.
+  */
+  bool isGap() const { return !m_bIsDash; }
+  /** \details
+    Sets this stroke as dash.
+  */
+  void setDash() { m_bIsDash = true; }
+  /** \details
+    Sets this stroke as gap.
+  */
+  void setGap() { m_bIsDash = false; }
+  /** \details
+    Sets isDash flag for this stroke.
+
+    \param bSet [in]  New flag to set.
+  */
+  void setIsDash(bool bSet) { m_bIsDash = bSet; }
+
+  /** \details
+    Returns corners bypass flag.
+  */
+  bool bypassCorner() const { return m_bBypassCorner; }
+  /** \details
+    Sets corners bypass flag.
+
+    \param bSet [in]  New value to set.
+  */
+  void setBypassCorner(bool bSet) { m_bBypassCorner = bSet; }
+
+  /** \details
+    Returns true if variable stroke length is enabled.
+  */
+  bool canBeScaled() const { return m_bCanBeScaled; }
+  /** \details
+    Sets variable length flag.
+
+    \param bSet [in]  New value to set.
+  */
+  void setCanBeScaled(bool bSet) { m_bCanBeScaled = bSet; }
+
+  /** \details
+    Returns true if invert stroke at origin mode is enabled.
+  */
+  bool invertAtOrigin() const { return !m_bDontInvertAtOrigin; }
+  /** \details
+    Sets invert stroke at origin mode flag.
+
+    \param bSet [in]  New value to set.
+  */
+  void setInvertAtOrigin(bool bSet) { m_bDontInvertAtOrigin = !bSet; }
+
+  /** \details
+    Returns true if invert stroke at end mode is enabled.
+  */
+  bool invertAtEnd() const { return !m_bDontInvertAtEnd; }
+  /** \details
+    Sets invert stroke at end mode flag.
+
+    \param bSet [in]  New value to set.
+  */
+  void setInvertAtEnd(bool bSet) { m_bDontInvertAtEnd = !bSet; }
+
+  /** \details
+    Returns stroke length.
+  */
+  double length() const { return m_fLength; }
+  /** \details
+    Sets stroke length.
+
+    \param fLen [in]  New stroke length.
+  */
+  void setLength(double fLen) { m_fLength = fLen; }
+
+  /** \details
+    Returns stroke start width.
+  */
+  double startWidth() const { return m_fStartWidth; }
+  /** \details
+    Sets stroke start width.
+
+    \param fWidth [in]  New stroke start width.
+  */
+  void setStartWidth(double fWidth) { m_fStartWidth = fWidth; }
+
+  /** \details
+    Returns stroke end width.
+  */
+  double endWidth() const { return m_fEndWidth; }
+  /** \details
+    Sets stroke end width.
+
+    \param fWidth [in]  New stroke end width.
+  */
+  void setEndWidth(double fWidth) { m_fEndWidth = fWidth; }
+
+  /** \details
+    Returns stroke width mode.
+  */
+  WidthMode widthMode() const { return m_WidthMode; }
+  /** \details
+    Sets stroke width mode.
+
+    \param mode [in]  New stroke width mode.
+  */
+  void setWidthMode(WidthMode mode) { m_WidthMode = mode; }
+
+  /** \details
+    Returns stroke caps type.
+  */
+  CapMode capMode() const { return m_CapMode; }
+  /** \details
+    Sets stroke caps type.
+
+    \param mode [in]  New stroke caps type.
+  */
+  void setCapMode(CapMode mode) { m_CapMode = mode; }
+
+private:
+  friend class OdDbLSStrokePatternComponentImpl;
+
+  OdResult dwgInFields(OdDbDwgFiler *pFiler);
+  void dwgOutFields(OdDbDwgFiler *pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler *pFiler);
+  void dxfOutFields(OdDbDxfFiler *pFiler) const;
+
+#ifdef ODA_DIAGNOSTICS
+  void trace(OdUInt32 nStroke) const;
+#endif
+};
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSSTROKE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStrokePatternComponent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStrokePatternComponent.h
new file mode 100755
index 0000000..1ca62a8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSStrokePatternComponent.h
@@ -0,0 +1,172 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSSTROKEPATTERNCOMPONENT_H
+#define ODDGNLS_DBLSSTROKEPATTERNCOMPONENT_H
+
+#include "DbLSComponent.h"
+#include "DbLSStroke.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Dgn Line Style Stroke Pattern Component.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSStrokePatternComponent : public OdDbLSComponent
+{
+  public:
+    enum PhaseMode
+    {
+      kLSPhaseDistance = 0, // Distance phase mode
+      kLSPhaseFraction = 1, // Fraction phase mode (auto phase)
+      kLSPhaseCentered = 2  // Centered phase mode (stretch phase mode)
+    };
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSStrokePatternComponent);
+
+    OdDbLSStrokePatternComponent();
+
+    /** \details
+      Returns phase for fraction phase mode.
+
+      \remarks
+      Null for non-fraction phase modes.
+    */
+    double autoPhase() const;
+    /** \details
+      Sets phase for fraction phase mode.
+
+      \param fPhase [in]  New phase value to set.
+    */
+    void setAutoPhase(double fPhase);
+
+    /** \details
+      Returns true if iteration limit mode is enabled.
+    */
+    bool hasIterationLimit() const;
+    /** \details
+      Sets iteration limit mode.
+
+      \param bSet [in]  New mode to set.
+    */
+    void setHasIterationLimit(bool bSet);
+
+    /** \details
+      Inserts new stroke into this stroke pattern component.
+
+      \param fLength [in]  Stroke length.
+      \param fStartWidth [in]  Stroke start width.
+      \param fEndWidth [in]  Stroke end width.
+      \param widthMode [in]  Stroke width mode.
+      \param capMode [in]  Stroke caps type.
+      \remarks
+      Returns pointer to newly added stroke which could be used for additional modifications.
+    */
+    OdDbLSStroke *insertStroke(double fLength = 1.0, double fStartWidth = 0.0, double fEndWidth = 0.0,
+      OdDbLSStroke::WidthMode widthMode = OdDbLSStroke::kLSNoWidth, OdDbLSStroke::CapMode capMode = OdDbLSStroke::kLSCapsClosed);
+    /** \details
+      Inserts new stroke into this stroke pattern component as copy of existing stroke.
+
+      \param pStroke [in]  Stroke for clone.
+      \remarks
+      Returns pointer to newly added stroke which could be used for additional modifications.
+    */
+    OdDbLSStroke *insertStroke(const OdDbLSStroke *pStroke);
+    /** \details
+      Returns stroke pointer from this stroke pattern component.
+
+      \param nStroke [in]  Stroke index.
+    */
+    OdDbLSStroke *stroke(OdUInt32 nStroke) const;
+
+    /** \details
+      Removes existing stroke from this stroke pattern component.
+
+      \param nStroke [in]  Stroke index.
+    */
+    void deleteStroke(OdUInt32 nStroke);
+
+    /** \details
+      Returns count of strokes in this stroke pattern component.
+    */
+    OdUInt32 numberStrokes() const;
+
+    /** \details
+      Returns true if single segment mode is enabled.
+    */
+    bool isSingleSegment() const;
+    /** \details
+      Enables single segment mode.
+
+      \param bSet [in]  New mode to set.
+    */
+    void setIsSingleSegment(bool bSet);
+
+    /** \details
+      Returns iteration limit.
+    */
+    OdInt32 iterationLimit() const;
+    /** \details
+      Sets iteration limit.
+
+      \param nLimit [in]  New limit to set.
+    */
+    void setIterationLimit(OdInt32 nLimit);
+
+    /** \details
+      Returns phase for distance phase mode.
+
+      \remarks
+      Null for non-distance phase modes.
+    */
+    double phase() const;
+    /** \details
+      Sets phase for distance phase mode.
+
+      \param fPhase [in]  New phase value to set.
+    */
+    void setPhase(double fPhase);
+
+    /** \details
+      Returns current phase mode.
+    */
+    PhaseMode phaseMode() const;
+    /** \details
+      Resets current phase mode.
+
+      \param mode [in]  New phase mode to set.
+    */
+    void setPhaseMode(PhaseMode mode);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSStrokePatternComponent object pointers.
+*/
+typedef OdSmartPtr<OdDbLSStrokePatternComponent> OdDbLSStrokePatternComponentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSSTROKEPATTERNCOMPONENT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolComponent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolComponent.h
new file mode 100755
index 0000000..7613661
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolComponent.h
@@ -0,0 +1,119 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSSYMBOLCOMPONENT_H
+#define ODDGNLS_DBLSSYMBOLCOMPONENT_H
+
+#include "DbLSComponent.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Dgn Line Style Symbol Component.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+class ODDGNLS_EXPORT OdDbLSSymbolComponent : public OdDbLSComponent
+{
+  public:
+    ODDB_DECLARE_MEMBERS(OdDbLSSymbolComponent);
+
+    OdDbLSSymbolComponent();
+
+    /** \details
+      Returns block table record identifier associated with this symbol component.
+    */
+    OdDbObjectId blockTableRecord() const;
+    /** \details
+      Sets block table record identifier associated with this symbol component.
+
+      \param blockId [in] Block table record identifier to set.
+    */
+    void setBlockTableRecord(const OdDbObjectId &blockId);
+
+    /** \details
+      Compute geometry extents for this symbol component.
+
+      \param extents [out]  Output geometry extents.
+      \remarks
+      Returns error code if computation failed.
+    */
+    OdResult getGeomExtents(OdGeExtents3d& extents) const;
+
+    /** \details
+      Returns true if unit scale is present.
+    */
+    bool hasUnitScale() const;
+    /** \details
+      Reset flag which indicates that unit scale is present.
+
+      \param bSet [in]  New flag to set.
+    */
+    void setHasUnitScale(bool bSet);
+
+    /** \details
+      Returns true if symbol was marked as 3D.
+    */
+    bool Is3d() const;
+    /** \details
+      Marks symbol as 3D.
+
+      \param bSet [in]  New value to set.
+    */
+    void setIs3d(bool bSet);
+
+    /** \details
+      Returns unit scale stored in Design.
+
+      \remarks
+      For backward conversion.
+    */
+    double storedUnitScale() const;
+    /** \details
+      Sets stored unit scale.
+
+      \param fScale [in]  Unit scale to set.
+    */
+    void setStoredUnitScale(double fScale);
+
+    /** \details
+      Returns symbol unit scale.
+    */
+    double unitScale() const;
+    /** \details
+      Sets symbol unit scale.
+
+      \param fScale [in]  Unit scale to set.
+    */
+    void setUnitScale(double fScale);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbLSSymbolComponent object pointers.
+*/
+typedef OdSmartPtr<OdDbLSSymbolComponent> OdDbLSSymbolComponentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSSYMBOLCOMPONENT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolReference.h
new file mode 100755
index 0000000..72e9dd9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSSymbolReference.h
@@ -0,0 +1,277 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSSYMBOLREFERENCE_H
+#define ODDGNLS_DBLSSYMBOLREFERENCE_H
+
+#include "OdaCommon.h"
+#include "DbFiler.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Dgn Line Style Symbol Reference.
+    \sa
+    TD_Db
+    <group OdDbLS_Classes> 
+*/
+struct OdDbLSSymbolReference
+{
+  enum VertexMask
+  {
+    kLSAtStroke    = 0,  // No vertex mask.
+    kLSAtOrigin    = 4,  // Symbol at element origin.
+    kLSAtEnd       = 8,  // Symbol at element end.
+    kLSAtVertex    = 16  // Symbol on each element vertex.
+  };
+  enum Justify
+  {
+    kLSNoJustify     = 0, // No symbol justification (symbol on stroke)
+    kLSJustifyLeft   = 1, // Symbol at left stroke side.
+    kLSJustifyRight  = 2, // Symbol at right stroke side.
+    kLSJustifyCenter = 3  // Symbol at center of stroke.
+  };
+  enum RotationType
+  {
+    kLSRelative    = 0, // Rotation relative to curve direction.
+    kLSAbsolute    = 1, // Rotation in absolute coordinates of drawing.
+    kLSAdjusted    = 2  // Rotation is adjusted left to right; mirror symbols if line is reversed.
+  };
+
+protected:
+  bool m_bPartialStrokes; // Partial: Origin: true (projected: false), Projected: true (projected: true), None: false (projected: false)
+  bool m_bClipPartial;
+  bool m_bAllowStretch;
+  bool m_bPartialProjected; // Look for m_bPartialStrokes
+  bool m_bSymbolColor; // false - use line color, true - use element color
+  bool m_bSymbolWeight; // false - use line lineweight, true - use element lineweight
+  Justify m_Justify; // 0 for vertex symbols
+  RotationType m_RotationType;
+  OdInt16 m_nVertexMask; // 0 for stroke symbols
+  double m_fXOffset;
+  double m_fYOffset;
+  double m_fAngle; // in radians
+  OdInt32 m_nStroke; // -1 for vertex symbols
+  OdDbHardPointerId m_SymbolComponent;
+
+public:
+  OdDbLSSymbolReference()
+    : m_bPartialStrokes(true)
+    , m_bClipPartial(false)
+    , m_bAllowStretch(false)
+    , m_bPartialProjected(false)
+    , m_bSymbolColor(false)
+    , m_bSymbolWeight(false)
+    , m_Justify(kLSNoJustify)
+    , m_RotationType(kLSRelative)
+    , m_nVertexMask((OdInt16)kLSAtStroke)
+    , m_fXOffset(0.0)
+    , m_fYOffset(0.0)
+    , m_fAngle(0.0)
+    , m_nStroke(-1)
+  {
+  }
+  
+  /** \details
+    Returns true if partial strokes mode is enabled.
+
+    \remarks
+    If this mode is disabled: display whole symbol or none.
+  */
+  bool partialStrokes() const { return m_bPartialStrokes; }
+  /** \details
+    Sets partial stroke mode.
+
+    \param bSet [in]  New value to set.
+  */
+  void setPartialStrokes(bool bSet) { m_bPartialStrokes = bSet; }
+
+  /** \details
+    Returns true if symbol clipping on partial strokes enabled.
+  */
+  bool clipPartial() const { return m_bClipPartial; }
+  /** \details
+    Enables symbol clipping on partial strokes mode.
+
+    \param bSet [in]  New value to set.
+  */
+  void setClipPartial(bool bSet) { m_bClipPartial = bSet; }
+
+  /** \details
+    Returns true if symbol can be scaled.
+  */
+  bool allowStretch() const { return m_bAllowStretch; }
+  /** \details
+    Enables symbol scalability.
+
+    \param bSet [in]  New value to set.
+  */
+  void setAllowStretch(bool bSet) { m_bAllowStretch = bSet; }
+
+  /** \details
+    Returns true if project partial origin if it is beyond the end of line mode is enabled.
+  */
+  bool partialProjected() const { return m_bPartialProjected; }
+  /** \details
+    Sets project partial origin if it is beyond the end of line mode.
+
+    \param bSet [in]  New mode to set.
+  */
+  void setPartialProjected(bool bSet) { m_bPartialProjected = bSet; }
+
+  /** \details
+    Returns true if symbol color usage enabled.
+
+    \remarks
+    Elsewhere line color will be used.
+  */
+  bool useSymbolColor() const { return m_bSymbolColor; }
+  /** \details
+    Sets symbol color usage mode.
+
+    \param bSet [in]  New mode to set.
+  */
+  void setUseSymbolColor(bool bSet) { m_bSymbolColor = bSet; }
+
+  /** \details
+    Returns true if symbol lineweight usage enabled.
+
+    \remarks
+    Elsewhere line lineweight will be used.
+  */
+  bool useSymbolLineweight() const { return m_bSymbolWeight; }
+  /** \details
+    Sets symbol lineweight usage mode.
+
+    \param bSet [in]  New mode to set.
+  */
+  void setUseSymbolLineweight(bool bSet) { m_bSymbolWeight = bSet; }
+
+  /** \details
+    Returns symbol justification on stroke.
+  */
+  Justify justify() const { return m_Justify; }
+  /** \details
+    Sets symbol justification on stroke.
+
+    \param nSet [in]  New justification value to set.
+  */
+  void setJustify(Justify nSet) { m_Justify = nSet; }
+
+  /** \details
+    Returns symbol rotation mode.
+  */
+  RotationType rotationType() const { return m_RotationType; }
+  /** \details
+    Sets symbol rotation mode.
+
+    \param nSet [in]  New rotation mode to set.
+  */
+  void setRotationType(RotationType nSet) { m_RotationType = nSet; }
+
+  /** \details
+    Returns vertex type for this symbol.
+  */
+  OdUInt32 vertexMask() const { return (OdUInt32)m_nVertexMask; }
+  /** \details
+    Sets vertex type for this symbol.
+
+    \param nVertexMask [in]  Vertex type to set.
+    \remarks
+    Must be set to 0 if symbol is associated with stroke.
+  */
+  void setVertexMask(OdUInt32 nVertexMask) { m_nVertexMask = (OdInt16)nVertexMask; }
+
+  /** \details
+    Returns symbol offset in X direction.
+  */
+  double xOffset() const { return m_fXOffset; }
+  /** \details
+    Sets symbol offset in X direction.
+
+    \param fOffset [in]  New offset to set.
+  */
+  void setXOffset(double fOffset) { m_fXOffset = fOffset; }
+
+  /** \details
+    Returns symbol offset in Y direction.
+  */
+  double yOffset() const { return m_fYOffset; }
+  /** \details
+    Sets symbol offset in Y direction.
+
+    \param fOffset [in]  New offset to set.
+  */
+  void setYOffset(double fOffset) { m_fYOffset = fOffset; }
+
+  /** \details
+    Returns symbol rotation angle.
+  */
+  double angle() const { return m_fAngle; }
+  /** \details
+    Sets symbol rotation angle.
+
+    \param fAngle [in]  Rotation angle in radians.
+  */
+  void setAngle(double fAngle) { m_fAngle = fAngle; }
+
+  /** \details
+    Returns stroke index with which this symbol is associated.
+  */
+  OdInt32 strokeNumber() const { return m_nStroke; }
+  /** \details
+    Associate symbol with stroke.
+
+    \param nStroke [in]  Stroke index.
+    \remarks
+    Must be set to -1 if symbol is configured for vertex symbol usage.
+  */
+  void setStrokeNumber(OdInt32 nStroke) { m_nStroke = nStroke; }
+
+  /** \details
+    Returns symbol component identifier with which this symbol reference is associated.
+  */
+  OdDbObjectId symbolComponent() const { return m_SymbolComponent; }
+  /** \details
+    Sets symbol component identifier with which this symbol reference will be associated.
+
+    \param id [in]  Symbol component identifier.
+  */
+  void setSymbolComponent(const OdDbObjectId &id) { m_SymbolComponent = id; }
+
+private:
+  friend class OdDbLSPointComponentImpl;
+
+  OdResult dwgInFields(OdDbDwgFiler *pFiler);
+  void dwgOutFields(OdDbDwgFiler *pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler *pFiler);
+  void dxfOutFields(OdDbDxfFiler *pFiler) const;
+
+#ifdef ODA_DIAGNOSTICS
+  void trace(OdUInt32 nSymbol) const;
+#endif
+};
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSSYMBOLREFERENCE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSXData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSXData.h
new file mode 100755
index 0000000..9510744
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/DbLSXData.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDGNLS_DBLSXDATA_H
+#define ODDGNLS_DBLSXDATA_H
+
+#include "OdaCommon.h"
+#include "DbEntity.h"
+
+#include "OdDgnLSExport.h"
+
+#include "TD_PackPush.h"
+
+// Entity DgnLSModifiers XData processing helper functions.
+
+ODDGNLS_EXPORT const OdConstString &oddbDgnLSGetEntityXDataName();
+
+ODDGNLS_EXPORT bool oddbDgnLSCheckEntityXData(const OdDbEntity *pEntity);
+
+ODDGNLS_EXPORT bool oddbDgnLSReadEntityXData(const OdDbEntity *pEntity, OdGiDgLinetypeModifiers &pModifiers, double *pScale = NULL);
+ODDGNLS_EXPORT bool oddbDgnLSDrawEntityXData(const OdDbEntity *pEntity, OdGiSubEntityTraits *pTraits);
+
+ODDGNLS_EXPORT bool oddbDgnLSWriteEntityXData(OdDbEntity *pEntity, const OdGiDgLinetypeModifiers &pModifiers, const double &pScale);
+ODDGNLS_EXPORT bool oddbDgnLSRemoveEntityXData(OdDbEntity *pEntity);
+
+#include "TD_PackPop.h"
+
+#endif // ODDGNLS_DBLSXDATA_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/OdDgnLSExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/OdDgnLSExport.h
new file mode 100755
index 0000000..6f69901
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DgnLS/OdDgnLSExport.h
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDGNLSEXPORT_INCLUDED_
+#define _ODDGNLSEXPORT_INCLUDED_
+
+#include "OdPlatformSettings.h"
+
+#ifdef ODDGNLS_EXPORTS
+#define ODDGNLS_EXPORT        OD_TOOLKIT_EXPORT
+#define ODDGNLS_EXPORT_STATIC OD_STATIC_EXPORT
+#else                           
+#define ODDGNLS_EXPORT        OD_TOOLKIT_IMPORT
+#define ODDGNLS_EXPORT_STATIC OD_STATIC_IMPORT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+
+#endif // _ODDGNLSEXPORT_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DimVarDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DimVarDefs.h
new file mode 100755
index 0000000..9fa3438
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DimVarDefs.h
@@ -0,0 +1,1146 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef BLKVAR_DEF
+#define BLKVAR_DEF  VAR_DEF
+#endif
+
+#ifndef ANNOVAR_DEF
+#define ANNOVAR_DEF  VAR_DEF
+#endif
+
+#ifndef ODTDB_LINEWEIGHT
+#define ODTDB_LINEWEIGHT OdDb::LineWeight /*!DOM*/
+#define DOUNDEF_ODTDB_LINEWEIGHT
+#endif
+
+#ifndef ODTDIST
+#define ODTDIST  double /*!DOM*/
+#define DOUNDEF_ODTDIST
+#endif
+
+#ifndef ODTORIENT
+#define ODTORIENT  double /*!DOM*/
+#define DOUNDEF_ODTORIENT
+#endif
+
+#ifndef ODTUNITLESS
+#define ODTUNITLESS  double /*!DOM*/
+#define DOUNDEF_ODTUNITLESS
+#endif
+
+#ifndef ODTDECSEP
+#define ODTDECSEP  OdInt16 /*!DOM*/
+#define DOUNDEF_ODTDECSEP
+#endif
+
+#ifndef ODTARROWBLK
+#define ODTARROWBLK  OdDbHardPointerId /*!DOM*/
+#define DOUNDEF_ODTARROWBLK
+#endif
+
+#ifndef ODTTEXTSTYLEID
+#define ODTTEXTSTYLEID  OdDbHardPointerId /*!DOM*/
+#define DOUNDEF_ODTTEXTSTYLEID
+#endif
+
+
+#ifndef ODTLINETYPEID
+#define ODTLINETYPEID  OdDbHardPointerId /*!DOM*/
+#define DOUNDEF_ODTLINETYPEID
+#endif
+
+#ifndef NullIdAllowed
+#define NullIdAllowed true
+#define DOUNDEF_NullIdAllowed
+#endif
+
+
+/** **********************************************
+ *
+ * Dimension variables definitions
+*/
+
+//          Type              Name    DXF     Default value         Metric Def Value      Reserve1   Reserve2
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMADEC specifies the number of decimal places in angular dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              adec,   179,    (0),                  (0),                  (),        ValidateRange(0, 8))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALT controls the display of alternate measurements in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 alt,    170,    (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTD specifies the number of decimal places in alternate measurements in dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdUInt16,             altd,   171,    (2),                  (3),                  (),        ValidateRange(0,8))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTF specifies the distance multiplier for alternate measurements in dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(double,               altf,   143,    (25.4),               (0.03937007874016),   (),        ValidateRange(DBL_MIN, DBL_MAX))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTRND specifies the rounding of alternate measurements in dimensions."
+      "\n"
+      "\n    If DIMALTRND == 0.0, no rounding is performed."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              altrnd, 148,    (0.0),                (0.0),                (),        ValidateRange(0,DBL_MAX))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTTD specifies the number of decimal places in tolerance values in alternate measurements in dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              alttd,  274,    (2),                  (3),                  (),        ValidateRange(0,8))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTTZ controls zero suppression in tolerance values in alternate measurements in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Suppress zero feet and exactly zero inches."
+      "\n    1        Include zero feet and exactly zero inches."
+      "\n    2        Include zero feet and suppress exactly zero inches."
+      "\n    3        Suppress zero feet and include exactly zero inches."
+      "\n    4        Suppress leading decimal zeros."
+      "\n    8        Suppress trailing decimal zeros.
+      "\n    12       Suppress leading and trailing decimal zeros.
+      "\n"
+      "\n    Values 0-3 affect only feet-and-inch dimensions, and may be combined with values 4-12."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdUInt8,              alttz,  286,    (0),                  (0),                  (),        ValidateRange(0,15))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTU controls the formatting for alternate units in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    1         Scientific"
+      "\n    2         Decimal"
+      "\n    3         Engineering"
+      "\n    4         Architectural (stacked)"
+      "\n    5         Fractional (stacked)"
+      "\n    6         Architectural"
+      "\n    7         Fractional"
+      "\n    8         Microsoft Windows Desktop"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              altu,   273,    (2),                  (2),                  (),        ValidateRange(1,8))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTZ controls zero suppression in alternate measurements in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Suppress zero feet and exactly zero inches."
+      "\n    1        Include zero feet and exactly zero inches."
+      "\n    2        Include zero feet and suppress exactly zero inches."
+      "\n    3        Suppress zero feet and include exactly zero inches."
+      "\n    4        Suppress leading decimal zeros."
+      "\n    8        Suppress trailing decimal zeros."
+      "\n    12       Suppress leading and trailing decimal zeros."
+      "\n"
+      "\n    Values 0-3 affect only feet-and-inch dimensions, and may be combined with values 4-12."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdUInt8,              altz,   285,    (0),                  (0),                  (),        ValidateRange(0,15))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMAPOST specifies a prefix and/or suffix for alternate measurement text in dimensions."
+      "\n"
+      "\n    DIMAPOST is in the form prefix<>suffix. "
+      "\n"
+      "\n    The '<>' in DIMAPOST is replaced by the alternate measurement text."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdString,             apost,  4,      (OD_T("")),                 (OD_T("")),                 (),        ValidateNone())
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMASZ specifies the arrowhead size for dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              asz,    41,     (0.18),               (2.5),                (),        ValidateRange(0,DBL_MAX))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMATFIT specifies how arrows and text are placed when they do not fit"
+      " within the extension lines of dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Moves text and arrows outside extension lines."
+      "\n    1        Moves arrows, then text, outside extension lines."
+      "\n    2        Moves text, then arrows, outside extension lines."
+      "\n    3        Moves text or arrows for best fit."
+
+      When DIMTMOVE == 1, a leader is added to moved text.
+    </remarks>
+  </properties>
+*/
+ANNOVAR_DEF(OdInt16,          atfit,  289,    (3),                  (3),                  (),        ValidateRange(0,3))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMAUNIT specifies the formatting for units in angular dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    0         Decimal Degrees"
+      "\n    1         Degrees-Minutes-Seconds"
+      "\n    2         Gradians"
+      "\n    3         Radians"
+      "\n    4         Surveyor's Units"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              aunit,  275,    (0),                  (0),                  (),        ValidateRange(0,4))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMAZIN controls zero suppression in angular dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Display leading and trailing decimal zeros."
+      "\n    1        Suppress leading decimal zeros."
+      "\n    2        Suppress trailing decimal zeros."
+      "\n    3        Suppress leading and trailing decimal zeros."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              azin,   79,     (0),                  (0),                  (),        ValidateRange(0,3))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMBLK specifies the arrowhead block at the ends of dimension lines and leader lines."
+      "\n"
+      "\n    A null value specifies the default arrowhead is to be used."
+    </remarks>
+  </properties>
+*/
+BLKVAR_DEF(ODTARROWBLK,       blk,    342,    (OdDbObjectId::kNull),(OdDbObjectId::kNull),(),        ValidateDimBlock())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMBLK1 specifies the first arrowhead block of dimension lines when DIMSAH == true."
+      "\n"
+      "\n    A null value specifies the default arrowhead is to be used."
+    </remarks>
+  </properties>
+*/
+BLKVAR_DEF(ODTARROWBLK,       blk1,   343,    (OdDbObjectId::kNull),(OdDbObjectId::kNull),(),        ValidateDimBlock())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMBLK2 specifies the second arrowhead block of dimension lines when DIMSAH == true."
+      "\n"
+      "\n    A null value specifies the default arrowhead is to be used."
+    </remarks>
+  </properties>
+*/
+BLKVAR_DEF(ODTARROWBLK,       blk2,   344,    (OdDbObjectId::kNull),(OdDbObjectId::kNull),(),        ValidateDimBlock())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMCEN controls the generation of arc and circle center marks and lines."
+      "\n"
+      "\n    The absolute value of DIMCEN specifies the size of the center mark, which half the length of the center mark,"
+      "\n    which is also the length of the portion of a center line beyond the arc or circle, as well as"
+      "\n    the length of the gap between the center mark and line."
+      "\n"
+      "\n    The sign of DIMCEN controls the generation of center marks and center lines:"
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    < 0       Center marks and center lines"
+      "\n    0         No center marks or center lines"
+      "\n    > 0       Center marks"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              cen,    141,    (0.09),               (2.5),                (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMCLRD specifies the color of dimension lines, leader lines, frames, and arrowheads."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdCmColor,            clrd,   176,(OdCmEntityColor::kByBlock),(OdCmEntityColor::kByBlock),(),ValidateColor())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMCLRE specifies the color of extension lines."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdCmColor,            clre,   177,(OdCmEntityColor::kByBlock),(OdCmEntityColor::kByBlock),(),ValidateColor())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMCLRT specifies the color of dimension text."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdCmColor,            clrt,   178,(OdCmEntityColor::kByBlock),(OdCmEntityColor::kByBlock),(),ValidateColor())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMDEC specifies the number of decimal places in primary units in dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              dec,    271,    (4),                  (2),                  (),        ValidateRange(0,8))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMDLE specifies the distance dimension lines extend beyond extension lines when"
+      "\n    arrowheads are architectural, integral, oblique, tick, or none."
+      "\n"
+      <see_also>
+      "\n    DIMTSZ"
+      </see_also>
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              dle,    46,     (0.0),                (0.0),                (),        ValidateRange(0,DBL_MAX))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMDLI specifies distance between dimension lines for baseline dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              dli,    43,     (0.38),               (3.75),               (),        ValidatePositive())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMDSEP specifies the decimal separator for dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDECSEP,            dsep,   278,    ('.'),                (','),                (),        ValidateDecSep())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMEXE specifies the distance extension lines extend beyond dimension lines."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              exe,    44,     (0.18),               (1.25),               (),        ValidatePositive())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMEXO specifies the distance extension are offset from their origin points."
+      "\n"
+      "\n    DIMEXO specifies a minimum value when fixed-length extension lines are used."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              exo,    42,     (0.0625),             (0.625),              (),        ValidatePositive())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMFRAC specifies the fraction format when DIMLUNIT == 4 or 5."
+      "\n"
+      "\n    @table"
+      "\n    Value        Description"
+      "\n    0            Horizontal Stacked."
+      "\n    1            Diagonal Stacked."
+      "\n    2            Not Stacked."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              frac,   276,    (0),                  (0),                  (),        ValidateRange(0,2))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMGAP specifies the gap between dimension text and dimension lines."
+      "\n"
+      "\n    A negative value for DIMGAP draws a reference box round the dimension text."
+      "\n"
+      "\n    Text is placed inside a dimension line only if there will be two line segments"
+      "\n    each as long as abs(DIMGAP)."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              gap,    147,    (0.09),               (0.625),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMJUST specifies the dimension text horizontal position."
+      "\n"
+      "\n    @table"
+      "\n    Value        Description"
+      "\n    0            Centered above the dimension line."
+      "\n    1            By the first extension line."
+      "\n    2            By the second extension line."
+      "\n    3            Above the dimension line, parallel to the first extension line."
+      "\n    4            Above the dimension line, parallel to the second extension line."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdUInt16,             just,   280,    (0),                  (0),                  (),        ValidateRange(0,4))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLDRBLK specifies the arrowhead block at the ends of leader lines."
+      "\n"
+      "\n    A null value specifies the default arrowhead is to be used."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTARROWBLK,          ldrblk, 341,    (OdDbObjectId::kNull),(OdDbObjectId::kNull),(),        ValidateDimBlock())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLFAC specifies the distance multiplier for measurements in dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(double,               lfac,   144,    (1.0),                (1.0),                (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLIM controls the display of dimension limits."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    false     Disabled."
+      "\n    true      Enabled."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 lim,    72,     (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLUNIT specifies the formatting for units in non-angular dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    1         Scientific"
+      "\n    2         Decimal"
+      "\n    3         Engineering"
+      "\n    4         Architectural (stacked)"
+      "\n    5         Fractional (stacked)"
+      "\n    6         Microsoft Windows Desktop"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              lunit,  277,    (2),                  (2),                  (),        ValidateRange(1,6))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLWD specifies the lineweight for dimension lines."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDB_LINEWEIGHT,     lwd,    371,    (OdDb::kLnWtByBlock), (OdDb::kLnWtByBlock), (),        ValidateLineWeight())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLWE specifies the lineweight for extension lines."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDB_LINEWEIGHT,     lwe,    372,    (OdDb::kLnWtByBlock), (OdDb::kLnWtByBlock), (),        ValidateLineWeight())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMPOST specifies a prefix and/or suffix for the measurement text in dimensions."
+      "\n"
+      "\n    DIMPOST is in the form prefix<>suffix. "
+      "\n"
+      "\n    The '<>' in DIMPOST is replaced by the measurement text."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdString,             post,   3,      (OD_T("")),                 (OD_T("")),                 (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMRND specifies the rounding of measurements text."
+      "\n"
+      "\n    If DIMRND == 0, no rounding is performed."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              rnd,    45,     (0.0),                (0.0),                (),        ValidatePositive())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSAH controls the generation of separate arrowheads for dimension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Arrowhead Blocks"
+      "\n    false    DIMBLK"
+      "\n    true     DIMBLK1 and DIMBLK2"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 sah,    173,    (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSCALE is an scale factor applied to all dimension variables that"
+      "\n    regulate sizes, offsets, and distances."
+      "\n"
+      "\n    DIMSCALE serves as an overall \"volume control\" for dimensions"
+      "\n    and leaders."
+      "\n"
+      "\n    @table"
+      "\n    Value        Description"
+      "\n    0.0          A \"reasonable\" value is computed for model space viewports."
+      "\n    > 0.0        If set to the inverse of the plot scale, plotted dimensions will"
+      " be at the sizes specified by the other dimension variables."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(double,               scale,  40,     (1.0),                (1.0),                (),        ValidatePositive())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSD1 controls the suppression of the first dimension line and arrowhead in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not suppressed"
+      "\n    true     Suppressed"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 sd1,    281,    (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSD2 controls the suppression of the second dimension line and arrowhead in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not suppressed"
+      "\n    true     Suppressed."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 sd2,    282,    (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSE1 controls the suppression of the first extension line in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not suppressed"
+      "\n    true     Suppressed."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 se1,    75,     (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSE2 controls the suppression of the second extension line in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not suppressed"
+      "\n    true     Suppressed."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 se2,    76,     (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSOXD controls the suppression of dimension lines outside the extension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not suppressed"
+      "\n    true     Suppressed."
+    </remarks>
+  </properties>
+*/
+ANNOVAR_DEF(bool,             soxd,   175,    (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTAD specifies the dimension text vertical position."
+      "\n"
+      "\n    @table"
+      "\n    Value        Description"
+      "\n    0            Centered about the dimension line."
+      "\n    1            Above the dimension line, unless DIMTIH==1 and the dimension line is not horizontal."
+      "\n    2            Side of the dimension line farthest from the defining points."
+      "\n    3            JIS standard."
+      "\n    4            Text below the dimension line"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              tad,    77,     (0),                  (1),                  (),        ValidateRange(0,4))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTDEC specifies the number of decimal places in tolerance values for primary units in dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              tdec,   272,    (4),                  (2),                  (),        ValidateRange(0,8))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTFAC specifies, as a factor of DIMTXT, the size of tolerance and fraction text in dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(double,               tfac,   146,    (1.0),                (1.0),                (),        ValidatePositiveNonZero())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTIH controls the orientation of dimension text inside the extension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Aligned with dimension line."
+      "\n    true     Horizontal."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 tih,    73,     (true),               (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTIX controls the placement of dimension text inside the extension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Inside extension lines if there is room."
+      "\n    true     Inside extension lines."
+    </remarks>
+  </properties>
+*/
+ANNOVAR_DEF(bool,             tix,    174,    (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTM specifies the negative of the lower tolerance limit for dimensions."
+    </remarks>
+  </properties>
+*/
+
+VAR_DEF(ODTDIST,              tm,     48,     (0.0),                (0.0),                (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTMOVE specifies the movement rules for dimension text."
+      "\n"
+      "\n    @table"
+      "\n    Value        Description"
+      "\n    0            Moving dimension text moves the dimension line."
+      "\n    1            Moving dimension text adds a leader."
+      "\n    2            Moving dimension text does not add a leader."
+    </remarks>
+  </properties>
+*/
+ANNOVAR_DEF(OdInt16,          tmove,  279,    (0),                  (0),                  (),        ValidateRange(0,2))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTOFL controls the drawing of dimension lines between extension lines"
+      "\n    when text is outside the dimension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled."
+      "\n    true     Enabled."
+    </remarks>
+  </properties>
+*/
+ANNOVAR_DEF(bool,             tofl,   172,    (false),              (true),               (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTOH controls the orientation of dimension text outside the extension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Aligned with dimension line."
+      "\n    true     Horizontal."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 toh,    74,     (true),               (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTOL controls the generation of tolerance text in dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled."
+      "\n    true     Enabled."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 tol,    71,     (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTOLJ controls the vertical justification of tolerance values with respect to the nominal dimension text."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Bottom"
+      "\n    1        Middle"
+      "\n    2        Top"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdUInt8,              tolj,   283,    (1),                  (0),                  (),        ValidateRange(0,2))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTP specifies the upper tolerance limit for dimensions."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              tp,     47,     (0.0),                (0.0),                (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTSZ specifies the size of architectural tics are "
+      "\n    to be drawn instead of arrowheads for linear, radial, and diameter dimensions."
+      "\n"
+      "\n    DIMTSZ is the distance, parallel to the dimension line,"
+      "\n    that the tics extends beyond the extension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0.0      Arrowheads"
+      "\n    > 0.0    Tics"
+    </remarks>
+    <see_also>
+      "\n    DIMDLE"
+    </see_also>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              tsz,    142,    (0.0),                (0.0),                (),        ValidatePositive())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTVP specifies, as a factor of DIMTXT, the vertical distance of the middle"
+      "\n    of the dimension text with respect to the dimension line."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(double,               tvp,    145,    (0.0),                (0.0),                (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTXSTY specifies the text style of the dimension text."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTTEXTSTYLEID,       txsty,  340,    (OdDbObjectId::kNull),(OdDbObjectId::kNull),(),        ValidateTextStyle(NullIdAllowed))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTXT specifies the size of the dimension text."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              txt,    140,    (0.18),               (2.5),                (),        ValidatePositiveNonZero())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTZIN controls zero suppression in tolerance values in linear dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Suppress zero feet and exactly zero inches."
+      "\n    1        Include zero feet and exactly zero inches."
+      "\n    2        Include zero feet and suppress exactly zero inches."
+      "\n    3        Suppress zero feet and include exactly zero inches."
+      "\n    4        Suppress leading decimal zeros."
+      "\n    8        Suppress trailing decimal zeros.
+      "\n    12       Suppress leading and trailing decimal zeros.
+      "\n"
+      "\n    Values 0-3 affect only feet-and-inch dimensions, and may be combined with values 4-12."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdUInt8,              tzin,   284,    (0),                  (8),                  (),        ValidateRange(0,15))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMUPT controls the movement of user-positioned text when dimension lines are moved."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Moves only the dimension line."
+      "\n    true     Moves the dimension line and the text."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(bool,                 upt,    288,    (false),              (false),              (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMZIN controls zero suppression in linear dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Suppress zero feet and exactly zero inches."
+      "\n    1        Include zero feet and exactly zero inches."
+      "\n    2        Include zero feet and suppress exactly zero inches."
+      "\n    3        Suppress zero feet and include exactly zero inches."
+      "\n    4        Suppress leading decimal zeros."
+      "\n    8        Suppress trailing decimal zeros.
+      "\n    12       Suppress leading and trailing decimal zeros.
+      "\n"
+      "\n    Values 0-3 affect only feet-and-inch dimensions, and may be combined with values 4-12."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdUInt8,              zin,    78,     (0),                  (8),                  (),        ValidateRange(0,15))
+
+
+//--------------------------------------------new in R21------------------------------------------------------
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMFXL specifies the fixed length of extension lines from"
+      "\n    the dimension line towards the dimension origin."
+      "\n"
+      "\n    DIMFXL is ignored when DIMFXLON == false.
+    </remarks>
+  </properties>
+*/
+VAR_DEF(ODTDIST,              fxl,    49,     (1.0),                  (1.0),                  (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMFXLON controls the generation of fixed-length extension lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Variable length."
+      "\n    true     Fixed length."
+    </remarks>
+      <see_also>
+      "\n    DIMFXL"
+      </see_also>
+  </properties>
+*/
+VAR_DEF(bool,              fxlon,    290,     (false),                  (false),                  (),       ValidateBOOL())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMJOGANG specifies the jog angle of dimension lines in jogged radius dimensions."
+    </remarks>
+    <notes>
+      "\n    All angles are expressed in radians."
+    </notes>
+  </properties>
+*/
+VAR_DEF(ODTORIENT,         jogang,    50,     (OdaPI4),                  (OdaPI4),                  (),     ValidateDouble(  5.0*OdaPI/180.0, OdaPI2))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTFILL specifies the background fill of dimension text."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    0         No fill."
+      "\n    1         Drawing background color."
+      "\n    2         Color specified by DIMTFILLCLR."
+     </remarks>
+     <see_also>
+      "\n    DIMTFILLCLR"
+     </see_also>
+  </properties>
+*/
+VAR_DEF(OdInt16,              tfill,    69,     (0),                  (0),                  (),        ValidateRange(0, 2))
+
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTFILLCLR specifies the background fill color for dimension text when DIMTFILL == 2."
+     </remarks>
+     <see_also>
+      "\n    DIMTFILL"
+     </see_also>
+  </properties>
+*/
+VAR_DEF(OdCmColor,              tfillclr,    70,     (OdCmEntityColor::kByBlock),                  (OdCmEntityColor::kByBlock),                  (),        ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMARCSYM specifies the placement of arc symbols in arc length dimensions."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    0         Before the dimension text."
+      "\n    1         Above the dimension text."
+      "\n    2         Not displayed."
+     </remarks>
+  </properties>
+*/
+VAR_DEF(OdInt16,              arcsym,    90,     (0),                  (0),                  (),        ValidateRange(0, 2))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLTYPE specifies the linetype of dimension lines."
+     </remarks>
+  </properties>
+*/
+VAR_DEF(ODTLINETYPEID,              ltype,    345,     (OdDbObjectId::kNull),                  (OdDbObjectId::kNull),                  (),        ValidateLinetype(true))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLTEX1 specifies the linetype of first extension lines."
+     </remarks>
+  </properties>
+*/
+VAR_DEF(ODTLINETYPEID,              ltex1,    346,     (OdDbObjectId::kNull),                  (OdDbObjectId::kNull),                  (),        ValidateLinetype(true))
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLTEX2 specifies the linetype of the second extension lines."
+     </remarks>
+  </properties>
+*/
+VAR_DEF(ODTLINETYPEID,              ltex2,    347,     (OdDbObjectId::kNull),                  (OdDbObjectId::kNull),                  (),        ValidateLinetype(true))
+
+//--------------------------------------------new in R24------------------------------------------------------
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMTXTDIRECTION controls the text direction."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    "
+      "\n    true     "
+    </remarks>
+      <see_also>
+      "\n    DIMTXTDIRECTION"
+      </see_also>
+  </properties>
+*/
+VAR_DEF(bool,         txtdirection,   294,          (false),                  (false),          (),  ValidateBOOL())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMMZF."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(double,                mzf,   297,          (100.0),                  (100.0),          (),  ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMMZS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdString,              mzs,   298,       (OD_T("")),               (OD_T("")),          (),  ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTMZF."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(double,             altmzf,   295,          (100.0),                  (100.0),          (),  ValidateNone())
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMALTMZS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(OdString,           altmzs,   296,       (OD_T("")),               (OD_T("")),          (),  ValidateNone())
+
+
+#ifdef DOUNDEF_ODTDB_LINEWEIGHT
+#undef ODTDB_LINEWEIGHT
+#undef DOUNDEF_ODTDB_LINEWEIGHT
+#endif
+
+#ifdef DOUNDEF_ODTDIST
+#undef ODTDIST
+#undef DOUNDEF_ODTDIST
+#endif
+
+#ifdef DOUNDEF_ODTUNITLESS
+#undef ODTUNITLESS
+#undef DOUNDEF_ODTUNITLESS
+#endif
+
+#ifdef DOUNDEF_ODTORIENT
+#undef ODTORIENT
+#undef DOUNDEF_ODTORIENT
+#endif
+
+#ifdef DOUNDEF_ODTDECSEP
+#undef ODTDECSEP
+#undef DOUNDEF_ODTDECSEP
+#endif
+
+#ifdef DOUNDEF_ODTARROWBLK
+#undef ODTARROWBLK
+#undef DOUNDEF_ODTARROWBLK
+#endif
+
+#ifdef DOUNDEF_ODTTEXTSTYLEID
+#undef ODTTEXTSTYLEID
+#undef DOUNDEF_ODTTEXTSTYLEID
+#endif
+
+#ifdef DOUNDEF_ODTLINETYPEID
+#undef ODTLINETYPEID
+#undef DOUNDEF_ODTLINETYPEID
+#endif
+
+#ifdef DOUNDEF_NullIdAllowed
+#undef NullIdAllowed
+#undef DOUNDEF_NullIdAllowed
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DoubleArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DoubleArray.h
new file mode 100755
index 0000000..60387b2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DoubleArray.h
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODDOUBLEARRAY_INCLUDED
+#define ODDOUBLEARRAY_INCLUDED
+
+#include "OdArray.h"
+typedef double OdDouble;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDouble objects.
+*/
+typedef OdArray<OdDouble, OdMemoryAllocator<OdDouble> > OdDoubleArray;
+
+#endif // ODDOUBLEARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DrxError.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DrxError.h
new file mode 100755
index 0000000..1f74964
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DrxError.h
@@ -0,0 +1,136 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _TxError_h_Included_
+#define _TxError_h_Included_
+
+
+#include "OdError.h"
+#include "OdErrorContext.h"
+
+#include "TD_PackPush.h"
+
+
+
+/** \details
+    This class implements OdErrorContext objects for TX-specific errors.
+    
+    <group Other_Classes> 
+*/
+class TxErrorContext : public OdErrorContext
+{
+  OdString    m_strAppName;
+  int         m_nAppErrCode;
+  OdString    m_strDescription;
+
+public:
+  TxErrorContext()
+    : m_strAppName(L"Unknown")
+    , m_nAppErrCode(0)
+  {}
+
+
+  OdSmartPtr<OdErrorContext> init(const OdString& name, int nCode, const OdString& desc = OdString::kEmpty )
+  {
+    m_strAppName = name;
+    m_nAppErrCode = nCode;
+    m_strDescription = desc;
+    return this;
+  }
+
+
+  /** \remarks
+    The default implementation of this function returns a string in the following format:
+                
+                    Tx application <AppName> error: <number>
+  */
+  OdString description() const
+  {
+    if (!m_strDescription.isEmpty())
+      return m_strDescription;
+    else 
+      return OdString().format(L"Tx application \"%ls\" error: %d", m_strAppName.c_str(), m_nAppErrCode);
+  }
+
+  virtual OdResult code() const { return eTxError; }
+  virtual int txAppCode() const { return m_nAppErrCode; }
+  virtual OdString txAppName() const {return m_strAppName;}
+};
+
+
+
+	/** \details
+	This class implements TX-specific OdError objects.
+
+	\remarks
+	TX applications can have their own set of error numbers that are labeled
+	with the Application Name. This means that error codes from different applications
+	can be recognized even if they have the same value.
+
+    <group Other_Classes> 
+	*/
+class TxError : public OdError
+{
+protected:
+  TxError( OdErrorContext* pCtx ) : OdError( pCtx )
+  {}
+public:
+  /** \param sAppName [in]  Application name
+  \param nCode [in]  Application-specific error code
+  */
+  TxError(const OdString& sAppName, int nCode, const OdString& desc = OdString::kEmpty)
+    : OdError(OdRxObjectImpl<TxErrorContext>::createObject()->
+       init(sAppName, nCode, desc))
+  {}
+
+  OdString txAppName() const
+  {
+    return ((TxErrorContext*)context())->txAppName();
+  }
+
+  int txAppCode() const
+  {
+    return ((TxErrorContext*)context())->txAppCode();
+  }
+};
+
+
+// Usage example:
+/*
+class MyAppError : public TxError
+{
+public:
+  MyAppError(int nCode) : TxError(L"MyApplication", nCode)
+  {}
+};
+
+
+  pHostAppservices->warning(MyAppError(123));
+     or
+  throw(MyAppError(123));
+*/
+
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock1PtParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock1PtParameter.h
new file mode 100755
index 0000000..ba51457
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock1PtParameter.h
@@ -0,0 +1,52 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlock1PtParameter_h_Included_
+#define _DbBlock1PtParameter_h_Included_
+
+#include "DbBlockParameter.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlock1PtParameter : public OdDbBlockParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlock1PtParameter);
+  OdDbBlockGripPtr getAssociatedGrip( OdDb::OpenMode );
+  virtual void graphEvalEnd(bool);
+  OdGePoint3d definitionPoint() const;
+  void setDefinitionPoint( const OdGePoint3d& );
+  OdGePoint3d point();
+  void setPoint( const OdGePoint3d& );
+  OdGePoint3d updatedPoint();
+  void setUpdatedPoint( const OdGePoint3d& );
+};
+
+typedef OdSmartPtr<OdDbBlock1PtParameter> OdDbBlock1PtParameterPtr;
+
+#endif // _DbBlock1PtParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock2PtParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock2PtParameter.h
new file mode 100755
index 0000000..6c04921
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlock2PtParameter.h
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlock2PtParameter_h_Included
+#define _DbBlock2PtParameter_h_Included
+
+#include "DbBlockParameter.h"
+class OdDbBlockAction;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlock2PtParameter : public OdDbBlockParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlock2PtParameter);
+  enum ParameterBaseLocation { start = 0, mid = 1 };
+  OdGePoint3d basePoint() const;
+  OdGePoint3d endPoint() const;
+  double distance() const;
+  double angle() const;
+  ParameterBaseLocation baseLocation() const;
+  OdGePoint3d definitionBasePoint() const;
+  OdGePoint3d definitionEndPoint() const;
+  double definitionDistance() const;
+  double definitionAngle() const;
+  OdGePoint3d updatedBasePoint() const;
+  OdGePoint3d updatedEndPoint() const;
+  double updatedDistance() const;
+  double updatedAngle() const;
+  OdGeVector3d normal() const;
+  OdDbBlockGripPtr getAssociatedGrip( OdDbBlockParameter::ParameterComponent, OdDb::OpenMode );
+  virtual void graphEvalEnd( bool );
+  //bool parameterComponentDrivesAction( OdDbBlockParameter::ParameterComponent, const OdDbBlockAction* );
+  bool parameterComponentHasAction( OdDbBlockParameter::ParameterComponent, const OdDbBlockAction*);
+  void setBaseLocation(ParameterBaseLocation);
+  void setBasePoint( const OdGePoint3d& );
+  void setEndPoint(const OdGePoint3d &);
+  void setDefinitionBasePoint( const OdGePoint3d& );
+  void setDefinitionEndPoint( const OdGePoint3d&);
+  void setUpdatedBasePoint(const OdGePoint3d &);
+  void setUpdatedEndPoint(const OdGePoint3d &);
+};
+
+typedef OdSmartPtr<OdDbBlock2PtParameter>OdDbBlock2PtParameterPtr;
+
+#endif //_DbBlock2PtParameter_h_Included
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockActions.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockActions.h
new file mode 100755
index 0000000..9b26f7c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockActions.h
@@ -0,0 +1,237 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlocksActions_h_Included_
+#define _DbBlocksActions_h_Included_
+
+#include "DbEvalGraph.h"
+#include "Ge/GePoint2dArray.h"
+#include "DbBlockElement.h"
+#include "DbBlockParameter.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockAction : public OdDbBlockElement
+{
+public:
+  enum OdDbBlockActionXYType{ XY, X, Y }; // not sure if the enum is the same in scale and polar stretch actions
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockAction);
+  virtual OdGePoint3d displayLocation() const;
+  virtual void setDisplayLocation( const OdGePoint3d& );
+  virtual OdDbEvalNodeId drivingParameterNodeId()const;
+  OdDbObjectIdArray elementSelectionSet() const;
+
+  virtual OdDbObjectIdArray selectionSet() const;
+  virtual OdDbBlockParameterPtr getAssociatedParameter( OdDb::OpenMode mode = OdDb::kForRead ) const;
+  //virtual void setSelectionSet( const OdDbObjectIdArray& );
+};
+
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockMoveAction : public OdDbBlockAction
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockMoveAction);
+  OdDbBlockMoveAction();
+  //double angleOffset();
+  //double distanceMultiplier();
+  //OdDbBlockActionXYType distanceType();
+  //void setAngleOffset(double);
+  //void setDistanceMultiplier(double);
+  //void setDistanceType(OdDbBlockActionXYType);
+};
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockStretchAction : public OdDbBlockAction
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockStretchAction);
+  OdDbBlockStretchAction();
+  //double angleOffset()const;
+  //double distanceMultiplier()const;
+  //OdDbBlockActionXYType distanceType()const;
+  //void setAngleOffset(double);
+  //void setDistanceMultiplier(double);
+  //void setDistanceType(OdDbBlockActionXYType);
+  //void setStretchFrame(const OdGePoint2dArray&);
+  //OdGePoint2dArray stretchFrame() const;
+};
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockActionWithBasePt : public OdDbBlockAction
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockActionWithBasePt);
+  //OdGePoint3d basePoint() const;
+  //OdGeVector3d basePointOffset() const;
+  //bool dependent() const;
+  //void setBasePoint(OdGePoint3d const &);
+  //void setBasePointOffset(OdGeVector3d const &);
+  //void setDependent(bool);
+};
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockScaleAction : public OdDbBlockActionWithBasePt
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockScaleAction);
+  OdDbBlockScaleAction();
+  //OdDbBlockActionXYType scaleType();
+  //void setScaleType( OdDbBlockActionXYType );
+};
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockRotateAction : public OdDbBlockActionWithBasePt
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockRotateAction);
+  OdDbBlockRotateAction();
+};
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockFlipAction : public OdDbBlockAction
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockFlipAction);
+  OdDbBlockFlipAction();
+};
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockArrayAction : public OdDbBlockAction
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockArrayAction);
+  OdDbBlockArrayAction();
+  //double columnOffset() const;
+  //double rowOffset() const;
+  //void setColumnOffset(double);
+  //void setRowOffset(double);
+};
+
+class OdDbDataTable;
+typedef OdSmartPtr<OdDbDataTable>OdDbDataTablePtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockLookupAction : public OdDbBlockAction
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockLookupAction);
+  OdDbBlockLookupAction();
+  //bool duplicateCellsInLookupColumn(int,int *);
+  //bool duplicateCellsInLookupColumn( const OdResBufArray&, const OdArray<void*>&,int,int *);
+  //bool duplicateRowsOverInputColumns(int *);
+  //bool duplicateRowsOverInputColumns( const OdResBufArray &, const OdArray<void*>&,int *);
+  //OdDbDataTablePtr getLookupTable( OdArray<void*> & );
+
+  void getLookupTable( OdResBufArray&,OdArray<void*>&);
+  //bool nonSingletonRangeInInputColumns(int *);
+  //bool nonSingletonRangeInInputColumns( const OdResBufArray &,const OdArray<void*>&,int *);
+  //bool nullsInInputColumns(int *);
+  //bool nullsInInputColumns( const OdResBufArray&, const OdArray<void*>&,int *);
+
+  OdUInt32 numberOfInputColumns() const;
+  OdUInt32 numberOfOutputColumns()const;
+  OdUInt32 numberOfColumns() const;
+  OdUInt32 numberOfRows()const;
+  //void setLookupTable( const OdResBufArray &, OdArray<void*> const &);
+  //void setLookupTable( const OdDbDataTable *, OdArray<void*>&);
+};
+typedef OdSmartPtr<OdDbBlockLookupAction>OdDbBlockLookupActionPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockPolarStretchAction : public OdDbBlockAction
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockPolarStretchAction);
+  OdDbBlockPolarStretchAction();
+  //double angleOffset() const;
+  //double distanceMultiplier() const;
+  //OdDbObjectIdArray rotateOnlyElementSelectionSet();
+  //OdDbObjectIdArray rotateOnlySelectionSet();
+  //void setAngleOffset(double);
+  //void setDistanceMultiplier(double);
+  //void setRotateOnlySelectionSet(const OdDbObjectIdArray&);
+  //void setStretchFrame(const OdGePoint2dArray &);
+  //OdGePoint2dArray stretchFrame();
+};
+
+#endif // _DbBlocksActions_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockAlignmentParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockAlignmentParameter.h
new file mode 100755
index 0000000..6f78e2b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockAlignmentParameter.h
@@ -0,0 +1,53 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockAlignmentParameter_h_Included_
+#define _DbBlockAlignmentParameter_h_Included_
+
+#include "DbBlock2PtParameter.h"
+
+class OdDbBlockAlignmentGrip;
+typedef OdSmartPtr<OdDbBlockAlignmentGrip> OdDbBlockAlignmentGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class OdDbBlockAlignmentParameter : public OdDbBlock2PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockAlignmentParameter);
+  OdDbBlockAlignmentParameter();
+  bool alignPerpendicular();
+  void setAlignPerpendicular(bool);
+  //OdDbBlockAlignmentGripPtr getAssociatedAlignmentGrip( OdDb::OpenMode );
+  //virtual OdDbBlockElement::HistoryCompression historyCompression() const;
+  //virtual bool historyRequired() const;
+};
+
+
+
+#endif // _DbBlockAlignmentParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockBasepointParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockBasepointParameter.h
new file mode 100755
index 0000000..f32b1ab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockBasepointParameter.h
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockBasepointParameter_h_Included_
+#define _DbBlockBasepointParameter_h_Included_
+
+#include "DbBlock1PtParameter.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class OdDbBlockBasepointParameter : public OdDbBlock1PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockBasepointParameter);
+  OdDbBlockBasepointParameter();
+  //double definitionX()const;
+  //double definitionY()const;
+  //void setDefinitionX(double);
+  //void setDefinitionY(double);
+  OdGePoint3d updatedBasePoint();
+};
+
+typedef OdSmartPtr<OdDbBlockBasepointParameter> OdDbBlockBasepointParameterPtr;
+
+#endif // _DbBlockBasepointParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockConstraintParameters.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockConstraintParameters.h
new file mode 100755
index 0000000..a47c629
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockConstraintParameters.h
@@ -0,0 +1,141 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockConstraintParameter_h_Included_
+#define _DbBlockConstraintParameter_h_Included_
+
+#include "DbBlock2PtParameter.h"
+#include "DbBlockParamValueSet.h"
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockConstraintParameter : public OdDbBlock2PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockConstraintParameter);
+  OdDbObjectId dependency();
+  void setDependency(OdDbObjectId id);
+};
+
+typedef OdSmartPtr<OdDbBlockConstraintParameter> OdDbBlockConstraintParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockLinearConstraintParameter : public OdDbBlockConstraintParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockLinearConstraintParameter);
+  OdDbBlockLinearConstraintParameter();
+  OdString description() const;
+  void setDescription(const OdString&);
+  double value() const;
+  void setValue(double v);
+  const OdDbBlockParamValueSet& valueSet() const;
+  void setValueSet(const OdDbBlockParamValueSet&);
+};
+
+typedef OdSmartPtr<OdDbBlockLinearConstraintParameter> OdDbBlockLinearConstraintParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockHorizontalConstraintParameter : public OdDbBlockLinearConstraintParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockHorizontalConstraintParameter);
+  OdDbBlockHorizontalConstraintParameter();
+};
+
+typedef OdSmartPtr<OdDbBlockHorizontalConstraintParameter> OdDbBlockHorizontalConstraintParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockVerticalConstraintParameter : public OdDbBlockLinearConstraintParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockVerticalConstraintParameter);
+  OdDbBlockVerticalConstraintParameter();
+};
+
+typedef OdSmartPtr<OdDbBlockVerticalConstraintParameter> OdDbBlockVerticalConstraintParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockAlignedConstraintParameter : public OdDbBlockLinearConstraintParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockAlignedConstraintParameter);
+  OdDbBlockAlignedConstraintParameter();
+};
+
+typedef OdSmartPtr<OdDbBlockAlignedConstraintParameter> OdDbBlockAlignedConstraintParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockAngularConstraintParameter : public OdDbBlockConstraintParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockAngularConstraintParameter);
+  OdDbBlockAngularConstraintParameter();
+};
+
+typedef OdSmartPtr<OdDbBlockAngularConstraintParameter> OdDbBlockAngularConstraintParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockDiametricConstraintParameter : public OdDbBlockConstraintParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockDiametricConstraintParameter);
+  OdDbBlockDiametricConstraintParameter();
+};
+
+typedef OdSmartPtr<OdDbBlockDiametricConstraintParameter> OdDbBlockDiametricConstraintParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockRadialConstraintParameter : public OdDbBlockConstraintParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockRadialConstraintParameter);
+  OdDbBlockRadialConstraintParameter();
+};
+
+typedef OdSmartPtr<OdDbBlockRadialConstraintParameter> OdDbBlockRadialConstraintParameterPtr;
+
+#endif //_DbBlockConstraintParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockElement.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockElement.h
new file mode 100755
index 0000000..a099f6d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockElement.h
@@ -0,0 +1,105 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockElement_h_Included_
+#define _DbBlockElement_h_Included_
+
+#include "DbEvalGraph.h"
+#include "IntArray.h"
+#include "Ge/GePoint3dArray.h"
+
+class OdDbBlockTableRecord;
+class OdDbBlockRepresentationContext;
+
+#define ODDB_EVAL_DECLARE_MEMBERS(ClassName) \
+  ODDB_DECLARE_MEMBERS(ClassName);\
+  OdResult dwgInFields(OdDbDwgFiler* pFiler);\
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;\
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);\
+  void dxfOutFields(OdDbDxfFiler* pFiler) const
+
+// #define DEBUG_EVALGRAPH 1
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockElement : public OdDbEvalConnectable
+{
+public:
+  enum HistoryCompression{kHistoryCompression0,kHistoryCompression1,kHistoryCompression2,kHistoryCompression3};
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockElement);
+  //!DOM EvalExpr interface
+  //!DOM virtual void adjacentNodeRemoved( const OdDbEvalNodeId& );
+  virtual bool evaluate( const OdDbEvalContext* );
+  //!DOM OdDbEvalConnectable interface
+  virtual bool connectionAllowed(const OdString&,OdDbEvalNodeId,const OdString&) const;
+  virtual bool connectTo(const OdString&,OdDbEvalNodeId,const OdString&);
+  virtual bool disconnectFrom(const OdString&,OdDbEvalNodeId,const OdString&);
+  virtual bool hasConnectionNamed(const OdString&) const;
+  virtual bool getConnectedNames(const OdString&,unsigned long,OdStringArray&) const;
+  virtual bool getConnectedObjects(const OdString&,OdDbEvalNodeIdArray&) const;
+  virtual void getConnectionNames(OdStringArray&) const;
+  virtual bool getConnectionType  (const OdString& name, OdResBuf::ValueType& type) const;
+  virtual OdResBufPtr getConnectionValue (const OdString& name) const;
+  //!DOM  
+  virtual OdString name() const;
+  virtual void setName( const OdString& );
+  //!DOM virtual unsigned long alertState() const;
+  //!DOM virtual void auditAlertState();
+  //!DOM OdDbObjectId getEntity();
+  //!DOM class AcRxClass * getRxEntity(void)
+  virtual OdDb::MaintReleaseVer getInstanceMaintenanceVersion();
+  virtual OdDb::DwgVersion  getInstanceVersion();
+  virtual void getStretchPoints( OdGePoint3dArray& )const;
+  virtual void moveStretchPointsAt( const OdIntArray &, const OdGeVector3d &);
+  virtual HistoryCompression historyCompression() const;
+  virtual bool historyRequired() const;
+  //!DOM static bool isNameUnique(class OdDbEvalGraph* graph, const OdString& name, OdString* result );
+  virtual bool hasInstanceData()const; // has instance data loaded
+  virtual bool loadInstanceData(const OdResBuf*); // loads instance data from xdata chain
+  virtual OdResBufPtr saveInstanceData()const; // saves instance data to xdata chain
+  virtual void updateConnections();
+  //!DOM virtual bool onBeginEdit( OdDbBlockTableRecord* );
+  //!DOM virtual bool onEndEdit(OdDbBlockTableRecord*);
+    /*!DOM 
+  void OnBeginEditCancelled(class AcDbObjectId,class AcDbObjectId)
+  void OnBeginEditEnded(class AcDbObjectId,class AcDbObjectId)
+  void OnBeginSaveCancelled(class AcDbObjectId,class AcDbObjectId)
+  void OnBeginSaveEnded(class AcDbObjectId,class AcDbObjectId)
+  void OnBeginSaveStarted(class AcDbObjectId,class AcDbObjectId)
+  void OnEndEditCancelled(class AcDbObjectId,class AcDbObjectId)
+  void OnEndEditStarted(class AcDbObjectId,class AcDbObjectId)
+  */
+  virtual bool isMemberOfCurrentVisibilitySet()const;
+  virtual void setMemberOfCurrentVisibilitySet(bool);
+  //!DOM   enum Acad::ErrorStatus  AcDbBlockElement::sync(class AcDbBlockElementEntity *)
+  //!DOM  virtual void transformDefinitionBy( const OdGeMatrix3d &);
+  virtual OdResult transformBy( const OdGeMatrix3d& );
+};
+typedef OdSmartPtr<OdDbBlockElement>OdDbBlockElementPtr;
+
+#endif // _DbBlockElement_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockFlipParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockFlipParameter.h
new file mode 100755
index 0000000..05ed4dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockFlipParameter.h
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockFlipParameter_h_Included_
+#define _DbBlockFlipParameter_h_Included_
+
+#include "DbBlock2PtParameter.h"
+
+class OdDbBlockFlipGrip;
+typedef OdSmartPtr<OdDbBlockFlipGrip> OdDbBlockFlipGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockFlipParameter : public OdDbBlock2PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockFlipParameter);
+  OdDbBlockFlipParameter();
+  enum FlipState{ NotFlipped = 0, Flipped };
+
+  FlipState flipState() const;
+  void setFlipState(FlipState);
+  FlipState updatedFlipState() const;
+  void setUpdatedFlipState(FlipState);
+  virtual void graphEvalEnd(bool);
+  OdString flipLabel() const;
+  void setFlipLabel(const OdString &);
+  OdString flipLabelDescription()const;
+  void setFlipLabelDescription(const OdString &);
+  OdString baseStateLabel() const;
+  void setBaseStateLabel(const OdString &);
+  OdString flippedStateLabel()const;
+  void setFlippedStateLabel(const OdString &);
+  OdGePoint3d definitionLabelPoint() const;
+  void setDefinitionLabelPoint(const OdGePoint3d &);
+  OdDbBlockFlipGripPtr  getAssociatedFlipGrip( OdDb::OpenMode );
+};
+
+typedef OdSmartPtr<OdDbBlockFlipParameter>OdDbBlockFlipParameterPtr;
+
+#endif // _DbBlockFlipParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockGrips.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockGrips.h
new file mode 100755
index 0000000..8a4b8a8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockGrips.h
@@ -0,0 +1,241 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlocksGrips_h_Included_
+#define _DbBlocksGrips_h_Included_
+
+#include "DbEvalGraph.h"
+#include "DbBlockParameter.h"
+#include "DbBlockElement.h"
+#include "DbBlockFlipParameter.h"
+#include "DbBlockLookUpParameter.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockGripExpr : public OdDbEvalExpr
+{
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockGripExpr);
+  OdDbBlockGripExpr();
+};
+typedef OdSmartPtr<OdDbBlockGripExpr> OdDbBlockGripExprPtr;
+
+class OdDbGripData;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockGrip : public OdDbBlockElement
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockGrip);
+  OdDbBlockGrip();
+  virtual void addedToGraph( OdDbEvalGraph* );
+  virtual void removedFromGraph( OdDbEvalGraph* );
+  OdGeVector3d definitionGripOffset() const;
+  OdGePoint3d displayLocation() const;
+  void setDisplayLocation(class OdGePoint3d const &);
+  OdDbBlockParameterPtr getAssociatedParameter(OdDb::OpenMode mode = OdDb::kForRead) const;
+  OdDbBlockParameter::ParameterComponent getAssociatedParameterComponent() const;
+  OdGeVector3d gripOffset();
+  bool insertionCycling() const;
+  void setInsertionCycling(bool);
+  OdInt32 insertionCyclingWeight() const;
+  void setInsertionCyclingWeight(OdInt32);
+  OdGePoint3d location() const;
+  OdGePoint3d paramBasePoint() const;
+  void setUpdatedLocation(class OdGePoint3d const &);
+  OdGePoint3d updatedLocation();
+};
+typedef OdSmartPtr<OdDbBlockGrip> OdDbBlockGripPtr;
+
+//class OdDbBlockPointParameter;
+//typedef OdSmartPtr<OdDbBlockPointParameter>OdDbBlockPointParameterPtr;
+//class OdDbBlockXYParameter
+//typedef OdSmartPtr<OdDbBlockXYParameter>OdDbBlockXYParameterPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockXYGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockXYGrip);
+  OdDbBlockXYGrip();
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  //OdDbBlockPointParameterPtr getAssociatedPointParameter( OdDb::OpenMode )
+  //OdDbBlockXYParameterPtr getAssociatedXYParameter( OdDb::OpenMode )
+};
+typedef OdSmartPtr<OdDbBlockXYGrip> OdDbBlockXYGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockPolarGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockPolarGrip);
+  OdDbBlockPolarGrip();
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  //OdDbBlockPolarParameterPtr getAssociatedPolarParameter( OdDb::OpenMode );
+};
+typedef OdSmartPtr<OdDbBlockPolarGrip> OdDbBlockPolarGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockRotationGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockRotationGrip);
+  OdDbBlockRotationGrip();
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  //AcDbBlockRotationParameterPtr AcDbBlockRotationGrip::getAssociatedRotationParameter( OdDb::OpenMode );
+};
+typedef OdSmartPtr<OdDbBlockRotationGrip> OdDbBlockRotationGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockLinearGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockLinearGrip);
+  OdDbBlockLinearGrip();
+  //OdDbBlockLinearParameterPtr getAssociatedLinearParameter( OdDb::OpenMode );
+  OdGeVector3d orientation() const;
+  void setOrientation( const OdGeVector3d& );
+};
+typedef OdSmartPtr<OdDbBlockLinearGrip> OdDbBlockLinearGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockFlipGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockFlipGrip);
+  OdDbBlockFlipGrip();
+  //void cycleFlipState();
+  OdDbBlockFlipParameter::FlipState flipState() const;
+  void setFlipState( OdDbBlockFlipParameter::FlipState );
+  void setUpdatedFlipState( OdDbBlockFlipParameter::FlipState );
+  OdDbBlockFlipParameter::FlipState updatedFlipState();
+  //OdDbBlockFlipParameterPtr getAssociatedFlipParameter( OdDb::OpenMode );
+  OdGeVector3d orientation();
+  void setOrientation( const OdGeVector3d& );
+  virtual void graphEvalEnd(bool);
+};
+typedef OdSmartPtr<OdDbBlockFlipGrip> OdDbBlockFlipGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockLookupGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockLookupGrip);
+  OdDbBlockLookupGrip();
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  //OdDbBlockLookUpParameterPtr getAssociatedLookupParameter( OdDb::OpenMode );
+  //void getValueList( OdResBufArray& );
+  //bool showGrip() const;
+};
+typedef OdSmartPtr<OdDbBlockLookupGrip> OdDbBlockLookupGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockAlignmentGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockAlignmentGrip);
+  OdDbBlockAlignmentGrip();
+  //OdDbBlockAlignmentParameterPtr getAssociatedAlignmentParameter( OdDb::OpenMode );
+  OdGeVector3d orientation();
+  void setOrientation(const OdGeVector3d&);
+};
+typedef OdSmartPtr<OdDbBlockAlignmentGrip> OdDbBlockAlignmentGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockVisibilityGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockVisibilityGrip);
+  OdDbBlockVisibilityGrip();
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  virtual void setMemberOfCurrentVisibilitySet(bool) ODRX_OVERRIDE;
+  //void getValueList( OdResBufArray& );
+  //bool showGrip() const;
+};
+
+typedef OdSmartPtr<OdDbBlockVisibilityGrip> OdDbBlockVisibilityGripPtr;
+
+#endif // _DbBlocksGrips_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLinearParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLinearParameter.h
new file mode 100755
index 0000000..5cef89a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLinearParameter.h
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockLinearParameter_h_Included_
+#define _DbBlockLinearParameter_h_Included_
+
+#include "DbBlock2PtParameter.h"
+#include "DbBlockParamValueSet.h"
+
+class OdDbBlockLinearGrip;
+typedef OdSmartPtr<OdDbBlockLinearGrip> OdDbBlockLinearGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockLinearParameter : public OdDbBlock2PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockLinearParameter);
+  OdDbBlockLinearParameter();
+  //OdString distanceDescription() const;
+  //OdString distanceName() const;
+  //OdDbBlockLinearGripPtr getAssociatedLinearGrip( OdDbBlockParameter::ParameterComponent, OdDb::OpenMode );
+  //double offset() const;
+  //void setDistanceDescription( const OdString& );
+  //void setDistanceName( const OdString& );
+  //void setOffset(double);
+  //void setUpdatedDistance(double);
+  void setValueSet(const OdDbBlockParamValueSet&);
+  const OdDbBlockParamValueSet& valueSet() const;
+};
+
+#endif //_DbBlockLinearParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLookUpParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLookUpParameter.h
new file mode 100755
index 0000000..7e010a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockLookUpParameter.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockLookUpParameter_h_Included_
+#define _DbBlockLookUpParameter_h_Included_
+
+#include "DbBlock1PtParameter.h"
+
+class OdDbBlockLookupGrip;
+typedef OdSmartPtr<OdDbBlockLookupGrip> OdDbBlockLookupGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockLookUpParameter : public OdDbBlock1PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockLookUpParameter);
+  OdDbBlockLookUpParameter();
+  OdDbBlockLookupGripPtr getAssociatedLookupGrip( OdDb::OpenMode );
+  virtual bool historyRequired() const;
+  OdString lookupActionName() const;
+  OdString lookupDescription() const;
+  OdString lookupName() const;
+  void setLookupActionName(const OdString&);
+  void setLookupDescription(const OdString&);
+  void setLookupName(const OdString&);
+};
+
+typedef OdSmartPtr<OdDbBlockLookUpParameter> OdDbBlockLookUpParameterPtr;
+
+#endif // _DbBlockLookUpParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParamValueSet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParamValueSet.h
new file mode 100755
index 0000000..6eea8a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParamValueSet.h
@@ -0,0 +1,100 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockParamValueSet_h_Included_
+#define _DbBlockParamValueSet_h_Included_
+
+#include "TD_PackPush.h"
+
+#include "Ge/GeDoubleArray.h"
+#include "RxObjectImpl.h"
+#include "DbEvalGraph.h"
+class OdDbBlockParamValueSetImpl;
+
+#ifdef OD_HAVE_MATH_FILE
+#include <math.h>
+#endif
+
+#ifdef OD_HAVE_COMPLEX_FILE
+#include <complex>
+#endif
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockParamValueSet : public OdRxObject
+{
+protected:
+  OdDbBlockParamValueSet(void *);
+public: 
+  ODRX_DECLARE_MEMBERS(OdDbBlockParamValueSet);
+  OdDbBlockParamValueSet( const OdDbBlockParamValueSet&);
+  OdDbBlockParamValueSet();
+  virtual ~OdDbBlockParamValueSet();
+  class OdDbBlockParamValueSet & operator=(const OdDbBlockParamValueSet &);
+  void assign(const OdDbBlockParamValueSet& vs){ *this = vs; }
+  bool angDir()const ;
+  bool angular()const ;
+  virtual double closestLegalValue(double value , double initial)const ;
+  virtual void dwgInFieldsHelper(OdDbDwgFiler *);
+  virtual void dwgOutFieldsHelper(OdDbDwgFiler *)const ;
+  virtual void dxfInFieldsHelper(OdDbDxfFiler *,short,short,short,short);
+  virtual void dxfOutFieldsHelper(OdDbDxfFiler *,short,short,short,short)const ;
+  double increment()const ;
+  double maximum()const ;
+  double minimum()const ;
+  void setAngDir(bool);
+  void setAngular(bool);
+  void setIncrement(double);
+  void setIncrement(double,bool);
+  void setMaximum(double);
+  void setMaximum(double,bool);
+  void setMinimum(double);
+  void setMinimum(double,bool);
+  void setUseIncrement(bool);
+  void setUseMaximum(bool);
+  void setUseMinimum(bool);
+  void setUseValueList(bool);
+  void setValueList(OdGeDoubleArray const &);
+  void setValueList(OdGeDoubleArray const &,bool);
+  OdGeDoubleArray  sortedValueListIncluding(double)const ;
+  void updateValue(double);
+  bool useIncrement()const ;
+  bool useMaximum()const ;
+  bool useMinimum()const ;
+  bool useValueList()const ;
+  virtual bool valueIsLegal(double,double)const ;
+  OdGeDoubleArray  valueList()const ;
+private:
+  OdDbBlockParamValueSetImpl* m_pImpl;
+};
+
+typedef OdSmartPtr<OdDbBlockParamValueSet> OdDbBlockParamValueSetPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _DbBlockParamValueSet_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParameter.h
new file mode 100755
index 0000000..539274f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockParameter.h
@@ -0,0 +1,104 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockParameter_h_Included_
+#define _DbBlockParameter_h_Included_
+
+#include "TD_PackPush.h"
+
+#include "DbBlockElement.h"
+#include "DbEvalGraph.h"
+#include "Ge/GeMatrix3d.h"
+#include "DbDynBlockReference.h"
+
+class OdDbBlockGrip;
+typedef OdSmartPtr<OdDbBlockGrip> OdDbBlockGripPtr;
+typedef OdArray< OdDbBlockGripPtr, OdMemoryAllocator<OdDbBlockGripPtr> > OdDbBlockGripPtrArray;
+
+/** \details
+
+    <group !!RECORDS_TD_APIRef>
+*/
+struct DYNBLOCKS_EXPORT OdDbBlkParamPropertyDescriptor
+{
+  OdDbBlkParamPropertyDescriptor();
+  OdString m_sName;
+  OdString m_sConnection;
+  OdResBuf::ValueType m_nType;
+  bool m_bReadonly;
+  bool m_bVisible;
+  OdString m_sDescription;
+  bool m_bListPresent;
+  OdDbDynBlockReferenceProperty::UnitsType m_nUnitsType;
+  OdResBufArray m_pAllowedValues;
+};
+typedef OdArray< OdDbBlkParamPropertyDescriptor > OdDbBlkParamPropertyDescriptorArray;
+
+/** \details
+    This class represents block parameters in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockParameter : public OdDbBlockElement
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockParameter);
+  enum ParameterComponent 
+  {
+    Base,
+    End,
+    BaseXEndY,
+    EndXBaseY,
+    InvalidComponent
+  };
+  //virtual void removedFromGraph( OdDbEvalGraph* );
+  virtual OdString getPropertyConnectionName( const OdString& )const;
+  virtual void getPropertyDescription( OdDbBlkParamPropertyDescriptorArray& )const;
+  virtual OdResBufPtr getPropertyValue( const OdString& )const;
+  virtual OdResBufPtr getPropertyValue( const OdString&, const OdGeMatrix3d& )const;
+  //virtual void gripErased( ParameterComponent );
+  //virtual bool historyRequired() const;
+  //static bool isPropertyLabelUnique( OdDbEvalGraph*, const OdString &, class OdString* );
+  //virtual void getGrips( OdDbBlockGripPtrArray&, OdDb::OpenMode );
+  //virtual int getNumberOfGrips() const;
+  virtual ParameterComponent getComponentForGrip( OdDbEvalNodeId );
+  //virtual void removeGrip( ParameterComponent );
+  //virtual void resetGrips();
+  //virtual void setNumberOfGrips( int );
+  virtual bool setPropertyValue( const OdString&, const OdResBuf* );
+  virtual bool setPropertyValue( const OdString&, const OdGeMatrix3d&, const OdResBuf* );
+  virtual bool chainActions()const;
+  virtual void setChainActions( bool );
+  virtual bool showProperties()const;
+  virtual void setShowProperties( bool );
+  OdDbEvalNodeId addGrip( ParameterComponent );
+};
+
+typedef OdSmartPtr<OdDbBlockParameter>OdDbBlockParameterPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _DbBlockParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPointParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPointParameter.h
new file mode 100755
index 0000000..5ad4aa2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPointParameter.h
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockPointParameter_h_Included_
+#define _DbBlockPointParameter_h_Included_
+
+#include "DbBlock1PtParameter.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockPointParameter : public OdDbBlock1PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockPointParameter);
+  OdDbBlockPointParameter();
+  OdString positionName() const;
+  void setPositionName(const OdString&);
+  OdString positionDescription() const;
+  void setPositionDescription(const OdString&);
+  OdGePoint3d definitionLabelPoint() const;
+  void setDefinitionLabelPoint( const OdGePoint3d& );
+  //double definitionX() const;
+  //double definitionY() const;
+  //void setDefinitionX(double);
+  //void setDefinitionY(double);
+  //double updatedX();
+  //double updatedY();
+  //void setUpdatedX(double);
+  //void setUpdatedY(double);
+  //double X();
+  //double Y();
+  //void setX(double);
+  //void setY(double);
+  //OdDbBlockXYGripPtr getAssociatedXYGrip( OdDb::OpenMode );
+};
+
+typedef OdSmartPtr<OdDbBlockPointParameter> OdDbBlockPointParameterPtr;
+
+#endif // _DbBlockPointParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPolarParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPolarParameter.h
new file mode 100755
index 0000000..50b5c79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPolarParameter.h
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockPolarParameter_h_Included_
+#define _DbBlockPolarParameter_h_Included_
+
+#include "DbBlock2PtParameter.h"
+#include "DbBlockParamValueSet.h"
+
+class OdDbBlockPolarGrip;
+typedef OdSmartPtr<OdDbBlockPolarGrip>OdDbBlockPolarGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockPolarParameter : public OdDbBlock2PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockPolarParameter);
+  OdDbBlockPolarParameter();
+  //OdString angleDescription() const;
+  //OdString angleName() const;
+  //const OdDbBlockParamValueSet& angleValueSet() const;
+  //double baseAngle() const;
+  //OdGePoint3d baseAnglePoint() const;
+  //OdString distanceDescription() const;
+  //OdString distanceName() const;
+  //const OdDbBlockParamValueSet& distanceValueSet() const;
+  //OdDbBlockPolarGripPtr getAssociatedPolarGrip( OdDbBlockParameter::ParameterComponent, OdDb::OpenMode );
+  //double offset();
+  //void setAngleDescription(const OdString&);
+  //void setAngleName(const OdString&);
+  //void setAngleValueSet(class OdDbBlockParamValueSet const &);
+  //void setDistanceDescription( const OdString&);
+  //void setDistanceName( const OdString&);
+  //void setDistanceValueSet(const OdDbBlockParamValueSet &);
+  //void setOffset(double);
+  //void setUpdatedAngle(double);
+  //void setUpdatedDistance(double);
+};
+
+typedef OdSmartPtr<OdDbBlockPolarParameter> OdDbBlockPolarParameterPtr;
+
+#endif //_DbBlockPolarParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPropertiesTable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPropertiesTable.h
new file mode 100755
index 0000000..023741c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockPropertiesTable.h
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockPropertiesTable_h_Included_
+#define _DbBlockPropertiesTable_h_Included_
+
+#include "DbBlock1PtParameter.h"
+#include "DbBlockGrips.h"
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockUserParameter : public OdDbBlock1PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockUserParameter);
+  OdDbBlockUserParameter();
+};
+typedef OdSmartPtr<OdDbBlockUserParameter> OdDbBlockUserParameterPtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockPropertiesTable : public OdDbBlock1PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockPropertiesTable);
+  OdDbBlockPropertiesTable();
+};
+typedef OdSmartPtr<OdDbBlockPropertiesTable> OdDbBlockPropertiesTablePtr;
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockPropertiesTableGrip : public OdDbBlockGrip
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockPropertiesTableGrip);
+  OdDbBlockPropertiesTableGrip();
+};
+typedef OdSmartPtr<OdDbBlockPropertiesTableGrip> OdDbBlockPropertiesTableGripPtr;
+
+#endif //_DbBlockPropertiesTable_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentation.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentation.h
new file mode 100755
index 0000000..2278e3f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentation.h
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockRepresentation_h_Included_
+#define _DbBlockRepresentation_h_Included_
+
+#include "TD_PackPush.h"
+
+#include "RxObjectImpl.h"
+#include "DbBlockReference.h"
+#include "DbEvalGraph.h"
+#define STL_USING_MAP
+#include "OdaSTL.h"
+
+class OdDbBlockParameter;
+class OdDbDynBlockReference;
+class OdDbAttributeDefinition;
+class OdDbAttribute;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockRepresentationContext : public OdRxObject
+{
+  OdDbObjectId m_pDynamicBlock;
+  OdDbObjectId m_pAnonymousBlock;
+  OdDbObjectId m_pBlockData;
+  OdDbObjectId m_pRef;
+  OdDbObjectId m_pGraph;
+  OdDbBlockReference* m_pNDBROBlockRef;
+  OdDbEvalGraphPtr m_NDBRO_Graph;
+  void eraseOldArrayClones();
+  void updateAttributeMap();
+  bool m_bNDBROAttributes;
+  std::map<OdDbAttributeDefinition*, void*> m_pAttributeMap;
+public:
+  OdDbBlockRepresentationContext();
+  ~OdDbBlockRepresentationContext();
+  void init(const OdDbDynBlockReference* ref, OdDbBlockReference* dbref, OdDbEvalGraph* gr);
+  void loadInstanceData();
+  void compactRepresentation();
+  bool originalPathToRepresentationPath( const OdDbObjectIdArray&, OdDbEntityPtrArray& res )const;
+  bool representationPathToOriginalPath( OdDbObjectIdArray& )const;
+  // set RepBTag on representation block
+  static void tagBlockRecord( OdDbBlockTableRecord* repBTR, const OdDbHandle& originalBlockHandle );
+  // remove dynamic block related xdata && xdictionary entries
+  static void clearRepBlock( OdDbBlockTableRecord* repRTR );
+  // create representation block for the insert
+  void createRepresentation();
+  void addHistoryRecord(const OdString& name, const OdResBuf* value, OdDbBlockParameter* param );
+  void updateRepresentation();
+  OdDbObjectId getRepresentation() const { return m_pAnonymousBlock.isErased() ? OdDbObjectId::kNull : m_pAnonymousBlock; }
+  OdDbObjectId getOriginal() const { return m_pDynamicBlock; }
+  OdDbEvalExprPtr getRepresentationNode(OdDbEvalNodeId id);
+  OdDbBlockReferencePtr getReference();
+  OdDbEvalGraphPtr getGraph()
+  {
+    return m_NDBRO_Graph;
+  }
+  OdDbBlockTableRecordPtr getBlock();
+  void writeUndo(OdDbEvalGraph* gr);
+  void readUndo(OdDbDwgFiler* pFiler);
+  static OdDbBlockRepresentationContext* getRepresentationContext(OdDbBlockReference* br);
+  OdDbAttributePtr getAttribute(OdDbAttributeDefinition*);
+  OdGeMatrix3d getRelativeMatrix(const OdGeMatrix3d& m);
+  OdGeVector3d getRelativeOffset(const OdGeVector3d& v);
+};
+
+#include "TD_PackPop.h"
+
+#endif // _DbBlockRepresentation_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentationData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentationData.h
new file mode 100755
index 0000000..0485714
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRepresentationData.h
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockRepresentationData_h_Included_
+#define _DbBlockRepresentationData_h_Included_
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbBlockRepresentationData : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbBlockRepresentationData);
+  OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  OdDbBlockRepresentationData();
+  void setBlock( const OdDbObjectId& );
+};
+
+#endif // _DbBlockRepresentationData_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRotationParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRotationParameter.h
new file mode 100755
index 0000000..7fe1f61
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockRotationParameter.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockRotationParameter_h_Included_
+#define _DbBlockRotationParameter_h_Included_
+
+#include "DbBlock2PtParameter.h"
+#include "DbBlockParamValueSet.h"
+
+class OdDbBlockRotationGrip;
+typedef OdSmartPtr<OdDbBlockRotationGrip> OdDbBlockRotationGripPtr;
+
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockRotationParameter : public OdDbBlock2PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockRotationParameter);
+  OdDbBlockRotationParameter();
+  OdString angleDescription() const;
+  void setAngleDescription(const OdString &);
+  OdString angleName() const;
+  void setAngleName(const OdString &);
+  double baseAngle() const;
+  OdGePoint3d baseAnglePoint() const;
+  double definitionBaseAngle() const;
+  OdGePoint3d definitionBaseAnglePoint() const;
+  OdDbBlockRotationGripPtr getAssociatedRotationGrip( OdDb::OpenMode );
+  double offset() const;
+  void setDefinitionBaseAnglePoint( const OdGePoint3d& );
+  void setOffset(double);
+  void setUpdatedAngle(double);
+  void setValueSet( const OdDbBlockParamValueSet&);
+  const OdDbBlockParamValueSet& valueSet() const;
+};
+
+typedef OdSmartPtr<OdDbBlockRotationParameter> OdDbBlockRotationParameterPtr;
+
+#endif // _DbBlockRotationParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockVisibilityParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockVisibilityParameter.h
new file mode 100755
index 0000000..3b46e23
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockVisibilityParameter.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockVisibilityParameter_h_Included_
+#define _DbBlockVisibilityParameter_h_Included_
+
+#include "DbBlock1PtParameter.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockVisibilityParameter : public OdDbBlock1PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockVisibilityParameter);
+  OdDbBlockVisibilityParameter();
+  bool isInitialized() const;
+  void setInitiaized(bool);
+  int currentVisibilityState()const;
+  void setCurrentVisibilityState(int);
+  void clearListOfVisibilityStates();
+  OdString visibilityName() const;
+  void setVisibilityName(const OdString&);
+  OdString visibilityDescription() const;
+  void setVisibilityDescription(const OdString&);
+  void blockEntityList( OdDbObjectIdArray& ) const;
+  void setBlockEntityList( OdDbObjectIdArray& );
+  int numberOfVisibilityStates() const;
+  void visibilityState(int index, OdString& name, OdDbObjectIdArray& objects, OdDbObjectIdArray& elements);
+  void setVisibilityState(int index,const OdString& name, const OdDbObjectIdArray& objects, const OdDbObjectIdArray& elements);
+  virtual void getPropertyDescription(OdDbBlkParamPropertyDescriptorArray& ) const ODRX_OVERRIDE;
+  void listVisibleEntities( OdDbObjectIdArray& ) const;
+  virtual void setMemberOfCurrentVisibilitySet(bool) ODRX_OVERRIDE {}
+};
+typedef OdSmartPtr<OdDbBlockVisibilityParameter> OdDbBlockVisibilityParameterPtr;
+
+#endif // _DbBlockVisibilityParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockXYParameter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockXYParameter.h
new file mode 100755
index 0000000..a3ca442
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbBlockXYParameter.h
@@ -0,0 +1,76 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbBlockXYParameter_h_Included_
+#define _DbBlockXYParameter_h_Included_
+
+#include "DbBlock2PtParameter.h"
+#include "DbBlockParamValueSet.h"
+
+class OdDbBlockXYGrip;
+typedef OdSmartPtr<OdDbBlockXYGrip>OdDbBlockXYGripPtr;
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbBlockXYParameter : public OdDbBlock2PtParameter
+{
+public:
+  ODDB_EVAL_DECLARE_MEMBERS(OdDbBlockXYParameter);
+  OdDbBlockXYParameter();
+  //double definitionHorzDistance()const;
+  //double definitionVertDistance()const;
+  OdDbBlockXYGripPtr getAssociatedXYGrip(OdDbBlockParameter::ParameterComponent,OdDb::OpenMode);
+  //OdString horzDescription() const;
+  //double horzDistance()const;
+  //OdString horzName()const;
+  //void setDefinitionHorzDistance(double);
+  //void setDefinitionVertDistance(double);
+  //void setHorzDescription(const OdString&);
+  //void setHorzDistance(double);
+  //void setHorzName(const OdString&);
+  //void setUpdatedHorzDistance(double);
+  //void setUpdatedVertDistance(double);
+  //void setVertDescription(const OdString&);
+  //void setVertDistance(double);
+  //void setVertName(const OdString&);
+  //void setXOffset(double);
+  //void setXValueSet(const OdDbBlockParamValueSet &);
+  //void setYOffset(double);
+  //void setYValueSet(const OdDbBlockParamValueSet &);
+  //double updatedHorzDistance() const;
+  //double updatedVertDistance() const;
+  //OdString  vertDescription() const;
+  //double vertDistance() const;
+  //OdString  vertName() const;
+  //double XOffset() const;
+  //const OdDbBlockParamValueSet& xValueSet() const;
+  //double YOffset() const;
+  //const OdDbBlockParamValueSet& yValueSet() const;
+};
+
+#endif // _DbBlockXYParameter_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbConstraintsInterfacePE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbConstraintsInterfacePE.h
new file mode 100755
index 0000000..f481add
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbConstraintsInterfacePE.h
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODDBCONSTRAINTSINTERFACEPE_INCLUDED_
+#define _ODDBCONSTRAINTSINTERFACEPE_INCLUDED_ /*!DOM*/
+
+#include "DbExport.h"
+#include "DbObject.h"
+
+// this is temporary internal interface between dynamic blocks and constraints
+/*!DOM*/
+struct TOOLKIT_EXPORT OdDbConstraintsInterfacePE : OdRxObject
+{
+  ODRX_DECLARE_MEMBERS(OdDbConstraintsInterfacePE);
+  virtual OdResult getAssocVariableName(const OdDbObject* pObject, OdString& name);
+  virtual OdResult getAssocVariableValue(const OdDbObject* pObject, OdDbObjectId blockId, OdResBufPtr& value);
+  virtual OdResult setAssocVariableValue(const OdDbObject* pObject, OdDbObjectId blockId, const OdResBuf* value);
+};
+
+/*!DOM*/
+typedef OdSmartPtr<OdDbConstraintsInterfacePE> OdDbConstraintsInterfacePEPtr;
+
+#endif // _ODDBCONSTRAINTSINTERFACEPE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockProxyNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockProxyNode.h
new file mode 100755
index 0000000..041857c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockProxyNode.h
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DbDynamicBlockProxyNode_h_Included_
+#define _DbDynamicBlockProxyNode_h_Included_
+
+#include "DbEvalGraph.h"
+
+/** \details
+    Library:  TD_Db
+    <group OdDb_Classes> 
+*/
+class DYNBLOCKS_EXPORT OdDbDynamicBlockProxyNode : public OdDbEvalExpr
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDynamicBlockProxyNode);
+  OdDbDynamicBlockProxyNode();
+};
+
+typedef OdSmartPtr<OdDbDynamicBlockProxyNode> OdDbDynamicBlockProxyNodePtr;
+
+#endif //_DbBlockParamValueSet_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockPurgePreventer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockPurgePreventer.h
new file mode 100755
index 0000000..78764dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicBlocks/DbDynamicBlockPurgePreventer.h
@@ -0,0 +1,49 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBDYNAMICBLOCKPURGEPREVENTER__INCLUDED_
+#define _DBDYNAMICBLOCKPURGEPREVENTER__INCLUDED_
+
+#include "DbBlockRepresentationData.h"
+
+/** \details
+
+    \sa
+    TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbDynamicBlockPurgePreventer : public OdDbBlockRepresentationData
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDynamicBlockPurgePreventer);
+  OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  OdDbDynamicBlockPurgePreventer();
+};
+
+typedef OdSmartPtr<OdDbDynamicBlockPurgePreventer> OdDbDynamicBlockPurgePreventerPtr;
+
+#endif // _DBDYNAMICBLOCKPURGEPREVENTER__INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicLinker.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicLinker.h
new file mode 100755
index 0000000..d56797d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/DynamicLinker.h
@@ -0,0 +1,179 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// DynamicLinker.h: interface for the OdaDynamicLinkerI class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_ODADYNAMICLINKERI_H_INCLUDED_)
+#define _ODADYNAMICLINKERI_H_INCLUDED_
+
+class OdRxDictionary;
+class OdRxDLinkerReactor;
+
+#include "RxDictionary.h"
+
+class OdRxModule;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxModule pointers.
+*/
+typedef OdSmartPtr<OdRxModule> OdRxModulePtr;
+
+class OdRxSystemServices;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxSystemServices pointers.
+*/
+typedef OdSmartPtr<OdRxSystemServices> OdRxSystemServicesPtr;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class implements Dynamic Linker services for Teigha Xtension(TX) applications:
+    
+    The following services are implemented:
+    * Loading applications by specified by application name.
+    * Loading and unloading modules specified by filename.
+    * Addition and removal of reactors from the dynamic linker reactor chain.
+    
+    \remarks
+    There is exactly one OdRxDynamicLinker class object. It is gloval to Teigha,
+    and thus is non-instantiable for Teigha applications.
+    
+    A pointer to the OdRxDynamicLinker object will be returned by the
+    global odrxDynamicLinker() function.
+
+    <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxDynamicLinker : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxDynamicLinker);
+
+  /** \details
+    Adds the specified reactor to the dynamic linker reactor chain.
+    \param pReactor [in]  Pointer to the reactor.
+  */
+  virtual void addReactor (
+    OdRxDLinkerReactor* pReactor) = 0;
+  /** \details
+    Removes the specified reactor to the dynamic linker reactor chain.
+    \param pReactor [in]  Pointer to the reactor.
+  */
+  virtual void removeReactor (
+    OdRxDLinkerReactor* pReactor) = 0;
+
+  /** \details
+    Loads the specified abstract (platform-independent) module.
+    
+    \remarks
+    Returns a SmartPointer to the abstract module object.
+    
+    \param moduleFileName [in]  Module filename to load.
+    \param silent [in]  If true, no load status message will be printed.
+  */
+  virtual OdRxModulePtr loadModule(
+    const OdString& moduleFileName, bool silent = true) = 0;
+
+  /** \details
+    Unoads the specified abstract (platform-independent) module.
+    
+    \param moduleFileName [in]  Module filename to unload.
+  */
+  virtual bool unloadModule(
+    const OdString& moduleFileName) = 0;
+
+
+  /** \details
+    Unoads all unreferenced modules.
+  */
+  virtual bool unloadUnreferenced() = 0;
+
+  /** \details
+    Maps the specfied application name to the a module filename,
+    and loads that module.
+
+    \param applicationName [in]  TX application name.
+    \param silent [in]  If and only if true, no load status message will be printed.
+  */
+  virtual OdRxModulePtr loadApp(
+    const OdString& applicationName, 
+    bool silent = true) = 0;
+
+  /** \details
+    Returns a SmartPointer to the OdDbSystemServices instance that is used for file creation and access.
+    
+    \sa
+    odInitialize
+  */
+  virtual OdRxSystemServicesPtr sysServices() const = 0;
+
+  /** \details
+    Returns a SmartPointer to the OdRxDictionary instance that created by OdInitialize.
+  */
+  virtual OdRxDictionaryPtr sysRegistry() const = 0;
+
+  /*!DOM*/  
+  /** \details
+    Special internal method - used for non-standard module loading only
+  */
+  virtual OdRxModule* loadModuleObj(
+    OdRxModule* pModuleObj, bool bSilent = true) = 0;
+
+  /** \details
+    Returns the count of loaded modules.
+  */
+  virtual int getModuleCount() const = 0;
+
+  /** \details
+    Returns the specified abstract (platform-independent) module.
+  */
+  virtual OdRxModulePtr getModule(
+    int index,
+    OdString& key) const = 0;
+
+  /** \details
+    Returns the specified abstract (platform-independent) module.
+  */
+  virtual OdRxModulePtr getModule(
+    const OdString& key) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxDynamicLinker pointers.
+*/
+typedef OdSmartPtr<OdRxDynamicLinker> OdRxDynamicLinkerPtr;
+
+
+/** \details
+    Returns the Teigha global dynamic linker.
+*/
+FIRSTDLL_EXPORT OdRxDynamicLinker* odrxDynamicLinker();
+
+
+#include "TD_PackPop.h"
+
+#endif // !defined(_ODADYNAMICLINKERI_H_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdBaseUserIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdBaseUserIO.h
new file mode 100755
index 0000000..2499c93
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdBaseUserIO.h
@@ -0,0 +1,142 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _EDBASEUSERIO_H_INCLUDED_
+#define _EDBASEUSERIO_H_INCLUDED_
+
+#include "DbExport.h"
+#include "OdPlatform.h"
+#include "Ed/EdUserIO.h"
+#include "DbSSet.h"
+#include "TD_PackPush.h"
+
+class OdSelectionSet;
+class OdGsModel;
+
+/** \details
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdSSetTracker : public OdEdInputTracker
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdSSetTracker);
+
+  virtual bool append(OdDbStub* id, const OdDbSelectionMethod* pMethod) = 0;
+  virtual bool remove(OdDbStub* id, const OdDbSelectionMethod* pMethod) = 0;
+};
+
+typedef OdSmartPtr<OdSSetTracker> OdSSetTrackerPtr;
+
+/** \details
+    This class implements geometric interactive user IO functionality for custom interactive command objects.
+    Library: TD_Root
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdBaseUserIO : public OdEdUserIO
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdBaseUserIO);
+
+  virtual OdGePoint3d getLASTPOINT() const = 0;
+
+  virtual void setLASTPOINT(const OdGePoint3d& pt) = 0;
+
+  virtual OdEdPointDefTrackerPtr createRubberBand(const OdGePoint3d& base,
+                                                  OdGsModel* pModel = NULL) const = 0;
+
+  virtual OdEdPointDefTrackerPtr createRectFrame(const OdGePoint3d& base,
+                                                 OdGsModel* pModel = NULL) const = 0;
+
+  /** \details
+    Returns user input of a point.
+
+    \param prompt [in]  Message displayed to prompt the user.
+    \param options [in]  Combination of OdEd::GetPointOptions enum values. 
+    \param pDefaultValue [in]  Pointer to a default value to return if an empty string is received as input.
+    \param keywords [in]  Keyword string.
+    \param pTracker [in]  Pointer to a User IO tracker.
+
+    \remarks
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.
+    
+    If prompt is an empty string, a default prompt string is used.  
+  */
+  virtual OdGePoint3d getPoint(const OdString& prompt,
+                               int options = OdEd::kGptDefault,
+                               const OdGePoint3d* pDefaultValue  = 0,
+                               const OdString& keywords = OdString::kEmpty,
+                               OdEdPointTracker* pTracker = 0) = 0;
+
+  /** \details
+    Returns user input of an angle.
+
+    \param prompt [in]  Message displayed to prompt the user.
+    \param options [in]  Combination of OdEd::GetPointOptions enum values. 
+    \param defaultValue [in]  Default value to return if an empty string is received as input.
+    \param keywords [in]  Keyword string.
+    \param pTracker [in]  Pointer to a User IO tracker.
+    
+    \remarks
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.
+    
+    If prompt is an empty string, a default prompt string is used.  
+    
+    \note
+    All angles are expressed in radians.
+  */
+  virtual double getAngle(const OdString& prompt,
+                          int options = OdEd::kInpDefault,
+                          double defaultValue = 0.0,
+                          const OdString& keywords = OdString::kEmpty,
+                          OdEdRealTracker* pTracker = 0) = 0;
+
+  /** \details
+    Returns user input of a distance.
+
+    \param prompt [in]  Message displayed to prompt the user.
+    \param options [in]  Combination of OdEd::GetPointOptions enum values. 
+    \param defaultValue [in]  Default value to return if an empty string is received as input.
+    \param keywords [in]  Keyword string.
+    \param pTracker [in]  Pointer to a User IO tracker.
+   
+    \remarks
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.
+    
+    If prompt is an empty string, a default prompt string is used.  
+  */
+  virtual double getDist(const OdString& prompt,
+                         int options = OdEd::kInpDefault,
+                         double defaultValue = 0.0,
+                         const OdString& keywords = OdString::kEmpty,
+                         OdEdRealTracker* pTracker = 0) = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbUserIO object pointers.
+*/
+typedef OdSmartPtr<OdEdBaseUserIO> OdEdBaseUserIOPtr;
+
+#include "TD_PackPop.h"
+#endif //#ifndef _EDBASEUSERIO_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandContext.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandContext.h
new file mode 100755
index 0000000..268e1f4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandContext.h
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODEDCOMMANDCONTEXT_H_INCLUDED_
+#define _ODEDCOMMANDCONTEXT_H_INCLUDED_
+
+#include "DbExport.h"
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+class OdEdUserIO;
+class OdEdFunctionIO;
+
+
+/** \details
+    This class is the base class for custom classes that are used to interact with the 
+    calling application as part of an interactive command.  
+
+    <group OdEd_Classes>
+*/
+class FIRSTDLL_EXPORT OdEdCommandContext : public OdRxObject
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdEdCommandContext);
+
+  /** \details
+    Returns the user IO object for this CommandContext object.
+  */
+  virtual OdEdUserIO* userIO() = 0;
+
+  /** \details
+    Returns the function IO object for this CommandContext object.
+  */
+  virtual OdEdFunctionIO* funcIO() = 0;
+
+  virtual OdRxObject* baseDatabase() = 0;
+
+  virtual void setArbitraryData(const OdString& szPathName, OdRxObject* pDataObj) = 0;
+
+  virtual OdRxObjectPtr arbitraryData(const OdString& szPathName) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdEdCommandContext object pointers. 
+*/
+typedef OdSmartPtr<OdEdCommandContext> OdEdCommandContextPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODEDCOMMANDCONTEXT_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandStack.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandStack.h
new file mode 100755
index 0000000..b55bc2d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdCommandStack.h
@@ -0,0 +1,538 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODEDCOMMANDSTACK_H_INCLUDED_
+#define _ODEDCOMMANDSTACK_H_INCLUDED_
+
+
+
+#define ODRX_COMMAND_DOCK      OD_T("ODRX_REGISTERED_COMMANDS")
+
+typedef void (*OdRxFunctionPtr) ();
+
+class OdEdCommand;
+class OdEdCommandContext;
+
+#include "RxObject.h"
+
+class OdRxIterator;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxIterator object pointers. 
+*/
+typedef OdSmartPtr<OdRxIterator> OdRxIteratorPtr;
+
+class OdRxDictionary;
+// class OdEdUIContext;
+
+#include "TD_PackPush.h"
+
+class OdEdCommand;
+
+typedef void (OdEdCommandFunction) (OdEdCommandContext* pCmdCtx);
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdEdCommand object pointers. 
+*/
+typedef OdSmartPtr<OdEdCommand> OdEdCommandPtr;
+
+/** \details
+    This class represents custom commands within a Teigha client application. 
+    
+    \remarks
+    A custom command is be created by deriving a class from OdEdCommand, and overriding
+    the functions in that class. 
+    
+    The custom command is registered in the global command stack by calling 
+    OdEdCommandStack::addCommand() on the global command stack, 
+    which obtained via the odedRegCmds() external function.
+
+    Library: TD_Root
+    
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdCommand : public OdRxObject 
+{
+protected:
+  OdEdCommand();
+public:
+  ODRX_DECLARE_MEMBERS(OdEdCommand);
+
+  ~OdEdCommand();
+  enum
+  {
+    kModal            = 0x00000000,
+    kTransparent      = 0x00000001,
+    kUsePickset       = 0x00000002,
+    kRedraw           = 0x00000004,
+    kNoPerspective    = 0x00000008,
+    kNoMultiple       = 0x00000010,
+    kNoTilemode       = 0x00000020,
+    kNoPaperspace     = 0x00000040,
+    kPlotOnly         = 0x00000080,
+    kNoOEM            = 0x00000100,
+    kUndefined        = 0x00000200,
+    kInProgress       = 0x00000400,
+    kDefun            = 0x00000800,
+    kNoNewStack       = 0x00010000,
+    kNoInternalLock   = 0x00020000,
+    kDocReadLock      = 0x00080000,
+    kDocExclusiveLock = 0x00100000,
+    kSession          = 0x00200000,
+    kInterruptible    = 0x00400000,
+    kNoHistory        = 0x00800000,
+
+    kNoUndoMarker     = 0x01000000,
+    kNoBedit          = 0x02000000 
+  };
+
+  static OdEdCommandPtr createObject(
+    const OdString& sGroupName,
+    const OdString& sGlobalName,
+    const OdString& sLocalName,
+    OdUInt32 commandFlags,
+    OdEdCommandFunction *pFunction,
+    OdRxModule *pModule = 0
+    );
+
+  /** \details
+    Returns the group name of this command object. 
+    
+    \remarks
+    This name is used to group sets of registered commands.
+  */
+  virtual const OdString groupName() const = 0;
+
+  /** \details
+    Returns the global (untranslated) name of this command object.
+    
+    \remarks
+    This name must be unique within the groupName of this command object.
+  */
+  virtual const OdString globalName() const = 0;
+
+  /** \details
+    Returns the local (translated) name of this command.
+    
+    \remarks
+    This name must be unique within the groupName of this command object.
+  */
+    virtual const OdString localName() const;
+
+  /** \details
+    Called to execute this command object.
+    
+    \remarks
+    The client's override of this function contains the body of the command.
+    
+    \param pCommandContext [in]  Pointer to the command context.
+    
+    \remarks
+    The specified command context object is used to interact with the 
+    calling application as part of an interactive command.  
+            
+    \sa
+    OdEdCommandContext::userIO
+  */
+  virtual void execute(OdEdCommandContext* pCommandContext) = 0;
+
+  virtual const OdRxModule* module() const;
+
+  virtual void undefine(bool undefIt);
+
+  virtual OdInt32 flags() const;
+
+  /*
+  virtual OdEdUIContext   *UIContext() const = 0;
+  virtual int             functionCode() const = 0;
+  virtual void            functionCode(int fcode) = 0;
+  virtual const HINSTANCE resourceHandle() const = 0;
+  */
+};
+
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdEdCommandStack events.
+    
+    \remarks
+    Events consist of the addition and deletion, starting and ending,
+    cancellation and failure, and non-recognition of registered commands. 
+    
+    The command stack consists of groups which contain their respective commands.
+    Adding a command adds it to its group. If the group does not exist,
+    the group is first created and pushed onto the top of the stack.
+    
+    \note
+    The default implementations of all methods in this class do nothing but return.
+
+    Library: TD_Root
+
+    <group OdEd_Classes>
+*/
+class FIRSTDLL_EXPORT OdEdCommandStackReactor : public OdRxObject 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdEdCommandStackReactor);
+  
+  /** \details
+    Notification function called whenevever a command has been added to the global command stack.
+    
+    \param pCommand [in]  Pointer to the command object.
+    
+	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void commandAdded(OdEdCommand* pCommand);
+  
+  /** \details
+    Notification function called whenevever a command will be removed from the global command stack
+    
+    \param pCommand [in]  Pointer to the command object.
+    
+	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void commandWillBeRemoved(OdEdCommand* pCommand);
+  
+  /** \details
+    Notification function called whenevever the execution of a command will start.
+    
+    \param pCommand [in]  Pointer to the command object.
+    
+	  \remarks
+	  This function is called before the operation.
+  */
+  virtual void commandWillStart(OdEdCommand* pCommand, OdEdCommandContext* pCmdCtx);
+  
+  /** \details
+    Notification function called whenevever the execution of a command has ended.
+    
+    \param pCommand [in]  Pointer to the command object.
+    
+	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void commandEnded(OdEdCommand* pCommand, OdEdCommandContext* pCmdCtx);
+  
+  /** \details
+    Notification function called whenevever the execution of a command has been canceled.
+    
+    \param pCommand [in]  Pointer to the command object.
+    
+	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void commandCancelled(OdEdCommand* pCommand, OdEdCommandContext* pCmdCtx);
+  
+  /** \details
+    Notification function called whenevever the execution of a command has failed.
+    
+    \param pCommand [in]  Pointer to the command object.
+    
+	  \remarks
+	  This function is called after the operation.
+  */
+  virtual void commandFailed(OdEdCommand* pCommand, OdEdCommandContext* pCmdCtx);
+  
+  /** \details
+    Notification function called whenevever the execution of an unknown command has been attempted.
+    
+    \param commandName [in]  name of unknown command.
+    
+	  \remarks
+	  This function is called after the operation.
+  */
+  virtual OdEdCommandPtr unknownCommand(const OdString& commandName, OdEdCommandContext* pCmdCtx);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdEdCommandStackReactor object pointers. 
+*/
+typedef OdSmartPtr<OdEdCommandStackReactor> OdEdCommandStackReactorPtr;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdEdCommandStackReactor object SmartPointers.
+*/
+typedef OdArray<OdEdCommandStackReactorPtr> OdEdCommandStackReactorArray;
+
+/** \details
+    This exception class to be thrown from OdEdCommandStack::executeCommand(const OdString& cmdName, ...)
+    if cmdName was not found.
+    <group OdEd_Classes>
+*/
+class OdEdUnknownCommand {};
+
+/** \details
+    This class implements and manages the global command stack.
+
+    \remarks
+    The command stack consists of groups which contain their respective commands.
+    Adding a command adds it to its group. If the group does not exist,
+    the group is first created and pushed onto the top of the stack.
+    
+    The lookupCommand and executeCommand functions search for command names
+    in the group order on the stack.
+     
+    In the case of duplicate command names, the most recent one added to the stack
+    is the command that is returned or executed.
+     
+    The group order may be changed with popGroupToTop function. 
+         
+    Library: TD_Root
+    
+    <group OdEd_Classes>
+*/
+class FIRSTDLL_EXPORT OdEdCommandStack : public OdRxObject 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdEdCommandStack);
+
+   /** \details
+    Adds the specified reactor to this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+   */
+  virtual void addReactor(OdEdCommandStackReactor* pReactor) = 0;
+
+  /** \details
+    Removes the specified transient reactor from this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  virtual void removeReactor(OdEdCommandStackReactor* pReactor) = 0;
+
+  /** \details
+    Returns this object's transient reactors.
+  */
+  virtual OdEdCommandStackReactorArray getCommandStackReactors() const = 0;
+
+  /** \details
+    Adds the specified command object to this Stack object.
+
+    \param pCommand [in]  Pointer to the command object.
+    
+    \remarks
+    If the group associated with the command does not exist, 
+    the group is first created and pushed onto the top of the stack.
+    
+    The globalName and localName must be unique within the groupName of this command object.
+  */
+  virtual void addCommand(OdEdCommand* pCommand) = 0;
+
+  /** \details
+    Adds the specified command object to this Stack object.
+
+    \param pCommand [in]  Pointer to the command object.
+    
+    \remarks
+    If the group associated with the command does not exist, 
+    the group is first created and pushed onto the top of the stack.
+    
+    The globalName and localName must be unique within the groupName of this command object.
+  */
+  virtual OdEdCommand* addCommand(
+    const OdString& sGroupName,
+    const OdString& sGlobalName,
+    const OdString& sLocalName,
+    OdUInt32 commandFlags,
+    OdEdCommandFunction *pFunction,
+    OdRxModule *pModule = 0);
+  
+  /** \details
+    Returns an Iterator object that can be 
+    used to traverse the OdEdCommand objects in this Stack object.
+    
+    
+    \remarks
+    The traversal is by global name in group order.
+
+  */
+  virtual OdRxIteratorPtr newIterator() = 0;
+
+  /** \param groupName [in]  Group name.
+
+    \remarks
+    If groupName is specified, only OdEdCommand objects in the specified
+    group will be traversed.
+  */
+  virtual OdRxIteratorPtr newIterator(const OdString& groupName) = 0;
+
+
+  /** \details
+    Returns an Iterator object that can be used to traverse the 
+    group objects in this Stack object.
+
+    \remarks
+    Each group is an OdRxDictionary object.
+  */
+  virtual OdRxIteratorPtr newGroupIterator() = 0;
+  
+  enum LookupFlags
+  {
+    kGlobal       = 0x01, // Search global (untranslated) names.
+    kLocal        = 0x02, // Search local (translated) names.
+    kSpecifedGroup= 0x04, // Search in specified group only.
+    kUndefed      = 0x08, // Do not fire unknownCommand() event.
+    kThrowUnknown = 0x10  // Throw OdEdUnknownCommand exception if command was not found.
+  };
+  /** \details
+    Returns the OdEdCommand object with the specified name in this Stack object. 
+
+    \param commandName [in]  Name of the command to find.
+    \param lookupFlags [in]  Specified where command lookup is to look.
+    \param groupName [in]  Group name.
+    
+    \remarks
+    Returns a SmartPointer to the OdEdCommand object if successful, otherwise a null SmartPointer.
+
+    This function searches for command names in the group order on the stack.
+    
+    If groupName is specified, only that group will be searched.
+
+    lookupFlags must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value     Description
+    kGlobal           0x01      Search global (untranslated) names.
+    kLocal            0x02      Search local (translated) names.
+    kSpecifedGroup    0x04      Search in specified group only.
+    kUndefed          0x08      Indicates whether or not to return commands that are currently marked as undefined.
+    </table>
+    
+  */
+  virtual OdEdCommandPtr lookupCmd(
+    const OdString& commandName,
+    int lookupFlags = kGlobal|kLocal,
+    const OdString& groupName = OdString::kEmpty) = 0;
+
+  /** \details
+    Executes the specified command in this Stack object. 
+    
+    \remarks
+    OdEdCommandStackReactor objects in the reactor list of this Stack object will be notified.
+
+    \param pCommand [in]  Pointer to the command object to execute.
+    \param pCmdCtx [in]  Pointer to the command context.
+
+    \remarks
+    The specified command context object is used to interact with the 
+    calling application as part of an interactive command.  
+
+    This function searches for both global and local command names in the group order on the stack.
+
+    \sa
+    OdEdCommand::execute.
+  */
+  virtual void executeCommand(OdEdCommand* pCmd, OdEdCommandContext* pCmdCtx) = 0;
+
+  /** \details
+    Executes the specified command in this Stack object. 
+
+    \param cmdName [in]  Name of the command to find.
+    \param pCmdCtx [in]  Pointer to the command *context*.
+    \param lookupFlags [in]  Specified where command lookup is to look.
+    \param groupName [in]  Group *name*.
+    
+    \remarks
+    Lookups a command object registred in this Stack object by a cpecified cmdName,
+    lookupFlags and groupName and executes it. If command was not found then method fires
+    OdEdCommandStackReactor::unknownCommand() event that may provide back a command object
+    for the given name. So if a command object was provided by one of the reactors then
+    implementation of this method executs it. If one was provided by neither of the reactors and
+    kThrowUnknown flag was specified in lookupFlags then OdEdUnknownCommand would be thrown.
+    If kThrowUnknown flag was not specified the method just exits.
+    
+    If groupName is specified, only that group will be searched.
+
+    lookupFlags must be a combination of one or more of the following:
+    
+    <table>
+    Name              Value     Description
+    kGlobal           0x01      Search global (untranslated) names.
+    kLocal            0x02      Search local (translated) names.
+    kSpecifedGroup    0x04      Search in specified group only.
+    kUndefed          0x08      Indicates whether or not to return commands that are currently marked as undefined.
+    kThrowUnknown     0x10      Throw OdEdUnknownCommand exception if command was not found.
+    </table>   
+
+    \sa
+    OdEdCommandStack::lookupCmd,
+    OdEdCommandStackReactor::unknownCommand,
+    OdEdCommand::execute.
+  */
+  virtual void executeCommand(const OdString& cmdName,
+                              OdEdCommandContext* pCmdCtx,
+                              int lookupFlags = kGlobal|kLocal,
+                              const OdString& groupName = OdString::kEmpty) = 0;
+
+  /** \details
+    Removes the command with the specified group and global names from this Stack object.
+
+    \param groupName [in]  Group name.
+    \param globalName [in]  Global (untranslated) name.
+    
+    \remarks
+    If a group is emptied, it is removed from this Stack object.
+    
+    If the specified command is not found, this function does nothing but return.
+  */
+  virtual void removeCmd(const OdString& groupName, const OdString& globalName) = 0;
+
+  virtual void removeCmd(const OdEdCommand* pCommand) = 0;
+
+  /** \details
+    Removes the specified group and its commands from this Stack object.
+
+    \param groupName [in]  Group name.
+
+    \remarks
+    If the specified group is not found, this function does nothing but return.
+  */
+  virtual void removeGroup(const OdString& groupName) = 0;
+  /** \details
+    This function pops the cmdGroupName command group to the top of the 
+    command stack making it the first group to be searched when resolving 
+    application defined command names.
+
+    \param cmdGroupName [in]  Name of the command group to pop to the top of the command stack.
+
+    \remarks
+    If the specified group is not found, this function returns eKeyNotFound.
+  */
+  virtual OdResult popGroupToTop(const OdString& cmdGroupName) = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdEdCommandStack object pointers. 
+*/
+typedef OdSmartPtr<OdEdCommandStack> OdEdCommandStackPtr;
+
+/** \details
+    Returns the global command stack.
+*/
+FIRSTDLL_EXPORT OdEdCommandStackPtr odedRegCmds();
+
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODEDCOMMANDSTACK_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdFunctionIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdFunctionIO.h
new file mode 100755
index 0000000..917e7d4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdFunctionIO.h
@@ -0,0 +1,49 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODEDFUNCTIONIO_H_INCLUDED_
+#define _ODEDFUNCTIONIO_H_INCLUDED_
+
+#include "RxObject.h"
+#include "TD_PackPush.h"
+
+/** \details
+    This class implements non-geometric interactive user IO functionality for custom interactive command objects.
+    
+    Library: TD_Root
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdFunctionIO : public OdRxObject
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdEdFunctionIO);
+
+  virtual void setParam(OdRxObject* pParamObj) = 0;
+  virtual OdRxObjectPtr param() = 0;
+  virtual void setResult(OdRxObject* pResultObj) = 0;
+  virtual OdRxObjectPtr result() = 0;
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODEDFUNCTIONIO_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdLispEngine.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdLispEngine.h
new file mode 100755
index 0000000..06d0ba8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdLispEngine.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _EDLISPENGINE_H_INCLUDED_
+#define _EDLISPENGINE_H_INCLUDED_
+
+#include "RxObject.h"
+#include "RxModule.h"
+
+class OdEdCommandContext;
+
+/** <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdLispEngineReactor : public OdRxObject
+{
+protected:
+  OdEdLispEngineReactor();
+public:
+  ODRX_DECLARE_MEMBERS(OdEdLispEngineReactor);
+  
+  ~OdEdLispEngineReactor();
+
+  virtual void lispWillStart(OdEdCommandContext* pCmdCtx, const OdString& firstLine);
+
+  virtual void lispEnded(OdEdCommandContext* pCmdCtx);
+
+  virtual void lispCancelled(OdEdCommandContext* pCmdCtx);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdEdLispEngineReactor object pointers. 
+*/
+typedef OdSmartPtr<OdEdLispEngineReactor> OdEdLispEngineReactorPtr;
+
+
+/** <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdLispEngine : public OdRxObject
+{
+protected:
+  OdEdLispEngine();
+public:
+  ODRX_DECLARE_MEMBERS(OdEdLispEngine);
+
+  ~OdEdLispEngine();
+
+   /** \details
+    Adds the specified reactor to this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+   */
+  virtual void addReactor(OdEdLispEngineReactor* pReactor) = 0;
+
+  /** \details
+    Removes the specified transient reactor from this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  virtual void removeReactor(OdEdLispEngineReactor* pReactor) = 0;
+
+  virtual void execute(OdEdCommandContext* pCmdCtx, const OdString& firstLine) = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdEdLispEngineReactor object pointers. 
+*/
+typedef OdSmartPtr<OdEdLispEngine> OdEdLispEnginePtr;
+
+
+/** <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdLispModule : public OdRxModule
+{
+protected:
+   OdEdLispModule();
+public:
+  ODRX_DECLARE_MEMBERS(OdEdLispModule);
+
+  ~OdEdLispModule();
+
+  virtual OdEdLispEnginePtr createLispEngine() = 0;
+};
+
+typedef OdSmartPtr<OdEdLispModule> OdEdLispModulePtr;
+
+
+#endif //_EDLISPENGINE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdUserIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdUserIO.h
new file mode 100755
index 0000000..85466fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ed/EdUserIO.h
@@ -0,0 +1,494 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODEDUSERIO_H_INCLUDED_
+#define _ODEDUSERIO_H_INCLUDED_
+
+#include "OdPlatform.h"
+#include "DbExport.h"
+#include "Gi/GiDrawable.h"
+#include "OdString.h"
+#include "SharedPtr.h"
+#include "RxObject.h"
+
+class OdGePoint3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdEd
+{
+  enum CommonInputOptions
+  {
+    kInpDefault       = 0x00000000,
+    kInpDisallowEmpty = kInpDefault,
+    kInpDisallowOther = kInpDisallowEmpty,
+    kInpThrowEmpty    = (long)0x80000000,
+    kInpThrowOther    = 0x40000000,
+    kInpNonZero       = 0x20000000, // Disallow zero input 
+    kInpNonNeg        = 0x10000000  // Disallow negative input 
+  };
+
+  enum GetFilePathFlags
+  {
+    kGfpForOpen         = 0, // For Open.
+    kGfpForSave         = 1, // For Save.
+    kGfpOverwritePrompt = 2  // Enable overwrite prompt displaying when exist file selected for saving.
+  };
+
+  enum GetStringOptions
+  {
+    kGstDefault      = 0, // Spaces disallowed, no KeywordExceptions
+    kGstNoSpaces     = 0, // Spaces disallowed
+    kGstAllowSpaces  = 1, // The first space character will not terminate the input.
+    kGstNoEmpty      = 2  // The first space character will not terminate the input.
+  };
+
+  enum OdDbInputOptions
+  {
+    kGptDefault         = 0x00000000,
+    kGdsDefault         = kGptDefault,
+    kGinDefault         = kGptDefault,
+    kGrlDefault         = kGptDefault,
+    kGanDefault         = kGptDefault,
+    kGptNoLimCheck      = 0x00000001, // Ignore the LIMMIN and LIMMAX system variables
+    kGptNoUCS           = 0x00000002, // Do not project result point onto UCS plane (input point in eye plane)
+    kGptRubberBand      = 0x00000004,
+    kGptRectFrame       = 0x00000008,
+    kGptBeginDrag       = 0x00000010,
+    kGptEndDrag         = 0x00000020,
+    kGptNoOSnap         = 0x00000040, // Disables object snaps
+    kGanFromLastPoint   = 0x00000080,
+    kGdsFromLastPoint   = kGanFromLastPoint,
+    kGanNoAngBase       = 0x00000100,
+    kGds2d              = 0x00000200, // Restrict (getDistance) to 2D
+    kGdsSignedDist      = 0x00000400,
+    kGdsPerpDist        = 0x00000800, // is in perpendicular plane to UCS plane
+    kGdsNoZero          = 0x00001000,
+    kGinNoZero          = kGdsNoZero,
+    kGrlNoZero          = kGdsNoZero,
+    kGanNoZero          = kGdsNoZero,
+    kGdsNoNeg           = 0x00002000,
+    kGinNoNeg           = kGdsNoNeg,
+    kGrlNoNeg           = kGdsNoNeg
+  };
+
+  enum SelectOptions
+  {
+    kSelDefault         = 0x00000000,
+    kSelPickLastPoint   = 0x00000001,
+    kSelSingleEntity    = 0x00000002,
+    kSelIgnorePickFirst = 0x00000004,
+    kSelSinglePass      = 0x00000008,
+    kSelAllowEmpty      = 0x00000010,
+    kSelRemove          = 0x00000020,
+    kSelLeaveHighlighted= 0x00000040,
+    kSelAllowInactSpaces= 0x00000080,
+    kSelAllowObjects    = 0x00000100,
+    kSelAllowPSVP       = 0x00000200,
+    kSelAllowSubents    = 0x00000400,
+    kSelAllowLocked     = 0x00000800
+  };
+}
+
+class OdGsView;
+class OdGsModel;
+
+class OdCmColorBase;
+
+//
+// OdEd_Classes
+//
+
+/** \details
+    This class allows commands to track object
+    changes and redraw the entities while user sets parameter values.
+
+    Library: TD_Root
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdInputTracker : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdInputTracker);
+
+  virtual int addDrawables(OdGsView* pView) = 0;
+  virtual void removeDrawables(OdGsView* pView) = 0;
+};
+
+typedef OdSmartPtr<OdEdInputTracker> OdEdInputTrackerPtr;
+
+
+/** \details
+    This notification interface template allows commands to track object
+    changes and redraw the entities while user sets parameter values.
+
+    Library: TD_Root
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdIntegerTracker : public OdEdInputTracker
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdIntegerTracker);
+
+  virtual void setValue(int value) = 0;
+};
+
+typedef OdSmartPtr<OdEdIntegerTracker> OdEdIntegerTrackerPtr;
+
+
+/** \details
+    This notification interface template allows commands to track object
+    changes and redraw the entities while user sets parameter values.
+
+    Library: TD_Root
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdRealTracker : public OdEdInputTracker
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdRealTracker);
+
+  virtual void setValue(double value) = 0;
+};
+
+typedef OdSmartPtr<OdEdRealTracker> OdEdRealTrackerPtr;
+
+
+/** \details
+    This notification interface template allows commands to track object
+    changes and redraw the entities while user sets parameter values.
+
+    Library: TD_Root
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdStringTracker : public OdEdInputTracker
+{
+protected:
+  bool bShowCursor;
+public:
+  ODRX_DECLARE_MEMBERS(OdEdStringTracker);
+
+  virtual void setValue(const OdString& value) = 0;
+
+  virtual void setCursor(const bool& bShowCursor)
+  {
+    this->bShowCursor = bShowCursor;
+  }
+};
+
+typedef OdSmartPtr<OdEdStringTracker> OdEdStringTrackerPtr;
+
+
+/** \details
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdPointTracker : public OdEdInputTracker
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdPointTracker);
+
+  virtual void setValue(const OdGePoint3d& value) = 0;
+};
+
+typedef OdSmartPtr<OdEdPointTracker> OdEdPointTrackerPtr;
+
+
+/** \details
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdPointDefTracker : public OdEdPointTracker
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdPointDefTracker);
+
+  virtual OdGePoint3d basePoint() const = 0;
+};
+
+typedef OdSmartPtr<OdEdPointDefTracker> OdEdPointDefTrackerPtr;
+
+
+/** \details
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdColorTracker : public OdEdInputTracker
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdEdColorTracker);
+
+  virtual void setValue(const OdCmColorBase& value) = 0;
+};
+
+typedef OdSmartPtr<OdEdColorTracker> OdEdColorTrackerPtr;
+
+
+//
+// OdEd_Exceptions
+//
+
+#define OdException OdError
+
+
+/** \details
+    This class will be thrown whenever the user cancels input from query function of this UserIO object.
+
+    Library: TD_Root
+    <group OdEd_Exceptions>
+*/
+class FIRSTDLL_EXPORT OdEdException : public OdException
+{
+protected:
+  OdEdException();
+  OdEdException(OdErrorContext* pErrCtx);
+};
+
+
+/** \details
+    This class will be thrown whenever the user cancels input from query function of this UserIO object.
+
+    Library: TD_Root
+    <group OdEd_Exceptions>
+*/
+class FIRSTDLL_EXPORT OdEdCancel : public OdEdException
+{
+public:
+  OdEdCancel();
+  OdEdCancel(OdErrorContext* pErrCtx);
+};
+
+
+/** \details
+    This class will be thrown whenever a keyword is input to query function of this UserIO object.
+
+    Library: TD_Root
+    <group OdEd_Exceptions>
+*/
+class FIRSTDLL_EXPORT OdEdKeyword : public OdEdException
+{
+public:
+  OdEdKeyword(int nKeyword, const OdString& sKeyword);
+
+  int keywordIndex() const;
+  const OdString& keyword() const;
+};
+
+
+/** \details
+
+    Library: TD_Root
+    <group OdEd_Exceptions>
+*/
+class FIRSTDLL_EXPORT OdEdOtherInput : public OdEdCancel
+{
+public:
+  OdEdOtherInput(const OdString& sInput);
+  const OdString& string() const;
+};
+
+
+/** \details
+
+    Library: TD_Root
+    <group OdEd_Exceptions>
+*/
+class FIRSTDLL_EXPORT OdEdEmptyInput : public OdEdCancel
+{
+public:
+  OdEdEmptyInput();
+};
+
+
+/** \details
+    This class implements non-geometric interactive user IO functionality for custom interactive command objects.
+    
+    Library: TD_Root
+    <group OdEd_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdEdUserIO : public OdRxObject
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdEdUserIO);
+
+  /** \details
+    Returns user input of a keyword.
+ 
+    \param prompt [in]  Prompt output before pausing for user input.
+    \param keywords [in]  Keyword list.
+    \param options [in]  Bitwise OR combination of OdEd::CommonInputOptions enum.
+    \param defVal [in]  Returned if user input nothing.
+
+    \remarks
+    Returns the index of the entered keyword in the keyword list, or -1 it's not there.
+    
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.  
+    
+    \note
+    This function does not throw a KeywordException.
+  */
+  virtual int getKeyword(
+    const OdString& prompt,
+    const OdString& keywords,
+    int defVal = -1,
+    int options = OdEd::kInpDefault,
+    OdEdIntegerTracker* pTracker = 0) = 0;
+
+  /** \details
+    Returns user input of an integer.
+ 
+    \param prompt [in]  Prompt output before pausing for user input.
+    \param pTracker [in/out] Pointer to an IO Tracker for this user input.
+    \param options [in] Bitwise OR combination of OdEd::CommonInputOptions enum.
+    \param defVal [in] Returned if user input nothing and OdEd::kInpReturnDefVal flag is set.
+    
+    \remarks
+    If prompt is empty, a default prompt is used.    
+    
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.  
+  */
+  virtual int getInt(
+    const OdString& prompt,
+    int options = OdEd::kInpDefault,
+    int defVal = 0,
+    const OdString& keywords = OdString::kEmpty,
+    OdEdIntegerTracker* pTracker = 0) = 0;
+
+  /** \details
+    Returns user input of a double.
+ 
+    \param prompt [in]  Prompt output before pausing for user input.
+    \param options [in]  Bitwise OR combination of OdEd::CommonInputOptions enum.
+    \param defVal [in]  Returned if user input nothing and OdEd::kInpReturnDefVal flag is set.
+    \param pTracker [in]  Pointer to an IO Tracker for this user input.
+    
+    \remarks
+    If prompt is empty, a default prompt is used.    
+    
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.  
+  */
+  virtual double getReal(
+    const OdString& prompt, 
+    int options = OdEd::kInpDefault,
+    double defVal = 0.0,
+    const OdString& keywords = OdString::kEmpty,
+    OdEdRealTracker* pTracker = 0) = 0;
+
+  /** \details
+    Returns user input of a string.
+ 
+    \param options [in]  combination of OdEd::CommonInputOptions and OdEd::GetStringOptions enum values.
+    \param prompt [in]  Prompt output before pausing for user input.
+    \param pTracker [in]  Pointer to an IO Tracker for this user input.
+    \param defValue [in]  Default value.
+    \param keywords [in]  Keyword string.
+    
+    \remarks
+    If prompt is empty, a default prompt is used.    
+    
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.  
+  */
+  virtual OdString getString(
+    const OdString& prompt, 
+    int options = OdEd::kInpDefault, 
+    const OdString& defValue = OdString::kEmpty,
+    const OdString& keywords = OdString::kEmpty,
+    OdEdStringTracker* pTracker = 0) = 0;
+                                 
+  /** \details
+    Writes the specified string to the command's output.
+    \param string [in]  string to write.
+  */
+  virtual void putString(const OdString& string) = 0;
+
+  /** \details
+    Returns user input of a color as wrapped value.
+
+    \param prompt [in]  Message displayed to prompt the user.
+    \param options [in]  Combination of OdEd::GetPointOptions enum values. 
+    \param pDefaultValue [in]  Pointer to a default value to return if an empty string is received as input.
+    \param keywords [in]  Keyword string.
+    \param pTracker [in]  Pointer to a User IO tracker.
+    
+    \remarks
+    This function uses the underlying OdEdBaseIO functions putString and getString for low
+    level output and input.
+    
+    If prompt is an empty string, a default prompt string is used.  
+  */
+  virtual OdSharedPtr<OdCmColorBase> getCmColor(
+    const OdString& prompt,
+    int options = OdEd::kInpDefault,
+    const OdCmColorBase* pDefaultValue = 0,
+    const OdString& keywords = OdString::kEmpty,
+    OdEdColorTracker* pTracker = 0) = 0;
+
+  /** \details
+    Returns user input of a filename obtained in some manner.
+
+    \param options [in]  combination of OdEd::CommonInputOptions and OdEd::GetFilePathFlags enum values.
+    \param prompt [in]  Prompt output before pausing for user input.
+    \param dialogCaption [in]  Dialog caption.
+    \param defExt [in]  Default file extension without "."
+    \param fileName [in]  Initial filename to initialize dialog with.
+    \param filter [in]  Filter pattern.
+    \param pTracker [in/out] File path tracker; may be used to display file preview.
+    
+    \remarks
+    flags must be one of the following:
+
+    <table>
+    Name                        Value   Description
+    OdEd::kGfpForOpen           0       For Open.
+    OdEd::kGfpForSave           1       For Save.
+    OdEd::kGfpOverwritePrompt   2       Enable overwrite prompt displaying when exist file selected for saving.
+    </table>
+
+    The default implementation of this function utilizes getString().  
+  */
+  virtual OdString getFilePath(
+      const OdString& prompt, 
+      int options = OdEd::kGfpForOpen,
+      const OdString& dialogCaption = OdString::kEmpty, 
+      const OdString& defExt = OdString::kEmpty,
+      const OdString& fileName = OdString::kEmpty,
+      const OdString& filter = OdString::kEmpty,
+      const OdString& keywords = OdString::kEmpty,
+      OdEdStringTracker*  pTracker = 0);
+
+  /** \details
+    Writes the specified *error message* to the command's error output.
+    Override it to distinguish normal output of a command from its error messages.
+    \param errmsg [in]  error message to write.
+  */
+  virtual void putError(const OdString& errmsg) { putString(errmsg); }
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODEDUSERIO_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Editor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Editor.h
new file mode 100755
index 0000000..30bd1c8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Editor.h
@@ -0,0 +1,893 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef   _ODED_H_INCLUDED_
+#define   _ODED_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxNames.h"
+#include "RxEvent.h"
+#include "OdArrayPreDef.h"
+#include "DbObjectId.h"
+#include "IdArrays.h"
+
+#define ODED_EDITOR_OBJ OD_T("OdEditor")
+
+class OdDbDatabase;
+
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdEditor events.
+
+    \note
+    The default implementations of all methods in this class do nothing but return.
+    
+    \sa
+    TD_Db
+    
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdEditorReactor : public OdRxEventReactor 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdEditorReactor);
+
+  /** \details
+    Notification function called whenever a .dwg file is about to be opened.
+    
+    \param filename [in]  Name of the .dwg file.
+    
+    \remarks
+    This function is called before the operation.
+    
+    \sa
+    * dwgFileOpened
+    * endDwgOpen
+  */
+  virtual void beginDwgOpen(
+    const OdString& filename);
+    
+  /** \details
+    Notification function called whenever a .dwg file has been opened.
+    
+    \param filename [in]  Name of the .dwg file.
+    
+    \remarks
+    This function is called after the operation.
+    
+    \sa
+    * beginDwgOpen
+    * dwgFileOpened
+  */
+  virtual void endDwgOpen(
+    const OdString& filename);
+    
+  /** \details
+    Notification function called whenever an OdDbDatabase instance is about to be closed.
+    
+    \param pDb [in]  Pointer to the database being closed.
+    
+    \remarks
+    This function is called before the operation.
+  */
+  virtual void beginClose(
+    OdDbDatabase* pDb);
+  /** \sa
+    * beginDwgOpen
+    * endDwgOpen
+  */
+  virtual void dwgFileOpened(
+    OdDbDatabase* pDb, 
+    const OdString& filename);
+  
+  /** \details
+    Notification function called whenever an Xref database is about 
+    to be attached to a host database.
+    
+    \param pToDb [in]  Host database.
+    \param pFromDb [in]  Xref database.
+    \param filename [in]  Xref filename.
+    
+    \remarks
+    This function is called before the operation.
+    
+    \remarks
+    filename may not have a path or extension.
+    
+    \sa
+    * abortAttach
+    * endAttach  
+    * otherAttach
+  */
+  virtual void beginAttach(
+    OdDbDatabase* pToDb, 
+    const OdString& filename, 
+    OdDbDatabase* pFromDb);
+    
+  /** \details
+    Notification function called whenever an Xref database has been attached to a host database.
+    
+    \param pToDb [in]  Host database.
+    \param pFromDb [in]  Xref database.
+    
+    \remarks
+    This function is called after the operation, and is sent just after
+    beginDeepCloneXlation.
+    
+    \sa
+    * abortAttach
+    * beginAttach
+    * endAttach  
+  */
+  virtual void otherAttach(
+    OdDbDatabase* pToDb, 
+    OdDbDatabase* pFromDb);
+    
+  /** \details
+    Notification function called whenever the attachment of an Xref database has failed.
+    
+    \param pToDb [in]  Host database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * beginAttach
+    * endAttach  
+    * otherAttach
+  */
+  virtual void abortAttach(
+    OdDbDatabase* pFromDb);
+    
+  /** \details
+    Notification function called whenever the attachment of an Xref database has succeeded.
+    
+    \param pToDb [in]  Host database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * abortAttach
+    * beginAttach
+    * otherAttach
+  */
+  virtual void endAttach(
+    OdDbDatabase* pToDb);
+    
+  /** \details
+    Notification function called whenever an Object ID in an Xref database has been
+    modified to point at an associated object in a host database. 
+    
+    \param oldId [in]  Object Id in the Xref database.
+    \param neId [in]  Object Id in the host database.
+    
+    \remarks
+    This function is called after the operation.
+    
+    Redirection is used to implement VISRETAIN.
+  */
+  virtual void redirected(
+    OdDbObjectId newId, 
+    OdDbObjectId oldId);
+    
+  /** \details
+    Notification function called whenever an object in an Xref database has been comandeered.
+    
+    \param pToDb [in]  Host database.
+    \param pFromDb [in]  Xref database.
+    \param objectId [in]  Object ID of the comandeered object.
+    
+    \remarks
+    Rather than copy an Xref dependent object to the host database, the Object ID of the object
+    is merely appended to the host database symbol table with the name of the Xref prepended to it.
+    
+    Thus, the block BAR in the xrefed database FOO, becomes FOO|BAR in the host database.
+  */
+  virtual void comandeered(
+    OdDbDatabase* pToDb, 
+    OdDbObjectId id, 
+    OdDbDatabase* pFromDb);
+    
+  
+  /** \details
+    Notification function called whenever an Xref database is about 
+    to be reloaded to a host database, when the Xref drawing file is unchanged.
+    
+    \param pToDb [in]  Host database.
+    \param pFromDb [in]  Xref database.
+    \param filename [in]  Xref filename.
+    
+    \remarks
+    This function is called before the operation.
+    
+    \remarks
+    filename may not have a path or extension.
+    
+    \sa
+    * abortRestore
+    * endRestore  
+  */
+  virtual void beginRestore(
+    OdDbDatabase* pToDb, 
+    const OdString& filename, 
+    OdDbDatabase* pFromDb);
+
+  /** \details
+    Notification function called whenever the restore of an Xref database has failed.
+    
+    \param pToDb [in]  Host database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * beginRestore
+    * endRestore  
+  */
+  virtual void abortRestore(
+    OdDbDatabase* pToDb);
+  /** \details
+    Notification function called whenever the restore of an Xref database has succeeded.
+    
+    \param pToDb [in]  Host database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * abortRestore
+    * beginAttach
+  */
+  virtual void endRestore(
+    OdDbDatabase* pToDb);
+  
+  enum XrefSubcommandActivities
+  {    
+    kStart = 0,
+    kStartItem = 2,
+    kEndItem = 3,
+    kEnd = 4,
+    kWillAbort = 5,
+    kAborted = 6,
+    kStartXBindBlock = 7,
+    kStartXBindSymbol = 8
+  };
+
+  /** \details
+    Notification function called during an Xref Bind operation.
+    
+    \param activity [in]  Bind activity.
+    \param blockId [in]  Object ID of the Xref.
+    
+    \remarks
+    This function will be called multiple times as an Xrefs are bound.
+    
+    activity must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Bind has started. blockId is undefined.
+    kStartItem          2         The Bind of the Xref with the specified blockId has been started. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEndItem            3         The Bind of the Xref with the specified blockId has been successfully completed. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEnd                4         The Bind has completed successfully. blockId is undefined.
+    kAborted            6         The Bind has failed to complete for the Xref with the specified blockId. 
+    kStartXBindBlock    7         Notification of an Xref-dependent block being bound.
+    kStartXBindSymbol   8         Notification of all other Xref-dependent symbols.
+    </table>
+
+    \sa
+    * xrefSubcommandAttachItem
+    * xrefSubcommandDetachItem 
+    * xrefSubcommandOverlayItem
+    * xrefSubcommandPathItem
+    * xrefSubcommandReloadItem
+    * xrefSubcommandUnloadItem
+    
+  */
+  virtual void xrefSubcommandBindItem(
+    int activity, 
+    OdDbObjectId blockId);
+    
+  /** \details
+    Notification function called during an Xref Attach operation.
+    
+    \param activity [in]  Attach activity.
+    \param xrefPath [in]  Xref path.
+    
+    \remarks
+    This function will called multiple times as an Xrefs are attached. 
+    
+    activity must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Attach has started. xrefPath is undefined.
+    kStartItem          2         The Attach of the Xref with the specified path has been started. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEndItem            3         The Attach of the Xref with the specified path has been successfully completed. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEnd                4         The Attach has completed successfully. xrefPath is undefined.
+    kAborted            6         The Attach has failed to complete for the Xref with the specified filename. 
+    </table>
+    
+    \note
+    This function can be triggered by any action that results in the resolution of Xrefs. 
+    This includes plot, IGES and DXF input, block redefinition, and Xref Reload operations.
+
+    \sa
+    * xrefSubcommandBindItem
+    * xrefSubcommandDetachItem 
+    * xrefSubcommandOverlayItem
+    * xrefSubcommandPathItem
+    * xrefSubcommandReloadItem
+    * xrefSubcommandUnloadItem
+  */
+  virtual void xrefSubcommandAttachItem(
+    int activity, 
+    const OdString& xrefPath);
+
+  /** \details
+    Notification function called during an Xref Overlay operation.
+    
+    \param activity [in]  Overlay activity.
+    \param xrefPath [in]  Xref path.
+    
+    \remarks
+    This function will called multiple times as an Xrefs are overlayed. 
+    
+    activity must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Overlay has started. xrefPath is undefined.
+    kStartItem          2         The Overlay of the Xref with the specified path has been started. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEndItem            3         The Overlay of the Xref with the specified path has been successfully completed. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEnd                4         The Overlay has completed successfully. xrefPath is undefined.
+    kAborted            6         The Overlay has failed to complete for the Xref with the specified filename. 
+    </table>
+    
+    \note
+    This function can be triggered by any action that results in the resolution of Xrefs. 
+    This includes plot, IGES and DXF input, block redefinition, and Xref Reload operations.
+
+    \sa
+    * xrefSubcommandAttachItem
+    * xrefSubcommandBindItem
+    * xrefSubcommandDetachItem 
+    * xrefSubcommandPathItem
+    * xrefSubcommandReloadItem
+    * xrefSubcommandUnloadItem
+  */
+  virtual void xrefSubcommandOverlayItem(
+    int activity, 
+    const OdString& xrefPath);
+    
+  /** \details
+    Notification function called during an Xref Detach operation.
+    
+    \param activity [in]  Detach activity.
+    \param blockId [in]  Object ID of the Xref.
+    
+    \remarks
+    This function will be called multiple times as an Xrefs are detached.
+    
+    activity must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Detach has started. blockId is undefined.
+    kStartItem          2         The Detach of the Xref with the specified blockId has been started. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEndItem            3         The Detach of the Xref with the specified blockId has been successfully completed. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEnd                4         The Detach has completed successfully. blockId is undefined.
+    kAborted            6         The Detach has failed to complete for the Xref with the specified blockId. 
+    </table>
+
+    \sa
+    * xrefSubcommandAttachItem
+    * xrefSubcommandBindItem
+    * xrefSubcommandOverlayItem
+    * xrefSubcommandPathItem
+    * xrefSubcommandReloadItem
+    * xrefSubcommandUnloadItem
+  */
+  virtual void xrefSubcommandDetachItem(
+    int activity, 
+    OdDbObjectId blockId);
+    
+  /** \details
+    Notification function called during an Xref Path operation.
+    
+    \param activity [in]  Path activity.
+    \param newPath [in]  New Xref path.
+    \param blockId [in]  Object ID of the Xref.
+    
+    \remarks
+    
+    activity must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Path operation has started. blockId and newPath are undefined.
+    kStartItem          2         The Path operation the Xref with the specified blockId has been started. 
+    kEndItem            3         The Path of the Xref with the specified blockId has been successfully changed to newPath.  
+    kEnd                4         The Path operation has completed successfully. blockId and newPath are undefined.
+    kAborted            6         The Path has failed to complete for the Xref with the specified blockId. 
+    </table>
+
+    \sa
+    * xrefSubcommandAttachItem
+    * xrefSubcommandBindItem
+    * xrefSubcommandDetachItem 
+    * xrefSubcommandOverlayItem
+    * xrefSubcommandReloadItem
+    * xrefSubcommandUnloadItem
+  */
+  virtual void xrefSubcommandPathItem(
+    int activity, OdDbObjectId blockId, 
+    const OdString& newPath);
+    
+  /** \details
+    Notification function called during an Xref Reload operation.
+    
+    \param activity [in]  Reload activity.
+    \param blockId [in]  Object ID of the Xref.
+    
+    \remarks
+    This function will be called multiple times as an Xrefs are reloaded.
+    
+    activity must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Reload has started. blockId is undefined.
+    kStartItem          2         The Reload of the Xref with the specified blockId has been started. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEndItem            3         The Reload of the Xref with the specified blockId has been successfully completed. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEnd                4         The Reload has completed successfully. blockId is undefined.
+    kAborted            6         The Reload has failed to complete for the Xref with the specified blockId. 
+    </table>
+
+    \sa
+    * xrefSubcommandAttachItem
+    * xrefSubcommandBindItem
+    * xrefSubcommandDetachItem 
+    * xrefSubcommandOverlayItem
+    * xrefSubcommandPathItem
+    * xrefSubcommandUnloadItem
+  */
+  virtual void xrefSubcommandReloadItem(
+    int activity, 
+    OdDbObjectId blockId);
+    
+  /** \details
+    Notification function called during an Xref Unload operation.
+    
+    \param activity [in]  Reload activity.
+    \param blockId [in]  Object ID of the Xref.
+    
+    \remarks
+    This function will be called multiple times as an Xrefs are unloaded.
+    
+    activity must be one of the following:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Unload has started. blockId is undefined.
+    kStartItem          2         The Unload of the Xref with the specified blockId has been started. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEndItem            3         The Unload of the Xref with the specified blockId has been successfully completed. 
+                                  Notification will be made for the 
+                                  original Xref and any dependent Xrefs.
+    kEnd                4         The Unload has completed successfully. blockId is undefined.
+    kAborted            6         The Unload has failed to complete for the Xref with the specified blockId. 
+    </table>
+  */
+  virtual void xrefSubcommandUnloadItem(
+    int activity, 
+    OdDbObjectId blockId);
+  
+  /** \details
+    Notification function called during an Undo Auto operation.
+    
+    \param activity [in]  Auto activity.
+    \param undoAuto [in]  True if and only if Undo Auto mode is on.
+        
+    \remarks
+    activity will always be:
+    
+    <table>
+    Name                Value     Description
+    kEnd                4         The Auto operation has completed successfully.
+    </table>
+
+    \sa
+    * undoSubcommandBack
+    * undoSubcommandBegin
+    * undoSubcommandControl
+    * undoSubcommandEnd
+    * undoSubcommandMark
+    * undoSubcommandNumber
+  */
+  virtual void undoSubcommandAuto(
+    int activity, 
+    bool undoAuto);
+    
+  /** \details
+    Notification function called during an Undo Control operation.
+    
+    \param activity [in]  Control activity.
+    \param option [in]  Undo option.
+        
+    \remarks
+    activity will always be:
+    
+    <table>
+    Name                Value     Description
+    kEnd                4         The Control operation has completed successfully.
+    </table>
+
+    option must be one of the following:
+    
+    <table>
+    Name    Value   Description
+    kNone   0       Undo None 
+    kOne    1       Undo One  
+    kAll    2       Undo All 
+    </table>
+
+    \sa
+    * undoSubcommandAuto
+    * undoSubcommandBack
+    * undoSubcommandBegin
+    * undoSubcommandEnd
+    * undoSubcommandMark
+    * undoSubcommandNumber
+  */
+  virtual void undoSubcommandControl(
+    int activity, 
+    int option);
+    
+  /** \details
+    Notification function called during an Undo Begin or Undo Group operation.
+    
+    \param activity [in]  Begin activity.
+        
+    \remarks
+    activity will always be:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Undo Begin/Group has started.
+    </table>
+
+    \sa
+    * undoSubcommandAuto
+    * undoSubcommandBack
+    * undoSubcommandControl
+    * undoSubcommandEnd
+    * undoSubcommandMark
+    * undoSubcommandNumber
+  */
+  virtual void undoSubcommandBegin(
+    int activity);
+    
+  /** \details
+    Notification function called during an Undo End or Undo Group operation.
+    
+    \param activity [in]  End activity.
+        
+    \remarks
+    activity will always be:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Undo End has started.
+    </table>
+
+    \sa
+    * undoSubcommandAuto
+    * undoSubcommandBack
+    * undoSubcommandBegin
+    * undoSubcommandControl
+    * undoSubcommandMark
+    * undoSubcommandNumber
+  */
+  virtual void undoSubcommandEnd(
+    int activity);
+    
+  /** \details
+    Notification function called during an Undo Mark operation.
+    
+    \param activity [in]  Mark activity.
+        
+    \remarks
+    activity will always be:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Undo Mark has started.
+    </table>
+
+    \sa
+    * undoSubcommandAuto
+    * undoSubcommandBack
+    * undoSubcommandBegin
+    * undoSubcommandControl
+    * undoSubcommandEnd
+    * undoSubcommandNumber
+  */
+  virtual void undoSubcommandMark(
+    int activity);
+    
+  /** \details
+    Notification function called during an Undo Back operation.
+    
+    \param activity [in]  Back activity.
+        
+    \remarks
+    activity will always be:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Undo Back has started.
+    </table>
+
+    \sa
+    * undoSubcommandAuto
+    * undoSubcommandBegin
+    * undoSubcommandControl
+    * undoSubcommandEnd
+    * undoSubcommandMark
+    * undoSubcommandNumber
+  */
+  virtual void undoSubcommandBack(
+    int activity);
+    
+  /** \details
+    Notification function called during an Undo <number>operation.
+    
+    \param activity [in]  Number activity.
+    \param numSteps [in]  Number of steps to be undone.    
+    \remarks
+    activity will always be:
+    
+    <table>
+    Name                Value     Description
+    kStart              0         The Undo Back has started.
+    </table>
+
+    \sa
+    * undoSubcommandAuto
+    * undoSubcommandBack
+    * undoSubcommandBegin
+    * undoSubcommandControl
+    * undoSubcommandEnd
+    * undoSubcommandMark
+  */
+  virtual void undoSubcommandNumber(
+    int activity, 
+    int numSteps);
+  
+  /** \details
+    Notification function called to indicate the 
+    number of entities in the pickfirst selection set has been changed.
+  */
+  virtual void pickfirstModified();
+  
+  /** \details
+    Notification function called to indicate the current layout has changed.
+    
+    \param newLayoutName [in]  New layout name.  
+  */
+  virtual void layoutSwitched(
+    const OdString& newLayoutName);
+  
+  /** \details
+    Notification function called to indicate an MDI document frame window has been moved or resized.
+    
+    \param hwndDocFrame [in]  HWND of document frame.
+    \param moved [in]  True if moved, false if resized.
+    
+    \sa
+    mainFrameMovedOrResized
+  */
+  virtual void docFrameMovedOrResized(
+    OdHWnd hwndDocFrame, 
+    bool moved);
+
+  /** \details
+    Notification function called to indicate the Editor main frame window has been moved or resized.
+    
+    \param hwndMainFrame [in]  HWND of the main frame.
+    \param moved [in]  True if moved, false if resized.
+    \sa
+    docFrameMovedOrResized
+  */
+  virtual void mainFrameMovedOrResized(
+    OdHWnd hwndMainFrame, 
+    bool moved);
+  
+  /** \details
+    Notification function called to indicate the mouse button has been double-clicked
+    in the graphics screen area.
+    
+    \param clickPoint [in]  WCS double-click point.
+    
+    \sa
+    beginRightClick
+  */
+  virtual void beginDoubleClick(
+    const OdGePoint3d& clickPoint);
+
+  /** \details
+    Notification function called to indicate the mouse button has been right-clicked
+    in the graphics area.
+    
+    \param clickPoint [in]  WCS right-click point.
+    
+    \sa
+    beginDoubleClick
+  */
+  virtual void beginRightClick(
+  const OdGePoint3d& clickPoint);
+  
+  /** \details
+    Notification function called to indicate the toolbar bitmap size is about to change.
+    
+    \param largeBitmaps [in]  True if and only if large bitmaps. 
+    
+	  \remarks
+	  This function is called before the operation.
+
+    \sa
+    toolbarBitmapSizeChanged
+  */
+  virtual void toolbarBitmapSizeWillChange(
+    bool largeBitmaps);
+    
+  /** \details
+    Notification function called to indicate the toolbar bitmap size has changed.
+    
+    \param largeBitmaps [in]  True if and only if large bitmaps. 
+    
+	  \remarks
+	  This function is called after the operation.
+
+    \sa
+    toolbarBitmapSizeWillChange
+  */
+  virtual void toolbarBitmapSizeChanged(
+    bool largeBitmaps);
+  
+  /** \details
+    Notification function called after objects are lazy during a partial open of a drawing.
+    
+    \param objectIDs [in]  Object IDs lazy loaded.
+  */
+      virtual void objectsLazyLoaded(const OdDbObjectIdArray& objectIds);
+  
+  /** \details
+    Notification function called whenever the Editor is about to shut down.
+    
+    \remarks
+    Calling veto() will cancel the shutdown.    
+  */
+  virtual void beginQuit();
+  
+  /** \details
+    Notification function called whenever the Editor has failed to shut down.
+
+    \sa
+    * beginQuit
+    * quitWillStart
+  */
+  virtual void quitAborted();
+
+  /** \details
+    Notification function called whenever the Editor is about to shut down.
+
+    \remarks
+    This function is called after beginQuit was not vetoed.
+    
+    \sa
+    * beginQuit
+    * quitAborted
+  */
+  virtual void quitWillStart();
+
+  /** \details
+    Notification function called whenever a modeless operation is about to start.
+
+    \param contextString [in]  Context string identifying the operation.
+    \sa
+    modelessOperationEnded
+  */
+    virtual void modelessOperationWillStart(
+    const OdString& contextString);
+
+  /** \details
+    Notification function called whenever a modeless operation has ended.
+
+    \param contextString [in]  Context string identifying the operation.
+    \sa
+    modelessOperationWillStart
+  */
+    virtual void modelessOperationEnded(const OdString& contextString);
+
+  virtual void sysVarChanged(OdDbDatabase* pDb, const OdString& varName);
+  
+  virtual void sysVarWillChange(OdDbDatabase* pDb, const OdString& varName);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdEditorReactor object pointers.
+*/
+typedef OdSmartPtr<OdEditorReactor> OdEditorReactorPtr;
+
+/** \details
+    This class manages application level OdEditorReactor instances.
+    
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdEditor : public OdRxEvent 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdEditor);
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdEditor object pointers.
+*/
+typedef OdSmartPtr<OdEditor> OdEditorPtr;
+
+TOOLKIT_EXPORT OdEditorPtr odedEditor();
+
+#include "TD_PackPop.h"
+
+#endif // _ODED_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EditorImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EditorImpl.h
new file mode 100755
index 0000000..1bdd7d7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EditorImpl.h
@@ -0,0 +1,215 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef   _ODEDITORIMPL_H_INCLUDED_
+#define   _ODEDITORIMPL_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "Editor.h"
+
+/** \details
+
+    <group OdRx_Classes> 
+*/
+
+#define RXEVENT_FIRE(method, inparams, params) \
+inline void fire_##method inparams \
+{ \
+  TD_AUTOLOCK( m_mutex ); \
+  OdArray<OdRxEventReactorPtr> reactors = m_reactors; \
+  for (unsigned i = 0; i < reactors.size(); ++i) \
+  { \
+    if (m_reactors.contains(reactors[i]))\
+      reactors[i]->method params; \
+  } \
+}
+
+#define EDEVENT_FIRE(method, inparams, params) \
+inline void fire_##method inparams \
+{ \
+  TD_AUTOLOCK( m_mutex ); \
+  OdArray<OdRxEventReactorPtr> reactors = m_reactors; \
+  for (unsigned i = 0; i < reactors.size(); ++i) \
+  { \
+    if (m_reactors.contains(reactors[i]))\
+    {\
+      OdEditorReactorPtr pReactor = OdEditorReactor::cast(reactors[i]); \
+      if (pReactor.get()) pReactor->method params; \
+    }\
+  } \
+}
+
+/** \details
+    This class defines the events that trigger OdRxEventReactor instances. 
+    Library: TD_Db
+    <group OdRx_Classes> 
+*/
+class TOOLKIT_EXPORT OdRxEventImpl : public OdEditor
+{
+protected:
+  OdArray<OdRxEventReactorPtr> m_reactors;
+  OdMutex m_mutex;
+public:
+  OdRxEventImpl() {}
+  ODRX_DECLARE_MEMBERS(OdRxEventImpl);
+  
+  void addReactor(OdRxEventReactor* pReactor);
+  void removeReactor(OdRxEventReactor* pReactor);
+
+  // notifiers
+  RXEVENT_FIRE(dwgFileOpened, (OdDbDatabase* db, const OdString& filename),(db, filename))
+  RXEVENT_FIRE(initialDwgFileOpenComplete, (OdDbDatabase* db), (db))
+  RXEVENT_FIRE(databaseConstructed, (OdDbDatabase* db), (db))
+  RXEVENT_FIRE(databaseToBeDestroyed, (OdDbDatabase* db), (db))
+  RXEVENT_FIRE(beginSave, (OdDbDatabase* db, const OdString& pIntendedName), (db, pIntendedName))
+  RXEVENT_FIRE(saveComplete, (OdDbDatabase* db, const OdString& pActualName), (db, pActualName))
+  RXEVENT_FIRE(abortSave, (OdDbDatabase* db), (db))
+  // DXF In/Out Events.
+  RXEVENT_FIRE(beginDxfIn, (OdDbDatabase* db), (db))
+  RXEVENT_FIRE(abortDxfIn, (OdDbDatabase* db), (db))
+  RXEVENT_FIRE(dxfInComplete, (OdDbDatabase* db), (db))
+  //
+  RXEVENT_FIRE(beginDxfOut, (OdDbDatabase* db), (db))
+  RXEVENT_FIRE(abortDxfOut, (OdDbDatabase* db), (db))
+  RXEVENT_FIRE(dxfOutComplete, (OdDbDatabase* db), (db))
+  // Insert Events.
+  RXEVENT_FIRE(beginInsert, (OdDbDatabase* pTo, const OdString& pBlockName, OdDbDatabase* pFrom), (pTo, pBlockName, pFrom))
+  RXEVENT_FIRE(beginInsert, (OdDbDatabase* pTo, const OdGeMatrix3d& xform, OdDbDatabase* pFrom), (pTo, xform, pFrom))
+  RXEVENT_FIRE(otherInsert, (OdDbDatabase* pTo, OdDbIdMapping& idMap, OdDbDatabase* pFrom), (pTo, idMap, pFrom))
+  RXEVENT_FIRE(abortInsert, (OdDbDatabase* pTo), (pTo))
+  RXEVENT_FIRE(endInsert, (OdDbDatabase* pTo), (pTo))
+
+  // Wblock Events.
+  RXEVENT_FIRE(wblockNotice, (OdDbDatabase* pDb), (pDb))
+  RXEVENT_FIRE(beginWblock, (OdDbDatabase* pTo, OdDbDatabase* pFrom, const OdGePoint3d& insertionPoint), (pTo, pFrom, insertionPoint))
+  RXEVENT_FIRE(beginWblock, (OdDbDatabase* pTo, OdDbDatabase* pFrom, OdDbObjectId blockId), (pTo, pFrom, blockId))
+  RXEVENT_FIRE(beginWblock, (OdDbDatabase* pTo, OdDbDatabase* pFrom), (pTo, pFrom))
+  RXEVENT_FIRE(otherWblock, (OdDbDatabase* pTo, OdDbIdMapping& m, OdDbDatabase* pFrom), (pTo, m, pFrom))
+  RXEVENT_FIRE(abortWblock, (OdDbDatabase* pTo), (pTo))
+  RXEVENT_FIRE(endWblock, (OdDbDatabase* pTo), (pTo))
+  RXEVENT_FIRE(beginWblockObjects, (OdDbDatabase* pDb, OdDbIdMapping& m), (pDb, m))
+
+  // Deep Clone Events.
+  RXEVENT_FIRE(beginDeepClone, (OdDbDatabase* pTo, OdDbIdMapping& m), (pTo, m))
+  RXEVENT_FIRE(beginDeepCloneXlation, (OdDbIdMapping& m), (m))
+  RXEVENT_FIRE(abortDeepClone, (OdDbIdMapping& m), (m))
+  RXEVENT_FIRE(endDeepClone, (OdDbIdMapping& m), (m))
+
+  // Partial Open Events.
+  RXEVENT_FIRE(partialOpenNotice, (OdDbDatabase* pDb), (pDb))
+
+  //
+  // OdEditorReactor events.
+  //
+  // file events
+  EDEVENT_FIRE(beginDwgOpen, (const OdString& filename), (filename))
+  EDEVENT_FIRE(endDwgOpen,   (const OdString& filename), (filename))
+  EDEVENT_FIRE(beginClose,   (OdDbDatabase* pDb), (pDb))
+
+  // xref events
+  EDEVENT_FIRE(beginAttach,  (OdDbDatabase* pToDb, const OdString& filename, OdDbDatabase* pFromDb), (pToDb, filename, pFromDb))
+  EDEVENT_FIRE(otherAttach,  (OdDbDatabase* pToDb, OdDbDatabase* pFromDb), (pToDb, pFromDb))
+  EDEVENT_FIRE(abortAttach,  (OdDbDatabase* pFromDb), (pFromDb))
+  EDEVENT_FIRE(endAttach,    (OdDbDatabase* pToDb), (pToDb))
+  EDEVENT_FIRE(redirected,   (OdDbObjectId newId, OdDbObjectId oldId), (newId, oldId))
+  EDEVENT_FIRE(comandeered,  (OdDbDatabase* pToDb, OdDbObjectId id, OdDbDatabase* pFromDb), (pToDb, id, pFromDb))
+  EDEVENT_FIRE(beginRestore, (OdDbDatabase* pToDb, const OdString& filename, OdDbDatabase* pFromDb), (pToDb, filename, pFromDb))
+  EDEVENT_FIRE(abortRestore, (OdDbDatabase* pToDb), (pToDb))
+  EDEVENT_FIRE(endRestore,   (OdDbDatabase* pToDb), (pToDb))
+
+  // xref subcommand events
+  EDEVENT_FIRE(xrefSubcommandBindItem,    (int activity, OdDbObjectId blockId), (activity, blockId))
+  EDEVENT_FIRE(xrefSubcommandAttachItem,  (int activity, const OdString& xrefPath), (activity, xrefPath))
+  EDEVENT_FIRE(xrefSubcommandOverlayItem, (int activity, const OdString& xrefPath), (activity, xrefPath))
+  EDEVENT_FIRE(xrefSubcommandDetachItem,  (int activity, OdDbObjectId blockId), (activity, blockId))
+  EDEVENT_FIRE(xrefSubcommandPathItem,    (int activity, OdDbObjectId blockId, const OdString& newPath), (activity, blockId, newPath))
+  EDEVENT_FIRE(xrefSubcommandReloadItem,  (int activity, OdDbObjectId blockId), (activity, blockId))
+  EDEVENT_FIRE(xrefSubcommandUnloadItem,  (int activity, OdDbObjectId blockId), (activity, blockId))
+
+  // command undo events
+  EDEVENT_FIRE(undoSubcommandAuto,   (int activity, bool state), (activity, state))
+  EDEVENT_FIRE(undoSubcommandControl,(int activity, int option), (activity, option))
+  EDEVENT_FIRE(undoSubcommandBegin,  (int activity), (activity))
+  EDEVENT_FIRE(undoSubcommandEnd,    (int activity), (activity))
+  EDEVENT_FIRE(undoSubcommandMark,   (int activity), (activity))
+  EDEVENT_FIRE(undoSubcommandBack,   (int activity), (activity))
+  EDEVENT_FIRE(undoSubcommandNumber, (int activity, int num), (activity, num))
+
+  // pickfirst selection event
+  EDEVENT_FIRE(pickfirstModified, (), ())
+
+  // layout event
+  EDEVENT_FIRE(layoutSwitched, (const OdString& newLayoutName), (newLayoutName))
+
+  // window events
+  EDEVENT_FIRE(docFrameMovedOrResized, (OdHWnd hwndDocFrame, bool moved), (hwndDocFrame, moved))
+  EDEVENT_FIRE(mainFrameMovedOrResized, (OdHWnd hwndMainFrame, bool moved), (hwndMainFrame, moved))
+
+  // mouse events
+  EDEVENT_FIRE(beginDoubleClick, (const OdGePoint3d& clickPoint), (clickPoint))
+  EDEVENT_FIRE(beginRightClick, (const OdGePoint3d& clickPoint), (clickPoint))
+
+  // toolbar events
+  EDEVENT_FIRE(toolbarBitmapSizeWillChange, (bool largeBitmaps), (largeBitmaps))
+  EDEVENT_FIRE(toolbarBitmapSizeChanged, (bool largeBitmaps), (largeBitmaps))
+
+  // partial open events
+  EDEVENT_FIRE(objectsLazyLoaded, (const OdDbObjectIdArray& objectIds), (objectIds))
+
+  // quit events
+  EDEVENT_FIRE(beginQuit,       (), ())
+  EDEVENT_FIRE(quitAborted,     (), ())
+  EDEVENT_FIRE(quitWillStart,   (), ())
+
+  // modeless operation events
+  EDEVENT_FIRE(modelessOperationWillStart, (const OdString& contextString), (contextString))
+  EDEVENT_FIRE(modelessOperationEnded, (const OdString& contextString), (contextString))
+
+  // SysVar events
+  EDEVENT_FIRE( sysVarChanged, (OdDbDatabase* pDb, const OdString& varName),(pDb, varName))
+  EDEVENT_FIRE( sysVarWillChange, (OdDbDatabase* pDb, const OdString& varName), (pDb, varName))
+};
+
+typedef OdSmartPtr<OdRxEventImpl> OdRxEventImplPtr;
+
+/** \details
+    This class defines the events that trigger OdRxEventReactor instances. 
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdEditorImpl : public OdRxEventImpl
+{
+public:
+  OdEditorImpl() {}
+  ODRX_DECLARE_MEMBERS(OdEditorImpl);
+};
+
+typedef OdSmartPtr<OdEditorImpl> OdEditorImplPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODEDITORIMPL_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EmbeddedASMEntPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EmbeddedASMEntPE.h
new file mode 100755
index 0000000..3794b31
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/EmbeddedASMEntPE.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_EMBEDDEDASMENT_PE_
+#define _OD_DB_EMBEDDEDASMENT_PE_
+
+#include "RxObject.h"
+/** <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbEmbeddedASMEntPropsPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbEmbeddedASMEntPropsPE);
+  virtual void setIsEmbeddedEnt(OdDbObject* pObj, bool bIsEmbedded = true);
+};
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Entities.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Entities.h
new file mode 100755
index 0000000..b8245da
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Entities.h
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ENTITIES_INCLUDED_
+#define _ENTITIES_INCLUDED_
+
+#include "DbArc.h"
+#include "DbAttributeDefinition.h"
+#include "DbAttribute.h"
+#include "DbBlockBegin.h"
+#include "DbModelerGeometry.h"
+#include "DbCircle.h"
+#include "DbDimension.h"
+#include "DbAlignedDimension.h"
+#include "DbEllipse.h"
+#include "DbBlockEnd.h"
+#include "DbFace.h"
+#include "DbBlockReference.h"
+#include "DbMInsertBlock.h"
+#include "DbLeader.h"
+#include "DbLine.h"
+#include "DbMline.h"
+#include "DbMText.h"
+#include "DbPoint.h"
+#include "Db2dPolyline.h"
+#include "DbRay.h"
+#include "DbSequenceEnd.h"
+#include "DbShape.h"
+#include "DbSpline.h"
+#include "DbText.h"
+#include "DbFcf.h"
+#include "DbVertex.h"
+#include "Db2dVertex.h"
+#include "Db3dPolylineVertex.h"
+#include "DbPolygonMeshVertex.h"
+#include "DbPolyFaceMeshVertex.h"
+#include "DbFaceRecord.h"
+#include "DbViewport.h"
+#include "DbXline.h"
+#include "DbHatch.h"
+#include "DbPolyline.h"
+#include "DbOle2Frame.h"
+#include "DbProxyEntity.h"
+#include "Db3dPolyline.h"
+#include "DbOrdinateDimension.h"
+#include "DbRotatedDimension.h"
+#include "Db3PointAngularDimension.h"
+#include "Db2LineAngularDimension.h"
+#include "DbRadialDimension.h"
+#include "DbDiametricDimension.h"
+#include "DbPolyFaceMesh.h"
+#include "DbPolygonMesh.h"
+#include "DbSolid.h"
+#include "DbTrace.h"
+#include "DbRegion.h"
+#include "Db3dSolid.h"
+#include "DbBody.h"
+#include "DbXrecord.h"
+
+#include "DbArcAlignedText.h"
+#include "DbRasterImage.h"
+#include "RText.h"
+#include "DbWipeout.h"
+#include "DbTable.h"
+
+#endif // _ENTITIES_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ErrorDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ErrorDefs.h
new file mode 100755
index 0000000..5138669
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ErrorDefs.h
@@ -0,0 +1,482 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// Error codes definition container
+
+//        Code                Message string
+OD_ERROR_DEF( eOk,                OD_T("No error"))
+OD_ERROR_DEF( eMakeMeProxy,       OD_T("Make me proxy"))
+OD_ERROR_DEF( eInvalidDrawing,    OD_T("Invalid Drawing"))
+OD_ERROR_DEF( eNotImplementedYet, OD_T("Not implemented yet"))
+OD_ERROR_DEF( eNotApplicable,     OD_T("Not applicable"))
+OD_ERROR_DEF( eInvalidInput,      OD_T("Invalid input"))
+OD_ERROR_DEF( eInvalidFiler,      OD_T("Invalid filer"))
+OD_ERROR_DEF( eAmbiguousInput,    OD_T("Ambiguous input"))
+OD_ERROR_DEF( eAmbiguousOutput,   OD_T("Ambiguous output"))
+OD_ERROR_DEF( eOutOfMemory,       OD_T("Out of memory"))
+OD_ERROR_DEF( eNoInterface,       OD_T("No interface"))
+OD_ERROR_DEF( eBufferTooSmall,    OD_T("Buffer is too small"))
+OD_ERROR_DEF( eInvalidOpenState,  OD_T("Invalid open state"))
+OD_ERROR_DEF( eUnsupportedMethod, OD_T("Unsupported method"))
+OD_ERROR_DEF( eEntityInInactiveLayout, OD_T("Entity is in inactive Layout"))
+OD_ERROR_DEF( eDuplicateHandle,   OD_T("Handle already exists"))
+OD_ERROR_DEF( eNullHandle,        OD_T("Null handle"))
+OD_ERROR_DEF( eBrokenHandle,      OD_T("Broken handle"))
+OD_ERROR_DEF( eUnknownHandle,     OD_T("Unknown handle"))
+OD_ERROR_DEF( eHandleInUse,       OD_T("Handle in use"))
+OD_ERROR_DEF( eNullObjectPointer, OD_T("Null object pointer"))
+OD_ERROR_DEF( eNullObjectId,      OD_T("Null object Id"))
+OD_ERROR_DEF( eNullBlockName,     OD_T("Null Block name"))
+OD_ERROR_DEF( eContainerNotEmpty, OD_T("Container is not empty"))
+OD_ERROR_DEF( eNullEntityPointer, OD_T("Null entity pointer"))
+OD_ERROR_DEF( eIllegalEntityType, OD_T("Illegal entity type"))
+OD_ERROR_DEF( eKeyNotFound,       OD_T("Key not found"))
+OD_ERROR_DEF( eDuplicateKey,      OD_T("Duplicate key"))
+OD_ERROR_DEF( eInvalidIndex,      OD_T("Invalid index"))
+OD_ERROR_DEF( eCharacterNotFound, OD_T("Character not found"))
+OD_ERROR_DEF( eDuplicateIndex,    OD_T("Duplicate index"))
+OD_ERROR_DEF( eAlreadyInDb,       OD_T("Already in Database"))
+OD_ERROR_DEF( eOutOfDisk,         OD_T("Out of disk"))
+OD_ERROR_DEF( eDeletedEntry,      OD_T("Deleted entry"))
+OD_ERROR_DEF( eNegativeValueNotAllowed,   OD_T("Negative value not allowed"))
+OD_ERROR_DEF( eInvalidExtents,    OD_T("Invalid extents"))
+OD_ERROR_DEF( eInvalidAdsName,    OD_T("Invalid ads name"))
+OD_ERROR_DEF( eInvalidSymbolTableName,OD_T("Invalid Symbol Table name"))
+OD_ERROR_DEF( eInvalidKey,        OD_T("Invalid key"))
+OD_ERROR_DEF( eWrongObjectType,   OD_T("Wrong object type"))
+OD_ERROR_DEF( eWrongDatabase,     OD_T("Wrong Database"))
+OD_ERROR_DEF( eObjectToBeDeleted, OD_T("Object to be deleted"))
+OD_ERROR_DEF( eInvalidFileVersion, OD_T("Invalid file version"))
+OD_ERROR_DEF( eAnonymousEntry,    OD_T("Anonymous entry"))
+OD_ERROR_DEF( eIllegalReplacement, OD_T("Illegal replacement"))
+OD_ERROR_DEF( eEndOfObject,       OD_T("End of oject"))
+OD_ERROR_DEF( eEndOfFile,         OD_T("Unexpected end of file"))
+OD_ERROR_DEF( eFileExists,        OD_T("File exists"))
+OD_ERROR_DEF( eCantOpenFile,      OD_T("Can't open file"))
+OD_ERROR_DEF( eFileCloseError,    OD_T("File close error"))
+OD_ERROR_DEF( eFileWriteError,    OD_T("File write error"))
+OD_ERROR_DEF( eNoFileName,        OD_T("No filename"))
+OD_ERROR_DEF( eFilerError,        OD_T("Filer error"))
+OD_ERROR_DEF( eFileAccessErr,     OD_T("File access error"))
+OD_ERROR_DEF( eFileSystemErr,     OD_T("File system error"))
+OD_ERROR_DEF( eFileInternalErr,   OD_T("File internal error"))
+OD_ERROR_DEF( eFileTooManyOpen,   OD_T("Too many open files"))
+OD_ERROR_DEF( eFileNotFound,      OD_T("File not found"))
+OD_ERROR_DEF( eUnknownFileType,   OD_T("Unknown file type"))
+OD_ERROR_DEF( eIsReading,         OD_T("Is reading"))
+OD_ERROR_DEF( eIsWriting,         OD_T("Is writing"))
+OD_ERROR_DEF( eNotOpenForRead,    OD_T("Not opened for read"))
+OD_ERROR_DEF( eNotOpenForWrite,   OD_T("Not opened for write"))
+OD_ERROR_DEF( eNotThatKindOfClass, OD_T("Not that kind of class"))
+OD_ERROR_DEF( eInvalidBlockName,  OD_T("Invalid Block name"))
+OD_ERROR_DEF( eMissingDxfField,   OD_T("Missing dxf field"))
+OD_ERROR_DEF( eDuplicateDxfField, OD_T("Duplicate dxf field"))
+OD_ERROR_DEF( eInvalidGroupCode,  OD_T("Invalid group code"))
+OD_ERROR_DEF( eInvalidResBuf,     OD_T("Invalid ResBuf"))
+OD_ERROR_DEF( eBadDxfSequence,    OD_T("Bad Dxf sequence"))
+OD_ERROR_DEF( eInvalidRoundTripR14Data,  OD_T("Invalid RoundTripR14 data"))
+OD_ERROR_DEF( eVertexAfterFace,   OD_T("Polyface Mesh vertex after face"))
+OD_ERROR_DEF( eInvalidVertexIndex, OD_T("Invalid vertex index"))
+OD_ERROR_DEF( eOtherObjectsBusy,  OD_T("Other objects busy"))
+OD_ERROR_DEF( eMustFirstAddBlockToDb, OD_T("The invoked BlockTableRecord is not database-resident yet"))
+OD_ERROR_DEF( eCannotNestBlockDefs, OD_T("Cannot nest Block definitions"))
+OD_ERROR_DEF( eDwgRecoveredOK,    OD_T(".dwg file recovered OK"))
+OD_ERROR_DEF( eDwgNotRecoverable, OD_T(".dwg file is not recoverable"))
+OD_ERROR_DEF( eDxfPartiallyRead,  OD_T(".dxf file partially read"))
+OD_ERROR_DEF( eDxfReadAborted,    OD_T(".dxf file read aborted"))
+OD_ERROR_DEF( eDxbPartiallyRead,  OD_T(".dxb file partially read"))
+OD_ERROR_DEF( eDwgCRCError,       OD_T("CRC does not match"))
+OD_ERROR_DEF( eDwgSentinelDoesNotMatch, OD_T("Sentinel does not match"))
+OD_ERROR_DEF( eDwgObjectImproperlyRead, OD_T("Object improperly read"))
+OD_ERROR_DEF( eNoInputFiler,      OD_T("No input filer"))
+OD_ERROR_DEF( eDwgNeedsAFullSave, OD_T("Drawing needs a full save"))
+OD_ERROR_DEF( eDxbReadAborted,    OD_T(".dxb file read aborted"))
+OD_ERROR_DEF( eDwkLockFileFound,  OD_T("Dwk lock file found"))
+OD_ERROR_DEF( eWasErased,         OD_T("Object was erased"))
+OD_ERROR_DEF( ePermanentlyErased, OD_T("Object was permanently erased"))
+OD_ERROR_DEF( eWasOpenForRead,    OD_T("Was open for read"))
+OD_ERROR_DEF( eWasOpenForWrite,   OD_T("Was open for write"))
+OD_ERROR_DEF( eWasOpenForUndo,    OD_T("Was open for undo"))
+OD_ERROR_DEF( eWasNotifying,      OD_T("Was notifying"))
+OD_ERROR_DEF( eWasOpenForNotify,  OD_T("Was open for notify"))
+OD_ERROR_DEF( eOnLockedLayer,     OD_T("On locked Layer"))
+OD_ERROR_DEF( eMustOpenThruOwner, OD_T("Must open thru owner"))
+OD_ERROR_DEF( eSubentitiesStillOpen, OD_T("Subentities still open"))
+OD_ERROR_DEF( eAtMaxReaders,      OD_T("At max readers"))
+OD_ERROR_DEF( eIsWriteProtected,  OD_T("Is write protected"))
+OD_ERROR_DEF( eIsXRefObject,      OD_T("Is XRef object"))
+OD_ERROR_DEF( eNotAnEntity,       OD_T("An object in entitiesToMove is not an entity"))
+OD_ERROR_DEF( eHadMultipleReaders, OD_T("Had multiple readers"))
+OD_ERROR_DEF( eInvalidBlkRecordName,  OD_T("Invalid BlockTableRecord name"))
+OD_ERROR_DEF( eDuplicateRecordName,   OD_T("Duplicate Record name"))
+OD_ERROR_DEF( eNotXrefBlock,          OD_T("Block is not an external reference definition"))
+OD_ERROR_DEF( eEmptyRecordName,       OD_T("Empty Record name"))
+OD_ERROR_DEF( eXRefDependent,         OD_T("Block depend on other XRefs"))
+OD_ERROR_DEF( eSelfReference,         OD_T("Entity references itself"))
+OD_ERROR_DEF( eMissingSymbolTable,    OD_T("Missing Symbol Table"))
+OD_ERROR_DEF( eMissingSymbolTableRec, OD_T("Missing Symbol Table record"))
+OD_ERROR_DEF( eWasNotOpenForWrite,    OD_T("Was not open for write"))
+OD_ERROR_DEF( eCloseWasNotifying,     OD_T("Close was notifying"))
+OD_ERROR_DEF( eCloseModifyAborted,    OD_T("Close modify aborted"))
+OD_ERROR_DEF( eClosePartialFailure,   OD_T("Close partial failure"))
+OD_ERROR_DEF( eCloseFailObjectDamaged,OD_T("Close fail object damaged"))
+OD_ERROR_DEF( eCannotBeErasedByCaller,OD_T("Object can't be erased"))
+OD_ERROR_DEF( eCannotBeResurrected,   OD_T("Cannot be resurrected"))
+OD_ERROR_DEF( eInsertAfter,           OD_T("Insert after"))
+OD_ERROR_DEF( eFixedAllErrors,        OD_T("Fixed all errors"))
+OD_ERROR_DEF( eLeftErrorsUnfixed,     OD_T("Left errors unfixed"))
+OD_ERROR_DEF( eUnrecoverableErrors,   OD_T("Unrecoverable errors"))
+OD_ERROR_DEF( eNoDatabase,            OD_T("No Database"))
+OD_ERROR_DEF( eXdataSizeExceeded,     OD_T("XData size exceeded"))
+OD_ERROR_DEF( eCannotSaveHatchRoundtrip, OD_T("Cannot save Hatch roundtrip data due to format limitations (they are too large)"))
+OD_ERROR_DEF( eHatchHasInconsistentPatParams, OD_T("Hatch is gradient, but either solid fill flag not set or pattern type is not pre-defined"))
+OD_ERROR_DEF( eRegappIdNotFound,      OD_T("Invalid RegApp"))
+OD_ERROR_DEF( eRepeatEntity,          OD_T("Repeat entity"))
+OD_ERROR_DEF( eRecordNotInTable,      OD_T("Record not in Table"))
+OD_ERROR_DEF( eIteratorDone,          OD_T("Iterator done"))
+OD_ERROR_DEF( eNullIterator,          OD_T("Null iterator"))
+OD_ERROR_DEF( eNotInBlock,            OD_T("Not in Block"))
+OD_ERROR_DEF( eOwnerNotInDatabase,    OD_T("Owner not in Database"))
+OD_ERROR_DEF( eOwnerNotOpenForRead,   OD_T("Owner not open for read"))
+OD_ERROR_DEF( eOwnerNotOpenForWrite,  OD_T("Owner not open for write"))
+OD_ERROR_DEF( eExplodeBeforeTransform, OD_T("Explode before transform"))
+OD_ERROR_DEF( eCannotScaleNonOrtho,   OD_T("Cannot transform by non-ortho matrix"))
+OD_ERROR_DEF( eCannotScaleNonUniformly, OD_T("Cannot transform by non-uniform scaling matrix"))
+OD_ERROR_DEF( eNotInDatabase,         OD_T("Object not in Database"))
+OD_ERROR_DEF( eNotCurrentDatabase,    OD_T("Not current Database"))
+OD_ERROR_DEF( eIsAnEntity,            OD_T("Is an entity"))
+OD_ERROR_DEF( eCannotChangeActiveViewport, OD_T("Cannot change properties of active Viewport!"))
+OD_ERROR_DEF( eNotInPaperspace,        OD_T("No active Viewport in Paper Space"))
+OD_ERROR_DEF( eCommandWasInProgress,  OD_T("Command was in progress"))
+OD_ERROR_DEF( eGeneralModelingFailure, OD_T("General modeling failure"))
+OD_ERROR_DEF( eOutOfRange,            OD_T("Out of range"))
+OD_ERROR_DEF( eNonCoplanarGeometry,   OD_T("Non coplanar geometry"))
+OD_ERROR_DEF( eDegenerateGeometry,    OD_T("Degenerate geometry"))
+OD_ERROR_DEF( eInvalidAxis,           OD_T("Invalid axis"))
+OD_ERROR_DEF( ePointNotOnEntity,      OD_T("Point not on entity"))
+OD_ERROR_DEF( eSingularPoint,         OD_T("Singular point"))
+OD_ERROR_DEF( eInvalidOffset,         OD_T("Invalid offset"))
+OD_ERROR_DEF( eNonPlanarEntity,       OD_T("Non planar entity"))
+OD_ERROR_DEF( eCannotExplodeEntity,   OD_T("Can not explode entity"))
+OD_ERROR_DEF( eStringTooLong,         OD_T("String too long"))
+OD_ERROR_DEF( eInvalidSymTableFlag,   OD_T("Invalid Symbol Table flag"))
+OD_ERROR_DEF( eUndefinedLineType,     OD_T("Undefined LineType"))
+OD_ERROR_DEF( eInvalidTextStyle,      OD_T("TextStyle is invalid"))
+OD_ERROR_DEF( eTooFewLineTypeElements, OD_T("Too few LineType elements"))
+OD_ERROR_DEF( eTooManyLineTypeElements, OD_T("Too many LineType elements"))
+OD_ERROR_DEF( eExcessiveItemCount,    OD_T("Excessive item count"))
+OD_ERROR_DEF( eIgnoredLinetypeRedef,  OD_T("Ignored LineType redefinition"))
+OD_ERROR_DEF( eBadUCS,                OD_T("Bad UCS"))
+OD_ERROR_DEF( eBadPaperspaceView,     OD_T("Bad Paper Space View"))
+OD_ERROR_DEF( eSomeInputDataLeftUnread, OD_T("Some input data left unread"))
+OD_ERROR_DEF( eNoInternalSpace,       OD_T("No internal space"))
+OD_ERROR_DEF( eInvalidDimStyle,       OD_T("Invalid DimensionStyle"))
+OD_ERROR_DEF( eInvalidLayer,          OD_T("Invalid Layer"))
+OD_ERROR_DEF( eInvalidMlineStyle,     OD_T("MLineStyle is invalid"))
+OD_ERROR_DEF( eDwgNeedsRecovery,      OD_T(".dwg file needs recovery"))
+OD_ERROR_DEF( eRecoveryFailed,        OD_T("Recovery failed"))
+OD_ERROR_DEF( eDeleteEntity,          OD_T("Delete entity"))
+OD_ERROR_DEF( eInvalidFix,            OD_T("Invalid fix"))
+OD_ERROR_DEF( eBadLayerName,          OD_T("Bad Layer name"))
+OD_ERROR_DEF( eLayerGroupCodeMissing, OD_T("Layer group code missing"))
+OD_ERROR_DEF( eBadColor,              OD_T("Bad color"))
+OD_ERROR_DEF( eBadColorIndex,         OD_T("Bad color index"))
+OD_ERROR_DEF( eBadLinetypeName,       OD_T("Bad LineType name"))
+OD_ERROR_DEF( eBadLinetypeScale,      OD_T("Bad LineType scale"))
+OD_ERROR_DEF( eBadVisibilityValue,    OD_T("Bad visibility value"))
+OD_ERROR_DEF( eProperClassSeparatorExpected, OD_T("Proper class separator expected"))
+OD_ERROR_DEF( eBadLineWeightValue,    OD_T("Bad lineweight value"))
+OD_ERROR_DEF( ePagerError,            OD_T("Pager error"))
+OD_ERROR_DEF( eOutOfPagerMemory,      OD_T("Out of pager memory"))
+OD_ERROR_DEF( ePagerWriteError,       OD_T("Pager write error"))
+OD_ERROR_DEF( eWasNotForwarding,      OD_T("Was not forwarding"))
+OD_ERROR_DEF( eInvalidIdMap,          OD_T("Invalid Id map"))
+OD_ERROR_DEF( eInvalidOwnerObject,    OD_T("Invalid owner Object"))
+OD_ERROR_DEF( eOwnerNotSet,           OD_T("Owner not set"))
+OD_ERROR_DEF( eWrongSubentityType,    OD_T("Wrong subentity type"))
+OD_ERROR_DEF( eTooManyVertices,       OD_T("Too many vertices"))
+OD_ERROR_DEF( eTooFewVertices,        OD_T("Too few vertices"))
+OD_ERROR_DEF( eNoActiveTransactions,  OD_T("No active transactions"))
+OD_ERROR_DEF( eTransactionIsActive,   OD_T("Transaction is active"))
+OD_ERROR_DEF( eNotTopTransaction,     OD_T("Not top transaction"))
+OD_ERROR_DEF( eTransactionOpenWhileCommandEnded, OD_T("Transaction open while command ended"))
+OD_ERROR_DEF( eInProcessOfCommitting, OD_T("In process of committing"))
+OD_ERROR_DEF( eNotNewlyCreated,       OD_T("Not newly created object"))
+OD_ERROR_DEF( eLongTransReferenceError, OD_T("Entity is excluded from long transaction"))
+OD_ERROR_DEF( eNoWorkSet,             OD_T("No work set"))
+OD_ERROR_DEF( eAlreadyInGroup,        OD_T("Entity already in group"))
+OD_ERROR_DEF( eNotInGroup,            OD_T("There is no entity with this Id in group"))
+OD_ERROR_DEF( eBadDwgFile,            OD_T("Bad .dwg file"))
+OD_ERROR_DEF( eInvalidREFIID,         OD_T("Invalid REFIID"))
+OD_ERROR_DEF( eInvalidNormal,         OD_T("Invalid normal"))
+OD_ERROR_DEF( eInvalidStyle,          OD_T("Invalid Style"))
+OD_ERROR_DEF( eCannotRestoreFromAcisFile, OD_T("Cannot restore from Acis file"))
+OD_ERROR_DEF( eEmptyAcisFile,          OD_T("Empty ACIS not allowed"))
+OD_ERROR_DEF( eNLSFileNotAvailable,   OD_T("NLS file not available"))
+OD_ERROR_DEF( eNotAllowedForThisProxy, OD_T("Not allowed for this proxy"))
+OD_ERROR_DEF( eNotSupportedInDwgApi,  OD_T("Not supported in API"))
+OD_ERROR_DEF( ePolyWidthLost,         OD_T("Poly width lost"))
+OD_ERROR_DEF( eNullExtents,           OD_T("Null extents"))
+OD_ERROR_DEF( eExplodeAgain,          OD_T("Explode again"))
+OD_ERROR_DEF( eBadDwgHeader,          OD_T("Bad .dwg file header"))
+OD_ERROR_DEF( eLockViolation,         OD_T("Lock violation"))
+OD_ERROR_DEF( eLockConflict,          OD_T("Lock conflict"))
+OD_ERROR_DEF( eDatabaseObjectsOpen,   OD_T("Database objects open"))
+OD_ERROR_DEF( eLockChangeInProgress,  OD_T("Lock change in progress"))
+OD_ERROR_DEF( eVetoed,                OD_T("Vetoed"))
+OD_ERROR_DEF( eNoDocument,            OD_T("No document"))
+OD_ERROR_DEF( eNotFromThisDocument,   OD_T("Not from this document"))
+OD_ERROR_DEF( eLISPActive,            OD_T("LISP active"))
+OD_ERROR_DEF( eTargetDocNotQuiescent, OD_T("Target doc not quiescent"))
+OD_ERROR_DEF( eDocumentSwitchDisabled, OD_T("Document switch disabled"))
+OD_ERROR_DEF( eInvalidContext,        OD_T("Invalid context of execution"))
+OD_ERROR_DEF( eCreateFailed,          OD_T("Create failed"))
+OD_ERROR_DEF( eCreateInvalidName,     OD_T("Create invalid name"))
+OD_ERROR_DEF( eSetFailed,             OD_T("Setting active Layout failed"))
+OD_ERROR_DEF( eDelDoesNotExist,       OD_T("Does not exist"))
+OD_ERROR_DEF( eDelIsModelSpace,       OD_T("Model Space Layout can't be deleted"))
+OD_ERROR_DEF( eDelLastLayout,         OD_T("Last Paper Space Layout can't be deleted"))
+OD_ERROR_DEF( eDelUnableToSetCurrent, OD_T("Unable to delete current"))
+OD_ERROR_DEF( eDelUnableToFind,       OD_T("Unable to find to delete"))
+OD_ERROR_DEF( eRenameDoesNotExist,    OD_T("Cannot rename non-existing"))
+OD_ERROR_DEF( eRenameIsModelSpace,    OD_T("Model Space Layout can't be renamed"))
+OD_ERROR_DEF( eRenameInvalidLayoutName, OD_T("Invalid Layout name"))
+OD_ERROR_DEF( eRenameLayoutAlreadyExists, OD_T("Layout already exists"))
+OD_ERROR_DEF( eRenameInvalidName,     OD_T("Cannot rename: the name is invalid"))
+OD_ERROR_DEF( eCopyDoesNotExist,      OD_T("Copy failed: object does not exist"))
+OD_ERROR_DEF( eCopyIsModelSpace,      OD_T("Cannot copy Model Space"))
+OD_ERROR_DEF( eCopyFailed,            OD_T("Copy failed"))
+OD_ERROR_DEF( eCopyInvalidName,       OD_T("Copy failed: invalid name"))
+OD_ERROR_DEF( eCopyNameExists,        OD_T("Copy failed: such name already exists"))
+OD_ERROR_DEF( eProfileDoesNotExist,   OD_T("Profile does not exist"))
+OD_ERROR_DEF( eInvalidProfileName,    OD_T("Invalid profile name"))
+OD_ERROR_DEF( eProfileIsInUse,        OD_T("Profile is in use"))
+OD_ERROR_DEF( eRegistryAccessError,   OD_T("Registry access error"))
+OD_ERROR_DEF( eRegistryCreateError,   OD_T("Registry create error"))
+OD_ERROR_DEF( eBadDxfFile,            OD_T("Bad Dxf file"))
+OD_ERROR_DEF( eUnknownDxfFileFormat,  OD_T("Unknown Dxf file format"))
+OD_ERROR_DEF( eMissingDxfSection,     OD_T("Missing Dxf section"))
+OD_ERROR_DEF( eInvalidDxfSectionName, OD_T("Invalid Dxf section name"))
+OD_ERROR_DEF( eNotDxfHeaderGroupCode, OD_T("Not Dxf header group code"))
+OD_ERROR_DEF( eUndefinedDxfGroupCode, OD_T("Undefined Dxf group code"))
+OD_ERROR_DEF( eNotInitializedYet,     OD_T("Not initialized yet"))
+OD_ERROR_DEF( eInvalidDxf2dPoint,     OD_T("Invalid Dxf 2d point"))
+OD_ERROR_DEF( eInvalidDxf3dPoint,     OD_T("Invalid Dxf 3d point"))
+OD_ERROR_DEF( eBadlyNestedAppData,    OD_T("Badly nested AppData"))
+OD_ERROR_DEF( eIncompleteBlockDefinition, OD_T("Incomplete Block definition"))
+OD_ERROR_DEF( eIncompleteComplexObject, OD_T("Incomplete complex object"))
+OD_ERROR_DEF( eBlockDefInEntitySection, OD_T("Block definition in entity section"))
+OD_ERROR_DEF( eNoBlockBegin,          OD_T("No BlockBegin"))
+OD_ERROR_DEF( eDuplicateLayerName,    OD_T("Duplicate Layer name"))
+OD_ERROR_DEF( eBadPlotStyleName,      OD_T("Bad PlotStyle name"))
+OD_ERROR_DEF( eDuplicateBlockName,    OD_T("Duplicate Block name"))
+OD_ERROR_DEF( eBadPlotStyleType,      OD_T("Bad PlotStyle type"))
+OD_ERROR_DEF( eBadPlotStyleNameHandle, OD_T("Bad PlotStyle name handle"))
+OD_ERROR_DEF( eUndefineShapeName,     OD_T("Undefined Shape name"))
+OD_ERROR_DEF( eDuplicateBlockDefinition, OD_T("Duplicate Block definition"))
+OD_ERROR_DEF( eMissingBlockName,      OD_T("Missing Block name"))
+OD_ERROR_DEF( eBinaryDataSizeExceeded, OD_T("Binary data size exceeded"))
+OD_ERROR_DEF( eObjectIsReferenced,    OD_T("Object is referenced"))
+OD_ERROR_DEF( eInvalidThumbnailBitmap, OD_T("Invalid thumbnail bitmap"))
+OD_ERROR_DEF( eGuidNoAddress,         OD_T("eGuidNoAddress"))
+OD_ERROR_DEF( eMustBe0to2,            OD_T("Must be 0 to 2"))
+OD_ERROR_DEF( eMustBe0to3,            OD_T("Must be 0 to 3"))
+OD_ERROR_DEF( eMustBe0to4,            OD_T("Must be 0 to 4"))
+OD_ERROR_DEF( eMustBe0to5,            OD_T("Must be 0 to 5"))
+OD_ERROR_DEF( eMustBe0to8,            OD_T("Must be 0 to 8"))
+OD_ERROR_DEF( eMustBe1to8,            OD_T("Must be 1 to 8"))
+OD_ERROR_DEF( eMustBe1to15,           OD_T("Must be 1 to 15"))
+OD_ERROR_DEF( eMustBePositive,        OD_T("Must be positive"))
+OD_ERROR_DEF( eMustBeNonNegative,     OD_T("Must be non negative"))
+OD_ERROR_DEF( eMustBeNonZero,         OD_T("Must be non zero"))
+OD_ERROR_DEF( eMustBe1to6,            OD_T("Must be 1 to 6"))
+OD_ERROR_DEF( eNoPlotStyleTranslationTable, OD_T("No PlotStyle translation table"))
+OD_ERROR_DEF( ePlotStyleInColorDependentMode, OD_T("PlotStyle is in color dependent mode"))
+OD_ERROR_DEF( eMaxLayouts,            OD_T("Max Layouts"))
+OD_ERROR_DEF( eNoClassId,             OD_T("No ClassId"))
+OD_ERROR_DEF( eUndoOperationNotAvailable, OD_T("Undo operation is not available"))
+OD_ERROR_DEF( eUndoNoGroupBegin,      OD_T("No undo group begin"))
+OD_ERROR_DEF( eHatchTooDense,         OD_T("Hatch is too dense - ignoring"))
+OD_ERROR_DEF( eOpenFileCancelled,     OD_T("File open cancelled"))
+OD_ERROR_DEF( eNotHandled,            OD_T("Not handled"))
+OD_ERROR_DEF( eLibIntegrityBroken,    OD_T("Library integrity is broken"))
+OD_ERROR_DEF( eAlreadyActive,         OD_T("Already active"))
+OD_ERROR_DEF( eAlreadyInactive,       OD_T("Already inactive"))
+OD_ERROR_DEF( eCodepageNotFound,      OD_T("Codepage not found"))
+OD_ERROR_DEF( eIncorrectInitFileVersion, OD_T("Incorrect init file version"))
+OD_ERROR_DEF( eInternalFreetypeError, OD_T("Internal error in Freetype font library"))
+OD_ERROR_DEF( eNoUCSPresent,          OD_T("No UCS present in object"))
+OD_ERROR_DEF( eBadObjType,            OD_T("Object has wrong type"))
+OD_ERROR_DEF( eBadProtocolExtension,  OD_T("Protocol extension object is bad"))
+OD_ERROR_DEF( eHatchInvalidPatternName, OD_T("Bad name for Hatch pattern"))
+OD_ERROR_DEF( eNotTransactionResident, OD_T("Object is not transaction resident"))
+OD_ERROR_DEF( eDwgFileIsEncrypted,    OD_T(".dwg file is encrypted"))
+OD_ERROR_DEF( eInvalidPassword,       OD_T("The password is incorrect"))
+OD_ERROR_DEF( eDecryptionError,       OD_T("HostApp cannot decrypt data"))
+OD_ERROR_DEF( eArithmeticOverflow,    OD_T("An arithmetic overflow"))
+OD_ERROR_DEF( eSkipObjPaging,         OD_T("Paging skips the object"))
+OD_ERROR_DEF( eStopPaging,            OD_T("Paging is stoped"))
+OD_ERROR_DEF( eInvalidDimStyleResBufData,OD_T("Invalid ResBuf with DimensionStyle data"))
+OD_ERROR_DEF( eExtendedError,         OD_T("Extended error"))
+OD_ERROR_DEF( eGripOpFailure,         OD_T("The grip operation has failed"))
+OD_ERROR_DEF( eGripOpNoRedrawGrip,    OD_T("NoRedrawGrip"))
+OD_ERROR_DEF( eGripOpGripHotToWarm,   OD_T("GripHotToWarm"))
+OD_ERROR_DEF( eGripOpGetNewGripPoints, OD_T("GetNewGripPoints"))
+OD_ERROR_DEF( eUnsupportedEarlyDwgVersion, OD_T("Unsupported early .dwg file version"))
+OD_ERROR_DEF( eCannotChangeColumnType, OD_T("Cannot change column type"))
+OD_ERROR_DEF( eCustomSizeNotPossible, OD_T("Custom size not possible"))
+OD_ERROR_DEF( eDataLinkAdapterNotFound      , OD_T("DataLink adapter not found"))
+OD_ERROR_DEF( eDataLinkBadConnectionString    , OD_T("DataLink bad connection string"))
+OD_ERROR_DEF( eDataLinkConnectionFailed       , OD_T("DataLink connection failed"))
+OD_ERROR_DEF( eDataLinkInvalidAdapterId       , OD_T("DataLink invalid adapter id"))
+OD_ERROR_DEF( eDataLinkNotFound               , OD_T("DataLink not found"))
+OD_ERROR_DEF( eDataLinkNotUpdatedYet          , OD_T("DataLink not updated yet"))
+OD_ERROR_DEF( eDataLinkOtherError             , OD_T("DataLink other error"))
+OD_ERROR_DEF( eDataLinkSourceIsWriteProtected , OD_T("DataLink source is write protected"))
+OD_ERROR_DEF( eDataLinkSourceNotFound         , OD_T("DataLink source not found"))
+OD_ERROR_DEF( eDeviceNotFound,                OD_T("Device not found"))
+OD_ERROR_DEF( eDwgCrcDoesNotMatch,                OD_T("CRC does not match"))
+OD_ERROR_DEF( eDwgShareDemandLoad,            OD_T(".dwg file share demand load"))
+OD_ERROR_DEF( eDwgShareReadAccess,            OD_T(".dwg file share read access"))
+OD_ERROR_DEF( eDwgShareWriteAccess,           OD_T(".dwg file share write access"))
+OD_ERROR_DEF( eFileMissingSections,           OD_T("Missing section"))
+OD_ERROR_DEF( eFileSharingViolation,          OD_T("File sharing violation"))
+OD_ERROR_DEF( eFiniteStateMachineError, OD_T("Finite state machine error"))
+OD_ERROR_DEF( eGraphicsNotGenerated, OD_T("Graphics not generated"))
+OD_ERROR_DEF( eHandleExists, OD_T("Handle exists"))
+OD_ERROR_DEF( eIgnoredLinetypeRedefinition, OD_T("Ignored LineType redefinition"))
+OD_ERROR_DEF( eIncompatiblePlotSettings, OD_T("Incompatible PlotSettings"))
+OD_ERROR_DEF( eInternetBadPath, OD_T("Bad path"))
+OD_ERROR_DEF( eInternetBase, OD_T("Base"))
+OD_ERROR_DEF( eInternetCreateInternetSessionFailed, OD_T("CreateInternetSessionFailed"))
+OD_ERROR_DEF( eInternetDirectoryFull              , OD_T("DirectoryFull              "))
+OD_ERROR_DEF( eInternetDiskFull                   , OD_T("DiskFull                   "))
+OD_ERROR_DEF( eInternetFileAccessDenied           , OD_T("FileAccessDenied           "))
+OD_ERROR_DEF( eInternetFileGenericError           , OD_T("FileGenericError           "))
+OD_ERROR_DEF( eInternetFileNotFound               , OD_T("FileNotFound               "))
+OD_ERROR_DEF( eInternetFileOpenFailed             , OD_T("FileOpenFailed             "))
+OD_ERROR_DEF( eInternetGenericException           , OD_T("GenericException           "))
+OD_ERROR_DEF( eInternetHardwareError              , OD_T("HardwareError              "))
+OD_ERROR_DEF( eInternetHttpAccessDenied           , OD_T("HttpAccessDenied           "))
+OD_ERROR_DEF( eInternetHttpBadGateway             , OD_T("HttpBadGateway             "))
+OD_ERROR_DEF( eInternetHttpBadMethod              , OD_T("HttpBadMethod              "))
+OD_ERROR_DEF( eInternetHttpBadRequest             , OD_T("HttpBadRequest             "))
+OD_ERROR_DEF( eInternetHttpConflict               , OD_T("HttpConflict               "))
+OD_ERROR_DEF( eInternetHttpGatewayTimeout         , OD_T("HttpGatewayTimeout         "))
+OD_ERROR_DEF( eInternetHttpLengthRequired         , OD_T("HttpLengthRequired         "))
+OD_ERROR_DEF( eInternetHttpNoAcceptableResponse   , OD_T("HttpNoAcceptableResponse   "))
+OD_ERROR_DEF( eInternetHttpNotSupported           , OD_T("HttpNotSupported           "))
+OD_ERROR_DEF( eInternetHttpObjectNotFound         , OD_T("HttpObjectNotFound         "))
+OD_ERROR_DEF( eInternetHttpOpenRequestFailed      , OD_T("HttpOpenRequestFailed      "))
+OD_ERROR_DEF( eInternetHttpPaymentRequired        , OD_T("HttpPaymentRequired        "))
+OD_ERROR_DEF( eInternetHttpPreconditionFailure    , OD_T("HttpPreconditionFailure    "))
+OD_ERROR_DEF( eInternetHttpProxyAuthorizationRequired , OD_T("HttpProxyAuthorizationRequired "))
+OD_ERROR_DEF( eInternetHttpRequestForbidden           , OD_T("HttpRequestForbidden           "))
+OD_ERROR_DEF( eInternetHttpRequestTooLarge            , OD_T("HttpRequestTooLarge            "))
+OD_ERROR_DEF( eInternetHttpResourceGone               , OD_T("HttpResourceGone               "))
+OD_ERROR_DEF( eInternetHttpServerError                , OD_T("HttpServerError                "))
+OD_ERROR_DEF( eInternetHttpServiceUnavailable         , OD_T("HttpServiceUnavailable         "))
+OD_ERROR_DEF( eInternetHttpTimedOut                   , OD_T("HttpTimedOut                   "))
+OD_ERROR_DEF( eInternetHttpUnsupportedMedia           , OD_T("HttpUnsupportedMedia           "))
+OD_ERROR_DEF( eInternetHttpUriTooLong                 , OD_T("HttpUriTooLong                 "))
+OD_ERROR_DEF( eInternetHttpVersionNotSupported        , OD_T("HttpVersionNotSupported        "))
+OD_ERROR_DEF( eInternetInCache                        , OD_T("InCache                        "))
+OD_ERROR_DEF( eInternetInternetError                  , OD_T("InternetError                  "))
+OD_ERROR_DEF( eInternetInternetSessionConnectFailed   , OD_T("InternetSessionConnectFailed   "))
+OD_ERROR_DEF( eInternetInternetSessionOpenFailed      , OD_T("InternetSessionOpenFailed      "))
+OD_ERROR_DEF( eInternetInvalidAccessType              , OD_T("InvalidAccessType              "))
+OD_ERROR_DEF( eInternetInvalidFileHandle              , OD_T("InvalidFileHandle              "))
+OD_ERROR_DEF( eInternetNoInternetSupport              , OD_T("NoInternetSupport              "))
+OD_ERROR_DEF( eInternetNotAnUrl                       , OD_T("NotAnUrl                       "))
+OD_ERROR_DEF( eInternetNotImplemented                 , OD_T("NotImplemented                 "))
+OD_ERROR_DEF( eInternetNoWinInternet                  , OD_T("NoWinInternet                  "))
+OD_ERROR_DEF( eInternetOK                             , OD_T("OK                             "))
+OD_ERROR_DEF( eInternetOldWinInternet                 , OD_T("OldWinInternet                 "))
+OD_ERROR_DEF( eInternetProtocolNotSupported           , OD_T("ProtocolNotSupported           "))
+OD_ERROR_DEF( eInternetSharingViolation               , OD_T("SharingViolation               "))
+OD_ERROR_DEF( eInternetTooManyOpenFiles               , OD_T("TooManyOpenFiles               "))
+OD_ERROR_DEF( eInternetUnknownError                   , OD_T("UnknownError                   "))
+OD_ERROR_DEF( eInternetUserCancelledTransfer          , OD_T("UserCancelledTransfer          "))
+OD_ERROR_DEF( eInternetValidUrl, OD_T("Valid URL"))
+OD_ERROR_DEF( eInvalidEngineState, OD_T("Invalid engine state"))
+OD_ERROR_DEF( eInvalidFaceVertexIndex, OD_T("Invalid Face vertex index"))
+OD_ERROR_DEF( eInvalidFileExtension, OD_T("Invalid file extension"))
+OD_ERROR_DEF( eInvalidMeshVertexIndex, OD_T("Invalid Mesh vertex index"))
+OD_ERROR_DEF( eInvalidObjectId, OD_T("Invalid object Id"))
+OD_ERROR_DEF( eInvalidPlotArea, OD_T("Invalid plot area"))
+OD_ERROR_DEF( eInvalidPlotInfo, OD_T("Invalid plot info"))
+OD_ERROR_DEF( eInvalidView, OD_T("Invalid View"))
+OD_ERROR_DEF( eInvalidWindowArea, OD_T("Invalid window area"))
+OD_ERROR_DEF( eInvalidXrefObjectId, OD_T("Invalid Xref object Id"))
+OD_ERROR_DEF( eLayoutNotCurrent, OD_T("Layout not current"))
+OD_ERROR_DEF( eMakeMeProxyAndResurrect, OD_T("Make me proxy and resurrect"))
+OD_ERROR_DEF( eMustPlotToFile, OD_T("Must plot to file"))
+OD_ERROR_DEF( eCannotPlotToFile, OD_T("Cannot plot to file"))
+OD_ERROR_DEF( eNoCurrentConfig, OD_T("No current config"))
+OD_ERROR_DEF( eNoErrorHandler, OD_T("No error handler"))
+OD_ERROR_DEF( eNoLabelBlock, OD_T("No label Block"))
+OD_ERROR_DEF( eNoLayout, OD_T("No Layout"))
+OD_ERROR_DEF( eNoMatchingMedia, OD_T("No matching media"))
+OD_ERROR_DEF( eNonePlotDevice, OD_T("None plot device"))
+OD_ERROR_DEF( eNoThumbnailBitmap, OD_T("No thumbnail bitmap"))
+OD_ERROR_DEF( eNotMultiPageCapable, OD_T("Not multipage capable"))
+OD_ERROR_DEF( eNoViewAssociation, OD_T("No View association"))
+OD_ERROR_DEF( eNullPtr, OD_T("Null Ptr"))
+OD_ERROR_DEF( eNumberOfCopiesNotSupported, OD_T("Number of copies not supported"))
+OD_ERROR_DEF( eObsoleteFileFormat, OD_T("Obsolete file format"))
+OD_ERROR_DEF( ePageCancelled, OD_T("Page cancelled"))
+OD_ERROR_DEF( ePlotAlreadyStarted, OD_T("Plot already started"))
+OD_ERROR_DEF( ePlotCancelled, OD_T("Plot cancelled"))
+OD_ERROR_DEF( eRepeatedDwgRead, OD_T("Repeated .dwg file read"))
+OD_ERROR_DEF( eRowsMustMatchColumns, OD_T("Rows must match columns"))
+OD_ERROR_DEF( eSecErrorCipherNotSupported              , OD_T("Error cipher not supported"))
+OD_ERROR_DEF( eSecErrorComputingSignature              , OD_T("Error computing signature"))
+OD_ERROR_DEF( eSecErrorDecryptingData                  , OD_T("Error decrypting data"))
+OD_ERROR_DEF( eSecErrorEncryptingData                  , OD_T("Error encrypting data"))
+OD_ERROR_DEF( eSecErrorGeneratingTimestamp             , OD_T("Error generating timestamp"))
+OD_ERROR_DEF( eSecErrorReadingFile                     , OD_T("Error reading file"))
+OD_ERROR_DEF( eSecErrorWritingFile                     , OD_T("Error writing file"))
+OD_ERROR_DEF( eSecErrorWritingSignature                , OD_T("Error writing signature"))
+OD_ERROR_DEF( eSecInitializationFailure                , OD_T("Initialization failure"))
+OD_ERROR_DEF( eSecInvalidDigitalId                     , OD_T("Invalid digital id"))
+OD_ERROR_DEF( eLoadFailed                              , OD_T("Load failed"))
+OD_ERROR_DEF( eSubSelectionSetEmpty                    , OD_T("SubSelectionSet empty"))
+OD_ERROR_DEF( eUnableToGetLabelBlock                   , OD_T("Unable to get label Block"))
+OD_ERROR_DEF( eUnableToGetViewAssociation              , OD_T("Unable to get View association"))
+OD_ERROR_DEF( eUnableToRemoveAssociation               , OD_T("Unable to remove association"))
+OD_ERROR_DEF( eUnableToSetLabelBlock                   , OD_T("Unable to set label Block"))
+OD_ERROR_DEF( eUnableToSetViewAssociation              , OD_T("Unable to set View association"))
+OD_ERROR_DEF( eUnableToSyncModelView                   , OD_T("Unable to sync Model View"))
+OD_ERROR_DEF( eUnsupportedFileFormat                   , OD_T("Unsupported file format"))
+OD_ERROR_DEF( eUserBreak                               , OD_T("User break"))
+OD_ERROR_DEF( eWasNotErased                            , OD_T("Was not erased"))
+OD_ERROR_DEF( eWrongCellType                           , OD_T("Wrong cell type"))
+OD_ERROR_DEF( eTxError                                 , OD_T("Tx application error"))
+OD_ERROR_DEF( eHiddenLayerNotAllowed                   , OD_T("Hidden Layer not allowed"))
+OD_ERROR_DEF( eInvalidLicense                          , OD_T("Invalid license"))
+
+OD_ERROR_DEF( eCryptProviderUnavailable                , OD_T("The cryptography service provider \"%ls\" used to protect this drawing is not installed on this computer"))
+#define eNotImplemented eNotImplementedYet
+#define eCannotBeErased eCannotBeErasedByCaller
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_InvalidInput.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_InvalidInput.h
new file mode 100755
index 0000000..a33de91
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_InvalidInput.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODERROR_INVALIDINPUT_INCLUDED
+#define _ODERROR_INVALIDINPUT_INCLUDED
+
+#ifdef _DEBUG
+#define OdError_InvalidInput(DEBUG_COMMENT) OdError(DEBUG_COMMENT, OdError(eInvalidInput))
+#else
+#define OdError_InvalidInput(DEBUG_COMMENT) OdError(eInvalidInput)
+#endif
+
+#endif // _ODERROR_INVALIDINPUT_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_NotThatKindOfClass.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_NotThatKindOfClass.h
new file mode 100755
index 0000000..d4173b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Error_NotThatKindOfClass.h
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_ERROR_NOT_THAT_KIND_OF_CLASS__
+#define __OD_ERROR_NOT_THAT_KIND_OF_CLASS__
+
+#include "OdError.h"
+#include "TD_PackPush.h"
+
+class OdRxClass;
+
+/** \details
+
+    <group Error_Classes>
+*/
+class FIRSTDLL_EXPORT OdError_NotThatKindOfClass : public OdError
+{
+public:
+  OdError_NotThatKindOfClass(const OdRxClass* fromClass, const OdRxClass* toClass);
+  OdError_NotThatKindOfClass(const OdError_NotThatKindOfClass&);
+  ~OdError_NotThatKindOfClass();
+
+  OdString fromClassName();
+  OdString toClassName();
+};
+
+#include "TD_PackPop.h"
+
+#endif // __OD_ERROR_NOT_THAT_KIND_OF_CLASS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FdField.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FdField.h
new file mode 100755
index 0000000..983bf6c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FdField.h
@@ -0,0 +1,442 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _FdField_h_Included_
+#define _FdField_h_Included_
+
+#include "RxObject.h"
+#include "RxDictionary.h"
+#include "DbField.h"
+
+class OdDbField;
+class OdDbEvalVariant;
+class OdFieldValue;
+class OdFdFieldEngineImpl;
+class OdFdFieldResult;
+class OdDbDatabase;
+
+#include "TD_PackPush.h"
+
+/** \details
+  This class is an abstract base class that defines the field evaluator interface.
+  \remarks
+  Applications implement evaluators for fields by deriving from this class. 
+  The evaluator object instantiated from this class is obtained from the field 
+  evaluator loader using the evaluator ID stored in the field. An evaluator class 
+  can be implemented for each type of field, or a single evaluator class can support 
+  multiple types of fields.
+  <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdFdFieldEvaluator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFdFieldEvaluator);
+
+  /** \details
+    Returns the evaluator IDs supported by this evaluator.
+    \remarks
+    This function can return more than one evaluator ID if the evaluator 
+    supports multiple IDs. If more than one ID is returned, the evaluator 
+    IDs are separated by commas.
+  */
+  virtual const OdString evaluatorId() const = 0;
+  /** \details
+    Returns the evaluator ID for the specified field code.
+    \remarks
+    This version will be called to find an evaluator for a field code 
+    that does not have an evaluator ID set. Implementations of this function 
+    should examine the field code. If the field code is recognized by the evaluator 
+    and can be handled by it, then this function should return the evaluator ID. 
+    \param pField [in]  Input field for which to return an evaluator ID 
+  */
+  virtual const OdString evaluatorId(OdDbField* pField) const = 0;
+  /** \details
+    This function is called by the
+    field framework calls this method to initialize a new field.
+    \remarks
+    This method is called after setting a field code in the field and 
+    before compile() is called. The evaluator can change the default 
+    options that are set in the field when it is created. This method 
+    will be called only once for a field. 
+    \param pField [in]  Input field to initialize 
+  */
+  virtual OdResult initialize(OdDbField* pField) const = 0; 
+
+//    The field framework calls this method to compile a field when the field code is changed.   
+  
+  /** \details
+    This function is called by the frame framework
+    to compile a field when the field code is changed.
+    \remarks
+    The evaluator can do any parsing of the field code here and store the parsed data in the 
+    field. This method will be called only when the field code is changed, unlike evaluate(), 
+    which is called whenever the field needs to be evaluated.
+    \param pField [in]  Input field to compile 
+    \param pDb [in]  Input database pointer 
+    \param pResult [in]  Input field result object to set the compilation status 
+  */
+  virtual OdResult compile(OdDbField* pField, 
+    OdDbDatabase* pDb,
+    OdFdFieldResult* pResult) const = 0;
+
+//  The field framework calls this method to evaluate a field whenever the field needs 
+//    to be evaluated.
+
+  /** \details
+    This function is called by the field framework when the field needs to be evaluated.
+    \remarks
+    A field will be evaluated only when the evaluation option set in 
+    the field matches the context in which the field evaluation is invoked. For example,
+    if a field option is set to evaluate only manually, then it will be evaluated only 
+    when the user updates the specific field or all fields in the drawing manually.
+
+    The evaluator should evaluate the field and set the evaluated value using 
+    OdFdFieldResult::setFieldValue() and the error status using OdFdFieldResult::setEvaluationStatus() 
+    in the passed result object, which in turn will set them in the field object.
+
+    The passed database pointer may be null if the field is not database resident and a 
+    database could not be obtained in the current context. If the field evaluation requires 
+    a database, then this method can set the evaluation error status in the field result object 
+    and return an error. 
+
+    If the evaluation fails for any reason, the previously cached result in the field object can 
+    be left intact and used as the field value. Alternatively, the cached result can be deleted 
+    and substituted with an error string (for example, "#ERR"), which will be displayed as field 
+    value.
+
+    \param pField [in]  Input field to evaluate 
+    \param nContext [in]  Input context in which the field is evaluated; this context flag is passed to the evaluator and can be one of the predefined OdDbField::EvalContext enum flags or a user-defined context flag 
+    \param pDb [in]  Input database pointer, which can be null if a database could not be obtained in the current context 
+    \param pResult [in]  Input field result object to set the evaluation result and status 
+  */
+  virtual OdResult evaluate(OdDbField* pField, 
+    int nContext, 
+    OdDbDatabase* pDb, 
+    OdFdFieldResult* pResult) const = 0;
+
+//      The field framework calls this method when a field is queried 
+//      to get the evaluated field value as a string. The evaluator can 
+
+  /** \details
+      This function is called by the field framework
+      when a field is queried to get the evaluated field value as a string. 
+      \remarks
+      The evaluator can 
+      implement this method to support custom formatting of field values. 
+      If the evaluator does not implement this method, the standard data types will 
+      be formatted using default formats.
+
+      \param pField [in]  Field whose value is to be formatted 
+      \param pszValue [out]  Pointer to the string that is the field value formatted as a string
+  */
+  virtual OdResult format(OdDbField* pField, OdString& pszValue) const = 0;
+};
+
+typedef OdSmartPtr<OdFdFieldEvaluator> OdFdFieldEvaluatorPtr;
+
+/** \details
+  This class is used to load the evaluators required for evaluating fields. 
+  \remarks
+  This class acts as the interface between the field framework and the applications 
+  that implement evaluators. An application that implements evaluators should derive 
+  from this class and register an object of this class with the field engine when 
+  the application is loaded. The registered loader is used by the engine to obtain 
+  the evaluator object. Only one loader object is required for an application and 
+  it can support multiple evaluators. The loader objects are maintained globally and 
+  are used by all open documents.
+  <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdFdFieldEvaluatorLoader : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFdFieldEvaluatorLoader);
+
+  /** \details
+    The field engine calls this method to get the evaluator using the evaluator ID 
+    and uses the evaluator to evaluate the field. 
+    \param pszEvalId [in]  Input evaluator ID for which the evaluator is required 
+  */
+  virtual OdFdFieldEvaluator* getEvaluator(
+    const OdString& pszEvalId) = 0;
+
+  /** \details
+    Finds an evaluator for a field that does not have an evaluator ID. 
+    \param pField [in]  Input field for which to find an evaluator 
+    \param pszEvalId [out]  Output pointer to receive the evaluator ID 
+  */
+  virtual OdFdFieldEvaluator * findEvaluator(
+    OdDbField* pField, 
+    OdString& pszEvalId) = 0;
+};
+
+/** \details
+  This class is used to get notifications when fields in a database are evaluated.
+  <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdFdFieldReactor : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFdFieldReactor);
+
+  /** \details
+    Notification function called before one or more fields in a database are evaluated.
+    \param nContext [in]  Input evaluation context 
+    \param pDb [in]  Input pointer to database in which the fields are evaluated 
+  */
+  virtual void beginEvaluateFields(
+    int nContext, 
+    OdDbDatabase* pDb);
+  
+  /** \details
+    Notification function called after one or more fields in a database are evaluated.
+    \param nContext [in]  Input evaluation context 
+    \param pDb [in]  Input pointer to database in which the fields are evaluated 
+  */
+  virtual void endEvaluateFields(
+    int nContext, 
+    OdDbDatabase* pDb);
+};
+
+typedef OdArray<OdFdFieldReactor*> FieldReactors;
+
+/** \details
+  This class manages the evaluation of fields. 
+  \note
+  The field engine is a global one-per-session object. 
+
+  The field evaluators should register their loader with 
+  the engine during application startup
+  <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdFdFieldEngine : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFdFieldEngine);
+  virtual ~OdFdFieldEngine(){}
+  /** \details
+    Registers the evaluator loader with the engine. 
+    \remarks The engine searches the registered
+    evaluator loaders to find the appropriate evaluator for evaluating fields. Field 
+    evaluators should register the evaluator loader with the field engine during application
+    startup.
+    \param pLoader [in]  Input evaluator loader to register 
+  */
+  virtual void registerEvaluatorLoader(OdFdFieldEvaluatorLoader* pLoader) = 0;
+
+  /** \details
+    Unregisters the evaluator loader from the engine. 
+    \remarks
+    Field evaluator modules 
+    should unregister the evaluator loader when the module is unloaded, 
+    before deleting the loader object.
+    \param pLoader [in]  Input evaluator loader to unregister 
+  */
+  virtual void unregisterEvaluatorLoader(OdFdFieldEvaluatorLoader* pLoader) = 0;
+
+  /** \details
+    Returns the number of registered field evaluator loaders.
+  */
+  virtual int evaluatorLoaderCount() const = 0;
+
+  /** \details
+    Returns the field evaluator loader at the specified index.
+    \remarks
+    This function can be used with evaluatorLoaderCount() to 
+    enumerate the evaluator loaders.
+    \param inputIndex [in]  Input index for which to get the field evaluator loader; the index is zero based and should be less than the number of registered evaluator loaders.
+  */
+  virtual OdFdFieldEvaluatorLoader * getEvaluatorLoader(int inputIndex) = 0;
+
+  /** \details
+    Returns the field evaluator for the specified evaluator ID.
+    \remarks
+    Returns null if a field evaluator could not be found for the evaluator ID.
+    \param pszEvalId [in]  Input evaluator ID for which to find the field evaluator 
+  */
+  virtual OdFdFieldEvaluator * getEvaluator (
+    const OdString& pszEvalId) = 0;
+
+  /** \details
+    Returns an an evaluator for the specified field from the set of registered evaluators
+    if the field does not have an evaluator ID. 
+    \param pField [in]  Input field for which to find an evaluator 
+    \param pszEvalId [out]  Output pointer to receive the evaluator ID 
+    \remarks
+    Returns the field evaluator for the specified field, or 
+    null if a field evaluator could not be found.
+
+  */
+  virtual OdFdFieldEvaluator * findEvaluator(
+    OdDbField* pField,
+    OdString& pszEvalId) = 0;
+
+  /** \details
+    Adds the field reactor to the field framework.
+    \param pReactor [in]  Input pointer to the reactor to be added 
+  */
+  virtual void addFieldReactor(OdFdFieldReactor* pReactor) = 0;
+  
+  /** \details
+    Removes the field reactor from the field framework.
+    \param pReactor [in] Input pointer to field reactor to remove 
+  */
+  virtual void removeFieldReactor(OdFdFieldReactor* pReactor) = 0;
+};
+
+typedef OdSmartPtr<OdFdFieldEngine> OdFdFieldEnginePtr;
+#define ODFD_FIELD_ENGINE             OD_T("FieldEngine")
+/** \details
+  Returns the pointer to the field engine. There is only one field engine object per session.
+*/
+TOOLKIT_EXPORT OdFdFieldEnginePtr oddbGetFieldEngine();
+
+/** \details
+  This class is used by the evaluators to set the evaluation status and 
+  evaluation result in the field. 
+  \remarks
+  This object is passed to the evaluators 
+  during compilation and evaluation. This object cannot be instantiated.
+  <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdFdFieldResult : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFdFieldResult);
+  OdFdFieldResult();
+  
+  /** \details
+    Sets the evaluation result in the field.
+    \param pValue [in]  Input evaluation to set in the field.
+    \remarks
+    If pValue is null,the cached evaluation is deleted. 
+  */
+  virtual void setFieldValue(const OdFieldValue* pValue) = 0;
+  
+  /** \details
+    Sets the evaluation status in the field.
+    \param errorStatus [in]  Error status
+    \param errorCode [in]  Extended error code or zero for success
+    \param errorMessage [in]  Error message
+  */
+  virtual void setEvaluationStatus(OdDbField::EvalStatus errorStatus, int errorCode = 0, const OdString& errorMessage = OdString()) = 0;
+};
+
+/** \details
+    This abstract class is the Field Engine Protocol Extension class.
+    Its purpose is to provide services necessary for fields evaluation implemented at the host application level.
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdFdFieldEnginePE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFdFieldEnginePE);
+  /** \details
+    Retrieves sheet set property value.
+
+    \param propValue [out]  result property value
+    \param compName [in]  component name
+    \param propName [in]  property name
+    \param pDb [in]  database
+
+    Returns 'true' if the property was successfully retrieved to 'propValue', otherwise returns 'false'.
+  */
+  virtual bool getSheetSetProperty(OdString& propValue, const OdString& compName, const OdString& propName, OdDbDatabase* pDb) = 0;
+
+  /** \details
+    Parses property string of ObjProp field code retrieving object id and property type.
+
+    \param prop [in]  property string: "Object(%<\_ObjId XXX>%).PropName"
+    \param pDb [in]  database
+    \param objId [out]  object id
+    \param propName [out]  property name
+
+    Returns 'true' on success, otherwise returns 'false'.
+  */
+  virtual bool parseObjProp(const OdString& prop, OdDbDatabase* pDb, OdDbObjectId& objId, OdString& propName) = 0;
+
+  /** \details
+    Retrieves object property value.
+
+    \param propName [in]  property name
+    \param objId [in]  object
+    \param result [out]  result
+
+    Returns 'true' on success, otherwise returns 'false'.
+  */
+  virtual bool getObjPropValue(const OdString& propName, const OdDbObjectId& objId, OdFdFieldResult& result) = 0;
+
+  /** \details
+    Retrieves the current database of the host application.
+    The purpose of the function is to allow using the current database's properties when processing NDBRO fields.
+
+    Returns pointer to the current OdDbDatabase object.
+  */
+  virtual OdDbDatabase* getCurrentDb() = 0;
+
+  /** \details
+    Returns the name of the file associated with this database object.
+    Differs from the current behavior of OdDbDatabase::getFilename(),
+    which returns autobackup filename, because OdDbDatabase::writeFile()
+    always sets m_currentFileName.
+
+    \param pDb [in]  database
+  */
+  virtual OdString getFileName(OdDbDatabase* pDb) = 0;
+
+  /** \details
+    Retrieves value of lisp variable.
+
+    \param lispVar [in]  lisp variable name
+    \param fValue [out]  field value where the result is stored
+  */
+  virtual void getLispVariable(const OdString& lispVar, OdFieldValue& fValue) = 0;
+};
+
+typedef OdSmartPtr<OdFdFieldEnginePE> OdFdFieldEnginePEPtr;
+
+/** \details
+    Evaluates fields in database.
+    \param pDb [in]  Pointer to the database for which fields are to be evaluated
+    \param nContext [in]  Input context in which the field is evaluated, which can be a predefined *OdDbField::EvalContext* enum flag or a user-defined context flag; this context flag is passed to the evaluator
+    \param objIds [in]  Input array of object IDs of objects, whose fields are to be evaluated. If this is not null only, fields will be evaluated only for these objects.
+    \param pFieldsToEvaluate [in]  Input array of object IDs of fields to be evaluated. If this is not null only these fields in the specified objects will be evaluated. If this is null all the fields in the specified objects will be evaluated.
+    \param pszEvaluatorId [in]  Input evaluator ID. If this is not null only the fields matching this evaluator ID will be evaluated. If this is null all the fields in the specified objects will be evaluated. 
+    \param nEvalFlag [in]  Input one or more OdFd::EvalFields option flags
+    \param pNumFound [out]  Output pointer to store the number of fields found; can be null if this information is not required 
+    \param pNumEvaluated [out]  Output pointer to store the number of fields evaluated; can be null if this information is not required 
+*/
+TOOLKIT_EXPORT OdResult oddbEvaluateFields( 
+  OdDbDatabase* pDb,
+  int nContext,
+  const OdDbObjectIdArray* objIds = 0, 
+  const OdDbObjectIdArray* pFieldsToEvaluate = 0,
+  const OdString& pszEvaluatorId = OdString(),
+  OdFd::EvalFields nEvalFlag = OdFd::kEvalRecursive,
+  int* pNumFound = 0,
+  int* pNumEvaluated = 0);
+
+
+#include "TD_PackPop.h"
+
+#endif //_FdField_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FlatMemStream.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FlatMemStream.h
new file mode 100755
index 0000000..ae7dfcb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/FlatMemStream.h
@@ -0,0 +1,203 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// FlatMemStream.h: interface for the OdMemoryStream class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_ODFLATMEMSTREAM_H_INCLUDED_)
+#define _ODFLATMEMSTREAM_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdStreamBuf.h"
+
+class OdFlatMemStream;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdFlatMemStream object pointers.
+*/
+typedef OdSmartPtr<OdFlatMemStream> OdFlatMemStreamPtr;
+
+/** \details
+    Default formal parameter for the lightweight template instaniations.
+    OdFlatMemStreamImpl<OdStreamBuf> -- instaniation with OdStreamBuf
+    OdFlatMemStreamImpl<> -- lightweight instaniation without abstract interface overhead
+    <group Other_Classes>
+*/
+class OdEmptyBaseClass {};
+
+/** \details
+    This class implements memory-resident I/O objects.
+    Library: TD_Root
+    <group Other_Classes>
+*/
+template <class TBase = OdEmptyBaseClass>
+class OdFlatMemStreamImpl : public TBase {
+protected:
+  void*     m_pMemData;
+  OdUInt64  m_nEndPos;
+  OdUInt64  m_nCurPos;
+  /** \details
+    Returns the raw data associated with this FlatMemStream object.
+  */
+  OdUInt8* data() { return (OdUInt8*)m_pMemData; }
+  /** \details
+    Returns the number of unused bytes in this FlatMemStream object.
+  */
+  OdUInt64 left() { return m_nEndPos - m_nCurPos; }
+  /** \details
+    Appends the specified number of bytes to this FlatMemStream object.
+    \param numBytes [in]  Number of bytes.
+    \note
+    The default implementation of this function does nothing but throw an eNotOpenForWrite exception
+  */
+  virtual void append(OdUInt64 numBytes) { throw OdError(eNotOpenForWrite); }
+
+  /** \param buffer [in]  Character buffer.
+    \param numBytes [in]  Number of bytes.
+    \param curPosition [in]  Initial position of the file pointer.
+  */
+public:
+  inline OdFlatMemStreamImpl() { init(0, 0, 0); }
+
+  OdFlatMemStreamImpl(void* buffer, OdUInt64 numBytes, OdUInt64 nCurPos)
+  { init(buffer, numBytes, nCurPos); }
+
+  /** \details
+    Initializes this FlatMemStream object.
+    \param buffer [in]  Character buffer.
+    \param numBytes [in]  Number of bytes.
+    \param curPosition [in]  Initial position of the file pointer of the new object.
+  */
+  inline void init(void* buffer, OdUInt64 numBytes, OdUInt64 curPosition = 0);
+
+  OdUInt64 length() { return m_nEndPos; }
+  OdUInt64 tell() { return m_nCurPos; }
+  OdUInt64 seek(OdInt64 offset, OdDb::FilerSeekType seekType);
+
+  bool isEof() { return left()==0; }
+  OdUInt8 getByte();
+  void getBytes(void* buffer, OdUInt32 numBytes);
+  
+  // overrides existing byte(s)
+  void putByte(OdUInt8 value);
+  void putBytes(const void* buffer, OdUInt32 numBytes);
+};
+
+
+/** \details
+    This class implements memory-resident I/O objects.
+    Library: TD_Root
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdFlatMemStream : public OdFlatMemStreamImpl<OdStreamBuf>
+{
+protected:
+  inline OdFlatMemStream() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdFlatMemStream);
+  /** \details
+    Creates a new FlatMemStream object, and returns a SmartPointer to the new object.
+    \param buffer [in]  Character buffer.
+    \param numBytes [in]  Number of bytes.
+    \param curPosition [in]  Initial position of the file pointer of the new object.
+  */
+  static OdFlatMemStreamPtr createNew(void* buffer, OdUInt64 numBytes, OdUInt64 curPosition = 0);
+
+  void copyDataTo(OdStreamBuf* pDestination, OdUInt64 sourceStart, OdUInt64 sourceEnd);
+};
+
+
+
+
+template<class TBase>
+inline void OdFlatMemStreamImpl<TBase>::init(void* pMemData, OdUInt64 nSize, OdUInt64 nCurPos) {
+  m_pMemData = pMemData;
+  m_nEndPos = nCurPos + nSize;
+  m_nCurPos = nCurPos;
+}
+
+
+template<class TBase>
+inline OdUInt64 OdFlatMemStreamImpl<TBase>::seek(OdInt64 offset, OdDb::FilerSeekType whence) {
+  OdUInt64 nNewPos;
+  switch(whence) {
+  case OdDb::kSeekFromEnd:
+    nNewPos = m_nEndPos + offset;
+    break;
+  case OdDb::kSeekFromCurrent:
+    nNewPos = m_nCurPos + offset;
+    break;
+  case OdDb::kSeekFromStart:
+    nNewPos = offset;
+    break;
+  default:
+    throw OdError(eInvalidInput);
+    break;
+  };
+  if(nNewPos > m_nEndPos)
+    throw OdError(eEndOfFile);
+  return (m_nCurPos = nNewPos);
+}
+
+template<class TBase>
+inline OdUInt8 OdFlatMemStreamImpl<TBase>::getByte() {
+  if(left()==0)
+    throw OdError(eEndOfFile);
+  return *(data() + m_nCurPos++);
+}
+
+template<class TBase>
+inline void OdFlatMemStreamImpl<TBase>::getBytes(void* buffer, OdUInt32 nLen) {
+  if(left() < nLen)
+    throw OdError(eEndOfFile);
+  ::memcpy(buffer, data()+m_nCurPos, nLen);
+  m_nCurPos += nLen;
+}
+
+template<class TBase>
+inline void OdFlatMemStreamImpl<TBase>::putByte(OdUInt8 val) {
+  if(m_nCurPos < m_nEndPos)
+    *(data() + m_nCurPos++) = val;
+  else
+    throw OdError(eEndOfFile);
+}
+
+template<class TBase>
+inline void OdFlatMemStreamImpl<TBase>::putBytes(const void* buffer, OdUInt32 nLen) {
+  if(m_nCurPos + nLen <= m_nEndPos) {
+    ::memcpy(data()+m_nCurPos, buffer, nLen);
+    m_nCurPos += nLen;
+  } else {
+    throw OdError(eEndOfFile);
+  }
+}
+
+
+#include "TD_PackPop.h"
+
+#endif // !defined(_ODFLATMEMSTREAM_H_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/Ge.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/Ge.h
new file mode 100755
index 0000000..5e1289a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/Ge.h
@@ -0,0 +1,323 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GEGBLGE_H
+#define OD_GEGBLGE_H /*!DOM*/
+
+#include "TD_PackPush.h"
+
+#include "Ge/GeExport.h"
+#include "Ge/GeLibVersion.h"
+
+/** \details
+  The OdGe classes are used to carry out general 2D and 3D geometric operations. 
+
+  Library: TD_Ge
+  
+  <group OdGe_Classes>
+*/
+struct OdGe
+{
+  static const OdGeLibVersion gLibVersion;
+
+  enum 
+  { 
+    eGood, 
+    eBad 
+  };
+  
+  enum EntityId 
+  {
+    kEntity2d,
+    kEntity3d,
+    kPointEnt2d,
+    kPointEnt3d,
+    kPosition2d,
+    kPosition3d,
+    kPointOnCurve2d,
+    kPointOnCurve3d,
+    kPointOnSurface,
+    kBoundedPlane,
+    kCircArc2d,
+    kCircArc3d,
+    kConic2d,
+    kConic3d,
+    kCurve2d,
+    kCurve3d,
+    kEllipArc2d,
+    kEllipArc3d,
+    kLine2d,
+    kLine3d,
+    kLinearEnt2d,
+    kLinearEnt3d,
+    kLineSeg2d,
+    kLineSeg3d,
+    kPlanarEnt,
+    kPlane,
+    kRay2d,
+    kRay3d,
+    kSurface,
+    kSphere,
+    kCylinder,
+    kTorus,
+    kCone,
+    kSplineEnt2d,
+    kPolyline2d,
+    kAugPolyline2d,
+    kNurbCurve2d,
+    kDSpline2d,
+    kCubicSplineCurve2d,
+    kSplineEnt3d,
+    kPolyline3d,
+    kAugPolyline3d,
+    kNurbCurve3d,
+    kDSpline3d,
+    kCubicSplineCurve3d,
+    kTrimmedCrv2d,
+    kCompositeCrv2d,
+    kCompositeCrv3d,
+    kExternalSurface,
+    kNurbSurface,
+    kTrimmedSurface,
+    kOffsetSurface,
+    kEnvelope2d,
+    kCurveBoundedSurface,
+    kExternalCurve3d,
+    kExternalCurve2d,
+    kSurfaceCurve2dTo3d,
+    kSurfaceCurve3dTo2d,
+    kExternalBoundedSurface,
+    kCurveCurveInt2d,
+    kCurveCurveInt3d,
+    kBoundBlock2d,
+    kBoundBlock3d,
+    kOffsetCurve2d,
+    kOffsetCurve3d,
+    kPolynomCurve3d,
+    kBezierCurve3d,
+    kObject,
+    kFitData3d,
+    kHatch,
+    kTrimmedCurve2d,
+    kTrimmedCurve3d,
+    kCurveSampleData,
+    kEllipCone,
+    kEllipCylinder,
+    kIntervalBoundBlock,
+    kClipBoundary2d,
+    kExternalObject,
+    kCurveSurfaceInt,
+    kSurfaceSurfaceInt,
+    kHelix,
+
+    kSpunSurface,
+    kSegmentChain2d,
+
+    kDummy0,
+    kDummy1,
+    kDummy2,
+    kDummy3,
+    kDummy4,
+    kDummy5,
+    kDummy6,
+    kDummy7,
+    kDummy8,
+    kDummy9
+  };
+
+  enum ExternalEntityKind 
+  {
+    kAcisEntity              = 0, // External Entity is an ACIS entity
+    kGe3dCurveEntity         = 1, // External Entity is an OdGeCurve3d* entity
+    kGe3dSurfaceEntity       = 2, // External Entity is an OdGeSurface3d* entity
+    kExternalEntityUndefined      // External Entity is undefined. 
+  }; 
+  enum PointContainment 
+  {
+    kInside,              // Point is inside the boundary.
+    kOutside,             // Point is outside the boundary.
+    kOnBoundary           // Point on the boundary.
+  };
+  enum NurbSurfaceProperties 
+  {
+    kUninit     = 0x00,   // Uninit
+    kOpen       = 0x01,   // Open
+    kClosed     = 0x02,   // Closed
+    kPeriodic   = 0x04,   // Periodic
+    kRational   = 0x08,   // Rational
+    kNoPoles    = 0x10,   // No Poles
+    kPoleAtMin  = 0x20,   // Pole at Min
+    kPoleAtMax  = 0x40,   // Pole at Max
+    kPoleAtBoth = 0x80    // Pole at Both
+  };
+  
+  enum OffsetCrvExtType {
+    kFillet, 
+    kChamfer, 
+    kExtend
+  };
+  enum OdGeXConfig 
+  {
+    kNotDefined      = 1 << 0,
+    kUnknown         = 1 << 1,
+    kLeftRight       = 1 << 2,
+    kRightLeft       = 1 << 3,
+    kLeftLeft        = 1 << 4,
+    kRightRight      = 1 << 5,
+    kPointLeft       = 1 << 6,
+    kPointRight      = 1 << 7,
+    kLeftOverlap     = 1 << 8,
+    kOverlapLeft     = 1 << 9,
+    kRightOverlap    = 1 << 10,
+    kOverlapRight    = 1 << 11,
+    kOverlapStart    = 1 << 12,
+    kOverlapEnd      = 1 << 13,
+    kOverlapOverlap  = 1 << 14
+  };
+
+  enum BooleanType 
+  {
+    kUnion,                          // Union
+    kSubtract,                       // Subtraction
+    kCommon                          // Intersection
+  }; 
+  enum ClipError 
+  {
+    eOk,                             // OK
+    eInvalidClipBoundary,            // Invalid Clip Boundary
+    eNotInitialized                  // Clip Boundary was not Initialized
+  };
+
+  enum ClipCondition 
+  {
+    kInvalid,                        // An error occurred, probably due to invalid initialization of clipping object.
+    kAllSegmentsInside,              // All segments are inside the clip boundary.
+    kSegmentsIntersect,              // At least one segment crosses the clip boundary.
+    kAllSegmentsOutsideZeroWinds,    // The clip boundary is outside, and not encircled by, the clip boundary.
+    kAllSegmentsOutsideOddWinds,     // The clip boundary is inside, and encircled by, the clip boundary.    
+    kAllSegmentsOutsideEvenWinds     // The clip boundary is outside, but, encircled by, the clip boundary.    
+  };
+
+  /**
+  */
+  enum ErrorCondition 
+  {
+    kOk,                                // OK
+    k0This,                             // This object is 0.
+    k0Arg1,                             // Argument 1 is 0.
+    k0Arg2,                             // Argument 2 is 0.
+    kPerpendicularArg1Arg2,             // Arguments 1 and 2 are perpendicular to each other.
+    kEqualArg1Arg2,                     // Arguments 1 and 2 are equal.
+    kEqualArg1Arg3,                     // Arguments 1 and 3 are equal.
+    kEqualArg2Arg3,                     // Arguments 2 and 3 are equal.
+    kLinearlyDependentArg1Arg2Arg3,     // Arguments 1, 2, and 3 are linearly dependent.
+    kArg1TooBig,                        // Argument 1 is too big.
+    kArg1OnThis,                        // Argument 1 is on this object.
+    kArg1InsideThis,                    // Argument 1 is inside this object.
+    kNonCoplanarGeometry,               // Geometry is not coplanar.
+    kDegenerateGeometry,                // Geometry is degenerate.
+    kSingularPoint                      // Geometry is one point.
+  };
+
+  enum csiConfig 
+  {
+    kXUnknown,              // Unknown.
+    kXOut,                  // Transverse -- Curve neighborhood is outside this surface.
+    kXIn,                   // Transverse -- Curve neighborhood is inside this surface.
+    kXTanOut,               // Tangent -- Curve neighborhood is outside this surface.
+    kXTanIn,                // Tangent -- Curve neighborhood is inside this surface.
+    kXCoincident,           // Non-zero length -- Point is on the intersection boundary.
+    kXCoincidentUnbounded   // Non-zero length -- Point is on an arbitrary *point* on an unbounded intersection.
+  };
+
+  enum ssiType 
+  {
+    kSSITransverse,         // Non-tangent intersection.
+    kSSITangent,            // Tangent intersection with surface normals codirectional at any point within the component.
+    kSSIAntiTangent         // Tangent intersection with surface normals antidirectional at any point within the component.
+  };
+
+  enum ssiConfig 
+  {
+    kSSIUnknown,          // Unknown.
+    kSSIOut,              // Neighborhood is outside this surface.
+    kSSIIn,               // Neighborhood is inside this surface.
+    kSSICoincident        // Non-zero area intersection.
+  };
+
+  enum OdGeIntersectError 
+  {
+    kXXOk,                      // OK
+    kXXIndexOutOfRange,         // Index out of range
+    kXXWrongDimensionAtIndex,   // Wrong dimension at index.
+    kXXUnknown                  // Unknown.
+  };
+
+
+  enum OdGeKnotParameterization {
+    kChord                  = 0x0,   //Chord parametrization
+    kSqrtChord              = 0x1,   //Chord square root parametrization
+    kUniform                = 0x2,   //Uniform parametrization
+    kCustomParameterization = 0xF,   //Custom parametrization
+    kNotDefinedKnotParam    = 0x10   //Knot parametrization isn't defined
+  };
+};
+
+/** \details
+    Defines a synonym of the fully qualified name.
+
+    \note
+    May be used only if there are no global name conflicts.
+*/
+typedef OdGe::ErrorCondition OdGeError;
+
+/** \details
+    Defines a synonym of the fully qualified name.
+
+    \note
+    May be used only if there are no global name conflicts.
+*/
+typedef OdGe::OdGeIntersectError OdGeIntersectError;
+typedef OdGe::OdGeKnotParameterization OdGeKnotParameterization;
+
+#define DECLARE_GE_RTTI() \
+  virtual bool isKindOf (OdGe::EntityId entType) const;\
+  virtual OdGe::EntityId type() const
+
+#define DEFINE_GE_RTTI(Class,Parent,TYPE) \
+  bool Class::isKindOf(OdGe::EntityId entType) const\
+  {\
+    if ( entType == OdGe::TYPE ) return true;\
+    return Parent::isKindOf( entType );\
+  }\
+  OdGe::EntityId Class::type() const { return OdGe::TYPE; }
+
+GE_TOOLKIT_EXPORT void odgeHeapCleanup();
+
+#include "TD_PackPop.h"
+
+#endif  // AC_GEGBLGE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeAugPolyline3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeAugPolyline3d.h
new file mode 100755
index 0000000..402383b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeAugPolyline3d.h
@@ -0,0 +1,193 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEAPLN3D_H
+#define OD_GEAPLN3D_H  /*!DOM*/
+
+#include "Ge/GePolyline3d.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeVector3dArray.h"
+#include "Ge/GeKnotVector.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents mathematical entities used to support various types of spline curves in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeAugPolyline3d : public OdGePolyline3d
+{
+public:
+
+
+  /** \param curve [in]  Any 3D curve.
+    \param fromParam [in]  Starting parameter value.
+    \param toParam [in]  Ending parameter value.
+    \param approxEps [in]  Approximate spacing along a curve.
+    \param knots [in]  Knot vector.
+    \param controlPoints [in]  Control point array.
+    \param vecBundle [in]  Vector array. 
+    \param source [in]  Object to be cloned.
+  */
+  OdGeAugPolyline3d();
+  OdGeAugPolyline3d(
+    const OdGeAugPolyline3d& apline);
+  OdGeAugPolyline3d(
+    const OdGeKnotVector& knots,
+    const OdGePoint3dArray& controlPoints,
+    const OdGeVector3dArray& vecBundle);
+  OdGeAugPolyline3d(
+    const OdGePoint3dArray& controlPoints,
+    const OdGeVector3dArray& vecBundle);
+  OdGeAugPolyline3d(
+    const OdGeCurve3d& curve,
+    double fromParam, 
+    double toParam, 
+    double approxEps);
+
+  OdGeAugPolyline3d& operator =(
+    const OdGeAugPolyline3d& apline);
+
+  /** \details
+    Returns the control point at the specified index.
+
+    \param cpIndex [in]  Control point index.
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d getPoint(
+    int index) const;
+
+  /** \details
+    Sets the control point at the specified index, and returns a reference to this curve.
+
+    \param controlpointIndex [in]  Control point index.
+    \param point [in]  Any 3D point.
+  */
+   OdGeAugPolyline3d& setPoint(
+    int controlpointIndex, 
+    OdGePoint3d point);
+
+  /** \details
+    Returns the array of control points.
+
+    \param controlPoints [out]  Receives an array of control points.
+  */
+   void getPoints(
+    OdGePoint3dArray& controlPoints) const;
+
+  /** \details
+    Returns the vector at the specified index.
+
+    \param vectorIndex [in]  Vector index.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d getVector(
+    int vectorIndex) const;
+
+  /** \details
+    Sets the vector at the specified index, and returns a reference to this curve.
+
+    \param vectorIndex [in]  Vector index.
+    \param vect [in]  Any 3D vector.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeAugPolyline3d& setVector(
+    int vectorIndex, 
+    OdGeVector3d vect);
+
+  /** \details
+    Returns an array of the tangents (first derivative vectors) to the curve at each control point.
+
+    \param tangents [out]  Receives an array of tangents.
+
+    \note
+    Currently not implemented.
+  */
+   void getD1Vectors(
+    OdGeVector3dArray& tangents) const;
+
+  /** \details
+    Returns the second derivative vector at the specified index.
+
+    \param vectorIndex [in]  Vector index.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d getD2Vector(
+    int vectorIndex) const;
+
+  /** \details
+    Sets the second derivative vector at the specified index, and returns a reference to this curve.
+
+    \param vectorIndex [in]  Vector index.
+    \param vect [in]  Second derivative vector.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeAugPolyline3d& setD2Vector(
+    int vectorIndex, 
+    OdGeVector3d vect);
+
+  /** \details
+    Returns an array of the second derivative vectors to the curve at each control point.
+
+
+    d2Vectors Returns an array of second derivative cectors.
+
+    \note
+    Currently not implemented.
+  */
+   void getD2Vectors(
+    OdGeVector3dArray& d2Vectors) const;
+
+  /** \details
+    Returns the approximate tolerance that was used to construct the polyline.
+  */
+   double approxTol() const;
+
+  /** \details
+    Sets the approximate tolerance to be used to construct the polyline, and returns
+    a reference to this polyline.
+
+    \remarks
+    This method recomputes the polyline.
+  */
+   OdGeAugPolyline3d& setApproxTol(
+    double approxTol);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEAPLN3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock2d.h
new file mode 100755
index 0000000..18e3146
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock2d.h
@@ -0,0 +1,170 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_BOUND_BLOCK2D_H
+#define OD_GE_BOUND_BLOCK2D_H /*!DOM*/
+
+#include "Ge/GeEntity2d.h"
+#include "Ge/GeExtents2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class implements a 2D bounding area.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+	  \sa
+    <link ge_OdGeBoundBlock3D.html, Working with Bounding Blocks>
+*/
+class GE_TOOLKIT_EXPORT OdGeBoundBlock2d : public OdGeEntity2d
+{
+public:
+  
+
+  /** \param point1 [in]  First point of a coordinate-aligned box.
+    \param point2 [in]  Second point of a coordinate-aligned box.
+    \param base [in]  Base of parallelogram bounding block.
+    \param dir1 [in]  First side of parallelogram bounding block.
+    \param dir2 [in]  Second side of parallelogram bounding block.
+    \param source [in]  Object to be cloned.
+    
+    \remarks
+    The default constructor constructs a parallelogram reduced to the coordinate origin.
+  */
+  OdGeBoundBlock2d();
+  OdGeBoundBlock2d(
+    const OdGePoint2d& point1, 
+    const OdGePoint2d& point2);
+
+  OdGeBoundBlock2d(
+    const OdGePoint2d& base, 
+    const OdGeVector2d& dir1, 
+    const OdGeVector2d& dir2);
+  OdGeBoundBlock2d(
+    const OdGeBoundBlock2d& source);
+
+  /** \details
+    Returns the extents of the bounding block.
+
+    \param p1 [out]  Receives the first corner of the extents.
+    \param p2 [out]  Receives the second corner of the extents.
+  */
+  void getMinMaxPoints(
+    OdGePoint2d& p1, 
+    OdGePoint2d& p2) const;
+
+  /** \details
+    Returns base and sides of bounding block.
+
+    \param base [out]  Receives the base of bounding block.
+    \param side1 [out]  Receives the first side of bounding block.
+    \param side2 [out]  Receives the second side of bounding block.
+  */
+  void get(
+    OdGePoint2d& base, 
+    OdGeVector2d& side1, 
+    OdGeVector2d& side2) const;
+
+  /** \details
+    Sets the bounding block to a coordinate-aligned box or to
+    a parallelogram bounding block.
+
+    \param p1 [in]  First point of a coordinate-aligned box.
+    \param p2 [in]  Second point of a coordinate-aligned box.
+    \param base [in]  Base of parallelogram bounding block.
+    \param side1 [in]  First side of parallelogram bounding block.
+    \param side2 [in]  Second side of parallelogram bounding block.
+  */
+  OdGeBoundBlock2d& set(
+    const OdGePoint2d& p1, 
+    const OdGePoint2d& p2);
+
+  OdGeBoundBlock2d& set(
+    const OdGePoint2d& base, 
+    const OdGeVector2d& side1, 
+    const OdGeVector2d& side2);
+
+  /** \details
+    Extends the bounding block to contain
+    the specified point.
+
+    \param point [in]  Any 2D point.
+  */
+  OdGeBoundBlock2d& extend(
+    const OdGePoint2d& point);
+
+  /** \details
+    Moves the walls of the bounding block the specified distance.
+
+    \param distance [in]  Distance.
+  */
+  OdGeBoundBlock2d& swell(
+    double distance);
+
+  /** \details
+    Returns true if and only if the point is
+    contained in the bounding block.
+
+    \param point [in]  Any 2D point.
+  */
+  bool contains(
+    const OdGePoint2d& point) const;
+
+  /** \details
+    Returns true if and only if specified bounding block
+    does not intersect this bounding block.
+
+    \param block [in]  Any 2D bounding block.
+  */
+  bool isDisjoint(
+    const OdGeBoundBlock2d& block) const;
+
+  OdGeBoundBlock2d& operator =(
+    const OdGeBoundBlock2d& block);
+
+  /** \details
+    Returns true if and only if this bounding block is a
+    coordinate-aligned box.
+  */
+  bool isBox() const;
+
+  /** \details
+  Sets this bounding block to a coordinate-aligned box, or a
+    parallelogram bounding block. Returns a reference to this 
+    bounding block.
+
+    \param toBox [in]  If true, sets this bounding block to a 
+      coordinate-aligned box; otherwise, sets it to a 
+      parallelogram bounding block.
+  */
+  OdGeBoundBlock2d& setToBox(
+    bool toBox);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_BOUND_BLOCK2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock3d.h
new file mode 100755
index 0000000..5aeb065
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundBlock3d.h
@@ -0,0 +1,221 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_GEBOUNDBLOCK3D_H
+#define _OD_GEBOUNDBLOCK3D_H /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+#include "Ge/GeExtents3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class implements 3D bounding volumes.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeBoundBlock3D.html, Working with Bounding Blocks>
+*/
+class GE_TOOLKIT_EXPORT OdGeBoundBlock3d : public OdGeEntity3d
+{
+public: 
+
+
+  /** \param point1 [in]  First point of a coordinate-aligned block.
+    \param point2 [in]  Second point of a coordinate-aligned block.
+    \param base [in]  Base of parallelepiped bounding block.
+    \param side1 [in]  First side of parallelepiped bounding block.
+    \param side2 [in]  Second side of parallelepiped bounding block.
+    \param side3 [in]  Third side of parallelepiped bounding block.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor constructs a parallelepiped reduced to the coordinate origin.
+    
+    A parallelepiped is a parallelogram extruded in an arbitrary direction. 
+  */
+  OdGeBoundBlock3d();
+  OdGeBoundBlock3d(
+    const OdGePoint3d& base, 
+    const OdGeVector3d& side1,
+    const OdGeVector3d& side2, 
+    const OdGeVector3d& side3);
+  // TD Special
+  OdGeBoundBlock3d(
+    const OdGePoint3d& point1, 
+    const OdGePoint3d& point2);
+  //
+  OdGeBoundBlock3d(
+    const OdGeBoundBlock3d& source);
+
+  /** \details
+    Returns the extents of the bounding block.
+
+    \param p1 [out]  Receives the first corner of the extents.
+    \param p2 [out]  Receives the second corner of the extents.
+  */
+   void getMinMaxPoints(
+    OdGePoint3d& p1, 
+    OdGePoint3d& p2) const;
+
+  /** \details
+    Returns base and sides of bounding block.
+
+    \param base [out]  Receives the base of the bounding box.
+    \param side1 [out]  Receives the first side.
+    \param side2 [out]  Receives the second side.
+    \param side3 [out]  Receives the third side.
+  */
+   void get(
+    OdGePoint3d& base,
+    OdGeVector3d& side1,
+    OdGeVector3d& side2,
+    OdGeVector3d& side3) const;
+
+  /** \details
+    Sets the bounding block to a coordinate-aligned box or to
+    a parallelepiped bounding block.
+
+    \param p1 [in]  First point of a coordinate-aligned box.
+    \param p2 [in]  Second point of a coordinate-aligned box.
+    \param base [in]  Base of parallelepiped bounding block.
+    \param side1 [in]  First side of parallelepiped bounding block.
+    \param side2 [in]  Second side of parallelepiped bounding block.
+    \param side3 [in]  Third side of parallelepiped bounding block.
+  */
+   OdGeBoundBlock3d& set(
+    const OdGePoint3d& p1,
+    const OdGePoint3d& p2);
+   OdGeBoundBlock3d& set(
+    const OdGePoint3d& base,
+    const OdGeVector3d& side1,
+    const OdGeVector3d& side2,
+    const OdGeVector3d& side3);
+
+  /** \details
+    Extends the bounding block to contain
+    the specified point.
+
+    \param point [in]  Any 3D point.
+  */
+   OdGeBoundBlock3d& extend(
+    const OdGePoint3d& point);
+
+  /** \details
+    Moves the walls of the bounding block the specified distance.
+
+    \param distance [in]  Distance.
+  */
+   OdGeBoundBlock3d& swell(
+    double distance);
+
+  /** \details
+    Returns true if and only if this point is
+    contained in the bounding block.
+
+    \param point [in]  Any 3D point.
+  */
+   bool contains(
+    const OdGePoint3d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if specified bounding block
+    does not intersect this bounding block.
+
+    \param block [in]  Any 3D bounding block.
+  */
+   bool isDisjoint(
+    const OdGeBoundBlock3d& block,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if this bounding block is a
+    coordinate-aligned box.
+  */
+   bool isBox() const;
+
+  /** \details
+    Sets this bounding block to a coordinate-aligned box, or a
+    parallelogram bounding block. Returns a reference to this 
+    bounding block.
+
+    \param toBox [in]  If true, sets this bounding block to a 
+    coordinate-aligned otherwise, sets it to a 
+    parallelepiped bounding block.
+  */
+   OdGeBoundBlock3d&  setToBox(
+    bool toBox);
+
+  OdGeBoundBlock3d& operator =(const OdGeBoundBlock3d& block);
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+   OdGePoint3d minPoint() const;
+   OdGePoint3d maxPoint() const;
+
+  /** \details
+    Returns the center of the bounding block.
+  */
+   OdGePoint3d center() const;
+
+  /** \details
+    Call setToBox(true) if axes is parallel to world coordinate space axes.
+  */
+   void setToBoxOrtho(const OdGeVector3d &dir1, const OdGeVector3d &dir2, const OdGeVector3d &dir3);
+   void setToBoxOrtho();
+};
+
+inline void OdGeBoundBlock3d::setToBoxOrtho(const OdGeVector3d &dir1, const OdGeVector3d &dir2, const OdGeVector3d &dir3)
+{
+  OdGeError status;
+  if((dir1.isParallelTo(OdGeVector3d::kXAxis)
+      || dir1.isParallelTo(OdGeVector3d::kYAxis)
+      || dir1.isParallelTo(OdGeVector3d::kZAxis, OdGeContext::gTol, status)
+      || status == OdGe::k0This)
+      && (dir2.isParallelTo(OdGeVector3d::kXAxis)
+      || dir2.isParallelTo(OdGeVector3d::kYAxis)
+      || dir2.isParallelTo(OdGeVector3d::kZAxis, OdGeContext::gTol, status)
+      || status == OdGe::k0This)
+      && (dir3.isParallelTo(OdGeVector3d::kXAxis)
+      || dir3.isParallelTo(OdGeVector3d::kYAxis)
+      || dir3.isParallelTo(OdGeVector3d::kZAxis, OdGeContext::gTol, status)
+      || status == OdGe::k0This))
+    setToBox(true);
+}
+
+inline void OdGeBoundBlock3d::setToBoxOrtho()
+{
+  OdGePoint3d basePt;
+  OdGeVector3d dir1, dir2, dir3;
+  get(basePt, dir1, dir2, dir3);
+  setToBoxOrtho(dir1, dir2, dir3);
+}
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundedPlane.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundedPlane.h
new file mode 100755
index 0000000..580b973
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeBoundedPlane.h
@@ -0,0 +1,117 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEBNDPLN_H
+#define OD_GEBNDPLN_H  /*!DOM*/
+
+#include "Ge/GePlanarEnt.h"
+#include "Ge/GePlane.h"
+#include "Ge/GeVector3d.h"
+
+class OdGePlane;
+class OdGeVector3d;
+class OdGePoint3d;
+class OdGePoint2d;
+class OdGeLineSeg3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents bounded planes in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeBoundedPlane.html, Working with Bounded Planes>
+*/
+class GE_TOOLKIT_EXPORT OdGeBoundedPlane : public OdGePlanarEnt
+{
+public:
+
+
+  /** \param origin [in]  Origin of the bounded plane. 
+    \param uAxis [in]  u axis.
+    \param vAxis [in]  v axis.
+    \param uPnt [in]  A point at the end of the U-axis.
+    \param vPnt [in]  A point at the end of the V-axis.
+
+    \remarks
+    Bounded planes can be specified with an origin and two vectors, or 
+    with an origin and two points.
+
+    With no arguments, constructs an infinite plane parallel to the XY plane.
+  */
+  OdGeBoundedPlane();
+  OdGeBoundedPlane(const OdGeBoundedPlane& plane);
+  OdGeBoundedPlane(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& uAxis,
+    const OdGeVector3d& vAxis);
+  OdGeBoundedPlane(
+    const OdGePoint3d& uPnt,
+    const OdGePoint3d& origin,
+    const OdGePoint3d& vPnt);
+
+  TD_USING(OdGePlanarEnt::intersectWith);
+   bool intersectWith(
+    const OdGePlane& plane, 
+    OdGeLine3d& intLine,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool intersectWith(
+    const OdGeBoundedPlane& plane, 
+    OdGeLineSeg3d& intLine,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  /** \details
+    Sets parameters for this plane according to the arguments, and returns a reference to this plane.
+
+    \param origin [in]  The origin of the bounded plane.
+    \param uAxis [in]  The U-axis of the plane.
+    \param vAxis [in]  The V-axis of the plane.
+    \param uPnt [in]  A point at the end of the U-axis.
+    \param vPnt [in]  A point at the end of the V-axis.
+   
+    \note
+    Returns a reference to this plane.
+  */
+   OdGeBoundedPlane& set(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& uAxis, 
+    const OdGeVector3d& vAxis);
+   OdGeBoundedPlane& set(
+    const OdGePoint3d& uPnt,
+    const OdGePoint3d& origin,
+    const OdGePoint3d& vPnt);
+
+  OdGeBoundedPlane& operator =(const OdGeBoundedPlane& plane);
+
+  //////////////////////////////////////////////////////////////////////////
+  TD_USING(OdGePlanarEnt::isOn);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEBNDPLN_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc2d.h
new file mode 100755
index 0000000..b494646
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc2d.h
@@ -0,0 +1,373 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_ARC2D_H
+#define OD_GE_ARC2D_H /*!DOM*/
+
+class OdGeLine2d;
+class OdGeLinearEnt2d;
+class OdGeExtents2d;
+
+
+#include "Ge/GeCurve2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents arcs and full circles in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+    
+    \sa
+    <link ge_OdGeCircArc3d.html, Working with Circular Arcs>
+*/
+class GE_TOOLKIT_EXPORT OdGeCircArc2d : public OdGeCurve2d
+{
+public:
+  
+
+  /** \param center [in]  Center of arc.
+    \param radius [in]  Radius of arc.
+    \param startAng [in]  Starting angle of arc.
+    \param endAng [in]  Ending angle of arc.
+    \param refVec [in]  The reference vector defining arc angle 0.
+    \param startPoint [in]  Startpoint of arc.
+    \param secondPoint [in]  Second point on a 3-point arc.
+    \param endPoint [in]  Endpoint of arc.
+    \param bulge [in]  Specifies the bulge of the arc.
+    \param bulgeFlag [in]  Specifies how bulge is to be interpreted.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor creates a circle with a center of (0,0) and a radius of 1.
+    
+    To construct a circle, set endAng = startAng + Oda2PI
+
+    If bulgeFlag == true, then bulge is the maximum distance from the arc perpendicular to a
+    chord between the start and endpoints.
+
+    If bulgeFlag == false, the bulge is the tangent of 1/4 the included 
+    angle of the arc, measured counterclockwise.
+
+    \note
+    All angles are expressed in radians.
+        
+    startAng must be less than endAng. 
+
+  */
+  OdGeCircArc2d();
+  OdGeCircArc2d(
+    const OdGeCircArc2d& source);
+  OdGeCircArc2d(
+    const OdGePoint2d& center, 
+    double radius);
+  OdGeCircArc2d(
+    const OdGePoint2d& center, 
+    double radius, 
+    double startAng,
+    double endAng, 
+    const OdGeVector2d& refVec = OdGeVector2d::kXAxis,
+    bool isClockWise = false);
+  OdGeCircArc2d(
+    const OdGePoint2d& startPoint,
+    const OdGePoint2d& secondPoint,
+    const OdGePoint2d& endPoint);
+  OdGeCircArc2d(
+    const OdGePoint2d& startPoint, 
+    const OdGePoint2d& endPoint, 
+    double bulge, 
+    bool bulgeFlag = true);
+
+  /** \details
+    Returns True if the specified arc or linear entity intersects the arc entity,
+	and returns the number of intersections and points of intersection.
+
+    \param line [in]  Any 2D linear entity.
+    \param circarc [in]  Any 2D arc entity.
+    \param numInt [out]  Receives the number of intersections with this curve.
+    \param p1 [out]  Receives the first intersection point.
+    \param p2 [out]  Receives the second intersection point.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 has meaning only if numInt > 0. 
+    * p2 has meaning only if numInt > 1.   
+  */
+  bool intersectWith(
+    const OdGeLinearEnt2d& line, 
+    int& numInt,
+    OdGePoint2d& p1, 
+    OdGePoint2d& p2, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  bool intersectWith(
+    const OdGeCircArc2d& circarc, 
+    int& numInt,
+    OdGePoint2d& p1, 
+    OdGePoint2d& p2, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified point is
+    on the full circle of this arc, the tangent
+    at that point, and the status of the query.
+
+    \param point [in]  The point on the full circle.
+    \param line [out]  Receives the tangent at that point.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of the query.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kArg1TooBig
+    kArg1InsideThis
+    kArg1OnThis
+  */
+  bool tangent(
+    const OdGePoint2d& point, 
+    OdGeLine2d& line,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  bool tangent(
+    const OdGePoint2d& point, 
+    OdGeLine2d& line,
+    const OdGeTol& tol, 
+    OdGeError& status) const;
+
+  /** \details
+    Returns true if and only if the input point lies within
+    the full circle of this arc.
+
+    \param point [in]  Any 2D point.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isInside(
+    const OdGePoint2d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the center of this arc.
+  */
+  OdGePoint2d center() const;
+
+  /** \details
+    Returns the radius of this arc.
+  */
+  double radius() const;
+
+  /** \details
+    Returns the starting angle measured from the reference vector in the arc direction.
+    \note
+    All angles are expressed in radians.
+
+  */
+  double startAng() const;
+
+  /** \details
+    Returns the ending angle measured from the reference vector in the arc direction.
+    \note
+    All angles are expressed in radians.
+
+  */
+  double endAng() const;
+
+  /** \details
+    Returns true if and only if this arc is drawn clockwise from start point to end point.
+  */
+  bool isClockWise() const;
+
+  /** \details
+    Returns the reference vector as a unit vector.
+  */
+  OdGeVector2d refVec() const;
+
+  /** \details
+    Returns the start point of this arc.
+  */
+  OdGePoint2d startPoint() const;
+
+  /** \details
+    Returns the end point of this arc.
+  */
+  OdGePoint2d endPoint() const;
+
+  /** \details
+    Sets the center of this arc, and returns a reference to this arc.
+
+    \param center [in]  Center of arc.
+  */
+  OdGeCircArc2d& setCenter(
+    const OdGePoint2d& center);
+
+  /** \details
+    Sets the radius of this arc, and returns a reference to this arc.
+
+    \param radius [in]  Radius of arc.
+  */
+  OdGeCircArc2d& setRadius(
+    double radius);
+
+  /** \details
+    Sets the starting and ending angles of this arc, and returns a reference to this arc.
+
+    \param startAng [in]  Starting angle of arc.
+    \param endAng [in]  Ending angle of arc.
+    \note
+    All angles are expressed in radians.
+
+  */
+  OdGeCircArc2d& setAngles(
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Reverses the direction of this arc while maintaining its endpoints, and returns a reference to this arc.
+  */
+  OdGeCircArc2d& setToComplement();
+
+  /** \details
+    Sets the reference vector of this arc, and returns a reference to this arc.
+
+    \param refVec [in]  The reference vector defining arc angle 0.
+  */
+  OdGeCircArc2d& setRefVec(
+    const OdGeVector2d& vect);
+
+  /** \details
+    Sets the parameters for this arc according to the arguments, and returns a reference to this arc.
+
+    \param center [in]  Center of arc.
+    \param radius [in]  Radius of arc.
+    \param startAng [in]  Starting angle of arc.
+    \param endAng [in]  Ending angle of arc.
+    \param status [out]  Receives the status for this method.
+    \param refVec [in]  The reference vector defining arc angle 0.
+    \param isClockWise [in]  If true, the arc is drawn clockwise, otherwise, counterclockwise.
+    \param startPoint [in]  Startpoint of arc.
+    \param secondPoint [in]  Second point on a 3-point arc.
+    \param endPoint [in]  Endpoint of arc.
+    \param bulge [in]  Specifies the bulge of the arc.
+    \param bulgeFlag [in]  Specifies how bulge is to be interpreted.
+    \param curve1 [in]  First curve to define a tangent arc.
+    \param curve2 [in]  Second curve to define a tangent arc.
+    \param curve3 [in]  Third curve to define a tangent arc.
+    \param param1 [out]  Receives the parameter corresponding tangency point on curve1.
+    \param param2 [out]  Receives the parameter corresponding tangency point on curve2.
+    \param param3 [out]  Receives the parameter corresponding tangency point on curve2.
+    \param success [out]  Receives true if and only if the tan-tan-radius or
+    tan-tan-tan curve could be constructed. If false,
+    this arc is unmodified.
+
+    \remarks
+    To construct a circle, set endAng = startAng + Oda2PI
+
+    If bulgeFlag == true, then bulge is the maximum distance from the arc to a
+    chord between the start and endpoints.
+
+    If bulgeFlag == false, the bulge is the tangent of 1/4 the included angle of the arc.
+
+    Possible values for status are as follows
+
+    @untitled table
+    kEqualArg1Arg2
+    kEqualArg1Arg3
+    kEqualArg2Arg3
+    kLinearlyDependentArg1Arg2Arg3.
+    
+    \note
+    startAng must be less than endAng. 
+    All angles are expressed in radians.
+  */
+  OdGeCircArc2d& set(
+    const OdGePoint2d& center, 
+    double radius);
+  OdGeCircArc2d& set(
+    const OdGePoint2d& center, 
+    double radius, 
+    double startAng, 
+    double endAng,
+    const OdGeVector2d& refVec = OdGeVector2d::kXAxis, 
+    bool isClockWise = false);
+  OdGeCircArc2d& set(
+    const OdGePoint2d& startPoint, 
+    const OdGePoint2d& secondPoint,
+    const OdGePoint2d& endPoint);
+  OdGeCircArc2d& set(
+    const OdGePoint2d& startPoint,
+    const OdGePoint2d& secondPoint,
+    const OdGePoint2d& endPoint, 
+    OdGeError& status);
+  OdGeCircArc2d& set(
+    const OdGePoint2d& startPoint, 
+    const OdGePoint2d& endPoint, 
+    double bulge, 
+    bool bulgeFlag = true);
+  OdGeCircArc2d& set(
+    const OdGeCurve2d& curve1, 
+    const OdGeCurve2d& curve2,
+    double radius, 
+    double& param1, 
+    double& param2, 
+    bool& success);
+  OdGeCircArc2d& set(
+    const OdGeCurve2d& curve1,
+    const OdGeCurve2d& curve2, 
+    const OdGeCurve2d& curve3,
+    double& param1, 
+    double& param2, 
+    double& param3, 
+    bool& success);
+
+  OdGeCircArc2d& operator =(const OdGeCircArc2d& arc);
+
+  /** \details
+    Returns the geometric extents of this arc.
+
+    \param extents [out]  Receives the geometric extents.
+  */
+  void getGeomExtents(
+    OdGeExtents2d& extents) const;
+
+  /** \details
+    Returns the starting angle measured from the X-axis in the arc direction.
+	    
+    \note
+    All angles are expressed in radians.
+  */
+  double startAngFromXAxis() const;
+
+  /** \details
+    Returns the ending angle measured from the X-axis in the arc direction.
+	
+    \note
+    All angles are expressed in radians.
+  */
+  double endAngFromXAxis() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_ARC2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc3d.h
new file mode 100755
index 0000000..350698d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCircArc3d.h
@@ -0,0 +1,408 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECIRCARC3D_H
+#define OD_GECIRCARC3D_H /*!DOM*/
+
+#include "Ge/GeCurve3d.h"
+#include "Ge/GePlane.h"
+
+#include "TD_PackPush.h"
+
+class OdGeLine3d;
+class OdGeCircArc2d;
+class OdGePlanarEnt;
+class OdGeExtents3d;
+
+/** \details
+    A mathematical entity used to represent a circular arc in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeCircArc3d.html, Working with Circular Arcs>
+*/
+class GE_TOOLKIT_EXPORT OdGeCircArc3d : public OdGeCurve3d
+{
+public:
+
+
+  /** \param center [in]  Center of arc.
+    \param normal [in]  A vector normal to the plane of the arc
+    \param radius [in]  Radius of arc.
+    \param startAng [in]  Starting angle of arc.
+    \param endAng [in]  Ending angle of arc.
+    \param refVec [in]  The reference vector defining arc angle 0.
+    \param isClockWise [in]  If true, the arc is drawn clockwise, otherwise, counterclockwise.
+    \param startPoint [in]  Startpoint of arc.
+    \param secondPoint [in]  Second point on a 3-point arc.
+    \param endPoint [in]  Endpoint of arc.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    To construct a circle, set endAng = startAng + Oda2PI
+
+    \note
+    All angles are expressed in radians.
+
+    startAng must be less than endAng.
+  */
+  OdGeCircArc3d();
+  OdGeCircArc3d(
+    const OdGeCircArc3d& source);
+  OdGeCircArc3d(
+    const OdGePoint3d& center,
+    const OdGeVector3d& normal,
+    double radius);
+  OdGeCircArc3d(
+    const OdGePoint3d& center,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& refVec,
+    double radius, double startAng = 0,
+    double endAng = Oda2PI);
+  OdGeCircArc3d(
+    const OdGePoint3d& startPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& endPoint);
+
+  /** \details
+    Returns the point on this circle closest
+    to the specified plane, and the point
+    on the plane closest to this circle.
+
+    \param plane [in]  Any plane.
+    \param pointOnPlane [out]  Receives the closest point on plane.
+    \param tol [in]  Geometric tolerance.
+  */
+  OdGePoint3d closestPointToPlane(
+    const OdGePlanarEnt& plane,
+    OdGePoint3d& pointOnPlane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the intersections with other objects.
+
+    \param arc [in]  Any 3D arc.
+    \param line [in]  Any 3D linear entity.
+    \param plane [in]  Any plane.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point.
+    \param p2 [out]  Receives the second intersection point.
+    \param tol [in]  Geometric tolerance.
+
+  */
+   bool intersectWith(
+    const OdGeLinearEnt3d& line,
+    int& numInt,
+    OdGePoint3d& p1,
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns True if the specified arc intersects the arc entity.
+
+    \param arc [in]  Any 3D arc entity.
+    \param intn [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point on the arc.
+    \param p2 [out]  Receives the second intersection point on the arc.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 has meaning only if intn > 0.
+    * p2 has meaning only if intn > 1.
+  */
+   bool intersectWith(
+    const OdGeCircArc3d& arc,
+    int& numInt,
+    OdGePoint3d& p1,
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns True if the specifed plane, line, or arc entity intersects this
+	arc entity, and returns the number of intersections and points of intersection.
+
+    \param plane [in]  Any plane entity.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point on the arc.
+    \param p2 [out]  Receives the second intersection point on the arc.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 has meaning only if numInt > 0.
+    * p2 has meaning only if numInt > 1.
+  */
+   bool intersectWith(
+    const OdGePlanarEnt& plane,
+    int& numInt,
+    OdGePoint3d& p1,
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns True if the projected points of the arc intersect with the
+	specified linear entity, and returns the number of intersections
+	and points of intersection.
+
+    \param line [in]  Any 3D linear entity.
+    \param projDir [in]  Projection direction.
+    \param numInt [out]  Receives the number of intersections.
+    \param pntOnArc1 [out]  Receives the first intersection point on the arc.
+    \param pntOnArc2 [out]  Receives the second intersection point on the arc.
+    \param pntOnLine1 [out]  Receives the first intersection point on the line.
+    \param pntOnLine2 [out]  Receives the second intersection point on the line.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool projIntersectWith(
+    const OdGeLinearEnt3d& line,
+    const OdGeVector3d& projDir,
+    int& numInt,
+    OdGePoint3d& pntOnArc1,
+    OdGePoint3d& pntOnArc2,
+    OdGePoint3d& pntOnLine1,
+    OdGePoint3d& pntOnLine2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified point is
+    on the full circle of this arc, the tangent
+    at that point, and the status of the query.
+
+    \param point [in]  The point on the full circle.
+    \param line [out]  Receives the tangent line at that point.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of the query.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kArg1TooBig
+    kArg1InsideThis
+    kArg1OnThis
+
+  */
+   bool tangent(
+    const OdGePoint3d& point,
+    OdGeLine3d& line,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool tangent(
+    const OdGePoint3d& point,
+    OdGeLine3d& line,
+    const OdGeTol& tol,
+    OdGeError& status) const;
+
+  /** \details
+    Returns the plane of the arc.
+
+    \param plane [out]  Receives the plane of the arc.
+  */
+   void getPlane(
+    OdGePlane& plane) const;
+
+  /** \details
+    Returns true if and only if the specified point lies inside the full circle of this arc, and is
+    on the same plane as this arc.
+
+    \param point [in]  Any 3D point.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isInside(
+    const OdGePoint3d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the center of this arc.
+  */
+   OdGePoint3d center() const;
+
+  /** \details
+    Returns the vector normal to the plane of this arc.
+  */
+   OdGeVector3d normal() const;
+
+  /** \details
+    Returns the reference vector as a unit vector.
+  */
+   OdGeVector3d refVec() const;
+
+  /** \details
+    Returns the radius of this arc.
+  */
+   double radius() const;
+
+  /** \details
+    Returns the starting angle measured from the reference vector in the arc direction.
+    \note
+    All angles are expressed in radians.
+  */
+   double startAng() const;
+
+  /** \details
+    Returns the ending angle measured from the reference vector in the arc direction.
+    \note
+    All angles are expressed in radians.
+  */
+   double endAng() const;
+
+  /** \details
+    Returns the start point of this arc.
+  */
+   OdGePoint3d startPoint() const;
+
+  /** \details
+    Returns the end point of this arc.
+  */
+   OdGePoint3d endPoint() const;
+
+  /** \details
+    Sets the center of this arc, and returns a reference to this arc.
+
+    \param center [in]  Center of arc.
+  */
+   OdGeCircArc3d& setCenter(
+    const OdGePoint3d& center);
+
+  /** \details
+    Sets the normal and reference vectors for this arc. Returns a reference
+    to this arc.
+
+    \param normal [in]  A vector normal to the plane of the arc.
+    \param refVec [in]  The reference vector defining arc angle 0.
+  */
+   OdGeCircArc3d& setAxes(
+    const OdGeVector3d& normal,
+    const OdGeVector3d& refVec);
+
+  /** \details
+    Sets the radius of this arc, and returns a reference to this arc.
+
+    \param radius [in]  Radius of arc.
+  */
+   OdGeCircArc3d& setRadius(
+    double radius);
+
+  /** \details
+    Sets the starting and ending angles of this arc, and returns a reference to this arc.
+
+    \param startAng [in]  Starting angle of arc.
+    \param endAng [in]  Ending angle of arc.
+    \note
+    All angles are expressed in radians.
+  */
+   OdGeCircArc3d& setAngles(
+    double startAng,
+    double endAng);
+
+  /** \details
+    Sets the parameters for this arc according to the arguments, and returns a reference to this arc.
+
+    \param center [in]  Center of arc.
+    \param normal [in]  A vector normal to the plane of the arc
+    \param radius [in]  Radius of arc.
+    \param startAng [in]  Starting angle of arc.
+    \param endAng [in]  Ending angle of arc.
+    \param refVec [in]  The reference vector defining arc angle 0.
+    \param startPoint [in]  Startpoint of arc.
+    \param secondPoint [in]  Second point on a 3-point arc.
+    \param endPoint [in]  Endpoint of arc.
+    \param curve1 [in]  First curve to define a tangent arc.
+    \param curve2 [in]  Second curve to define a tangent arc.
+    \param curve3 [in]  Third curve to define a tangent arc.
+    \param status [out]  Receives status of set().
+    \param param1 [in]  Parameter corresponding tangency point on curve1.
+    \param param2 [in]  Parameter corresponding tangency point on curve2.
+    \param param3 [in]  Parameter corresponding tangency point on curve3.
+    \param success [out]  Receives true if and only if the tan-tan-radius or
+    tan-tan-tan curve could be constructed. If false,
+    this arc is unmodified.
+
+    \remarks
+    To construct a circle, set endAng = startAng + Oda2PI
+
+    \note
+    All angles are expressed in radians.
+
+    startAng must be less than endAng.
+  */
+   OdGeCircArc3d& set(
+    const OdGePoint3d& center,
+    const OdGeVector3d& normal,
+    double radius);
+
+   OdGeCircArc3d& set(
+    const OdGePoint3d& center,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& refVec,
+    double radius,
+    double startAng,
+    double endAng);
+
+   OdGeCircArc3d& set(
+    const OdGePoint3d& startPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& endPoint);
+
+   OdGeCircArc3d& set(
+    const OdGePoint3d& startPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& endPoint,
+    OdGeError& status);
+
+   OdGeCircArc3d& set(
+    const OdGeCurve3d& curve1,
+    const OdGeCurve3d& curve2,
+    double radius,
+    double& param1,
+    double& param2,
+    bool& success);
+
+   OdGeCircArc3d& set(
+    const OdGeCurve3d& curve1,
+    const OdGeCurve3d& curve2,
+    const OdGeCurve3d& curve3,
+    double& param1,
+    double& param2,
+    double& param3,
+    bool& success);
+
+  OdGeCircArc3d& operator =(
+    const OdGeCircArc3d& arc);
+
+  //////////////////////////////////////////////////////////////////////////
+
+  /** \details
+  Returns the geometric extents of this arc.
+
+  \param extents [out]  Receives the geometric extents.
+  */
+   void getGeomExtents(
+    OdGeExtents3d& extents) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeClipBoundary2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeClipBoundary2d.h
new file mode 100755
index 0000000..036cb48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeClipBoundary2d.h
@@ -0,0 +1,108 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECLIPBOUNDARY2D_H
+#define OD_GECLIPBOUNDARY2D_H /*!DOM*/
+
+#include "Ge/GeEntity2d.h"
+#include "Ge/GePoint2dArray.h"
+#include "Ge/GeIntArray.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines a planar clipping object for clipping arbitrary
+    2D polygons or polylines to 2D convex open or closed polyline curves
+    or rectangles.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeClipBoundary2d : public OdGeEntity2d
+{
+public:
+  
+
+  /** \details
+    Constructor for ortho-aligned rectangular clip boundary.
+    Constructor for convex polyline / polygon clip boundary.
+    Copy constructor.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeClipBoundary2d();
+  OdGeClipBoundary2d(
+    const OdGePoint2d& cornerA, 
+    const OdGePoint2d& cornerB);
+  OdGeClipBoundary2d(
+    const OdGePoint2dArray& clipBoundary);
+  OdGeClipBoundary2d(
+    const OdGeClipBoundary2d& src);
+
+  /** \details
+    Initialize ortho-aligned rectangular clip boundary.
+    Initialize convex polyline / polygon clip boundary.
+
+    \note
+    Currently not implemented.
+  */
+  OdGe::ClipError	set(
+    const OdGePoint2d& cornerA, 
+    const OdGePoint2d& cornerB);
+  OdGe::ClipError	set(
+    const OdGePoint2dArray& clipBoundary);
+
+  /** \details
+    Clip a closed polygon, creating a second closed polygon.
+
+    \note
+    Currently not implemented.
+  */
+  OdGe::ClipError	clipPolygon(
+    const OdGePoint2dArray& rawVertices, 
+    OdGePoint2dArray& clippedVertices,
+    OdGe::ClipCondition& clipCondition,
+    OdGeIntArray* pClippedSegmentSourceLabel = NULL) const;
+
+  /** \details
+    Clip a polyline, creating a second polyline.
+
+    \note
+    Currently not implemented.
+  */
+  OdGe::ClipError	clipPolyline(
+    const OdGePoint2dArray& rawVertices, 
+    OdGePoint2dArray& clippedVertices,
+    OdGe::ClipCondition& clipCondition,
+    OdGeIntArray* pClippedSegmentSourceLabel = NULL) const;
+
+  /// Assignment operator.
+  OdGeClipBoundary2d& operator =(const OdGeClipBoundary2d& src);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve2d.h
new file mode 100755
index 0000000..8bbead7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve2d.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_COMPOSITE_CURVE_2D_H
+#define OD_GE_COMPOSITE_CURVE_2D_H /*!DOM*/
+
+#include "Ge/GeCurve2d.h"
+#include "Ge/GeCurve2dPtrArray.h"
+#include "Ge/GeIntArray.h"
+#include "Ge/GeIntervalArray.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents composite curves in 2D space.
+    
+    \remarks
+    Composite curves consists of pointers to any number of subcurves that
+    are joined end to end. Each subcurve must be bounded.
+
+    The parameter at the start of the composite curve is 0.0. The parameter at any
+    point along the composite curve is the approximate length of the
+    composite curve up to that point.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+    
+    \sa
+    <link ge_OdGeCompositeCurve3d.html, Working with Composite Curves>
+*/
+class GE_TOOLKIT_EXPORT OdGeCompositeCurve2d : public OdGeCurve2d
+{
+public:
+  
+
+  /** \param curveList [in]  Array of pointers to subcurves comprising the composite curve.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor creates a composite curve that consists 
+    of a single subcurve: a line segment from (0,0) to (1,0). 
+    
+  */
+  OdGeCompositeCurve2d();
+  OdGeCompositeCurve2d(const OdGeCompositeCurve2d& source);
+  OdGeCompositeCurve2d(const OdGeCurve2dPtrArray& curveList);
+
+  /** \details
+    Returns an array of pointers to subcurves comprising the composite curve.
+
+    \param curvelist [out]  Receives an array of pointers to subcurves comprising the composite curve.
+    
+  */
+  void getCurveList(OdGeCurve2dPtrArray& curveList) const;
+
+  /** \details
+    Sets the curve list of the composite curve.
+
+    \param curvelist [in]  Array of pointers to subcurves comprising the composite curve.
+  */
+  OdGeCompositeCurve2d& setCurveList(const OdGeCurve2dPtrArray& curveList);
+
+  /** \details
+    Returns the parameter on a subcurve, and the index of that subcurve,
+    corresponding to the specified parameter on the composite curve.
+
+    \param param [in]  Parameter value on composite curve.
+    \param crvNum [out]  Receives the curve number of the subcurve.
+    
+  */
+  double globalToLocalParam(double param, 
+                                    int& crvNum) const; 
+
+  /** \details
+    Returns the parameter on the composite curve, corresponding
+    to the specified parameter on the specifed subcurve curve.
+
+    \param param [in]  Parameter value on the subcurve.
+    \param crvNum [in]  Curve number of the subcurve.
+
+  */
+  double localToGlobalParam(double param, 
+                                    int crvNum) const; 
+
+  /** \remarks
+    All of the subcurves of the input curve are copied.         
+  */
+  OdGeCompositeCurve2d& operator =(const OdGeCompositeCurve2d& compCurve);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_COMPOSITE_CURVE_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve3d.h
new file mode 100755
index 0000000..a8414fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCompositeCurve3d.h
@@ -0,0 +1,122 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECOMP3D_H
+#define OD_GECOMP3D_H /*!DOM*/
+
+#include "Ge/GeCurve3d.h"
+#include "Ge/GeIntervalArray.h"
+#include "Ge/GeCurve3dPtrArray.h"
+#include "Ge/GeIntArray.h"
+#include "OdPlatform.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents composite curves in 3D space.
+
+    \remarks
+    Composite curves consists of pointers to any number of subcurves that
+    are joined end to end. Each subcurve must be bounded.
+
+    The parameter at the start of the composite curve is 0.0. The parameter at any
+    point along the composite curve is the approximate length of the
+    composite curve up to that point.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeCompositeCurve3d.html, Working with Composite Curves>
+*/
+class GE_TOOLKIT_EXPORT OdGeCompositeCurve3d : public OdGeCurve3d
+{
+public:
+
+
+  /** \param curvelist [in]  Array of pointers to subcurves comprising the composite curve.
+    \param subCurves [in]  Array of the subcurves comprising the composite curve 
+    \param numSubCurves [in]  Number of subcurves.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor creates a composite curve that consists 
+    of a single subcurve: a line segment from (0,0,0) to (1,0,0). 
+  */
+  OdGeCompositeCurve3d();
+  OdGeCompositeCurve3d(const OdGeCompositeCurve3d& source);
+  OdGeCompositeCurve3d(const OdGeCurve3dPtrArray& curveList);
+
+  // TD Special :
+  OdGeCompositeCurve3d(const OdGeCurve3d* subCurves, 
+                       OdUInt32 numSubCurves);
+
+  /** \details
+  Returns an array of pointers to subcurves comprising the composite curve.
+
+  \param curvelist [out]  Receives an array of pointers to subcurves comprising the composite curve.
+  */
+   void getCurveList(OdGeCurve3dPtrArray& curveList) const;
+
+  /** \details
+  Sets the curve list of the composite curve.
+
+  \param curveList [in]  Array of pointers to subcurves comprising the composite curve.
+  \param subCurves [in]  Array of the subcurves comprising the composite curve. 
+  \param numSubCurves [in]  Number of subcurves.
+  */
+   OdGeCompositeCurve3d& setCurveList(const OdGeCurve3dPtrArray& curveList);
+
+  // TD Special :
+   OdGeCompositeCurve3d& setCurveList(const OdGeCurve3d* subCurves, 
+                                             OdUInt32 number);
+
+  /** \details
+    Returns the parameter on a subcurve, and the index of that subcurve,
+    corresponding to the specified parameter on the composite curve.
+
+    \param param [in]  Parameter value on composite curve.
+    \param crvNum [out]  Receives the curve number of the subcurve.
+  */
+   double globalToLocalParam(double param, int& crvNum) const; 
+
+  /** \details
+    Returns the parameter on the composite curve, corresponding
+    to the specified parameter on the specifed subcurve.
+
+    \param param [in]  Parameter value on the subcurve.
+    \param crvNum [in]  Curve number of the subcurve.
+  */
+   double localToGlobalParam(double param, int crvNum) const; 
+
+  /** \remarks
+    All of the subcurves of the input curve are copied.         
+  */
+  OdGeCompositeCurve3d& operator =(const OdGeCompositeCurve3d& compCurve);
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCone.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCone.h
new file mode 100755
index 0000000..44b64ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCone.h
@@ -0,0 +1,301 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECONE_H
+#define OD_GECONE_H /*!DOM*/
+
+#include "OdPlatformSettings.h"
+#include "Ge/GeSurface.h"
+#include "Ge/GeInterval.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+class OdGeCircArc3d;
+class OdGeLinearEnt3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents cones with a circular base.
+
+    \remarks
+    A circular cone is defined by:
+
+    * axis of symmetry
+    * height
+    * half angle (the angle between the generating line and the axis of symmetry)
+    * origin (a point on the axis of symmetry)
+    * radius at the origin 
+
+    The cross section containing the origin is refered to as the base. 
+    The radius at the base cannot be zero.  
+    This cone may extend on either side of the base.
+
+    The half angle is constrained to the interval (-OdaPI/2, OdaPI/2),
+    and is measured from the symmetric axis of the cone.
+    A negative angle results in an apex on the opposite direction of the
+    symmetric axis.
+
+    Parameter V is the angle of revolution measured from the refAxis
+    (an axis perpendicular to the axis of symmetry). For a closed cone,
+    it defaults to [-OdaPI, OdaPI). The positive V direction is defined 
+    by applying the right hand rule along the axis of symmetry.  
+    The surface is periodic in V with a period of Oda2PI.
+
+    Parameter U varies along the axis of symmetry. U is dimensionless
+    and increases in the direction of the axis of symmetry. 
+    U = 0 corresponds to center of the cone base, 
+    and U = 1 corresponds to the cone apex. 
+
+    [umin, umax] x [vmin, vmax] defines a four sided conical patch
+    bounded by two straight lines (at angles vmin and vmax), and two
+    circular arcs (at umin and umax). The following must be observed
+    when defining a cone:
+
+    * umin < umax
+    * |vmax - vmin| <= Oda2PI.
+    * baseRadius > 0.0
+
+    The height interval of this cone is specified relative to its origin
+    (with the height increasing in the direction of the symmetric
+    axis).
+    
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeCone.html, Working with Cones>
+*/
+class GE_TOOLKIT_EXPORT OdGeCone : public OdGeSurface
+{
+public:
+
+
+  /** \param cosineAngle [in]  The cosine of the angle between the generating line and the axis of symmetry.
+    \param sineAngle [in]  The sine of the angle between the generating line and the axis of symmetry.
+    \param baseOrigin [in]  Center of the base.
+    \param baseRadius [in]  Radius of the base. 
+    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
+    \param refAxis [in]  defines thegle 0 of circular base.
+    \param height [in]  Height interval of the cone.
+    \param startAng [in]  Start angle.
+    \param endAng [in]  End angle.
+
+    \remarks
+    The default constructor uses a half angle of 45�,
+    a reference axis of (1,0,0), a baseOrigin of (0,0,0), and a base radius of 2.0.
+    \note
+    All angles are expressed in radians.
+
+  */
+  OdGeCone();
+  OdGeCone(
+    double cosineAngle, 
+    double sineAngle,
+    const  OdGePoint3d& baseOrigin, 
+    double baseRadius,
+    const  OdGeVector3d& axisOfSymmetry);
+  OdGeCone(
+    double cosineAngle, 
+    double sineAngle,
+    const  OdGePoint3d& baseOrigin, 
+    double baseRadius,
+    const  OdGeVector3d& axisOfSymmetry,
+    const  OdGeVector3d& refAxis, 
+    const  OdGeInterval& height,
+    double startAng, 
+    double endAng);
+  OdGeCone(const OdGeCone& cone);
+
+  /** \details
+  Returns the base radius of this cone.
+  */
+  double baseRadius() const;
+
+  /** \details
+  Returns the center of the base.
+  */
+  OdGePoint3d baseCenter() const;
+
+  /** \details
+  Returns the starting and ending angles of this cone.
+
+  \param startAng [out]  Receives the start angle.
+  \param endAng [out]  Receives the end angle.
+  \note
+  All angles are expressed in radians.
+
+  */
+  void getAngles(
+    double& startAng, 
+    double& endAng) const;
+
+  /** \details
+    Returns the angle between the generating line and the axis of symmetry.
+  */
+  double halfAngle() const;
+
+  /** \details
+    Returns the cosine and the sine of the angle between the generating line and the axis of symmetry.
+
+    \param cosineAngle [out]  Receives the cosine of the angle.
+    \param sineAngle [out]  Receives the sine of the angle.
+  */
+  void getHalfAngle(
+    double& cosineAngle, 
+    double& sineAngle) const;
+
+  /** \details
+    Returns the interval of the axis of symmetry.
+
+    \param height [out]  Receives the interval.
+  */
+  void getHeight(
+    OdGeInterval& height) const;
+
+  /** \details
+    Returns the height of this cone corresponding to
+    the specified position on the U-axis.
+
+    \remarks
+    Parameter U varies along the axis of symmetry.  U is dimensionless,
+    and increases in the direction of the axis of symmetry. 
+
+    \param u [in]  Position on the U-axis of this cone.
+
+  */
+  double heightAt(
+    double u) const;
+
+  /** \details
+    Returns the axis of symmetry of this cone.
+  */
+  OdGeVector3d axisOfSymmetry() const;
+
+  /** \details
+    Returns the reference axis of this cone.
+  */
+  OdGeVector3d refAxis () const;
+
+  /** \details
+    Returns the apex of this cone.
+  */
+  OdGePoint3d apex() const;
+
+  /** \details
+    Returns true if and only if the base of this cone
+    is a full circle within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isClosed(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+  Returns true if and only if the normal to this surface
+  is pointing outward.
+  */
+  bool isOuterNormal() const;
+
+  /** \details
+    Sets the base radius of this cone.
+
+    \param baseRadius [in]  Radius of the base. 
+  */
+  OdGeCone& setBaseRadius(
+    double baseRadius);
+
+  /** \details
+    Sets the starting and ending angles of this cone.
+
+    \param startAng [in]  Start angle.
+    \param endAng [in]  End angle.
+    \note
+    All angles are expressed in radians.
+
+  */
+  OdGeCone& setAngles(
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Sets the height interval of this cone.
+
+    \param height [in]  Height interval of this cone.
+  */
+  OdGeCone& setHeight(
+    const OdGeInterval& height);
+
+  /** \details
+    Sets the parameters for this cone according to the arguments, 
+    and returns a reference to this cone.
+
+    \param cosineAngle [in]  The cosine of the angle between the generating line and the axis of symmetry.
+    \param sineAngle [in]  The sine of the angle between the generating line and the axis of symmetry.
+    \param baseOrigin [in]  Center of the base.
+    \param baseRadius [in]  Radius of the base. 
+    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
+    \param refAxis [in]  defines thegle 0 of circular base.
+    \param height [in]  Height interval of this cone.
+    \param startAng [in]  Start angle.
+    \param endAng [in]  End angle.
+    
+    \note
+    All angles are expressed in radians.
+
+  */
+  OdGeCone& set(
+    double cosineAngle, 
+    double sineAngle,
+    const OdGePoint3d& baseCenter,
+    double baseRadius,
+    const OdGeVector3d& axisOfSymmetry);
+  OdGeCone& set(
+    double cosineAngle, 
+    double sineAngle,
+    const OdGePoint3d& baseCenter,
+    double baseRadius,
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& refAxis,
+    const OdGeInterval& height,
+    double startAng, 
+    double endAng);
+  
+  OdGeCone& operator =(const OdGeCone& cone);
+
+  /** \details
+    Computes the intersection of this object with a linear entity.
+  */
+  bool intersectWith(
+    const OdGeLinearEnt3d& linEnt, 
+    int& numInt,
+    OdGePoint3d& p1,
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GECONE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve2d.h
new file mode 100755
index 0000000..7aafae9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve2d.h
@@ -0,0 +1,157 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_CUBIC_SPLINE_CURVE_2D_H
+#define OD_GE_CUBIC_SPLINE_CURVE_2D_H /*!DOM*/
+
+//
+/** \details
+  
+   This file contains the class OdGeCubicSplineCurve2d - A mathematic
+   entity used to represent a 2d interpolation cubic-spline curve.
+*/
+
+#include "Ge/GeSplineEnt2d.h"
+#include "Ge/GePoint2dArray.h"
+#include "Ge/GeVector2dArray.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents 2D interpolation cubic spline curves.
+    Currently not implemented.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeCubicSplineCurve2d : public OdGeSplineEnt2d
+{
+public:
+  /** \param fitPnts [in]  An array of 2D fit points.
+    \param tol [in]  Geometric tolerance.
+    \param startDeriv [in]  Starting derivative of the cubic spline curve.
+    \param endDeriv [in]  Ending derivative of this cubic spline curve.
+    \param curve [in]  A curve to be approximated by this cubic spline curve.
+    \param knots [in]  Knot vector.
+    \param isPeriodic [in]  True if and only if the cubic spline curve is to be periodic (closed).
+    \param firstDerivs [in]  Array of first derivatives at the fit points.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    OdGeCubicCplineCurve2d(fitPnts, tol) constructs a periodic (closed)
+    cubic spline curve. The last fit point must equal the first.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCubicSplineCurve2d();
+  OdGeCubicSplineCurve2d(
+    const OdGeCubicSplineCurve2d& source);
+  OdGeCubicSplineCurve2d(
+    const OdGePoint2dArray& fitPnts,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCubicSplineCurve2d(
+    const OdGePoint2dArray& fitPnts,
+    const OdGeVector2d& startDeriv,
+    const OdGeVector2d& endDeriv,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCubicSplineCurve2d(
+    const OdGeCurve2d& curve,
+    double tol 
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    );
+  OdGeCubicSplineCurve2d(
+    const OdGeKnotVector& knots,
+    const OdGePoint2dArray& fitPnts,
+    const OdGeVector2dArray& firstDerivs,
+    bool isPeriodic = false);
+
+  /** \details
+    Returns the number of fit points.
+
+    \note
+    Currently not implemented.
+  */
+  int numFitPoints() const;
+
+  /** \details
+    Returns the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+
+    \note
+    Currently not implemented.
+  */
+  OdGePoint2d fitPointAt(
+    int fitPointIndex) const;
+
+  /** \details
+    Sets the fit point at the specified index, and returns a reference to this curve.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Any 2D point.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCubicSplineCurve2d& setFitPointAt(
+    int fitPointIndex, 
+    const OdGePoint2d& point);
+
+  /** \details
+    Returns the first derivative at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeVector2d firstDerivAt(
+    int fitPointIndex) const;
+
+  /** \details
+    Sets the first derivative at the specified index, and returns a reference to this curve.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param deriv [in]  The first derivative at the fit point.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCubicSplineCurve2d& setFirstDerivAt(
+    int fitPointIndex, 
+    const OdGeVector2d& deriv);
+
+  /** \note
+    Currently not implemented.
+  */
+    OdGeCubicSplineCurve2d&  operator =(
+    const OdGeCubicSplineCurve2d& spline);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_CUBIC_SPLINE_CURVE_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve3d.h
new file mode 100755
index 0000000..310e2e3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCubicSplineCurve3d.h
@@ -0,0 +1,148 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECSPL3D_H
+#define OD_GECSPL3D_H /*!DOM*/
+
+#include "Ge/GeSplineEnt3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents 3D interpolation cubic spline curves.
+    Currently not implemented.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeCubicSplineCurve3d : public OdGeSplineEnt3d
+{
+public:
+
+
+  /** \param fitPnts [in]  An array of 3D fit points.
+    \param tol [in]  Geometric tolerance.
+    \param startDeriv [in]  Starting derivative of the cubic spline curve.
+    \param endDeriv [in]  Ending derivative of this cubic spline curve.
+    \param curve [in]  A curve to be approximated by this cubic spline curve.
+    \param knots [in]  Knot vector.
+    \param isPeriodic [in]  True if and only if the cubic spline curve is to be periodic (closed).
+    \param firstDerivs [in]  Array of first derivatives at the fit points.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    OdGeCubicCplineCurve3d(fitPnts, tol) constructs a periodic (closed)
+    cubic spline curve. The last fit point must equal the first.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCubicSplineCurve3d();
+  OdGeCubicSplineCurve3d(
+    const OdGeCubicSplineCurve3d& source);
+  OdGeCubicSplineCurve3d(
+    const OdGePoint3dArray& fitPnts,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCubicSplineCurve3d(
+    const OdGePoint3dArray& fitPnts,
+    const OdGeVector3d& startDeriv,
+    const OdGeVector3d& endDeriv,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCubicSplineCurve3d(
+    const OdGeCurve3d& curve,
+    double epsilon 
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    );
+  OdGeCubicSplineCurve3d(
+    const OdGeKnotVector& knots,
+    const OdGePoint3dArray& fitPnts,
+    const OdGeVector3dArray& firstDerivs,
+    bool isPeriodic = false);
+
+  /** \details
+    Returns the number of fit points.
+
+    \note
+    Currently not implemented.
+  */
+   int numFitPoints() const;
+
+  /** \details
+    Returns the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d fitPointAt(
+    int fotPointIndex) const;
+
+  /** \details
+    Sets the fit point at the specified index, and returns a reference to this curve.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Any 3D point.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeCubicSplineCurve3d& setFitPointAt(
+    int fitPointIndex, 
+    const OdGePoint3d& point);
+
+  /** \details
+    Returns the first derivative at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d firstDerivAt(
+    int fitPointIndex) const;
+
+  /** \details
+    Sets the first derivative at the specified index, and returns a reference to this curve.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param deriv [in]  The first derivative at the fit point.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeCubicSplineCurve3d& setFirstDerivAt(
+    int fitPointIndex, 
+    const OdGeVector3d& deriv);
+
+  OdGeCubicSplineCurve3d&  operator =(
+    const OdGeCubicSplineCurve3d& spline);
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2d.h
new file mode 100755
index 0000000..43ad709
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2d.h
@@ -0,0 +1,528 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_CURVE_2D_H
+#define OD_GE_CURVE_2D_H /*!DOM*/
+
+class OdGePointOnCurve2d;
+class OdGeInterval;
+class OdGeMatrix2d;
+class OdGeLine2d;
+class OdGePointOnCurve2dData;
+class OdGeBoundBlock2d;
+
+#include "Ge/GeEntity2d.h"
+#include "Ge/GeIntArray.h"
+#include "Ge/GePoint2d.h"
+#include "Ge/GePoint2dArray.h"
+#include "Ge/GeVector2d.h"
+#include "Ge/GeVector2dArray.h"
+#include "Ge/GeCurve2dPtrArray.h"
+#include "Ge/GeDoubleArray.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all OdGe 2D curves.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeCurve2d : public OdGeEntity2d
+{
+public:
+  
+
+  /** \details
+    Returns the parametric interval of the curve.
+
+    \param interval [out]  Receives the parametric interval of the curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getInterval(
+    OdGeInterval& interval) const;
+
+  /** \details
+    Returns the parametric interval of the curve.
+
+    \param interval [out]  Receives the parametric interval of the curve.
+    \param start [out]  Receives the start point of interval.
+    \param end [out]  Receives the end point of interval. 
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getInterval(
+    OdGeInterval& interval, 
+    OdGePoint2d& start,
+    OdGePoint2d& end) const;
+
+  /** \details
+    Reverses the parameter direction this curve.   
+
+    \remarks
+    The point set of this curve is unchanged.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  OdGeCurve2d& reverseParam();
+  
+  /** \details
+    Sets to natural domain of the curve
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  OdGeCurve2d& setInterval();
+
+  /** \details
+    Sets the parametric interval of this curve.
+
+    \param interval [in]  Parametric interval of this curve
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool setInterval(
+    const OdGeInterval& interval);
+
+  /** \details
+    Returns the distance between the input point and the closest 
+    point on this curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  double distanceTo(
+    const OdGePoint2d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the distance between the closest points between this 
+    curve and the input curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  double distanceTo(
+    const OdGeCurve2d& otherCur,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Finds the closest point on this curve to the input point. 
+
+    \note
+    This function is the same as getClosestPointTo().
+  */
+  OdGePoint2d closestPointTo(
+    const OdGePoint2d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  
+  /** \details
+    Finds the closest points between this curve and the input curve.
+
+    \note
+    This function is the same as getClosestPointTo().
+  */
+  OdGePoint2d closestPointTo(
+    const OdGeCurve2d& curve2d,
+    OdGePoint2d& pntOnOtherCrv,
+    const OdGeTol& tol= OdGeContext::gTol) const;
+
+  /** \details
+    Finds the closest point on this curve to the input point. 
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getClosestPointTo(
+    const OdGePoint2d& point,
+    OdGePointOnCurve2d& pntOnCrv,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Finds the closest points between this curve and the input curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getClosestPointTo(
+    const OdGeCurve2d& curve2d,
+    OdGePointOnCurve2d& pntOnThisCrv,
+    OdGePointOnCurve2d& pntOnOtherCrv,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Finds the point on the input curve whose normal passes through the input point. 
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool getNormalPoint(
+    const OdGePoint2d& point,
+    OdGePointOnCurve2d& pntOnCrv,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  TD_USING(OdGeEntity2d::isOn);
+
+  /** \details
+    Determines if pnt lies on curve. 
+    The param parameter is only set to a meaningful value 
+    if this function returns true.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool isOn(
+    const OdGePoint2d& point, 
+    double& param,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Determines if input parameter value is within valid parametric range of curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool isOn(
+    double param,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the parameter value of a point.
+
+    \param point [in]  Input point on the curve.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    The returned parameters specify a point within tol of point.
+    If point is not on the curve, the results are unpredictable.
+    If you are not sure the point is on the curve, use 
+    isOn () instead of this function.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  double paramOf(
+    const OdGePoint2d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Return the offset of the curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getTrimmedOffset(
+    double distance,
+    OdGeCurve2dPtrArray& offsetCurveList,
+    OdGe::OffsetCrvExtType extensionType = OdGe::kFillet,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the curve is closed within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isClosed(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Determines if the curve is periodic. The curve is periodic if and 
+    only if it is closed and the two points evalPoint(t) and 
+    evalPoint(t+period) are always the same point for all values of t. 
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool isPeriodic(
+    double& period) const;
+
+  /** \details
+    Returns true, and a linear entity coincident with this curve,
+    if and only if this curve is linear.
+
+    \param line [out]  Receives the line coincident with this curve.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    An infinite line is returned, even if this curve is bounded.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool isLinear(
+    OdGeLine2d& line, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the arc length of the curve between the two parameter values.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  double length(
+    double fromParam, 
+    double toParam,
+    double tol
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    ) const;
+  
+  double length(
+    double tol 
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    ) const;
+
+  /** \details
+    Returns the parameter value of the point whose arc length distance.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  double paramAtLength(
+    double datumParam, 
+    double length,
+    bool posParamDir 
+#ifndef SWIG
+    = true
+#endif
+    , double tol 
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    ) const;
+
+  /** \details
+    Returns the area of the interval of the curve defined by 
+    startParam and endParam. 
+  */
+  bool area(
+    double startParam, double endParam,
+    double& value, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Determines if the curve is degenerate and if so 
+    returns type of entity that the curve degenerates. 
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool isDegenerate(
+    OdGe::EntityId& degenerateType,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Determines if the curve is degenerate and if so returns 
+    the entity that the curve degenerates into.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool isDegenerate(
+    OdGeEntity2d*& pConvertedEntity,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns two segments that are obtained by splitting the curve 
+    at the input parameter value. If the specified parameter value
+    does not lie within the parametric interval of the curve or if
+    it corresponds to the start or endpoint of the curve, then piece1
+    and piece2 are set to null.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getSplitCurves(
+    double param, 
+    OdGeCurve2d*& piece1,
+    OdGeCurve2d*& piece2) const;
+
+  /** \details
+    Explode curve into its component sub-curves.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool explode(
+    OdGeCurve2dPtrArray& explodedCurves,
+    OdGeIntArray& newExplodedCurve,
+    const OdGeInterval* interval = NULL) const;
+
+  /** \details
+    Local closest points.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getLocalClosestPoints(
+    const OdGePoint2d& point,
+    OdGePointOnCurve2d& approxPnt,
+    const OdGeInterval* nbhd = NULL,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  void getLocalClosestPoints(
+    const OdGeCurve2d& otherCurve,
+    OdGePointOnCurve2d& approxPntOnThisCrv,
+    OdGePointOnCurve2d& approxPntOnOtherCrv,
+    const OdGeInterval* nbhd1 = NULL,
+    const OdGeInterval* nbhd2 = NULL,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    oriented bounding box of curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  OdGeBoundBlock2d boundBlock() const;
+  OdGeBoundBlock2d boundBlock(
+    const OdGeInterval& range) const;
+
+  /** \details
+    bounding box whose sides are parallel to coordinate axes.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  OdGeBoundBlock2d orthoBoundBlock() const;
+  OdGeBoundBlock2d orthoBoundBlock(
+    const OdGeInterval& range) const;
+
+  /** \details
+    Returns true, and the start point, if and only if the parametric interval of the curve has a lower bound.
+
+    \param startPoint [out]  Receives the start point of the interval.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool hasStartPoint(
+    OdGePoint2d& startPoint) const;
+
+  /** \details
+    Returns true, and the end point, if and only if the parametric interval of the curve has an upper bound.
+
+    \param endPoint [out]  Receives the end point of the interval.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  bool hasEndPoint(
+    OdGePoint2d& endPoint) const;
+
+  /** \details
+    Returns the point on the curve corresponding to the specified parameter value, and the derviatives at that point.
+
+    \param param [in]  Parameter to be evaluated.
+    \param numDeriv [in]  The number of derivatives to be computed 
+                 (should not be set larger than 2). 
+    \param derivatives [out] Receives an array of derivatives at the point corresponding to param.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+  OdGePoint2d evalPoint(
+    double param) const;
+  OdGePoint2d evalPoint(
+    double param, 
+    int numDeriv,
+    OdGeVector2dArray& derivatives) const;
+
+  /** \details
+    Returns sample points along this curve and their parameter values in the specified arrays.
+
+    \param fromParam [in]  Starting parameter value.
+    \param toParam [in]  Ending parameter value.
+    \param approxEps [in]  Approximate spacing along a curve.
+    pointArray Returns an array of sample points.
+    paramArray Returns an array of parameters at each point.
+  */
+  void getSamplePoints(
+    double fromParam, 
+    double toParam, 
+    double approxEps, 
+    OdGePoint2dArray& pointArray, 
+    OdGeDoubleArray& paramArray) const;
+  void getSamplePoints(
+    int numSample, 
+    OdGePoint2dArray& pointArray) const;
+
+  OdGeCurve2d& operator =(const OdGeCurve2d& curve);
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  void getSamplePoints(
+    double fromParam, 
+    double toParam, 
+    double approxEps, 
+    OdGePoint2dArray& pointArray, 
+    OdGeDoubleArray* pParamArray = NULL) const;
+
+  /** \details
+    Appends sample points along this curve and their parameter values to the specified arrays.
+
+    \param fromParam [in]  Starting parameter value.
+    \param toParam [in]  Ending parameter value.
+    \param approxEps [in]  Approximate spacing along a curve.
+    \param numSample [in]  Number of samples.
+    \param pointArray [out]  Receives an array of sample points.
+    \param pParamArray [in]  Pointer to an array to receive the parameters at each point.
+  */
+  void appendSamplePoints(
+    double fromParam, 
+    double toParam, 
+    double approxEps, 
+    OdGePoint2dArray& pointArray, 
+    OdGeDoubleArray* pParamArray = NULL) const;
+
+  void appendSamplePoints(
+    int numSample, 
+    OdGePoint2dArray& pointArray) const;
+
+protected:
+  /** \param source [in]  Object to be cloned.
+  */
+  OdGeCurve2d();
+  OdGeCurve2d(
+    const OdGeCurve2d& source);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_CURVE_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2dPtrArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2dPtrArray.h
new file mode 100755
index 0000000..65c7f11
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve2dPtrArray.h
@@ -0,0 +1,47 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GESHAREDCURVE_2D_PRT_H
+#define OD_GESHAREDCURVE_2D_PRT_H /*!DOM*/
+
+//#include "Ge/GeCurve2d.h"
+#include "SharedPtr.h"
+
+class OdGeCurve2d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This template class is a specialization of the OdSharedPtr class template for 2D curves.
+*/
+typedef OdSharedPtr<OdGeCurve2d> OdGeCurve2dPtr;
+
+/** \details
+    This template class is a specialization of the OdArray class template for 2D curve shared pointers.
+*/
+typedef OdArray<OdGeCurve2dPtr> OdGeCurve2dPtrArray;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3d.h
new file mode 100755
index 0000000..0d6de68
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3d.h
@@ -0,0 +1,689 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_GECURVE3D_H_
+#define _OD_GECURVE3D_H_ /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GeVector3dArray.h"
+#include "Ge/GeCurve3dPtrArray.h"
+#include "Ge/GeIntArray.h"
+#include "Ge/GeInterval.h"
+#include "Ge/GeBoundBlock3d.h"
+class OdGeCurve2d;
+class OdGeSurface;
+class OdGePoint3d;
+class OdGePlane;
+class OdGeVector3d;
+class OdGeLinearEnt3d;
+class OdGeLine3d;
+class OdGePointOnCurve3d;
+class OdGePointOnSurface;
+class OdGeMatrix3d;
+class OdGePointOnCurve3dData;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all OdGe 3D curves.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeCurve3d : public OdGeEntity3d
+{
+public:
+
+
+  /** \details
+      Returns the parametric interval of this curve.
+
+      \param interval [out]  Receives the parametric interval of this curve.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+    void getInterval(
+    OdGeInterval& interval) const;
+   void getInterval(
+    OdGeInterval& interval, 
+    OdGePoint3d& start, 
+    OdGePoint3d& end) const;
+
+  /** \details
+    Reverses the parameter direction this curve.   
+
+    \remarks
+    The point set of this curve is unchanged.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+   OdGeCurve3d& reverseParam();
+
+  /** \details
+    Sets the parametric interval of this curve.
+
+    \param interval [in]  Parametric interval of this curve
+    
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+         OdGeCurve3d& setInterval();
+   bool setInterval(
+    const OdGeInterval& interval);
+
+  /** \details
+    Returns the distance to the point on this curve closest to the specified point or curve.
+
+    \param point [in]  Any 3D point.
+    \param curve [in]  Any 3D curve.
+    \param tol [in]  Geometric tolerance.
+  */
+   double distanceTo(
+    const OdGePoint3d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   double distanceTo(
+    const OdGeCurve3d& curve, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this curve closest to the specified point or curve, and the point
+    on the other curve closest to this curve.
+
+    \param point [in]  Any 3D point.
+    \param curve [in]  Any 3D curve.
+    \param pntOnOtherCrv [out]  Receives the closest point on other curve.
+    \param tol [in]  Geometric tolerance.
+  */
+   OdGePoint3d closestPointTo(
+    const OdGePoint3d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   OdGePoint3d closestPointTo(
+    const OdGeCurve3d& curve, 
+    OdGePoint3d& pntOnOtherCrv, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this curve closest to the specified point or curve, 
+    and the point on the other curve closest to this curve.
+
+    \param point [in]  Any 3D point.
+    \param curve [in]  Any 3D curve.
+    \param pntOnThisCrv [out]  Receives the closest point on this curve.
+    \param pntOnOtherCrv [out]  Receives the closest point on other curve.
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+   void getClosestPointTo(
+    const OdGePoint3d& point, 
+    OdGePointOnCurve3d& pntOnCrv, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   void getClosestPointTo(
+    const OdGeCurve3d& curve, 
+    OdGePointOnCurve3d& pntOnThisCrv, 
+    OdGePointOnCurve3d& pntOnOtherCrv, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this curve closest to the specified point or curve, 
+    and the point on the other curve closest to this curve, when this curve
+    is projected in the specified direction.
+
+    \param point [in]  Any 3D point.
+    \param curve [in]  Any 3D curve.
+    \param projectDirection [in]  Projection Direction.
+    \param pntOnOtherCrv [out]  Receives the closest point on other curve.
+    \param tol [in]  Geometric tolerance.
+   
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+   OdGePoint3d projClosestPointTo(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& projectDirection, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   OdGePoint3d projClosestPointTo(
+    const OdGeCurve3d& curve, 
+    const OdGeVector3d& projectDirection, 
+    OdGePoint3d& pntOnOtherCrv, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this curve closest to the specified point or curve, 
+    and the point on the other curve closest to this curve, when this curve
+    is projected in the specified direction.
+
+    \param point [in]  Any 3D point.
+    \param curve [in]  Any 3D curve.
+    \param projectDirection [in]  Projection Direction.
+    \param pntOnCrv [out]  Receives the closest point on this curve.
+    \param pntOnOtherCrv [out]  Receives the closest point on other curve.
+    \param tol [in]  Geometric tolerance.
+   
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+   void getProjClosestPointTo(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& projectDirection, 
+    OdGePointOnCurve3d& pntOnCrv, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   void getProjClosestPointTo(
+    const OdGeCurve3d& curve,
+    const OdGeVector3d& projectDirection,
+    OdGePointOnCurve3d& pntOnThisCrv,
+    OdGePointOnCurve3d& pntOnOtherCrv,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true, and the point on this curve whose normal vector passes through the specified point,
+    if and only if a normal point was found.
+
+    \param point [in]  Any 3D point.
+    \param pntOnCrv [out]  Receives the normal point.
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+   bool getNormalPoint(
+    const OdGePoint3d& point, 
+    OdGePointOnCurve3d& pntOnCrv, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the oriented bounding box of curve.
+
+    \param range [in]  Sub-interval of this curve to be bounded.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+   OdGeBoundBlock3d boundBlock() const;
+   OdGeBoundBlock3d boundBlock(
+    const OdGeInterval& range) const;
+
+  /** \details
+    Returns the bounding box whose edges are aligned with the coordinate axes.
+
+    \param range [in]  Interval of this curve to be bounded.
+  */
+   OdGeBoundBlock3d orthoBoundBlock() const;
+   OdGeBoundBlock3d orthoBoundBlock(
+    const OdGeInterval& range) const;
+
+   OdGeEntity3d* project(
+    const OdGePlane& projectionPlane,
+    const OdGeVector3d& projectDirection,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  
+   OdGeEntity3d* orthoProject(
+    const OdGePlane& projectionPlane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  // Tests if point is on *curve*.
+  TD_USING(OdGeEntity3d::isOn);
+   bool isOn(
+    const OdGePoint3d& point, 
+    double& param,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool isOn(
+    double param, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the parameter value of a point.
+
+    \param point [in]  Point to be evaluated.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    The returned parameters specify a point within tol of point.
+    If point is not on this curve, the results are unpredictable.
+    If you are not sure the point is on this curve, use 
+    isOn () instead of this function.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+    
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+   double paramOf(
+    const OdGePoint3d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns one or more trimmed offset curves.
+
+    \param distance [in]  Offset distance.
+    \param planeNormal [in]  A normal to the plane of this curve.
+    \param offsetCurveList [out]  Receives an array of trimmed offset curves.
+    \param extensionType [in]  How curves will be extended at discontinuities of type C1.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    The offsets are trimmed to eliminate self-intersecting loops.
+
+    The curve is assumed to be planar, and planeNomal is assumed to be 
+    normal to the curve plane.
+
+    the direction of positive offset at any point on this curve
+    is the cross product of planeNormal and the tangent to the
+    curve at that point.
+
+    The new operator is used to create the curves returned by 
+    offsetCurveList. It is up to the caller to delete these curves.
+
+    \note
+    Currently not implemented. 
+
+    Throws:
+    <table>
+    Exception    
+    eNotImplemented
+    </table>
+  */
+   void getTrimmedOffset(
+    double distance, 
+    const OdGeVector3d& planeNormal, 
+    OdGeCurve3dPtrArray& offsetCurveList, 
+    OdGe::OffsetCrvExtType extensionType = OdGe::kFillet, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if this curve is closed within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isClosed(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if this curve is planar, and returns
+    the plane of this curve.
+
+    \param plane [out]  Receives the plane of this curve.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    Lines are considered planar the returned plane is an
+    arbitrary plane containing the line.
+  */
+   bool isPlanar(
+    OdGePlane& plane, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true, and a linear entity coincident with this curve,
+    if and only if this curve is linear.
+
+    \param line [out]  Receives the line coincident with this curve.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    An infinite line is returned, even if this curve is bounded.
+    
+    \note
+    As implemented, this function does nothing but
+    return false.
+    It will be fully implemented in a future release.
+    
+  */
+   bool isLinear(
+    OdGeLine3d& line,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns True if the specified curve entity is coplanar with 
+    this curve and returns the common plane.
+
+    \param curve [in]  Any 3D curve.
+    \param plane [out]  Receives the plane of the curves.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isCoplanarWith(
+    const OdGeCurve3d& curve, 
+    OdGePlane& plane, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if this curve is periodic for the specified period.
+
+    \param period [out]  Receives the period of this curve. 
+  */
+   bool isPeriodic(
+    double& period) const;
+
+  /** \details
+    Returns the length of this curve over the specified parameter range.
+
+    \param fromParam [in]  Starting parameter value.
+    \param toParam [in]  Ending parameter value.
+    \param tol [in]  Geometric tolerance.
+    
+  */
+         double length(
+    double fromParam, 
+    double toParam, 
+    double tol 
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    ) const;
+
+   double length(
+    double tol 
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    ) const;
+
+  /** \details
+    Returns the parameter of the point a specified distance 
+    from the starting point corresponding to datumParam.
+
+    \param datumParam [in]  Parameter corresponding to the start point.
+    \param length [in]  Distance along curve from the start point.
+    \param posParamDir [in]  True if and only if returned parameter is to be greater than dataParam.
+    \param tol [in]  Geometric tolerance.
+  */
+         double paramAtLength( 
+    double datumParam, 
+    double length, 
+    bool posParamDir 
+#ifndef SWIG
+    = true
+#endif
+    , double tol 
+#ifndef SWIG
+    = OdGeContext::gTol.equalPoint()
+#endif
+    ) const;
+
+  /** \details
+    Determines the area of this curve between the specified parameters. 
+    Returns true (and a value) if and only if this curve is planar. 
+
+    \param startParam [in]  Starting parameter value.
+    \param endParam [in]  Ending parameter value.
+    \param value [out]  Receives the area.
+    \param tol [in]  Geometric tolerance.
+  */
+         bool area(
+    double startParam, 
+    double endParam, 
+    double& value, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if this curve degenerates, and returns
+    the entity or type of entity to which this curve degenerates.
+
+    \param degenerateType [out]  Receives the type of curve to which this curve degenerates.
+    \param pConvertedEntity [out]  Receives a pointer to the object to which this curve degenerates.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    If isDegenerate returns true, the returned object was created with the new operator, and it is the responsibility of the caller to delete it.
+  */
+         bool isDegenerate(
+    OdGe::EntityId& degenerateType, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool isDegenerate(
+    OdGeEntity3d*& pConvertedEntity, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns pointers to the two curves that result from splitting this curve at the point corresponding 
+    to param.
+
+    \param param [in]  The parameter value corresponding to the split point.
+    \param piece1 [out]  Receives a pointer to the first curve.
+    \param piece2 [out]  Receives a pointer to the second curve.
+
+    \remarks
+    If param corresponds to a point not on this curve,
+    or to the start point or end point of this curve,
+    piece1 and piece2 are set to NULL.
+
+    The curves pointed to by piece1 and piece2 
+    are created with the new command, and must be deleted by the caller. 
+  */
+         void getSplitCurves(
+    double param, 
+    OdGeCurve3d*& piece1,
+    OdGeCurve3d*& piece2) const;
+
+  /** \details
+    Explodes this curve over the specified interval.
+
+    \param explodedCurves [out]  Receives an array of pointers to the subcurves from the explosion.
+    \param newExplodedCurves [out]  Receives an array of flags which, if true, correspond to those explodedCurves the caller must delete.
+    \param pInterval [in]  Pointer to the interval to be exploded. Defaults to entire curve.
+
+    \remarks
+    The original curve is not changed.
+  */
+         bool explode(
+    OdGeCurve3dPtrArray& explodedCurves, 
+    OdGeIntArray& newExplodedCurves, 
+    const OdGeInterval* pInterval = NULL) const;
+
+  /** \details
+    Returns the point on this curve locally closest to the specified point
+    or curve, and the point on the other curve locally closest to this curve.
+
+    \param point [in]  Any 3D point.
+    \param curve [in]  Any 3D curve.
+    \param approxPntOnThisCrv [in/out] Approximate point on this curve.
+    \param approxPntOnOtherCrv [in/out] Approximate point on other curve.
+    \param pInterval1 [in] Pointer to the interval in which the point on this curve must lie.
+    \param pInterval2 [in] Pointer to the interval in which the point on the other curve must lie.
+    \param tol [in] Geometric tolerance.
+  */
+         void getLocalClosestPoints(
+    const OdGePoint3d& point,
+    OdGePointOnCurve3d& approxPntOnThisCrv,
+    const OdGeInterval* pInterval1 = NULL,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+   void getLocalClosestPoints(
+    const OdGeCurve3d& curve,
+    OdGePointOnCurve3d& approxPntOnThisCrv,
+    OdGePointOnCurve3d& approxPntOnOtherCrv,
+    const OdGeInterval* pInterval1 = NULL,
+    const OdGeInterval* pInterval2 = NULL,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true, and the start point, if and only if the parametric interval of this curve has a lower bound.
+
+    \param startPoint [out]  Receives the start point.
+  */
+   bool hasStartPoint(
+    OdGePoint3d& startPoint) const;
+
+  /** \details
+    Returns true, and the end point,  if and only if the parametric interval of this curve has an upper bound.
+
+    \param endPoint [out]  Receives the end point.
+  */
+   bool hasEndPoint(
+    OdGePoint3d& endPoint) const;
+
+  /** \details
+    Returns the point on this curve corresponding to the specified parameter value,
+    and the derivatives at that point.
+
+    \param param [in]  Parameter to be evaluated.
+    \param numDeriv [in]  Number of derivatives to be computed.
+    \param derivatives [out]  Receives an array of derivatives at the point corresponding to param.
+
+  */
+   OdGePoint3d evalPoint(
+    double param) const;
+   OdGePoint3d evalPoint(
+    double param, 
+    int numDeriv, 
+    OdGeVector3dArray& derivatives) const;
+
+  /** \details
+    Returns sample points along this curve and their parameter values in the specified arrays.
+
+    \param fromParam [in]  Starting parameter value.
+    \param toParam [in]  Ending parameter value.
+    \param paramInterval [in]  Pointer to the parametric interval.
+    \param approxEps [in]  Approximate spacing along a curve.
+    \param numSample [in]  Number of samples.
+    \param pointArray [out]  Receives an array of sample points.
+    \param paramArray [out]  Receives an array of parameters at each point.
+    \param forceResampling [in]  sample points are forced to be regenerated
+  */
+   void getSamplePoints(
+    double fromParam, 
+    double toParam, 
+    double approxEps, 
+    OdGePoint3dArray& pointArray, 
+    OdGeDoubleArray& paramArray,
+    bool forceResampling = false) const;
+   void getSamplePoints(
+    int numSample, 
+    OdGePoint3dArray& pointArray) const;
+   void getSamplePoints(
+    int numSample, 
+    OdGePoint3dArray& pointArray,
+    OdGeDoubleArray& paramArray) const;
+
+  // Assignment operator.
+  OdGeCurve3d& operator =(const OdGeCurve3d& curve);
+
+  ///////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+    Returns sample points along this curve and their parameter values in the specified arrays.
+	Not implemented for third-party use only.
+
+    \param paramInterval [in]  Pointer to the parametric interval.
+
+    \remarks
+    If paramInterval is null, the current curve interval will be used.
+  */
+   void getSamplePoints(
+    double fromParam, 
+    double toParam, 
+    double approxEps, 
+    OdGePoint3dArray& pointArray, 
+    OdGeDoubleArray* paramArray = NULL) const;
+   void getSamplePoints(
+    const OdGeInterval* paramInterval,
+    double approxEps, 
+    OdGePoint3dArray& pointArray,
+    OdGeDoubleArray* pParamArray = NULL) const;
+
+  /** \details
+    Appends sample points along this curve and their parameter values to the specified arrays.
+	
+    \param fromParam [in]  Starting parameter value.
+    \param toParam [in]  Ending parameter value.
+    \param paramInterval [in]  Pointer to the parametric interval.
+    \param approxEps [in]  Approximate spacing along a curve.
+    \param numSample [in]  Number of samples.
+    \param pointArray [out]  Receives an array of sample points.
+    \param paramArray [out]  Receives an array of parameters at each point.
+
+    \remarks
+    If paramInterval is null, the current curve interval will be used.
+    The signature appendSamplePoints(double, double, double, OdGePoint3dArray&, OdGeDoubleArray*) is currently not implemented.
+  */
+   void appendSamplePoints(
+    double fromParam, 
+    double toParam, 
+    double approxEps, 
+    OdGePoint3dArray& pointArray, 
+    OdGeDoubleArray* pParamArray = NULL) const;
+   void appendSamplePoints(
+    int numSample, 
+    OdGePoint3dArray& pointArray,
+    OdGeDoubleArray* pParamArray = NULL) const;
+   void appendSamplePoints(
+    const OdGeInterval *paramInterval, 
+    double approxEps, 
+    OdGePoint3dArray& pointArray, 
+    OdGeDoubleArray* pParamArray = NULL) const;
+
+protected:
+  OdGeCurve3d();
+  OdGeCurve3d(
+    const OdGeCurve3d& source);
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3dPtrArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3dPtrArray.h
new file mode 100755
index 0000000..96433f6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurve3dPtrArray.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GESHAREDCURVE_3D_PRT_H
+#define OD_GESHAREDCURVE_3D_PRT_H /*!DOM*/
+
+//#include "Ge/GeCurve3d.h"
+#include "SharedPtr.h"
+
+class OdGeCurve3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This template class is a specialization of the OdSharedPtr class template for 3D curves.
+*/
+typedef OdSharedPtr<OdGeCurve3d> OdGeCurve3dPtr;
+
+/** \details
+    This template class is a specialization of the OdArray class template for 3D curve shared pointers.
+*/
+typedef OdArray<OdGeCurve3dPtr> OdGeCurve3dPtrArray;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveBoundary.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveBoundary.h
new file mode 100755
index 0000000..516e69f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveBoundary.h
@@ -0,0 +1,195 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_CURVE_BOUNDARY_H
+#define OD_GE_CURVE_BOUNDARY_H /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+
+class OdGeCurve2d;
+class OdGeEntity3d;
+class OdGePosition3d;
+
+#include "TD_PackPush.h"
+/** \details
+    This class represents the boundary geometry (face loops) on a bounded surface.
+
+    \remarks
+    Each face loop consists of four arrays:
+    
+    * 3D curve or position pointers
+    * 2D parameter space curve pointers
+    * 3D orientations
+    * 2D orientations
+    
+    There is a one-to-one correspondence between elements in the arrays, although certain 
+    elements of a given array could be NULL, or meaningless.
+
+    Loop degeneracies are represented as follows:
+    
+    * The entire loop degenerates to a single model space point, which is
+      represented by the tuple (numElements = 1, position3d, curve2d).
+      The curve2d may be NULL. The edge sense, and the curve2d sense are
+      irrelevant. isDegenerate() method allows the determination of this
+      condition on a loop.
+    * A loop consisting of one or more model space degeneracies
+      is represented as the general case with those edges that are
+      degenerate represented by position3d. This implies that in the
+      general case, model space geometry of a curve boundary may consist of
+      curve3d and/or position3d pointers. Consequently, this geometry is
+      obtained by the user as entity3d pointers. The degeneracy of a
+      constituent edge can be detected by the type of the model space
+      geometry.
+   
+    This class also supports the ownership of its geometry. Being the
+    owner of its geometry would cause it to remove the geometry on
+    destruction of an instance of the class.
+       
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeCurveBoundary.html, Working with Curve Boundaries>
+*/
+class GE_TOOLKIT_EXPORT OdGeCurveBoundary
+{
+public:
+  /** \param numCurves [in]  Number of curves in the curve boundary.
+    \param crv3d [in]  Array of 3D curves of each element in the curve boundary.
+    \param crv2d [in]  Array of 2D curves of each element in the curve boundary.
+    \param orientation3d [in]  Orientation for each 3D curve element. 
+    \param orientation2d [in]  Orientation for each 2D curve element.
+    \param makeCopy [in]   If true, makes a copy of 3D and 2D curves. 
+    \param source [in]  Object to be cloned.
+  */
+  OdGeCurveBoundary();
+  OdGeCurveBoundary(
+    int numCurves, 
+    const OdGeEntity3d *const * crv3d,
+    const OdGeCurve2d *const * crv2d, 
+    bool* orientation3d,
+    bool* orientation2d, 
+    bool makeCopy = true);
+  OdGeCurveBoundary(const OdGeCurveBoundary& source);
+
+  ~OdGeCurveBoundary();
+
+  OdGeCurveBoundary& operator =(
+    const OdGeCurveBoundary& crvBoundary);
+
+  // Query the data.
+  //
+
+  /** \details
+    Returns true if and only if the curve boundary degenerates to a single 3D point.
+    
+    \param degenPoint [out]  Receives the point to which the boundary degenerates.
+    \param paramCurve [out]  Receives the paramater curve corresponding to degenPoint.
+    
+    \remarks
+    If this method returns true, paramCurve is created with the new operator, and it is the responsibility of the caller to delete it.
+
+    \note
+    Currently not implemented.
+  */
+  bool isDegenerate() const;
+  bool isDegenerate(
+    OdGePosition3d& degenPoint, 
+    OdGeCurve2d** paramCurve) const;
+    
+  /** \details
+    Returns the number of elements in the curve boundary.
+  */
+  int numElements() const;
+
+  /** \details
+    Returns the paramaters for the curve boundary.
+    
+    \param numCurves [out]  Receives the number of curves in the curve boundary.
+    \param crv3d [in/out] Array of 3D curves for each element in the curve boundary.
+    \param crv2d [in/out] Array of 2D curves for each element in the curve boundary.
+    \param orientation3d [in/out] Orientation for each 3D curve element. Valid only if crv3d is not NULL; if NULL, the caller must delete allocated memory that was intended for numCurves.
+    \param orientation2d [in/out] Orientation for each 2D curve element. Valid only if crv2d is not NULL; if NULL, the caller must delete allocated memory that was intended for numCurves.
+    
+    \remarks
+    For each array, provide memory for the array or allow getCountour to allocate it, and delete the elements of the array. 
+    If an array is NULL, getCountour allocates memory and the caller must also delete the corresponding array. 
+  */
+  void getContour(
+    int& numCurves, 
+    OdGeEntity3d*** crv3d,
+    OdGeCurve2d*** crv2d,
+    bool** orientation3d,
+    bool** orientation2d) const;
+
+  /** \details
+    Sets the parameters for the curve boundary and returns a reference to it.
+    
+    \param numCurves [in]  Number of curves in the curve boundary.
+    \param crv3d [in]  Array of 3D curves of each element in the curve boundary.
+    \param crv2d [in]  Array of 2D curves of each element in the curve boundary.
+    \param orientation3d [in]  Orientation for each 3D curve element. 
+    \param orientation2d [in]  Orientation for each 2D curve element.
+    \param makecopy [in]   If true, makes a copy of each 3D and 2D curve. 
+  */
+  OdGeCurveBoundary& set(
+    int numCurves, 
+    const OdGeEntity3d *const * crv3d,
+    const OdGeCurve2d *const * crv2d, 
+    bool* orientation3d,
+    bool* orientation2d, 
+    bool makeCopy = true);
+
+  // Curve ownership.
+  //
+  
+  /** \details
+    Returns true if and only if the curve boundary is the owner of the 
+    curve boundary parameters.
+  */
+  bool isOwnerOfCurves() const;
+
+  /** \details
+    Makes the curve boundary own the curve data and returns a reference to the boundary.
+
+    \remarks
+    If the external boundary owns the data, it will be destroyed when
+    the boundary is destroyed.
+  */
+  OdGeCurveBoundary& setToOwnCurves();
+
+protected:
+  int m_iNumCurves;
+  OdGeEntity3d** m_pArrCrv3d;
+  OdGeCurve2d** m_pArrCrv2d;
+  bool* m_bArrOrientation3d;
+  bool* m_bArrOrientation2d; 
+  bool m_bMakeCopy;
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_CURVE_BOUNDARY_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt2d.h
new file mode 100755
index 0000000..4b7b024
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt2d.h
@@ -0,0 +1,353 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_CURVE_CURVE_INT_2D_H
+#define OD_GE_CURVE_CURVE_INT_2D_H /*!DOM*/
+
+#include "Ge/GeEntity2d.h"
+#include "Ge/GeInterval.h"
+#include "Ge/GeCurve2d.h"
+#include "Ge/GePointOnCurve2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents intersections of 2D curves.
+    Currently not implemented.
+
+    \remarks
+    The intersection object links to 2D curve objects but does not contain
+	them. Calculation of the intersection is performed by a calling function, 
+	which owns the intersection output.
+	
+	If one of the curve objects is deleted, the intersection must be recalculated.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeCurveCurveInt2d : public OdGeEntity2d
+{
+public:
+  
+
+  /** \details
+    Constructors.
+
+    \param curve1 [in]  First 2D curve.
+    \param curve2 [in]  Second 2D curve.
+    \param range1 [in]  Range of first curve.
+    \param range2 [in]  Range of second curve.
+    \param tol [in]  Geometric tolerance.
+    \param source [in]  Object to be cloned.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCurveCurveInt2d();
+  OdGeCurveCurveInt2d(
+    const OdGeCurve2d& curve1, 
+    const OdGeCurve2d& curve2,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCurveCurveInt2d(
+    const OdGeCurve2d& curve1, 
+    const OdGeCurve2d& curve2,
+    const OdGeInterval& range1, 
+    const OdGeInterval& range2,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCurveCurveInt2d(
+    const OdGeCurveCurveInt2d& source);
+
+  // General query functions.
+  //
+
+  /** \details
+    Returns the first curve.
+
+    \note
+    Currently not implemented.
+  */
+  const OdGeCurve2d  *curve1() const;
+
+  /** \details
+    Returns the second curve.
+
+    \note
+    Currently not implemented.
+  */
+  const OdGeCurve2d  *curve2() const;
+
+  /** \details
+    Returns the ranges of the two curves.
+
+    \param range1 [out]  Receives the range of the first curve.
+    \param range2 [out]  Receives the range of the second curve.
+
+    \note
+    Currently not implemented.
+  */
+  void getIntRanges(
+    OdGeInterval& range1,
+    OdGeInterval& range2) const;
+
+  /** \details
+    Returns the tolerance for determining intersections.
+
+    \note
+    Currently not implemented.
+  */
+ OdGeTol tolerance() const;
+
+  // Intersection query methods.
+  //
+
+  /** \details
+    Returns the number of intersections between the curves within the specified ranges.
+
+    \note
+    Currently not implemented.
+  */
+  int numIntPoints() const;
+
+  /** \details
+    Returns the specified intersection point.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+
+    \note
+    Currently not implemented.
+  */
+  OdGePoint2d intPoint(
+    int intNum) const;
+
+  /** \details
+    Returns the curve parameters at the specified intersection point.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+    \param param1 [out]  Receives the parameter of the first curve at the intersection point.
+    \param param2 [out]  Receives the parameter of the second curve at the intersection point.
+
+    \note
+    Currently not implemented.
+  */
+  void getIntParams(
+    int intNum,
+    double& param1, 
+    double& param2) const;
+
+  /** \details
+    Returns the specified intersection point as an OdGePointOnCurve2d on the first curve.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+    \param intPnt [out]  Receives the specified intersection point on the first curve.
+
+    \note
+    Currently not implemented.
+  */
+  void getPointOnCurve1(
+    int intNum, 
+    OdGePointOnCurve2d& intPnt) const;
+
+  /** \details
+    Returns the specified intersection point as an OdGePointOnCurve2d on the second curve.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+    \param intPnt [out]  Receives the specified intersection point on the second curve.
+
+    \note
+    Currently not implemented.
+  */
+  void getPointOnCurve2(
+    int intNum, 
+    OdGePointOnCurve2d& intPnt) const;
+
+  /** \details
+    Returns the configuration of the intersecion point of
+    the first curve with respect to the second, and vice versa.
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+    \param config1wrt2 [out]  Receives the configuration of the first curve with respect to the second.
+    \param config2wrt1 [out]  Receives the configuration of the second curve with respect to the first.
+
+    \remarks
+    The possible values for config1wrt2 and config2wrt1 are as follows
+
+    @untitled table
+    kNotDefined
+    kUnknown
+    kLeftRight
+    kRightLeft
+    kLeftLeft
+    kRightRight
+    kPointLeft
+    kPointRight
+    kLeftOverlap
+    kOverlapLeft
+    kRightOverlap
+    kOverlapRight
+    kOverlapStart
+    kOverlapEnd,
+    kOverlapOverlap
+
+    \note
+    Currently not implemented.
+  */
+  void getIntConfigs(
+    int intNum, 
+    OdGe::OdGeXConfig& config1wrt2,
+    OdGe::OdGeXConfig& config2wrt1) const;
+
+  /** \details
+    Returns true if and only if the curves are tangential at specified intersection point 
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+
+    \note
+    Currently not implemented.
+  */
+  bool isTangential(
+    int intNum) const;
+
+  /** \details
+    Returns true if and only if the curves are transversal (cross) at specified intersection point 
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+
+    \note
+    Currently not implemented.
+  */
+  bool isTransversal(
+    int intNum) const;
+
+  /** \details
+    Returns the tolerance used to compute the specified intersection point. 
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+
+    \note
+    Currently not implemented.
+  */
+  double intPointTol(
+    int intNum) const;
+
+  /** \details
+    Returns the number of intervals of overlap for the two curves. 
+
+    \note
+    Currently not implemented.
+  */
+  int overlapCount() const;
+
+  /** \details
+    Returns true if and only if the curves are oriented in the same direction
+    where they overlap. 
+
+    \remarks
+    This value has meaning only if overlapCount() > 0
+
+    \note
+    Currently not implemented.
+  */
+  bool overlapDirection() const;
+
+  /** \details
+    Returns the ranges for each curve a the specified overlap. 
+
+    \param overlapNum [in]  The zero-based index of the overlap range to query.
+    \param range1 [out]  Receives the range of the first curve for the specified overlap.
+    \param range2 [out]  Receives the range of the second curve for the specified overlap.
+
+    \note
+    Currently not implemented.
+  */
+  void getOverlapRanges(
+    int overlapNum,
+    OdGeInterval& range1,
+    OdGeInterval& range2) const;
+
+  /** \details
+    Makes the first curve the second, and vice versa.
+
+    \note
+    Currently not implemented.
+  */
+  void changeCurveOrder(); 
+
+  /** \details
+    Orders the intersection points so they correspond to
+    increasing parameter values of the first curve.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCurveCurveInt2d& orderWrt1();
+
+  /** \details
+    Orders the intersection points so they correspond to
+    increasing parameter values of the second curve.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCurveCurveInt2d& orderWrt2();
+
+  /** \details
+    Sets the curves, ranges and tolerance for which to
+    determine intersections
+
+    \param curve1 [in]  First 2D curve.
+    \param curve2 [in]  Second 2D curve.
+    \param range1 [in]  Range of first curve.
+    \param range2 [in]  Range of second curve.
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCurveCurveInt2d& set(
+    const OdGeCurve2d& curve1,
+    const OdGeCurve2d& curve2,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCurveCurveInt2d& set(
+    const OdGeCurve2d& curve1,
+    const OdGeCurve2d& curve2,
+    const OdGeInterval& range1,
+    const OdGeInterval& range2,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+  /** \note
+    This function is not implemented, and will generate a link error if you reference it.
+    It will be implemented in a future release.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCurveCurveInt2d& operator =(
+    const OdGeCurveCurveInt2d& crvCrvInt);
+
+  //////////////////////////////////////////////////////////////////////////
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_CURVE_CURVE_INT_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt3d.h
new file mode 100755
index 0000000..24a1f58
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveCurveInt3d.h
@@ -0,0 +1,365 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECINT3D_H
+#define OD_GECINT3D_H /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+#include "Ge/GeInterval.h"
+
+#include "TD_PackPush.h"
+
+class OdGeCurve3d;
+class OdGeInterval;
+class OdGePointOnCurve3d;
+
+/** \details
+    This class represents intersections of 3D curves.
+    Currently not implemented.
+
+    \remarks
+    The intersection object links to 3D curve objects but does not contain
+	them. Calculation of the intersection is performed by a calling function, 
+	which owns the intersection output.
+	
+	If one of the curve objects is deleted, the intersection must be recalculated.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeCurveCurveInt3d : public OdGeEntity3d
+{
+public:
+
+
+  /** \param curve1 [in]  First 3D curve.
+    \param curve2 [in]  Second 3D curve.
+    \param planeNormal [in]  Specifies the normal to the plane for getIntConfigs(). 
+    \param range1 [in]  Range of first curve.
+    \param range2 [in]  Range of second curve.
+    \param tol [in]  Geometric tolerance.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The planeNormal argument is used only with getIntConfigs(). 
+    You must supply this argument if and only if you are using getIntConfigs().
+
+    \note
+    Currently not implemented.
+  */
+  OdGeCurveCurveInt3d();
+  OdGeCurveCurveInt3d(
+    const OdGeCurve3d& curve1, 
+    const OdGeCurve3d& curve2,
+    const OdGeVector3d& planeNormal = OdGeVector3d::kIdentity,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCurveCurveInt3d(
+    const OdGeCurve3d& curve1, 
+    const OdGeCurve3d& curve2,
+    const OdGeInterval& range1, 
+    const OdGeInterval& range2,
+    const OdGeVector3d& planeNormal = OdGeVector3d::kIdentity,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCurveCurveInt3d(
+    const OdGeCurveCurveInt3d& source);
+
+  /** \details
+    Returns the first curve.
+
+    \note
+    Currently not implemented.
+  */
+   const OdGeCurve3d *curve1() const;
+
+  /** \details
+    Returns the second curve.
+
+    \note
+    Currently not implemented.
+  */
+   const OdGeCurve3d  *curve2() const;
+
+  /** \details
+    Returns the ranges of the two curves.
+
+    \param range1 [out]  Receives the range of the first curve.
+    \param range2 [out]  Receives the range of the second curve.
+
+    \note
+    Currently not implemented.
+  */
+   void getIntRanges(
+    OdGeInterval& range1,
+    OdGeInterval& range2) const;
+
+  /** \details
+    Returns the normal to the plane for getIntConfigs()
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d planeNormal() const;
+
+  /** \details
+    Returns the tolerance for determining intersections.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeTol tolerance() const;
+
+  /** \details
+    Returns the number of intersections between the curves within the specified ranges.
+
+    \note
+    Currently not implemented.
+  */
+   int numIntPoints() const;
+
+  /** \details
+    Returns the specified intersection point.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d intPoint(
+    int intNum) const;
+
+  /** \details
+    Returns the curve parameters at the specified intersection point.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+    \param param1 [out]  Receives the parameter of the first curve at the intersection point.
+    \param param2 [out]  Receives the parameter of the second curve at the intersection point.
+
+    \note
+    Currently not implemented.
+  */
+   void getIntParams(
+    int intNum,
+    double& param1, 
+    double& param2) const;
+
+  /** \details
+    Returns the specified intersection point as an OdGePointOnCurve3d on the first curve.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+    \param intPnt [out]  Receives the specified intersection point on the first curve.
+
+    \note
+    Currently not implemented.
+  */
+   void getPointOnCurve1(
+    int intNum, 
+    OdGePointOnCurve3d& intPnt) const;
+
+  /** \details
+    Returns the specified intersection point as an OdGePointOnCurve3d on the second curve.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+    \param intPnt [out]  Receives the specified intersection point on the second curve.
+
+    \note
+    Currently not implemented.
+  */
+   void getPointOnCurve2(
+    int intNum, 
+    OdGePointOnCurve3d& intPnt) const;
+
+  /** \details
+    Returns the configuration of the intersecion point of
+    the first curve with respect to the second, and vice versa.
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+    \param config1wrt2 [out]  Receives the configuration of the first curve with respect to the second.
+    \param config2wrt1 [out]  Receives the configuration of the second curve with respect to the first.
+
+    \remarks
+    The curves must be coplanar, and are with respect to the planeNormal.
+    
+    The possible values for config1wrt2 and config2wrt1 are as follows:
+
+    @untitled table
+    kNotDefined
+    kUnknown
+    kLeftRight
+    kRightLeft
+    kLeftLeft
+    kRightRight
+    kPointLeft
+    kPointRight
+    kLeftOverlap
+    kOverlapLeft
+    kRightOverlap
+    kOverlapRight
+    kOverlapStart
+    kOverlapEnd,
+    kOverlapOverlap
+
+    \note
+    Currently not implemented.
+  */
+   void getIntConfigs(
+    int intNum, 
+    OdGe::OdGeXConfig& config1wrt2,
+    OdGe::OdGeXConfig& config2wrt1) const;
+
+  /** \details
+    Returns true if and only if the curves are tangential at specified intersection point 
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+
+    \note
+    Currently not implemented.
+  */
+   bool isTangential(
+    int intNum) const;
+
+  /** \details
+    Returns true if and only if the curves are transversal (cross) at specified intersection point 
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+
+    \note
+    Currently not implemented.
+  */
+   bool isTransversal(
+    int intNum) const;
+
+  /** \details
+    Returns the tolerance used to compute the specified intersection point. 
+
+    \param intNum [in]  The zero-based index of the intersection point to query.
+
+    \note
+    Currently not implemented.
+  */
+   double intPointTol(
+    int intNum) const;
+
+  /** \details
+    Returns the number of intervals of overlap for the two curves. 
+
+    \note
+    Currently not implemented.
+  */
+   int overlapCount() const;
+
+  /** \details
+    Returns true if and only if the curves are oriented in the same direction
+    where they overlap. 
+
+    \remarks
+    This value has meaning only if overlapCount() > 0
+
+    \note
+    Currently not implemented.
+  */
+   bool overlapDirection() const;
+
+  /** \details
+    Returns the ranges for each curve a the specified overlap. 
+
+    \param overlapNum [in]  The zero-based index of the overlap range to query.
+    \param range1 [out]  Receives the range of the first curve for the specified overlap.
+    \param range2 [out]  Receives the range of the second curve for the specified overlap.
+
+    \note
+    Currently not implemented.
+  */
+   void getOverlapRanges(
+    int overlapNum,
+    OdGeInterval& range1,
+    OdGeInterval& range2) const;
+
+  /** \details
+    Swaps the first and the second curve.
+
+    \note
+    Currently not implemented.
+  */
+   void changeCurveOrder();
+
+  /** \details
+    Orders the intersection points so they correspond to
+    increasing parameter values of the first curve.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeCurveCurveInt3d& orderWrt1();
+
+  /** \details
+    Orders the intersection points so they correspond to
+    increasing parameter values of the second curve.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeCurveCurveInt3d& orderWrt2();
+
+  /** \details
+    Sets the curves, ranges, plane normals, and tolerance for which to
+    determine intersections
+
+    \param curve1 [in]  First 3D curve.
+    \param curve2 [in]  Second 3D curve.
+    \param planeNormal [in]  Specifies the normal to the plane for getIntConfigs(). 
+    \param range1 [in]  Range of first curve.
+    \param range2 [in]  Range of second curve.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    The planeNormal argument is used only with getIntConfigs(). 
+    You must supply this argument only if you are using getIntConfigs().
+
+    \note
+    Currently not implemented.
+  */
+   OdGeCurveCurveInt3d& set(
+    const OdGeCurve3d& curve1,
+    const OdGeCurve3d& curve2,
+    const OdGeVector3d& planeNormal = OdGeVector3d::kIdentity,
+    const OdGeTol& tol = OdGeContext::gTol);
+   OdGeCurveCurveInt3d& set(
+    const OdGeCurve3d& curve1,
+    const OdGeCurve3d& curve2,
+    const OdGeInterval& range1,
+    const OdGeInterval& range2,
+    const OdGeVector3d& planeNormal = OdGeVector3d::kIdentity,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+  OdGeCurveCurveInt3d& operator =(
+    const OdGeCurveCurveInt3d& crvCrvInt);
+
+  //////////////////////////////////////////////////////////////////////////
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GECINT3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveSurfInt.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveSurfInt.h
new file mode 100755
index 0000000..cf5714d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCurveSurfInt.h
@@ -0,0 +1,269 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECSINT_H
+#define OD_GECSINT_H /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+
+#include "TD_PackPush.h"
+
+class OdGeCurve3d;
+class OdGeSurface;
+class OdGePointOnCurve3d;
+class OdGePointOnSurface;
+
+/** \details
+    This class represents intersections of 3D curves and surfaces.
+    Currently not implemented.
+
+    \remarks
+    The intersection object links to curve and surface objects, but does not
+	contain them. Calculation of the intersection is performed by a calling 
+	function, which owns the intersection output.
+	
+	If one of the objects is deleted, the intersection must be recalculated.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeCurveSurfInt : public OdGeEntity3d
+{
+public:
+
+
+  /** \param curve [in]  Any 3D curve.
+    \param surface [in]  Any surface.
+    \param tol [in]  Geometric tolerance.
+    \param source [in]  Object to be cloned.
+  */
+  OdGeCurveSurfInt();
+  OdGeCurveSurfInt(
+    const OdGeCurve3d& curve, 
+    const OdGeSurface& surface,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeCurveSurfInt(
+    const OdGeCurveSurfInt& source);
+
+  /** \details
+    Returns the 3D curve.
+  */
+   const OdGeCurve3d* curve() const;
+
+  /** \details
+    Returns the surface.
+  */
+   const OdGeSurface* surface() const;
+
+  /** \details
+    Returns the tolerance for determining intersections.
+  */
+   OdGeTol tolerance() const;
+
+  /** \details
+    Returns the number of intersections between the curve and the surface,
+    and returns the status of the intersection.
+
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   int numIntPoints(
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns a 3D point representing the specified intersection,
+    and returns the status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Returns NULL if the dimension of this intersection is not 0 (not a 3D point).
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d intPoint(
+    int intNum, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the parameters of the specified intersection point with respect to the curve and surface,
+    and returns the status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param param1 [out]  Receives the parameter of the intersection point with respect to the curve.
+    \param param2 [out]  Receives the parameter pair of the intersection point with respect to the surface.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   void getIntParams(
+    int intNum,
+    double& param1,
+    OdGePoint2d& param2,
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the intersection point on the curve, and returns the 
+	status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection pooint to return.
+    \param intPnt [out]  Receives the specified intersection point on the curve.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   void getPointOnCurve(
+    int intNum, 
+    OdGePointOnCurve3d& intPnt, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the intersection point on the surface, and returns the 
+	status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection point to return.
+    \param intPnt [out]  Receives the specified intersection point on the surface.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   void getPointOnSurface(
+    int intNum, 
+    OdGePointOnSurface& intPnt, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the configurations on either side of the surface at the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param lower [out]  Unknown.
+    \param higher [out]  Unknown.
+    \param smallAngle [out]  Unknown.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for lower and higher are as follows:
+
+    @untitled table
+    kXUnknown               
+    kXOut                   
+    kXIn                    
+    kXTanOut                
+    kXTanIn                 
+    kXCoincident            
+    kXCoincidentUnbounded   
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   void getIntConfigs(
+    int intNum, 
+    OdGe::csiConfig& lower, 
+    OdGe::csiConfig& higher, 
+    bool& smallAngle, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Specifies the 3D curve, surface, and tolerance for determining
+	intersections.
+
+    \param curve [in]  Any 3D curve.
+    \param surface [in]  Any surface.
+    \param tol [in]  Geometric tolerance.
+  */
+   OdGeCurveSurfInt& set(
+    const OdGeCurve3d& cvr,
+    const OdGeSurface& surface,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+  OdGeCurveSurfInt& operator =(
+    const OdGeCurveSurfInt& crvSurfInt);
+
+  //////////////////////////////////////////////////////////////////////////
+
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCylinder.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCylinder.h
new file mode 100755
index 0000000..a51617f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeCylinder.h
@@ -0,0 +1,273 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GECYLNDR_H
+#define OD_GECYLNDR_H /*!DOM*/
+
+#include "OdPlatformSettings.h"
+#include "Ge/GeSurface.h"
+#include "Ge/GeInterval.h"
+
+class OdGeCircArc3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents right circular cylinders.
+
+    \remarks
+    A right circular cylinder is defined by its
+
+    *  radius
+    *  axis of symmetry
+    *  origin (a point on the axis)
+
+    It is generated by revolving a line parallel to the axis of symmetry,
+    at a distance of radius. 
+
+    The cylinder is parameterized as follows:
+
+    Parameter V is the angle of revolution measured from the refAxis
+    (an axis perpendicular to the axis of symmetry).  For a closed cone,
+    it defaults to [-OdaPI, OdaPI).  The right hand rule applied along the
+    direction of the axis of symmetry defines the positive direction
+    of V.  The surface is periodic in V with a period of Oda2PI.
+
+    Parameter U varies along the axis of symmetry.  U is dimensionless,
+    and increases in the direction of the axis of symmetry. 
+    U = 0 corresponds to center of the base of this cylinder, 
+    and U = 1 corresponds to the center of the top of this cylinder.  
+    
+    [umin, umax] x [vmin, vmax] defines a four sided cylindrical
+    patch bounded by two straight lines (at vmin and vmax), and
+    two circular arcs (at umin and umax).  The following constraints
+    apply to the definition of a cylindrical patch:
+
+    * umin < umax
+    * |vmax - vmin| <= Oda2PI.
+    * radius > 0.0
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeCylinder.html, Working with Cylinders>
+*/
+class GE_TOOLKIT_EXPORT OdGeCylinder : public OdGeSurface
+{
+public:
+
+
+  /** \param radius [in]  Radius of this cylinder. 
+    \param origin [in]  A point on the axis of symmetry.
+    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
+    \param refAxis [in]  defines thegle 0 of circular end.
+    \param height [in]  Height interval of this cylinder.
+    \param startAng [in]  Start angle.
+    \param endAng [in]  End angle.
+    \note
+    All angles are expressed in radians.
+
+  */
+  OdGeCylinder();
+  OdGeCylinder(
+    double radius, 
+    const OdGePoint3d& origin,
+    const OdGeVector3d& axisOfSymmetry);
+  OdGeCylinder(
+    double radius, 
+    const OdGePoint3d& origin,
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& refAxis,
+    const OdGeInterval& height,
+    double startAng, 
+    double endAng);
+  OdGeCylinder(const OdGeCylinder&);
+
+  /** \details
+    Returns the radius of this cylinder.
+  */
+   double radius() const;
+
+  /** \details
+    Returns the origin of this cylinder.
+  */
+   OdGePoint3d origin() const;
+
+  /** \details
+    Returns the starting and ending angles of this cylinder.
+
+    \param startAng [out]  Receives the start angle.
+    \param endAng [out]  Receives the end angle.
+    \note
+    All angles are expressed in radians.
+
+  */
+   void getAngles(
+    double& startAng, 
+    double& endAng) const;
+
+  /** \details
+    Returns the interval of the axis of symmetry.
+
+    \param height [out]  Receives the interval of the axis of symmetry.
+  */
+   void getHeight(
+    OdGeInterval& height) const;
+
+  /** \details
+    Returns the height of this cylinder corresponding to
+    the specified position on the U-axis.
+
+    \remarks
+    Parameter U varies along the axis of symmetry.  U is dimensionless,
+    and increases in the direction of the axis of symmetry. 
+
+    \param u [in]  Position on the U-axis of this cylinder.
+  */
+   double heightAt(
+    double u) const;
+
+  /** \details
+    Returns the axis of symmetry of this cylinder.
+  */
+   OdGeVector3d axisOfSymmetry() const;
+
+  /** \details
+    Returns the reference axis of this cylinder.
+  */
+   OdGeVector3d refAxis() const;
+
+  /** \details
+    Returns true if and only if the normal to this surface
+    is pointing outward.
+  */
+   bool isOuterNormal() const;
+
+  /** \details
+    Returns true if and only if this cylinder
+    is a full circle within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isClosed(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Sets the radius of this cylinder.
+
+    \param radius [in]  Radius of this cylinder.
+  */
+   OdGeCylinder& setRadius(
+    double radius);
+
+  /** \details
+    Sets the starting and ending angles of this cylinder.
+
+    \param startAng [in]  Start angle.
+    \param endAng [in]  End angle.
+    
+    \note
+    All angles are expressed in radians.
+
+  */
+   OdGeCylinder& setAngles(
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Sets the height interval of this cylinder.
+
+    \param height [in]  Height interval of this cylinder.
+  */
+   OdGeCylinder& setHeight(
+    const OdGeInterval& height);
+
+  /** \details
+    Sets the parameters for this cylinder according to the arguments, 
+    and returns a reference to this cylinder.
+
+    \param radius [in]  Radius of this cylinder. 
+    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
+    \param refAxis [in]  defines thegle 0 of circular end.
+    \param height [in]  Height interval of this cylinder.
+    \param startAng [in]  Start angle.
+    \param endAng [in]  End angle.
+    \note
+    All angles are expressed in radians.
+  */
+   OdGeCylinder& set(
+    double radius, 
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& axisOfSym);
+   OdGeCylinder& set(
+    double radius, 
+    const OdGePoint3d& origin,
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& refAxis,
+    const OdGeInterval& height,
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Returns true if and only if this cylinder intersects with
+    a line entity, and returns the number of intersections and the
+    points of intersection.
+
+    \param lineEnt [in]  Any 3D line entity.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point.
+    \param p2 [out]  Receives the second intersection point.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 is valid if and only if numInt >= 1.
+    * p2 is valid if and only if numInt = 2.
+  */
+   bool intersectWith(
+    const OdGeLinearEnt3d& linEnt, 
+    int& numInt,
+    OdGePoint3d& p1, 
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  // Assignment operator
+  OdGeCylinder& operator =(const OdGeCylinder& cylinder);
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+  Sets if the cylinder normal is pointing outward.
+
+  \param isOuterNormal [in]  Flag indicating if the cylinder normal is to be set to point outward.
+  */
+  void setIsOuterNormal(
+    bool isOuterNormal);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GECYLNDR_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDouble2dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDouble2dArray.h
new file mode 100755
index 0000000..84ce195
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDouble2dArray.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEDOUBLEARRAY_INCLUDED
+#define GEDOUBLEARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class template for double precision floating point values.
+*/
+typedef OdArray<double> OdGeDouble2dArray;
+
+#endif // GEDOUBLEARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDoubleArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDoubleArray.h
new file mode 100755
index 0000000..5a4ed55
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeDoubleArray.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEDOUBLEARRAY_INCLUDED
+#define GEDOUBLEARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class double objects.
+*/
+typedef OdArray<double, OdMemoryAllocator<double> > OdGeDoubleArray;
+
+#endif // GEDOUBLEARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc.h
new file mode 100755
index 0000000..9d7e3cc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc.h
@@ -0,0 +1,114 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GE_ELLIP_ARC__
+#define __OD_GE_ELLIP_ARC__
+
+#include "OdRound.h"
+
+/** \details
+    Elliptical arc helper functions.
+
+    <group TD_Namespaces>
+*/
+namespace OdGeEllipArc 
+{  
+  /** \details
+    calibrates value, so that it is "near" input (not farther than OdaPi)
+    (value and input should not be farther than OdaPi/2 modulo Oda2Pi, 
+    for the function to work correcly)
+  */
+  inline double calibrateAngle(double val, double input)
+  {
+    if (input > val)
+    {
+      if ( (input - val) < OdaPI )
+        return val;
+      else 
+        return val + OdRound((input - val)/Oda2PI)*Oda2PI;
+    }
+    else
+    {
+      if ( (val - input) < OdaPI )
+        return val;
+      else 
+        return val - OdRound((val - input)/Oda2PI)*Oda2PI;
+    }
+  }
+
+  /** \details
+      Converts an elliptical parameter to an angle.
+  
+      \param param [in]  Elliptical parameter.
+      \param radiusRatio [in]  The minorRadius:majorRadius ratio of the ellipse.
+      
+      \remarks
+      The angle of a point on an ellipse corresponding to a parameter
+      of the ellipse is determined by projecting a vector perpendicular to the
+      major axis from the parameter point on the parameter circle. The angle from the major axis to the intersection
+      of the vector with the ellipse is the desired angle.
+  
+      Library: TD_Ge
+  */
+  inline double angleFromParam (
+      double param, 
+      double radiusRatio)
+  {
+    if(OdZero(param)) 
+      return 0;
+    if(OdZero(param - Oda2PI)) 
+      return Oda2PI;
+
+    return calibrateAngle(OD_ATAN2(radiusRatio*sin(param), cos(param)), param);
+  }
+  
+  /** \details
+      Converts an elliptical angle to a parameter.
+      
+      \param angle [in]  Elliptical angle.
+      \param radiusRatio [in]  The minorRadius:majorRadius ratio of the ellipse.
+      
+      \remarks
+      The parameter of a point on an ellipse corresponding to the
+      angle of the point is determined by projecting a vector perpendicular to the
+      major axis from the point on the ellipse to the parameter circle. 
+      The angle from the major axis to the intersection
+      of the vector with the circle is the desired parameter.
+
+      Library: TD_Ge
+  */
+  inline double paramFromAngle (
+      double angle, 
+      double radiusRatio)
+  {
+    if(OdZero(angle)) 
+      return 0;
+    if(OdZero(angle - Oda2PI)) 
+      return Oda2PI;
+  
+    return calibrateAngle(OD_ATAN2(sin(angle), radiusRatio*cos(angle)), angle);
+  }  
+}
+
+#endif // __OD_GE_ELLIP_ARC__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc2d.h
new file mode 100755
index 0000000..bd29647
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc2d.h
@@ -0,0 +1,305 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_ELLIP_ARC_2D_H
+#define OD_GE_ELLIP_ARC_2D_H /*!DOM*/
+
+class OdGeCircArc2d;
+class OdGePlanarEnt;
+class OdGeEllipArc2d;
+class OdGeLinearEnt2d;
+class OdGeExtents2d;
+#include "OdPlatform.h"
+#include "Ge/GeCurve2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents elliptical arcs and full ellipses in 2D space.
+
+    \remarks
+    The angle of a point on an ellipse is measured by projecting
+    the point along a vector perpendicular to the major axis onto a
+    circle whose center is the center of this ellipse and whose
+    radius is the major radius of this ellipse.
+
+    The angle between the major axis of this ellipse, and a vector from
+    the center of this ellipse to the intersection point with the circle, 
+    measured counterclockwise, is the angle of this point on the ellipse.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+	
+	  \sa
+    <link ge_OdGeEllipArc3d.html, Working with Elliptical Arcs>
+*/
+class GE_TOOLKIT_EXPORT OdGeEllipArc2d : public OdGeCurve2d
+{
+public:
+  
+
+  /** \param center [in]  The center of this elliptical arc.
+    \param majorAxis [in]  The major axis of this elliptical arc.
+    \param minorAxis [in]  The minor axis of this elliptical arc.
+    \param majorRadius [in]  The major radius of this elliptical arc.
+    \param minorRadius [in]  The minor radius of this elliptical arc.
+    \param startAng [in]  Starting angle of this elliptical arc.
+    \param endAng [in]  Ending angle of this elliptical arc.
+    \param source [in]  Object to be cloned.
+
+    \note
+    All angles are expressed in radians.
+  */
+  OdGeEllipArc2d();
+  OdGeEllipArc2d(
+    const OdGeEllipArc2d& ell);
+  OdGeEllipArc2d(
+    const OdGeCircArc2d& arc);
+  OdGeEllipArc2d(
+    const OdGePoint2d& center, 
+    const OdGeVector2d& majorAxis,
+    const OdGeVector2d& minorAxis, 
+    double majorRadius, 
+    double minorRadius);
+  OdGeEllipArc2d(
+    const OdGePoint2d& center,
+    const OdGeVector2d& majorAxis,
+    const OdGeVector2d& minorAxis, 
+    double majorRadius, 
+    double minorRadius, 
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Determines if the input line intersects the ellipse.
+
+    \param line [in]  Input any 2D linear entity  
+    \param intn [out]  Output number of intersection points  
+    \param p1 [out] Output first intersection point  
+    \param p2 [out] Output second intersection point  
+    \param tol [in] Output tolerance for tangent intersections  
+
+  */
+  bool intersectWith(
+    const OdGeLinearEnt2d& line, 
+    int& numInt,
+    OdGePoint2d& p1, 
+    OdGePoint2d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Determines if an ellipse is a circular arc.
+
+    \param tol [in]  Input tolerance  
+
+  */
+  bool isCircular(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified point lies within
+    the full ellipse.
+
+    \param point [in]  Any 2D point.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isInside(
+    const OdGePoint2d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the center of this elliptical arc.
+  */
+  OdGePoint2d center() const;
+
+  /** \details
+    Returns the minor radius of this elliptical arc.
+  */
+  double minorRadius() const;
+
+  /** \details
+    Returns the major radius of this elliptical arc.
+  */
+  double majorRadius() const;
+
+  /** \details
+    Returns the minor axis of this elliptical arc as a unit vector.
+  */
+  OdGeVector2d minorAxis() const;
+
+  /** \details
+    Returns the major axis of this elliptical arc as a unit vector.
+  */
+  OdGeVector2d majorAxis() const;
+
+  /** \details
+    Returns the start angle measured from major axis of this elliptical arc.
+    \note
+    All angles are expressed in radians.
+
+  */
+  double startAng() const;
+
+  /** \details
+    Returns the end angle measured from major axis of this elliptical arc.
+    \note
+    All angles are expressed in radians.
+
+  */
+  double endAng() const;
+
+  /** \details
+    Returns the start point of this elliptical arc.
+  */
+  OdGePoint2d startPoint() const;
+
+  /** \details
+    Returns the end point of this elliptical arc.
+  */
+  OdGePoint2d endPoint() const;
+
+  /** \details
+    Returns true if and only if this elliptical arc is drawn clockwise from start point to end point.
+  */
+  bool isClockWise() const;
+
+  /** \details
+    Sets the center of this elliptical arc.
+
+    \param center [in]  The center of this elliptical arc.
+  */
+  OdGeEllipArc2d& setCenter(
+  const OdGePoint2d& center);
+
+  /** \details
+    Sets the minor radius of this elliptical arc.
+
+    \param minorRadius [in]  The minor radius of this elliptical arc.
+  */
+  OdGeEllipArc2d& setMinorRadius(
+    double rad);
+
+  /** \details
+    Sets the major radius of this elliptical arc.
+
+    \param majorRadius [in]  The major radius of this elliptical arc.
+  */
+  OdGeEllipArc2d& setMajorRadius(
+    double rad);
+
+  /** \details
+    Sets the major and minor axes of this elliptical arc.
+
+    \param majorAxis [in]  The major axis of this elliptical arc.
+    \param minorAxis [in]  The minor axis of this elliptical arc.
+  */
+  OdGeEllipArc2d& setAxes(
+    const OdGeVector2d& majorAxis,
+    const OdGeVector2d& minorAxis);
+
+  /** \details
+    Sets the starting and ending angles of this elliptical arc.
+
+    \param startAng [in]  Starting angle of this elliptical arc.
+    \param endAng [in]  Ending angle of this elliptical arc.
+    \note
+    All angles are expressed in radians.
+
+  */
+  OdGeEllipArc2d& setAngles(
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Sets the parameters for this elliptical arc according to the arguments, and returns a reference to this elliptical arc.
+
+    \param arc [in]  Any 2D circular arc.
+    \param center [in]  The center of this elliptical arc.
+    \param majorAxis [in]  The major axis of this elliptical arc.
+    \param minorAxis [in]  The minor axis of this elliptical arc.
+    \param majorRadius [in]  The major radius of this elliptical arc.
+    \param minorRadius [in]  The minor radius of this elliptical arc.
+    \param startAng [in]  Starting angle of this elliptical arc.
+    \param endAng [in]  Ending angle of this elliptical arc.
+
+    \note
+    All angles are expressed in radians.
+  */
+  OdGeEllipArc2d& set(
+    const OdGePoint2d& center,
+    const OdGeVector2d& majorAxis,
+    const OdGeVector2d& minorAxis,
+    double majorRadius, 
+    double minorRadius);
+  OdGeEllipArc2d& set(
+    const OdGePoint2d& center,
+    const OdGeVector2d& majorAxis,
+    const OdGeVector2d& minorAxis,
+    double majorRadius, 
+    double minorRadius,
+    double startAng, 
+    double endAng);
+  OdGeEllipArc2d& set(
+    const OdGeCircArc2d& arc);
+
+  OdGeEllipArc2d& operator =(
+    const OdGeEllipArc2d& ell);
+
+  //////////////////////////////////////////////////////////////////////////
+  // Overrides :
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+  Returns the geometric extents of this elliptical arc.
+
+  \param extents [out]  Receives the geometric extents.
+  */
+  void getGeomExtents(
+    OdGeExtents2d& extents) const;
+
+  // returns the parameter of elliptical arc points (if any) which have tangent 
+  // co-directional to "tan" vector. Parameters are returned in params array.
+  // Note that this function doesn't clear array - only appends items.
+
+  /** \details
+    Returns the parameters of the points (if any) on the elliptical arc,
+    whose tangents are parallel to the specified tangent vector.
+
+    \param tan [in] A vector defining the tangent direction.
+    \param params [out] Receives the array of tangent point parameters.
+
+    \remarks
+    The parameters are appended to the specified array. You may wish to 
+    initialize the params array with clear().
+  */
+  void inverseTangent(
+    OdGeVector2d tan, 
+    OdGeDoubleArray& params);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_ELLIP_ARC_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc3d.h
new file mode 100755
index 0000000..63f1145
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipArc3d.h
@@ -0,0 +1,429 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEELL3D_H
+#define OD_GEELL3D_H /*!DOM*/
+
+class OdGeEllipArc2d;
+class OdGeCircArc3d;
+class OdGeLineEnt3d;
+class OdGePlanarEnt;
+class OdGeExtents3d;
+
+#include "Ge/GeCurve3d.h"
+#include "OdPlatformSettings.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents 3D elliptical arcs and full ellipses in 3D space.
+
+    \remarks
+    The angle of a point on an ellipse is measured by projecting
+    the point along a vector perpendicular to the major axis onto a
+    circle whose center is the center of this ellipse and whose
+    radius is the major radius of this ellipse.
+
+    The angle between the major axis of the ellipse, and a vector from
+    the center of the ellipse to the intersection point with the circle, 
+    measured counterclockwise about the crossproduct of the major and minor axes,
+    is the angle of the point on the ellipse.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeEllipArc3d.html, Working with Elliptical Arcs>
+*/
+class GE_TOOLKIT_EXPORT OdGeEllipArc3d : public OdGeCurve3d
+{
+public:
+
+
+  /** \param center [in]  The center of the elliptical arc.
+    \param majorAxis [in]  The major axis of the elliptical arc.
+    \param minorAxis [in]  The minor axis of the elliptical arc.
+    \param majorRadius [in]  The major radius of the elliptical arc.
+    \param minorRadius [in]  The minor radius of the elliptical arc.
+    \param startAng [in]  Starting angle of the elliptical arc.
+    \param endAng [in]  Ending angle of the elliptical arc.
+    \param source [in]  Object to be cloned.
+    \note
+    All angles are expressed in radians.
+
+  */
+  OdGeEllipArc3d();
+  OdGeEllipArc3d(
+    const OdGeEllipArc3d& ell);
+  OdGeEllipArc3d(
+    const OdGeCircArc3d& source);
+  OdGeEllipArc3d(
+    const OdGePoint3d& center, 
+    const OdGeVector3d& majorAxis,
+    const OdGeVector3d& minorAxis, 
+    double majorRadius,
+    double minorRadius);
+  OdGeEllipArc3d(
+    const OdGePoint3d& center, 
+    const OdGeVector3d& majorAxis,
+    const OdGeVector3d& minorAxis, 
+    double majorRadius,
+    double minorRadius, 
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Returns the point on the elliptical arc that is closest to the
+    specified plane and the point on the specified plane that is closest
+    to the elliptical arc.
+
+    \param plane [in]  Any plane.
+    \param pointOnPlane [out]  Receives the closest point on the plane.
+    \param tol [in]  Geometric tolerance.
+  */
+   OdGePoint3d closestPointToPlane(
+    const OdGePlanarEnt& plane,
+    OdGePoint3d& pointOnPlane,
+    const OdGeTol& tol = OdGeContext::gTol) const ;
+
+  /** \details
+    Returns True if the specifed linear entity intersects the arc entity,
+	  and returns the number of intersections and points of intersection.
+
+    \param line [in]  Any 3D linear entity.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point of the elliptical arc.
+    \param p2 [out]  Receives the second intersection point of the elliptical arc.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 is valid only if numInt > 0.
+    * p2 is valid only if numInt > 1.
+  */
+   bool intersectWith(
+    const OdGeLinearEnt3d& line, 
+    int& numInt,
+    OdGePoint3d& p1, 
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const ;
+
+  /** \details
+    Returns True if the specifed plane or linear entity intersects the elliptical 
+	arc entity, and returns the number of intersections and points of intersection.
+
+    \param plane [in]  Any plane entity.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point on the elliptical arc.
+    \param p2 [out]  Receives the second intersection point on the elliptical arc. 
+    \param tol [in]  Geometric tolerance.   
+	
+    \remarks
+    * p1 has meaning only if numInt > 0. 
+    * p2 has meaning only if numInt > 1.   
+  */
+   bool intersectWith(
+    const OdGePlanarEnt& plane, 
+    int& numInt,
+    OdGePoint3d& p1, 
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const ;
+
+  /** \details
+    Returns True if the projected points of the elliptical arc intersect with the 
+	specified linear entity, and returns the number of intersections and points of 
+	intersection.
+
+    \param line [in]  Any 3D linear entity.
+    \param projDir [in]  Projection direction.
+    \param numInt [out]  Receives the number of intersections.
+    \param pntOnEllipse1 [out]  Receives the first intersection point on the elliptical arc. 
+    \param pntOnEllipse2 [out]  Receives the second intersection point on the elliptical arc.
+    \param pntOnLine1 [out]  Receives the first intersection point on the line.   
+    \param pntOnLine2 [out]  Receives the second intersection point on the line.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool projIntersectWith(
+    const OdGeLinearEnt3d& line,
+    const OdGeVector3d& projDir, 
+    int& numInt,
+    OdGePoint3d& pntOnEllipse1,
+    OdGePoint3d& pntOnEllipse2,
+    OdGePoint3d& pntOnLine1,
+    OdGePoint3d& pntOnLine2,
+    const OdGeTol& tol = OdGeContext::gTol) const ;
+
+  /** \details
+    Returns the plane of the ellipse.
+  */
+   void getPlane(
+    OdGePlane& plane) const ;
+
+  /** \details
+    Returns true if and only if the major and minor radii of the ellipse
+    are the same within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isCircular(
+    const OdGeTol& tol = OdGeContext::gTol) const ;
+
+  /** \details
+    Returns true if and only if the specified point lies within
+    the full ellipse, and on the plane of the ellipse.
+
+    \param point [in]  Any 3D point.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isInside(
+    const OdGePoint3d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const ;
+
+  /** \details
+    Returns the center of this elliptical arc.
+  */
+   OdGePoint3d center() const ; 
+
+  /** \details
+    Returns the minor radius of this elliptical arc.
+  */
+   double minorRadius() const ;
+  
+  /** \details
+    Returns the major radius of this elliptical arc.
+  */
+   double majorRadius() const ;
+
+  /** \details
+    Returns the minor axis of this elliptical arc as a unit vector.
+  */
+   OdGeVector3d minorAxis() const ;
+
+  /** \details
+    Returns the major axis of this elliptical arc as a unit vector.
+  */
+   OdGeVector3d majorAxis() const ;
+
+  /** \details
+    Returns the normal to this elliptical arc as a unit vector. 
+
+    \remarks
+    Positive angles are always drawn counterclockwise about this vector.
+  */
+   OdGeVector3d normal() const ;
+
+  /** \details
+    Returns the start angle measured from the major axis of this elliptical arc in the 
+    plane of the arc.
+
+    \note
+    All angles are expressed in radians.
+  */
+   double startAng() const ;
+
+  /** \details
+    Returns the end angle measured from the major axis of this elliptical arc in the 
+    plane of the arc.
+
+    \note
+    All angles are expressed in radians.
+  */
+   double endAng() const ;
+
+  /** \details
+    Returns the start point of this elliptical arc.
+  */
+   OdGePoint3d startPoint() const ;
+
+  /** \details
+    Returns the end point of this elliptical arc.
+  */
+   OdGePoint3d endPoint() const ;
+
+  /** \details
+    Sets the center of the elliptical arc.
+
+    \param center [in]  The center of the elliptical arc.
+  */
+   OdGeEllipArc3d& setCenter(
+    const OdGePoint3d& center) ;
+
+  /** \details
+    Sets the minor radius of the elliptical arc.
+
+    \param minorRadius [in]  The minor radius of the elliptical arc.
+  */
+   OdGeEllipArc3d& setMinorRadius(
+    double rad) ;
+
+  /** \details
+    Sets the major radius of the elliptical arc.
+
+    \param majorRadius [in]  The major radius of the elliptical arc.
+  */
+   OdGeEllipArc3d& setMajorRadius(
+    double rad) ;
+
+  /** \details
+    Sets the major and minor axes of the elliptical arc.
+
+    \param majorAxis [in]  The major axis of the elliptical arc.
+    \param minorAxis [in]  The minor axis of the elliptical arc.
+  */
+   OdGeEllipArc3d& setAxes(
+    const OdGeVector3d& majorAxis,
+    const OdGeVector3d& minorAxis) ;
+
+  /** \details
+    Sets the starting and ending angles of the elliptical arc.
+
+    \param startAng [in]  Starting angle of the elliptical arc.
+    \param endAng [in]  Ending angle of the elliptical arc.
+    \note
+    All angles are expressed in radians.
+  */
+   OdGeEllipArc3d& setAngles(
+    double startAng, 
+    double endAng) ;
+
+  /** \details
+    Sets the parameters for this elliptical arc according to the arguments, 
+    and returns a reference to this elliptical arc.
+
+    \param arc [in]  Any 3D circular arc.
+    \param center [in]  The center of the elliptical arc.
+    \param majorAxis [in]  The major axis of the elliptical arc.
+    \param minorAxis [in]  The minor axis of the elliptical arc.
+    \param majorRadius [in]  The major radius of the elliptical arc.
+    \param minorRadius [in]  The minor radius of the elliptical arc.
+    \param startAng [in]  Starting angle of the elliptical arc.
+    \param endAng [in]  Ending angle of the elliptical arc.
+    \note
+    All angles are expressed in radians.
+
+  */
+   OdGeEllipArc3d& set(
+    const OdGePoint3d& center,
+    const OdGeVector3d& majorAxis,
+    const OdGeVector3d& minorAxis,
+    double majorRadius, 
+    double minorRadius) ;
+   OdGeEllipArc3d& set(
+    const OdGePoint3d& center,
+    const OdGeVector3d& majorAxis,
+    const OdGeVector3d& minorAxis,
+    double majorRadius, 
+    double minorRadius,
+    double startAng, 
+    double endAng) ;
+   OdGeEllipArc3d& set(
+    const OdGeCircArc3d& arc) ;
+
+  OdGeEllipArc3d& operator =(
+    const OdGeEllipArc3d& ell);
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  // functions making ellipse's axis orthogonal
+  // this one requires error flag
+
+  /** \details
+    Makes the minor axis orthogonal to the major axis.
+
+    \param tol [in]  Geometric tolerance.
+    \param flag [out]  Receives the status of computation.
+
+    \remarks
+    Possible values for flag are as follows:
+
+    @untitled table
+    kOk
+    kDegenerateGeometry
+    
+    If flag is not specified, the following exception may be thrown:
+
+    Throws:
+    <table>
+    Exception           
+    eDegenerateGeometry 
+    </table>
+  */
+   void orthogonolizeAxes(
+    const OdGeTol& tol, 
+    OdGe::ErrorCondition& flag) ;
+  void orthogonolizeAxes(
+    const OdGeTol& tol = OdGeContext::gTol) ;
+
+  /** \details
+    Returns the tangent vector at the point specified by param.
+
+    \param param [in]  Parameter corresponding to the point at which to compute the tangent.
+  */
+   OdGeVector3d tangentAt(
+    double param) const ;
+
+  /** \details
+    Returns the geometric extents of this elliptical arc.
+
+    \param extents [out]  Receives the geometric extents.
+  */
+  void getGeomExtents(
+    OdGeExtents3d& extents) const ;
+
+  /** \details
+    Returns the parameters of the points (if any) on the elliptical arc,
+    whose tangents are parallel to the specified tangent vector.
+
+    \param tan [in] A vector defining the tangent direction.
+    \param params [out] Receives the array of tangent point parameters.
+
+    \remarks
+    The parameters are appended to the specified array. You may wish to 
+    initialize the params array with clear().
+  */
+   OdResult inverseTangent(
+    OdGeVector3d tan, 
+    OdGeDoubleArray& params) const ;
+
+  /** \details
+    Returns the parameters of the points (if any) on the elliptical arc,
+    whose tangents are parallel to the specified reference plane.
+
+    \param refPlane [in] A reference plane.
+    \param params [out] Receives the array of tangent point parameters.
+
+    \remarks
+    The parameters are appended to the specified array. You may wish to 
+    initialize the params array with clear().
+  */
+  OdResult inverseTangentPlane(
+    const OdGePlane& refPlane, 
+    OdGeDoubleArray& params) const ;
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEELL3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCone.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCone.h
new file mode 100755
index 0000000..5a7ae19
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCone.h
@@ -0,0 +1,327 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GEELLIPCONE_H
+#define OD_GEELLIPCONE_H /*!DOM*/
+
+#include "Ge/GeSurface.h"
+#include "Ge/GeInterval.h"
+#include "OdPlatformSettings.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+class OdGeCircArc3d;
+class OdGeLinearEnt3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents right elliptical cones.
+
+    \remarks
+    A elliptical cone is defined by its 
+    * major and minor radii
+    * origin (a point on the axis of symmetry)
+    * axis of symmetry
+    * major axis
+    * height
+
+    The "base" is the cross section which contains the origin.
+
+    The major and minor radii must be greater than 0.  
+
+    The cone may extend on either side of the base.
+
+    The half angle is constrained to the interval (0, OdaPI/2),
+    and is measured from the symmetric axis of this elliptical cone to a point on the major axis.
+
+    A negative angle results in an apex which is opposite the direction of the
+    symmetric axis.
+
+    Parameter V is the revolution angle measured from the refAxis (which 
+    is perpendicular to the axis of symmetry).  For a closed cone,
+    it defaults to [-OdaPI, OdaPI).  The positive direction of V
+    is defined by applying the right hand rule applied along the
+    axis of symmetry.  The surface is periodic in V with a period of Oda2PI.
+
+    The angle of point on an ellipse is measured by projecting
+    the point on the ellipse perpendicular to major axis onto a
+    circle whose center is the center of the ellipse and whose
+    radius is the major radius of the ellipse.
+
+    The angle between the major axis of the ellipse, and a vector from
+    the center of the ellipse to the intersection point with the circle, 
+    measured counterclockwise, is the angle of the point on the ellipse.
+
+    Parameter U varies along the axis of symmetry.  U is dimensionless,
+    and increases in the direction of the axis of symmetry. 
+    U = 0 corresponds to center of the base of this cone, 
+    and U = 1 corresponds to the apex of this cone. 
+
+    [umin, umax] by [vmin, vmax] defines a conical patch with four sides
+    bounded by two straight lines (at angles vmin and vmax), and two
+    circular arcs (at umin and umax).  The following must be observed
+    when defining a cone:
+
+    * umin < umax
+    * |vmax - vmin| <= Oda2PI
+    * majorRadius > 0.0
+    * minorRadius > 0.0
+
+    The height interval of this elliptical cone is specified relative to its origin
+    (note that the height increases in the direction of the symmetric
+    axis).
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeCone.html, Working with Cones>
+*/
+class GE_TOOLKIT_EXPORT OdGeEllipCone : public OdGeSurface
+{
+public:
+
+
+  /** \param cosineAngle [in]  The cosine of the angle between the generating line passing
+    through the major axis, and the axis of symmetry.
+    \param sineAngle [in] The sine of the angle between the generating line passing
+    through the major axis, and the axis of symmetry.
+    \param majorRadius [in] The major radius of this elliptical cone.
+    \param minorRadius [in] The minor radius of this elliptical cone.
+    \param baseOrigin [in] The origin of this elliptical cone.
+    \param axisOfSymmetry [in] Axis of symmetry (rotation).
+    \param majorAxis [in] The major axis of this elliptical cone.
+    \param height [in] Height interval of this elliptical cone.
+    \param startAng [in] Starting angle of this elliptical cone.
+    \param endAng [in] Ending angle of this elliptical cone.
+    \remarks
+    All angles are expressed in radians.
+  */
+  OdGeEllipCone ();
+  OdGeEllipCone(const OdGeEllipCone&);
+  OdGeEllipCone (
+    double cosineAngle, 
+    double sineAngle,
+    const  OdGePoint3d& origin, 
+    double minorRadius,
+    double majorRadius, 
+    const OdGeVector3d& axisOfSymmetry);
+  OdGeEllipCone (
+    double cosineAngle, 
+    double sineAngle,
+    const OdGePoint3d& baseOrigin, 
+    double minorRadius,
+    double majorRadius,
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& majorAxis, 
+    const OdGeInterval& height,
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Returns the ratio of the minor to the major radius of this elliptical cone.
+  */
+  double radiusRatio () const ;
+  
+  /** \details
+    Returns the minor radius of this elliptical cone.
+  */
+  double minorRadius () const ;
+
+  /** \details
+    Returns the major radius of this elliptical cone.
+  */
+  double majorRadius () const  ;
+
+  /** \details
+    Returns the center of the base.
+  */
+  OdGePoint3d baseCenter () const  ;
+
+  /** \details
+    Returns the starting and ending angles of this elliptical cone.
+
+    \param startAng [out]  Receives the start angle.
+    \param endAng [out]  Receives the end angle.
+    \note
+    All angles are expressed in radians.
+
+  */
+  void getAngles (
+    double& startAng, 
+    double& endAng) const ;
+
+  /** \details
+    Returns the angle between the generating line passing through the major axis, and the axis of symmetry.
+  */
+  double halfAngle () const ;
+
+  /** \details
+    Returns the angle between the generating line passing through the major axis, and the axis of symmetry.
+  */
+  void getHalfAngle (
+    double& cosineAngle, 
+    double& sineAngle) const ;
+
+
+  /** \details
+    Returns the interval of the axis of symmetry.
+
+    \param height [out]  Receives the interval of the axis of symmetry.
+  */
+  void getHeight(
+    OdGeInterval& height) const ;
+
+  /** \details
+    Returns the height of this elliptical cone corresponding to
+    the specified position on the U-axis.
+
+    \remarks
+    Parameter U varies along the axis of symmetry.  U is dimensionless,
+    and increases in the direction of the axis of symmetry. 
+
+    \param u [in]  Position on the U-axis of this elliptical cone.
+  */
+  double heightAt(
+    double u) const  ;
+
+  /** \details
+    Returns the axis of symmetry of this elliptical cone.
+  */
+  OdGeVector3d axisOfSymmetry() const  ;
+
+  /** \details
+    Returns the major axis of this elliptical cone.
+  */
+  OdGeVector3d majorAxis() const  ;
+
+  /** \details
+    Returns the minor axis of this elliptical cone.
+  */
+  OdGeVector3d minorAxis() const ;
+
+  /** \details
+    Returns the apex of this elliptical cone.
+  */
+  OdGePoint3d apex() const ;
+
+  /** \details
+    Returns true if and only if the base of this elliptical cone
+    is a full ellipse within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isClosed(
+    const OdGeTol& tol = OdGeContext::gTol) const ;
+
+  /** \details
+    Returns true if and only if the normal to this surface
+    is pointing outward.
+  */
+  bool isOuterNormal() const ;
+
+  /** \details
+    Sets minor radius of this elliptical cone.
+
+    \param minorRadius [in]  The minor radius of this elliptical cone.
+  */
+  OdGeEllipCone& setMinorRadius(
+    double minorRadius) ;
+
+  /** \details
+    Sets major radius of this elliptical cone.
+
+    \param majorRadius [in]  The major radius of this elliptical cone.
+  */
+  OdGeEllipCone& setMajorRadius(
+    double majorRadius) ;
+
+
+  /** \details
+    Sets the starting and ending angles of this elliptical cone.
+
+    \param startAng [in]  Start angle in radians.
+    \param endAng [in]  End angle in radians.
+  */
+  OdGeEllipCone& setAngles(
+    double startAng, 
+    double endAng) ;
+
+  /** \details
+    Sets the height interval of this elliptical cone.
+
+    \param height [in]  Height interval of this elliptical cone.
+  */
+  OdGeEllipCone& setHeight(
+    const OdGeInterval& height) ;
+
+  /** \details
+    Sets the parameters for this elliptical cone according to the arguments, 
+    and returns a reference to this elliptical cone.
+
+    \param cosineAngle [in]  The cosine of the angle between the generating line passing
+    through the major axis, and the axis of symmetry.
+    \param sineAngle [in] The sine of the angle between the generating line passing
+    through the major axis, and the axis of symmetry.
+    \param majorRadius [in] The major radius of this elliptical cone.
+    \param minorRadius [in] The minor radius of this elliptical cone.
+    \param origin [in] The origin of this elliptical cone.
+    \param axisOfSymmetry [in] Axis of symmetry (rotation).
+    \param majorAxis [in] The major axis of this elliptical cone.
+    \param height [in] Height interval of this elliptical cone.
+    \param startAng [in] Starting angle of this elliptical cone.
+    \param endAng [in] Ending angle of this elliptical cone in.
+    
+    \remarks
+    All angles are expressed in radians.
+
+  */
+  OdGeEllipCone& set(
+    double cosineAngle, 
+    double sineAngle,
+    const  OdGePoint3d& center,
+    double minorRadius, 
+    double majorRadius,
+    const  OdGeVector3d& axisOfSymmetry) ;
+  OdGeEllipCone& set(
+    double cosineAngle, 
+    double sineAngle,
+    const  OdGePoint3d& center,
+    double minorRadius, 
+    double majorRadius,
+    const  OdGeVector3d& axisOfSymmetry,
+    const  OdGeVector3d& majorAxis,
+    const  OdGeInterval& height,
+    double startAng, 
+    double endAng) ;
+
+  OdGeEllipCone& operator =(const OdGeEllipCone& );
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEELLIPCONE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCylinder.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCylinder.h
new file mode 100755
index 0000000..b3e3470
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEllipCylinder.h
@@ -0,0 +1,317 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GEELLIPCYLNDR_H
+#define OD_GEELLIPCYLNDR_H /*!DOM*/
+
+#include "Ge/GeSurface.h"
+#include "Ge/GeInterval.h"
+#include "OdPlatformSettings.h"
+
+class OdGeCircArc3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents cylinders with an elliptical cross-section.
+
+    \remarks
+    An eliptical cylinder is defined by:
+    *   major and minor radii
+    *   origin (a point on the axis of symmetry)
+    *   axis of symmetry
+    *   major axis
+    *   height
+
+    It is generated by a line parallel to the axis of symmetry,
+    along an eliptical path. 
+
+    Parameter V is the angle of revolution, measured from the major axis
+    to the axis of symmetry. The right hand rule is applied along the 
+    direction of the axis of symmetry for positive
+    angles. For a closed cylinder, V defaults to [-OdaPI, OdaPI).
+
+    Parameter U varies along the axis of symmetry. U is dimensionless
+    and increases in the direction of the axis of symmetry. 
+    U = 0 corresponds to the center of the cylinder base, 
+    and U = 1 corresponds to the center of the cylinder top.  
+
+    The surface of the cylinder is perodic in V with a period of Oda2PI.
+
+    [umin, umax] x [vmin, vmax] defines a four-sided cylindrical
+    patch bounded by two straight lines (at vmin and vmax) and
+    two circular arcs (at umin and umax). The following constraints
+    apply to the definition of a cylindrical patch:
+
+    * umin < umax
+    * |vmax - vmin| <= Oda2PI
+    * majorRadius > 0.0
+    * minorRadius > 0.0
+ 
+    The angle of a point on an ellipse is measured by projecting
+    the point along a vector perpendicular to the major axis onto a
+    circle whose center is the center of this ellipse and whose
+    radius is the major radius of this ellipse.
+
+    The angle between the major axis of the ellipse, and a vector from
+    the center of the ellipse to the intersection point with the circle, 
+    measured counterclockwise, is the angle of the point on the ellipse.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeCylinder.html, Working with Cylinders>
+*/
+class GE_TOOLKIT_EXPORT OdGeEllipCylinder : public OdGeSurface
+{
+public:
+
+
+  /** \param majorRadius [in]  Major radius of the elliptical cylinder.
+    \param minorRadius [in]  Minor radius of the elliptical cylinder.
+    \param origin [in]  Origin of the elliptical cylinder.
+    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
+    \param majorAxis [in]  Major axis of the elliptical cylinder.
+    \param height [in]  Height interval of the cylinder.
+    \param startAng [in]  Start angle of the elliptical cylinder.
+    \param endAng [in]  End angle of the elliptical cylinder.
+    
+	\note
+    All angles are expressed in radians.
+  */
+  OdGeEllipCylinder ();
+  OdGeEllipCylinder (const OdGeEllipCylinder& );
+  OdGeEllipCylinder (
+    double minorRadius, 
+    double majorRadius,
+    const OdGePoint3d& origin,
+    const OdGeVector3d& axisOfSymmetry);
+  OdGeEllipCylinder (
+    double minorRadius, 
+    double majorRadius,
+    const OdGePoint3d& origin,
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& majorAxis,
+    const OdGeInterval& height,
+    double startAng, 
+    double endAng);
+
+  // Geometric properties.
+  //
+
+  /** \details
+    Returns the ratio of the minor to major radius of the cylinder.
+  */
+  double radiusRatio () const ;
+
+  /** \details
+    Returns the minor radius of the cylinder.
+  */
+  double minorRadius () const ;
+
+
+  /** \details
+    Returns the major radius of the cylinder.
+  */
+  double majorRadius () const ;
+
+  /** \details
+    Returns the origin of the cylinder.
+  */
+  OdGePoint3d origin () const ;
+
+  /** \details
+    Returns the start and end angles of the cylinder.
+
+    \param startAng [out]  Receives the start angle.
+    \param endAng [out]  Receives the end angle.
+    
+	\note
+    All angles are expressed in radians.
+
+  */
+  void getAngles (
+    double& startAng, 
+    double& endAng) const ;
+
+  /** \details
+    Returns the interval of the axis of symmetry.
+
+    \param height [out]  Receives the interval of the axis of symmetry.
+  */
+  void getHeight (
+    OdGeInterval& height) const ;
+
+  /** \details
+    Returns the cylinder height that corresponds to
+    the specified position on the U-axis.
+    
+	\remarks
+    Parameter U varies along the axis of symmetry. U is dimensionless
+    and increases in the direction of the axis of symmetry. 
+
+    \param u [in]  Position of the cylinder on the U-axis.
+  */
+  double heightAt (
+    double u) const ;
+
+  /** \details
+    Returns the axis of symmetry of the cylinder.
+  */
+  OdGeVector3d axisOfSymmetry () const ;
+
+  /** \details
+    Returns the major axis of the cylinder.
+  */
+  OdGeVector3d majorAxis () const ;
+
+  /** \details
+    Returns the minor axis of the cylinder.
+  */
+  OdGeVector3d minorAxis () const;
+
+  /** \details
+    Returns true if and only if the normal to the cylinder
+    is pointing outward.
+  */
+  bool isOuterNormal () const;    
+
+  /** \details
+    Returns true if and only if the cylinder
+    is a full ellipse within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isClosed (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Sets OuterNormal according to the parameter.
+
+    \param isOuterNormal [in]  Sets OuterNormal.
+  */
+  void setIsOuterNormal (
+    bool isOuterNormal);
+
+  /** \details
+    Sets the minor radius of the elliptical cylinder.
+
+    \param minorRadius [in]  The minor radius of the elliptical cylinder.
+  */
+  OdGeEllipCylinder& setMinorRadius (
+    double minorRadius);
+
+  /** \details
+    Sets the major radius of the elliptical cylinder.
+
+    \param majorRadius [in]  The major radius of the elliptical cylinder.
+  */
+  OdGeEllipCylinder& setMajorRadius (
+    double majorRadius);
+
+  /** \details
+    Sets the start and end angles of the elliptical cylinder.
+
+    \param startAng [in]  Start angle.
+    \param endAng [in]  End angle.
+    
+	\note
+    All angles are expressed in radians.
+
+  */
+  OdGeEllipCylinder& setAngles (
+    double startAng, 
+    double endAng);
+
+  /** \details
+    Sets the height of the elliptical cylinder.
+
+    \param height [in]  Height of the elliptical cylinder.
+  */
+  OdGeEllipCylinder& setHeight (
+    const OdGeInterval& height);
+
+  /** \details
+    Sets the parameters for the cylinder and returns a reference to the cylinder.
+
+    \param majorRadius [in]  Major radius of the elliptical cylinder.
+    \param minorRadius [in]  Minor radius of the elliptical cylinder.
+    \param origin [in]  Origin of the elliptical cylinder.
+    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
+    \param majorAxis [in]  Major axis of the elliptical cylinder.
+    \param height [in]  Height interval of the cylinder.
+    \param startAng [in]  Start angle of the elliptical cylinder.
+    \param endAng [in]  End angle of the elliptical cylinder.
+    
+	\note
+    All angles are expressed in radians.
+  */
+  OdGeEllipCylinder& set (
+    double minorRadius,
+    double majorRadius, 
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& axisOfSymmetry);
+  OdGeEllipCylinder& set (
+    double minorRadius, 
+    double majorRadius,
+    const OdGePoint3d& origin,
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& majorAxis,
+    const OdGeInterval& height,
+    double startAng, 
+    double endAng);
+
+
+  /** \details
+    Returns True if the cylinder intersects with the specified line entity,
+    and returns the number of intersections and the points of intersection.
+
+    \param lineEnt [in]  Any 3D line entity.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point.
+    \param p2 [out]  Receives the second intersection point.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 is valid only if numInt > 0.
+    * p2 is valid only if numInt > 1.
+  */
+  bool intersectWith (
+    const OdGeLinearEnt3d& linEnt, 
+    int& numInt,
+    OdGePoint3d& p1, 
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  OdGeEllipCylinder& operator =(const OdGeEllipCylinder& );
+};
+
+
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEELLIPCYLNDR_H
+// AE - End 
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity2d.h
new file mode 100755
index 0000000..6a9817b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity2d.h
@@ -0,0 +1,166 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_ENTITY_2D_H
+#define OD_GE_ENTITY_2D_H /*!DOM*/
+
+class OdGeMatrix2d;
+class OdGeLine2d;
+class OdGeEntity2dImpl;
+
+#include "Ge/GePoint2d.h"
+#include "OdHeap.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all OdGe 2D geometric operations.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeEntity2d
+{
+public:
+  ODRX_HEAP_OPERATORS();
+
+  /** \details
+    Returns true if and only if this entity is of  type (or is derived from) entType.
+
+    \param entType [in]  Entity type to test. 
+  */
+  bool isKindOf(
+    OdGe::EntityId entType) const;
+
+  /** \details
+    Returns the entity type of this entity.
+  */
+  OdGe::EntityId type() const;
+
+  /** \details
+    Returns a copy of this entity.
+
+    \remarks
+    The returned object is created with the new operator, and it is the responsibility of the caller to delete it.
+  */
+  OdGeEntity2d* copy() const;
+
+  OdGeEntity2d& operator =(
+    const OdGeEntity2d& entity);
+
+  bool operator ==(
+    const OdGeEntity2d& entity) const;
+
+  bool operator !=(
+    const OdGeEntity2d& entity) const;
+
+  /** \details
+    Returns true if the specified entity is equal to this one.
+
+    \remarks
+    Returns true if and only if both entities are of the same type, have the same point set within the 
+    specified tolerance, and have the same parameterization.
+
+    \param other [in]  Entity to be compared
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo(
+    const OdGeEntity2d& other, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Applies the 2D transformation matrix to this entity, and returns
+    a reference to this entity.
+
+    \param xfm [in]  2D transformation matrix.
+  */
+  OdGeEntity2d& transformBy(
+    const OdGeMatrix2d& xfm);
+
+  /** \details
+    Applies the 2D translation vector to this entity, and returns
+    a reference to this entity.
+
+    \param translateVec [in]  Translation Vector.
+  */
+  OdGeEntity2d& translateBy(
+    const OdGeVector2d& translateVec);
+
+  /** \details
+    Rotates this entity about the specified point by the specified angle, and returns
+    a reference to this entity.
+
+    \param angle [in]  Rotation angle.
+    \param basePoint [in]  Basepoint.
+  */
+  OdGeEntity2d& rotateBy(
+    double angle, 
+    const OdGePoint2d& basePoint = OdGePoint2d::kOrigin);
+
+  /** \details
+    Mirrors this entity about the specified 2D line, and returns
+    a reference to this entity.
+
+    \param line [in]  Mirror Line.
+  */
+  OdGeEntity2d& mirror(
+    const OdGeLine2d& line);
+
+  /** \details
+    Scales this entity by the scale factor about the basepoint, and returns
+    a reference to this entity.
+
+    \param scaleFactor [in]  Scale Factor. The scale factor must be greater than zero.
+    \param basePoint [in]  Basepoint.
+  */
+  OdGeEntity2d& scaleBy(
+    double scaleFactor, 
+    const OdGePoint2d& basePoint = OdGePoint2d::kOrigin);
+
+  /** \details
+    Returns true if and only if the specified point is on this entity, as determined by the tolerance.
+
+    \param point [in]  Point to be queried.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isOn(
+    const OdGePoint2d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  ~OdGeEntity2d();
+protected:
+  OdGeEntity2d();
+  OdGeEntity2d(const OdGeEntity2d&);
+  void connectTo(OdGeEntity2dImpl*);
+
+private:
+  OdGeEntity2d(OdGeEntity2dImpl*);
+  OdGeEntity2dImpl* m_pImpl;
+  friend class OdGeEntity2dImpl;
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_ENTITY_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity3d.h
new file mode 100755
index 0000000..691ccba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeEntity3d.h
@@ -0,0 +1,173 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_GEENTITY3D_H_
+#define _OD_GEENTITY3D_H_ /*!DOM*/
+
+#include "Ge/GeGbl.h"
+#include "Ge/GePoint3d.h"
+#include "OdHeap.h"
+
+#include "TD_PackPush.h"
+
+class OdGeMatrix3d;
+class OdGePlane;
+class OdGeEntity3dImpl;
+
+/** \details
+    This class is the base class for all OdGe 3D geometric operations.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeEntity3d
+{
+public:
+  ODRX_HEAP_OPERATORS();
+
+  ~OdGeEntity3d();
+
+  // Run time type information.
+
+  /** \details
+    Returns true if and only if this entity is of type (or is derived from) entType.
+
+    \param entType [in]  Entity type to test. 
+  */
+   bool isKindOf(
+    OdGe::EntityId entType) const;
+
+  /** \details
+    Returns the entity type.
+  */
+   OdGe::EntityId type() const;
+
+  /** \details
+    Returns a copy of this entity.
+
+    \remarks
+  The returned object is created with the new operator, and it is the responsibility of the caller to delete it.
+  */
+   OdGeEntity3d* copy() const;
+
+  OdGeEntity3d& operator =(
+    const OdGeEntity3d& entity);
+
+  bool operator ==(
+    const OdGeEntity3d& entity) const;
+  bool operator !=(
+    const OdGeEntity3d& entity) const;
+
+  /** Returns true if the specified entity is equal to this one.
+
+    \remarks
+    Returns true if and only if both entities are of the same type, have the same point set within the 
+    specified tolerance, and have the same parameterization.
+
+    \param other [in]  Entity to be compared
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isEqualTo(
+    const OdGeEntity3d& object, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Applies the 3D transformation matrix to this entity, and returns
+    a reference to this entity.
+
+    \param xfm [in]  3D transformation matrix.
+  */
+   OdGeEntity3d& transformBy(
+    const OdGeMatrix3d& xfm);
+
+  /** \details
+    Applies the 3D translation vector to this entity, and returns
+    a reference to this entity.
+
+    \param translateVec [in]  Translation Vector.
+  */
+   OdGeEntity3d& translateBy(
+    const OdGeVector3d& translateVec);
+
+  /** \details
+    Rotates this entity by the specified angle about the axis
+    defined by the point and the vector, and returns
+    a reference to this entity.
+
+    \param angle [in]  Rotation angle.
+    \param vect [in]  Vector about which entitiy is rotated. 
+    \param basePoint [in]  Basepoint.
+  */
+   OdGeEntity3d& rotateBy(
+    double angle, 
+    const OdGeVector3d& vect,
+    const OdGePoint3d& basePoint = OdGePoint3d::kOrigin);
+
+  /** \details
+    Mirrors this entity about the specified plane, and returns
+    a reference to this entity.
+
+    \param plane [in]  Plane about which entity is to be mirrored.
+  */
+   OdGeEntity3d& mirror(
+    const OdGePlane& plane);
+
+  /** \details
+    Scales this entity by the scale factor about the basepoint, and returns
+    a reference to this entity.
+
+    \param scaleFactor [in]  Scale Factor. Must be greater than 0.
+    \param basePoint [in]  Basepoint.
+  */
+   OdGeEntity3d& scaleBy(
+    double scaleFactor,
+    const OdGePoint3d& basePoint = OdGePoint3d::kOrigin);
+
+  /** \details
+    Returns true if and only if the specified point is on this entity, 
+    as determined by the tolerance.
+
+    \param point [in]  Point to be queried.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isOn(
+    const OdGePoint3d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+protected:
+  OdGeEntity3d();
+  OdGeEntity3d(const OdGeEntity3d&);
+  void connectTo(OdGeEntity3dImpl*);
+
+private:
+  OdGeEntity3d(OdGeEntity3dImpl*);
+  OdGeEntity3dImpl* m_pImpl;
+  friend class OdGeEntity3dImpl;
+};
+
+#include "TD_PackPop.h"
+
+#endif //_OD_GEENTITY3D_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExport.h
new file mode 100755
index 0000000..d2c7b3e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExport.h
@@ -0,0 +1,54 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+/*  GeExport.h
+
+*/
+
+#ifndef _GE_EXPORT_DEFINED
+#define _GE_EXPORT_DEFINED /*!DOM*/
+
+/** The following four defines thed undefs are strictly for consistant documentation.
+*/
+
+#define GE_TOOLKIT_EXPORT
+#undef GE_TOOLKIT_EXPORT
+#define GE_TEMPLATE_EXPORT
+#undef GE_TEMPLATE_EXPORT
+
+#include "OdPlatformSettings.h"
+
+#ifdef ODA_GE_EXPORTS
+  #define GE_TOOLKIT_EXPORT     OD_TOOLKIT_EXPORT /*!DOM*/
+  #define GE_STATIC_EXPORT      OD_STATIC_EXPORT  /*!DOM*/
+#else
+  #define GE_TOOLKIT_EXPORT     OD_TOOLKIT_IMPORT /*!DOM*/
+  #define GE_STATIC_EXPORT      OD_STATIC_IMPORT  /*!DOM*/
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _GE_EXPORT_DEFINED */
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents2d.h
new file mode 100755
index 0000000..52cff6f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents2d.h
@@ -0,0 +1,315 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGEEXTENTS2D_INCLUDED_
+#define _ODGEEXTENTS2D_INCLUDED_ /*!DOM*/
+
+#include "Ge/GePoint2d.h"
+#include "Ge/GeVector2d.h"
+#include "Ge/GeMatrix2d.h"
+
+#include "TD_PackPush.h"
+
+#define INVALIDEXTENTS 1.0e20 /*!DOM*/
+
+/** \details
+    This class represents 2D bounding boxes as minimum and maximum 2d points.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeExtents2d
+{
+public:
+
+  /** \param min [in]  Minimum point.
+    \param max [in]  Maximum point.
+  */
+  OdGeExtents2d ()
+    : m_min (INVALIDEXTENTS,  INVALIDEXTENTS)
+    , m_max (-INVALIDEXTENTS, -INVALIDEXTENTS)
+  {}
+
+  OdGeExtents2d (
+    const OdGePoint2d& min, 
+    const OdGePoint2d& max) 
+  { set (min, max); }
+
+  /** \details
+    The invalid extents.
+  */
+  GE_STATIC_EXPORT static const OdGeExtents2d kInvalid;
+
+  /** \details
+    Returns the minimum point of this Extents object.
+  */
+  const OdGePoint2d& minPoint () const 
+  { return m_min; }
+
+  /** \details
+    Returns the maximum point of this Extents object.
+  */
+  const OdGePoint2d& maxPoint () const 
+  { return m_max; }
+
+  /** \details
+    Sets the minimum and maximum points for this Extents object.
+    
+    \param min [in]  Minimum point.
+    \param max [in]  Maximum point.
+  */
+  void set (
+    const OdGePoint2d& min, 
+    const OdGePoint2d& max) 
+  { m_min = min; m_max = max; }
+
+  /** \details
+    Sets the minimum and maximum points for this Extents object to
+    that of the box defined by pt1 and pt2.
+
+    \param pt1 [in]  First point.
+    \param pt2 [in]  Second point.
+
+    \remarks
+    pt1 and pt2 need only define a box. They need not be the minimum
+    and maximum points of the box.
+  */
+  void comparingSet(
+    const OdGePoint2d& pt1,
+    const OdGePoint2d& pt2);
+
+  /** \details
+    Updates the extents of this Extents object with the specified point.
+
+    \param point [in]  Any 2D point.
+  */
+  void addPoint (
+    const OdGePoint2d& point)
+  {
+    if ( !isValidExtents() )
+    {
+      m_max = m_min = point;
+    }
+    else
+    {
+      m_max.x = odmax (point.x, m_max.x);
+      m_max.y = odmax (point.y, m_max.y);
+      m_min.x = odmin (point.x, m_min.x);
+      m_min.y = odmin (point.y, m_min.y);
+    }
+  }
+    
+  /** \details
+    Updates the extents of this Extents object with the specified Extents object.
+    
+    \param extents [in]  Any 2D Extents object.
+  */
+  void addExt (
+    const OdGeExtents2d& extents)
+  {
+    if (extents.isValidExtents ())
+    {
+      addPoint (extents.minPoint ());
+      addPoint (extents.maxPoint ());
+    }
+  }
+
+  /** \details
+    Returns true if and only if this Extents object contains valid extents.
+    
+    \remarks
+    Extents are valid if and only if each member of the minimum extents 
+    is less than or equal to the corresponding member of maximum extents.
+  */
+  bool isValidExtents () const
+  {
+    return ( (m_max.x >= m_min.x) && (m_max.y >= m_min.y) );
+  }
+
+  /** \details
+    Updates the extents of this Extents object by the specified vector.
+    \param vect [in]  Any 2D vector.
+  */
+    void expandBy (
+    const OdGeVector2d& vect)
+  {
+    if (isValidExtents ())
+    {
+      OdGePoint2d p1 = m_min, p2 = m_max;
+      p1 += vect;
+      p2 += vect;
+      addPoint (p1);
+      addPoint (p2);
+    }
+  }
+
+  /** \details
+    Applies the 2D transformation matrix to the extents.
+
+    \param xfm [in]  2D transformation matrix.
+  */
+  void transformBy (
+    const OdGeMatrix2d& xfm)
+  {
+    OdGeVector2d vecX (OdGeVector2d::kXAxis * (m_max.x - m_min.x)),
+      vecY (OdGeVector2d::kYAxis * (m_max.y - m_min.y));
+
+    if (isValidExtents ())
+    {
+      m_max = m_min = (xfm * m_min);
+      expandBy (xfm * vecX);
+      expandBy (xfm * vecY);
+    }
+  }
+    
+  /** \details
+    Returns true if and only if this Extents object contains the specified object.
+    
+    \param point [in]  Any 2D point.
+    \param extents [in]  Any 2D Extents object.
+  */
+  bool contains (
+    const OdGePoint2d& point) const
+  {
+    return ( point.x >= m_min.x  &&  point.y >= m_min.y  &&
+              point.x <= m_max.x  &&  point.y <= m_max.y );
+  }
+
+  bool contains (
+    const OdGeExtents2d& extents) const
+  {
+    return (extents.m_min.x >=         m_min.x && extents.m_min.y >=     m_min.y      &&
+                    m_max.x >= extents.m_max.x &&          m_max.y >= extents.m_max.y );
+  }
+
+
+  /** \details
+    Returns true if and only if specified Extents object
+    does not intersect this one.
+
+    \param extents [in]  Any 2D Extents object.
+  */
+  bool isDisjoint (
+    const OdGeExtents2d& extents) const
+  {
+    return (extents.m_min.x >         m_max.x || extents.m_min.y >         m_max.y ||
+                    m_min.x > extents.m_max.x ||         m_min.y > extents.m_max.y );
+  }    
+
+  enum IntersectionStatus
+  {
+    kIntersectUnknown,// Either or both extents are invalid
+    kIntersectNot,    // Extents are NOT intersecting
+    kIntersectOpIn,   // Operand is completely within this extents
+    kIntersectOpOut,  // This extents is completely within operand
+    kIntersectOk      // Extents are intersecting, result is returned
+  };
+
+  /** \details
+    Determines the intersection of the specified Extents object with this one,
+    and returns the resulting intersection box.
+    
+    \param extents [in]  Any 2D Extents object.
+    \param pResult [out]  Receives extents of the intersection.
+    
+    \remarks
+    pResult object should be created by the caller. Possible return values are as follows.
+    
+    @untitled table
+    kIntersectUnknown   Either or both Extents objects are invalid
+    kIntersectNot       The Extents objects are NOT intersecting
+    kIntersectOpIn      The specified Extents object is completely within this one
+    kIntersectOpOut     This Extents object is completely within the specified one
+    kIntersectOk        The Extents objectes are intersecting, and a result is returned
+    
+  */
+  IntersectionStatus intersectWith (
+    const OdGeExtents2d& extents, 
+    OdGeExtents2d* pResult = 0) const;
+
+  OdGePoint2d center() const
+  {
+    return m_min + (m_max - m_min) * 0.5;
+  }
+
+  bool isEqualTo(const OdGeExtents2d& extents, const OdGeTol& tol = OdGeContext::gTol) const;
+
+  bool operator ==(const OdGeExtents2d& extents) const
+  {
+    return isEqualTo(extents);
+  }
+  bool operator !=(const OdGeExtents2d& extents) const
+  {
+    return !isEqualTo(extents);
+  }
+
+protected:
+  OdGePoint2d m_min;
+  OdGePoint2d m_max;
+};
+
+// Inlines section
+
+inline void OdGeExtents2d::comparingSet(const OdGePoint2d& pt1, const OdGePoint2d& pt2)
+{
+  if (pt1.x > pt2.x)
+  {
+    m_max.x = pt1.x;
+    m_min.x = pt2.x;
+  }
+  else
+  {
+    m_min.x = pt1.x;
+    m_max.x = pt2.x;
+  }
+  if (pt1.y > pt2.y)
+  {
+    m_max.y = pt1.y;
+    m_min.y = pt2.y;
+  }
+  else
+  {
+    m_min.y = pt1.y;
+    m_max.y = pt2.y;
+  }
+}
+
+inline bool OdGeExtents2d::isEqualTo(const OdGeExtents2d& extents, const OdGeTol& tol) const
+{
+  const OdUInt8 bValid = ((isValidExtents()) ? 1 : 0) | ((extents.isValidExtents()) ? 2 : 0);
+  switch (bValid)
+  {
+    // Both invalid
+    case 0: return true;
+    // Both valid
+    case 3: return m_min.isEqualTo(extents.m_min, tol) && m_max.isEqualTo(extents.m_max, tol);
+  }
+  return false;
+}
+
+#undef INVALIDEXTENTS
+
+#include "TD_PackPop.h"
+
+#endif //_ODGEEXTENTS2D_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents3d.h
new file mode 100755
index 0000000..55aa3d4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExtents3d.h
@@ -0,0 +1,411 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGEEXTENTS3D_INCLUDED_
+#define _ODGEEXTENTS3D_INCLUDED_ /*!DOM*/
+
+#include "Ge/GePoint3d.h"
+#include "Ge/GeVector3d.h"
+#include "Ge/GeMatrix3d.h"
+
+#include "TD_PackPush.h"
+
+class OdGeExtents2d;
+
+#define INVALIDEXTENTS 1.0e20  /*!DOM*/
+
+/** \details
+    This class represents 3D bounding boxes as minimum and maximum 3d points.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeExtents3d
+{
+public:
+
+  /** \param min [in]  Minimum point.
+    \param max [in]  Maximum point.
+  */
+  OdGeExtents3d();
+
+  OdGeExtents3d(
+    const OdGePoint3d& min, 
+    const OdGePoint3d& max);
+
+  /** \details
+    The invalid extents.
+  */
+  GE_STATIC_EXPORT static const OdGeExtents3d kInvalid;
+
+  /** \details
+    Returns the minimum point of this Extents object.
+  */
+  const OdGePoint3d& minPoint() const;
+
+  /** \details
+    Returns the maximum point of this Extents object.
+  */
+  const OdGePoint3d& maxPoint() const;
+
+  /** \details
+    Sets the minimum and maximum points for this Extents object.
+    
+    \param min [in]  Minimum point.
+    \param max [in]  Maximum point.
+  */
+  void set(
+    const OdGePoint3d& min, 
+    const OdGePoint3d& max);
+
+  /** \details
+    Sets the minimum and maximum points for this Extents object to
+    that of the box defined by pt1 and pt2.
+    
+    \param pt1 [in]  First point.
+    \param pt2 [in]  Second point.
+
+    \remarks
+    pt1 and pt2 need only define a box. They need not be the minimum
+    and maximum points of the box.
+  */
+  void comparingSet(
+    const OdGePoint3d& pt1, 
+    const OdGePoint3d& pt2);
+
+  /** \details
+    Updates the extents of this Extents object with the specified point.
+
+    \param point [in]  Any 3D point.
+  */
+  void addPoint(
+    const OdGePoint3d& point);
+
+  /** \details
+    Updates the extents of this Extents object with the specified Extents object.
+    
+    \param extents [in]  Any 3D Extents object.
+  */
+  void addExt(
+    const OdGeExtents3d& extents);
+
+  /** \details
+    Returns true if and only if this Extents object contains valid extents.
+    
+    \remarks
+    Extents are valid if and only if each member of the minimum extents 
+    is less than or equal to the corresponding member of maximum extents.
+  */
+  inline bool isValidExtents() const
+  {
+    return ( (m_max.x >= m_min.x) && (m_max.y >= m_min.y) && (m_max.z >= m_min.z));
+  }
+
+  /** \details
+    Updates the extents of this Extents object by the specified vector.
+    \param vect [in]  Any 3D vector.
+  */
+    void expandBy(
+    const OdGeVector3d& vect);
+
+  /** \details
+    Applies the 3D transformation matrix to the extents.
+
+    \param xfm [in]  3D transformation matrix.
+  */
+  void transformBy(
+    const OdGeMatrix3d& xfm);
+    
+  /** \details
+    Returns true if and only if this Extents object contains the specified object.
+    
+    \param point [in]  Any 3D point.
+    \param extents [in]  Any 3D Extents object.
+  */
+  bool contains(
+    const OdGePoint3d& point, const OdGeTol& tol = OdGeContext::gTol) const;
+
+  bool contains(
+    const OdGeExtents3d& extents, const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if specified Extents object
+    does not intersect this one.
+
+    \param extents [in]  Any 3D Extents object.
+  */
+  bool isDisjoint(
+    const OdGeExtents3d& extents, const OdGeTol& tol = OdGeContext::gTol) const;
+
+  enum IntersectionStatus
+  {
+    kIntersectUnknown,// Either or both extents are invalid
+    kIntersectNot,    // Extents are NOT intersecting
+    kIntersectOpIn,   // Operand is completely within this extents
+    kIntersectOpOut,  // This extents is completely within operand
+    kIntersectOk      // Extents are intersecting, result is returned
+  };
+
+  /** \details
+    Determines the intersection of the specified Extents object with this one,
+    and returns the resulting intersection box.
+    
+    \param extents [in]  Any 3D Extents object.
+    \param pResult [out]  Receives extents of the intersection.
+    
+    \remarks
+    pResult object should be created by the caller. Possible return values are as follows.
+    
+    @untitled table
+    kIntersectUnknown   Either or both extents boxes are invalid
+    kIntersectNot       The extents boxes are NOT intersecting
+    kIntersectOpIn      The specified Extents object is completely within this one
+    kIntersectOpOut     This Extents object is completely within the specified one
+    kIntersectOk        The extents boxes are intersecting, and a result is returned
+    
+  */
+  IntersectionStatus intersectWith(const OdGeExtents3d& extents, OdGeExtents3d* pResult = 0) const;
+
+  OdGePoint3d center() const
+  {
+    return m_min + (m_max - m_min) * 0.5;
+  }
+
+  enum Convert2dPlane
+  {
+    kConvert2dPlaneXY = 0x04,
+    kConvert2dPlaneXZ = 0x0C,
+    kConvert2dPlaneYX = 0x01,
+    kConvert2dPlaneYZ = 0x0D,
+    kConvert2dPlaneZX = 0x03,
+    kConvert2dPlaneZY = 0x07
+  };
+  void convert2d(OdGeExtents2d &extents, Convert2dPlane plane = kConvert2dPlaneXY) const;
+  void setFrom2d(const OdGeExtents2d &extents, Convert2dPlane plane = kConvert2dPlaneXY);
+
+  bool isEqualTo(const OdGeExtents3d& extents, const OdGeTol& tol = OdGeContext::gTol) const;
+
+  bool operator ==(const OdGeExtents3d& extents) const
+  {
+    return isEqualTo(extents);
+  }
+  bool operator !=(const OdGeExtents3d& extents) const
+  {
+    return !isEqualTo(extents);
+  }
+
+protected:
+  OdGePoint3d m_min;
+  OdGePoint3d m_max;
+};
+
+// Inline implementations
+
+inline OdGeExtents3d::OdGeExtents3d()
+  : m_min(INVALIDEXTENTS,  INVALIDEXTENTS,  INVALIDEXTENTS)
+  , m_max(-INVALIDEXTENTS, -INVALIDEXTENTS, -INVALIDEXTENTS)
+{
+}
+
+inline OdGeExtents3d::OdGeExtents3d(const OdGePoint3d& min, const OdGePoint3d& max)
+  : m_min(min)
+  , m_max(max)
+{
+}
+
+inline const OdGePoint3d& OdGeExtents3d::minPoint() const
+{
+  return m_min;
+}
+
+inline const OdGePoint3d& OdGeExtents3d::maxPoint() const
+{
+  return m_max;
+}
+
+inline void OdGeExtents3d::set(const OdGePoint3d& min, const OdGePoint3d& max)
+{
+  m_min = min;
+  m_max = max;
+}
+
+inline void OdGeExtents3d::comparingSet(const OdGePoint3d& pt1, const OdGePoint3d& pt2)
+{
+  if(pt1.x > pt2.x)
+  {
+    m_max.x = pt1.x;
+    m_min.x = pt2.x;
+  }
+  else
+  {
+    m_min.x = pt1.x;
+    m_max.x = pt2.x;
+  }
+  if(pt1.y > pt2.y)
+  {
+    m_max.y = pt1.y;
+    m_min.y = pt2.y;
+  }
+  else
+  {
+    m_min.y = pt1.y;
+    m_max.y = pt2.y;
+  }
+  if(pt1.z > pt2.z)
+  {
+    m_max.z = pt1.z;
+    m_min.z = pt2.z;
+  }
+  else
+  {
+    m_min.z = pt1.z;
+    m_max.z = pt2.z;
+  }
+}
+
+#define ex_minmax(max, min, val) \
+  if (max < val) max = val;\
+  else if (min > val) min = val;
+
+inline void OdGeExtents3d::addPoint(const OdGePoint3d& point)
+{
+  if ((m_max.x < m_min.x) || (m_max.y < m_min.y) || (m_max.z < m_min.z))
+  {
+    m_max = m_min = point;
+  }
+  else
+  {
+    ex_minmax(m_max.x, m_min.x, point.x);
+    ex_minmax(m_max.y, m_min.y, point.y);
+    ex_minmax(m_max.z, m_min.z, point.z);
+  }
+}
+#undef ex_minmax
+
+inline void OdGeExtents3d::addExt(const OdGeExtents3d& extents)
+{
+  ODA_ASSERT(extents.isValidExtents());
+
+#if 0
+  addPoint(extents.minPoint());
+  addPoint(extents.maxPoint());
+#else
+  // Optimization
+#define ex_minmax(max, min, valMax, valMin) \
+  if (max < valMax) max = valMax; \
+  if (min > valMin) min = valMin;
+
+  if ((m_max.x < m_min.x) || (m_max.y < m_min.y) || (m_max.z < m_min.z))
+  {
+    set(extents.minPoint(), extents.maxPoint());
+  }
+  else
+  {
+    ex_minmax(m_max.x, m_min.x, extents.maxPoint().x, extents.minPoint().x);
+    ex_minmax(m_max.y, m_min.y, extents.maxPoint().y, extents.minPoint().y);
+    ex_minmax(m_max.z, m_min.z, extents.maxPoint().z, extents.minPoint().z);
+  }
+
+#undef ex_minmax
+#endif
+}
+
+inline void OdGeExtents3d::expandBy(const OdGeVector3d& vect)
+{
+  ODA_ASSERT(isValidExtents());
+
+  OdGePoint3d p1 = m_min, p2 = m_max;
+  addPoint(p1 + vect);
+  addPoint(p2 + vect);
+}    
+
+inline void OdGeExtents3d::transformBy(const OdGeMatrix3d& xfm)
+{
+  ODA_ASSERT(isValidExtents());
+
+  OdGeVector3d d = m_max - m_min;
+  
+  m_max = m_min = (xfm * m_min);
+  if(OdNonZero(d.x, 1.e-200))
+    expandBy(xfm * (OdGeVector3d::kXAxis * d.x));
+  if(OdNonZero(d.y, 1.e-200))
+    expandBy(xfm * (OdGeVector3d::kYAxis * d.y));
+  if(OdNonZero(d.z, 1.e-200))
+    expandBy(xfm * (OdGeVector3d::kZAxis * d.z));
+}    
+
+inline bool OdGeExtents3d::contains(const OdGePoint3d& point, const OdGeTol& tol) const
+{
+  ODA_ASSERT(isValidExtents());
+
+  return ( (point.x + tol.equalPoint()) >= m_min.x
+    && (point.y + tol.equalPoint()) >= m_min.y
+    && (point.z + tol.equalPoint()) >= m_min.z
+    && (point.x - tol.equalPoint()) <= m_max.x
+    && (point.y - tol.equalPoint()) <= m_max.y
+    && (point.z - tol.equalPoint()) <= m_max.z );
+}
+
+inline bool OdGeExtents3d::contains(const OdGeExtents3d& extents, const OdGeTol& tol) const
+{
+  ODA_ASSERT(isValidExtents());
+
+  return ((extents.m_min.x + tol.equalPoint()) >= m_min.x 
+    && (extents.m_min.y + tol.equalPoint()) >= m_min.y 
+    && (extents.m_min.z + tol.equalPoint()) >= m_min.z 
+    && m_max.x >= (extents.m_max.x - tol.equalPoint()) 
+    && m_max.y >= (extents.m_max.y - tol.equalPoint()) 
+    && m_max.z >= (extents.m_max.z - tol.equalPoint()));
+}    
+
+inline bool OdGeExtents3d::isDisjoint(const OdGeExtents3d& extents, const OdGeTol& tol) const
+{
+  ODA_ASSERT(isValidExtents());
+
+  return ((extents.m_min.x - tol.equalPoint()) > m_max.x 
+    || (extents.m_min.y - tol.equalPoint()) > m_max.y 
+    || (extents.m_min.z - tol.equalPoint()) > m_max.z
+    || m_min.x > (extents.m_max.x + tol.equalPoint())
+    || m_min.y > (extents.m_max.y + tol.equalPoint())
+    || m_min.z > (extents.m_max.z + tol.equalPoint()));
+}    
+
+inline bool OdGeExtents3d::isEqualTo(const OdGeExtents3d& extents, const OdGeTol& tol) const
+{
+  const OdUInt8 bValid = ((isValidExtents()) ? 1 : 0) | ((extents.isValidExtents()) ? 2 : 0);
+  switch (bValid)
+  {
+    // Both invalid
+    case 0: return true;
+    // Both valid
+    case 3: return m_min.isEqualTo(extents.m_min, tol) && m_max.isEqualTo(extents.m_max, tol);
+  }
+  return false;
+}
+
+#undef INVALIDEXTENTS
+
+#include "TD_PackPop.h"
+
+#endif //_ODGEEXTENTS3D_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalBoundedSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalBoundedSurface.h
new file mode 100755
index 0000000..01705b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalBoundedSurface.h
@@ -0,0 +1,239 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEXBNDSF_H
+#define OD_GEXBNDSF_H /*!DOM*/
+
+class OdGeExternalSurface;
+class OdGeCurveBoundary;
+#include "Ge/GeSurface.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents bounded surfaces, whose definitions are external to the OdGe library.
+    
+    \remarks
+    Each instance of ns OdGeExternalBoundedSurface is comprosed of an instance
+    of an OdExternalSurface and a collection of instances of OdGeCurveBoundary.
+    
+    OdGeExternalBoundedSurface instances can be treated as any other OdGeSurface. 
+    
+    You can access the OdGeExternalBoundedSurface as a corresponding native OdGeSurface, if such a corresponding
+    surface exists, or you may (more efficiently) access the external data in its native form.
+    
+    One example of using OdGeExternalBoundedSurface is to access an ACIS surface. 
+   
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeExternalBoundedSurface : public OdGeSurface
+{
+public:
+
+
+  /** \param pSurfaceDef [in]  Pointer to the surface definition.
+    \param surfaceKind [in]  Information about system that created the surface.
+    \param makeCopy [in]  Makes a copy of curveDef.
+    \param source [in]  Object to be cloned.
+    
+    \remarks
+    Without arguments, the constructor creates an empty instance.
+
+    Possible values for surfaceKind:
+    
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+  OdGeExternalBoundedSurface();
+  OdGeExternalBoundedSurface(
+    void* pSurfaceDef, 
+    OdGe::ExternalEntityKind surfaceKind, 
+    bool makeCopy = true);
+  OdGeExternalBoundedSurface(
+    const OdGeExternalBoundedSurface& source);
+
+  // Surface data.
+  //
+
+  /** \details
+    Rerurns information about the system that created the surface.
+
+    \remarks
+    Possible values for externalSurfaceKind:
+
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+   OdGe::ExternalEntityKind externalSurfaceKind() const;
+  
+  /** \details
+    Returns true if and only if the surface is defined (not an empty instance).
+  */
+   bool isDefined() const;
+
+  /** \details
+    Returns a copy of the raw surface definition.
+
+    \param curveDef [out]  Receives a pointer to a copy of the raw surface definition.
+
+    \remarks
+    It is up to the caller to delete the memory allocated.
+  */
+   void getExternalSurface(
+    void*& pSurfaceDef) const;
+
+  // Odcess to unbounded surface.
+  //
+
+  /** \details
+    Returns the unbounded surface.
+    
+    \param pSurfaceDef [out]  Receives a pointer to the unbounded surface definition.
+    \param unboundedSurfaceDef [out]  Receives the unbounded surface definition.
+    
+    \remarks
+    If called with a pointer to OdGeSurface, the OdExternalSurface
+    will be converted to a native OdGeSurface, if possible.
+  */
+      void getBaseSurface(
+    OdGeSurface*& pSurfaceDef) const;
+   void getBaseSurface(
+    OdGeExternalSurface& unboundedSurfaceDef) const;
+
+  // Type queries on the unbounded base surface.
+
+  /** \details
+    Return true if and only if the unbounded base surface can be represented as an OdGePlanarEnt. 
+  */
+   bool isPlane() const;
+
+  /** \details
+    Return true if and only if the unbounded base surface can be represented as an OdGeSphere. 
+  */
+   bool isSphere() const;
+
+  /** \details
+    Return true if and only if the unbounded base surface can be represented as an OdGeCylinder. 
+  */
+   bool isCylinder() const;
+
+  /** \details
+    Return true if and only if the unbounded base surface can be represented as an OdGeCone. 
+  */
+   bool isCone() const;
+
+   /** \details
+   Return true if and only if the unbounded base surface can be represented as an OdGeEllipCylinder. 
+   */
+   bool isEllipCylinder() const;
+
+   /** \details
+   Return true if and only if the unbounded base surface can be represented as an OdGeEllipCone. 
+   */
+   bool isEllipCone() const;
+
+  
+  /** \details
+    Return true if and only if the unbounded base surface can be represented as an OdGeTorus. 
+  */
+   bool isTorus() const;
+  
+  /** \details
+    Return true if and only if the unbounded base surface can be represented as an OdGeNurbSurface. 
+  */
+   bool isNurbs() const;
+
+  /** \details
+    Return true if and only if the unbounded base surface cannot be represented as an native OdGeSurface. 
+  */
+   bool isExternalSurface() const;
+
+  // Odcess to the boundary data.
+  //
+  
+  /** \details
+    Returns the number of contours on this surface.  
+  */
+   int numContours() const;
+
+  /** \details
+    Returns an array of the contours on this surface.
+
+    \param numContours [out]  Receives the number of contours on this surface.
+    \param contours [out]  Receives the array of contours. 
+  */
+   void getContours(
+    int& numContours, 
+    OdGeCurveBoundary*& contours) const;
+
+  // Set methods
+  //
+  
+  /** \details
+    Sets the parameters for this external bound surface according to the arguments, 
+    and returns a reference to this external surface.
+
+    \param pSurfaceDef [in]  Pointer to the surface definition.
+    \param surfaceKind [in]  Information about system that created the surface.
+    \param makeCopy [in]  If true, makes a copy of the surface definition.
+  */
+   OdGeExternalBoundedSurface& set(
+    void* pSurfaceDef,
+    OdGe::ExternalEntityKind surfaceKind, 
+    bool makeCopy = true);
+
+  // Surface ownership.
+  //
+  
+  /** \details
+    Returns true if and only if the external surface owns the data.
+
+    \remarks
+    If the external surface owns the data, it will be destroyed when
+    the curve is destroyed.
+  */
+   bool isOwnerOfSurface() const;
+
+  /** \details
+    Forces this external surface to own the data, and returns a reference to this external surface.
+
+    \remarks
+    If the external surface owns the data, it will be destroyed when
+    the external surface is destroyed.
+  */
+   OdGeExternalBoundedSurface& setToOwnSurface();
+
+  // Assignment operator.
+  //
+  OdGeExternalBoundedSurface& operator =(
+    const OdGeExternalBoundedSurface& extBoundSurf);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEXBNDSF_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve2d.h
new file mode 100755
index 0000000..098408e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve2d.h
@@ -0,0 +1,153 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_EXTERNAL_CURVE_2D_H
+#define OD_GE_EXTERNAL_CURVE_2D_H /*!DOM*/
+
+#include "TD_PackPush.h"
+#include "Ge/GeCurve2d.h"
+
+class OdGeNurbCurve2d;
+
+/** \details
+    This class represents, as OdGeCurve2d curves, 2D curves whose definitions are external to the OdGe library.
+    
+    \remarks
+    OdGeExternalCurve2d curve instances can be treated as any other OdCurve2d. 
+    
+    You can access the OdGeExternalCurve2d as a corresponding native OdGeCurve2d curve, if such a corresponding
+    curve exists, or you may (more efficiently) access the external data in its native form.
+    
+    One example of using OdGeOdGeExternalCurve2d is to represent an ACIS curve. 
+    
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeExternalCurve2d : public OdGeCurve2d
+{
+public:
+  
+
+  /** \param pCurveDef [in]  Pointer to the curve definition.
+    \param curveKind [in]  Information about system that created the curve.
+    \param makeCopy [in]  Makes a copy of the curve definition.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    Without arguments, the constructor creates an empty instance.
+
+    Possible values for curveKind:
+
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+  OdGeExternalCurve2d();
+  OdGeExternalCurve2d(
+    const OdGeExternalCurve2d& source);
+  OdGeExternalCurve2d(
+    void* pCurveDef, 
+    OdGe::ExternalEntityKind curveKind,
+    bool makeCopy = true);
+
+  /** \details
+    Returns true, and an OdGeNurbCurve2d curve,
+    if and only if the curve can be represented as an OdGeNurbCurve2d curve.
+
+    \param nurbCurve [out]  Receives an OdGeNurbCurve2d internal representation of the external curve.
+
+    \remarks
+    nurbCurve is created with the new method, and must be deleted by the caller.
+  */
+  bool isNurbCurve() const;
+  bool isNurbCurve(
+    OdGeNurbCurve2d& nurbCurve) const;
+
+  /** \details
+    Returns true if and only if the curve is defined (not an empty instance).
+  */
+  bool isDefined() const;
+
+  /** \details
+    Returns a copy of the raw curve definition.
+
+    \param pCurveDef [out]  Receives a pointer to a copy of the raw curve definition.
+
+    \remarks
+    It is up to the caller to delete the memory allocated.
+  */
+  void getExternalCurve(
+    void*& pCurveDef) const;
+
+  /** \details
+    Returns information about the system that created the curve.
+
+    \remarks
+    Possible values for curveKind:
+
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+  OdGe::ExternalEntityKind externalCurveKind() const;
+
+  /** \details
+    Sets the parameters for this external curve according to the arguments, 
+    and returns a reference to this external curve.
+
+    \param pCurveDef [in]  Pointer to the curve definition.
+    \param curveKind [in]  Information about system that created the curve.
+    \param makeCopy [in]  If true, makes a copy of of the curve definition.
+  */
+  OdGeExternalCurve2d& set(
+    void* pCurveDef, 
+    OdGe::ExternalEntityKind curveKind,
+    bool makeCopy = true);
+
+  /** \details
+    Returns true if and only if if the external curve owns the data.
+
+    \remarks
+    If the external curve owns the data, it will be destroyed when
+    the curve is destroyed.
+  */
+  bool isOwnerOfCurve() const;
+
+  /** \details
+    Forces this external curve to own the data, and returns a pointer to this curve.
+
+    \remarks
+    If the external curve owns the data, it will be destroyed when
+    the curve is destroyed.
+  */
+  OdGeExternalCurve2d& setToOwnCurve();
+
+  OdGeExternalCurve2d& operator =(
+    const OdGeExternalCurve2d& extCurve);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_EXTERNAL_CURVE_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve3d.h
new file mode 100755
index 0000000..1ee18cf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalCurve3d.h
@@ -0,0 +1,188 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEEXTC3D_H
+#define OD_GEEXTC3D_H /*!DOM*/
+
+class OdGeLine3d;
+class OdGeLineSeg3d;
+class OdGeRay3d;
+class OdGeEllipArc3d;
+class OdGeNurbCurve3d;
+
+#include "Ge/GeCurve3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents, as OdGeCurve3d curves, 3D curves whose definitions are external to the OdGe library.
+    
+    \remarks
+    OdGeExternalCurve3d curve instances can be treated as any other OdCurve3d. 
+    
+    You can access the OdGeExternalCurve3d as a corresponding native OdGeCurve3d curve, if such a corresponding
+    curve exists, or you may (more efficiently) access the external data in its native form.
+    
+    One example of using OdGeOdGeExternalCurve3d is to represent an ACIS curve. 
+    
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeExternalCurve3d : public OdGeCurve3d
+{
+public:
+
+
+  /** \param pCurveDef [in]  Pointer to the curve definition.
+    \param curveKind [in]  Information about system that created the curve.
+    \param makeCopy [in]  Makes a copy of the curve definition.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    Without arguments, the constructor creates an empty instance.
+
+    Possible values for curveKind:
+
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+  OdGeExternalCurve3d();
+  OdGeExternalCurve3d(
+    const OdGeExternalCurve3d& source);
+  OdGeExternalCurve3d(
+    void* pCurveDef, 
+    OdGe::ExternalEntityKind curveKind,
+    bool makeCopy = true);
+
+  /** \details
+    Return true if and only if the external curve can be represented as an OdGeLine3d. 
+  */
+   bool isLine() const;
+
+  /** \details
+    Return true if and only if the external curve can be represented as an OdGeRay3d. 
+  */
+   bool isRay() const;
+
+  /** \details
+    Return true if and only if the external curve can be represented as an OdGeLineSeg3d. 
+  */
+   bool isLineSeg() const;
+
+  /** \details
+    Return true if and only if the external curve can be represented as an OdGeCircArc3d. 
+  */
+   bool isCircArc() const;
+
+  /** \details
+    Return true if and only if the external curve can be represented as an OdGeEllipArc3d. 
+  */
+   bool isEllipArc() const;
+
+  /** \details
+    Return true if and only if the external curve can be represented as an OdGeNurbCurve3d. 
+  */
+   bool isNurbCurve() const;
+  
+  /** \details
+    Returns true if and only if the curve is defined (not an empty instance).
+  */
+   bool isDefined() const;
+
+  /** \details
+    Return true if and only if the external curve can be represented as a native OdGeCurve3d,
+    and returns a pointer to an instance of that native curve.
+
+    \param nativeCurve [out]  Receives the native curve.
+
+    \remarks
+    The returned object is created with the new operator, and it is the responsibility of the caller to delete it.
+  */
+   bool isNativeCurve(
+    OdGeCurve3d*& nativeCurve) const;
+
+  /** \details
+    Returns a copy of the raw curve definition.
+
+    \param pCurveDef [out]  Receives a pointer to a copy of the raw curve definition.
+
+    \remarks
+    It is up to the caller to delete the memory allocated.
+  */
+   void getExternalCurve(
+    void*& pCurveDef) const;
+
+  /** \details
+    Rerurns information about the system that created the curve.
+
+    \remarks
+    Possible values for curveKind:
+
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+   OdGe::ExternalEntityKind externalCurveKind() const;
+
+  /** \details
+    Sets the parameters for this external curve according to the arguments, 
+    and returns a reference to this external curve.
+
+    \param pCurveDef [in]  Pointer to the curve definition.
+    \param curveKind [in]  Information about system that created the curve.
+    \param makeCopy [in]  If true, makes a copy of the curve definition.
+  */
+   OdGeExternalCurve3d& set(
+    void* pCurveDef, 
+    OdGe::ExternalEntityKind curveKind,
+    bool makeCopy = true);
+
+  OdGeExternalCurve3d& operator =(
+    const OdGeExternalCurve3d& extCurve);
+
+  /** \details
+    Returns true if and only if the external curve owns the data.
+
+    \remarks
+    If the external curve owns the data, it will be destroyed when
+    the curve is destroyed.
+  */
+   bool isOwnerOfCurve() const;
+
+  /** \details
+    Forces this external curve to own the data, and returns a reference to this curve.
+
+    \remarks
+    If the external curve owns the data, it will be destroyed when
+    the curve is destroyed.
+  */
+   OdGeExternalCurve3d& setToOwnCurve();
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEEXTC3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalSurface.h
new file mode 100755
index 0000000..95f1dc6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeExternalSurface.h
@@ -0,0 +1,211 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEEXTSF_H
+#define OD_GEEXTSF_H /*!DOM*/
+
+#include "Ge/GeSurface.h"
+
+#include "TD_PackPush.h"
+
+class OdGePlane;
+class OdGeCylinder;
+class OdGeCone;
+class OdGeSphere;
+class OdGeTorus;
+class OdGeNurbSurface;
+class OdGeEllipCone;            // AE 03.09.2003 
+class OdGeEllipCylinder;    // AE 09.09.2003    
+
+/** \details
+    This class represents unbounded surfaces, whose definitions are external to the OdGe library, as OdGeSurface.
+    
+    \remarks
+    OdGeExternalSurface instances can be treated as any other OdGeSurface. 
+    
+    You can access the OdGeExternalSurface as a corresponding native OdGeSurface, if such a corresponding
+    surface exists, or you may (more efficiently) access the external data in its native form.
+    
+    One example of using OdGeExternalSurface is to access an ACIS surface. 
+    
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeExternalSurface : public OdGeSurface
+{
+public:
+
+
+  /** \param pSurfaceDef [in]  Pointer to the surface definition.
+    \param surfaceKind [in]  Information about system that created the surface.
+    \param makeCopy [in]  Makes a copy of the surface definition.
+    \param source [in]  Object to be cloned.
+    
+    \remarks
+    Without arguments, the constructor creates an empty instance.
+
+    Possible values for surfaceKind:
+    
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+  OdGeExternalSurface();
+  OdGeExternalSurface(
+    void* pSurfaceDef, 
+    OdGe::ExternalEntityKind surfaceKind,
+    bool makeCopy = true);
+  OdGeExternalSurface(
+    const OdGeExternalSurface& source);
+
+  /** \details
+    Returns a copy of the raw surface definition.
+
+    \param pSurfaceDef [out]  Receives a pointer to a copy of the raw surface definition.
+
+    \remarks
+    It is up to the caller to delete the memory allocated.
+  */
+   void getExternalSurface(
+    void*& pSurfaceDef) const;
+
+  // Type of the external surface.
+  //
+
+  /** \details
+    Rerurns information about the system that created the surface.
+
+    \remarks
+    Possible values for externalSurfaceKind:
+
+    @untitled table
+    kAcisEntity
+    kExternalEntityUndefined
+  */
+   OdGe::ExternalEntityKind externalSurfaceKind() const;
+
+  /** \details
+    Return true if and only if the surface can be represented as an OdGePlanarEnt. 
+  */
+   bool isPlane() const;
+
+  /** \details
+    Return true if and only if the external surface can be represented as an OdGeSphere. 
+  */
+   bool isSphere() const;
+
+  /** \details
+    Return true if and only if the external surface can be represented as an OdGeCylinder. 
+  */
+   bool isCylinder() const;
+
+  /** \details
+    Return true if and only if the external surface can be represented as an OdGeCone. 
+  */
+   bool isCone() const;
+
+  /** \details
+    Return true if and only if the external surface can be represented as an OdGeEllipCylinder. 
+  */
+   bool isEllipCylinder() const;
+
+  /** \details
+    Return true if and only if the external surface can be represented as an OdGeEllipCone. 
+  */
+   bool isEllipCone() const;
+
+  /** \details
+    Return true if and only if the external surface can be represented as an OdGeTorus. 
+  */
+   bool isTorus() const;
+  
+  /** \details
+    Return true if and only if the external surface can be represented as an OdGeNurbSurface. 
+  */
+   bool isNurbSurface() const;
+
+  /** \details
+    Returns true if and only if the surface is defined (not an empty instance).
+  */
+   bool isDefined() const;
+
+  /** \details
+    Return true if and only if the external surface can be represented as a native OdGeSurface,
+    and returns a pointer to an instance of that native surface.
+
+    \param nativeSurface [out]  Receives the native surface.
+
+    \remarks
+    The returned object is created with the new operator, and it is the responsibility of the caller to delete it.
+  */
+   bool isNativeSurface(
+    OdGeSurface*& nativeSurface) const;
+
+  // Assignment operator.
+  //
+
+  OdGeExternalSurface& operator =(
+    const OdGeExternalSurface& extSurf);
+
+  // Reset surface
+  //
+
+  /** \details
+    Sets the parameters for this external surface according to the arguments, 
+    and returns a reference to this external surface.
+
+    \param pSurfaceDef [in]  Pointer to the surface definition.
+    \param surfaceKind [in]  Information about system that created the surface.
+    \param makeCopy [in]  If true, makes a copy of the surface definition.
+  */
+   OdGeExternalSurface& set(
+    void* pSurfaceDef,
+    OdGe::ExternalEntityKind surfaceKind,
+    bool makeCopy = true);
+
+  /** \details
+    Returns true if and only if the external surface owns the data.
+
+    \remarks
+    If the external surface owns the data, it will be destroyed when
+    the surface is destroyed.
+  */
+   bool isOwnerOfSurface() const;
+  
+  /** \details
+    Forces this external surface to own the data, and returns a reference to this external surface.
+
+    \remarks
+    If the external surface owns the data, it will be destroyed when
+    the external surface is destroyed.
+  */
+   OdGeExternalSurface& setToOwnSurface();
+
+  //////////////////////////////////////////////////////////////////////////
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEEXTSF_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeGbl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeGbl.h
new file mode 100755
index 0000000..9c8f59e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeGbl.h
@@ -0,0 +1,303 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GEGBL_H
+#define OD_GEGBL_H /*!DOM*/
+
+#include "Ge/GeTol.h"
+
+#include "Ge/Ge.h"
+#include "OdArrayPreDef.h"
+#include "Ge/GePoint3dArray.h"
+
+class OdGeSurface;
+class OdGeVector3d;
+class OdGePlane;
+class OdGeCurve3d;
+class OdGeNurbCurve2d;
+class OdGeNurbCurve3d;
+class OdGePoint3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This structure provides a namespace for tolerance values and functions ubiquitous to the OdGe library.
+
+    \sa
+    TD_Ge
+
+    <group !!RECORDS_TD_APIRef>
+*/
+struct GE_TOOLKIT_EXPORT OdGeContext
+{
+  /** \details
+    Provides the global default OdGeTol tolerance object.
+    \remarks
+    gTol.equalPoint == 1e-10  gTolequalVector == 1.e-10.
+  */
+  GE_STATIC_EXPORT static OdGeTol gTol;
+
+  /** \details
+    Provides the global 0.0 default OdGeTol tolerance object.
+    \remarks
+    gZeroTol.equalPoint == 0.0 and gZeroTol.equalVector == 1.e-10.
+  */
+  GE_STATIC_EXPORT static OdGeTol gZeroTol;
+
+  /** \details
+    A function pointer to a user-defined error handler.
+    \remarks
+    By default, points to a function that does nothing but return.
+  */
+  GE_STATIC_EXPORT static void (*gErrorFunc)(OdResult);
+
+  /** \details
+    A function pointer to a user-defined function that returns orthoVector orthogonal to vect.
+
+    \remarks
+    By default, points to a function that computes orthoVector with the arbitrary axis algorithm:
+
+                if ( (vect.x < 0.015625) && (vect.x < 0.015625)) {
+                  orthoVector.x = vect.z;
+                  orthoVector.y = 0.0;
+                  orthoVector.z = -vect.x;
+                }
+                else {
+                  orthoVector.x = -vect.y;
+                  orthoVector.y = vect.x;
+                  orthoVector.z = 0.0;
+                }
+    \param vect [in]  Vector.
+    \param orthoVector [out]  Receives the orthogonal vector.
+  */
+  GE_STATIC_EXPORT static void (*gOrthoVector) (const OdGeVector3d& vect, OdGeVector3d& orthoVector);
+
+  /** \details
+    A function pointer to a user-defined memory allocation function
+    for all new operations in the OdGe library.
+    \remarks
+    Allows the OdGe library to use the same memory manager as the user application.
+    \param size [in]  Size in bytes to allocate.
+  */
+  GE_STATIC_EXPORT static void* (*gAllocMem) (unsigned long size);
+
+
+  /** A function pointer to a user-defined memory allocation function
+    for all delete operations in the OdGe library.
+
+    \remarks
+    Allows the OdGe library to use the same memory manager as the user application.
+
+    \param memBlock [in]  Allocated memory block to be freed.
+  */
+  GE_STATIC_EXPORT static void (*gFreeMem) (void* memBlock);
+};
+
+  /** \details
+    Checks topology of a triangulated solid.
+
+    \param points [in]  Array of 3D points (in order of the triangles they form).
+    \param isValid [out]  Receives the validation result.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    Array of points should be divided by 3 without remainder.
+
+    Library: TD_Ge
+  */
+GE_TOOLKIT_EXPORT OdGeError geValidSolid (
+    const OdGePoint3dArray &points,
+    bool &isValid,
+    const OdGeTol &tol = OdGeContext::gTol);
+
+  /** \details
+    Calculates signed volume of a triangulated solid.
+
+    \param points [in]  Array of 3D points (in order of the triangles they form).
+    \param volume [out]  Receives the volume value.
+    \param basePoint [in]  Point to replace (0,0,0) for calculation purposes.
+    
+    \remarks
+    Array of points should be divided by 3 without remainder.
+    Negative sign of volume means that triangles in the solid are ordered clockwise.
+
+    Library: TD_Ge
+  */
+GE_TOOLKIT_EXPORT OdGeError geSolidSignedVolume (
+    const OdGePoint3dArray &points,
+    double &volume,
+    const OdGePoint3d *basePoint);
+
+/** \details
+    Returns the normal to the plane defined by the specified points.
+
+    \param points [in]  Array of 3D points.
+    \param numPoints [in]  Number of points.
+    \param pNormal [out]  Receives the normal to the calculated plane.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    Possible return values are as follows:
+
+    @untitled table
+    kOk
+    kNonCoplanarGeometry
+    kDegenerateGeometry
+    kSingularPoint
+
+    Library: TD_Ge
+*/
+GE_TOOLKIT_EXPORT OdGeError geCalculateNormal (
+    const OdGePoint3dArray& points,
+    OdGeVector3d * pNormal,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+GE_TOOLKIT_EXPORT OdGeError geCalculateNormal (
+    const OdGePoint3d *points,
+    OdUInt32 numPoints,
+    OdGeVector3d * pNormal,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+// Same with previous functions, but returns result as plane
+
+/** \details
+    Returns the plane defined by the specified points.
+
+    \param points [in]  Array of 3D points.
+    \param curves [in]  Array of 3D curves.
+    \param numPoints [in]  Number of points.
+    \param numCurves [in]  Number of curves.
+    \param plane [out]  Receives the calculated plane.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    Supported curves are OdGeCircArc3d, OdGeEllipArc3d, OdGeNurbCurve3d, and OdGeLineSeg3d.
+
+    Possible return values are as follows:
+
+    @untitled table
+    kOk
+    kNonCoplanarGeometry
+    kDegenerateGeometry
+    kSingularPoint
+
+    Library: TD_Ge
+*/
+GE_TOOLKIT_EXPORT OdGeError geCalculatePlane (
+    const OdGePoint3dArray& points,
+    OdGePlane& plane,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+GE_TOOLKIT_EXPORT OdGeError geCalculatePlane (
+    const OdGePoint3d *points,
+    OdUInt32 numPoints,
+    OdGePlane& plane,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+GE_TOOLKIT_EXPORT OdGeError geCalculatePlane (
+    const OdGeCurve3d * const* curves,
+    OdUInt32 numCurves,
+    OdGePlane& plane,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+/** \details
+    Converts a 3D NURBS curve to a 2D NURBS curve by projecting it onto the specified plane.
+
+    \param nurb3d [in]  Any 3D NURBS curve.
+    \param plane [in]  Projection plane.
+    \param nurb2d [out]  Receives the 2D NURBS curve.
+    \param tol [in]  Geometric tolerance.
+
+    Library: TD_Ge
+*/
+GE_TOOLKIT_EXPORT bool geNurb3dTo2d (
+    const OdGeNurbCurve3d &nurb3d,
+    OdGePlane& plane,
+    OdGeNurbCurve2d &nurb2d,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+/** \details
+    Calculates a properties for a specified surface.
+
+    \param pS [in]  Any surface.
+    \param propU, propV [out] Receives the properties.
+    \param tol [in] Geometric tolerance.
+
+    Library: TD_Ge
+
+    \remarks
+      Rational state valid only for NURB surfaces.
+*/
+GE_TOOLKIT_EXPORT bool geSurfaceProp(
+    const OdGeSurface &pS, 
+    OdGe::NurbSurfaceProperties &propU,
+    OdGe::NurbSurfaceProperties &propV,
+    const OdGeTol& tol);
+
+// was moved from Examples\Common\toString
+/// Convert the specified value to an OdGe::EntityId string
+GE_TOOLKIT_EXPORT OdString geToString(const OdGe::EntityId val);
+
+#include "TD_PackPop.h"
+
+inline void GE_ERROR(OdResult res)
+{
+  (*OdGeContext::gErrorFunc)(res);
+}
+
+/** \details
+  <group Error_Classes> 
+
+  Library: TD_Ge
+*/
+class GE_TOOLKIT_EXPORT OdError_GeNotImplemted : public OdError
+{
+public:
+  OdError_GeNotImplemted(const OdString& sMessage);
+};
+
+#define GE_NOT_IMPL(pGeEnt) \
+{ \
+  try \
+  { \
+    (*OdGeContext::gErrorFunc)(eNotImplemented); \
+  } \
+  catch (OdError &err) \
+  { \
+    if (err.code() == eNotImplemented) \
+    { \
+      OdString sFunc(TD_FUNC); \
+      OdString sMessage; \
+      sMessage.format(OD_T("%s method %s for Ge type %s"), \
+                      OD_T("%s"), \
+                      sFunc.c_str(), \
+                      geToString(pGeEnt->type()).c_str()); \
+      throw OdError_GeNotImplemted(sMessage); \
+    } \
+    throw; \
+  } \
+}
+
+#endif // OD_GEGBL_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeImpInterval.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeImpInterval.h
new file mode 100755
index 0000000..18b9f94
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeImpInterval.h
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GE_INTERVALIMPL_H
+#define OD_GE_INTERVALIMPL_H /*!DOM*/
+
+
+#endif // OD_GE_INTERVALIMPL_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntArray.h
new file mode 100755
index 0000000..1187cc9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntArray.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OdGeIntArray_INCLUDED
+#define OdGeIntArray_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class int objects.
+*/
+typedef OdArray<int, OdMemoryAllocator<int> > OdGeIntArray;
+
+#endif // OdGeIntArray_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeInterval.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeInterval.h
new file mode 100755
index 0000000..62e347f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeInterval.h
@@ -0,0 +1,397 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_INTERVAL_H
+#define OD_GE_INTERVAL_H /*!DOM*/
+
+#include "Ge/GeExport.h"
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents a finite, infinite, or semi-infinite
+    interval as the real axis.
+  
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeInterval
+{
+public:
+  /** \param lower [in]  Lower bound.
+    \param upper [in]  Upper bound.
+    \param tol [in]  Boundary tolerance.
+    \param boundedBelow [in]  Determines if the interval is bounded below.
+    \param bound [in]  Specifies a lower and upper bounds if boundedBelow is true, or only an upper
+              bound if it is false.     
+
+    \remarks
+    With no arguments other than tol, creates an unbounded interval.
+  */
+  OdGeInterval(
+    double tol = 1.e-12);
+  OdGeInterval(
+    double lower,
+    double upper,
+    double tol = 1.e-12);
+  OdGeInterval(
+    bool boundedBelow,
+    double bound,
+    double tol = 1.e-12);
+
+  ~OdGeInterval();
+
+  /** \details
+    Returns the lower bound of this interval.
+    
+    \remarks
+    This value is meaningful if and only if the interval has a lower bound.
+  */
+  double lowerBound() const;
+
+  /** \details
+    Returns the upper bound of this interval.
+    
+    \remarks
+    This value is meaningful if and only if the interval has an upper bound.
+  */
+  double upperBound() const;
+
+  /** \details
+    Returns a point on this interval.
+    
+    \remarks
+    <table>
+    Bounded Above   Bounded Below          Returns
+    Yes             ---                    Upper Bound
+    No              Yes                    Lower Bound
+    No              No                     0.0
+    </table>
+
+  */
+    double element() const;
+
+  /** \details
+    Returns the bounds of this interval.
+    
+    \param lower [out]  Receives the Lower bound.
+    \param upper [out]  Receives the Upper bound.
+  */
+  void getBounds(
+    double& lower,
+    double& upper) const;
+    
+  /** \details
+    Returns the length of this interval.
+    
+    \remarks
+    Returns -1.0 if this interval is unbounded above or below.
+  */
+  double length() const;
+  
+  /** \details
+    Returns the boundary tolerance for this interval.
+  */
+  double tolerance() const;
+
+  /** \details
+    Sets the parameters for this interval according to the arguments.
+
+    \param lower [in]  Lower bound.
+    \param upper [in]  Upper bound.
+    \param boundedBelow [in]  Determines if bound specifies a lower or an upper bound.
+    \param bound [in]  Specifies a lower bound if boundedBelow is true, or an upper
+              bound if it is false.
+              
+    \remarks
+    Returns a reference to this interval.
+    
+    If called with no parameters, unbounds this interval.     
+  */
+  OdGeInterval& set(
+    double lower,
+    double upper);
+  OdGeInterval& set(
+    bool boundedBelow,
+    double bound);
+  OdGeInterval& set();
+
+  /** \details
+    Sets the upper bound for this interval.
+
+    \param upper [in]  Upper bound.
+    
+  */
+  OdGeInterval& setUpper(
+    double upper);
+    
+  /** \details
+    Sets the lower bound for this interval.
+
+    \param lower [in] Lower bound.
+    \remarks
+    Returns a reference to this interval.
+  */
+  OdGeInterval& setLower(
+    double lower);
+
+  /** \details
+    Sets the boundary tolerance for this interval.
+
+    \param tol [in]  Boundary tolerance.
+
+    \remarks
+    Returns a reference to this interval.
+  */
+  OdGeInterval& setTolerance(
+    double tol);
+
+  /** \details
+    Returns the smallest interval containing both the specified interval and this interval.
+
+    \param otherInterval [in]  The interval to be merged with this one.
+    \param result [out]  Receives the merged interval.
+  */
+  void getMerge(
+    const OdGeInterval& otherInterval,
+    OdGeInterval& result) const;
+    
+  /** \details
+    Subtracts the specified interval from this interval.
+    \remarks
+    Returns the number of intervals, and the intervals, resulting from the subtraction
+
+    \param otherInterval [in]  The interval to be subtracted from this one.
+    \param lInterval [out]  Receives the Left (or only) interval.
+    \param rInterval [out]  Receives the right interval.
+    
+    \remarks
+    <table>
+    return value   Results
+    0              Empty result
+    1              Single interval in lInterval
+    2              Left in lInterval, Right in rInterval.
+    </table>
+  */
+  int subtract(
+    const OdGeInterval& otherInterval,
+    OdGeInterval& lInterval,
+    OdGeInterval& rInterval) const;
+
+  /** \details
+    Intersects the specified interval from this one.
+    \remarks
+    Returns true if and only this specified interval intersects with this one, 
+    and the interval of intersection.
+
+    \param otherInterval [in]  The interval to be intersected.
+    \param result [out]  Receives the intersected interval.
+  */
+  bool intersectWith(
+    const OdGeInterval& otherInterval,
+    OdGeInterval& result) const;
+    
+  /** \details
+    Returns true if and only if this interval is bounded above and below.
+  */
+  bool isBounded() const;
+    
+  /** \details
+    Returns true if and only if this interval is bounded above.
+  */
+  bool isBoundedAbove() const;
+    
+  /** \details
+    Returns true if and only if this interval is bounded below.
+  */
+  bool isBoundedBelow() const;
+
+  /** \details
+    Returns true if and only if this interval is unbounded above or below.
+  */
+  bool isUnBounded() const;
+  
+  /** \details
+    Returns true if and only if this interval object is a singleton.
+    \remarks
+    Returns true if and only if this interval is bounded, and the upper and lower bounds are equal within tolerance().
+  */
+  bool isSingleton() const;
+
+  /** \details
+    Returns true if and only if the specified interval is disjoint from this interval.
+    \remarks
+    Returns true if and only if this interval does not intersect otherInterval within tolerance().
+    
+    \param otherInterval [in]  The interval to be tested.
+  */
+  bool isDisjoint(
+    const OdGeInterval& otherInterval) const;
+
+  /** \details
+    Returns true if and only if this interval contains the specified value or Interval.
+    \remarks
+    Returns true if and only if this Interval contains value or otherInterval within tolerance().
+    
+    \param otherInterval [in]  The Interval to be tested.
+    \param value [in]  The value to be tested.
+  */
+  bool contains(
+    const OdGeInterval& otherInterval) const;
+  bool contains(
+    double value) const;
+
+  /** \details
+    Returns true if and only if the specified Interval is continuous with the upper bound of this Interval.
+    \remarks
+    Returns true if and only if this Interval is bounded above, otherInterval is bounded below, 
+    and the upper bound of this Interval is equal to the lower bound of otherInterval within tolerance().
+    
+    \param otherInterval [in]  The Interval to be tested.
+  */
+  bool isContinuousAtUpper(
+    const OdGeInterval& otherInterval) const;
+
+  /** \details
+    Returns true if and only if the specified Interval and this Interval overlap at the upper bound of this Interval.
+    \remarks
+    Returns true if and only if
+     
+    1.  This Interval is bounded above, otherInterval is bounded below. 
+    2.  Neither Interval is a singleton.
+    3.  The Intervals Intersect.
+    4.  otherInterval does not contain this one.
+    5.  The upper bound of this Interval is contained in otherInterval.
+    6.  The lower bound of otherInterval is contained within this one. 
+    
+    If all these conditions are met, this function returns the intersection of the Intervals.
+    
+    \param otherInterval [in]  The Interval to be tested.
+    \param overlap [out]  Receives the overlap of the Intervals.
+  */
+  bool isOverlapAtUpper(
+    const OdGeInterval& otherInterval,
+    OdGeInterval& overlap) const;
+
+  bool operator ==(
+    const OdGeInterval& otherInterval) const;
+  bool operator !=(
+    const OdGeInterval& otherInterval) const;
+    
+  /** \details
+    Returns true if and only if upper bounds of the specified Interval and this Interval are equal.
+    \remarks
+    
+    Returns true if and only if
+    
+    1. Both this Interval and otherInterval are unbounded above or bounded 
+       above with their upper bounds equal within tolerance().
+    2. This Interval is bounded above, and the upper bound is equal to value within tolerance(). 
+
+    \param otherInterval [in]  The Interval to be tested.
+    \param value [in]  The value to be tested.
+  */
+  bool isEqualAtUpper(
+    const OdGeInterval& otherInterval) const;
+  bool isEqualAtUpper(
+    double value) const;
+    
+  /** \details
+    Returns true if and only if lower bounds of the specified Interval and this Interval are equal.
+    \remarks
+    Returns true if and only if
+    
+    1. Both this Interval and otherInterval are unbounded below or bounded 
+       below with their lower bounds equal within tolerance.
+    2. This Interval is bounded below, and the lower bound is equal to value within tolerance. 
+
+    
+    \param otherInterval [in]  The Interval to be tested.
+    \param value [in]  The value to be tested.
+  */
+  bool isEqualAtLower(
+    const OdGeInterval& otherInterval) const;
+  bool isEqualAtLower(
+    double value) const;
+
+  /** \details
+    Returns true if and only if the specified value is periodically on this Interval.
+    \remarks
+    Returns true if and only if there is a positive integer N such that
+    
+            value + N * period
+            
+    is on this Interval. If so, returns that value.         
+    
+    \param period [in]  Period.
+    \param value [in/out] Value.
+  */
+  bool isPeriodicallyOn(
+    double period,
+    double& value);
+
+  friend 
+    bool operator > (
+    double value,
+    const OdGeInterval& interval);
+  bool operator > (
+    double value) const;
+  bool operator > (
+    const OdGeInterval& otherInterval) const;
+  friend 
+    bool operator >= (
+    double value,
+    const OdGeInterval& interval);
+  bool operator >= (
+    double value) const;
+  bool operator >= (
+    const OdGeInterval& otherInterval) const;
+  friend 
+    bool operator < (
+    double value,
+    const OdGeInterval& interval);
+  bool operator < (
+    double value) const;
+  bool operator < (
+    const OdGeInterval& otherInterval) const;
+  friend 
+    bool operator <= (
+    double value,
+    const OdGeInterval& interval);
+  bool operator <= (
+    double value) const;
+  bool operator <= (
+    const OdGeInterval& otherInterval) const;
+
+private:
+  double m_Tol;
+  double m_UpperParam;
+  double m_LowerParam;
+  bool m_bBoundedAbove;
+  bool m_bBoundedBelow;
+};
+
+#include "TD_PackPop.h"
+#endif // OD_GE_INTERVAL_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntervalArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntervalArray.h
new file mode 100755
index 0000000..b02cdae
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeIntervalArray.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GE_INTERVAL_ARRAY__
+#define __OD_GE_INTERVAL_ARRAY__ /*!DOM*/
+
+#include "OdArray.h"
+#include "Ge/GeInterval.h"
+
+
+/** \details
+    This template class is a specialization of the OdArray template for OdGeInterval objects.
+*/
+typedef OdArray<OdGeInterval, OdMemoryAllocator<OdGeInterval> > OdGeIntervalArray;
+
+#endif // __OD_GE_INTERVAL_ARRAY__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeKnotVector.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeKnotVector.h
new file mode 100755
index 0000000..03adf2d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeKnotVector.h
@@ -0,0 +1,374 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_KNOT_VECTOR
+#define OD_GE_KNOT_VECTOR /*!DOM*/
+
+#include "Ge/GeExport.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GeIntArray.h"
+
+class OdGeInterval;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents an ordered series of monotonically increasing doubles used by spline entities.
+ 
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeKnotVector
+{
+public:
+  /** \param tol [in]  Knot equality tolerance.
+    \param size [in]  Length of vector.
+    \param growSize [in]  Length of future vector size increments.
+    \param plusMult [in]  Multiplicity increment for each knot.
+    \param source [in]  Object to be cloned.
+
+  */
+  OdGeKnotVector(
+    double tol = 1.e-9); 
+  OdGeKnotVector(
+    int size, 
+    int growSize, 
+    double tol = 1.e-9);
+  OdGeKnotVector(
+    int size, 
+    const double source[], 
+    double tol = 1.e-9);
+  OdGeKnotVector(
+    int plusMult, 
+    const OdGeKnotVector& source);
+  OdGeKnotVector(
+    const OdGeKnotVector& source);
+  OdGeKnotVector(
+    const OdGeDoubleArray& source, 
+    double tol = 1.e-9);
+  ~OdGeKnotVector();
+
+  OdGeKnotVector& operator =(
+      const OdGeKnotVector& knotVector);
+  OdGeKnotVector& operator =(
+      const OdGeDoubleArray& dblArray);
+
+  /** \param i [in]  Index of knot.
+    
+    \remarks
+    Returns or references the ith knot of the knot vector.
+  */
+  double& operator [](
+    int i);
+  double operator [](
+    int i) const;
+   
+  /** \details
+    Returns true if and only if knotVector is identical to this one.
+    
+    \param knotVector [in]  Knot vector. 
+  */
+  bool isEqualTo(
+    const OdGeKnotVector& knotVector) const;
+
+  /** \details
+    Returns the first knot value of this vector.
+  */
+  double startParam() const;
+
+  /** \details
+    Returns the last knot value of this vector.
+  */
+  double endParam() const;
+  
+  /** \details
+    Returns knot multiplicity (repetitions) of the knot value at the specified index.
+    
+    \param knotIndex [in]  Knot index.
+    
+    \remarks
+    If consecutive knots are within the knot equality tolerance,
+    the knots are considered identical, and their multiplicities combined.
+  */
+  int multiplicityAt(
+    int knotIndex) const;
+    
+  /** \details
+    Returns the number of intervals between distinct knots. 
+
+    \remarks
+    Consecutive knots are considered distinct if and only if
+    they are not within the knot equality tolerance.
+  */
+  int numIntervals() const;
+  
+  /** \details
+    Returns the knot interval, and the index of the knot interval, containing the point specified by param. 
+
+    \param order [in]  The order of the spline.
+    \param param [in]  Parameter to specify a point on the vector.
+    \param interval [out]  Receives the interval containing the point specified by param.
+    \remarks
+    param must lie between the knot values indexed by order -1 and length() - order, where order is the order of the spline. 
+  */
+  int getInterval(
+    int order, 
+    double param, 
+    OdGeInterval& interval) const;
+
+  /** \details
+    Returns the number of distinct knots. 
+    
+    \param knots [in]  Array of knots.
+    \param multiplicity [out]  Receives an array of multiplicities (repetitions) of each knot.
+
+    \remarks
+    If consecutive knots are within the knot equality tolerance,
+    the knots are considered identical, and their multiplicities combined.
+  */
+      void getDistinctKnots(
+    OdGeDoubleArray& knots, 
+    OdGeIntArray *multiplicity = NULL) const;
+
+  /** \details
+    Returns true if an only if the specified parameter is
+    between the first and last knots.
+    
+    \param param [in]  Parameter to be tested. 
+  */
+  bool contains(
+    double param) const;
+
+  /** \details
+    Returns true if and only if knot is a member of this vector within the knot equality tolerance.
+  */
+  bool isOn(
+    double knot) const;
+
+  /** \details
+    Reverses the order of this vector, and returns a reference to this vector.
+  */
+  OdGeKnotVector& reverse();
+
+  /** \details
+    Removes the specified knot from this vector, and returns a reference to this vector.
+    
+    \param knotIndex [in]  Knot index.
+  */
+  OdGeKnotVector& removeAt(
+    int knotIndex);
+
+  /** \details
+    Removes the specified range of knots from this vector, and returns a reference to this vector.
+    
+    \param startIndex [in]  Index of the first knot to be removed.
+    \param endIndex [in]  Index of the last knot to be removed.
+  */
+  OdGeKnotVector& removeSubVector(
+    int startIndex, 
+    int endIndex);
+
+  /** \details
+    Inserts the specified knot the specified number of times at the specified index, and returns a reference to 
+    this vector.
+    
+    \param knotIndex [in]  Knot index.
+    \param knot [in]  Value to be inserted
+    \param multiplicity [in]  Number ot times to insert the knot.
+  */
+  OdGeKnotVector& insertAt(
+    int knotIndex, 
+    double knot, 
+    int multiplicity = 1);
+
+  /** \details
+    Inserts a knot in the appropriate knot interval as specified
+    by param, and returns a reference to this vector.
+    
+    \param param [in]  Parameter to specify a point on the vector.
+    
+    \remarks
+    If the specified point is within the knot equality tolerance of another knot,
+    said knot's multiplicity is incremented.
+  */
+    OdGeKnotVector& insert(
+    double param);
+
+  /** \details
+    Appends a vector, or single knot, to this vector, and returns a reference to this vector, or the value of the single knot. 
+   
+    \param knot [in]  New last knot value.
+    \param tail [in]  Knot vector to be appended.
+    \param knotRatio [in]  Knot ratio.
+    
+    \remarks
+    If knotRatio > 0, append performs a linear transformations on this vector and on tail,
+    such that the ratio of their lengths is equal to knotRatio, and that tail immediately follows
+    this vector. tail is modified by this operation.
+  */
+  int append(
+    double knot);
+  OdGeKnotVector& append(
+    OdGeKnotVector& tail, 
+    double knotRatio = 0.0);
+
+  /** \details
+    
+    Splits this vector at the point corresponding to param.
+    
+    \param param [in]  Parameter to specify a point on the vector.
+    \param pKnotHead [out]  Receives the head portion of the split.
+    \param multLast [in]  Multiplicity of the last knot in the head portion.
+    \param pKnotTail [out]  Receives the tail portion of the split.
+    \param multFirst [in]  Multiplicity of the first knot in the tail portion.
+  */
+  int split(
+    double param,
+    OdGeKnotVector* pKnotHead,
+    int multLast,
+    OdGeKnotVector* pKnotTail,
+    int multFirst) const;
+
+  /** \details
+    Transforms this vector such that the first knot has a value
+    of lower, and the last knot has a value of upper, and 
+    returns a reference to this vector. 
+  
+    \param lower [in]  New lower knot.
+    \param upper [in]  New upper knot.
+  */
+  OdGeKnotVector& setRange(
+    double lower, 
+    double upper);
+
+  /** \details
+    Returns the knot equality tolerance.
+  */
+  double tolerance() const;
+  
+  /** \details
+    Sets the knot equality tolerance for this vector, 
+    and returns a reference to this vector.
+
+     \param tol [in]  Knot equality tolerance.
+  */
+  OdGeKnotVector& setTolerance(
+    double tol); 
+
+  /** \details
+    Returns the length of this vector.
+  */
+  int length() const;
+
+  /** \details
+    Returns true if and only if length() == 0.
+  */
+  bool isEmpty() const;
+  
+  /** \details
+    Returns the logical length of this vector.
+    
+    \remarks
+    The logical length is the number of elements in the array returned
+    by asArrayPtr() and getPtr().
+  */
+    int logicalLength() const;
+
+  /** \details
+    Sets the logical length of this vector, 
+    and returns a reference to this vector.
+    
+    \param size [in]  Logical length of vector.
+    
+    \remarks
+    The logical length is the number of elements in the array returned
+    by asArrayPtr() and getPtr().
+  */
+    OdGeKnotVector& setLogicalLength(
+    int size);
+    
+  int physicalLength() const;
+  OdGeKnotVector& setPhysicalLength(int);
+
+  /** \details
+    Returns the length by which the array is set to grow automatically.
+  */
+  int growLength() const;
+
+  /** \details
+    Set the length by which the array will grow automatically.
+
+    \param rowLength [in]  The length for the array automatic resizing.
+  */
+  OdGeKnotVector& setGrowLength(int rowLength);
+
+  /** \details
+    Returns this vector as an array of doubles.
+    
+    \remarks
+    The number of elements in this array is returned by
+    logicalLength(), and set by setLogicalLength().
+  */
+  const double* getPtr() const;
+
+  /** \details
+    Returns this vector as an array of doubles.
+    
+    \remarks
+    The number of elements in this array is returned by
+    logicalLength(), and set by setLogicalLength().
+  */
+  const double* asArrayPtr() const;
+  double* asArrayPtr();
+
+  /** \details
+    Sets the parameters for this vector according to the arguments, 
+    and returns a reference to this vector.
+
+    \param tol [in]  Knot equality tolerance.
+    \param size [in]  Length of vector.
+  */
+  OdGeKnotVector& set(
+    int size, 
+    const double source[], 
+    double tol = 1.e-9);
+
+protected:
+  /** \details
+    Returns true if and only if index < length()
+    
+    \param knotIndex [in]  Knot index.
+  */
+   bool isValid(
+    OdUInt32 knotIndex) const;
+
+   OdGeDoubleArray m_Data;
+   double m_Tolerance;
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_KNOT_VECTOR
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLibVersion.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLibVersion.h
new file mode 100755
index 0000000..9a04ab2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLibVersion.h
@@ -0,0 +1,145 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GE_LIB_VERSION
+#define OD_GE_LIB_VERSION /*!DOM*/
+
+#include "GeExport.h"
+#include "TD_PackPush.h"
+
+#define IMAGE_MAJOR_VER 2           /*!DOM*/
+#define IMAGE_MINOR_VER 0           /*!DOM*/
+#define IMAGE_CORRECTIVE_VER 0      /*!DOM*/
+#define IMAGE_INTERNAL_VER 0        /*!DOM*/
+
+/** \details
+    This class provides management of GeLib versions.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeLibVersion
+{
+public:
+  /** \param major [in]  Major version.
+    \param minor [in]  Minor version.
+    \param corrective [in]  Corrective version.
+    \param schema [in]  Schema version.
+  */
+  OdGeLibVersion ();
+  OdGeLibVersion (
+    const OdGeLibVersion& source);
+  OdGeLibVersion (
+    unsigned char major, 
+    unsigned char minor,
+    unsigned char corrective,
+    unsigned char schema);
+
+  /** \details
+    Returns the major version of GeLib.
+  */
+  unsigned char majorVersion () const; 
+
+  /** \details
+    Returns the minor version of GeLib.
+  */
+  unsigned char minorVersion () const; 
+
+  /** \details
+    Returns the corrective version of GeLib.
+  */
+  unsigned char correctiveVersion () const;
+   
+  /** \details
+    Returns the schema version of GeLib.
+  */
+  unsigned char schemaVersion () const;
+
+  /** \details
+    Sets the major version of GeLib.
+
+    \param major [in]  Major version.
+  */
+  OdGeLibVersion& setMajorVersion (
+    unsigned char major); 
+
+  /** \details
+    Sets the minor version of GeLib.
+
+    \param minor [in]  Minor version.
+  */
+  OdGeLibVersion& setMinorVersion (
+    unsigned char minor); 
+
+  /** \details
+    Sets the corrective version of GeLib.
+
+    \param corrective [in]  Corrective version.
+  */
+  OdGeLibVersion& setCorrectiveVersion (
+    unsigned char corrective); 
+
+  /** \details
+    Sets the schema version of GeLib.
+
+    \param schema [in]  Schema version.
+  */
+  OdGeLibVersion& setSchemaVersion (
+    unsigned char schema);
+
+  bool operator == (
+    const OdGeLibVersion& libVersion) const; 
+
+  bool operator != (
+    const OdGeLibVersion& libVersion) const; 
+
+  bool operator < (
+    const OdGeLibVersion& libVersion) const;
+
+  bool operator <= (
+    const OdGeLibVersion& libVersion) const; 
+
+  bool operator > (
+    const OdGeLibVersion& libVersion) const; 
+
+  bool operator >= (
+    const OdGeLibVersion& libVersion) const;
+
+  GE_STATIC_EXPORT static const OdGeLibVersion kRelease0_95; // GeLib release 0.
+
+  GE_STATIC_EXPORT static const OdGeLibVersion kReleaseSed; // GeLib 14.0 release. 
+
+  GE_STATIC_EXPORT static const OdGeLibVersion kReleaseTah; // GeLib 15.0 release.
+
+private:
+  unsigned char mVersion[10];
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_LIB_VERSION
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine2d.h
new file mode 100755
index 0000000..5c081a1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine2d.h
@@ -0,0 +1,108 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_LINE_2D_H
+#define OD_GE_LINE_2D_H /*!DOM*/
+
+#include "Ge/GeLinearEnt2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents infinite lines in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeLine.html, Working with Lines>
+*/
+class GE_TOOLKIT_EXPORT OdGeLine2d : public OdGeLinearEnt2d
+{
+public:
+  
+
+  /** \param line [in]  Any 2D line.
+    \param point [in]  Any 2D point.
+    \param point1 [in]  Any 2D point.
+    \param point2 [in]  Any 2D point.
+    \param source [in]  Object to be cloned.
+    \param vect [in]  Any 2D vector.
+
+    \remarks
+    point and vect construct an infinite line passing through point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct an infinite line passing through both points. The 
+    points cannot be coincident.
+
+    If called with no arguments, constructs in infinite line coincident with the X-axis.
+  */
+  OdGeLine2d();
+  OdGeLine2d(
+    const OdGeLine2d& source);
+  OdGeLine2d(
+    const OdGePoint2d& point, 
+    const OdGeVector2d& vect);
+  OdGeLine2d(
+    const OdGePoint2d& point1, 
+    const OdGePoint2d& point2);
+
+  GE_STATIC_EXPORT static const OdGeLine2d kXAxis; // X-axis *line*.
+  GE_STATIC_EXPORT static const OdGeLine2d kYAxis; // Y-axis *line*.
+
+  /** \details
+    Sets the parameters for this line according to the arguments, and returns a reference to this line.
+
+    \param point [in]  Any 2D point.
+    \param vect [in]  Any 2D vector
+    \param point1 [in]  Any 2D point.
+    \param point2 [in]  Any 2D point.
+
+    \remarks
+    point and vect construct an infinite line passing through point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct an infinite line passing through both points. The 
+    points should no be coincident.
+  */
+  OdGeLine2d& set(
+    const OdGePoint2d& point, 
+    const OdGeVector2d& vect);
+  OdGeLine2d& set(
+    const OdGePoint2d& point1, 
+    const OdGePoint2d& point2);
+
+  OdGeLine2d& operator =(const OdGeLine2d& line);
+
+private:
+  OdGeLine2d(OdGeEntity2dImpl*);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_LINE_2D_H
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine3d.h
new file mode 100755
index 0000000..9d91fba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLine3d.h
@@ -0,0 +1,108 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GELINE3D_H
+#define OD_GELINE3D_H /*!DOM*/
+
+class OdGeLine2d;
+#include "Ge/GeLinearEnt3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents infinite lines in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeLine.html, Working with Lines>
+*/
+class GE_TOOLKIT_EXPORT OdGeLine3d : public OdGeLinearEnt3d
+{
+public:
+
+
+  /** \param line [in]  Any 3D line.
+    \param point [in]  Any 3D point.
+    \param point1 [in]  Any 3D point.
+    \param point2 [in]  Any 3D point.
+    \param source [in]  Object to be cloned.
+    \param vect [in]  Any 3D vector.
+    
+    \remarks
+    point and vect construct an infinite line passing through point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct an infinite line passing through both points. The 
+    points cannnot be coincident.
+
+    If called with no arguments, constructs in infinite line coincident with the X-axis.
+  */
+  OdGeLine3d();
+  OdGeLine3d(
+    const OdGeLine3d& source);
+  OdGeLine3d(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& vect);
+  OdGeLine3d(
+    const OdGePoint3d& point1, 
+    const OdGePoint3d& point2);
+
+  GE_STATIC_EXPORT static const OdGeLine3d kXAxis; // X-axis *line*.
+  GE_STATIC_EXPORT static const OdGeLine3d kYAxis; // Y-axis *line*.
+  GE_STATIC_EXPORT static const OdGeLine3d kZAxis; // Z-axis *line*.
+
+  /** \details
+    Sets the parameters for this line according to the arguments, and returns a reference to this line.
+
+    \param point [in]  Any 3D point.
+    \param vect [in]  Any 3D vector.
+    \param point1 [in]  Any 3D point.
+    \param point2 [in]  Any 3D point.
+
+    \remarks
+    point and vect construct an infinite line passing through point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct an infinite line passing through both points. The 
+    points should no be coincident.
+  */
+   OdGeLine3d& set(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& vect);
+   OdGeLine3d& set(
+    const OdGePoint3d& point1, 
+    const OdGePoint3d& point2);
+
+  OdGeLine3d& operator =(
+    const OdGeLine3d& line);
+
+private:
+  OdGeLine3d(OdGeEntity3dImpl*);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GELINE3D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2d.h
new file mode 100755
index 0000000..98d0530
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2d.h
@@ -0,0 +1,163 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_LINE_SEG_2D_H
+#define OD_GE_LINE_SEG_2D_H /*!DOM*/
+
+#include "Ge/GeLinearEnt2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents line segments in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeLineSeg.html, Working with Line Segments>
+*/
+class GE_TOOLKIT_EXPORT OdGeLineSeg2d : public OdGeLinearEnt2d
+{
+public:
+  
+
+  /** \param line [in]  Any 2D line.
+    \param point [in]  Any 2D point.
+    \param point1 [in]  Any 2D point.
+    \param point2 [in]  Any 2D point.
+    \param vect [in]  Any 2D vector
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    point and vect construct a line segment between points point and point + vect. vect cannot have a zero length.
+
+    point1 and point2 construct a line segment between points point1 and point2. The 
+    points cannot be coincident.
+
+    If called with no arguments, constructs a line segment between the points (0,0) and (1,0).
+  */
+  OdGeLineSeg2d();
+  OdGeLineSeg2d(
+    const OdGeLineSeg2d& source);
+  OdGeLineSeg2d(
+    const OdGePoint2d& point1, 
+    const OdGePoint2d& point2);
+  OdGeLineSeg2d(
+    const OdGePoint2d& point, 
+    const OdGeVector2d& vect);
+
+  /** \details
+    Sets the parameters for this line according to the arguments, and returns a reference to this line.
+
+    \param point [in]  Any 2D point.
+    \param point1 [in]  Any 2D point.
+    \param point2 [in]  Any 2D point.
+    \param vect [in]  Any 2D vector
+    \param curve [in]  Any 2D curve.
+    \param curve1 [in]  Any 2D curve 
+    \param curve2 [in]  Any 2D curve 
+    \param param [in]  Point on curve1 where this line segment is tangent to curve 
+    \param param1 [in]  Point on curve1 where this line segment is tangent to curve1 
+    \param param2 [in]  Point on curve2 where this line segment is tangent to curve2 
+    \param success [out]  Receives true if and only if the tangent was constructed. If false, this line segment is unchanged.
+
+    \remarks
+    point and vect construct a line segment between points point and point + vect. vect cannot have a zero length.
+
+    point1 and point2 construct a line segment between points point1 and point2. The 
+    points cannot be coincident.
+    
+    curve1 and curve2 construct a tangent line segment between curve1 and curve2. param1 and param2 are  
+    the approximate tangent points on curve1 and curve2, respectively.
+    
+    curve and point construct a line segment starting at point, and tangent to curve. 
+    param is the approximate tangent point on curve.
+  */
+  OdGeLineSeg2d& set(
+    const OdGePoint2d& point, 
+    const OdGeVector2d& vect);
+  OdGeLineSeg2d& set(
+    const OdGePoint2d& point1, 
+    const OdGePoint2d& point2);
+  OdGeLineSeg2d& set(
+    const OdGeCurve2d& curve1, 
+    const OdGeCurve2d& curve2,
+    double& param1, 
+    double& param2, 
+    bool& success);
+  OdGeLineSeg2d& set(
+    const OdGeCurve2d& curve, 
+    const OdGePoint2d& point, 
+    double& param, 
+    bool& success);
+
+  /** \details
+    Gets the infinite perpendicular bisector of this line segment.
+    
+    \param line [out]  Receives the perpendicular bisector.
+  */
+  void getBisector(
+    OdGeLine2d& line) const;
+    
+  /** \details
+    Returns the weighted average of the start point and end point of this line segment.
+    
+    \param blendCoeff [in]  Blend coefficient.
+    
+    \remarks
+    <table>
+    blendCoeff      Returns
+    0               start point
+    1               end point
+    0 to 1          point on this line segment
+    < 0 or > 1      point not on this line segment, but colinear with it.
+    </table>
+  */
+  OdGePoint2d baryComb(
+    double blendCoeff) const;
+
+
+  /** \details
+    Returns the start point of this line segment.
+  */
+  OdGePoint2d startPoint() const;
+  
+  /** \details
+    Returns the midpoint of this line segment.
+  */
+  OdGePoint2d midPoint() const;
+  
+  /** \details
+    Returns the end point of this line segment.
+  */
+  OdGePoint2d endPoint() const; 
+
+  OdGeLineSeg2d& operator =(const OdGeLineSeg2d& line);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_LINE_SEG_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2dArray.h
new file mode 100755
index 0000000..7f1c824
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg2dArray.h
@@ -0,0 +1,42 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GELINESEG2DARRAY_INCLUDED
+#define GELINESEG2DARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+#include "Ge/GeLineSeg2d.h"
+
+/** \details
+    This template class is a specialization of the OdArray class OdGeLineSeg2d objects.
+
+*/
+typedef OdArray<OdGeLineSeg2d> OdGeLineSeg2dArray;
+
+// typedef OdArray<OdGeLineSeg2d/*, OdMemoryAllocator<OdGeLineSeg2d>*/ > OdGeLineSeg2dArray;
+
+#endif // GELINESEG2DARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg3d.h
new file mode 100755
index 0000000..1b00dd7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLineSeg3d.h
@@ -0,0 +1,150 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GELNSG3D_H
+#define OD_GELNSG3D_H /*!DOM*/
+
+class OdGeLineSeg2d;
+#include "Ge/GeLinearEnt3d.h"
+#include "Ge/GeInterval.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents line segments in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeLineSeg.html, Working with Line Segments>
+*/
+class GE_TOOLKIT_EXPORT OdGeLineSeg3d : public OdGeLinearEnt3d
+{
+public:
+
+
+  /** \param line [in]  Any 3D line.
+    \param point [in]  Any 3D point.
+    \param point1 [in]  Any 3D point.
+    \param point2 [in]  Any 3D point.
+    \param vect [in]  Any 3D vector.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    point and vect construct a line segment between points point and point + vect. vect cannot have a zero length.
+
+    point1 and point2 construct a line segment between points point1 and point2. The 
+    points cannot be coincident.
+
+    If called with no arguments, constructs a line segment between the points (0,0) and (1,0).
+  */
+  OdGeLineSeg3d();
+  OdGeLineSeg3d(
+    const OdGeLineSeg3d& source);
+  OdGeLineSeg3d(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& vect);
+  OdGeLineSeg3d(
+    const OdGePoint3d& point1, 
+    const OdGePoint3d& point2);
+
+  /** \details
+    Gets the unbounded perpendicular bisecting plane of this line segment.
+    
+    \param line [out]  Receives the bisecting plane.
+  */
+   void getBisector(OdGePlane& plane) const;
+
+   /** \details
+    Returns the weighted average of the start point and end point of this line segment.
+    
+    \param blendCoeff [in]  Blend coefficient.
+    
+    \remarks
+    <table>
+    blendCoeff      Returns
+    0               start point
+    1               end point
+    0 to 1          point on this line segment
+    < 0 or > 1      point not on this line segment, but colinear with it.
+    </table>
+   */
+   OdGePoint3d baryComb(double blendCoeff) const;
+
+  /** \details
+    Returns the *start point* of this line.
+  */
+   OdGePoint3d startPoint() const;
+
+  /** \details
+    Returns the midpoint of this line.
+  */
+   OdGePoint3d midPoint() const;
+
+  /** \details
+    Returns the *end point* of this line.
+  */
+   OdGePoint3d endPoint() const;
+
+  /** \details
+    Sets the parameters for this line according to the arguments, and returns a reference to this line.
+
+    \param point [in]  Any 3D point.
+    \param point1 [in]  Any 3D point.
+    \param point2 [in]  Any 3D point.
+    \param vect [in]  Any 3D vector.
+
+    \remarks
+    point and vect construct a line segment between points point and point + vect. vect cannot have a zero length.
+
+    point1 and point2 construct a line segment between points point1 and point2. The 
+    points cannot be coincident.
+  */
+   OdGeLineSeg3d& set(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& vect);
+   OdGeLineSeg3d& set(
+    const OdGePoint3d& point1, 
+    const OdGePoint3d& point2);
+   OdGeLineSeg3d& set(
+    const OdGeCurve3d& curve1,
+    const OdGeCurve3d& curve2,
+    double& param1, double& param2,
+    bool& success);
+   OdGeLineSeg3d& set(
+    const OdGeCurve3d& curve,
+    const OdGePoint3d& point,
+    double& param,
+    bool& success);
+
+  OdGeLineSeg3d& operator =(
+    const OdGeLineSeg3d& line);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt2d.h
new file mode 100755
index 0000000..80b3555
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt2d.h
@@ -0,0 +1,163 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_LINEAR_ENT_2D_H
+#define OD_GE_LINEAR_ENT_2D_H /*!DOM*/
+
+class OdGeCircArc2d;
+
+#include "Ge/GeCurve2d.h"
+#include "OdPlatformSettings.h"
+#include <memory.h> // for memcpy
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for OdGe 2D linear entities.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeLinearEnt2d : public OdGeCurve2d
+{
+public:
+  
+
+  /** \details
+    Returns true and the intersection point, if and only 
+    if the specified linear entity intersects with this one.
+
+    \param line [in]  Any 2D linear entity.
+    \param intPnt [out]  Receives the intesection point.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool intersectWith(
+    const OdGeLinearEnt2d& line, 
+    OdGePoint2d& intPnt,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Determines if two lines overlap and if so returns 
+    the line that coincides with their region of overlap. 
+
+    \param line [in]  Any 2D linear entity.
+    \param overlap [out]  Output linear entity that is coincident with region of overlap  
+    \param tol [in]  Input tolerance.
+
+    \note
+    Currently not implemented.
+  */
+  bool overlap(
+    const OdGeLinearEnt2d& line, 
+    OdGeLinearEnt2d*& overlap,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only 
+    if the specified linear entity is parallel to this one.
+
+    \param line [in]  Any 2D linear entity.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isParallelTo(
+    const OdGeLinearEnt2d& line, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only 
+    if the specified linear entity is perpendicular to this one.
+
+    \param line [in]  Any 2D linear entity.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isPerpendicularTo(
+    const OdGeLinearEnt2d& line, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only 
+    if the specified linear entity is colinear to this one.
+
+    \param line [in]  Any 2D linear entity.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isColinearTo(
+    const OdGeLinearEnt2d& line, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns a reference to a 2D line perpendicular to this one,
+    and passing through the specified point.
+
+    \param point [in]  Any 2D point.
+    \param perpLine [out]  Receives a reference to the perpendicular line.
+
+    \remarks
+    It is up to the caller to delete the returned line.
+  */
+  void getPerpLine(
+    const OdGePoint2d& point, 
+    OdGeLine2d& perpLine) const;
+
+  /** \details
+    Returns an arbitrary point on this linear entity.
+  */
+  OdGePoint2d pointOnLine() const;
+
+  /** \details
+    Returns a unit vector parallel to this linear entity, 
+    and pointing in the direction of increasing parametric value.
+  */
+  OdGeVector2d direction() const;
+
+  /** \details
+    Returns a reference to an infinite line colinear with this linear entity.
+
+    \param line [out]  Receives the infinite line.
+
+    \remarks
+    It is up to the caller to delete the returned line.
+  */
+  void getLine(
+    OdGeLine2d& line) const;
+
+  OdGeLinearEnt2d& operator =(const OdGeLinearEnt2d& line);
+
+  //////////////////////////////////////////////////////////////////////////
+  // Overrides :
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special overrides :
+
+protected:
+  /** \param source [in]  Object to be cloned.
+  */
+  OdGeLinearEnt2d(); 
+  OdGeLinearEnt2d(const OdGeLinearEnt2d& source); 
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt3d.h
new file mode 100755
index 0000000..1a3f703
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeLinearEnt3d.h
@@ -0,0 +1,188 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GELENT3D_H
+#define OD_GELENT3D_H /*!DOM*/
+
+class OdGeLine3d;
+class OdGeCircArc3d;
+class OdGePlanarEnt;
+
+#include "OdPlatform.h"
+#include "Ge/GeCurve3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for OdGe 3D linear entities.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeLinearEnt3d : public OdGeCurve3d
+{
+public:
+
+  ///////////////////////////////////////////////////////////////////////////
+
+  /** \details
+    Returns true and the intersection point, if and only 
+    if the specified line or plane intersects with this line.
+
+    \param line [in]  Any 3D linear entity.
+    \param plane [in]  Any planar entity.
+    \param intPnt [out]  Receives the intesection point.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool intersectWith(
+    const OdGeLinearEnt3d& line,
+    OdGePoint3d& intPt,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool intersectWith(
+    const OdGePlanarEnt& plane, 
+    OdGePoint3d& intPnt,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the projected intersection of the specified line with this line.
+
+    \param line [in]  Any 3D line.
+    \param projDir [in]  Projection direction.
+    \param pntOnThisLine [out]  Receives the intersection point on this line.   
+    \param pntOnOtherLine [out]  Receives the intersection point on the other line. 
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    By default this function throws exception "not Implemented".
+  */
+   bool projIntersectWith(
+    const OdGeLinearEnt3d& line,
+    const OdGeVector3d& projDir,
+    OdGePoint3d& pntOnThisLine,
+    OdGePoint3d& pntOnOtherLine,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+   /** \details
+    Determines if two lines overlap and if so returns 
+    the line that coincides with their region of overlap. 
+
+    \param line [in]  Any 3D linear entity.
+    \param overlap [out]  Output linear entity that is coincident with region of overlap  
+    \param tol [in]  Input tolerance.
+
+    \note
+    Currently not implemented.
+   */
+   bool overlap(
+    const OdGeLinearEnt3d& line,
+    OdGeLinearEnt3d*& overlap,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  TD_USING(OdGeCurve3d::isOn);
+   bool isOn(
+    const OdGePlane& plane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only 
+    if the specified entity is parallel to this line.
+
+    \param line [in]  Any 3D linear entity.
+    \param plane [in]  Any plane.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isParallelTo(
+    const OdGeLinearEnt3d& line,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool isParallelTo(
+    const OdGePlanarEnt& plane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only 
+    if the specified entity is perpendicular to this line.
+
+    \param line [in]  Any 3D linear entity.
+    \param plane [in]  Any plane.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isPerpendicularTo(
+    const OdGeLinearEnt3d& line,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool isPerpendicularTo(
+    const OdGePlanarEnt& plane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified line is colinear with this one. 
+
+    \param line [in]  Any 3D linear entity.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isColinearTo(
+    const OdGeLinearEnt3d& line,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns a plane, containing the specified point, perpendicular to this line.
+
+    \param point [in]  Any 3D point.
+    \param plane [out]  Receives the perpendicular plane.
+
+    \remarks
+    The returned plane is created with the new method. It is up to the caller to delete it.
+  */
+   void getPerpPlane(
+      const OdGePoint3d& point, 
+      OdGePlane& plane) const;
+
+  /** \details
+    Returns an arbitrary point on this line.
+  */
+   OdGePoint3d pointOnLine() const;
+
+  /** \details
+    Returns a unit vector parallel to this line, 
+    and pointing in the direction of increasing parametric value.
+  */
+   OdGeVector3d direction() const;
+
+  /** \details
+    Returns a reference to an infinite line colinear with this one.
+
+    \param line [out]  Receives the infinite line.
+  */
+   void getLine(OdGeLine3d& line) const;
+
+  OdGeLinearEnt3d& operator =(
+      const OdGeLinearEnt3d& line);
+protected:
+  OdGeLinearEnt3d(); 
+  OdGeLinearEnt3d(
+    const OdGeLinearEnt3d& source);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GELENT3D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2d.h
new file mode 100755
index 0000000..a704e61
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2d.h
@@ -0,0 +1,476 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GE_MATRIX_2D_H
+#define OD_GE_MATRIX_2D_H /*!DOM*/
+
+#include "Ge/GeGbl.h"
+#include "Ge/GePoint2d.h"
+
+class OdGeVector2d;
+class OdGeLine2d;
+class OdGeTol;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents 2D transformation matrices that define affine 
+    ( translation, rotation, and/or scaling ) transformations.
+
+    \remarks
+    OdGeMatrix2d may be viewed as an array[3][3] of doubles.
+    
+    An OdGeMatrix2d, M, can be expressed as a 3  3 matrix*, in the form
+    
+              a00   a01   t0
+              a10   a11   t1
+                0     0    1
+                
+    The linear part of M is the matrix
+                
+              a00   a01
+              a10   a11
+                
+    The translational part of M is the column
+    
+              t0
+              t1
+              
+    The origin of the coordinate system of M is (t0, t1).
+    
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeMatrix2d
+{
+public:
+  OdGeMatrix2d();
+  //OdGeMatrix2d(const OdGeMatrix2d& src);
+  //OdGeMatrix2d& operator =(const OdGeMatrix2d& src);
+
+  /** \details
+      The identity matrix.
+  */
+  GE_STATIC_EXPORT static const OdGeMatrix2d kIdentity;
+
+  /** \details
+    Sets this matrix to the identity matrix, and returns a reference to this matrix.
+  */
+  OdGeMatrix2d& setToIdentity();
+
+  /** \remarks
+    Returns the product (this matrix) * matrix. 
+  */
+  OdGeMatrix2d operator* (
+    const OdGeMatrix2d& matrix) const;
+    
+  /** \remarks
+    Sets this matrix to the product (this matrix) * matrix, and returns
+    a reference to this matrix. 
+  */
+  OdGeMatrix2d& operator*= (
+    const OdGeMatrix2d& matrix);
+
+  /** \details
+    Sets this matrix to the product leftSide * (this matrix), and returns
+    a reference to this matrix.
+    
+    \param leftSide [in]  Any 2D matrix 
+  */
+  OdGeMatrix2d& preMultBy(
+    const OdGeMatrix2d& leftSide);
+
+  /** \details
+    Sets this matrix to the product (this matrix) * rightSide, and returns
+    a reference to this matrix. 
+    
+    \param rightSide [in]  Any 2D matrix 
+  */
+  OdGeMatrix2d& postMultBy(
+    const OdGeMatrix2d& rightSide);
+
+  /** \details
+    Sets this matrix to the product matrix1 * matrix2, and returns
+    a reference to this matrix.
+     
+    \param matrix1 [in]  Any 2D matrix 
+    \param matrix2 [in]  Any 2D matrix 
+  */
+  OdGeMatrix2d& setToProduct(
+    const OdGeMatrix2d& matrix1, 
+    const OdGeMatrix2d& matrix2);
+
+  // Multiplicative inverse.
+  //
+
+  /** \details
+    Sets this matrix to its inverse, and returns
+    a reference to this matrix. 
+  */
+  OdGeMatrix2d& invert();
+
+  /** \details
+    Returns the inverse of this matrix. 
+  */
+  OdGeMatrix2d inverse() const;
+
+  /** \details
+    Returns true if and only if this matrix is singular.
+    
+    \remarks
+    * A matrix is singular if and only if its determinant == 0.
+    * A singular matrix cannot be inverted.
+  */
+  bool isSingular(const OdGeTol& tol = OdGeContext::gTol) const;
+ 
+  /** \details
+    Sets this matrix to its transpose, and returns
+    a reference to this matrix. 
+  */
+  OdGeMatrix2d& transposeIt();
+
+  /** \details
+    Returns the transpose of this matrix. 
+  */
+  OdGeMatrix2d transpose() const;
+
+  /** \details
+    Equality operator. 
+  */
+  bool operator ==(
+    const OdGeMatrix2d& matrix) const;
+
+  /** \details
+    Inequality operator. 
+  */
+  bool operator !=(
+    const OdGeMatrix2d& matrix) const;
+
+  /** \details
+    Returns true if and only if matrix is identical to this one,
+    within the specified tolerance.
+
+    \param matrix [in]  Matrix to be compared.
+    \param tol [in]  Geomentric tolerance.
+  */
+  bool isEqualTo(
+    const OdGeMatrix2d& matrix,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only the columns vectors of the linear part of
+    this matrix are of equal length and perpendicular
+    to each other  within the
+    specified tolerance. 
+
+    \param tol [in]  Geomentric tolerance.
+  */
+  bool isUniScaledOrtho(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only the column vectors of the linear part of
+    this matrix are perpendicular
+    to each other within the specified tolerance.
+
+    \param tol [in]  Geomentric tolerance.
+  */
+  bool isScaledOrtho(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the scale factor of this matrix.
+    
+    \remarks
+    The scale factor is the square root of the longest column vector
+    of the linear part of this matrix.
+  */
+  double scale() const;
+
+  // Determinant
+  //
+  
+  /** \details
+    Returns the determinant of this matrix.
+  */
+  double det() const;
+
+  /** \details
+    Sets the translation part of the matrix to the specified vector.
+    
+    \param vect [in]  Translation vector.
+  */
+  OdGeMatrix2d& setTranslation(
+    const OdGeVector2d& vect);
+
+  /** Returns the translation vector of this matrix,
+    or the matrix of the translation by vector.
+    
+    \param vect [in]  Translation vector.
+  */
+  OdGeVector2d translation() const;
+  static OdGeMatrix2d translation(
+    const OdGeVector2d& vector);
+
+  // Retrieve scaling, rotation, mirror components
+  //
+  
+  /** \details
+    Returns true if an only if this matrix is conformal (isUniScaledOrtho()),
+    and returns the scale factor, angle of rotation,
+    the presence of a mirror component to the matrix,
+    and the direction of reflection.
+          
+    \param scale [out]  Receives the scale factor.
+    \param angle [out]  Receives the angle of rotation.
+    \param isMirror [out]  Receives true if andn only if the matrix has a mirror component.
+    \param reflex [in]  Direction of reflection.
+    
+    \remarks
+    reflex is valid if and only if isMirror is true.
+  */
+  bool isConformal(
+    double& scale, 
+    double& angle,
+    bool& isMirror, 
+    OdGeVector2d& reflex) const;
+
+
+  // Set/get coordinate system
+  //
+  
+  /** \details
+    Sets this matrix to the matrix which maps
+    the WCS to the coordinate system 
+    defined by origin, X-axis, and Y-axis, and returns a reference
+    to this matrix.
+    
+    \param origin [in]  Origin of the coordinate system.
+    \param xAxis [in]  X-axis of the coordinate system.
+    \param yAxis [in]  Y-axis of the coordinate system.
+  */
+  OdGeMatrix2d& setCoordSystem(
+    const OdGePoint2d& origin, 
+    const OdGeVector2d& xAxis,
+    const OdGeVector2d& yAxis);
+  /** \details
+    Returns the origin, X-axis, and Y-axis of the coordinate system 
+    to which this matrix maps the WCS.
+    
+    \param origin [out]  Receives the origin of the coordinate system.
+    \param xAxis [out]  Receives the X-axis of the coordinate system.
+    \param yAxis [out]  Receives the Y-axis of the coordinate system.
+  */
+  void getCoordSystem(
+    OdGePoint2d& origin, 
+    OdGeVector2d& xAxis, 
+    OdGeVector2d& yAxis) const;
+ 
+  /** \details
+    Sets this matrix to the matrix which translates
+    by vect, and returns a reference
+    to this matrix.
+    
+    \param vect [in]  Translation vector.
+  */
+  OdGeMatrix2d& setToTranslation(
+    const OdGeVector2d& vect);
+    
+    
+  /** \details
+    Sets this matrix to the matrix which rotates
+    by angle about center, and returns a reference
+    to this matrix.
+    
+    \param angle [in]  Rotation angle.
+    \param center [in]  Center of rotation.
+  */
+  OdGeMatrix2d& setToRotation(
+    double angle, 
+    const OdGePoint2d& center = OdGePoint2d::kOrigin);
+    
+  /** \details
+    Sets this matrix to the matrix which scales
+    by scale about tcenter, and returns a reference
+    to this matrix.
+    
+    \param scale [in]  Scale factor.
+    \param center [in]  Center of scaling.
+  */
+  OdGeMatrix2d& setToScaling(
+    double scale,
+    const OdGePoint2d& center = OdGePoint2d::kOrigin);
+
+  /** \details
+    Sets this matrix to the matrix which mirrors
+    about the specified object, and returns a reference
+    to this matrix.
+    
+    \param mirrorPoint [in]  Mirror point.
+    \param mirrorLine [in]  Mirror line entity.
+  */
+  OdGeMatrix2d& setToMirroring(
+    const OdGePoint2d& mirrorPoint);
+  OdGeMatrix2d& setToMirroring(
+    const OdGeLine2d& mirrorLine);
+    
+  /** \details
+    Sets this matrix to the matrix which maps
+    the coordinate system defined by fromOrigin, fromXAxis, and fromYAxis,
+    to the coordinate system 
+    defined by toOrigin, toXAxis, and toYAxis, and returns a reference
+    to this matrix.
+    
+    \param fromOrigin [in]  Origin of the initial coordinate system.
+    \param fromXAxis [in]  X-axis of the initial coordinate system.
+    \param fromYAxis [in]  Y-axis of the initial coordinate system.
+    \param toOrigin [in]  Origin of the initial coordinate system.
+    \param toXAxis [in]  X-axis of the initial coordinate system.
+    \param toYAxis [in]  Y-axis of the initial coordinate system.
+  */
+  OdGeMatrix2d& setToAlignCoordSys(
+    const OdGePoint2d& fromOrigin,
+    const OdGeVector2d& fromXAxis,
+    const OdGeVector2d& fromYAxis,
+    const OdGePoint2d& toOrigin,
+    const OdGeVector2d& toXAxis,
+    const OdGeVector2d& toYAxis);
+ 
+//  static OdGeMatrix2d translation (
+//     const OdGeVector2d& vect);
+    
+  /** \details
+    Returns the matrix which rotates
+    by angle about center.
+    
+    \param angle [in]  Rotation angle.
+    \param center [in]  Center of rotation.
+  */
+  static OdGeMatrix2d rotation(
+    double angle, 
+    const OdGePoint2d& center = OdGePoint2d::kOrigin);
+    
+  /** \details
+    Returns the matrix which scales
+    by scale about center.
+    
+    \param scale [in]  Scale factor.
+    \param center [in]  Center of scaling.
+  */
+  static OdGeMatrix2d scaling(
+    double scale, 
+    const OdGePoint2d& center = OdGePoint2d::kOrigin);
+
+  /** \details
+    Returns the matrix which mirrors
+    about the specified object.
+   
+    \param mirrorPoint [in]  Mirror point.
+    \param mirrorLine [in]  Mirror line entity.
+  */
+  static OdGeMatrix2d mirroring(
+    const OdGePoint2d& mirrorPoint);
+  static OdGeMatrix2d mirroring(
+    const OdGeLine2d& mirrorLine);
+
+  /** \details
+    Returns the matrix which maps
+    the  coordinate system defined by fromOrigin, fromXAxis, and fromYAxis,
+    to the coordinate system 
+    defined by toOrigin, toXAxis, and toYAxis.
+    
+    \param fromOrigin [in]  Origin of the initial coordinate system.
+    \param fromXAxis [in]  X-axis of the initial coordinate system.
+    \param fromYAxis [in]  Y-axis of the initial coordinate system.
+    \param toOrigin [in]  Origin of the initial coordinate system.
+    \param toXAxis [in]  X-axis of the initial coordinate system.
+    \param toYAxis [in]  Y-axis of the initial coordinate system.
+  */
+  static OdGeMatrix2d alignCoordSys(
+    const OdGePoint2d& fromOrigin,
+    const OdGeVector2d& fromXAxis,
+    const OdGeVector2d& fromYAxis,
+    const OdGePoint2d& toOrigin,
+    const OdGeVector2d& toXAxis,
+    const OdGeVector2d& toYAxis);
+
+  // For convenient access to the data.
+  //
+  
+  /** \remarks
+    Returns or references entry[row] as matrix[row].
+
+    \param row [in]  Row.
+  */
+  const double* operator [](
+    int row) const;
+  double* operator [](
+    int row);
+
+  /** \remarks
+    Returns or references entry[row][column] as matrix(row,column).
+
+    \param row [in]  Row.
+    \param column [in]  Column.
+  */
+  double operator ()(
+    int row, 
+    int column) const;
+  double& operator ()(
+    int row, 
+    int column);
+
+  // [row][column]
+  double entry[3][3];
+};
+
+// these operations really decrease rendering performance in non-inline case :
+
+inline const double* OdGeMatrix2d::operator [](int row) const 
+{ 
+  return entry[row]; 
+}
+
+inline double* OdGeMatrix2d::operator [](int row) 
+{ 
+  return entry[row]; 
+}
+
+inline double OdGeMatrix2d::operator ()(int row, int column) const 
+{ 
+  return entry[row][column]; 
+}
+
+inline double& OdGeMatrix2d::operator ()(int row, int column) 
+{ 
+  return entry[row][column]; 
+}
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_MATRIX_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2dArray.h
new file mode 100755
index 0000000..703227f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix2dArray.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef GEMATRIX2DARRAY_INCLUDED
+#define GEMATRIX2DARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+class OdGeMatrix2d;
+
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGeMatrix2d objects.
+*/
+typedef OdArray<OdGeMatrix2d, OdMemoryAllocator<OdGeMatrix2d> > OdGeMatrix2dArray;
+
+#endif // GEMATRIX2DARRAY_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3d.h
new file mode 100755
index 0000000..3287507
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3d.h
@@ -0,0 +1,626 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_MATRIX_3D_H
+#define OD_GE_MATRIX_3D_H /*!DOM*/
+
+#include "Ge/GeGbl.h"
+#include "Ge/GeMatrix2d.h"
+#include "Ge/GePoint3d.h"
+
+class OdGeLine3d;
+class OdGeVector3d;
+class OdGePlane;
+class OdGeTol;
+class OdGeScale3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents 3D transformation matrices that define affine 
+    ( translation, rotation, and/or scaling ) transformations.
+    
+    \remarks
+    OdGeMatrix3d may be viewed as an array[4][4] of doubles.
+    
+    An OdGeMatrix3d, M, can be expressed as a 4  4 matrix*, in the form
+    
+              a00   a01   a02   t0
+              a10   a11   a12   t1
+              a20   a21   a22   t2
+                0     0     0    1
+                
+    The linear part of M is the matrix
+                
+              a00   a01   a02
+              a10   a11   a12
+              a20   a21   a22
+                              
+    The translational part of M is the column
+    
+              t0
+              t1
+              t2
+              
+    The origin of the coordinate system of M is (t0, t1, t2).
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeMatrix3d
+{
+public:
+  OdGeMatrix3d();
+  //OdGeMatrix3d(const OdGeMatrix3d& src);
+  //OdGeMatrix3d& operator =(const OdGeMatrix3d& src);
+
+  GE_STATIC_EXPORT static const OdGeMatrix3d kIdentity; // Multiplicative identity matrix.
+
+  // Reset matrix.
+  //
+
+  /** \details
+    Sets this matrix to the identity matrix, and returns a reference to this matrix.
+  */
+  OdGeMatrix3d& setToIdentity();
+  
+  /** \details
+    Sets any values within tol of 0 to 0.
+  */
+  void validateZero(
+    const OdGeTol& tol = OdGeContext::gTol); // for correcting in case that Zero is corrupted
+
+  // Multiplication.
+  //
+
+  /** \remarks
+    Returns the product (this matrix) * matrix. 
+  */
+  OdGeMatrix3d operator *(
+    const OdGeMatrix3d& matrix) const;
+
+  /** \remarks
+    Sets this matrix to the product (this matrix) * matrix, and returns
+    a reference to this matrix. 
+  */
+  OdGeMatrix3d& operator *=(
+    const OdGeMatrix3d& matrix);
+  
+  /** \details
+    Sets this matrix to the product leftSide * (this matrix), and returns
+    a reference to this matrix. 
+    
+    \param leftSide [in]  Any 2D matrix 
+  */
+  OdGeMatrix3d& preMultBy(
+    const OdGeMatrix3d& leftSide);
+
+  /** \details
+    Sets this matrix to the product (this matrix) * rightSide, and returns
+    a reference to this matrix. 
+    
+    \param rightSide [in]  Any 2D matrix 
+  */
+  OdGeMatrix3d& postMultBy(
+    const OdGeMatrix3d& rightSide);
+
+  /** \details
+    Sets this matrix to the product matrix1 * matrix2, and returns
+    a reference to this matrix. 
+    
+    \param matrix1 [in]  Any 2D matrix 
+    \param matrix2 [in]  Any 2D matrix 
+  */
+  OdGeMatrix3d& setToProduct(
+    const OdGeMatrix3d& matrix1, 
+    const OdGeMatrix3d& matrix2);
+
+  // Multiplicative inverse.
+  //
+
+  /** \details
+    Sets this matrix to its inverse, and returns
+    a reference to this matrix. 
+  */
+  OdGeMatrix3d& invert();
+
+  /** \details
+    Returns true if and only if this matrix has an inverse,
+    and the inverse of this matrix.
+    
+    \param inverseMatrix [out]  Receives the inverse matrix
+    \param tol [in]  Geometric tolerance. 
+  */
+  OdGeMatrix3d inverse() const;
+  OdGeMatrix3d inverse(
+    const OdGeTol& tol) const;
+  bool inverse(
+    OdGeMatrix3d& inverseMatrix, 
+    double tol) const;
+
+  /** \details
+    Returns true if and only if this matrix is singular.
+    
+    \remarks
+    * A matrix is singular if and only if its determinant == 0.
+    * A singular matrix cannot be inverted.
+  */
+  bool isSingular(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Sets this matrix to its transpose, and returns
+    a reference to this matrix. 
+  */
+  OdGeMatrix3d& transposeIt();
+
+  /** \details
+    Returns the transpose of this matrix. 
+  */
+  OdGeMatrix3d transpose() const;
+
+  /** \details
+    Equality operator. 
+  */
+  bool operator ==(
+    const OdGeMatrix3d& matrix) const;
+
+  /** \details
+    Inequality operator. 
+  */
+  bool operator !=(
+    const OdGeMatrix3d& matrix) const;
+
+  /** \details
+    Returns true if and only if matrix is identical to this one,
+    within the specified tolerance.
+
+    \param matrix [in]  Matrix to be compared.
+    \param tol [in]  Geomentric tolerance.
+  */
+  bool isEqualTo(
+    const OdGeMatrix3d& matrix, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only the columns vectors of the linear part of
+    this matrix are of equal length and mutually perpendicular within the
+    specified tolerance. 
+
+    \param tol [in]  Geomentric tolerance.
+  */
+  bool isUniScaledOrtho(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only the column vectors of the linear part of
+    this matrix are mutually perpendicular within the
+    specified tolerance.
+    
+    \param tol [in]  Geomentric tolerance.
+  */
+  bool isScaledOrtho(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /*!DOM*/
+  bool isPerspective(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+ 
+  /** \details
+    Returns the determinant of this matrix.
+  */
+  double det() const;
+
+  /** \details
+    Sets the translation part of the matrix to the specified vector.
+    
+    \param vect [in]  Translation vector.
+  */
+  OdGeMatrix3d& setTranslation(
+    const OdGeVector3d& vect);
+    
+  /** \details
+    Sets this matrix to the matrix which maps
+    the WCS to the coordinate system 
+    defined by origin, X-axis, Y-axis, and Z-axis, and returns a reference
+    to this matrix.
+    
+    \param origin [in]  Origin of the coordinate system.
+    \param xAxis [in]  X-axis of the coordinate system.
+    \param yAxis [in]  Y-axis of the coordinate system.
+    \param zAxis [in]  Z-axis of the coordinate system.
+  */
+  OdGeMatrix3d& setCoordSystem(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& xAxis,
+    const OdGeVector3d& yAxis, 
+    const OdGeVector3d& zAxis);
+
+  /** \details
+    Returns the origin, X-axis, Y-axis, and Z-axis of the coordinate system 
+    to which this matrix maps the WCS.
+    
+    \param origin [out]  Receives the origin of the coordinate system.
+    \param xAxis [out]  Receives the X-axis of the coordinate system.
+    \param yAxis [out]  Receives the Y-axis of the coordinate system.
+    \param zAxis [out]  Receives the Z-axis of the coordinate system.
+  */
+  void getCoordSystem(
+    OdGePoint3d& origin, 
+    OdGeVector3d& xAxis, 
+    OdGeVector3d& yAxis, 
+    OdGeVector3d& zAxis) const;
+  
+  /** \details
+    Returns the origin of the coordinate system 
+    to which this matrix maps the WCS.
+  */
+    OdGePoint3d getCsOrigin() const;
+
+  /** \details
+    Returns the X-axis of the coordinate system 
+    to which this matrix maps the WCS.
+  */
+    OdGeVector3d getCsXAxis() const;
+
+  /** \details
+    Returns the Y-axis of the coordinate system 
+    to which this matrix maps the WCS.
+  */
+    OdGeVector3d getCsYAxis() const;
+  /** \details
+    Returns the Z-axis of the coordinate system 
+    to which this matrix maps the WCS.
+  */
+    OdGeVector3d getCsZAxis() const;
+ 
+  /** \details
+    Sets this matrix to the matrix which translates
+    by vect, and returns a reference
+    to this matrix.
+    
+    \param vect [in]  Translation vector.
+  */
+  OdGeMatrix3d& setToTranslation(
+    const OdGeVector3d& vect);
+
+  /** \details
+    Sets this matrix to the matrix which rotates
+    by angle about an axis passing through center, and returns a reference
+    to this matrix.
+    
+    \param angle [in]  Rotation angle.
+    \param axis [in]  Rotation axis.
+    \param center [in]  Center of rotation.
+  */
+  OdGeMatrix3d& setToRotation(
+    double angle, 
+    const OdGeVector3d& axis,
+    const OdGePoint3d& center = OdGePoint3d::kOrigin);
+
+  /** \details
+    Sets this matrix to the matrix which scales
+    by scale about center, and returns a reference
+    to this matrix.
+    
+    \param scale [in]  Scale factor.
+    \param center [in]  Center of scaling.
+  */
+  OdGeMatrix3d& setToScaling(
+    double scale, 
+    const OdGePoint3d& center = OdGePoint3d::kOrigin);
+  OdGeMatrix3d& setToScaling(
+    const OdGeScale3d& scale, 
+    const OdGePoint3d& center = OdGePoint3d::kOrigin);
+
+  /** \details
+    Sets this matrix to the matrix which mirrors
+    about the specified object, and returns a reference
+    to this matrix.
+    
+    \param mirrorPlane [in]  Mirror plane.
+    \param mirrorPoint [in]  Mirror point.
+    \param mirrorLine [in]  Mirror line entity.
+  */
+  OdGeMatrix3d& setToMirroring(
+    const OdGePlane& mirrorPlane);
+  OdGeMatrix3d& setToMirroring(
+    const OdGePoint3d& mirrorPoint);
+  OdGeMatrix3d& setToMirroring(
+    const OdGeLine3d& mirrorLine);
+    
+  /** \details
+    Sets this matrix to the matrix which parallel
+    projects onto the specified plane in the 
+    specified directionm and returns a reference
+    to this matrix.
+   
+    \param projectionPlane [in]  Projection plane.
+    \param projectDir [in]  Projection direction.
+  */
+  OdGeMatrix3d& setToProjection(
+    const OdGePlane& projectionPlane,
+    const OdGeVector3d& projectDir);
+    
+  /** \details
+    Sets this matrix to the matrix which maps
+    the coordinate system defined by fromOrigin, fromXAxis, fromYAxis, and fromZAxis,
+    to the coordinate system 
+    defined by toOrigin, toXAxis, toYAxis, and toZAxis, and returns a reference
+    to this matrix.
+    
+    \param fromOrigin [in]  Origin of the initial coordinate system.
+    \param fromXAxis [in]  X-axis of the initial coordinate system.
+    \param fromYAxis [in]  Y-axis of the initial coordinate system.
+    \param fromZAxis [in]  Z-axis of the initial coordinate system.
+    \param toOrigin [in]  Origin of the initial coordinate system.
+    \param toXAxis [in]  X-axis of the initial coordinate system.
+    \param toYAxis [in]  Y-axis of the initial coordinate system.
+    \param toZAxis [in]  Z-axis of the initial coordinate system.
+  */
+  OdGeMatrix3d& setToAlignCoordSys(
+    const OdGePoint3d& fromOrigin,
+    const OdGeVector3d& fromXAxis,
+    const OdGeVector3d& fromYAxis,
+    const OdGeVector3d& fromZAxis,
+    const OdGePoint3d& toOrigin,
+    const OdGeVector3d& toXAxis,
+    const OdGeVector3d& toYAxis,
+    const OdGeVector3d& toZAxis);
+
+
+  /** \details
+    Sets this matrix to the matrix which maps the WCS to
+    the plane coordinate system, and returns a reference to this matrix.
+    
+    \param normal [in]  The normal to the plane.    
+    \param plane [in]  The plane.
+    
+    \remarks
+    If normal is specified, the origin of the plane is (0,0,0)    
+  */
+      OdGeMatrix3d& setToWorldToPlane(
+    const OdGeVector3d& normal);
+  OdGeMatrix3d& setToWorldToPlane(
+    const OdGePlane& plane);
+    
+  /** \details
+    Sets this matrix to the matrix which maps
+    the plane coordinate system to the WCS, and returns a reference to this matrix.
+    
+    \param normal [in]  The normal to the plane.    
+    \param plane [in]  The plane.
+    
+    \remarks
+    If normal is specified, the origin of the plane is (0,0,0)    
+  */
+      OdGeMatrix3d& setToPlaneToWorld(
+    const OdGeVector3d& normal);
+  OdGeMatrix3d& setToPlaneToWorld(
+    const OdGePlane& plane);
+
+  /** Returns the translation vector of this matrix,
+    or the matrix of the translation by vect.
+    
+    \param vect [in]  Translation vector.
+  */
+  static OdGeMatrix3d translation(
+    const OdGeVector3d& vect);
+  OdGeVector3d translation() const;
+  
+  /** \details
+    Returns the matrix which rotates
+    by angle about an axis passing through center, and returns a reference
+    to this matrix.
+    
+    \param angle [in]  Rotation angle.
+    \param axis [in]  Rotation axis.
+    \param center [in]  Center of rotation.
+  */
+  static OdGeMatrix3d rotation(
+    double angle, 
+    const OdGeVector3d& axis,
+    const OdGePoint3d& center = OdGePoint3d::kOrigin);
+    
+  /** \details
+    Returns the matrix which scales
+    by scale about center, and returns a reference
+    to this matrix.
+    
+    \param scale [in]  Scale factor.
+    \param center [in]  Center of scaling.
+  */
+  static OdGeMatrix3d scaling(
+    double scale, 
+    const OdGePoint3d& center = OdGePoint3d::kOrigin);
+  static OdGeMatrix3d scaling(
+    const OdGeScale3d& scale, 
+    const OdGePoint3d& center = OdGePoint3d::kOrigin);
+
+  /** \details
+    Sets this matrix to the matrix which mirrors
+    about the specified object, and returns a reference
+    to this matrix.
+    
+    \param mirrorPlane [in]  Mirror plane.
+    \param mirrorPoint [in]  Mirror point.
+    \param mirrorLine [in]  Mirror line entity.
+  */
+  static OdGeMatrix3d mirroring(
+    const OdGePlane& mirrorPlane);
+  static OdGeMatrix3d mirroring(
+    const OdGePoint3d& mirrorPoint);
+  static OdGeMatrix3d mirroring(
+    const OdGeLine3d& mirrorLine);
+
+  /** \details
+    Returns the matrix which parallel
+    projects onto the specified plane in the 
+    specified direction.
+   
+    \param projectionPlane [in]  Projection plane.
+    \param projectDir [in]  Projection direction.
+  */
+  static OdGeMatrix3d projection(
+    const OdGePlane& projectionPlane,
+    const OdGeVector3d& projectDir);
+
+  /** \details
+    Returns the matrix which maps
+    the coordinate system defined by fromOrigin, fromXAxis, fromYAxis, and fromZAxis,
+    to the coordinate system 
+    defined by toOrigin, toXAxis, toYAxis, and toZAxis.
+    
+    \param fromOrigin [in]  Origin of the initial coordinate system.
+    \param fromXAxis [in]  X-axis of the initial coordinate system.
+    \param fromYAxis [in]  Y-axis of the initial coordinate system.
+    \param fromZAxis [in]  Z-axis of the initial coordinate system.
+    \param toOrigin [in]  Origin of the initial coordinate system.
+    \param toXAxis [in]  X-axis of the initial coordinate system.
+    \param toYAxis [in]  Y-axis of the initial coordinate system.
+    \param toZAxis [in]  Z-axis of the initial coordinate system.
+  */
+  static OdGeMatrix3d alignCoordSys(
+    const OdGePoint3d& fromOrigin,
+    const OdGeVector3d& fromXAxis,
+    const OdGeVector3d& fromYAxis,
+    const OdGeVector3d& fromZAxis,
+    const OdGePoint3d& toOrigin,
+    const OdGeVector3d& toXAxis,
+    const OdGeVector3d& toYAxis,
+    const OdGeVector3d& toZAxis);
+
+  /** \details
+    Returns the matrix which maps the WCS to
+    the plane coordinate system.
+    
+    \param normal [in]  The normal to the plane.    
+    \param plane [in]  The plane.
+    
+    \remarks
+    If normal is specified, the origin of the plane is (0,0,0)    
+  */
+      static OdGeMatrix3d worldToPlane(
+    const OdGeVector3d& normal);
+  static OdGeMatrix3d worldToPlane(
+    const OdGePlane&);
+    
+  /** \details
+    Returns the matrix which maps
+    the plane coordinate system to the WCS.
+    
+    \param normal [in]  The normal to the plane.    
+    \param plane [in]  The plane.
+    
+    \remarks
+    If normal is specified, the origin of the plane is (0,0,0)    
+  */
+      static OdGeMatrix3d planeToWorld(
+    const OdGeVector3d& normal);
+  static OdGeMatrix3d planeToWorld(
+    const OdGePlane&);
+
+  /** \details
+    Returns the scale factor of this matrix.
+    
+    \remarks
+    The scale factor is the square root of the longest column vector
+    of the linear part of this matrix.
+  */
+  double scale() const;
+
+  /** \details
+    Returns the largest absolute value of the linear part of this matrix.
+  */
+  double norm() const;
+  
+  /** \details
+    Transforms the plane specified by a normal and an elevation. 
+    \remarks
+    Returns the normal and elevation of the transformed plane, as well as 
+    a 2D transformation matrix for transforming points in the
+    original plane coordinates to the transformed plane coordinates.
+
+    \param normal [in/out] Normal to the plane.
+    \param elevation [in/out] Elevation of the plane.
+  */
+  OdGeMatrix2d convertToLocal(
+    OdGeVector3d& normal, 
+    double& elevation) const;
+
+  // For convenient access to the data.
+  //
+  
+  /** \details
+    Returns or references entry[row] as matrix[row].
+
+    \param row [in]  Row.
+  */
+  const double* operator [](
+    int row) const;
+  double* operator [](
+    int row);
+
+  /** \details
+    Returns or references entry[row][column] as matrix(row,column).
+
+    \param row [in]  Row.
+    \param column [in]  Column.
+  */
+  double operator ()(
+    int row, 
+    int column) const;
+  double& operator ()(
+    int row, 
+    int column);
+
+  double entry[4][4]; 
+};
+
+// these operations really decrease rendering performance in non-inline case
+
+inline const double* OdGeMatrix3d::operator [](int row) const 
+{ 
+  return entry[row]; 
+}
+
+inline double* OdGeMatrix3d::operator [](int row) 
+{ 
+  return entry[row]; 
+}
+
+inline double OdGeMatrix3d::operator ()(int row, int column) const 
+{ 
+  return entry[row][column]; 
+}
+
+inline double& OdGeMatrix3d::operator ()(int row, int column) 
+{ 
+  return entry[row][column]; 
+}
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_MATRIX_3D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dArray.h
new file mode 100755
index 0000000..0710e7a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dArray.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef GEMATRIX3DARRAY_INCLUDED
+#define GEMATRIX3DARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+class OdGeMatrix3d;
+
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGeMatrix3d objects.
+*/
+typedef OdArray<OdGeMatrix3d, OdMemoryAllocator<OdGeMatrix3d> > OdGeMatrix3dArray;
+
+#endif // GEMATRIX3DARRAY_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dStack.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dStack.h
new file mode 100755
index 0000000..207e775
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeMatrix3dStack.h
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODGEMATRIX3DSTACK_INCLUDED
+#define ODGEMATRIX3DSTACK_INCLUDED /*!DOM*/
+
+#include "OdStack.h"
+#include "Ge/GeMatrix3d.h"
+
+/** \details
+    This template class is a specialization of the OdStack class template for 3D matrices.
+*/
+typedef OdStack<OdGeMatrix3d> OdGeMatrix3dStack;
+
+#endif // ODGEMATRIX3DSTACK_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve2d.h
new file mode 100755
index 0000000..d8d7d7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve2d.h
@@ -0,0 +1,558 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GENURB2d_H
+#define OD_GENURB2d_H /*!DOM*/
+
+#include "Ge/GeSplineEnt2d.h"
+#include "OdPlatformSettings.h"
+
+class OdGeNurbCurve2dImpl;
+class OdGePolyline2d;
+class OdGeEllipArc2d;
+class OdGeLineSeg2d;
+class OdGeKnotVector;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents non-uniform rational B-splines (NURBS) in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGeNurbCurve3d.html, Working with NURBS curves>
+*/
+class GE_TOOLKIT_EXPORT OdGeNurbCurve2d : public OdGeSplineEnt2d
+{
+public:
+  
+
+  /** \param degree [in]  Degree of spline.
+    \param knots [in]  Knot vector.
+    \param controlPoints [in]  Array of 2D control points.
+    \param weights [in]  Array of weights
+    \param isPeriodic [in]  True if and only if the spline is to be periodic.
+    \param source [in]  Object to be cloned.
+    
+    \remarks
+    * If weights is not specified, a non-rational spline is constructed. 
+    * If weights is specified, then a rational spline is constructed, and controlPoints.length() must equal weights.length()
+    * If isPeriodic is false, then knots.length() must equal controlPoints.length() + degree + 1
+    * If isPeriodic is true, then knots.length() must equal controlPoints.length(), the first and last controlPoints must be equal
+      and the first and last weights (if provided) must be equal.
+  */
+  OdGeNurbCurve2d();
+  OdGeNurbCurve2d(
+    const OdGeNurbCurve2d& source);
+  OdGeNurbCurve2d(
+    int degree, 
+    const OdGeKnotVector& knots,
+    const OdGePoint2dArray& controlPoints,
+    bool isPeriodic = false);
+  OdGeNurbCurve2d(
+    int degree, 
+    const OdGeKnotVector& knots,
+    const OdGePoint2dArray& controlPoints,
+    const OdGeDoubleArray& weights,
+    bool isPeriodic = false);
+  OdGeNurbCurve2d(
+    int degree, 
+    const OdGePolyline2d& fitPolyline,
+    bool isPeriodic = false);
+  OdGeNurbCurve2d(
+    const OdGePoint2dArray& fitPoints,
+    const OdGeVector2d& startTangent,
+    const OdGeVector2d& endTangent,
+    bool startTangentDefined = true,
+    bool endTangentDefined = true,
+    const OdGeTol& fitTolerance = OdGeContext::gTol);
+  OdGeNurbCurve2d(
+    const OdGePoint2dArray& fitPoints,
+    const OdGeTol& fitTolerance = OdGeContext::gTol);
+  OdGeNurbCurve2d(
+    const OdGePoint2dArray& fitPoints,
+    const OdGeVector2dArray& fitTangents,
+    const OdGeTol& fitTolerance = OdGeContext::gTol,
+    bool isPeriodic = false);
+  OdGeNurbCurve2d(
+    const OdGeEllipArc2d& ellipse);
+  OdGeNurbCurve2d(
+    const OdGeLineSeg2d& linSeg);
+
+  OdGeNurbCurve2d(
+    const OdGePoint2dArray& fitPoints, 
+    const OdGeVector2d& startTangent, 
+    const OdGeVector2d& endTangent,
+    bool startTangentDefined,
+    bool endTangentDefined,
+    OdGeKnotParameterization knotParam,
+    const OdGeTol& fitTol = OdGeContext::gTol);
+
+
+  int numFitPoints() const;
+
+  /** \details
+    Returns true if and only if  0 <= index < numFitPoints(),
+    and returns the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [out]  Receives the fit point. 
+  */
+  bool getFitPointAt(
+    int index, 
+    OdGePoint2d& point) const;
+
+  /** \details
+    Returns true if and only if this spline was constructed
+    with fit points, and gets the fit tolerance that is
+    used to construct this spline.
+    
+    \param fitTolerance [out]  Recieves the geometric tolerance.
+  */
+  bool getFitTolerance(
+    OdGeTol& fitTolerance) const;
+
+  /** Descripton:
+    Returns true if and only if this spline was constructed with fit data, and
+    returns the starting and ending tangents.
+    
+    \param startTangent [out]  Receives the starting tangent
+    \param endTangent [out]  Receives the ending tangent.
+  */
+  bool getFitTangents(
+    OdGeVector2d& startTangent,
+    OdGeVector2d& endTangent) const;
+
+  /** \details
+    Returns true if and only if this spline was constructed with fit data,
+    and returns all the fit data used to construct this spline.
+    
+    \param fitPoints [out]  Receives the interpolation points.
+    \param fitTolerance [out]  Receives the geometric tolerance.
+    \param tangentsExist [out]  Receives true if and only if tangents were used in constructing this spline.
+    \param startTangent [out]  Receives the starting tangent
+    \param endTangent [out]  Receives the ending tangent.
+    \param knotParam [out]  Receives the knot parameterization.
+ 
+    \remarks
+    startTangent and endTangent are meaningful if and only if tangentsExist == true.
+
+    \note
+    Currently not implemented.
+  */
+  bool getFitData(
+    OdGePoint2dArray& fitPoints,
+    OdGeTol& fitTolerance,
+    bool& tangentsExist,
+    OdGeVector2d& startTangent,
+    OdGeVector2d& endTangent) const;
+
+  bool getFitData(
+    OdGePoint2dArray& fitPoints,
+    OdGeTol& fitTolerance,
+    bool& tangentsExist,
+    OdGeVector2d& startTangent, 
+    OdGeVector2d& endTangent,
+    OdGeKnotParameterization& knotParam) const;
+
+  /** \details
+    Gets the knot parametrization of the spline created with fit points and returns true if successful.
+
+    \param knotParam [out]  Receives the knot parametrization.
+
+    \note
+    Currently not implemented.
+  */
+   bool getFitKnotParameterization(OdGeKnotParameterization& knotParam) const;
+  
+  /** \details
+    Returns all the data that define the spline.
+    
+    \param degree [out]  Receives the degree of spline.
+    \param knots [out]  Receives the knot vector.
+    \param controlPoints [out]  Receives an array of 2D control points.
+    \param weights [out]  Receives an array of weights.
+    \param rational [out]  Receives true if and only if the spline is rational.
+    \param periodic [out]  Receives true true if and only if the spline is periodic.
+
+    \remarks
+    The weights array will be empty if the spline is not rational.
+  */
+  void getDefinitionData(
+    int& degree, 
+    bool& rational,
+    bool& periodic,
+    OdGeKnotVector& knots,
+    OdGePoint2dArray& controlPoints,
+    OdGeDoubleArray& weights) const;
+
+  /** \details
+    Returns the number of weights in the spline.
+    
+    \remarks
+    Feturns numControlPoints() if this spline is rational, 0 if it is not.
+  */
+  int numWeights() const;
+
+  /** \details
+    Returns the weight at the specified index.
+
+    \param weightIndex [in]  Weight index.
+  */
+  double weightAt(
+    int weightIndex) const;
+
+  /** \details
+    Returns the current evaluation mode.
+
+    \note
+    Currently not implemented.
+  */
+  bool evalMode() const;
+
+  /** \note
+    Currently not implemented.
+  */
+  bool getParamsOfC1Discontinuity(
+    OdGeDoubleArray& params,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \note
+    Currently not implemented.
+  */
+  bool getParamsOfG1Discontinuity(
+    OdGeDoubleArray& params,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Sets the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Fit point. 
+  */
+  bool setFitPointAt(
+    int index, 
+    const OdGePoint2d& point);
+  
+  /** \details
+    Returns true if and only if this spline was created with
+    fit data, and inserts the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Fit point. 
+  */
+  bool addFitPointAt(
+    int index, 
+    const OdGePoint2d& point);
+
+  /** \details
+    Removes a fit point with the specified index. The index must be greater than or equal to 0 and less than or equal to the number of fit points.
+
+    \param index [in]  The index of fit point that is to be removed.
+            
+    \note
+    Returns true if the fit point is successfully deleted and false otherwise.
+  */
+  bool deleteFitPointAt(
+    int index);
+
+  /** \details
+    Sets the fit tolerance that is used for interpolating fit points.
+
+    \param fitTol [in]  Geometric tolerance.
+            
+    \note
+    Returns true if the tolerance value is successfully set. false is returned if the spline doesn't contain fit data.
+  */
+  bool setFitTolerance(
+    const OdGeTol& fitTol = OdGeContext::gTol);
+
+  /** \details
+    Sets the fit tangents for this spline.
+    
+     \param startTangent [in]  Starting tangent.
+     \param endTangent [in]  Ending tangent.
+     
+    \note
+    Returns true if and only if this spline was constructed with fit data. 
+  */
+  bool setFitTangents(
+    const OdGeVector2d& startTangent,
+    const OdGeVector2d& endTangent);
+
+  /** \details
+    Sets the specified knot parameterization if the spline is created by fit points and returns true if the knot parameterization is successfully set.
+
+    \param knotParam [in]  The knot parameterization to be set.
+            
+    \note
+    Currently not implemented.
+  */
+  bool setFitKnotParameterization(OdGeKnotParameterization knotParam);
+
+  /** \details
+    Sets the fit data for this spline.
+    
+    \param fitPoints [in]  Interpolation points.
+    \param fitTol [in]  Geometric tolerance.
+    \param startTangent [in]  Starting tangent.
+    \param endTangent [in]  Ending tangent.
+  */
+  OdGeNurbCurve2d& setFitData(
+    const OdGePoint2dArray& fitPoints,
+    const OdGeVector2d& startTangent,
+    const OdGeVector2d& endTangent,
+    const OdGeTol& fitTol = OdGeContext::gTol);
+  OdGeNurbCurve2d& setFitData(
+    const OdGeKnotVector& fitKnots,
+    const OdGePoint2dArray& fitPoints,
+    const OdGeVector2d& startTangent,
+    const OdGeVector2d& endTangent,
+    const OdGeTol& fitTol = OdGeContext::gTol,
+    bool isPeriodic = false);
+  OdGeNurbCurve2d& setFitData(
+    int degree,
+    const OdGePoint2dArray& fitPoints,
+    const OdGeTol& fitTol = OdGeContext::gTol);
+
+  OdGeNurbCurve2d& setFitData(
+    const OdGePoint2dArray& fitPoints,                                             
+    const OdGeVector2d& startTangent, 
+    const OdGeVector2d& endTangent,
+    OdGeKnotParameterization knotParam,
+    const OdGeTol& fitTol = OdGeContext::gTol);
+
+
+  
+  /** \details
+    Deletes all the fit data used to construct this spline. 
+    Returns true if and only if the spline was constructed with fit data.
+
+    \remarks
+    The definition of the spline is unchanged. 
+  */
+  bool purgeFitData();
+
+  /** \details
+    Adds new knot to the spline knot array and returns reference to this spline object.
+
+    \param newKnot [in]  New knot.
+  */
+  OdGeNurbCurve2d& addKnot(
+    double newKnot);
+
+  /** \details
+    Inserts new knot to the spline knot array and returns reference to this spline object. If there is already such knot, then the multiplicity of the knot is increased by 1.
+
+    \param newKnot [in]  New knot.
+  */
+  OdGeNurbCurve2d& insertKnot(
+    double newKnot);
+
+  /** \details
+    Sets the weight at the specified control point.
+    
+    \param controlPointIndex [in]  Control point index.
+    \param weight [in]  The weight to be assigned to that control point.
+  */
+  OdGeSplineEnt2d& setWeightAt(
+    int controlPointIndex, 
+    double weight);
+
+  /** \details
+    Sets the evaluation mode.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeNurbCurve2d& setEvalMode(
+    bool evalMode = false);
+
+  /** \details
+    Joins the specified spline with this spline and returns a reference to the recomputed spline. 
+    Both splines must be open and the start point of the input spline must be equal to the endpoint of the initial spline.
+    
+    \param curve [in]  Spline to be joined with this spline.  
+  */
+  OdGeNurbCurve2d& joinWith(
+    const OdGeNurbCurve2d& curve);
+
+  /** \details
+    Trims the spline by the new start and end parameters, and returns a reference to the recalculated spline. 
+    
+    \param newStartParam [in]  New start parameter.  
+    \param newEndParam [in]  New end parameter.
+  */
+  OdGeNurbCurve2d& hardTrimByParams(
+    double newStartParam,
+    double newEndParam);
+
+  /** \details
+    Makes this spline rational.
+    
+    \param weight [in]  The weight to be assigned to each control point.
+    
+    \remarks
+    When called for a non-rational spline, this spline is made rational, and the specified weight is assigned to each control point.
+    
+    When called for a rational spline, the weight at each control point is multiplied by the specified weight. 
+  */
+  OdGeNurbCurve2d& makeRational(
+    double weight = 1.0);
+
+  /** \details
+    Makes the opened spline closed, and returns a reference to this spline. Closed spline is made by creating a smooth spline between the first and the end points and joining it with the initial spline. 
+    
+    \remarks
+    If this spline is already closed, then the method does nothing.
+  */
+  OdGeNurbCurve2d& makeClosed();
+
+  /** \details
+    Makes non-periodic spline periodic. 
+    
+    \note
+    Currently not implemented.
+  */
+  OdGeNurbCurve2d& makePeriodic();
+
+  /** \details
+    Makes periodic spline non-periodic. 
+    
+    \note
+    Currently not implemented.
+  */
+  OdGeNurbCurve2d& makeNonPeriodic();
+
+  /** \details
+    Makes closed spline open. 
+    
+    \note
+    Currently not implemented.
+  */
+  OdGeNurbCurve2d& makeOpen();
+
+  /** \details
+    Increases spline degree by the specified value and returns a reference to this spline object.
+    
+    \param plusDegree [in]  Degree increment value.
+        
+  */
+  OdGeNurbCurve2d& elevateDegree(
+    int plusDegree);
+
+  OdGeNurbCurve2d& operator =(
+    const OdGeNurbCurve2d& spline);
+
+  /** \details
+    Adds a control point at the specified knot.
+    
+    \param newKnot [in]  The knot parameter to add the control point at.
+    \param point [in]  Coordinates of the control point to be added.
+    \param weight [in] The weight to be assigned to the control point.
+    
+    \remarks
+    When called for a non-rational spline, weight is ignored.
+
+    \remarks
+    Currently not implemented.
+  */
+  bool addControlPointAt(double newKnot, const OdGePoint2d& point, double weight = 1.0);
+
+  /** \details
+    Deletes a control point at the specified index.
+    
+    \param index [in]  The index of the control point to be deleted.
+        
+    \remarks
+    Currently not implemented.
+  */
+  bool deleteControlPointAt(int index);
+
+
+  //////////////////////////////////////////////////////////////////////////
+  // Overrides :
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+    Returns true if and only if this spline intersects with the specified linear entity.
+    
+    \remarks
+    Returns the intersection points well as the parameters of this spline said points.  
+
+    \param line [in]  Any 2D linear entity.
+    \param pnts2D [out]  Receives an array of 2D points.
+    \param tol [in]  Geometric tolerance.
+    \param params [out]  Receives an array of parameters.
+  */
+  bool intersectWith(
+    const OdGeLine2d &line2d, 
+    OdGePoint2dArray &pnts2d, 
+    const OdGeTol& tol = OdGeContext::gTol, 
+    OdGeDoubleArray *params = NULL) const;
+
+  /** \details
+  Sets the parameters for this spline according to the arguments, 
+  and returns a reference to this spline.
+
+  \param degree [in]  Degree of spline.
+  \param knots [in]  Knot vector.
+  \param controlPoints [in]  Array of 2D control points.
+  \param weights [in]  Array of weights
+  \param isPeriodic [in]  True if and only if the spline is to be periodic (closed).
+
+  \remarks
+  * If weights is not specified, a non-rational spline is constructed. 
+  * If weights is specified, then a rational spline is constructed, and controlPoints.length() must equal weights.length()
+  * If isPeriodic is false, then knots.length() must equal controlPoints.length() + degree + 1
+  * If isPeriodic is true, then knots.length() must equal controlPoints.length(), the first and last controlPoints must 
+  be equal, and the first and last weights (if provided) must be equal.
+  */
+  void set(
+    int degree, 
+    const OdGeKnotVector& knots,
+    const OdGePoint2dArray& controlPoints, 
+    const OdGeDoubleArray& weights, 
+    bool isPeriodic = false);
+
+protected:
+  friend class OdDbGeEdgesDwgIO;
+  friend class OdDbGeEdgesDxfIO;
+
+  void set(int degree, const OdGeKnotVector& knots,
+    const OdGePoint2dArray& cntrlPnts,  const OdGeDoubleArray& weights, bool isPeriodic, 
+    const OdGePoint2dArray& fitPoints,
+    const OdGeVector2d& startTangent,
+    const OdGeVector2d& endTangent);
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve3d.h
new file mode 100755
index 0000000..2d7ad36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbCurve3d.h
@@ -0,0 +1,623 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GENURB3D_H
+#define OD_GENURB3D_H /*!DOM*/
+
+class OdGeEllipArc3d;
+class OdGeLineSeg3d;
+class OdGePolyline3d;
+class OdGeKnotVector;
+class OdGeNurbCurve3dImpl;
+
+#include "Ge/GeSplineEnt3d.h"
+#include "OdPlatformSettings.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents non-uniform rational B-splines (NURBS) in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeNurbCurve3d.html, Working with NURBS Curves>
+*/
+class GE_TOOLKIT_EXPORT OdGeNurbCurve3d : public OdGeSplineEnt3d
+{
+public:
+
+
+  /** \param degree [in]  Degree of spline.
+    \param knots [in]  Knot vector.
+    \param controlPoints [in]  Array of 3D control points.
+    \param weights [in]  Array of weights
+    \param isPeriodic [in]  True if and only if this spline is to be periodic.
+    \param fitPoints [in]  Interpolation points.
+    \param fitTol [in]  Geometric tolerance.
+    \param ellipse [in]  Any elliptical arc.
+    \param numSpans [in]  Number of knot spans in the curve.
+    \param lineSeg [in]  Any 3D line segment.
+    \param startTangent [in]  Starting tangent.
+    \param endTangent [in]  Ending tangent.
+    \param startTangentDefined [in]  If true, startTangent is used.
+    \param endTangentDefined [in]  If true, endTangent is used.
+    \param source [in]  Object to be cloned.
+    \param numControlPoints [in]  Number of control points.
+    \param numWeights [in]  Number of weights.
+    
+    \remarks
+    * If weights is not specified, a non-rational spline is constructed. 
+    * If weights is specified, then a rational spline is constructed, and controlPoints.length() must equal weights.length()
+    * If isPeriodic is false, then knots.length() must equal controlPoints.length() + degree + 1
+    * If isPeriodic is true, then knots.length() must equal controlPoints.length(), the first and last controlPoints must be equal
+      and the first and last weights (if provided) must be equal.
+    * If ellipse is specified, a curve identical to the ellipse is created.
+    * If lineSeg is specified, a curve identical to the line segment is created.
+  */
+  OdGeNurbCurve3d();
+  OdGeNurbCurve3d(
+    const OdGeNurbCurve3d& source);
+  OdGeNurbCurve3d(
+    int degree,
+    const OdGeKnotVector& knots,
+    const OdGePoint3dArray& controlPoints,
+    bool isPeriodic = false);
+  OdGeNurbCurve3d(
+    int degree,
+    const OdGeKnotVector& knots,
+    const OdGePoint3dArray& controlPoints,
+    const OdGeDoubleArray& weights,
+    bool isPeriodic = false);
+  // TD Special
+  OdGeNurbCurve3d(
+    int degree,
+    const OdGeKnotVector& knots,
+    const OdGePoint3d* controlPoints,
+    OdUInt32 numControlPoints,
+    const double* weights,
+    OdUInt32 numWeights,
+    bool isPeriodic = false);
+  //
+  OdGeNurbCurve3d(
+    int degree, 
+    const OdGePolyline3d& fitPolyline,
+    bool isPeriodic = false);
+  OdGeNurbCurve3d(
+    const OdGePoint3dArray& fitPoints,
+    const OdGeVector3d& startTangent,
+    const OdGeVector3d& endTangent,
+    bool startTangentDefined = true,
+    bool endTangentDefined = true,
+    const OdGeTol& fitTol = OdGeContext::gTol);
+  OdGeNurbCurve3d(
+    const OdGePoint3dArray& fitPoints,
+    const OdGeTol& fitTolerance = OdGeContext::gTol);
+  OdGeNurbCurve3d(
+    const OdGePoint3dArray& fitPoints,
+    const OdGeVector3dArray& fitTangents,
+    const OdGeTol& fitTolerance = OdGeContext::gTol,
+    bool isPeriodic = false);
+
+  OdGeNurbCurve3d(
+    const OdGePoint3dArray& fitPoints, 
+    const OdGeVector3d& startTangent, 
+    const OdGeVector3d& endTangent,
+    bool startTangentDefined,
+    bool endTangentDefined,
+    OdGeKnotParameterization knotParam,
+    const OdGeTol& fitTolerance = OdGeContext::gTol);
+  // numSpans - the number of knot spans in nurbs curve
+  // if numSpans == 0 (default) it is automatically calculated from 
+  // ellipse domain
+
+
+  OdGeNurbCurve3d(
+    const OdGeEllipArc3d& ellipse, 
+    int numSpans = 0);
+
+  OdGeNurbCurve3d(
+    const OdGeLineSeg3d& lineSeg);
+
+  /** \details
+    Returns the number of fit points.
+  */
+   int numFitPoints() const;
+
+  /** \details
+    Gets the knot parametrization of the spline created with fit points and returns true if successful.
+
+    \param knotParam [out]  Receives the knot parametrization.
+  */
+   bool getFitKnotParameterization(OdGeKnotParameterization& knotParam) const;
+
+  /** \details
+    Returns true if and only if  0 <= index < numFitPoints(),
+    and returns the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [out]  Receives the fit point. 
+  */
+   bool getFitPointAt(
+    int fitPointIndex, 
+    OdGePoint3d& point) const;
+
+  /** \details
+    Returns true if and only if this spline was constructed
+    with fit points, and gets the fit tolerance that is
+    used to construct this spline.
+    
+    \param fitTolerance [out]  Recieves the geometric tolerance.
+  */
+   bool getFitTolerance(
+    OdGeTol& fitTolerance) const;
+
+  /** Descripton:
+    Returns true if and only if this spline was constructed with fit data, and
+    returns the starting and ending tangents.
+    
+    \param startTangent [out]  Receives the starting tangent
+    \param endTangent [out]  Receives the ending tangent.
+    \param startTangentDefined [out]  Receives the if true, startTangent was used.
+    \param endTangentDefined [out]  Receives the if true, endTangent was used.
+  */
+   bool getFitTangents(
+    OdGeVector3d& startTangent,
+    OdGeVector3d& endTangent) const;
+   bool getFitTangents(
+    OdGeVector3d& startTangent,
+    OdGeVector3d& endTangent,
+    bool& startTangentDefined,
+    bool& endTangentDefined) const;
+
+  /** \details
+    Returns true if and only if this spline was constructed with fit data,
+    and returns all the fit data used to construct this spline.
+    
+    \param fitPoints [out]  Receives the onterpolation points.
+    \param fitTolerance [out]  Receives the geometric tolerance.
+    \param tangentsExist [out]  Receives true if and only if tangents were used in constructing this spline.
+    \param startTangent [out]  Receives the starting tangent
+    \param endTangent [out]  Receives the ending tangent.
+    \param knotParam [out]  Receives the knot parameterization.
+ 
+    \remarks
+    startTangent and endTangent are meaningful if and only if tangentsExist == true.
+  */
+   bool getFitData(
+    OdGePoint3dArray& fitPoints,
+    OdGeTol& fitTolerance,
+    bool& tangentsExist,
+    OdGeVector3d& startTangent,
+    OdGeVector3d& endTangent) const;
+
+   bool  getFitData(
+     OdGePoint3dArray& fitPoints,
+     OdGeTol& fitTolerance,
+     bool& tangentsExist,
+     OdGeVector3d& startTangent, 
+     OdGeVector3d& endTangent,
+     OdGeKnotParameterization& knotParam) const;
+
+  // NURBS data query functions
+
+  /** \details
+    Returns the data used to define this spline.
+
+    \param degree [out]  Receives the degree of spline.
+    \param periodic [out]  Receives true if and only if this spline is periodic.
+    \param rational [out]  Receives true if and only if this spline is rational.
+    \param knots [out]  Receives the knot vector.
+    \param controlPoints [out]  Receives an array of 3D control points.
+    \param weights [out]  Receives an array of weights
+    
+    \remarks
+    The weights array will be empty if the spline is not rational.
+  */
+   void getDefinitionData(
+    int& degree,
+    bool& rational,
+    bool& periodic,
+    OdGeKnotVector& knots,
+    OdGePoint3dArray& controlPoints,
+    OdGeDoubleArray& weights) const;
+
+  /** \details
+    Returns the number of weights in the spline.
+    
+    \remarks
+    Returns numCurves() if this spline is rational, 0 if it is not.
+  */
+   int numWeights() const;
+
+  /** \details
+    Returns the weight at the specified index.
+
+    \param weightIndex [in]  Weight index.
+  */
+   double weightAt(
+    int weightIndex) const;
+
+  /** \details
+    Returns the current evaluation mode.
+
+    \note
+    Currently not implemented.
+  */
+   bool evalMode() const;
+
+   /** \note
+    Currently not implemented.
+   */
+   bool getParamsOfC1Discontinuity(
+    OdGeDoubleArray& params,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+   /** \note
+    Currently not implemented.
+   */
+   bool getParamsOfG1Discontinuity(
+    OdGeDoubleArray& params,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  // Fit data edit functions
+
+  /** \details
+    Sets the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Fit point. 
+	
+    \note
+    Returns true if the fit point has successfully been set and false otherwise.
+  */
+   bool setFitPointAt(
+    int fitPointIndex, 
+    const OdGePoint3d& point);
+
+  /** \details
+    Returns true if and only if this spline was created with
+    fit data, and inserts the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Fit point. 
+  */
+   bool addFitPointAt(
+    int fitPointIndex, 
+    const OdGePoint3d& point);
+
+  /** \details
+    Adds a control point at the specified knot.
+    
+    \param newKnot [in]  The knot parameter to add the control point at.
+    \param point [in]  Coordinates of the control point to be added.
+    \param weight [in] The weight to be assigned to the control point.
+    
+    \remarks
+    When called for a non-rational spline, weight is ignored.
+	
+	  \note
+    Returns true if the control point has successfully been added and false otherwise.
+  */
+   bool addControlPointAt(double newKnot, const OdGePoint3d& point, double weight = 1.0);
+
+  /** \details
+    Deletes a control point at the specified index.
+    
+    \param index [in]  The index of the control point to be deleted.
+	
+	  \note
+    Returns true if the control point has successfully been deleted and false otherwise.
+  */
+   bool deleteControlPointAt(int index);
+
+  /** \details
+    Removes a fit point with the specified index. The index must be greater than or equal to 0 and less than or equal to the number of fit points.
+
+    \param index [in]  The index of fit point that is to be removed.
+            
+    \note
+    Returns true if the fit point is successfully deleted and false otherwise.
+  */
+   bool deleteFitPointAt(
+    int fitPointIndex);
+
+  /** \details
+    Sets the specified knot parameterization if the spline is created by fit points and returns true if the knot parameterization has successfully been set.
+
+    \param knotParam [in]  The knot parameterization to be set.
+  */
+   bool setFitKnotParameterization(OdGeKnotParameterization knotParam);
+
+  /** \details
+    Sets the fit tolerance that is used for interpolating fit points.
+
+    \param fitTol [in]  Geometric tolerance.
+            
+    \note
+    Returns true if and only if this spline was constructed with fit data.
+  */
+   bool setFitTolerance(
+    const OdGeTol& fitTol = OdGeContext::gTol);
+
+  /** \details
+    Sets the fit tangents for this spline.
+    
+     \param startTangent [in]  Starting tangent.
+     \param endTangent [in]  Ending tangent.
+     \param startTangentDefined [in]  Defines if the specified value of starting tangent is to be used.
+     \param endTangentDefined [in]  Defines if the specified value of starting tangent is to be used.
+
+    \note
+    Returns true if and only if this spline was constructed with fit data. 
+  */
+   bool setFitTangents(
+    const OdGeVector3d& startTangent,
+    const OdGeVector3d& endTangent);
+   bool setFitTangents(
+    const OdGeVector3d& startTangent,
+    const OdGeVector3d& endTangent,
+    bool startTangentDefined,
+    bool endTangentDefined);
+
+  /** \details
+    Sets the fit data for this spline.
+    
+    \param fitPoints [in]  Interpolation points.
+    \param fitTol [in]  Geometric tolerance.
+    \param startTangent [in]  Starting tangent.
+    \param endTangent [in]  Ending tangent.
+    \param fitKnots [in] Fit knots.
+
+    \remarks
+    The signature with fitKnots parameter currently is not implemented.
+  */
+  OdGeNurbCurve3d& setFitData(
+    const OdGePoint3dArray& fitPoints,
+    const OdGeVector3d& startTangent,
+    const OdGeVector3d& endTangent,
+    const OdGeTol& fitTol = OdGeContext::gTol);
+
+  OdGeNurbCurve3d& setFitData(
+    const OdGeKnotVector& fitKnots,
+    const OdGePoint3dArray& fitPoints,
+    const OdGeVector3d& startTangent,
+    const OdGeVector3d& endTangent,
+    const OdGeTol& fitTol = OdGeContext::gTol,
+    bool isPeriodic = false);
+
+   OdGeNurbCurve3d& setFitData(
+    int degree,
+    const OdGePoint3dArray& fitPoints,
+    const OdGeTol& fitTol = OdGeContext::gTol);
+
+   OdGeNurbCurve3d& setFitData(
+     const OdGePoint3dArray& fitPoints,                                             
+     const OdGeVector3d& startTangent, 
+     const OdGeVector3d& endTangent,
+     OdGeKnotParameterization knotParam,
+     const OdGeTol& fitTol = OdGeContext::gTol);
+
+  
+  /** \details
+    Purges the fit data defining this spline.
+    
+    \remarks
+    The fit data consists of the fit points, fit tolerance,
+    start tangent, and end tangent.
+  */
+   bool purgeFitData();
+
+  /** \details
+    Adds new knot to the spline knot array and returns reference to this spline object.
+
+    \param newKnot [in]  New knot.
+  */
+   OdGeNurbCurve3d& addKnot(double newKnot);
+
+
+  /** \details
+    Inserts new knot to the spline knot array and returns reference to this spline object. If there is already such knot, then the multiplicity of the knot is increased by 1.
+
+    \param newKnot [in]  New knot.
+  */
+   OdGeNurbCurve3d& insertKnot(double newKnot);
+
+  /** \details
+    Sets the weight at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param weight [in]  Weight at the specified fit point. 
+  */
+   OdGeSplineEnt3d& setWeightAt(
+    int fitPointIndex, 
+    double weight);
+
+  /** \details
+    Sets the evaluation mode.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeNurbCurve3d& setEvalMode(
+    bool evalMode = false);
+
+  /** \details
+    Joins the specified spline with this spline and returns a reference to the recomputed spline. 
+    Both splines must be open and the start point of the input spline must be equal to the endpoint of the initial spline.
+    
+    \param curve [in]  Spline to be joined with this spline.  
+  */
+   OdGeNurbCurve3d& joinWith(
+    const OdGeNurbCurve3d& curve);
+
+  /** \details
+    Trims the spline by the new start and end parameters, and returns a reference to the recalculated spline. 
+    
+    \param newStartParam [in]  New start parameter.  
+    \param newEndParam [in]  New end parameter.
+  */
+   OdGeNurbCurve3d& hardTrimByParams(
+    double newStartParam,
+    double newEndParam);
+
+  /** \details
+    Makes this spline rational (if it is not), and returns a reference to this spline.
+    
+    \param weight [in]  Weight to be applied to each control point. 
+    
+    \remarks
+    If this spline was already rational, the weight at each control point is multiplied by the
+    specified weight.
+  */
+   OdGeNurbCurve3d& makeRational(
+    double weight = 1.0);
+
+  /** \details
+    Makes the opened spline closed, and returns a reference to this spline. Closed spline is made by creating a smooth spline between the first and the end points and joining it with the initial spline. 
+    
+    \remarks
+    If this spline is already closed, then the method does nothing.
+  */
+   OdGeNurbCurve3d& makeClosed();
+
+  /** \details
+    Makes non-periodic spline periodic. 
+    
+    \note
+    Currently not implemented.
+  */
+   OdGeNurbCurve3d& makePeriodic();
+
+  /** \details
+    Makes periodic spline non-periodic. 
+    
+    \note
+    Currently not implemented.
+  */
+   OdGeNurbCurve3d& makeNonPeriodic();
+
+  /** \details
+    Makes closed spline open. 
+    
+    \note
+    Currently not implemented.
+  */
+   OdGeNurbCurve3d& makeOpen();
+
+   /** \details
+    Increases spline degree by the specified value and returns a reference to this spline object.
+    
+    \param plusDegree [in]  Degree increment value.
+   */
+  OdGeNurbCurve3d& elevateDegree(int plusDegree);
+
+  // Assignment operator.
+  OdGeNurbCurve3d& operator =(
+    const OdGeNurbCurve3d& spline);
+
+  ///////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  TD_USING(OdGeSplineEnt3d::evalPoint);
+
+  // This is only for internal use
+  /*!DOM*/
+   OdGePoint3d evalPoint(
+    double param, 
+    int hint) const;  
+
+  // This is need in surface (for rational case only)
+  /*!DOM*/
+  void evalPointDivider(
+    double param, 
+    OdGePoint3d& point, 
+    double& divider, 
+    int hint) const;
+
+  // NURBS data edit functions
+  
+  /** \details
+    Sets the parameters for this spline according to the arguments. 
+
+    \param degree [in]  Degree of spline.
+    \param knots [in]  Knot vector.
+    \param controlPoints [in]  Array of 3D control points.
+    \param weights [in]  Array of weights
+    \param isPeriodic [in]  True if and only if this spline is to be periodic.
+    
+    \remarks
+    Returns a reference to this spline.
+    
+    * A rational spline is constructed, and controlPoints.length() must equal weights.length()
+    * If isPeriodic is false, then knots.length() must equal controlPoints.length() + degree + 1
+    * If isPeriodic is true, then knots.length() must equal controlPoints.length(), the first and last controlPoints must be equal
+      and the first and last weights (if provided) must be equal.
+  */
+   void set(
+    int degree,
+    const OdGeKnotVector& knots,
+    const OdGePoint3dArray& controlPoints,
+    const OdGeDoubleArray& weights,
+    bool isPeriodic = false);
+
+   /** \details
+    Calculates fit data for the spline constructed by control points. 
+        
+    \remarks
+    Currently the method calculates fit data only for NURB curves of degree less than or equal to three.  
+
+    \note
+    Returns true if and only if fit data have successfully been calculated.
+   */
+   bool buildFitData(OdGeKnotParameterization knotParam = OdGe::kChord);
+   
+protected:
+   /** \details
+    Modifies the position and tangent of the point with a specified parameter.
+
+    \param param [in]  Parameter value of the point.
+    \param point [in]  New position of the point.
+    \param deriv [in]  New value of the tangent vector at the point.
+           
+    \note
+    Returns true if and only if the point has successfully been adjusted.
+   */
+   bool modifyPositionAndTangent(double param, const OdGePoint3d& point, const OdGeVector3d* deriv);
+   void makeClosedFit();
+   
+protected:
+
+  void setData(int degree, const OdGePoint3dArray& controlPoints, const OdGeKnotVector& knots, const OdGeDoubleArray& weights
+    , const OdGePoint3dArray& fitPoints, const OdGeVector3d& startTangent, const OdGeVector3d& endTangent
+    , bool isStartTangentDefined, bool isEndTangentDefined, bool isPeriodic, const OdGeTol& fitTol);
+
+   void setKnotTolerance(double tol);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GENURB3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbSurface.h
new file mode 100755
index 0000000..e72fdb8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeNurbSurface.h
@@ -0,0 +1,336 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GENURBSF_H
+#define OD_GENURBSF_H /*!DOM*/
+
+#include "Ge/GeSurface.h"
+#include "Ge/GeKnotVector.h"
+#include "OdPlatformSettings.h"
+#include "TD_PackPush.h"
+
+class OdGeNurbCurve3d;
+
+static const int derivArraySize = 3;
+/**
+    \details
+    Defines VectorDerivArray type.
+*/
+typedef OdGeVector3d VectorDerivArray[derivArraySize][derivArraySize];
+/**
+    \details
+    Defines the WDerivArray type.
+*/
+typedef double WDerivArray [derivArraySize][derivArraySize];
+
+/** \details
+    This class represents non-uniform, rational B-Spline (NURBS) surfaces.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeNurbSurface.html, Working with NURBS Surfaces>
+*/
+class GE_TOOLKIT_EXPORT OdGeNurbSurface : public OdGeSurface
+{
+public:
+
+
+  /** \param degreeInU [in]  Degree in the U direction. 
+    \param degreeInV [in]  Degree in the V direction.
+    \param propsInU [in]  Properties in the U direction.
+    \param propsInV [in]  Properties in the V direction.
+    \param numControlPointsInU [in]  Number of control points in the U direction.
+    \param numControlPointsInV [in]  Number of control points in the V direction.
+    \param controlPoints [in]  Array of 3D control points.
+    \param weights [in]  Array of weights
+    \param uKnots [in]  Knot vector in the U direction.
+    \param vKnots [in]  Knot vector in the V direction.
+    \param tol [in]  Geometric tolerance.
+    \param source [in]  Object to be cloned.
+   
+    \remarks
+    propsInU and propsInV utilize OdGe::NurbSurfaceProperties values.
+  */
+  OdGeNurbSurface();
+  OdGeNurbSurface(
+    int degreeInU, 
+    int degreeInV, 
+    int propsInU, 
+    int propsInV,
+    int numControlPointsInU, 
+    int numControlPointsInV,
+    const OdGePoint3dArray& controlPoints,
+    const OdGeDoubleArray& weights,
+    const OdGeKnotVector& uKnots,
+    const OdGeKnotVector& vKnots,
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeNurbSurface(
+    const OdGeNurbSurface& source);
+
+  OdGeNurbSurface& operator =(
+    const OdGeNurbSurface& nurb);
+
+  
+  /** \details
+    Returns true if and only if this surface is rational in the U direction.
+
+    \param tol [in]  Geometric tolerance.
+  */
+     bool isRationalInU() const;
+
+  /** \details
+    Returns true if and only if this surface is periodic in the U direction, and returns the period.
+
+    \param period [in]  Period.
+  */
+     bool isPeriodicInU(double& period) const;
+
+  /** \details
+    Returns true if and only if this surface is rational in the V direction.
+
+    \param tol [in]  Geometric tolerance.
+  */
+     bool isRationalInV() const;
+
+  /** \details
+    Returns true if and only if this surface is periodic in the U direction, and returns the period.
+
+    \param period [in]  Period.
+  */
+     bool isPeriodicInV(double& period) const;
+  
+  /** \details
+    Returns a description of the singularity in the U direction:
+    
+    \remarks
+    singularityInU utilizes OdGe::NurbSurfaceProperties values.
+  */
+   int singularityInU() const;
+
+  /** \details
+    Returns a description of the singularity in the V direction:
+    
+    \remarks
+    singularityInV utilizes OdGe::NurbSurfaceProperties values.
+  */
+   int singularityInV() const;
+
+  /** Desctiption:
+    Returns the degree in the U direction.
+  */
+   int degreeInU() const;
+
+  /** \details
+    Returns the number of control points in the U direction.
+  */
+   int numControlPointsInU() const;
+  
+  /** \details
+    Returns the degree in the V direction.
+  */
+   int degreeInV() const;
+  
+  /** \details
+    Returns the number of control points in the V direction.
+  */
+   int numControlPointsInV() const;
+
+  /** \details
+    Returns the array of control points.
+    
+    \param controlPoints [out] Receives an array of 3D control points.
+  */
+     void getControlPoints(
+    OdGePoint3dArray& controlPoints) const;
+    
+  /** \details
+    Returns the array of weights.
+    
+    \param weights [in]  Array of weights
+  */
+     bool getWeights(
+    OdGeDoubleArray& weights) const;
+  
+  /** \details
+    Returns the number of knots in the U direction.
+  */
+     int numKnotsInU() const;
+  
+  /** \details
+    Returns the knot vector in the U direction.
+    
+    \param uKnots [in]  Knot vector in the U direction.
+  */
+   void getUKnots(
+    OdGeKnotVector& uKnots) const;
+  
+  /** \details
+    Returns the number of knots in the V direction.
+  */
+     int numKnotsInV() const;
+  
+  /** \details
+    Returns the knot vector in the V direction.
+    
+    \param vKnots [in]  Knot vector in the V direction.
+  */
+   void getVKnots(
+    OdGeKnotVector& vKnots) const;
+    
+  /** \details
+    Returns the data used to define this surface.
+    
+    \param degreeInU [out]  Receives the Degree in the U direction. 
+    \param degreeInV [out]  Receives the Degree in the V direction.
+    \param propsInU [out]  Receives the properties in the U direction.
+    \param propsInV [out]  Receives the properties in the V direction.
+    \param numControlPointsInU [out]  Receives the number of control points in the U direction.
+    \param numControlPointsInV [out]  Receives the number of control points in the V direction.
+    \param controlPoints [out]  Receives an array of 3D control points.
+    \param weights [out]  Receives an array of weights
+    \param uKnots [out]  Receives the knot vector in the U direction.
+    \param vKnots [out]  Receives the knot vector in the V direction.
+   
+    \remarks
+    propsInU and propsInV utilize OdGe::NurbSurfaceProperties values.
+  */
+     void getDefinition(
+    int& degreeInU, 
+    int& degreeInV,
+    int& propsInU, 
+    int& propsInV,
+    int& numControlPointsInU,
+    int& numControlPointsInV,
+    OdGePoint3dArray& controlPoints,
+    OdGeDoubleArray& weights,
+    OdGeKnotVector& uKnots,
+    OdGeKnotVector& vKnots) const;
+
+  /** \details
+    Sets the parameters for this spline according to the arguments, 
+    and returns a reference to this spline.
+
+    \param degreeInU [in]  Degree in the U direction. 
+    \param degreeInV [in]  Degree in the V direction.
+    \param propsInU [in]  Properties in the U direction.
+    \param propsInV [in]  Properties in the V direction.
+    \param numControlPointsInU [in]  Number of control points in the U direction.
+    \param numControlPointsInV [in]  Number of control points in the V direction.
+    \param controlPoints [in]  Array of 3D control points.
+    \param weights [in]  Array of weights
+    \param uKnots [in]  Knot vector in the U direction.
+    \param vKnots [in]  Knot vector in the V direction.
+    \param tol [in]  Geometric tolerance.
+    \param source [in]  Object to be cloned.
+   
+    \remarks
+    propsInU and propsInV utilize OdGe::NurbSurfaceProperties values.
+  */
+   OdGeNurbSurface& set(
+    int degreeInU, 
+    int degreeInV,
+    int propsInU, 
+    int propsInV,
+    int numControlPointsInU,
+    int numControlPointsInV,
+    const OdGePoint3dArray& controlPoints,
+    const OdGeDoubleArray& weights,
+    const OdGeKnotVector& uKnots,
+    const OdGeKnotVector& vKnots,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  // computes isolines
+  
+  /** \details
+    Returns the isoline for the specified value of V.
+    Not implemented for third-party use only.
+
+    \param V [in]  Value of V.
+    \param isoline [out]  Receives the isoline for the specified value of V. 
+  */
+  void computeVIsoLine(
+    double V, 
+    OdGeNurbCurve3d& isoline) const;
+
+  /** \details
+    Returns the isoline for the specified value of U.
+    Not implemented for third-party use only.
+
+    \param V [in]  Value of U.
+    \param isoline [out]  Receives the isoline for the specified value of U. 
+  */
+   void computeUIsoLine(
+    double U, 
+    OdGeNurbCurve3d& isoline) const;
+
+     /** \details
+    Returns the 2D pair of parameter values of a point on this surface.
+
+    \param point [in]  Point to be evaluated.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    The returned parameters specify a point within tol of point.
+    If point is not on this surface, the results are unpredictable.
+    If you are not sure the point is on this surface, use 
+    isOn() instead of this function. This method is slower than paramOf, 
+    but more accurate.
+     */
+   OdGePoint2d paramOfPrec(
+    const OdGePoint3d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   
+
+  /** \details
+    Returns the derivatives at the point specified by param.
+	Not implemented for third-party use only.
+
+    \param param [in]  Parameter to be evaluated.
+    \param numDeriv [in]  Number of derivatives to be computed.
+    \param derivatives [out]  Receives an array of derivatives at the point corresponding to param.
+  */
+  bool getDerivativesAt(
+    const OdGePoint2d& param, 
+    OdUInt32 numDeriv,
+    VectorDerivArray derivatives) const;
+
+  // the index in "m_controlPoints" of control *point* (i,j):
+
+  /*!DOM*/
+   int loc(
+    int i, 
+    int j) const;
+
+protected:
+  void calculateNURBSProperties();
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GENURBSF_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve2d.h
new file mode 100755
index 0000000..1242a42
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve2d.h
@@ -0,0 +1,127 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_OFFSET_CURVE_2D_H
+#define OD_GE_OFFSET_CURVE_2D_H /*!DOM*/
+
+#include "Ge/GeCurve2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents 2D curves that are exact offsets of other curves.
+
+    \remarks
+    Every GeOffsetCurve2d contains a pointer to the curve from which it is offest.
+    Modifying the base curve modifies the offset curve. Modifying the offset curve
+    does not modify the base curve. setInterval() for an offset curve result create a curve that
+    is an offset of the specified interval in the base curve.
+
+    This curve may be self-intersecting, even if the base curve is not.
+
+    Positive offset distances at any point on the base curve are defined as 90� counterclockwise
+    from the tangent of the base curve at that point.
+
+    An offset curve with a 0.0 offset distance is exact replica of the base curve. An offseet curve with
+    a non-zero 0.0 offset distance has a continuity of one less than that of the base curve. 
+    To insure that the offset curve is a valid curve, the base curve must have a continuity
+    of at least 1.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeOffsetCurve3d.html, Working with Offset Curves>
+*/
+class GE_TOOLKIT_EXPORT OdGeOffsetCurve2d : public OdGeCurve2d
+{
+public:
+  
+
+  /** \param baseCurve [in]  Any 2D curve.
+    \param offsetDistance [in]  Offset distance.
+    \param source [in]  Object to be cloned.
+  */
+  OdGeOffsetCurve2d(
+    const OdGeCurve2d& baseCurve, 
+    double offsetDistance);
+  OdGeOffsetCurve2d(
+    const OdGeOffsetCurve2d& source);
+
+  /** \details
+    Returns the base curve. 
+  */
+  const OdGeCurve2d* curve() const;
+
+  /** \details
+    Returns the offset distance of this curve. 
+  */
+  double offsetDistance() const;
+
+  /** \details
+    Returns true if and only if this curve has the same parameter direction as the base curve.
+
+    \note
+    Currently not implemented.
+  */
+  bool paramDirection() const;
+
+  /** \details
+    Returns the concatenation of the transformation matrices applied to this curve with transformBy(). 
+
+    \remarks
+    If no transformation matrices have been applied to this curve, returns the identity matrix.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeMatrix2d transformation() const;
+
+  /** \details
+    Sets the base curve for this curve.
+
+    \param baseCurve [in]  Any 2D curve.
+  */
+  OdGeOffsetCurve2d& setCurve(
+    const OdGeCurve2d& baseCurve);
+
+  /** \details
+    Sets the offset distance for this curve.
+
+    \param offsetDistance [in]  Offset distance.
+  */
+  OdGeOffsetCurve2d& setOffsetDistance(
+    double distance);
+
+  OdGeOffsetCurve2d& operator = (
+    const OdGeOffsetCurve2d& offsetCurve);
+
+ 
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special overrides :
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_OFFSET_CURVE_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve3d.h
new file mode 100755
index 0000000..ccc794d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetCurve3d.h
@@ -0,0 +1,135 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEOFFC3D_H
+#define OD_GEOFFC3D_H /*!DOM*/
+
+#include "Ge/GeCurve3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents 3D curves that are exact offsets of other curves.
+
+    \remarks
+    Every GeOffsetCurve2d contains a pointer to the curve from which it is offest.
+    Modifying the base curve modifies the offset curve. Modifying the offset curve
+    does not modify the base curve. setInterval() for an offset curve result create a curve that
+    is an offset of the specified interval in the base curve.
+
+    This curve may be self-intersecting, even if the base curve is not. To create offset
+    curves that are not self-intersecting, use OdGeCurve3d::getTrimmedOffset().
+
+    The base curve must be planar, and a normal to the plane must be specified.
+    Positive offset distances at any point on the base curve are defined as 90� counterclockwise
+    from the tangent of the base curve at that point.
+
+    An offset curve with a 0.0 offset distance is exact replica of the base curve. An offseet curve with
+    a non-zero 0.0 offset distance has a continuity of one less than that of the base curve. 
+    To insure that the offset curve is a valid curve, the base curve must have a continuity
+    of at least 1.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeOffsetCurve3d : public OdGeCurve3d
+{
+public:
+  /** \param planeNormal [in]  A normal to the plane of the base curve.
+    \param baseCurve [in]  Any 3D curve.
+    \param offsetDistance [in]  Offset distance.
+    \param source [in]  Object to be cloned.
+  */
+  OdGeOffsetCurve3d(
+    const OdGeCurve3d& baseCurve, 
+    const OdGeVector3d& planeNormal,
+    double offsetDistance);
+  OdGeOffsetCurve3d(
+    const OdGeOffsetCurve3d& source);
+
+  /** \details
+    Returns the base curve. 
+  */
+   const OdGeCurve3d* curve() const;
+
+  /** \details
+    Returns the normal to the base curve as a unit vector. 
+  */
+   OdGeVector3d normal() const; 
+
+  /** \details
+    Returns the offset distance of this curve. 
+  */
+   double offsetDistance() const;
+
+  /** \details
+    Returns true if and only if this curve has the same parameter direction as the base curve.
+
+    \note
+    Currently not implemented.
+  */
+   bool paramDirection() const;
+
+  /** \details
+    Returns the concatination of the transformation matrices applied to this curve with transformBy(). 
+
+    \remarks
+    If no transformation matrices have been applied to this curve, returns the indentity matrix.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeMatrix3d transformation() const;
+
+  /** \details
+    Sets the base curve for this curve.
+
+    \param baseCurve [in]  Any 3D curve.
+  */
+   OdGeOffsetCurve3d& setCurve(
+    const OdGeCurve3d& baseCurve);
+
+  /** \details
+    Sets the normal to the plane of the base curve.
+
+    \param planeNormal [in]  A normal to the plane of the base curve.
+  */
+   OdGeOffsetCurve3d& setNormal(
+    const OdGeVector3d& planeNormal);
+
+  /** \details
+    Sets the offset distance for this curve.
+
+    \param offsetDistance [in]  Offset distance.
+  */
+   OdGeOffsetCurve3d& setOffsetDistance(
+    double offsetDistance);
+
+  OdGeOffsetCurve3d&  operator =(
+    const OdGeOffsetCurve3d& offsetCurve);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEOFFC3D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetSurface.h
new file mode 100755
index 0000000..d7e8a26
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeOffsetSurface.h
@@ -0,0 +1,167 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEOFFSF_H
+#define OD_GEOFFSF_H /*!DOM*/
+
+#include "Ge/GeSurface.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents surfaces that are exact offsets of other surfaces.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeOffsetSurface : public OdGeSurface
+{
+public:
+
+
+  /** \param source [in]  Object to be cloned.
+    \param baseSurface [in]  Any surface.
+    \param offsetDistance [in]  Offset distance.
+    \param makeCopy [in]  Makes a copy of baseSurface.
+
+    \remarks
+    Without arguments, the constructor sets the base surface pointer to NULL, and the offset distance to 0.0.
+  */
+  OdGeOffsetSurface();
+  OdGeOffsetSurface(
+    OdGeSurface* baseSurface,
+    double offsetDistance,
+    bool makeCopy = true);
+  OdGeOffsetSurface(
+    const OdGeOffsetSurface& source);
+
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGePlanarEnt. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isPlane() const;
+  
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGeBoundedPlane. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isBoundedPlane() const;
+  
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGeSphere. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isSphere() const;
+  
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGeCylinder. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isCylinder() const;
+  
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGeCone. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isCone() const;
+   
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGeEllipCylinder. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isEllipCylinder() const;
+  
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGeEllipCone. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isEllipCone() const;
+  
+  /** \details
+    Return true if and only if the offset surface can be represented as an OdGeTorus. 
+
+    \note
+    Currently not implemented.
+  */
+   bool isTorus() const;
+  
+  /** \details
+    Creates a copy of this surface as an OdGeSurface, and returns a pointer to the new surface.
+    
+    \param simpleSurface [out]  Receives the OdGeSurface. 
+  */
+   bool getSurface(
+    OdGeSurface*& simpleSurface) const;
+
+  /** \details
+    Returns the base surface.
+    
+    \param baseSurface [out]  Receives base surface.
+  */
+   void getConstructionSurface(
+    OdGeSurface*& baseSurface) const;
+
+  /** \details
+    Returns the offset distance of this surface. 
+  */
+   double offsetDist() const;
+
+  /** \details
+    Sets the parameters for this surface according to the arguments.
+
+    \param baseSurface [in]  Any surface.
+    \param offsetDistance [in]  Offset distance.
+    \param makeCopy [in]  Makes a copy of baseSurface.
+    
+    \remarks
+    Returns a reference to this surface.
+  */
+   OdGeOffsetSurface& set(
+    OdGeSurface* baseSurface, 
+    double offsetDistance,
+    bool makeCopy = true);
+
+  OdGeOffsetSurface& operator =(
+    const OdGeOffsetSurface& surface);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEOFFSF_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlanarEnt.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlanarEnt.h
new file mode 100755
index 0000000..0690f9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlanarEnt.h
@@ -0,0 +1,252 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEPLANAR_H
+#define OD_GEPLANAR_H /*!DOM*/
+
+#include "Ge/GeSurface.h"
+#include "Ge/GeInterval.h"
+#include "OdPlatformSettings.h"
+
+class OdGeLinearEnt3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all OdGe planes in 3D space.
+
+    \remarks
+    A parametric point on the plane with parameters u and v maps to the point S(u,v) as follows
+
+              S(u,v) = originOfPlanarEntity + (u * uAxis) + (v * vAxis)
+
+    uAxis and vAxis need not be either normalized or perpendicular, but they must
+    not be colinear.
+
+    <table>
+    Parameter       Description                                   Computed as
+    origin        Origin of plane.                            origin              
+    axis1           A unit vector in the plane.                 uAxis.normal()                        
+    axis2           A unit vector perpendicular to the plane.   uAxis.crossProduct(vAxis).normal()   
+    </table>
+
+    The plane equation for a plane is as follows
+
+              a * X + b * Y + c * Z + d = 0
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGePlanarEnt : public OdGeSurface
+{
+public:
+
+
+  /** \details
+    Returns true and the intersection with the specified linear entity,
+    if and only if the specified linear entity intersects with this plane.
+
+    \param line [in]  Any 3D linear entity.
+    \param point [out]  Receives the point of intersection. 
+    \param tol [in]  Geometric tolerance.
+  */
+   bool intersectWith(
+    const OdGeLinearEnt3d& line, 
+    OdGePoint3d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this plane that is closest to the specified linear entity, 
+	and the point on the linear entity that is closest to this plane.
+
+    \param line [in]  Any 3D linear entity.
+    \param pointOnLine [out]  Receives the closest point on the linear entity.
+    \param tol [in]  Geometric tolerance.
+  */
+   OdGePoint3d closestPointToLinearEnt(
+    const OdGeLinearEnt3d& line,
+    OdGePoint3d& pointOnLine, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this plane that is closest to the specified plane, and the point
+    on the specified plane that is closest to this plane.
+
+    \param plane [in]  Any plane.
+    \param pointOnOtherPlane [out]  Receives the closest point on the plane.
+    \param tol [in]  Geometric tolerance.
+  */
+   OdGePoint3d closestPointToPlanarEnt(
+    const OdGePlanarEnt& plane,
+    OdGePoint3d& pointOnOtherPlane, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified entity is parallel to this one.
+
+    \param line [in]  Any 3D linear entity.
+    \param plane [in]  Any plane.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isParallelTo(
+    const OdGeLinearEnt3d& line, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool isParallelTo(
+    const OdGePlanarEnt& plane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified entity is perpendicular to this one.
+
+    \param line [in]  Any 3D linear entity.
+    \param plane [in]  Any plane.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isPerpendicularTo(
+    const OdGeLinearEnt3d& line,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool isPerpendicularTo(
+    const OdGePlanarEnt& plane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only 
+    the specified plane is colinear with this one.
+
+    \param plane [in]  Any plane.
+    \param tol [in]  Geometric tolerance.
+  */
+   bool isCoplanarTo(
+    const OdGePlanarEnt& plane,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the parameters of this plane.
+
+    \param origin [in]  The origin of this plane.
+    \param uAxis [in]  The U-axis.
+    \param vAxis [in]  The V-axis.
+    \param uPnt [in]  A point at the end of the U-axis.
+    \param vPnt [in]  A point at the end of the V-axis.
+
+    \remarks
+    The U-axis and V-axis cannot be colinear, and are defined as follows
+
+            uAxis=uPnt-origin
+            vAxis=vPnt-origin
+  */
+   void get(
+    OdGePoint3d& origin, 
+    OdGeVector3d& uAxis, 
+    OdGeVector3d& vAxis) const;
+   void get(
+    OdGePoint3d& uPnt, 
+    OdGePoint3d& origin, 
+    OdGePoint3d& vPnt) const;
+
+  /** \details
+    Returns an arbitrary point on the plane.
+  */
+   OdGePoint3d pointOnPlane() const;
+
+  /** \details
+    Returns the normal to the plane as a unit vector. 
+  */
+   OdGeVector3d normal() const;
+
+  /** \details
+    Returns the coefficients of the plane equation for this plane.
+
+    \param a [out]  Receives the coefficient a.
+    \param b [out]  Receives the coefficient b.
+    \param c [out]  Receives the coefficient c.
+    \param d [out]  Receives the coefficient d.
+
+    \remarks
+    The plane equation for this plane is as follows
+
+            a * x + b * y + c * z + d = 0
+  */
+   void getCoefficients(
+    double& a, 
+    double& b, 
+    double& c, 
+    double& d) const;
+
+  /** \details
+    Returns the orthonormal canonical coordinate system of this plane.
+
+    \param origin [out]  Receives the origin of this plane
+    \param axis1 [out]  Receives a unit vector in the plane.
+    \param axis2 [out]  Receives a unit vector perpendicular to the plane.
+
+    \remarks
+    The orthonormal canonical coordinate system associated with a plane defined follows
+
+    <table>
+    Parameter       Description                                           Computed as
+    origin        Origin of plane.                                    origin              
+    axis1           A unit vector in the plane.                         uAxis.normal()                        
+    axis2           A unit vector in the plane perpendicular to axis1.  normal.crossProduct(axis1)   
+    </table>
+  */
+   void getCoordSystem(
+    OdGePoint3d& origin, 
+    OdGeVector3d& axis1, 
+    OdGeVector3d& axis2) const;
+
+  OdGePlanarEnt& operator =(
+    const OdGePlanarEnt& plane);
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+    Returns projP and true,
+    if and only if there is a point on this surface, projP, where
+    the this surface normal or unitDir (if specified) passes through the point p.
+
+    \param p [in]  Any 3D point.
+    \param projP [out]  Receives the point on the plane.
+    \param unitDir [in]  Unit vector specifying the projection direction.
+    \param tol [in]  Geometric tolerance.
+  */
+  TD_USING(OdGeSurface::project);
+   bool project(
+    const OdGePoint3d& p, 
+    const OdGeVector3d& unitDir, 
+    OdGePoint3d& projP, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  //////////////////////////////////////////////////////////////////////////
+
+protected:
+  OdGePlanarEnt();
+  OdGePlanarEnt(const OdGePlanarEnt& plane);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEPLANAR_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlane.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlane.h
new file mode 100755
index 0000000..5d45d62
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePlane.h
@@ -0,0 +1,193 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEPLANE_H
+#define OD_GEPLANE_H /*!DOM*/
+
+#include "Ge/GePlanarEnt.h"
+#include "TD_PackPush.h"
+
+class OdGeBoundedPlane;
+class OdGeLine3d;
+class OdGeLineSeg3d;
+
+/** \details
+    This class represents infinite planes in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGePlane.html, Working with Planes>
+*/
+class GE_TOOLKIT_EXPORT OdGePlane : public OdGePlanarEnt
+{
+public:
+
+
+  GE_STATIC_EXPORT static const OdGePlane kXYPlane; // XY *plane*.
+  GE_STATIC_EXPORT static const OdGePlane kYZPlane; // YZ *plane*.
+  GE_STATIC_EXPORT static const OdGePlane kZXPlane; // ZY *plane*.
+
+  /** \param origin [in]   Origin of plane.
+    \param normal [in]   The normal to the plane.
+    \param uPnt [in]  A point at the end of the U-axis.
+    \param vPnt [in]  A point at the end of the V-axis.
+    \param uAxis [in]  The U-axis.
+    \param vAxis [in]  The V-axis.
+    \param a [in]  Coefficient a.
+    \param b [in]  Coefficient b.
+    \param c [in]  Coefficient c.
+    \param d [in]  Coefficient d.
+
+    \remarks
+    A parametric point on the plane with parameters u and v maps to the point S(u,v) as follows
+
+            S(u,v) = originOfPlanarEntity + (u * uAxis) + (v * vAxis)
+
+    uAxis and vAxis need not be either normalized or perpendicular, but they must
+    not be collinear.
+
+    The orthonormal canonical coordinate system associated with a plane defined follows
+
+    @untitled table
+    origin        Origin of plane.                            originOfPlanarEntiity                 
+    axis1           A unit vector in the plane.                 uAxis.normal()                        
+    axis2           A unit vector perpendicular to the plane.   uAxis.crossProduct(vAxis).normal()   
+
+    The plane equation for this plane is as follows
+
+            a * X + b * Y + c * Z + d = 0
+  */
+  OdGePlane();
+  OdGePlane(
+    const OdGePlane& plane);
+  OdGePlane(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& normal);
+  OdGePlane(
+    const OdGePoint3d& uPnt, 
+    const OdGePoint3d& origin, 
+    const OdGePoint3d& vPnt);
+  OdGePlane(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& uAxis, 
+    const OdGeVector3d& vAxis);
+  OdGePlane(
+    double a, 
+    double b, 
+    double c, 
+    double d);
+
+  /** \details
+    Returns true and the intersection point or line, if and only 
+    if the specified line or plane intersects with this plane.
+
+    \param line [in]  Any 3D linear entity.
+    \param plane [in]  Any plane.
+    \param intLine [out]  Receives the intersection line.
+    \param point [out]  Receives the intersection point. 
+    \param tol [in]  Geometric tolerance.
+  */
+  TD_USING(OdGePlanarEnt::intersectWith);
+   bool intersectWith(
+    const OdGePlane& plane, 
+    OdGeLine3d& intLine,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+   bool intersectWith(
+    const OdGeBoundedPlane& plane, 
+    OdGeLineSeg3d& intLine,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the signed distance to (elevation of) the specified point.
+
+    \param point [in]  Any 3D point.
+  */
+   double signedDistanceTo(
+    const OdGePoint3d& point) const;
+
+   /** \details
+    Sets the parameters for this plane according to the arguments. 
+
+    \param origin [in]   Origin of plane.
+    \param normal [in]   The normal to the plane.
+    \param uPnt [in]  A point at the end of the U-axis.
+    \param vPnt [in]  A point at the end of the V-axis.
+    \param uAxis [in]  The U-axis.
+    \param vAxis [in]  The V-axis.
+    \param a [in]  Coefficient a.
+    \param b [in]  Coefficient b.
+    \param c [in]  Coefficient c.
+    \param d [in]  Coefficient d.
+
+    \remarks
+    Returns a reference to this plane.
+
+    A parametric point on the plane with parameters u and v maps to the point S(u,v) as follows
+
+            S(u,v) = originOfPlanarEntity + (u * uAxis) + (v * vAxis)
+
+    uAxis and vAxis need not be either normalized or perpendicular, but they must
+    not be collinear.
+
+    The orthonormal canonical coordinate system associated with a plane defined follows
+
+    @untitled table
+    origin        Origin of plane.                            originOfPlanarEntiity                 
+    axis1           A unit vector in the plane.                 uAxis.normal()                        
+    axis2           A unit vector perpendicular to the plane.   uAxis.crossProduct(vAxis).normal()   
+
+    The plane equation for this plane is as follows
+
+            a * X + b * Y + c * Z + d = 0
+   */
+   OdGePlane& set(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& normal);
+   OdGePlane& set(
+    const OdGePoint3d& uPnt, 
+    const OdGePoint3d& origin, 
+    const OdGePoint3d& vPnt);
+   OdGePlane& set(
+    double a, 
+    double b, 
+    double c, 
+    double d);
+   OdGePlane& set(
+    const OdGePoint3d& origin, 
+    const OdGeVector3d& uAxis, 
+    const OdGeVector3d& vAxis);
+
+  OdGePlane& operator =(
+    const OdGePlane& plane);
+
+private:
+  OdGePlane(OdGeEntity3dImpl*);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEPLANE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2d.h
new file mode 100755
index 0000000..e4683dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2d.h
@@ -0,0 +1,306 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GEPNT2D_H
+#define OD_GEPNT2D_H /*!DOM*/
+
+#include "Ge/GeVector2d.h"
+#include "OdArray.h"
+
+#ifdef OD_HAVE_MATH_FILE
+#include <math.h>
+#endif
+
+#ifdef OD_HAVE_COMPLEX_FILE
+#include <complex>
+#endif
+
+class OdGeMatrix2d;
+class OdGeVector2d;
+class OdGeLinearEnt2d;
+class OdGeLine2d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents points (locations) in 2D space. 
+
+    \remarks
+    OdGePoint2d may be viewed as an array[2] of doubles.
+    
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+    
+    \sa
+    <link ge_BasicTypes.html, Working with Basic Geometry Types>
+*/
+class GE_TOOLKIT_EXPORT OdGePoint2d
+{
+public:
+  /** \param xx [in]  The X-coordinate of this point.
+    \param yy [in]  The Y-coordinate of this point.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor constructs a point at the origin.
+  */
+  OdGePoint2d()
+    : x (0.0), y (0.0)
+  {
+  }
+  OdGePoint2d(
+    double xx, 
+    double yy) 
+    : x (xx), y (yy)
+  {
+  }
+
+  GE_STATIC_EXPORT static const OdGePoint2d kOrigin; // Origin (0,0).
+
+  /** \remarks
+    Sets this point to the result of the matrix multiplication matrix * point,
+    or the point scaled by a factor of scale. 
+
+    \param matrix [in]  Any 2D matrix.
+    \param scale [in]  Scale factor.
+    \param point [in]  The point to be multiplied.
+  */
+  friend GE_TOOLKIT_EXPORT OdGePoint2d operator *(
+    const OdGeMatrix2d& matrix, 
+    const OdGePoint2d& point);
+
+  friend GE_TOOLKIT_EXPORT OdGePoint2d operator *(
+    double scale, 
+    const OdGePoint2d& point);
+
+  /** \details
+    Sets this point to the result of the matrix multiplication (matrix * point).
+    Returns a reference to this point.
+
+    \param matrix [in]  A 2D matrix.
+    \param point [in]  The point to be multiplied.
+  */
+  OdGePoint2d& setToProduct(
+    const OdGeMatrix2d& matrix, 
+    const OdGePoint2d& point);
+
+  /** \details
+    Sets this point to the result of the matrix multiplication xfm  this point*.
+    Returns a reference to this point.
+
+    \param xfm [in]  A 2D matrix.
+  */
+  OdGePoint2d& transformBy(
+    const OdGeMatrix2d& xfm);
+
+  /** \details
+    Rotates this point about the specified basePoint by the specified angle. 
+
+    \param angle [in]  Rotation angle.
+    \param basePoint [in]  Basepoint.
+  */
+  OdGePoint2d& rotateBy(
+    double angle, 
+    const OdGePoint2d& basePoint = kOrigin);
+
+  /** \details
+    Mirrors this point about the specified 2D line.
+
+    \param line [in]  Mirror Line.
+  */
+  OdGePoint2d& mirror(
+    const OdGeLine2d& line);
+
+  /** \details
+    Scales this point by the scale factor about the basepoint.
+
+    \param scaleFactor [in]  Scale Factor. The scale factor must be greater than zero.
+    \param basePoint [in]  Basepoint.
+  */
+  OdGePoint2d& scaleBy(
+    double scaleFactor, 
+    const OdGePoint2d& basePoint = kOrigin);
+
+  OdGePoint2d operator *(
+    double scale) const
+  {
+    return OdGePoint2d (x*scale, y*scale);
+  }
+
+  OdGePoint2d& operator *=(
+    double scale)
+  {
+    x *= scale;
+    y *= scale;
+    return *this;
+  }
+
+  OdGePoint2d operator /(
+    double scale) const
+  {
+    return OdGePoint2d (x/scale, y/scale);
+  }
+
+  OdGePoint2d& operator /=(
+    double scale)
+  {
+    x /= scale;
+    y /= scale;
+    return *this;
+  }
+
+  OdGePoint2d operator +(
+    const OdGeVector2d& vect) const
+  {
+    return OdGePoint2d (x + vect.x, y + vect.y);
+  }
+
+  OdGePoint2d& operator +=(
+    const OdGeVector2d& vect)
+  {
+    x += vect.x;
+    y += vect.y;
+    return *this;
+  }
+
+  OdGePoint2d operator -(
+    const OdGeVector2d& vect) const
+  {
+    return OdGePoint2d (x - vect.x, y - vect.y);
+  }
+
+  OdGePoint2d& operator -=(
+    const OdGeVector2d& vect)
+  {
+    x -= vect.x;
+    y -= vect.y;
+    return *this;
+  }
+
+  /** \details
+    Sets this point to point + vect, and returns a reference to this point.
+
+    \param point [in]  Any 2D point.
+    \param vect [in]  A 2D vector.
+  */
+  OdGePoint2d& setToSum(
+    const OdGePoint2d& point, 
+    const OdGeVector2d& vect)
+  {
+    x = point.x + vect.x;
+    y = point.y + vect.y;
+    return *this;
+  }
+
+  OdGeVector2d operator -(
+    const OdGePoint2d& point) const
+  {
+    return OdGeVector2d (x - point.x, y - point.y);
+  }
+
+  /** \details
+    Returns this point as a vector.
+  */
+  const OdGeVector2d& asVector() const
+  {
+    return *reinterpret_cast<const OdGeVector2d*>(this);
+  }
+
+  /** \details
+    Returns the distance from this point to the specified point.
+
+    \param point [in]  Any 2D point.
+  */
+  double distanceTo(
+    const OdGePoint2d& point) const
+  {
+    return sqrt ( (x-point.x)* (x-point.x)+ (y-point.y)* (y-point.y));
+  }
+
+  bool operator ==(
+    const OdGePoint2d& point) const
+  {
+    return isEqualTo (point);
+  }
+  bool operator !=(
+    const OdGePoint2d& point) const
+  {
+    return !isEqualTo (point);
+  }
+
+  /** \details
+    Returns true if and only if the distance from this point to point is within the 
+    specified tolerance.
+
+    \param point [in]  Any 2D point.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo(
+    const OdGePoint2d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \param i [in]  Index of coordinate.
+
+    \remarks
+    Returns or references the ith coordinate of this point.
+    
+    * 0 returns or references the X-coordinate.
+    * 1 returns or references the Y-coordinate.
+  */
+  double& operator [](
+    unsigned int i)
+  {
+    return * (&x+i);
+  }
+  double operator [](
+    unsigned int i) const
+  {
+    return * (&x+i);
+  }
+
+  /** \details
+    Sets this point to the specified X and Y coordinates. 
+    Returns a reference to this point.
+
+    \param xx [in]  The X-coordinate of this point.
+    \param yy [in]  The Y-coordinate of this point.
+  */
+  OdGePoint2d& set(
+    double xx, 
+    double yy)
+  {
+    x = xx;
+    y = yy;
+    return *this;
+  }
+
+  double x; // X-coordinate
+  double y; // Y-coordinate
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2dArray.h
new file mode 100755
index 0000000..435c5c0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint2dArray.h
@@ -0,0 +1,39 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEPOINT2DARRAY_INCLUDED
+#define GEPOINT2DARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+#include "Ge/GePoint2d.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGePoint2d objects.
+*/
+typedef OdArray<OdGePoint2d, OdMemoryAllocator<OdGePoint2d> > OdGePoint2dArray;
+
+#endif // GEPOINT2DARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3d.h
new file mode 100755
index 0000000..4da5bc2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3d.h
@@ -0,0 +1,362 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GEPNT3D_H
+#define OD_GEPNT3D_H /*!DOM*/
+
+#include "Ge/GeVector3d.h"
+#include "Ge/GePoint2d.h"
+#include "OdArray.h"
+
+class OdGeMatrix3d;
+class OdGeLinearEnt3d;
+class OdGePlane;
+class OdGePlanarEnt;
+class OdGeVector3d;
+class OdGePoint2d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents points (locations) in 3D space. 
+
+    \remarks
+    OdGePoint3d may be viewed as an array[3] of doubles.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_BasicTypes.html, Working with Basic Geometry Types>
+*/
+class GE_TOOLKIT_EXPORT OdGePoint3d
+{
+public:
+  /** \param xx [in]  The X-coordinate of this point.
+    \param yy [in]  The Y-coordinate of this point.
+    \param zz [in]  The Z-coordinate of this point.
+    \param plane [in]  Any plane.
+    \param pnt2d [in]  Any 2D point.
+    \param source [in]  Object to be cloned.
+    
+    \remarks
+    plane and pnt2d define a point as follows:
+            
+            p + uAxis * pnt2d.x + vAxis * pnt2d.y,
+            
+    where p, uAxis, and vAxis are returned by the function call plane.get (p, uAxis, vAxis);
+    
+    With no arguments, creates a point at the origin.
+  */
+  OdGePoint3d() 
+    : x (0.0), y (0.0), z (0.0)
+  {
+  }
+  OdGePoint3d(
+    double xx, 
+    double yy, 
+    double zz)
+    : x (xx), y (yy), z (zz)
+  {
+  }
+  
+  OdGePoint3d(
+    const OdGePlanarEnt& plane, 
+    const OdGePoint2d& pnt2d);
+
+  GE_STATIC_EXPORT static const OdGePoint3d kOrigin; // Origin (0,0,0).
+
+  friend GE_TOOLKIT_EXPORT OdGePoint3d operator *(
+    const OdGeMatrix3d& matrix, 
+    const OdGePoint3d& point);
+    
+  friend GE_TOOLKIT_EXPORT OdGePoint3d operator *(
+    double scale, 
+    const OdGePoint3d& point)
+  {
+    return OdGePoint3d(point.x * scale, point.y * scale, point.z * scale);
+  }
+
+  /** \details
+    Sets this point to the product of xfm * point, and returns a reference to this point.
+    
+    \param xfm [in]  A 3D matrix. 
+    \param point [in]  Any 3D point. 
+  */
+  OdGePoint3d& setToProduct(
+    const OdGeMatrix3d& xfm, 
+    const OdGePoint3d& point);
+
+  /** \details
+    Sets this point to the result of the matrix multiplication xfm  this point*.
+    Returns a reference to this point.
+
+    \param xfm [in]  A 3D matrix.
+  */
+  OdGePoint3d& transformBy(
+    const OdGeMatrix3d& xfm);
+ 
+  /** \details
+    Rotates this point about the specified basePoint and axis of rotation by the specified angle. 
+
+    \param angle [in]  Rotation angle.
+    \param basePoint [in]  Basepoint.
+    \param vect [in]  Axis of rotation.
+  */
+  OdGePoint3d& rotateBy(
+    double angle, 
+    const OdGeVector3d& vect, 
+    const OdGePoint3d& basePoint = OdGePoint3d::kOrigin);
+
+  /** \details
+    Mirrors this point about the specified plane.
+
+    \param line [in]  Mirror Line.
+  */
+  OdGePoint3d& mirror(
+    const OdGePlane& plane);
+
+  /** \details
+    Scales this point by the scale factor about the basepoint.
+
+    \param scaleFactor [in]  Scale Factor. The scale factor must be greater than zero.
+    \param basePoint [in]  Basepoint.
+  */
+  OdGePoint3d& scaleBy(
+    double scaleFactor, 
+    const OdGePoint3d& basePoint = OdGePoint3d::kOrigin);
+
+  /** \details
+    Projects this point onto the specified plane.
+    
+    \param plane [in]  Any plane.
+    
+    Remarks,
+    If no plane is specified, this point is projected into the XY plane.
+  */
+  OdGePoint2d convert2d (
+    const OdGePlanarEnt& plane) const;
+   
+  OdGePoint2d convert2d() const
+  {
+    return OdGePoint2d(x, y);
+  }
+
+  OdGePoint3d operator *(
+    double scale) const
+  {
+     return OdGePoint3d (x * scale, y * scale, z * scale);
+  }
+  
+  OdGePoint3d& operator *=(
+    double scale)
+  {
+    x *= scale;
+    y *= scale;
+    z *= scale;
+    return *this;
+  }
+      
+  OdGePoint3d operator /(
+    double scale) const
+  {
+    return OdGePoint3d (x / scale, y / scale, z / scale);
+  }
+    
+  OdGePoint3d& operator /=(
+    double scale)
+  {
+    x /= scale;
+    y /= scale;
+    z /= scale;
+    return *this;
+  }
+  
+  OdGePoint3d operator +(
+    const OdGeVector3d& vect) const
+  {
+    return OdGePoint3d (x + vect.x, y + vect.y, z + vect.z);
+  }
+    
+  OdGePoint3d& operator +=(
+    const OdGeVector3d& vect)
+  {
+    x += vect.x;
+    y += vect.y;
+    z += vect.z;
+    return *this;
+  }
+      
+  OdGePoint3d operator -(
+    const OdGeVector3d& vect) const
+  {
+    return OdGePoint3d (x - vect.x, y - vect.y, z - vect.z);
+  }
+      
+  OdGePoint3d& operator -=(
+    const OdGeVector3d& vect)
+  {
+    x -= vect.x;
+    y -= vect.y;
+    z -= vect.z;
+    return *this;
+  }
+      
+  /** \details
+    Sets this point to point + vect, and returns a reference to this point.
+    
+    \param point [in]  Any 3D point.
+    \param vect [in]  Any 3D vector.
+  */
+    OdGePoint3d& setToSum(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& vect);
+
+  OdGeVector3d operator -(
+    const OdGePoint3d& point) const
+  {
+    return OdGeVector3d (x - point.x, y - point.y, z - point.z);
+  }
+    
+  /** \details
+    Returns this point as a vector.
+  */
+  const OdGeVector3d& asVector() const
+  {
+    return *reinterpret_cast<const OdGeVector3d*>(this);
+  }
+
+  /** \details
+    Returns the distance from this point to the specified point.
+
+    \param point [in]  Any 3D point.
+  */
+  double distanceTo(
+    const OdGePoint3d& point) const;
+
+  /** \details
+    Projects this point onto the specified plane along the specified vector.
+
+    \param plane [in]  Plane on which this point is to be projected
+    \param vect [in]  Vector defining the projection direction.
+  */
+  OdGePoint3d project(
+    const OdGePlane& plane, 
+    const OdGeVector3d& vect) const;
+    
+  /** \details
+    Projects this point onto the specified plane along the normal to the plane.
+
+    \param plane [in]  Plane on which this point is to be projected
+  */
+    OdGePoint3d orthoProject(
+    const OdGePlane& plane) const;
+
+  bool operator ==(
+    const OdGePoint3d& point) const
+  {
+    return isEqualTo (point);
+  }
+    
+  bool operator !=(
+    const OdGePoint3d& point) const
+  {
+    return !isEqualTo (point);
+  }
+    
+  /** \details
+    Returns true if and only if the distance from this point to point is within the 
+    specified tolerance.
+
+    \param point [in]  Any 3D point.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo(
+    const OdGePoint3d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \param i [in]  Index of coordinate.
+    
+    \remarks
+    Returns or references the ith coordinate of this point.
+
+    * 0 returns or references the X-coordinate.
+    * 1 returns or references the Y-coordinate.
+    * 2 returns or references the Z-coordinate.
+  */
+  double operator [](
+    unsigned int i) const
+  {
+    return * (&x+i);
+  }
+      
+  double& operator [](
+    unsigned int i)
+  {
+    return * (&x+i);
+  }
+  
+  /** \details
+    Sets the parameters for this point according to the arguments
+    
+    \param xx [in]  The X-coordinate of this point.
+    \param yy [in]  The Y-coordinate of this point.
+    \param zz [in]  The Z-coordinate of this point.
+    \param plane [in]  Any plane.
+    \param point [in]  Any 2D point.
+    
+    \remarks
+    Returns a reference to this point.
+
+    plane and pnt2d define a point as follows:
+            
+            p + uAxis * point.x + vAxis * point.y,
+            
+    where p, uAxis, and vAxis are returned by the function call plane.get (p, uAxis, vAxis);
+  */
+  OdGePoint3d& set(
+    double xx, 
+    double yy, 
+    double zz)
+  {
+    x = xx;
+    y = yy;
+    z = zz;
+    return *this;
+  }
+      
+  OdGePoint3d& set(
+    const OdGePlanarEnt& plane, 
+    const OdGePoint2d& point);
+
+  double x; // X-coordinate
+  double y; // Y-coordinate
+  double z; // Z-coordinate
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3dArray.h
new file mode 100755
index 0000000..b3aa835
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePoint3dArray.h
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEPOINT3DARRAY_INCLUDED
+#define GEPOINT3DARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+class OdGePoint3d;
+
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGePoint3d objects.
+*/
+typedef OdArray<OdGePoint3d, OdMemoryAllocator<OdGePoint3d> > OdGePoint3dArray;
+
+#endif // GEPOINT3DARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt2d.h
new file mode 100755
index 0000000..7c97a06
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt2d.h
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_POINT_ENT_2D_H
+#define OD_GE_POINT_ENT_2D_H /*!DOM*/
+
+
+#include "Ge/GeEntity2d.h"
+#include "Ge/GePoint2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all OdGe 2D point classes.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGePointEnt2d : public OdGeEntity2d
+{
+public:
+
+  /** \details
+    Returns this object as an OdGePoint2d.
+  */
+  OdGePoint2d point2d() const;
+
+  operator OdGePoint2d() const;
+
+  OdGePointEnt2d& operator =(
+    const OdGePointEnt2d& point);
+
+  //////////////////////////////////////////////////////////////////////////
+
+protected:
+  /** \param source [in]  Object to be cloned.
+  */
+  OdGePointEnt2d();
+  OdGePointEnt2d(
+    const OdGePointEnt2d& source);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_POINT_ENT_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt3d.h
new file mode 100755
index 0000000..0829df9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointEnt3d.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEPENT3D_H
+#define OD_GEPENT3D_H /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all OdGe 3D point classes.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGePointEnt3d : public OdGeEntity3d
+{
+public:
+
+
+  /** \details
+    Returns this object as an OdGePoint3d.
+  */
+   OdGePoint3d point3d() const;
+
+  // Conversion operator to convert to OdGePoint3d.
+   operator OdGePoint3d() const;
+
+  // Assignment operator.
+  OdGePointEnt3d& operator =(const OdGePointEnt3d& ent);
+
+  ///////////////////////////////////////////////////////////////////////////
+
+protected:
+  OdGePointEnt3d();
+  OdGePointEnt3d(
+    const OdGePointEnt3d& ent);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEPENT3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve2d.h
new file mode 100755
index 0000000..9ab0638
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve2d.h
@@ -0,0 +1,170 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_POINT_ON_CURVE_2D_H
+#define OD_GE_POINT_ON_CURVE_2D_H /*!DOM*/
+
+#include "Ge/GePointEnt2d.h"
+class OdGeCurve2d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents points along 2D curves.
+
+    \remarks
+    The point representation includes its parameter value, its coordinates, and the
+    the derivatives of the curve at that point. 
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_Evaluators.html, Working with Evaluator Classes>
+*/
+class GE_TOOLKIT_EXPORT OdGePointOnCurve2d : public OdGePointEnt2d
+{
+public:
+  
+
+  /** \param curve2d [in]  Any 2D curve.
+    \param param [in]  Parameter to specify a point on curve2d.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor constructs a point on the curve OdGeLine2d::kXAxis with a parameter value of 0.
+  */
+  OdGePointOnCurve2d();
+
+  OdGePointOnCurve2d(
+    const OdGeCurve2d& curve2d, 
+    double param = 0.0);
+
+  OdGePointOnCurve2d(
+    const OdGePointOnCurve2d& source);
+
+  OdGePointOnCurve2d& operator =(
+    const OdGePointOnCurve2d& pntOnCurve);
+
+  /** \details
+    Returns the curve on which the point lies.
+  */
+  const OdGeCurve2d* curve() const;
+
+  /** \details
+    Returns the parameter value on the curve corresponding to the point.
+  */
+  double parameter() const;
+
+  /** \details
+    Returns the *point* on the *curve*.
+
+    \param param [in] Sets the current *parameter*.
+    \param curve2d [in] Any 2D *curve*. Sets the current *curve*.
+  */
+  OdGePoint2d point() const;
+
+  OdGePoint2d point(
+    double param);
+
+  OdGePoint2d point(
+    const OdGeCurve2d& curve2d, 
+    double param);
+
+  /** \details
+    Returns the derivitive of the curve at the point on the curve.
+
+    \param order [in]  Specifies the order of the derivitive [1-2].
+    \param param [in]  Sets the current parameter.
+    \param curve2d [in]  Any 2D curve. Sets the current curve.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeVector2d deriv(
+    int order) const;
+
+  OdGeVector2d deriv(
+    int order, 
+    double param);
+
+  OdGeVector2d deriv(
+    int order, 
+    const OdGeCurve2d& curve2d,
+    double param);
+
+  /** \details
+    Returns true if and only if the first derivative vector 
+    has a length of zero.
+
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    Currently not implemented.
+  */
+  bool isSingular(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+
+  /** \details
+    Returns true if and only if the first derivative vector has a non-zero length, and
+    the curvature of the curve at the point on the curve. 
+
+    \param param [in]  parameter to specify a point on curve2d.
+    \param res [out]  Receives the curvature of the curve at the specified point.
+
+    \note
+    Currently not implemented.
+  */
+  bool curvature(
+    double& res);
+
+  bool curvature(
+    double param, 
+    double& res);
+
+  /** \details
+    Sets the current curve.
+
+    \param curve2d [in]  Any 2D curve.
+  */
+  OdGePointOnCurve2d& setCurve(
+    const OdGeCurve2d& curve2d);
+
+  /** \details
+    Sets the current parameter.
+
+    \param param [in]  Sets the current parameter.
+  */
+  OdGePointOnCurve2d& setParameter(
+    double param);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve3d.h
new file mode 100755
index 0000000..ddbdb8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnCurve3d.h
@@ -0,0 +1,166 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEPONC3D_H
+#define OD_GEPONC3D_H /*!DOM*/
+
+#include "Ge/GePointEnt3d.h"
+#include "Ge/GeCurve3d.h"
+
+class OdGeCurve3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents points along 3D curves.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \remarks
+    The point representation includes its parameter value, its coordinates, and the
+    the derivatives of the curve at that point.
+
+    \sa
+    <link ge_Evaluators.html, Working with Evaluator Classes>
+*/
+class GE_TOOLKIT_EXPORT OdGePointOnCurve3d : public OdGePointEnt3d
+{
+public:
+
+
+  /** \param curve3d [in]  Any 3D curve.
+    \param param [in]  Parameter to specify a point on curve3d.
+
+    \remarks
+    The default constructor constructs a point on the curve OdGeLine2d::kXAxis with a parameter value of 0
+  */
+  OdGePointOnCurve3d();
+  OdGePointOnCurve3d(
+    const OdGeCurve3d& curve3d);
+  OdGePointOnCurve3d(
+    const OdGeCurve3d& curve3d,
+    double param);
+  OdGePointOnCurve3d(
+    const OdGePointOnCurve3d& src);
+
+  // Assignment operator.
+  OdGePointOnCurve3d& operator =(
+    const OdGePointOnCurve3d& src);
+
+  /** \details
+    Returns the curve on which the point lies.
+  */
+   const OdGeCurve3d* curve() const;
+
+  /** \details
+    Returns the parameter value on the curve corresponding to the point.
+  */
+   double parameter() const;
+
+  /** \details
+    Returns the point on the curve.
+
+    \param param [in]  Sets the current parameter.
+    \param curve3d [in]  Any 3D curve. Sets the current curve.
+  */
+   OdGePoint3d point() const;
+   OdGePoint3d point(
+    double param);
+   OdGePoint3d point(
+    const OdGeCurve3d& curve3d,
+    double param);
+
+  /** \details
+    Returns the derivative of the curve at the point on the curve.
+
+    \param order [in]  the order of the derivative [1-2].
+    \param param [in]  Sets the current parameter.
+    \param curve3d [in]  Any 3D curve. Sets the current curve.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d deriv(
+    int order) const;
+   OdGeVector3d deriv(
+    int order,
+    double param);
+   OdGeVector3d deriv(
+    int order,
+    const OdGeCurve3d& curve3d,
+    double param);
+
+  /** \details
+    Returns true if and only if the first derivative vector
+    has a length of zero.
+
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    Currently not implemented.
+  */
+   bool isSingular(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the first derivative vector has a non-zero length, and
+    the curvature of the curve at the point on the curve.
+
+    \param param [in]  Parameter to specify a point on curve3d.
+    \param res [out]  Receives the curvature of the curve at the specified point.
+
+    \note
+    Currently not implemented.
+  */
+   bool curvature(
+    double& res);
+   bool curvature(
+    double param,
+    double& res);
+
+  /** \details
+    Sets the current curve.
+
+    \param curve3d [in]  Any 3D curve.
+  */
+   OdGePointOnCurve3d& setCurve(
+    const OdGeCurve3d& curve3d);
+
+  /** \details
+    Sets the current parameter.
+
+    \param param [in]  Sets the current parameter.
+  */
+   OdGePointOnCurve3d& setParameter(
+    double param);
+
+  //////////////////////////////////////////////////////////////////////////
+
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEPONC3D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnSurface.h
new file mode 100755
index 0000000..56cfaa2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePointOnSurface.h
@@ -0,0 +1,257 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEPONSRF_H
+#define OD_GEPONSRF_H /*!DOM*/
+
+#include "Ge/GePointEnt3d.h"
+
+class OdGeSurface;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents points on surfaces.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \remarks
+    The point representation includes its parameter value, its coordinates, and
+    the derivatives and normal of the surface at that point.
+
+    \sa
+    <link ge_Evaluators.html, Working with Evaluator Classes>
+*/
+class GE_TOOLKIT_EXPORT OdGePointOnSurface : public OdGePointEnt3d
+{
+public:
+
+
+  /** \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor constructs a point on the surface OdGePlane::kXYPlane with a parameter value of (0,0).
+  */
+  OdGePointOnSurface();
+  OdGePointOnSurface(
+    const OdGePointOnSurface& source);
+  OdGePointOnSurface(
+    const OdGeSurface& surface);
+  OdGePointOnSurface(
+    const OdGeSurface& surface, 
+    const OdGePoint2d& param);
+
+  // Assignment operator.
+  
+  OdGePointOnSurface& operator =(
+    const OdGePointOnSurface& pntOnSurface);
+
+  /** \details
+    Returns the surface.
+  */
+   const OdGeSurface* surface() const;
+  
+  /** \details
+    Returns the parameter value on the surface corresponding to the point.
+  */
+   OdGePoint2d parameter() const;
+
+  /** \details
+    Returns the point on the surface corresponding to the parameter.
+    
+    \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    
+    \remarks
+    Specifying surface or param updates the underlying value.
+  */
+   OdGePoint3d point() const;
+   OdGePoint3d point(
+    const OdGePoint2d& param);
+   OdGePoint3d point(
+    const OdGeSurface& surface,
+    const OdGePoint2d& param);
+  
+  /** \details
+    Returns the normal to the surface at the point corresponding to the parameter.
+    
+    \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    
+    \remarks
+    Specifying surface or param updates the underlying value.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d normal() const;
+   OdGeVector3d normal(
+    const OdGePoint2d& param);
+   OdGeVector3d normal(
+    const OdGeSurface& surface,
+    const OdGePoint2d& param);
+
+  /** \details
+    Returns the specified derivative of the surface in the U direction  
+    at the point corresponding to the parameter.
+    
+    \param order [in]  Specifies the order of the derivitive [1-2].
+    \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    
+    \remarks
+    Specifying surface or param updates the underlying value.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d uDeriv(
+    int order) const;
+   OdGeVector3d uDeriv(
+    int order, 
+    const OdGePoint2d& param);
+   OdGeVector3d uDeriv(
+    int order, const OdGeSurface& surface,
+    const OdGePoint2d& param);
+
+  /** \details
+    Returns the specified derivative of the surface in the V direction 
+    at the point corresponding to the parameter.
+    
+    \param order [in]  Specifies the order of the derivitive [1-2].
+    \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    
+    \remarks
+    Specifying surface or param updates the underlying value.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d vDeriv(
+    int order) const;
+   OdGeVector3d vDeriv(
+    int order, 
+    const OdGePoint2d& param);
+   OdGeVector3d vDeriv(
+    int order, 
+    const OdGeSurface& surface,
+    const OdGePoint2d& param);
+
+  /** \details
+    Returns the mixed partial derivative of the surface 
+    at the point corresponding to the parameter.
+    
+    \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    
+    \remarks
+    Specifying surface or param updates the underlying value.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector3d mixedPartial() const;
+   OdGeVector3d mixedPartial(
+    const OdGePoint2d& param);
+   OdGeVector3d mixedPartial(
+    const OdGeSurface& surface,
+    const OdGePoint2d& param);
+
+  /** \details
+    Maps the specified vector to the tangent plane of the surface 
+    at the point corresponding to the parameter
+    
+    \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    \param vect [in]  Any 2D vector.
+    
+    \remarks
+    Specifying surface or param updates the underlying value.
+    
+    The tangent vector is mapped as follows:
+    
+            tangentVector = uDeriv(1) * vect.x + vDeriv(1) * vect.y
+
+    \note
+    Currently not implemented.
+    
+  */
+   OdGeVector3d tangentVector(
+    const OdGeVector2d& vect) const;
+   OdGeVector3d tangentVector(
+    const OdGeVector2d& vect,
+    const OdGePoint2d& param);
+   OdGeVector3d tangentVector(
+    const OdGeVector2d& vect,
+    const OdGeSurface& surface,
+    const OdGePoint2d& param);
+
+  /** \details
+    Projects the specified vector to the tangent plane of the surface 
+    at the point corresponding to the parameter
+    
+    \param surface [in]  Any surface.
+    \param param [in]  Parameter to specify a point on surface.
+    \param vect [in]  Any 3D vector.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeVector2d inverseTangentVector(
+    const OdGeVector3d& vect) const;
+   OdGeVector2d inverseTangentVector(
+    const OdGeVector3d& vect,
+    const OdGePoint2d& param);
+   OdGeVector2d inverseTangentVector(
+    const OdGeVector3d& vect,
+    const OdGeSurface& surface,
+    const OdGePoint2d& param);
+
+  /** \details
+    Sets the current surface.
+
+    \param OdGeSurface [in]  Any surface.
+  */
+    OdGePointOnSurface& setSurface(
+    const OdGeSurface& surface);
+    
+  /** \details
+    Sets the current parameter.
+
+    \param param [in]  Sets the current parameter.
+  */
+   OdGePointOnSurface& setParameter(
+    const OdGePoint2d& param);
+
+  ///////////////////////////////////////////////////////////////////////////
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEPONSRF_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline2d.h
new file mode 100755
index 0000000..6e1903c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline2d.h
@@ -0,0 +1,92 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_POLYLINE_2D_H
+#define OD_GE_POLYLINE_2D_H /*!DOM*/
+
+#include "OdPlatform.h"
+#include "Ge/GeSplineEnt2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents piecewise linear splines in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGePolyline2d : public OdGeSplineEnt2d
+{
+public:
+  
+
+  OdGePolyline2d();
+  /** \param source [in]  Object to be cloned.
+  */
+  OdGePolyline2d(
+    const OdGePolyline2d& source);
+  /** \param points [in]  Array of fit points.
+    \param knots [in]  Knot vector.
+    \param crv [in]  A 2D curve to be approximated as a polyline.
+    \param approxEps [in]  Approximate geometric tolerance. 
+  */
+  OdGePolyline2d(
+    const OdGePoint2dArray& fitpoints);
+  OdGePolyline2d(
+    const OdGeKnotVector& knots,
+    const OdGePoint2dArray& points);
+  OdGePolyline2d(
+    const OdGeCurve2d& crv, 
+    double approxEps);
+
+  /** \details
+    Returns the number of fit points.
+  */
+  int numFitPoints() const;
+
+  /** \details
+    Returns the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+  */
+  OdGePoint2d fitPointAt(
+    int fitPointIndex) const;
+
+  /** \details
+    Sets the fit point at the specified index, and returns a reference to this curve.
+
+    \param fitPointIndex [in]  Fit point index.
+    \param point [in]  Any 2D point.
+  */
+  OdGeSplineEnt2d& setFitPointAt(
+    int fitPointIndex, 
+    const OdGePoint2d& point);
+
+  OdGePolyline2d& operator =(const OdGePolyline2d& pline);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_POLYLINE_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline3d.h
new file mode 100755
index 0000000..91928cd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePolyline3d.h
@@ -0,0 +1,96 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEPLIN3D_H
+#define OD_GEPLIN3D_H /*!DOM*/
+
+#include "OdPlatform.h"
+#include "Ge/GeSplineEnt3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents piecewise linear splines in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGePolyline3d : public OdGeSplineEnt3d
+{
+public:
+
+
+ /** \param points [in]  An OdGePoint3dArray of fit points.
+    \param pPoints [in]  An array of fit points.
+    \param numPoints [in]  The number of points in pPoints.
+    \param crv [in]  A 2D curve to be approximated as a polyline.
+    \param approxEps [in]  Approximate geometric tolerance. 
+    \param source [in]  Object to be cloned.
+ */
+  OdGePolyline3d();
+  OdGePolyline3d(const OdGePolyline3d& source);
+  OdGePolyline3d(const OdGePoint3dArray& points);
+  OdGePolyline3d(const OdGeKnotVector& knots, 
+                 const OdGePoint3dArray& controlPoints);
+  OdGePolyline3d(const OdGeCurve3d& crv, 
+                 double approxEps);
+  // TD Special
+  OdGePolyline3d(OdInt32 numPoints, 
+                 const OdGePoint3d* pPoints);
+
+  /** \details
+    Returns the number of fit points.
+  */
+   int numFitPoints() const;
+
+  /** \details
+    Returns the fit point at the specified index.
+
+    \param fitPointIndex [in]  Fit point index.
+  */
+   OdGePoint3d fitPointAt(int fitPointIndex) const;
+
+   OdGeSplineEnt3d& setFitPointAt(int index, const OdGePoint3d& point);
+
+  // Assignment operator.
+  OdGePolyline3d& operator =(const OdGePolyline3d& polyline);
+
+  ///////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+  Returns the point on the specified segment corresponding to the specified parameter value.
+
+  \param param [in]  Parameter on specified segment.
+  \param numSeg [in]  The segment to be queried.
+  */
+   OdGePoint3d evalPointSeg(
+    double param, 
+    int& numSeg) const;
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEPLIN3D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition2d.h
new file mode 100755
index 0000000..bc22e72
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition2d.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GE_POSITION_2D_H
+#define OD_GE_POSITION_2D_H /*!DOM*/
+
+#include "Ge/GePointEnt2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents points (positions) in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_OdGePosition.html, Working with Points>
+*/
+class GE_TOOLKIT_EXPORT OdGePosition2d : public OdGePointEnt2d
+{
+public:
+  
+
+  /** \param point [in]  Any 2D point.
+    \param x [in]  The X-coordinate of the point.
+    \param y [in]  The Y-coordinate of the point.
+    \param source [in]  Object to be cloned.
+  */
+  OdGePosition2d();
+  OdGePosition2d(
+    const OdGePoint2d& point);
+  OdGePosition2d(
+    double x, 
+    double y);
+  OdGePosition2d(
+    const OdGePosition2d& source);
+
+  /** \details
+    Sets the coordinates of, and returns a reference
+    to, this point.
+
+    \param point [in]  Any 2D point.
+    \param x [in]  The X-coordinate of the position.
+    \param y [in]  The Y-coordinate of the position.
+  */
+  OdGePosition2d& set(
+    const OdGePoint2d& point);
+  OdGePosition2d& set(
+    double x, 
+    double y);
+
+  OdGePosition2d& operator = (
+    const OdGePosition2d& pos);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_POSITION_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition3d.h
new file mode 100755
index 0000000..421cffd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GePosition3d.h
@@ -0,0 +1,88 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GEPOS3D_H
+#define OD_GEPOS3D_H /*!DOM*/
+
+#include "Ge/GePointEnt3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents points (positions) in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGePosition.html, Working with Points>
+*/
+class GE_TOOLKIT_EXPORT OdGePosition3d : public OdGePointEnt3d
+{
+public:
+
+
+ /** \param point [in]  Any 3D point.
+    \param x [in]  The X-coordinate of the point.
+    \param y [in]  The Y-coordinate of the point.
+    \param z [in]  The Z-coordinate of the point.
+    \param source [in]  Object to be cloned.
+ */
+  OdGePosition3d();
+  OdGePosition3d(
+    const OdGePoint3d& point);
+  OdGePosition3d(
+    double x, 
+    double y, 
+    double z);
+  OdGePosition3d(
+    const OdGePosition3d& source);
+
+  /** \details
+    Sets the coordinates of, and returns a reference
+    to, this point.
+
+    \param point [in]  Any 3D point.
+    \param x [in]  The X-coordinate of the position.
+    \param y [in]  The Y-coordinate of the position.
+    \param z [in]  The Z-coordinate of the point.
+  */
+   OdGePosition3d& set(
+    const OdGePoint3d& point);
+   OdGePosition3d& set(
+    double x, 
+    double y, 
+    double z);
+
+  OdGePosition3d& operator =(
+    const OdGePosition3d& pos);
+
+  //////////////////////////////////////////////////////////////////////////
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GEPOS3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeQuaternion.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeQuaternion.h
new file mode 100755
index 0000000..6b7d953
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeQuaternion.h
@@ -0,0 +1,184 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_GEQUATERNION_H
+#define OD_GEQUATERNION_H /*!DOM*/
+
+#include "Ge/GeExport.h"
+#include "Ge/GeMatrix3d.h"
+
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents a rotation quaternion in 3D space.
+
+    \remarks
+    OdGeQuaternion may be viewed as an array[4] of doubles.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes>
+*/
+class GE_TOOLKIT_EXPORT OdGeQuaternion
+{
+public:
+
+  /** Quaternions are used to specify the rotations necessary for 3d planar orientation.
+    It stores 4 Double variables w, x, y, and z.
+
+
+
+    \remarks
+    When called with no arguments, constructs a zero quaternion.
+  */
+  OdGeQuaternion ()
+    : w( 1. ), x( 0. ), y( 0. ), z( 0. )
+  {
+  }
+  OdGeQuaternion (double ww, double xx, double yy, double zz)
+    : w(ww), x(xx), y(yy), z(zz)
+  {
+  }
+
+  OdGeQuaternion& set (double ww, double xx, double yy, double zz)
+  {
+    w = ww;
+    x = xx;
+    y = yy;
+    z = zz;
+    return *this;
+  }
+
+  OdGeQuaternion& set( const OdGeMatrix3d& matrix )
+  {
+      double trace = matrix[0][0] + matrix[1][1] + matrix[2][2];
+      if ( trace > 0.0 )
+      {
+          w = sqrt(1.0 + trace) / 2.0;
+
+          double w4 = (4.0 * w);
+          x = (matrix[1][2] - matrix[2][1]) / w4;
+          y = (matrix[2][0] - matrix[0][2]) / w4;
+          z = (matrix[0][1] - matrix[1][0]) / w4;
+      }
+      else
+      {
+          OdUInt32 i = 0;
+          if (matrix[1][1] > matrix[0][0]) i = 1;
+          if (matrix[2][2] > matrix[i][i]) i = 2;
+          OdUInt32 j = (2 == i ? 0 : i + 1);
+          OdUInt32 k = (2 == j ? 0 : j + 1);
+
+          double s = sqrt((matrix[i][i] - (matrix[j][j] + matrix[k][k])) + 1.0);
+          double q[ 4 ];
+
+          q[i] = s * 0.5;
+          if (s != 0.0) s = 0.5/s;
+
+          q[3] = (matrix[j][k] - matrix[k][j]) * s;
+          q[j] = (matrix[i][j] + matrix[j][i]) * s;
+          q[k] = (matrix[i][k] + matrix[k][i]) * s;
+
+          x = q[0];
+          y = q[1];
+          z = q[2];
+          w = q[3];
+      }
+      return( *this );
+  }
+
+  OdGeMatrix3d getMatrix() const
+  {
+    OdGeMatrix3d matrix;
+
+    matrix( 0, 0 ) = w * w + x * x - y * y - z * z;
+    matrix( 1, 0 ) = 2. * ( x * y - w * z );
+    matrix( 2, 0 ) = 2. * ( w * y + x * z );
+
+    matrix( 0, 1 ) = 2. * ( w * z + x * y );
+    matrix( 1, 1 ) = w * w - x * x + y * y - z * z;
+    matrix( 2, 1 ) = 2. * ( y * z - w * x );
+
+    matrix( 0, 2 ) = 2. * ( x * z - w * y );
+    matrix( 1, 2 ) = 2. * ( w * x + y * z );
+    matrix( 2, 2 ) = w * w - x * x - y * y + z * z;
+
+    return matrix;
+  }
+
+  OdGePoint3d rotate( OdGePoint3d& sourcePoint ) const
+  {
+    OdGeMatrix3d matrix = getMatrix();
+
+    return sourcePoint.transformBy( matrix );
+  }
+
+  OdGeVector3d rotate( OdGeVector3d& vector ) const
+  {
+    OdGeMatrix3d matrix = getMatrix();
+
+    return vector.transformBy( matrix );
+  }
+
+  /** \details
+    Returns true if and only if quat is identical to this quaternion,
+    within the specified tolerance.
+
+    \param quat [in]  Any quaternion.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo(
+    const OdGeQuaternion& quat,
+    const OdGeTol& tol = OdGeContext::gTol) const
+  {
+    return fabs(x - quat.x) <= tol.equalVector() &&
+           fabs(y - quat.y) <= tol.equalVector() &&
+           fabs(z - quat.z) <= tol.equalVector() &&
+           fabs(w - quat.w) <= tol.equalVector();
+  }
+
+  bool operator == (const OdGeQuaternion& quat) const
+  {
+    return isEqualTo(quat);
+  }
+  bool operator != (const OdGeQuaternion& quat) const
+  {
+    return !isEqualTo(quat);
+  }
+
+  double w;
+  double x;
+  double y;
+  double z;
+
+  GE_STATIC_EXPORT static const OdGeQuaternion kOrigin;
+
+};
+
+#include "TD_PackPop.h"
+
+
+#endif // OD_GEQUATERNION_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay2d.h
new file mode 100755
index 0000000..5c704a8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay2d.h
@@ -0,0 +1,100 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_RAY_2D_H
+#define OD_GE_RAY_2D_H /*!DOM*/
+
+#include "Ge/GeLinearEnt2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents semi-infinite lines in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeRay.html, Working with Rays>
+*/
+class GE_TOOLKIT_EXPORT OdGeRay2d : public OdGeLinearEnt2d
+{
+public:
+  
+
+  /** \param line [in]  Any 2D line.
+    \param point [in]  Any 2D point.
+    \param vect [in]  Any 2D vector
+    \param point1 [in]  Any 2D point.
+    \param point2 [in]  Any 2D point.
+
+    \remarks
+    point and vect construct a semi-infinite line starting point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct a semi-infinite line starting at point1, and passing through point2. The 
+    points cannnot be coincident.
+
+    If called with no arguments, constructs a semi-infinite line starting at (0,0) and passing through (1,0).
+  */
+  OdGeRay2d();
+  OdGeRay2d(const OdGeRay2d& ray);
+  OdGeRay2d(
+    const OdGePoint2d& point, 
+    const OdGeVector2d& vect);
+  OdGeRay2d(
+    const OdGePoint2d& point1, 
+    const OdGePoint2d& point2);
+  
+  /** \details
+    Sets the parameters for this ray according to the arguments.
+
+    \param point [in]  Any 2D point.
+    \param vect [in]  Any 2D vector
+    \param point1 [in]  Any 2D point.
+    \param point2 [in]  Any 2D point.
+
+    \remarks
+    Returns a reference to this ray.
+
+    point and vect construct a semi-infinite line starting point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct a semi-infinite line starting at point1, and passing through point2. The 
+    points cannnot be coincident.
+  */
+  OdGeRay2d& set(
+    const OdGePoint2d& point, 
+    const OdGeVector2d& vect);
+  OdGeRay2d& set(
+    const OdGePoint2d& point1, 
+    const OdGePoint2d& point2);
+
+  OdGeRay2d& operator =(const OdGeRay2d& ray);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_RAY_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay3d.h
new file mode 100755
index 0000000..88d03cc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeRay3d.h
@@ -0,0 +1,102 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GERAY3D_H
+#define OD_GERAY3D_H /*!DOM*/
+
+#include "Ge/GeLinearEnt3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents semi-infinite lines in 3D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeRay.html, Working with Rays>
+*/
+class GE_TOOLKIT_EXPORT OdGeRay3d : public OdGeLinearEnt3d
+{
+public:
+
+
+  /** \param line [in]  Any 3D line.
+    \param point [in]  Any 3D point.
+    \param vect [in]  Any 3D vector
+    \param point1 [in]  Any 3D point.
+    \param point2 [in]  Any 3D point.
+
+    \remarks
+    point and vect construct a semi-infinite line starting point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct a semi-infinite line starting at point1, and passing through point2. The 
+    points cannot be coincident.
+
+    If called with no arguments, constructs a semi-infinite line starting at (0,0m0) and passing through (1,0,0).
+  */
+  OdGeRay3d();
+  OdGeRay3d(
+    const OdGeRay3d& line);
+  OdGeRay3d(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& vect);
+  OdGeRay3d(const OdGePoint3d& point1, 
+    const OdGePoint3d& point2);
+
+  /** \details
+    Sets the parameters for this ray according to the arguments.
+
+    \param point [in]  Any 3D point.
+    \param vect [in]  Any 3D vector.
+    \param point1 [in]  Any 3D point.
+    \param point2 [in]  Any 3D point.
+
+    \remarks
+    Returns a reference to this ray.
+
+    point and vect construct a semi-infinite line starting point with 
+    a direction of vect. vect cannot have a zero length.
+
+    point1 and point2 construct a semi-infinite line starting at point1, and passing through point2. The 
+    points cannot be coincident.
+  */
+   OdGeRay3d& set(
+    const OdGePoint3d& point, 
+    const OdGeVector3d& vect);
+   OdGeRay3d& set(
+    const OdGePoint3d& point1, 
+    const OdGePoint3d& point2);
+
+  // Assignment operator.
+  OdGeRay3d& operator =(
+    const OdGeRay3d& line);
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale2d.h
new file mode 100755
index 0000000..6ca2a6a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale2d.h
@@ -0,0 +1,265 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GESCL2D_H
+#define OD_GESCL2D_H /*!DOM*/
+
+
+class OdGeMatrix2d;
+class OdGeScale3d;
+#include "Ge/GeGbl.h"
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents scaling transformations (scale vectors) in 2D space.
+
+    \remarks
+    OdGeScale2d may be viewed as an array[2] of doubles.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+*/
+class GE_TOOLKIT_EXPORT OdGeScale2d
+{
+public:
+  /** \param factor [in]  Uniform scale factor.
+    \param xFactor [in]  The X scale factor.
+    \param yFactor [in]  The Y scale factor.
+    \param source [in]  Object to be cloned.
+  */
+  OdGeScale2d();
+  OdGeScale2d(
+    double factor);
+  OdGeScale2d(
+    double xFactor,
+    double yFactor);
+
+  GE_STATIC_EXPORT static const   OdGeScale2d kIdentity; // Multplicitive identity vector.
+
+  /** \param scaleVec [in]  Any 2D scale vector.
+    \param factor [in]  Uniform scale factor.
+  */
+  OdGeScale2d operator * (
+    const OdGeScale2d& scaleVec) const;
+
+  friend OdGeScale2d operator * (
+    double factor,
+    const OdGeScale2d& scaleVec);
+
+  /** \param scaleVec [in]  Any 2D scale vector.
+    \param factor [in]  Uniform scale factor.
+
+    \remarks
+    Multiplication of scale vectors is defined as follows:
+
+              scl * [xs ys]          = [scl*xs scl*ys]
+              [xs1 ys1] * [xs2 ys2]  = [xs1*xs2 ys1*ys2]
+  */
+  OdGeScale2d& operator *= (
+    const OdGeScale2d& scaleVec);
+
+  /** \details
+    Sets this scale vector to the product leftSide * (this scale vector), and returns
+    a reference to this scale vector.
+
+    \param leftSide [in]  Any 2D scale vector.
+
+    \remarks
+    Scale muliplications is commutative.
+  */
+  OdGeScale2d& preMultBy (
+    const OdGeScale2d& leftSide);
+
+  /** \details
+    Sets this scale vector to the product (this scale vector) * (rightSide), and returns
+    a reference to this scale vector.
+
+    \param rightSide [in]  Any 2D scale vector.
+
+    \remarks
+    Scale muliplications is commutative.
+  */
+  OdGeScale2d& postMultBy (
+    const OdGeScale2d& rightSide);
+
+
+  /** \details
+    Sets this scale vector to the product scaleVec1 * scaleVec2 or factor * scaleVec, and returns
+    a reference to this scale vector.
+
+    \param factor [in]  Uniform scale factor.
+    \param scaleVec [in]  Any 2D scale vector.
+    \param scaleVec1 [in]  Any 2D scale vector.
+    \param scaleVec2 [in]  Any 2D scale vector.
+
+    \remarks
+    Multiplication of scale vectors is defined as follows:
+
+              scl * [xs1 ys1]        = [scl*xs1 scl*ys1]
+              [xs1 ys1 ] * [xs2 ys2] = [xs1*xs2 ys1*ys2]
+  */
+  OdGeScale2d& setToProduct(
+    const OdGeScale2d& scaleVec, double factor);
+
+  OdGeScale2d& setToProduct(
+    const OdGeScale2d& scaleVec1,
+    const OdGeScale2d& scaleVec2);
+
+  /** \param factor [in]  Uniform scale factor.
+    \remarks
+    Multiplication of scale vectors is defined as follows:
+
+              scl * [xs1 ys1]        = [scl*xs1 scl*ys1]
+              [xs1 ys1 ] * [xs2 ys2] = [xs1*xs2 ys1*ys2]
+  */
+  OdGeScale2d operator * (
+    double factor) const;
+
+
+  /** \param factor [in]  Uniform scale factor.
+  */
+  OdGeScale2d& operator *= (
+    double factor);
+
+
+
+  /** \details
+    Returns the inverse of this scale vector.
+  */
+  OdGeScale2d inverse () const;
+
+  /** \details
+    Sets this scale vector to its inverse, and returns
+    a reference to this scale vector.
+  */
+  OdGeScale2d& invert ();
+
+  /** \details
+    Returns true if and only if the scaling matrix corresponding to this scale vector isUniScaledOrtho().
+
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isProportional(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  bool operator == (
+    const OdGeScale2d& scaleVec) const;
+  bool operator != (
+    const OdGeScale2d& scaleVec) const;
+
+  /** \details
+    Returns true if and only if scaleVec is identical to this one,
+    within the specified tolerance.
+
+    \param scaleVec [in]  Any 2D scale vector.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo (
+    const OdGeScale2d& scaleVec,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns or references the ith component of the scale vector.
+    
+    \param i [in]  Index of component.
+    
+    \remarks
+    * 0 returns or references the X scale factor.
+    * 1 returns or references the Y scale factor.
+  */
+  double& operator [] (
+    unsigned int i)
+  {
+    return * (&sx + i);
+  }
+  double operator [] (
+    unsigned int i) const
+  {
+    return * (&sx + i);
+  }
+
+  /** \details
+    Sets this scale vector to the specified X and Y factors, 
+    and returns a reference to this vector.
+
+    \param xFactor [in]  The X scale factor.
+    \param yFactor [in]  The Y scale factor.
+  */
+  OdGeScale2d& set (
+    double xFactor, 
+    double yFactor);
+
+
+  /** \details
+    Returns the transformation matrix equivalent to this scale vector.
+    
+    \param xfm [out]  Receives the 2D transformation matrix.
+    
+  */
+  void getMatrix (
+    OdGeMatrix2d& xfm) const;
+    
+  /** \details
+    Returns the scale vector corresponding to the
+    lengths of the column vectors of the transformation matrix.  
+    
+    \param xfm [out]  Receives the 2D transformation matrix.
+    
+    \remarks
+    xfm must be scaled ortho; i.e., xfm.isScaledOrtho() == true.   
+  */
+    OdGeScale2d& extractScale (
+    const OdGeMatrix2d& xfm);
+    
+  /** \details
+    Returns the scale vector corresponding to the
+    lengths of the column vectors of the transformation matrix,
+    and sets the scale factor of the matrix to 1 .  
+    
+    \param xfm [out]  Receives the 2D transformation matrix.
+    
+    \remarks
+    xfm must be scaled ortho; i.e., xfm.isScaledOrtho() == true.   
+  */
+    OdGeScale2d& removeScale (
+    OdGeMatrix2d& xfm);
+
+  /** \remarks
+    Returns the equivalent 2D tranformation matrix.
+    or a 3D scale vector [sx sy 1].
+  */
+  operator OdGeMatrix2d () const;
+  operator OdGeScale3d () const;
+
+  double sx; // X scale *factor*.
+  double sy; // Y scale *factor*.
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GESCL2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale3d.h
new file mode 100755
index 0000000..5091ae1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeScale3d.h
@@ -0,0 +1,256 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GESCL3D_H
+#define OD_GESCL3D_H /*!DOM*/
+
+
+class OdGeMatrix3d;
+#include "Ge/GeGbl.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents scaling transformations (scale vectors) in 3D space.
+    
+    \remarks
+    OdGeScale3d may be viewed as an array[3] of doubles.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeScale3d
+{
+public:
+
+ /** \param factor [in]  Uniform scale factor.
+    \param xFactor [in]  The X scale factor.
+    \param yFactor [in]  The Y scale factor.
+    \param zFactor [in]  The Z scale factor.
+    \param source [in]  Object to be cloned.
+ */
+  OdGeScale3d () 
+    : sx (1.0), sy (1.0), sz (1.0) {}
+    
+  OdGeScale3d (
+    double factor) 
+    : sx (factor), sy (factor), sz (factor) {}
+    
+  OdGeScale3d (
+    double xFactor, 
+    double yFactor, double zFactor) 
+    : sx (xFactor), sy (yFactor), sz (zFactor) {}
+
+  GE_STATIC_EXPORT static const OdGeScale3d kIdentity; // Multplicitive identity scale.
+  
+  /** \param scaleVec [in]  Any 3D scale vector.
+    \param factor [in]  Uniform scale factor.
+  */
+  OdGeScale3d operator * (
+    const OdGeScale3d& scaleVec) const;
+  OdGeScale3d operator * (
+    double factor) const;
+
+  friend OdGeScale3d operator * (
+    double factor, 
+    const OdGeScale3d& scaleVec);
+    
+  /** \param scaleVec [in]  Any 3D scale vector.
+    \param factor [in]  Uniform scale factor.
+
+    \remarks
+    Multiplication of scale vectors is defined as follows:
+    
+              scl * [xs ys zs]              = [scl*xs scl*ys scl*zs]
+              [xs1 ys1 zs1] * [xs2 ys2 zs2] = [xs1*xs2 ys1*ys2 zs1*zs2]
+  */
+  OdGeScale3d& operator *= (
+    const OdGeScale3d& scaleVec);
+  OdGeScale3d& operator *= (
+    double factor);
+    
+  /** \details
+    Sets this scale vector to the product leftSide * (this scale vector), and returns
+    a reference to this scale vector.
+    
+    \param leftSide [in]  Any 3D scale vector.
+
+    \remarks
+    Scale muliplications is commutative. 
+  */
+  OdGeScale3d& preMultBy (
+    const OdGeScale3d& leftSide);
+
+  /** \details
+    Sets this scale vector to the product (this scale vector) * (rightSide), and returns
+    a reference to this scale vector.
+    
+    \param rightSide [in]  Any 3D scale vector.
+
+    \remarks
+    Scale muliplications is commutative. 
+  */
+   OdGeScale3d& postMultBy (
+    const OdGeScale3d& rightSide);
+ 
+  /** \details
+    Sets this scale vector to the product scaleVec1 * scaleVec2 or factor * scaleVec, and returns
+    a reference to this scale vector.
+    
+    \param factor [in]  Uniform scale factor.
+    \param scaleVec [in]  Any 2D scale vector.
+    \param scaleVec1 [in]  Any 2D scale vector.
+    \param scaleVec2 [in]  Any 2D scale vector.
+    
+    \remarks
+    Multiplication of scale vectors is defined as follows:
+    
+              scl * [xs ys zs]              = [scl*xs scl*ys scl*zs]
+              [xs1 ys1 zs1] * [xs2 ys2 zs2] = [xs1*xs2 ys1*ys2 zs1*zs2]
+  */
+  OdGeScale3d& setToProduct (
+    const OdGeScale3d& scaleVec1, 
+    const OdGeScale3d& scaleVec2);
+  OdGeScale3d& setToProduct (
+    const OdGeScale3d& scaleVec, double factor);
+ 
+  /** \details
+    Returns the inverse of this scale vector. 
+  */
+  OdGeScale3d inverse () const;
+
+  /** \details
+    Sets this scale vector to its inverse, and returns
+    a reference to this scale vector. 
+  */
+  OdGeScale3d& invert ();
+  
+  /** \details
+    Returns true if and only if the scaling matrix corresponding to this scale vector isUniScaledOrtho ().
+    
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isProportional (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  
+  bool operator == (
+    const OdGeScale3d& scaleVec) const;
+  bool operator != (
+    const OdGeScale3d& scaleVec) const;
+
+  /** \details
+    Returns true if and only if scaleVec is identical to this one,
+    within the specified tolerance.
+
+    \param scaleVec [in]  Any 2D scale vector.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo (
+    const OdGeScale3d& scaleVec, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \param i [in]  Index of component.
+    
+    \remarks
+    Returns or references the ith component of the scale vector.
+
+    * 0 returns or references the X scale factor.
+    * 1 returns or references the Y scale factor.
+    * 2 returns or references the Z scale factor.
+  */
+  double operator [] (
+    unsigned int i) const { return * (&sx+i); }
+  double& operator [] (
+    unsigned int i) { return * (&sx+i); }
+    
+  /** \details
+    Sets this scale vector to the specified X and Y factors, and 
+    returns a reference to this vectors.
+
+    \param xFactor [in]  The X scale factor.
+    \param yFactor [in]  The Y scale factor.
+    \param zFactor [in]  The Z scale factor.
+  */
+  OdGeScale3d& set (
+    double xFactor, 
+    double yFactor, 
+    double zFactor) 
+  { sx = xFactor; sy = yFactor; sz = zFactor; return *this; }
+  
+  /** \remarks
+    Returns the equivalent 3D tranformation matrix.
+  */
+  operator OdGeMatrix3d () const;
+  
+  /** \details
+    Returns the transformation matrix equivalent to this scale vector.
+    
+    \param xfm [out]  Receives the 3D transformation matrix.
+    
+  */
+  void getMatrix (
+    OdGeMatrix3d& xfm) const;
+    
+  /** \details
+    Returns the scale vector corresponding to the
+    lengths of the column vectors of the transformation matrix.  
+    
+    \param xfm [out]  Receives the 3D transformation matrix.
+    
+    \remarks
+    xfm must be scaled ortho; i.e., xfm.isScaledOrtho () == true.   
+  */
+    OdGeScale3d& extractScale (
+    const OdGeMatrix3d& xfm);
+    
+  /** \details
+    Returns the scale vector corresponding to the
+    lengths of the column vectors of the transformation matrix,
+    and sets the scale factor of the matrix to 1 .  
+    
+    \param xfm [out]  Receives the 2D transformation matrix.
+    
+    \remarks
+    xfm must be scaled ortho; i.e., xfm.isScaledOrtho () == true.   
+  */
+     OdGeScale3d& removeScale (
+    OdGeMatrix3d& xfm);
+  
+  /** \details
+    Returns true if this scale vector has nonzero coordinates or false if at least one coordinate is zero.   
+  */
+  bool isValid () const { return OdNonZero (sx) && OdNonZero (sy) && OdNonZero (sz); }
+
+  double sx; // X scale *factor*.
+  double sy; // Y scale *factor*.
+  double sz; // Z scale *factor*.
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GESCL3D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSegmentChain2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSegmentChain2d.h
new file mode 100755
index 0000000..7e74fa8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSegmentChain2d.h
@@ -0,0 +1,114 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_SEGMENTCHAIN_2D_H
+#define OD_GE_SEGMENTCHAIN_2D_H /*!DOM*/
+
+#include "OdPlatform.h"
+#include "Ge/GeSplineEnt2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents piecewise linear splines in 2D space.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeSegmentChain2d : public OdGeSplineEnt2d
+{
+public: 
+  OdGeSegmentChain2d();
+  /** \param source [in]  Object to be cloned.
+  */
+  OdGeSegmentChain2d(
+    const OdGeSegmentChain2d& source);
+  /** \param points [in]  Array of fit points.
+    \param knots [in]  Knot vector.
+    \param crv [in]  A 2D curve to be approximated as a polyline.
+    \param approxEps [in]  Approximate geometric tolerance. 
+  */
+  OdGeSegmentChain2d(
+    const OdGePoint2dArray& fitpoints);
+  OdGeSegmentChain2d(
+    const OdGeKnotVector& knots,
+    const OdGePoint2dArray& points);
+  OdGeSegmentChain2d(
+    const OdGeCurve2d& crv, 
+    double approxEps);
+
+  OdGeSegmentChain2d& operator =(const OdGeSegmentChain2d& pline);
+
+  //////////////////////////////////////////////////////////////////////////
+  // overrides
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+    Closes or opens this polyline.
+
+    \param flag [in]  Boolean indicating if this polyline is to be closed.
+  */
+  OdGeSegmentChain2d& setClosed(
+    bool flag);
+
+  /** \details
+    Returns a reference to the bulge vector for this polyline.
+
+    \remarks
+    The bulge is the tangent of 1/4 the included angle of the arc,
+    measured counterclockwise.
+  */
+  OdGeDoubleArray& bulges();
+
+  /** \details
+    Returns the bulge vector for this polyline.
+
+    \remarks
+    The bulge is the tangent of 1/4 the included angle of the arc,
+    measured counterclockwise.
+  */
+  const OdGeDoubleArray& getBulges() const;
+
+  /** \details
+    Returns a reference to the vertices for this polyline.
+  */
+  OdGePoint2dArray& vertices();
+
+  /** \details
+    Returns the vertices for this polyline.
+  */
+  const OdGePoint2dArray& getVertices() const;
+
+  /** \details
+    Returns true in and only if this polyline has at least one non-zero bulge.
+  */
+  bool hasBulges() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_SEGMENTCHAIN_2D_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeShell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeShell.h
new file mode 100755
index 0000000..68f0883
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeShell.h
@@ -0,0 +1,242 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGESHELL_INCLUDED_
+#define _ODGESHELL_INCLUDED_ /*!DOM*/
+
+#include "TD_PackPush.h"
+
+#include "Ge/GePoint3dArray.h"
+#include "Ge/GeVector3dArray.h"
+#include "DbStubPtrArray.h"
+#include "Int32Array.h"
+#include "UInt16Array.h"
+#include "UInt8Array.h"
+#include "CmEntityColorArray.h"
+#include "CmTransparencyArray.h"
+#include "GsMarkerArray.h"
+#include "Gi/GiGeometry.h"
+
+/** \details
+    This class represents shell primitives.
+    
+    \remarks
+    A shell is a set of faces, defined by a list of shell vertices. Shells can have regular faces and holes and disjoint regions. 
+    Shell objects contain vertex data, edge data and face data. Vertex data is defined by one array that is the list of face vertices. 
+    Edge data contains arrays of edge properties such as edge color, linetype, visibility etc. 
+    Face data is defined by an array of shell faces and arrays of face properties such as face color, normals, transparency, material etc.
+     
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+*/
+class OdGeShell
+{
+  int                   m_nFaceStartIndex;
+public:
+  OdGeShell() : m_nFaceStartIndex(-1) {}
+
+  /** \details
+    An array of vertices that are used to construct faces of the shell.
+  */
+  OdGePoint3dArray      vertices;
+
+  /** \details
+    An array of integer number that defines a list of shell faces.
+    In a face list a particular face is defined be a set of number. The first number contains the number of vertices of the face and its sign indicates if the face is a hole or a regular face: if the face is a hole then its vertices number must be negative.
+    A hole face must be coplanar and entirely in another face (not touching edges).
+    For example, the face array {3,0,2,4,-3,1,0,5} represents two faces. The first is a regular face that consists of three vertices: vertex 0, vertex 2, and vertex 4. The second is the hole face having three vertices: vertex 1, vertex 0, and vertex 5.
+  */
+  OdInt32Array          faces;
+
+  /** \details
+    An array of edges colors.
+  */
+  OdUInt16Array         edgeColors;
+
+  /** \details
+    An array of edges true colors.
+  */
+  OdCmEntityColorArray  edgeTrueColors;
+
+  /** \details
+    An array of edges layers.
+  */
+  OdDbStubPtrArray edgeLayers;
+
+  /** \details
+    An array of edges linetypes.
+  */
+  OdDbStubPtrArray edgeLinetypes;
+
+  /** \details
+    An array of edges selection markers.
+  */
+  OdGsMarkerArray       edgeSelectionMarkers;
+
+  /** \details
+    An array of edges visibilities.
+  */
+  OdUInt8Array          edgeVisibilities;
+
+  /** \details
+    An array of faces colors.
+  */
+  OdUInt16Array         faceColors;
+
+  /** \details
+    An array of faces true colors.
+  */
+  OdCmEntityColorArray  faceTrueColors;
+
+  /** \details
+    An array of faces layers.
+  */
+  OdDbStubPtrArray faceLayers;
+
+  /** \details
+    An array of faces normal vectors.
+  */
+  OdGeVector3dArray     faceNormals;
+
+  /** \details
+    An array of faces selection markers.
+  */
+  OdGsMarkerArray       faceSelectionMarkers;
+
+  /** \details
+    An array of faces visibilities.
+  */
+  OdUInt8Array          faceVisibilities;
+
+  /** \details
+    An array of faces materials.
+  */
+  OdDbStubPtrArray faceMaterials;
+
+  /** \details
+    An array of faces mappers.
+  */
+  OdArray<OdGiMapper>   faceMappers;
+
+  /** \details
+    An array of faces transparencies.
+  */
+  OdCmTransparencyArray faceTransparencies;
+
+  /** \details
+    Adds a vertex to the vertex array of the shell.
+
+    \param vertex [in]  The vertex to be inserted.
+  */
+  void addVertex(const OdGePoint3d& vertex)
+  {
+    vertices.push_back(vertex);
+  }
+
+  /** \details
+    Ends face assembling. Writes the number of face vertices that have been added by the addFaceVertex() method.
+  */
+  void endFace()
+  {
+    if(m_nFaceStartIndex>=0)
+    {
+      faces[m_nFaceStartIndex] *= (faces.size()-m_nFaceStartIndex-1);
+      m_nFaceStartIndex = -1;
+    }
+  }
+
+  /** \details
+    Starts face assembling. Sets the face index at the start position of a new face to be added and reserves place for the number of face vertices adding -1 or 1 values: -1 if a hole face is expected and 1 for a regular face.
+
+    \param bHole [in]  Indicates if a hole or regular face is expected. It's false by default.
+  */
+  void startFace(bool bHole = false)
+  {
+    ODA_ASSERT(m_nFaceStartIndex==-1); // endFace() wasn't called.
+    m_nFaceStartIndex = faces.size();
+    faces.push_back(bHole ? -1 : 1);
+  }
+
+  /** \details
+    Adds a face vertex with a specified index to the face array. 
+
+    \param nVertexIndex [in]  The index from the shell vertices array.
+  */
+  void addFaceVertex(int nVertexIndex)
+  {
+    edgeVisibilities.push_back(OdUInt8(nVertexIndex > 0));
+    faces.push_back(Od_abs(nVertexIndex)-1);
+  }
+
+  /** \details
+    Draws the shell using the specified vectorization context.
+
+    \param geometry [in]  The vectorization context.
+  */
+  void draw(OdGiGeometry& geometry)
+  {
+    ODA_ASSERT(m_nFaceStartIndex<0 || faces[m_nFaceStartIndex]>2); // endFace() wasn't called.
+
+    OdGiEdgeData edgeData;
+    if (!edgeColors.isEmpty()) 
+      edgeData.setColors(edgeColors.getPtr());
+    if (!edgeTrueColors.isEmpty()) 
+      edgeData.setTrueColors(edgeTrueColors.getPtr());
+    if (!edgeLayers.isEmpty())
+      edgeData.setLayers((OdDbStub**)edgeLayers.getPtr());
+    if (!edgeLinetypes.isEmpty()) 
+      edgeData.setLinetypes((OdDbStub**)edgeLinetypes.getPtr());
+    if (!edgeSelectionMarkers.isEmpty()) 
+      edgeData.setSelectionMarkers(edgeSelectionMarkers.getPtr());
+    if (!edgeVisibilities.isEmpty()) 
+      edgeData.setVisibility(edgeVisibilities.getPtr());
+
+    OdGiFaceData faceData;
+    if (!faceColors.isEmpty())
+      faceData.setColors(faceColors.getPtr());
+    if (!faceTrueColors.isEmpty()) 
+      faceData.setTrueColors(faceTrueColors.getPtr());
+    if (!faceLayers.isEmpty()) 
+      faceData.setLayers((OdDbStub**)faceLayers.getPtr());
+    if (!faceNormals.isEmpty()) 
+      faceData.setNormals(faceNormals.getPtr());
+    if (!faceSelectionMarkers.isEmpty()) 
+      faceData.setSelectionMarkers(faceSelectionMarkers.getPtr());
+    if (!faceVisibilities.isEmpty()) 
+      faceData.setVisibility(faceVisibilities.getPtr());
+    if (!faceMaterials.isEmpty()) 
+      faceData.setMaterials((OdDbStub**)faceMaterials.getPtr());
+    if (!faceMappers.isEmpty()) 
+      faceData.setMappers(faceMappers.getPtr());
+    if (!faceTransparencies.isEmpty()) 
+      faceData.setTransparency(faceTransparencies.getPtr());
+
+    geometry.shell(vertices.size(), vertices.getPtr(), faces.size(), faces.getPtr(), &edgeData, &faceData);
+  }
+};
+
+#include "TD_PackPop.h"
+
+
+#endif // _ODGESHELL_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSphere.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSphere.h
new file mode 100755
index 0000000..f0989f8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSphere.h
@@ -0,0 +1,256 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GESPHERE_H
+#define OD_GESPHERE_H /*!DOM*/
+
+#include "Ge/GeSurface.h"
+class OdGeCircArc3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents spheres.  
+
+    \remarks
+    A sphere is defined by its
+    * radius
+    * center
+    * northAxis
+    * refAxis
+
+    northAxis defines the direction from the center to the north pole. 
+
+    refAxis, a vector orthogonal to northAxis, the prime meridian.
+
+    Latitude is defined by the U parameter, which defaults to 
+    [-OdaPI/2, OdaPI/2] for closed spheres.  The lower bound maps to the south
+    pole, zero maps to the equator, and the upper bound maps to the north pole.
+
+    Longitude is defined by the V parameter, which defaults to 
+    [-OdaPI, OdaPI) for closed spheres.  Zero corresponds to the meridian defined by
+    the refAxis of this sphere.
+
+    The sphere is periodic in V with a period of Oda2PI.
+
+    [umin, umax] by [vmin, vmax] defines a spherical patch with 4 sides
+    bounded by 2 longitudinal arcs and 2 latitudinal arcs.  
+
+    The following constraints apply when defining a patch.
+
+    * umin < umax and |umin - umax| <= Oda2PI.
+    * vmin < vmax and |vmin - vmax| <= OdaPI.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeSphere.html, Working with Spheress>
+*/
+class GE_TOOLKIT_EXPORT OdGeSphere : public OdGeSurface
+{
+public:
+
+
+  /**
+    \param radius [in] The *radius* of this sphere.
+    \param center [in]  The origin of the this sphere.
+    \param northAxis [in]  the *direction* to the north pole.
+    \param refAxis [in] the *direction* to the prime meridian.
+    \param startAngleU [in] Starting longitude.
+    \param endAngleU [in] Ending longitude.
+    \param startAngleV [in] Starting latitude.
+    \param endAngleV [in] Ending latitude.
+  */
+  OdGeSphere();
+  OdGeSphere(
+    double radius, 
+    const OdGePoint3d& center);
+  OdGeSphere(
+    double radius, 
+    const OdGePoint3d& center,
+    const OdGeVector3d& northAxis, 
+    const OdGeVector3d& refAxis,
+    double startAngleU, 
+    double endAngleU, 
+    double startAngleV, 
+    double endAngleV);
+  OdGeSphere(const OdGeSphere& sphere);
+
+  /** \details
+    Returns the radius of this sphere.
+  */
+   double radius() const;
+
+  /** \details
+    Returns the center of this sphere.
+  */
+   OdGePoint3d center() const;
+
+  /** \details
+    Returns the start and end longitude.
+
+    \param startAngleU [out]  Receives the start longitude.
+    \param endAngleU [out]  Receives the end longitude.
+  */
+   void getAnglesInU(
+    double& startAngleU, 
+    double& endAngleU) const;
+
+  /** \details
+    Returns the start and end latitude.
+
+    \param startAngleV [out]  Receives the start latitude.
+    \param endAngleV [out]  Receives the end latitude.
+  */
+   void getAnglesInV(
+    double& startAngleV, 
+    double& endAngleV) const;
+
+  /** \details
+    Returns the direction to the north pole.
+
+    \param northAxis [out]  Receives the direction to the north pole.
+  */
+   OdGeVector3d northAxis() const;
+
+  /** \details
+    Returns the direction to the north pole.
+
+    \param refAxis [out]  Receives the direction to the prime meridian.
+  */
+   OdGeVector3d refAxis() const;
+
+  /** \details
+    Returns the location of the north pole.
+  */
+   OdGePoint3d northPole() const;
+
+  /** \details
+    Returns the location of the south pole.
+  */
+   OdGePoint3d southPole() const;
+
+  /** \details
+    Returns true if and only if the normal to this surface
+    is pointing outward.
+  */
+   bool isOuterNormal() const;
+
+  /** \details
+    Returns true if and only if the equator is full circle.
+
+    \param tol [in]  Geometric tolerance.
+  */
+     bool isClosed(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Sets the radius of this sphere.
+
+    \param radius [in]  The radius of this sphere.
+  */
+   OdGeSphere& setRadius(
+    double radius);
+
+  /** \details
+    Sets the startint and ending longitudes.
+
+    \param startAngleU [in]  Starting longitude.
+    \param endAngleU [in]  Ending longitude.
+  */
+   OdGeSphere& setAnglesInU(
+    double startAngleU, 
+    double endAngleU);
+
+  /** \details
+    Sets the starting and ending latitudes.
+
+    \param startAngleV [in]  Starting latitude.
+    \param endAngleV [in]  Ending latitude.
+  */
+   OdGeSphere& setAnglesInV(
+    double startAngleV, 
+    double endAngleV);
+
+  /** \details
+    Sets the parameters for this sphere according to the arguments.
+
+    \param radius [in]  The radius of this sphere.
+    \param center [in]  The origin of the this sphere.
+    \param northAxis [in]  the direction to the north pole.
+    \param refAxis [in]  the direction to the prime meridian.
+    \param startAngleU [in]  Starting longitude.
+    \param endAngleU [in]  Ending longitude.
+    \param startAngleV [in]  Starting latitude.
+    \param endAngleV [in]  Ending latitude.
+
+    \remarks
+    Returns a reference to this sphere.
+  */
+   OdGeSphere& set(
+    double radius, 
+    const OdGePoint3d& center);
+   OdGeSphere& set(
+    double radius, 
+    const OdGePoint3d& center,
+    const OdGeVector3d& northAxis,
+    const OdGeVector3d& refAxis,
+    double startAngleU,
+    double endAngleU,
+    double startAngleV,
+    double endAngleV);
+
+  OdGeSphere& operator =(const OdGeSphere& sphere);
+
+  /** \details
+    Returns true if and only if this cylinder intersects with
+    a line entity, and returns the number of intersections and the
+    points of intersection.
+
+    \param lineEnt [in]  Any 3D line entity.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point.
+    \param p2 [out]  Receives the second intersection point.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 is valid if and only if numInt >= 1.
+    * p2 is valid if and only if numInt = 2.
+  */
+   bool intersectWith(
+    const OdGeLinearEnt3d& lineEnt, 
+    int& numInt,
+    OdGePoint3d& p1, 
+    OdGePoint3d& p2,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  //////////////////////////////////////////////////////////////////////////
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GESPHERE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt2d.h
new file mode 100755
index 0000000..788a3fe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt2d.h
@@ -0,0 +1,207 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_SPLINE_ENT_2D_H
+#define OD_GE_SPLINE_ENT_2D_H /*!DOM*/
+
+class OdGeKnotVector;
+
+#include "Ge/GeCurve2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents various spline objects in 2D space. Currently not implemented.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeSplineEnt2d : public OdGeCurve2d
+{
+public:
+
+  /** \details
+    Returns true if and only if the spline is rational or a polynomial.
+
+    \remarks
+    This function is meaningful only for OdGeNurbCurve2d objects derived from OdGeSplineEnt2d.
+
+    \note
+    Currently not implemented.
+  */
+  bool isRational() const;
+
+  /** \details
+    Returns the degree of the spline.
+
+    \note
+    Currently not implemented.
+  */
+  int degree() const;
+
+  /** \details
+    Returns the order of the spline.
+
+    \note
+    Currently not implemented.
+  */
+  int order() const;
+
+  /** \details
+    Returns the number of knots in the knot vector.
+
+    \note
+    Currently not implemented.
+  */
+  int numKnots() const;
+
+  /** \details
+    Returns the knot vector.
+
+    \note
+    Currently not implemented.
+  */
+  const OdGeKnotVector& knots() const;
+
+  /** \details
+    Returns the number of points in the control point array.
+
+    \note
+    Currently not implemented.
+  */
+  int numControlPoints() const;
+
+  /** \details
+    Returns the degree of the highest derivative that is defined at a specified knot.
+
+    \param knotIndex [in]  Knot index.
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    Currently not implemented.
+  */
+  int continuityAtKnot(
+    int knotIndex, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the parameter corresponding to the start point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+  double startParam() const;
+
+  /** \details
+    Returns the parameter corresponding to the end point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+  double endParam() const;
+
+  /** \details
+    Returns the start point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+  OdGePoint2d startPoint() const;
+
+  /** \details
+    Returns the end point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+  OdGePoint2d endPoint() const;
+
+  /** \details
+    Returns true if and only if the spline is constructed using fit points.
+
+    \note
+    Currently not implemented.
+  */
+  bool hasFitData() const;
+
+  /** \details
+    Returns a knot value for the specified knot.
+
+    \param knotIndex [in]  Knot index.
+
+    \note
+    Currently not implemented.
+  */
+  double knotAt(
+    int knotIndex) const;
+
+  /** \details
+    Sets the knot value for the specified knot.
+
+    \param knotIndex [in]  Knot index.
+    \param val [in]  The new value for the knot.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeSplineEnt2d& setKnotAt(
+    int knotIndex, 
+    double val);
+
+  /** \details
+    Returns the specified control point in the control point array.
+
+    \param controlPointIndex [in]  Control point index.
+
+    \note
+    Currently not implemented.
+  */
+  OdGePoint2d controlPointAt(
+    int controlPointIndex) const;
+
+  /** \details
+    Sets the specified control point in the control point array.
+
+    \param controlPointIndex [in]  Control point index.
+
+    \note
+    Currently not implemented.
+  */
+  OdGeSplineEnt2d& setControlPointAt(
+    int controlPointIndex, 
+    const OdGePoint2d& point);
+
+  OdGeSplineEnt2d& operator =(const OdGeSplineEnt2d& spline);
+
+  //////////////////////////////////////////////////////////////////////////
+
+protected:
+  OdGeSplineEnt2d();
+  OdGeSplineEnt2d(
+    const OdGeSplineEnt2d& spline);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GE_SPLINE_ENT_2D_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt3d.h
new file mode 100755
index 0000000..84408cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSplineEnt3d.h
@@ -0,0 +1,198 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GESPNT3D_H
+#define OD_GESPNT3D_H /*!DOM*/
+
+class OdGeKnotVector;
+#include "Ge/GeCurve3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents various spline objects in 3D space. Currently not implemented.
+    
+    Library: TD_Ge
+   
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeSplineEnt3d : public OdGeCurve3d
+{
+public:
+
+
+  /** \details
+    Returns true if and only if the spline is rational or a polynomial.
+
+    \remarks
+    This function is meaningful only for OdGeNurbCurve3d objects derived from OdGeSplineEnt3d.
+
+    \note
+    Currently not implemented.
+  */
+   bool isRational() const;
+
+  /** \details
+    Returns the degree of the spline.
+
+    \note
+    Currently not implemented.
+  */
+   int degree() const;
+
+  /** \details
+    Returns the order of the spline.
+
+    \note
+    Currently not implemented.
+  */
+   int order() const;
+
+  /** \details
+    Returns the number of knots in the knot vector.
+
+    \note
+    Currently not implemented.
+  */
+   int numKnots() const;
+
+  /** \details
+    Returns the knot vector.
+
+    \note
+    Currently not implemented.
+  */
+   const OdGeKnotVector& knots() const;
+
+  /** \details
+    Returns the number of points in the control point array.
+
+    \note
+    Currently not implemented.
+  */
+   int numControlPoints() const;
+
+   int continuityAtKnot(
+    int index, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the parameter corresponding to the start point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+   double startParam() const;
+
+  /** \details
+    Returns the parameter corresponding to the end point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+   double endParam() const;
+
+  /** \details
+    Returns the start point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d startPoint() const;
+
+  /** \details
+    Returns the end point of this spline.
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d endPoint() const;
+
+  /** \details
+    Returns true if and only if the spline is constructed using fit points.
+
+    \note
+    Currently not implemented.
+  */
+   bool hasFitData() const;
+
+  /** \details
+    Returns a knot value for the specified knot.
+
+    \param knotIndex [in]  Knot index.
+
+    \note
+    Currently not implemented.
+  */
+   double knotAt(
+    int knotIndex) const;
+
+  /** \details
+    Sets the knot value for the specified knot.
+
+    \param knotIndex [in]  Knot index.
+    \param val [in]  The new value for the knot.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeSplineEnt3d& setKnotAt(
+    int knotIndex, 
+    double val);
+
+  /** \details
+    Returns the specified control point in the control point array.
+
+    \param controlPointIndex [in]  Control point index.
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d controlPointAt(
+    int controlPointIndex) const;
+
+  /** \details
+    Sets the specified control point in the control point array.
+
+    \param controlPointIndex [in]  Control point index.
+
+    \note
+    Currently not implemented.
+  */
+   OdGeSplineEnt3d& setControlPointAt(
+    int controlPointIndex, 
+    const OdGePoint3d& point);
+
+  OdGeSplineEnt3d& operator =(const OdGeSplineEnt3d& spline);
+
+  //////////////////////////////////////////////////////////////////////////
+
+protected:
+  OdGeSplineEnt3d();
+  OdGeSplineEnt3d(const OdGeSplineEnt3d&);
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSpunSurf.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSpunSurf.h
new file mode 100755
index 0000000..f332ca1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSpunSurf.h
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_GESPUNSURF_H
+#define OD_GESPUNSURF_H /*!DOM*/
+
+//
+/** \details
+*/
+
+#include "Ge/GeSurface.h"
+#include "Ge/GeInterval.h"
+#include "OdPlatformSettings.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+class OdGeCircArc3d;
+class OdGeLinearEnt3d;
+
+#include "TD_PackPush.h"
+
+// A spun surface has a parametric representation of the form:
+// R( u, v ) = Z( u ) + ( C( u ) - Z( u ))cos( v ) + A X ( C( u ) - Z( u ) ) sin( v)
+// where
+// � C(u) is the profile curve
+// � Z(u) is the projection of C(u) onto the spin axis
+// � A is the spin axis direction (unit vector)
+// � C must not be an intersection curve or a trimmed curve
+// NOTE: Z(u) = P + ( ( C( u ) - P ) . A )A where P is a reference point on the axis.
+//
+// FOR INTERNAL USE.
+//
+
+/** \details
+    For Teigha internal use only.
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeSpunSurf : public OdGeSurface
+{
+public:
+
+
+  OdGeSpunSurf();
+  OdGeSpunSurf(
+    const OdGeCurve3d *pProfile, 
+    const OdGePoint3d &pBase, 
+    const OdGeVector3d &pAxis);
+  OdGeSpunSurf(
+    const OdGeSpunSurf&);
+
+  OdGeSpunSurf& operator = (
+    const OdGeSpunSurf& extCurve);
+
+  const OdGeCurve3d *getProfile() const;
+  OdGePoint3d getBasePoint() const;
+  OdGeVector3d getAxis() const;
+  OdGeVector3d getRef() const;
+  OdGeSpunSurf& setAngles(double startAngle, double endAngle);
+  OdGeSpunSurf& setRef(const OdGeVector3d &pRef);
+  void set(const OdGeCurve3d *pProfile, const OdGePoint3d &pBase, const OdGeVector3d &pAxis);
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GESPUNSURF_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfSurfInt.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfSurfInt.h
new file mode 100755
index 0000000..a7dc44f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfSurfInt.h
@@ -0,0 +1,313 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GESSINT_H
+#define OD_GESSINT_H /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+
+class OdGeCurve3d;
+class OdGeCurve2d;
+class OdGeSurface;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class holds the intersection data of two surfaces.
+
+    \remarks
+    * This object contains references to surface objects but does not own them.
+    * Actual intersection calculations are not performed until a query function is called.
+    * Any returned objects other than pointers to the referenced surfaces are owned by the called.
+      
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeSurfSurfInt  : public OdGeEntity3d
+{
+public:
+
+
+  /** \param srf1 [in]  First surface.
+    \param srf2 [in]  Second surface.
+    \param tol [in]  Geometric tolerance.
+    \param source [in]  Object to be cloned.
+  */
+  OdGeSurfSurfInt();
+
+  OdGeSurfSurfInt(
+    const OdGeSurface& srf1,
+    const OdGeSurface& srf2,
+    const OdGeTol& tol = OdGeContext::gTol) ;
+  OdGeSurfSurfInt(
+    const OdGeSurfSurfInt& source);
+
+  /** \details
+    Returns the first surface.
+  */
+   const OdGeSurface* surface1() const;
+
+  /** \details
+    Returns the second surface.
+  */
+   const OdGeSurface* surface2() const;
+
+  /** \details
+    Returns the tolerance for determining intersections.
+  */
+   OdGeTol tolerance() const;
+
+  /** \details
+    Returns the number of intersections between the two surfaces,
+    and the status of the intersections.
+
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   int numResults(
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the 3D curve representing the specified intersection
+    and the status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param isExternal [in]  Unknown.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   OdGeCurve3d* intCurve(
+    int intNum, 
+    bool isExternal, 
+    OdGeIntersectError& status) const; 
+
+  /** \details
+    Returns the 2D curve representing the specified intersection
+    and the status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param isExternal [in]  Unknown.
+    \param isFirst [in]  If true, returns the curve on the first surface, otherwise it the curve on the second surface.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    If the intersection is not a 2d curve, returns 0.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   OdGeCurve2d* intParamCurve(
+    int intNum, 
+    bool isExternal, 
+    bool isFirst, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the 3d point representing the specified intersection,
+    and the status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    If the intersection is not a 3d point, returns 0.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   OdGePoint3d intPoint(
+    int intNum, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the parameter pairs for the specified intersection point with respect to each surface,
+    and the status of the intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param param1 [out]  Receives the parameter pair of the intersection point with respect to the first curve.
+    \param param2 [out]  Receives the parameter pair of the intersection point with respect to the second curve.
+    \param status [out]  Receives the status of the intersection.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   void getIntPointParams(
+    int intNum,
+    OdGePoint2d& param1, 
+    OdGePoint2d& param2, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the configurations on either side of the intersection each surface.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param surf1Left [out]  Receives the configuration for surface 1 on the left side of the intersection.
+    \param surf1Right [out]  Receives the configuration for surface 1 on the right side of the intersection.
+    \param surf2Left [out]  Receives the configuration for surface 2 on the left side of the intersection.
+    \param surf2Right [out]  Receives the configuration for surface 2 on the right side of the intersection.
+    \param status [out]  Receives the status of the intersection.
+    
+    \remarks
+    Possible values for surf1Left, surf1Right, surf2Left, and surf2Right are as follows:
+
+    @untitled table
+    kSSIUnknown
+    kSSIOut            Neighborhood is outside this surface.
+    kSSIIn             Neighborhood is inside this surface.
+    kSSICoincident     Non-zero area intersection.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown 
+
+    \note
+    Currently not implemented.
+  */
+   void getIntConfigs(
+    int intNum, 
+    OdGe::ssiConfig& surf1Left,  
+    OdGe::ssiConfig& surf1Right,
+    OdGe::ssiConfig& surf2Left,  
+    OdGe::ssiConfig& surf2Right,  
+    OdGe::ssiType& intType, 
+    int& dim, 
+    OdGeIntersectError& status) const; 
+
+  /** \details
+    Description Pending.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible values for status are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   int getDimension(
+    int intNum, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Returns the type of the specified intersection.
+
+    \param intNum [in]  The zero-based index of the intersection curve to return.
+    \param status [out]  Receives the status of the intersection.
+
+    \remarks
+    Possible return values for the configuratons are as follows:
+
+    @untitled table
+    kXXOk
+    kXXIndexOutOfRange
+    kXXWrongDimensionAtIndex
+    kXXUnknown
+
+    \note
+    Currently not implemented.
+  */
+   OdGe::ssiType getType(
+    int intNum, 
+    OdGeIntersectError& status) const;
+
+  /** \details
+    Sets the surfaces and tolerances whose intersection data is to be determines.
+    Returns a reference to this SurfSurfInt.
+
+    \param srf1 [in]  First surface.
+    \param srf2 [in]  Second surface.
+    \param tol [in]  Geometric tolerance.
+  */
+   OdGeSurfSurfInt& set(
+    const OdGeSurface& srf1,
+    const OdGeSurface& srf2,
+    const OdGeTol& tol = OdGeContext::gTol);
+
+  OdGeSurfSurfInt& operator =(
+    const OdGeSurfSurfInt& surfSurfInt);
+
+  //////////////////////////////////////////////////////////////////////////
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GESSINT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurface.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurface.h
new file mode 100755
index 0000000..23351ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurface.h
@@ -0,0 +1,220 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GESURF_H
+#define OD_GESURF_H /*!DOM*/
+
+#include "Ge/GeEntity3d.h"
+#include "Ge/GeVector3dArray.h"
+#include "Ge/GePoint2d.h"
+
+class OdGePoint2d;
+class OdGeCurve3d;
+class OdGePointOnCurve3d;
+class OdGePointOnSurface;
+class OdGePointOnSurfaceData;
+class OdGeInterval;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all OdGe parametric surfaces.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeSurface : public OdGeEntity3d
+{
+public:
+
+
+  /** \details
+    Returns the 2D pair of parameter values of a point on this surface.
+
+    \param point [in]  Point to be evaluated.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    The returned parameters specify a point within tol of point.
+    If point is not on this surface, the results are unpredictable.
+    If you are not sure the point is on this surface, use 
+    isOn() instead of this function.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+   OdGePoint2d paramOf(
+    const OdGePoint3d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  TD_USING(OdGeEntity3d::isOn);
+  /** \param ParamPoint [out]  Receives the 2D pair of parameter values at the point. 
+   
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+   bool isOn( 
+    const OdGePoint3d& point, 
+    OdGePoint2d& paramPoint,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this surface closest to the specified point.
+
+    \param point [in]  Any 3D point.
+    \param tol [in]  Geometric tolerance.
+  */
+   OdGePoint3d closestPointTo(
+    const OdGePoint3d& point,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point on this surface closest to the specified point.
+
+    \param point [in]  Any 3D point.
+    \param pntOnSurface [out]  Receives the closest point on surface to specified point. 
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+   void getClosestPointTo(
+    const OdGePoint3d& point, 
+    OdGePointOnSurface& pntOnSurface,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the distance to the point on this curve closest to the specified point.
+
+    \param point [in]  Any 3D point.
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+   double distanceTo(
+    const OdGePoint3d& point, 
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the normal of this surface has been reversed an odd
+    number of times.
+  */
+   bool isNormalReversed() const;
+
+  /** \details
+    Reverses the normal of this surface and reurns a reference to this surface.
+  */
+   OdGeSurface& reverseNormal();
+
+  /** \details
+    Returns the minimum rectangle in parameter space that contains the parameter
+    domain of this surface.
+
+    \param intrvlU [out]  Receives the u interval.
+    \param intrvlV [out]  Receives the v interval.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+   void getEnvelope(
+    OdGeInterval& intrvlU, 
+    OdGeInterval& intrvlV) const;
+
+  /** \details
+    Returns true if and only if this surface is closed in the U direction.
+
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+     bool isClosedInU(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if this surface is closed in the V direction.
+
+    \param tol [in]  Geometric tolerance.
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+     bool isClosedInV(
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns the point corresponding to the parameter pair, as well as the
+    derivatives and the normal at that point.
+
+    \param param [in]  The parameter pair to be evaluated.
+    \param numDeriv [in]  The number of derivatives to be computed.
+    \param derivatives [out]  Receives an array of derivatives at the point corresponding to param.
+    \param normal [out]  Receives the normal at the point corresponding to param.
+    
+    \remarks
+    Derivatives are ordered as follows: du, dv, dudu, dvdv, dudv
+
+    \note
+    By default this function throws exception "not Implemented". Should be implemented in derived classes.
+  */
+   OdGePoint3d evalPoint(
+    const OdGePoint2d& param) const;
+   OdGePoint3d evalPoint(
+    const OdGePoint2d& param, 
+    int numDeriv,
+    OdGeVector3dArray& derivatives) const;
+   OdGePoint3d evalPoint(
+    const OdGePoint2d& param,
+    int numDeriv,
+    OdGeVector3dArray& derivatives, 
+    OdGeVector3d& normal) const;
+
+  OdGeSurface& operator=(
+    const OdGeSurface& surf);
+
+  //////////////////////////////////////////////////////////////////////////
+  // TD Special :
+
+  /** \details
+  Returns projP and true,
+  if and only if there is a point on this surface, projP, where
+  a normal to this surface passes through the point p.
+
+  \param p [in]  Any 3D point.
+  \param projP [out]  Receives the point on this surface. 
+  */
+   bool project(const OdGePoint3d& p, OdGePoint3d& projP, const OdGeTol& tol = OdGeContext::gTol) const;
+
+protected:
+  OdGeSurface();
+  OdGeSurface(
+    const OdGeSurface& surf);
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GESURF_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfaceCurve2dTo3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfaceCurve2dTo3d.h
new file mode 100755
index 0000000..05f012c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeSurfaceCurve2dTo3d.h
@@ -0,0 +1,76 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_SURFACECURVE2DTO3D_H
+#define OD_SURFACECURVE2DTO3D_H /*!DOM*/
+
+#include "Ge/GeCurve3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class provides a 3D representation for curves defined in the 2D surface parameter space.
+
+    \remarks
+    A OdGeSurfaceCurve2dTo3d object is a 3D curve, and a point of this curve at specific parameter value can be calculated by evaluating a point of the UV-curve at the corresponding parameter value:
+    pointCurve3d = pSurf->evalPoint(pUVCurve->evalPoint(param));
+
+    Library: TD_Ge
+
+   <group OdGe_Classes> 
+*/
+class GE_TOOLKIT_EXPORT OdGeSurfaceCurve2dTo3d : public OdGeCurve3d
+{
+public:
+
+  /** \param source [in]  The Source OdGeSurfaceCurve2dTo3d object to be cloned.
+    \param uvc [in]  The 2D curve defined in parameters space of the surf surface.
+    \param surf [in]  The surface that contains the uvc curve.
+  */
+  OdGeSurfaceCurve2dTo3d();
+  OdGeSurfaceCurve2dTo3d(
+    const OdGeSurfaceCurve2dTo3d& source);
+  OdGeSurfaceCurve2dTo3d(
+    const OdGeCurve2d& uvc, 
+    const OdGeSurface& surf);
+
+  OdGeSurfaceCurve2dTo3d& operator =(
+    const OdGeSurfaceCurve2dTo3d& arc);
+
+  /** \details
+    Returns the geometric extents of this curve.
+
+    \param extents [out]  Receives the geometric extents.
+  */
+  void getGeomExtents(
+    OdGeExtents3d& extents) const;
+
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess.h
new file mode 100755
index 0000000..1079b9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess.h
@@ -0,0 +1,228 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGITESSELATOR_H_INCLUDED__
+#define __ODGITESSELATOR_H_INCLUDED__
+
+
+#include "RxObject.h"
+#include "Ge/GePoint2d.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeVector2d.h"
+
+#include "TD_PackPush.h"
+
+#ifndef ODGT_NAMESPACE
+  #define ODGT_NAMESPACE OdGeTess
+  #define ODGT_PTRTYPE OdSmartPtr<Contour>
+  #define ODGT_PARENT  : public OdRxObject
+  #define ODGT_MEMBERS
+  #define ODGT_HOLDER
+  #define ODGT_HOLDER2
+  #define ODGT_MEMBERS2
+#endif
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace ODGT_NAMESPACE
+{
+
+enum EdgesType
+{
+  kEtUndef=0,
+  kEtLeft,
+  kEtRight,
+  kEtParallel
+};
+
+
+enum BreakOptions
+{
+  kBrCopyResult   = 1,
+  kBrDetectHoles  = 2,
+  kBrNormalized   = 4
+};
+
+class Vertex;
+
+struct Intersection
+{
+  Vertex* pEdgeStart;
+  double u1;
+  bool operator < (const Intersection& op) const { return u1 < op.u1; }
+  bool operator < (double op) const { return u1 < op; }
+};
+
+typedef OdArray<Intersection, OdMemoryAllocator<Intersection> > Intersections;
+
+class Contour;
+class LocalVert;
+typedef ODGT_PTRTYPE ContourPtr;
+
+class GE_TOOLKIT_EXPORT Contour ODGT_PARENT
+{
+  friend class Vertex;
+  ODGT_MEMBERS
+protected:
+  Vertex     *m_pFirstVertex;
+  ContourPtr  m_pNextContour;
+
+  const void *m_pCoords;
+
+  unsigned    m_b2d:1;
+  unsigned    m_bClockwise:1;
+  unsigned    m_bFailed:1;
+  double      m_tol;
+
+  void addVertex(Vertex* vertex);
+  void removeVertex(Vertex* vertex);
+  void delVertex(Vertex* vertex);
+  void breakContour(Vertex* vertex);
+  bool normalize(double size);
+  void checkClockwiseOriented(int bNested);
+  static void split(Vertex* v1, Vertex* v2);
+  bool isInside(const OdGePoint2d& point) const;
+  static bool isIncommingR(const Vertex* v1, const Vertex* v2);
+  void concatContours(Vertex* pC1vert, Contour* pContour2, Vertex* pC2vert);
+  void removeEqualVertexes(const OdGeTol& tol);
+  ContourPtr lastContour() const;
+  void splitPolygon(Vertex* pV1, Vertex* pV2);
+
+  void breakToConvex2(double size);
+  double calcMaxCoordValue(double& size) const;
+  bool splitOnCoincidentPoint(double size);
+protected:
+  Contour();
+public:
+  ~Contour();
+
+  static ContourPtr create(const void* coords, bool b2d ODGT_HOLDER);
+  static ContourPtr create(const OdGePoint2d* coords ODGT_HOLDER) { return create(coords, true ODGT_HOLDER2); }
+  static ContourPtr create(const OdGePoint3d* coords ODGT_HOLDER) { return create(coords, false ODGT_HOLDER2); }
+  ContourPtr insert(Contour* pCntr2Ins)
+  {
+    ODA_ASSERT(pCntr2Ins!=this);
+    pCntr2Ins->m_pNextContour = m_pNextContour;
+    return (m_pNextContour = pCntr2Ins);
+  }
+  Vertex* addVertex(int index, unsigned int edgeId = 0);
+  ContourPtr breakToConvex(unsigned int options, double eps = -1.);
+  void inverse();
+
+  const Vertex* head() const { return m_pFirstVertex; }
+        Vertex* head()       { return m_pFirstVertex; }
+  bool vectorIntersects(const Vertex* v1, const Vertex* v2, bool bNested) const;
+  static bool isIncomming(const Vertex* v1, const Vertex* v2);
+  double squareValue() const;
+  ContourPtr copy(int bNested) const;
+  bool isIncommingOrOnEdgeR(const Vertex* pV1, const Vertex* pV2) const;
+  const OdGePoint2d& point(int index) const
+  {
+    if(m_b2d)
+      return reinterpret_cast<const OdGePoint2d*>(m_pCoords)[index];
+    return *reinterpret_cast<const OdGePoint2d*>(reinterpret_cast<const OdGePoint3d*>(m_pCoords) + index);
+  }
+  ContourPtr next() const { return m_pNextContour; }
+
+  const void* coords() const { return m_pCoords; }
+  bool is2d() const { return m_b2d; }
+  bool isTriangle() const;
+  bool isLineSeg() const;
+  bool intersections(const Vertex* vert1, const Vertex* vert2, Intersections& res, bool bNested) const;
+  bool intersections_lv(const Vertex* vert1, const LocalVert* vert2, Intersections& res, bool bNested) const;
+  bool failed() const { return m_bFailed; }
+  double tol() const { return m_tol; }
+};
+
+
+class GE_TOOLKIT_EXPORT Vertex
+{
+  friend class Contour;
+  Contour        *m_pContour;
+
+  ODGT_MEMBERS2
+
+protected:
+  Vertex         *m_pNextVertex;
+  Vertex         *m_pPrevVertex;
+  int             m_nIndex;
+  unsigned int    m_nEdgeId;
+
+public:
+  Vertex()
+    : m_pContour(0)
+    , m_pNextVertex(0)
+    , m_pPrevVertex(0)
+    , m_nIndex(0)
+    , m_nEdgeId(0)
+  {
+  }
+  void link(Vertex* vert2)
+  {
+    m_pNextVertex = vert2;
+    vert2->m_pPrevVertex = this;
+  }
+  const Vertex* next() const { return m_pNextVertex; }
+        Vertex* next()       { return m_pNextVertex; }
+  const Vertex* prev() const { return m_pPrevVertex; }
+        Vertex* prev()       { return m_pPrevVertex; }
+           int index() const { return m_nIndex; }
+  void setIndex(int nIndex) { m_nIndex = nIndex; }
+  unsigned int edgeId() const { return m_nEdgeId; }
+  void setEdgeId(unsigned int nEdgeId) { m_nEdgeId = nEdgeId; }
+
+  const OdGePoint2d& point() const { return m_pContour->point(m_nIndex); }
+
+  EdgesType edgesType() const;
+
+  ContourPtr contour() const { return m_pContour; }
+  void setContour(Contour* pContour) { m_pContour = pContour; }
+
+};
+
+inline bool Contour::isTriangle() const
+{
+  return (m_pFirstVertex && m_pFirstVertex->next()->next()==m_pFirstVertex->prev());
+}
+
+inline bool Contour::isLineSeg() const
+{
+  return (m_pFirstVertex && m_pFirstVertex->next()==m_pFirstVertex->prev());
+}
+
+
+} //namespace
+
+#include "TD_PackPop.h"
+
+#undef ODGT_NAMESPACE
+#undef ODGT_PTRTYPE
+#undef ODGT_PARENT
+#undef ODGT_MEMBERS
+#undef ODGT_HOLDER
+#undef ODGT_HOLDER2
+#undef ODGT_MEMBERS2
+
+#endif // __ODGITESSELATOR_H_INCLUDED__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess2.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess2.h
new file mode 100755
index 0000000..1e9d0ed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTess2.h
@@ -0,0 +1,162 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGITESSELATOR_2_H_INCLUDED__
+#define __ODGITESSELATOR_2_H_INCLUDED__
+
+#include "TD_PackPush.h"
+
+#include "OdList.h"
+#include "OdArray.h"
+
+#define ODGT_NAMESPACE OdGeTess2
+#define ODGT_PTRTYPE Contour*
+#define ODGT_PARENT
+
+#define ODGT_MEMBERS2 \
+public:\
+static void *create(OdUInt32 num)\
+{\
+  return new Vertex[num];\
+}
+
+#define ODGT_MEMBERS \
+friend class OptimizedHolder;\
+ MemoryHolder *m_pHolder;\
+public:\
+static void *create(OdUInt32 num)\
+{\
+  return new Contour[num];\
+}
+
+#define ODGT_HOLDER , MemoryHolder &pHolder
+#define ODGT_HOLDER2 , pHolder
+
+namespace ODGT_NAMESPACE
+{
+  class Vertex;
+  class Contour;
+
+  class GE_TOOLKIT_EXPORT MemoryHolder
+  {
+  public:
+    virtual Vertex *newVertex() = 0;
+    virtual void deleteVertex(Vertex *) = 0;
+
+    virtual Contour *newContour() = 0;
+    virtual void deleteContour(Contour *) = 0;
+
+    virtual ~MemoryHolder() {}
+  };
+};
+
+
+#include "GeTess.h"
+
+#define HOLDER_(A, B) struct A\
+{\
+  bool         m_First;\
+  B*           m_FirstPage;\
+  OdList< B* > m_Buf;\
+  OdUInt32     m_pageSize;\
+  OdUInt32     m_pos;\
+\
+  A(OdUInt32 pageSize)\
+    : m_First(true)\
+    , m_FirstPage(0)\
+    , m_pageSize(pageSize)\
+    , m_pos(0)\
+  {\
+    m_FirstPage = (B*)B::create(m_pageSize);\
+    /*m_Buf.resize(1, (B*)B::create(m_pageSize) );*/\
+  }\
+\
+  void freeMem()\
+  {\
+    delete []m_FirstPage; m_FirstPage = 0;\
+    OdList< B* >::iterator pIt = m_Buf.begin();\
+    OdList< B* >::iterator pItEnd = m_Buf.end();\
+\
+    while(pIt != pItEnd)\
+    {\
+      delete[] *pIt;\
+      ++pIt;\
+    }\
+  }\
+\
+  ~A()\
+  {\
+    freeMem();\
+  }\
+\
+  B* newOne()\
+  {\
+    if (m_pos == m_pageSize)\
+    {\
+      m_First = false;\
+      m_Buf.push_front( (B*)B::create(m_pageSize) );\
+      m_pos = 0;\
+    }\
+    if (m_First)\
+      return &m_FirstPage[m_pos++];\
+    return &(*m_Buf.begin())[m_pos++];\
+  }\
+};
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdGeTess2
+{
+  class GE_TOOLKIT_EXPORT OptimizedHolder : public MemoryHolder
+  {
+    HOLDER_(Holder_Contour, Contour)
+    HOLDER_(Holder_Vertex, Vertex)
+
+    Holder_Vertex  m_Vxs;
+    Holder_Contour m_Ctrs;
+
+  public:
+    OptimizedHolder(OdUInt32 nPreAllocVertexes, OdUInt32 nPreAllocContours);
+
+    virtual Vertex *newVertex();
+    virtual void deleteVertex(Vertex * pVx);
+
+    virtual Contour *newContour();
+    virtual void deleteContour(Contour *);
+
+    ~OptimizedHolder();
+  };
+};
+
+#undef ODGT_NAMESPACE
+#undef ODGT_PTRTYPE
+#undef ODGT_PARENT
+#undef ODGT_MEMBERS
+#undef ODGT_HOLDER
+#undef ODGT_HOLDER2
+
+#include "TD_PackPop.h"
+
+#endif // __ODGITESSELATOR_2_H_INCLUDED__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTol.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTol.h
new file mode 100755
index 0000000..50dc4b3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTol.h
@@ -0,0 +1,109 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_GETOL_H
+#define OD_GETOL_H /*!DOM*/
+
+#include "Ge/GeExport.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  This class represents tolerances for vectors or points coincidence.  
+  For evaluating points and vectors OdGeTol stores the equalPoint and equalVector values which are used as follows:
+  1. Two points, p1 and p2, are equal if (p1 - p2).length() <= equalPoint.
+  2. Two vectors, v1 and v2, are equal if (v1 - v2).length() <= equalVector.
+  3. Two vectors, v1 and v2, are parallel if v1/v1.length() - v2/v2.length()).length() < equalVector OR (v1/v1.length() + v2/v2.length()).length() < equalVector.
+  4. Two vectors, v1 and v2, are perpendicular if abs((v1.dotProduct(v2))/(v1.length()*v2.length())) <= equalVector.
+  5. Two lines or rays are parallel (or perpendicular) if their directional vectors are parallel (or perpendicular).
+    
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_OdGeTol.html, Working with Tolerances>
+*/
+class GE_TOOLKIT_EXPORT OdGeTol
+{
+public:
+
+  /** \param t [in]  The tolerance for vectors and points evaluation.
+    \param t1 [in]  The tolerance for points evaluation.
+    \param t2 [in]  The tolerance for vectors evaluation.
+  */
+  OdGeTol(double t = 1.e-10) 
+    : m_vectorTol(t), m_pointTol(t)
+  {
+  }
+  OdGeTol(double t1, double t2) 
+    : m_vectorTol(t2), m_pointTol(t1)
+  {
+  }
+
+  /** \details
+    Returns the equalPoint tolerance.
+  */
+  double equalPoint() const 
+  { 
+    return m_pointTol; 
+  }
+
+  /** \details
+    Returns the equalVector tolerance.
+  */
+  double equalVector() const 
+  { 
+    return m_vectorTol;
+  }
+
+  /** \details
+    Sets the equalPoint tolerance to a specified value.
+    
+    \param val [in]  equalPoint value to be set.
+  */
+  void setEqualPoint(double val)
+  { 
+    m_pointTol = val; 
+  }
+
+  /** \details
+    Sets the equalVector tolerance to a specified value.
+    
+    \param val [in]  equalVector tolerance to be set.
+  */
+  void setEqualVector(double val) 
+  {
+    m_vectorTol = val; 
+  }
+
+private:
+  double m_vectorTol;
+  double m_pointTol;
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTorus.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTorus.h
new file mode 100755
index 0000000..3a43985
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeTorus.h
@@ -0,0 +1,333 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GETORUS_H
+#define OD_GETORUS_H /*!DOM*/
+
+#include "OdPlatform.h"
+#include "Ge/GeSurface.h"
+#include "Ge/GeCircArc3d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents toroidal segments.
+
+    \remarks
+    The torus is surface generated by revolving a circular arc
+    about an axis of symmetry, where the plane of the circular arc 
+    contains the axis of symmetry
+
+    The torus is located in space by its center, which is a point on the axis of symmetry.  
+
+    The center of the circular arc is at a distance of majorRadius from
+    the center of the torus. The radius of the circular arc is the
+    minorRadius.
+
+    Parameter U is the longitude (about the axis of symmetry), which for a closed torus defaults
+    to the range [-OdaPI, OdaPI).  Zero corresponds to the refAxis (which is
+    a vector orthogonal to the axis of symmetry).  Applying the right
+    hand rule along the symmetric axis defines the increasing direction
+    for U.
+
+    Parameter v parameterizes the circular tube, which
+    for a closed circle defaults to the range [-OdaPI, OdaPI).  Applying the
+    right hand rule along the refAxis X-axisOfSymmetry defines the
+    increasing direction for v.
+
+    The torus is periodic in U, v with a period of Oda2PI.
+    [umin, umax] x [vmin, vmax] defines a four sided toroidal patch bounded
+    by four circular arcs. Following constraints apply to the definition
+    of a toroidal patch.
+
+    * umin < umax and |umin - umax| <= Oda2PI.
+    * vmin < vmax and |vmin - vmax| <= Oda2PI
+
+    Library: TD_Ge
+
+   <group OdGe_Classes>
+
+   <link ge_OdGeTorus.html, Working with Toruses>
+*/
+class GE_TOOLKIT_EXPORT OdGeTorus : public OdGeSurface
+{
+public:
+
+  /** 
+    \param majorRadius [in] The major *radius* of this *torus*.
+    \param minorRadius [in] The minor *radius* of this *torus*.
+    \param center [in] The origin of the this *torus*.
+    \param axisOfSymmetry [in] Axis of symmetry (rotation).
+    \param refAxis [in] defines thegle 0 about the axis of symmetry.
+    \param startAngleU [in] Start angle about the axis of symmetry.
+    \param endAngleU [in] End angle about the axis of symmetry.
+    \param startAngleV [in] Start angle about the tube.
+    \param endAngleV [in] End angle about the tube.
+    \param source [in] Object to be cloned.
+  */
+  OdGeTorus();
+  OdGeTorus(
+    double majorRadius, 
+    double minorRadius,
+    const OdGePoint3d& center, 
+    const OdGeVector3d& axisOfSymmetry);
+  OdGeTorus(
+    double majorRadius, 
+    double minorRadius,
+    const OdGePoint3d& center, 
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& refAxis,
+    double startAngleU, 
+    double endAngleU,
+    double startAngleV, 
+    double endAngleV);
+  OdGeTorus(
+    const OdGeTorus& source);
+
+  // Geometric properties.
+  //
+
+  /** \details
+    Returns the major radius of this torus.
+  */
+   double majorRadius() const;
+
+  /** \details
+    Returns the minor radius of this torus.
+  */
+   double minorRadius() const;
+
+  /** \details
+    Returns the start and end angles about about the axis of symmetry.
+
+    \param startAngleU [out]  Receives the angle about the axis of symmetry.
+    \param endAngleU [out]  Receives the end angle about the axis of symmetry.
+  */
+   void getAnglesInU(
+    double& startAngleU, 
+    double& endAngleU) const;
+
+  /** \details
+    Returns the start and end angles about about the tube.
+
+    \param startAngleV [out]  Receives the start angle about the tube.
+    \param endAngleV [out]  Receives the end angle about the tube.
+  */
+   void getAnglesInV(
+    double& startAngleV, 
+    double& endAngleV) const;
+
+  /** \details
+    Returns the center of this torus.
+  */
+   OdGePoint3d center() const;
+
+  /** \details
+    Returns the Axis of symmetry (rotation).
+  */
+   OdGeVector3d axisOfSymmetry() const;
+
+  /** \details
+    Returns the reference axis.
+  */
+   OdGeVector3d refAxis() const;
+
+  /** \details
+    Returns true if and only if the normal to this surface
+    is pointing outward.
+  */
+   bool isOuterNormal() const;
+
+  /** \details
+    Sets the major radius of this torus.
+
+    \param majorRadius [in]  The major radius of this torus.
+  */
+   OdGeTorus& setMajorRadius(
+    double radius);
+
+  /** \details
+    Sets the minor radius of this torus.
+
+    \param minorRadius [in]  The minor radius of this torus.
+  */
+   OdGeTorus& setMinorRadius(
+    double radius);
+
+  /** \details
+    Sets the start and end angles about about the axis of symmetry.
+
+    \param startAngleU [in]  Start angle about the axis of symmetry.
+    \param endAngleU [in]  End angle about the axis of symmetry.
+  */
+   OdGeTorus& setAnglesInU(
+    double startAngleU, 
+    double endAngleU);
+
+  /** \details
+    Sets the start and end angles about about the tube.
+
+    \param startAngleV [in]  Start angle about the tube.
+    \param endAngleV [in]  End angle about the tube.
+  */
+   OdGeTorus& setAnglesInV(
+    double startAngleV, 
+    double endAngleV);
+
+  /** \details
+    Sets the parameters for this torus according to the arguments. 
+
+    \param majorRadius [in]  The major radius of this torus.
+    \param minorRadius [in]  The minor radius of this torus.
+    \param center [in]  The origin of the this torus.
+    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
+    \param refAxis [in]  defines thegle 0 about the axis of symmetry.
+    \param startAngleU [in]  Start angle about the axis of symmetry.
+    \param endAngleU [in]  End angle about the axis of symmetry.
+    \param startAngleV [in]  Start angle about the tube.
+    \param endAngleV [in]  End angle about the tube.
+    \remarks
+    Returns a reference to this torus.
+  */
+   OdGeTorus& set(
+    double majorRadius, 
+    double minorRadius,
+    const OdGePoint3d& center,
+    const OdGeVector3d& axisOfSymmetry);
+   OdGeTorus& set(
+    double majorRadius, 
+    double minorRadius,
+    const OdGePoint3d&  center,
+    const OdGeVector3d& axisOfSymmetry,
+    const OdGeVector3d& refAxis,
+    double startAngleU, 
+    double endAngleU,
+    double startAngleV, 
+    double endAngleV);
+
+  OdGeTorus& operator =(
+    const OdGeTorus& torus);
+
+  /** \details
+    Returns True if the torus intersects with the specified
+    line entity, and returns the number of intersections and the
+    points of intersection.
+
+    \param lineEnt [in]  Any 3D line entity.
+    \param numInt [out]  Receives the number of intersections.
+    \param p1 [out]  Receives the first intersection point.
+    \param p2 [out]  Receives the second intersection point.
+    \param p3 [out]  Receives the third intersection point.
+    \param p4 [out]  Receives the fourth intersection point.
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    * p1 is valid if and only if numInt > 0.
+    * p2 is valid if and only if numInt > 1.
+    * p3 is valid if and only if numInt > 2.
+    * p4 is valid if and only if numInt > 3.
+  */
+   bool intersectWith(
+    const OdGeLinearEnt3d& linEnt, 
+    int& numInt,
+    OdGePoint3d& p1, 
+    OdGePoint3d& p2,
+    OdGePoint3d& p3, 
+    OdGePoint3d& p4,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  // Shape Classification Functions
+
+  /** \details
+    Returns true if and only if (majorRadius < 0) and (|majorRadius| < minorRadius), producing
+    a solid with points along the axis of symmetry.
+
+    \remarks
+    Exactly one of the following functions will be true for a given torus:
+
+    * isApple() 
+    * isDoughnut() 
+    * isLemon() 
+    * isVortex()
+  */
+   bool isLemon() const;
+
+  /** \details
+    Returns true if and only if (0 < majorRadius < minorRadius), creating a solid with dimples at the
+    axis of symmetry.
+
+    \remarks
+    Exactly one of the following functions will be true for a given torus:
+    * isApple() 
+    * isDoughnut() 
+    * isLemon() 
+    * isVortex()
+  */
+   bool isApple() const;
+
+  /** \details
+    Returns true if and only if (minorRadius == majorRadius), producing a donut.
+    with a zero-radius hole.
+
+    \remarks
+    Exactly one of the following functions will be true for a given torus:
+    * isApple() 
+    * isDoughnut() 
+    * isLemon() 
+    * isVortex()
+  */
+   bool isVortex() const;
+
+  /** \details
+    Returns true if and only if (minorRadius <  majorRadius), creating a solid with a hole in the middle.
+
+    \remarks
+    Exactly one of the following functions will be true for a given torus:
+    * isApple() 
+    * isDoughnut() 
+    * isLemon() 
+    * isVortex()
+  */
+   bool isDoughnut() const;
+
+  /** \details
+    Returns true if and only if (minorRadius <= 0) OR (majorRadius <= -minorRadius) 
+  */
+   bool isDegenerate() const;
+
+  /** \details
+    Returns true if and only if there is a hole in the torus.
+
+    \remarks
+    Returns true if and only if |majorRadius| > |minorRadius| + 1e-10
+  */
+   bool isHollow() const;
+
+  //////////////////////////////////////////////////////////////////////////
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_GETORUS_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2d.h
new file mode 100755
index 0000000..3001971
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2d.h
@@ -0,0 +1,425 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GEVEC2D_H
+#define OD_GEVEC2D_H /*!DOM*/
+
+#include "Ge/GeGbl.h"
+#include "Ge/GeTol.h"
+
+#include "TD_PackPush.h"
+
+class OdGeMatrix2d;
+
+/** \details
+    This class represents vectors in 2D space. 
+
+    \remarks
+    OdGeVector2d may be viewed as an array[2] of doubles.
+
+    Library: TD_Ge
+
+    <group OdGe_Classes>
+
+    \sa
+    <link ge_BasicTypes.html, Working with Basic Geometry Types>
+*/
+class GE_TOOLKIT_EXPORT OdGeVector2d
+{
+public:
+  /** \param source [in]  Object to be cloned.
+    \param xx [in]  X-coordinate.
+    \param yy [in]  Y-coordinate.
+    
+    \remarks
+    If called with no arguments, constructs a zero-length vector.
+  */
+  OdGeVector2d () : x (0.0), y (0.0) {}
+  OdGeVector2d (
+    double xx, 
+    double yy) : x (xx), y (yy) {}
+
+  GE_STATIC_EXPORT static const OdGeVector2d kIdentity; // Additive identity vector.
+  GE_STATIC_EXPORT static const OdGeVector2d kXAxis;    // X-Axis vector.
+  GE_STATIC_EXPORT static const OdGeVector2d kYAxis;    // Y-Axis vector.
+
+  friend GE_TOOLKIT_EXPORT OdGeVector2d operator* (
+    const OdGeMatrix2d& xfm, 
+    const OdGeVector2d& vect);
+    
+
+  /** \details
+    Sets this vector to the product matrix * vect  scale * vect, and returns
+    a reference to this vector. 
+    
+    \param matrix [in]  Any 2D matrix 
+    \param vect [in]  Any 2D vector 
+    \param scale [in]  Scale factor.
+  */
+  OdGeVector2d& setToProduct (
+    const OdGeMatrix2d& matrix, 
+    const OdGeVector2d& vect)
+  {
+    *this = matrix * vect;
+    return *this;
+  }
+
+  OdGeVector2d& setToProduct (
+    const OdGeVector2d& vect, 
+    double scale);
+      
+  /** \details
+    Applies the 2D transformation matrix to this vector,
+    and returns a reference to this vector.
+
+    \param xfm [in]  2D transformation matrix.
+  */
+  OdGeVector2d& transformBy (
+    const OdGeMatrix2d& xfm)  { return *this = xfm * *this;}
+    
+  /** \details
+    Rotates this vector the specified angle, and returns
+    a reference to this vector. 
+
+    \param angle [in]  Rotation angle.
+  */
+  OdGeVector2d& rotateBy (
+    double angle);
+    
+  /** \details
+    Mirrors this vector about the specified 2D line
+    and returns a reference to this vector.
+
+    \param line [in]  Mirror Line.
+  */
+  OdGeVector2d& mirror (
+    const OdGeVector2d& line);
+
+  OdGeVector2d operator* (
+    double scale) const;
+  friend GE_TOOLKIT_EXPORT OdGeVector2d operator* (
+    double scale, const OdGeVector2d& vector);
+
+  OdGeVector2d& operator*= (
+    double scale);
+    
+  OdGeVector2d  operator/ (
+    double scale) const;
+  OdGeVector2d& operator/= (double scale);
+
+  OdGeVector2d operator+ (
+    const OdGeVector2d& vect) const;
+  OdGeVector2d& operator+= (
+    const OdGeVector2d& vect);
+  OdGeVector2d operator- (
+    const OdGeVector2d& vect) const;
+  OdGeVector2d& operator-= (
+    const OdGeVector2d& vect);
+    
+  /** \details
+    Sets this vector to vector1 + vector1, and returns a reference to this vector.
+    
+    \param vector1 [in]  Any 2D vector.
+    \param vector2 [in]  Any 2D vector.
+  */
+    OdGeVector2d& setToSum (
+    const OdGeVector2d& vector1, 
+    const OdGeVector2d& vector2);
+    
+  OdGeVector2d operator- () const;
+  
+  /** \details
+    Negates this vector (-x, -y), and returns a reference to this vector.
+  */
+  OdGeVector2d& negate ();
+
+  /** \details
+    Returns the vector perpendicular to this one (-y, x).
+  */
+  OdGeVector2d perpVector () const;
+
+  /** \details
+    Returns the angle between this vector and the X-axis
+    
+    \remarks
+    Returns a value in the range [0.0 .. Oda2PI].
+  */
+  double angle () const;
+
+  /** \details
+    Returns the smallest angle to the specified vector.
+    
+    \param vect [in]  Any 2D vector.
+    
+    \remarks
+    Returns a value in the range [0.0 .. Oda2PI].
+    
+    This function is commutative:
+    
+        a.angleTo (b) == b.angleTo (a)
+  */
+  double angleTo (
+    const OdGeVector2d& vect) const;
+
+  /** \details
+    Returns the angle from this vector to the specified vector in the counterclockwise direction.
+    
+    \param vect [in]  Any 2D vector.
+    
+    \remarks
+    Returns a value in the range [0.0 .. Oda2PI].
+  */
+  double angleToCCW (
+    const OdGeVector2d& vect) const
+  {
+    return crossProduct (vect) > 0.0 ? angleTo(vect) : -angleTo(vect);
+  }
+    
+  /** \details
+    Returns the unit vector codirectional with this vector.
+    
+    \param tol [in]  Geometric tolerance.
+        
+    \remarks
+    If the length() <= tol, this vector is returned.
+  */
+  OdGeVector2d normal (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+    
+  /** \details
+    Sets this vector to the unit vector codirectional with this vector,
+    and returns a reference to this vector
+    
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of normalization.
+
+    \remarks
+    If this.length() <= tol, this vector is unchanged, and kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk 
+    k0This
+  */
+  OdGeVector2d& normalize (
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeVector2d& normalize (
+    const OdGeTol& tol, 
+    OdGeError& status);
+    
+  /** \details
+    Sets this vector to the unit vector codirectional with this vector,
+    and returns the length prior to normalization.
+
+    \param tol [in]  Geometric tolerance.
+
+    \remarks
+    If this.length() <= tol, this vector is unchanged and zero length is returned.
+  */
+   double normalizeGetLength (double tol = 1.e-300);
+
+  /** \details
+    Returns the length of this vector.
+  */
+        double length () const;
+  
+  /** \details
+    Returns the square of the length of this vector.
+  */
+        double lengthSqrd () const;
+  
+  /** \details
+    Returns true if and only if the length of this vector is 1.0 within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+        bool isUnitLength (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the length of this vector is 0.0 within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+        bool isZeroLength (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified vector is parallel to this vector within the specified tolerance.
+
+    \param vect [in]  Any 2D vector.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of test.
+
+    \remarks
+    If the length of either vector is < tol, kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk
+    k0This
+    k0Arg1
+  */
+        bool isParallelTo (
+    const OdGeVector2d& vect,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+    
+  bool isParallelTo (
+    const OdGeVector2d& vect, 
+    const OdGeTol& tol,
+    OdGeError& status) const;
+    
+  /** \details
+    Returns true if and only if the specified vector is codirectional to this vector within the specified tolerance.
+
+    \param vect [in]  Any 2D vector.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of test.
+
+    \remarks
+    If the length of either vector is < tol, kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk       
+    k0This    
+    k0Arg1    
+  */
+        bool isCodirectionalTo (
+    const OdGeVector2d& vect,
+    const OdGeTol& tol=OdGeContext::gTol) const;
+  bool isCodirectionalTo (
+    const OdGeVector2d& vect, 
+    const OdGeTol& tol,
+    OdGeError& status) const;
+    
+  /** \details
+    Returns true if and only if the specified vector is perpendicular to this vector within the specified tolerance.
+
+    \param vect [in]  Any 2D vector.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of test.
+
+    \remarks
+    If the length of either vector is < tol, kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk       
+    k0This    
+    k0Arg1    
+  */
+        bool isPerpendicularTo (
+    const OdGeVector2d& vect,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  bool isPerpendicularTo (
+    const OdGeVector2d& vect, 
+    const OdGeTol& tol,
+    OdGeError& status) const;
+    
+  /** \details
+    Returns the dot product of this vector and the specified vector.
+    
+    \param vect [in]  Any 2D vector.
+  */
+  double dotProduct (
+    const OdGeVector2d& vect) const;
+
+  /** \details
+    Returns the z value of the cross product of this vector with
+    the specified vector.
+    
+    \param vect [in]  Any 2D vector.
+  */
+  double  crossProduct (
+    const OdGeVector2d& vect) const
+  {
+    return x * vect.y - y * vect.x;
+  }
+
+  bool operator== (
+    const OdGeVector2d& vect) const;
+  bool operator!= (
+    const OdGeVector2d& vect) const;
+    
+  /** \details
+    Returns true if and only if vector is identical to this vector,
+    within the specified tolerance.
+
+    \param vect [in]  Any 2D vector.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo (
+    const OdGeVector2d& vect,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \param i [in]  Index of coordinate.
+
+    \remarks
+    Returns or references the ith coordinate of this vector.
+
+    * 0 returns or references the X-coordinate.
+    * 1 returns or references the Y-coordinate.
+  */
+  double operator[] (
+    unsigned int i) const;
+  double& operator[] (
+    unsigned int i) ;
+  
+  /** \details
+    Sets this vector to the specified X and Y coordinates, 
+    and returns a reference to this vector.
+
+    \param xx [in]  X-coordinate.
+    \param yy [in]  Y-coordinate.
+  */
+  OdGeVector2d& set (
+    double xx, 
+    double yy)
+  {
+    x = xx;
+    y = yy;
+    return *this;
+  }    
+
+  /** \remarks
+    Returns the equivalent 2D tranformation matrix.
+  */
+  operator OdGeMatrix2d () const;
+
+  double x; // X-coordinate.
+  double y; // Y-coordinate.
+};
+
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2dArray.h
new file mode 100755
index 0000000..59431b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector2dArray.h
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEVECTOR2DARRAY_INCLUDED
+#define GEVECTOR2DARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+#include "Ge/GeVector2d.h"
+
+
+/** \details
+    This template class is a specialization of the OdArray class template for 2D vectors.
+*/
+typedef OdArray<OdGeVector2d> OdGeVector2dArray;
+
+#endif // GEVECTOR2DARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3d.h
new file mode 100755
index 0000000..6b41e18
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3d.h
@@ -0,0 +1,561 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_GEVEC3D_H
+#define OD_GEVEC3D_H /*!DOM*/
+
+
+#include "Ge/GeGbl.h"
+#include "Ge/GeVector2d.h" // for convert2d
+
+class OdGeMatrix3d;
+class OdGePlane;
+class OdGePlanarEnt;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents vectors in 3D space. 
+
+    \remarks
+    OdGeVector3d may be viewed as an array[3] of doubles.
+    
+    Library: TD_Ge
+
+    <group OdGe_Classes> 
+
+    \sa
+    <link ge_BasicTypes.html, Working with Basic Geometry Types>
+*/
+class GE_TOOLKIT_EXPORT OdGeVector3d
+{
+public:
+  /** \param source [in]  Object to be cloned.
+    \param xx [in]  X-coordinate.
+    \param yy [in]  Y-coordinate.
+    \param zz [in]  Z-coordinate.
+    \param vect [in]  Any 2D vector.
+    \param plane [in]  Any plane.
+    
+    \remarks
+    When called with no arguments, constructs a zero-length vector.
+
+    When called with plane and vect, constructs 
+    the 3D vector correspoponding to the 2D vector
+    in the coordinates of the plane:
+    
+            uAxis * vect.x + vAxis * vect.y
+    
+    where uAxis and vAxis are returned by
+    
+            plane.get(origin, uAxis, vAxis)
+            
+    The 3D vector will be parallel to the 2D vector.
+  */
+  OdGeVector3d () : x(0.0), y(0.0), z(0.0) {}
+
+  OdGeVector3d (
+    double xx, 
+    double yy, 
+    double zz) : x(xx), y(yy), z(zz) {}
+  OdGeVector3d(
+    const OdGePlanarEnt& plane, 
+    const OdGeVector2d& vector2d);
+
+  GE_STATIC_EXPORT static const OdGeVector3d kIdentity; // Additive identity vector.
+  GE_STATIC_EXPORT static const OdGeVector3d kXAxis; // X-Axis vector.
+  GE_STATIC_EXPORT static const OdGeVector3d kYAxis; // Y-Axis vector.
+  GE_STATIC_EXPORT static const OdGeVector3d kZAxis; // Z-Axis vector.
+
+  /** \details
+    Sets this vector to the product matrix * vector or  scale * vector, and returns
+    a reference to this vector. 
+    
+    \param matrix [in]  Any 3D matrix 
+    \param vect [in]  Any 3D vector.
+    \param scale [in]  Scale factor.
+  */
+  OdGeVector3d& setToProduct (
+    const OdGeMatrix3d& matrix, 
+    const OdGeVector3d& vect);
+  OdGeVector3d& setToProduct(
+    const OdGeVector3d& vect, 
+    double scale)
+  {
+    x = scale * vect.x;
+    y = scale * vect.y;
+    z = scale * vect.z;
+    return *this;
+  }
+      
+
+  /** \details
+    Applies the 3D transformation matrix to this vector.
+
+    \param xfm [in]  3D transformation matrix.
+  */
+  OdGeVector3d& transformBy (
+    const OdGeMatrix3d& xfm);
+    
+  /** \details
+    Rotates this vector the specified angle
+    about the specified axis,
+    and returns a reference to this vector.
+
+    \param angle [in]  Rotation angle.
+    \param axis [in]  Axis of rotation.
+  */
+  OdGeVector3d& rotateBy (
+    double angle, 
+    const OdGeVector3d& axis);
+    
+  /** \details
+    Mirrors the entity about the plane passing through the
+    origin with the specified normal, and returns
+    a reference to the entity.
+
+    \param normalToPlane [in]  Normal to Plane.
+  */
+  OdGeVector3d& mirror (
+    const OdGeVector3d& normalToPlane);
+
+  /** \details
+    Returns the 2D vector, in the coordinate system
+    of the plane, corresponding to the 3D vector.
+    
+    \remarks
+    The 3D vector must be parallel to the plane.
+    
+    If no plane is specified, the XY plane is used.
+  */
+  OdGeVector2d convert2d (
+    const OdGePlanarEnt& plane) const;
+  OdGeVector2d convert2d () const { return OdGeVector2d(x, y); } 
+  
+  OdGeVector3d operator * (
+    double scale) const
+  { return OdGeVector3d (x * scale, y * scale, z * scale); }
+  
+  OdGeVector3d& operator *= (
+    double scale)
+  {
+    x *= scale;
+    y *= scale;
+    z *= scale;
+    return *this;
+  }
+    
+  OdGeVector3d operator / (
+      double scale) const
+  {
+    return OdGeVector3d (x/scale, y/scale, z/scale);
+  }
+
+  OdGeVector3d& operator /= (
+      double scale)
+  {
+    x /= scale;
+    y /= scale;
+    z /= scale;
+    return *this;
+  }
+
+  OdGeVector3d operator + (
+    const OdGeVector3d& vect) const
+  { return OdGeVector3d (x + vect.x, y + vect.y, z + vect.z);}    
+  OdGeVector3d operator += (
+    const OdGeVector3d& vect)
+  { return OdGeVector3d (x += vect.x, y += vect.y, z += vect.z);}    
+
+  OdGeVector3d operator - (
+    const OdGeVector3d& vect) const
+  { return OdGeVector3d (x - vect.x, y - vect.y, z - vect.z);}    
+  OdGeVector3d operator -= (
+    const OdGeVector3d& vect)
+  { return OdGeVector3d (x -= vect.x, y -= vect.y, z -= vect.z);}    
+
+
+  /** \details
+    Sets this vector to vector1 + vector1, and returns a reference to this vector.
+    
+    \param vector1 [in]  Any 3D vector.
+    \param vector2 [in]  Any 3D vector.
+  */
+  OdGeVector3d& setToSum (
+    const OdGeVector3d& vector1, 
+    const OdGeVector3d& vector2)
+  {
+    x = vector1.x + vector2.x;
+    y = vector1.y + vector2.y;
+    z = vector1.z + vector2.z;
+    return *this;
+  }    
+
+  OdGeVector3d operator - () const { return OdGeVector3d (-x, -y, -z); }
+  
+  /** \details
+    Negates this vector (-x, -y, -z), and returns a reference to this vector.
+  */
+  OdGeVector3d& negate ()
+  {
+    x = -x;
+    y = -y;
+    z = -z;
+    return *this;
+  }
+  
+
+  /** \details
+    Returns a vector perpendicular to this one.
+    
+    \remarks
+    The orthogonal vector is determined by function OdGeContext::gOrthoVector()
+  */
+  OdGeVector3d perpVector () const;
+
+
+  /** \details
+    Returns the angle to the specified vector.
+    
+    \param vect [in]  Any 3D vector.
+
+    \remarks
+    If refVector is not specified:
+      * Returns a value in the range [0.0 .. OdaPI].
+      * This function is commutative.
+   
+    If refVector is specified:
+      * Returns a value in the range [0.0 .. Oda2PI].
+      * If (refVector.dotProduct(crossProduct(vect)) >= 0.0, the return value is angleTo(vect).
+      * If (refVector.dotProduct(crossProduct(vect)) < 0.0, the return value is Oda2PI - angleTo(vect)
+  */
+  double angleTo (
+    const OdGeVector3d& vect) const;
+  double angleTo (
+    const OdGeVector3d& vect,
+    const OdGeVector3d& refVector) const;
+
+  /** \details
+    Returns the angle of this vector projected onto
+    the specified plane
+    
+    \param plane [in]  Any 3D plane.
+    
+    \remarks
+    This vector is projected orthogonally onto the 
+    plane through its origin, and is measured with
+    respect to axis1 as returned by
+    
+            plane.getCoordSystem(origin, axis1, axis2)
+  */
+  double angleOnPlane(
+    const OdGePlanarEnt& plane) const;
+
+  /** \details
+    Returns the unit vector codirectional with this vector.
+    
+    \param tol [in]  Geometric tolerance.
+        
+    \remarks
+    If the length() <= tol, this vector is returned.
+  */
+  OdGeVector3d normal (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Sets this vector to the unit vector codirectional with this vector,
+    and returns a reference to this vector
+    
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of normalization.
+
+    \remarks
+    If this.length() <= tol, this vector is unchanged, and kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk       
+    k0This    
+  */
+  OdGeVector3d& normalize (
+    const OdGeTol& tol = OdGeContext::gTol);
+  OdGeVector3d& normalize (
+    const OdGeTol& tol, 
+    OdGe::ErrorCondition& status);
+
+  /** \details
+    Sets this vector to the unit vector codirectional with this vector,
+    and returns the length prior to normalization.
+    
+    \remarks
+    If this.length() <= tol, this vector is unchanged zero length is returned.
+  */
+  double normalizeGetLength(double tol = 1.e-300);
+
+  /** \details
+    Returns the length of this vector.
+  */
+        double length () const;
+
+  /** \details
+    Returns the square of the length of this vector.
+  */
+        double lengthSqrd () const { return x*x + y*y + z*z; }
+
+
+  /** \details
+    Returns true if and only if the length of this vector is 1.0 within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+        bool isUnitLength (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the length of this vector is 0.0 within the specified tolerance.
+
+    \param tol [in]  Geometric tolerance.
+  */
+        bool isZeroLength (
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \details
+    Returns true if and only if the specified vector is parallel to this vector within the specified tolerance.
+
+    \param vect [in]  Any 3D vector.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of test.
+
+    \remarks
+    If the length of either vector is < tol, kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk       
+    k0This    
+    k0Arg1    
+  */
+        bool isParallelTo (
+    const OdGeVector3d& vect,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  bool isParallelTo(
+    const OdGeVector3d& vect,
+    const OdGeTol& tol, 
+    OdGeError& status) const;
+
+  /** \details
+    Returns true if and only if the specified vector is codirectional to this vector within the specified tolerance.
+
+    \param vect [in]  Any 3D vector.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of test.
+
+    \remarks
+    If the length of either vector is < tol, kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk       
+    k0This    
+    k0Arg1    
+  */
+        bool isCodirectionalTo (
+    const OdGeVector3d& vect,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  bool isCodirectionalTo (
+    const OdGeVector3d& vect,
+    const OdGeTol& tol,
+    OdGeError& status) const;
+    
+
+  /** \details
+    Returns true if and only if the specified vector is perpendicular to this vector within the specified tolerance.
+
+    \param vect [in]  Any 3D vector.
+    \param tol [in]  Geometric tolerance.
+    \param status [out]  Receives the status of test.
+
+    \remarks
+    If the length of either vector is < tol, kThis is returned in status.
+
+    Possible values for status are as follows:
+
+    @untitled table
+    kOk       
+    k0This    
+    k0Arg1    
+  */
+        bool isPerpendicularTo (
+    const OdGeVector3d& vect,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+  bool isPerpendicularTo(
+    const OdGeVector3d& vect,
+    const OdGeTol& tol, 
+    OdGeError& status) const;
+    
+  /** \details
+    Returns the dot product of this vector and the specified vector.
+    
+    \param vect [in]  Any 3D vector.
+  */
+  double dotProduct (
+    const OdGeVector3d& vect) const
+  { return x * vect.x + y * vect.y + z * vect.z; }    
+    
+    
+  /** \details
+    Returns the cross product of this vector and the specified vector.
+    
+    \param vect [in]  Any 3D vector.
+  */
+  OdGeVector3d crossProduct (
+    const OdGeVector3d& vect) const;
+    
+  // OdGeMatrix3d rotateTo (const OdGeVector3d& vector, const OdGeVector3d& axis
+  // = OdGeVector3d::kIdentity) const;
+
+  // OdGeVector3d project (const OdGeVector3d& planeNormal,
+  // const OdGeVector3d& projectDirection) const;
+  // OdGeVector3d project (const OdGeVector3d& planeNormal,
+  // const OdGeVector3d& projectDirection, 
+  // const OdGeTol& tol, OdGeError& flag) const;
+  
+  OdGeVector3d orthoProject (const OdGeVector3d& planeNormal) const;
+  OdGeVector3d orthoProject (const OdGeVector3d& planeNormal, 
+   const OdGeTol& tol, OdGeError& flag) const;
+
+  bool operator == (
+    const OdGeVector3d& vect) const;
+  bool operator != (
+    const OdGeVector3d& vect) const;
+    
+  /** \details
+    Returns true if and only if vect is identical to this vector,
+    within the specified tolerance.
+
+    \param vect [in]  Any 3D vector.
+    \param tol [in]  Geometric tolerance.
+  */
+  bool isEqualTo (
+    const OdGeVector3d& vect,
+    const OdGeTol& tol = OdGeContext::gTol) const;
+
+  /** \param i [in]  Index of coordinate.
+
+    \remarks
+    Returns or references the ith coordinate of this vector.
+
+    * 0 returns or references the X-coordinate.
+    * 1 returns or references the Y-coordinate.
+    * 2 returns or references the Z-coordinate.
+  */
+  double operator [] (
+    unsigned int i) const {return * (&x + i); }
+  double& operator [] (
+    unsigned int i) {return * (&x + i); }
+  /** \details
+    Returns the index of the largest absolute coordinate of this vector.
+  */
+    unsigned int largestElement() const;
+  
+  /** \details
+    Sets this vector to the specified arguments, 
+    and returns a reference to this vector.
+
+    \param source [in]  Object to be cloned.
+    \param xx [in]  X-coordinate.
+    \param yy [in]  Y-coordinate.
+    \param zz [in]  Z-coordinate.
+    \param vect [in]  Any 2D vector.
+    \param plane [in]  Any plane.
+    
+    \remarks
+    When called with plane and vector, constructs 
+    the 3D vector correspoponding to the 2D vector
+    in the coordinates of the plane:
+    
+            uAxis * vect.x + vAxis * vect.y
+    
+    where uAxis and vAxis are returned by
+    
+            plane.get(origin, uAxis, vAxis)
+            
+    The 3D vector will be parallel to the 2D vector.
+  */
+  OdGeVector3d& set (
+    double xx, 
+    double yy, 
+    double zz)
+  {
+    x = xx;
+    y = yy;
+    z = zz;
+    return *this;
+  }    
+  OdGeVector3d& set (
+    const OdGePlanarEnt& plane, 
+    const OdGeVector2d& vect);
+
+  /** \details
+    Returns the equivalent 3D tranformation matrix.
+  */
+  operator OdGeMatrix3d () const;
+  
+/*
+  static OdGeVector3d givePerp (
+    const OdGeVector2d& vector1, 
+    const OdGeVector2d& vector2);
+*/
+
+  double x; //  X-coordinate.
+  double y; //  Y-coordinate.
+  double z; //  Z-coordinate.
+};
+
+
+/**
+    \details
+    Returns the product matrix * vect or scale * vect  
+    
+    \param matrix [in] Any 3D *matrix*.
+    \param vect [in] Any 3D vector.
+    \param scale [in] Scale factor.
+*/
+
+GE_TOOLKIT_EXPORT OdGeVector3d operator * (
+    const OdGeMatrix3d& matrix, 
+    const OdGeVector3d& vect);
+GE_TOOLKIT_EXPORT OdGeVector3d operator * (
+    double scale, 
+    const OdGeVector3d& vect);
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3dArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3dArray.h
new file mode 100755
index 0000000..0834283
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVector3dArray.h
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef GEVECTOR3DARRAY_INCLUDED
+#define GEVECTOR3DARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+#include "Ge/GeVector3d.h"
+
+
+/** \details
+    This template class is a specialization of the OdArray class template for 3D vectors.
+*/
+typedef OdArray<OdGeVector3d, OdMemoryAllocator<OdGeVector3d> > OdGeVector3dArray;
+
+#endif // GEVECTOR3DARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVoidPointerArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVoidPointerArray.h
new file mode 100755
index 0000000..05c18c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/GeVoidPointerArray.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODGEVOIDPOINTERARRAY_INCLUDED
+#define ODGEVOIDPOINTERARRAY_INCLUDED /*!DOM*/
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for void pointers.
+*/
+typedef OdArray<void*, OdMemoryAllocator<void*> > OdGeVoidPointerArray;
+
+#endif // ODGEVOIDPOINTERARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/avgpc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/avgpc.h
new file mode 100755
index 0000000..23bd8ba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ge/avgpc.h
@@ -0,0 +1,189 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+/*
+===========================================================================
+
+Project:   Generic Polygon Clipper
+
+           A new algorithm for calculating the difference, intersection,
+           exclusive-or or union of arbitrary polygon sets.
+
+File:      gpc.h
+Author:    Alan Murta (email: gpc@cs.man.ac.uk)
+Version:   2.32
+Date:      17th December 2004
+
+Copyright: (C) Advanced Interfaces Group,
+           University of Manchester.
+
+           This software is free for non-commercial use. It may be copied,
+           modified, and redistributed provided that this copyright notice
+           is preserved on all copies. The intellectual property rights of
+           the algorithms used reside with the University of Manchester
+           Advanced Interfaces Group.
+
+           You may not use this software, in whole or in part, in support
+           of any commercial product without the express consent of the
+           author.
+
+           There is no warranty or other guarantee of fitness of this
+           software for any purpose. It is provided solely "as is".
+
+ODA Notice:  This software has been licensed by the Open Design Alliance.  Any
+             use outside of Teigha-based member applications requires the user 
+			 to obtain a separate license.
+
+===========================================================================
+*/
+
+#ifndef __gpc_h
+#define __gpc_h
+
+#include <stdio.h>
+#include "Ge/GeExport.h"
+
+#ifdef __cplusplus
+extern "C" 
+{
+#endif
+
+/*
+===========================================================================
+                               Constants
+===========================================================================
+*/
+
+/* Increase GPC_EPSILON to encourage merging of near coincident edges    */
+
+#define GPC_EPSILON (DBL_EPSILON)
+
+#define GPC_VERSION "2.32"
+
+
+/*
+===========================================================================
+                           Public Data Types
+===========================================================================
+*/
+
+typedef enum                        /* Set operation type                */
+{
+  GPC_DIFF,                         /* Difference                        */
+  GPC_INT,                          /* Intersection                      */
+  GPC_XOR,                          /* Exclusive or                      */
+  GPC_UNION                         /* Union                             */
+} gpc_op;
+
+typedef struct                      /* Polygon vertex structure          */
+{
+  double              x;            /* Vertex x component                */
+  double              y;            /* vertex y component                */
+} gpc_vertex;
+
+typedef struct                      /* Vertex list structure             */
+{
+  int                 num_vertices; /* Number of vertices in list        */
+  gpc_vertex         *vertex;       /* Vertex array pointer              */
+} gpc_vertex_list;
+
+typedef struct                      /* Polygon set structure             */
+{
+  int                 num_contours; /* Number of contours in polygon     */
+  int                *hole;         /* Hole / external contour flags     */
+  gpc_vertex_list    *contour;      /* Contour array pointer             */
+} gpc_polygon;
+
+typedef struct                      /* Tristrip set structure            */
+{
+  int                 num_strips;   /* Number of tristrips               */
+  gpc_vertex_list    *strip;        /* Tristrip array pointer            */
+} gpc_tristrip;
+
+
+/*
+===========================================================================
+                       Public Function Prototypes
+===========================================================================
+*/
+//DD:EXPORT_ON
+
+void GE_TOOLKIT_EXPORT gpc_read_polygon (FILE            *infile_ptr, 
+                              int              read_hole_flags,
+                              gpc_polygon     *polygon);
+
+void GE_TOOLKIT_EXPORT gpc_write_polygon (FILE            *outfile_ptr,
+                              int              write_hole_flags,
+                              gpc_polygon     *polygon);
+
+void GE_TOOLKIT_EXPORT gpc_add_contour (gpc_polygon     *polygon,
+                              gpc_vertex_list *contour,
+                              int              hole);
+
+void GE_TOOLKIT_EXPORT gpc_polygon_clip (gpc_op           set_operation,
+                              gpc_polygon     *subject_polygon,
+                              gpc_polygon     *clip_polygon,
+                              gpc_polygon     *result_polygon);
+
+/* ODA extension
+Returns 1 if returned result_polygon is the same as one of operands (depending on set_operation)
+*/
+int GE_TOOLKIT_EXPORT gpc_polygon_clip_ex (gpc_op           set_operation,
+                              gpc_polygon     *subject_polygon,
+                              gpc_polygon     *clip_polygon,
+                              gpc_polygon     *result_polygon);
+
+void GE_TOOLKIT_EXPORT gpc_tristrip_clip (gpc_op           set_operation,
+                              gpc_polygon     *subject_polygon,
+                              gpc_polygon     *clip_polygon,
+                              gpc_tristrip    *result_tristrip);
+
+void GE_TOOLKIT_EXPORT gpc_polygon_to_tristrip (gpc_polygon     *polygon,
+                              gpc_tristrip    *tristrip);
+
+void GE_TOOLKIT_EXPORT gpc_free_polygon (gpc_polygon     *polygon);
+
+void GE_TOOLKIT_EXPORT gpc_free_tristrip (gpc_tristrip    *tristrip);
+
+#ifdef __cplusplus
+} // extern "C"
+
+#include "OdAlloc.h"
+/* ODA extension
+Allocate memory for polygon elements (compatible with gpc_free_polygon function).
+*/
+template <class Type>
+Type *gpc_alloc(int num_structs)
+{ return (Type*)::odrxAlloc(sizeof(Type) * num_structs); }
+
+#endif
+
+//DD:EXPORT_OFF
+
+#endif // __gpc_h
+
+/*
+===========================================================================
+                           End of file: gpc.h
+===========================================================================
+*/
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDwgIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDwgIO.h
new file mode 100755
index 0000000..54d706f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDwgIO.h
@@ -0,0 +1,188 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_DWG_IO_H_
+#define OD_GE_DWG_IO_H_
+
+#include "Ge/GeLineSeg3d.h"
+#include "Ge/GeEllipArc3d.h"
+#include "Ge/GeCircArc3d.h"
+#include "Ge/GeNurbCurve3d.h"
+#include "Ge/GeCompositeCurve3d.h"
+//#include "Ge/GeLibVersion.h"
+
+class OdDbDwgFiler;
+
+/** \details
+    This class reads information from and writes information to a .dwg file.
+
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdGeDwgIO
+{
+public:
+  /** \details
+    Reads information from a .dwg file.
+
+    \param pFiler [in]  Pointer to the OdDbDwgFiler object.
+    \param object [in]  OdGe object to be read.
+  */
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePoint2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeVector2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeMatrix2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeScale2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePoint2dArray& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeVector2dArray& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePoint3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeVector3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeMatrix3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeScale3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePoint3dArray& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeVector3dArray& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeTol& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeInterval& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeKnotVector& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeDoubleArray& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdIntArray& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCurveBoundary& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePosition2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePointOnCurve2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeLine2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeLineSeg2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeRay2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCircArc2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeEllipArc2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeExternalCurve2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCubicSplineCurve2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeNurbCurve2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCompositeCurve2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeOffsetCurve2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeSegmentChain2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePosition3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePointOnCurve3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePointOnSurface& object);
+	static OdResult inFields(OdDbDwgFiler* pFiler, OdGeLine3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeRay3d& object);
+	static OdResult inFields(OdDbDwgFiler* pFiler, OdGeLineSeg3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePlane& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeBoundedPlane& object);
+	static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCircArc3d& object);
+	static OdResult inFields(OdDbDwgFiler* pFiler, OdGeEllipArc3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCubicSplineCurve3d& object);
+	static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCompositeCurve3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeOffsetCurve3d& object);
+	static OdResult inFields(OdDbDwgFiler* pFiler, OdGeNurbCurve3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGePolyline3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeAugPolyline3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeExternalCurve3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCone& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeEllipCone& object);	// AE 03.09.2003 
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCylinder& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeEllipCylinder& object);	// AE 09.09.2003 
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeTorus& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeExternalSurface& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeOffsetSurface& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeNurbSurface& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeExternalBoundedSurface& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeSphere& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeBoundBlock2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeBoundBlock3d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCurveCurveInt2d& object);
+	//static OdResult inFields(OdDbDwgFiler* pFiler, OdGeCurveCurveInt3d& object);
+
+  /** \details
+    Writes information to a .dwg file.
+
+    \param pFiler [in]  Pointer to the OdDbDwgFiler object.
+    \param object [in]  OdGe object to be written.
+  */
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePoint2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeVector2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeMatrix2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeScale2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePoint2dArray& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeVector2dArray& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePoint3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeVector3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeMatrix3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeScale3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePoint3dArray& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeVector3dArray& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeTol& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeInterval& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeKnotVector& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeDoubleArray& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdIntArray& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCurveBoundary& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePosition2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePointOnCurve2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeLine2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeLineSeg2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeRay2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCircArc2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeEllipArc2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeExternalCurve2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCubicSplineCurve2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeNurbCurve2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCompositeCurve2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeOffsetCurve2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeSegmentChain2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePosition3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePointOnCurve3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePointOnSurface& object);
+	static void outFields(OdDbDwgFiler* pFiler, const OdGeLine3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeRay3d& object);
+	static void outFields(OdDbDwgFiler* pFiler, const OdGeLineSeg3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePlane& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeBoundedPlane& object);
+	static void outFields(OdDbDwgFiler* pFiler, const OdGeCircArc3d& object);
+	static void outFields(OdDbDwgFiler* pFiler, const OdGeEllipArc3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCubicSplineCurve3d& object);
+	static void outFields(OdDbDwgFiler* pFiler, const OdGeNurbCurve3d& object);
+	static void outFields(OdDbDwgFiler* pFiler, const OdGeCompositeCurve3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeOffsetCurve3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGePolyline3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeAugPolyline3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeExternalCurve3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCone& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeEllipCone& object);	// AE 03.09.2003 
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCylinder& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeEllipCylinder& object);	// AE 09.09.2003 
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeTorus& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeExternalSurface& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeOffsetSurface& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeNurbSurface& object);
+	//static void outFields(OdDbDwgFiler* pFiler,const OdGeExternalBoundedSurface& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeSphere& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeBoundBlock2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeBoundBlock3d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCurveCurveInt2d& object);
+	//static void outFields(OdDbDwgFiler* pFiler, const OdGeCurveCurveInt3d& object);
+
+	//static const OdGeLibVersion  OdGeDwgIOVersion;
+};
+
+#endif // OD_GE_DWG_IO_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDxfIO.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDxfIO.h
new file mode 100755
index 0000000..e9c52d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeDxfIO.h
@@ -0,0 +1,188 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_GE_DXF_IO_H_
+#define OD_GE_DXF_IO_H_
+
+#include "Ge/GeLineSeg3d.h"
+#include "Ge/GeEllipArc3d.h"
+#include "Ge/GeCircArc3d.h"
+#include "Ge/GeNurbCurve3d.h"
+#include "Ge/GeCompositeCurve3d.h"
+//#include "Ge/GeLibVersion.h"
+
+class OdDbDxfFiler;
+
+/** \details
+    This class reads information from and writes information to a DXF file.
+
+    Library: TD_Db
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdGeDxfIO
+{
+public:
+  /** \details
+    Writes information to a DXF file.
+
+    \param pFiler [in]  Pointer to the OdDbDxfFiler object.
+    \param object [in]  OdGe object to be written.
+  */
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePoint2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeVector2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeMatrix2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeScale2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePoint2dArray& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeVector2dArray& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePoint3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeVector3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeMatrix3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeScale3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePoint3dArray& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeVector3dArray& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeTol& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeInterval& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeKnotVector& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeDoubleArray& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdIntArray& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCurveBoundary& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePosition2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePointOnCurve2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeLine2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeLineSeg2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeRay2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCircArc2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeEllipArc2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeExternalCurve2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCubicSplineCurve2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeNurbCurve2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCompositeCurve2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeOffsetCurve2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeSegmentChain2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePosition3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePointOnCurve3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePointOnSurface& object);
+  static void outFields(OdDbDxfFiler* pFiler, const OdGeLine3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeRay3d& object);
+  static void outFields(OdDbDxfFiler* pFiler, const OdGeLineSeg3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePlane& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeBoundedPlane& object);
+  static void outFields(OdDbDxfFiler* pFiler, const OdGeCircArc3d& object);
+  static void outFields(OdDbDxfFiler* pFiler, const OdGeEllipArc3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCubicSplineCurve3d& object);
+  static void outFields(OdDbDxfFiler* pFiler, const OdGeNurbCurve3d& object);
+  static void outFields(OdDbDxfFiler* pFiler, const OdGeCompositeCurve3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeOffsetCurve3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGePolyline3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeAugPolyline3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeExternalCurve3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCone& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeEllipCone& object);	// AE 03.09.2003 
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCylinder& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeEllipCylinder& object);	// AE 09.09.2003 
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeTorus& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeExternalSurface& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeOffsetSurface& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeNurbSurface& object);
+  //static void outFields(OdDbDxfFiler* pFiler,const OdGeExternalBoundedSurface& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeSphere& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeBoundBlock2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeBoundBlock3d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCurveCurveInt2d& object);
+  //static void outFields(OdDbDxfFiler* pFiler, const OdGeCurveCurveInt3d& object);
+
+  /** \details
+    Reads information from a DXF file.
+
+    \param pFiler [in]  Pointer to the OdDbDxfFiler object.
+    \param object [in]  OdGe object to be read.
+  */
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePoint2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeVector2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeMatrix2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeScale2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePoint2dArray& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeVector2dArray& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePoint3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeVector3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeMatrix3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeScale3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePoint3dArray& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeVector3dArray& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeTol& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeInterval& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeKnotVector& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeDoubleArray& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdIntArray& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCurveBoundary& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePosition2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePointOnCurve2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeLine2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeLineSeg2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeRay2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCircArc2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeEllipArc2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeExternalCurve2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCubicSplineCurve2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeNurbCurve2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCompositeCurve2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeOffsetCurve2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeSegmentChain2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePosition3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePointOnCurve3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePointOnSurface& object);
+  static OdResult inFields(OdDbDxfFiler* pFiler, OdGeLine3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeRay3d& object);
+  static OdResult inFields(OdDbDxfFiler* pFiler, OdGeLineSeg3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePlane& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeBoundedPlane& object);
+  static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCircArc3d& object);
+  static OdResult inFields(OdDbDxfFiler* pFiler, OdGeEllipArc3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCubicSplineCurve3d& object);
+  static OdResult inFields(OdDbDxfFiler* pFiler, OdGeNurbCurve3d& object);
+  static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCompositeCurve3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeOffsetCurve3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGePolyline3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeAugPolyline3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeExternalCurve3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCone& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeEllipCone& object);	// AE 03.09.2003 
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCylinder& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeEllipCylinder& object);	// AE 09.09.2003 
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeTorus& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeExternalSurface& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeOffsetSurface& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeNurbSurface& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeExternalBoundedSurface& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeSphere& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeBoundBlock2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeBoundBlock3d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCurveCurveInt2d& object);
+  //static OdResult inFields(OdDbDxfFiler* pFiler, OdGeCurveCurveInt3d& object);
+
+  //static const OdGeLibVersion  OdGeDxfIOVersion;
+};
+
+#endif // OD_GE_DXF_IO_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeometryFromProxy.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeometryFromProxy.h
new file mode 100755
index 0000000..d2e8513
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GeometryFromProxy.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_GEOMETRYFROMPROXY_INCLUDED_
+#define _OD_GEOMETRYFROMPROXY_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbProxyEntity.h"
+#include "DbProxyObject.h"
+#include "ModelerGeometry.h"
+
+/** \details
+    Returns the SAT file associated with the specified AcAdPart entity.
+    \param adPart [in]  Entity pointer.
+    \param sat [out]  Receives the SAT file.
+    
+    \remarks
+    Returns true if and only if adPart is an entity of type AcAdPart, and a valid SAT file was
+    returned in the sat parameter.
+*/
+TOOLKIT_EXPORT bool odGetSatFromProxy(const OdDbProxyEntityPtr& adPart, OdAnsiString& sat);
+
+/** \remarks
+    Returns the OdModelerGeometry object associated with the specified AcAdPart entity. 
+    \param adPart [in]  Entity pointer.
+    \param pModelerGeometry [out]  Receives the OdModelerGeometry object.
+    
+    \remarks
+    Returns true if and only if adPart is an entity of type AcAdPart, and a valid OdModelerGeometry object was
+    returned in the pModelerGeometry parameter.
+*/
+TOOLKIT_EXPORT bool odGetSatFromProxy(const OdDbProxyEntityPtr& adPart, OdModelerGeometryPtr& pModelerGeometry);
+
+TOOLKIT_EXPORT OdDbProxyEntityPtr odEntityToProxy(const OdDbEntity &pEnt, OdDb::DwgVersion dwgVer = OdDb::kDHL_CURRENT, OdDb::MaintReleaseVer nMaintVer = OdDb::kMRelease0);
+
+TOOLKIT_EXPORT OdDbProxyObjectPtr odObjectToProxy(const OdDbObject &pObj, OdDb::DwgVersion dwgVer = OdDb::kDHL_CURRENT, OdDb::MaintReleaseVer nMaintVer = OdDb::kMRelease0);
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/Gi.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/Gi.h
new file mode 100755
index 0000000..39a6c3c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/Gi.h
@@ -0,0 +1,578 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_GI_H_
+#define _OD_GI_H_
+
+#include "RxObject.h"
+
+class OdDbStub;
+class OdCmEntityColor;
+class OdGeVector3d;
+class OdGiMapper;
+class OdCmTransparency;
+struct OdGiDgLinetypeModifiers;
+class OdGiFill;
+class OdGiDrawStream;
+
+typedef enum
+{
+  kOdGiFillAlways = 1,  // Always fill closed graphic primitives.
+  kOdGiFillNever  = 2   // Never fill closed graphic primitives.
+} OdGiFillType;
+
+typedef enum
+{
+  kOdGiInvisible      = 0, // Invisible
+  kOdGiVisible        = 1, // Visible
+  kOdGiSilhouette     = 2  // Silhouette edge
+} OdGiVisibility;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class provides an interface to the graphical attributes of graphic
+    primitives.
+  
+    \remarks
+    OdGiDrawableTraits is a superset of OdGiSubEntityTraits, and exposes
+    additional traits that are consistant for the entire OdGiDrawable.
+    
+    An OdGiDrawableTraits instance is available during calls to subSetAttributes.
+    Graphical attribute settings are used for all graphical primitives until they are changed.
+    
+    \sa
+    TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiDrawableTraits : public OdRxObject
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdGiDrawableTraits);
+};
+
+/** \details
+    This class provides an interface to the graphical attributes of graphic
+    primitives.
+  
+    \remarks
+    An OdGiSubEntityTraits instance is available during calls to subWorldDraw and subViewportDraw,
+    so that drawable classes can control attributes during the vectorization process. 
+    Graphical attribute settings are used for all graphical primitives until they are changed.
+    
+    The functions in this class are implemented by the OdGiAbstractVectorizer
+    class.
+
+    \sa
+    TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiSubEntityTraits : public OdGiDrawableTraits
+{
+public:
+  enum DrawFlags
+  {
+    kNoDrawFlags        = 0x0000,   // Default value. No DrawFlags specified.
+    kDrawBackfaces      = 0x0001,   // Forces backfaces vectorization.
+    kDrawHatchGroup     = 0x0002,   // Next shells and meshes should draw hatches.
+    kDrawFrontfacesOnly = 0x0004,   // Forces discard backfaces mode.
+    kDrawGradientFill   = 0x0008,   // Draws with gradient fill.
+    kDrawSolidFill      = 0x0010,   // Draws with solid fill.
+    kDrawNoLineWeight   = 0x0020,   // Disables lineweight.
+    kDrawNoPlotstyle    = 0x0080,   // Disables plotstyles.
+    // the range before 0x8000 is reserved.
+    kDrawContourFill            = 0x08000, // Teigha(R) for .dgn files specific.
+    kDisableLayoutCache         = 0x10000, // Disable metafile caching for layout switching.
+    kDrawBoundaryForClipping    = 0x20000, // Draw (rough) boundary of object to be checked
+                                           // when clipping is performed, set by vectorizer.
+    kDrawBoundaryForClippingDrw = 0x40000, // Draw (rough) boundary of object to be checked
+                                           // when clipping is performed, set by a drawable.
+    kClipSetIsEmpty             = 0x80000,
+    kInternalDrawFlags          = kDisableLayoutCache | kClipSetIsEmpty,
+    kDrawPolygonFill            = 0x100000, // Fill in all modes if FillAlways mode enabled.
+    kExcludeFromViewExt         = 0x200000, // Don't use extents of the entity when calculating total extents.
+    kDrawDgLsPolyWithoutBreaks  = 0x400000, // Draw polylines/polygons with Dgn Line Style without segmentation.
+    kPolygonProcessing          = 0x800000, // Polygon filling logic must be applied for shell primitive.
+    kDisableAutoGenerateNormals = 0x1000000, // Avoid automatic generation of normals for mesh/shell primitives.
+    kDisableFillModeCheck       = 0x2000000, // Avoid checking of OdGiContext::fillMode during filling of geometry primitives.
+    kDrawUnderlayReference      = 0x4000000, // Draw underlay reference object.
+    // Flags which can be inherited by nested drawables.
+    kInheritableDrawFlags       = kDrawNoLineWeight | kDrawNoPlotstyle | kDrawBoundaryForClipping | kDrawBoundaryForClippingDrw |
+                                  kInternalDrawFlags | kExcludeFromViewExt | kDrawBackfaces | kDrawFrontfacesOnly
+  };
+
+  enum ShadowFlags
+  {
+    kShadowsCastAndReceive = 0,   // Geometry could cast and receive shadows.
+    kShadowsDoesNotCast    = 1,   // Geometry doesn't cast shadows.
+    kShadowsDoesNotReceive = 2,   // Geometry doesn't receive shadows.
+    kShadowsIgnore         = kShadowsDoesNotCast | kShadowsDoesNotReceive
+  };
+
+  enum SelectionFlags
+  {
+    kNoSelectionFlags = 0,   // No selection flags set.
+    kSelectionIgnore  = 1    // Avoid geometry selection.
+  };
+
+  enum SubEntityHints
+  {
+    kHint2DAttributes  = 1,  // Setup attributes only available in 2DWireframe mode (plotStyles and etc.)
+    kHint3DAttributes  = 2,  // Setup attributes only available in shaded modes (materials and etc.)
+    kHintAllAttributes = kHint2DAttributes | kHint3DAttributes,
+    kHintDefaultState  = kHintAllAttributes
+  };
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSubEntityTraits);
+
+  /** \details
+    Sets the current color index (ACI).
+
+    \param color [in]  Color index.
+    
+    \remarks
+    color must be one of the following:
+    
+    <table>
+    Name              Value   Description
+    kACIbyBlock       0       ByBlock.
+    kACIforeground    7       Foreground color.
+    kACIbyLayer       256     ByLayer. 
+    kACIRed           1       Red. 
+    kACIYellow        2       Yellow. 
+    kACIGreen         3       Green. 
+    kACICyan          4       Cyan. 
+    kACIBlue          5       Blue. 
+    kACIMagenta       6       Magenta. 
+    ..                8-255   Defined by AcadPalette.h
+    </table>
+  */
+  virtual void setColor(
+    OdUInt16 color) = 0;
+
+  /** \details
+    Sets the current color from an OdCmEntityColor instance.
+    
+    \param color [in]  OdCmEntityColor object.
+  */
+  virtual void setTrueColor(
+    const OdCmEntityColor& color) = 0;
+
+  /** \details
+    Sets the current layer.
+    \param layerId [in]  Object ID of the LayerTableRecord.  
+  */
+  virtual void setLayer(
+    OdDbStub* layerId) = 0;
+
+  /** \details
+    Sets the current linetype.
+    \param lineTypeId [in]  Object ID of the LinetypeTableRecord.  
+  */
+  virtual void setLineType(
+    OdDbStub* lineTypeId) = 0;
+
+  /** \details
+    Sets the current selection marker.
+    \param marker [in]  Selection marker.
+  */
+  virtual void setSelectionMarker(
+    OdGsMarker selectionMarker) = 0;
+
+  /** \details
+    Sets the current fill type.
+    \param fillType [in]  Fill type.
+    
+    \remarks
+    fillType must be one of the following:
+    
+    <table>
+    Name              Value   Description
+    kOdGiFillAlways   1       Fill closed graphic primitives.
+    kOdGiFillNever    2       Don't fill closed graphic primitives.
+    </table>
+       
+    Closed graphic primitives consist of the following:
+    * arcs with (OdGiArcType == kOdGiArcSector) || (OdGiArcType == kOdGiArcChord) 
+    * circles 
+    * meshes 
+    * polygons 
+    * shells 
+
+  */
+  virtual void setFillType(
+    OdGiFillType fillType) = 0;
+
+  /** \details
+    Sets the current fill plane.
+    
+    \param pNormal [in]  Pointer to the normal to the plane.
+    
+    \note
+    As implemented, this function does nothing but return.
+    It will be fully implemented in a future release.
+  */
+  virtual void setFillPlane(
+    const OdGeVector3d* pNormal = 0);
+
+  /** \details
+    Sets the current lineweight.
+
+    \param lineWeight [in]  Lineweight.
+  */
+  virtual void setLineWeight(
+    OdDb::LineWeight lineWeight) = 0;
+
+  /** \details
+    Sets the current linetype scale.
+    \param lineTypeScale [in]  Linetype scale factor.
+  */
+  virtual void setLineTypeScale(
+    double lineTypeScale = 1.0) = 0;
+
+  /** \details
+    Sets the current thickness.
+    \param thickness [in]  Thickness.
+  */
+  virtual void setThickness(
+    double thickness) = 0;
+
+  /** \details
+    Sets the current PlotStyleName.
+
+    \param plotStyleNameType [in]  Plot Style Name Type.
+    \param plotStyleNameId [in]  Object ID of the Plot Style Name.
+    
+    \remarks
+    plotStyleNameId is used only when plotStyleNameType == kPlotStyleNameById.
+    
+    plotStyleNameType must be one of the following:
+    
+    <table>
+    Name                           Value                         
+    kPlotStyleNameByLayer          0
+    kPlotStyleNameByBlock          1
+    kPlotStyleNameIsDictDefault    2
+    kPlotStyleNameById             3
+    </table>
+  */
+  virtual void setPlotStyleName(
+    OdDb::PlotStyleNameType plotStyleNameType, 
+    OdDbStub* plotStyleNameId = 0) = 0;
+
+  /** \details
+    Sets the current material.
+    \param materialId [in]  Object ID of the material.
+  */
+  virtual void setMaterial(
+    OdDbStub* materialId) = 0;
+
+  /** \details
+    Sets the current material mapper.
+    \param pMapper [in]  Pointer to the GI mapper object.
+  */
+  virtual void setMapper(
+    const OdGiMapper *pMapper) = 0;
+
+  /** \details
+    Sets the current visual style.
+    \param visualStyleId [in]  Object ID of the visual style.
+  */
+  virtual void setVisualStyle(
+    const OdDbStub* visualStyleId);
+
+  /** \details
+    Sets the current transparency.
+    
+    \param transparency [in]  OdCmTransparency object.
+  */
+  virtual void setTransparency(
+    const OdCmTransparency &transparency);
+
+  /** \details
+    Sets the drawing flags.
+    
+    \param drawFlags [in]  Input bitmask with DrawFlags.
+  */
+  virtual void setDrawFlags(
+    OdUInt32 drawFlags);
+
+  /** \details
+    Sets selection geometry flag.
+    
+    \param bSelectionFlag [in]  New selection geometry flag.
+  */
+  virtual void setSelectionGeom(
+    bool bSelectionFlag);
+
+  /** \details
+    Sets the shadow flags.
+    
+    \param shadowFlags [in]  Input ShadowFlags.
+  */
+  virtual void setShadowFlags(
+    ShadowFlags shadowFlags);
+
+  /** \details
+    Sets sectionable flag.
+    
+    \param bSectionableFlag [in]  New sectionable flag.
+  */
+  virtual void setSectionable(
+    bool bSectionableFlag);
+
+  /** \details
+    Sets the selection flags.
+    
+    \param selectionFlags [in]  Input SelectionFlags.
+  */
+  virtual void setSelectionFlags(
+    SelectionFlags selectionFlags);
+
+  /** \details
+    Returns the current color index (ACI).
+
+    \remarks
+    color() returns one of the following:
+    
+    <table>
+    Name              Value   Description
+    kACIbyBlock       0       ByBlock.
+    kACIforeground    7       Foreground color.
+    kACIbyLayer       256     ByLayer. 
+    kACIRed           1       Red. 
+    kACIYellow        2       Yellow. 
+    kACIGreen         3       Green. 
+    kACICyan          4       Cyan. 
+    kACIBlue          5       Blue. 
+    kACIMagenta       6       Magenta. 
+    ..                8-255   Defined by AcadPalette.h
+    </table>
+  */
+  virtual OdUInt16 color() const = 0;
+
+  /** \details
+    Returns the current color as an OdCmEntityColor instance.
+  */
+  virtual OdCmEntityColor trueColor() const = 0;
+
+  /** \details
+      Returns the current layer.
+  */
+  virtual OdDbStub* layer() const = 0;
+
+  /** \details
+      Returns the current linetype.
+  */
+  virtual OdDbStub* lineType() const = 0;
+
+  /** \details
+    Returns the current fill type.
+      
+    \returns
+    fillType() returns one of the following:
+    
+    <table>
+    Name              Value   Description
+    kOdGiFillAlways   1       Fill closed graphic primitives.
+    kOdGiFillNever    2       Don't fill closed graphic primitives.
+    </table>
+       
+    Closed graphic primitives consist of the following:
+    * arcs with (OdGiArcType == kOdGiArcSector) || (OdGiArcType == kOdGiArcChord) 
+    * circles 
+    * meshes 
+    * polygons 
+    * shells 
+  */
+  virtual OdGiFillType fillType() const = 0;
+
+  /** \details
+    Returns the normal to the current fill plane.
+    
+    \param normal [out]  Receives the normal.
+    
+    \remarks
+    As implemented, this function does nothing but return false.
+    It will be fully implemented in a future release.
+  */
+  virtual bool fillPlane(
+    OdGeVector3d& normal);
+
+  /** \details
+    Returns the current lineweight.
+  */
+  virtual OdDb::LineWeight lineWeight() const = 0;
+
+  /** \details
+    Returns the current linetype scale.
+  */
+  virtual double lineTypeScale() const = 0;
+
+  /** \details
+    Returns the current thickness.
+  */
+  virtual double thickness() const = 0;
+
+  /** \details
+    Returns the current PlotStyleName type.
+    
+    \remarks
+    plotStyleNameType() returns one of the following:
+    
+    <table>
+    Name                           Value                         
+    kPlotStyleNameByLayer          0
+    kPlotStyleNameByBlock          1
+    kPlotStyleNameIsDictDefault    2
+    kPlotStyleNameById             3
+    </table>
+  */
+  virtual OdDb::PlotStyleNameType plotStyleNameType() const = 0;
+
+  /** \details
+    Returns object ID of the the plot style name.
+  */
+  virtual OdDbStub* plotStyleNameId() const = 0;
+
+  /** \details
+    Returns the Object ID of the material.
+  */
+  virtual OdDbStub* material() const = 0;
+  
+  /** \details
+    Returns pointer to the current material mapper.
+  */
+  virtual const OdGiMapper* mapper() const = 0;
+
+  /** \details
+    Returns the Object ID of the visual style.
+  */
+  virtual OdDbStub* visualStyle() const;
+
+  /** \details
+    Returns the current transparency.
+  */
+  virtual OdCmTransparency transparency() const;
+
+  /** \details
+    Return the current DrawFlags bitmask.
+  */
+  virtual OdUInt32 drawFlags() const;
+
+  /** \details
+    Return the current selection geometry flag.
+  */
+  virtual bool selectionGeom() const;
+
+  /** \details
+    Return the current ShadowFlags.
+  */
+  virtual ShadowFlags shadowFlags() const;
+
+  /** \details
+    Return the current sectionable flag.
+  */
+  virtual bool sectionable() const;
+
+  /** \details
+    Return the current SelectionFlags.
+  */
+  virtual SelectionFlags selectionFlags() const;
+
+  // Teigha(R) for .dgn files specific
+
+  /** \details
+    Sets the current secondary color from an OdCmEntityColor instance.
+    
+    \param color [in]  OdCmEntityColor object.
+  */
+  virtual void setSecondaryTrueColor(
+    const OdCmEntityColor& color);
+
+  /** \details
+    Returns the current secondary color as an OdCmEntityColor instance.
+  */
+  virtual OdCmEntityColor secondaryTrueColor() const;
+
+  /** \details
+    Sets Dgn Line Style modifiers.
+
+    \param pLSMod [in]  Pointer to structure with Dgn Line Style modifiers.
+  */
+  virtual void setLineStyleModifiers(
+    const OdGiDgLinetypeModifiers* pLSMod);
+
+  /** \details
+    Return pointer to the current Dgn Line Style modifiers structure.
+  */
+  virtual const OdGiDgLinetypeModifiers* lineStyleModifiers() const;
+
+  // eof Teigha(R) for .dgn files specific section
+
+  /** \details
+    Sets boundary filling.
+
+    \param pFill [in]  Boundary filling parameters.
+  */
+  virtual void setFill(
+    const OdGiFill* pFill);
+
+  /** \details
+    Return boundary filling parameters.
+  */
+  virtual const OdGiFill* fill() const;
+
+  /** \details
+    Returns the set of SubEntityHints flags which can be used to provide more flexible tuning of
+    subSetAttributes traits processing.
+  */
+  virtual OdUInt32 setupForEntity() const;
+
+  /** \details
+    Adds a light object to the model.
+
+    \param lightId [in]  Object ID of the light.
+
+    \remarks
+    Through this interface, drawables that emit light can add light objects to the model. 
+  */
+  virtual void addLight(
+    const OdDbStub* lightId);
+
+  /** \details
+    Adds interface to directly invoke Gs graphics data.
+
+    \param pDrawStream [in]  Pointer onto draw stream interface.
+  */
+  virtual void addDrawStream(
+    OdGiDrawStream *pDrawStream);
+};
+
+typedef OdSmartPtr<OdGiSubEntityTraits> OdGiSubEntityTraitsPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_OD_GI_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAbstractClipBoundary.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAbstractClipBoundary.h
new file mode 100755
index 0000000..cd9376e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAbstractClipBoundary.h
@@ -0,0 +1,202 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _GI_ABSTRACT_CLIP_BOUNDARY_H_INCLUDED_
+#define _GI_ABSTRACT_CLIP_BOUNDARY_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "GiClipBoundary.h"
+#include "IntArray.h"
+
+/** \details
+    Base class for pass additional clip boundary information from OdGiDrawable objects to the underlying OdGi system.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiAbstractClipBoundary
+{
+  public:
+    enum BoundaryType
+    {
+      kNormal = 0, // Default clip boundary (not pass additional data, clip outside contour)
+      kInverted,   // Inverted clip boundary (pass inverted clip array, clip inside contour)
+      kExtended,   // Extended clip boundary (pass clipping contours, clip by sorted contours array)
+      kComplex     // Complex clip boundary (extended clip boundary which requires additional preprocessing)
+    };
+  public:
+    ODRX_HEAP_OPERATORS();
+
+    OdGiAbstractClipBoundary() { }
+    virtual ~OdGiAbstractClipBoundary() { }
+
+    /** \details
+        Returns type of the inherited boundary.
+    */
+    virtual BoundaryType type() const { return kNormal; }
+
+    /** \details
+        Returns cloned object.
+    */
+    virtual OdGiAbstractClipBoundary *clone() const { return new OdGiAbstractClipBoundary(); }
+};
+
+/** \details
+    Class to pass inverted clip boundary information from OdGiDrawable objects to the underlying OdGi system.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiInvertedClipBoundary : public OdGiAbstractClipBoundary
+{
+  protected:
+    OdGePoint2dArray m_Points; // Array of points that defines the inverted clip boundary.
+  public:
+    OdGiInvertedClipBoundary() { }
+    ~OdGiInvertedClipBoundary() { }
+
+    /** \details
+        Returns type of the inherited boundary.
+    */
+    BoundaryType type() const { return kInverted; }
+
+    /** \details
+        Returns inverted clipping boundary.
+    */
+    const OdGePoint2dArray &invertedClipBoundary() const { return m_Points; }
+    /** \details
+        Setup inverted clipping boundary.
+        \param pPoints [in]  Input points array.
+    */
+    void setInvertedClipBoundary(const OdGePoint2dArray &pPoints) { m_Points = pPoints; }
+
+    /** \details
+        Returns cloned object.
+    */
+    OdGiAbstractClipBoundary *clone() const {
+      OdGiInvertedClipBoundary *pNew = new OdGiInvertedClipBoundary();
+      pNew->setInvertedClipBoundary(invertedClipBoundary());
+      return pNew;
+    }
+};
+
+/** \details
+    Class to pass extended clip boundary information from OdGiDrawable objects to the underlying OdGi system.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiExtendedClipBoundary : public OdGiAbstractClipBoundary
+{
+  protected:
+    OdIntArray       m_Counts; // Array of contour points counts
+    OdGePoint2dArray m_Points; // Array of points that defines the extended clip boundary contours.
+  public:
+    OdGiExtendedClipBoundary() { }
+    ~OdGiExtendedClipBoundary() { }
+
+    /** \details
+        Returns type of the inherited boundary.
+    */
+    BoundaryType type() const { return kExtended; }
+
+    /** \details
+        Returns extended clipping boundary contour vertices counts.
+    */
+    const OdIntArray &clipBoundaryCounts() const { return m_Counts; }
+    /** \details
+        Setup inverted extended boundary contour vertices counts.
+        \param pCounts [in]  Input counts array.
+    */
+    void setClipBoundaryCounts(const OdIntArray &pCounts) { m_Counts = pCounts; }
+
+    /** \details
+        Returns extended clipping boundary points.
+    */
+    const OdGePoint2dArray &clipBoundaryPoints() const { return m_Points; }
+    /** \details
+        Setup extended clipping boundary points.
+        \param pPoints [in]  Input points array.
+    */
+    void setClipBoundaryPoints(const OdGePoint2dArray &pPoints) { m_Points = pPoints; }
+
+    /** \details
+        Returns cloned object.
+    */
+    OdGiAbstractClipBoundary *clone() const { return copyExtendedData(new OdGiExtendedClipBoundary()); }
+  protected:
+    OdGiAbstractClipBoundary *copyExtendedData(OdGiExtendedClipBoundary *pNew) const {
+      pNew->setClipBoundaryCounts(clipBoundaryCounts());
+      pNew->setClipBoundaryPoints(clipBoundaryPoints());
+      return pNew;
+    }
+};
+
+/** \details
+    Class to pass extended clip boundary information which requires preprocessing from OdGiDrawable objects to the underlying OdGi system.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiComplexClipBoundary : public OdGiExtendedClipBoundary
+{
+  public:
+    OdGiComplexClipBoundary() { }
+    ~OdGiComplexClipBoundary() { }
+
+    /** \details
+        Returns type of the inherited boundary.
+    */
+    BoundaryType type() const { return kComplex; }
+
+    /** \details
+        Returns cloned object.
+    */
+    OdGiAbstractClipBoundary *clone() const { return copyExtendedData(new OdGiComplexClipBoundary()); }
+};
+
+/** \details
+    Container for OdGiClipBoundary and OdGiAbstractClipBoundary.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+struct OdGiClipBoundaryWithAbstractData : public OdGiClipBoundary
+{
+  OdGiAbstractClipBoundary *m_pAbstractData;
+
+  OdGiClipBoundaryWithAbstractData() : m_pAbstractData(NULL) { }
+  OdGiClipBoundaryWithAbstractData(const OdGiClipBoundary &pBoundary, const OdGiAbstractClipBoundary *pAbsData = NULL)
+    : OdGiClipBoundary(pBoundary), m_pAbstractData(NULL)
+  {
+    if (pAbsData) m_pAbstractData = pAbsData->clone();
+  }
+  OdGiClipBoundaryWithAbstractData(const OdGiClipBoundaryWithAbstractData &pBoundary)
+    : OdGiClipBoundary(pBoundary), m_pAbstractData(NULL)
+  {
+    if (pBoundary.m_pAbstractData) m_pAbstractData = pBoundary.m_pAbstractData->clone();
+  }
+  ~OdGiClipBoundaryWithAbstractData() {
+    if (m_pAbstractData) delete m_pAbstractData;
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _GI_ABSTRACT_CLIP_BOUNDARY_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAnnoScaleSet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAnnoScaleSet.h
new file mode 100755
index 0000000..cd97b36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiAnnoScaleSet.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIANNOSCALESET_H__
+#define __ODGIANNOSCALESET_H__
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiExport.h"
+#include "DbStubPtrArray.h"
+
+/** \details
+    Annotation scales array.
+
+    \sa
+    TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiAnnoScaleSet
+{
+public:
+  OdGiAnnoScaleSet() : m_defaultId(NULL){}
+  OdGiAnnoScaleSet(OdDbStubPtrArray& aSortedId, OdDbStub* defaultId) : m_aId(aSortedId), m_defaultId(defaultId){}
+  OdGiAnnoScaleSet(const OdGiAnnoScaleSet& v) : m_aId(v.m_aId), m_defaultId(v.m_defaultId){}
+  bool operator < (const OdGiAnnoScaleSet& v) const;
+  void set(OdDbStubPtrArray& aSortedId, OdDbStub* defaultId)
+  {
+    m_aId = aSortedId; m_defaultId = defaultId;
+  }
+  void clear() { m_aId.clear(); m_defaultId = NULL; }
+  const OdDbStubPtrArray &annoScaleIds() const { return m_aId; }
+  OdDbStub* defaultId() const { return m_defaultId; }
+
+protected:
+  OdDbStubPtrArray m_aId;//sorted
+  OdDbStub* m_defaultId;
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIANNOSCALESET_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiBaseVectorizer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiBaseVectorizer.h
new file mode 100755
index 0000000..c204aff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiBaseVectorizer.h
@@ -0,0 +1,849 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// GiBaseVectorizer.h: interface for the OdGiBaseVectorizer class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGIBASEVECTORIZER_INCLUDED_
+#define _ODGIBASEVECTORIZER_INCLUDED_
+
+#include "Gi/GiDrawImpl.h"
+#include "Gs/Gs.h"
+#include "Ge/GeExtents3d.h"
+#include "Gi/GiViewport.h"
+#include "Gi/GiXform.h"
+#include "Gi/GiModelToViewProc.h"
+#include "Gi/GiConveyorEntryPoint.h"
+#include "Gi/GiConveyorConnector.h"
+#include "Gi/GiDeviation.h"
+#include "Ge/GePlane.h"
+#include "Gi/GiDgLinetype.h"
+#include "Gi/GiOrthoClipper.h"
+#include "Gi/GiExtAccum.h"
+#include "Gi/GiSubEntityTraitsData.h"
+#include "Gi/GiTextStyle.h"
+#include "Gi/GiLayerTraitsData.h"
+#include "Gi/GiMaterialTraitsData.h"
+#include "Gi/GiTraitsCache.h"
+
+class OdGiVisualStyle;
+
+class OdGiBaseVectorizer;
+
+class OdDbStub;
+
+typedef OdSmartPtr<OdGiFill> OdGiFillPtr;
+
+#include "TD_PackPush.h"
+
+// Enable traits optimization
+#define ENABLE_GITRAITSOPTIMIZATION
+
+/** \details
+    This class provides an implementation of the OdGiWorldDraw::geometry() function.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT ODRX_ABSTRACT OdGiWorldDrawImpl : public OdGiWorldDraw_
+                                                  , public OdGiSubEntityTraits
+{
+protected:
+  ODRX_USING_HEAP_OPERATORS(OdGiWorldDraw_);
+
+  OdGiSubEntityTraitsData m_entityTraitsData;
+  OdGiContext*            m_pContext;
+
+  OdGiWorldDrawImpl();
+public:
+  /** \details
+    Sets the OdGiContext instance associated with this object.
+
+    \param pUserContext [in]  Pointer to the user context.
+  */
+  virtual void setContext(OdGiContext* pUserContext);
+  static OdGiContext* dummyGiContext();
+
+  OdUInt16 color() const;
+  OdCmEntityColor trueColor() const;
+  OdDbStub* layer() const;
+  OdDbStub* lineType() const;
+  OdGiFillType fillType() const;
+  OdDb::LineWeight lineWeight() const;
+  double lineTypeScale() const;
+  double thickness() const;
+  OdDb::PlotStyleNameType plotStyleNameType() const;
+  OdDbStub* plotStyleNameId() const;
+  OdDbStub* material() const;
+  const OdGiMapper* mapper() const;
+  OdDbStub* visualStyle() const;
+  OdCmTransparency transparency() const;
+  OdUInt32 drawFlags() const;
+  bool selectionGeom() const;
+  ShadowFlags shadowFlags() const;
+  bool sectionable() const;
+  SelectionFlags selectionFlags() const;
+  OdCmEntityColor secondaryTrueColor() const;
+  const OdGiDgLinetypeModifiers* lineStyleModifiers() const;
+  const OdGiFill* fill() const;
+
+  void setTrueColor(const OdCmEntityColor& color);
+  void setPlotStyleName(OdDb::PlotStyleNameType plotStyleNameType, OdDbStub* pPlotStyleNameId = 0);
+  void setColor(OdUInt16 color);
+  void setLayer(OdDbStub* layerId);
+  void setLineType(OdDbStub* lineTypeId);
+  void setFillType(OdGiFillType fillType);
+  void setLineWeight(OdDb::LineWeight lineWeight);
+  void setLineTypeScale(double lineTypeScale);
+  void setThickness(double thickness);
+  void setSelectionMarker(OdGsMarker selectionMarker);
+  void setMaterial(OdDbStub* pMaterialId);
+  void setMapper(const OdGiMapper *pMapper);
+  void setVisualStyle(const OdDbStub* visualStyleId);
+  void setTransparency(const OdCmTransparency &transparency);
+  void setDrawFlags(OdUInt32 drawFlags);
+  void setSelectionGeom(bool bSelectionFlag);
+  void setShadowFlags(ShadowFlags shadowFlags);
+  void setSectionable(bool bSectionableFlag);
+  void setSelectionFlags(SelectionFlags selectionFlags);
+  void setSecondaryTrueColor(const OdCmEntityColor& color);
+  void setLineStyleModifiers(const OdGiDgLinetypeModifiers* pLSMod);
+  void setFill(const OdGiFill* pFill);
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiCommonDraw Overrides
+
+  OdGiContext* context() const;
+
+  bool isDragging() const;
+
+  OdGiSubEntityTraits& subEntityTraits() const;
+
+  OdGiGeometry& rawGeometry() const;
+
+  OdUInt32 numberOfIsolines() const;
+};
+
+/** \details
+    This class is a base implementation of the OdGiWorldDraw and OdGiViewportDraw interfaces.
+    Library: TD_Gi    
+  
+    \remarks
+    This class takes a drawable graphics and passes it into OdGiConveyorGeometry.
+    
+    It is the base class for specialized frameworks such as OdGiExtCalc.
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiBaseVectorizer : public OdGiWorldDrawImpl
+                                     , public OdGiViewportDraw_
+                                     , public OdGiConveyorContext
+                                     , public OdGiDeviation 
+{
+protected:
+  ODRX_HEAP_OPERATORS();
+
+  mutable OdGiSubEntityTraitsData m_effectiveEntityTraitsData;
+
+  ODGI_EXPORT_STATIC static const OdGiSubEntityTraitsData g_entityTraitsDataReset;
+
+  mutable OdDbStub*               m_layerId;
+  mutable OdGiLayerTraitsTaker    m_effectiveLayerTraits;
+
+  typedef OdGiTraitsCache<OdGiMaterialTraitsData, OdGiMaterialTraitsTaker, OdGiMaterialTraits::kByBlock | OdGiMaterialTraits::kByLayer> OdGiMaterialTraitsCache;
+  mutable OdDbStub*               m_materialId;
+  mutable OdDbStub*               m_byLayerMaterialId;
+  mutable OdDbStub*               m_byBlockMaterialId;
+  mutable OdUInt32                m_materialAttributes;
+  mutable OdGiMaterialTraitsCache m_effectiveMaterialTraitsData;
+  mutable OdDbStub*               m_effectiveMaterialId;
+  void actualizeMaterialAttributes(OdDbStub* materialId) const;
+
+  virtual OdDbStub*               switchLayer(OdDbStub* layerId) const;
+  virtual const OdGiLayerTraitsData& effectiveLayerTraits() const;
+  mutable OdDbStub*               m_effectiveLayerId;
+
+  OdGsMarker                      m_nSelectionMarker;
+  OdGsMarker                      m_nPrevSelectionMarker;
+
+  OdGiMapper                      m_materialMapper;
+  OdGiMapper*                     m_pCurMaterialMapper;
+
+  OdGiDgLinetypeModifiers         m_lsModifiers;
+  OdGiDgLinetypeModifiers*        m_pCurLSModifiers;
+
+  OdGiFillPtr                     m_pFill;
+  OdGiDrawStream*                 m_pDrawStream;
+
+  virtual bool layerVisible(OdDbStub* layerId) const;
+  /** \details
+    Updates the layer traits for this Vectorizer object from the specified subentity traits.
+    \param subEntityTraits [in]  Subentity traits.
+  */
+  void updateLayerTraits(OdGiSubEntityTraitsData& subEntityTraits) const;
+  
+public:
+  enum ChangedTraits
+  {
+    kFirstChangedFlag      = 1,
+    kColorChanged          = kFirstChangedFlag <<  0,
+    kLayerChanged          = kFirstChangedFlag <<  1,
+    kLineTypeChanged       = kFirstChangedFlag <<  2,
+    kFillTypeChanged       = kFirstChangedFlag <<  3,
+    kLineWeightChanged     = kFirstChangedFlag <<  4,
+    kLineTypeScaleChanged  = kFirstChangedFlag <<  5,
+    kThicknessChanged      = kFirstChangedFlag <<  6,
+    kPlotStyleChanged      = kFirstChangedFlag <<  7,
+    kMaterialChanged       = kFirstChangedFlag <<  8,
+    kMapperChanged         = kFirstChangedFlag <<  9,
+    kVisualStyleChanged    = kFirstChangedFlag << 10,
+    kTransparencyChanged   = kFirstChangedFlag << 11,
+    kDrawFlagsChanged      = kFirstChangedFlag << 12,
+    kSelectionGeomChanged  = kFirstChangedFlag << 13,
+    kShadowFlagsChanged    = kFirstChangedFlag << 14,
+    kSectionableChanged    = kFirstChangedFlag << 15,
+    kSelectionFlagsChanged = kFirstChangedFlag << 16,
+    kSecColorChanged       = kFirstChangedFlag << 17,
+    kLSModifiersChanged    = kFirstChangedFlag << 18,
+    kFillChanged           = kFirstChangedFlag << 19,
+    kAwareFlagChanged      = kFirstChangedFlag << 20,
+    kAllChanged            = 0x1FFFFF, // bin: 111111111111111111111
+    kSomeChanged           = kAllChanged
+  };
+
+  /** \details
+    Returns true if and only if the EntityTraitsData for this Vectorizer object have been changed.
+  */
+  bool isEntityTraitsDataChanged(int bit = kSomeChanged) const { return GETBIT(m_entityTraitsDataChanged, bit); }
+
+  /** \details
+    Marks as changed the EntityTraitsData data for this Vectorizer object.
+  */
+  virtual void setEntityTraitsDataChanged() { m_entityTraitsDataChanged = kAllChanged; }
+  /** \details
+    Marks as changed the EntityTraitsData data for this Vectorizer object.
+  */
+  virtual void setEntityTraitsDataChanged(int bit, bool value = true) { SETBIT(m_entityTraitsDataChanged, bit, value); }
+  
+  /** \details
+    Marks as unchanged the EntityTraitsData data for this Vectorizer object.
+  */
+  void clearEntityTraitsDataChanged() const { m_entityTraitsDataChanged = 0; }
+
+  /** \details
+    Returns true if and only if the layer of this Vectorizer object is effectively visible.
+    
+    \remarks
+    This function returns:
+    
+                    (GETBIT(m_flags, kDrawLayerOff   ) || !traits.isLayerOff()) &&
+                    (GETBIT(m_flags, kDrawLayerFrozen) || !traits.isLayerFrozen())
+  */
+  bool effectivelyVisible() const
+  {
+    const OdGiSubEntityTraitsData& traits = effectiveTraits();
+    return (
+      (GETBIT(m_flags, kDrawLayerOff   ) || !traits.isLayerOff()) &&
+      (GETBIT(m_flags, kDrawLayerFrozen) || !traits.isLayerFrozen())
+    );
+  }  
+
+public:
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiConveyorContext Overrides
+
+  OdGiContext& giContext() const;
+  const OdGiDrawableDesc* currentDrawableDesc() const;
+  const OdGiDrawable* currentDrawable() const;
+  const OdGiViewport* giViewport() const;
+  const OdGsView* gsView() const;
+
+  /////////////////////////////////////////////////////////////////////////////
+
+private:
+  // Data Members
+
+  OdGiConveyorEntryPoint          m_dcEntryPoint;
+  OdGiTextStyle                   m_textStyle;
+  OdGePlane                       m_primitivePlane;
+  OdGeVector3d                    m_extrusion;
+  OdGiXformPtr                    m_pDcInputToOutput;
+#ifdef ENABLE_GITRAITSOPTIMIZATION
+  bool                            m_bResetEntityTraitsData; //reset them before setAttributes()
+#endif
+protected:
+  OdRxObjectPtr                   m_pGiReserved;
+  mutable OdUInt32                m_entityTraitsDataChanged;
+  OdGiConveyorConnector           m_eyeEntryPoint;
+
+  /** \details
+    Returns an extrusion vector normal to the specified plane.
+    
+    \param firstPoint [in]  First point in the plane.
+    \param secondPoint [in]  Second point in the plane.
+    \param thirdPoint [in]  Third point in the plane.
+    \param origin [in]  Origin of the plane.
+    \param u [in]  U-vector in the plane.
+    \param v [in]  V-vector in the plane.
+    \param normal [in]  Normal to the plane.
+    \param pNormal [in]  Pointer to the normal to the plane.
+    \remarks
+    The magnitude of the extrusion vector is effectiveTraits().thickness().
+  */
+  const OdGeVector3d* extrusion(const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint, const OdGePoint3d& thirdPoint);
+  const OdGeVector3d* extrusion(const OdGeVector3d& normal);
+  const OdGeVector3d* extrusion(const OdGeVector3d* pNormal)
+  {
+    if(pNormal)
+      return extrusion(*pNormal);
+    return 0;
+  }
+  const OdGeVector3d* extrusion(const OdGePoint3d& origin, const OdGeVector3d& u, const OdGeVector3d& v);
+
+  OdGiConveyorConnector           m_modelEntryPoint;
+  OdGiConveyorConnector*          m_pActiveEntryPoint;
+
+  OdGiModelToViewProcPtr          m_pModelToEyeProc;
+  OdGiConveyorConnector           m_output;
+
+public:
+  OdGiDrawableDesc*               m_pDrawableDesc;
+  OdUInt32                        m_nDrawableAttributes;
+  const OdGiDrawableDesc *drawableDesc() const { return m_pDrawableDesc; }
+protected:
+
+  enum Flags
+  {
+    kFirstFlag            = 1,
+
+    kSuppressViewportDraw = kFirstFlag << 0,
+    kDrawInvisibleEnts    = kFirstFlag << 1,
+    kDrawLayerOff         = kFirstFlag << 2,
+    kDrawLayerFrozen      = kFirstFlag << 3,
+    kIgnoreFillPlane      = kFirstFlag << 4,
+    kSelectionMode        = kFirstFlag << 5,
+    kAttributesSegment    = kFirstFlag << 6,
+    kXrefOverride         = kFirstFlag << 7,
+
+    kLastFlag             = kXrefOverride
+  };
+  mutable OdUInt32                m_flags;
+  OdUInt32                        m_drawContextFlags;
+
+  const OdGiSubEntityTraitsData*  m_pByBlock;
+
+  /** \details
+    Sets the specfied EntityTraitsData data from the specified EntityTraitsData.
+    
+    \param pSource [in]  Pointer to the source SubEntityTraitsData.
+    \param destination [out]  Receives the SubEntityTraitsData.
+    
+    \remarks
+    If pSource is NULL, default SubEntityTraitsData is used.
+    
+  */
+  virtual void affectTraits(const OdGiSubEntityTraitsData* pSource, OdGiSubEntityTraitsData& destination) const;
+
+  /** \details
+    Returns the dash length below which linetypes are not generated by this Vectorizer object.
+  */
+  virtual double linetypeGenerationCriteria() const;
+
+#ifdef ENABLE_GITRAITSOPTIMIZATION
+  inline void resetEntityTraitsData();
+#endif
+public:
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiConveyorContext Override
+
+  /** \details
+    Returns the EntityTraitsData in effect for this Vectorization object.
+  */
+  virtual const OdGiSubEntityTraitsData& effectiveTraits() const;
+
+  virtual void setEffectiveTraits(const OdGiSubEntityTraitsData& traits,
+                                  const OdGeVector3d* fillNormal = NULL);
+
+  /////////////////////////////////////////////////////////////////////////////
+protected:
+
+  /** \details
+    Returns the a pointer to the OdRxClass object that contains a description
+    of this object type, for objects of known class type.
+
+    \note
+    This function is for use only when the class type of this object is known.
+    If the class type of this object is unknown, use instead isA().
+  */
+  static OdRxClass* desc() { return ::OdRxObject::desc(); }
+
+  /** \details
+    Called when selection marker is being to be changed.
+
+    \param nSelectionMarker [in]  New selection marker.
+
+    \remarks
+    Previous selection marker accessible through selectionMarker method inside override.
+    This method should be called for base class from override to change selection marker.
+  */
+  virtual void selectionMarkerOnChange(OdGsMarker nSelectionMarker);
+
+public:
+  OdGiBaseVectorizer();
+  virtual ~OdGiBaseVectorizer();
+
+  /** \details
+    Returns the a pointer to the OdRxClass object that contains a description
+    of this object type, for objects of unknown class type.
+    
+    \note
+    This function may be used only when the class type of this object is unknown. 
+    If the class type of this object is known, use instead desc().
+  */
+  OdRxClass* isA() const;
+
+  /** \details
+     Returns the Protocol Extension object for this object.
+     \remarks
+     Returns NULL if no protocol extension class exists.
+  */
+  OdRxObject* queryX(const OdRxClass* pProtocolClass) const;
+
+  /** \details
+    Returns a reference to the output of this Vectorizer object.
+  */
+  virtual OdGiConveyorOutput& output();
+
+  /** \details
+    Sets the Eye to Output transformation matrix for this Vectorizer object.
+    \param xfm [in]  Transformation matrix.
+  */
+  void setEyeToOutputTransform(const OdGeMatrix3d& xfm);
+
+  /** \details
+    Returns the Eye to Output transformation matrix for this Vectorizer object.
+    \param xfm [in]  Receives the transformation matrix.
+  */
+  const OdGeMatrix3d& eyeToOutputTransform() const;
+  void eyeToOutputTransform(OdGeMatrix3d& xfm) const;
+
+  /** \details
+    Returns the OdGiConveyorContext associated with this object.
+
+    \remarks
+    Since OdGiConveyorContext is a parent class, this function always returns "this".
+  */
+  OdGiConveyorContext* drawContext() { return this; }
+
+  const OdGiConveyorContext* drawContext() const { return this; }
+
+  /** \details
+    Begins the ViewVectorization process for this Vectorizer object.
+  */
+  virtual void beginViewVectorization();
+
+  /** \details
+    Ends the ViewVectorization process for this Vectorizer object.
+  */
+  virtual void endViewVectorization();
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiSubEntityTraits Overrides
+
+  void setTrueColor(const OdCmEntityColor& trueColor);
+  /** \details
+    Sets the Plot Style Name Type for this Vectorizer object.
+    \param plotStyleNameType [in]  Plot Style Name Type.
+    
+    \remarks
+    plotStyleNameType must be one of the following:
+    
+    <table>
+    Name                                 Value                         
+    OdDb::kPlotStyleNameByLayer          0
+    OdDb::kPlotStyleNameByBlock          1
+    OdDb::kPlotStyleNameIsDictDefault    2
+    OdDb::kPlotStyleNameById             3
+    </table>
+  */
+  void setPlotStyleNameType(OdDb::PlotStyleNameType plotStyleNameType);
+  /** \details
+    Sets the PlotStyleName for this Vectorizer object.
+    \param plotStyleNameId [in]  Pointer to the Object ID of the plot style name.
+  */
+  void setPlotStyleNameId(OdDbStub* plotStyleNameId);
+  void setColor(OdUInt16 color);
+  void setLayer(OdDbStub* layerId);
+  void setLineType(OdDbStub* lineTypeId);
+  void setFillType(OdGiFillType fillType);
+  void setLineWeight(OdDb::LineWeight lineWeight);
+  void setLineTypeScale(double lineTypeScale);
+  void setThickness(double thickness);
+
+  void setPlotStyleName(OdDb::PlotStyleNameType plotStyleNameType, OdDbStub* pPlotStyleNameId= 0);
+  void setSelectionMarker(OdGsMarker selectionMarker);
+  void setMaterial(OdDbStub* pMaterialId);
+  void setMapper(const OdGiMapper *pMapper);
+  void setVisualStyle(const OdDbStub* pVisualStyleId);
+  void setTransparency(const OdCmTransparency& transparency);
+  void setDrawFlags(OdUInt32 drawFlags);
+  void setSelectionGeom(bool bSelectionFlag);
+  void setShadowFlags(ShadowFlags shadowFlags);
+  void setSectionable(bool bSectionableFlag);
+  void setSelectionFlags(SelectionFlags selectionFlags);
+
+  void setSecondaryTrueColor(const OdCmEntityColor& color);
+  void setLineStyleModifiers(const OdGiDgLinetypeModifiers* pLSMod);
+
+  void setFill(const OdGiFill* pFill);
+
+  virtual void setVisualStyle(const OdGiVisualStyle &visualStyle);
+  virtual bool visualStyle(OdGiVisualStyle &visualStyle) const;
+  virtual OdDbStub* visualStyle() const;
+
+  virtual void addDrawStream(OdGiDrawStream *pDrawStream);
+  OdGiDrawStream *getDrawStream() const { return m_pDrawStream; }
+
+  /////////////////////////////////////////////////////////////////////////////
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiCommonDraw Overrides
+
+  OdGiContext* context() const;
+  bool regenAbort() const;
+  OdGiSubEntityTraits& subEntityTraits() const;
+  double deviation(const OdGiDeviationType deviationType, const OdGePoint3d& pointOnCurve) const;
+  OdGiRegenType regenType() const;
+  OdUInt32 numberOfIsolines() const;
+  OdGiGeometry& rawGeometry() const;
+  bool isDragging() const;
+
+  /////////////////////////////////////////////////////////////////////////////
+
+  OdUInt32 drawContextFlags() const;
+  void setDrawContextFlags(OdUInt32 flags, bool bFlag);
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiViewportDraw Override
+  //
+
+  /** \note
+      The default implementation of this function always returns 0.
+  */
+  OdUInt32  sequenceNumber() const;
+
+  /** \note
+      The default implementation of this function always returns false.
+  */
+  bool isValidId(const OdUInt32 viewportId) const;
+
+  /** \note
+      The default implementation of this function always returns 0.
+  */
+  OdDbStub* viewportObjectId() const;
+
+  OdGiViewport& viewport() const;
+
+  /////////////////////////////////////////////////////////////////////////////
+
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiGeometry Overrides
+
+  void circle(const OdGePoint3d& center, double radius, const OdGeVector3d& normal);
+
+  void circle(const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint, const OdGePoint3d& thirdPoint);
+
+  void circularArc(const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple);
+
+  void circularArc(const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& thirdPoint,
+    OdGiArcType arcType = kOdGiArcSimple);
+
+  void polyline(OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    OdGsMarker baseSubEntMarker = -1);
+
+  void polygon(OdInt32 numVertices, const OdGePoint3d* vertexList);
+
+  void pline(const OdGiPolyline& polyline, OdUInt32 fromIndex = 0, OdUInt32 numSegs = 0);
+
+  /** \details
+    Introduces a shape into this vectorization context.
+    
+    \param position [in]  Position of the shape.
+    \param shapeNumber [in]  Shape number.
+    \param pTextStyle [in]  Pointer to the TextStyle for the shape.
+    \param direction [in]  Baseline direction for the shape.
+    \param normal [in]  Normal vector.
+  */
+  void shape(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    int shapeNumber, const OdGiTextStyle* pTextStyle);
+
+  void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    double height, double width, double oblique, const OdString& msg);
+
+  void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    const OdChar* msg, OdInt32 length, bool raw, const OdGiTextStyle* pTextStyle);
+
+  void xline(const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint);
+
+  void ray(const OdGePoint3d& basePoint, const OdGePoint3d& throughPoint );
+
+  void nurbs(const OdGeNurbCurve3d& nurbsCurve);
+
+  void ellipArc(const OdGeEllipArc3d& ellipArc,
+    const OdGePoint3d* endPointsOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple);
+
+  void mesh(OdInt32 numRows,
+    OdInt32 numColumns,
+    const OdGePoint3d* vertexList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+
+  void shell(OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    OdInt32 faceListSize,
+    const OdInt32* faceList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+
+  void worldLine(const OdGePoint3d points[2]);
+
+  void image(const OdGiImageBGRA32& img,
+    const OdGePoint3d& origin,
+    const OdGeVector3d& uVec,
+    const OdGeVector3d& vVec,
+    OdGiRasterImage::TransparencyMode trpMode = OdGiRasterImage::kTransparency8Bit);
+
+  void edge(const OdGiEdge2dArray& edges);
+
+  void polypoint(OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* pColors, const OdCmTransparency* pTransparency,
+                 const OdGeVector3d* pNormals, const OdGsMarker* pSubEntMarkers, OdInt32 nPointSize);
+
+  void rowOfDots(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint);
+
+  void pushClipBoundary(OdGiClipBoundary* pBoundary);
+  void pushClipBoundary(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo);
+  void drawClipBoundary(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo);
+  void popClipBoundary();
+  bool isClipping() const;
+
+  void pushModelTransform(const OdGeMatrix3d& xfm);
+  void pushModelTransform(const OdGeVector3d& normal);
+  void popModelTransform();
+
+  OdGeMatrix3d getModelToWorldTransform() const;
+  OdGeMatrix3d getWorldToModelTransform() const;
+
+  void draw(const OdGiDrawable* pDrawable);
+
+  const OdGiPathNode* currentGiPath() const;
+
+  /////////////////////////////////////////////////////////////////////////////
+
+  /** \details
+    Sets the default drawable traits for this Vectorizer object,
+    and sets the drawable flags for the specified OdGiDrawable object.
+    
+    \param pDrawable [in]  Pointer to the Drawable object.
+  */
+  virtual OdUInt32 setAttributes(const OdGiDrawable* pDrawable);
+
+  /** \details
+    Returns the  drawable flags of the last vectorized OdGiDrawable object.
+  */
+  OdUInt32 drawableAttributes() const { return m_nDrawableAttributes; }
+
+  /** \details
+    Returnes true if and only the Drawable object associated with
+    this Vectorizer is visible.
+    \param drawableFlags [in]  Drawable flags.
+    \remarks
+    Called by draw().
+  */
+  bool needDraw(OdUInt32 drawableFlags);
+
+  /** \details
+    Vectorizes the specified OdGiDrawable object.
+    \param drawableFlags [in]  Drawable flags.
+    \param pDrawable [in]  Pointer to the Drawable object.
+    
+    \remarks
+    Called by draw() after subSetAttributes().
+    
+    Returns pDrawable->subWorldDraw(this). If pDrawable->subWorldDraw returns false, 
+    and kSuppressViewportDraw is not set, this function evokes pDrawable->subViewportDraw(this).
+  */
+  virtual bool doDraw(OdUInt32 drawableFlags, const OdGiDrawable* pDrawable);
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiWorldGeometry Override
+
+  void setExtents(const OdGePoint3d *newExtents);
+  void startAttributesSegment();
+  bool isAttributesSegmentEnabled();
+
+  /////////////////////////////////////////////////////////////////////////////
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiViewportGeometry
+
+  void rasterImageDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage,
+    const OdGePoint2d* uvBoundary,
+    OdUInt32 numBoundPts,
+    bool transparency = false,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0);
+
+  void metafileDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool bDcAligned = true,
+    bool bAllowClipping = false);
+
+  void polylineEye(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+  void polygonEye(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+
+  void polylineDc(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+  void polygonDc(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiConveyorContext Overrides
+
+  virtual void onTraitsModified();
+
+  /////////////////////////////////////////////////////////////////////////////
+
+  /** \details
+    Returns the maximum ModelSpace (UCS) deviation for this VectorizeView object.
+  */
+  const OdGiDeviation& modelDeviation() const;
+  /** \details
+    Returns the maximum world (WCS) deviation for this VectorizeView object.
+  */
+  const OdGiDeviation& worldDeviation() const;
+  /** \details
+    Returns the maximum EyeSpace (ECS) deviation for this VectorizeView object.
+  */
+  const OdGiDeviation& eyeDeviation() const;
+
+  // materials
+  const OdGiMaterialTraitsData &effectiveMaterialTraitsData() const;
+  void effectiveMaterialTraitsData(OdGiMaterialTraitsData &data) const;
+  void setEffectiveMaterialTraitsData(OdDbStub *materialId, const OdGiMaterialTraitsData &data, bool bForce = false);
+
+  /** \details
+    Returns current selection marker state.
+  */
+  OdGsMarker selectionMarker() const;
+
+  const OdGiSubEntityTraitsData *byBlockTraits() const { return m_pByBlock; }
+  void setByBlockTraits(const OdGiSubEntityTraitsData *pByBlock) { m_pByBlock = pByBlock; }
+  OdRxObjectPtr saveByBlockTraits();
+};
+
+/** \details
+    This class is an implementation of the subWorldDraw() framework to calculate the WCS extents of an OdGiDrawable object.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiExtCalc : public OdGiBaseVectorizer
+{
+protected:
+  bool            m_BBoxSet;
+  OdGiExtAccumPtr m_pExtAccum;
+
+public:
+
+  OdGiExtCalc();
+  virtual ~OdGiExtCalc();
+
+  OdGiRegenType regenType() const;
+  bool regenAbort() const;
+  void draw(const OdGiDrawable* pDrawable);
+  void setExtents(const OdGePoint3d *newExtents);
+  /** \details
+    Resets the accumulated extents for the OdGiDrawable object associated with this Vectorization object.
+  */
+  void resetExtents();
+
+  /** \details
+    Returns the accumulated extents for the OdGiDrawable object associated with this Vectorization object.
+    \param extents [out]  Receives the extents.
+  */
+  void getExtents(OdGeExtents3d& extents) const;
+
+  void setContext(OdGiContext* pUserContext);
+
+  // optimization
+
+  const OdGiSubEntityTraitsData& effectiveTraits() const;
+  void affectTraits(const OdGiSubEntityTraitsData* pSource, OdGiSubEntityTraitsData& destination) const;
+};
+
+#ifdef ENABLE_GITRAITSOPTIMIZATION
+inline void OdGiBaseVectorizer::resetEntityTraitsData()
+{
+  m_bResetEntityTraitsData = false;
+  m_entityTraitsData = g_entityTraitsDataReset;
+  setEntityTraitsDataChanged();
+}
+#endif
+
+ODGI_EXPORT void odgiCalculateTextBasis(OdGeVector3d& u, OdGeVector3d& v,
+                                        const OdGeVector3d& normal,
+                                        const OdGeVector3d& direction,
+                                        double height,
+                                        double width,
+                                        double oblique,
+                                        bool bMirrorX = false,
+                                        bool bMirrorY = false);
+ODGI_EXPORT const OdGiTextStyle* odgiPrepareTextStyle(const OdGiTextStyle* pStyle, OdGiTextStyle& res);
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGIBASEVECTORIZER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiClipBoundary.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiClipBoundary.h
new file mode 100755
index 0000000..63a3539
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiClipBoundary.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _GI_CLIP_BOUNDARY_H_INCLUDED_
+#define _GI_CLIP_BOUNDARY_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiExport.h"
+#include "RxObject.h"
+#include "Ge/GePoint2dArray.h"
+#include "Ge/GeVector3d.h"
+#include "Ge/GeMatrix3d.h"
+
+/** \details
+    This struct is used to pass clip boundary specifications from OdGiDrawable objects to the underlying OdGi system.
+    Library: TD_Gi
+    <group !!RECORDS_TD_APIRef> 
+*/
+struct OdGiClipBoundary
+{
+  OdGeVector3d          m_vNormal;                // Normal vector that defines the plane in which the clip boundary lies.               
+  OdGePoint3d           m_ptPoint;                // Origin of the clip boundary.
+  OdGePoint2dArray      m_Points;                 // Array of points that defines the clip boundary.
+  OdGeMatrix3d          m_xToClipSpace;           // Transformation matrix from ModelSpace to ClipSpace.
+  OdGeMatrix3d          m_xInverseBlockRefXForm;  // Transformation matrix from BlockSpace to WorldSpace.
+  double                m_dFrontClipZ;            // Distance from target point to FrontClip plane.
+  double                m_dBackClipZ;             // Distance from target point to BackClip plane.
+  bool                  m_bClippingFront;         // Enables front clipping.
+  bool                  m_bDrawBoundary;          // Enables clipping boundary to be drawn.
+  bool                  m_bClippingBack;          // Enables back clipping.
+};
+
+/** \details
+    Checks clip boundary is valid for clipping.
+*/
+ODGI_EXPORT bool odgiIsValidClipBoundary(const OdGePoint2dArray& points);
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiCommonDraw.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiCommonDraw.h
new file mode 100755
index 0000000..a4d27f3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiCommonDraw.h
@@ -0,0 +1,653 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGICOMMONDRAW_H__
+#define __ODGICOMMONDRAW_H__
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "Gi/Gi.h"
+
+class OdGiGeometry;
+class OdGiContext;
+class OdGiSubEntityTraits;
+class OdDbStub;
+typedef OdRxObject OdDbBaseDatabase;
+class OdGePoint3d;
+class OdGiDrawable;
+class OdGiPathNode;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiDrawable object pointers.
+*/
+typedef OdSmartPtr<OdGiDrawable> OdGiDrawablePtr;
+
+/** \details
+    Viewport regeneration modes. 
+*/
+typedef enum
+{
+  eOdGiRegenTypeInvalid         = 0,
+  kOdGiStandardDisplay          = 2,
+  kOdGiHideOrShadeCommand       = 3,
+  kOdGiRenderCommand            = 4,
+  kOdGiForExplode               = 5,
+  kOdGiSaveWorldDrawForProxy    = 6,
+  kOdGiForExtents               = 7
+} OdGiRegenType;
+
+/** \details
+    Deviation types used for tessellation.
+*/
+typedef enum
+{
+  kOdGiMaxDevForCircle      = 0,
+  kOdGiMaxDevForCurve       = 1,
+  kOdGiMaxDevForBoundary    = 2,
+  kOdGiMaxDevForIsoline     = 3,
+  kOdGiMaxDevForFacet       = 4
+} OdGiDeviationType;
+
+class OdGiCommonDraw;
+class OdGiTextStyle;
+class OdPsPlotStyleData;
+class OdGiConveyorGeometry;
+
+enum // Text vectorization flags
+{
+  kOdGiIncludeScores    = 2,
+  kOdGiRawText          = 4,
+  kOdGiIncludePenups    = 8,
+  kOdGiDrawShape        = 16,
+  kOdGiIgnoreMIF        = 32
+};
+
+class OdGiSectionGeometryManager;
+typedef OdSmartPtr<OdGiSectionGeometryManager> OdGiSectionGeometryManagerPtr;
+
+/** \details
+    This class defines common operations and properties that are used in the
+    Teigha vectorization process.
+    
+    \remarks
+    An instance of an OdGiContext subclass is normally created as a preliminary step in the vectorization process, to be
+    used throughout the vectorization.
+
+    Most of the virtual functions in this class (the ones that are not pure virtual) are no-ops, serving only to define an interface.
+
+    Library: TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiContext : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiContext);
+
+  /** \details
+    Returns the database that is currently being vectorized.
+  */
+  virtual OdDbBaseDatabase* database() const = 0;
+
+  /** \details
+    Opens for read the specified drawable object belonging to the database associated with this Context object.
+    
+    \param drawableId [in]  Object ID of the drawable to be opened.
+    
+    \remarks
+    Returns a SmartPointer to the drawable object.
+  */
+  virtual OdGiDrawablePtr openDrawable(
+    OdDbStub* drawableId) = 0;
+
+  /** \details
+      Returns the default lineweight associated with this Context object.
+  */
+  virtual OdDb::LineWeight defaultLineWeight() const;
+
+  /** \details
+    Returns the common LinetypeScale for this Context object.
+  */
+  virtual double commonLinetypeScale() const;
+
+  /** \details
+    Returns the default TextStyle associated with this Context object.
+    
+    \param textStyle [out]  Receives the TextStyle object.
+  */
+  virtual void getDefaultTextStyle(
+    OdGiTextStyle& textStyle);
+
+  /** \details
+    Vectorizes the specified shape into the specified interface object.
+
+    \param pDraw [in]  Pointer to the CommonDraw object.
+    \param position [in]  Position of the shape.
+    \param shapeNumber [in]  Shape number.
+    \param pTextStyle [in]  Pointer to the TextStyle for the shape.
+  */
+  virtual void drawShape(
+    OdGiCommonDraw* pDraw, 
+    OdGePoint3d& position, 
+    int shapeNumber, 
+    const OdGiTextStyle* pTextStyle);
+
+  /** \param pDest [in]  Pointer to the Conveyor object.
+      \param direction [in]  Baseline direction for the text.
+      \param upVector [in]  Up vector for the text.
+      \param pExtrusion [in]  Pointer to the Extrusion vector for the text.
+  */
+  virtual void drawShape(
+    OdGiConveyorGeometry* pDest,
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    int shapeNumber, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion);
+
+  /** \details
+    Vectorizes the specified text string into the supplied CommonDraw object.
+
+    \param pDraw [in]  Pointer to the CommonDraw object.
+    \param position [in]  Position of the text.
+    \param msg [in]  Text string.
+    \param numBytes [in]  Number of bytes in msg (not including the optional null byte).
+    \param pTextStyle [in]  Pointer to the TextStyle for msg.
+    \param flags [in]  Vectorization flags.
+    
+    \remarks
+    msg must be null terminated if numBytes is not supplied.
+  */
+  virtual void drawText(
+    OdGiCommonDraw* pDraw, 
+    OdGePoint3d& position,
+    const OdChar* msg, 
+    OdInt32 numBytes,
+    const OdGiTextStyle* pTextStyle, 
+    OdUInt32 flags = 0);
+
+  /** \param height [in]  Height of the text.
+    \param width [in]  Width of the text.
+    \param oblique [in]  Oblique angle of the text.
+      
+    \note
+    All angles are expressed in radians.
+    
+    As currently implemented, this function ignores width and oblique.
+    They will be fully implemented in a future release.
+  */
+  virtual void drawText(
+    OdGiCommonDraw* pDraw, 
+    OdGePoint3d& position,
+    double height, 
+    double width, 
+    double oblique, 
+    const OdString& msg);
+
+  /** \param pDest [in]  Pointer to the Conveyor object.
+      \param direction [in]  Baseline direction for the text.
+      \param upVector [in]  Up vector for the text.
+      \param pExtrusion [in]  Pointer to the extrusion vector for the text.
+      \param raw [in]  If and only if true, escape sequences, such as %%P, will not be converted to special characters.
+  */
+  virtual void drawText(
+    OdGiConveyorGeometry* pDest,
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    const OdChar* msg, 
+    OdInt32 numBytes, 
+    bool raw,
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion);
+
+  /** \details
+    Returns the extents box for the specified text.
+       
+    \param msg [in]  Text string.
+    \param numBytes [in]  Number of bytes in msg (not including the optional null byte).
+    \param textStyle [in]  TextStyle for msg.
+    \param flags [in]  Vectorization flags.
+    \param min [out]  Receives the lower-left corner of the extents box.
+    \param max [out]  Receives the upper-right corner of the extents box.
+    \param pEndPos [out]  If non-NULL, receives the end position of the text string.
+
+  */
+  virtual void textExtentsBox(
+    const OdGiTextStyle& textStyle, 
+    const OdChar* msg, 
+    int nLength,
+    OdUInt32 flags, 
+    OdGePoint3d& min, 
+    OdGePoint3d& max, 
+    OdGePoint3d* pEndPos = 0);
+
+  /** \details
+    Returns the extents box for the specified shape.
+    
+    \param textStyle [in]  TextStyle for the shape.
+    \param shapeNumber [in]  Shape number.
+    \param min [out]  Receives the lower-left corner of the extents box.
+    \param max [out]  Receives the upper-right corner of the extents box.
+  */
+  virtual void shapeExtentsBox(
+    const OdGiTextStyle& textStyle, 
+    int shapeNumber, 
+    OdGePoint3d& min, 
+    OdGePoint3d& max);
+
+  /** \details
+    Returns the circle zoom percent for this vectorization process.
+    
+    \param viewportId [in]  Pointer to the Object ID of the Viewport object to be queried.
+    
+    \remarks
+    Returns a value in the range [1,20000]. 100 is the default.
+  */
+  virtual unsigned int circleZoomPercent(
+    OdDbStub* viewportId) const;
+
+  /** \details
+    Returns true if and only if this vectorization is intended for hard copy output.
+  */
+  virtual bool isPlotGeneration() const;
+
+  /** \details
+    Returns palette background color.
+  */
+  virtual ODCOLORREF paletteBackground() const;
+
+  /** \details
+    Returns true if and only if TrueType text should be filled during this vectorization.
+  */
+  virtual bool fillTtf() const;
+
+  /** \details
+    Returns the number of isolines to be drawn on surfaces during this vectorization.
+  */
+  virtual OdUInt32 numberOfIsolines() const;
+
+  /** \details
+    Returns true if and only if shell/mesh geometry primitives should be filled during this vectorization.
+  */
+  virtual bool fillMode() const;
+
+  /** \details
+    Returns true if and only if quick text mode enabled for this vectorization process.
+  */
+  virtual bool quickTextMode() const;
+
+  /** \details
+    Returns the text quality percent for this vectorization process.
+
+    \remarks
+    Returns a value in the range [0,100]. 50 is the default.
+  */
+  virtual OdUInt32 textQuality() const;
+
+  enum ImageQuality
+  {
+    kImageQualityDraft = 0,
+    kImageQualityHigh  = 1
+  };
+
+  /** \details
+    Returns the image quality for this vectorization process.
+  */
+  virtual ImageQuality imageQuality() const;
+
+  enum FadingType
+  {
+    kLockedLayerFade = 0,
+    kXrefFade        = 1,
+    kRefEditFade     = 2
+  };
+
+  /** \details
+    Fading intensity percentage.
+  */
+  virtual OdUInt32 fadingIntensityPercentage(FadingType fadingType) const;
+
+  enum GlyphType
+  {
+    kLightGlyph  = 0,
+    kCameraGlyph = 1
+  };
+
+  /** \details
+    Returns glyph size for specified glyph type.
+
+    \param glyphType [in]  Type of glyph to return glyph size.
+
+    \remarks
+    Returns a value in the range [0,100].
+
+    The default return values is following:
+    <table>
+    Name         Value
+    kLightGlyph  0
+    kCameraGlyph 50
+    </table>
+  */
+  virtual OdUInt32 glyphSize(GlyphType glyphType) const;
+
+  enum LineWeightStyle
+  {
+    kPointLineWeight = 0,
+    kLineCapStyle    = 1,
+    kLineJoinStyle   = 2
+  };
+
+  /** \details
+    Returns line weight display style configuration.
+
+    \param styleEntry [in]  Line weight style entry for which current setting will be returned.
+
+    \remarks
+    For kPointLineWeight style entry 0 will be returned if point line weight is disabled or 1 if enabled.
+    For kLineCapStyle style entry will be returned member of OdPs::LineEndStyle enumeration.
+    For kLineJoinStyle style entry will be returned member of OdPs::LineJoinStyle enumeration.
+  */
+  virtual OdUInt32 lineWeightConfiguration(LineWeightStyle styleEntry) const;
+
+  enum DrawableFilterInputFlags { kNestedDrawable = 0x1000000 };
+  enum DrawableFilterOutputFlags { kSkipVectorization = 1 };
+  enum DrawableFilterRanges 
+  { 
+	  kDrawableFilterAppRangeStart = 0x1000000
+#if defined(SWIGCSHARP)
+    , kDrawableFilterAppRangeMask          = (uint)0xFF000000
+#elif defined(SWIGJAVA)
+    , kDrawableFilterAppRangeMask          = (long)0xFF000000
+#else
+    , kDrawableFilterAppRangeMask          = (OdInt32)0xFF000000
+#endif
+  };
+
+  /** \details
+    Returns internal drawable filtration function ID.
+    
+    \param viewportId [in]  Pointer to the Object ID of the Viewport object to be queried.
+  */
+  virtual OdIntPtr drawableFilterFunctionId(OdDbStub* viewportId) const;
+
+  /** \details
+    Returns set of flags for drawable filtration function (will be called for each drawable vectorization).
+
+    \param functionId [in]  Internal drawable filtration function ID.
+    \param pDrawable [in]  Currently vectorizing drawable pointer.
+    \param nFlags [in]  Set of input flags.
+  */
+  virtual OdUInt32 drawableFilterFunction(OdIntPtr functionId, const OdGiDrawable *pDrawable, OdUInt32 nFlags);
+
+  /** \details
+    Enables smooth contours information output for TrueType fonts.
+  */
+  virtual bool ttfPolyDraw() const;
+
+  /** \details
+    Returns true and only if this vectorization process should be aborted.
+  */
+  virtual bool regenAbort() const;
+
+  enum PStyleType
+  {
+    kPsNone           = 0,
+    kPsByColor        = 1,
+    kPsByName         = 2
+  };
+  
+  /** \details
+    Returns the plot style type of this Context object.
+    
+    \remarks
+    plotStyleType() returns one of the following:
+    
+    <table>
+    Name          Value
+    kPsNone       0
+    kPsByColor    1
+    kPsByName     2
+    </table>
+  */
+  virtual PStyleType plotStyleType() const;
+  
+  /** \details
+    Returns the PaperSpace PlotStyle data for this vectorization.
+
+    \param penNumber [in]  Pen number.
+    \param plotStyleData [out]  Receives the PlotStyle data.
+    \param objectId [in]  Object ID of plot style.
+  */
+  virtual void plotStyle(
+    int penNumber, 
+    OdPsPlotStyleData& plotStyleData) const;
+
+  virtual void plotStyle(
+    OdDbStub* objectId, 
+    OdPsPlotStyleData& plotStyleData) const;
+
+  /** \details
+    Converts object handle into Object ID.
+
+    \param objectId [in]  Object handle.
+  */
+  virtual OdDbStub* getStubByID( OdUInt64 persistentId ) const;
+
+  /** \details
+    Converts Object ID to object handle (database persistent Id).
+
+    \param objectId [in]  Object ID.
+  */
+  virtual OdUInt64 getIDByStub( OdDbStub* objectId ) const;
+
+  /** \details
+    Returns the database of Object ID.
+
+    \param objectId [in]  Object ID.
+  */
+  virtual OdDbBaseDatabase *getDatabaseByStub( OdDbStub* objectId ) const;
+
+  /** \details
+    Returns the Owner Object ID of specified Object ID.
+
+    \param objectId [in]  Object ID.
+  */
+  virtual OdDbStub* getOwnerIDByStub( OdDbStub* objectId ) const;
+
+  /** \details
+    Converts material name into Object ID.
+
+    \param strMatName [in]  Material name.
+  */
+  virtual OdDbStub* getStubByMatName( const OdString& strMatName ) const;
+
+  /** \details
+    Controls shell silhouettes displaying on Gi side.
+  */
+  virtual bool displaySilhouettes() const;
+
+  /** \details
+    Returns an interface for access section geometry functionality.
+  */
+  virtual OdGiSectionGeometryManagerPtr getSectionGeometryManager();
+
+  /** \details
+    Controls rendering anti-aliasing.
+  */
+  virtual OdUInt32 antiAliasingMode() const;
+
+  /** \details
+    Controls Xref properties overriding.
+  */
+  virtual bool xrefPropertiesOverride() const;
+};
+
+/** \details
+    This class is the base class for entity-level vectorization within Teigha.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiCommonDraw : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiCommonDraw);
+
+  /** \details
+    Returns the regeneration type of the current vectorization process.
+
+    \remarks
+    regenType() returns one of the following:
+    
+    <table>
+    Name                            Value 
+    eOdGiRegenTypeInvalid           0
+    kOdGiStandardDisplay            2
+    kOdGiHideOrShadeCommand         3
+    kOdGiRenderCommand              4
+    kOdGiForExplode                 5
+    kOdGiSaveWorldDrawForProxy      6
+    kOdGiForExtents                 7
+    </table>
+  */
+  virtual OdGiRegenType regenType() const = 0;
+
+  /** \details
+    Returns true and only if this vectorization process should be aborted.
+  */
+  virtual bool regenAbort() const = 0;
+
+  /** \details
+    Provides access to this object's the subentity traits.
+
+    \remarks
+    This allows the modification of the vectorization attributes such as color, linetype, etc.
+  */
+  virtual OdGiSubEntityTraits& subEntityTraits() const = 0;
+
+  /** \details
+    Provides access to this object's "drawing interface".
+    
+    \remarks
+    The "drawing interface" is a set of geometry functions used during the vectorization process.
+  */
+  virtual OdGiGeometry& rawGeometry() const = 0;
+
+  /** \details
+    Returns true only if this vectorization process is the result of a "drag" operation.
+    
+    \remarks
+  */
+  virtual bool isDragging() const = 0;
+  
+  /** \details
+    Returns the recommended maximum deviation of the
+    current vectorization for the specified point on the curve.
+
+    \param deviationType [in]  Deviation type.
+    \param pointOnCurve [in]  Point on the curve.
+        
+    \remarks
+    This function returns the recommended maximum difference (with respect to the current active viewport) between the actual curve or surface, 
+    and the tessellated curve or surface. 
+    
+    deviationType must be one of the following:
+    
+    <table>
+    Name                       Value
+    kOdGiMaxDevForCircle       0      
+    kOdGiMaxDevForCurve        1      
+    kOdGiMaxDevForBoundary     2      
+    kOdGiMaxDevForIsoline      3
+    kOdGiMaxDevForFacet        4
+    </table>
+
+    \note
+    This function uses circle zoom percent or FacetRes as appropriate.
+  */
+  virtual double deviation(
+    const OdGiDeviationType deviationType, 
+    const OdGePoint3d& pointOnCurve) const = 0;
+
+  /** \details
+    Returns the number of isolines to be drawn on surfaces during this vectorization.
+  */
+  virtual OdUInt32 numberOfIsolines() const = 0;
+
+  /** \details
+      Returns the OdGiContext instance associated with this object.
+  */
+  virtual OdGiContext* context() const = 0;
+
+  /** \details
+      Returns current drawable nesting graph.
+  */
+  virtual const OdGiPathNode* currentGiPath() const;
+};
+
+/** \details
+    Draw flags helper.
+    
+    \remarks
+    Modifies draw flags and restores them back in destructor.
+
+    Library: TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiDrawFlagsHelper
+{
+  protected:
+    OdGiSubEntityTraits *m_pTraits;
+    OdUInt32 m_prevFlags;
+  public:
+    OdGiDrawFlagsHelper(OdGiSubEntityTraits &pTraits, OdUInt32 addFlags)
+      : m_pTraits(NULL)
+    {
+      if (addFlags)
+      {
+        m_prevFlags = pTraits.drawFlags();
+        OdUInt32 newFlags = m_prevFlags | addFlags;
+        if (m_prevFlags != newFlags)
+        {
+          pTraits.setDrawFlags(newFlags);
+          m_pTraits = &pTraits;
+        }
+      }
+    }
+    ~OdGiDrawFlagsHelper()
+    {
+      if (m_pTraits)
+        m_pTraits->setDrawFlags(m_prevFlags);
+    }
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiContextualColors.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiContextualColors.h
new file mode 100755
index 0000000..18d3647
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiContextualColors.h
@@ -0,0 +1,261 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGICONTEXTUALCOLORS_H__
+#define __ODGICONTEXTUALCOLORS_H__
+
+#include "Gi/GiExport.h"
+#include "RxObject.h"
+#include "CmColor.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Define colors depend from vectorization context.
+
+    \sa
+    TD_Gi 
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiContextualColors : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiContextualColors);
+
+  // Color accessors
+
+  // Grid
+  virtual OdCmEntityColor gridMajorLines() const;
+  virtual OdCmEntityColor gridMinorLines() const;
+  virtual OdCmEntityColor gridAxisLines() const;
+  virtual bool gridMajorLineTintXYZ() const;
+  virtual bool gridMinorLineTintXYZ() const;
+  virtual bool gridAxisLineTintXYZ() const;
+
+  // Light
+  virtual OdCmEntityColor lightGlyphs() const;
+  virtual OdCmEntityColor lightHotspot() const;
+  virtual OdCmEntityColor lightFalloff() const;
+  virtual OdCmEntityColor lightStartLimit() const;
+  virtual OdCmEntityColor lightEndLimit() const;
+  virtual OdCmEntityColor lightShapeColor() const;
+  virtual OdCmEntityColor lightDistanceColor() const;
+  virtual OdCmEntityColor webMeshColor() const;
+  virtual OdCmEntityColor webMeshMissingColor() const;
+
+  // Camera
+  virtual OdCmEntityColor cameraGlyphs() const;
+  virtual OdCmEntityColor cameraFrustrum() const;
+  virtual OdCmEntityColor cameraClipping() const;
+
+  // Runtime parameters
+  virtual void setContextFlags(OdUInt32 nFlags, bool bSet = true) = 0;
+  virtual bool flagsSet(OdUInt32 nFlags) const = 0;
+
+  // This part is for internal use. Provides interface extensibility feature.
+
+  enum ColorType
+  {
+    kGridMajorLinesColor = 0,
+    kGridMinorLinesColor,
+    kGridAxisLinesColor,
+    kLightGlyphsColor,
+    kLightHotspotColor,
+    kLightFalloffColor,
+    kLightStartLimitColor,
+    kLightEndLimitColor,
+    kLightShapeColor,
+    kLightDistanceColor,
+    kWebMeshColor,
+    kWebMeshMissingColor,
+    kCameraGlyphsColor,
+    kCameraFrustrumColor,
+    kCameraClippingColor,
+
+    kNumColors
+  };
+
+  enum ColorTint
+  {
+    kGridMajorLineTint = 0,
+    kGridMinorLineTint,
+    kGridAxisLineTint,
+
+    kNumTintFlags
+  };
+
+  virtual OdCmEntityColor contextualColor(ColorType /*type*/) const { return OdCmEntityColor(OdCmEntityColor::kForeground); }
+  virtual bool contextualColorTint(ColorTint /*type*/) const { return false; }
+};
+
+typedef OdSmartPtr<OdGiContextualColors> OdGiContextualColorsPtr;
+
+// Default implementations of OdGiContextualColors accessor methods
+
+inline OdCmEntityColor OdGiContextualColors::gridMajorLines() const
+{
+  return contextualColor(kGridMajorLinesColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::gridMinorLines() const
+{
+  return contextualColor(kGridMinorLinesColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::gridAxisLines() const
+{
+  return contextualColor(kGridAxisLinesColor);
+}
+
+inline bool OdGiContextualColors::gridMajorLineTintXYZ() const
+{
+  return contextualColorTint(kGridMajorLineTint);
+}
+
+inline bool OdGiContextualColors::gridMinorLineTintXYZ() const
+{
+  return contextualColorTint(kGridMinorLineTint);
+}
+
+inline bool OdGiContextualColors::gridAxisLineTintXYZ() const
+{
+  return contextualColorTint(kGridAxisLineTint);
+}
+
+inline OdCmEntityColor OdGiContextualColors::lightGlyphs() const
+{
+  return contextualColor(kLightGlyphsColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::lightHotspot() const
+{
+  return contextualColor(kLightHotspotColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::lightFalloff() const
+{
+  return contextualColor(kLightFalloffColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::lightStartLimit() const
+{
+  return contextualColor(kLightStartLimitColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::lightEndLimit() const
+{
+  return contextualColor(kLightEndLimitColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::lightShapeColor() const
+{
+  return contextualColor(kLightShapeColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::lightDistanceColor() const
+{
+  return contextualColor(kLightDistanceColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::webMeshColor() const
+{
+  return contextualColor(kWebMeshColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::webMeshMissingColor() const
+{
+  return contextualColor(kWebMeshMissingColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::cameraGlyphs() const
+{
+  return contextualColor(kCameraGlyphsColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::cameraFrustrum() const
+{
+  return contextualColor(kCameraFrustrumColor);
+}
+
+inline OdCmEntityColor OdGiContextualColors::cameraClipping() const
+{
+  return contextualColor(kCameraClippingColor);
+}
+
+/** \details
+    Provides default implementation for OdGiContextualColors.
+
+    \sa
+    TD_Gi 
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiContextualColorsImpl : public OdGiContextualColors
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiContextualColorsImpl);
+
+  enum VisualType
+  {
+    kVisualTypeNotSet = -1,
+    k2dModel = 0,
+    kLayout,
+    k3dParallel,
+    k3dPerspective,
+    kBlock,
+
+    kNumVisualTypes
+  };
+  virtual void setVisualType(VisualType type) = 0;
+  virtual VisualType visualType() const = 0;
+
+  virtual void setContextualColor(ColorType type, const OdCmEntityColor &color) = 0;
+  void setContextualColor(ColorType type, ODCOLORREF color) { setContextualColor(type, ODTOCMCOLOR(color)); }
+  virtual void setContextualColorTint(ColorTint type, bool bSet) = 0;
+
+  virtual void setDefaultForType() = 0;
+};
+
+typedef OdSmartPtr<OdGiContextualColorsImpl> OdGiContextualColorsImplPtr;
+
+/** \details
+    Provides redirection ability for OdGiContextualColors.
+
+    \sa
+    TD_Gi 
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiContextualColorsRedir : public OdGiContextualColors
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiContextualColorsRedir);
+
+  virtual void setRedirectionObject(OdGiContextualColors *pObj) = 0;
+  virtual const OdGiContextualColors *redirectionObject() const = 0;
+  virtual OdGiContextualColors *redirectionObject() = 0;
+};
+
+typedef OdSmartPtr<OdGiContextualColorsRedir> OdGiContextualColorsRedirPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGICONTEXTUALCOLORS_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorConnector.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorConnector.h
new file mode 100755
index 0000000..0eeae03
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorConnector.h
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGICONVEYORCONNECTOR__
+#define __ODGICONVEYORCONNECTOR__
+
+#include "Gi/GiConveyorNode.h"
+#include "OdArray.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiConveyorConnector : public OdGiConveyorInput, public OdGiConveyorOutput
+{
+  /** \details
+    This template class is a specialization of the OdArray class for OdGiConveyorOutput object pointers.
+  */
+  typedef OdArray<OdGiConveyorOutput*, OdMemoryAllocator<OdGiConveyorOutput*> > NodeArray;
+
+  NodeArray             m_sources;
+  OdGiConveyorGeometry* m_pDestGeom;
+public:
+  OdGiConveyorConnector();
+
+  void addSourceNode(OdGiConveyorOutput& sourceNode);
+  void removeSourceNode(OdGiConveyorOutput& sourceNode);
+  void setDestGeometry(OdGiConveyorGeometry& destGeometry);
+  OdGiConveyorGeometry& destGeometry() const;
+  /** \details
+    Returns a reference to the OdGiConveyorGeometry object associated with this object.  
+  */
+  OdGiConveyorGeometry& geometry();
+};
+
+inline OdGiConveyorGeometry& OdGiConveyorConnector::geometry() { return *m_pDestGeom; }
+
+#include "TD_PackPop.h"
+
+
+#endif // __ODGICONVEYORCONNECTOR__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEmbranchment.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEmbranchment.h
new file mode 100755
index 0000000..bad0566
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEmbranchment.h
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GI_CONVEYOREMBRANCHMENT__
+#define __OD_GI_CONVEYOREMBRANCHMENT__
+
+#include "Gi/GiConveyorNode.h"
+#include "Gi/GiDeviation.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiConveyorEmbranchment : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiConveyorEmbranchment);
+
+  virtual OdGiConveyorOutput& secondOutput() = 0;
+
+  virtual bool isSimplifyOpt(OdUInt32 opt) const = 0;
+
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiConveyorEmbranchment object pointers.
+*/
+typedef OdSmartPtr<OdGiConveyorEmbranchment> OdGiConveyorEmbranchmentPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_CONVEYOREMBRANCHMENT__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEntryPoint.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEntryPoint.h
new file mode 100755
index 0000000..2a0ed0f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorEntryPoint.h
@@ -0,0 +1,60 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __ODGICONVEYORENTRYPOINT__
+#define __ODGICONVEYORENTRYPOINT__
+
+
+#include "Gi/GiEmptyGeometry.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiConveyorEntryPoint : public OdGiConveyorOutput
+{
+protected:
+  OdGiConveyorGeometry* m_pGeometry;
+public:
+  OdGiConveyorEntryPoint();
+  OdGiConveyorEntryPoint(OdGiConveyorGeometry& geom);
+
+  OdGiConveyorGeometry& geometry();
+
+  void setDestGeometry(OdGiConveyorGeometry& destGeometry);
+  OdGiConveyorGeometry& destGeometry() const;
+};
+
+
+inline OdGiConveyorGeometry& OdGiConveyorEntryPoint::geometry()
+{
+  return *m_pGeometry;
+}
+
+
+#include "TD_PackPop.h"
+
+#endif // __ODGICONVEYORENTRYPOINT__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorGeometry.h
new file mode 100755
index 0000000..f0b22c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorGeometry.h
@@ -0,0 +1,707 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGICONVEYORGEOMETRY_H__
+#define __ODGICONVEYORGEOMETRY_H__
+
+#include "Gi/GiGeometry.h"
+#include "Gi/GiCommonDraw.h"
+#include "Gs/GsSelectionReactor.h"
+#include "Gi/GiSubEntityTraitsData.h"
+
+class OdGiRasterImage;
+class OdGiMetafile;
+class OdGiViewport;
+class OdGsView;
+class OdGiCommonDraw;
+class OdGiDeviation;
+class OdGeExtents3d;
+class OdGeBoundBlock3d;
+
+/** \details
+    This class implements an interface that allows conveyor nodes to interact with parent objects.
+    
+    \remarks
+    This interface gives
+    abstract access to OdGiBaseVectorizer level data and services.
+    Many conveyor nodes require a pointer to an OdGiConveyorContext interface,
+    in order to be initialized.
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiConveyorContext
+{
+public:
+  virtual ~OdGiConveyorContext() {}
+
+  /** \details
+    Returns the OdGiContext object associated with this ConveyorContext object.
+  */
+  virtual OdGiContext& giContext() const = 0;
+
+  /** \details
+    Returns the OdGiSubEntityTraits instance associated with this ConveyorContext object.
+    
+    \remarks
+    The OdGiSubEntityTraits object is used to register attribute changes with
+    the vectorization framework.
+  */
+  virtual OdGiSubEntityTraits& subEntityTraits() const = 0;
+
+  /** \details
+    Returns the traits currently in effect for this ConveyorContext object.
+  */
+  virtual const OdGiSubEntityTraitsData& effectiveTraits() const = 0;
+
+  /** \details
+    Sets the traits currently in effect for this ConveyorContext object.
+    \param traits [in]  New traits data which will be used for effective traits substitution.
+    \param fillNormal [in]  Optional fill normal.
+  */
+  virtual void setEffectiveTraits(const OdGiSubEntityTraitsData& traits,
+                                  const OdGeVector3d* fillNormal = NULL) = 0;
+
+  /** \details
+    Checks the current visibility state for current traits.
+  */
+  virtual bool effectivelyVisible() const { return effectiveTraits().visibility(); }
+
+  /** \details
+    Returns the current OdGiDrawableDesc instance for this ConveyorContext object.
+    
+    \remarks
+    This instance contains information about the current drawable object (the object itself, rendering flags, etc.).
+  */
+  virtual const OdGiDrawableDesc* currentDrawableDesc() const = 0;
+
+  /** \details
+    Returns the current OdGiDrawable object for this ConveyorContext object.
+    
+    \remarks
+    This is the object currently being vectorized by the framework.
+  */
+  virtual const OdGiDrawable* currentDrawable() const = 0;
+
+  /** \details
+    Returns the OdGiViewport associated with this ConveyorContext object.
+  */
+  virtual const OdGiViewport* giViewport() const = 0;
+
+  /** \details
+      Returns the OdGsView associated with this ConveyorContext object.
+  */
+  virtual const OdGsView* gsView() const = 0;
+
+  /** \details
+    Notification function called by the vectorization framework
+    whenever the rendering attributes have changed.
+
+    \remarks
+    This function is called before sending any geometry through the geometry conveyor.
+
+    This function provides a hook
+    for setting rendering attributes for the final geometry handler (e.g. Win GDI device).
+  */
+  virtual void onTraitsModified() = 0;
+
+  /** \details
+    Notification function called by the vectorization framework
+    whenever the text is become to be rendered.
+
+    \remarks
+    This function provides a hook for setting geometry transformation before text was drawn.
+  */
+  virtual void onTextProcessing(const OdGePoint3d& /*position*/,
+                                const OdGeVector3d& /*direction*/,
+                                const OdGeVector3d& /*upVector*/) { }
+
+  /** \details
+    Returns true if and only if regen was aborted.
+  */
+  virtual bool regenAbort() const = 0;
+
+  /** \details
+    Returns current drawable nesting graph.
+  */
+  virtual const OdGiPathNode* currentGiPath() const = 0;
+
+  /** \details
+    Returns deviations array accessor for world coordinate system.
+  */
+  virtual const OdGiDeviation& worldDeviation() const = 0;
+  /** \details
+    Returns deviations array accessor for model coordinate system.
+  */
+  virtual const OdGiDeviation& modelDeviation() const = 0;
+  /** \details
+    Returns deviations array accessor for eye coordinate system.
+  */
+  virtual const OdGiDeviation& eyeDeviation() const = 0;
+
+  enum ConveyorContextFlags
+  {
+    // Spatial filter as simplifier
+    kSpatialFilterSimplPline = 1, // Simplify plineProc() by spatial filter
+    kSpatialFilterSimplNurbs = 2, // Simplify nurbsProc() by spatial filter
+    kSpatialFilterSimplText  = 4, // Simplify textProc () by spatial filter
+    kSpatialFilterSimplShape = 8, // Simplify shapeProc() by spatial filter
+    kSpatialFilterSimplAll   = (kSpatialFilterSimplPline | kSpatialFilterSimplNurbs |
+                                kSpatialFilterSimplText  | kSpatialFilterSimplShape), // All spatial filter options
+    // Conveyor embranchment as simplifier
+    kEmbranchmentSimplText   = 16, // Simplify textProc () by conveyor embranchment
+    kEmbranchmentSimplNurbs  = 32, // Simplify nurbsProc() by conveyor embranchment
+    kEmbranchmentSimplAll    = (kEmbranchmentSimplText | kEmbranchmentSimplNurbs), // All conveyor embranchment options
+    kConveyorSimplAll        = (kSpatialFilterSimplAll | kEmbranchmentSimplAll), // All simplification options
+    // Pline subentity markers
+    kPlineMarkers            = 64, // Enable subentity markers set per pline() call
+    kForceMarkersOnModified  = 128, // Force onTraitsModified call for each subentity marker change
+    // Polyline subentity markers
+    kPolylineMarkers         = 256, // Enable subentity markers set per polyline() call
+    // Pline geometry
+    kPlineAllowArcProc       = 512, // Vectorizer will draw arc segments of polyline as arcs (otherwise as sample points)
+    // Enable test-specific functionality
+    kTestMode                = 1024 // Enable test mode
+  };
+  /** \details
+    Returns set of conveyor context flags.
+  */
+  virtual OdUInt32 drawContextFlags() const { return 0; }
+};
+
+/** \details
+
+    \sa
+    TD_Gi 
+    <group OdGi_Classes> 
+*/
+class OdGiConveyorContextWrapper : public OdGiConveyorContext
+{
+protected:
+  OdGiConveyorContext *m_pCtx;
+public:
+  OdGiConveyorContext *getOriginalContext() const { return m_pCtx; }
+  void setOriginalContext(OdGiConveyorContext *pCtx) { m_pCtx = pCtx; }
+  explicit OdGiConveyorContextWrapper(OdGiConveyorContext *pCtx = NULL) : m_pCtx(pCtx) { }
+
+  OdGiContext& giContext() const { return m_pCtx->giContext(); }
+  OdGiSubEntityTraits& subEntityTraits() const { return m_pCtx->subEntityTraits(); }
+  const OdGiSubEntityTraitsData& effectiveTraits() const { return m_pCtx->effectiveTraits(); }
+  void setEffectiveTraits(const OdGiSubEntityTraitsData& traits,
+                          const OdGeVector3d* fillNormal = NULL) { m_pCtx->setEffectiveTraits(traits, fillNormal); }
+  bool effectivelyVisible() const { return m_pCtx->effectivelyVisible(); }
+  const OdGiDrawableDesc* currentDrawableDesc() const { return m_pCtx->currentDrawableDesc(); }
+  const OdGiDrawable* currentDrawable() const { return m_pCtx->currentDrawable(); }
+  const OdGiViewport* giViewport() const { return m_pCtx->giViewport(); }
+  const OdGsView* gsView() const { return m_pCtx->gsView(); }
+  void onTraitsModified() { m_pCtx->onTraitsModified(); }
+  bool regenAbort() const { return m_pCtx->regenAbort(); }
+  const OdGiPathNode* currentGiPath() const { return m_pCtx->currentGiPath(); }
+  const OdGiDeviation& worldDeviation() const { return m_pCtx->worldDeviation(); }
+  const OdGiDeviation& modelDeviation() const { return m_pCtx->modelDeviation(); }
+  const OdGiDeviation& eyeDeviation() const { return m_pCtx->eyeDeviation(); }
+  OdUInt32 drawContextFlags() const { return m_pCtx->drawContextFlags(); }
+};
+
+/** \details
+    This class defines the interface through which nodes in the Teigha vectorization
+    pipeline transfer geometric data.
+    \sa
+    TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiConveyorGeometry
+{
+public:
+  virtual ~OdGiConveyorGeometry() {}
+
+  /** \details
+    Processes OdGiPolyline data.
+
+    \param polyline [in]  Polyline data to be processed.
+    \param pXfm [in]  Pointer to a transformation matrix.
+    \param fromIndex [in]  Index of the first segment to be processed.
+    \param numSegs [in]  Number of segments to be processed.
+    \remarks
+    numSegs == 0 indicates all segments starting at fromIndex are to be processed. 
+      
+  */
+  virtual void plineProc(const OdGiPolyline& polyline,
+    const OdGeMatrix3d* pXfm = 0,
+    OdUInt32 fromIndex = 0,
+    OdUInt32 numSegs = 0) = 0;
+
+  /** \details
+    Processes simple polyline data.
+
+    \param numPoints [in]  Number of points.
+    \param vertexList [in]  Array of vertices.
+    \param pNormal [in]  Pointer to the normal vector.
+    \param pExtrusion [in]  Pointer to the extrusion vector.
+    \param baseSubEntMarker [in]  Currently unused.
+    \remarks
+    The extrusion vector specifies the direction and distance of the extrusion.
+  */
+  virtual void polylineProc(
+    OdInt32 numPoints, const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    const OdGeVector3d* pExtrusion = 0,
+    OdGsMarker baseSubEntMarker = -1) = 0;
+
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#pragma warning (push)
+#pragma warning (disable: 4481) // Non-standard extension used
+
+// The right function prototype was changed (see above). Old one left to cause compilation error
+  virtual void polylineProc(
+    OdInt32 /*numPoints*/, const OdGePoint3d* /*vertexList*/,
+    const OdGeVector3d* /*pNormal*/,
+    const OdGeVector3d* /*pExtrusion*/,
+    OdInt32 /*baseSubEntMarker*/) sealed {ODA_FAIL();}
+#pragma warning (pop)
+#endif
+
+  /** \details
+    Processes polygon data.
+
+    \param numPoints [in]  Number of points.
+    \param vertexList [in]  Array of vertices.
+    \param pNormal [in]  Pointer to the normal vector.
+    \param pExtrusion [in]  Pointer to the extrusion vector.
+
+    \remarks
+    The extrusion vector specifies the direction and distance of the extrusion.
+  */
+  virtual void polygonProc(
+    OdInt32 numPoints, const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    const OdGeVector3d* pExtrusion = 0) = 0;
+
+  /** \details
+    Processes Xline data.
+    \param firstPoint [in]  First point.
+    \param secondPoint [in]  Second point.
+    \remarks
+    An Xline is an infinite line passing through the 
+    specified points.
+  */
+  virtual void xlineProc(
+    const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint) = 0;
+
+  /** \details
+    Processes Ray data.
+    
+    \param basePoint [in]  Base point.
+    \param throughPoint [in]  Through point
+    
+    \remarks
+    A Ray is a semi-infinite line that starts at the basePoint, and passes 
+    through the throughPoint.
+  */
+  virtual void rayProc(
+    const OdGePoint3d& basePoint, const OdGePoint3d& throughPoint) = 0;
+
+  /** \details
+    Processes mesh data.
+
+    \param numRows [in]  Number of rows.
+    \param numColumns [in]  Number of columns.
+    \param vertexList [in]  Array of vertices.
+    \param pEdgeData [in]  Pointer to additional edge data.
+    \param pFaceData [in]  Pointer to additional face data.
+    \param pVertexData [in]  Pointer to additional vertex data. 
+
+    \sa
+    OdGiEdgeData
+    OdGiFaceData
+    OdGiVertexData
+    Vectorization Primitives
+  */
+  virtual void meshProc(
+    OdInt32 numRows, 
+    OdInt32 numColumns,
+    const OdGePoint3d* vertexList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0) = 0;
+
+  /** \details
+    Processes shell data.
+
+    \param numVertices [in]  Number of vertices.
+    \param vertexList [in]  Array of vertices.
+    \param faceListSize [in]  Number of entries in faceList.
+    \param faceList [in]  Array of numbers that define the faces.
+    \param pEdgeData [in]  Pointer to additional edge data.
+    \param pFaceData [in]  Pointer to additional face data.
+    \param pVertexData [in]  Pointer to additional vertex data. 
+
+    \sa
+    Vectorization Primitives      
+  */
+  virtual void shellProc(
+    OdInt32 numVertices, const OdGePoint3d* vertexList,
+    OdInt32 faceListSize, const OdInt32* faceList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0) = 0;
+
+  /** \details
+    Process circle data. 
+
+    \param center [in]  Center point.
+    \param radius [in]  Radius.
+    \param normal [in]  Normal vector.
+    \param pExtrusion [in]  Pointer to the extrusion vector.
+    \remarks
+    The extrusion vector specifies the direction and distance of the extrusion.
+  */
+  virtual void circleProc(
+    const OdGePoint3d& center, 
+    double radius, 
+    const OdGeVector3d& normal, 
+    const OdGeVector3d* pExtrusion = 0) = 0;
+
+  /** \param firstPoint [in]  First point of a 3-point circle.
+    \param secondPoint [in]  Second point of a 3-point circle.
+    \param thirdPoint [in]  Third point of a 3-point circle.
+    \remarks
+    If firstPoint, secondPoint, and thirdPoint are specified, they
+    cannot be colinear and no two can be coincident.
+  */
+  virtual void circleProc(
+    const OdGePoint3d& firstPoint, 
+    const OdGePoint3d& secondPoint, 
+    const OdGePoint3d& thirdPoint, 
+    const OdGeVector3d* pExtrusion = 0) = 0;
+  
+  /** \details
+    Processes circular arc data.
+
+    \param center [in]  Center point.
+    \param radius [in]  Radius.
+    \param normal [in]  Normal vector.
+    \param startVector [in]  Defines the start of this arc.
+    \param sweepAngle [in]  Angle that defines the arc.
+    \param arcType [in]  Arc type.
+    \param pExtrusion [in]  Pointer to the extrusion vector.
+    
+    \remarks
+    arcType must be one of the following:
+    
+    <table>
+    Name              Value     Description
+    kOdGiArcSimple    0         Unfilled.
+    kOdGiArcSector    1         Filled area bounded by the arc and its center.
+    kOdGiArcChord     2         Filled area bounded by the arc and its end points
+    </table>
+
+    The extrusion vector specifies the direction and distance of the extrusion.
+    
+    \note
+    All angles are expressed in radians.
+  */
+  virtual void circularArcProc(
+    const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple, const OdGeVector3d* pExtrusion = 0) = 0;
+  
+  /** \param firstPoint [in]  First point of a 3-point arc.
+    \param secondPoint [in]  Second point of a 3-point arc.
+    \param thirdPoint [in]  Third point of a 3-point arc.
+    \remarks
+    If firstPoint, secondPoint, and thirdPoint are specified, they
+    cannot be colinear and no two can be coincident.
+  */
+  virtual void circularArcProc(
+    const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& thirdPoint,
+    OdGiArcType arcType = kOdGiArcSimple, const OdGeVector3d* pExtrusion = 0) = 0;
+
+  /** \details
+    Processes OdGeEllipArc3d data.
+
+    \param ellipArc [in]  Elliptical arc.
+    \param endPointOverrides [in]  Array of points to be used as the first and last points of the vectorized arc.
+    \param arcType [in]  Arc type.
+    \param pExtrusion [in]  Pointer to the extrusion vector.
+        
+    \remarks
+    arcType must be one of the following:
+    
+    <table>
+    Name              Value     Description
+    kOdGiArcSimple    0         Unfilled.
+    kOdGiArcSector    1         Filled area bounded by the arc and its center.
+    kOdGiArcChord     3         Filled area bounded by the arc and its end points
+    </table>
+
+    The extrusion vector specifies the direction and distance of the extrusion.
+
+  */
+  virtual void ellipArcProc(
+    const OdGeEllipArc3d& ellipArc,
+    const OdGePoint3d* endPointOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple, const OdGeVector3d* pExtrusion = 0) = 0;
+
+  /** \details
+    Processes OdGeNurbCurve3d data.
+    \param nurbsCurve [in]  NURBS curve data.
+  */
+  virtual void nurbsProc(
+    const OdGeNurbCurve3d& nurbsCurve) = 0;
+
+  /** \details
+    Processes text data.
+
+    \param position [in]  Position of the text.
+    \param direction [in]  Baseline direction of the text.
+    \param upVector [in]  Up vector for the text.
+    \param msg [in]  Text string.
+    \param numBytes [in]  Number of bytes in msg.
+    \param raw [in]  If and only if true, escape sequences, such as %%P, will not be converted to special characters.
+    \param pTextStyle [in]  Pointer to the TextStyle for the text.
+    \param pExtrusion [in]  Pointer to the extrusion vector.
+
+    \remarks
+    The extrusion vector specifies the direction and distance of the extrusion.
+  */
+  virtual void textProc(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    const OdChar* msg, 
+    OdInt32 numBytes, 
+    bool raw, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0) = 0;
+
+  virtual void textProc2(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    const OdChar* msg, 
+    OdInt32 numBytes, 
+    bool raw, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0,
+    const OdGeExtents3d* /*extentsBox*/ = 0)
+  {
+    textProc(position, direction, upVector, msg, numBytes, raw, pTextStyle, pExtrusion);
+  }
+
+  /** \details
+    Processes shape data.
+
+    \param position [in]  Position of the shape.
+    \param direction [in]  Baseline direction of the shape.
+    \param upVector [in]  Up vector for the shape.
+    \param shapeNumber [in]  Shape number.
+    \param pTextStyle [in]  Pointer to the TextStyle for the shape.
+    \param pExtrusion [in]  Pointer to the extrusion vector.
+
+    \remarks
+    The extrusion vector specifies the direction and distance of the extrusion.
+  */
+  virtual void shapeProc(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    int shapeNumber, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0) = 0;
+
+  /** \details
+    Processes raster images data.
+
+    \param origin [in]  Lower-left corner. 
+    \param u [in]  Image width vector.
+    \param v [in]  Image height vector.
+    \param pImage [in]  Pointer to the RasterImage object.
+    \param uvBoundary [in]  Array of image boundary points (may not be null).
+    \param numBoundPts [in]  Number of boundary points.
+    \param transparency [in]  True if and only if image transparency is on.
+    \param brightness [in]  Image brightness [0.0 .. 100.0].
+    \param contrast [in]  Image contrast [0.0 .. 100.0].
+    \param fade [in]  Image fade value [0.0 .. 100.0].
+  */
+  virtual void rasterImageProc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage, 
+    const OdGePoint2d* uvBoundary, 
+    OdUInt32 numBoundPts,
+    bool transparency = false,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0) = 0;
+
+  /** \details
+    Processes metafile data.
+
+    \param origin [in]  Metafile origin.
+    \param u [in]  Metafile width vector.
+    \param v [in]  Metafile height vector.
+    \param pMetafile [in]  Pointer to the metafile object.
+    \param dcAligned [in]  reserved.
+    \param allowClipping [in]  reserved.
+  */
+  virtual void metafileProc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool dcAligned = true,
+    bool allowClipping = false) = 0;
+
+  virtual void xlineProc2(const OdGePoint3d& basePoint, const OdGeVector3d& direction)
+  {
+    xlineProc(basePoint, basePoint + direction);
+  }
+  virtual void rayProc2(const OdGePoint3d& basePoint, const OdGeVector3d& direction)
+  {
+    rayProc(basePoint, basePoint + direction);
+  }
+
+  virtual void setExtentsProc(const OdGePoint3d * /*pPoints*/, bool /*bTransform*/ = true) { }
+
+  enum ETtfCharProcFlags
+  {
+    kTtfCharProcEnable     = 1,
+    kTtfCharProcBoundBlock = 2
+  };
+  virtual int ttfCharProcFlags() const { return 0; }
+  virtual bool ttfCharProc(OdChar /*character*/, const OdGePoint3d& /*position*/,
+    const OdGeBoundBlock3d* /*pBoundBlock*/) { return false; }
+
+  virtual void ttfPolyDrawProc(
+    OdInt32 numVertices, const OdGePoint3d* vertexList,
+    OdInt32 faceListSize, const OdInt32* faceList,
+    const OdUInt8* /*pBezierTypes*/, const OdGiFaceData* pFaceData = 0)
+  {
+    shellProc(numVertices, vertexList, faceListSize, faceList, 0, pFaceData);
+  }
+
+  enum EConveyorBoundaryInfoFlags
+  {
+    kBoundaryProcXform       = 1, // Non-identity Xform available at least once
+    kBoundaryProcXformNonUni = 2, // Non-uni-scale Xform available at least once
+    kBoundaryProcProjection  = 4, // Projective Xform available at least once
+    kBoundaryProcClip        = 8, // Boundary clipped partially or completely at least once
+    kBoundaryProcClipFull   = 16 // Boundary completely clipped at least once
+  };
+  virtual void conveyorBoundaryInfoProc(
+    const OdGeBoundBlock3d & /*boundBlock*/, // {I} represent block for apply check
+    OdUInt32 & /*outputFlags*/) // {O} will represent set of EConveyorBoundaryInfoFlags flags on out
+  {
+  }
+
+  void polypointProc2(OdGiConveyorContext* pContext,
+    OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* pColors = 0,
+    const OdCmTransparency *pTransparency = 0, const OdGeVector3d* pNormals = 0, const OdGeVector3d* pExtrusions = 0,
+    const OdGsMarker* pSubEntMarkers = 0, OdInt32 nPointSize = 0);
+  void rowOfDotsProc2(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint);
+
+  /** \details
+    Processes array of points.
+
+    \param numPoints [in]  Number of points.
+    \param vertexList [in]  Array of vertices.
+    \param pNormals [in]  Array of normal vectors.
+    \param pExtrusions [in]  Array of extrusion vectors.
+    \param pSubEntMarkers [in]  Array of subentity markers.
+    \remarks
+    The extrusion vectors specifies the direction and distance of the extrusion.
+  */
+  virtual void polypointProc(
+    OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* pColors,
+    const OdCmTransparency* pTransparency = 0, const OdGeVector3d* pNormals = 0, const OdGeVector3d* pExtrusions = 0,
+    const OdGsMarker* pSubEntMarkers = 0, OdInt32 nPointSize = 0) = 0;
+
+  /** \details
+    Processes row of points.
+
+    \param numPoints [in]  Number of points.
+    \param startPoint [in]  First point to draw.
+    \param dirToNextPoint [in]  Offset to next point.
+  */
+  virtual void rowOfDotsProc(
+    OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint) = 0;
+
+  /** \details
+    Processes hatch boundary.
+
+    \param edges [in]  2d curves array.
+    \param pXform [in]  Optional boundary transform matrix.
+  */
+  virtual void edgeProc(
+    const OdGiEdge2dArray& edges, const OdGeMatrix3d* pXform = 0) = 0;
+};
+
+inline
+void OdGiConveyorGeometry::polypointProc2(OdGiConveyorContext* pContext,
+  OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* pColors,
+  const OdCmTransparency* pTransparency, const OdGeVector3d* pNormals, const OdGeVector3d* pExtrusions,
+  const OdGsMarker* pSubEntMarkers, OdInt32 /*nPointSize*/)
+{
+  OdGePoint3d tmpVerts[2];
+  for (OdInt32 nPoint = 0; nPoint < numPoints; nPoint++)
+  {
+    OdGsMarker baseSubEntMarker = -1;
+    if ((pColors || pTransparency || pSubEntMarkers) && pContext)
+    {
+      if (pColors)
+        pContext->subEntityTraits().setTrueColor(pColors[nPoint]);
+      if (pTransparency)
+        pContext->subEntityTraits().setTransparency(pTransparency[nPoint]);
+      if (pSubEntMarkers)
+        pContext->subEntityTraits().setSelectionMarker(pSubEntMarkers[nPoint]);
+      pContext->onTraitsModified();
+    }
+    else if (pSubEntMarkers)
+      baseSubEntMarker = pSubEntMarkers[nPoint];
+    const OdGeVector3d *pNormal = (pNormals) ? (pNormals + nPoint) : NULL;
+    const OdGeVector3d *pExtrusion = (pExtrusions) ? (pExtrusions + nPoint) : NULL;
+    tmpVerts[1] = tmpVerts[0] = vertexList[nPoint];
+    polylineProc(2, tmpVerts, pNormal, pExtrusion, baseSubEntMarker);
+  }
+}
+
+inline
+void OdGiConveyorGeometry::rowOfDotsProc2(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint)
+{
+  OdGePoint3d tmpVerts[2];
+  for (OdInt32 nPoint = 0; nPoint < numPoints; nPoint++)
+  {
+    tmpVerts[1] = tmpVerts[0] = startPoint + dirToNextPoint * double(nPoint);
+    polylineProc(2, tmpVerts);
+  }
+}
+
+#endif //#ifndef __ODGICONVEYORGEOMETRY_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorNode.h
new file mode 100755
index 0000000..4d645d8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiConveyorNode.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGICONVEYORNODE_H__
+#define __ODGICONVEYORNODE_H__
+
+
+#include "Gi/GiConveyorGeometry.h"
+#include "Gi/GiExport.h"
+
+#include "TD_PackPush.h"
+
+class OdGiConveyorOutput;
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiConveyorInput
+{
+public:
+  /** \details
+    Adds the specified source node to this Conveyor object.
+    \param sourceNode [in] Source node to add.
+  */
+  virtual void addSourceNode(OdGiConveyorOutput& sourceNode) = 0;
+  /** \details
+    Removes the specified source node from this Conveyor object.
+    
+    \param sourceNode [in] Source node to remove.
+  */
+  virtual void removeSourceNode(OdGiConveyorOutput& sourceNode) = 0;
+};
+
+/** \details
+    Library: TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class OdGiConveyorOutput
+{
+public:
+  /** \details
+    Sets the destination geometry for this Conveyor object.
+    
+    \param destGeometry [in] Destination geometry.
+  */
+  virtual void setDestGeometry(OdGiConveyorGeometry& destGeometry) = 0;
+  /** \details
+    Returns the destination geometry for this Conveyor object.
+  */
+  virtual OdGiConveyorGeometry& destGeometry() const = 0;
+};
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiConveyorNode : public OdRxObject
+{
+protected:
+  OdGiConveyorNode();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiConveyorNode);
+  
+  /** \details
+    Returns the input from this ConveyorNode object.
+  */
+  virtual OdGiConveyorInput& input() = 0;
+  /** \details
+    Returns the output from this ConveyorNode object.
+  */
+  virtual OdGiConveyorOutput& output() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiConveyorNode object pointers.
+*/
+typedef OdSmartPtr<OdGiConveyorNode> OdGiConveyorNodePtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGICONVEYORNODE_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDeviation.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDeviation.h
new file mode 100755
index 0000000..c60a083
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDeviation.h
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIDEVIATION_H__
+#define __ODGIDEVIATION_H__
+
+
+#include "Gi/GiCommonDraw.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GePoint3d.h"
+
+/** \details
+    This class implements an interface that returns the deviation values used for anisotropic space 
+    (perspective view).
+
+    Library: TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class OdGiDeviation
+{
+public:
+
+  /** \details
+    Returns the recommended maximum deviation of the current vectorization, for the specified point on the curve or surface being tesselated.
+    \sa
+    OdGiGeometrySimplifier::setDeviation
+    \param deviationType [in]  Deviation type.
+    \param pointOnCurve [in]  Point on the curve.
+    \remarks
+    deviationType must be one of the following:
+    
+    <table>
+    Name                       Value
+    kOdGiMaxDevForCircle       0      
+    kOdGiMaxDevForCurve        1      
+    kOdGiMaxDevForBoundary     2      
+    kOdGiMaxDevForIsoline      3
+    kOdGiMaxDevForFacet        4
+    </table>
+  */
+  virtual double deviation(const OdGiDeviationType deviationType, const OdGePoint3d& pointOnCurve) const = 0;
+};
+/** \details
+    Returns an array of the deviations for the specified Deviation object for the specified point on the curve.
+    \param deviationObj [in]  Deviation object.
+    \param pointOnCurve [in]  Point on the curve.
+  
+    \remarks
+    Deviations are returned in the array in the following order:
+    
+    <table>
+    Name                       Index
+    kOdGiMaxDevForCircle       0      
+    kOdGiMaxDevForCurve        1      
+    kOdGiMaxDevForBoundary     2      
+    kOdGiMaxDevForIsoline      3
+    kOdGiMaxDevForFacet        4
+    </table>
+*/
+inline OdGeDoubleArray odgiGetAllDeviations(const OdGiDeviation& deviationObj, const OdGePoint3d& pointOnCurve = OdGePoint3d::kOrigin)
+{
+  OdGeDoubleArray values(5);
+  values.append(deviationObj.deviation(kOdGiMaxDevForCircle,   pointOnCurve));
+  values.append(deviationObj.deviation(kOdGiMaxDevForCurve,    pointOnCurve));
+  values.append(deviationObj.deviation(kOdGiMaxDevForBoundary, pointOnCurve));
+  values.append(deviationObj.deviation(kOdGiMaxDevForIsoline,  pointOnCurve));
+  values.append(deviationObj.deviation(kOdGiMaxDevForFacet,    pointOnCurve));
+  return values;
+}
+
+#endif //#ifndef __ODGIDEVIATION_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetype.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetype.h
new file mode 100755
index 0000000..a0f06fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetype.h
@@ -0,0 +1,571 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGI_DGLINETYPE_H__
+#define __ODGI_DGLINETYPE_H__
+
+#include "Gi/GiNonEntityTraits.h"
+#include "Gi/GiLinetype.h"
+#include "Gi/GiExport.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes>
+*/
+struct OdGiDgLinetypeDash
+{
+  struct DashInfo
+  {
+    enum StrokeWidthMode
+    {
+      kLsNoWidth    = 0,
+      kLsWidthLeft  = 1,
+      kLsWidthRight = 2,
+      kLsWidthFull  = 3
+    };
+    enum StrokeCapsType
+    {
+      kLsCapsClosed   = 0,
+      kLsCapsOpen     = 1,
+      kLsCapsExtended = 2,
+      kLsCapsHexagon  = 3,
+      kLsCapsOctagon  = 4,
+      kLsCapsDecagon  = 5,
+      kLsCapsArc      = 30
+    };
+    enum Flags
+    {
+      kFlagDash                    = (1 << 0),
+      kFlagPassCorner              = (1 << 1),
+      kFlagCanBeScaled             = (1 << 2),
+      kFlagInvertStrokeInFirstCode = (1 << 3),
+      kFlagInvertStrokeInLastCode  = (1 << 4),
+      kFlagIncreasingTaper         = (1 << 5),
+      kFlagDecreasingTaper         = (1 << 6),
+      kFlagBaseStrokeDash          = (1 << 7)
+    };
+
+    OdUInt32        m_uFlags;
+    double          m_dLength;
+    double          m_dStartWidth;
+    double          m_dEndWidth;
+    StrokeWidthMode m_lsWidthMode;
+    StrokeCapsType  m_lsCapsType;
+
+    DashInfo()
+      : m_uFlags(0)
+      , m_dLength(0.0)
+      , m_dStartWidth(0.0)
+      , m_dEndWidth(0.0)
+      , m_lsWidthMode(kLsNoWidth)
+      , m_lsCapsType(kLsCapsClosed)
+    { }
+
+    double getLength() const { return m_dLength; }
+    void setLength(double dLength) { m_dLength = dLength; }
+
+    double getStartWidth() const { return m_dStartWidth; }
+    void setStartWidth(double dWidth) { m_dStartWidth = dWidth; }
+
+    double getEndWidth() const { return m_dEndWidth; }
+    void setEndWidth(double dWidth) { m_dEndWidth = dWidth; }
+
+    bool getDashFlag() const { return GETBIT(m_uFlags, kFlagDash); }
+    void setDashFlag(bool bSet) { SETBIT(m_uFlags, kFlagDash, bSet); }
+
+    bool getByPassCornerFlag() const { return GETBIT(m_uFlags, kFlagPassCorner); }
+    void setByPassCornerFlag(bool bSet) { SETBIT(m_uFlags, kFlagPassCorner, bSet); }
+
+    bool getCanBeScaledFlag() const { return GETBIT(m_uFlags, kFlagCanBeScaled); }
+    void setCanBeScaledFlag(bool bSet) { SETBIT(m_uFlags, kFlagCanBeScaled, bSet); }
+
+    bool getInvertStrokeInFirstCodeFlag() const { return GETBIT(m_uFlags, kFlagInvertStrokeInFirstCode); }
+    void setInvertStrokeInFirstCodeFlag(bool bSet) { SETBIT(m_uFlags, kFlagInvertStrokeInFirstCode, bSet); }
+
+    bool getInvertStrokeInLastCodeFlag() const { return GETBIT(m_uFlags, kFlagInvertStrokeInLastCode); }
+    void setInvertStrokeInLastCodeFlag(bool bSet) { SETBIT(m_uFlags, kFlagInvertStrokeInLastCode, bSet); }
+
+    StrokeWidthMode getWidthMode() const { return m_lsWidthMode; }
+    void setWidthMode(StrokeWidthMode iMode) { m_lsWidthMode = iMode; }
+
+    bool getIncreasingTaperFlag() const { return GETBIT(m_uFlags, kFlagIncreasingTaper); }
+    void setIncreasingTaperFlag(bool bSet) { SETBIT(m_uFlags, kFlagIncreasingTaper, bSet); }
+
+    bool getDecreasingTaperFlag() const { return GETBIT(m_uFlags, kFlagDecreasingTaper); }
+    void setDecreasingTaperFlag(bool bSet) { SETBIT(m_uFlags, kFlagDecreasingTaper, bSet); }
+
+    bool getBaseStrokeDashFlag() const { return GETBIT(m_uFlags, kFlagBaseStrokeDash); }
+    void setBaseStrokeDashFlag(bool bSet) { SETBIT(m_uFlags, kFlagBaseStrokeDash, bSet); }
+
+    bool isDashOrBaseStrokeDash() const { return GETBIT(m_uFlags, kFlagDash | kFlagBaseStrokeDash); }
+
+    StrokeCapsType getCapsType() const { return m_lsCapsType; }
+    void setCapsType(StrokeCapsType iType) { m_lsCapsType = iType; }
+  } m_dash;
+  struct ShapeInfo
+  {
+    enum SymbolPosOnStroke
+    {
+      kLsNoSymbol         = 0,
+      kLsAtOriginOfStroke = 1,
+      kLsAtEndOfStroke    = 2,
+      kLsAtCenterOfStroke = 3
+    };
+    enum Flags
+    {
+      kFlagSymbolAtElementOrigin        = (1 << 0),
+      kFlagSymbolAtElementEnd           = (1 << 1),
+      kFlagSymbolAtEachVertex           = (1 << 2),
+      kFlagMirrorSymbolForReversedLines = (1 << 3),
+      kFlagAbsoluteRotationAngle        = (1 << 4),
+      kFlagDoNotScaleElement            = (1 << 5),
+      kFlagDoNotClipElement             = (1 << 6),
+      kFlagNoPartialStrokes             = (1 << 7),
+      kFlagPartialOriginBeyondEnd       = (1 << 8),
+      kFlagUseSymbolColor               = (1 << 9),
+      kFlagUseSymbolWeight              = (1 << 10)
+    };
+
+    OdUInt32                 m_uFlags;
+    OdDbStub                *m_pSymbol;
+    SymbolPosOnStroke        m_lsPos;
+    OdGiLinetypeDash::offset m_offset;
+    double                   m_dRotation;
+    double                   m_dScale;
+
+    ShapeInfo()
+      : m_uFlags(0)
+      , m_pSymbol(NULL)
+      , m_lsPos(kLsNoSymbol)
+      , m_dRotation(0.0)
+      , m_dScale(0.0)
+    {
+      m_offset.x = m_offset.y = 0.0;
+    }
+
+    OdDbStub *getSymbolId() const { return m_pSymbol; }
+    void setSymbolId(OdDbStub *pStub) { m_pSymbol = pStub; }
+
+    SymbolPosOnStroke getSymbolPosOnStroke() const { return m_lsPos; }
+    void setSymbolPosOnStroke(SymbolPosOnStroke iMode) { m_lsPos = iMode; }
+
+    bool getSymbolAtElementOriginFlag() const { return GETBIT(m_uFlags, kFlagSymbolAtElementOrigin); }
+    void setSymbolAtElementOriginFlag(bool bSet) { SETBIT(m_uFlags, kFlagSymbolAtElementOrigin, bSet); }
+
+    bool getSymbolAtElementEndFlag() const { return GETBIT(m_uFlags, kFlagSymbolAtElementEnd); }
+    void setSymbolAtElementEndFlag(bool bSet) { SETBIT(m_uFlags, kFlagSymbolAtElementEnd, bSet); }
+
+    bool getSymbolAtEachVertexFlag() const { return GETBIT(m_uFlags, kFlagSymbolAtEachVertex); }
+    void setSymbolAtEachVertexFlag(bool bSet) { SETBIT(m_uFlags, kFlagSymbolAtEachVertex, bSet); }
+
+    bool getMirrorSymbolForReversedLinesFlag() const { return GETBIT(m_uFlags, kFlagMirrorSymbolForReversedLines); }
+    void setMirrorSymbolForReversedLinesFlag(bool bSet) { SETBIT(m_uFlags, kFlagMirrorSymbolForReversedLines, bSet); }
+
+    bool getAbsoluteRotationAngleFlag() const { return GETBIT(m_uFlags, kFlagAbsoluteRotationAngle); }
+    void setAbsoluteRotationAngleFlag(bool bSet) { SETBIT(m_uFlags, kFlagAbsoluteRotationAngle, bSet); }
+
+    bool getDoNotScaleElementFlag() const { return GETBIT(m_uFlags, kFlagDoNotScaleElement); }
+    void setDoNotScaleElementFlag(bool bSet) { SETBIT(m_uFlags, kFlagDoNotScaleElement, bSet); }
+
+    bool getDoNotClipElementFlag() const { return GETBIT(m_uFlags, kFlagDoNotClipElement); }
+    void setDoNotClipElementFlag(bool bSet) { SETBIT(m_uFlags, kFlagDoNotClipElement, bSet); }
+
+    bool getNoPartialStrokesFlag() const { return GETBIT(m_uFlags, kFlagNoPartialStrokes); }
+    void setNoPartialStrokesFlag(bool bSet) { SETBIT(m_uFlags, kFlagNoPartialStrokes, bSet); }
+
+    bool getPartialOriginBeyondEndFlag() const { return GETBIT(m_uFlags, kFlagPartialOriginBeyondEnd); }
+    void setPartialOriginBeyondEndFlag(bool bSet) { SETBIT(m_uFlags, kFlagPartialOriginBeyondEnd, bSet); }
+
+    bool getUseSymbolColorFlag() const { return GETBIT(m_uFlags, kFlagUseSymbolColor); }
+    void setUseSymbolColorFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseSymbolColor, bSet); }
+
+    bool getUseSymbolWeightFlag() const { return GETBIT(m_uFlags, kFlagUseSymbolWeight); }
+    void setUseSymbolWeightFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseSymbolWeight, bSet); }
+
+    void getOffset(double &x, double &y) const { x = m_offset.x; y = m_offset.y; }
+    void setOffset(double x, double y) { m_offset.x = x; m_offset.y = y; }
+
+    double getRotationAngle() const { return m_dRotation; }
+    void setRotationAngle(double dRotAngle) { m_dRotation = dRotAngle; }
+
+    double getSymbolScale() const { return m_dScale; }
+    void setSymbolScale(double dScale) { m_dScale = dScale; }
+  } m_shape;
+
+  OdGiDgLinetypeDash()
+    : m_dash()
+    , m_shape()
+  {
+  }
+};
+
+typedef OdArray<OdGiDgLinetypeDash> OdGiDgLinetypeDashArray;
+
+/** \details
+
+    <group OdGi_Classes>
+*/
+struct OdGiDgLinetypeItem
+{
+  enum Flags
+  {
+    kFlagAutoPhase              = (1 << 0),
+    kFlagUseIterationLimit      = (1 << 1),
+    kFlagSingleSegmentMode      = (1 << 2),
+    kFlagCenterStretchPhaseMode = (1 << 3),
+    kFlagStandardLinetype       = (1 << 4),
+    kFlagComputeStandardScale   = (1 << 5)
+  };
+
+  OdUInt32                m_uFlags;
+  double                  m_dLength;
+  double                  m_dPhase;
+  OdUInt32                m_nMaxIterations;
+  double                  m_dOffset;
+  OdGiDgLinetypeDashArray m_dashes;
+
+  OdGiDgLinetypeItem()
+    : m_uFlags(0)
+    , m_dLength(0.0)
+    , m_dPhase(0.0)
+    , m_nMaxIterations(1)
+    , m_dOffset(0.0)
+  {
+  }
+
+  double getLength() const { return m_dLength; }
+  void setLength(double dLen) { m_dLength = dLen; }
+
+  double getPhase() const { return m_dPhase; }
+  void setPhase(double dPhase) { m_dPhase = dPhase; }
+
+  bool getAutoPhaseFlag() const { return GETBIT(m_uFlags, kFlagAutoPhase); }
+  void setAutoPhaseFlag(bool bSet) { SETBIT(m_uFlags, kFlagAutoPhase, bSet); }
+
+  bool getUseIterationLimitFlag() const { return GETBIT(m_uFlags, kFlagUseIterationLimit); }
+  void setUseIterationLimitFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseIterationLimit, bSet); }
+
+  bool getSingleSegmentModeFlag() const { return GETBIT(m_uFlags, kFlagSingleSegmentMode); }
+  void setSingleSegmentModeFlag(bool bSet) { SETBIT(m_uFlags, kFlagSingleSegmentMode, bSet); }
+
+  bool getCenterStretchPhaseModeFlag() const { return GETBIT(m_uFlags, kFlagCenterStretchPhaseMode); }
+  void setCenterStretchPhaseModeFlag(bool bSet) { SETBIT(m_uFlags, kFlagCenterStretchPhaseMode, bSet); }
+
+  bool getStandardLinetypeFlag() const { return GETBIT(m_uFlags, kFlagStandardLinetype); }
+  void setStandardLinetypeFlag(bool bSet) { SETBIT(m_uFlags, kFlagStandardLinetype, bSet); }
+
+  bool getComputeStandardScaleFlag() const { return GETBIT(m_uFlags, kFlagComputeStandardScale); }
+  void setComputeStandardScaleFlag(bool bSet) { SETBIT(m_uFlags, kFlagComputeStandardScale, bSet); }
+
+  OdUInt32 getMaxIterations() const { return m_nMaxIterations; }
+  void setMaxIterations(OdUInt32 iMaxNum) { m_nMaxIterations = iMaxNum; }
+
+  double getYOffset() const { return m_dOffset; }
+  void setYOffset(double dYOffset) { m_dOffset = dYOffset; }
+
+  OdUInt32 numDashes() const { return m_dashes.size(); }
+  void setNumDashes(OdUInt32 count) { m_dashes.resize(count); }
+
+  void dashAt(OdUInt32 index, OdGiDgLinetypeDash& dash) const { dash = m_dashes.at(index); }
+  const OdGiDgLinetypeDash& dashAt(OdUInt32 index) const { return m_dashes.at(index); }
+
+  // void setDashAt(OdUInt32 /*index*/, double /*value*/) { throw OdError(eNotImplementedYet); }
+  void setDashAt(OdUInt32 index, const OdGiDgLinetypeDash& dash) { m_dashes[index] = dash; }
+
+  void dashes(OdGiDgLinetypeDashArray& dashes) const { dashes = m_dashes; }
+  void setDashes(const OdGiDgLinetypeDashArray& dashes) { m_dashes = dashes; }
+};
+
+typedef OdArray<OdGiDgLinetypeItem> OdGiDgLinetypeItemArray;
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class OdGiDgLinetype
+{
+  enum
+  {
+    kByBlock            = 1,
+    kByLayer            = 2
+  };
+
+  OdUInt32                m_uFlags;
+  OdGiDgLinetypeItemArray m_items;
+  double                  m_dPatLength;
+public:
+  OdGiDgLinetype()
+    : m_uFlags(0)
+    , m_dPatLength(0.0)
+  {
+  }
+
+  bool isContinuous() const { return m_items.empty(); }
+
+  bool isByBlock() const { return GETBIT(m_uFlags, kByBlock); }
+  void setByBlock(bool value) { SETBIT(m_uFlags, kByBlock, value); }
+
+  bool isByLayer() const { return GETBIT(m_uFlags, kByLayer); }
+  void setByLayer(bool value) { SETBIT(m_uFlags, kByLayer, value); }
+
+  double patternLength() const { return m_dPatLength; }
+  void setPatternLength(double dPatLen) { m_dPatLength = dPatLen; }
+
+  OdUInt32 numItems() const { return m_items.size(); }
+  void setNumItems(OdUInt32 count) { m_items.resize(count); }
+
+  void itemAt(OdUInt32 index, OdGiDgLinetypeItem& item) const { item = m_items.at(index); }
+  const OdGiDgLinetypeItem& itemAt(OdUInt32 index) const { return m_items.at(index); }
+
+  void setItemAt(OdUInt32 index, const OdGiDgLinetypeItem& item) { m_items[index] = item; }
+
+  void items(OdGiDgLinetypeItemArray& items) const { items = m_items; }
+  void setItems(const OdGiDgLinetypeItemArray& items) { m_items = items; }
+};
+
+/** \details
+
+    <group OdGi_Classes>
+*/
+struct OdGiDgLinetypeModifiers
+{
+  enum Flags
+  {
+    kFlagUseDashScale              = (1 << 0),
+    kFlagUseGapScale               = (1 << 1),
+    kFlagUseWidth                  = (1 << 2),
+    kFlagUseEndWidth               = (1 << 3),
+    kFlagUseShift                  = (1 << 4),
+    kFlagUseFractionShift          = (1 << 5),
+    kFlagUseCenteredShift          = (1 << 6),
+    kFlagTrueWidth                 = (1 << 7),
+    kFlagOverrideBreakAtCorners    = (1 << 8),
+    kFlagOverrideRunThroughCorners = (1 << 9),
+
+    kFlagsWidthMask                = (kFlagUseWidth | kFlagUseEndWidth),
+    kFlagsShiftMask                = (kFlagUseShift | kFlagUseFractionShift | kFlagUseCenteredShift),
+    kFlagsCornersMask              = (kFlagOverrideBreakAtCorners | kFlagOverrideRunThroughCorners)
+  };
+
+  enum WidthMode
+  {
+    kLsNoWidth = 0,
+    kLsWidthConstant,
+    kLsWidthTapered
+  };
+  enum ShiftMode
+  {
+    kLsNoShift = 0,
+    kLsShiftDistance,
+    kLsShiftFraction,
+    kLsShiftCentered
+  };
+  enum CornersMode
+  {
+    kLsCornersFromLS = 0,
+    kLsBreakAtCorners,
+    kLsRunThroughCorners
+  };
+
+  OdUInt32 m_uFlags;
+  double m_dDashScale;
+  double m_dGapScale;
+  double m_dWidth;
+  double m_dEndWidth;
+  double m_dPhase;
+
+  OdGiDgLinetypeModifiers()
+    : m_uFlags(0)
+    , m_dDashScale(1.0)
+    , m_dGapScale(1.0)
+    , m_dWidth(0.0)
+    , m_dEndWidth(0.0)
+    , m_dPhase(0.0)
+  {
+  }
+
+  bool getDashScaleFlag() const { return GETBIT(m_uFlags, kFlagUseDashScale); }
+  void setDashScaleFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseDashScale, bSet); }
+
+  double getDashScale() const { return m_dDashScale; }
+  void setDashScale(double dScale) { m_dDashScale = dScale; }
+
+  bool getGapScaleFlag() const { return GETBIT(m_uFlags, kFlagUseGapScale); }
+  void setGapScaleFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseGapScale, bSet); }
+
+  double getGapScale() const { return m_dGapScale; }
+  void setGapScale(double dScale) { m_dGapScale = dScale; }
+
+  bool getWidthFlag() const { return GETBIT(m_uFlags, kFlagUseWidth); }
+  void setWidthFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseWidth, bSet); }
+
+  double getWidth() const { return m_dWidth; }
+  void setWidth(double dWidth) { m_dWidth = dWidth; }
+
+  bool getEndWidthFlag() const { return GETBIT(m_uFlags, kFlagUseEndWidth); }
+  void setEndWidthFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseEndWidth, bSet); }
+
+  double getEndWidth() const { return m_dEndWidth; }
+  void setEndWidth(double dEndWidth) { m_dEndWidth = dEndWidth; }
+  
+  WidthMode getWidthMode() const;
+  void setWidthMode(WidthMode mode);
+
+  bool getShiftFlag() const { return GETBIT(m_uFlags, kFlagUseShift); }
+  void setShiftFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseShift, bSet); }
+
+  bool getFractionShiftFlag() const { return GETBIT(m_uFlags, kFlagUseFractionShift); }
+  void setFractionShiftFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseFractionShift, bSet); }
+
+  bool getCenteredShiftFlag() const { return GETBIT(m_uFlags, kFlagUseCenteredShift); }
+  void setCenteredShiftFlag(bool bSet) { SETBIT(m_uFlags, kFlagUseCenteredShift, bSet); }
+
+  double getPhase() const { return m_dPhase; }
+  void setPhase(double dPhase) { m_dPhase = dPhase; }
+
+  ShiftMode getShiftMode() const;
+  void setShiftMode(ShiftMode mode);
+
+  bool getTrueWidthFlag() const { return GETBIT(m_uFlags, kFlagTrueWidth); }
+  void setTrueWidthFlag(bool bSet) { SETBIT(m_uFlags, kFlagTrueWidth, bSet); }
+
+  bool getBreakAtCornersFlag() const { return GETBIT(m_uFlags, kFlagOverrideBreakAtCorners); }
+  void setBreakAtCornersFlag(bool bSet) { SETBIT(m_uFlags, kFlagOverrideBreakAtCorners, bSet); }
+
+  bool getRunThroughCornersFlag() const { return GETBIT(m_uFlags, kFlagOverrideRunThroughCorners); }
+  void setRunThroughCornersFlag(bool bSet) { SETBIT(m_uFlags, kFlagOverrideRunThroughCorners, bSet); }
+
+  CornersMode getCornersMode() const;
+  void setCornersMode(CornersMode mode);
+
+  bool operator==(const OdGiDgLinetypeModifiers& lsMod) const;
+  bool operator!=(const OdGiDgLinetypeModifiers& lsMod) const;
+};
+
+inline OdGiDgLinetypeModifiers::WidthMode OdGiDgLinetypeModifiers::getWidthMode() const
+{
+  switch (m_uFlags & kFlagsWidthMask)
+  {
+    case kFlagUseWidth:   return kLsWidthConstant;
+    case kFlagsWidthMask: return kLsWidthTapered;
+    default:              return kLsNoWidth;
+  }
+}
+
+inline void OdGiDgLinetypeModifiers::setWidthMode(OdGiDgLinetypeModifiers::WidthMode mode)
+{
+  switch (mode)
+  {
+    case kLsWidthConstant: SETBIT_1(m_uFlags, kFlagUseWidth); SETBIT_0(m_uFlags, kFlagUseEndWidth); break;
+    case kLsWidthTapered:  SETBIT_1(m_uFlags, kFlagsWidthMask); break;
+    default: SETBIT_0(m_uFlags, kFlagsWidthMask);
+  };
+}
+
+inline OdGiDgLinetypeModifiers::ShiftMode OdGiDgLinetypeModifiers::getShiftMode() const
+{
+  switch (m_uFlags & kFlagsShiftMask)
+  {
+    case kFlagUseShift:                         return kLsShiftDistance;
+    case kFlagUseShift | kFlagUseFractionShift: return kLsShiftFraction;
+    case kFlagUseShift | kFlagUseCenteredShift: return kLsShiftCentered;
+    default:                                    return kLsNoShift;
+  }
+}
+
+inline void OdGiDgLinetypeModifiers::setShiftMode(OdGiDgLinetypeModifiers::ShiftMode mode)
+{
+  switch (mode)
+  {
+    case kLsShiftDistance: SETBIT_1(m_uFlags, kFlagUseShift); SETBIT_0(m_uFlags, kFlagUseFractionShift | kFlagUseCenteredShift); break;
+    case kLsShiftFraction: SETBIT_1(m_uFlags, kFlagUseShift | kFlagUseFractionShift); SETBIT_0(m_uFlags, kFlagUseCenteredShift); break;
+    case kLsShiftCentered: SETBIT_1(m_uFlags, kFlagUseShift | kFlagUseCenteredShift); SETBIT_0(m_uFlags, kFlagUseFractionShift); break;
+    default: SETBIT_0(m_uFlags, kFlagsShiftMask);
+  }
+}
+
+inline OdGiDgLinetypeModifiers::CornersMode OdGiDgLinetypeModifiers::getCornersMode() const
+{
+  switch (m_uFlags & kFlagsCornersMask)
+  {
+    case kFlagOverrideBreakAtCorners:    return kLsBreakAtCorners;
+    case kFlagOverrideRunThroughCorners: return kLsRunThroughCorners;
+    default:                             return kLsCornersFromLS;
+  }
+}
+
+inline void OdGiDgLinetypeModifiers::setCornersMode(OdGiDgLinetypeModifiers::CornersMode mode)
+{
+  switch (mode)
+  {
+    case kLsBreakAtCorners:    SETBIT_1(m_uFlags, kFlagOverrideBreakAtCorners); SETBIT_0(m_uFlags, kFlagOverrideRunThroughCorners); break;
+    case kLsRunThroughCorners: SETBIT_0(m_uFlags, kFlagOverrideBreakAtCorners); SETBIT_1(m_uFlags, kFlagOverrideRunThroughCorners); break;
+    default:                   SETBIT_0(m_uFlags, kFlagsCornersMask);
+  }
+}
+
+inline bool OdGiDgLinetypeModifiers::operator ==(const OdGiDgLinetypeModifiers& lsMod) const
+{
+  return (m_uFlags == lsMod.m_uFlags) &&
+         (m_dDashScale == lsMod.m_dDashScale) && (m_dGapScale == lsMod.m_dGapScale) &&
+         (m_dWidth == lsMod.m_dWidth) && (m_dEndWidth == lsMod.m_dEndWidth) &&
+         (m_dPhase == lsMod.m_dPhase);
+}
+
+inline bool OdGiDgLinetypeModifiers::operator !=(const OdGiDgLinetypeModifiers& lsMod) const
+{
+  return (m_uFlags != lsMod.m_uFlags) ||
+         (m_dDashScale != lsMod.m_dDashScale) || (m_dGapScale != lsMod.m_dGapScale) ||
+         (m_dWidth != lsMod.m_dWidth) || (m_dEndWidth != lsMod.m_dEndWidth) ||
+         (m_dPhase != lsMod.m_dPhase);
+}
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiDgLinetypeTraits : public OdGiDrawableTraits
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiDgLinetypeTraits);
+
+    virtual void items(OdGiDgLinetypeItemArray& items) const = 0;
+    virtual void setItems(const OdGiDgLinetypeItemArray& items) const = 0;
+
+    virtual double patternLength() const = 0;
+    virtual void setPatternLength(double dPatLen) = 0;
+
+    virtual double scale() const = 0;
+    virtual void setScale(double dScale) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiDgLinetypeTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiDgLinetypeTraits> OdGiDgLinetypeTraitsPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGI_DGLINETYPE_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetyper.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetyper.h
new file mode 100755
index 0000000..95517b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDgLinetyper.h
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIDGLINETYPER_H__
+#define __ODGIDGLINETYPER_H__
+
+#include "Gi/GiLinetyper.h"
+// #include "Gi/GiDgLinetype.h"
+
+#include "TD_PackPush.h"
+
+class OdGiDgLinetypeTraits;
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiDgLinetyper : public OdGiLinetyper
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiDgLinetyper);
+
+  virtual OdGiDgLinetypeTraits& dgLinetypeTraits() const = 0;
+};
+
+typedef OdSmartPtr<OdGiDgLinetyper> OdGiDgLinetyperPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIDGLINETYPER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawImpl.h
new file mode 100755
index 0000000..2ab2b84
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawImpl.h
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _GIDRAWIMPL_INCLUDED_
+#define _GIDRAWIMPL_INCLUDED_
+
+
+#include "Gi/GiExport.h"
+#include "Gi/GiViewportDraw.h"
+#include "Gi/GiWorldDraw.h"
+
+/** \details
+    This class provides an implementation of the OdGiWorldDraw::geometry() function.
+
+    \sa
+    TD_Gi
+    
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT ODRX_ABSTRACT OdGiWorldDraw_ : public OdGiWorldDraw
+                                               , public OdGiWorldGeometry
+{
+protected:
+  ODRX_USING_HEAP_OPERATORS(OdGiWorldDraw);
+public:
+  OdGiWorldGeometry& geometry() const;
+};
+
+
+/** \details
+    This class provides an implementation of the OdGiViewportDraw::geometry() function.
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT ODRX_ABSTRACT OdGiViewportDraw_ : public OdGiViewportDraw
+                                                  , public OdGiViewportGeometry
+{
+protected:
+  ODRX_USING_HEAP_OPERATORS(OdGiViewportDraw);
+public:
+  OdGiViewportGeometry& geometry() const;
+};
+
+#endif // #ifndef _GIDRAWIMPL_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawStream.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawStream.h
new file mode 100755
index 0000000..0d0a75f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawStream.h
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_GIDRAWSTREAM_H_
+#define _OD_GIDRAWSTREAM_H_
+
+#include "RxObject.h"
+#include "GiExport.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class provides an interface to directly set graphics data into vectorizer object.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiDrawStream : public OdRxObject
+{
+  public:
+    virtual void *getGraphicsMetafile() = 0;
+};
+
+#include "TD_PackPop.h"
+
+#endif //_OD_GIDRAWSTREAM_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawable.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawable.h
new file mode 100755
index 0000000..745f2a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawable.h
@@ -0,0 +1,287 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODDRAWABLE_H__
+#define __ODDRAWABLE_H__  /* { Secret} **/
+
+#include "RxObject.h"
+#include "RxOverrule.h"
+
+class OdGiDrawableTraits;
+class OdGiWorldDraw;
+class OdGiViewportDraw;
+class OdGsCache;
+class OdDbStub;
+class OdGeExtents3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for all graphical objects, both transient and persistent.
+    
+    \remarks
+    This interface must be implemented by all graphical objects. Such objects
+    are capable of vectorizing themselves within the Teigha framework.
+
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiDrawable : public OdRxObject
+{
+protected:
+  OdGiDrawable();
+public:
+
+  ODRX_DECLARE_MEMBERS(OdGiDrawable);
+
+  enum SetAttributesFlags
+  {
+    kDrawableNone                         = 0, // Default flags; the drawable object uses only OdGi primitives, 
+                                               // with no nested calls to draw().
+    kDrawableIsAnEntity                   = 1, // Classes derived from OdDbEntity must set this flag,
+                                               // which is set by the default implementation of 
+                                               // OdDbEntity::subSetAttributes().
+    kDrawableUsesNesting                  = 2, // The drawable uses nested calls to draw(), but makes no
+                                               // calls to other OdGi primatives. 
+    kDrawableIsCompoundObject             = 4, // The drawable is to be treated as a block. Valid only when combined 
+                                               // with kDrawableIsAnEntity. If set, you must override 
+                                               // OdDbEntity::getCompoundObjectTransform().
+    kDrawableViewIndependentViewportDraw  = 8,  // Currently not supported.
+    kDrawableIsInvisible                  = 16, // Object is invisible, and should not be rendered.
+    kDrawableHasAttributes                = 32, // Currently not supported.
+    kDrawableRegenTypeDependantGeometry   = 64, // This flag must be set for objects which is drawn differently in different regen type modes.
+    kDrawableIsDimension                  = (kDrawableIsAnEntity + kDrawableIsCompoundObject + 128), // Dimension objects must set these flags
+                                                // which are set by the default implementation of OdDbDimension.
+    kDrawableRegenDraw                    = 256, // The drawable must be always regenerated.
+    kDrawableStandardDisplaySingleLOD     = 512,   // Currently not supported.
+    kDrawableShadedDisplaySingleLOD       = 1024,  // Currently not supported.
+    kDrawableViewDependentViewportDraw    = 2048,  // Currently not supported.
+    kDrawableBlockDependentViewportDraw   = 4096,  // Currently not supported.
+    kDrawableIsExternalReference          = 8192,  // Currently not supported.
+    kDrawableNotPlottable                 = 16384, // Currently not supported.
+
+    kLastFlag                             = kDrawableNotPlottable // Marker
+  };
+
+  enum DrawableType
+  {
+      kGeometry              = 0, 
+      kDistantLight          = 1, // this number is important!
+      kPointLight            = 2, // this number is important!
+      kSpotLight             = 3, // this number is important!
+      kAmbientLight,
+      kSolidBackground,
+      kGradientBackground,
+      kImageBackground,
+      kGroundPlaneBackground,
+      kViewport,
+      kWebLight,
+      kSkyBackground,
+      kImageBasedLightingBackground
+  };
+
+  virtual DrawableType drawableType() const { return kGeometry; }
+
+  /** \details
+    Sets the vectorization attributes of this object, and returns its attribute flags.  
+
+    \param pTraits [in]  Pointer to OdGiDrawableTraits object from and to which the attributes are to be set.
+
+    \remarks
+    This function is called by the vectorization framework, prior to calling worldDraw() or
+    viewportDraw(), to set the attributes for an object.
+
+    \sa
+    SetAttributesFlags 
+  */
+  ODRX_SEALED_VIRTUAL OdUInt32 setAttributes(OdGiDrawableTraits* pTraits) const ODRX_SEALED;
+
+  /** \details
+    Creates a viewport-independent geometric representation of this object.
+    
+    \remarks
+    Returns true if and only if the geometric representation can be generated in a
+    viewport-independent manner. 
+
+    \note
+    A return value of false indicates that viewportDraw() must be called for this object.
+
+    The 3D GS will call this function at least once but may cache subsequent display updates.
+
+    Use OdGsModel::onModified() to ensure that the 3D GS will call worldDraw() for next display update.
+    
+    The default implementation does nothing but return true. This function can be
+    overridden in custom classes.
+
+    \param pWd [in]  Pointer to the OdGiWorldDraw interface.
+  */
+  ODRX_SEALED_VIRTUAL bool worldDraw(OdGiWorldDraw* pWd) const ODRX_SEALED;
+
+  /** \details
+    Creates a viewport-dependent geometric representation of this object.
+
+    \remarks
+    Causes OdGiDrawable to describe its geometry to the specified OdGiViewportDraw object. 
+
+    This function is called once per viewport.
+
+    \remarks
+    By overriding this function, it is possible to have totally different images in each viewport; a schematic
+    in one viewport, a layout in another.
+    
+    The default implementation of this function does nothing. This function can be
+    overridden in custom classes.
+
+    \param pVd [in]  Pointer to the OdGiViewportDraw interface.
+  */
+  ODRX_SEALED_VIRTUAL void viewportDraw(OdGiViewportDraw* pVd) const ODRX_SEALED;
+
+  /** \details
+    Returns true if and only if this object is persistent (stored in a database).
+  */
+  virtual bool isPersistent() const = 0;
+
+  /** \details
+    Returns the database ID of this object.
+
+    \remarks
+    Returns a null pointer if this object is not persistent.
+  */
+  virtual OdDbStub* id() const = 0;
+
+  /** \details
+    Assigns the specified OdGsCache to this object.
+    
+    \param pGsNode [in]  Pointer to the OdGsCache to be assigned.
+  */
+  virtual void setGsNode(OdGsCache* pGsNode) = 0;
+
+  /** \details
+    Returns the OdGsCache associated with this object.
+  */
+  virtual OdGsCache* gsNode() const = 0;
+
+  /** \details
+    Returns the setAttributes flags for the current viewportDraw. 
+    
+    \param pVd [in]  Pointer to OdGiViewportDraw interface.
+    
+    \note
+    The default implementation of this function always returns 0.
+  */
+  ODRX_SEALED_VIRTUAL OdUInt32 viewportDrawLogicalFlags(OdGiViewportDraw* pVd) const ODRX_SEALED;
+
+ /** \details
+    Returns a WCS bounding box that represents the extents of this entity.
+
+    \param extents [out]  Receives the WCS extents.
+
+    \remarks
+    Returns eOk if successful or an appropriate error code if not.
+
+    The default implementation of this function always returns eInvalidExtents. 
+ */
+  virtual OdResult getGeomExtents(OdGeExtents3d& extents) const;
+
+ /** \details
+    Returns a set of flags that represents the multi-threaded rendering support of this entity.
+
+    \remarks
+    Returns 0 if the drawable can be rendered only in a single threaded mode.
+
+    The default implementation of this function returns flags defined with the OdRxClass::customFlags() method.
+ */
+  ODRX_SEALED_VIRTUAL OdUInt32 regenSupportFlags() const ODRX_SEALED;
+
+protected:
+  virtual OdUInt32 subSetAttributes (OdGiDrawableTraits * traits) const = 0;
+  virtual bool subWorldDraw (OdGiWorldDraw * wd) const = 0;
+  virtual void subViewportDraw (OdGiViewportDraw * vd) const = 0;
+  virtual OdUInt32 subViewportDrawLogicalFlags (OdGiViewportDraw * vd) const;
+  virtual OdUInt32 subRegenSupportFlags() const;
+  friend class OdGiDrawableOverrule;
+};
+
+typedef OdSmartPtr<OdGiDrawable> OdGiDrawablePtr;
+
+/** \details
+  This class overrules a subset of drawable linked operations which a drawable object specifies. 
+  It is used as a base class for classes derived from OdGiDrawable to change their behavior. 
+  Each default implementation calls the corresponding method of the target class.
+
+  Library: TD_Gi
+  <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiDrawableOverrule : public OdRxOverrule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiDrawableOverrule);
+
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdGiDrawableOverrule();
+
+  /** \details
+    Overrules the OdGiDrawable::setAttributes() method and calls it in the default implementation.
+
+    \param pSubject [in]  A raw pointer to the drawable object.
+    \param traits [in]  A pointer to the graphics traits.
+  */
+  virtual OdUInt32 setAttributes (const OdGiDrawable* pSubject, OdGiDrawableTraits * traits);
+
+  /** \details
+    Overrules the OdGiDrawable::worldDraw() method and calls it in the default implementation.
+
+    \param pSubject [in]  A raw pointer to the drawable object.
+    \param wd [in]  A pointer to the Gi world drawable object.
+  */
+  virtual bool worldDraw (const OdGiDrawable* pSubject, OdGiWorldDraw * wd);
+
+  /** \details
+    Overrules the OdGiDrawable::viewportDraw() method and calls it in the default implementation.
+
+    \param pSubject [in]  A raw pointer to the drawable object.
+    \param vd [in]  A pointer to the Gi viewport drawable object.
+  */
+  virtual void viewportDraw (const OdGiDrawable* pSubject, OdGiViewportDraw * vd);
+
+  /** \details
+    Overrules the OdGiDrawable::viewportDrawLogicalFlags() method and calls it in the default implementation.
+
+    \param pSubject [in]  A raw pointer to the drawable object.
+    \param vd [in]  A pointer to the Gi viewport drawable object.
+  */
+  virtual OdUInt32 viewportDrawLogicalFlags (const OdGiDrawable* pSubject, OdGiViewportDraw * vd);
+
+  /** \details
+    Overrules the regen support flags.
+
+    \param pSubject [in]  A raw pointer to the drawable object.
+  */
+  virtual OdUInt32 regenSupportFlags(const OdGiDrawable* pSubject);
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODDRAWABLE_H__
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawableImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawableImpl.h
new file mode 100755
index 0000000..4668c7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDrawableImpl.h
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODDRAWABLEIMPL_H__
+#define __ODDRAWABLEIMPL_H__
+
+class OdGsCache;
+class OdGiViewportDraw;
+class OdDbStub;
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsModel.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+template<class T = OdGiDrawable>
+class OdGiDrawableImpl : public T
+{
+  OdGsCache* m_pGsNode;
+public:
+  OdGiDrawableImpl() : m_pGsNode(0) {}
+  
+  ~OdGiDrawableImpl() { if(m_pGsNode) m_pGsNode->setDrawableNull(); }
+
+  void setGsNode(OdGsCache* pGsNode) { m_pGsNode = pGsNode; }
+
+	OdGsCache* gsNode() const { return m_pGsNode; }
+
+  void subViewportDraw(OdGiViewportDraw* ) const {}
+  
+  bool isPersistent() const { return false; }
+  OdDbStub* id() const { return 0; }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODDRAWABLEIMPL_H__
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDummyGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDummyGeometry.h
new file mode 100755
index 0000000..59fd9a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiDummyGeometry.h
@@ -0,0 +1,994 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGIDUMMYGEOM_INCLUDED_
+#define _ODGIDUMMYGEOM_INCLUDED_
+
+#include "Gi/Gi.h"
+#include "Gi/GiBaseVectorizer.h"
+#include "Gi/GiViewportGeometry.h"
+#include "OdStack.h"
+#include "StaticRxObject.h"
+#include "DbBaseSubentId.h" 
+
+#include "ModelerMarkers.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+This class is a dummy template for OdGiGeometry.
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiWrapperGeometry : public T
+{
+  OdGiGeometry        *m_Geom;
+protected:
+  void setGeom(OdGiGeometry &Geom) { m_Geom = &Geom; }
+  OdGiGeometry &getGeom() { return *m_Geom; }
+public:
+  virtual void pline(const OdGiPolyline& p, OdUInt32 i, OdUInt32 n)
+  {
+    m_Geom->pline(p, i, n);
+  }
+
+  virtual OdGeMatrix3d getModelToWorldTransform() const
+  {
+    return m_Geom->getModelToWorldTransform();
+  }
+  virtual OdGeMatrix3d getWorldToModelTransform() const
+  {
+    return m_Geom->getWorldToModelTransform();
+  }
+
+  virtual void pushModelTransform(const OdGeVector3d& vNormal)
+  {
+    m_Geom->pushModelTransform(vNormal);
+  }
+  virtual void pushModelTransform(const OdGeMatrix3d& xMat)
+  {
+    m_Geom->pushModelTransform(xMat);
+  }
+  virtual void popModelTransform()
+  {
+    m_Geom->popModelTransform();
+  }
+
+  // For drawing various primitives.
+  //
+  virtual void circle(const OdGePoint3d& center, double radius, const OdGeVector3d& normal)
+  {
+    m_Geom->circle(center, radius, normal);
+  }
+
+  virtual void circle(const OdGePoint3d& p1, const OdGePoint3d& p2, const OdGePoint3d& p3)
+  {
+    m_Geom->circle(p1, p2, p3);
+  }
+
+  virtual void circularArc(const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple)
+  {
+    m_Geom->circularArc(center, radius, normal, startVector, sweepAngle, arcType);
+  }
+
+  virtual void circularArc(const OdGePoint3d& start,
+    const OdGePoint3d& point,
+    const OdGePoint3d& end,
+    OdGiArcType arcType = kOdGiArcSimple)
+  {
+    m_Geom->circularArc(start, point, end, arcType);
+  }
+
+  virtual void polyline(OdInt32 nbPoints,
+    const OdGePoint3d* pVertexList,
+    const OdGeVector3d* pNormal = NULL,
+    OdGsMarker lBaseSubEntMarker = -1)
+  {
+    m_Geom->polyline(nbPoints, pVertexList, pNormal, lBaseSubEntMarker);
+  }
+
+  virtual void polygon(OdInt32 nbPoints, const OdGePoint3d* pVertexList)
+  {
+    m_Geom->polygon(nbPoints, pVertexList);
+  }
+
+  virtual void mesh(OdInt32 rows,
+    OdInt32 columns,
+    const OdGePoint3d* pVertexList,
+    const OdGiEdgeData* pEdgeData = NULL,
+    const OdGiFaceData* pFaceData = NULL,
+    const OdGiVertexData* pVertexData = NULL)
+  {
+    m_Geom->mesh(rows, columns, pVertexList,  pEdgeData, pFaceData, pVertexData);
+  }
+
+  virtual void shell(OdInt32 nbVertex,
+    const OdGePoint3d* pVertexList,
+    OdInt32 faceListSize,
+    const OdInt32* pFaceList,
+    const OdGiEdgeData* pEdgeData = NULL,
+    const OdGiFaceData* pFaceData = NULL,
+    const OdGiVertexData* pVertexData = NULL)
+  {
+    m_Geom->shell(nbVertex, pVertexList, faceListSize, pFaceList, pEdgeData, pFaceData, pVertexData);
+  }
+
+  virtual void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    double height, double width, double oblique, const OdString& msg)
+  {
+    m_Geom->text(position, normal, direction, height, width, oblique, msg);
+  }
+
+  virtual void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    const OdChar* msg, OdInt32 length, bool raw, const OdGiTextStyle* pTextStyle)
+  {
+    m_Geom->text(position, normal, direction, msg, length, raw, pTextStyle);
+  }
+
+  void ray(const OdGePoint3d& first, const OdGePoint3d& second)
+  {
+    m_Geom->ray(first, second);
+  }
+
+  virtual void nurbs(const OdGeNurbCurve3d& nurbs)
+  {
+    m_Geom->nurbs(nurbs);
+  }
+
+  virtual void xline(const OdGePoint3d& p1, const OdGePoint3d& p2)
+  {
+    m_Geom->xline(p1, p2);
+  }
+
+  virtual void ellipArc(const OdGeEllipArc3d& arc,
+    const OdGePoint3d* pEndPointsOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple)
+  {
+    m_Geom->ellipArc(arc, pEndPointsOverrides, arcType);
+  }
+
+  virtual void draw(const OdGiDrawable* pD)
+  {
+    m_Geom->draw(pD);
+  }
+
+  virtual void pushClipBoundary(OdGiClipBoundary* pBoundary)
+  {
+    m_Geom->pushClipBoundary(pBoundary);
+  }
+  virtual void popClipBoundary()
+  {
+    m_Geom->popClipBoundary();
+  }
+
+  virtual void worldLine(const OdGePoint3d pnts[2])
+  {
+    m_Geom->worldLine(pnts);
+  }
+
+  virtual void image(const OdGiImageBGRA32& img,
+                     const OdGePoint3d& origin,
+                     const OdGeVector3d& uVec,
+                     const OdGeVector3d& vVec,
+                     OdGiRasterImage::TransparencyMode trpMode = OdGiRasterImage::kTransparency8Bit)
+  {
+    m_Geom->image(img, origin, uVec, vVec, trpMode);
+  }
+
+  virtual void edge(const OdGiEdge2dArray& edges)
+  {
+    m_Geom->edge(edges);
+  }
+
+  virtual void polypoint(OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* pColors, const OdCmTransparency* pTransparency,
+                         const OdGeVector3d* pNormals, const OdGsMarker* pSubEntMarkers, OdInt32 nPointSize)
+  {
+    m_Geom->polypoint(numPoints, vertexList, pColors, pTransparency, pNormals, pSubEntMarkers, nPointSize);
+  }
+
+  virtual void rowOfDots(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint)
+  {
+    m_Geom->rowOfDots(numPoints, startPoint, dirToNextPoint);
+  }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiWrapperWorldGeometry : public OdGiWrapperGeometry< T >
+{
+public:
+  virtual void setExtents(const OdGePoint3d *newExtents) { ((OdGiWorldGeometry&)(OdGiWrapperGeometry< T >::getGeom())).setExtents(newExtents); }
+  virtual void startAttributesSegment() { ((OdGiWorldGeometry&)(OdGiWrapperGeometry< T >::getGeom())).startAttributesSegment(); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiWrapperViewportGeometry : public OdGiWrapperGeometry< T >
+{
+public:
+  virtual void polylineEye(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) { ((OdGiViewportGeometry&)(OdGiWrapperGeometry< T >::getGeom())).polylineEye(numVertices, vertexList); }
+
+  virtual void polygonEye(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) { ((OdGiViewportGeometry&)(OdGiWrapperGeometry< T >::getGeom())).polygonEye(numVertices, vertexList); }
+
+  virtual void polylineDc(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) { ((OdGiViewportGeometry&)(OdGiWrapperGeometry< T >::getGeom())).polylineDc(numVertices, vertexList); }
+
+  virtual void polygonDc(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) { ((OdGiViewportGeometry&)(OdGiWrapperGeometry< T >::getGeom())).polygonDc(numVertices, vertexList); }
+
+  virtual void rasterImageDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage, 
+    const OdGePoint2d* uvBoundary, 
+    OdUInt32 numBoundPts,
+    bool transparency = false,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0) { ((OdGiViewportGeometry&)(OdGiWrapperGeometry< T >::getGeom())).rasterImageDc(origin,u,v,pImage, uvBoundary, numBoundPts,transparency,brightness,contrast,fade); }
+
+  virtual void  metafileDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool dcAligned = true,
+    bool allowClipping = false) { ((OdGiViewportGeometry&)(OdGiWrapperGeometry< T >::getGeom())).metafileDc(origin,u,v,pMetafile,dcAligned,allowClipping); }
+
+  virtual void ownerDrawDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiSelfGdiDrawable* pDrawable,
+    bool dcAligned = true,
+    bool allowClipping = false) { ((OdGiViewportGeometry&)(OdGiWrapperGeometry< T >::getGeom())).ownerDrawDc(origin,u,v,pDrawable,dcAligned,allowClipping); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template<class T> class OdGiSubEntityTraitsWrapper : public T
+{
+  OdGiSubEntityTraits *m_pTraits;
+protected:
+  void setTraits(OdGiSubEntityTraits &pTraits) { m_pTraits = &pTraits; }
+  OdGiSubEntityTraits &getTraits() { return *m_pTraits; }
+public:
+  OdGiSubEntityTraitsWrapper() : m_pTraits(0) { }
+
+  // no refcounting
+  void addRef() { m_pTraits->addRef(); }
+  // no refcounting
+  void release() { m_pTraits->release(); }
+
+  void setColor(OdUInt16 n) { m_pTraits->setColor(n); }
+  void setTrueColor(const OdCmEntityColor& n) { m_pTraits->setTrueColor(n); }
+  void setLayer(OdDbStub* n) { m_pTraits->setLayer(n); }
+  void setLineType(OdDbStub* n) { m_pTraits->setLineType(n); }
+  void setSelectionMarker(OdGsMarker n) { m_pTraits->setSelectionMarker(n); }
+  void setFillType(OdGiFillType n) { m_pTraits->setFillType(n); }
+  void setFillPlane(const OdGeVector3d* n= 0) { m_pTraits->setFillPlane(n); }
+  void setLineWeight(OdDb::LineWeight n) { m_pTraits->setLineWeight(n); }
+  void setLineTypeScale(double n = 1.0) { m_pTraits->setLineTypeScale(n); }
+  void setThickness(double n) { m_pTraits->setThickness(n); }
+  void setPlotStyleName(OdDb::PlotStyleNameType n, OdDbStub* m= 0) { m_pTraits->setPlotStyleName(n,m); }
+  void setMaterial(OdDbStub* n) { m_pTraits->setMaterial(n); }
+  void setMapper(const OdGiMapper * n) { m_pTraits->setMapper(n); }
+  void setVisualStyle(const OdDbStub* n) { m_pTraits->setVisualStyle(n); }
+  void setTransparency(const OdCmTransparency& transparency) { m_pTraits->setTransparency(transparency); }
+  void setDrawFlags(OdUInt32 drawFlags) { m_pTraits->setDrawFlags(drawFlags); }
+  void setSelectionGeom(bool bSelectionFlag) { m_pTraits->setSelectionGeom(bSelectionFlag); }
+  void setShadowFlags(OdGiSubEntityTraits::ShadowFlags shadowFlags) { m_pTraits->setShadowFlags(shadowFlags); }
+  void setSectionable(bool bSectionableFlag) { m_pTraits->setSectionable(bSectionableFlag); }
+  void setSelectionFlags(OdGiSubEntityTraits::SelectionFlags selectionFlags) { m_pTraits->setSelectionFlags(selectionFlags); }
+  void setSecondaryTrueColor(const OdCmEntityColor& n) { m_pTraits->setSecondaryTrueColor(n); }
+  void setLineStyleModifiers(const OdGiDgLinetypeModifiers* pLSMod) { m_pTraits->setLineStyleModifiers(pLSMod); }
+  void setFill(const OdGiFill* pFill) { m_pTraits->setFill(pFill); }
+
+  OdUInt16 color() const  { return  m_pTraits->color(); }
+  OdCmEntityColor trueColor() const  { return  m_pTraits->trueColor(); }
+  OdDbStub* layer() const  { return  m_pTraits->layer(); }
+  OdDbStub* lineType() const  { return  m_pTraits->lineType(); }
+  OdGiFillType fillType() const  { return  m_pTraits->fillType(); }
+  bool fillPlane(OdGeVector3d& n) { return  m_pTraits->fillPlane(n); }
+  OdDb::LineWeight lineWeight() const  { return  m_pTraits->lineWeight(); }
+  double lineTypeScale() const  { return  m_pTraits->lineTypeScale(); }
+  double thickness() const  { return m_pTraits->thickness(); }
+  OdDb::PlotStyleNameType plotStyleNameType() const  { return m_pTraits->plotStyleNameType(); }
+  OdDbStub* plotStyleNameId() const  { return  m_pTraits->plotStyleNameId(); }
+  OdDbStub* material() const  { return  m_pTraits->material(); }
+  const OdGiMapper* mapper() const  { return  m_pTraits->mapper(); }
+  OdDbStub* visualStyle() const  { return  m_pTraits->visualStyle(); }
+  OdCmTransparency transparency() const  {  return m_pTraits->transparency(); }
+  OdUInt32 drawFlags() const  {  return m_pTraits->drawFlags(); }
+  bool selectionGeom() const  { return m_pTraits->selectionGeom(); }
+  OdGiSubEntityTraits::ShadowFlags shadowFlags() const  { return m_pTraits->shadowFlags(); }
+  bool sectionable() const  { return m_pTraits->sectionable(); }
+  OdGiSubEntityTraits::SelectionFlags selectionFlags() const  { return m_pTraits->selectionFlags(); }
+  OdCmEntityColor secondaryTrueColor() const  { return m_pTraits->secondaryTrueColor(); }
+  const OdGiDgLinetypeModifiers* lineStyleModifiers() const { return m_pTraits->lineStyleModifiers(); }
+  const OdGiFill* fill() const { return m_pTraits->fill(); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template<class T> class OdGiWrapperCommonDraw : public T
+{
+  OdGiCommonDraw *m_pD;
+protected:
+  void setDraw(OdGiCommonDraw &pD) { m_pD = &pD; }
+  OdGiCommonDraw *getDraw() const { return m_pD; }
+public:
+  OdGiWrapperCommonDraw() : m_pD(0) {}
+  virtual OdGiGeometry& rawGeometry() const            { return m_pD->rawGeometry(); }
+  virtual OdGiRegenType regenType() const              { return m_pD->regenType(); }
+  virtual bool regenAbort() const                      { return m_pD->regenAbort(); }
+  virtual OdGiSubEntityTraits& subEntityTraits() const { return m_pD->subEntityTraits(); }
+  virtual bool isDragging() const                      { return m_pD->isDragging(); }
+  virtual OdGiContext* context() const                 { return m_pD->context(); }
+  virtual OdUInt32 numberOfIsolines() const            { return m_pD->numberOfIsolines(); }
+  virtual const OdGiPathNode* currentGiPath() const    { return m_pD->currentGiPath(); }
+  virtual double deviation(const OdGiDeviationType t, const OdGePoint3d& p) const { return m_pD->deviation(t, p); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template<class T> class OdGiWrapperViewportDraw : public OdGiWrapperCommonDraw< T >
+{
+public:
+  virtual OdGiViewport& viewport() const { return ((OdGiViewportDraw*)(OdGiWrapperCommonDraw< T >::getDraw()))->viewport(); }
+  virtual OdGiViewportGeometry& geometry() const  { return ((OdGiViewportDraw*)(OdGiWrapperCommonDraw< T >::getDraw()))->geometry(); }
+  virtual OdUInt32 sequenceNumber() const  { return ((OdGiViewportDraw*)(OdGiWrapperCommonDraw< T >::getDraw()))->sequenceNumber(); }
+  virtual bool isValidId(const OdUInt32 viewportId) const { return ((OdGiViewportDraw*)(OdGiWrapperCommonDraw< T >::getDraw()))->isValidId(viewportId); }
+  virtual OdDbStub* viewportObjectId() const { return ((OdGiViewportDraw*)(OdGiWrapperCommonDraw< T >::getDraw()))->viewportObjectId(); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template<class T> class OdGiWrapperWorldDraw : public OdGiWrapperCommonDraw< T >
+{
+public:
+  virtual OdGiWorldGeometry& geometry() const  { return ((OdGiWorldDraw*)(OdGiWrapperCommonDraw< T >::getDraw()))->geometry(); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+class OdGiViewportDraw_Stub : public OdGiWrapperViewportDraw<OdGiViewportDraw>
+                            , public OdGiWrapperViewportGeometry<OdGiViewportGeometry>
+                            , public OdGiSubEntityTraitsWrapper<OdGiSubEntityTraits>
+{
+public:
+  ODRX_USING_HEAP_OPERATORS( OdGiWrapperViewportDraw<OdGiViewportDraw> );
+
+  OdGiViewportDraw_Stub(OdGiViewportDraw &pVD, OdGiViewportGeometry &pVG, OdGiSubEntityTraits &pST)
+  {
+    setDraw(pVD);
+    setGeom(pVG);
+    setTraits(pST);
+  }
+
+  virtual OdGiGeometry& rawGeometry() const   { return *static_cast<OdGiGeometry*>(const_cast<OdGiViewportDraw_Stub*>(this)); }
+  virtual OdGiSubEntityTraits& subEntityTraits() const { return *static_cast<OdGiSubEntityTraits*>(const_cast<OdGiViewportDraw_Stub*>(this)); }
+  virtual OdGiViewportGeometry& geometry() const  { return *static_cast<OdGiViewportGeometry*>(const_cast<OdGiViewportDraw_Stub*>(this)); }
+
+  void addRef() { }
+  void release() { }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+class OdGiWorldDraw_Stub : public OdGiWrapperWorldDraw<OdGiWorldDraw>
+                         , public OdGiWrapperWorldGeometry<OdGiWorldGeometry>
+                         , public OdGiSubEntityTraitsWrapper<OdGiSubEntityTraits>
+{
+public:
+  ODRX_USING_HEAP_OPERATORS( OdGiWrapperWorldDraw<OdGiWorldDraw> );
+
+  OdGiWorldDraw_Stub(OdGiWorldDraw &pVD, OdGiWorldGeometry &pVG, OdGiSubEntityTraits &pST)
+  {
+    setDraw(pVD);
+    setGeom(pVG);
+    setTraits(pST);
+  }
+
+  virtual OdGiGeometry& rawGeometry() const   { return *static_cast<OdGiGeometry*>(const_cast<OdGiWorldDraw_Stub*>(this)); }
+  virtual OdGiSubEntityTraits& subEntityTraits() const { return *static_cast<OdGiSubEntityTraits*>(const_cast<OdGiWorldDraw_Stub*>(this)); }
+  virtual OdGiWorldGeometry& geometry() const  { return *static_cast<OdGiWorldGeometry*>(const_cast<OdGiWorldDraw_Stub*>(this)); }
+
+  void addRef() { }
+  void release() { }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummyGeometry : public T
+{
+public:
+  void circle(const OdGePoint3d& /*center*/, double /*radius*/, const OdGeVector3d& /*normal*/) {}
+
+  void circle(const OdGePoint3d& /*firstPoint*/, const OdGePoint3d& /*secondPoint*/, const OdGePoint3d& /*thirdPoint*/) {}
+
+  void circularArc(const OdGePoint3d& /*center*/,
+    double /*radius*/,
+    const OdGeVector3d& /*normal*/,
+    const OdGeVector3d& /*startVector*/,
+    double /*sweepAngle*/,
+    OdGiArcType /*arcType*/ = kOdGiArcSimple) {}
+
+  void circularArc(const OdGePoint3d& /*firstPoint*/,
+    const OdGePoint3d& /*secondPoint*/,
+    const OdGePoint3d& /*thirdPoint*/,
+    OdGiArcType /*arcType */= kOdGiArcSimple) {}
+
+  void polyline(OdInt32 /*numVertices*/,
+    const OdGePoint3d* /*vertexList*/,
+    const OdGeVector3d* /*pNormal */= 0,
+     OdGsMarker /*baseSubEntMarker */= -1) {}
+
+  void polygon(OdInt32 /*numVertices*/, const OdGePoint3d* /*vertexList*/) {}
+
+  void pline(const OdGiPolyline& /*polylPine*/, OdUInt32 /*fromIndex */= 0, OdUInt32 /*numSegs */= 0) {}
+
+  void shape(const OdGePoint3d& /*position*/,
+    const OdGeVector3d& /*normal*/, const OdGeVector3d& /*direction*/,
+    int /*shapeNumber*/, const OdGiTextStyle* /*pTextStyle*/) {}
+
+  void text(const OdGePoint3d& /*position*/,
+    const OdGeVector3d& /*normal*/, const OdGeVector3d& /*direction*/,
+    double /*height*/, double /*width*/, double /*oblique*/, const OdString& /*msg*/) {}
+
+  void text(const OdGePoint3d& /*position*/,
+    const OdGeVector3d& /*normal*/, const OdGeVector3d& /*direction*/,
+    const OdChar* /*msg*/, OdInt32 /*length*/, bool /*raw*/, const OdGiTextStyle* /*pTextStyle*/) {}
+
+
+  void xline(const OdGePoint3d& /*firstPoint*/, const OdGePoint3d& /*secondPoint*/) {}
+
+  void ray(const OdGePoint3d& /*basePoint*/, const OdGePoint3d& /*throughPoint */) {}
+
+  void nurbs(const OdGeNurbCurve3d& /*nurbsCurve*/) {}
+
+  void ellipArc(const OdGeEllipArc3d& /*ellipArc*/,
+    const OdGePoint3d* /*endPointsOverrides */= 0,
+    OdGiArcType /*arcType */= kOdGiArcSimple) {}
+
+  void mesh(OdInt32 /*numRows*/,
+    OdInt32 /*numColumns*/,
+    const OdGePoint3d* /*vertexList*/,
+    const OdGiEdgeData* /*pEdgeData */= 0,
+    const OdGiFaceData* /*pFaceData */= 0,
+    const OdGiVertexData* /*pVertexData */= 0) {}
+
+  void shell(OdInt32 /*numVertices*/,
+    const OdGePoint3d* /*vertexList*/,
+    OdInt32 /*faceListSize*/,
+    const OdInt32* /*faceList*/,
+    const OdGiEdgeData* /*pEdgeData */= 0,
+    const OdGiFaceData* /*pFaceData */= 0,
+    const OdGiVertexData* /*pVertexData */= 0) {}
+
+  void worldLine(const OdGePoint3d /*points*/[2]) {}
+
+  void image(const OdGiImageBGRA32& /*img*/,
+    const OdGePoint3d& /*origin*/,
+    const OdGeVector3d& /*uVec*/,
+    const OdGeVector3d& /*vVec*/,
+    OdGiRasterImage::TransparencyMode /*trpMode*/ = OdGiRasterImage::kTransparency8Bit) {}
+
+  virtual void edge(const OdGiEdge2dArray& /*edges*/) {}
+
+  void polypoint(OdInt32 /*numPoints*/, const OdGePoint3d* /*vertexList*/, const OdCmEntityColor* /*pColors*/, const OdCmTransparency* /*pTransparency*/,
+                 const OdGeVector3d* /*pNormals*/, const OdGsMarker* /*pSubEntMarkers*/, OdInt32 /*nPointSize*/) {}
+
+  void rowOfDots(OdInt32 /*numPoints*/, const OdGePoint3d& /*startPoint*/, const OdGeVector3d& /*dirToNextPoint*/) {}
+
+  void setExtents(const OdGePoint3d * /*newExtents*/) {}
+
+  void pushClipBoundary(OdGiClipBoundary* /*pBoundary*/) {}
+  void popClipBoundary() {}
+  void draw(const OdGiDrawable* /*pDrawable*/) {}
+
+  void pushModelTransform(const OdGeMatrix3d& /*xMat*/) { }
+
+  void pushModelTransform(const OdGeVector3d& /*normal*/) { }
+
+  void popModelTransform() { }
+
+  OdGeMatrix3d getModelToWorldTransform() const { return OdGeMatrix3d::kIdentity; }
+
+  OdGeMatrix3d getWorldToModelTransform() const { return OdGeMatrix3d::kIdentity; }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummyWorldGeometry : public OdGiDummyGeometry< T >
+{
+public:
+  virtual void setExtents(
+    const OdGePoint3d * /*newExtents*/) { }
+
+  virtual void startAttributesSegment() {}
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummyViewportGeometry : public OdGiDummyGeometry< T >
+{
+public:
+  virtual void polylineEye(
+    OdUInt32 , 
+    const OdGePoint3d* ) { }
+
+  virtual void polygonEye(
+    OdUInt32 , 
+    const OdGePoint3d* ) {  }
+
+  virtual void polylineDc(
+    OdUInt32 , 
+    const OdGePoint3d* ) {  }
+
+  virtual void polygonDc(
+    OdUInt32 , 
+    const OdGePoint3d* ) {  }
+
+  virtual void rasterImageDc(
+    const OdGePoint3d& ,
+    const OdGeVector3d& ,
+    const OdGeVector3d& ,
+    const OdGiRasterImage* , 
+    const OdGePoint2d* , 
+    OdUInt32 ,
+    bool  = false,
+    double  = 50.0,
+    double  = 50.0,
+    double  = 0.0) {  }
+
+  virtual void  metafileDc(
+    const OdGePoint3d& ,
+    const OdGeVector3d& ,
+    const OdGeVector3d& ,
+    const OdGiMetafile* ,
+    bool  = true,
+    bool  = false) {  }
+
+  virtual void ownerDrawDc(
+    const OdGePoint3d& ,
+    const OdGeVector3d& ,
+    const OdGeVector3d& ,
+    const OdGiSelfGdiDrawable* ,
+    bool  = true,
+    bool  = false) {  }
+};
+
+// OdGiSubEntityTraits dummy template
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummySubEntityTraits : public T
+{
+public:
+  void setColor(OdUInt16 ) { }
+  void setTrueColor(const OdCmEntityColor& ) { }
+  void setLayer(OdDbStub* ) { }
+  void setLineType(OdDbStub* ) { }
+  void setSelectionMarker(OdGsMarker ) { }
+  void setFillType(OdGiFillType ) { }
+  void setFillPlane(const OdGeVector3d* = 0) {}
+  void setLineWeight(OdDb::LineWeight ) { }
+  void setLineTypeScale(double  = 1.0) { }
+  void setThickness(double ) { }
+  void setPlotStyleName(OdDb::PlotStyleNameType, OdDbStub* = 0) { }
+  void setMaterial(OdDbStub* ) { }
+  void setMapper(const OdGiMapper * /*pMapper*/) { }
+  void setVisualStyle(const OdDbStub* /*visualStyleId*/) { }
+  void setTransparency(const OdCmTransparency& /*transparency*/) { }
+  void setDrawFlags(OdUInt32 /*drawFlags*/) { }
+  void setSelectionGeom(bool /*bSelectionFlag*/) { }
+  void setShadowFlags(OdGiSubEntityTraits::ShadowFlags /*shadowFlags*/) { }
+  void setSectionable(bool /*bSectionableFlag*/) { }
+  void setSelectionFlags(OdGiSubEntityTraits::SelectionFlags /*selectionFlags*/) { }
+
+  OdUInt16 color() const { return 0; }
+  OdCmEntityColor trueColor() const { return OdCmEntityColor(); }
+  OdDbStub* layer() const { return NULL; }
+  OdDbStub* lineType() const { return NULL; }
+  OdGiFillType fillType() const { return kOdGiFillNever; }
+  bool fillPlane(OdGeVector3d& /*normal*/) { return false; }
+  OdDb::LineWeight lineWeight() const { return OdDb::kLnWt000; }
+  double lineTypeScale() const { return 0.0; }
+  double thickness() const { return 0.0; }
+  OdDb::PlotStyleNameType plotStyleNameType() const { return OdDb::kPlotStyleNameByBlock; }
+  OdDbStub* plotStyleNameId() const { return NULL; }
+  OdDbStub* material() const { return NULL; }
+  const OdGiMapper* mapper() const { return NULL; }
+  void addLight(const OdDbStub* /*lightId*/) { }
+  OdCmTransparency transparency() const { return OdCmTransparency(); }
+  OdUInt32 drawFlags() const { return 0; }
+  bool selectionGeom() const { return false; }
+  OdGiSubEntityTraits::ShadowFlags shadowFlags() const { return OdGiSubEntityTraits::kShadowsCastAndReceive; }
+  bool sectionable() const { return false; }
+  OdGiSubEntityTraits::SelectionFlags selectionFlags() const { return OdGiSubEntityTraits::kNoSelectionFlags; }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template<class T> class OdGiDummyCommonDraw : public T
+{
+public:
+  virtual OdGiRegenType regenType() const              { return kOdGiStandardDisplay; } // dont change from kOdGiStandardDisplay
+  virtual bool regenAbort() const                      { return false; }
+  virtual bool isDragging() const                      { return false; }
+  virtual OdUInt32 numberOfIsolines() const { return 4; }
+  virtual double deviation(const OdGiDeviationType t, const OdGePoint3d& p) const { return 0.; }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummyViewportDraw : public OdGiDummyCommonDraw< T >
+{
+public:
+  virtual OdUInt32 sequenceNumber() const  { return 0; }
+  virtual bool isValidId(const OdUInt32 viewportId) const { return false; }
+  virtual OdDbStub* viewportObjectId() const { return (OdDbStub*)1; } // something non NULL
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummyWorldDraw : public OdGiDummyCommonDraw< T >
+{
+public:
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummyContext : public T
+{
+public:
+  virtual OdDbBaseDatabase* database() const { return 0;}
+  virtual OdGiDrawablePtr openDrawable(OdDbStub* ) { return OdGiDrawablePtr(); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiDummyViewport : public T
+{
+public:
+  virtual OdGeMatrix3d getModelToEyeTransform() const { return OdGeMatrix3d::kIdentity; }
+  virtual OdGeMatrix3d getEyeToModelTransform() const { return OdGeMatrix3d::kIdentity; }
+  virtual OdGeMatrix3d getWorldToEyeTransform() const { return OdGeMatrix3d::kIdentity; }
+  virtual OdGeMatrix3d getEyeToWorldTransform() const { return OdGeMatrix3d::kIdentity; }
+  virtual bool isPerspective() const { return false; }
+  virtual bool doPerspective(OdGePoint3d& /*p*/) const { return false; }
+  virtual bool doInversePerspective(OdGePoint3d& /*p*/) const  { return false; }
+  virtual void getNumPixelsInUnitSquare(const OdGePoint3d& /*givenWorldpt*/, OdGePoint2d& /*pixelArea*/, bool /*includePerspective*/ = true) const {  }
+  virtual OdGePoint3d getCameraLocation() const { return OdGePoint3d::kOrigin; }
+  virtual OdGePoint3d getCameraTarget() const { return OdGePoint3d::kOrigin + OdGeVector3d::kZAxis; }
+  virtual OdGeVector3d getCameraUpVector() const { return OdGeVector3d::kYAxis; }
+  virtual OdGeVector3d viewDir() const { return getCameraTarget() - getCameraLocation();  }
+  virtual OdUInt32 viewportId() const { return 0xFFFFFFFF; }
+  virtual OdInt16  acadWindowId() const { return -1; }
+  virtual void getViewportDcCorners(OdGePoint2d& lower_left, OdGePoint2d& upper_right) const { lower_left.set(0,0); upper_right.set(100,100); }
+  virtual bool getFrontAndBackClipValues(bool& clip_front, bool& clip_back, double& /*front*/, double& /*back*/) const { clip_front = clip_back = false; return false; }
+  virtual double linetypeScaleMultiplier() const { return 1.0; }
+  virtual double linetypeGenerationCriteria() const { return 1.0; }
+  virtual bool layerVisible(OdDbStub* /*idLayer*/) const { return true; }
+};
+
+/** \details
+This class is a dummy template for OdGiViewport.
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiWrapperViewport : public T
+{
+  const OdGiViewport* m_ref;
+protected:
+  void set(const OdGiViewport& ref) { m_ref = &ref; }
+  const OdGiViewport &get() const { return *m_ref; }
+public:
+  virtual OdGeMatrix3d getModelToEyeTransform() const { return get().getModelToEyeTransform(); }
+  virtual OdGeMatrix3d getEyeToModelTransform() const { return get().getEyeToModelTransform(); }
+  virtual OdGeMatrix3d getWorldToEyeTransform() const { return get().getWorldToEyeTransform(); }
+  virtual OdGeMatrix3d getEyeToWorldTransform() const { return get().getEyeToWorldTransform(); }
+  virtual bool isPerspective() const { return get().isPerspective(); }
+  virtual bool doPerspective(OdGePoint3d& p) const { return get().doPerspective(p); }
+  virtual bool doInversePerspective(OdGePoint3d& p) const  { return get().doInversePerspective(p); }
+  virtual void getNumPixelsInUnitSquare(const OdGePoint3d& givenWorldpt,
+    OdGePoint2d& pixelArea, bool includePerspective = true) const
+  {
+    get().getNumPixelsInUnitSquare(givenWorldpt, pixelArea, includePerspective);
+  }
+  virtual OdGePoint3d getCameraLocation() const { return get().getCameraLocation(); }
+  virtual OdGePoint3d getCameraTarget() const { return get().getCameraTarget(); }
+  virtual OdGeVector3d getCameraUpVector() const { return get().getCameraUpVector(); }
+  virtual OdGeVector3d viewDir() const { return get().viewDir();  }
+  virtual OdUInt32 viewportId() const { return get().viewportId(); }
+  virtual OdInt16  acadWindowId() const { return get().acadWindowId(); }
+  virtual void getViewportDcCorners(OdGePoint2d& lower_left, OdGePoint2d& upper_right) const
+  { get().getViewportDcCorners(lower_left, upper_right); }
+  virtual bool getFrontAndBackClipValues(bool& clip_front, bool& clip_back, double& front, double& back) const
+  { return get().getFrontAndBackClipValues(clip_front, clip_back, front, back); }
+  virtual double linetypeScaleMultiplier() const { return get().linetypeScaleMultiplier(); }
+  virtual double linetypeGenerationCriteria() const { return get().linetypeGenerationCriteria(); }
+  virtual bool layerVisible(OdDbStub* idLayer) const { return get().layerVisible(idLayer); }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+class OdGiViewportDraw_Dummy : public OdGiDummySubEntityTraits< OdGiSubEntityTraits >
+                             , public OdGiDummyViewportDraw< OdGiViewportDraw >
+                             , public OdGiDummyViewportGeometry< OdGiViewportGeometry >
+                             , public OdGiDummyContext< OdGiContext >
+                             , public OdGiDummyViewport< OdGiViewport >
+{
+  OdDbBaseDatabase *m_pDb;
+public:
+  ODRX_USING_HEAP_OPERATORS( OdGiDummySubEntityTraits< OdGiSubEntityTraits > );
+
+  OdGiViewportDraw_Dummy(OdDbBaseDatabase *pDb = 0) : m_pDb(pDb) { }
+  virtual OdDbBaseDatabase* database() const { return m_pDb; }
+
+  virtual OdGiGeometry& rawGeometry() const   { return *static_cast<OdGiGeometry*>(const_cast<OdGiViewportDraw_Dummy*>(this)); }
+  virtual OdGiSubEntityTraits& subEntityTraits() const { return *static_cast<OdGiSubEntityTraits*>(const_cast<OdGiViewportDraw_Dummy*>(this)); }
+  virtual OdGiViewport& viewport() const { return *static_cast<OdGiViewport*>(const_cast<OdGiViewportDraw_Dummy*>(this)); }
+  virtual OdGiViewportGeometry& geometry() const  { return *static_cast<OdGiViewportGeometry*>(const_cast<OdGiViewportDraw_Dummy*>(this)); }
+  virtual OdGiContext* context() const            { return static_cast<OdGiContext*>(const_cast<OdGiViewportDraw_Dummy*>(this)); }
+
+  void addRef() { }
+  void release() { }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+class OdGiWorldDraw_Dummy : public OdGiDummySubEntityTraits< OdGiSubEntityTraits >
+  , public OdGiDummyWorldDraw< OdGiWorldDraw >
+  , public OdGiDummyWorldGeometry< OdGiWorldGeometry >
+  , public OdGiDummyContext< OdGiContext >
+{
+  OdDbBaseDatabase *m_pDb;
+public:
+  ODRX_USING_HEAP_OPERATORS( OdGiDummySubEntityTraits< OdGiSubEntityTraits > );
+
+  OdGiWorldDraw_Dummy(OdDbBaseDatabase *pDb = 0) : m_pDb(pDb) { }
+  virtual OdDbBaseDatabase* database() const { return m_pDb; }
+
+  virtual OdGiGeometry& rawGeometry() const   { return *static_cast<OdGiGeometry*>(const_cast<OdGiWorldDraw_Dummy*>(this)); }
+  virtual OdGiSubEntityTraits& subEntityTraits() const { return *static_cast<OdGiSubEntityTraits*>(const_cast<OdGiWorldDraw_Dummy*>(this)); }
+  virtual OdGiWorldGeometry& geometry() const  { return *static_cast<OdGiWorldGeometry*>(const_cast<OdGiWorldDraw_Dummy*>(this)); }
+  virtual OdGiContext* context() const            { return static_cast<OdGiContext*>(const_cast<OdGiWorldDraw_Dummy*>(this)); }
+
+  void addRef() { }
+  void release() { }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template<class T, class DRAW, class WR, class WRA> class OdGeomGrabber : public T
+{
+  OdGsMarker m_curSelMarker;
+  WRA &wires;
+
+  OdGeomGrabber();
+protected:
+  virtual OdGsMarker getCurSelMarker() const {
+    return m_curSelMarker;
+  }
+
+public:
+
+  OdGeomGrabber(WRA &pW, DRAW &pVd)
+    : T(pVd, pVd.geometry(), pVd.subEntityTraits())
+    , m_curSelMarker(0)
+    , wires(pW)
+  { }
+
+  virtual void setSelectionMarker(OdGsMarker n) { m_curSelMarker = n; T::setSelectionMarker(n); }
+
+  virtual WR *appendWire()
+  {
+    WR *pWire = wires.append();
+    pWire->selMarker = OdIntToGsMarker(-getFaceIndex(m_curSelMarker));
+    pWire->color = T::subEntityTraits().trueColor();
+    return pWire;
+  }
+
+  virtual void circle(const OdGePoint3d& center, double radius, const OdGeVector3d& normal)
+  {
+    appendWire()->circle(center, radius, normal);
+    T::circle(center, radius, normal);
+  }
+
+  virtual void circle(const OdGePoint3d& p1, const OdGePoint3d& p2, const OdGePoint3d& p3)
+  {
+    appendWire()->circle(p1, p2, p3);
+    T::circle(p1, p2, p3);
+  }
+
+  virtual void circularArc(const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple)
+  {
+    appendWire()->circularArc(center, radius, normal, startVector, sweepAngle);
+    T::circularArc(center, radius, normal, startVector, sweepAngle, arcType);
+  }
+
+  virtual void circularArc(const OdGePoint3d& start,
+    const OdGePoint3d& point,
+    const OdGePoint3d& end,
+    OdGiArcType arcType = kOdGiArcSimple)
+  {
+    appendWire()->circularArc(start, point, end);
+    T::circularArc(start, point, end, arcType);
+  }
+
+  virtual void polyline(OdInt32 nbPoints,
+    const OdGePoint3d* pVertexList,
+    const OdGeVector3d* pNormal = NULL,
+    OdGsMarker lBaseSubEntMarker = -1)
+  {
+    appendWire()->polyline(nbPoints, pVertexList);
+    T::polyline(nbPoints, pVertexList, pNormal, lBaseSubEntMarker);
+  }
+
+  virtual void nurbs(const OdGeNurbCurve3d& nurbs)
+  {
+    appendWire()->nurbs(nurbs);
+    T::nurbs(nurbs);
+  }
+};
+
+/** \details
+
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template<class T, class DRAW, class WR, class WRA> class OdShellGrabber : public T
+{
+  OdGsMarker m_curSelMarker;
+  WRA &wires;
+
+  OdShellGrabber();
+public:
+
+  OdShellGrabber(WRA &pW, DRAW &pVd) : T(pVd, pVd.geometry(), pVd.subEntityTraits())
+    , m_curSelMarker(0)
+    , wires(pW)
+  { }
+
+  virtual OdGiRegenType regenType() const              { return kOdGiHideOrShadeCommand; }
+
+  virtual void setSelectionMarker(OdGsMarker n) { m_curSelMarker = n; T::setSelectionMarker(n); }
+
+  virtual void shell(
+    OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    OdInt32 faceListSize,
+    const OdInt32* faceList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0)
+  {
+    WR *pWire = wires.append();
+    pWire->selMarker = m_curSelMarker;
+    pWire->color = T::subEntityTraits().trueColor();
+    pWire->shell(
+      numVertices,
+      vertexList,
+      faceListSize,
+      faceList,
+      pEdgeData,
+      pFaceData,
+      pVertexData);
+
+    T::shell(
+      numVertices,
+      vertexList,
+      faceListSize,
+      faceList,
+      pEdgeData,
+      pFaceData,
+      pVertexData);
+  }
+};
+
+typedef  OdStaticRxObject< OdGiDummySubEntityTraits< OdGiSubEntityTraits > > OdGiSubEntityTraits_Stub;
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGIDUMMYGEOM_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEmptyGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEmptyGeometry.h
new file mode 100755
index 0000000..e92610b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEmptyGeometry.h
@@ -0,0 +1,217 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIEMPTYGEOMETRY_H__
+#define __ODGIEMPTYGEOMETRY_H__
+
+
+#include "Gi/GiExport.h"
+#include "Gi/GiConveyorGeometry.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  This class is an implementation of OdGiConveyorGeometry that provides no-ops for the all functions therein.
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiEmptyGeometry : public OdGiConveyorGeometry
+{
+public:
+  ODGI_EXPORT_STATIC static OdGiConveyorGeometry& kVoid;
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void plineProc(const OdGiPolyline& polyline,
+    const OdGeMatrix3d* xfm = 0,
+    OdUInt32 fromIndex = 0,
+    OdUInt32 numSegs = 0);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void circleProc(
+    const OdGePoint3d& center, double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d* pExtrusion = 0);
+  
+  void circleProc(
+    const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint, const OdGePoint3d& thirdPoint,
+    const OdGeVector3d* pExtrusion = 0);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void circularArcProc(
+    const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple,
+    const OdGeVector3d* pExtrusion = 0);
+  
+  void circularArcProc(
+    const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& thirdPoint,
+    OdGiArcType arcType = kOdGiArcSimple,
+    const OdGeVector3d* pExtrusion = 0);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void polylineProc(
+    OdInt32 numPoints, const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    const OdGeVector3d* pExtrusion = 0, OdGsMarker baseSubEntMarker = -1);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void polygonProc(
+    OdInt32 numPoints, const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0, const OdGeVector3d* pExtrusion = 0);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void meshProc(
+    OdInt32 rows,
+    OdInt32 columns,
+    const OdGePoint3d* vertexList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void shellProc(
+    OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    OdInt32 faceListSize,
+    const OdInt32* faceList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void textProc(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, const OdGeVector3d& upVector,
+    const OdChar* msg, OdInt32 numChars, bool raw, const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void shapeProc(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, const OdGeVector3d& upVector,
+    int shapeNumber, const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void xlineProc(
+    const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void rayProc( const OdGePoint3d& basePoint, const OdGePoint3d& throughPoint);
+  
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void nurbsProc( const OdGeNurbCurve3d& nurbsCurve);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void ellipArcProc(
+    const OdGeEllipArc3d& ellipArc,
+    const OdGePoint3d* endPointsOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple, const OdGeVector3d* pExtrusion = 0);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void rasterImageProc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage, 
+    const OdGePoint2d* uvBoundary,
+    OdUInt32 numBoundPts,
+    bool transparency = false,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+	void metafileProc(
+    const OdGePoint3d& origin,
+		const OdGeVector3d& u,
+		const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool dcAligned = true,           
+    bool allowClipping = false);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void polypointProc(
+    OdInt32 numPoints,
+    const OdGePoint3d* vertexList,
+    const OdCmEntityColor* pColors,
+    const OdCmTransparency* pTransparency = 0,
+    const OdGeVector3d* pNormals = 0,
+    const OdGeVector3d* pExtrusions = 0,
+    const OdGsMarker* pSubEntMarkers = 0,
+    OdInt32 nPointSize = 0);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void rowOfDotsProc(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  void edgeProc(const OdGiEdge2dArray& edges, const OdGeMatrix3d* pXform = 0);
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIEMPTYGEOMETRY_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironment.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironment.h
new file mode 100755
index 0000000..8d586f9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironment.h
@@ -0,0 +1,543 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _GIENVIRONMENT_H_INCLUDED_
+#define _GIENVIRONMENT_H_INCLUDED_
+
+#include "Gi.h"
+#include "GiMaterial.h"
+
+class OdGiSkyParameters;
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiRenderEnvironmentTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiRenderEnvironmentTraits);
+
+  virtual void setEnable(bool bEnable) = 0;
+  virtual bool enable() const = 0;
+  virtual void setIsBackground(bool bEnable) = 0;
+  virtual bool isBackground() const = 0;
+  virtual void setFogColor(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor fogColor() const = 0;
+  virtual void setNearDistance(double nearDist) = 0;
+  virtual double nearDistance() const = 0;
+  virtual void setFarDistance(double farDist) = 0;
+  virtual double farDistance() const = 0;
+  virtual void setNearPercentage(double nearPct) = 0;
+  virtual double nearPercentage() const = 0;
+  virtual void setFarPercentage(double farPct) = 0;
+  virtual double farPercentage() const = 0;
+  virtual void setEnvironmentMap(const OdGiMaterialTexture* m) = 0;
+  virtual OdGiMaterialTexture* environmentMap() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiRenderEnvironmentTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiRenderEnvironmentTraits> OdGiRenderEnvironmentTraitsPtr;
+
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiRenderSettingsTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiRenderSettingsTraits);
+
+  virtual void setMaterialEnabled(bool enabled) = 0;
+  virtual bool materialEnabled() const = 0;
+  virtual void setTextureSampling(bool enabled) = 0;
+  virtual bool textureSampling() const = 0;
+  virtual void setBackFacesEnabled(bool enabled) = 0;
+  virtual bool backFacesEnabled() const = 0;
+  virtual void setShadowsEnabled(bool enabled) = 0;
+  virtual bool shadowsEnabled() const = 0;
+  virtual void setDiagnosticBackgroundEnabled(bool enabled) = 0;
+  virtual bool diagnosticBackgroundEnabled() const = 0;
+  virtual void setModelScaleFactor(double scaleFactor) = 0;
+  virtual double modelScaleFactor() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiRenderSettingsTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiRenderSettingsTraits> OdGiRenderSettingsTraitsPtr;
+
+
+typedef enum 
+{
+  krBox         = 0,
+  krTriangle    = 1,
+  krGauss       = 2,
+  krMitchell    = 3,
+  krLanczos     = 4
+} 
+OdGiMrFilter;
+
+typedef enum 
+{
+  krSimple      = 0,
+  krSorted      = 1,
+  krSegments    = 2
+} 
+OdGiMrShadowMode;
+
+typedef enum 
+{
+  krOff         = 0,
+  krGrid        = 1,
+  krPhoton      = 2,
+  krSamples     = 3,
+  krBSP         = 4
+} 
+OdGiMrDiagnosticMode;
+
+typedef enum 
+{
+  krObject      = 0,
+  krWorld       = 1,
+  krCamera      = 2
+}
+OdGiMrDiagnosticGridMode;
+
+typedef enum 
+{
+  krDensity     = 0,
+  krIrradiance  = 1
+} 
+OdGiMrDiagnosticPhotonMode;
+
+typedef enum 
+{
+  krDepth       = 0,
+  krSize        = 1
+}
+OdGiMrDiagnosticBSPMode;
+
+typedef enum 
+{
+  krHilbert       = 0,
+  krSpiral        = 1,
+  krLeftToRight   = 2,
+  krRightToLeft   = 3,
+  krTopToBottom   = 4,
+  krBottomToTop   = 5
+}
+OdGiMrTileOrder;
+
+typedef enum
+{
+  krAutomatic     = 0,
+  krLogarithmic   = 1
+}
+OdGiMrExposureType;
+
+typedef enum
+{
+  krFinalGatherOff   = 0,
+  krFinalGatherOn    = 1,
+  krFinalGatherAuto  = 2
+}
+OdGiMrFinalGatheringMode;
+
+typedef enum
+{
+  krExportMIOff        = 0,
+  krExportMIWithRender = 1,
+  krExportMIOnly       = 2
+}
+OdGiMrExportMIMode;
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiMentalRayRenderSettingsTraits : public OdGiRenderSettingsTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiMentalRayRenderSettingsTraits);
+
+  virtual void setSampling(int min, int max) = 0;
+  virtual void sampling(int& min, int& max) const = 0;
+
+  virtual void setSamplingFilter(OdGiMrFilter filter, double width, double height) = 0;
+  virtual void SamplingFilter(OdGiMrFilter& filter, double& width, double& height) const = 0;
+
+  virtual void setSamplingContrastColor(float r, float g, float b, float a) = 0;
+  virtual void samplingContrastColor(float& r, float& g, float& b, float& a) const = 0;
+
+  virtual void setShadowMode(OdGiMrShadowMode mode) = 0;
+  virtual OdGiMrShadowMode shadowMode() const = 0;
+
+  virtual void setShadowMapEnabled(bool enabled) = 0;
+  virtual bool shadowMapEnabled() const = 0;
+
+  virtual void setRayTraceEnabled(bool enabled) = 0;
+  virtual bool rayTraceEnabled() const = 0;
+
+  virtual void setRayTraceDepth(int reflection, int refraction, int sum) = 0;
+  virtual void rayTraceDepth(int& reflection, int& refraction, int& sum) const = 0;
+
+  virtual void setGlobalIlluminationEnabled(bool enabled) = 0;
+  virtual bool globalIlluminationEnabled() const = 0;
+
+  virtual void setGISampleCount(int num) = 0;
+  virtual int giSampleCount() const = 0;
+
+  virtual void setGISampleRadiusEnabled(bool enabled) = 0;
+  virtual bool giSampleRadiusEnabled() const = 0;
+
+  virtual void setGISampleRadius(double radius) = 0;
+  virtual double giSampleRadius() const = 0;
+
+  virtual void setGIPhotonsPerLight(int num) = 0;
+  virtual int giPhotonsPerLight() const = 0;
+
+  virtual void setPhotonTraceDepth(int reflection, int refraction, int sum) = 0;
+  virtual void photonTraceDepth(int& reflection, int& refraction, int& sum) const = 0;
+
+  virtual void setFinalGatheringEnabled(bool enabled) = 0;
+  virtual bool finalGatheringEnabled() const = 0;
+
+  virtual void setFGRayCount(int num) = 0;
+  virtual int fgRayCount() const = 0;
+
+  virtual void setFGRadiusState(bool bMin, bool bMax, bool bPixels) = 0;
+  virtual void fgSampleRadiusState(bool& bMin, bool& bMax, bool& bPixels) = 0;
+
+  virtual void setFGSampleRadius(double min, double max) = 0;
+  virtual void fgSampleRadius(double& min, double& max) const = 0;
+
+  virtual void setLightLuminanceScale(double luminance) = 0;
+  virtual double lightLuminanceScale() const = 0;
+
+  virtual void setDiagnosticMode(OdGiMrDiagnosticMode mode) = 0;
+  virtual OdGiMrDiagnosticMode diagnosticMode() const = 0;
+
+  virtual void setDiagnosticGridMode(OdGiMrDiagnosticGridMode mode, float fSize) = 0;
+  virtual void diagnosticGridMode(OdGiMrDiagnosticGridMode& mode, float& fSize) const = 0;
+
+  virtual void setDiagnosticPhotonMode(OdGiMrDiagnosticPhotonMode mode) = 0;
+  virtual OdGiMrDiagnosticPhotonMode diagnosticPhotonMode() const = 0;
+
+  virtual void setDiagnosticBSPMode(OdGiMrDiagnosticBSPMode mode) = 0;
+  virtual OdGiMrDiagnosticBSPMode diagnosticBSPMode() const = 0;
+
+  virtual void setExportMIEnabled(bool enabled) = 0;
+  virtual bool exportMIEnabled() const = 0;
+
+  virtual void setExportMIFileName(const OdString& miName) = 0;
+  virtual OdString exportMIFileName() const = 0;
+
+  virtual void setTileSize(int size) = 0;
+  virtual int tileSize() const = 0;
+
+  virtual void setTileOrder(OdGiMrTileOrder order) = 0;
+  virtual OdGiMrTileOrder tileOrder() const = 0;
+
+  virtual void setMemoryLimit(int limit) = 0;
+  virtual int memoryLimit() const = 0;
+
+  virtual void setEnergyMultiplier(float fScale) = 0;
+  virtual float energyMultiplier() const = 0;
+
+  virtual void setProgressMonitor(void* pMonitor) = 0;
+  virtual const void* progressMonitor() const = 0;
+
+  virtual void setExposureType(OdGiMrExposureType type) = 0;
+  virtual OdGiMrExposureType exposureType() const = 0;
+
+  virtual void setFinalGatheringMode(OdGiMrFinalGatheringMode mode) = 0;
+  virtual OdGiMrFinalGatheringMode finalGatheringMode() const = 0;
+
+  virtual void setShadowSamplingMultiplier(double multiplier) = 0;
+  virtual double shadowSamplingMultiplier() const = 0;
+
+  virtual void setExportMIMode(OdGiMrExportMIMode mode) = 0;
+  virtual OdGiMrExportMIMode exportMIMode() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMentalRayRenderSettingsTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiMentalRayRenderSettingsTraits> OdGiMentalRayRenderSettingsTraitsPtr;
+
+
+typedef enum
+{
+  krEQuitByRenderLevel = 0,
+  krEQuitByRenderTime  = 1
+}
+OdGiQuitCondition;
+
+typedef enum
+{
+  krESimplistic = 0,
+  krEBasic      = 1,
+  krEAdvanced   = 2
+}
+OdGiLightingMode;
+
+typedef enum
+{
+  krEBox      = 0,
+  krETriangle = 1,
+  krEGaussian = 2,
+  krELanczos  = 3,
+  krEMitchell = 4
+}
+OdGiFilterType;
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiRapidRTRenderSettingsTraits : public OdGiRenderSettingsTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiRapidRTRenderSettingsTraits);
+
+  virtual void setQuitCondition(OdGiQuitCondition condition) = 0;
+  virtual OdGiQuitCondition quitCondition() const = 0;
+
+  virtual void setDesiredRenderLevel(int level) = 0;
+  virtual int desiredRenderLevel() const = 0;
+
+  virtual void setDesiredRenderTime(int time) = 0;
+  virtual int desiredRenderTime() const = 0;
+
+  virtual void setLightingMode(OdGiLightingMode mode) = 0;
+  virtual OdGiLightingMode lightingMode() const = 0;
+
+  virtual void setFilterType(OdGiFilterType type) = 0;
+  virtual OdGiFilterType filterType() const = 0;
+
+  virtual void setFilterWidth(float width) = 0;
+  virtual float filterWidth() const = 0;
+
+  virtual void setFilterHeight(float height) = 0;
+  virtual float filterHeight() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiRapidRTRenderSettingsTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiRapidRTRenderSettingsTraits> OdGiRapidRTRenderSettingsTraitsPtr;
+
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiSolidBackgroundTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSolidBackgroundTraits);
+
+  virtual void setColorSolid(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorSolid() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiSolidBackgroundTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiSolidBackgroundTraits> OdGiSolidBackgroundTraitsPtr;
+
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiGradientBackgroundTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiGradientBackgroundTraits);
+
+  virtual void setColorTop(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorTop() const = 0;
+
+  virtual void setColorMiddle(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorMiddle() const  = 0;
+
+  virtual void setColorBottom(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorBottom() const  = 0;
+
+  virtual void setHorizon(double horizon) = 0;
+  virtual double horizon() const = 0;
+
+  virtual void setHeight(double height) = 0;
+  virtual double height() const = 0;
+
+  virtual void setRotation(double rotation) = 0;
+  virtual double rotation() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiGradientBackgroundTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiGradientBackgroundTraits> OdGiGradientBackgroundTraitsPtr;
+
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiImageBackgroundTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiImageBackgroundTraits);
+
+  virtual void setImageFilename(const OdString& filename) = 0;
+  virtual const OdString& imageFilename() const = 0;
+
+  virtual void setFitToScreen(bool bFitToScreen) = 0;
+  virtual bool fitToScreen() const = 0;
+
+  virtual void setMaintainAspectRatio(bool bMaintainAspectRatio) = 0;
+  virtual bool maintainAspectRatio() const = 0;
+
+  virtual void setUseTiling(bool bUseTiling) = 0;
+  virtual bool useTiling() const = 0;
+
+  virtual void setXOffset(double xOffset) = 0;
+  virtual double xOffset() const = 0;
+
+  virtual void setYOffset(double yOffset) = 0;
+  virtual double yOffset() const = 0;
+
+  virtual void setXScale(double xScale) = 0;
+  virtual double xScale() const = 0;
+
+  virtual void setYScale(double yScale) = 0;
+  virtual double yScale() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiImageBackgroundTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiImageBackgroundTraits> OdGiImageBackgroundTraitsPtr;
+
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiGroundPlaneBackgroundTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiGroundPlaneBackgroundTraits);
+
+  virtual void setColorSkyZenith(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorSkyZenith() const = 0;
+
+  virtual void setColorSkyHorizon(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorSkyHorizon() const = 0;
+
+  virtual void setColorUndergroundHorizon(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorUndergroundHorizon() const = 0;
+
+  virtual void setColorUndergroundAzimuth(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorUndergroundAzimuth() const = 0;
+
+  virtual void setColorGroundPlaneNear(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorGroundPlaneNear() const = 0;
+
+  virtual void setColorGroundPlaneFar(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor colorGroundPlaneFar() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiGroundPlaneBackgroundTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiGroundPlaneBackgroundTraits> OdGiGroundPlaneBackgroundTraitsPtr;
+
+
+/** \details
+    This class allows Gi classes to implement sky backgrounds.
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiSkyBackgroundTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSkyBackgroundTraits);
+
+  virtual void setSkyParameters(const OdGiSkyParameters& params) = 0;
+  virtual void skyParameters(OdGiSkyParameters& params) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiSkyBackgroundTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiSkyBackgroundTraits> OdGiSkyBackgroundTraitsPtr;
+
+
+/** \details
+    This class allows Gi classes to implement image base lighting backgrounds.
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiIBLBackgroundTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiIBLBackgroundTraits);
+
+  virtual void setEnable(bool bEnable) = 0;
+  virtual bool enable() const = 0;
+
+  virtual void setIBLImageName(const OdString& filename) = 0;
+  virtual const OdString& IBLImageName() const = 0;
+
+  virtual void setRotation(double rotation) = 0;
+  virtual double rotation() const = 0;
+
+  virtual void setDisplayImage(bool bDisplay) = 0;
+  virtual bool displayImage() const = 0;
+
+  virtual void setSecondaryBackground(OdDbStub* bgId) = 0;
+  virtual OdDbStub* secondaryBackground() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiIBLBackgroundTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiIBLBackgroundTraits> OdGiIBLBackgroundTraitsPtr;
+
+#endif // _GIENVIRONMENT_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironmentTraitsData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironmentTraitsData.h
new file mode 100755
index 0000000..be1235b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiEnvironmentTraitsData.h
@@ -0,0 +1,1147 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GI_ENVIRONMENT_TRAITS_DATA__
+#define __OD_GI_ENVIRONMENT_TRAITS_DATA__
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiEnvironment.h"
+#include "Gi/GiLightTraits.h" // Define OdGiSkyParameters
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiBackgroundTraitsData
+{
+protected:
+  OdGiDrawable::DrawableType m_type;
+
+protected:
+  OdGiBackgroundTraitsData()
+  {
+  }
+
+public:
+  OdGiDrawable::DrawableType type() const { return m_type; }
+
+  static void deleteBackgroundTraitsData(OdGiBackgroundTraitsData* pBackgroundTraits);
+
+  bool operator ==(const OdGiBackgroundTraitsData &data2) const
+  {
+    return m_type == data2.m_type;
+  }
+  bool operator !=(const OdGiBackgroundTraitsData &data2) const
+  {
+    return m_type != data2.m_type;
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiSolidBackgroundTraitsData : public OdGiBackgroundTraitsData
+{
+  OdCmEntityColor      m_color;
+
+public:
+  OdGiSolidBackgroundTraitsData() { m_type = OdGiDrawable::kSolidBackground; }
+
+  OdCmEntityColor color() const { return m_color; }
+  void setColor(const OdCmEntityColor& color) { m_color = color; }
+
+  bool operator ==(const OdGiSolidBackgroundTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiBackgroundTraitsData*>(this) == static_cast<const OdGiBackgroundTraitsData&>(data2)) &&
+           (m_color == data2.m_color));
+  }
+  bool operator !=(const OdGiSolidBackgroundTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiGradientBackgroundTraitsData : public OdGiBackgroundTraitsData
+{
+  OdCmEntityColor      m_colorTop;
+  OdCmEntityColor      m_colorMiddle;
+  OdCmEntityColor      m_colorBottom;
+  double               m_dHorizon;
+  double               m_dHeight;
+  double               m_dRotation;
+
+public:
+  OdGiGradientBackgroundTraitsData() : m_dHorizon(0.0), m_dHeight(0.0), m_dRotation(0.0) { m_type = OdGiDrawable::kGradientBackground; }
+
+  OdCmEntityColor colorTop() const { return m_colorTop; }
+  void setColorTop(const OdCmEntityColor& color) { m_colorTop = color; }
+  OdCmEntityColor colorMiddle() const { return m_colorMiddle; }
+  void setColorMiddle(const OdCmEntityColor& color) { m_colorMiddle = color; }
+  OdCmEntityColor colorBottom() const { return m_colorBottom; }
+  void setColorBottom(const OdCmEntityColor& color) { m_colorBottom = color; }
+  
+  double horizon() const { return m_dHorizon; }
+  double height() const { return m_dHeight; }
+  double rotation() const { return m_dRotation; }
+
+  void setHorizon(double value) { m_dHorizon = value; }
+  void setHeight(double value) { m_dHeight = value; }
+  void setRotation(double value) { m_dRotation = value; }
+
+  bool operator ==(const OdGiGradientBackgroundTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiBackgroundTraitsData*>(this) == static_cast<const OdGiBackgroundTraitsData&>(data2)) &&
+           (m_colorTop == data2.m_colorTop) &&
+           (m_colorMiddle == data2.m_colorMiddle) &&
+           (m_colorBottom == data2.m_colorBottom) &&
+           OdEqual(m_dHorizon, data2.m_dHorizon) &&
+           OdEqual(m_dHeight, data2.m_dHeight) &&
+           OdEqual(m_dRotation, data2.m_dRotation));
+  }
+  bool operator !=(const OdGiGradientBackgroundTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiImageBackgroundTraitsData : public OdGiBackgroundTraitsData
+{
+  OdString             m_imageFileName;
+  bool                 m_bFitToScreen;
+  bool                 m_bMaintainAspect;
+  bool                 m_bUseTiling;
+  OdGeVector2d         m_vOffset;
+  OdGeVector2d         m_vScale;
+
+public:
+  OdGiImageBackgroundTraitsData() : m_bFitToScreen(false), m_bMaintainAspect(false), m_bUseTiling(false) { m_type = OdGiDrawable::kImageBackground; }
+
+  const OdString& imageFilename() const { return m_imageFileName; }
+  void setImageFilename(const OdString& filename) { m_imageFileName = filename; }
+
+  bool fitToScreen() const { return m_bFitToScreen; }
+  bool maintainAspectRatio() const { return m_bMaintainAspect; }
+  bool useTiling() const { return m_bUseTiling; }
+
+  void setFitToScreen(bool flag) { m_bFitToScreen = flag; }
+  void setMaintainAspectRatio(bool flag) { m_bMaintainAspect = flag; }
+  void setUseTiling(bool flag) { m_bUseTiling = flag; }
+
+  void setOffset(double x, double y);
+
+  double xOffset() const { return m_vOffset.x; }
+  double yOffset() const { return m_vOffset.y; }
+
+  void setXOffset(double xOffset) { m_vOffset.x = xOffset; }
+  void setYOffset(double yOffset) { m_vOffset.y = yOffset; }
+
+  void setScale(double x, double y);
+
+  double xScale() const { return m_vScale.x; }
+  double yScale() const { return m_vScale.y; }
+
+  void setXScale(double xScale) { m_vScale.x = xScale; }
+  void setYScale(double yScale) { m_vScale.y = yScale; }
+
+  bool operator ==(const OdGiImageBackgroundTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiBackgroundTraitsData*>(this) == static_cast<const OdGiBackgroundTraitsData&>(data2)) &&
+           (m_imageFileName == data2.m_imageFileName) &&
+           (m_bFitToScreen == data2.m_bFitToScreen) &&
+           (m_bMaintainAspect == data2.m_bMaintainAspect) &&
+           (m_bUseTiling == data2.m_bUseTiling) &&
+           (m_vOffset == data2.m_vOffset) &&
+           (m_vScale == data2.m_vScale));
+  }
+  bool operator !=(const OdGiImageBackgroundTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+inline void OdGiImageBackgroundTraitsData::setOffset(double x, double y)
+{ 
+  m_vOffset.set(x, y);
+}
+
+inline void OdGiImageBackgroundTraitsData::setScale(double x, double y)
+{ 
+  m_vScale.set(x, y);
+}
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiGroundPlaneBackgroundTraitsData : public OdGiBackgroundTraitsData
+{
+  OdCmEntityColor      m_colorSkyZenith;
+  OdCmEntityColor      m_colorSkyHorizon;
+  OdCmEntityColor      m_colorUndergroundHorizon;
+  OdCmEntityColor      m_colorUndergroundAzimuth;
+  OdCmEntityColor      m_colorGroundPlaneNear;
+  OdCmEntityColor      m_colorGroundPlaneFar;
+
+public:
+  OdGiGroundPlaneBackgroundTraitsData() { m_type = OdGiDrawable::kGroundPlaneBackground; }
+
+  OdCmEntityColor colorSkyZenith() const { return m_colorSkyZenith; }
+  void setColorSkyZenith(const OdCmEntityColor& color) { m_colorSkyZenith = color; }
+  OdCmEntityColor colorSkyHorizon() const { return m_colorSkyHorizon; }
+  void setColorSkyHorizon(const OdCmEntityColor& color) { m_colorSkyHorizon = color; }
+  OdCmEntityColor colorUndergroundHorizon() const { return m_colorUndergroundHorizon; }
+  void setColorUndergroundHorizon(const OdCmEntityColor& color) { m_colorUndergroundHorizon = color; }
+  OdCmEntityColor colorUndergroundAzimuth() const { return m_colorUndergroundAzimuth; }
+  void setColorUndergroundAzimuth(const OdCmEntityColor& color) { m_colorUndergroundAzimuth = color; }
+  OdCmEntityColor colorGroundPlaneNear() const { return m_colorGroundPlaneNear; }
+  void setColorGroundPlaneNear(const OdCmEntityColor& color) { m_colorGroundPlaneNear = color; }
+  OdCmEntityColor colorGroundPlaneFar() const { return m_colorGroundPlaneFar; }
+  void setColorGroundPlaneFar(const OdCmEntityColor& color) { m_colorGroundPlaneFar = color; }
+
+  bool operator ==(const OdGiGroundPlaneBackgroundTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiBackgroundTraitsData*>(this) == static_cast<const OdGiBackgroundTraitsData&>(data2)) &&
+           (m_colorSkyZenith == data2.m_colorSkyZenith) &&
+           (m_colorSkyHorizon == data2.m_colorSkyHorizon) &&
+           (m_colorUndergroundHorizon == data2.m_colorUndergroundHorizon) &&
+           (m_colorUndergroundAzimuth == data2.m_colorUndergroundAzimuth) &&
+           (m_colorGroundPlaneNear == data2.m_colorGroundPlaneNear) &&
+           (m_colorGroundPlaneFar == data2.m_colorGroundPlaneFar));
+  }
+  bool operator !=(const OdGiGroundPlaneBackgroundTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiSkyBackgroundTraitsData : public OdGiBackgroundTraitsData
+{
+  bool            m_status;
+  double          m_intensityFactor;
+  double          m_haze;
+  double          m_horizonHeight;
+  double          m_horizonBlur;
+  OdCmEntityColor m_groundColor;
+  OdCmEntityColor m_nightColor;
+  bool            m_aerialPerspective;
+  double          m_visibilityDistance;
+  double          m_diskScale;
+  double          m_glowIntensity;
+  double          m_diskIntensity;
+  OdUInt16        m_solarDiskSamples;
+  OdGeVector3d    m_sunDirection;
+  double          m_redBlueShift;
+  double          m_saturation;
+public:
+  OdGiSkyBackgroundTraitsData() { m_type = OdGiDrawable::kSkyBackground; }
+
+  void skyParameters(OdGiSkyParameters& params) const;
+  void setSkyParameters(const OdGiSkyParameters& params);
+
+  bool operator ==(const OdGiSkyBackgroundTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiBackgroundTraitsData*>(this) == static_cast<const OdGiBackgroundTraitsData&>(data2)) &&
+           (m_status == data2.m_status) &&
+           OdEqual(m_intensityFactor, data2.m_intensityFactor) &&
+           OdEqual(m_haze, data2.m_haze) &&
+           OdEqual(m_horizonHeight, data2.m_horizonHeight) &&
+           OdEqual(m_horizonBlur, data2.m_horizonBlur) &&
+           (m_groundColor == data2.m_groundColor) &&
+           (m_nightColor == data2.m_nightColor) &&
+           (m_aerialPerspective == data2.m_aerialPerspective) &&
+           OdEqual(m_visibilityDistance, data2.m_visibilityDistance) &&
+           OdEqual(m_diskScale, data2.m_diskScale) &&
+           OdEqual(m_glowIntensity, data2.m_glowIntensity) &&
+           OdEqual(m_diskIntensity, data2.m_diskIntensity) &&
+           (m_solarDiskSamples == data2.m_solarDiskSamples) &&
+           (m_sunDirection == data2.m_sunDirection) &&
+           OdEqual(m_redBlueShift, data2.m_redBlueShift) &&
+           OdEqual(m_saturation, data2.m_saturation));
+  }
+  bool operator !=(const OdGiSkyBackgroundTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+inline void OdGiSkyBackgroundTraitsData::skyParameters(OdGiSkyParameters& params) const
+{
+  params.setIllumination(m_status);
+  params.setIntensityFactor(m_intensityFactor);
+  params.setHaze(m_haze);
+  params.setHorizonHeight(m_horizonHeight);
+  params.setHorizonBlur(m_horizonBlur);
+  params.setGroundColor(m_groundColor);
+  params.setNightColor(m_nightColor);
+  params.setAerialPerspective(m_aerialPerspective);
+  params.setVisibilityDistance(m_visibilityDistance);
+  params.setDiskScale(m_diskScale);
+  params.setGlowIntensity(m_glowIntensity);
+  params.setDiskIntensity(m_diskIntensity);
+  params.setSolarDiskSamples(m_solarDiskSamples);
+  params.setSunDirection(m_sunDirection);
+  params.setRedBlueShift(m_redBlueShift);
+  params.setSaturation(m_saturation);
+}
+
+inline void OdGiSkyBackgroundTraitsData::setSkyParameters(const OdGiSkyParameters& params)
+{
+  m_status = params.illumination();
+  m_intensityFactor = params.intensityFactor();
+  m_haze = params.haze();
+  m_horizonHeight = params.horizonHeight();
+  m_horizonBlur = params.horizonBlur();
+  m_groundColor = params.groundColor();
+  m_nightColor = params.nightColor();
+  m_aerialPerspective = params.aerialPerspective();
+  m_visibilityDistance = params.visibilityDistance();
+  m_diskScale = params.diskScale();
+  m_glowIntensity = params.glowIntensity();
+  m_diskIntensity = params.diskIntensity();
+  m_solarDiskSamples = params.solarDiskSamples();
+  m_sunDirection = params.sunDirection();
+  m_redBlueShift = params.redBlueShift();
+  m_saturation = params.saturation();
+}
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiIBLBackgroundTraitsData : public OdGiBackgroundTraitsData
+{
+  bool      m_bEnable;
+  OdString  m_iblFileName;
+  double    m_rotation;
+  bool      m_bDisplay;
+  OdDbStub *m_secBkgndId;
+
+public:
+  OdGiIBLBackgroundTraitsData() { m_type = OdGiDrawable::kImageBasedLightingBackground; }
+
+  bool isEnabled() const { return m_bEnable; }
+  void enable(bool bSet) { m_bEnable = bSet; }
+
+  const OdString &IBLFileName() const { return m_iblFileName; }
+  void setIBLFileName(const OdString &iblFileName) { m_iblFileName = iblFileName; }
+
+  double rotation() const { return m_rotation; }
+  void setRotation(double angle) { m_rotation = angle; }
+
+  bool displayImage() const { return m_bDisplay; }
+  void setDisplayImage(bool bSet) { m_bDisplay = bSet; }
+
+  OdDbStub *secondaryBackground() const { return m_secBkgndId; }
+  void setSecondaryBackground(OdDbStub *secBkgndId) { m_secBkgndId = secBkgndId; }
+
+  bool operator ==(const OdGiIBLBackgroundTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiBackgroundTraitsData*>(this) == static_cast<const OdGiBackgroundTraitsData&>(data2)) &&
+           (m_bEnable == data2.m_bEnable) &&
+           (m_iblFileName == data2.m_iblFileName) &&
+           OdEqual(m_rotation, data2.m_rotation) &&
+           (m_bDisplay == data2.m_bDisplay) &&
+           (m_secBkgndId == data2.m_secBkgndId));
+  }
+  bool operator !=(const OdGiIBLBackgroundTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+// Delete background traits data by background type
+
+inline void OdGiBackgroundTraitsData::deleteBackgroundTraitsData(OdGiBackgroundTraitsData* pBackgroundTraits)
+{
+  switch (pBackgroundTraits->type())
+  {
+    case OdGiDrawable::kSolidBackground:
+      delete static_cast<OdGiSolidBackgroundTraitsData*>(pBackgroundTraits);
+    break;
+    case OdGiDrawable::kGradientBackground:
+      delete static_cast<OdGiGradientBackgroundTraitsData*>(pBackgroundTraits);
+    break;
+    case OdGiDrawable::kImageBackground:
+      delete static_cast<OdGiImageBackgroundTraitsData*>(pBackgroundTraits);
+    break;
+    case OdGiDrawable::kGroundPlaneBackground:
+      delete static_cast<OdGiGroundPlaneBackgroundTraitsData*>(pBackgroundTraits);
+    break;
+    case OdGiDrawable::kSkyBackground:
+      delete static_cast<OdGiSkyBackgroundTraitsData*>(pBackgroundTraits);
+    break;
+    case OdGiDrawable::kImageBasedLightingBackground:
+      delete static_cast<OdGiIBLBackgroundTraitsData*>(pBackgroundTraits);
+    break;
+    default:
+      ODA_FAIL();
+  }
+}
+
+/** \details
+    Library: Gi
+    <group OdGi_Classes>
+*/
+class OdGiRenderEnvironmentTraitsData
+{
+  bool                   m_bEnable;
+  bool                   m_bIsBackground;
+  OdCmEntityColor        m_FogColor;
+  double                 m_dNearDist;
+  double                 m_dFarDist;
+  double                 m_dNearPerc;
+  double                 m_dFarPerc;
+  OdGiMaterialTexturePtr m_envMap;
+public:
+  OdGiRenderEnvironmentTraitsData()
+    : m_bEnable(false)
+    , m_bIsBackground(false)
+    , m_FogColor(128, 128, 128)
+    , m_dNearDist(0.0)
+    , m_dFarDist(100.0)
+    , m_dNearPerc(0.0)
+    , m_dFarPerc(100.0)
+  {
+  }
+
+  void setEnable(bool bEnable) { m_bEnable = bEnable; }
+  bool enable() const { return m_bEnable; }
+  void setIsBackground(bool bEnable) { m_bIsBackground = bEnable; }
+  bool isBackground() const { return m_bIsBackground; }
+  void setFogColor(const OdCmEntityColor &color) { m_FogColor = color; }
+  const OdCmEntityColor &fogColor() const { return m_FogColor; }
+  void setNearDistance(double nearDist) { m_dNearDist = nearDist; }
+  double nearDistance() const { return m_dNearDist; }
+  void setFarDistance(double farDist) { m_dFarDist = farDist; }
+  double farDistance() const { return m_dFarDist; }
+  void setNearPercentage(double nearPct) { m_dNearPerc = nearPct; }
+  double nearPercentage() const { return m_dNearPerc; }
+  void setFarPercentage(double farPct) { m_dFarPerc = farPct; }
+  double farPercentage() const { return m_dFarPerc; }
+  void setEnvironmentMap(const OdGiMaterialTexture *map)
+  {
+    m_envMap.release();
+    if (map)
+    {
+      m_envMap = OdGiMaterialTexture::cast(map->clone());
+    }
+  }
+  OdGiMaterialTexturePtr environmentMap() const { return m_envMap; }
+
+  bool operator ==(const OdGiRenderEnvironmentTraitsData &data2) const
+  {
+    return ((m_bEnable == data2.m_bEnable) &&
+           (m_bIsBackground == data2.m_bIsBackground) &&
+           (m_FogColor == data2.m_FogColor) &&
+           OdEqual(m_dNearDist, data2.m_dNearDist) &&
+           OdEqual(m_dFarDist, data2.m_dFarDist) &&
+           OdEqual(m_dNearPerc, data2.m_dNearPerc) &&
+           OdEqual(m_dFarPerc, data2.m_dFarPerc) &&
+           ((m_envMap.isNull() && data2.m_envMap.isNull()) ||
+            (!m_envMap.isNull() && data2.m_envMap.isNull() && (*m_envMap == *data2.m_envMap))));
+  }
+  bool operator !=(const OdGiRenderEnvironmentTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+/** \details
+    Library: Gi
+    <group OdGi_Classes>
+*/
+class OdGiRenderSettingsTraitsData
+{
+  bool   m_bMatEnable;
+  bool   m_bTextureSampling;
+  bool   m_bBackFaces;
+  bool   m_bShadows;
+  bool   m_bDiagnosticBack;
+  double m_dScaleFactor;
+public:
+  OdGiRenderSettingsTraitsData()
+    : m_bMatEnable(true)
+    , m_bTextureSampling(true)
+    , m_bBackFaces(true)
+    , m_bShadows(true)
+    , m_bDiagnosticBack(false)
+    , m_dScaleFactor(1.0)
+  {
+  }
+  virtual ~OdGiRenderSettingsTraitsData() { } // Exclude warnings in some compilers
+
+  void setMaterialEnabled(bool enabled) { m_bMatEnable = enabled; }
+  bool materialEnabled() const { return m_bMatEnable; }
+  void setTextureSampling(bool enabled) { m_bTextureSampling = enabled; }
+  bool textureSampling() const { return m_bTextureSampling; }
+  void setBackFacesEnabled(bool enabled) { m_bBackFaces = enabled; }
+  bool backFacesEnabled() const { return m_bBackFaces; }
+  void setShadowsEnabled(bool enabled) { m_bShadows = enabled; }
+  bool shadowsEnabled() const { return m_bShadows; }
+  void setDiagnosticBackgroundEnabled(bool enabled) { m_bDiagnosticBack = enabled; }
+  bool diagnosticBackgroundEnabled() const { return m_bDiagnosticBack; }
+  void setModelScaleFactor(double scaleFactor) { m_dScaleFactor = scaleFactor; }
+  double modelScaleFactor() const { return m_dScaleFactor; }
+
+  bool operator ==(const OdGiRenderSettingsTraitsData &data2) const
+  {
+    return ((m_bMatEnable == data2.m_bMatEnable) &&
+           (m_bTextureSampling == data2.m_bTextureSampling) &&
+           (m_bBackFaces == data2.m_bBackFaces) &&
+           (m_bShadows == data2.m_bShadows) &&
+           (m_bDiagnosticBack == data2.m_bDiagnosticBack) &&
+           OdEqual(m_dScaleFactor, data2.m_dScaleFactor));
+  }
+  bool operator !=(const OdGiRenderSettingsTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+/** \details
+    Library: Gi
+    <group OdGi_Classes>
+*/
+class OdGiMentalRayRenderSettingsTraitsData : public virtual OdGiRenderSettingsTraitsData
+{
+  int                        m_iSamplingMin;
+  int                        m_iSamplingMax;
+  OdGiMrFilter               m_SamplingFilter;
+  double                     m_dSamplingWidth;
+  double                     m_dSamplingHeight;
+  float                      m_fContrastR;
+  float                      m_fContrastG;
+  float                      m_fContrastB;
+  float                      m_fContrastA;
+  OdGiMrShadowMode           m_ShadowMode;
+  bool                       m_bShadowMapEnabled;
+  bool                       m_bRayTraceEnabled;
+  int                        m_iRTReflection;
+  int                        m_iRTRefraction;
+  int                        m_iRTSum;
+  bool                       m_bGlobalIllum;
+  int                        m_iGISampleCount;
+  bool                       m_bSampleRadEnabled;
+  double                     m_dSampleRad;
+  int                        m_iPhotonsPerLight;
+  int                        m_iPhotonsReflection;
+  int                        m_iPhotonsRefraction;
+  int                        m_iPhotonsSum;
+  bool                       m_bFGEnabled;
+  int                        m_iFGRayCount;
+  bool                       m_bFGRadMin;
+  bool                       m_bFGRadMax;
+  bool                       m_bFGPixels;
+  double                     m_dFGSRadMin;
+  double                     m_dFGSRadMax;
+  double                     m_dLightLumScale;
+  OdGiMrDiagnosticMode       m_DiagMode;
+  OdGiMrDiagnosticGridMode   m_DiagGridMode;
+  float                      m_fDiagGridSize;
+  OdGiMrDiagnosticPhotonMode m_DiagPhtMode;
+  OdGiMrDiagnosticBSPMode    m_DiagBSPMode;
+  bool                       m_bExportMIEnabled;
+  OdString                   m_sMIFile;
+  int                        m_iTileSize;
+  OdGiMrTileOrder            m_TileOrder;
+  int                        m_iMemLimit;
+  float                      m_fEnergyMult;
+  void*                      m_pProgressMonitor;
+  OdGiMrExposureType         m_ExposureType;
+  OdGiMrFinalGatheringMode   m_FGMode;
+  double                     m_dShadowMult;
+  OdGiMrExportMIMode         m_MIMode;
+public:
+  OdGiMentalRayRenderSettingsTraitsData()
+    : OdGiRenderSettingsTraitsData()
+    , m_iSamplingMin(-1)
+    , m_iSamplingMax(0)
+    , m_SamplingFilter(krBox)
+    , m_dSamplingWidth(1.0)
+    , m_dSamplingHeight(1.0)
+    , m_fContrastR(0.1f)
+    , m_fContrastG(0.1f)
+    , m_fContrastB(0.1f)
+    , m_fContrastA(0.1f)
+    , m_ShadowMode(krSimple)
+    , m_bShadowMapEnabled(true)
+    , m_bRayTraceEnabled(true)
+    , m_iRTReflection(2)
+    , m_iRTRefraction(2)
+    , m_iRTSum(4)
+    , m_bGlobalIllum(false)
+    , m_iGISampleCount(500)
+    , m_bSampleRadEnabled(false)
+    , m_dSampleRad(1.0)
+    , m_iPhotonsPerLight(10000)
+    , m_iPhotonsReflection(5)
+    , m_iPhotonsRefraction(5)
+    , m_iPhotonsSum(5)
+    , m_bFGEnabled(false)
+    , m_iFGRayCount(1000)
+    , m_bFGRadMin(false)
+    , m_bFGRadMax(false)
+    , m_bFGPixels(false)
+    , m_dFGSRadMin(1.0)
+    , m_dFGSRadMax(1.0)
+    , m_dLightLumScale(1.0)
+    , m_DiagMode(krOff)
+    , m_DiagGridMode(krObject)
+    , m_fDiagGridSize(10.0f)
+    , m_DiagPhtMode(krDensity)
+    , m_DiagBSPMode(krDepth)
+    , m_bExportMIEnabled(false)
+    , m_sMIFile()
+    , m_iTileSize(32)
+    , m_TileOrder(krHilbert)
+    , m_iMemLimit(1048)
+    , m_fEnergyMult(1.0f)
+    , m_pProgressMonitor(NULL)
+    , m_ExposureType(krAutomatic)
+    , m_FGMode(krFinalGatherAuto)
+    , m_dShadowMult(1.0)
+    , m_MIMode(krExportMIOff)
+  {
+  }
+
+  void setSampling(int min, int max)
+  {
+    m_iSamplingMin = min;
+    m_iSamplingMax = max;
+  }
+  void sampling(int& min, int& max) const
+  {
+    min = m_iSamplingMin;
+    max = m_iSamplingMax;
+  }
+  void setSamplingFilter(OdGiMrFilter filter, double width, double height)
+  {
+    m_SamplingFilter = filter;
+    m_dSamplingWidth = width;
+    m_dSamplingHeight = height;
+  }
+  void samplingFilter(OdGiMrFilter& filter, double& width, double& height) const
+  {
+    filter = m_SamplingFilter;
+    width = m_dSamplingWidth;
+    height = m_dSamplingHeight;
+  }
+  void setSamplingContrastColor(float r, float g, float b, float a)
+  {
+    m_fContrastR = r;
+    m_fContrastG = g;
+    m_fContrastB = b;
+    m_fContrastA = a;
+  }
+  void samplingContrastColor(float& r, float& g, float& b, float& a) const
+  {
+    r = m_fContrastR;
+    g = m_fContrastG;
+    b = m_fContrastB;
+    a = m_fContrastA;
+  }
+  void setShadowMode(OdGiMrShadowMode mode)
+  {
+    m_ShadowMode = mode;
+  }
+  OdGiMrShadowMode shadowMode() const
+  {
+    return m_ShadowMode;
+  }
+  void setShadowMapEnabled(bool enabled)
+  {
+    m_bShadowMapEnabled = enabled;
+  }
+  bool shadowMapEnabled() const
+  {
+    return m_bShadowMapEnabled;
+  }
+  void setRayTraceEnabled(bool enabled)
+  {
+    m_bRayTraceEnabled = enabled;
+  }
+  bool rayTraceEnabled() const
+  {
+    return m_bRayTraceEnabled;
+  }
+  void setRayTraceDepth(int reflection, int refraction, int sum)
+  {
+    m_iRTReflection = reflection;
+    m_iRTRefraction = refraction;
+    m_iRTSum = sum;
+  }
+  void rayTraceDepth(int& reflection, int& refraction, int& sum) const
+  {
+    reflection = m_iRTReflection;
+    refraction = m_iRTRefraction;
+    sum = m_iRTSum;
+  }
+  void setGlobalIlluminationEnabled(bool enabled)
+  {
+    m_bGlobalIllum = enabled;
+  }
+  bool globalIlluminationEnabled() const
+  {
+    return m_bGlobalIllum;
+  }
+  void setGISampleCount(int num)
+  {
+    m_iGISampleCount = num;
+  }
+  int giSampleCount() const
+  {
+    return m_iGISampleCount;
+  }
+  void setGISampleRadiusEnabled(bool enabled)
+  {
+    m_bSampleRadEnabled = enabled;
+  }
+  bool giSampleRadiusEnabled() const
+  {
+    return m_bSampleRadEnabled;
+  }
+  void setGISampleRadius(double radius)
+  {
+    m_dSampleRad = radius;
+  }
+  double giSampleRadius() const
+  {
+    return m_dSampleRad;
+  }
+  void setGIPhotonsPerLight(int num)
+  {
+    m_iPhotonsPerLight = num;
+  }
+  int giPhotonsPerLight() const
+  {
+    return m_iPhotonsPerLight;
+  }
+  void setPhotonTraceDepth(int reflection, int refraction, int sum)
+  {
+    m_iPhotonsReflection = reflection;
+    m_iPhotonsRefraction = refraction;
+    m_iPhotonsSum = sum;
+  }
+  void photonTraceDepth(int& reflection, int& refraction, int& sum) const
+  {
+    reflection = m_iPhotonsReflection;
+    refraction = m_iPhotonsRefraction;
+    sum = m_iPhotonsSum;
+  }
+  void setFinalGatheringEnabled(bool enabled)
+  {
+    m_bFGEnabled = enabled;
+  }
+  bool finalGatheringEnabled() const
+  {
+    return m_bFGEnabled;
+  }
+  void setFGRayCount(int num)
+  {
+    m_iFGRayCount = num;
+  }
+  int fgRayCount() const
+  {
+    return m_iFGRayCount;
+  }
+  void setFGRadiusState(bool bMin, bool bMax, bool bPixels)
+  {
+    m_bFGRadMin = bMin;
+    m_bFGRadMax = bMax;
+    m_bFGPixels = bPixels;
+  }
+  void fgSampleRadiusState(bool& bMin, bool& bMax, bool& bPixels)
+  {
+    bMin = m_bFGRadMin;
+    bMax = m_bFGRadMax;
+    bPixels = m_bFGPixels;
+  }
+  void setFGSampleRadius(double min, double max)
+  {
+    m_dFGSRadMin = min;
+    m_dFGSRadMax = max;
+  }
+  void fgSampleRadius(double& min, double& max) const
+  {
+    min = m_dFGSRadMin;
+    max = m_dFGSRadMax;
+  }
+  void setLightLuminanceScale(double luminance)
+  {
+    m_dLightLumScale = luminance;
+  }
+  double lightLuminanceScale() const
+  {
+    return m_dLightLumScale;
+  }
+  void setDiagnosticMode(OdGiMrDiagnosticMode mode)
+  {
+    m_DiagMode = mode;
+  }
+  OdGiMrDiagnosticMode diagnosticMode() const
+  {
+    return m_DiagMode;
+  }
+  void setDiagnosticGridMode(OdGiMrDiagnosticGridMode mode, float fSize)
+  {
+    m_DiagGridMode = mode;
+    m_fDiagGridSize = fSize;
+  }
+  void diagnosticGridMode(OdGiMrDiagnosticGridMode& mode, float& fSize) const
+  {
+    mode = m_DiagGridMode;
+    fSize = m_fDiagGridSize;
+  }
+  void setDiagnosticPhotonMode(OdGiMrDiagnosticPhotonMode mode)
+  {
+    m_DiagPhtMode = mode;
+  }
+  OdGiMrDiagnosticPhotonMode diagnosticPhotonMode() const
+  {
+    return m_DiagPhtMode;
+  }
+  void setDiagnosticBSPMode(OdGiMrDiagnosticBSPMode mode)
+  {
+    m_DiagBSPMode = mode;
+  }
+  OdGiMrDiagnosticBSPMode diagnosticBSPMode() const
+  {
+    return m_DiagBSPMode;
+  }
+  void setExportMIEnabled(bool enabled)
+  {
+    m_bExportMIEnabled = enabled;
+  }
+  bool exportMIEnabled() const
+  {
+    return m_bExportMIEnabled;
+  }
+  void setExportMIFileName(const OdString& miName)
+  {
+    m_sMIFile = miName;
+  }
+  const OdString &exportMIFileName() const
+  {
+    return m_sMIFile;
+  }
+  void setTileSize(int size)
+  {
+    m_iTileSize = size;
+  }
+  int tileSize() const
+  {
+    return m_iTileSize;
+  }
+  void setTileOrder(OdGiMrTileOrder order)
+  {
+    m_TileOrder = order;
+  }
+  OdGiMrTileOrder tileOrder() const
+  {
+    return m_TileOrder;
+  }
+  void setMemoryLimit(int limit)
+  {
+    m_iMemLimit = limit;
+  }
+  int memoryLimit() const
+  {
+    return m_iMemLimit;
+  }
+  void setEnergyMultiplier(float fScale)
+  {
+    m_fEnergyMult = fScale;
+  }
+  float energyMultiplier() const
+  {
+    return m_fEnergyMult;
+  }
+  void setProgressMonitor(void* pMonitor)
+  {
+    m_pProgressMonitor = pMonitor;
+  }
+  const void* progressMonitor() const
+  {
+    return m_pProgressMonitor;
+  }
+  void setExposureType(OdGiMrExposureType type)
+  {
+    m_ExposureType = type;
+  }
+  OdGiMrExposureType exposureType() const
+  {
+    return m_ExposureType;
+  }
+  void setFinalGatheringMode(OdGiMrFinalGatheringMode mode)
+  {
+    m_FGMode = mode;
+  }
+  OdGiMrFinalGatheringMode finalGatheringMode() const
+  {
+    return m_FGMode;
+  }
+  void setShadowSamplingMultiplier(double multiplier)
+  {
+    m_dShadowMult = multiplier;
+  }
+  double shadowSamplingMultiplier() const
+  {
+    return m_dShadowMult;
+  }
+  void setExportMIMode(OdGiMrExportMIMode mode)
+  {
+    m_MIMode = mode;
+  }
+  OdGiMrExportMIMode exportMIMode() const
+  {
+    return m_MIMode;
+  }
+
+  bool operator !=(const OdGiMentalRayRenderSettingsTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiRenderSettingsTraitsData*>(this) != static_cast<const OdGiRenderSettingsTraitsData&>(data2)) ||
+           (m_iSamplingMin != data2.m_iSamplingMin) ||
+           (m_iSamplingMax != data2.m_iSamplingMax) ||
+           (m_SamplingFilter != data2.m_SamplingFilter) ||
+           !OdEqual(m_dSamplingWidth, data2.m_dSamplingWidth) ||
+           !OdEqual(m_dSamplingHeight, data2.m_dSamplingHeight) ||
+           (m_fContrastR != data2.m_fContrastR) ||
+           (m_fContrastG != data2.m_fContrastG) ||
+           (m_fContrastB != data2.m_fContrastB) ||
+           (m_fContrastA != data2.m_fContrastA) ||
+           (m_ShadowMode != data2.m_ShadowMode) ||
+           (m_bShadowMapEnabled != data2.m_bShadowMapEnabled) ||
+           (m_bRayTraceEnabled != data2.m_bRayTraceEnabled) ||
+           (m_iRTReflection != data2.m_iRTReflection) ||
+           (m_iRTRefraction != data2.m_iRTRefraction) ||
+           (m_iRTSum != data2.m_iRTSum) ||
+           (m_bGlobalIllum != data2.m_bGlobalIllum) ||
+           (m_iGISampleCount != data2.m_iGISampleCount) ||
+           (m_bSampleRadEnabled != data2.m_bSampleRadEnabled) ||
+           !OdEqual(m_dSampleRad, data2.m_dSampleRad) ||
+           (m_iPhotonsPerLight != data2.m_iPhotonsPerLight) ||
+           (m_iPhotonsReflection != data2.m_iPhotonsReflection) ||
+           (m_iPhotonsRefraction != data2.m_iPhotonsRefraction) ||
+           (m_iPhotonsSum != data2.m_iPhotonsSum) ||
+           (m_bFGEnabled != data2.m_bFGEnabled) ||
+           (m_iFGRayCount != data2.m_iFGRayCount) ||
+           (m_bFGRadMin != data2.m_bFGRadMin) ||
+           (m_bFGRadMax != data2.m_bFGRadMax) ||
+           (m_bFGPixels != data2.m_bFGPixels) ||
+           !OdEqual(m_dFGSRadMin, data2.m_dFGSRadMin) ||
+           !OdEqual(m_dFGSRadMax, data2.m_dFGSRadMax) ||
+           !OdEqual(m_dLightLumScale, data2.m_dLightLumScale) ||
+           (m_DiagMode != data2.m_DiagMode) ||
+           (m_DiagGridMode != data2.m_DiagGridMode) ||
+           (m_fDiagGridSize != data2.m_fDiagGridSize) ||
+           (m_DiagPhtMode != data2.m_DiagPhtMode) ||
+           (m_DiagBSPMode != data2.m_DiagBSPMode) ||
+           (m_bExportMIEnabled != data2.m_bExportMIEnabled) ||
+           (m_sMIFile != data2.m_sMIFile) ||
+           (m_iTileSize != data2.m_iTileSize) ||
+           (m_TileOrder != data2.m_TileOrder) ||
+           (m_iMemLimit != data2.m_iMemLimit) ||
+           (m_fEnergyMult != data2.m_fEnergyMult) ||
+           (m_pProgressMonitor != data2.m_pProgressMonitor) ||
+           (m_ExposureType != data2.m_ExposureType) ||
+           (m_FGMode != data2.m_FGMode) ||
+           !OdEqual(m_dShadowMult, data2.m_dShadowMult) ||
+           (m_MIMode != data2.m_MIMode));
+  }
+  bool operator ==(const OdGiMentalRayRenderSettingsTraitsData &data2) const
+  {
+    return !(*this != data2);
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiRapidRTRenderSettingsTraitsData : public virtual OdGiRenderSettingsTraitsData
+{
+  OdGiQuitCondition          m_QuitCondition;
+  int                        m_iRenderLevel;
+  int                        m_iRenderTime;
+  OdGiLightingMode           m_LightingModel;
+  OdGiFilterType             m_FilterType;
+  float                      m_fFilterWidth;
+  float                      m_fFilterHeight;
+public:
+  OdGiRapidRTRenderSettingsTraitsData()
+    : OdGiRenderSettingsTraitsData()
+    , m_QuitCondition(krEQuitByRenderLevel)
+    , m_iRenderLevel(1)
+    , m_iRenderTime(1)
+    , m_LightingModel(krEBasic)
+    , m_FilterType(krEBox)
+    , m_fFilterWidth(1.0f)
+    , m_fFilterHeight(1.0f)
+  {
+  }
+
+  void setQuitCondition(OdGiQuitCondition condition)
+  {
+    m_QuitCondition = condition;
+  }
+  OdGiQuitCondition quitCondition() const
+  {
+    return m_QuitCondition;
+  }
+  void setDesiredRenderLevel(int level)
+  {
+    m_iRenderLevel = level;
+  }
+  int desiredRenderLevel() const
+  {
+    return m_iRenderLevel;
+  }
+  void setDesiredRenderTime(int time)
+  {
+    m_iRenderTime = time;
+  }
+  int desiredRenderTime() const
+  {
+    return m_iRenderTime;
+  }
+  void setLightingMode(OdGiLightingMode mode)
+  {
+    m_LightingModel = mode;
+  }
+  OdGiLightingMode lightingMode() const
+  {
+    return m_LightingModel;
+  }
+  void setFilterType(OdGiFilterType type)
+  {
+    m_FilterType = type;
+  }
+  OdGiFilterType filterType() const
+  {
+    return m_FilterType;
+  }
+  void setFilterWidth(float width)
+  {
+    m_fFilterWidth = width;
+  }
+  float filterWidth() const
+  {
+    return m_fFilterWidth;
+  }
+  void setFilterHeight(float height)
+  {
+    m_fFilterHeight = height;
+  }
+  float filterHeight() const
+  {
+    return m_fFilterHeight;
+  }
+
+  bool operator !=(const OdGiRapidRTRenderSettingsTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiRenderSettingsTraitsData*>(this) != static_cast<const OdGiRenderSettingsTraitsData&>(data2)) ||
+      (m_QuitCondition != data2.m_QuitCondition) ||
+      (m_iRenderLevel != data2.m_iRenderLevel) ||
+      (m_iRenderTime != data2.m_iRenderTime) ||
+      (m_LightingModel != data2.m_LightingModel) ||
+      (m_FilterType != data2.m_FilterType) ||
+      (m_fFilterWidth != data2.m_fFilterWidth) ||
+      (m_fFilterHeight != data2.m_fFilterHeight));
+  }
+  bool operator ==(const OdGiRapidRTRenderSettingsTraitsData &data2) const
+  {
+    return !(*this != data2);
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class OdGiCombinedRenderSettingsTraitsData : public OdGiMentalRayRenderSettingsTraitsData
+                                           , public OdGiRapidRTRenderSettingsTraitsData
+{
+  OdUInt32 m_kindOfRenderSettings;
+public:
+  OdGiCombinedRenderSettingsTraitsData()
+    : m_kindOfRenderSettings(0)
+  {
+  }
+
+  enum KindOfRenderSettings
+  {
+    kMentalRaySettings = 1,
+    kRapidRTSettings   = 2
+  };
+  void setKindOfRenderSettings(OdUInt32 nFlags)
+  {
+    m_kindOfRenderSettings = nFlags;
+  }
+  OdUInt32 kindOfRenderSettings() const
+  {
+    return m_kindOfRenderSettings;
+  }
+  void modifyKindOfRenderSettings(OdUInt32 nFlags, bool bOp = true)
+  {
+    SETBIT(m_kindOfRenderSettings, nFlags, bOp);
+  }
+
+  bool hasMentalRayRenderSettings() const
+  {
+    return GETBIT(m_kindOfRenderSettings, kMentalRaySettings);
+  }
+  bool hasRapidRTRenderSettings() const
+  {
+    return GETBIT(m_kindOfRenderSettings, kRapidRTSettings);
+  }
+
+  bool operator !=(const OdGiCombinedRenderSettingsTraitsData &data2) const
+  {
+    return ((*static_cast<const OdGiMentalRayRenderSettingsTraitsData*>(this) != static_cast<const OdGiMentalRayRenderSettingsTraitsData&>(data2)) ||
+            (*static_cast<const OdGiRapidRTRenderSettingsTraitsData*>(this) != static_cast<const OdGiRapidRTRenderSettingsTraitsData&>(data2)) ||
+            (m_kindOfRenderSettings != data2.m_kindOfRenderSettings));
+  }
+  bool operator ==(const OdGiCombinedRenderSettingsTraitsData &data2) const
+  {
+    return !(*this != data2);
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_ENVIRONMENT_TRAITS_DATA__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExport.h
new file mode 100755
index 0000000..609ff24
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExport.h
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _GI_EXPORT_DEFINED_
+#define _GI_EXPORT_DEFINED_
+
+
+#include "OdPlatformSettings.h"
+
+#ifdef ODA_GI_EXPORTS
+  #define ODGI_EXPORT           OD_TOOLKIT_EXPORT
+  #define ODGI_EXPORT_STATIC    OD_STATIC_EXPORT
+#else
+  #define ODGI_EXPORT           OD_TOOLKIT_IMPORT
+  #define ODGI_EXPORT_STATIC    OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _GI_EXPORT_DEFINED_ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtAccum.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtAccum.h
new file mode 100755
index 0000000..0c83744
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtAccum.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GI_EXTACCUM__
+#define __OD_GI_EXTACCUM__
+
+#include "Ge/GeExtents3d.h"
+#include "Gi/GiConveyorNode.h"
+#include "Gi/GiDeviation.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for custom classes that compute the extents of OdGiConveyorGeometry objects.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiExtAccum : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiExtAccum);
+
+  /** \details
+    Sets the draw context associated with this object.
+    \param pDrawContext [in]  Pointer to the draw context.
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawContext) = 0;
+
+  /** \details
+    Sets max deviation for curve tessellation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** \details
+    Sets deviation object to obtain max deviation for curve tessellation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** \details
+    Returns the OdGiConveyorGeometry object associated with this object.  
+    
+    \remarks
+    This instance contains the functions that can be used by an entity to
+    vectorize itself.
+  */
+  virtual OdGiConveyorGeometry& geometry() = 0;
+
+  /** \details
+    Returns the accumulated extents for the OdGiConveyorGeometry object associated with this object.
+    \param extents [out]  Receives the extents.
+  */
+  virtual bool getExtents(OdGeExtents3d& extents) const = 0;
+
+  /** \details
+    Resets the accumulated extents for the OdGiConveyorGeometry object associated with this object.
+    \param newExtents [out]  New extents.
+  */
+  virtual void resetExtents(const OdGeExtents3d& newExtents = OdGeExtents3d()) = 0;
+
+  /** \details
+    Adds the specified extents to the the accumulated extents for the OdGiConveyorGeometry object associated with this object.
+    \param extents [out]  Extents to be added.
+  */
+  virtual void addExtents(const OdGeExtents3d& extents) = 0;
+
+  /** \details
+    Returns true if and only if any of input pline primitives contain bulges.
+  */
+  virtual bool plineContainBulges() const = 0;
+
+  /** \details
+    Computes text extents.
+    \param pDrawContext [in]  Current conveyor context pointer.
+    \param textStyle [in]  Text style.
+    \param pStr [in]  Text string.
+    \param raw [in]  Text flags.
+    \param minExt [out]  Minimal text extents point.
+    \param maxExt [out]  Maximal text extents point.
+    \param pEndPos [out]  Optional pointer to end text point.
+    \param pExactExtents [out]  Optional pointer to exact text extents.
+  */
+  static void textExtents(OdGiConveyorContext* pDrawContext, const OdGiTextStyle& textStyle,
+                          const OdChar* pStr, int nLength, OdUInt32 raw, OdGePoint3d& minExt,
+                          OdGePoint3d& maxExt, OdGePoint3d* pEndPos = NULL, OdGeExtents3d *pExactExtents = NULL);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiExtAccum object pointers.
+*/
+typedef OdSmartPtr<OdGiExtAccum> OdGiExtAccumPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_EXTACCUM__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtents.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtents.h
new file mode 100755
index 0000000..4511b72
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiExtents.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODGIEXTENTS_INCLUDED_
+#define _ODGIEXTENTS_INCLUDED_
+
+
+#include "Ge/GeExtents3d.h"
+// !!! SYMBOL RENAMED !!! USE OdGeExtents3d !!!
+#define OdGiExtents OdGeExtents3d
+
+#endif //_ODGIEXTENTS_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFaceEdgeDataTraitsSaver.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFaceEdgeDataTraitsSaver.h
new file mode 100755
index 0000000..fd98456
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFaceEdgeDataTraitsSaver.h
@@ -0,0 +1,524 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIFACEEDGEDATATRAITSSAVER_H__
+#define __ODGIFACEEDGEDATATRAITSSAVER_H__
+
+#include "Gi/GiGeometry.h"
+#include "Gi/GiCommonDraw.h"
+#include "Gi/GiConveyorGeometry.h"
+
+// Uncomment to enable selection marker restore on exit
+//#define EX_TRAITS_SELMARK_RESTORE
+// Uncomment to enable onTraitsModified call on exit
+//#define EX_TRAITS_TRAITSMOD_ONEXIT
+// Uncomment to enable traits restoration on exit
+#define EX_TRAITS_RESTORE_ONEXIT
+
+#ifdef EX_TRAITS_SELMARK_RESTORE
+#include "Gi/GiPathNode.h"
+#endif
+
+#ifdef EX_TRAITS_TRAITSMOD_ONEXIT
+#define EX_TRAITS_TRAITSMOD_ONEXIT_SET() \
+  bModified = true
+#else // EX_TRAITS_TRAITSMOD_ONEXIT
+#define EX_TRAITS_TRAITSMOD_ONEXIT_SET()
+#endif // EX_TRAITS_TRAITSMOD_ONEXIT
+
+#ifdef EX_TRAITS_RESTORE_ONEXIT
+#define EX_TRAITS_SET(prevStorage, curStorage, param) \
+  prevStorage = curStorage = param
+#define EX_TRAITS_DEFINE(type, prevStorage, curStorage) \
+  type prevStorage, curStorage
+#define EX_TRAITS_DEFINE_PTR(type, prevStorage, curStorage) \
+  type prevStorage, *curStorage
+#else // EX_TRAITS_RESTORE_ONEXIT
+#define EX_TRAITS_SET(prevStorage, curStorage, param) \
+  curStorage = param
+#define EX_TRAITS_DEFINE(type, prevStorage, curStorage) \
+  type curStorage
+#define EX_TRAITS_DEFINE_PTR(type, prevStorage, curStorage) \
+  type curStorage
+#ifdef EX_TRAITS_SELMARK_RESTORE
+#undef EX_TRAITS_SELMARK_RESTORE
+#endif // EX_TRAITS_SELMARK_RESTORE
+#endif
+
+class OdGiFaceEdgeDataTraitsSaverBase
+{
+  protected:
+    enum Components
+    {
+      // LoWord - FaceTraits
+      kFaceColors           = (1 << 0),
+      kFaceTrueColors       = (1 << 1),
+      kFaceLayers           = (1 << 2),
+      kFaceSelectionMarkers = (1 << 3),
+      kFaceMaterials        = (1 << 4),
+      kFaceMappers          = (1 << 5),
+      kFaceTransparencies   = (1 << 6),
+      kFaceVisibilities     = (1 << 7),
+      kFaceSelMarkAvail     = (1 << 8),
+      kFaceSelMarkOnModify  = (1 << 9),
+      // HiWord - EdgeTraits
+      kEdgeColors           = (1 << 16),
+      kEdgeTrueColors       = (1 << 17),
+      kEdgeLayers           = (1 << 18),
+      kEdgeLinetypes        = (1 << 19),
+      kEdgeSelectionMarkers = (1 << 20),
+      kEdgeVisibilities     = (1 << 21),
+      kEdgeSelMarkAvail     = (1 << 22),
+      kEdgeSelMarkOnModify  = (1 << 23),
+      // Masks
+      kFaceMask             = 0x0000FFFF,
+      kEdgeMask             = 0xFFFF0000,
+      // Mask used for restore traits state
+#ifdef EX_TRAITS_SELMARK_RESTORE
+      kFaceRestoreMask      = kFaceMask & ~kFaceVisibilities,
+      kEdgeRestoreMask      = kEdgeMask & ~kEdgeVisibilities,
+#else
+      kFaceRestoreMask      = kFaceMask & ~(kFaceVisibilities | kFaceSelectionMarkers | kFaceSelMarkOnModify),
+      kEdgeRestoreMask      = kEdgeMask & ~(kEdgeVisibilities | kEdgeSelectionMarkers | kEdgeSelMarkOnModify),
+#endif
+      // Mask used for reset traits state
+      kFaceSetMask          = kFaceMask & ~kFaceVisibilities,
+      kEdgeSetMask          = kEdgeMask & ~kEdgeVisibilities
+    };
+  protected:
+    OdGiSubEntityTraits *m_pTraits;
+    OdGiConveyorContext *m_pDrawCtx;
+    OdGsView::RenderMode m_renderMode;
+    OdUInt32             m_components;
+    EX_TRAITS_DEFINE(OdCmEntityColor, m_prevTrueColor, m_curTrueColor);
+    EX_TRAITS_DEFINE_PTR(OdDbStub*,   m_prevLayerId,   m_curLayerId);
+#ifdef EX_TRAITS_SELMARK_RESTORE
+    OdGsMarker           m_prevSelectionMarker;
+#endif // EX_TRAITS_SELMARK_RESTORE
+  protected:
+    OdGiFaceEdgeDataTraitsSaverBase(OdGiSubEntityTraits *pTraits, OdGiConveyorContext *pDrawCtx, OdGsView::RenderMode renderMode)
+      : m_pTraits(pTraits), m_pDrawCtx(pDrawCtx), m_renderMode(renderMode), m_components(0)
+    {
+    }
+    // The default constructor will be used for virtual inheritance
+    OdGiFaceEdgeDataTraitsSaverBase()
+      : m_pTraits(NULL), m_pDrawCtx(NULL), m_renderMode(OdGsView::k2DOptimized), m_components(0)
+    {
+    }
+
+    bool setColor(const OdUInt16* pColors, int index)
+    {
+      OdCmEntityColor trueColor; trueColor.setColorIndex(pColors[index]);
+      if (m_curTrueColor != trueColor)
+      {
+        m_curTrueColor = trueColor;
+        m_pTraits->setColor(pColors[index]);
+        return true;
+      }
+      return false;
+    }
+    bool setTrueColor(const OdCmEntityColor* pTrueColors, int index)
+    {
+      if (m_curTrueColor != pTrueColors[index])
+      {
+        m_pTraits->setTrueColor(m_curTrueColor = pTrueColors[index]);
+        return true;
+      }
+      return false;
+    }
+    bool setLayer(OdDbStub **pLayers, int index)
+    {
+      if (m_curLayerId != pLayers[index])
+      {
+        m_pTraits->setLayer(m_curLayerId = pLayers[index]);
+        return true;
+      }
+      return false;
+    }
+
+    bool needExit() const { return m_renderMode != OdGsView::k2DOptimized; }
+};
+
+class OdGiFaceDataTraitsSaver : protected virtual OdGiFaceEdgeDataTraitsSaverBase
+{
+  protected:
+    const OdGiFaceData  *m_pFaceData;
+    EX_TRAITS_DEFINE_PTR(OdDbStub*,         m_prevMaterialId,   m_curMaterialId);
+    EX_TRAITS_DEFINE_PTR(const OdGiMapper*, m_prevMapper,       m_curMapper);
+    EX_TRAITS_DEFINE(    OdCmTransparency,  m_prevTransparency, m_curTransparency);
+  public:
+    OdGiFaceDataTraitsSaver(const OdGiFaceData *pFaceData, OdGiSubEntityTraits *pTraits, OdGiConveyorContext *pDrawCtx,
+                            OdGsView::RenderMode renderMode, bool bForEdge = false)
+      : OdGiFaceEdgeDataTraitsSaverBase(pTraits, pDrawCtx, renderMode), m_pFaceData(pFaceData)
+    {
+      if (pFaceData && pTraits)
+      {
+        if (pFaceData->colors())
+        {
+          EX_TRAITS_SET(m_prevTrueColor, m_curTrueColor, pTraits->trueColor());
+          SETBIT_1(m_components, kFaceColors);
+        }
+        if (pFaceData->trueColors())
+        {
+          EX_TRAITS_SET(m_prevTrueColor, m_curTrueColor, pTraits->trueColor());
+          SETBIT_1(m_components, kFaceTrueColors);
+        }
+        if (pFaceData->layerIds())
+        {
+          EX_TRAITS_SET(m_prevLayerId, m_curLayerId, pTraits->layer());
+          SETBIT_1(m_components, kFaceLayers);
+        }
+        if (pFaceData->selectionMarkers())
+        {
+#ifdef EX_TRAITS_SELMARK_RESTORE
+          if (pDrawCtx->currentGiPath())
+          {
+            m_prevSelectionMarker = pDrawCtx->currentGiPath()->selectionMarker();
+            SETBIT_1(m_components, kFaceSelMarkAvail);
+          }
+#endif // EX_TRAITS_SELMARK_RESTORE
+          SETBIT_1(m_components, kFaceSelectionMarkers);
+          if (GETBIT(pDrawCtx->drawContextFlags(), OdGiConveyorContext::kForceMarkersOnModified))
+            SETBIT_1(m_components, kFaceSelMarkOnModify);
+        }
+        if (!bForEdge)
+        {
+          if (pFaceData->materials())
+          {
+            EX_TRAITS_SET(m_prevMaterialId, m_curMaterialId, pTraits->material());
+            SETBIT_1(m_components, kFaceMaterials);
+          }
+          if (pFaceData->mappers())
+          {
+            EX_TRAITS_SET(m_prevMapper, m_curMapper, pTraits->mapper());
+#ifdef EX_TRAITS_RESTORE_ONEXIT
+            // Mapper can point onto internal storage which is similar always, we need store data itself
+            if (m_prevMapper) m_prevMapper = new OdGiMapper(*m_curMapper);
+#endif // EX_TRAITS_RESTORE_ONEXIT
+            SETBIT_1(m_components, kFaceMappers);
+          }
+        }
+        if (pFaceData->transparency())
+        {
+          EX_TRAITS_SET(m_prevTransparency, m_curTransparency, pTraits->transparency());
+          SETBIT_1(m_components, kFaceTransparencies);
+        }
+        if (pFaceData->visibility())
+          SETBIT_1(m_components, kFaceVisibilities);
+      }
+    }
+
+#ifdef EX_TRAITS_RESTORE_ONEXIT
+    bool onExit()
+    {
+      bool bModified = false;
+      if (m_components & kFaceRestoreMask)
+      {
+        if (GETBIT(m_components, kFaceColors | kFaceTrueColors) && (m_prevTrueColor != m_curTrueColor))
+        {
+          m_pTraits->setTrueColor(m_prevTrueColor);
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+        if (GETBIT(m_components, kFaceLayers) && (m_prevLayerId != m_curLayerId))
+        {
+          m_pTraits->setLayer(m_prevLayerId);
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+#ifdef EX_TRAITS_SELMARK_RESTORE
+        if (GETBIT(m_components, kFaceSelMarkAvail))
+        {
+          m_pTraits->setSelectionMarker(m_prevSelectionMarker);
+          if (GETBIT(m_components, kFaceSelMarkOnModify))
+            EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+#endif // EX_TRAITS_SELMARK_RESTORE
+        if (GETBIT(m_components, kFaceMaterials) && (m_prevMaterialId != m_curMaterialId))
+        {
+          m_pTraits->setMaterial(m_prevMaterialId);
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+        if (GETBIT(m_components, kFaceMappers))
+        { // If mappers is specified them will be different always
+          m_pTraits->setMapper(m_prevMapper);
+          if (m_prevMapper) delete m_prevMapper;
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+        if (GETBIT(m_components, kFaceTransparencies) && (m_prevTransparency != m_curTransparency))
+        {
+          m_pTraits->setTransparency(m_prevTransparency);
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+      }
+      return bModified;
+    }
+    bool needExit() const
+    {
+      if (!OdGiFaceEdgeDataTraitsSaverBase::needExit())
+      {
+        if (GETBIT(m_components, kFaceMappers) && m_prevMapper)
+          delete m_prevMapper;
+        return false;
+      }
+      return true;
+    }
+    ~OdGiFaceDataTraitsSaver()
+    {
+      if (needExit() && onExit())
+        m_pDrawCtx->onTraitsModified();
+    }
+#endif // EX_TRAITS_RESTORE_ONEXIT
+
+    bool setFaceTraits(int faceIndex)
+    {
+      if (!(m_components & kFaceMask))
+        return true;
+
+      if (GETBIT(m_components, kFaceSelectionMarkers))
+        m_pTraits->setSelectionMarker(m_pFaceData->selectionMarkers()[faceIndex]);
+
+      if (GETBIT(m_components, kFaceVisibilities) && (m_pFaceData->visibility()[faceIndex] == kOdGiInvisible))
+        return false;
+
+      if (m_components & kFaceSetMask)
+      {
+        bool bModified = GETBIT(m_components, kFaceSelMarkOnModify);
+        if (GETBIT(m_components, kFaceColors))
+          bModified |= setColor(m_pFaceData->colors(), faceIndex);
+        if (GETBIT(m_components, kFaceTrueColors))
+          bModified |= setTrueColor(m_pFaceData->trueColors(), faceIndex);
+        if (GETBIT(m_components, kFaceLayers))
+          bModified |= setLayer(m_pFaceData->layerIds(), faceIndex);
+        if (GETBIT(m_components, kFaceMaterials))
+        {
+          OdDbStub **pMaterials = m_pFaceData->materials();
+          if (m_curMaterialId != pMaterials[faceIndex])
+          {
+            m_pTraits->setMaterial(m_curMaterialId = pMaterials[faceIndex]);
+            bModified = true;
+          }
+        }
+        if (GETBIT(m_components, kFaceMappers))
+        {
+          const OdGiMapper* pMappers = m_pFaceData->mappers();
+          m_pTraits->setMapper(m_curMapper = (pMappers + faceIndex));
+          bModified = true;
+        }
+        if (GETBIT(m_components, kFaceTransparencies))
+        {
+          const OdCmTransparency* pTransparencies = m_pFaceData->transparency();
+          if (m_curTransparency != pTransparencies[faceIndex])
+          {
+            m_pTraits->setTransparency(m_curTransparency = pTransparencies[faceIndex]);
+            bModified = true;
+          }
+        }
+        if (m_pDrawCtx->effectivelyVisible())
+        {
+          if (bModified)
+            m_pDrawCtx->onTraitsModified();
+          return true;
+        }
+        else
+          return false;
+      }
+
+      return m_pDrawCtx->effectivelyVisible();
+    }
+
+    bool hasData() const { return (m_components & kFaceMask) != 0; }
+};
+
+class OdGiEdgeDataTraitsSaver : protected virtual OdGiFaceEdgeDataTraitsSaverBase
+{
+  protected:
+    const OdGiEdgeData  *m_pEdgeData;
+    EX_TRAITS_DEFINE_PTR(OdDbStub*, m_prevLinetypeId, m_curLinetypeId);
+  public:
+    OdGiEdgeDataTraitsSaver(const OdGiEdgeData *pEdgeData, OdGiSubEntityTraits *pTraits, OdGiConveyorContext *pDrawCtx,
+                            OdGsView::RenderMode renderMode, bool bFaceChk = false)
+      : OdGiFaceEdgeDataTraitsSaverBase(pTraits, pDrawCtx, renderMode), m_pEdgeData(pEdgeData)
+    {
+      if (pEdgeData && pTraits)
+      {
+        if (pEdgeData->colors())
+        {
+          if (!bFaceChk || !GETBIT(m_components, kFaceColors | kFaceTrueColors))
+            EX_TRAITS_SET(m_prevTrueColor, m_curTrueColor, pTraits->trueColor());
+          SETBIT_1(m_components, kEdgeColors);
+        }
+        if (pEdgeData->trueColors())
+        {
+          if (!bFaceChk || !GETBIT(m_components, kFaceColors | kFaceTrueColors))
+            EX_TRAITS_SET(m_prevTrueColor, m_curTrueColor, pTraits->trueColor());
+          SETBIT_1(m_components, kEdgeTrueColors);
+        }
+        if (pEdgeData->layerIds())
+        {
+          if (!bFaceChk || !GETBIT(m_components, kFaceLayers))
+            EX_TRAITS_SET(m_prevLayerId, m_curLayerId, pTraits->layer());
+          SETBIT_1(m_components, kEdgeLayers);
+        }
+        if (pEdgeData->linetypeIds())
+        {
+          EX_TRAITS_SET(m_prevLinetypeId, m_curLinetypeId, pTraits->lineType());
+          SETBIT_1(m_components, kEdgeLinetypes);
+        }
+        if (pEdgeData->selectionMarkers())
+        {
+#ifdef EX_TRAITS_SELMARK_RESTORE
+          if ((!bFaceChk || !GETBIT(m_components, kFaceSelectionMarkers)) && pDrawCtx->currentGiPath())
+          {
+            m_prevSelectionMarker = pDrawCtx->currentGiPath()->selectionMarker();
+            SETBIT_1(m_components, kEdgeSelMarkAvail);
+          }
+#endif // EX_TRAITS_SELMARK_RESTORE
+          SETBIT_1(m_components, kEdgeSelectionMarkers);
+          if (!bFaceChk || !GETBIT(m_components, kFaceSelectionMarkers))
+          {
+            if (GETBIT(pDrawCtx->drawContextFlags(), OdGiConveyorContext::kForceMarkersOnModified))
+              SETBIT_1(m_components, kEdgeSelMarkOnModify);
+          }
+          else if (GETBIT(m_components, kFaceSelMarkOnModify))
+            SETBIT_1(m_components, kEdgeSelMarkOnModify);
+        }
+        if (pEdgeData->visibility())
+          SETBIT_1(m_components, kEdgeVisibilities);
+      }
+    }
+
+#ifdef EX_TRAITS_RESTORE_ONEXIT
+    bool onExit(bool bFaceChk = false)
+    {
+      bool bModified = false;
+      if (m_components & kEdgeRestoreMask)
+      {
+        if (GETBIT(m_components, kEdgeColors | kEdgeTrueColors) &&
+            (!bFaceChk || !GETBIT(m_components, kFaceColors | kFaceTrueColors)) && (m_prevTrueColor != m_curTrueColor))
+        {
+          m_pTraits->setTrueColor(m_prevTrueColor);
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+        if (GETBIT(m_components, kEdgeLayers) &&
+            (!bFaceChk || !GETBIT(m_components, kFaceLayers)) && (m_prevLayerId != m_curLayerId))
+        {
+          m_pTraits->setLayer(m_prevLayerId);
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+        if (GETBIT(m_components, kEdgeLinetypes) && (m_prevLinetypeId != m_curLinetypeId))
+        {
+          m_pTraits->setLineType(m_prevLinetypeId);
+          EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+#ifdef EX_TRAITS_SELMARK_RESTORE
+        if (GETBIT(m_components, kEdgeSelMarkAvail) &&
+            (!bFaceChk || !GETBIT(m_components, kFaceSelectionMarkers)))
+        {
+          m_pTraits->setSelectionMarker(m_prevSelectionMarker);
+          if (GETBIT(m_components, kEdgeSelMarkOnModify))
+            EX_TRAITS_TRAITSMOD_ONEXIT_SET();
+        }
+#endif // EX_TRAITS_SELMARK_RESTORE
+      }
+      return bModified;
+    }
+    ~OdGiEdgeDataTraitsSaver()
+    {
+      if (needExit() && onExit())
+        m_pDrawCtx->onTraitsModified();
+    }
+#endif // EX_TRAITS_RESTORE_ONEXIT
+
+    bool setEdgeTraits(int edgeIndex)
+    {
+      if (!(m_components & kEdgeMask))
+        return true;
+
+      if (GETBIT(m_components, kEdgeSelectionMarkers))
+        m_pTraits->setSelectionMarker(m_pEdgeData->selectionMarkers()[edgeIndex]);
+
+      if (GETBIT(m_components, kEdgeVisibilities) && (m_pEdgeData->visibility()[edgeIndex] == kOdGiInvisible))
+        return false;
+
+      if (m_components & kEdgeSetMask)
+      {
+        bool bModified = GETBIT(m_components, kEdgeSelMarkOnModify);
+        if (GETBIT(m_components, kEdgeColors))
+          bModified |= setColor(m_pEdgeData->colors(), edgeIndex);
+        if (GETBIT(m_components, kEdgeTrueColors))
+          bModified |= setTrueColor(m_pEdgeData->trueColors(), edgeIndex);
+        if (GETBIT(m_components, kEdgeLayers))
+          bModified |= setLayer(m_pEdgeData->layerIds(), edgeIndex);
+        if (GETBIT(m_components, kEdgeLinetypes))
+        {
+          OdDbStub **pLinetypes = m_pEdgeData->linetypeIds();
+          if (m_curLinetypeId != pLinetypes[edgeIndex])
+          {
+            m_pTraits->setLineType(m_curLinetypeId = pLinetypes[edgeIndex]);
+            bModified = true;
+          }
+        }
+        if (m_pDrawCtx->effectivelyVisible())
+        {
+          if (bModified)
+            m_pDrawCtx->onTraitsModified();
+          return true;
+        }
+        else
+          return false;
+      }
+
+      return m_pDrawCtx->effectivelyVisible();
+    }
+
+    bool hasData() const { return (m_components & kEdgeMask) != 0; }
+};
+
+class OdGiFaceEdgeDataTraitsSaver : public OdGiFaceDataTraitsSaver, public OdGiEdgeDataTraitsSaver
+{
+  public:
+    OdGiFaceEdgeDataTraitsSaver(const OdGiFaceData *pFaceData, const OdGiEdgeData *pEdgeData,
+                                OdGiSubEntityTraits *pTraits, OdGiConveyorContext *pDrawCtx,
+                                OdGsView::RenderMode renderMode)
+      : OdGiFaceEdgeDataTraitsSaverBase(pTraits, pDrawCtx, renderMode)
+      , OdGiFaceDataTraitsSaver(pFaceData, pTraits, pDrawCtx, renderMode, true)
+      , OdGiEdgeDataTraitsSaver(pEdgeData, pTraits, pDrawCtx, renderMode, true)
+    {
+    }
+#ifdef EX_TRAITS_RESTORE_ONEXIT
+    ~OdGiFaceEdgeDataTraitsSaver()
+    {
+      if (OdGiFaceDataTraitsSaver::needExit())
+      {
+        bool bModified = OdGiFaceDataTraitsSaver::onExit();
+        bModified |= OdGiEdgeDataTraitsSaver::onExit(true);
+        if (bModified)
+          m_pDrawCtx->onTraitsModified();
+      }
+      m_components = 0; // Avoid redundant operations in base class destructors
+    }
+#endif
+
+    bool hasData() const { return m_components != 0; }
+};
+
+#endif // __ODGIFACEEDGEDATATRAITSSAVER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFastExtCalc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFastExtCalc.h
new file mode 100755
index 0000000..69ac0e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFastExtCalc.h
@@ -0,0 +1,269 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGIFASTEXTCALC_INCLUDED_
+#define _ODGIFASTEXTCALC_INCLUDED_
+
+#include "Gi/GiBaseVectorizer.h"
+#include "Gi/GiTransformed.h"
+#include "OdStack.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is an implementation of the subWorldDraw() framework to quickly calculate the WCS extents of an OdGiDrawable object.
+    \remarks
+    This class is the same as OdGiExtCalc, but calculates the extents with lower precision to improve speed.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT ODRX_ABSTRACT OdGiFastExtCalc : public OdGiTransformed<OdGiWorldDrawImpl>
+{
+  typedef OdGeExtents3d Extents;
+  OdGeExtents3d         m_worldExt;
+  OdStack<Extents>      m_extStack;
+  OdGeExtents3d*        m_pCurrExt;
+
+  enum Flags
+  {
+    kSetExtentsCalledFlag     = 1,
+    kDrawInvisiblesFlag       = 2,
+    kDrawInvisiblesNestedFlag = 4,
+    kDrawingInitiatedFlag     = 8
+  };
+  OdUInt8               m_flags;
+
+  void setSetExtentsCalled(bool bSet);
+  bool isSetExtentsCalled() const;
+
+  void setDrawingInitiated(bool bSet);
+  bool isDrawingInitiated() const;
+
+  void addTextExtents(
+    const OdGePoint3d& locExtMin,
+    const OdGePoint3d& locExtMax,
+    const OdGePoint3d& position,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& direction);
+protected:
+  ODRX_USING_HEAP_OPERATORS(OdGiTransformed<OdGiWorldDrawImpl>);
+
+  OdGiFastExtCalc();
+public:
+
+  /** \details
+    Resets the accumulated extents for the OdGiDrawable object associated with this Vectorization object.
+  */
+  void resetExtents();
+  
+  /** \details
+    Returns the accumulated extents for the OdGiDrawable object associated with this Vectorization object.
+    \param extents [out]  Receives the extents.
+  */
+  void getExtents(OdGeExtents3d& extents) const;
+
+  /** \details
+    Sets whether invisible entities will be drawn.
+    \param bSet [in]  true - to draw invisible entities, false - do not draw.
+  */
+  void setDrawInvisible(bool bSet);
+
+  /** \details
+    Returns whether invisible entities are to be drawn.
+  */
+  bool isDrawInvisible() const;
+
+  /** \details
+    Sets whether invisible nested entities will be drawn.
+    \param bSet [in]  true - to draw invisible nested entities, false - do not draw.
+  */
+  void setDrawInvisibleNested(bool bSet);
+
+  /** \details
+    Returns whether invisible nested entities are to be drawn.
+  */
+  bool isDrawInvisibleNested() const;
+
+  /** \details
+    Resets flag which is set after first draw call. This flag informs extents calculator that nested
+    entities draw.
+  */
+  void resetFirstDrawFlag();
+
+  /////////////////////////////////////////////////////////////////////////////
+  // OdGiCommonDraw Overrides
+
+  bool regenAbort() const;
+  double deviation(const OdGiDeviationType deviationType, const OdGePoint3d& pointOnCurve) const;
+  OdGiRegenType regenType() const;
+
+   /////////////////////////////////////////////////////////////////////////////
+  // OdGiGeometry Overrides
+
+  void circle(const OdGePoint3d& center, double radius, const OdGeVector3d& normal);
+
+  void circle(const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint, const OdGePoint3d& thirdPoint);
+
+  void circularArc(const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple);
+
+  void circularArc(const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& thirdPoint,
+    OdGiArcType arcType = kOdGiArcSimple);
+
+  void polyline(OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    OdGsMarker baseSubEntMarker = -1);
+
+  void polygon(OdInt32 numVertices, const OdGePoint3d* vertexList);
+
+  void pline(const OdGiPolyline& polyline, OdUInt32 fromIndex = 0, OdUInt32 numSegs = 0);
+
+
+  /** \details
+    Introduces a shape into this vectorization context.
+    
+    \param position [in]  Position of the shape.
+    \param shapeNumber [in]  Shape number.
+    \param pTextStyle [in]  Pointer to the TextStyle for the shape.
+    \param direction [in]  Baseline direction for the shape.
+    \param normal [in]  Normal vector.
+  */
+  void shape(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    int shapeNumber, const OdGiTextStyle* pTextStyle);
+
+  void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    double height, double width, double oblique, const OdString& msg);
+
+  void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    const OdChar* msg, OdInt32 length, bool raw, const OdGiTextStyle* pTextStyle);
+
+
+  void xline(const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint);
+
+  void ray(const OdGePoint3d& basePoint, const OdGePoint3d& throughPoint );
+
+  void nurbs(const OdGeNurbCurve3d& nurbsCurve);
+
+  void ellipArc(const OdGeEllipArc3d& ellipArc,
+    const OdGePoint3d* endPointsOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple);
+
+  void mesh(OdInt32 numRows,
+    OdInt32 numColumns,
+    const OdGePoint3d* vertexList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+
+  void shell(OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    OdInt32 faceListSize,
+    const OdInt32* faceList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+
+  void worldLine(const OdGePoint3d points[2]);
+
+  void image(const OdGiImageBGRA32& img,
+    const OdGePoint3d& origin,
+    const OdGeVector3d& uVec,
+    const OdGeVector3d& vVec,
+    OdGiRasterImage::TransparencyMode trpMode = OdGiRasterImage::kTransparency8Bit);
+
+  void edge(const OdGiEdge2dArray& edges);
+
+  void polypoint(OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* pColors, const OdCmTransparency* pTransparency,
+                 const OdGeVector3d* pNormals, const OdGsMarker* pSubEntMarkers, OdInt32 nPointSize);
+
+  void rowOfDots(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint);
+
+  void setExtents(const OdGePoint3d *newExtents);
+
+  void pushClipBoundary(OdGiClipBoundary* pBoundary);
+  void popClipBoundary();
+
+  void pushModelTransform(const OdGeMatrix3d& xfm);
+  void popModelTransform();
+
+  void draw(const OdGiDrawable* pDrawable);
+};
+
+inline void OdGiFastExtCalc::setSetExtentsCalled(bool bSet)
+{
+  SETBIT(m_flags, kSetExtentsCalledFlag, bSet);
+}
+
+inline bool OdGiFastExtCalc::isSetExtentsCalled() const
+{
+  return GETBIT(m_flags, kSetExtentsCalledFlag);
+}
+
+inline void OdGiFastExtCalc::setDrawingInitiated(bool bSet)
+{
+  SETBIT(m_flags, kDrawingInitiatedFlag, bSet);
+}
+
+inline bool OdGiFastExtCalc::isDrawingInitiated() const
+{
+  return GETBIT(m_flags, kDrawingInitiatedFlag);
+}
+
+inline void OdGiFastExtCalc::setDrawInvisible(bool bSet)
+{
+  SETBIT(m_flags, kDrawInvisiblesFlag, bSet);
+}
+
+inline bool OdGiFastExtCalc::isDrawInvisible() const
+{
+  return GETBIT(m_flags, kDrawInvisiblesFlag);
+}
+
+inline void OdGiFastExtCalc::setDrawInvisibleNested(bool bSet)
+{
+  SETBIT(m_flags, kDrawInvisiblesNestedFlag, bSet);
+}
+
+inline bool OdGiFastExtCalc::isDrawInvisibleNested() const
+{
+  return GETBIT(m_flags, kDrawInvisiblesNestedFlag);
+}
+
+inline void OdGiFastExtCalc::resetFirstDrawFlag()
+{
+  m_flags &= ~kDrawingInitiatedFlag;
+}
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGIFASTEXTCALC_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFill.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFill.h
new file mode 100755
index 0000000..0454d79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiFill.h
@@ -0,0 +1,314 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_GIFILL_H_
+#define _OD_GIFILL_H_
+
+#include "RxObject.h"
+#include "HatchPattern.h"
+#include "UInt8Array.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is a base class for boundary filling definitions.
+
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiFill : public OdRxObject
+{
+  protected:
+    double m_dDeviation;
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiFill);
+    OdGiFill();
+
+    double deviation() const;
+    void setDeviation(double dDeviation);
+
+    virtual void copyFrom(const OdRxObject* pSource);
+
+    virtual bool operator ==(const OdGiFill& fill) const;
+    virtual bool operator !=(const OdGiFill& fill) const;
+
+    virtual void saveBytes(OdUInt8Array &bytes) const;
+    virtual void loadBytes(const OdUInt8 *pBytes);
+
+    static OdSmartPtr<OdGiFill> loadFill(const OdUInt8 *pBytes);
+  protected:
+    void pushDbl(OdUInt8Array &bytes, double dDbl) const;
+    void pushInt(OdUInt8Array &bytes, OdUInt32 nInt) const;
+    void popDbl(const OdUInt8 *&pBytes, double &dDbl) const;
+    void popInt(const OdUInt8 *&pBytes, OdUInt32 &nInt) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiFill object pointers.
+*/
+typedef OdSmartPtr<OdGiFill> OdGiFillPtr;
+
+inline
+OdGiFill::OdGiFill()
+  : m_dDeviation(0.0)
+{ }
+
+inline
+double OdGiFill::deviation() const
+{
+  return m_dDeviation;
+}
+
+inline
+void OdGiFill::setDeviation(double dDeviation)
+{
+  m_dDeviation = dDeviation;
+}
+
+inline
+void OdGiFill::copyFrom(const OdRxObject* pSource)
+{
+  OdGiFillPtr pSrcFill = OdGiFill::cast(pSource);
+  if (!pSrcFill.isNull())
+    setDeviation(pSrcFill->deviation());
+  else
+    throw OdError(eNotApplicable);
+}
+
+inline
+bool OdGiFill::operator ==(const OdGiFill& fill) const
+{
+  return (isA() == fill.isA()) && OdEqual(deviation(), fill.deviation());
+}
+
+inline
+bool OdGiFill::operator !=(const OdGiFill& fill) const
+{
+  return (isA() != fill.isA()) || !OdEqual(deviation(), fill.deviation());
+}
+
+inline
+void OdGiFill::saveBytes(OdUInt8Array &bytes) const
+{
+  bytes.push_back(0);
+  pushDbl(bytes, m_dDeviation);
+}
+
+inline
+void OdGiFill::loadBytes(const OdUInt8 *pBytes)
+{
+  if (*pBytes++ != 0)
+    throw OdError(eInvalidInput);
+  popDbl(pBytes, m_dDeviation);
+}
+
+inline
+void OdGiFill::pushDbl(OdUInt8Array &bytes, double dDbl) const
+{
+  OdUInt8 nBytes[sizeof(double)];
+  ::memcpy(nBytes, &dDbl, sizeof(double));
+  bytes.insert(bytes.end(), nBytes, nBytes + sizeof(double));
+}
+
+inline
+void OdGiFill::pushInt(OdUInt8Array &bytes, OdUInt32 nInt) const
+{
+  OdUInt8 nBytes[sizeof(OdUInt32)];
+  ::memcpy(nBytes, &nInt, sizeof(OdUInt32));
+  bytes.insert(bytes.end(), nBytes, nBytes + sizeof(OdUInt32));
+}
+
+inline
+void OdGiFill::popDbl(const OdUInt8 *&pBytes, double &dDbl) const
+{
+  ::memcpy(&dDbl, pBytes, sizeof(double));
+  pBytes += sizeof(double);
+}
+
+inline
+void OdGiFill::popInt(const OdUInt8 *&pBytes, OdUInt32 &nInt) const
+{
+  ::memcpy(&nInt, pBytes, sizeof(OdUInt32));
+  pBytes += sizeof(OdUInt32);
+}
+
+/** \details
+    This class is a specialtion of OdGiFill for hatch pattern type of filling.
+
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiHatchPattern : public OdGiFill
+{
+  protected:
+    OdHatchPattern m_aHatchPattern;
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiHatchPattern);
+    OdGiHatchPattern();
+
+    const OdHatchPattern &patternLines() const;
+    OdHatchPattern &patternLines();
+    void setPatternLines(const OdHatchPattern &aHatchPattern);
+
+    virtual void copyFrom(const OdRxObject* pSource);
+
+    virtual bool operator ==(const OdGiFill& fill) const;
+    virtual bool operator !=(const OdGiFill& fill) const;
+
+    virtual void saveBytes(OdUInt8Array &bytes) const;
+    virtual void loadBytes(const OdUInt8 *pBytes);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiHatchPattern object pointers.
+*/
+typedef OdSmartPtr<OdGiHatchPattern> OdGiHatchPatternPtr;
+
+inline
+OdGiHatchPattern::OdGiHatchPattern()
+  : OdGiFill()
+{ }
+
+inline
+const OdHatchPattern &OdGiHatchPattern::patternLines() const
+{
+  return m_aHatchPattern;
+}
+
+inline
+OdHatchPattern &OdGiHatchPattern::patternLines()
+{
+  return m_aHatchPattern;
+}
+
+inline
+void OdGiHatchPattern::setPatternLines(const OdHatchPattern &aHatchPattern)
+{
+  m_aHatchPattern = aHatchPattern;
+}
+
+inline
+void OdGiHatchPattern::copyFrom(const OdRxObject* pSource)
+{
+  OdGiHatchPatternPtr pSrcFill = OdGiHatchPattern::cast(pSource);
+  if (!pSrcFill.isNull())
+  {
+    setPatternLines(pSrcFill->patternLines());
+    OdGiFill::copyFrom(pSource);
+  }
+  else
+    throw OdError(eNotApplicable);
+}
+
+inline
+bool OdGiHatchPattern::operator ==(const OdGiFill& fill) const
+{
+  if (isA() == fill.isA())
+  {
+    if (OdEqual(deviation(), fill.deviation()))
+    {
+      const OdGiHatchPattern *pSecond = static_cast<const OdGiHatchPattern*>(&fill);
+      if (patternLines().size() == pSecond->patternLines().size())
+      {
+        for (OdUInt32 nPat = 0; nPat < patternLines().size(); nPat++)
+        {
+          const OdHatchPatternLine &pl1 = patternLines().getPtr()[nPat];
+          const OdHatchPatternLine &pl2 = pSecond->patternLines().getPtr()[nPat];
+          if (!OdEqual(pl1.m_dLineAngle, pl2.m_dLineAngle) ||
+              !OdEqual(pl1.m_basePoint.x, pl2.m_basePoint.x) || !OdEqual(pl1.m_basePoint.y, pl2.m_basePoint.y) ||
+              !OdEqual(pl1.m_patternOffset.x, pl2.m_patternOffset.x) || !OdEqual(pl1.m_patternOffset.y, pl2.m_patternOffset.y) ||
+              pl1.m_dashes.size() != pl2.m_dashes.size())
+            return false;
+          for (OdUInt32 nDash = 0; nDash < pl1.m_dashes.size(); nDash++)
+          {
+            if (!OdEqual(pl1.m_dashes.getPtr()[nDash], pl2.m_dashes.getPtr()[nDash]))
+              return false;
+          }
+        }
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+inline
+bool OdGiHatchPattern::operator !=(const OdGiFill& fill) const
+{
+  return !operator ==(fill);
+}
+
+inline
+void OdGiHatchPattern::saveBytes(OdUInt8Array &bytes) const
+{
+  bytes.push_back(1);
+  pushInt(bytes, m_aHatchPattern.size());
+  for (OdUInt32 nPat = 0; nPat < m_aHatchPattern.size(); nPat++)
+  {
+    const OdHatchPatternLine &pl = m_aHatchPattern.getPtr()[nPat];
+    pushDbl(bytes, pl.m_dLineAngle);
+    pushDbl(bytes, pl.m_basePoint.x); pushDbl(bytes, pl.m_basePoint.y);
+    pushDbl(bytes, pl.m_patternOffset.x); pushDbl(bytes, pl.m_patternOffset.y);
+    pushInt(bytes, pl.m_dashes.size());
+    for (OdUInt32 nDash = 0; nDash < pl.m_dashes.size(); nDash++)
+      pushDbl(bytes, pl.m_dashes.getPtr()[nDash]);
+  }
+  OdGiFill::saveBytes(bytes);
+}
+
+inline
+void OdGiHatchPattern::loadBytes(const OdUInt8 *pBytes)
+{
+  if (*pBytes++ != 1)
+    throw OdError(eInvalidInput);
+  OdUInt32 nPats = 0; popInt(pBytes, nPats);
+  m_aHatchPattern.resize(nPats);
+  for (OdUInt32 nPat = 0; nPat < nPats; nPat++)
+  {
+    OdHatchPatternLine &pl = m_aHatchPattern[nPat];
+    popDbl(pBytes, pl.m_dLineAngle);
+    popDbl(pBytes, pl.m_basePoint.x); popDbl(pBytes, pl.m_basePoint.y);
+    popDbl(pBytes, pl.m_patternOffset.x); popDbl(pBytes, pl.m_patternOffset.y);
+    OdUInt32 nDashes = 0; popInt(pBytes, nDashes);
+    pl.m_dashes.resize(nDashes);
+    for (OdUInt32 nDash = 0; nDash < nDashes; nDash++)
+      popDbl(pBytes, pl.m_dashes[nDash]);
+  }
+  OdGiFill::loadBytes(pBytes);
+}
+
+inline
+OdSmartPtr<OdGiFill> OdGiFill::loadFill(const OdUInt8 *pBytes)
+{
+  OdGiFillPtr pObj;
+  switch (*pBytes)
+  {
+    case 0: pObj = OdGiFill::createObject(); break;
+    case 1: pObj = OdGiHatchPattern::createObject(); break;
+  }
+  if (!pObj.isNull())
+    pObj->loadBytes(pBytes);
+  return pObj;
+}
+
+#include "TD_PackPop.h"
+
+#endif //_OD_GIFILL_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometry.h
new file mode 100755
index 0000000..ea5a36c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometry.h
@@ -0,0 +1,1286 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIGEOMETRY_H__
+#define __ODGIGEOMETRY_H__
+
+#include "TD_PackPush.h"
+#include "RxObject.h"
+
+#include "Ge/GePoint3d.h"
+#include "Ge/GeMatrix3d.h"
+
+#include "Gi/GiRasterImage.h"
+#include "Gi/GiMaterial.h"
+
+class OdDbStub;
+class OdCmEntityColor;
+class OdGeMatrix3d;
+class OdGeVector3d;
+class OdGePoint2d;
+class OdGeCurve2d;
+class OdGiPathNode;
+class OdGiMapper;
+class OdCmTransparency;
+class OdGiImageBGRA32;
+
+typedef OdArray<OdGeCurve2d*, OdMemoryAllocator<OdGeCurve2d*> > OdGiEdge2dArray;
+
+/** \details
+    This class represents arrays of edge attributes for meshes and shells.
+    
+    \remarks
+    EdgeData objects are optional; they can be optionally passed 
+    to OdGiWorldGeometry and OdGiViewportGeometry when using their 
+	mesh and shell methods. 
+    
+    \note 
+    Setting an 'improper' size of any array will cause
+    unpredictable or fatal results.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class OdGiEdgeData
+{
+  const OdUInt16*         m_pColors;
+  const OdCmEntityColor*  m_pTrueColors;
+        OdDbStub**        m_pLayerIds;
+        OdDbStub**        m_pLinetypeIds;
+  const OdGsMarker*       m_pSelectionMarkers;
+  const OdUInt8*          m_pVisibilities;
+public:
+  OdGiEdgeData()
+    : m_pColors(NULL)
+    , m_pTrueColors(NULL)
+    , m_pLayerIds(NULL)
+    , m_pLinetypeIds(NULL)
+    , m_pSelectionMarkers(NULL)
+    , m_pVisibilities(NULL)
+  {}
+
+  /** \details
+    Sets the edge colors to be used by this object.
+
+    \param colors [in]  Array of color indices.
+        
+    \note
+    You cannot call both setColors() and setTrueColors().
+    
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setColors(
+    const OdUInt16 *colors)                    { m_pColors = colors; }
+
+  /** \details
+    Sets the edge colors to be used by this object.
+
+    \param colors [in]  Array of OdCmEntityColor objects.
+        
+    \note
+    You cannot call both setColors() and setTrueColors().
+
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setTrueColors(
+    const OdCmEntityColor *colors)         { m_pTrueColors = colors; }
+
+  /** \details
+    Sets the edge Layer Table Records to be used by this object.
+
+    \param layerIds [in]  Array of LayerTableRecord Object IDs.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setLayers(
+    OdDbStub* *layerIds)                       { m_pLayerIds = layerIds; }
+
+  /** \details
+    Sets the edge Linetype Table Records to be used by this object.
+
+    \param linetypeIds [in]  Array of LinetypeTableRecord Object IDs.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setLinetypes(
+    OdDbStub* *linetypeIds)                 { m_pLinetypeIds = linetypeIds; }
+
+  /** \details
+    Sets the edge graphics system selection markers to be used by this object.
+
+    \param selectionMarkers [in]  Array of graphics system selection markers.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setSelectionMarkers(
+    const OdGsMarker* selectionMarkers) { m_pSelectionMarkers = selectionMarkers; }
+
+  /** \details
+    Sets the edge visibilities to be used by this object.
+
+    \param visibilities [in]  Array of visibility values.
+
+    \remarks
+    Each visibility must be one of the following:
+     
+    <table>
+    Name              Value   Description
+    kOdGiInvisible    0       Invisible 
+    kOdGiVisible      1       Visible 
+    kOdGiSilhouette   2       Silhouette edge 
+    </table>
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setVisibility(
+    const OdUInt8* visibilities)           { m_pVisibilities = visibilities; }
+  
+  /** \details
+    Returns the array of edge colors used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdUInt16* colors() const           { return m_pColors; }
+
+  /** \details
+    Returns the array of edge colors used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdCmEntityColor* trueColors() const       { return m_pTrueColors; }
+
+  /** \details
+    Returns the array of edge LayerTableRecord Object IDs used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  OdDbStub** layerIds() const         { return m_pLayerIds; }
+
+  /** \details
+    Returns the array of edge LinetypeTableRecord Object IDs used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  OdDbStub** linetypeIds() const      { return m_pLinetypeIds; }
+
+  /** \details
+    Returns the array of edge graphics system selection markers used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdGsMarker* selectionMarkers() const { return m_pSelectionMarkers; }
+
+  /** \details
+    Returns the array of edge visibilities used by this object.
+
+    \remarks
+    Each visibility must be one of the following:
+     
+    <table>
+    Name              Value   Description
+    kOdGiInvisible    0       Invisible 
+    kOdGiVisible      1       Visible 
+    kOdGiSilhouette   2       Silhouette edge 
+    </table>
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdUInt8* visibility() const       { return m_pVisibilities; }
+};
+
+
+/** \details
+    This class contains arrays of face attributes for meshes and shells.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class OdGiFaceData
+{
+  const OdUInt16*         m_pColors;
+  const OdCmEntityColor*  m_pTrueColors;
+        OdDbStub**        m_pLayerIds;
+  const OdGsMarker*       m_pSelectionMarkers;
+  const OdUInt8*          m_pVisibilities;
+  const OdGeVector3d*     m_pNormals;
+        OdDbStub**        m_pMaterialIds;
+  const OdGiMapper*       m_pMappers;
+  const OdCmTransparency* m_pTransparency;
+public:
+  OdGiFaceData()
+    : m_pColors(NULL)
+    , m_pTrueColors(NULL)
+    , m_pLayerIds(NULL)
+    , m_pSelectionMarkers(NULL)
+    , m_pVisibilities(NULL)
+    , m_pNormals(NULL)
+    , m_pMaterialIds(NULL)
+    , m_pMappers(NULL)
+    , m_pTransparency(NULL)
+  {}
+
+  /** \details
+    Sets the face colors to be used by this object.
+
+    \param colors [in]  Array of color indices.
+        
+    \note
+    You cannot call both setColors() and setTrueColors().
+
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setColors(
+    const OdUInt16 *colors)                    { m_pColors = colors; }
+
+  /** \details
+    Sets the face colors to be used by this object.
+
+    \param colors [in]  Array of OdCmEntityColor objects.
+        
+    \note
+    You cannot call both setColors() and setTrueColors().
+
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setTrueColors(
+    const OdCmEntityColor *colors)         { m_pTrueColors = colors; }
+
+  /** \details
+    Sets the face Layer Table Records to be used by this object.
+
+    \param layerIds [in]  Array of LayerTableRecord Object IDs.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setLayers(
+    OdDbStub* *layerIds)                       { m_pLayerIds = layerIds; }
+
+  /** \details
+    Sets the face graphics system selection markers to be used by this object.
+
+    \param selectionMarkers [in]  Array of graphics system selection markers.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setSelectionMarkers(
+    const OdGsMarker* selectionMarkers) { m_pSelectionMarkers = selectionMarkers; }
+
+  /** \details
+    Sets the face normal vectors to be used by this object.
+
+    \param normals [in]  Array of normal vectors.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setNormals(
+    const OdGeVector3d* normals)              { m_pNormals = normals; }
+
+  /** \details
+    Sets the face visibilities to be used by this object.
+
+    \param visibilities [in]  Array of visibility values.
+
+    \remarks
+    Each visibility must be one of the following:
+     
+    <table>
+    Name              Value   Description
+    kOdGiInvisible    0       Invisible 
+    kOdGiVisible      1       Visible 
+    </table>
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setVisibility(
+    const OdUInt8* visibilities)           { m_pVisibilities = visibilities; }
+
+  /** \details
+    Sets the face material object IDs to be used by this object.
+
+    \param materialIds [in]  Array of material object IDs.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setMaterials(
+    OdDbStub* *materialIds)                { m_pMaterialIds = materialIds; }
+
+  /** \details
+    Sets the face material mappers to be used by this object.
+
+    \param mappers [in]  Array of material mappers.
+        
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setMappers(
+    const OdGiMapper* mappers)             { m_pMappers = mappers; }
+
+  /** \details
+    Sets the face transparency to be used by this object.
+
+    \param transparencies [in]  Array of OdCmTransparency objects.
+        
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setTransparency(
+    const OdCmTransparency *transparencies) { m_pTransparency = transparencies; }
+
+  /** \details
+    Returns the array of face colors used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdUInt16* colors() const           { return m_pColors; }
+
+  /** \details
+    Returns the array of face colors used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdCmEntityColor* trueColors() const       { return m_pTrueColors; }
+
+  /** \details
+    Returns the array of face LayerTableRecord Object IDs used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  OdDbStub** layerIds() const         { return m_pLayerIds; }
+
+  /** \details
+    Returns the array of face graphics system selection markers used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdGsMarker* selectionMarkers() const { return m_pSelectionMarkers; }
+
+  /** \details
+    Returns the array of face normal vectors used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdGeVector3d* normals() const          { return m_pNormals; }
+
+  /** \details
+    Returns the array of edge visibilities used by this object.
+
+    \remarks
+    Each visibility must be one of the following:
+     
+    <table>
+    Name              Value   Description
+    kOdGiInvisible    0       Invisible 
+    kOdGiVisible      1       Visible 
+    </table>
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdUInt8* visibility() const       { return m_pVisibilities; }
+
+  /** \details
+    Returns the array of face material object IDs used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  OdDbStub** materials() const            { return m_pMaterialIds; }
+
+  /** \details
+    Returns the array of face material mappers used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdGiMapper* mappers() const       { return m_pMappers; }
+
+  /** \details
+    Returns the array of face transparency used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdCmTransparency* transparency() const { return m_pTransparency; }
+};
+
+typedef enum
+{
+  kOdGiCounterClockwise = -1,
+  kOdGiNoOrientation    = 0,
+  kOdGiClockwise        = 1
+} OdGiOrientationType;
+
+
+/** \details
+    This class contains arrays of vertex attributes for meshes and shells.
+    
+    \remarks
+    VertexData objects are optional; they can be optionally passed 
+    to OdGiWorldGeometry and OdGiViewportGeometry when using their 
+	mesh and shell methods.
+	
+	 Setting an 'improper' size of any array will cause unpredictable or fatal results.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class OdGiVertexData
+{
+  const OdGeVector3d*    m_pNormals;
+  OdGiOrientationType    m_orientationFlag;
+  const OdCmEntityColor* m_pTrueColors;
+  const OdGePoint3d*     m_pMappingCoords;
+public:
+  OdGiVertexData()
+    : m_pNormals(NULL)
+    , m_orientationFlag(kOdGiNoOrientation)
+    , m_pTrueColors(NULL)
+    , m_pMappingCoords(NULL)
+  {}
+
+  enum MapChannel { kAllChannels = 0 };
+
+  /** \details
+    Sets the vertex normal vectors to be used by this object.
+
+    \param normals [in]  Array of normal vectors.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setNormals(
+    const OdGeVector3d* normals)              { m_pNormals = normals; }
+
+  /** \details
+    Sets the orientation type to be used by this object.
+
+    \param orientationFlag [in]  Orientation type.
+
+    \remarks
+    The orientation type defines the positive direction of the normal at the vertices.
+
+    orientationFlag must be one of the following:
+
+    <table>
+    Name                      Value 
+    kOdGiCounterClockwise     -1
+    kOdGiNoOrientation        0
+    kOdGiClockwise            1
+    </table>
+  */
+  void setOrientationFlag(
+    const OdGiOrientationType orientationType) { m_orientationFlag = orientationType; }
+
+  /** \details
+    Sets the vertex colors to be used by this object.
+
+    \param colors [in]  Array of OdCmEntityColor objects.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setTrueColors(
+    const OdCmEntityColor *colors)         { m_pTrueColors = colors; }
+
+  /** \details
+    Sets the mapping coordinates to be used by this object.
+
+    \param channel [in]  Specifies mapping channel.
+    \param coords [in]  Array of OdGePoint3d objects.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. An incorrect number of elements will have unpredictable or fatal consequences.
+  */
+  void setMappingCoords(
+    MapChannel channel,
+    const OdGePoint3d *coords)             { ODA_ASSERT(channel == kAllChannels); m_pMappingCoords = coords; }
+
+  /** \details
+    Returns the array of vertex normal vectors used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdGeVector3d* normals() const         { return m_pNormals; }
+
+  /** \details
+    Returns the direction of the normal at the vertices that is used by this object.
+
+    \remarks
+    orientationFlag must be one of the following:
+
+    <table>
+    Name                      Value 
+    kOdGiCounterClockwise     -1
+    kOdGiNoOrientation        0
+    kOdGiClockwise            1
+    </table>
+  */
+  OdGiOrientationType orientationFlag() const { return m_orientationFlag; }
+
+  /** \details
+    Returns the array of vertex colors used by this object.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdCmEntityColor* trueColors() const   { return m_pTrueColors; }
+
+  /** \details
+    Returns the array of mapping coordinates used by this object.
+
+    \param channel [in]  Specifies mapping channel.
+
+    \note
+    This function does not make a copy of the array, which should have the same number of elements as the 
+    mesh or shell with which it is used. Writing beyond the array bounds will have unpredictable or fatal consequences.
+  */
+  const OdGePoint3d* mappingCoords(MapChannel channel) const { ODA_ASSERT(channel == kAllChannels); return m_pMappingCoords; }
+};
+
+class OdGiDrawable;
+struct OdGiClipBoundary;
+class OdGiAbstractClipBoundary;
+
+class OdDbPolyline;
+class OdPolyPolygon3d;
+class OdGeNurbCurve3d;
+class OdGiTextStyle;
+class OdDbBody;
+class OdGeEllipArc3d;
+class OdGiPolyline;
+
+/** \details
+    Arc types.
+*/
+typedef enum
+{
+  kOdGiArcSimple = 0,   // Unfilled.
+  kOdGiArcSector = 1,   // Filled area bounded by the arc and its center.
+  kOdGiArcChord  = 2    // Filled area bounded by the arc and its end points
+} OdGiArcType;
+
+/** \details
+    This class defines functions that allow entities to vectorize themselves.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiGeometry : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiGeometry);
+
+  /** \details
+    Returns the model-to-world coordinate transform matrix for the entity being vectorized.
+    
+    \remarks
+    This is the inverse of the matrix returned by getWorldToModelTransform(). 
+
+    If an entity is in one or more blocks, this matrix can be used to
+    determine the WCS coordinates of the entity.  
+  */
+  virtual OdGeMatrix3d getModelToWorldTransform() const = 0;
+
+  /** \details
+    Returns the world-to-model coordinate transform matrix for the entity being vectorized.
+    
+    \remarks
+    This is the inverse of the matrix returned by getModelToWorldTransform(). 
+  */
+  virtual OdGeMatrix3d getWorldToModelTransform() const = 0;
+  
+  /** \details
+    Specifies a model transformation matrix for the current transformation stack.  
+    
+    \remarks
+    When a vector is specified, the transformation is created using the arbitrary axis algorithm 
+    on the vector. 
+ 
+    The specified transformation is concatenated to the current model transformation 
+	(which is initially the identity transform). The resulting model transformation 
+	is subsequently applied to all geometry introduced into this vectorization context, 
+	until popModelTransform() is called.
+    
+    \param normal [in]  Normal vector.
+    \param xfm [in]  Transformation matrix.
+    
+  */
+  virtual void pushModelTransform(
+    const OdGeVector3d& normal) = 0;
+
+  virtual void pushModelTransform(
+    const OdGeMatrix3d& xfm) = 0;
+
+  /** \details
+    Removes the top transformation off the current transformation stack.
+  */
+  virtual void popModelTransform() = 0;
+  
+  /** \details
+    Introduces a circle to this vectorization context.  
+    
+    \remarks
+    The circle is not filled and takes on the current color.
+    
+    If firstPoint, secondPoint, and thirdPoint are specified, they
+    cannot be colinear and no two can be coincident.
+
+    \param center [in]  Center point.
+    \param radius [in]  Radius.
+    \param normal [in]  Normal.
+  */
+  virtual void circle(
+    const OdGePoint3d& center, 
+    double radius, 
+    const OdGeVector3d& normal) = 0;
+  
+  /** \param firstPoint [in]  First point of a 3-point circle.
+    \param secondPoint [in]  Second point of a 3-point circle.
+    \param thirdPoint [in]  Third point of a 3-point circle.
+  */
+  virtual void circle(
+    const OdGePoint3d& firstPoint, 
+    const OdGePoint3d& secondPoint, 
+    const OdGePoint3d& thirdPoint) = 0;
+  
+/** \details
+    Introduces a circular arc to this vectorization context.  
+    
+    \param center [in]  Center point.
+    \param radius [in]  Radius.
+    \param normal [in]  Normal vector.
+    \param startVector [in]  Start of the arc.
+    \param sweepAngle [in]  Angle that defines the arc.
+    \param arcType [in]  Arc type.
+    
+    \remarks
+    The arc takes on the current color.      
+
+    If firstPoint, secondPoint, and thirdPoint are specified, they
+    cannot be colinear and no two can be coincident.
+    
+    arcType must be one of the following:
+    
+    <table>
+    Name              Value     Description
+    kOdGiArcSimple    0         Unfilled.
+    kOdGiArcSector    1         Filled area bounded by the arc and its center.
+    kOdGiArcChord     2         Filled area bounded by the arc and its end points
+    </table>
+    
+    \note
+    All angles are expressed in radians.
+*/
+  virtual void circularArc(
+    const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple) = 0;
+  
+  /** \param firstPoint [in]  First point of a 3-point arc.
+    \param secondPoint [in]  Second point of a 3-point arc.
+    \param thirdPoint [in]  Third point of a 3-point arc.
+  */
+  virtual void circularArc(
+    const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& thirdPoint,
+    OdGiArcType arcType = kOdGiArcSimple) = 0;
+
+  /** \details
+    Introduces a polyline to this vectorization context.  
+    
+    \remarks
+    The polyline is unfilled and takes on the current color and thickness. Use polygon() to render filled areas.
+    
+    The polyline is rendered as a series of lines connecting the first point
+    in vertexList to the second, the second to the third, etc.
+    All points must be coplanar.
+
+    Use polygon() to render closed areas.
+
+    \param numVertices [in]  Number of vertices.
+    \param vertexList [in]  Array of vertices.
+    \param pNormal [in]  Pointer to the normal vector.
+    \param baseSubEntMarker [in]  Not used.
+  */
+  virtual void polyline(
+    OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    OdGsMarker baseSubEntMarker = -1) = 0;
+  
+  /** \details
+    Introduces a polygon to this vectorization context.  
+    
+    \remarks
+    The polygon is filled and takes on the current color. Use polyline() to render unfilled areas.
+
+    The polygon is rendered as a series of lines connecting the first point
+    in vertexList to the second, the second to the third, etc.
+    All points must be coplanar.
+
+    \param numVertices [in]  Number of vertices.
+    \param vertexList [in]  Array of vertices.
+  */
+  virtual void polygon(
+    OdInt32 numVertices, 
+    const OdGePoint3d* vertexList) = 0;
+
+  /** \details
+    Introduces a lightweight polyline into this vectorization context.
+    
+    \remarks
+    The polyline may contain varying segment widths, straight segments
+    and arc segments.    
+
+    The polyline takes on the current color.
+    
+    All points must be coplanar.
+
+    \param polyline [in]  Polyline.
+    \param fromIndex [in]  Index of the first segment to be processed.
+    \param numSegs [in]  Number of segments to be processed (0 indicates all segments).
+  */
+  virtual void pline(
+    const OdGiPolyline& polyline, 
+    OdUInt32 fromIndex = 0, 
+    OdUInt32 numSegs = 0) = 0;
+
+  /** \details
+    Introduces a mesh into this vectorization context.  
+    
+    \param numRows [in]  Number of rows.
+    \param numColumns [in]  Number of columns.
+    \param vertexList [in]  Array of vertices.
+    \param pEdgeData [in]  Pointer to additional edge data.
+    \param pFaceData [in]  Pointer to additional face data.
+    \param pVertexData [in]  Pointer to additional vertex data. 
+
+    \remarks
+    A mesh is a surface defined by a grid of vertices, and corresponds to a Polygon Mesh.
+    By default, a mesh takes on the current color. Color, linetype, and
+    and other properties can be controlled supplying the appropriate
+    data for the pEdgeData, pFaceData, and pVertexData arguments.
+
+    \note
+    * vertexList must have numRows � numColumns elements.
+    * The arrays in *pEdgeData must be NULL or contain (numRows - 1) � numColumns + numRows � (numColumns -1) elements.
+    * The arrays in *pFaceData must be NULL or contain (numRows - 1) � (numColumns - 1) elements.
+    * The arrays in *pVertexData must be NULL or contain numRows � numColumns elements. 
+  */
+  virtual void mesh(
+    OdInt32 numRows,
+    OdInt32 numColumns,
+    const OdGePoint3d* vertexList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0) = 0;
+  
+  /** \details
+    Introduces a shell into this vectorization context.  
+    
+    \param numVertices [in]  Number of vertices.
+    \param vertexList [in]  Array of vertices.
+    \param faceListSize [in]  Number of entries in facesList.
+    \param faceList [in]  Array of integers defining faces.
+    \param pEdgeData [in]  Pointer to additional edge data.
+    \param pFaceData [in]  Pointer to additional face data.
+    \param pVertexData [in]  Pointer to additional vertex data.
+    
+    \remarks
+    A shell is a set of faces that can contain holes, and corresponds to a Polyface mesh.
+
+    By default, a mesh takes on the current color. Color, linetype, and
+    and other properties can be controlled supplying the appropriate
+    data for the pEdgeData, pFaceData, and pVertexData arguments.
+    
+    \remarks
+    * The arrays in *pEdgeData must be NULL or contain the same number of elements as there are edges.
+    * The arrays in *pFaceData must be NULL or contain the same number of elements as there are faces.
+    * The arrays in *pVertexData must be NULL or contain numVertices elements. 
+    
+    \sa
+    Faces
+  */
+  virtual void shell(
+    OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    OdInt32 faceListSize,
+    const OdInt32* faceList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0) = 0;
+  
+  /** \details
+    Introduces text into this vectorization context.
+    
+    \param position [in]  Position of the text string.
+    \param normal [in]  Normal vector of the text.
+    \param direction [in]  Baseline direction of the text.
+    \param height [in]  Height of the text.
+    \param width [in]  Width factor of the text.
+    \param oblique [in]  Oblique angle.
+    \param msg [in]  Text string.
+
+    \remarks
+    The text takes on the current color.
+ 
+    If numBytes is not specified, msg must be null terminated.
+    
+    \note
+    All angles are expressed in radians.
+
+    As currently implemented, this function ignores width and oblique.
+    They will be fully implemented in a future release.
+  */
+  virtual void text(
+    const OdGePoint3d& position,
+    const OdGeVector3d& normal, 
+    const OdGeVector3d& direction,
+    double height, 
+    double width, 
+    double oblique, 
+    const OdString& msg) = 0;
+  
+  /** \param length [in]  Number of characters in msg (not including the optional null character).
+    \param raw [in]  If and only if true, escape sequences, such as %%P, will not be converted to special characters.
+    \param pTextStyle [in]  Pointer to the TextStyle for the text.
+  */
+  virtual void text(
+    const OdGePoint3d& position,
+    const OdGeVector3d& normal, 
+    const OdGeVector3d& direction,
+    const OdChar* msg, 
+    OdInt32 length, 
+    bool raw, 
+    const OdGiTextStyle* pTextStyle) = 0;
+  
+  /** \details
+    Introduces an Xline into this vectorization context.  
+      
+    \remarks
+    Xlines are infinite lines passing through two points.
+ 
+    The xline takes on the current color.
+    
+    \param firstPoint [in]  First point.
+    \param secondPoint [in]  Second point.
+  */
+  virtual void xline(
+    const OdGePoint3d& firstPoint, 
+    const OdGePoint3d& secondPoint) = 0;
+
+  /** \details
+    Introduces a Ray into this vectorization context.  
+    
+    \remarks
+    A Ray is a semi-infinite line that starts at the basePoint, and passes 
+    through the throughPoint.
+
+    The ray takes on the current color.
+ 
+    \param basePoint [in]  Base point.
+    \param throughPoint [in]  Through point
+  */
+  virtual void ray(
+    const OdGePoint3d& basePoint, 
+    const OdGePoint3d& throughPoint) = 0;
+  
+  /** \details
+    Introduces a NURBS curve into this vectorization context.
+      
+    \remarks
+    The curve takes on the current color.
+    
+    \param nurbsCurve [in]  NURBS curve data.
+  */
+  virtual void nurbs(
+    const OdGeNurbCurve3d& nurbsCurve) = 0;
+
+  /** \details
+    Introduces an elliptical arc into this vectorization context.
+        
+    \param ellipArc [in]  Elliptical arc.
+    \param endPointsOverrides [in]  Array of points to be used as the first and last points of the vectorized arc.
+    \param arcType [in]  Arc type.
+        
+    \remarks
+    arcType must be one of the following:
+    
+    <table>
+    Name              Value     Description
+    kOdGiArcSimple    0         Unfilled.
+    kOdGiArcSector    1         Filled area bounded by the arc and its center.
+    kOdGiArcChord     3         Filled area bounded by the arc and its end points
+    </table>
+  */
+  virtual void ellipArc(
+    const OdGeEllipArc3d& ellipArc,
+    const OdGePoint3d* endPointsOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple) = 0;
+
+  /** \details
+    Introduces the specified object into this vectorization context.
+    
+    \param pDrawable [in]  Pointer to the Drawable object.
+
+    \remarks
+    Implementations of this method are expected to do the following:
+    * Call OdGiDrawable::subSetAttributes to set attribute information for the object.
+    * Call subWorldDraw on the drawable object  to vectorize it into this context.
+    * If subWorldDraw returns false, call subViewportDraw each viewport.
+  */
+  virtual void draw(
+    const OdGiDrawable* pDrawable) = 0;
+
+  /** \details
+    Specifies a clip boundary for the current clip stack.
+
+    \param pBoundary [in]  Pointer to the boundary.
+
+    \remarks
+    Subsequent objects are clipped until popClipBoundary() is called.
+  */
+  virtual void pushClipBoundary(
+    OdGiClipBoundary* pBoundary) = 0;
+
+  /** \details
+    Removes the top clip boundary from the clip stack.
+  */
+  virtual void popClipBoundary() = 0;
+
+  /** \details
+    Introduces a line into this vectorization context.  
+
+    \param points [in]  Array of WCS start and end points.
+
+	  \remarks
+    The current model transformation is not applied to the line.
+  */
+  virtual void worldLine(
+    const OdGePoint3d points[2]) = 0;
+
+  /** \details
+    Inroduces a image in BGRA format into this vectorization context.
+    
+    \param img [in]  Image in BGRA format.
+    \param origin [in]  Image position in WCS.
+    \param uVec [in]  Image width and X-axis orientation.
+    \param vVec [in]  Image height and Y-axis orientation.
+    \param trpMode [in]  Image transparency processing mode.
+  */
+  virtual void image(
+    const OdGiImageBGRA32& img,
+    const OdGePoint3d& origin,
+    const OdGeVector3d& uVec,
+    const OdGeVector3d& vVec,
+    OdGiRasterImage::TransparencyMode trpMode = OdGiRasterImage::kTransparency8Bit) = 0;
+
+  /** \details
+    Inroduces a boundary for hatch filling.
+    
+    \param edges [in]  Array of 2d curves which represents filling boundary.
+  */
+  virtual void edge(
+    const OdGiEdge2dArray& edges) = 0;
+
+  /** \details
+    Returns currently processing GiDrawable objects graph.
+  */
+  virtual const OdGiPathNode* currentGiPath() const;
+
+  /** \details
+    Specifies a clip boundary with additional clipping information for the current clip stack.
+
+    \param pBoundary [in]  Pointer to the boundary.
+    \param pClipInfo [in]  Additional clipping information.
+
+    \remarks
+    Subsequent objects are clipped until popClipBoundary() is called.
+  */
+  virtual void pushClipBoundary(
+    OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo);
+
+  /** \details
+    Introduces an array of points to this vectorization context.
+
+    \param numPoints [in]  Number of point in array.
+    \param vertexList [in]  Array of points.
+    \param pColors [in]  Array of colors.
+    \param pTransparency [in]  Array of transparencies.
+    \param pNormals [in]  Optional array of normal vectors.
+    \param pSubEntMarkers [in]  Optional array of subentity markers.
+    \param nPointSize [in]  Size of points in pixels.
+
+    \remarks
+    The points takes on the current color if pColors array doesn't specified.
+
+    Lengths of pColors, pTransparency, pNormals and pSubEntMarkers arrays if them set must be equal to numPoints.
+  */
+  virtual void polypoint(
+    OdInt32 numPoints,
+    const OdGePoint3d* vertexList,
+    const OdCmEntityColor* pColors,
+    const OdCmTransparency* pTransparency,
+    const OdGeVector3d* pNormals = NULL,
+    const OdGsMarker* pSubEntMarkers = NULL,
+    OdInt32 nPointSize = 0);
+  ODRX_SEALED_VIRTUAL void polypoint(
+    OdInt32 numPoints,
+    const OdGePoint3d* vertexList,
+    const OdCmEntityColor* pColors,
+    const OdGeVector3d* pNormals = NULL,
+    const OdGsMarker* pSubEntMarkers = NULL) ODRX_SEALED;
+  ODRX_SEALED_VIRTUAL void polypoint(
+    OdInt32 numPoints,
+    const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormals = NULL,
+    const OdGsMarker* pSubEntMarkers = NULL) ODRX_SEALED;
+
+  /** \details
+    Introduces a row of points to this vectorization context.
+
+    \param numPoints [in]  Number of points to draw.
+    \param startPoint [in]  First point to draw.
+    \param dirToNextPoint [in]  Offset and direction between next points.
+
+    \remarks
+    The points takes on the current color.
+  */
+  virtual void rowOfDots(
+    OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint);
+};
+
+inline const OdGiPathNode* OdGiGeometry::currentGiPath() const
+{
+  return 0;
+}
+
+inline void OdGiGeometry::pushClipBoundary(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* /*pClipInfo*/)
+{
+  // Some implementations could not support additional clipping styles, so redirect to old style clipping method by default.
+  pushClipBoundary(pBoundary);
+}
+
+inline void OdGiGeometry::polypoint(OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* /*pColors*/,
+                                    const OdCmTransparency* /*pTransparency*/, const OdGeVector3d* pNormals, const OdGsMarker* pSubEntMarkers,
+                                    OdInt32 /*nPointSize*/)
+{
+  OdGePoint3d tmpVerts[2];
+  for (OdInt32 nPoint = 0; nPoint < numPoints; nPoint++)
+  {
+    const OdGeVector3d *pNormal = (pNormals) ? (pNormals + nPoint) : NULL;
+    const OdGsMarker baseSubEntMarker = (pSubEntMarkers) ? pSubEntMarkers[nPoint] : -1;
+    tmpVerts[1] = tmpVerts[0] = vertexList[nPoint];
+    polyline(2, tmpVerts, pNormal, baseSubEntMarker);
+  }
+}
+
+inline void OdGiGeometry::polypoint(OdInt32 numPoints, const OdGePoint3d* vertexList, const OdCmEntityColor* pColors,
+                                    const OdGeVector3d* pNormals, const OdGsMarker* pSubEntMarkers)
+{
+  polypoint(numPoints, vertexList, pColors, NULL, pNormals, pSubEntMarkers);
+}
+
+inline void OdGiGeometry::polypoint(OdInt32 numPoints, const OdGePoint3d* vertexList,
+                                    const OdGeVector3d* pNormals, const OdGsMarker* pSubEntMarkers)
+{
+  polypoint(numPoints, vertexList, NULL, pNormals, pSubEntMarkers);
+}
+
+inline void OdGiGeometry::rowOfDots(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint)
+{
+  OdGePoint3d tmpVerts[2];
+  for (OdInt32 nPoint = 0; nPoint < numPoints; nPoint++)
+  {
+    tmpVerts[1] = tmpVerts[0] = startPoint + dirToNextPoint * double(nPoint);
+    polyline(2, tmpVerts);
+  }
+}
+
+/** \details
+This class is used to ensure OdGiGeometry::pushClipBoundary()/OdGiGeometry::popClipBoundary() 
+consistency (exception safety).
+
+\sa
+TD_Gi
+
+<group OdGi_Classes> 
+*/
+class OdGiClipBoundarySaver
+{
+  bool m_bSave;
+  OdGiGeometry& m_geom;
+public:
+  OdGiClipBoundarySaver(OdGiGeometry& geom, bool bSave) : m_bSave(bSave), m_geom(geom){}
+  void setSave(bool bSave){m_bSave = bSave;}
+  ~OdGiClipBoundarySaver()
+  {
+    if (m_bSave)
+      m_geom.popClipBoundary();
+  }
+};
+
+/** \details
+This class is used to ensure OdGiGeometry::pushModelTransform()/OdGiGeometry::popModelTransform() 
+consistency (exception safety).
+
+\sa
+TD_Gi
+
+<group OdGi_Classes> 
+*/
+class OdGiModelTransformSaver
+{
+  OdGiGeometry& m_geom;
+public:
+  OdGiModelTransformSaver(OdGiGeometry& geom, const OdGeMatrix3d& xMat) : m_geom(geom)
+  {
+    m_geom.pushModelTransform(xMat);
+  }
+  ~OdGiModelTransformSaver()
+  {
+    m_geom.popModelTransform();
+  }
+};
+
+/* #11298 info: Matrix identity check was removed from OdGiModelTransformSaver and place into separate OdGiModelTransformSaverOpt class.
+                Identity check is also time consuming operation and it is only makes things worse if matrices become identity seldom in
+                some case. Following statistics on 10 typical drawing was collected on 18.10.2012:
+
+                     Source File                                     : Line     Identity=true      Identity=false     % of identity=true
+..\..\..\..\..\TD\Source\Gs\GsBlockReferenceNode.cpp                 : 1263     3202               60838              5%
+..\..\..\..\..\TD\Source\Gs\GsBlockReferenceNodeImpl.cpp             : 707      2                  64364              0.003%
+..\..\..\..\..\TD\Source\Gs\GsBlockReferenceNodeImpl.cpp             : 868      3                  62                 4.6%
+..\..\..\..\..\TD\Source\database\Entities\DbBlockReference.cpp      : 1101     25                 64905              0.038%
+..\..\..\..\..\TD\Source\database\Entities\DbDimension.cpp           : 1307     12546              16                 99.87%
+..\..\..\..\..\TD\Source\database\Entities\DbHatchRender.cpp         : 714      38566              0                  100%
+..\..\..\..\..\TD\Source\database\Entities\DbMInsertBlock.cpp        : 322      1603               30457              5%
+..\..\..\..\..\TD\Source\database\Entities\DbModelerGeometryImpl.cpp : 1410     8                  0                  100%
+..\..\..\..\..\TD\Source\database\Entities\DbModelerGeometryImpl.cpp : 1545     6                  0                  100%
+..\..\..\..\..\TD\Source\database\Entities\DbPoint.cpp               : 264      0                  208                0%
+..\..\..\..\TD\Source\database\GiDefaultContext.cpp                  : 454      4405               0                  100%
+..\..\..\..\TD\Source\database\GiDefaultContext.cpp                  : 557      124                23626              0.522%
+
+All places where percents of identity=true < 10% will use OdGiModelTransformSaver. Places where Identity=true very frequent will use
+OdGiModelTransformSaverOpt. Unchecked places isn't principle since them are called very seldom.                                          */
+
+/** \details
+This class is used to ensure OdGiGeometry::pushModelTransform()/OdGiGeometry::popModelTransform() 
+consistency (exception safety) with additional optimization check of matrix identity.
+
+\sa
+TD_Gi
+
+<group OdGi_Classes> 
+*/
+class OdGiModelTransformSaverOpt
+{
+  OdGiGeometry& m_geom;
+  bool          m_bIdentity;
+public:
+  OdGiModelTransformSaverOpt(OdGiGeometry& geom, const OdGeMatrix3d& xMat) : m_geom(geom)
+  {
+    // @@@TODO: check, probably simple memcmp will be more effective here. memcmp is very assembler-optimized in modern crt's. Identity
+    //          matrix could be inexact only after some multiplications and etc. But statistics must be collected first for isEqual check
+    //          and for memcmp, if it will be faster and precisely enough isEqualTo check with tolerance can be exchanged by memcmp.
+    m_bIdentity = xMat.isEqualTo(OdGeMatrix3d::kIdentity);
+    if (!m_bIdentity)
+      m_geom.pushModelTransform(xMat);
+  }
+  ~OdGiModelTransformSaverOpt()
+  {
+    if (!m_bIdentity)
+      m_geom.popModelTransform();
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometryRecorderPlayer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometryRecorderPlayer.h
new file mode 100755
index 0000000..8f02983
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometryRecorderPlayer.h
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_GEOMETRY_RECORDER_PLAYER__
+#define __OD_GI_GEOMETRY_RECORDER_PLAYER__
+
+#include "Gi/GiConveyorGeometry.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  Records conveyor geometry and plays it.
+
+  Library: TD_Gi
+  <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiGeometryRecorderPlayer: public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiGeometryRecorderPlayer);
+  virtual OdGiConveyorGeometry& recorderGeometry() = 0;
+  virtual void play(OdGiConveyorGeometry& destGeometry) = 0;
+  virtual void rewind() = 0;
+};
+
+typedef OdSmartPtr<OdGiGeometryRecorderPlayer> OdGiGeometryRecorderPlayerPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_GEOMETRY_RECORDER_PLAYER__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometrySimplifier.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometrySimplifier.h
new file mode 100755
index 0000000..4242ec5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiGeometrySimplifier.h
@@ -0,0 +1,810 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIGEOMETRYSIMPLIFIER_H__
+#define __ODGIGEOMETRYSIMPLIFIER_H__
+
+#include "Gi/GiExport.h"
+#include "Gi/GiConveyorGeometry.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GePoint2dArray.h"
+#include "Ge/GePoint3dArray.h"
+#include "Ge/GeVector3dArray.h"
+#include "Gs/Gs.h"
+
+class OdGiDeviation;
+
+class OdGeLineSeg2d;
+class OdGeLine2d;
+class OdGeCircArc2d;
+class OdGeCircArc3d;
+class OdGeEllipArc3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class provides tessellation functionality for the Teigha vectorization framework.
+    
+    \remarks
+    Tessellation consists of breaking complex entities into sets of simpler entities.  
+    
+    An instance of this class is used to simplify the geometry produced by the Teigha vectorization
+    framework.
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiGeometrySimplifier : public OdGiConveyorGeometry
+{
+  // Old version do not override !!!
+  // Overide shellFaceOut() or triangleOut() instead
+  virtual int polygonWithHolesOut(OdUInt32, const OdGePoint3d*, OdUInt32 , OdUInt32*);
+protected:
+  /** \details
+    Draws an arc of the specified type.
+    \param arcType [in]  Arc type.
+    \param center [in]  Center of arc.
+    \param points [out]  Receives an array of points comprising the arc.
+    \param pNormal [in]  Pointer to the normal to the arc.
+    \param pExtrusion [in]  Pointer to the extrusion direction of the arc.
+  */
+  void drawTypedArc(OdGiArcType arcType, const OdGePoint3d& center,
+    OdGePoint3dArray& points, const OdGeVector3d* pNormal, const OdGeVector3d* pExtrusion);
+protected:
+  OdGiConveyorContext*  m_pDrawCtx;
+  OdGiSubEntityTraits*  m_pTraits;
+  OdGsMarker            m_baseSubEntMarker;
+
+  enum SimplifierFlags
+  {
+    kSimplProcessingText   = (1 << 0),
+    kSimplFillModeDisabled = (1 << 1),
+    kSimplLastFlag         = kSimplFillModeDisabled
+  };
+  OdUInt32              m_simplFlags;
+private:
+  OdInt32               m_nVertexCount;
+  const OdGePoint3d*    m_pVertexList;
+  const OdGiVertexData* m_pVertexData;
+  OdGePoint2dArray      m_loopsPnts;
+  OdGePoint3dArray      m_points3d1; // for shellProc/plineProc level
+  OdGePoint3dArray      m_points3d2; // for triangleOut/polylineOut level
+protected:
+  const OdGiDeviation*  m_pDeviation;
+  OdGeDoubleArray       m_deviations;
+  OdGsView::RenderMode  m_renderMode;
+
+  /** \details
+    Returns the recommended maximum deviation of the current vectorization 
+    for the specified point on the curve or surface being tesselated.
+    \param deviationType [in]  Deviation type.
+    \param pointOnCurve [in]  Point on the curve.
+  */
+  double deviation(const OdGiDeviationType deviationType, const OdGePoint3d& pointOnCurve) const;
+
+  /** \details
+    Returns the FillMode and DrawEdges for this Vectorizer object.
+    \param drawEdges [out]  Receives the DrawEdges value.
+    \note
+    As implemented, this function returns false if called without arguments:
+  */
+  bool fillMode();
+  bool fillMode(bool& drawEdges);
+  bool fillMode(bool& drawEdges, bool& secColor);
+  bool circleArcFillMode();
+  bool shmFillMode(bool& drawEdges);
+  bool shmFillMode(bool& drawEdges, bool& secColor);
+  /** \details
+    Returns true if and only if this Vectorizer object is processing text.
+  */
+  bool processingText() const { return GETBIT(m_simplFlags, kSimplProcessingText); }
+  /** \details
+    Returns the OdGiContext for this Vectorizer object.
+  */
+  OdGiContext& giCtx() const { return const_cast<OdGiContext&>(m_pDrawCtx->giContext()); }
+
+  /** \details
+    Controls plineProc arc segment output.
+    \param drawContextFlags [in]  Input conveyor context draw flags.
+    \remarks
+    Returns true if plineProc arc segments as arc output enabled.
+    Returns false to output plineProc arc segments as polyline segments chain.
+  */
+  virtual bool plineArcSegmentsAsArcProc(OdUInt32 drawContextFlags) const;
+public:
+  OdGiGeometrySimplifier();
+  ~OdGiGeometrySimplifier();
+
+  /** \details
+      Specifies the maximum deviation allowed during the 
+      tessellation process.  
+      \remarks
+      This value sets the limit for the maximum difference 
+      between the actual curve or surface, and the tessellated curve or surface.
+
+      \param deviations [in]  Array of deviation values.
+      \remarks
+      The deviation values (in isotropic world space) are  
+      the deviation types defined by the OdGiDeviationType enum.
+
+      Each OdGiDeviationType value is used as an index into this array.
+  */
+  void setDeviation(const OdGeDoubleArray& deviations);
+
+  /** \param pDeviation [in]  Deviation to be used for anisotropic space (perspective view).
+  */
+  void setDeviation(const OdGiDeviation* pDeviation);
+
+  /** \details
+    Returns the render mode for this object.
+       
+    \remarks
+    renderMode() returns one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  OdGsView::RenderMode renderMode() { return m_renderMode; }
+
+  /** \details
+     Sets the OdGiConveyorContext for this object.  
+     \param pDrawCtx [in]  Pointer to the draw context.
+     \note
+     The draw context must be set before 
+     calling any of the tessellation functions.
+  */
+  void setDrawContext(OdGiConveyorContext* pDrawCtx);
+
+  /** \details
+    Returns the OdGiConveyorContext associated with this Vectorizer object.
+  */
+  OdGiConveyorContext* drawContext( ) { return m_pDrawCtx; }
+  const OdGiConveyorContext* drawContext( ) const { return m_pDrawCtx; }
+
+  /** \details
+    Passes polyline data to this Vectorizer object.
+    \note
+    This function is called by the OdGiGeometrySimplifier class to 
+    pass polyline data generated during tessellation, to a client application.
+
+    Client applications have the option of overriding this function to process 
+    the data themselves.  If the function is not overridden, 
+    the default implementation of this function calls polylineOut with the vertex list.
+
+    \param numPoints [in]  Number of points in the polyline.
+    \param vertexList [in]  Array of vertices that make up the polyline.
+  */
+  virtual void polylineOut(OdInt32 numPoints, const OdGePoint3d* vertexList);
+
+  /** \details
+      Passes polygon data to this Vectorizer object.
+      \note
+      This function is called by the OdGiGeometrySimplifier class to 
+      pass polygon data generated during tessellation, to a client application.
+      Clients should override this function.
+
+      \param numPoints [in]  Number of points in the polygon.
+      \param vertexList [in]  Array of vertices that make up the polygon.
+      \param pNormal [in]  Normal vector for the polygon.
+  */
+  virtual void polygonOut(OdInt32 numPoints, 
+    const OdGePoint3d* vertexList, 
+    const OdGeVector3d* pNormal = 0);
+
+  /** \details
+      Sets vertex data for tessilation of meshes and shells.
+      \remarks
+      Called by the default implementations of meshProc and shellProc, to 
+      set vertex data that will be used in the tessellation of these objects.
+
+      \param numVertices [in]  Number of vertices in the mesh or shell.
+      \param vertexList [in]  Array of vertices that make up the mesh or shell.
+      \param pVertexData [in]  Pointer to additional vertex data. 
+          
+      \sa
+      OdGiVertexData, Vectorization Primatives
+  */
+  void setVertexData(OdInt32 numVertices,
+    const OdGePoint3d* vertexList,
+    const OdGiVertexData* pVertexData = 0);
+
+  /** \details
+      Returns the vertex count set in the most recent call to setVertexData.
+  */
+  OdInt32 vertexDataCount() const
+  {
+    return m_nVertexCount;
+  }
+
+  /** \details
+      Returns the vertex list set in the most recent call to setVertexData.
+  */
+  const OdGePoint3d* vertexDataList() const
+  {
+    return m_pVertexList;
+  }
+
+  /** \details
+      Returns the vertex attribute data set in the most recent call to setVertexData.
+  */
+  const OdGiVertexData* vertexData() const
+  {
+    return m_pVertexData;
+  }
+
+  /** \details
+      Returns base subentity selection marker for polylineOut().
+  */
+  OdGsMarker baseSubEntMarker() const
+  {
+    return m_baseSubEntMarker;
+  }
+
+  /** \note
+      Client applications have the option of overriding this function to process the polyline
+      data themselves.  If the function is not overridden, the default implementation of 
+      this function processes the polyline, taking into account the following:
+
+        * The pXfm transformation (if any) that must be applied to the polyline.
+        * Extrusion of the polyline (if it has a non-zero thickness).
+        * Creating the closing segment if the polyline is closed.
+        * Start and end widths for each segment, or constant width, if applicable.
+        * Arc segments (if bulge values are present).
+
+      In the default implementation of this function, line segments with a non-zero width 
+      will be converted into calls to shellProc, and segments with no width will generate
+      calls to polylineProc.  Arc segments with non-zero width will be converted into 
+      calls to polygonProc, and arc segments with no width will generate calls to 
+      polylineProc.      
+
+      OdGiGeometrySimplifier::plineProc is only called for polylines with a continuous
+      linetype. 
+  */
+  virtual void plineProc(const OdGiPolyline& polyline,
+    const OdGeMatrix3d* pXfm = 0,
+    OdUInt32 fromIndex = 0,
+    OdUInt32 numSegs = 0);
+
+  /** \note
+      Client applications have the option of overriding this function to process the polyline
+      data themselves.  If the function is not overridden, the default implementation
+      of this function processes the polyline, calling polylineOut if the data is not 
+      extruded, or meshProc if an extrusion value is present.
+
+      OdGiGeometrySimplifier::polylineProc is only called for polylines with a continuous
+      linetype. 
+  */
+  virtual void polylineProc(OdInt32 numPoints, 
+    const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0, 
+    const OdGeVector3d* pExtrusion = 0,
+    OdGsMarker baseSubEntMarker = -1);
+
+  /** \note
+      Client applications have the option of overriding this function to process the polygon
+      data themselves.  If the function is not overridden, the default implementation
+      of this function processes the polygon, calling polygonOut if the data is not 
+      extruded, or shellProc if an extrusion value is present.
+  */
+  virtual void polygonProc(OdInt32 numPoints, 
+    const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0, 
+    const OdGeVector3d* pExtrusion = 0);
+
+  /** \note
+     This function should not be overridden by clients. 
+  */
+  virtual void xlineProc(const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint);
+
+  /** \note
+      This function should not be overridden by clients. 
+  */
+  virtual void rayProc(const OdGePoint3d& basePoint, const OdGePoint3d& throughPoint);
+
+  /** \note
+      Client applications have the option of overriding this function to process the mesh
+      data themselves.  If the function is not overridden, the default implementation
+      of this function processes the mesh into a set of facets.  More specifically,
+      the default meshProc function calls setVertexData, and the calls either
+      generateMeshFaces for filled facets, or generateMeshWires for a wireframe.
+  */
+  virtual void meshProc(OdInt32 numRows,
+    OdInt32 numColumns,
+    const OdGePoint3d* vertexList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+
+  /** \details
+    Tessellates a wireframe mesh.
+    \note
+    This function is called from the default implementation of meshProc
+    to tessellate a wireframe mesh. Vertex data needed for this function
+    can be obtained by calling vertexDataList and vertexData.
+
+    Client applications have the option of overriding this function to process the mesh
+    data themselves.  If the function is not overridden, the default implementation
+    of this function processes the mesh into a set of facets.  More specifically,
+    the default generateMeshWires function processes mesh attributes, and calls
+    polylineOut with the tessellated mesh data.
+
+    \param numRows [in]  Number of rows in the mesh.
+    \param numColumns [in]  Number of columns in the mesh.
+    \param pEdgeData [in]  Pointer to additional edge data.
+    \param pFaceData [in]  Pointer to additional face data.
+
+    \sa
+    OdGiEdgeData, OdGiFaceData
+  */
+  virtual void generateMeshWires(OdInt32 numRows, 
+    OdInt32 numColumns,
+    const OdGiEdgeData* pEdgeData,
+    const OdGiFaceData* pFaceData);
+
+  /** \details
+    Tessellates a filled mesh.
+    \note
+    This function is called from the default implementation of meshProc
+    to tessellate a filled mesh. Vertex data needed for this function
+    can be obtained by calling vertexDataList and vertexData.
+
+    Client applications have the option of overriding this function to process the mesh
+    data themselves.  If the function is not overridden, the default implementation
+    of this function processes the mesh into a set of facets.  More specifically,
+    the default generateMeshFaces function processes mesh attributes, and calls
+    triangleOut function with the tessellated mesh data.
+
+      \param numRows [in]  Number of rows in the mesh.
+      \param numColumns [in]  Number of columns in the mesh.
+      \param pFaceData [in]  Pointer to additional face data.
+
+    \sa
+      OdGiEdgeData, OdGiFaceData
+  */
+  virtual void generateMeshFaces(OdInt32 numRows, OdInt32 numColumns,
+                                 const OdGiFaceData* pFaceData);
+
+  /** \details
+    Outputs a face of a tessilated mesh.
+    \param faceList [in]  Array of numbers that define the face.
+    \param pNormal [in]  Pointer to the normal to the face.
+    \sa
+    Vectorization Primitives
+  */
+  virtual void meshFaceOut(const OdInt32* faceList, const OdGeVector3d* pNormal);
+
+  /** \note
+      Client applications have the option of overriding this function to process the shell
+      data themselves.  If the function is not overridden, the default implementation
+      of this function processes the shell into a set of facets.  More specifically,
+      the default shellProc function calls setVertexData, and the calls either
+      generateShellFaces for filled facets, or generateShellWires for a wireframe.
+  */
+  virtual void shellProc(OdInt32 numVertices,
+                 const OdGePoint3d* vertexList,
+                 OdInt32 faceListSize,
+                 const OdInt32* faceList,
+                 const OdGiEdgeData* pEdgeData = 0,
+                 const OdGiFaceData* pFaceData = 0,
+                 const OdGiVertexData* pVertexData = 0);
+
+  /** \details
+    Tessellates a wireframe shell
+    \note
+    This function is called from the default implementation of shellProc
+    to tessellate a wireframe shell. Vertex data needed for this function
+    can be obtained by calling vertexDataList and vertexData.
+
+    Client applications have the option of overriding this function to process the shell
+    data themselves.  If the function is not overridden, the default implementation
+    of this function processes the shell into a set of facets.  More specifically,
+    the default generateShellWires function processes shell attributes, and calls
+    polylineOut with the tessellated shell data.
+
+    \param faceListSize [in]  Number of entries in faceList.
+    \param faceList [in]  List of numbers that define the faces in the shell.
+    \param pEdgeData [in]  Pointer to additional edge data.
+    \param pFaceData [in]  Pointer to additional face data.
+
+    \sa
+    OdGiEdgeData, OdGiFaceData, Vectorization Primitives
+  */
+   virtual void generateShellWires(OdInt32 faceListSize,
+                                   const OdInt32* faceList,
+                                   const OdGiEdgeData* pEdgeData = 0,
+                                   const OdGiFaceData* pFaceData = 0);
+
+  /** \details
+    Tessellates a filled wireframe shell.
+    \note
+    This function is called from the default implementation of shellProc
+    to tessellate a filled wireframe shell. Vertex data needed for this function
+    can be obtained by calling vertexDataList and vertexData.
+
+    Client applications have the option of overriding this function to process the shell
+    data themselves.  If the function is not overridden, the default implementation
+    of this function processes the shell into a set of facets.  More specifically,
+    the default generateShellFaces function processes shell attributes, and calls
+    shellFaceOut with the tessellated shell data.
+
+    \param faceListSize [in]  Number of entries in faceList.
+    \param faceList [in]  List of numbers that define the faces in the shell.
+    \param pEdgeData [in]  Pointer to additional edge data.
+    \param pFaceData [in]  Pointer to additional face data.
+
+    \sa
+    OdGiEdgeData, OdGiFaceData, Vectorization Primitives
+  */
+  virtual void generateShellFaces(OdInt32 faceListSize,
+                                  const OdInt32* faceList,
+                                  const OdGiEdgeData* pEdgeData = 0,
+                                  const OdGiFaceData* pFaceData = 0);
+
+  /** \details
+    Outputs the face of a tessilated shell.
+
+    \note
+    This function is called from the default implementation of generateShellFaces,
+    to process a single face in a shell along with the holes in that face.
+    Vertex data needed for this function can be obtained by calling 
+    vertexDataList and vertexData.
+
+    Client applications have the option of overriding this function to process the face
+    data themselves.  If the function is not overridden, the default implementation
+    of this function processes the face information calls
+    triangleOut with the resulting triangle data.
+
+    \param faceListSize [in]  Number of entries in faceList.
+    \param faceList [in]  List of numbers that define the face.
+    \param pNormal [in]  Normal vector for this face.    
+    \sa
+    Vectorization Primitives
+  */
+    virtual void shellFaceOut(OdInt32 faceListSize,
+                        const OdInt32* faceList,
+                        const OdGeVector3d* pNormal);
+
+  /** \details
+    Output a triangle.
+    \note
+    This function is called from the default implementations of shellFaceOut
+    and generateMeshFaces.  Vertex data needed for this function
+    can be obtained by calling vertexDataList and vertexData.
+    
+    Client applications have the option of overriding this function to process 
+    the triangle data themselves.  If the function is not overridden, 
+    the default implementation of this function processes the color 
+    attributes for the triangle, and calls polygonOut.
+
+    \param vertices [in]  List of 3 numbers that define the vertices in the triangle.
+    \param pNormal [in]  Normal vector for this triangle.
+
+  */
+  virtual void triangleOut(const OdInt32* vertices,
+                           const OdGeVector3d* pNormal);
+
+  /** \details
+    Tessilates a shell.
+    \note
+    This auxiliary function that can be used to tessilate a shell up into a set of faces, 
+    each with a maximum number of edges.
+    
+    Vertex data needed for this function is obtained by calling 
+    vertexDataList and vertexData (so the caller of this function is responsible for 
+    setting this data).  Face data is passed to the facetOut function, which 
+    can be overridden by client applications to capture the tessellated data.
+
+    \param faceListSize [in]  Number of entries in faceList.
+    \param faceList [in]  List of numbers that define the faces in the shell.
+    \param pFaceData [in]  Pointer to additional face data.
+    \param maxFacetSize [in]  Maximum number of edges in the tessellated faces produced
+      by this function.
+
+    \sa
+    OdGiFaceData, Vectorization Primitives
+  */
+  virtual void generateShellFacets(OdInt32 faceListSize,
+    const OdInt32* faceList,
+    const OdGiFaceData* pFaceData = 0,
+    OdInt32 maxFacetSize = 3);
+
+  /** \details
+    Outputs a facet.
+    \note
+    This function is called from the default implementations of generateShellFacets.  
+    Vertex data needed for this function is obtained by calling 
+    vertexDataList and vertexData.
+
+    Client applications have the option of overriding this function to process 
+    the face data themselves.  If the function is not overridden, 
+    the default implementation of this function calls polygonOut with the face data.
+
+    \param faceList [in]  List of numbers that define the vertices in the facet.  
+    \param edgeIndices [in]  Currently not used.
+    \param pNormal [in]  Pointer to the normal vector for this face.
+    \sa
+    Vectorization Primitives
+  */
+  virtual void facetOut(const OdInt32* faceList,
+        const OdInt32* edgeIndices,
+        const OdGeVector3d* pNormal);
+
+  /** \note
+    Client applications have the option of overriding these function to process the circle
+    data themselves.  If the function is not overridden, the default implementation
+    tessellates the passed in circle using the current kOdGiMaxDevForCircle deviation,
+    and calls polylineProc with the resulting data.
+  */
+  virtual void circleProc(const OdGePoint3d& center,
+    double radius, 
+    const OdGeVector3d& normal,
+    const OdGeVector3d* pExtrusion = 0);
+
+  virtual void circleProc(const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint, 
+    const OdGePoint3d& thirdPoint,
+    const OdGeVector3d* pExtrusion = 0);
+
+  /** \note
+    Client applications have the option of overriding this function to process the circular arc
+    data themselves.  If the function is not overridden, the default implementation
+    tessellates the passed in circular arc using the current kOdGiMaxDevForCircle deviation,
+    and calls polylineProc with the resulting data (for kOdGiArcSimple type arcs).  For 
+    kOdGiArcSector and kOdGiArcChord arc types, polygonOut is called.
+  */
+  virtual void circularArcProc(const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple,
+    const OdGeVector3d* pExtrusion = 0);
+
+  virtual void circularArcProc(const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& thirdPoint,
+    OdGiArcType arcType = kOdGiArcSimple,
+    const OdGeVector3d* pExtrusion = 0);
+
+  /** \note
+    Client applications have the option of overriding this function to process the text
+    data themselves.  If the function is not overridden, the default implementation
+    tessellates the passed in text string, by calling the textProc function
+    on the associated OdGiContext object.  TrueType text will result in calls to 
+    shellProc, and SHX text will get sent to polylineProc and polygonProc.
+  */
+  virtual void textProc(const OdGePoint3d& position,
+    const OdGeVector3d& u, 
+    const OdGeVector3d& v,
+    const OdChar* msg, 
+    OdInt32 length, 
+    bool raw,
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0);
+  virtual void textProc2(const OdGePoint3d& position,
+    const OdGeVector3d& u, const OdGeVector3d& v,
+    const OdChar* msg, OdInt32 length, bool raw, const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0, const OdGeExtents3d* extentsBox = 0);
+
+  /** \note
+    Client applications have the option of overriding this function to process the shape
+    data themselves.  If the function is not overridden, the default implementation
+    tessellates the passed in shape, by calling the shapeProc function
+    on the associated OdGiContext object.  The resulting geometry 
+    will get sent to polylineProc and polygonProc.
+  */
+  virtual void shapeProc(const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    int shapeNumber, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0);
+
+  /** \note
+    Client applications have the option of overriding this function to process the NURBS
+    data themselves.  If the function is not overridden, the default implementation
+    tessellates the passed in NURBS curve using the current kOdGiMaxDevForCurve deviation,
+    and calls polylineProc with the resulting data.
+  */
+  virtual void nurbsProc(const OdGeNurbCurve3d& nurbsCurve);
+
+  /** \note
+    Client applications have the option of overriding this function to process the elliptical arc
+    data themselves.  If the function is not overridden, the default implementation
+    tessellates the passed in elliptical arc using the current kOdGiMaxDevForCurve deviation,
+    and calls polylineProc with the resulting data.
+  */
+  virtual void ellipArcProc(
+    const OdGeEllipArc3d& ellipArc,
+    const OdGePoint3d* endPointOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple,
+    const OdGeVector3d* pExtrusion = 0);
+
+  virtual bool ellipArcProc(const OdGeEllipArc3d& ellipArc, double width);
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  virtual void rasterImageProc(const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage, 
+    const OdGePoint2d* uvBoundary, 
+    OdUInt32 numBoundPts,
+    bool transparency = false,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0);
+
+  /** \details
+    Initializes a texture map for this Vectorizer object.
+
+    \param origin [in]  Lower-left corner. 
+    \param u [in]  Image width vector.
+    \param v [in]  Image height vector.
+    \param pImage [in]  Pointer to the RasterImage object.
+    \param transparency [in]  True if and only if image transparency is on.
+    \param brightness [in]  Image brightness [0.0 .. 100.0].
+    \param contrast [in]  Image contrast [0.0 .. 100.0].
+    \param fade [in]  Image fade value [0.0 .. 100.0].
+  */
+  virtual void initTexture(const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage,
+    bool transparency,
+    double brightness,
+    double contrast,
+    double fade);
+
+  /** \details
+    Releases a texture map for this Vectorizer object.
+  */
+  virtual void uninitTexture();
+
+  /** \note
+      The default implementation of this function does nothing but return.
+  */
+  virtual void metafileProc(const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool dcAligned = true,        
+    bool allowClipping = false); 
+
+  /** \note
+      Client applications have the option of overriding this function to process the polypoint
+      data themselves. If the function is not overridden, the default implementation
+      of this function processes the polypoint, calling polylineProc for each point.
+  */
+  virtual void polypointProc(OdInt32 numPoints,
+    const OdGePoint3d* vertexList,
+    const OdCmEntityColor* pColors,
+    const OdCmTransparency* pTransparency = 0,
+    const OdGeVector3d* pNormals = 0,
+    const OdGeVector3d* pExtrusions = 0,
+    const OdGsMarker* pSubEntMarkers = 0,
+    OdInt32 nPointSize = 0);
+
+  /** \note
+      Client applications have the option of overriding this function to process the rowOfDots
+      data themselves. If the function is not overridden, the default implementation
+      of this function processes the rowOfDots, calling polylineProc for each point.
+  */
+  virtual void rowOfDotsProc(OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint);
+
+  /** \note
+      Client applications have the option of overriding this function to process the edge
+      data themselves. If the function is not overridden, the default implementation
+      of this function processes the edge, calling polylineProc for each hatch line or
+      shellProc for solid and gradient filling.
+  */
+  virtual void edgeProc(const OdGiEdge2dArray& edges, const OdGeMatrix3d* pXform = 0);
+
+  /** \note
+    This function is called by the OdGiGeometrySimplifier class to 
+    pass polyline data generated during tessellation, to a client application.
+
+    Client applications have the option of overriding this function to process 
+    the data themselves.  If the function is not overridden, 
+    the default implementation of this function calls polylineOut with the vertex list.
+
+    \param vertexIndexList [in]  Array of vertex indices in vertexDataList().
+  */
+  virtual void polylineOut(OdInt32 numPoints, const OdInt32* vertexIndexList);
+
+  /** \note
+      Utility function to be called from client implementation of meshProc()
+      to unify mesh primitives processing. 
+  */
+  void convertMeshToShell(
+    OdInt32 rows, OdInt32 columns,
+    const OdGePoint3d* pVertexList,
+    const OdGiEdgeData* pEdgeData,
+    const OdGiFaceData* pFaceData,
+    const OdGiVertexData* pVertexData);
+
+  /** \note
+    Client applications have the option of overriding this function to process the PolyDraw
+    data themselves. If the function is not overridden, the default implementation
+    tesselates the passed in PolyDraw contours using the current kOdGiMaxDevForCurve deviation,
+    and calls shellProc with the resulting data.
+  */
+  virtual void ttfPolyDrawProc(
+    OdInt32 numVertices, const OdGePoint3d* vertexList,
+    OdInt32 faceListSize, const OdInt32* faceList,
+    const OdUInt8* pBezierTypes, const OdGiFaceData* pFaceData = 0);
+
+protected:
+  // Pline primitive generation helpers
+  bool jointLineWithArc(const OdGiPolyline& lwBuf, OdInt32 LineSegNo, OdInt32  ArcSegNo, OdGePoint3dArray& points);
+  bool jointLineWithLine(const OdGiPolyline& lwBuf, OdInt32 LineSegNo1, OdInt32 LineSegNo2, OdGePoint3dArray& points);
+  bool jointArcWithLine(const OdGiPolyline& lwBuf, OdGeCircArc2d& arc, OdInt32 arcSegNo, OdInt32 lineSegNo,
+                        OdGePoint3d& point1, OdGePoint3d& point2);
+  // Mesh primitive generation helpers
+  bool isMeshRequireVertexNormals(const OdGiVertexData *pVertexData);
+  void generateMeshVertexNormals(OdInt32 numRows, OdInt32 numCols, const OdGePoint3d *pVertexList, const OdGiVertexData *pVertexData,
+                                 OdGiVertexData &vertexData, OdGeVector3dArray &normals);
+  // Block of internal optimizations
+  OdGeLineSeg2d *m_pLineSeg2d; OdGeLineSeg2d &tmpLineSeg2d();
+  OdGeLineSeg2d *m_pLineSeg2dEx[2]; OdGeLineSeg2d &tmpLineSeg2dEx(int n);
+  OdGeLine2d *m_pLine2dEx[4]; OdGeLine2d &tmpLine2dEx(int n);
+  OdGeCircArc2d *m_pCircArc2d; OdGeCircArc2d &tmpCircArc2d();
+  OdGeCircArc3d *m_pCircArc3d; OdGeCircArc3d &tmpCircArc3d();
+  OdGeEllipArc3d *m_pEllipArc3d; OdGeEllipArc3d &tmpEllipArc3d();
+  OdGePoint3dArray &tmpPoints3d(int nLevel) { return (!nLevel) ? m_points3d1 : m_points3d2; }
+};
+
+/** \details
+
+    \sa
+    TD_Gi 
+    <group OdGi_Classes> 
+*/
+struct ODGI_EXPORT OdGiFillData
+{
+  OdGiFillData(OdGiConveyorContext* pDrawCtx, OdGiSubEntityTraits* pTraits,
+    OdDb::LineWeight lweight = OdDb::kLnWt000,
+    OdGiFillType fillType = kOdGiFillNever);
+  void set(OdDb::LineWeight lweight, OdGiFillType fillType, const OdGeVector3d* fillNormal);
+  ~OdGiFillData();
+
+  OdDb::LineWeight m_lweight;
+  OdGiFillType m_fillType;
+  OdGeVector3d m_fillNormal;
+  OdGeVector3d* m_pFillNormal;
+  OdGiSubEntityTraits* m_pTraits;
+  OdGiConveyorContext* m_pDrawCtx;
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIGEOMETRYSIMPLIFIER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHLRemover.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHLRemover.h
new file mode 100755
index 0000000..bc866ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHLRemover.h
@@ -0,0 +1,86 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef __OD_GI_H_L_REMOVER__
+#define __OD_GI_H_L_REMOVER__
+
+#include "Ge/GeDoubleArray.h"
+#include "Gi/GiConveyorNode.h"
+
+class OdGiDeviation;
+
+#include "TD_PackPush.h"
+
+class OdGiHlrResults;
+typedef OdSmartPtr<OdGiHlrResults> OdGiHlrResultsPtr;
+
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiHLRemover : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiHLRemover);
+
+  /** Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  /** Computes and pulls scene with hidden lines removed 
+  */
+  virtual void process() = 0;
+
+  virtual void enable(bool enabled) = 0;
+
+  virtual bool enabled() const = 0;
+
+  virtual void invertZ(bool bDoIt) = 0;
+
+  virtual bool zInverted() const = 0;
+
+  virtual OdGiHlrResultsPtr hlrResults(unsigned int* pNumItems = 0) const = 0;
+
+  virtual void freeResults() = 0;
+
+  virtual void keepHidden(bool bDoIt) = 0;
+
+  virtual bool hiddenKept() const = 0;
+};
+
+typedef OdSmartPtr<OdGiHLRemover> OdGiHLRemoverPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_H_L_REMOVER2__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHlrResults.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHlrResults.h
new file mode 100755
index 0000000..6fe00d7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiHlrResults.h
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef __ODGIHLREMOVERRESULTS__
+#define __ODGIHLREMOVERRESULTS__
+
+#include "RxObject.h"
+#include "CmColor.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiHlrResults : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiHlrResults);
+
+  class Traits {
+  public:
+    OdGsMarker        selMarker;
+    OdCmEntityColor   color;
+    OdDb::LineWeight  lineWeight;
+  };
+
+  class Data {
+  public:
+    Traits*           pTraits;
+    OdGePoint3dArray  visible;
+    OdGePoint3dArray  hidden;
+  };
+
+  /** \details
+    Sets this Iterator object to reference the entry following the current entry.
+
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+  virtual const Data* next() = 0;
+
+  virtual void start() = 0;
+};
+
+typedef OdSmartPtr<OdGiHlrResults> OdGiHlrResultsPtr;
+
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIHLREMOVERRESULTS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiImage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiImage.h
new file mode 100755
index 0000000..bbd9332
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiImage.h
@@ -0,0 +1,279 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIIMAGE_H__
+#define __ODGIIMAGE_H__
+
+#include "GiExport.h"
+#include "UInt32Array.h"
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+// ODCOLORREF is RGBA32
+
+/** \details
+    This class defines pixel color parameters in RGB format, which stores an integer
+	for red, green, and blue values, and also includes a value for alpha-shading.
+
+    Library: TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class OdGiPixelBGRA32
+{
+  public:
+    OdGiPixelBGRA32 ()
+    {
+      m_bgra = ODRGBA(0, 0, 0, 255);
+    }
+
+    OdGiPixelBGRA32(OdUInt32 bgra)
+      : m_bgra(bgra)
+    {
+    }
+
+    OdGiPixelBGRA32(OdUInt8 blue, OdUInt8 green, OdUInt8 red, OdUInt8 alpha)
+    {
+      m_bgra = ODRGBA(blue, green, red, alpha);
+    }
+
+    OdUInt32 getBGRA() const;
+    OdUInt32 getRGBA() const;
+    OdUInt8 blue() const;
+    OdUInt8 green() const;
+    OdUInt8 red() const;
+    OdUInt8 alpha() const;
+
+    void setBGRA(OdUInt32 bgra);
+    void setBGRA(OdUInt8 blue, 
+                 OdUInt8 green, 
+                 OdUInt8 red,
+                 OdUInt8 alpha);
+    void setRGBA(OdUInt32 rgba);
+    void setRGBA(OdUInt8 red, 
+                 OdUInt8 green, 
+                 OdUInt8 blue,
+                 OdUInt8 alpha);
+    void setBlue(OdUInt8 blue);
+    void setGreen(OdUInt8 green);
+    void setRed(OdUInt8 red);
+    void setAlpha(OdUInt8 alpha);
+  private:
+    OdUInt32 m_bgra;
+};
+
+/** \details
+      Gets the color values in blue, green, red, alpha order.
+*/
+inline OdUInt32 OdGiPixelBGRA32::getBGRA() const
+{
+  return m_bgra;
+}
+
+/** \details
+      Gets the color values in red, green, blue, alpha order.
+*/
+inline OdUInt32 OdGiPixelBGRA32::getRGBA() const
+{
+  return ODRGBA(ODGETBLUE(m_bgra), ODGETGREEN(m_bgra), ODGETRED(m_bgra), ODGETALPHA(m_bgra));
+}
+
+/** \details
+      Gets the blue value of the color.
+*/
+inline OdUInt8 OdGiPixelBGRA32::blue() const
+{
+  return ODGETRED(m_bgra);
+}
+
+/** \details
+      Gets the green value of the color.
+*/
+inline OdUInt8 OdGiPixelBGRA32::green() const
+{
+  return ODGETGREEN(m_bgra);
+}
+
+/** \details
+      Gets the red value of the color.
+*/
+inline OdUInt8 OdGiPixelBGRA32::red() const
+{
+  return ODGETBLUE(m_bgra);
+}
+
+/** \details
+      Gets the alpha shading value of the color.
+*/
+inline OdUInt8 OdGiPixelBGRA32::alpha() const
+{
+  return ODGETALPHA(m_bgra);
+}
+
+/** \details
+      Sets the color values in blue, green, red, alpha order.
+*/
+inline void OdGiPixelBGRA32::setBGRA(OdUInt32 bgra)
+{
+  m_bgra = bgra;
+}
+
+inline void OdGiPixelBGRA32::setBGRA(OdUInt8 blue, 
+                                     OdUInt8 green, 
+                                     OdUInt8 red,
+                                     OdUInt8 alpha)
+{
+  m_bgra = ODRGBA(blue, green, red, alpha);
+}
+
+/** \details
+      Sets the color values in red, green, blue, alpha order.
+*/
+inline void OdGiPixelBGRA32::setRGBA(OdUInt32 rgba)
+{
+  m_bgra = ODRGBA(ODGETBLUE(rgba), ODGETGREEN(rgba), ODGETRED(rgba), ODGETALPHA(rgba));
+}
+
+inline void OdGiPixelBGRA32::setRGBA(OdUInt8 red, 
+                                     OdUInt8 green, 
+                                     OdUInt8 blue,
+                                     OdUInt8 alpha)
+{
+  m_bgra = ODRGBA(blue, green, red, alpha);
+}
+
+/** \details
+      Sets the blue value of a color.
+*/
+inline void OdGiPixelBGRA32::setBlue(OdUInt8 blue)
+{
+  m_bgra = ODRGBA(blue, ODGETGREEN(m_bgra), ODGETBLUE(m_bgra), ODGETALPHA(m_bgra));
+}
+
+/** \details
+      Sets the green value of a color.
+*/
+inline void OdGiPixelBGRA32::setGreen(OdUInt8 green)
+{
+  m_bgra = ODRGBA(ODGETRED(m_bgra), green, ODGETBLUE(m_bgra), ODGETALPHA(m_bgra));
+}
+
+/** \details
+      Sets the red value of a color.
+*/
+inline void OdGiPixelBGRA32::setRed(OdUInt8 red)
+{
+  m_bgra = ODRGBA(ODGETRED(m_bgra), ODGETGREEN(m_bgra), red, ODGETALPHA(m_bgra));
+}
+
+/** \details
+      Sets the alpha-shading value of a color.
+*/
+inline void OdGiPixelBGRA32::setAlpha(OdUInt8 alpha)
+{
+  m_bgra = ODRGBA(ODGETRED(m_bgra), ODGETGREEN(m_bgra), ODGETBLUE(m_bgra), alpha);
+}
+
+/** \details
+    This class defines image color parameters in RGB format, which stores an integer
+	for red, green, and blue values, and includes a value for alpha-shading.
+
+    Library: TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class OdGiImageBGRA32
+{
+  public:
+    OdGiImageBGRA32()
+      : m_pImageData(NULL)
+      , m_nImageWidth(0)
+      , m_nImageHeight(0)
+    {
+    }
+
+    OdGiImageBGRA32(OdUInt32 imageWidth, OdUInt32 imageHeight, OdGiPixelBGRA32* imageData)
+      : m_pImageData(imageData)
+      , m_nImageWidth(imageWidth)
+      , m_nImageHeight(imageHeight)
+    {
+    }
+
+    OdGiPixelBGRA32* image() const;
+    OdUInt32 width() const;
+    OdUInt32 height() const;
+
+    void setImage(OdUInt32 imageWidth, 
+                  OdUInt32 imageHeight, 
+                  OdGiPixelBGRA32* imageData);
+  private:
+    OdGiPixelBGRA32* m_pImageData;
+    OdUInt32 m_nImageWidth;
+    OdUInt32 m_nImageHeight;
+};
+
+/** \details
+      Gets the buffer data of an image.
+*/
+inline OdGiPixelBGRA32* OdGiImageBGRA32::image() const
+{
+  return m_pImageData;
+}
+
+/** \details
+      Gets the width of an image.
+*/
+inline OdUInt32 OdGiImageBGRA32::width() const
+{
+  return m_nImageWidth;
+}
+
+/** \details
+      Gets the height of an image.
+*/
+inline OdUInt32 OdGiImageBGRA32::height() const
+{
+  return m_nImageHeight;
+}
+
+/** \details
+      Sets the buffer data, width, and height of an image.
+*/
+inline void OdGiImageBGRA32::setImage(OdUInt32 imageWidth, 
+                                      OdUInt32 imageHeight, 
+                                      OdGiPixelBGRA32* imageData)
+{
+  m_nImageWidth = imageWidth;
+  m_nImageHeight = imageHeight;
+  m_pImageData = imageData;
+}
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGiPixelBGRA32 objects.
+*/
+typedef OdArray<OdGiPixelBGRA32, OdMemoryAllocator<OdGiPixelBGRA32> > OdGiPixelBGRA32Array;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIIMAGE_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLayerTraitsData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLayerTraitsData.h
new file mode 100755
index 0000000..0bf1f88
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLayerTraitsData.h
@@ -0,0 +1,354 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGILAYERTRAITSDATA_INCLUDED_
+#define _ODGILAYERTRAITSDATA_INCLUDED_
+
+#include "Gi/GiNonEntityTraits.h"
+#include "CmColorBase.h"
+#include "GiDrawImpl.h"
+
+class OdGiBaseVectorizer;
+
+class OdDbStub;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class provides an implementation of the OdGiLayerTraits::color() function.
+    
+    \sa
+    TD_Gi
+   
+    <group OdGi_Classes>
+*/
+class OdGiLayerTraits_ : public OdGiLayerTraits
+{
+  virtual OdCmEntityColor trueColor() const = 0;
+protected:
+  OdCmEntityColor color() const { return trueColor(); }
+};
+
+/** \details
+    This class provides an implementation of the OdGisubEntityTraits::color() function.
+    
+    \sa
+    TD_Gi
+   
+    <group OdGi_Classes>
+*/
+class OdGiSubEntityTraits_ : public OdGiSubEntityTraits
+{
+  virtual OdCmEntityColor trueColor() const = 0;
+protected:
+  OdUInt16 color() const { return trueColor().colorIndex(); }
+};
+
+/** \details
+
+    <group !!RECORDS_TD_APIRef>
+*/
+struct OdGiLayerTraitsData
+{
+  OdGiLayerTraitsData()
+    : m_flags(OdGiLayerTraits::kPlottable)
+    , m_lineweight(OdDb::kLnWtByLwDefault)
+    , m_plotStyleNameType(OdDb::kPlotStyleNameById)
+    , m_color(OdCmEntityColor::kForeground)
+    , m_linetypeId(0)
+    , m_plotStyleNameId(0)
+    , m_materialId(0)
+    , m_cmTransparency(OdUInt8(0xFF))
+  {
+  }
+  void operator =(const OdGiLayerTraitsData& other)
+  {
+    m_flags             = other.m_flags;
+    m_lineweight        = other.m_lineweight;
+    m_plotStyleNameType = other.m_plotStyleNameType;
+    m_color             = other.m_color;
+    m_linetypeId        = other.m_linetypeId;
+    m_plotStyleNameId   = other.m_plotStyleNameId;
+    m_materialId        = other.m_materialId;
+    m_cmTransparency    = other.m_cmTransparency;
+  }
+
+  OdUInt32 flags() const { return m_flags; }
+  OdDb::LineWeight lineweight() const { return m_lineweight; }
+  OdDbStub* linetype() const { return m_linetypeId; }
+  OdDb::PlotStyleNameType plotStyleNameType() const { return m_plotStyleNameType; }
+  OdDbStub* plotStyleNameId() const { return m_plotStyleNameId; }
+  const OdCmEntityColor& trueColor() const { return m_color; }
+  OdDbStub* materialId() const { return m_materialId; }
+  OdCmTransparency transparency() const { return m_cmTransparency; }
+  void setTrueColor(const OdCmEntityColor& cl) { m_color = cl; }
+  void setLineweight(OdDb::LineWeight lw) { m_lineweight = lw; }
+  void setLinetype(OdDbStub* id) { m_linetypeId = id; }
+  void setMaterial(OdDbStub* id) { m_materialId = id; }
+  void setTransparency(const OdCmTransparency& transparency) { m_cmTransparency = transparency; }
+
+  bool isOff() const { return GETBIT(m_flags, OdGiLayerTraits::kOff); }
+  void setOff(bool bVal) { SETBIT(m_flags, OdGiLayerTraits::kOff, bVal); }
+
+  bool isPlottable() const { return GETBIT(m_flags, OdGiLayerTraits::kPlottable); }
+  void setPlottable(bool bVal) { SETBIT(m_flags, OdGiLayerTraits::kPlottable, bVal); }
+
+  bool isLocked() const { return GETBIT(m_flags, OdGiLayerTraits::kLocked); }
+  void setLocked(bool bVal) { SETBIT(m_flags, OdGiLayerTraits::kLocked, bVal); }
+
+  bool isFrozen() const { return GETBIT(m_flags, OdGiLayerTraits::kFrozen); }
+  bool isByBlock() const { return GETBIT(m_flags, OdGiLayerTraits::kByBlock); }
+
+  OdUInt32                m_flags;
+  OdDb::LineWeight        m_lineweight;
+  OdDb::PlotStyleNameType m_plotStyleNameType;
+
+  OdCmEntityColor         m_color;
+  OdDbStub*               m_linetypeId;
+  OdDbStub*               m_plotStyleNameId;
+
+  OdDbStub*               m_materialId;
+  OdCmTransparency        m_cmTransparency;
+};
+
+/** \details
+    This class implements OdGiLayerTraits, OdGiWorldDraw, and OdGIViewportDraw together 
+	as a single class that uses the OdDbLayerTableRecord::subSetAttributes(), 
+	OdDbLayerTableRecord::subWorldDraw(), and OdDbLayerTableRecord::subViewportDraw() functions to return 
+	layer trait values and store them temporarily.
+    
+    \sa
+    TD_Gi
+   
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiLayerTraitsTaker : public OdGiLayerTraits_
+                                       , public OdGiWorldDraw_
+                                       , public OdGiViewportDraw_
+                                       , public OdGiSubEntityTraits_
+                                       , public OdGiLayerTraitsData
+{
+protected:
+  ODRX_USING_HEAP_OPERATORS(OdGiWorldDraw_);
+private:
+  const OdGiBaseVectorizer* m_pUnderlayingView;
+
+public:
+  OdGiLayerTraitsTaker();
+  OdGiLayerTraitsTaker(const OdGiBaseVectorizer* pRefView);
+
+  void addRef();
+  void release();
+
+  void setRefView(const OdGiBaseVectorizer* pRefView);
+  void reset() { static_cast<OdGiLayerTraitsData&>(*this) = OdGiLayerTraitsData(); }
+
+  OdDb::LineWeight lineweight() const;
+  OdDbStub* linetype() const;
+  OdDb::PlotStyleNameType plotStyleNameType() const;
+  OdDbStub* plotStyleNameId() const;
+  OdDbStub* materialId() const;
+  void setColor(const OdCmEntityColor& color);
+  void setLineweight(OdDb::LineWeight lineweight);
+  void setLinetype(OdDbStub* pLinetypeId);
+  void setPlotStyleName(OdDb::PlotStyleNameType plotStyleNameType, OdDbStub* pPlotStyleNameId= 0);
+
+  bool isOff() const { return GETBIT(m_flags, kOff); }
+  void setOff(bool bVal) { SETBIT(m_flags, kOff, bVal); }
+
+  bool isPlottable() const { return GETBIT(m_flags, kPlottable); }
+  void setPlottable(bool bVal) { SETBIT(m_flags, kPlottable, bVal); }
+
+  bool isLocked() const { return GETBIT(m_flags, kLocked); }
+  void setLocked(bool bVal) { SETBIT(m_flags, kLocked, bVal); }
+
+  OdCmEntityColor trueColor() const;
+  OdDbStub* layer() const;
+  OdDbStub* lineType() const;
+  OdGiFillType fillType() const;
+  OdDb::LineWeight lineWeight() const;
+  double lineTypeScale() const;
+  double thickness() const;
+  OdDbStub* material() const;
+  const OdGiMapper* mapper() const;
+  OdDbStub* visualStyle() const;
+  OdCmTransparency transparency() const;
+  OdUInt32 drawFlags() const;
+  bool selectionGeom() const;
+  ShadowFlags shadowFlags() const;
+  bool sectionable() const;
+  SelectionFlags selectionFlags() const;
+
+  void setTrueColor(const OdCmEntityColor& color);
+  void setColor(OdUInt16 color);
+  void setLayer(OdDbStub* layerId);
+  void setLineType(OdDbStub* lineTypeId);
+  void setFillType(OdGiFillType fillType);
+  void setLineWeight(OdDb::LineWeight lineWeight);
+  void setLineTypeScale(double lineTypeScale);
+  void setThickness(double thickness);
+  void setSelectionMarker(OdGsMarker selectionMarker);
+  void setMaterial(OdDbStub* pMaterialId);
+  void setMapper(const OdGiMapper *pMapper);
+  void setVisualStyle(const OdDbStub* visualStyleId);
+  void setTransparency(const OdCmTransparency &transparency);
+  void setDrawFlags(OdUInt32 drawFlags);
+  void setSelectionGeom(bool bSelectionFlag);
+  void setShadowFlags(ShadowFlags shadowFlags);
+  void setSectionable(bool bSectionableFlag);
+  void setSelectionFlags(SelectionFlags selectionFlags);
+
+  OdCmEntityColor secondaryTrueColor() const;
+  void setSecondaryTrueColor(const OdCmEntityColor& color);
+  const OdGiDgLinetypeModifiers* lineStyleModifiers() const;
+  void setLineStyleModifiers(const OdGiDgLinetypeModifiers* pLSMod);
+  const OdGiFill* fill() const;
+  void setFill(const OdGiFill* pFill);
+
+  OdGiRegenType regenType() const;
+  bool regenAbort() const;
+  OdGiSubEntityTraits& subEntityTraits() const;
+  OdGiGeometry& rawGeometry() const;
+  bool isDragging() const;
+  double deviation(const OdGiDeviationType deviationType, 
+    const OdGePoint3d& pointOnCurve) const;
+  OdUInt32 numberOfIsolines() const;
+  OdGiContext* context() const;
+
+  OdGiViewport& viewport() const;
+  OdUInt32 sequenceNumber() const;
+  bool isValidId(const OdUInt32 viewportId) const;
+  OdDbStub* viewportObjectId() const;
+
+  void pline(const OdGiPolyline& , OdUInt32 , OdUInt32 );
+  OdGeMatrix3d getModelToWorldTransform() const;
+  OdGeMatrix3d getWorldToModelTransform() const;
+  void pushModelTransform(const OdGeVector3d& vNormal);
+  void pushModelTransform(const OdGeMatrix3d& xMat);
+  void popModelTransform();
+  void circle(const OdGePoint3d& center, double radius, const OdGeVector3d& normal);
+  void circle(const OdGePoint3d& p1, const OdGePoint3d& p2, const OdGePoint3d& p3);
+  void circularArc(const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple);
+  void circularArc(const OdGePoint3d& start,
+    const OdGePoint3d& point,
+    const OdGePoint3d& end,
+    OdGiArcType arcType = kOdGiArcSimple);
+  void polyline(OdInt32 nbPoints,
+    const OdGePoint3d* pVertexList,
+    const OdGeVector3d* pNormal = NULL,
+    OdGsMarker lBaseSubEntMarker = -1);
+  void polygon(OdInt32 nbPoints, const OdGePoint3d* pVertexList);
+  void mesh(OdInt32 rows,
+    OdInt32 columns,
+    const OdGePoint3d* pVertexList,
+    const OdGiEdgeData* pEdgeData = NULL,
+    const OdGiFaceData* pFaceData = NULL,
+    const OdGiVertexData* pVertexData = NULL);
+  void shell(OdInt32 nbVertex,
+    const OdGePoint3d* pVertexList,
+    OdInt32 faceListSize,
+    const OdInt32* pFaceList,
+    const OdGiEdgeData* pEdgeData = NULL,
+    const OdGiFaceData* pFaceData = NULL,
+    const OdGiVertexData* pVertexData = NULL);
+  void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    double height, double width, double oblique, const OdString& msg);
+  void text(const OdGePoint3d& position,
+    const OdGeVector3d& normal, const OdGeVector3d& direction,
+    const OdChar* msg, OdInt32 length, bool raw, const OdGiTextStyle* pTextStyle);
+  void ray(const OdGePoint3d& first, const OdGePoint3d& second);
+  void nurbs(const OdGeNurbCurve3d& nurbs);
+  void xline(const OdGePoint3d& p1, const OdGePoint3d& p2);
+  void ellipArc(const OdGeEllipArc3d& arc,
+    const OdGePoint3d* pEndPointsOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple);
+  void draw(const OdGiDrawable* pD);
+  void pushClipBoundary(OdGiClipBoundary* pBoundary);
+  void popClipBoundary();
+  void worldLine(const OdGePoint3d pnts[2]);
+  void image(const OdGiImageBGRA32& img,
+    const OdGePoint3d& origin,
+    const OdGeVector3d& uVec,
+    const OdGeVector3d& vVec,
+    OdGiRasterImage::TransparencyMode trpMode = OdGiRasterImage::kTransparency8Bit);
+  void edge(const OdGiEdge2dArray& edges);
+  void setExtents(const OdGePoint3d *newExtents);
+
+  void polylineEye(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+  void polygonEye(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+  void polylineDc(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+  void polygonDc(OdUInt32 numVertices, const OdGePoint3d* vertexList);
+  void rasterImageDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage, 
+    const OdGePoint2d* uvBoundary, 
+    OdUInt32 numBoundPts,
+    bool transparency,
+    double brightness,
+    double contrast,
+    double fade);
+  void  metafileDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool dcAligned = true,
+    bool allowClipping = false);
+  void ownerDrawDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiSelfGdiDrawable* pDrawable,
+    bool dcAligned = true,
+    bool allowClipping = false);
+};
+
+inline void
+OdGiLayerTraitsTaker::setRefView(const OdGiBaseVectorizer* pRefView)
+{
+  m_pUnderlayingView = pRefView;
+}
+
+inline
+OdGiLayerTraitsTaker::OdGiLayerTraitsTaker()
+  : m_pUnderlayingView(0)
+{
+}
+
+inline
+OdGiLayerTraitsTaker::OdGiLayerTraitsTaker(const OdGiBaseVectorizer* pRefView)
+  : m_pUnderlayingView(pRefView)
+{
+}
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGILAYERTRAITSDATA_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraits.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraits.h
new file mode 100755
index 0000000..fd5ba66
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraits.h
@@ -0,0 +1,898 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_LIGHT_TRAITS__
+#define __OD_GI_LIGHT_TRAITS__
+
+#include "TD_PackPush.h"
+
+#include "OdaDefs.h"
+#include "CmColor.h"
+#include "OdString.h"
+#include "Ge/GeVector3d.h"
+#include "Gs/GsFiler.h"
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiLightTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiLightTraits);
+
+  virtual void setOn(bool on) = 0;
+  virtual bool isOn() const = 0;
+};
+
+typedef OdSmartPtr<OdGiLightTraits> OdGiLightTraitsPtr;
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+struct OdGiColorRGB
+{
+  double red, green, blue;
+
+  OdGiColorRGB() : red(0.0), green(0.0), blue(0.0) { }
+  OdGiColorRGB(double _red, double _green, double _blue) : red(_red), green(_green), blue(_blue) { }
+
+  friend OdGiColorRGB operator +(const OdGiColorRGB &c1, const OdGiColorRGB &c2)
+  {
+    return OdGiColorRGB(c1.red + c2.red, c1.green + c2.green, c1.blue + c2.blue);
+  }
+  friend OdGiColorRGB operator +(const OdGiColorRGB &c, double s)
+  {
+    return OdGiColorRGB(c.red + s, c.green + s, c.blue + s);
+  }
+  friend OdGiColorRGB operator +(double s, const OdGiColorRGB &c)
+  {
+    return OdGiColorRGB(s + c.red, s + c.green, s + c.blue);
+  }
+
+  friend OdGiColorRGB operator -(const OdGiColorRGB &c1, const OdGiColorRGB &c2)
+  {
+    return OdGiColorRGB(c1.red - c2.red, c1.green - c2.green, c1.blue - c2.blue);
+  }
+  friend OdGiColorRGB operator -(const OdGiColorRGB &c, double s)
+  {
+    return OdGiColorRGB(c.red - s, c.green - s, c.blue - s);
+  }
+  friend OdGiColorRGB operator -(double s, const OdGiColorRGB &c)
+  {
+    return OdGiColorRGB(s - c.red, s - c.green, s - c.blue);
+  }
+
+  friend OdGiColorRGB operator *(const OdGiColorRGB &c1, const OdGiColorRGB &c2)
+  {
+    return OdGiColorRGB(c1.red * c2.red, c1.green * c2.green, c1.blue * c2.blue);
+  }
+  friend OdGiColorRGB operator *(const OdGiColorRGB &c, double s)
+  {
+    return OdGiColorRGB(c.red * s, c.green * s, c.blue * s);
+  }
+  friend OdGiColorRGB operator *(double s, const OdGiColorRGB &c)
+  {
+    return OdGiColorRGB(s * c.red, s * c.green, s * c.blue);
+  }
+
+  friend OdGiColorRGB operator /(const OdGiColorRGB &c1, const OdGiColorRGB &c2)
+  {
+    return OdGiColorRGB(c1.red / c2.red, c1.green / c2.green, c1.blue / c2.blue);
+  }
+  friend OdGiColorRGB operator /(const OdGiColorRGB &c, double s)
+  {
+    return OdGiColorRGB(c.red / s, c.green / s, c.blue / s);
+  }
+  friend OdGiColorRGB operator /(double s, const OdGiColorRGB &c)
+  {
+    return OdGiColorRGB(s / c.red, s / c.green, s / c.blue);
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiShadowParameters
+{
+public:
+  OdGiShadowParameters();
+  OdGiShadowParameters(const OdGiShadowParameters &parms);
+
+  OdGiShadowParameters &operator =(const OdGiShadowParameters &parms);
+
+  bool operator ==(const OdGiShadowParameters &parms) const;
+  bool operator !=(const OdGiShadowParameters &parms) const;
+
+  enum ShadowType 
+  {
+    kShadowsRayTraced = 0,
+    kShadowMaps,
+    kAreaSampled
+  };
+
+  enum ExtendedLightShape {
+    kLinear = 0,
+    kRectangle,
+    kDisk,
+    kCylinder,
+    kSphere
+  };
+
+  void setShadowsOn(bool on);
+  bool shadowsOn() const;
+
+  void setShadowType(ShadowType typ);
+  ShadowType shadowType() const;
+
+  bool setShadowMapSize(OdUInt16 sz);
+  OdUInt16 shadowMapSize() const;
+
+  bool setShadowMapSoftness(OdUInt8 soft);
+  OdUInt8 shadowMapSoftness() const;
+
+  bool setShadowSamples(OdUInt16 nSamples);
+  OdUInt16 shadowSamples() const;
+
+  void setShapeVisibility(bool bVisibility);
+  bool shapeVisibility() const;
+
+  void setExtendedLightShape(ExtendedLightShape lightShape);
+  ExtendedLightShape extendedLightShape() const;
+
+  bool setExtendedLightLength(double dLength);
+  double extendedLightLength() const;
+
+  bool setExtendedLightWidth(double dWidth);
+  double extendedLightWidth() const;
+
+  bool setExtendedLightRadius(double dRadius);
+  double extendedLightRadius() const;
+
+  inline void save(OdGsFiler * pFiler) const {
+    pFiler->wrBool(shadowsOn());
+    pFiler->wrUInt8((OdUInt8)shadowType());
+    pFiler->wrUInt16(shadowMapSize());
+    pFiler->wrUInt8(shadowMapSoftness());
+    pFiler->wrBool(shapeVisibility());
+    pFiler->wrUInt8((OdUInt8)extendedLightShape());
+    pFiler->wrDouble(extendedLightLength());
+    pFiler->wrDouble(extendedLightWidth());
+    pFiler->wrDouble(extendedLightRadius());
+  }
+
+  void load(OdGsFiler * pFiler) {
+    setShadowsOn(pFiler->rdBool());
+    setShadowType((ShadowType)pFiler->rdUInt8());
+    setShadowMapSize(pFiler->rdUInt16());
+    setShadowMapSoftness(pFiler->rdUInt8());
+    setShapeVisibility(pFiler->rdBool());
+    setExtendedLightShape((ExtendedLightShape)pFiler->rdUInt8());
+    setExtendedLightLength(pFiler->rdDouble());
+    setExtendedLightWidth(pFiler->rdDouble());
+    setExtendedLightRadius(pFiler->rdDouble());
+  }
+
+
+private:
+  bool               m_bShadowsOn;
+  OdUInt8            m_shadowMapSoftness;
+  bool               m_bShapeVisible;
+  ShadowType         m_shadowType;
+  OdUInt16           m_shadowMapSize;
+  OdUInt16           m_shadowSamples;
+  ExtendedLightShape m_lightShape;
+  double             m_lightLength;
+  double             m_lightWidth;
+  double             m_lightRadius;
+};
+
+inline OdGiShadowParameters::OdGiShadowParameters()
+  : m_bShadowsOn(true)
+  , m_shadowMapSoftness(1)
+  , m_bShapeVisible(false)
+  , m_shadowType(OdGiShadowParameters::kShadowsRayTraced)
+  , m_shadowMapSize(256)
+  , m_shadowSamples(16)
+  , m_lightShape(kSphere)
+  , m_lightLength(0.0)
+  , m_lightWidth(0.0)
+  , m_lightRadius(0.0)
+{
+}
+
+inline OdGiShadowParameters::OdGiShadowParameters(const OdGiShadowParameters &parms)
+  : m_bShadowsOn(parms.m_bShadowsOn)
+  , m_shadowMapSoftness(parms.m_shadowMapSoftness)
+  , m_bShapeVisible(parms.m_bShapeVisible)
+  , m_shadowType(parms.m_shadowType)
+  , m_shadowMapSize(parms.m_shadowMapSize)
+  , m_shadowSamples(parms.m_shadowSamples)
+  , m_lightShape(parms.m_lightShape)
+  , m_lightLength(parms.m_lightLength)
+  , m_lightWidth(parms.m_lightWidth)
+  , m_lightRadius(parms.m_lightRadius)
+{
+}
+
+inline OdGiShadowParameters &OdGiShadowParameters::operator =(const OdGiShadowParameters &parms)
+{
+  m_bShadowsOn        = parms.m_bShadowsOn;
+  m_shadowType        = parms.m_shadowType;
+  m_shadowMapSize     = parms.m_shadowMapSize;
+  m_shadowMapSoftness = parms.m_shadowMapSoftness;
+  m_shadowSamples     = parms.m_shadowSamples;
+  m_bShapeVisible     = parms.m_bShapeVisible;
+  m_lightShape        = parms.m_lightShape;
+  m_lightLength       = parms.m_lightLength;
+  m_lightWidth        = parms.m_lightWidth;
+  m_lightRadius       = parms.m_lightRadius;
+  return *this;
+}
+
+inline bool OdGiShadowParameters::operator ==(const OdGiShadowParameters &parms) const
+{
+  return (m_bShadowsOn        == parms.m_bShadowsOn)        &&
+         (m_shadowType        == parms.m_shadowType)        &&
+         (m_shadowMapSize     == parms.m_shadowMapSize)     &&
+         (m_shadowMapSoftness == parms.m_shadowMapSoftness) &&
+         (m_shadowSamples     == parms.m_shadowSamples)     &&
+         (m_bShapeVisible     == parms.m_bShapeVisible)     &&
+         (m_lightShape        == parms.m_lightShape)        &&
+         OdEqual(m_lightLength , parms.m_lightLength)       &&
+         OdEqual(m_lightWidth  , parms.m_lightWidth)        &&
+         OdEqual(m_lightRadius , parms.m_lightRadius);
+}
+
+inline bool OdGiShadowParameters::operator !=(const OdGiShadowParameters &parms) const
+{
+  return (m_bShadowsOn        != parms.m_bShadowsOn)        ||
+         (m_shadowType        != parms.m_shadowType)        ||
+         (m_shadowMapSize     != parms.m_shadowMapSize)     ||
+         (m_shadowMapSoftness != parms.m_shadowMapSoftness) ||
+         (m_shadowSamples     != parms.m_shadowSamples)     ||
+         (m_bShapeVisible     != parms.m_bShapeVisible)     ||
+         (m_lightShape        != parms.m_lightShape)        ||
+         !OdEqual(m_lightLength, parms.m_lightLength)       ||
+         !OdEqual(m_lightWidth , parms.m_lightWidth)        ||
+         !OdEqual(m_lightRadius, parms.m_lightRadius);
+}
+
+inline void OdGiShadowParameters::setShadowsOn(bool on)
+{
+  m_bShadowsOn = on;
+}
+
+inline bool OdGiShadowParameters::shadowsOn() const
+{
+  return m_bShadowsOn;
+}
+
+inline void OdGiShadowParameters::setShadowType(ShadowType typ)
+{
+  m_shadowType = typ;
+}
+
+inline OdGiShadowParameters::ShadowType OdGiShadowParameters::shadowType() const
+{
+  return m_shadowType;
+}
+
+inline bool OdGiShadowParameters::setShadowMapSize(OdUInt16 sz)
+{
+  if((sz & (sz-1)) == 0 && sz >= 64 && sz <= 4096) // valid values are 64, 128, 256, 512, 1024, 2048, and 4096
+  {
+    m_shadowMapSize = sz;    
+    return true;
+  }
+  else
+  {
+    return false;
+  }
+}
+
+inline OdUInt16 OdGiShadowParameters::shadowMapSize() const
+{
+  return m_shadowMapSize;
+}
+
+inline bool OdGiShadowParameters::setShadowMapSoftness(OdUInt8 soft)
+{
+  m_shadowMapSoftness = soft;
+  return true;
+}
+
+inline OdUInt8 OdGiShadowParameters::shadowMapSoftness() const
+{
+  return m_shadowMapSoftness;
+}
+
+inline bool OdGiShadowParameters::setShadowSamples(OdUInt16 nSamples)
+{
+  m_shadowSamples = nSamples;
+  return true;
+}
+
+inline OdUInt16 OdGiShadowParameters::shadowSamples() const
+{
+  return m_shadowSamples;
+}
+
+inline void OdGiShadowParameters::setShapeVisibility(bool bVisibility)
+{
+  m_bShapeVisible = bVisibility;
+}
+
+inline bool OdGiShadowParameters::shapeVisibility() const
+{
+  return m_bShapeVisible;
+}
+
+inline void OdGiShadowParameters::setExtendedLightShape(OdGiShadowParameters::ExtendedLightShape lightShape)
+{
+  m_lightShape = lightShape;
+}
+
+inline OdGiShadowParameters::ExtendedLightShape OdGiShadowParameters::extendedLightShape() const
+{
+  return m_lightShape;
+}
+
+inline bool OdGiShadowParameters::setExtendedLightLength(double dLength)
+{
+  m_lightLength = dLength;
+  return true;
+}
+
+inline double OdGiShadowParameters::extendedLightLength() const
+{
+  return m_lightLength;
+}
+
+inline bool OdGiShadowParameters::setExtendedLightWidth(double dWidth)
+{
+  m_lightWidth = dWidth;
+  return true;
+}
+
+inline double OdGiShadowParameters::extendedLightWidth() const
+{
+  return m_lightWidth;
+}
+
+inline bool OdGiShadowParameters::setExtendedLightRadius(double dRadius)
+{
+  m_lightRadius = dRadius;
+  return true;
+}
+
+inline double OdGiShadowParameters::extendedLightRadius() const
+{
+  return m_lightRadius;
+}
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiLightAttenuation
+{
+public:
+  OdGiLightAttenuation();
+  
+  enum AttenuationType 
+  {
+    kNone = 0,
+    kInverseLinear,
+    kInverseSquare
+  };
+  
+  void setAttenuationType(AttenuationType typ);
+  AttenuationType attenuationType() const;
+  
+  void setUseLimits(bool on);
+  bool useLimits() const;
+  
+  void setLimits(double startlim, double endlim);
+  double startLimit() const;
+  double endLimit() const;
+  
+  void save(OdGsFiler *pFiler) const;
+  void load(OdGsFiler *pFiler);
+private:
+  AttenuationType m_attenType;
+  bool            m_bUseAttenLimits;
+  double          m_dAttenStartLimit;
+  double          m_dAttenEndLimit;
+};
+
+inline OdGiLightAttenuation::OdGiLightAttenuation()
+: m_attenType(OdGiLightAttenuation::kNone)
+, m_bUseAttenLimits(false)
+, m_dAttenStartLimit(1.0)
+, m_dAttenEndLimit(10.0)
+{
+}
+
+inline void OdGiLightAttenuation::setAttenuationType(AttenuationType typ)
+{
+  m_attenType = typ;
+}
+
+inline OdGiLightAttenuation::AttenuationType OdGiLightAttenuation::attenuationType() const
+{
+  return m_attenType;
+}
+  
+inline void OdGiLightAttenuation::setUseLimits(bool on)
+{
+  m_bUseAttenLimits = on;
+}
+
+inline bool OdGiLightAttenuation::useLimits() const
+{
+  return m_bUseAttenLimits;
+}
+
+inline void OdGiLightAttenuation::setLimits(double startlim, double endlim)
+{
+  m_dAttenStartLimit = startlim;
+  m_dAttenEndLimit   = endlim;
+}
+
+inline double OdGiLightAttenuation::startLimit() const
+{
+  return m_dAttenStartLimit;
+}
+
+inline double OdGiLightAttenuation::endLimit() const
+{
+  return m_dAttenEndLimit;
+}
+
+inline void OdGiLightAttenuation::save(OdGsFiler * pFiler) const {
+  pFiler->wrUInt8(OdUInt8(m_attenType));
+  pFiler->wrBool(m_bUseAttenLimits);
+  pFiler->wrDouble(m_dAttenStartLimit);
+  pFiler->wrDouble(m_dAttenEndLimit);
+}
+
+inline void OdGiLightAttenuation::load(OdGsFiler * pFiler) {
+  m_attenType = AttenuationType(pFiler->rdUInt8());
+  m_bUseAttenLimits = pFiler->rdBool();
+  m_dAttenStartLimit = pFiler->rdDouble();
+  m_dAttenEndLimit = pFiler->rdDouble();
+}
+
+/** \details
+    This class contains all sky properties for OdDbSun objects.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes> 
+*/
+class OdGiSkyParameters
+{
+public:
+  OdGiSkyParameters();
+
+  bool operator==(const OdGiSkyParameters& params) const;
+
+  void setIllumination(bool enable);
+  bool illumination() const;
+
+  void setIntensityFactor(double intensity);
+  double intensityFactor() const;
+
+  void setHaze(double haze);
+  double haze() const;
+
+  void setHorizonHeight(double height);
+  double horizonHeight() const;
+
+  void setHorizonBlur(double blur);
+  double horizonBlur() const;
+
+  void setGroundColor(const OdCmEntityColor& color);
+  OdCmEntityColor groundColor() const;
+
+  void setNightColor(const OdCmEntityColor& color);
+  OdCmEntityColor nightColor() const;
+
+  void setAerialPerspective(bool apply);
+  bool aerialPerspective() const;
+
+  void setVisibilityDistance(double distance);
+  double visibilityDistance() const;
+
+  void setDiskScale(double scale);
+  double diskScale() const;
+
+  void setGlowIntensity(double intensity);
+  double glowIntensity() const;
+
+  void setDiskIntensity(double intensity);
+  double diskIntensity() const;
+
+  void setSolarDiskSamples(OdUInt16 samples);
+  OdUInt16 solarDiskSamples() const;
+
+  void setSunDirection(const OdGeVector3d& sundir);
+  const OdGeVector3d& sunDirection() const;
+
+  void setRedBlueShift(double redBlueShift);
+  double redBlueShift() const;
+
+  void setSaturation(double saturation);
+  double saturation() const;
+private:
+  bool            m_status;
+  double          m_intensityFactor;
+  double          m_haze;
+  double          m_horizonHeight;
+  double          m_horizonBlur;
+  OdCmEntityColor m_groundColor;
+  OdCmEntityColor m_nightColor;
+  bool            m_aerialPerspective;
+  double          m_visibilityDistance;
+  double          m_diskScale;
+  double          m_glowIntensity;
+  double          m_diskIntensity;
+  OdUInt16        m_solarDiskSamples;
+  OdGeVector3d    m_sunDirection;
+  double          m_redBlueShift;
+  double          m_saturation;
+};
+
+inline OdGiSkyParameters::OdGiSkyParameters()
+: m_status(false)
+, m_intensityFactor(1.0)
+, m_haze(0.0)
+, m_horizonHeight(0.0)
+, m_horizonBlur(0.1)
+, m_aerialPerspective(false)
+, m_visibilityDistance(10000.0)
+, m_diskScale(4.0)
+, m_glowIntensity(1.0)
+, m_diskIntensity(1.0)
+, m_solarDiskSamples(8)
+, m_redBlueShift(0.0)
+, m_saturation(1.0)
+{
+  m_groundColor.setColor(0xc2808080);
+  m_nightColor.setColor(0xc2010205);
+  m_sunDirection.set(0.35, 1.0, -0.25);
+}
+
+inline bool OdGiSkyParameters::operator==(const OdGiSkyParameters& params) const
+{
+  if (m_status             != params.m_status)             return false;
+  if (m_intensityFactor    != params.m_intensityFactor)    return false;
+  if (m_haze               != params.m_haze)               return false;
+  if (m_horizonHeight      != params.m_horizonHeight)      return false;
+  if (m_horizonBlur        != params.m_horizonBlur)        return false;
+  if (m_groundColor        != params.m_groundColor)        return false;
+  if (m_nightColor         != params.m_nightColor)         return false;
+  if (m_aerialPerspective  != params.m_aerialPerspective)  return false;
+  if (m_visibilityDistance != params.m_visibilityDistance) return false;
+  if (m_diskScale          != params.m_diskScale)          return false;
+  if (m_glowIntensity      != params.m_glowIntensity)      return false;
+  if (m_diskIntensity      != params.m_diskIntensity)      return false;
+  if (m_solarDiskSamples   != params.m_solarDiskSamples)   return false;
+  if (m_sunDirection       != params.m_sunDirection)       return false;
+  if (m_redBlueShift       != params.m_redBlueShift)       return false;
+  if (m_saturation         != params.m_saturation)         return false;
+  return true;
+}
+
+inline void OdGiSkyParameters::setIllumination(bool enable)
+{
+  m_status = enable;
+}
+inline bool OdGiSkyParameters::illumination() const
+{
+  return m_status;
+}
+inline void OdGiSkyParameters::setIntensityFactor(double intensity)
+{
+  m_intensityFactor = intensity;
+}
+inline double OdGiSkyParameters::intensityFactor() const
+{
+  return m_intensityFactor;
+}
+inline void OdGiSkyParameters::setHaze(double haze)
+{
+  m_haze = haze;
+}
+inline double OdGiSkyParameters::haze() const
+{
+  return m_haze;
+}
+inline void OdGiSkyParameters::setHorizonHeight(double height)
+{
+  m_horizonHeight = height;
+}
+inline double OdGiSkyParameters::horizonHeight() const
+{
+  return m_horizonHeight;
+}
+inline void OdGiSkyParameters::setHorizonBlur(double blur)
+{
+  m_horizonBlur = blur;
+}
+inline double OdGiSkyParameters::horizonBlur() const
+{
+  return m_horizonBlur;
+}
+inline void OdGiSkyParameters::setGroundColor(const OdCmEntityColor& color)
+{
+  m_groundColor = color;
+}
+inline OdCmEntityColor OdGiSkyParameters::groundColor() const
+{
+  return m_groundColor;
+}
+inline void OdGiSkyParameters::setNightColor(const OdCmEntityColor& color)
+{
+  m_nightColor = color;
+}
+inline OdCmEntityColor OdGiSkyParameters::nightColor() const
+{
+  return m_nightColor;
+}
+inline void OdGiSkyParameters::setAerialPerspective(bool apply)
+{
+  m_aerialPerspective = apply;
+}
+inline bool OdGiSkyParameters::aerialPerspective() const
+{
+  return m_aerialPerspective;
+}
+inline void OdGiSkyParameters::setVisibilityDistance(double distance)
+{
+  m_visibilityDistance = distance;
+}
+inline double OdGiSkyParameters::visibilityDistance() const
+{
+  return m_visibilityDistance;
+}
+inline void OdGiSkyParameters::setDiskScale(double scale)
+{
+  m_diskScale = scale;
+}
+inline double OdGiSkyParameters::diskScale() const
+{
+  return m_diskScale;
+}
+inline void OdGiSkyParameters::setGlowIntensity(double intensity)
+{
+  m_glowIntensity = intensity;
+}
+inline double OdGiSkyParameters::glowIntensity() const
+{
+  return m_glowIntensity;
+}
+inline void OdGiSkyParameters::setDiskIntensity(double intensity)
+{
+  m_diskIntensity = intensity;
+}
+inline double OdGiSkyParameters::diskIntensity() const
+{
+  return m_diskIntensity;
+}
+inline void OdGiSkyParameters::setSolarDiskSamples(OdUInt16 samples)
+{
+  m_solarDiskSamples = samples;
+}
+inline OdUInt16 OdGiSkyParameters::solarDiskSamples() const
+{
+  return m_solarDiskSamples;
+}
+inline void OdGiSkyParameters::setSunDirection(const OdGeVector3d& sundir)
+{
+  m_sunDirection = sundir;
+}
+inline const OdGeVector3d& OdGiSkyParameters::sunDirection() const
+{
+  return m_sunDirection;
+}
+inline void OdGiSkyParameters::setRedBlueShift(double redBlueShift)
+{
+  m_redBlueShift = redBlueShift;
+}
+inline double OdGiSkyParameters::redBlueShift() const
+{
+  return m_redBlueShift;
+}
+inline void OdGiSkyParameters::setSaturation(double saturation)
+{
+  m_saturation = saturation;
+}
+inline double OdGiSkyParameters::saturation() const
+{
+  return m_saturation;
+}
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiStandardLightTraits : public OdGiLightTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiStandardLightTraits);
+
+  virtual void setIntensity(double inten) = 0;
+  virtual double intensity() const = 0;
+
+  virtual void setLightColor(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor lightColor() const = 0;
+
+  virtual void setShadowParameters(const OdGiShadowParameters& params) = 0;
+  virtual OdGiShadowParameters shadowParameters() const = 0;
+};
+
+typedef OdSmartPtr<OdGiStandardLightTraits> OdGiStandardLightTraitsPtr;
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiPointLightTraits : public OdGiStandardLightTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiPointLightTraits);
+
+  virtual void setPosition(const OdGePoint3d& pos) = 0;
+  virtual OdGePoint3d position() const = 0;
+
+  virtual OdGiLightAttenuation lightAttenuation() const = 0;
+  virtual void setAttenuation(const OdGiLightAttenuation& atten) = 0;
+
+  virtual void setPhysicalIntensity(double fIntensity) = 0;
+  virtual double physicalIntensity() const = 0;
+
+  virtual void setLampColor(const OdGiColorRGB& color) = 0;
+  virtual OdGiColorRGB lampColor() const = 0;
+
+  virtual void setHasTarget(bool bTarget) = 0;
+  virtual bool hasTarget() const = 0;
+
+  virtual void setTargetLocation(const OdGePoint3d &loc) = 0;
+  virtual OdGePoint3d targetLocation() const = 0;
+};
+
+typedef OdSmartPtr<OdGiPointLightTraits> OdGiPointLightTraitsPtr;
+
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiSpotLightTraits : public OdGiStandardLightTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSpotLightTraits);
+
+  virtual void setPosition(const OdGePoint3d& pos) = 0;
+  virtual OdGePoint3d position() const = 0;
+
+  virtual void setTargetLocation(const OdGePoint3d& loc) = 0;
+  virtual OdGePoint3d targetLocation() const = 0;
+
+  virtual bool setHotspotAndFalloff(double hotspot, double falloff) = 0;
+  virtual double hotspot() const = 0;
+  virtual double falloff() const = 0;
+
+  virtual OdGiLightAttenuation lightAttenuation() const = 0;
+  virtual void setAttenuation(const OdGiLightAttenuation& atten) = 0;
+
+  virtual void setPhysicalIntensity(double fIntensity) = 0;
+  virtual double physicalIntensity() const = 0;
+
+  virtual void setLampColor(const OdGiColorRGB& color) = 0;
+  virtual OdGiColorRGB lampColor() const = 0;
+};
+
+typedef OdSmartPtr<OdGiSpotLightTraits> OdGiSpotLightTraitsPtr;
+
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiDistantLightTraits : public OdGiStandardLightTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiDistantLightTraits);
+  
+  virtual void setLightDirection(const OdGeVector3d& vec) = 0;
+  virtual OdGeVector3d lightDirection() const = 0;
+  
+  virtual void setIsSunlight(bool isSunlight) = 0;
+  virtual bool isSunlight() const = 0;
+
+  virtual void setPhysicalIntensity(double fIntensity) = 0;
+  virtual double physicalIntensity() const = 0;
+
+  virtual void setLampColor(const OdGiColorRGB& color) = 0;
+  virtual OdGiColorRGB lampColor() const = 0;
+
+  virtual void setSkyParameters(const OdGiSkyParameters &params) = 0;
+  virtual void skyParameters(OdGiSkyParameters &params) const = 0;
+};
+
+typedef OdSmartPtr<OdGiDistantLightTraits> OdGiDistantLightTraitsPtr;
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiWebLightTraits : public OdGiPointLightTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiWebLightTraits);
+
+  enum WebFileType
+  {
+    kTypeA = 3,
+    kTypeB = 2,
+    kTypeC = 1
+  };
+
+  enum WebSymmetry
+  {
+    kNoSymmetry = 0,
+    kSingleSymmetry,
+    kDoubleSymmetry,
+    kAxialSymmetry
+  };
+
+  virtual void setWebFile(const OdString &fileName) = 0;
+  virtual OdString webFile() const = 0;
+
+  virtual void setWebRotation(OdGeVector3d fRot) = 0;
+  virtual OdGeVector3d webRotation() const = 0;
+
+  virtual void setWebFlux(double fFlux) = 0;
+  virtual double webFlux() const = 0;
+
+  virtual void setWebFileType(WebFileType type) = 0;
+  virtual WebFileType webFileType() const = 0;
+
+  virtual void setWebSymmetry(WebSymmetry sym) = 0;
+  virtual WebSymmetry webSymmetry() const = 0;
+
+  virtual void setWebHorzAng90to270(bool bFlag) = 0;
+  virtual bool webHorzAng90to270() const = 0;
+};
+
+typedef OdSmartPtr<OdGiWebLightTraits> OdGiWebLightTraitsPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_LIGHT_TRAITS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraitsData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraitsData.h
new file mode 100755
index 0000000..703b19a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLightTraitsData.h
@@ -0,0 +1,383 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_LIGHT_TRAITS_DATA__
+#define __OD_GI_LIGHT_TRAITS_DATA__
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiLightTraits.h"
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiLightTraitsData
+{
+  bool                       m_bOn;
+  double                     m_dIntensity;
+  OdCmEntityColor            m_color;
+  OdGiShadowParameters       m_shadowParameters;
+
+protected:
+  OdGiDrawable::DrawableType m_type;
+
+protected:
+  OdGiLightTraitsData()
+    : m_bOn(false)
+    , m_dIntensity(0.0)
+  {}
+
+public:
+  bool isOn() const { return m_bOn; }
+  void setOn(bool value) { m_bOn = value; }
+
+  double intensity() const { return m_dIntensity; }
+  void setIntensity(double dIntensity) { m_dIntensity = dIntensity; }
+
+  OdCmEntityColor color() const { return m_color; }
+  void setColor(const OdCmEntityColor& color) { m_color = color; }
+
+  OdGiShadowParameters shadowParameters() const { return m_shadowParameters; }
+  void setShadowParameters(const OdGiShadowParameters& params) { m_shadowParameters = params; }
+
+  OdGiDrawable::DrawableType type() const { return m_type; }
+
+  void save(OdGsFiler * pFiler) const;
+  void load(OdGsFiler * pFiler);
+
+  static void deleteLightTraitsData(OdGiLightTraitsData* pLightTraits);
+};                          
+
+inline void OdGiLightTraitsData::save(OdGsFiler *pFiler) const {
+  pFiler->wrBool(isOn());
+  pFiler->wrDouble(intensity());
+  pFiler->wrUInt32(color().color());
+  m_shadowParameters.save(pFiler);
+}
+
+inline void OdGiLightTraitsData::load(OdGsFiler *pFiler) {
+  setOn(pFiler->rdBool());
+  setIntensity(pFiler->rdDouble());
+  color().setColor(pFiler->rdUInt32());
+  m_shadowParameters.load(pFiler);
+}
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiPointLightTraitsData : public OdGiLightTraitsData
+{
+  OdGePoint3d          m_position;
+  OdGiLightAttenuation m_attenuation;
+  // Photometric data
+  double               m_dPhysIntensity;
+  OdGiColorRGB         m_lampColor;
+  bool                 m_bHasTarget;
+  OdGePoint3d          m_target;
+
+public:
+  OdGiPointLightTraitsData()
+    : m_dPhysIntensity(1500.0)
+    , m_lampColor(1.0, 1.0, 1.0)
+    , m_bHasTarget(false)
+  {
+    m_type = OdGiDrawable::kPointLight;
+  }
+
+  OdGePoint3d position() const { return m_position; }
+  void setPosition(const OdGePoint3d& pos) { m_position = pos; }
+
+  OdGiLightAttenuation attenuation() const { return m_attenuation; }
+  void setAttenuation(const OdGiLightAttenuation& atten) { m_attenuation = atten; }
+
+  double physicalIntensity() const { return m_dPhysIntensity; }
+  void setPhysicalIntensity(double intensity) { m_dPhysIntensity = intensity; }
+
+  OdGiColorRGB lampColor() const { return m_lampColor; }
+  void setLampColor(const OdGiColorRGB& color) { m_lampColor = color; }
+
+  bool hasTarget() const { return m_bHasTarget; }
+  void setHasTarget(bool bTarget) { m_bHasTarget = bTarget; }
+
+  OdGePoint3d targetLocation() const { return m_target; }
+  void setTargetLocation(const OdGePoint3d &loc) { m_target = loc; }
+
+  inline void save(OdGsFiler *pFiler) const {
+    OdGiLightTraitsData::save(pFiler);
+    pFiler->wrPoint3d(position());
+    attenuation().save(pFiler);
+    pFiler->wrDouble(physicalIntensity());
+    pFiler->wrDouble(m_lampColor.red);
+    pFiler->wrDouble(m_lampColor.green);
+    pFiler->wrDouble(m_lampColor.blue);
+    pFiler->wrBool(hasTarget());
+    pFiler->wrPoint3d(targetLocation());
+  }
+
+  inline void load(OdGsFiler *pFiler) {
+    OdGiLightTraitsData::load(pFiler);
+    pFiler->rdPoint3d(m_position);
+    m_attenuation.load(pFiler);
+    setPhysicalIntensity(pFiler->rdDouble());
+    m_lampColor.red   = pFiler->rdDouble();
+    m_lampColor.green = pFiler->rdDouble();
+    m_lampColor.blue  = pFiler->rdDouble();
+    setHasTarget(pFiler->rdBool());
+    pFiler->rdPoint3d(m_target);
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiSpotLightTraitsData : public OdGiLightTraitsData
+{
+  OdGePoint3d          m_position, m_target;
+  OdGiLightAttenuation m_attenuation;
+  double               m_dHotspot, m_dFalloff;
+  // Photometric data
+  double               m_dPhysIntensity;
+  OdGiColorRGB         m_lampColor;
+
+public:
+  OdGiSpotLightTraitsData()
+    : m_dHotspot(0.0)
+    , m_dFalloff(0.0)
+    , m_dPhysIntensity(1500.0)
+    , m_lampColor(1.0, 1.0, 1.0)
+  {
+    m_type = OdGiDrawable::kSpotLight;
+  }
+
+  OdGePoint3d position() const { return m_position; }
+  void setPosition(const OdGePoint3d& pos) { m_position = pos; }
+
+  OdGePoint3d target() const { return m_target; }
+  void setTarget(const OdGePoint3d& trg) { m_target = trg; }
+
+  OdGiLightAttenuation attenuation() const { return m_attenuation; }
+  void setAttenuation(const OdGiLightAttenuation& atten) { m_attenuation = atten; }
+
+  bool setHotspotAndFalloff(double hotSpot, double falloff);
+  double hotspot() const { return m_dHotspot; }
+  double falloff() const { return m_dFalloff; }
+
+  double physicalIntensity() const { return m_dPhysIntensity; }
+  void setPhysicalIntensity(double intensity) { m_dPhysIntensity = intensity; }
+
+  OdGiColorRGB lampColor() const { return m_lampColor; }
+  void setLampColor(const OdGiColorRGB& color) { m_lampColor = color; }
+
+  void save(OdGsFiler *pFiler) const {
+    OdGiLightTraitsData::save(pFiler);
+    pFiler->wrPoint3d(position());
+    pFiler->wrPoint3d(target());
+    attenuation().save(pFiler);
+    pFiler->wrDouble(physicalIntensity());
+    pFiler->wrDouble(hotspot());
+    pFiler->wrDouble(falloff());
+    pFiler->wrDouble(m_lampColor.red);
+    pFiler->wrDouble(m_lampColor.green);
+    pFiler->wrDouble(m_lampColor.blue);
+  }
+
+  void load(OdGsFiler *pFiler) {
+    OdGiLightTraitsData::load(pFiler);
+    pFiler->rdPoint3d(m_position);
+    pFiler->rdPoint3d(m_target);
+    m_attenuation.load(pFiler);
+    setPhysicalIntensity(pFiler->rdDouble());
+    m_dHotspot        = pFiler->rdDouble();
+    m_dFalloff        = pFiler->rdDouble();
+    m_lampColor.red   = pFiler->rdDouble();
+    m_lampColor.green = pFiler->rdDouble();
+    m_lampColor.blue  = pFiler->rdDouble();
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+inline bool OdGiSpotLightTraitsData::setHotspotAndFalloff(double hotspot, double falloff)
+{ 
+  if((hotspot > falloff) || 
+     (hotspot < 0.0) || (falloff < 0.0) || 
+     (OdaToDegree(hotspot) > 160.0) || (OdaToDegree(falloff) > 160.0))
+    return false;
+  m_dHotspot = hotspot;
+  m_dFalloff = falloff; 
+  return true;
+}
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiDistantLightTraitsData : public OdGiLightTraitsData
+{
+  OdGeVector3d m_direction;
+  bool         m_bIsSunlight;
+  // Photometric data
+  double       m_dPhysIntensity;
+  OdGiColorRGB m_lampColor;
+  //OdGiSkyParameters m_skyParams; // Unused
+
+public:
+  OdGiDistantLightTraitsData()
+    : m_bIsSunlight(false)
+    , m_dPhysIntensity(1500.0)
+    , m_lampColor(1.0, 1.0, 1.0)
+  {
+    m_type = OdGiDrawable::kDistantLight;
+  }
+
+  OdGeVector3d direction() const { return m_direction; }
+  void setDirection(const OdGeVector3d& dir) { m_direction = dir; }
+
+  bool isSunlight() const { return m_bIsSunlight; }
+  void setSunlight(bool val) { m_bIsSunlight = val; }
+
+  double physicalIntensity() const { return m_dPhysIntensity; }
+  void setPhysicalIntensity(double intensity) { m_dPhysIntensity = intensity; }
+
+  OdGiColorRGB lampColor() const { return m_lampColor; }
+  void setLampColor(const OdGiColorRGB& color) { m_lampColor = color; }
+
+  void skyParameters(OdGiSkyParameters & /*params*/) const { /*params = m_skyParams;*/ }
+  void setSkyParameters(const OdGiSkyParameters & /*params*/) { /*m_skyParams = params;*/ }
+
+  void save(OdGsFiler *pFiler) const {
+    OdGiLightTraitsData::save(pFiler);
+    pFiler->wrVector3d(direction());
+    pFiler->wrBool(isSunlight());
+    pFiler->wrDouble(physicalIntensity());
+    pFiler->wrDouble(m_lampColor.red);
+    pFiler->wrDouble(m_lampColor.green);
+    pFiler->wrDouble(m_lampColor.blue);
+  }
+
+  void load(OdGsFiler *pFiler) {
+    OdGiLightTraitsData::load(pFiler);
+    pFiler->rdVector3d(m_direction);
+    setSunlight(pFiler->rdBool());
+    setPhysicalIntensity(pFiler->rdDouble());
+    m_lampColor.red   = pFiler->rdDouble();
+    m_lampColor.green = pFiler->rdDouble();
+    m_lampColor.blue  = pFiler->rdDouble();
+  }
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiWebLightTraitsData : public OdGiPointLightTraitsData
+{
+  OdString                        m_webFile;
+  OdGeVector3d                    m_webRotate;
+  double                          m_dFlux;
+  OdGiWebLightTraits::WebFileType m_webFileType;
+  OdGiWebLightTraits::WebSymmetry m_webSymmetry;
+  bool                            m_bHorzAng90to270;
+
+public:
+  OdGiWebLightTraitsData()
+    : OdGiPointLightTraitsData()
+    , m_dFlux(0.0)
+    , m_webFileType(OdGiWebLightTraits::kTypeA)
+    , m_webSymmetry(OdGiWebLightTraits::kNoSymmetry)
+    , m_bHorzAng90to270(false)
+  {
+    m_type = OdGiDrawable::kWebLight;
+  }
+
+  const OdString &webFile() const { return m_webFile; }
+  void setWebFile(const OdString &fileName) { m_webFile = fileName; }
+
+  const OdGeVector3d& webRotation() const { return m_webRotate; }
+  void setWebRotation(const OdGeVector3d& rot) { m_webRotate = rot; }
+
+  double webFlux() const { return m_dFlux; }
+  void setWebFlux(double flux) { m_dFlux = flux; }
+
+  OdGiWebLightTraits::WebFileType webFileType() const { return m_webFileType; }
+  void setWebFileType(OdGiWebLightTraits::WebFileType type) { m_webFileType = type; }
+
+  OdGiWebLightTraits::WebSymmetry webSymmetry() const { return m_webSymmetry; }
+  void setWebSymmetry(OdGiWebLightTraits::WebSymmetry sym) { m_webSymmetry = sym; }
+
+  bool webHorzAng90to270() const { return m_bHorzAng90to270; }
+  void setWebHorzAng90to270(bool bHA) { m_bHorzAng90to270 = bHA; }
+
+  inline void save(OdGsFiler *pFiler) const {
+    OdGiPointLightTraitsData::save(pFiler);
+    pFiler->wrString(webFile());
+    pFiler->wrVector3d(webRotation());
+    pFiler->wrDouble(webFlux());
+    pFiler->wrUInt8((OdUInt8)webFileType());
+    pFiler->wrUInt8((OdUInt8)webSymmetry());
+    pFiler->wrBool(webHorzAng90to270());
+  }
+
+  inline void load(OdGsFiler *pFiler) {
+    OdGiPointLightTraitsData::load(pFiler);
+    pFiler->rdString(m_webFile);
+    pFiler->rdVector3d(m_webRotate);
+    setWebFlux(pFiler->rdDouble());
+    setWebFileType((OdGiWebLightTraits::WebFileType)pFiler->rdUInt8());
+    setWebSymmetry((OdGiWebLightTraits::WebSymmetry)pFiler->rdUInt8());
+    setWebHorzAng90to270(pFiler->rdBool());
+  }
+};
+
+inline void OdGiLightTraitsData::deleteLightTraitsData(OdGiLightTraitsData* pLightTraits)
+{
+  switch(pLightTraits->type())
+  {
+  case OdGiDrawable::kDistantLight:
+    delete static_cast<OdGiDistantLightTraitsData*>(pLightTraits);
+    break;
+  case OdGiDrawable::kPointLight:
+    delete static_cast<OdGiPointLightTraitsData*>(pLightTraits);
+    break;
+  case OdGiDrawable::kSpotLight:
+    delete static_cast<OdGiSpotLightTraitsData*>(pLightTraits);
+    break;
+  case OdGiDrawable::kWebLight:
+    delete static_cast<OdGiWebLightTraitsData*>(pLightTraits);
+    break;
+  default:
+    {
+      ODA_FAIL_ONCE();
+    }
+    break;
+  }
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_LIGHT_TRAITS_DATA__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetype.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetype.h
new file mode 100755
index 0000000..bbea4a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetype.h
@@ -0,0 +1,222 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGILINETYPESEG_INCLUDED_
+#define _ODGILINETYPESEG_INCLUDED_
+
+
+#include "TD_PackPush.h"
+
+#include "OdString.h"
+#include "OdArray.h"
+#include <math.h>
+
+
+class OdDbStub;
+
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class OdGiLinetypeDash
+{
+public:
+  ODRX_HEAP_OPERATORS();
+
+  struct offset
+  {
+  double            x;
+	double            y;
+  };
+  double            length;
+	double            shapeScale;
+	double            shapeRotation;
+  OdUInt16          flags;
+  OdUInt16          shapeNumber;
+	offset            shapeOffset;
+	OdString          textString;
+	OdDbStub*         styleId;
+
+  OdGiLinetypeDash()
+  {
+    shapeScale = 1.0;
+    shapeRotation = shapeScale = length = 0.0;
+    flags = shapeNumber = 0;
+    shapeOffset.x = shapeOffset.y = 0.0;                                    // MKU 10.03.2004   CR 1690
+    styleId = NULL;
+  }
+
+  bool isRotationAbsolute() const { return GETBIT(flags, 1); }
+	void setRotationAbsolute(bool value = true) { SETBIT(flags, 1, value); }
+
+  bool isRotationUpright() const { return GETBIT(flags, 8); }
+	void setRotationUpright(bool value = true) { SETBIT(flags, 8, value); }
+
+  bool isEmbeddedTextString() const { return GETBIT(flags, 2); }
+	void setEmbeddedTextString(bool value = true) { SETBIT(flags, 2, value); }
+
+  bool isEmbeddedShape() const { return GETBIT(flags, 4); }
+	void setEmbeddedShape(bool value = true) { SETBIT(flags, 4, value); }
+};
+
+typedef OdArray<OdGiLinetypeDash> OdGiLinetypeDashArray;
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class OdGiLinetype
+{
+	enum
+	{
+		kByBlock            = 1,
+		kByLayer            = 2,
+		kPatternLengthValid = 4
+	};
+
+  mutable OdUInt32          m_flags;
+  mutable double            m_patternLength;
+  OdGiLinetypeDashArray     m_dashes;
+  friend class OdDbLinetypeTableRecord;
+  friend class OdDbLinetypeTableRecordImpl;
+public:
+  OdGiLinetype();
+
+  bool isContinuous() const;
+
+  bool isByBlock() const;
+	void setByBlock(bool value);
+
+  bool isByLayer() const;
+	void setByLayer(bool value);
+
+  /** \details
+      Returns the overall length of this linetype pattern.
+  */
+  double patternLength() const;
+
+  void setPatternLength(double patternLength);
+
+  /** \details
+      Returns the number of dashes of this linetype.
+  */
+  int numDashes() const;
+
+  /** \details
+      Sets the number of dashes for this linetype.
+  */
+  void setNumDashes(int count);
+
+  void dashAt(int index, OdGiLinetypeDash& dash) const;
+  const OdGiLinetypeDash& dashAt(int index) const;
+
+  void setDashAt(int index, double value);
+  void setDashAt(int index, const OdGiLinetypeDash& dash);
+
+  void dashes(OdGiLinetypeDashArray& dashes) const;
+  void setDashes(const OdGiLinetypeDashArray& dashes);
+};
+
+
+inline bool OdGiLinetype::isByBlock() const     { return GETBIT(m_flags, kByBlock); }
+inline void OdGiLinetype::setByBlock(bool value){ SETBIT(m_flags, kByBlock, value); }
+
+inline bool OdGiLinetype::isByLayer() const     { return GETBIT(m_flags, kByLayer); }
+inline void OdGiLinetype::setByLayer(bool value){ SETBIT(m_flags, kByLayer, value); }
+
+inline bool OdGiLinetype::isContinuous() const  { return m_dashes.isEmpty(); }
+
+inline void OdGiLinetype::dashes(OdGiLinetypeDashArray& dashes) const { dashes = m_dashes; }
+inline void OdGiLinetype::setDashes(const OdGiLinetypeDashArray& dashes)
+{
+  m_dashes = dashes;
+  SETBIT(m_flags, kPatternLengthValid, false);
+}
+
+inline OdGiLinetype::OdGiLinetype()
+  : m_flags(kPatternLengthValid)
+  , m_patternLength(0.)
+{
+}
+
+inline double OdGiLinetype::patternLength() const
+{
+  if(!GETBIT(m_flags, kPatternLengthValid))
+  {
+    int n = m_dashes.size();
+    m_patternLength = 0.0;
+    while(n--)
+    {
+      m_patternLength += fabs(m_dashes[n].length);
+    }
+    SETBIT(m_flags, kPatternLengthValid, true);
+  }
+  return m_patternLength;
+}
+
+inline void OdGiLinetype::setPatternLength(double patternLength)
+{
+  m_patternLength = patternLength;
+  if ( OdZero(patternLength) )
+    SETBIT(m_flags, kPatternLengthValid, false);
+  else
+    SETBIT(m_flags, kPatternLengthValid, true);
+}
+
+inline int OdGiLinetype::numDashes() const
+{
+  return m_dashes.size();
+}
+
+inline void OdGiLinetype::setNumDashes(int count)
+{
+  SETBIT(m_flags, kPatternLengthValid, false);
+  m_dashes.setLogicalLength(count);
+}
+
+inline void OdGiLinetype::dashAt(int index, OdGiLinetypeDash& dash) const
+{
+  dash = m_dashes[index];
+}
+
+inline const OdGiLinetypeDash& OdGiLinetype::dashAt(int index) const
+{
+  return m_dashes[index];
+}
+
+inline void OdGiLinetype::setDashAt(int index, const OdGiLinetypeDash& dash)
+{
+  SETBIT(m_flags, kPatternLengthValid, false);
+  m_dashes[index] = dash;
+}
+
+inline void OdGiLinetype::setDashAt(int index, double dashLength)
+{
+  SETBIT(m_flags, kPatternLengthValid, false);
+  m_dashes[index] = OdGiLinetypeDash();
+  m_dashes[index].length = dashLength;
+}
+
+#include "TD_PackPop.h"
+
+#endif //_ODGILINETYPESEG_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetypeRedir.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetypeRedir.h
new file mode 100755
index 0000000..20450e5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetypeRedir.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGILINETYPEREDIR_H__
+#define __ODGILINETYPEREDIR_H__
+
+#include "Gi/GiLinetyper.h"
+#include "Gi/GiDgLinetyper.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Linetype redirection conveyor node.
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiLinetypeRedir : public OdGiDgLinetyper
+{
+public:
+  enum Direction
+  {
+    kToStandard = 0,
+    kToDg
+  };
+public:
+  ODRX_DECLARE_MEMBERS(OdGiLinetypeRedir);
+
+  virtual void switchTo(Direction dir) = 0;
+
+  virtual Direction currentRedir() const = 0;
+
+  virtual OdGiLinetyper *activeLinetyper() = 0;
+  virtual const OdGiLinetyper *activeLinetyper() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiLinetypeRedir object pointers.
+*/
+typedef OdSmartPtr<OdGiLinetypeRedir> OdGiLinetypeRedirPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGILINETYPEREDIR_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetyper.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetyper.h
new file mode 100755
index 0000000..36aa5e0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLinetyper.h
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGILINETYPER_H__
+#define __ODGILINETYPER_H__
+
+
+#include "Gi/GiConveyorNode.h"
+#include "Gi/GiNonEntityTraits.h"
+#include "Ge/GeDoubleArray.h"
+
+class OdGiDeviation;
+class OdGiConveyorGeometry;
+
+#include "TD_PackPush.h"
+
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiLinetyper : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiLinetyper);
+
+  virtual void setDrawContext( OdGiConveyorContext* pDrawCtx ) = 0;
+
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  virtual OdUInt32 setLinetype(OdDbStub* id, double scale, double generationCriteria = 0.) = 0;
+
+  virtual OdGiLinetypeTraits& linetypeTraits() const = 0;
+
+  virtual void enable() = 0;
+
+  virtual bool enabled() const = 0;
+
+  virtual void disable() = 0;
+  
+  // makes linetyper to linetype circle curves (circles, circular arcs) 
+  // analytically or using breaking to polyline.
+  // bAnalytic = true turns on analytic linetyper
+  // bAnalytic = false turns off analytic linetyper
+  virtual void setAnalyticLinetypingCircles(bool bAnalytic) = 0;  
+  virtual bool isAnalyticLinetypingCircles() const = 0;
+  
+  // makes linetyper to linetype complex curves (ellipses, elliptic arcs, nurbs curves) 
+  virtual void setAnalyticLinetypingComplexCurves(bool bAnalytic) = 0;  
+  virtual bool isAnalyticLinetypingComplexCurves() const = 0;
+
+  virtual OdGiConveyorGeometry* redirectionGeometry() = 0;
+
+  virtual void enableCache() = 0;
+  virtual void disableCache() = 0;
+  virtual bool cacheEnabled() const = 0;
+  virtual void clearCache() = 0;
+};
+
+typedef OdSmartPtr<OdGiLinetyper> OdGiLinetyperPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGILINETYPER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLocalDrawableDesc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLocalDrawableDesc.h
new file mode 100755
index 0000000..ea0f7dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiLocalDrawableDesc.h
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// GiBaseVectorizer.h: interface for the OdGiBaseVectorizer class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGILOCALDRAWABLEDESC_INCLUDED_
+#define _ODGILOCALDRAWABLEDESC_INCLUDED_
+
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiPathNode.h"
+
+/** \details
+    
+    <group OdGi_Classes> 
+*/
+struct OdGiLocalDrawableDesc : OdGiDrawableDesc, OdGiPathNode
+{
+  OdGiDrawableDesc*& _pPlaceToRestore;
+  OdGsMarker         _nSelectionMarker;
+  inline OdGiLocalDrawableDesc(OdGiDrawableDesc*& pParentDesc)
+    : _pPlaceToRestore(pParentDesc)
+    , _nSelectionMarker(0) /* kNullSubentIndex */
+  {
+    pParent = pParentDesc;
+    _pPlaceToRestore = this;
+  }
+  inline ~OdGiLocalDrawableDesc()
+  {
+    _pPlaceToRestore = pParent;
+  }
+
+  // OdGsPathNode interface
+  const OdGiPathNode* parent() const
+  {
+    return static_cast<const OdGiLocalDrawableDesc*>(pParent);
+  }
+
+  OdDbStub* persistentDrawableId() const
+  {
+    return persistId;
+  }
+
+  const OdGiDrawable* transientDrawable() const
+  {
+    return pTransientDrawable;
+  }
+
+  OdGsMarker selectionMarker() const
+  {
+    return _nSelectionMarker;
+  }
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGILOCALDRAWABLEDESC_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMapperItem.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMapperItem.h
new file mode 100755
index 0000000..3455d88
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMapperItem.h
@@ -0,0 +1,875 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// Mapper item.
+
+#ifndef __ODGIMAPPERITEM_H__
+#define __ODGIMAPPERITEM_H__
+
+#include "GiExport.h"
+#include "GiMaterial.h"
+#include "GiMaterialTraitsData.h"
+#include "GiGeometry.h"
+
+#include "Ge/GePoint2d.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeMatrix3d.h"
+#include "Ge/GeExtents3d.h"
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Material mapper item entry for separate texture channel.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMapperItemEntry : public OdRxObject
+{
+  public:
+    /** \details
+      Input mapper triangle type.
+    */
+    struct MapInputTriangle {
+      OdGePoint3d inPt[3]; // Mapping xyz
+    };
+    /** \details
+      Output mapper vertices texture coordinates.
+    */
+    struct MapOutputCoords {
+      OdGePoint2d outCoord[3]; // Mapped uv
+    };
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMapperItemEntry);
+
+    /** \details
+      Return mapper (return result mapper combination for pMapper and pInheritMapper).
+      \sa
+      setMapper
+    */
+    virtual const OdGiMapper &mapper() const = 0;
+    /** \details
+      Set mapper combination.
+      \param pMapper [in]  Entity mapper.
+      \param pInheritMapper [in]  Material (default) mapper.
+    */
+    virtual void setMapper(const OdGiMapper &pMapper, const OdGiMapper &pInheritMapper) = 0;
+    /** \details
+      Set mapper combination and object/model matrix.
+      \param pMapper [in]  Entity mapper.
+      \param pInheritMapper [in]  Material (default) mapper.
+      \param tm [in]  Model or object matrix.
+    */
+    virtual void setMapper(const OdGiMapper &pMapper, const OdGiMapper &pInheritMapper, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for material (entity mapper not specified).
+      \param pMaterialMapper [in]  Material mapper.
+    */
+    virtual void setMapper(const OdGiMapper &pMaterialMapper) = 0;
+    /** \details
+      Set mapper for material and object/model matrix.
+      \param pMaterialMapper [in]  Material mapper.
+      \param tm [in]  Model or object matrix.
+    */
+    virtual void setMapper(const OdGiMapper &pMaterialMapper, const OdGeMatrix3d &tm) = 0;
+
+    /** \details
+      Return input vertices transformation matrix.
+    */
+    virtual const OdGeMatrix3d &inputTransform() const = 0;
+    /** \details
+      Set input vertices transformation matrix.
+    */
+    virtual void setInputTransform(const OdGeMatrix3d &tm) = 0;
+
+    /** \details
+      Return input vertices device transformation matrix.
+
+      \remarks
+      This is a device-dependant optional transformation matrix.
+    */
+    virtual const OdGeMatrix3d &deviceTransform() const = 0;
+    /** \details
+      Set input vertices device transformation matrix.
+
+      \remarks
+      This is a device-dependant optional transformation matrix.
+    */
+    virtual void setDeviceTransform(const OdGeMatrix3d &dtm) = 0;
+
+    /** \details
+      Return model transformation matrix (used only for kModel mappers).
+    */
+    virtual const OdGeMatrix3d &modelTransform() const = 0;
+    /** \details
+      Set model transformation matrix (used only for kModel mappers).
+    */
+    virtual void setModelTransform(const OdGeMatrix3d &mtm) = 0;
+
+    /** \details
+      Return object transformation matrix (used only for kObject mappers).
+    */
+    virtual const OdGeMatrix3d &objectTransform() const = 0;
+    /** \details
+      Set object transformation matrix (used only for kObject mappers).
+    */
+    virtual void setObjectTransform(const OdGeMatrix3d &otm) = 0;
+
+    /** \details
+      Return output texture coordinates transformation matrix.
+    */
+    virtual const OdGeMatrix3d &outputTransform() const = 0;
+    /** \details
+      Set output texture coordinates transformation matrix.
+    */
+    virtual void setOutputTransform(const OdGeMatrix3d &tm) = 0;
+
+    /** \details
+      Recompute transformation matrices.
+      \remarks
+      Must be called after mapper or model transforms set.
+      \sa
+      setMapper, setModelTransform
+    */
+    virtual void recomputeTransformations() = 0;
+
+    /** \details
+      Calculate texture coordinates for input triangle.
+      \param trg [in]  Input triangle coordinates (X, Y, Z).
+      \param uv [out]  Output texture coordinates (U, V).
+    */
+    virtual void mapCoords(const MapInputTriangle &trg, MapOutputCoords &uv) const = 0;
+    /** \details
+      Calculate texture coordinates for input triangle.
+      \param trg [in]  Input triangle coordinates (X, Y, Z).
+      \param uv [out]  Output texture coordinates (U, V).
+    */
+    virtual void mapCoords(const OdGePoint3d *trg, OdGePoint2d *uv) const = 0;
+    /** \details
+      Calculate texture coordinates for input triangle.
+      \param trg [in]  Input triangle coordinates (X, Y, Z).
+      \param uv [out]  Output texture coordinates (U, V).
+    */
+    virtual void mapCoords(const double *trg, double *uv) const = 0;
+    /** \details
+      Calculate texture coordinates for input triangle.
+      \param trg [in]  Input triangle coordinates (X, Y, Z).
+      \param normal [in]  Input triangle normal (X, Y, Z).
+      \param uv [out]  Output texture coordinates (U, V).
+    */
+    virtual void mapCoords(const MapInputTriangle &trg, const OdGeVector3d &normal, MapOutputCoords &uv) const = 0;
+    /** \details
+      Calculate texture coordinates for input triangle.
+      \param trg [in]  Input triangle coordinates (X, Y, Z).
+      \param normal [in]  Input triangle normal (X, Y, Z).
+      \param uv [out]  Output texture coordinates (U, V).
+    */
+    virtual void mapCoords(const OdGePoint3d *trg, const OdGeVector3d &normal, OdGePoint2d *uv) const = 0;
+    /** \details
+      Calculate texture coordinates for input triangle.
+      \param trg [in]  Input triangle coordinates (X, Y, Z).
+      \param normal [in]  Input triangle normal (X, Y, Z).
+      \param uv [out]  Output texture coordinates (U, V).
+    */
+    virtual void mapCoords(const double *trg, const double *normal, double *uv) const = 0;
+
+    // Shell mapping extensions for 3.4
+
+    enum MappingIteratorType
+    {
+      kShellMapIt = 0, // Shell-style iterator
+      kTriListMapIt, // Triangles list { { 0, 1, 2 }, { 1, 2, 3 } }
+      kPolyIt // Simple list of indices (probably shell/mesh face, polygon or unstructured data)
+      // kTriListMapIt makes subdividing of vertices without indices on triangles. Set kShellMapIt or
+      // kPolyIt if input data doesn't stored as triangles list.
+    };
+
+    /** \details
+      Calculate texture coordinates for input shellmeshpolygon vertices.
+      \param nVerts [in]  Count of input vertices.
+      \param pVerts [in]  Array of input vertices (should be equal with vertices count).
+      \param pUV [out]  Output array of texture coordinates (should be equal with vertices count).
+      \param nList [in]  Count of indices in indices array (include face sizes for shell-style arrays).
+      \param pIds [in]  Vertex indices array.
+      \param mapIt [in]  Type of indices iterator.
+      \param pNormal [in]  Optional normal (if already precalculated and doesn't specified in face/vertex data).
+      \param pFaceNormals [in]  Optional face normals array (have greater priority than optional normal).
+      \param pVertNormals [in]  Optional vertex normals array (have greater priority than optional face normals).
+      \param oType [in]  Used for calculation of normal if doesn't specified.
+    */
+    virtual void mapCoords(OdUInt32 nVerts, const OdGePoint3d *pVerts, OdGePoint2d *pUV,
+                           OdUInt32 nList = 0, const OdInt32 *pIds = NULL, MappingIteratorType mapIt = kTriListMapIt,
+                           const OdGeVector3d *pNormal = NULL, const OdGeVector3d *pFaceNormals = NULL,
+                           const OdGeVector3d *pVertNormals = NULL, OdGiOrientationType oType = kOdGiNoOrientation) = 0;
+
+    // Predefined coordinates extensions
+
+    /** \details
+      Recalculate predefined texture coordinates using current material transformation.
+      \param pInUVW [in]  Input array of texture coordinates.
+      \param pOutUV [out]  Output array of transformed texture coordinates.
+      \param nPoints [in]  Count of input and output texture coordinates.
+    */
+    virtual void mapPredefinedCoords(const OdGePoint3d *pInUVW, OdGePoint2d *pOutUV, OdUInt32 nPoints) const = 0;
+
+    //
+
+    /** \details
+      Return true if entity mapper is specified.
+    */
+    virtual bool isEntityMapper() const = 0;
+    /** \details
+      Return true if mapper needs object matrix.
+    */
+    virtual bool isObjectMatrixNeed() const = 0;
+    /** \details
+      Return true if mapper needs model matrix.
+    */
+    virtual bool isModelMatrixNeed() const = 0;
+    /** \details
+      Return true if mapper requires object or vertex transform.
+    */
+    virtual bool isDependsFromObjectMatrix() const = 0;
+    /** \details
+      Returns true if mapper requires vertex transform.
+    */
+    virtual bool isVertexTransformRequired() const = 0;
+
+    /** \details
+      Sets vertex transform from points array.
+    */
+    virtual void setVertexTransform(OdInt32 nCount, const OdGePoint3d *pPoints) = 0;
+    /** \details
+      Sets vertex transform from object extents.
+    */
+    virtual void setVertexTransform(const OdGeExtents3d &exts) = 0;
+    /** \details
+      Sets vertex transform from points array.
+    */
+    virtual void setObjectTransform(OdInt32 nCount, const OdGePoint3d *pPoints) = 0;
+    /** \details
+      Sets object transform from extents.
+    */
+    virtual void setObjectTransform(const OdGeExtents3d &exts) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMapperItemEntry object pointers.
+	
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMapperItemEntry> OdGiMapperItemEntryPtr;
+
+/** \details
+    Container item for material data storage.
+    OdGiMapperItem used for real-time devices, such as DirectX or OpenGL.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMapperItem : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMapperItem);
+
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setDiffuseMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setDiffuseMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setDiffuseMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setDiffuseMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for diffuse texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr diffuseMapper() const = 0;
+    /** \details
+      Return mapper for diffuse texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr diffuseMapper() = 0;
+
+    /** \details
+      Set mapper for all texture channels.
+      \param traitsData [in]  Input traits data.
+      \param pMaterial [in]  Material ID for input traits data.
+    */
+    virtual void setMapper(const OdGiMaterialTraitsData &traitsData, const OdDbStub *pMaterial = NULL) = 0;
+    /** \details
+      Set mapper for all texture channels.
+      \param traitsData [in]  Input traits data.
+      \param pMaterial [in]  Material ID for input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm, const OdDbStub *pMaterial = NULL) = 0;
+    /** \details
+      Set mapper for all texture channels.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param pMaterial [in]  Material ID for input traits data.
+    */
+    virtual void setMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdDbStub *pMaterial = NULL) = 0;
+    /** \details
+      Set mapper for all texture channels.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param pMaterial [in]  Material ID for input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm, const OdDbStub *pMaterial = NULL) = 0;
+
+    /** \details
+      Set model transformation for all texture channels which needs model transformation.
+      \param mtm [in]  Model transformation matrix.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setModelTransform(const OdGeMatrix3d &mtm, bool recomputeTransforms = true) = 0;
+
+    /** \details
+      Set object transformation for all texture channels which needs object transformation.
+      \param otm [in]  Object transformation matrix.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setObjectTransform(const OdGeMatrix3d &otm, bool recomputeTransforms = true) = 0;
+    /** \details
+      Set object transformation for all texture channels which needs object transformation.
+      \param nCount [in]  Number of points into pPoints array.
+      \param pPoints [in]  Array of points.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setObjectTransform(OdInt32 nCount, const OdGePoint3d *pPoints, bool recomputeTransforms = true) = 0;
+    /** \details
+      Set object transformation for all texture channels which needs object transformation.
+      \param exts [in]  Object extents.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix set.
+    */
+    virtual void setObjectTransform(const OdGeExtents3d &exts, bool recomputeTransforms = true) = 0;
+
+    /** \details
+      Set device-dependant transformation for all texture channels.
+      \param dtm [in]  Device transformation matrix.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix set.
+    */
+    virtual void setDeviceTransform(const OdGeMatrix3d &dtm, bool recomputeTransforms = true) = 0;
+
+    /** \details
+      Test whether the current material is valid for use with previously set up mapper data.
+      \param pMaterial [in]  Material ID.
+    */
+    virtual bool isLastProcValid(const OdDbStub *pMaterial) = 0;
+    /** \details
+      Test whether the current material and matrix are valid for use with previously set up mapper data.
+      \param pMaterial [in]  Material ID.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual bool isLastProcValid(const OdDbStub *pMaterial, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Test whether the current mapper and material are valid for use with previously set up mapper data.
+      \param pMapper [in]  Entity mapper.
+      \param pMaterial [in]  Material ID.
+    */
+    virtual bool isLastProcValid(const OdGiMapper *pMapper, const OdDbStub *pMaterial) = 0;
+    /** \details
+      Test whether the current mapper, material, and matrix are valid for use with previously set up mapper data.
+      \param pMapper [in]  Entity mapper.
+      \param pMaterial [in]  Material ID.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual bool isLastProcValid(const OdGiMapper *pMapper, const OdDbStub *pMaterial, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Test whether the current object/model matrix is valid for use with previously set up mapper data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual bool isLastProcValid(const OdGeMatrix3d &tm) = 0;
+
+    /** \details
+      Return true if entity mapper is specified.
+    */
+    virtual bool isEntityMapper() const = 0;
+    /** \details
+      Return true if mapper needs object matrix.
+    */
+    virtual bool isObjectMatrixNeed() const = 0;
+    /** \details
+      Return true if mapper needs model matrix.
+    */
+    virtual bool isModelMatrixNeed() const = 0;
+    /** \details
+      Return true if mapper requires object or vertex transform.
+    */
+    virtual bool isDependsFromObjectMatrix() const = 0;
+    /** \details
+      Returns true if mapper requires vertex transform.
+    */
+    virtual bool isVertexTransformRequired() const = 0;
+
+    /** \details
+      Sets vertex transform from points array for channels which needs vertex transformation.
+    */
+    virtual void setVertexTransform(OdInt32 nCount, const OdGePoint3d *pPoints) = 0;
+    /** \details
+      Sets vertex transform from object extents for channels which needs vertex transformation.
+    */
+    virtual void setVertexTransform(const OdGeExtents3d &exts) = 0;
+
+    /** \details
+      Sets input tranform for all channels.
+      \param tm [in]  Input transformation matrix.
+      \param bVertexDependantOnly [in]  Set to channels which require vertex tranform only.
+    */
+    virtual void setInputTransform(const OdGeMatrix3d &tm, bool bVertexDependantOnly = true) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMapperItem object pointers.
+
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMapperItem> OdGiMapperItemPtr;
+
+/** \details
+    Container item for material data storage.
+    OdGiMapperRenderItem used for rendering devices.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMapperRenderItem : public OdGiMapperItem
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMapperRenderItem);
+
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setDiffuseMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setDiffuseMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setDiffuseMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for diffuse texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setDiffuseMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for diffuse texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr diffuseMapper() const = 0;
+    /** \details
+      Return mapper for diffuse texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr diffuseMapper() = 0;
+
+    /** \details
+      Set mapper for specular texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setSpecularMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for specular texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setSpecularMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for specular texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setSpecularMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for specular texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setSpecularMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for specular texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr specularMapper() const = 0;
+    /** \details
+      Return mapper for specular texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr specularMapper() = 0;
+
+    /** \details
+      Set mapper for reflection texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setReflectionMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for reflection texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setReflectionMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for reflection texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setReflectionMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for reflection texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setReflectionMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for reflection texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr reflectionMapper() const = 0;
+    /** \details
+      Return mapper for reflection texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr reflectionMapper() = 0;
+
+    /** \details
+      Set mapper for opacity texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setOpacityMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for opacity texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setOpacityMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for opacity texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setOpacityMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for opacity texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setOpacityMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for opacity texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr opacityMapper() const = 0;
+    /** \details
+      Return mapper for opacity texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr opacityMapper() = 0;
+
+    /** \details
+      Set mapper for bump texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setBumpMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for bump texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setBumpMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for bump texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setBumpMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for bump texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setBumpMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for bump texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr bumpMapper() const = 0;
+    /** \details
+      Return mapper for bump texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr bumpMapper() = 0;
+
+    /** \details
+      Set mapper for reflection texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setRefractionMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for refraction texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setRefractionMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for reflection texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setRefractionMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for refraction texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setRefractionMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for reflection texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr refractionMapper() const = 0;
+    /** \details
+      Return mapper for reflection texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr refractionMapper() = 0;
+
+    /** \details
+      Set mapper for normal map texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setNormalMapMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for normal map texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setNormalMapMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for normal map texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setNormalMapMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for normal map texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setNormalMapMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for normal map texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr normalMapMapper() const = 0;
+    /** \details
+      Return mapper for normal map texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr normalMapMapper() = 0;
+
+    /** \details
+      Set mapper for emission texture channel.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setEmissionMapper(const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for emission texture channel.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setEmissionMapper(const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Set mapper for emission texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+    */
+    virtual void setEmissionMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData) = 0;
+    /** \details
+      Set mapper for emission texture channel.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual void setEmissionMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Return mapper for emission texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr emissionMapper() const = 0;
+    /** \details
+      Return mapper for emission texture channel.
+    */
+    virtual OdGiMapperItemEntryPtr emissionMapper() = 0;
+
+    /** \details
+      Set mapper for all texture channels.
+      \param traitsData [in]  Input traits data.
+      \param pMaterial [in]  Material ID for input traits data.
+    */
+    virtual void setMapper(const OdGiMaterialTraitsData &traitsData, const OdDbStub *pMaterial = NULL) = 0;
+    /** \details
+      Set mapper for all texture channels.
+      \param pMapper [in]  Entity mapper.
+      \param traitsData [in]  Input traits data.
+      \param pMaterial [in]  Material ID for input traits data.
+    */
+    virtual void setMapper(const OdGiMapper *pMapper, const OdGiMaterialTraitsData &traitsData, const OdDbStub *pMaterial = NULL) = 0;
+
+    /** \details
+      Set model transformation for all texture channels which needs model transformation.
+      \param mtm [in]  Model transformation matrix.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setModelTransform(const OdGeMatrix3d &mtm, bool recomputeTransforms = true) = 0;
+
+    /** \details
+      Set object transformation for all texture channels which needs object transformation.
+      \param otm [in]  Object transformation matrix.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setObjectTransform(const OdGeMatrix3d &otm, bool recomputeTransforms = true) = 0;
+    /** \details
+      Set object transformation for all texture channels which needs object transformation.
+      \param nCount [in]  Number of points into pPoints array.
+      \param pPoints [in]  Array of points.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setObjectTransform(OdInt32 nCount, const OdGePoint3d *pPoints, bool recomputeTransforms = true) = 0;
+    /** \details
+      Set object transformation for all texture channels which needs object transformation.
+      \param exts [in]  Object extents.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setObjectTransform(const OdGeExtents3d &exts, bool recomputeTransforms = true) = 0;
+
+    /** \details
+      Set device-dependant transformation for all texture channels.
+      \param dtm [in]  Device transformation matrix.
+      \param recomputeTransforms [in]  Call recomputeTransformations() for all texture channels after matrix is set.
+    */
+    virtual void setDeviceTransform(const OdGeMatrix3d &dtm, bool recomputeTransforms = true) = 0;
+
+    /** \details
+      Test whether the current material is valid for use with previously set up mapper data.
+      \param pMaterial [in]  Material ID.
+    */
+    virtual bool isLastProcValid(const OdDbStub *pMaterial) = 0;
+    /** \details
+      Test whether the current material and matrix are valid for use with previously set up mapper data.
+      \param pMaterial [in]  Material ID.
+      \param tm [in]  object/model transformation matrix.
+    */
+    virtual bool isLastProcValid(const OdDbStub *pMaterial, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Test whether the current mapper and material are valid for use with previously set up mapper data.
+      \param pMapper [in]  Entity mapper.
+      \param pMaterial [in]  Material ID.
+    */
+    virtual bool isLastProcValid(const OdGiMapper *pMapper, const OdDbStub *pMaterial) = 0;
+    /** \details
+      Test whether the current mapper, material, and matrix are valid for use with previously set up mapper data.
+      \param pMapper [in]  Entity mapper.
+      \param pMaterial [in]  Material ID.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual bool isLastProcValid(const OdGiMapper *pMapper, const OdDbStub *pMaterial, const OdGeMatrix3d &tm) = 0;
+    /** \details
+      Test whether the current object/model matrix is valid for use with previously set up mapper data.
+      \param tm [in]  Object/model transformation matrix.
+    */
+    virtual bool isLastProcValid(const OdGeMatrix3d &tm) = 0;
+
+    /** \details
+      Return true if entity mapper is specified for all channels.
+    */
+    virtual bool isEntityMapper() const = 0;
+    /** \details
+      Return true if at least one mapper needs object matrix.
+    */
+    virtual bool isObjectMatrixNeed() const = 0;
+    /** \details
+      Return true if at least one mapper needs model matrix.
+    */
+    virtual bool isModelMatrixNeed() const = 0;
+    /** \details
+      Return true if mapper requires object or vertex transform.
+    */
+    virtual bool isDependsFromObjectMatrix() const = 0;
+    /** \details
+      Returns true if mapper requires vertex transform.
+    */
+    virtual bool isVertexTransformRequired() const = 0;
+
+    /** \details
+      Set vertex transform from points array for channels which needs vertex transformation.
+    */
+    virtual void setVertexTransform(OdInt32 nCount, const OdGePoint3d *pPoints) = 0;
+    /** \details
+      Set vertex transform from object extents for channels which needs vertex transformation.
+    */
+    virtual void setVertexTransform(const OdGeExtents3d &exts) = 0;
+
+    /** \details
+      Sets input tranform for all channels.
+      \param tm [in]  Input transformation matrix.
+      \param bVertexDependantOnly [in]  Set to channels which require vertex tranform only.
+    */
+    virtual void setInputTransform(const OdGeMatrix3d &tm, bool bVertexDependantOnly = true) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMapperRenderItem object pointers.
+	
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMapperRenderItem> OdGiMapperRenderItemPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIMAPPERITEM_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterial.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterial.h
new file mode 100755
index 0000000..dfa3d55
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterial.h
@@ -0,0 +1,1790 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIMATERIAL_H__
+#define __ODGIMATERIAL_H__
+
+#include "TD_PackPush.h"
+#include "RootExport.h"
+#include "GiExport.h"
+
+#include "CmColor.h"
+#include "Ge/GeMatrix3d.h"
+#include "Gi/GiDrawable.h"
+#include "Gi/GiVariant.h"
+
+class OdGiMaterialColor;
+class OdGiMaterialMap;
+class OdGiRasterImage;
+
+/** \details
+    This class defines the interface to material traits for the vectorization process.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiMaterialTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiMaterialTraits);
+
+  enum IlluminationModel {
+    kBlinnShader = 0,
+    kMetalShader
+  };
+
+  enum ChannelFlags
+  {
+    kNone           = 0x00000,
+    kUseDiffuse     = 0x00001,
+    kUseSpecular    = 0x00002,
+    kUseReflection  = 0x00004,
+    kUseOpacity     = 0x00008,
+    kUseBump        = 0x00010,
+    kUseRefraction  = 0x00020,
+    kUseNormalMap   = 0x00040,
+    kUseEmission    = 0x00080,
+
+    kUseAll         = (kUseDiffuse | kUseSpecular | kUseReflection |
+                       kUseOpacity | kUseBump | kUseRefraction | kUseNormalMap),
+    kUseAllInternal = (kUseAll | kUseEmission)
+  };
+
+  enum Mode {
+    kRealistic = 0,
+    kAdvanced
+  };
+
+  // Returned via subSetAttributes()
+  enum
+  {
+    kByBlock    = (OdGiDrawable::kLastFlag << 1),
+    kByLayer    = (OdGiDrawable::kLastFlag << 2)
+  };
+
+  // Extended material traits enumerations
+
+  enum LuminanceMode
+  {
+    kSelfIllumination = 0,
+    kLuminance,
+    kEmissionColor
+  };
+
+  enum NormalMapMethod
+  {
+    kTangentSpace
+  };
+
+  enum GlobalIlluminationMode
+  {
+    kGlobalIlluminationNone,
+    kGlobalIlluminationCast,
+    kGlobalIlluminationReceive,
+    kGlobalIlluminationCastAndReceive
+  };
+
+  enum FinalGatherMode
+  {
+    kFinalGatherNone,
+    kFinalGatherCast,
+    kFinalGatherReceive,
+    kFinalGatherCastAndReceive
+  };
+
+  /** \details
+    Returns the ambient color component of this MaterialTraits object.
+
+    \param ambientColor [out]  Receives the ambient color.
+
+    \remarks
+    The ambient component component is most apparent when there is no direct illumination on the entity.
+  */
+  virtual void ambient(OdGiMaterialColor& ambientColor) const = 0;
+
+  /** \details
+    Returns the diffuse component of this MaterialTraits object.
+
+    \param diffuseColor [out]  Receives the diffuse color.
+    \param diffuseMap [out]  Receives the diffuse map.
+
+    \remarks
+    The diffuse component is most apparent when there is direct illumination on the entity.
+  */
+  virtual void diffuse(OdGiMaterialColor& diffuseColor, OdGiMaterialMap& diffuseMap) const = 0;
+
+  /** \details
+    Returns the specular component of this MaterialTraits object.
+
+    \param specularColor [out]  Receives the specular color.
+    \param specularMap [out]  Receives the specular map.
+    \param glossFactor [out]  Receives the gloss factor.
+
+    \remarks
+    The specular component is viewpoint dependent, and most apparent when the entity is highlighted.
+  */
+  virtual void specular(OdGiMaterialColor& specularColor, OdGiMaterialMap& specularMap, double& glossFactor) const = 0;
+
+  /** \details
+    Returns the reflection component of this MaterialTraits object.
+
+    \param reflectionMap [out]  Receives the reflection map.
+
+    \remarks
+    The reflection component creates a mirror finish on the entity .
+  */
+  virtual void reflection(OdGiMaterialMap& reflectionMap) const = 0;
+
+  /** \details
+    Returns the opacity component of this MaterialTraits object.
+
+    \param opacityPercentage [out]  Receives the opacity percentage.
+    \param opacityMap [out]  Receives the opacity map.
+  */
+  virtual void opacity(double& opacityPercentage, OdGiMaterialMap& opacityMap) const = 0;
+
+  /** \details
+    Returns the bump component of this MaterialTraits object.
+
+    \param bumpMap [out]  Receives the bump map.
+  */
+  virtual void bump(OdGiMaterialMap& bumpMap) const = 0;
+
+  /** \details
+    Returns the refraction component of this MaterialTraits object.
+
+    \param refractionIndex [out]  Receives the refraction index.
+    \param refractionMap [out]  Receives the refraction map.
+  */
+  virtual void refraction(double& refractionIndex, OdGiMaterialMap& refractionMap) const = 0;
+
+  /** \details
+    Returns the translucence of this MaterialTraits object.
+  */
+  virtual double translucence() const = 0;
+
+  /** \details
+    Returns the self illumination of this MaterialTraits object.
+  */
+  virtual double selfIllumination() const = 0;
+
+  /** \details
+    Returns the reflectivity of this MaterialTraits object.
+  */
+  virtual double reflectivity() const = 0;
+
+  /** \details
+    Returns the illumination model of this MaterialTraits object.
+  */
+  virtual IlluminationModel illuminationModel() const = 0;
+
+  /** \details
+    Returns the channel flags of this MaterialTraits object.
+  */
+  virtual ChannelFlags channelFlags() const = 0;
+
+  /** \details
+    Returns the mode of this MaterialTraits object.
+  */
+  virtual Mode mode() const = 0;
+
+  /** \details
+    Sets the ambient color component of this MaterialTraits object.
+
+    \param ambientColor [in]  Ambient color.
+
+    \remarks
+    The ambient component component is most apparent when there is no direct illumination on the entity.
+  */
+  virtual void setAmbient(const OdGiMaterialColor& ambientColor) = 0;
+
+  /** \details
+    Sets the diffuse component of this MaterialTraits object.
+
+    \param diffuseColor [in]  Diffuse color.
+    \param diffuseMap [in]  Diffuse map.
+
+    \remarks
+    The diffuse component is most apparent when there is direct illumination on the entity.
+  */
+  virtual void setDiffuse(const OdGiMaterialColor& diffuseColor, const OdGiMaterialMap& diffuseMap) = 0;
+
+  /** \details
+    Sets the specular component of this MaterialTraits object.
+
+    \param specularColor [in]  Specular color.
+    \param specularMap [in]  Specular map.
+    \param glossFactor [in]  Gloss factor.
+
+    \remarks
+    The specular component is viewpoint dependent, and most apparent when the entity is highlighted.
+  */
+  virtual void setSpecular(const OdGiMaterialColor& specularColor, const OdGiMaterialMap& specularMap, double glossFactor) = 0;
+
+  /** \details
+    Sets the reflection component of this MaterialTraits object.
+
+    \param reflectionMap [in]  Reflection map.
+
+    \remarks
+    The reflection component creates a mirror finish on the entity.
+  */
+  virtual void setReflection(const OdGiMaterialMap& reflectionMap) = 0;
+
+  /** \details
+    Sets the opacity component of this MaterialTraits object.
+
+    \param opacityPercentage [in]  Opacity percentage.
+    \param opacityMap [in]  Opacity map.
+  */
+  virtual void setOpacity(double opacityPercentage, const OdGiMaterialMap& opacityMap) = 0;
+
+  /** \details
+    Sets the bump component of this MaterialTraits object.
+
+    \param bumpMap [in]  Bump map.
+  */
+  virtual void setBump(const OdGiMaterialMap& bumpMap) = 0;
+
+  /** \details
+    Sets the refraction component of this MaterialTraits object.
+
+    \param refractionIndex [in]  Refraction index.
+    \param refractionMap [in]  Refraction map.
+  */
+  virtual void setRefraction(double refractionIndex, const OdGiMaterialMap& refractionMap) = 0;
+
+  /** \details
+    Sets the translucence of this MaterialTraits object.
+
+    \param value [in]  Translucence value.
+  */
+  virtual void setTranslucence(double value) = 0;
+
+  /** \details
+    Sets the self illumination of this MaterialTraits object.
+
+    \param value [in]  Self illumination level.
+  */
+  virtual void setSelfIllumination(double value) = 0;
+
+  /** \details
+    Sets the reflectivity of this MaterialTraits object.
+
+    \param value [in]  Reflectivity value.
+  */
+  virtual void setReflectivity(double value) = 0;
+
+  /** \details
+    Sets the illumination model of this MaterialTraits object.
+
+    \param model [in]  Illumination model.
+  */
+  virtual void setIlluminationModel(IlluminationModel model) = 0;
+
+  /** \details
+    Sets the channel flags of this MaterialTraits object.
+
+    \param value [in]  Channel flags.
+  */
+  virtual void setChannelFlags(ChannelFlags flags) = 0;
+
+  /** \details
+    Sets the mode of this MaterialTraits object.
+
+    \param value [in]  Mode value.
+  */
+  virtual void setMode(Mode value) = 0;
+
+  // Extended material properties
+
+  /** \details
+    Sets the color bleed scale of this MaterialTraits object.
+
+    \param scale [in]  Color bleed scale.
+  */
+  virtual void setColorBleedScale(double scale) = 0;
+  /** \details
+    Returns the color bleed scale of this MaterialTraits object.
+  */
+  virtual double colorBleedScale() const = 0;
+
+  /** \details
+    Sets the indirect bump scale of this MaterialTraits object.
+
+    \param scale [in]  Indirect bump scale.
+  */
+  virtual void setIndirectBumpScale(double scale) = 0;
+  /** \details
+    Returns the indirect bump scale of this MaterialTraits object.
+  */
+  virtual double indirectBumpScale() const = 0;
+
+  /** \details
+    Sets the reflectance scale of this MaterialTraits object.
+
+    \param scale [in]  Reflectance scale.
+  */
+  virtual void setReflectanceScale(double scale) = 0;
+  /** \details
+    Returns the reflectance scale of this MaterialTraits object.
+  */
+  virtual double reflectanceScale() const = 0;
+
+  /** \details
+    Sets the transmittance scale of this MaterialTraits object.
+
+    \param scale [in]  Transmittance scale.
+  */
+  virtual void setTransmittanceScale(double scale) = 0;
+  /** \details
+    Returns the transmittance scale of this MaterialTraits object.
+  */
+  virtual double transmittanceScale() const = 0;
+
+  /** \details
+    Sets the two sided mode of this MaterialTraits object.
+
+    \param flag [in]  Two sided mode flag.
+  */
+  virtual void setTwoSided(bool flag) = 0;
+  /** \details
+    Returns the two sided mode of this MaterialTraits object.
+  */
+  virtual bool twoSided() const = 0;
+
+  /** \details
+    Sets the luminance mode of this MaterialTraits object.
+
+    \param mode [in]  Luminance mode.
+  */
+  virtual void setLuminanceMode(LuminanceMode mode) = 0;
+  /** \details
+    Returns the luminance mode of this MaterialTraits object.
+  */
+  virtual LuminanceMode luminanceMode() const = 0;
+
+  /** \details
+    Sets the luminance of this MaterialTraits object.
+
+    \param value [in]  Luminance value.
+  */
+  virtual void setLuminance(double value) = 0;
+  /** \details
+    Returns the luminance of this MaterialTraits object.
+  */
+  virtual double luminance() const = 0;
+
+  /** \details
+    Sets the normalMap component of this MaterialTraits object.
+
+    \param normalMap [in]  Normal map.
+    \param method [in]  Normal map method.
+    \param strength [in]  Strength factor.
+  */
+  virtual void setNormalMap(const OdGiMaterialMap &normalMap, NormalMapMethod method, double strength) = 0;
+  /** \details
+    Returns the normalMap component of this MaterialTraits object.
+
+    \param normalMap [out]  Receives the normal map.
+    \param method [out]  Receives the normal map method.
+    \param strength [out]  Receives the normal map strength factor.
+  */
+  virtual void normalMap(OdGiMaterialMap &normalMap, NormalMapMethod &method, double &strength) const = 0;
+
+  /** \details
+    Sets the global illumination mode of this MaterialTraits object.
+
+    \param mode [in]  Global illumination mode.
+  */
+  virtual void setGlobalIllumination(GlobalIlluminationMode mode) = 0;
+  /** \details
+    Returns the global illumination mode of this MaterialTraits object.
+  */
+  virtual GlobalIlluminationMode globalIllumination() const = 0;
+
+  /** \details
+    Sets the final gather mode of this MaterialTraits object.
+
+    \param mode [in]  Final gather mode.
+  */
+  virtual void setFinalGather(FinalGatherMode mode) = 0;
+  /** \details
+    Returns the final gather mode of this MaterialTraits object.
+  */
+  virtual FinalGatherMode finalGather() const = 0;
+
+  /** \details
+    Sets the emission component of this MaterialTraits object.
+
+    \param emissionColor [in]  Emission color.
+    \param emissionMap [in]  Emission map.
+  */
+  virtual void setEmission(const OdGiMaterialColor& emissionColor, const OdGiMaterialMap& emissionMap) = 0;
+  /** \details
+    Returns the emission component of this MaterialTraits object.
+
+    \param emissionColor [out]  Receives the emission color.
+    \param emissionMap [out]  Receives the emission map.
+  */
+  virtual void emission(OdGiMaterialColor& emissionColor, OdGiMaterialMap& emissionMap) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiMaterialTraits> OdGiMaterialTraitsPtr;
+
+
+/** \details
+    This class implements material colors by color method and value.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialColor
+{
+public:
+  enum Method
+  {
+    kInherit  = 0, // Uses the current drawing *color*.
+    kOverride = 1  // Uses the *color* set with setColor.
+  };
+
+  ODGI_EXPORT_STATIC static const OdGiMaterialColor kNull;
+
+  OdGiMaterialColor();
+
+  /** \details
+    Sets the color method for this MaterialColor object.
+
+    \param method [in]  Color method.
+
+    \remarks
+    method must be one of the following:
+
+    <table>
+    Name          Value    Description
+    kInherit      0        Uses the current drawing color.
+    kOverride     1        Uses the color set with setColor.
+    </table>
+  */
+  void setMethod(Method method);
+
+  /** \details
+    Sets the color factor for this MaterialColor object.
+    \param factor [in]  Color factor.
+    \remarks
+    A color factor of 0.0 makes all colors black; a color factor of 1.0 leaves them unchanged.
+  */
+  void setFactor(double factor);
+
+  /** \details
+    Returns a reference to, or a copy of, the color of this MaterialColor object as
+    an OdCmEntityColor instance.
+  */
+  OdCmEntityColor& color();
+
+
+  /** \details
+    Returns the color method for this MaterialColor object.
+
+    \remarks
+    method() returns one of the following:
+
+    <table>
+    Name          Value    Description
+    kInherit      0        Uses the current drawing color.
+    kOverride     1        Uses the color set with setColor.
+    </table>
+  */
+  Method method() const;
+
+  /** \details
+    Returns the color factor for this MaterialColor object.
+
+
+    \remarks
+    A color factor of 0.0 makes all colors black; a color factor of 1.0 leaves them unchanged.
+  */
+  double factor() const;
+
+  /** \details
+    Returns a constant reference to, or a copy of, the color of this MaterialColor object as
+    an constant OdCmEntityColor instance.
+  */
+  const OdCmEntityColor& color() const;
+
+  bool operator ==(const OdGiMaterialColor &other) const
+  {
+    return (m_method == other.m_method) &&
+           (m_factor == other.m_factor) &&
+           (m_color  == other.m_color);      
+  }
+  bool operator != (const OdGiMaterialColor &other) const
+  {
+    return (m_method != other.m_method) ||
+           (m_factor != other.m_factor) ||
+           (m_color  != other.m_color);      
+  }
+
+  /** \details
+    Sets the color for this MaterialColor object.
+    \param color [in]  New color for this MaterialColor object.
+  */
+  void setColor(const OdCmEntityColor &color);
+
+private:
+  Method          m_method;
+  double          m_factor;
+  OdCmEntityColor m_color;
+};
+
+
+/** \details
+    This class defines material textures.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiMaterialTexture : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiMaterialTexture);
+  virtual bool operator==(const OdGiMaterialTexture & texture)const;
+protected:
+  OdGiMaterialTexture() { }
+  ~OdGiMaterialTexture() { }
+};
+
+inline bool OdGiMaterialTexture::operator==(const OdGiMaterialTexture & texture) const {
+  return (texture.isA() == isA());
+}
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiMaterialTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiMaterialTexture> OdGiMaterialTexturePtr;
+
+/** \details
+     This class defines image based material textures.
+     Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiImageTexture : public OdGiMaterialTexture
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiImageTexture);
+protected:
+  OdGiImageTexture() { }
+  ~OdGiImageTexture() { }
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiImageTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiImageTexture> OdGiImageTexturePtr;
+
+/** \details
+     This class defines image file based material texture.
+     Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiImageFileTexture : public OdGiImageTexture
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiImageFileTexture);
+
+  virtual void setSourceFileName(const OdString& fileName);
+  virtual const OdString sourceFileName() const;
+
+  virtual bool operator==(const OdGiMaterialTexture & texture) const;
+  OdGiImageFileTexture &operator =(const OdGiImageFileTexture &texture);
+
+  // OdRxObject overrides
+  void copyFrom(const OdRxObject* pSource);
+private:
+  OdString m_sourceFileName;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiImageFileTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiImageFileTexture> OdGiImageFileTexturePtr;
+
+/** \details
+     This class defines raster image based material texture.
+     Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiRasterImageTexture : public OdGiImageTexture
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiRasterImageTexture);
+
+  virtual void setRasterImage(const OdGiRasterImage *pRasterImage);
+  virtual const OdGiRasterImage *rasterImage() const;
+
+  virtual bool operator==(const OdGiMaterialTexture & texture) const;
+  OdGiRasterImageTexture &operator =(const OdGiRasterImageTexture &texture);
+
+  // OdRxObject overrides
+  void copyFrom(const OdRxObject* pSource);
+private:
+  OdRxObjectPtr m_pRasterImage;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiImageFileTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiRasterImageTexture> OdGiRasterImageTexturePtr;
+
+/** \details
+     This class defines procedural material textures.
+     Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdGiProceduralTexture : public OdGiMaterialTexture
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiProceduralTexture);
+
+  enum Type
+  {
+    kWood    = 0,
+    kMarble  = 1,
+    kGeneric = 2
+  };
+
+  virtual Type type() const = 0;
+protected:
+  OdGiProceduralTexture() { }
+  ~OdGiProceduralTexture() { }
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiProceduralTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiProceduralTexture> OdGiProceduralTexturePtr;
+
+/** \details
+    This class defines wood procedural material textures.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiWoodTexture : public OdGiProceduralTexture
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiWoodTexture);
+
+  OdGiWoodTexture();
+
+  virtual Type type() const  {return kWood;}
+
+  // wood properties
+
+  virtual void setColor1(const OdGiMaterialColor &woodColor1);
+  virtual const OdGiMaterialColor& color1(void) const;
+
+  virtual void setColor2(const OdGiMaterialColor &woodColor2);
+  virtual const OdGiMaterialColor& color2(void) const;
+
+  virtual void setRadialNoise(double radialNoise);
+  virtual double radialNoise(void) const;
+
+  virtual void setAxialNoise(double axialNoise);
+  virtual double axialNoise(void) const;
+
+  virtual void setGrainThickness(double grainThickness);
+  virtual double grainThickness(void) const;
+
+  virtual bool operator==(const OdGiMaterialTexture & texture) const;
+  OdGiWoodTexture &operator =(const OdGiWoodTexture &texture);
+
+  // OdRxObject overrides
+  void copyFrom(const OdRxObject* pSource);
+private:
+  OdGiMaterialColor m_color1;
+  OdGiMaterialColor m_color2;
+  double            m_radialNoise;
+  double            m_axialNoise;
+  double            m_grainThickness;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiWoodTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiWoodTexture> OdGiWoodTexturePtr;
+
+/** \details
+    This class defines marble procedural material texture.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiMarbleTexture : public OdGiProceduralTexture
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiMarbleTexture);
+
+  OdGiMarbleTexture();
+
+  virtual Type type() const  {return kMarble;}
+
+  virtual void setStoneColor(const OdGiMaterialColor &stoneColor);
+  virtual const OdGiMaterialColor& stoneColor(void) const;
+
+  virtual void setVeinColor(const OdGiMaterialColor &veinColor);
+  virtual const OdGiMaterialColor& veinColor(void) const;
+
+  virtual void setVeinSpacing(double veinSpacing);
+  virtual double veinSpacing(void) const;
+
+  virtual void setVeinWidth(double veinWidth);
+  virtual double veinWidth(void) const;
+
+  virtual bool operator==(const OdGiMaterialTexture & texture) const;
+  OdGiMarbleTexture &operator =(const OdGiMarbleTexture &texture);
+
+  // OdRxObject overrides
+  void copyFrom(const OdRxObject* pSource);
+private:
+  OdGiMaterialColor m_stoneColor;
+  OdGiMaterialColor m_veinColor;
+  double            m_veinSpacing;
+  double            m_veinWidth;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiMarbleTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiMarbleTexture> OdGiMarbleTexturePtr;
+
+/** \details
+    This class defines generic procedural material texture.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiGenericTexture : public OdGiProceduralTexture
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiGenericTexture);
+
+  OdGiGenericTexture();
+
+  virtual Type type() const  {return kGeneric;}
+
+  virtual void setDefinition(const OdGiVariant &definition);
+  virtual OdGiVariantPtr definition() const;
+  virtual void definition(OdGiVariantPtr &pDefinition) const;
+
+  virtual bool operator==(const OdGiMaterialTexture & texture) const;
+  OdGiGenericTexture &operator =(const OdGiGenericTexture &texture);
+
+  // OdRxObject overrides
+  void copyFrom(const OdRxObject* pSource);
+private:
+  OdGiVariantPtr    m_definition;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiGenericTexture object pointers.
+*/
+typedef OdSmartPtr<OdGiGenericTexture> OdGiGenericTexturePtr;
+
+
+/** \details
+    This class implements mappers.
+
+
+    \remarks
+    Mappers determine how an OdGiMaterialMap is mapped to an object surface.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMapper
+{
+public:
+  enum Projection
+  {
+    kInheritProjection   = 0, // Inherits *projection* from the current material's mapper.
+    kPlanar              = 1, // Maps directly to XY coordinates.
+    kBox                 = 2, // Maps to planes perpendicular to major axes.
+    kCylinder            = 3, // Maps to cylinder aligned with Z-axis.
+    kSphere              = 4, // Maps to sphere aligned with Z-axis
+
+    kDgnParametric       = 0x32, // Maps directly to surface coordinates. For dgn materials.
+    kDgnPlanar           = 0x33, // Maps directly to surface coordinates. For dgn materials.
+    kDgnCylinder         = 0x34, // Maps to cylinder aligned with Z-axis. For dgn materials.
+    kDgnCylinderCapped   = 0x35, // Maps to cylinder aligned with Z-axis. If normal to surface same as Z-axis
+                                 // then used planar mapping. For dgn materials.
+    kDgnSphere           = 0x36  // Maps to sphere aligned with Z-axis. For dgn materials.
+  };
+
+  enum Tiling
+  {
+    kInheritTiling    = 0, // Inherits *tiling* from the current material's mapper.
+    kTile             = 1, // Repeats map along image axes.
+    kCrop             = 2, // Crops map < 0.0 or > 1.0 on image axes.
+    kClamp            = 3, // Clamps (stretches) map between 0.0 and 1.0 on image axes.
+    kMirror           = 4  // Mirror the material map at every integer boundary.
+  };
+
+  enum AutoTransform
+  {
+    kInheritAutoTransform = 0x0, // Inherits automatic *transform* from the current material/s mapper.
+    kNone                 = 0x1, // No automatic *transform*.
+    kObject               = 0x2, // Adjusts the mapper *transform* to align with and fit the current object.
+    kModel                = 0x4  // Multiples the mapper *transform* by the current block *transform*.
+  };
+
+  ODGI_EXPORT_STATIC static const OdGiMapper kIdentity;
+
+  OdGiMapper()
+    : m_projection(kPlanar)
+    , m_uTiling(kTile)
+    , m_vTiling(kTile)
+    , m_autoTransform(kNone)
+  {
+  }
+
+  OdGiMapper (const OdGiMapper& mapper);
+  OdGiMapper& operator=(const OdGiMapper& mapper);
+  bool operator==(const OdGiMapper& mapper) const;
+  bool operator!=(const OdGiMapper& mapper) const;
+
+  /** \details
+    Sets the type of projection for this Mapper object.
+
+    \param projection [in]  Projection type.
+
+    \remarks
+    projection must be one of the following:
+
+    <table>
+    Name                  Value   Description
+    kInheritProjection    0       Inherits projection from the current material's mapper.
+    kPlanar               1       Maps directly to XY coordinates.
+    kBox                  2       Maps to planes perpendicular to major axes.
+    kCylinder             3       Maps to cylinder aligned with Z-axis.
+    kSphere               4       Maps to sphere aligned with Z-axis
+    </table>
+  */
+  void setProjection(Projection projection);
+
+  /** \details
+    Sets the type of X-axis tiling for this Mapper object.
+
+    \param tiling [in]  Tiling type.
+
+    \remarks
+    tiling must be one of the following:
+
+    <table>
+    Name                  Value   Description
+    kInheritTiling        0       Inherits tiling from the current material's mapper.
+    kTile                 1       Repeats map along image axes.
+    kCrop                 2       Crops map < 0.0 or > 1.0 on image axes.
+    kClamp                3       Clamps (stretches) map between 0.0 and 1.0 on image axes.
+    kMirror               4       Mirror the material map at every integer boundary.
+    </table>
+  */
+  void setUTiling(Tiling tiling);
+
+  /** \details
+    Sets the type of Y-axis tiling for this Mapper object.
+
+    \param tiling [in]  Tiling type.
+
+    \remarks
+    tiling must be one of the following:
+
+    <table>
+    Name                  Value   Description
+    kInheritTiling        0       Inherits tiling from the current material's mapper.
+    kTile                 1       Repeats map along image axes.
+    kCrop                 2       Crops map < 0.0 or > 1.0 on image axes.
+    kClamp                3       Clamps (stretches) map between 0.0 and 1.0 on image axes.
+    kMirror               4       Mirror the material map at every integer boundary.
+    </table>
+  */
+  void setVTiling(Tiling tiling);
+
+  /** \details
+    Sets the type of automatic transform for this Mapper object.
+
+    \param autoTransform [in]  Automatic transform type.
+
+    \remarks
+    autoTransform must be a one of the following:
+
+    <table>
+    Name                      Value   Description
+    kInheritAutoTransform     0x0     Inherits automatic transform from the current material/s mapper.
+    kNone                     0x1     No automatic transform.
+    kObject                   0x2     Adjusts the mapper transform to align with and fit the current object.
+    kModel                    0x4     Multiples the mapper transform by the current block transform.
+    </table>
+  */
+  void setAutoTransform(AutoTransform autoTransform);
+
+  /** \details
+    Returns a reference to the transformation matrix for this Mapper object.
+
+    \remarks
+    The transform matrix defines mapping of an OdGiMaterialMap image when applied to the surface of an object.
+  */
+  OdGeMatrix3d& transform();
+
+  /** \details
+    Returns the type of projection for this Mapper object.
+
+    \remarks
+    projection() returns one of the following:
+
+    <table>
+    Name                  Value   Description
+    kInheritProjection    0       Inherits projection from the current material's mapper.
+    kPlanar               1       Maps directly to XY coordinates.
+    kBox                  2       Maps to planes perpendicular to major axes.
+    kCylinder             3       Maps to cylinder aligned with Z-axis.
+    kSphere               4       Maps to sphere aligned with Z-axis
+    </table>
+  */
+  Projection projection() const;
+
+  /** \details
+    Returns the type of X-axis tiling for this Mapper object.
+
+    \remarks
+    tiling() returns one of the following:
+
+    <table>
+    Name                  Value   Description
+    kInheritTiling        0       Inherits tiling from the current material's mapper.
+    kTile                 1       Repeats map along image axes.
+    kCrop                 2       Crops map < 0.0 or > 1.0 on image axes.
+    kClamp                3       Clamps (stretches) map between 0.0 and 1.0 on image axes.
+    kMirror               4       Mirror the material map at every integer boundary.
+    </table>
+  */
+  Tiling uTiling() const;
+
+  /** \details
+    Returns the type of Y-axis tiling for this Mapper object.
+
+    \remarks
+    tiling() returns one of the following:
+
+    <table>
+    Name                  Value   Description
+    kInheritTiling        0       Inherits tiling from the current material's mapper.
+    kTile                 1       Repeats map along image axes.
+    kCrop                 2       Crops map < 0.0 or > 1.0 on image axes.
+    kClamp                3       Clamps (stretches) map between 0.0 and 1.0 on image axes.
+    kMirror               4       Mirror the material map at every integer boundary.
+    </table>
+  */
+  Tiling vTiling() const;
+
+  /** \details
+    Returns the type of automatic transform for this Mapper object.
+
+    \remarks
+    autoTransform() returns a combination of one or more of the following:
+
+    <table>
+    Name                      Value   Description
+    kInheritAutoTransform     0x0     Inherits automatic transform from the current material's mapper.
+    kNone                     0x1     No automatic transform.
+    kObject                   0x2     Adjusts the mapper transform to align with and fit the current object.
+    kModel                    0x4     Multiples the mapper transform by the current block transform.
+    </table>
+  */
+  AutoTransform autoTransform() const;
+
+  const OdGeMatrix3d& transform() const;
+
+  void setTransform(const OdGeMatrix3d &tm);
+
+private:
+  Projection    m_projection;
+  Tiling        m_uTiling;
+  Tiling        m_vTiling;
+  AutoTransform m_autoTransform;
+  OdGeMatrix3d  m_transform;
+};
+
+
+/** \details
+  This class implements material maps.
+
+  \remarks
+  Material maps define bitmapped images which are applied to object surfaces.
+
+  <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialMap
+{
+public:
+  enum Source
+  {
+    kScene      = 0,  // Map is created from the current scene.
+    kFile       = 1,  // Map is from a file.
+    kProcedural = 2   // Map is procedural.
+  };
+
+  ODGI_EXPORT_STATIC static const OdGiMaterialMap kNull;
+
+  OdGiMaterialMap();
+
+  /** \details
+    Sets the image source for this MaterialMap object.
+
+    \param source [in]  Image source.
+
+    \remarks
+    source must be one of the following:
+
+    <table>
+    Name      Value   Description
+    kScene    0,      Image is created from the current scene.
+    kFile     1       Image is from a file.
+    </table>
+  */
+  void setSource(Source source);
+
+  /** \details
+    Sets the source filename for this MaterialMap object.
+    \param filename [in]  Source filename.
+  */
+  void setSourceFileName(const OdString& filename);
+
+  /** \details
+    Sets the blend factor for this MaterialMap object.
+    \param blendFactor [in]  Blend factor.
+    \remarks
+    A blend factor of 0.0 makes the MaterialMap invisible. A blend factor of 1.0 makes it opaque.
+    In between, the MaterialMap is transparent.
+  */
+  void setBlendFactor(double blendFactor);
+
+  /** \details
+    Sets the Material texture for this MaterialMap object.
+  */
+  void setTexture(OdGiMaterialTexturePtr pTexture);
+
+  /** \details
+    Returns a reference to, or a copy of, the OdGiMapper for this MaterialMap object.
+
+    \remarks
+    The transform matrix defines mapping of an OdGiMaterialMap image when applied to the surface of an object.
+  */
+  OdGiMapper& mapper();
+
+  /** \details
+    Returns the image source for this MaterialMap object.
+
+    \remarks
+    source must be one of the following:
+
+    <table>
+    Name      Value   Description
+    kScene    0,      Image is created from the current scene.
+    kFile     1       Image is from a file.
+    </table>
+  */
+  Source source() const;
+
+  /** \details
+    Returns the source filename for this MaterialMap object.
+  */
+  OdString sourceFileName() const;
+
+  /** \details
+    Returns the blend factor for this MaterialMap object.
+
+    \remarks
+    A blend factor of 0.0 makes the MaterialMap invisible. A blend factor of 1.0 makes it opaque.
+    In between, the MaterialMap is transparent.
+  */
+  double blendFactor() const;
+
+  /** \details
+    Returns a reference to the OdGiMapper for this MaterialMap object.
+  */
+  const OdGiMapper& mapper() const;
+
+  /** \details
+    Sets the OdGiMapper for this MaterialMap object.
+    \param mapper [in]  OdGiMapper reference.
+  */
+  void setMapper(const OdGiMapper &mapper);
+
+  /** \details
+  Returns the material texture for this MaterialMap object.
+  */
+  const OdGiMaterialTexturePtr  texture(void) const;
+
+  bool operator ==(const OdGiMaterialMap &other) const
+  {
+    if ((m_source      == other.m_source)      &&
+        (m_fileName    == other.m_fileName)    &&
+        (m_blendFactor == other.m_blendFactor) &&
+        (m_mapper      == other.m_mapper))
+    {
+      if (m_texture.isNull() && other.m_texture.isNull())
+        return true;
+      if (!m_texture.isNull() && !other.m_texture.isNull())
+        return (*m_texture == *(other.m_texture));
+    }
+    return false;
+  }
+  bool operator !=(const OdGiMaterialMap &other) const
+  {
+    return !(*this == other);
+  }
+
+  OdGiMaterialMap &operator =(const OdGiMaterialMap& mmap)
+  {
+    m_source = mmap.m_source;
+    m_fileName = mmap.m_fileName;
+    m_blendFactor = mmap.m_blendFactor;
+    m_mapper = mmap.m_mapper;
+    m_texture = mmap.m_texture;
+    return *this;
+  }
+private:
+  Source     m_source;
+  OdString   m_fileName;
+  double     m_blendFactor;
+  OdGiMapper m_mapper;
+  OdGiMaterialTexturePtr m_texture;
+};
+
+// OdGiMaterialColor inline implementations
+
+inline
+OdGiMaterialColor::OdGiMaterialColor()
+  : m_method(kInherit)
+  , m_factor(1.0)
+{
+}
+
+inline void
+OdGiMaterialColor::setMethod(Method method)
+{
+  m_method = method;
+}
+
+inline void
+OdGiMaterialColor::setFactor(double factor)
+{
+  m_factor = factor;
+}
+
+inline OdCmEntityColor&
+OdGiMaterialColor::color()
+{
+  return m_color;
+}
+
+inline OdGiMaterialColor::Method
+OdGiMaterialColor::method() const
+{
+  return m_method;
+}
+
+inline double
+OdGiMaterialColor::factor() const
+{
+  return m_factor;
+}
+
+inline const OdCmEntityColor&
+OdGiMaterialColor::color() const
+{
+  return m_color;
+}
+
+inline void
+OdGiMaterialColor::setColor(const OdCmEntityColor &color)
+{
+  m_color = color;
+}
+
+// OdGiMaterialMap inline implementations
+
+inline
+OdGiMaterialMap::OdGiMaterialMap()
+  : m_source(kFile)
+  , m_blendFactor(1.0)
+{
+}
+
+inline void
+OdGiMaterialMap::setSource(Source source)
+{
+  m_source = source;
+}
+
+inline void
+OdGiMaterialMap::setSourceFileName(const OdString& filename)
+{
+  m_fileName = filename;
+}
+
+inline void
+OdGiMaterialMap::setBlendFactor(double blendFactor)
+{
+  m_blendFactor = blendFactor;
+}
+
+inline OdGiMapper&
+OdGiMaterialMap::mapper()
+{
+  return m_mapper;
+}
+
+inline OdGiMaterialMap::Source
+OdGiMaterialMap::source() const
+{
+  return m_source;
+}
+
+inline OdString
+OdGiMaterialMap::sourceFileName() const
+{
+  return m_fileName;
+}
+
+inline double
+OdGiMaterialMap::blendFactor() const
+{
+  return m_blendFactor;
+}
+
+inline const OdGiMapper&
+OdGiMaterialMap::mapper() const
+{
+  return m_mapper;
+}
+
+inline void
+OdGiMaterialMap::setMapper(const OdGiMapper &mapper)
+{
+  m_mapper = mapper;
+}
+
+inline void
+OdGiMaterialMap::setTexture(OdGiMaterialTexturePtr pTexture)
+{
+  m_texture = pTexture;
+}
+
+inline const OdGiMaterialTexturePtr
+OdGiMaterialMap::texture(void) const
+{
+  return m_texture;
+}
+
+// OdGiMapper inline implementations
+
+inline
+OdGiMapper::OdGiMapper(const OdGiMapper& mapper)
+  : m_projection(mapper.m_projection)
+  , m_uTiling(mapper.m_uTiling)
+  , m_vTiling(mapper.m_vTiling)
+  , m_autoTransform(mapper.m_autoTransform)
+  , m_transform(mapper.m_transform)
+{
+}
+
+inline OdGiMapper&
+OdGiMapper::operator=(const OdGiMapper& mapper)
+{
+  if (&mapper != this)
+  {
+    m_projection = mapper.m_projection;
+    m_uTiling = mapper.m_uTiling;
+    m_vTiling = mapper.m_vTiling;
+    m_autoTransform = mapper.m_autoTransform;
+    m_transform = mapper.m_transform;
+  }
+  return *this;
+}
+
+inline bool
+OdGiMapper::operator==(const OdGiMapper& mapper) const
+{
+  return m_projection == mapper.m_projection
+    && m_uTiling == mapper.m_uTiling
+    && m_vTiling == mapper.m_vTiling
+    && m_autoTransform == mapper.m_autoTransform
+    && m_transform == mapper.m_transform;
+}
+
+inline bool
+OdGiMapper::operator!=(const OdGiMapper& mapper) const
+{
+  return !(*this == mapper);
+}
+
+inline void
+OdGiMapper::setProjection(Projection projection)
+{
+  m_projection = projection;
+}
+
+inline void
+OdGiMapper::setUTiling(Tiling tiling)
+{
+  m_uTiling = tiling;
+}
+
+inline void
+OdGiMapper::setVTiling(Tiling tiling)
+{
+  m_vTiling = tiling;
+}
+
+inline void
+OdGiMapper::setAutoTransform(AutoTransform autoTransform)
+{
+  m_autoTransform = autoTransform;
+}
+
+inline OdGiMapper::Projection
+OdGiMapper::projection() const
+{
+  return m_projection;
+}
+
+inline OdGiMapper::Tiling
+OdGiMapper::uTiling() const
+{
+  return m_uTiling;
+}
+
+inline OdGiMapper::Tiling
+OdGiMapper::vTiling() const
+{
+  return m_vTiling;
+}
+
+inline OdGiMapper::AutoTransform
+OdGiMapper::autoTransform() const
+{
+  return m_autoTransform;
+}
+
+inline const OdGeMatrix3d&
+OdGiMapper::transform() const
+{
+  return m_transform;
+}
+
+inline OdGeMatrix3d&
+OdGiMapper::transform()
+{
+  return m_transform;
+}
+
+inline void
+OdGiMapper::setTransform(const OdGeMatrix3d &tm)
+{
+  transform() = tm;
+}
+
+// OdGiImageFileTexture inline implementations
+
+inline void
+OdGiImageFileTexture::setSourceFileName(const OdString& fileName)
+{
+  m_sourceFileName = fileName;
+}
+
+inline const OdString
+OdGiImageFileTexture::sourceFileName() const
+{
+  return m_sourceFileName;
+}
+
+inline bool
+OdGiImageFileTexture::operator==(const OdGiMaterialTexture & texture) const
+{
+  if (!(texture.isA() == isA()))
+    return false;
+  const OdGiImageFileTexture &refTexture = static_cast<const OdGiImageFileTexture&>(texture);
+  return m_sourceFileName == refTexture.m_sourceFileName;
+}
+
+inline OdGiImageFileTexture &
+OdGiImageFileTexture::operator =(const OdGiImageFileTexture &texture)
+{
+  m_sourceFileName = texture.m_sourceFileName;
+  return *this;
+}
+
+inline void OdGiImageFileTexture::copyFrom(const OdRxObject* pSource)
+{
+  OdGiImageFileTexturePtr pSrcTex = OdGiImageFileTexture::cast(pSource);
+  if (!pSrcTex.isNull())
+  {
+    setSourceFileName(pSrcTex->sourceFileName());
+  }
+  else
+  {
+    throw OdError(eNotApplicable);
+  }
+}
+
+// OdGiRasterImageTexture inline implementations
+
+inline void
+OdGiRasterImageTexture::setRasterImage(const OdGiRasterImage *pRasterImage)
+{
+  m_pRasterImage = reinterpret_cast<const OdRxObject*>(pRasterImage);
+}
+
+inline const OdGiRasterImage *
+OdGiRasterImageTexture::rasterImage() const
+{
+  return reinterpret_cast<const OdGiRasterImage*>(m_pRasterImage.get());
+}
+
+inline bool
+OdGiRasterImageTexture::operator==(const OdGiMaterialTexture & texture) const
+{
+  if (!(texture.isA() == isA()))
+    return false;
+  const OdGiRasterImageTexture &refTexture = static_cast<const OdGiRasterImageTexture&>(texture);
+  return m_pRasterImage.get() == refTexture.m_pRasterImage.get();
+}
+
+inline OdGiRasterImageTexture &
+OdGiRasterImageTexture::operator =(const OdGiRasterImageTexture &texture)
+{
+  m_pRasterImage = texture.m_pRasterImage;
+  return *this;
+}
+
+inline void OdGiRasterImageTexture::copyFrom(const OdRxObject* pSource)
+{
+  OdGiRasterImageTexturePtr pSrcTex = OdGiRasterImageTexture::cast(pSource);
+  if (!pSrcTex.isNull())
+  {
+    setRasterImage(pSrcTex->rasterImage());
+  }
+  else
+  {
+    throw OdError(eNotApplicable);
+  }
+}
+
+// OdGiWoodTexture inline implementations
+
+inline
+OdGiWoodTexture::OdGiWoodTexture()
+  : m_radialNoise(0.)
+  , m_axialNoise(0.)
+  , m_grainThickness(0.)
+{
+}
+
+inline void
+OdGiWoodTexture::setColor1(const OdGiMaterialColor &woodColor1)
+{
+  m_color1 = woodColor1;
+}
+
+inline const OdGiMaterialColor&
+OdGiWoodTexture::color1(void) const
+{
+  return m_color1;
+}
+
+inline void
+OdGiWoodTexture::setColor2(const OdGiMaterialColor &woodColor2)
+{
+  m_color2 = woodColor2;
+}
+
+inline const OdGiMaterialColor&
+OdGiWoodTexture::color2(void) const
+{
+  return m_color2;
+}
+
+inline void
+OdGiWoodTexture::setRadialNoise(double radialNoise)
+{
+  m_radialNoise = radialNoise;
+}
+
+inline double
+OdGiWoodTexture::radialNoise(void) const
+{
+  return m_radialNoise;
+}
+
+inline void
+OdGiWoodTexture::setAxialNoise(double axialNoise)
+{
+  m_axialNoise = axialNoise;
+}
+
+inline double
+OdGiWoodTexture::axialNoise(void) const
+{
+  return m_axialNoise;
+}
+
+inline void
+OdGiWoodTexture::setGrainThickness(double grainThickness)
+{
+  m_grainThickness = grainThickness;
+}
+
+inline double
+OdGiWoodTexture::grainThickness(void) const
+{
+  return m_grainThickness;
+}
+
+inline bool
+OdGiWoodTexture::operator==(const OdGiMaterialTexture & texture) const
+{
+  if (!(texture.isA() == isA()))
+    return false;
+  const OdGiWoodTexture &refTexture = static_cast<const OdGiWoodTexture&>(texture);
+  return (m_color1 == refTexture.m_color1) &&
+         (m_color2 == refTexture.m_color2) &&
+         (m_radialNoise == refTexture.m_radialNoise) &&
+         (m_axialNoise == refTexture.m_axialNoise) &&
+         (m_grainThickness == refTexture.m_grainThickness);
+}
+
+inline OdGiWoodTexture &
+OdGiWoodTexture::operator =(const OdGiWoodTexture &texture)
+{
+  m_color1 = texture.m_color1;
+  m_color2 = texture.m_color2;
+  m_radialNoise = texture.m_radialNoise;
+  m_axialNoise = texture.m_axialNoise;
+  m_grainThickness = texture.m_grainThickness;
+  return *this;
+}
+
+inline void OdGiWoodTexture::copyFrom(const OdRxObject* pSource)
+{
+  OdGiWoodTexturePtr pSrcTex = OdGiWoodTexture::cast(pSource);
+  if (!pSrcTex.isNull())
+  {
+    setColor1(pSrcTex->color1());
+    setColor2(pSrcTex->color2());
+    setRadialNoise(pSrcTex->radialNoise());
+    setAxialNoise(pSrcTex->axialNoise());
+    setGrainThickness(pSrcTex->grainThickness());
+  }
+  else
+  {
+    throw OdError(eNotApplicable);
+  }
+}
+
+// OdGiMarbleTexture inline implementations
+
+inline
+OdGiMarbleTexture::OdGiMarbleTexture()
+  : m_veinSpacing(0.)
+  , m_veinWidth(0.)
+{
+}
+
+inline void
+OdGiMarbleTexture::setStoneColor(const OdGiMaterialColor &stoneColor)
+{
+  m_stoneColor = stoneColor;
+}
+
+inline const OdGiMaterialColor&
+OdGiMarbleTexture::stoneColor(void) const
+{
+  return m_stoneColor;
+}
+
+inline void
+OdGiMarbleTexture::setVeinColor(const OdGiMaterialColor &veinColor)
+{
+  m_veinColor = veinColor;
+}
+
+inline const OdGiMaterialColor&
+OdGiMarbleTexture::veinColor(void) const
+{
+  return m_veinColor;
+}
+
+inline void
+OdGiMarbleTexture::setVeinSpacing(double veinSpacing)
+{
+  m_veinSpacing = veinSpacing;
+}
+
+inline double
+OdGiMarbleTexture::veinSpacing(void) const
+{
+  return m_veinSpacing;
+}
+
+inline void
+OdGiMarbleTexture::setVeinWidth(double veinWidth)
+{
+  m_veinWidth = veinWidth;
+}
+
+inline double
+OdGiMarbleTexture::veinWidth(void) const
+{
+  return m_veinWidth;
+}
+
+inline bool
+OdGiMarbleTexture::operator==(const OdGiMaterialTexture & texture) const
+{
+  if (!(texture.isA() == isA()))
+    return false;
+  const OdGiMarbleTexture &refTexture = static_cast<const OdGiMarbleTexture&>(texture);
+  return (m_stoneColor == refTexture.m_stoneColor) &&
+         (m_veinColor == refTexture.m_veinColor) &&
+         (m_veinSpacing == refTexture.m_veinSpacing) &&
+         (m_veinWidth == refTexture.m_veinWidth);
+}
+
+inline OdGiMarbleTexture &
+OdGiMarbleTexture::operator =(const OdGiMarbleTexture &texture)
+{
+  m_stoneColor = texture.m_stoneColor;
+  m_veinColor = texture.m_veinColor;
+  m_veinSpacing = texture.m_veinSpacing;
+  m_veinWidth = texture.m_veinWidth;
+  return *this;
+}
+
+inline void OdGiMarbleTexture::copyFrom(const OdRxObject* pSource)
+{
+  OdGiMarbleTexturePtr pSrcTex = OdGiMarbleTexture::cast(pSource);
+  if (!pSrcTex.isNull())
+  {
+    setStoneColor(pSrcTex->stoneColor());
+    setVeinColor(pSrcTex->veinColor());
+    setVeinSpacing(pSrcTex->veinSpacing());
+    setVeinWidth(pSrcTex->veinWidth());
+  }
+  else
+  {
+    throw OdError(eNotApplicable);
+  }
+}
+
+// OdGiGenericTexture inline implementations
+
+inline
+OdGiGenericTexture::OdGiGenericTexture()
+{
+}
+
+inline void
+OdGiGenericTexture::setDefinition(const OdGiVariant &definition)
+{
+  if (m_definition.isNull())
+  {
+    m_definition = OdGiVariant::createObject(definition);
+  }
+  else
+  {
+    *m_definition = definition;
+  }
+}
+
+inline OdGiVariantPtr
+OdGiGenericTexture::definition() const
+{
+  return m_definition;
+}
+
+inline void
+OdGiGenericTexture::definition(OdGiVariantPtr &pDefinition) const
+{
+  if (m_definition.isNull())
+  {
+    pDefinition = OdGiVariant::createObject();
+  }
+  else
+  {
+    pDefinition = OdGiVariant::createObject(*m_definition);
+  }
+}
+
+inline bool
+OdGiGenericTexture::operator==(const OdGiMaterialTexture & texture) const
+{
+  if (!(texture.isA() == isA()))
+    return false;
+  const OdGiGenericTexture &refTexture = static_cast<const OdGiGenericTexture&>(texture);
+  if (m_definition.isNull() && refTexture.m_definition.isNull())
+    return true;
+  if (!m_definition.isNull() && !refTexture.m_definition.isNull())
+    return (*m_definition == *(refTexture.m_definition));
+  return false;
+}
+
+inline OdGiGenericTexture &
+OdGiGenericTexture::operator =(const OdGiGenericTexture &texture)
+{
+  if (!texture.m_definition.isNull())
+    m_definition = OdGiVariant::createObject(*(texture.m_definition));
+  else
+    m_definition.release();
+  return *this;
+}
+
+inline void OdGiGenericTexture::copyFrom(const OdRxObject* pSource)
+{
+  OdGiGenericTexturePtr pSrcTex = OdGiGenericTexture::cast(pSource);
+  if (!pSrcTex.isNull())
+  {
+    setDefinition(*(pSrcTex->definition()));
+  }
+  else
+  {
+    throw OdError(eNotApplicable);
+  }
+}
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIMATERIAL_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialItem.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialItem.h
new file mode 100755
index 0000000..a76e016
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialItem.h
@@ -0,0 +1,744 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// Material data entry for Gs material cache and textures processing.
+
+#ifndef __ODGIMATERIALITEM_H__
+#define __ODGIMATERIALITEM_H__
+
+#include "GiExport.h"
+#include "GiImage.h"
+#include "GiMaterial.h"
+#include "GiCommonDraw.h"
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+class OdDbStub;
+
+/** \details
+    Internal texture data for device support.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialTextureData : public OdRxObject
+{
+  public:
+    // Simple variant type for external device information
+
+    /** \details
+      Simple variant type for storing external device information.
+    */
+    struct DevDataVariant
+    {
+      enum DevDataVariantType
+      {
+        DevDataVariantType_Void = 0,
+        DevDataVariantType_Ptr,
+        DevDataVariantType_RxObject
+      };
+
+      DevDataVariant() : m_ddvType(DevDataVariantType_Void), m_pVoid(NULL)
+      {
+      }
+      DevDataVariant(void *ptr) : m_ddvType(DevDataVariantType_Ptr), m_pVoid(ptr)
+      {
+        if (m_pVoid == NULL)
+          m_ddvType = DevDataVariantType_Void;
+      }
+      DevDataVariant(OdRxObjectPtr ptr) : m_ddvType(DevDataVariantType_RxObject), m_pVoid(NULL)
+      {
+        m_pRxObject = ptr;
+      }
+
+      DevDataVariantType type() const
+      {
+        return m_ddvType;
+      }
+      void *getPtr() const
+      {
+        return m_pVoid;
+      }
+      OdRxObjectPtr getRxObject() const
+      {
+        return m_pRxObject;
+      }
+
+      DevDataVariant &operator =(void *ptr)
+      {
+        return setPtr(ptr);
+      }
+      DevDataVariant &operator =(OdRxObjectPtr ptr)
+      {
+        return setRxObject(ptr);
+      }
+
+      DevDataVariant &setPtr(void *ptr)
+      {
+        clear();
+        if (ptr != NULL)
+        {
+          m_ddvType = DevDataVariantType_Ptr;
+          m_pVoid = ptr;
+        }
+        return *this;
+      }
+      DevDataVariant &setRxObject(OdRxObjectPtr ptr)
+      {
+        clear();
+        m_ddvType = DevDataVariantType_RxObject;
+        m_pRxObject = ptr;
+        return *this;
+      }
+
+      void clear()
+      {
+        m_ddvType = DevDataVariantType_Void;
+        m_pVoid = NULL;
+        if (m_pRxObject.isNull())
+          m_pRxObject.release();
+      }
+
+    protected:
+      DevDataVariantType m_ddvType;
+      void *m_pVoid;
+      OdRxObjectPtr m_pRxObject;
+    };
+
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMaterialTextureData);
+    friend class OdGiModuleObject;
+    
+    /** \details
+      Set texture pixels from RGBA array.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param image [in]  Input BGRA image.
+    */
+    virtual void setTextureData(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, const OdGiImageBGRA32 &image) = 0;
+    /** \details
+      Get texture pixels as array of RGBA colors.
+      \param data [out]  Output BGRA colors array.
+      \param width [out]  Width of texture.
+      \param height [out]  Height of texture.
+    */
+    virtual void textureData(OdGiPixelBGRA32Array &data, OdUInt32 &width, OdUInt32 &height) const = 0;
+    
+    /** \details
+      Return true if texture data was previously initialized.
+    */
+    virtual bool haveData() const = 0;
+
+    /** \details
+      Create default material texture data implementation that stores color array.
+    */
+    static OdSmartPtr<OdGiMaterialTextureData> createDefaultTextureDataImplementation();
+    /** \details
+      Return description of default material texture data implementation.
+    */
+    static OdRxClass *defaultTextureDataImplementationDesc();
+
+  private:
+    /*!DOM*/
+    static void rxInitDefaultTextureDataImplementation();
+    /*!DOM*/
+    static void rxUninitDefaultTextureDataImplementation();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialTextureData object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMaterialTextureData> OdGiMaterialTextureDataPtr;
+
+/** \details
+    Protocol extension for OdGiMaterialTextureEntry texture loading information.
+
+    \sa
+    TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialTextureLoadPE : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMaterialTextureLoadPE);
+
+    OdGiMaterialTextureLoadPE();
+
+    /** \details
+      Called by texture loader before file loading.
+      Can be used for file name correction before texture loading.
+    */
+    virtual void startTextureLoading(OdString &fileName, OdDbBaseDatabase* pDb) = 0;
+
+    /** \details
+      Called by texture loader after file loading, only if texture loading success.
+    */
+    virtual void textureLoaded(const OdString &fileName, OdDbBaseDatabase* pDb) = 0;
+    /** \details
+      Called by texture loader after file loading, only if texture loading failed.
+    */
+    virtual void textureLoadingFailed(const OdString &fileName, OdDbBaseDatabase* pDb) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialTextureLoadPE object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMaterialTextureLoadPE> OdGiMaterialTextureLoadPEPtr;
+
+class OdGiMaterialTextureEntry;
+
+/** \details
+    Extends device by texture loading functionality.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialTextureLoaderExt : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMaterialTextureLoaderExt);
+
+    /** \details
+      Returns true if device supports loading of this kind of texture.
+      \param pTexture [in]  Pointer to material texture.
+    */
+    virtual bool allowTextureLoading(OdGiMaterialTexturePtr pTexture) = 0;
+
+    /** \details
+      Loads material texture.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation.
+      \param giCtx [in]  Gi context.
+      \param pEntry [in]  Texture entry.
+      \param pTexture [in]  Pointer to material texture.
+    */
+    virtual OdGiMaterialTextureDataPtr loadTexture(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, OdGiMaterialTextureEntry *pEntry, OdGiMaterialTexturePtr pTexture) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialTextureLoaderExt object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMaterialTextureLoaderExt> OdGiMaterialTextureLoaderExtPtr;
+
+/** \details
+    Manage scene textures.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialTextureManager : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMaterialTextureManager);
+
+    /** \details
+        Management type.
+    */
+    enum ManageType
+    {
+      kFileTexturesOnly = 0, // @def
+      kFileAndProceduralTextures, // not efficient for search
+      kDisable // only loading from LoaderExt will be active
+    };
+
+    /** \details
+      Sets type of textures management.
+      \param type [in]  New management type.
+    */
+    virtual void setManageType(ManageType type) = 0;
+    /** \details
+      Returns current management type.
+    */
+    virtual ManageType manageType() const = 0;
+
+    /** \details
+      Sets texture loading extension.
+      \param pExt [in]  New extentsion pointer.
+    */
+    virtual void setMaterialLoaderExt(OdGiMaterialTextureLoaderExt *pExt) = 0;
+    /** \details
+      Returns current texture loading extension.
+    */
+    virtual OdGiMaterialTextureLoaderExtPtr materialLoaderExt() const = 0;
+
+    /** \details
+      Search texture in cache.
+      \param matMap [in]  Material map.
+    */
+    virtual OdGiMaterialTextureDataPtr searchTexture(const OdGiMaterialMap &matMap) = 0;
+    /** \details
+      Search texture in cache.
+      \param pTexture [in]  Material texture pointer.
+    */
+    virtual OdGiMaterialTextureDataPtr searchTexture(OdGiMaterialTexturePtr pTexture) = 0;
+    /** \details
+      Search texture in cache.
+      \param fileName [in]  Texture file name.
+    */
+    virtual OdGiMaterialTextureDataPtr searchTexture(const OdString &fileName) = 0;
+
+    /** \details
+      Try to load texture if it is isn't available in cache.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation.
+      \param giCtx [in]  Gi context.
+      \param pEntry [in]  Texture entry.
+      \param matMap [in]  Material map.
+    */
+    virtual OdGiMaterialTextureDataPtr tryToLoad(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, OdGiMaterialTextureEntry *pEntry, const OdGiMaterialMap &matMap) = 0;
+    /** \details
+      Try to load texture if it is isn't available in cache.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation.
+      \param giCtx [in]  Gi context.
+      \param pEntry [in]  Texture entry.
+      \param pTexture [in]  Material texture pointer.
+    */
+    virtual OdGiMaterialTextureDataPtr tryToLoad(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, OdGiMaterialTextureEntry *pEntry, OdGiMaterialTexturePtr pTexture) = 0;
+    /** \details
+      Try to load texture if it is isn't available in cache.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation.
+      \param giCtx [in]  Gi context.
+      \param pEntry [in]  Texture entry.
+      \param fileName [in]  Texture file name.
+    */
+    virtual OdGiMaterialTextureDataPtr tryToLoad(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, OdGiMaterialTextureEntry *pEntry, const OdString &fileName) = 0;
+
+    /** \details
+      Links texture to current cache.
+      \param matMap [in]  Material map.
+      \param pData [in]  Texture data pointer
+    */
+    virtual void linkTexture(const OdGiMaterialMap &matMap, OdGiMaterialTextureDataPtr pData) = 0;
+    /** \details
+      Links texture to current cache.
+      \param pTexture [in]  Material texture pointer.
+      \param pData [in]  Texture data pointer
+    */
+    virtual void linkTexture(OdGiMaterialTexturePtr pTexture, OdGiMaterialTextureDataPtr pData) = 0;
+    /** \details
+      Links texture to current cache.
+      \param fileName [in]  Texture file name.
+      \param pData [in]  Texture data pointer
+    */
+    virtual void linkTexture(const OdString &fileName, OdGiMaterialTextureDataPtr pData) = 0;
+
+    /** \details
+      Returns true if specified texture data is already available in cache.
+      \param pData [in]  Texture data pointer
+    */
+    virtual bool isAvailable(const OdGiMaterialTextureData *pData) const = 0;
+
+    /** \details
+      Removes specified texture data from cache.
+      \param pData [in]  Texture data pointer
+    */
+    virtual void unlinkTexture(OdGiMaterialTextureData *pData) = 0;
+
+    /** \details
+      Clears cache.
+    */
+    virtual void clear() = 0;
+
+    /** \details
+      Returns number of texture linkages.
+    */
+    virtual OdUInt32 numTextureEntries() const = 0;
+
+    /** \details
+      Returns texture linkage by index.
+      \param nIndex [in]  Texture linkage index.
+    */
+    virtual OdGiMaterialTexturePtr textureEntryKey(OdUInt32 nIndex) const = 0;
+
+    /** \details
+      Returns texture linkage data by index.
+      \param nIndex [in]  Texture linkage index.
+    */
+    virtual OdGiMaterialTextureDataPtr textureEntryData(OdUInt32 nIndex) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialTextureManager object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMaterialTextureManager> OdGiMaterialTextureManagerPtr;
+
+/** \details
+    Material texture entry that contains, generates, and loads texture data.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialTextureEntry : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMaterialTextureEntry);
+
+    /** \details
+      Return pointer to device-dependent texture data container.
+    */
+    virtual OdGiMaterialTextureDataPtr textureData() const = 0;
+    /** \details
+      Return true if texture data is initialized.
+    */
+    virtual bool isTextureInitialized() const = 0;
+
+    /** \details
+      Return width of procedurally generated textures.
+    */
+    virtual OdUInt32 proceduralTextureWidth() const = 0;
+    /** \details
+      Set width of procedurally generated textures.
+    */
+    virtual void setProceduralTextureWidth(OdUInt32 width) = 0;
+    /** \details
+      Return height of procedurally generated textures.
+    */
+    virtual OdUInt32 proceduralTextureHeight() const = 0;
+    /** \details
+      Set height of procedurally generated textures.
+    */
+    virtual void setProceduralTextureHeight(OdUInt32 height) = 0;
+    /** \details
+      Set width and height of procedurally generated textures.
+    */
+    virtual void setProceduralTextureResolution(OdUInt32 width, OdUInt32 height) = 0;
+    
+    /** \details
+      Return procedural textures quality coefficient.
+    */
+    virtual double proceduralTextureQuality() const = 0;
+    /** \details
+      Set procedural textures quality coefficient.
+    */
+    virtual void setProceduralTextureQuality(double coef) = 0;
+
+    /** \details
+      Load texture from material map.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation (must not be NULL)
+      \param giCtx [in]  Gi context.
+      \param matMap [in]  Input material map reference.
+      \param pManager [in]  Optional textures manager.
+    */
+    virtual bool setGiMaterialTexture(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, const OdGiMaterialMap &matMap, OdGiMaterialTextureManager *pManager = NULL) = 0;
+
+    /** \details
+      Load texture from material texture pointer.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation (must not be NULL).
+      \param giCtx [in]  Gi context.
+      \param pTexture [in]  Pointer to material texture.
+      \param pManager [in]  Optional textures manager.
+    */
+    virtual bool setGiMaterialTexture(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, OdGiMaterialTexturePtr pTexture, OdGiMaterialTextureManager *pManager = NULL) = 0;
+    // Load texture from raster file
+    /** \details
+      Load texture from raster file.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation (must not be NULL).
+      \param giCtx [in]  Gi context.
+      \param fileName [in]  Name of file that contains raster image.
+      \param pManager [in]  Optional textures manager.
+    */
+    virtual bool setGiMaterialTexture(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, const OdString &fileName, OdGiMaterialTextureManager *pManager = NULL) = 0;
+    /** \details
+      Generate texture from material opacity value.
+      \param pDeviceInfo [in]  Optional external device information.
+      \param pTexDataImpl [in]  Description of texture data class implementation (must not be NULL).
+      \param giCtx [in]  Gi context.
+      \param opacity [in]  Material opacity value (0.0 - 1.0).
+      \param pManager [in]  Optional textures manager.
+    */
+    virtual bool setGiMaterialTexture(OdGiMaterialTextureData::DevDataVariant pDeviceInfo, OdRxClass *pTexDataImpl, const OdGiContext &giCtx, double opacity, OdGiMaterialTextureManager *pManager = NULL) = 0;
+
+    /** \details
+      Sets texture data explicitly.
+      \param pTextureData [in]  Pointer to texture data.
+      \param pManager [in]  Optional textures manager.
+    */
+    virtual void setTextureData(OdGiMaterialTextureData *pTextureData, OdGiMaterialTextureManager *pManager = NULL) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialTextureEntry object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMaterialTextureEntry> OdGiMaterialTextureEntryPtr;
+
+/** \details
+    Container item for material data storage.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialItem : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMaterialItem);
+
+    /** \details
+      Return diffuse texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr diffuseTexture() const = 0;
+    /** \details
+      Return diffuse texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr diffuseTexture() = 0;
+    /** \details
+      Create and return diffuse texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createDiffuseTexture() = 0;
+    /** \details
+      Destroy diffuse texture.
+    */
+    virtual void removeDiffuseTexture() = 0;
+    /** \details
+      Return true if diffuse texture is created.
+    */
+    virtual bool haveDiffuseTexture() const = 0;
+
+    // Container data
+
+    /** \details
+      Return pointer to cached data object.
+    */
+    virtual OdRxObjectPtr cachedData() const = 0;
+    /** \details
+      Set pointer to cached data object.
+    */
+    virtual void setCachedData(OdRxObjectPtr data) = 0;
+
+    /** \details
+      Return material ID.
+    */
+        virtual const OdDbStub *materialId() const = 0;
+    /** \details
+      Set material ID.
+    */
+    virtual void setMaterialId(const OdDbStub *matId = NULL) = 0;
+    /** \details
+      Test whether stored material ID is equal to matId.
+    */
+    virtual bool isMaterialIdValid(const OdDbStub *matId) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialItem object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMaterialItem> OdGiMaterialItemPtr;
+
+/** \details
+    Container item for material data store (for render devices).
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialRenderItem : public OdGiMaterialItem
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiMaterialRenderItem);
+
+    /** \details
+      Return specular texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr specularTexture() const = 0;
+    /** \details
+      Return specular texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr specularTexture() = 0;
+    /** \details
+      Create and return specular texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createSpecularTexture() = 0;
+    /** \details
+      Destroy specular texture.
+    */
+    virtual void removeSpecularTexture() = 0;
+    /** \details
+      Return true if specular texture created.
+    */
+    virtual bool haveSpecularTexture() const = 0;
+
+    /** \details
+      Return reflection texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr reflectionTexture() const = 0;
+    /** \details
+      Return reflection texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr reflectionTexture() = 0;
+    /** \details
+      Create and return reflection texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createReflectionTexture() = 0;
+    /** \details
+      Destroy reflection texture.
+    */
+    virtual void removeReflectionTexture() = 0;
+    /** \details
+      Return true if reflection texture created.
+    */
+    virtual bool haveReflectionTexture() const = 0;
+
+    /** \details
+      Return opacity texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr opacityTexture() const = 0;
+    /** \details
+      Return opacity texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr opacityTexture() = 0;
+    /** \details
+      Create and return opacity texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createOpacityTexture() = 0;
+    /** \details
+      Destroy opacity texture.
+    */
+    virtual void removeOpacityTexture() = 0;
+    /** \details
+      Return true if opacity texture created.
+    */
+    virtual bool haveOpacityTexture() const = 0;
+
+    /** \details
+      Return bump texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr bumpTexture() const = 0;
+    /** \details
+      Return bump texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr bumpTexture() = 0;
+    /** \details
+      Create and return bump texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createBumpTexture() = 0;
+    /** \details
+      Destroy bump texture.
+    */
+    virtual void removeBumpTexture() = 0;
+    /** \details
+      Return true if bump texture created.
+    */
+    virtual bool haveBumpTexture() const = 0;
+
+    /** \details
+      Return refraction texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr refractionTexture() const = 0;
+    /** \details
+      Return refraction texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr refractionTexture() = 0;
+    /** \details
+      Create and return refraction texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createRefractionTexture() = 0;
+    /** \details
+      Destroy refraction texture.
+    */
+    virtual void removeRefractionTexture() = 0;
+    /** \details
+      Return true if refraction texture created.
+    */
+    virtual bool haveRefractionTexture() const = 0;
+
+    /** \details
+      Return normal map texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr normalMapTexture() const = 0;
+    /** \details
+      Return normal map texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr normalMapTexture() = 0;
+    /** \details
+      Create and return normal map texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createNormalMapTexture() = 0;
+    /** \details
+      Destroy normal map texture.
+    */
+    virtual void removeNormalMapTexture() = 0;
+    /** \details
+      Return true if normal map texture created.
+    */
+    virtual bool haveNormalMapTexture() const = 0;
+
+    /** \details
+      Return emission texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr emissionTexture() const = 0;
+    /** \details
+      Return emission texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr emissionTexture() = 0;
+    /** \details
+      Create and return emisiion texture pointer.
+    */
+    virtual OdGiMaterialTextureEntryPtr createEmissionTexture() = 0;
+    /** \details
+      Destroy emission texture.
+    */
+    virtual void removeEmissionTexture() = 0;
+    /** \details
+      Return true if emission texture created.
+    */
+    virtual bool haveEmissionTexture() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMaterialRenderItem object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiMaterialRenderItem> OdGiMaterialRenderItemPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIMATERIALITEM_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialTraitsData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialTraitsData.h
new file mode 100755
index 0000000..9612db7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMaterialTraitsData.h
@@ -0,0 +1,769 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGIMATERIALTRAITSDATA_INCLUDED_
+#define _ODGIMATERIALTRAITSDATA_INCLUDED_
+
+#include "CmColor.h"
+#include "Gi/GiMaterial.h"
+
+class OdDbStub;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group !!RECORDS_TD_APIRef>
+*/
+struct OdGiMaterialTraitsData
+{
+protected:
+  OdGiMaterialColor                     m_ambientColor;
+  OdGiMaterialColor                     m_diffuseColor;
+  OdGiMaterialMap                       m_diffuseMap;
+  OdGiMaterialColor                     m_specularColor;
+  OdGiMaterialMap                       m_specularMap;
+  double                                m_glossFactor;
+  OdGiMaterialMap                       m_reflectionMap;
+  double                                m_opacity;
+  OdGiMaterialMap                       m_opacityMap;
+  OdGiMaterialMap                       m_bumpMap;
+  double                                m_refractionIndex;
+  OdGiMaterialMap                       m_refractionMap;
+  double                                m_translucenceVal;
+  double                                m_selfIllumVal;
+  double                                m_reflectivityVal;
+  OdGiMaterialTraits::IlluminationModel m_illumModel;
+  OdGiMaterialTraits::ChannelFlags      m_channelFlags;
+  OdGiMaterialTraits::Mode              m_mode;
+  // Extended material properties
+  double                                     m_bleedScale;
+  double                                     m_indirectBumpScale;
+  double                                     m_reflectScale;
+  double                                     m_transmitScale;
+  bool                                       m_twoSided;
+  OdGiMaterialTraits::LuminanceMode          m_lumiMode;
+  double                                     m_lumiVal;
+  OdGiMaterialMap                            m_normalMap;
+  OdGiMaterialTraits::NormalMapMethod        m_normalMethod;
+  double                                     m_normalStrength;
+  OdGiMaterialTraits::GlobalIlluminationMode m_globIllum;
+  OdGiMaterialTraits::FinalGatherMode        m_fgMode;
+  // ODA extensions
+  OdGiMaterialColor                     m_emissionColor;
+  OdGiMaterialMap                       m_emissionMap;
+
+public:
+  OdGiMaterialTraitsData()
+    : m_ambientColor()
+    , m_diffuseColor()
+    , m_diffuseMap()
+    , m_specularColor()
+    , m_specularMap()
+    , m_glossFactor(0.0)
+    , m_reflectionMap()
+    , m_opacity(1.0)
+    , m_opacityMap()
+    , m_bumpMap()
+    , m_refractionIndex(0.0)
+    , m_refractionMap()
+    , m_translucenceVal(0.0)
+    , m_selfIllumVal(0.0)
+    , m_reflectivityVal(0.0)
+    , m_illumModel(OdGiMaterialTraits::kBlinnShader)
+    , m_channelFlags(OdGiMaterialTraits::kUseDiffuse)
+    , m_mode(OdGiMaterialTraits::kRealistic)
+    // Extended material properties
+    , m_bleedScale(100.0)
+    , m_indirectBumpScale(100.0)
+    , m_reflectScale(100.0)
+    , m_transmitScale(100.0)
+    , m_twoSided(true)
+    , m_lumiMode(OdGiMaterialTraits::kSelfIllumination)
+    , m_lumiVal(0.0)
+    , m_normalMap()
+    , m_normalMethod(OdGiMaterialTraits::kTangentSpace)
+    , m_normalStrength(1.0)
+    , m_globIllum(OdGiMaterialTraits::kGlobalIlluminationCastAndReceive)
+    , m_fgMode(OdGiMaterialTraits::kFinalGatherCastAndReceive)
+    // ODA extensions
+    , m_emissionColor()
+    , m_emissionMap()
+  {
+  }
+  void operator =(const OdGiMaterialTraitsData& other)
+  {
+    m_ambientColor      = other.m_ambientColor;
+    m_diffuseColor      = other.m_diffuseColor;
+    m_diffuseMap        = other.m_diffuseMap;
+    m_specularColor     = other.m_specularColor;
+    m_specularMap       = other.m_specularMap;
+    m_glossFactor       = other.m_glossFactor;
+    m_reflectionMap     = other.m_reflectionMap;
+    m_opacity           = other.m_opacity;
+    m_opacityMap        = other.m_opacityMap;
+    m_bumpMap           = other.m_bumpMap;
+    m_refractionIndex   = other.m_refractionIndex;
+    m_refractionMap     = other.m_refractionMap;
+    m_translucenceVal   = other.m_translucenceVal;
+    m_selfIllumVal      = other.m_selfIllumVal;
+    m_reflectivityVal   = other.m_reflectivityVal;
+    m_illumModel        = other.m_illumModel;
+    m_channelFlags      = other.m_channelFlags;
+    m_mode              = other.m_mode;
+    // Extended material properties
+    m_bleedScale        = other.m_bleedScale;
+    m_indirectBumpScale = other.m_indirectBumpScale;
+    m_reflectScale      = other.m_reflectScale;
+    m_transmitScale     = other.m_transmitScale;
+    m_twoSided          = other.m_twoSided;
+    m_lumiMode          = other.m_lumiMode;
+    m_lumiVal           = other.m_lumiVal;
+    m_normalMap         = other.m_normalMap;
+    m_normalMethod      = other.m_normalMethod;
+    m_normalStrength    = other.m_normalStrength;
+    m_globIllum         = other.m_globIllum;
+    m_fgMode            = other.m_fgMode;
+    // ODA extensions
+    m_emissionColor     = other.m_emissionColor;
+    m_emissionMap       = other.m_emissionMap;
+  }
+  bool operator ==(const OdGiMaterialTraitsData& other) const
+  {
+    if (m_ambientColor      != other.m_ambientColor)      return false;
+    if (m_diffuseColor      != other.m_diffuseColor)      return false;
+    if (m_diffuseMap        != other.m_diffuseMap)        return false;
+    if (m_specularColor     != other.m_specularColor)     return false;
+    if (m_specularMap       != other.m_specularMap)       return false;
+    if (m_glossFactor       != other.m_glossFactor)       return false;
+    if (m_reflectionMap     != other.m_reflectionMap)     return false;
+    if (m_opacity           != other.m_opacity)           return false;
+    if (m_opacityMap        != other.m_opacityMap)        return false;
+    if (m_bumpMap           != other.m_bumpMap)           return false;
+    if (m_refractionIndex   != other.m_refractionIndex)   return false;
+    if (m_refractionMap     != other.m_refractionMap)     return false;
+    if (m_translucenceVal   != other.m_translucenceVal)   return false;
+    if (m_selfIllumVal      != other.m_selfIllumVal)      return false;
+    if (m_reflectivityVal   != other.m_reflectivityVal)   return false;
+    if (m_illumModel        != other.m_illumModel)        return false;
+    if (m_channelFlags      != other.m_channelFlags)      return false;
+    if (m_mode              != other.m_mode)              return false;
+    // Extended material properties
+    if (m_bleedScale        != other.m_bleedScale)        return false;
+    if (m_indirectBumpScale != other.m_indirectBumpScale) return false;
+    if (m_reflectScale      != other.m_reflectScale)      return false;
+    if (m_transmitScale     != other.m_transmitScale)     return false;
+    if (m_twoSided          != other.m_twoSided)          return false;
+    if (m_lumiMode          != other.m_lumiMode)          return false;
+    if (m_lumiVal           != other.m_lumiVal)           return false;
+    if (m_normalMap         != other.m_normalMap)         return false;
+    if (m_normalMethod      != other.m_normalMethod)      return false;
+    if (m_normalStrength    != other.m_normalStrength)    return false;
+    if (m_globIllum         != other.m_globIllum)         return false;
+    if (m_fgMode            != other.m_fgMode)            return false;
+    // ODA extensions
+    if (m_emissionColor     != other.m_emissionColor)     return false;
+    if (m_emissionMap       != other.m_emissionMap)       return false;
+    return true;
+  }
+  bool operator !=(const OdGiMaterialTraitsData& other) const
+  {
+    if (m_ambientColor      != other.m_ambientColor)      return true;
+    if (m_diffuseColor      != other.m_diffuseColor)      return true;
+    if (m_diffuseMap        != other.m_diffuseMap)        return true;
+    if (m_specularColor     != other.m_specularColor)     return true;
+    if (m_specularMap       != other.m_specularMap)       return true;
+    if (m_glossFactor       != other.m_glossFactor)       return true;
+    if (m_reflectionMap     != other.m_reflectionMap)     return true;
+    if (m_opacity           != other.m_opacity)           return true;
+    if (m_opacityMap        != other.m_opacityMap)        return true;
+    if (m_bumpMap           != other.m_bumpMap)           return true;
+    if (m_refractionIndex   != other.m_refractionIndex)   return true;
+    if (m_refractionMap     != other.m_refractionMap)     return true;
+    if (m_translucenceVal   != other.m_translucenceVal)   return true;
+    if (m_selfIllumVal      != other.m_selfIllumVal)      return true;
+    if (m_reflectivityVal   != other.m_reflectivityVal)   return true;
+    if (m_illumModel        != other.m_illumModel)        return true;
+    if (m_channelFlags      != other.m_channelFlags)      return true;
+    if (m_mode              != other.m_mode)              return true;    
+    // Extended material properties
+    if (m_bleedScale        != other.m_bleedScale)        return true;
+    if (m_indirectBumpScale != other.m_indirectBumpScale) return true;
+    if (m_reflectScale      != other.m_reflectScale)      return true;
+    if (m_transmitScale     != other.m_transmitScale)     return true;
+    if (m_twoSided          != other.m_twoSided)          return true;
+    if (m_lumiMode          != other.m_lumiMode)          return true;
+    if (m_lumiVal           != other.m_lumiVal)           return true;
+    if (m_normalMap         != other.m_normalMap)         return true;
+    if (m_normalMethod      != other.m_normalMethod)      return true;
+    if (m_normalStrength    != other.m_normalStrength)    return true;
+    if (m_globIllum         != other.m_globIllum)         return true;
+    if (m_fgMode            != other.m_fgMode)            return true;
+    // ODA extensions
+    if (m_emissionColor     != other.m_emissionColor)     return true;
+    if (m_emissionMap       != other.m_emissionMap)       return true;
+    return false;
+  }
+
+  void ambient(OdGiMaterialColor& ambientColor) const
+  {
+    ambientColor = m_ambientColor;
+  }
+  void diffuse(OdGiMaterialColor& diffuseColor, OdGiMaterialMap& diffuseMap) const
+  {
+    diffuseColor = m_diffuseColor;
+    diffuseMap = m_diffuseMap;
+  }
+  void specular(OdGiMaterialColor& specularColor, OdGiMaterialMap& specularMap, double& glossFactor) const
+  {
+    specularColor = m_specularColor;
+    specularMap = m_specularMap;
+    glossFactor = m_glossFactor;
+  }
+  void reflection(OdGiMaterialMap& reflectionMap) const
+  {
+    reflectionMap = m_reflectionMap;
+  }
+  void opacity(double& opacity, OdGiMaterialMap& opacityMap) const
+  {
+    opacity = m_opacity;
+    opacityMap = m_opacityMap;
+  }
+  void bump(OdGiMaterialMap& bumpMap) const
+  {
+    bumpMap = m_bumpMap;
+  }
+  void refraction(double& refractionIndex, OdGiMaterialMap& refractionMap) const
+  {
+    refractionIndex = m_refractionIndex;
+    refractionMap = m_refractionMap;
+  }
+  double translucence() const
+  {
+    return m_translucenceVal;
+  }
+  double selfIllumination() const
+  {
+    return m_selfIllumVal;
+  }
+  double reflectivity() const
+  {
+    return m_reflectivityVal;
+  }
+  OdGiMaterialTraits::IlluminationModel illuminationModel() const
+  {
+    return m_illumModel;
+  }
+  OdGiMaterialTraits::ChannelFlags channelFlags() const
+  {
+    return m_channelFlags;
+  }
+  OdGiMaterialTraits::Mode mode() const
+  {
+    return m_mode;
+  }
+
+  void setAmbient(const OdGiMaterialColor& ambientColor)
+  {
+    m_ambientColor = ambientColor;
+  }
+  void setDiffuse(const OdGiMaterialColor& diffuseColor, const OdGiMaterialMap& diffuseMap)
+  {
+    m_diffuseColor = diffuseColor;
+    m_diffuseMap = diffuseMap;
+  }
+  void setSpecular(const OdGiMaterialColor& specularColor, const OdGiMaterialMap& specularMap, double glossFactor)
+  {
+    m_specularColor = specularColor;
+    m_specularMap = specularMap;
+    m_glossFactor = glossFactor;
+  }
+  void setReflection(const OdGiMaterialMap& reflectionMap)
+  {
+    m_reflectionMap = reflectionMap;
+  }
+  void setOpacity(double opacity, const OdGiMaterialMap& opacityMap)
+  {
+    m_opacity = opacity;
+    m_opacityMap = opacityMap;
+  }
+  void setBump(const OdGiMaterialMap& bumpMap)
+  {
+    m_bumpMap = bumpMap;
+  }
+  void setRefraction(double refractionIndex, const OdGiMaterialMap& refractionMap)
+  {
+    m_refractionIndex = refractionIndex;
+    m_refractionMap = refractionMap;
+  }
+  void setTranslucence(double value)
+  {
+    m_translucenceVal = value;
+  }
+  void setSelfIllumination(double value)
+  {
+    m_selfIllumVal = value;
+  }
+  void setReflectivity(double value)
+  {
+    m_reflectivityVal = value;
+  }
+  void setIlluminationModel(OdGiMaterialTraits::IlluminationModel model)
+  {
+    m_illumModel = model;
+  }
+  void setChannelFlags(OdGiMaterialTraits::ChannelFlags flags)
+  {
+    m_channelFlags = flags;
+  }
+  void setMode(OdGiMaterialTraits::Mode value)
+  {
+    m_mode = value;
+  }
+
+  // Extended material properties
+
+  void setColorBleedScale(double scale)
+  {
+    m_bleedScale = scale;
+  }
+  double colorBleedScale() const
+  {
+    return m_bleedScale;
+  }
+
+  void setIndirectBumpScale(double scale)
+  {
+    m_indirectBumpScale = scale;
+  }
+  double indirectBumpScale() const
+  {
+    return m_indirectBumpScale;
+  }
+
+  void setReflectanceScale(double scale)
+  {
+    m_reflectScale = scale;
+  }
+  double reflectanceScale() const
+  {
+    return m_reflectScale;
+  }
+
+  void setTransmittanceScale(double scale)
+  {
+    m_transmitScale = scale;
+  }
+  double transmittanceScale() const
+  {
+    return m_transmitScale;
+  }
+
+  void setTwoSided(bool flag)
+  {
+    m_twoSided = flag;
+  }
+  bool twoSided() const
+  {
+    return m_twoSided;
+  }
+
+  void setLuminanceMode(OdGiMaterialTraits::LuminanceMode mode)
+  {
+    m_lumiMode = mode;
+  }
+  OdGiMaterialTraits::LuminanceMode luminanceMode() const
+  {
+    return m_lumiMode;
+  }
+
+  void setLuminance(double value)
+  {
+    m_lumiVal = value;
+  }
+  double luminance() const
+  {
+    return m_lumiVal;
+  }
+
+  void setNormalMap(const OdGiMaterialMap &normalMap, OdGiMaterialTraits::NormalMapMethod method, double strength)
+  {
+    m_normalMap = normalMap;
+    m_normalMethod = method;
+    m_normalStrength = strength;
+  }
+  void normalMap(OdGiMaterialMap &normalMap, OdGiMaterialTraits::NormalMapMethod &method, double &strength) const
+  {
+    normalMap = m_normalMap;
+    method = m_normalMethod;
+    strength = m_normalStrength;
+  }
+
+  void setGlobalIllumination(OdGiMaterialTraits::GlobalIlluminationMode mode)
+  {
+    m_globIllum = mode;
+  }
+  OdGiMaterialTraits::GlobalIlluminationMode globalIllumination() const
+  {
+    return m_globIllum;
+  }
+
+  void setFinalGather(OdGiMaterialTraits::FinalGatherMode mode)
+  {
+    m_fgMode = mode;
+  }
+  OdGiMaterialTraits::FinalGatherMode finalGather() const
+  {
+    return m_fgMode;
+  }
+
+  // ODA extensions
+  void setEmission(const OdGiMaterialColor& emissionColor, const OdGiMaterialMap& emissionMap)
+  {
+    m_emissionColor = emissionColor;
+    m_emissionMap = emissionMap;
+  }
+
+  void emission(OdGiMaterialColor& emissionColor, OdGiMaterialMap& emissionMap) const
+  {
+    emissionMap = m_emissionMap;
+    emissionColor = m_emissionColor;
+  }
+};
+
+/** \details
+    
+    \sa
+    TD_Gi
+   
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialTraitsTaker : public OdGiMaterialTraits
+{
+protected:
+  OdGiMaterialTraitsData m_data;
+public:
+  //ODRX_DECLARE_MEMBERS(OdGiMaterialTraitsTaker);
+  ODRX_USING_HEAP_OPERATORS(OdGiMaterialTraits);
+
+  void addRef() { }
+  void release() { }
+
+  virtual void ambient(OdGiMaterialColor& ambientColor) const
+  {
+    m_data.ambient(ambientColor);
+  }
+  virtual void diffuse(OdGiMaterialColor& diffuseColor, OdGiMaterialMap& diffuseMap) const
+  {
+    m_data.diffuse(diffuseColor, diffuseMap);
+  }
+  virtual void specular(OdGiMaterialColor& specularColor, OdGiMaterialMap& specularMap, double& glossFactor) const
+  {
+    m_data.specular(specularColor, specularMap, glossFactor);
+  }
+  virtual void reflection(OdGiMaterialMap& reflectionMap) const
+  {
+    m_data.reflection(reflectionMap);
+  }
+  virtual void opacity(double& opacityPercentage, OdGiMaterialMap& opacityMap) const
+  {
+    m_data.opacity(opacityPercentage, opacityMap);
+  }
+  virtual void bump(OdGiMaterialMap& bumpMap) const
+  {
+    m_data.bump(bumpMap);
+  }
+  virtual void refraction(double& refractionIndex, OdGiMaterialMap& refractionMap) const
+  {
+    m_data.refraction(refractionIndex, refractionMap);
+  }
+  virtual double translucence() const
+  {
+    return m_data.translucence();
+  }
+  virtual double selfIllumination() const
+  {
+    return m_data.selfIllumination();
+  }
+  virtual double reflectivity() const
+  {
+    return m_data.reflectivity();
+  }
+  virtual IlluminationModel illuminationModel() const
+  {
+    return m_data.illuminationModel();
+  }
+  virtual ChannelFlags channelFlags() const
+  {
+    return m_data.channelFlags();
+  }
+  virtual Mode mode() const
+  {
+    return m_data.mode();
+  }
+
+  virtual void setAmbient(const OdGiMaterialColor& ambientColor)
+  {
+    m_data.setAmbient(ambientColor);
+  }
+  virtual void setDiffuse(const OdGiMaterialColor& diffuseColor, const OdGiMaterialMap& diffuseMap)
+  {
+    m_data.setDiffuse(diffuseColor, diffuseMap);
+  }
+  virtual void setSpecular(const OdGiMaterialColor& specularColor, const OdGiMaterialMap& specularMap, double glossFactor)
+  {
+    m_data.setSpecular(specularColor, specularMap, glossFactor);
+  }
+  virtual void setReflection(const OdGiMaterialMap& reflectionMap)
+  {
+    m_data.setReflection(reflectionMap);
+  }
+  virtual void setOpacity(double opacityPercentage, const OdGiMaterialMap& opacityMap)
+  {
+    m_data.setOpacity(opacityPercentage, opacityMap);
+  }
+  virtual void setBump(const OdGiMaterialMap& bumpMap)
+  {
+    m_data.setBump(bumpMap);
+  }
+  virtual void setRefraction(double refractionIndex, const OdGiMaterialMap& refractionMap)
+  {
+    m_data.setRefraction(refractionIndex, refractionMap);
+  }
+  virtual void setTranslucence(double value)
+  {
+    m_data.setTranslucence(value);
+  }
+  virtual void setSelfIllumination(double value)
+  {
+    m_data.setSelfIllumination(value);
+  }
+  virtual void setReflectivity(double value)
+  {
+    m_data.setReflectivity(value);
+  }
+  virtual void setIlluminationModel(IlluminationModel model)
+  {
+    m_data.setIlluminationModel(model);
+  }
+  virtual void setChannelFlags(ChannelFlags flags)
+  {
+    m_data.setChannelFlags(flags);
+  }
+  virtual void setMode(Mode value)
+  {
+    m_data.setMode(value);
+  }
+
+  virtual void setColorBleedScale(double scale)
+  {
+    m_data.setColorBleedScale(scale);
+  }
+  virtual double colorBleedScale() const
+  {
+    return m_data.colorBleedScale();
+  }
+
+  virtual void setIndirectBumpScale(double scale)
+  {
+    m_data.setIndirectBumpScale(scale);
+  }
+  virtual double indirectBumpScale() const
+  {
+    return m_data.indirectBumpScale();
+  }
+
+  virtual void setReflectanceScale(double scale)
+  {
+    m_data.setReflectanceScale(scale);
+  }
+  virtual double reflectanceScale() const
+  {
+    return m_data.reflectanceScale();
+  }
+
+  virtual void setTransmittanceScale(double scale)
+  {
+    m_data.setTransmittanceScale(scale);
+  }
+  virtual double transmittanceScale() const
+  {
+    return m_data.transmittanceScale();
+  }
+
+  virtual void setTwoSided(bool flag)
+  {
+    m_data.setTwoSided(flag);
+  }
+  virtual bool twoSided() const
+  {
+    return m_data.twoSided();
+  }
+
+  virtual void setLuminanceMode(LuminanceMode mode)
+  {
+    m_data.setLuminanceMode(mode);
+  }
+  virtual LuminanceMode luminanceMode() const
+  {
+    return m_data.luminanceMode();
+  }
+
+  virtual void setLuminance(double value)
+  {
+    m_data.setLuminance(value);
+  }
+  virtual double luminance() const
+  {
+    return m_data.luminance();
+  }
+
+  virtual void setNormalMap(const OdGiMaterialMap &normalMap, NormalMapMethod method, double strength)
+  {
+    m_data.setNormalMap(normalMap, method, strength);
+  }
+  virtual void normalMap(OdGiMaterialMap &normalMap, NormalMapMethod &method, double &strength) const
+  {
+    m_data.normalMap(normalMap, method, strength);
+  }
+
+  virtual void setGlobalIllumination(GlobalIlluminationMode mode)
+  {
+    m_data.setGlobalIllumination(mode);
+  }
+  virtual GlobalIlluminationMode globalIllumination() const
+  {
+    return m_data.globalIllumination();
+  }
+
+  virtual void setFinalGather(FinalGatherMode mode)
+  {
+    m_data.setFinalGather(mode);
+  }
+  virtual FinalGatherMode finalGather() const
+  {
+    return m_data.finalGather();
+  }
+
+  void setEmission(const OdGiMaterialColor& emissionColor, const OdGiMaterialMap& emissionMap)
+  {
+    m_data.setEmission(emissionColor, emissionMap);
+  }
+
+  void emission(OdGiMaterialColor& emissionColor, OdGiMaterialMap& emissionMap) const
+  {
+    m_data.emission(emissionColor, emissionMap);
+  }
+
+  void getData(OdGiMaterialTraitsData& data) const { data = m_data; }
+  const OdGiMaterialTraitsData &getData() const { return m_data; }
+
+  void setData(const OdGiMaterialTraitsData& data) { m_data = data; }
+};
+
+typedef OdSmartPtr<OdGiMaterialTraitsTaker> OdGiMaterialTraitsTakerPtr;
+
+/** \details
+    
+    \sa
+    TD_Gi
+   
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMaterialTraits_Stub : public OdGiMaterialTraits
+{
+public:
+  ODRX_USING_HEAP_OPERATORS(OdGiMaterialTraits);
+
+  OdGiMaterialTraits_Stub() { }
+
+  void addRef() { }
+  void release() { }
+
+  void ambient(OdGiMaterialColor& /*ambientColor*/) const { }
+  void diffuse(OdGiMaterialColor& /*diffuseColor*/, OdGiMaterialMap& /*diffuseMap*/) const { }
+  void specular(OdGiMaterialColor& /*specularColor*/, OdGiMaterialMap& /*specularMap*/, double& /*glossFactor*/) const { }
+  void reflection(OdGiMaterialMap& /*reflectionMap*/) const { }
+  void opacity(double& /*opacityPercentage*/, OdGiMaterialMap& /*opacityMap*/) const { }
+  void bump(OdGiMaterialMap& /*bumpMap*/) const { }
+  void refraction(double& /*refractionIndex*/, OdGiMaterialMap& /*refractionMap*/) const { }
+  double translucence() const { return 0.0; }
+  double selfIllumination() const { return 0.0; }
+  double reflectivity() const { return 0.0; }
+  IlluminationModel illuminationModel() const { return kBlinnShader; }
+  ChannelFlags channelFlags() const { return kUseAll; }
+  Mode mode() const { return kRealistic; }
+
+  void setAmbient(const OdGiMaterialColor& /*ambientColor*/) { }
+  void setDiffuse(const OdGiMaterialColor& /*diffuseColor*/, const OdGiMaterialMap& /*diffuseMap*/) { }
+  void setSpecular(const OdGiMaterialColor& /*specularColor*/, const OdGiMaterialMap& /*specularMap*/, double /*glossFactor*/) { }
+  void setReflection(const OdGiMaterialMap& /*reflectionMap*/) { }
+  void setOpacity(double /*opacityPercentage*/, const OdGiMaterialMap& /*opacityMap*/) { }
+  void setBump(const OdGiMaterialMap& /*bumpMap*/) { }
+  void setRefraction(double /*refractionIndex*/, const OdGiMaterialMap& /*refractionMap*/) { }
+  void setTranslucence(double /*value*/) { }
+  void setSelfIllumination(double /*value*/) { }
+  void setReflectivity(double /*value*/) { }
+  void setIlluminationModel(IlluminationModel /*model*/) { }
+  void setChannelFlags(ChannelFlags /*flags*/) { }
+  void setMode(Mode /*value*/) { }
+
+  void setColorBleedScale(double /*scale*/) { }
+  double colorBleedScale() const { return 0.0; }
+
+  void setIndirectBumpScale(double /*scale*/) { }
+  double indirectBumpScale() const { return 0.0; }
+
+  void setReflectanceScale(double /*scale*/) { }
+  double reflectanceScale() const { return 0.0; }
+
+  void setTransmittanceScale(double /*scale*/) { }
+  double transmittanceScale() const { return 0.0; }
+
+  void setTwoSided(bool /*flag*/) { }
+  bool twoSided() const { return true; }
+
+  void setLuminanceMode(LuminanceMode /*mode*/) { }
+  LuminanceMode luminanceMode() const { return kSelfIllumination; }
+
+  void setLuminance(double /*value*/) { }
+  double luminance() const { return 0.0; }
+
+  void setNormalMap(const OdGiMaterialMap &/*normalMap*/, NormalMapMethod /*method*/, double /*strength*/) { }
+  void normalMap(OdGiMaterialMap &/*normalMap*/, NormalMapMethod &/*method*/, double &/*strength*/) const { }
+
+  void setGlobalIllumination(GlobalIlluminationMode /*mode*/) { }
+  GlobalIlluminationMode globalIllumination() const { return kGlobalIlluminationCastAndReceive; }
+
+  void setFinalGather(FinalGatherMode /*mode*/) { }
+  FinalGatherMode finalGather() const { return kFinalGatherCastAndReceive; }
+
+  void setEmission(const OdGiMaterialColor& /*emissionColor*/, const OdGiMaterialMap& /*emissionMap*/) { }
+  void emission(OdGiMaterialColor& /*emissionColor*/, OdGiMaterialMap& /*emissionMap*/) const { }
+};
+
+typedef OdSmartPtr<OdGiMaterialTraits_Stub> OdGiMaterialTraits_StubPtr;
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGIMATERIALTRAITSDATA_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafile.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafile.h
new file mode 100755
index 0000000..f59f9b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafile.h
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODGIMETAFILE_H_
+#define _ODGIMETAFILE_H_
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Represents a metafile within the Teigha vectorization framework.
+
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiMetafile : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiMetafile);
+
+  /** \details
+      Returns the size of the metafile data within this object.
+  */
+  virtual OdUInt32 dataSize() const = 0;
+
+  /** \details
+      Returns the metafile data from this object, either in the older Windows format
+      or in the new enhanced format.
+
+        \param pBytes [out]  Receives the metafile data (caller must ensure that enough memory has been allocated).
+  */
+  virtual void bitsData(OdUInt8* pBytes) const = 0;
+
+  /** \remarks
+      If the OdUInt8* bitsData() version of this function returns NULL, 
+      a direct pointer to the data could not be 
+      returned, and the bitsData(OdUInt8* pBytes) version of this function
+      should be called instead.
+  */
+  virtual const OdUInt8* bitsData() const { return 0; }
+};
+
+typedef OdSmartPtr<OdGiMetafile> OdGiMetafilePtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODGIMETAFILE_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafiler.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafiler.h
new file mode 100755
index 0000000..d67cefb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiMetafiler.h
@@ -0,0 +1,191 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_METAFILER__
+#define __OD_GI_METAFILER__
+
+#include "Gi/GiConveyorNode.h"
+#include "ChunkAllocator.h"
+#include "Ge/GeDoubleArray.h"
+
+class OdGiDeviation;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiGeometryMetafile : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiGeometryMetafile);
+
+  ODCA_HEAP_OPERATORS();
+
+  class Record
+  {
+  protected:
+    Record* m_pTail;
+  public:
+    ODRX_HEAP_OPERATORS();
+
+    Record()
+      : m_pTail(0)
+    {}
+
+    virtual ~Record() {}
+
+    Record* tail()
+    {
+      return m_pTail;
+    }
+
+    const Record* tail() const
+    {
+      return m_pTail;
+    }
+
+    void setTail(Record* pTail)
+    {
+      m_pTail = pTail;
+    }
+
+    inline void deleteList()
+    {
+      Record* pCurr = this;
+      while(pCurr)
+      {
+        Record* pTail = pCurr->m_pTail;
+        delete pCurr;
+        pCurr = pTail;
+      }
+    }
+
+    virtual void play(OdGiConveyorGeometry* pGeom, OdGiConveyorContext* pCtx) const = 0;
+  };
+
+private:
+  Record*               m_pHead;
+
+  void destroyRecords()
+  {
+    if(m_pHead)
+    {
+      m_pHead->deleteList();
+      m_pHead = NULL;
+    }
+  }
+
+public:
+
+  OdGiGeometryMetafile();
+  virtual ~OdGiGeometryMetafile();
+
+  void clear();
+  void play(OdGiConveyorGeometry* pGeom, OdGiConveyorContext* pCtx) const;
+  void setRecords(Record* pRec)
+  {
+    ODA_ASSERT(m_pHead == 0);
+    m_pHead = pRec;
+  }
+  bool isEmpty() const { return m_pHead == 0; }
+  Record *firstRecord() const { return m_pHead; }
+  Record *lastRecord() const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiGeometryMetafile object pointers.
+*/
+typedef OdSmartPtr<OdGiGeometryMetafile> OdGiGeometryMetafilePtr;
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiMetafiler : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiMetafiler);
+  
+  virtual void setMetafile(OdGiGeometryMetafile* pMetafile) = 0;
+  virtual OdGiGeometryMetafile* metafile() = 0;
+
+  virtual void exchangeMetafile(OdGiGeometryMetafile* pMetafile) = 0;
+
+  /** Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  enum CoordType
+  {
+    kUnknown = 0,
+    kModel,
+    kWorld,
+    kEye,
+    kDevice
+  };
+
+  /** Sets coordinates type for geometry stored by metafiler.
+  */
+  virtual void setCoordinatesType(CoordType ct) = 0;
+
+  /** Returns coordinates type used by this metafiler object.
+  */
+  virtual CoordType coordinatesType() const = 0;
+
+  /** Save traits into metafile. Optionally save ByBlock traits.
+  */
+  virtual bool saveTraits(const OdGiSubEntityTraitsData& entTraits, const OdGiSubEntityTraitsData *byBlockTraits = NULL) = 0;
+  /** Save effective traits into metafile. Optionally save ByBlock traits.
+  */
+  virtual bool saveTraits(const OdGiSubEntityTraitsData *byBlockTraits) = 0;
+  /** Save only effective traits into metafile.
+  */
+  virtual bool saveTraits() = 0;
+
+  /** Flush all data to the metafile
+  */
+  virtual void flush(bool bForceTraits = true) = 0;
+
+  /** Adds metafile record to the records list.
+  */
+  virtual void add(OdGiGeometryMetafile::Record* pRec) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiMetafiler object pointers.
+*/
+typedef OdSmartPtr<OdGiMetafiler> OdGiMetafilerPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __OD_GI_METAFILER__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiModelToViewProc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiModelToViewProc.h
new file mode 100755
index 0000000..033bdc1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiModelToViewProc.h
@@ -0,0 +1,149 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIMODELTOVIEWPROC_H__
+#define __ODGIMODELTOVIEWPROC_H__
+
+#include "Gi/GiConveyorNode.h"
+#include "Ge/GeDoubleArray.h"
+
+class OdGeMatrix3d;
+class OdGiDeviation;
+class OdGiXform;
+class OdGiAbstractClipBoundary;
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT ODRX_ABSTRACT OdGiModelToViewProc : public OdRxObject
+{
+protected:
+  OdGiModelToViewProc();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiModelToViewProc);
+
+  virtual void setDrawContext( OdGiConveyorContext* pDrawCtx ) = 0;
+
+  virtual OdGiConveyorInput& modelInput() = 0;
+  virtual OdGiConveyorInput& eyeInput() = 0;
+
+  virtual OdGiConveyorOutput& output() = 0;
+
+  virtual void setEyeToOutputTransform(const OdGeMatrix3d& xMat) = 0;
+  virtual const OdGeMatrix3d& eyeToOutputTransform() const = 0;
+
+  virtual void setView(
+    const OdGePoint3d& target,
+    const OdGeVector3d& xVector,
+    const OdGeVector3d& upVector,
+    const OdGeVector3d& eyeVector) = 0;
+  virtual void setWorldToEyeTransform(const OdGeMatrix3d& xMat) = 0;
+
+  virtual const OdGeMatrix3d& worldToEyeTransform() const = 0;
+  virtual const OdGeMatrix3d& eyeToWorldTransform() const = 0;
+
+  virtual const OdGeMatrix3d& modelToEyeTransform() const = 0;
+  virtual const OdGeMatrix3d& eyeToModelTransform() const = 0;
+  
+  virtual void pushModelTransform(const OdGeMatrix3d& xMat) = 0;
+  virtual void popModelTransform() = 0;
+  virtual const OdGeMatrix3d& modelToWorldTransform() const = 0;
+  virtual const OdGeMatrix3d& worldToModelTransform() const = 0;
+
+  virtual OdGiXform *getModelToEyeXform() = 0;
+  virtual const OdGiXform *getModelToEyeXform() const = 0;
+  virtual OdGiXform *getEyeToModelXform() = 0;
+  virtual const OdGiXform *getEyeToModelXform() const = 0;
+
+  virtual void pushClipBoundary(OdGiClipBoundary* pBoundary) = 0;
+  virtual void pushClipBoundary(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo) = 0;
+  virtual void popClipBoundary() = 0;
+
+  virtual bool isClipping() const = 0;
+  virtual bool isEmptyClipSet() const = 0;
+
+  virtual void setWorldDeviation(const OdGiDeviation& worldDev) = 0;
+  virtual void setWorldDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  virtual const OdGiDeviation& worldDeviation() const = 0;
+  virtual const OdGiDeviation& modelDeviation() const = 0;
+  virtual const OdGiDeviation& eyeDeviation() const = 0;
+
+  enum ClippingCS
+  {
+    kClipInEyeSpace,
+    kClipInWorldSpace,
+    kClipInOutputSpace
+  };
+  virtual void setClippingSpace(ClippingCS newClipCS) = 0;
+  virtual ClippingCS currentClippingSpace() const = 0;
+
+  virtual void enableAnalyticCurvesClipping(bool bEnable = true) = 0;
+  virtual bool isAnalyticCurvesClippingEnabled() const = 0;
+
+  virtual void enableClippingDebugLog(const OdString &fileName) = 0;
+  virtual void disableClippingDebugLog() = 0;
+  virtual bool isClippingDebugLogEnabled() const = 0;
+};
+
+/** \details
+  This template class is specialization of the OdSmartPtr class for the OdGiModelToViewProc class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdGiModelToViewProc> OdGiModelToViewProcPtr;
+
+
+/** \details
+  <group OdGi_Classes>
+
+  This class defines the model section.
+
+  Library: TD_Gi
+*/
+class ODGI_EXPORT ODRX_ABSTRACT OdGiModelSection : public OdGiConveyorNode
+{
+protected:
+  OdGiModelSection();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiModelSection);
+
+  virtual void setDrawContext( OdGiConveyorContext* pDrawCtx ) = 0;
+  virtual void set(const OdGiClipBoundary* bnd) = 0;
+  virtual void setModelToWorld(const OdGeMatrix3d& modelToWorld) = 0;
+  virtual bool enabled() const = 0;
+  virtual void setEnabled(bool bOn)  = 0;
+};
+
+/** \details
+  The typified smart pointer for the /model section/ object. This  
+  template class is specialization of the OdSmartPtr class for the OdGiModelSection class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdGiModelSection> OdGiModelSectionPtr;
+
+#endif //#ifndef __ODGIMODELTOVIEWPROC_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNoiseGenerator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNoiseGenerator.h
new file mode 100755
index 0000000..0029964
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNoiseGenerator.h
@@ -0,0 +1,129 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// Perlin noise generation for procedural textures.
+
+#ifndef __ODGINOISEGENERATOR_H__
+#define __ODGINOISEGENERATOR_H__
+
+#include "RootExport.h"
+#include "GiExport.h"
+#include "Ge/GePoint2d.h"
+#include "Ge/GePoint3d.h"
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Noise generator for procedural textures generation (based on Perlin noise).
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiNoiseGenerator : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiNoiseGenerator);
+
+    /** \details
+      Initialize noise generation tables to specified seed.
+      \param seed [in]  Random number generator seed.
+    */
+    virtual void initSeed(OdUInt32 seed) = 0;
+
+    /** \details
+      Generate noise value for a 1D location.
+      Returns values between -1.0 and 1.0.
+      \param point [in]  1D point location.
+    */
+    virtual double noise1d(double point) const = 0;
+
+    /** \details
+      Generate noise value for a 2D location.
+      Returns values between -1.0 and 1.0.
+      \param point [in]  2D point location.
+    */
+	  virtual double noise2d(const OdGePoint2d &point) const = 0;
+
+    /** \details
+      Generate noise value for a 3D location.
+      Returns values between -1.0 and 1.0.
+      \param point [in]  3D point location.
+    */
+    virtual double noise3d(const OdGePoint3d &point) const = 0;
+
+    /** \details
+      General noise function calls the previous 3 depending on len.
+      Input range from 0 to 3.
+      Returns values between -1.0 and 1.0.
+      \param point [in]  1D, 2D or 3D point location.
+      \param len [in]  Point dimensions.
+    */
+    virtual double noise(double point[], OdInt32 len) const = 0;
+
+    /** \details
+      Generate turbulent noise across a number of octaves.
+      Returns values between -1.0 and 1.0.
+      \param point [in]  3D input point location.
+      \param freq [in]  Turbulence frequency.
+    */
+    virtual double turbulence(const OdGePoint3d &point, double freq) const = 0;
+
+    /** \details
+      Noise across a number of octaves.
+      Returns values between -1.0 and 1.0.
+      \param point [in]  3D input point location.
+      \param freq [in]  Turbulence frequency.
+    */
+    virtual double oNoise(const OdGePoint3d &point, double freq) const = 0;
+
+    /** \details
+      Fractal brownian motion.
+      Returns values between -1.0 and 1.0.
+      \param point [in]  3D input point location.
+      \param H [in]  Range fractal dimension 1.0 - 0.0 where 0.0 is total chaos.
+      \param lacunarity [in]  Gap between successive frequencies, use 2.0.
+      \param octaves [in]  Number of frequencies in the fBm. 3 - 7.
+    */
+    virtual double fBm(const OdGePoint3d &point, double H, double lacunarity, double octaves) const = 0;
+
+    /** \details
+      Create OdGiNoiseGenerator, initialized by specified seed.
+      \param seed [in]  Random number generator seed.
+    */
+    static OdSmartPtr<OdGiNoiseGenerator> createObject(OdUInt32 seed);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiNoiseGenerator object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiNoiseGenerator> OdGiNoiseGeneratorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGINOISEGENERATOR_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNonEntityTraits.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNonEntityTraits.h
new file mode 100755
index 0000000..b3426d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiNonEntityTraits.h
@@ -0,0 +1,258 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGI_NONENTITYTRAITS_H__
+#define __ODGI_NONENTITYTRAITS_H__
+
+#include "TD_PackPush.h"
+
+#include "Gi/Gi.h"
+#include "OdCodePage.h"
+#include "Gi/GiDrawable.h"
+
+class OdGiLinetypeDash;
+class OdFont;
+class OdTtfDescriptor;
+class OdGiTextStyle;
+
+/** \details
+    This class defines the interface to the layer traits for the vectorization process.
+    
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiLayerTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiLayerTraits);
+
+  // returned via subSetAttributes()
+
+  enum
+  {
+    kByBlock    = (OdGiDrawable::kLastFlag << 1),
+    kFrozen     = (OdGiDrawable::kLastFlag << 2),
+    kOff        = (OdGiDrawable::kLastFlag << 3),
+    kPlottable  = (OdGiDrawable::kLastFlag << 4),
+    kLocked     = (OdGiDrawable::kLastFlag << 5)
+  };
+  
+  /** \details
+    Returns the color for this object.
+  */
+  virtual OdCmEntityColor color() const = 0;
+
+  /** \details
+    Returns the lineweight for this object.
+  */
+  virtual OdDb::LineWeight lineweight() const = 0;
+
+  /** \details
+    Returns the Object ID of the linetype for this object. 
+  */
+  virtual OdDbStub* linetype() const = 0;
+  
+  /** \details
+    Returns the Plot Style Name Type for this object. 
+    \remarks
+    plotStyleNameType() returns one of the following:
+    
+    <table>
+    Name                                 Value                         
+    OdDb::kPlotStyleNameByLayer          0
+    OdDb::kPlotStyleNameByBlock          1
+    OdDb::kPlotStyleNameIsDictDefault    2
+    OdDb::kPlotStyleNameById             3
+    </table>
+  */
+  virtual OdDb::PlotStyleNameType plotStyleNameType() const = 0;
+  /** \details
+    Returns the Object ID of the Plot Style Name. 
+  */
+  virtual OdDbStub* plotStyleNameId() const = 0;
+  /** \details
+    Returns the Object ID of the material.
+  */
+  virtual OdDbStub* materialId() const = 0;
+  /** \details
+    Returns the transparency for this object.
+  */
+  virtual OdCmTransparency transparency() const = 0;
+
+  /** \details
+    Sets the color for this object.
+    \param color [in]  Entity color.
+  */
+  virtual void setColor(const OdCmEntityColor& color) = 0;
+  /** \details
+    Sets the lineweight for this object.
+    \param lineweight [in]  Lineweight.
+  */
+  virtual void setLineweight(OdDb::LineWeight lineweight) = 0;
+  /** \details
+    Sets the linetype for this object.
+    \param pLinetypeId [in]  Pointer to the Object ID of the linetype.
+  */
+  virtual void setLinetype(OdDbStub* pLinetypeId) = 0;
+  
+  /** \details
+    Sets the Plot Style Name for this object.
+
+    \param plotStyleNameType [in]  Plot Style Name Type.
+    \param pPlotStyleNameId [in]  Pointer to the Object ID of the Plot Style Name.
+    
+    \remarks
+    pPlotStyleNameId is used only when plotStyleNameType == kPlotStyleNameById.
+    
+    plotStyleNameType must be one of the following:
+    
+    <table>
+    Name                                 Value                         
+    OdDb::kPlotStyleNameByLayer          0
+    OdDb::kPlotStyleNameByBlock          1
+    OdDb::kPlotStyleNameIsDictDefault    2
+    OdDb::kPlotStyleNameById             3
+    </table>
+  */
+  virtual void setPlotStyleName(OdDb::PlotStyleNameType plotStyleNameType, OdDbStub* pPlotStyleNameId= 0) = 0;
+
+  /** \details
+    Sets the material ID for this object.
+    \param pMaterialId [in]  Pointer to the Object ID of the material.
+  */
+  virtual void setMaterial(OdDbStub* pMaterialId) = 0;
+
+  /** \details
+    Sets the transparency for this object.
+    
+    \param transparency [in] OdCmTransparency object.
+  */
+  virtual void setTransparency(const OdCmTransparency &transparency) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiLayerTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiLayerTraits> OdGiLayerTraitsPtr;
+
+
+/** \details
+    This class defines the interface to linetype traits for the vectorization process.
+    Library Gi
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiLinetypeTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiLinetypeTraits);
+
+  // returned via subSetAttributes()
+  
+  enum
+  {
+    kByBlock    = (OdGiDrawable::kLastFlag << 1),
+    kByLayer    = (OdGiDrawable::kLastFlag << 2),
+    kContinuous = (OdGiDrawable::kLastFlag << 3),
+    // Scale linetype to fit
+    kScaleToFit = (OdGiDrawable::kLastFlag << 4),
+    // Teigha(R) for .dgn files specific
+    kScalability= (OdGiDrawable::kLastFlag << 5),
+    kDgLinetype = (OdGiDrawable::kLastFlag << 6),
+    //
+    kGiLinetypeFlagMax = kDgLinetype
+  };
+
+  /** \details
+    Returns the length of the linetype pattern for this LinetypeTraits object.
+    
+    \remarks
+    patternLength is the total length in drawing units of all the dashes in this Linetype pattern.
+  */
+  virtual double patternLength() const = 0;
+  
+  /** \details
+    Returns an array of dashes for this LinetypeTraits object.
+    \param dashes [out]  Receives the array of dashes.
+  */
+  virtual void dashes(OdArray<OdGiLinetypeDash>& dashes) = 0;
+
+  /** \details
+    Returns the scale for this LinetypeTraits object.
+  */
+  virtual double scale() const = 0;
+  
+  /** \details
+    Sets the dashes for this LinetypeTraits object.
+    \param dashes [in]  Array of dashes.
+  */
+  virtual void setDashes(const OdArray<OdGiLinetypeDash>& dashes) = 0;
+  /** \details
+    Sets the scale for this LinetypeTraits object.
+  */
+  virtual void setScale(double scale) = 0;
+  /** \details
+    Sets the length of the linetype pattern for this LinetypeTraits object.
+    
+    \param patternLength [in]  Pattern length.
+    
+    \remarks
+    patternLength is the total length in drawing units of all the dashes in this Linetype pattern.
+  */
+  virtual void setPatternLength(double patternLength) = 0;
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiLinetypeTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiLinetypeTraits> OdGiLinetypeTraitsPtr;
+
+/** \details
+    This class defines the interface to text style traits for the vectorization process.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiTextStyleTraits : public  OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiTextStyleTraits);
+
+  /** \details
+    Returns the text style of this TextStyleTraits object.
+    \param giTextStyle [out]  Receives the text style.
+  */
+  virtual void textStyle(OdGiTextStyle& giTextStyle) const = 0;
+
+  /** \details
+    Sets the text style of this TextStyleTraits object.
+    \param giTextStyle [in]  Text style.
+  */
+  virtual void setTextStyle(const OdGiTextStyle& giTextStyle) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiTextStyleTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiTextStyleTraits> OdGiTextStyleTraitsPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipper.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipper.h
new file mode 100755
index 0000000..16729ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipper.h
@@ -0,0 +1,81 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIORTOCLIPPER_H__
+#define __ODGIORTOCLIPPER_H__
+
+#include "Gi/GiConveyorNode.h"
+#include "Ge/GeDoubleArray.h"
+#include "Gi/GiClipBoundary.h"
+
+class OdGiDeviation;
+class OdGiConveyorContext;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiOrthoClipper : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiOrthoClipper);
+
+  virtual void set(OdUInt32 nPoints,          // points counter. 0 - disables XY clip; 2 - defines rectangle.
+                   const OdGePoint2d* points, // points defining sides of clipping prism perpendicular to XY
+                   bool   bClipLowerZ = false,
+                   double dLowerZ = 0.0,
+                   bool   bClipUpperZ = false,
+                   double dUpperZ = 0.0) = 0;
+
+  virtual void set(const OdGePoint2dArray& points, // points defining sides of clipping prism perpendicular to XY
+                   bool   bClipLowerZ = false,
+                   double dLowerZ = 0.0,
+                   bool   bClipUpperZ = false,
+                   double dUpperZ = 0.0) = 0;
+
+  virtual void get(OdGePoint2dArray& points,
+                   bool&   bClipLowerZ,
+                   double& dLowerZ,
+                   bool&   bClipUpperZ,
+                   double& dUpperZ) const = 0;
+
+  /** Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+};
+
+typedef OdSmartPtr<OdGiOrthoClipper> OdGiOrthoClipperPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIORTOCLIPPER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipperEx.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipperEx.h
new file mode 100755
index 0000000..69913e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoClipperEx.h
@@ -0,0 +1,201 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIORTOCLIPPEREX_H__
+#define __ODGIORTOCLIPPEREX_H__
+
+#include "Gi/GiOrthoClipper.h"
+#include "Gi/GiAbstractClipBoundary.h"
+
+#include "TD_PackPush.h"
+
+class OdGeBoundBlock3d;
+class OdStreamBuf;
+
+/** \details
+
+    {group:OdGi_Classes}
+*/
+class ODGI_EXPORT OdGiOrthoClipperEx : public OdGiOrthoClipper
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiOrthoClipperEx);
+
+  // Initial clipper interface support
+
+  TD_USING(OdGiOrthoClipper::set);
+  TD_USING(OdGiOrthoClipper::get);
+
+  // Extend initial interface by inverted clipping boundary support
+
+  virtual void set(bool bInverted,
+                   OdUInt32 nPoints,          // points counter. 0 - disables XY clip; 2 - defines rectangle.
+                   const OdGePoint2d* points, // points defining sides of clipping prism perpendicular to XY
+                   bool bClipLowerZ = false, double dLowerZ = 0.0,
+                   bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
+
+  virtual void set(bool bInverted,
+                   const OdGePoint2dArray& points, // points defining sides of clipping prism perpendicular to XY
+                   bool bClipLowerZ = false, double dLowerZ = 0.0,
+                   bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
+
+  virtual void get(bool &bInverted, OdGePoint2dArray& points,
+                   bool& bClipLowerZ, double& dLowerZ,
+                   bool& bClipUpperZ, double& dUpperZ) const = 0;
+
+  // Extend initial interface by extended clipping boundary support
+
+  virtual void set(bool bPreprocess, OdUInt32 nCounts, const int *counts,
+                   OdUInt32 nPoints, const OdGePoint2d *points,
+                   bool bClipLowerZ = false, double dLowerZ = 0.0,
+                   bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
+
+  virtual void set(bool bPreprocess, const OdIntArray& counts, const OdGePoint2dArray& points,
+                   bool bClipLowerZ = false, double dLowerZ = 0.0,
+                   bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
+
+  virtual void get(OdIntArray& counts, OdGePoint2dArray& points,
+                   bool& bClipLowerZ, double& dLowerZ,
+                   bool& bClipUpperZ, double& dUpperZ) const = 0;
+
+  // Stubs for old extended clipping boundary interface
+
+  void set(OdUInt32 nCounts, const int *counts,
+           OdUInt32 nPoints, const OdGePoint2d *points,
+           bool bClipLowerZ = false, double dLowerZ = 0.0,
+           bool bClipUpperZ = false, double dUpperZ = 0.0)
+  { set(false, nCounts, counts, nPoints, points, bClipLowerZ, dLowerZ, bClipUpperZ, dUpperZ); }
+
+  void set(const OdIntArray& counts, const OdGePoint2dArray& points,
+           bool bClipLowerZ = false, double dLowerZ = 0.0,
+           bool bClipUpperZ = false, double dUpperZ = 0.0)
+  { set(false, counts, points, bClipLowerZ, dLowerZ, bClipUpperZ, dUpperZ); }
+
+  // Some classification functionality applicable for single (top) clipping stage
+
+  virtual bool isEmpty() const = 0;
+  virtual bool isInverted() const = 0;
+  virtual bool isExtended() const = 0;
+  virtual bool isSingleClipStage() const = 0;
+  virtual bool isEmptyClipSet() const = 0;
+
+  // Support direct setting of clipping boundaries
+
+  virtual void set(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo = NULL, const OdGeMatrix3d *pXform = NULL) = 0;
+  virtual OdGiAbstractClipBoundary::BoundaryType getType() const = 0;
+
+  // Configuration
+
+  virtual void enableAnalyticCurvesClipping(bool bEnable) = 0;
+  virtual bool isAnalyticCurvesClippingEnabled() const = 0;
+
+  virtual void enable() = 0;
+  virtual void disable() = 0;
+  virtual bool enabled() const = 0;
+
+  enum ClipLimit
+  {
+    kPolyClipLimit = 0, // Memory limit (in bytes) which limits internal clipping structures number
+    kNumClipLimits
+  };
+  virtual void setLimit(ClipLimit clipLimit, OdUInt32 nLimit) = 0;
+  virtual OdUInt32 getLimit(ClipLimit clipLimit) const = 0;
+
+  // Support mutiple clip stages
+
+  struct ClipPlane
+  {
+    OdGePoint3d m_origin;
+    OdGeVector3d m_normal;
+    enum MarkType
+    {
+      kNoMark = 0,
+      kMarkLower,
+      kMarkUpper
+    } m_markType;
+    ClipPlane() : m_markType(kNoMark) {}
+  };
+  typedef OdArray<ClipPlane, OdMemoryAllocator<ClipPlane> > ClipPlanesArray;
+  enum CountsClassify
+  {
+    kCCDontClassify = 0,      // Avoid classification
+    kCCClassifiedByInclusion, // Classify by polygon-polygon inclusion
+    kCCClassifiedByInteger,   // Classify by positive/negative counts number
+    kCCClassifiedByOrder,     // Classify by CW/CCW ordering
+    kCCClassifiedByNormal,    // Classify by positive/negative normal
+    kCCClassifiedByXor,       // Preprocess by Xor operation (intersection)
+    kCCClassifiedBySignedXor  // Preprocess by set of Union/Subtract operations
+  };
+
+  virtual void pushClipStage(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo = NULL, const OdGeMatrix3d *pXform = NULL) = 0;
+  virtual void pushClipStage(OdUInt32 numPlanes, const ClipPlane *pPlanes) = 0;
+  virtual void pushClipStage(OdUInt32 nCounts, const int *counts,
+                             OdUInt32 nPoints, const OdGePoint2d *points,
+                             bool bInverted = false, CountsClassify countsClass = kCCDontClassify, const OdGeMatrix3d *pXform = NULL,
+                             OdUInt32 numPlanes = 0, const ClipPlane *pPlanes = NULL) = 0;
+  virtual void pushClipStage(OdUInt32 nCounts, const int *counts,
+                             OdUInt32 nPoints, const OdGePoint3d *points, const OdGeVector3d *pNormal = NULL,
+                             bool bInverted = false, CountsClassify countsClass = kCCDontClassify, const OdGeMatrix3d *pXform = NULL,
+                             OdUInt32 numPlanes = 0, const ClipPlane *pPlanes = NULL) = 0;
+
+  virtual bool popClipStage() = 0;
+
+  virtual void clearClipping(bool bClearCache = false) = 0; // Clear all clipping stages
+  virtual void clearTemporaryArrays() = 0; // Clear all temporarily allocated arrays and caches
+
+  virtual OdUInt32 numClipStages() const = 0;
+  virtual void classifyClipStage(OdUInt32 nStage, OdUInt32 *pNPlanes, OdUInt32 *pNPolys = NULL, bool *bFirstPolyInverted = NULL) const = 0;
+  virtual bool getClipStage(OdUInt32 nStage, OdIntArray& counts, OdGePoint2dArray& points, OdGeVector3d *pNormal = NULL) const = 0;
+  virtual bool getClipStage(OdUInt32 nStage, OdIntArray& counts, OdGePoint3dArray& points, OdGeVector3d *pNormal = NULL) const = 0;
+  virtual bool getClipStage(OdUInt32 nStage, ClipPlanesArray& planes) const = 0;
+
+  // Interface compatibility with OdGiOrthoPrismIntersector
+
+  virtual OdUInt32 clipStatus() const = 0;
+  virtual void clearClipStatus() = 0;
+
+  // Some helpful checking routines
+
+  enum VisibilityStatus
+  {
+    kStatusInvisible = -1,
+    kStatusClipped   =  0,
+    kStatusVisible   =  1
+  };
+  virtual VisibilityStatus checkPointVisibility(const OdGePoint3d &pt) const = 0;
+  virtual VisibilityStatus checkSphereVisibility(const OdGePoint3d &origin, double radius) const = 0;
+  virtual VisibilityStatus checkExtentsVisibility(const OdGeExtents3d &extents) const = 0;
+  virtual VisibilityStatus checkBoundsVisibility(const OdGeBoundBlock3d &bb) const = 0;
+
+  // Clipping engine debugging
+
+  virtual void enableLogging(OdStreamBuf *pStream) = 0;
+  virtual void disableLogging() = 0;
+  virtual bool isLoggingEnabled() const = 0;
+};
+
+typedef OdSmartPtr<OdGiOrthoClipperEx> OdGiOrthoClipperExPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIORTOCLIPPEREX_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoPrismIntersector.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoPrismIntersector.h
new file mode 100755
index 0000000..e37a3fa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiOrthoPrismIntersector.h
@@ -0,0 +1,85 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIORTOPRISMINTERSECTOR_H__
+#define __ODGIORTOPRISMINTERSECTOR_H__
+
+#include "Gi/GiConveyorNode.h"
+#include "Ge/GeDoubleArray.h"
+#include "Gi/GiClipBoundary.h"
+
+class OdGiDeviation;
+class OdGiConveyorContext;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiOrthoPrismIntersector : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiOrthoPrismIntersector);
+
+  virtual void set(OdUInt32 nPoints,          // points counter. 0 - disables XY clip; 2 - defines rectangle.
+                   const OdGePoint2d* points, // points defining sides of clipping prism perpendicular to XY
+                   bool   bClipLowerZ = false,
+                   double dLowerZ = 0.0,
+                   bool   bClipUpperZ = false,
+                   double dUpperZ = 0.0) = 0;
+
+  virtual void set(const OdGePoint2dArray& points, // points defining sides of clipping prism perpendicular to XY
+                   bool   bClipLowerZ = false,
+                   double dLowerZ = 0.0,
+                   bool   bClipUpperZ = false,
+                   double dUpperZ = 0.0) = 0;
+
+  virtual void get(OdGePoint2dArray& points,
+                   bool&   bClipLowerZ,
+                   double& dLowerZ,
+                   bool&   bClipUpperZ,
+                   double& dUpperZ) const = 0;
+
+  /** Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  virtual OdUInt32 clipStatus() const = 0;
+
+  virtual void clearClipStatus() = 0;
+};
+
+typedef OdSmartPtr<OdGiOrthoPrismIntersector> OdGiOrthoPrismIntersectorPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIORTOPRISMINTERSECTOR_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPalette.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPalette.h
new file mode 100755
index 0000000..e7c16d9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPalette.h
@@ -0,0 +1,395 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIPALETTE_H__
+#define __ODGIPALETTE_H__
+
+#include "TD_PackPush.h"
+
+#include "GiExport.h"
+#include "OdArray.h"
+#include "SharedPtr.h"
+
+/** \details
+    This class represents RGB color components as set of 32bit integers.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+struct OdGiIntRGB
+{
+  OdInt32 r, g, b;
+
+  OdGiIntRGB(OdInt32 _r, OdInt32 _g, OdInt32 _b)
+    : r(_r), g(_g), b(_b)
+  { }
+  OdGiIntRGB() { }
+  OdGiIntRGB(ODCOLORREF cref)
+  {
+    setColor(cref);
+  }
+
+  /** \details
+      Returns red color component.
+  */
+  OdInt32 red() const { return r; }
+  /** \details
+      Returns green color component.
+  */
+  OdInt32 green() const { return g; }
+  /** \details
+      Returns blue color component.
+  */
+  OdInt32 blue() const { return b; }
+
+  /** \details
+      Resets red color component.
+      \param _r [in]  New value for red color component.
+  */
+  void setRed(OdInt32 _r) { r = _r; }
+  /** \details
+      Resets green color component.
+      \param _g [in]  New value for green color component.
+  */
+  void setGreen(OdInt32 _g) { g = _g; }
+  /** \details
+      Resets blue color component.
+      \param _b [in]  New value for blue color component.
+  */
+  void setBlue(OdInt32 _b) { b = _b; }
+  /** \details
+      Resets red, green and blue color components together.
+      \param _r [in]  New value for red color component.
+      \param _g [in]  New value for green color component.
+      \param _b [in]  New value for blue color component.
+  */
+  void setRGB(OdInt32 _r, OdInt32 _g, OdInt32 _b) { r = _r; g = _g; b = _b; }
+
+  /** \details
+      Resets all color components from ODCOLORREF.
+      \param cref [in]  Input color.
+  */
+  void setColor(ODCOLORREF cref)
+  {
+    setRGB((OdInt32)ODGETRED(cref), (OdInt32)ODGETGREEN(cref), (OdInt32)ODGETBLUE(cref));
+  }
+  /** \details
+      Returns color as ODCOLORREF.
+  */
+  ODCOLORREF color() const
+  {
+    return ODRGB(r, g, b);
+  }
+};
+
+/** \details
+    This class represents RGB color cube.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiColorCube
+{
+  protected:
+    OdInt32    m_nBaseOffset;
+    OdGiIntRGB m_nGridDivs;
+    float      m_fIntensity;
+    OdInt32    m_nGridSize;
+    OdGiIntRGB m_nOffsets;
+    OdGiIntRGB m_nDims;
+  public:
+    OdGiColorCube(OdGiIntRGB nGridDivs = OdGiIntRGB(2, 2, 2), float fIntensity = 1.0f, OdInt32 nBaseOffset = 0)
+      : m_nBaseOffset(nBaseOffset)
+      , m_nGridDivs(nGridDivs)
+      , m_fIntensity(fIntensity)
+    {
+      validate();
+    }
+
+    /** \details
+        Returns base offset for color entries.
+    */
+    OdInt32 baseOffset() const { return m_nBaseOffset; }
+    /** \details
+        Returns color cube grid divisions count.
+    */
+    const OdGiIntRGB &gridDivisions() const { return m_nGridDivs; }
+    /** \details
+        Returns color cube intensity.
+    */
+    float intensity() const { return m_fIntensity; }
+    /** \details
+        Returns total number of color cube grid knots.
+    */
+    OdInt32 gridSize() const { return m_nGridSize; }
+    /** \details
+        Returns offsets of color components.
+    */
+    const OdGiIntRGB &offsets() const { return m_nOffsets; }
+    /** \details
+        Returns dimensions of color cube components.
+    */
+    const OdGiIntRGB &dimensions() const { return m_nDims; }
+
+    /** \details
+        Returns color for specified color cube knot.
+        \param nColor [in]  Index of color cube knot.
+    */
+    ODCOLORREF color(OdInt32 nColor) const;
+
+    /** \details
+        Compute closest color cube knot index.
+        \param cref [in]  Input color.
+    */
+    OdInt32 closestMatch(ODCOLORREF cref) const;
+
+    struct DtMatchResult
+    {
+      OdInt32 m_fitColors[4];
+      OdInt32 m_pattern[4];
+    };
+
+    /** \details
+        Compute set of closest color cube knot indexes.
+        \param cref [in]  Input color.
+        \param results [out]  Set of output colors and pattern offsets.
+        \remarks
+        Returns number of fit colors.
+    */
+    OdInt32 ditheredMatch(ODCOLORREF cref, DtMatchResult &results) const;
+  protected:
+    void validate();
+};
+
+/** \details
+    This class represents shades of gray ramp.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiGrayRamp
+{
+  protected:
+    OdInt32 m_nBaseOffset;
+    OdInt32 m_nGridDivs;
+    float m_fIntensity;
+    OdInt32 m_nDim;
+  public:
+    OdGiGrayRamp(OdInt32 nGridDivs = 2, float fIntensity = 1.0f, OdInt32 nBaseOffset = 0)
+      : m_nBaseOffset(nBaseOffset)
+      , m_nGridDivs(nGridDivs)
+      , m_fIntensity(fIntensity)
+    {
+      validate();
+    }
+
+    /** \details
+        Returns base offset for color entries.
+    */
+    OdInt32 baseOffset() const { return m_nBaseOffset; }
+    /** \details
+        Returns gray ramp divisions count.
+    */
+    OdInt32 gridDivisions() const { return m_nGridDivs; }
+    /** \details
+        Returns gray ramp intensity.
+    */
+    float intensity() const { return m_fIntensity; }
+    /** \details
+        Returns total number of gray ramp subdivisions.
+    */
+    OdInt32 dimension() const { return m_nDim; }
+
+    /** \details
+        Returns color for specified gray ramp subdivision.
+        \param nColor [in]  Index of gray ramp subdivision.
+    */
+    ODCOLORREF color(OdInt32 nColor) const;
+
+    /** \details
+        Compute closest gray ramp subdivision index.
+        \param cref [in]  Input color.
+    */
+    OdInt32 closestMatch(ODCOLORREF cref) const;
+  protected:
+    void validate();
+};
+
+/** \details
+    This class represents 256 colors palette.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiPalette
+{
+  protected:
+    struct PalEntry
+    {
+      ODCOLORREF m_color;
+      OdInt32 m_entryHelper;
+    };
+    typedef OdArray<PalEntry, OdMemoryAllocator<PalEntry> > PalEntryArray;
+  protected:
+    PalEntryArray m_palette;
+    OdSharedPtr<OdGiColorCube> m_pColorCube;
+    OdSharedPtr<OdGiGrayRamp> m_pGrayRamp;
+  public:
+    OdGiPalette()
+      : m_palette(256, 1)
+    {
+      initPalette();
+    }
+
+    /** \details
+        Returns palette color.
+        \param nColor [in]  Color index.
+    */
+    ODCOLORREF color(OdUInt32 nColor) const
+    {
+      return m_palette[nColor].m_color;
+    }
+    /** \details
+        Returns palette entry helper.
+        \param nColor [in]  Color index.
+    */
+    OdInt32 entryHelper(OdUInt32 nColor) const
+    {
+      return m_palette[nColor].m_entryHelper;
+    }
+
+    /** \details
+        Sets palette color.
+        \param nColor [in]  Color index.
+        \param color [in]  Input color.
+    */
+    void setColor(OdUInt32 nColor, ODCOLORREF color)
+    {
+      m_palette[nColor].m_color = color;
+    }
+    /** \details
+        Sets palette entry helper.
+        \param nColor [in]  Color index.
+        \param entryHelper [in]  New palette entry helper value.
+    */
+    void setEntryHelper(OdUInt32 nColor, OdInt32 entryHelper)
+    {
+      m_palette[nColor].m_entryHelper = entryHelper;
+    }
+
+    /** \details
+        Returns color cube linked with this palette.
+    */
+    const OdGiColorCube *colorCube() const
+    {
+      return m_pColorCube.get();
+    }
+    /** \details
+        Link color cube with this palette.
+    */
+    void setColorCube(const OdGiColorCube &colorCube)
+    {
+      resetColorCube(new OdGiColorCube(colorCube));
+    }
+    /** \details
+        Reset linkage of color cube with this palette.
+    */
+    void resetColorCube()
+    {
+      resetColorCube(NULL);
+    }
+
+    /** \details
+        Returns gray ramp linked with this palette.
+    */
+    const OdGiGrayRamp *grayRamp() const
+    {
+      return m_pGrayRamp.get();
+    }
+    /** \details
+        Link gray ramp with this palette.
+    */
+    void setGrayRamp(const OdGiGrayRamp &grayRamp)
+    {
+      resetGrayRamp(new OdGiGrayRamp(grayRamp));
+    }
+    /** \details
+        Reset linkage of gray ramp with this palette.
+    */
+    void resetGrayRamp()
+    {
+      resetGrayRamp(NULL);
+    }
+
+    /** \details
+        Setup palette for specified color cube.
+        \param cb [in]  Input color cube.
+    */
+    bool install(const OdGiColorCube &cb);
+    /** \details
+        Setup palette for specified gray ramp.
+        \param gr [in]  Input gray ramp.
+    */
+    bool install(const OdGiGrayRamp &gr);
+    /** \details
+        Setup palette as a clone of another palette.
+        \param pal2 [in]  Input palette.
+    */
+    bool install(const OdGiPalette &pal2);
+
+    /** \details
+        Compute closest palette color index.
+        \param cref [in]  Input color.
+        \param bThroughPal [in]  Skip usage of linked color cube and gray ramp in calculations.
+    */
+    OdInt32 closestMatch(ODCOLORREF cref, bool bThroughPal = false) const;
+
+    /** \details
+        Find start index of first available free block in palette.
+        \param blockSize [in]  Size of free block for search.
+    */
+    OdInt32 firstAvailableBlock(OdInt32 blockSize) const;
+
+    /** \details
+        Check does this palette is equal with another one.
+        \param pal2 [in]  Palette for check.
+    */
+    bool isEqualTo(const OdGiPalette &pal2) const;
+    /** \details
+        Remove equal sub-palette from current palette.
+        \param pal2 [in]  Palette for remove.
+    */
+    bool remove(const OdGiPalette &pal2);
+
+    /** \details
+        Clear palette.
+    */
+    void clear();
+  protected:
+    void initPalette();
+
+    void resetColorCube(OdGiColorCube *pColorCube);
+    void resetGrayRamp(OdGiGrayRamp *pGrayRamp);
+
+    void setColor(OdInt32 nColor, ODCOLORREF color);
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIPALETTE_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPathNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPathNode.h
new file mode 100755
index 0000000..4ebc8bc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPathNode.h
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIDRAWABLEPATHNODE_H_INCLUDED_
+#define __ODGIDRAWABLEPATHNODE_H_INCLUDED_
+
+
+class OdDbStub;
+ 
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODRX_ABSTRACT OdGiPathNode
+{
+public:
+  virtual const OdGiPathNode* parent() const = 0;
+
+  virtual OdDbStub* persistentDrawableId() const = 0;
+
+  virtual const OdGiDrawable* transientDrawable() const = 0;
+
+  virtual OdGsMarker selectionMarker() const = 0;
+};
+
+#endif // __ODGIDRAWABLEPATHNODE_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPerspectivePreprocessor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPerspectivePreprocessor.h
new file mode 100755
index 0000000..5893975
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPerspectivePreprocessor.h
@@ -0,0 +1,82 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GI_PERSPECT_PREP__
+#define __OD_GI_PERSPECT_PREP__
+
+#include "Gi/GiConveyorNode.h"
+#include "Gi/GiDeviation.h"
+
+#include "Ge/GeDoubleArray.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes>
+    This class preprocesses geometry before xforming it by 
+    perspective matrix.
+    Remarks.
+    Circles, arcs, ellipses, texts are tesselated, although for export tasks 
+    it may be more useful to switch arcs to nurbs curves.
+    
+    Polylines, polygons, meshes, shells, xlines, rays, and NURBS curves are passed through.
+    
+    Images and metafiles are not passed.
+*/
+class ODGI_EXPORT OdGiPerspectivePreprocessor : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiPerspectivePreprocessor);
+
+  /** \details
+    Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** \details
+    Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** \details
+    Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  /** \details
+  */
+  virtual void enable(bool enabled) = 0;
+
+  /** \details
+  */
+  virtual bool enabled() const = 0;
+};
+
+typedef OdSmartPtr<OdGiPerspectivePreprocessor> OdGiPerspectivePreprocessorPtr;
+
+#include "TD_PackPop.h"
+
+
+#endif // __OD_GI_PERSPECT_PREP__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlaneProjector.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlaneProjector.h
new file mode 100755
index 0000000..917e61a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlaneProjector.h
@@ -0,0 +1,112 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __ODGIPLANEPROJECTOR_H__
+#define __ODGIPLANEPROJECTOR_H__
+
+#include "Gi/GiConveyorNode.h"
+
+#include "TD_PackPush.h"
+
+/* This conveyor nodes works same as Xform with projection() transform (and in some cases use
+   projection() matrices for transform), but this transforms works faster and calculate geometry
+   normals correctly in contrast to Xform, so if you want projection to plane transformation, use
+   this classes instead of Xform with projection() transform matrix.
+*/
+
+class OdGePlane;
+
+/** \details
+    Optimized version of projection on XY plane (simply removes Z-coord).
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiXYProjector : public OdGiConveyorNode
+{
+protected:
+  OdGiXYProjector();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiXYProjector);
+
+  /** \details
+      Enables this conveyor node.
+  */
+  virtual void enable() = 0;
+  /** \details
+      Disables this conveyor node.
+  */
+  virtual void disable() = 0;
+  /** \details
+      Returns true if this conveyor node enabled and false elsewhere.
+  */
+  virtual bool isEnabled() const = 0;
+};
+
+typedef OdSmartPtr<OdGiXYProjector> OdGiXYProjectorPtr;
+
+/** \details
+    Project geometry onto specified plane.
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiPlaneProjector : public OdGiConveyorNode
+{
+protected:
+  OdGiPlaneProjector();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiPlaneProjector);
+
+  /** \details
+      Enables this conveyor node.
+  */
+  virtual void enable() = 0;
+  /** \details
+      Disables this conveyor node.
+  */
+  virtual void disable() = 0;
+  /** \details
+      Returns true if this conveyor node enabled and false elsewhere.
+  */
+  virtual bool isEnabled() const = 0;
+
+  /** \details
+      Sets new projection plane (default projection plane is same with XY plane).
+      \param plane [in]  New projection plane.
+  */
+  virtual void setPlane(const OdGePlane &plane) = 0;
+  /** \details
+      Returns current projection plane (default projection plane is same with XY plane).
+  */
+  virtual const OdGePlane &plane() const = 0;
+  /** \details
+      Returns current projection direction (default projection direction is same with vector Z-axis).
+  */
+  virtual const OdGeVector3d &projectionDirection() const = 0;
+};
+
+typedef OdSmartPtr<OdGiPlaneProjector> OdGiPlaneProjectorPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIPLANEPROJECTOR_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotGenerator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotGenerator.h
new file mode 100755
index 0000000..0bb7183
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotGenerator.h
@@ -0,0 +1,158 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GI_PLOTGENERATOR__
+#define __OD_GI_PLOTGENERATOR__
+
+#include "Gi/GiConveyorNode.h"
+
+#include "TD_PackPush.h"
+#include "Ps/PlotStyles.h"
+#include "Gs/GsExport.h"
+
+/** \details
+    This class is the base class for custom classes that implements software plot generation for OdGiConveyorGeometry objects.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiPlotGenerator : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiPlotGenerator);
+
+  /** \details
+    Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** \details
+    Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** \details
+    Sets the draw context associated with this object.
+    \param pDrawContext [in]  Pointer to the draw context.
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawContext) = 0;
+
+  /** \details
+    Enable/Disable plot generation.
+    \param bEnable [in]  Flag to set.
+  */
+  virtual void enable(bool bEnable) = 0;
+
+  /** \details
+    Returns true if and only if software plot generation is enabled.
+  */
+  virtual bool enabled() const = 0;
+
+  /** \details
+    Sets software plot generation output DPI.
+    \param dpi [in]  Value to set.
+  */
+  virtual void dot_per_inch(double dpi) = 0;
+  /** \details
+    Returns current software plot generation output DPI.
+  */
+  virtual double dot_per_inch() const = 0;
+
+  /** \details
+    Sets software plot generation output DPI and millimeters.
+    \param dpmm [in]  DPI in millimeters to set.
+  */
+  void dot_per_mm(double dpmm);
+  /** \details
+    Returns current software plot generation output DPI as millimeters.
+  */
+  double dot_per_mm() const;
+
+  /** \details
+    Sets current plot style.
+    \param psd [in]  Plot style to set.
+  */
+  virtual void setPlotStyle(const OdPsPlotStyleData& psd) = 0;
+
+  /** \details
+    Abstract interface to be used as output for polylineOut calls with extended style.
+  */
+  class ODGI_EXPORT PolylineOut
+  {
+    public:
+      /** \details
+        Abstract method to be called by plot generator for applications which supports extended styles.
+        \param pPoints [in]  Points in display coordinate system.
+        \param nPoints [in]  Count of points in array.
+        \param capStyle [in]  Style for start/end caps.
+        \param joinStyle [in]  Joins style.
+        \param fLwd [in]  Lineweight in pixels.
+        \remarks
+        Must return true if call is correctly processed. Implementation could return false if such
+        type of data cannot be processed. False instructs caller to process data oneself.
+      */
+      virtual bool plotGeneratorPolylineOut(const OdGePoint3d *pPoints, OdUInt32 nPoints,
+        OdPs::LineEndStyle capStyle, OdPs::LineJoinStyle joinStyle, double fLwd) = 0;
+  };
+  /** \details
+    Sets external interface for extended line style emulation.
+    \param pPolylineOut [in]  Pointer to implementation of PolylineOut interface.
+  */
+  virtual void setExternalPolylineOut(PolylineOut *pPolylineOut) = 0;
+  /** \details
+    Returns current interface for extended line style emulation.
+    \remarks
+    By default (until PolylineOut interface doesn't set) it is returns Null. This is means that
+    software plot generator will handle extended line style internally.
+  */
+  virtual PolylineOut *externalPolylineOut() const = 0;
+
+  class ODGI_EXPORT EllipseOut
+  {
+    public:
+      virtual bool plotGeneratorEllipseOut(const OdGeEllipArc3d& arc, double width) = 0;
+  };
+  virtual void setExternalEllipseOut(EllipseOut *pEllipseOut) = 0;
+  virtual EllipseOut *externalEllipseOut() const = 0;
+};
+
+inline void
+OdGiPlotGenerator::dot_per_mm(double dpmm)
+{
+  dot_per_inch(dpmm * 25.4);
+}
+
+inline double
+OdGiPlotGenerator::dot_per_mm() const
+{
+  return dot_per_inch() / 25.4;
+}
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiPlotGenerator object pointers.
+*/
+typedef OdSmartPtr<OdGiPlotGenerator> OdGiPlotGeneratorPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __OD_GI_PLOTGENERATOR__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotStyleDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotStyleDefs.h
new file mode 100755
index 0000000..8af19ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPlotStyleDefs.h
@@ -0,0 +1,309 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIPSDEFS_H__
+#define __ODGIPSDEFS_H__
+
+#include "TD_PackPush.h"
+
+#include "GiExport.h"
+#include "UInt8Array.h"
+#include "Gi/GiRasterImage.h"
+#include "Ps/PlotStyles.h"
+#include "Gi/GiLinetype.h"
+#include "HatchPattern.h"
+
+/** \details
+    This class represents PlotStyle linetypes definitions.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiPsLinetypes
+{
+  public:
+    /** \details
+        Type of definitions utilized by framework.
+    */
+    enum DefType
+    {
+      kPsDefs     = 0, // PlotStyle linetype definitions in internal format.
+      kGiDefs     = 1, // PlotStyle linetype definitions in Gi format.
+      kGDIDefs    = 2, // PlotStyle linetype definitions in Windows GDI-compatible format.
+      kOpenGLDefs = 4  // PlotStyle linetype definitions in OpenGL-compatible format.
+    };
+
+    /** \details
+        Structure represents PlotStyle linetype in internal format.
+    */
+    struct ODGI_EXPORT PsLinetypeDef
+    {
+      int    m_numDashes;      // Number of dashes in PlotStyle linetype.
+      double m_dashLength[10]; // Lengths of dashes and gaps in PlotStyle linetype.
+
+      /** \details
+          Returns length of PlotStyle linetype pattern.
+      */
+      double patternLength() const;
+    };
+    /** \details
+        Structure represents PlotStyle linetype in Windows GDI-compatible format.
+    */
+    struct ODGI_EXPORT PsLinetypeGDI
+    {
+      OdUInt32 m_numDashes;      // Number of dashes in PlotStyle linetype.
+      OdUInt32 m_dashLength[20]; // Lengths of dashes and gaps in PlotStyle linetype.
+
+      /** \details
+          Returns length of PlotStyle linetype pattern.
+      */
+      OdUInt32 patternLength() const;
+      /** \details
+          Clears number of dashes and dash lengths by zeroes.
+      */
+      void clean();
+    };
+    /** \details
+        Structure represents PlotStyle linetype in OpenGL-compatible format.
+    */
+    struct ODGI_EXPORT PsLinetypeOGL
+    {
+      OdUInt16 m_patternLength; // Linetype pattern factor (multiplier).
+      OdUInt16 m_pattern;       // 16-bit linetype pattern.
+    };
+  protected:
+    static const PsLinetypeDef g_psLinetypeDefs[OdPs::kLtpLast - 1];
+    OdArray<OdGiLinetype>      m_giLinetypeDefs;
+    PsLinetypeGDI              m_gdiLinetypeDef[OdPs::kLtpLast];
+    PsLinetypeOGL              m_oglLinetypeDef[OdPs::kLtpLast];
+    OdMutex                   *m_pMutex;
+    volatile bool              m_bIsInit[4];
+  public:
+    OdGiPsLinetypes(bool bInitialize = true, OdUInt32 nDefs = kGiDefs | kGDIDefs | kOpenGLDefs);
+    ~OdGiPsLinetypes();
+
+    /** \details
+        Checks does PlotStyle linetypes manager internal structures initialized.
+        \param nDefs [in]  Specifies type of definitions to check.
+    */
+    bool isInitialized(OdUInt32 nDefs = kPsDefs) const;
+    /** \details
+        Initializes PlotStyle linetype manager internal structures.
+        \param nDefs [in]  Specifies type of definitions to initialize.
+    */
+    void initialize(OdUInt32 nDefs = kPsDefs);
+    /** \details
+        Frees PlotStyle linetype manager internal structures.
+        \param nDefs [in]  Specifies type of definitions to uninitialize.
+    */
+    void uninitialize(OdUInt32 nDefs = kPsDefs | kGiDefs | kGDIDefs | kOpenGLDefs);
+
+    /** \details
+        Returns pointer onto set of PlotStyle linetype definitions in internal format.
+    */
+    const PsLinetypeDef *getPsDefinitions() const;
+    /** \details
+        Returns reference onto PlotStyle linetype definition in internal format.
+        \param psLtp [in]  Linetype index.
+    */
+    const PsLinetypeDef &getPsDefinition(OdPs::LineType psLtp) const;
+
+    /** \details
+        Returns reference onto array which consists from PlotStyle linetype definitions in Gi format.
+    */
+    const OdArray<OdGiLinetype> &getGiDefinitions() const;
+    /** \details
+        Returns reference onto PlotStyle linetype definition in Gi format.
+        \param psLtp [in]  Linetype index.
+    */
+    const OdGiLinetype &getGiDefinition(OdPs::LineType psLtp) const;
+
+    /** \details
+        Rasterize linetype into set of bytes.
+        \param psLtp [in]  Linetype index.
+        \param numRepetitions [in]  Number of linetype pattern repetitions.
+        \param ltpValue [in]  Value which will be set for enabled linetype pattern bytes.
+        \remarks
+        Background bytes (linetype gaps) will be drawn as zeroes.
+        Foreground bytes (linetype dashes) will be drawn using ltpValue.
+    */
+    OdUInt8Array rasterizeLinetype(OdPs::LineType psLtp, OdUInt32 numRepititions = 1, OdUInt8 ltpValue = 0xFF) const;
+
+    /** \details
+        Rasterize linetype into monochrome raster image.
+        \param psLtp [in]  Linetype index.
+        \param numRepetitions [in]  Number of linetype pattern repetitions.
+        \param numLevels [in]  Raster image height (each scanline will be created as copy of first scanline).
+        \param backgroundColor [in]  Background color (linetype gaps will be drawn using this color).
+        \param foregroundColor [in]  Foreground color (linetype dashes and dots will be drawn using this color).
+    */
+    OdGiRasterImagePtr rasterizeLinetypeImage(OdPs::LineType psLtp, OdUInt32 numRepititions = 1, OdUInt32 numLevels = 1,
+                                              ODCOLORREF backgroundColor = ODRGB(0, 0, 0),
+                                              ODCOLORREF foregroundColor = ODRGB(255, 255, 255)) const;
+
+    /** \details
+        Returns pointer onto set of PlotStyle linetype definitions in Windows GDI-compatible format.
+    */
+    const PsLinetypeGDI *getGDIDefinitions() const;
+    /** \details
+        Returns reference onto PlotStyle linetype definition in Windows GDI-compatible format.
+        \param psLtp [in]  Linetype index.
+    */
+    const PsLinetypeGDI &getGDIDefinition(OdPs::LineType psLtp) const;
+
+    /** \details
+        Returns pointer onto set of PlotStyle linetype definitions in OpenGL-compatible format.
+    */
+    const PsLinetypeOGL *getOpenGLDefinitions() const;
+    /** \details
+        Returns reference onto PlotStyle linetype definition in OpenGL-compatible format.
+        \param psLtp [in]  Linetype index.
+    */
+    const PsLinetypeOGL &getOpenGLDefinition(OdPs::LineType psLtp) const;
+  protected:
+    void internalInitGiLinetypes();
+    void internalInitGDILinetypes();
+    void internalInitOpenGLLinetypes();
+    OdGiRasterImagePtr internalMakeImage(const OdUInt8 *pPixels, OdUInt32 nWidth, OdUInt32 numLevels = 1,
+                                         ODCOLORREF backgroundColor = ODRGB(0, 0, 0),
+                                         ODCOLORREF foregroundColor = ODRGB(255, 255, 255)) const;
+  private:
+    void internalDebugMe();
+};
+
+/** \details
+    Returns PlotStyle linetypes manager.
+    \param nDefs [in]  Specifies type of definitions to initialize.
+*/
+ODGI_EXPORT OdGiPsLinetypes &odgiGetPsLinetypesManager(OdUInt32 nDefs = OdGiPsLinetypes::kPsDefs);
+
+/** \details
+    This class represents PlotStyle fillstyles definitions.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiPsFillstyles
+{
+  public:
+    /** \details
+        Type definition represents PlotStyle fillstyle in Windows GDI-compatible format.
+    */
+    typedef OdUInt16 PsFillstyleGDI[8];
+    /** \details
+        Type definition represents PlotStyle fillstyle in OpenGL-compatible format.
+    */
+    typedef OdUInt8 PsFillstyleOGL[128];
+  protected:
+    inline OdUInt32 fsCorr(OdPs::FillStyle fs) const { return fs - OdPs::kFsSolid; }
+    inline bool fsRigth(OdPs::FillStyle fs) const { return (fs >= OdPs::kFsSolid) && (fs < OdPs::kFsLast); }
+    static const PsFillstyleGDI g_gdiFillstyleDef[OdPs::kFsLast - OdPs::kFsSolid];
+    static const PsFillstyleOGL g_oglFillstyleDef[OdPs::kFsLast - OdPs::kFsSolid];
+  public:
+    OdGiPsFillstyles();
+    ~OdGiPsFillstyles();
+
+    /** \details
+        Fills array of PlotStyle fillstyle definitions in Gi format.
+        \param pPats [out]  Array of patterns to fill.
+        \param scale [in]  Patterns scale multiplier.
+        \param nFirst [in]  First PlotStyle fillstyle to fill.
+        \param nPats [in]  Number of PlotStyle fillstyles to fill.
+        \remarks
+        Returns pointer onto pPats patterns array.
+    */
+    const OdHatchPattern *getGiDefinitions(OdHatchPattern *pPats, double scale, OdUInt32 nFirst = OdPs::kFsSolid + 1, OdUInt32 nPats = OdPs::kFsLast - OdPs::kFsSolid - 1) const;
+    /** \details
+        Fills PlotStyle fillstyle definition.
+        \param psFs [in]  Fillstyle number.
+        \param pPat [out]  Reference onto pattern to fill.
+        \param scale [in]  Pattern scale multiplier.
+        \remarks
+        Returns reference onto pPat pattern definition.
+    */
+    const OdHatchPattern &getGiDefinition(OdPs::FillStyle psFs, OdHatchPattern &pPat, double scale) const;
+
+    /** \details
+        Rasterize fillstyle into set of bytes.
+        \param psFs [in]  Fillstyle number.
+        \param nOffsetX [in]  Horizontal pattern offset.
+        \param nOffsetY [in]  Vertical pattern offset.
+        \param nWidth [in]  Width of image to fill.
+        \param nHeight [in]  Height of image to fill.
+        \param fpValue [in]  Value which will be set for enabled fillstyle pattern bytes.
+        \remarks
+        Background bytes (fillstyle holes) will be drawn as zeroes.
+        Foreground bytes (fillstyle points) will be drawn using fpValue.
+    */
+    OdUInt8Array rasterizeFillstyle(OdPs::FillStyle psFs, OdUInt32 nOffsetX = 0, OdUInt32 nOffsetY = 0,
+                                    OdUInt32 nWidth = 32, OdUInt32 nHeight = 32, OdUInt8 fpValue = 0xFF) const;
+
+    /** \details
+        Rasterize fillstyle into monochrome raster image.
+        \param psFs [in]  Fillstyle number.
+        \param nOffsetX [in]  Horizontal pattern offset.
+        \param nOffsetY [in]  Vertical pattern offset.
+        \param nWidth [in]  Width of image to fill.
+        \param nHeight [in]  Height of image to fill.
+        \param backgroundColor [in]  Background color (fillstyle holes will be drawn using this color).
+        \param foregroundColor [in]  Foreground color (fillstyle points will be drawn using this color).
+    */
+    OdGiRasterImagePtr rasterizeFillstyleImage(OdPs::FillStyle psFs, OdUInt32 nOffsetX = 0, OdUInt32 nOffsetY = 0,
+                                               OdUInt32 nWidth = 32, OdUInt32 nHeight = 32,
+                                               ODCOLORREF backgroundColor = ODRGB(0, 0, 0),
+                                               ODCOLORREF foregroundColor = ODRGB(255, 255, 255)) const;
+
+    /** \details
+        Returns pointer onto set of PlotStyle fillstyle definitions in Windows GDI-compatible format.
+    */
+    const PsFillstyleGDI *getGDIDefinitions() const;
+    /** \details
+        Returns reference onto PlotStyle fillstyle definition in Windows GDI-compatible format.
+        \param psFs [in]  Fillstyle number.
+    */
+    const PsFillstyleGDI &getGDIDefinition(OdPs::FillStyle psFs) const;
+
+    /** \details
+        Returns pointer onto set of PlotStyle fillstyle definitions in OpenGL-compatible format.
+    */
+    const PsFillstyleOGL *getOpenGLDefinitions() const;
+    /** \details
+        Returns reference onto PlotStyle fillstyle definition in OpenGL-compatible format.
+        \param psFs [in]  Fillstyle number.
+    */
+    const PsFillstyleOGL &getOpenGLDefinition(OdPs::FillStyle psFs) const;
+  protected:
+    void internalFillHatchDef(OdPs::FillStyle psFs, OdHatchPattern &pPat, double scale) const;
+    OdGiRasterImagePtr internalMakeImage(const OdUInt8 *pPixels, OdUInt32 nWidth, OdUInt32 nHeight,
+                                         ODCOLORREF backgroundColor = ODRGB(0, 0, 0),
+                                         ODCOLORREF foregroundColor = ODRGB(255, 255, 255)) const;
+  private:
+    void internalDebugMe() const;
+};
+
+/** \details
+    Returns PlotStyle fillstyles manager.
+*/
+ODGI_EXPORT OdGiPsFillstyles &odgiGetPsFillstylesManager();
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIPSDEFS_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPolyline.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPolyline.h
new file mode 100755
index 0000000..bffbe1a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiPolyline.h
@@ -0,0 +1,155 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIPOLYLINE_H__
+#define __ODGIPOLYLINE_H__
+
+class OdGeVector3d;
+class OdGeLineSeg2d;
+class OdGeLineSeg3d;
+class OdGeCircArc2d;
+class OdGeCircArc3d;
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiExport.h"
+
+/** \details
+    This class implements the OdGi equivalent of an OdDbPolyline or "lightweight" polyline.
+    \remarks
+    Instances of this class are used to pass lightweight polyline data through the 
+    Teigha vectorization framework.
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiPolyline : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiPolyline);
+
+  enum SegType
+  {
+    kLine,        // Straight segment with length greater than 0.
+    kArc,         // Arc segment with length greater than 0.
+    kCoincident,  // Segment with 0 length.
+    kPoint,       // Polyline with a single vertex.
+    kEmpty        // No vertices are present.
+  };
+
+  /** \details
+      Returns the number of vertices in the entity.
+  */
+  virtual unsigned int numVerts() const = 0;
+
+  /** \details
+      Returns true if this polyline is closed, false otherwise. 
+  */
+  virtual bool isClosed() const = 0;
+
+  /** \details
+      Returns the normal vector for this entity.
+  */
+  virtual OdGeVector3d normal() const = 0;
+
+  /** \details
+      Returns the thickness for this entity.
+  */
+  virtual double thickness() const = 0;
+
+  /** \details
+      Returns the constant width for this entity.  
+  */
+  virtual double getConstantWidth() const = 0;
+
+  /** \details
+      Returns true if the vertices in this entity contain start and end width data, false otherwise.
+  */
+  virtual bool hasWidth() const = 0;
+
+  /** \details
+      Returns the PLINEGEN flag for this entity. If PLINEGEN is true,
+      linetype generation will be patterned across the entire polyline, rather than 
+      being done for each segment individually.
+  */
+  virtual bool hasPlinegen() const = 0;
+
+  /** \details
+      Returns the elevation for this entity.
+  */
+  virtual double elevation() const = 0;
+
+  /** \details
+      Returns the segment type at the specified index.
+
+      \sa
+      SegType
+  */
+  virtual SegType segType(unsigned int index) const = 0;
+  
+  /** \details
+  */
+  virtual void getLineSegAt(unsigned int index, OdGeLineSeg2d& ln) const = 0;
+
+  /** \details
+      Returns the line segment starting at the specified index.
+  */
+  virtual void getLineSegAt(unsigned int index, OdGeLineSeg3d& ln) const = 0;
+
+  /** \details
+      Returns the arc segment starting at the specified index.
+  */
+  virtual void getArcSegAt(unsigned int index, OdGeCircArc2d& arc) const = 0;
+
+  virtual void getArcSegAt(unsigned int index, OdGeCircArc3d& arc) const = 0;
+
+  /** \details
+      Returns a specified point from this entity.
+  */
+  virtual void getPointAt(unsigned int index, OdGePoint2d& pt) const = 0;
+
+  /** \details
+      Returns the bulge value for a specified point.
+  */
+  virtual double getBulgeAt(unsigned int index) const = 0;
+
+  /** \details
+      Returns the start and end widths for a specified point.
+  */
+  virtual void getWidthsAt(unsigned int index, double& startWidth,  double& endWidth) const = 0;
+
+  /** \details
+      Returns the original OdDbPolyline object from which this OdGiPolyline was 
+      created.
+  */
+  virtual OdRxObjectPtr getDbPolyline() const = 0;
+};
+
+typedef OdSmartPtr<OdGiPolyline> OdGiPolylinePtr;
+
+#include "TD_PackPop.h"
+
+#endif  // __ODGIPOLYLINE_H__
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiProceduralGenerator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiProceduralGenerator.h
new file mode 100755
index 0000000..5fed632
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiProceduralGenerator.h
@@ -0,0 +1,414 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// Procedural textures generator.
+
+#ifndef __ODGIPROCEDURALGENERATOR_H__
+#define __ODGIPROCEDURALGENERATOR_H__
+
+#include "RootExport.h"
+#include "GiExport.h"
+#include "CmColor.h"
+#include "UInt32Array.h"
+#include "GiImage.h"
+#include "GiMaterial.h"
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Protocol extension for OdGiProceduralGenerator.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiProceduralGeneratorPE : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiProceduralGeneratorPE);
+
+    OdGiProceduralGeneratorPE();
+
+    /** \details
+      Generate procedural texture.
+      Returns false if protocol extension not initialized or does not support current procedural texture type.
+      \param pTexture [in]  Procedural texture pointer.
+      \param image [out]  Output image.
+      \param renderCoef [in]  Texture detail multiplier. 1.0 - is most standard device value, 10.0 - for normal rendering.
+                     This value can be calculated from raster resolution.
+    */
+    virtual bool generateProceduralTexture(OdGiProceduralTexturePtr pTexture,
+                                           OdGiImageBGRA32 &image, double renderCoef = 1.0) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiProceduralGeneratorPE object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiProceduralGeneratorPE> OdGiProceduralGeneratorPEPtr;
+
+/** \details
+    Color gradient generator.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiGradientGenerator
+{
+  public:
+    /** \details
+        Type of color interpolation function (linear, exponential, inverted exponential, cosine).
+    */
+    enum InterpolationType
+    {
+      kLinearInterpolation = 0,
+      kExpInterpolation,
+      kInvExpInterpolation,
+      kCosInterpolation
+    };
+    /** \details
+        Color interval addressing mode.
+		\remarks
+        kClampMode Clamp color address coordinates to the [0.0, 1.0] range.
+        kWrapMode Repeat color address on every integer junction.
+    */
+    enum AddressMode
+    {
+      kClampMode = 0,
+      kWrapMode
+    };
+  protected:
+    OdUInt32Array m_colorGradient;
+    AddressMode m_addressMode;
+  public:
+    OdGiGradientGenerator();
+    OdGiGradientGenerator(const OdGiGradientGenerator &other);
+    ~OdGiGradientGenerator();
+
+    /** \details
+      Create gradient colors array, filled with black color.
+      \param nColors [in]  Count of colors in gradient array.
+    */
+    void createColorArray(OdUInt32 nColors);
+    /** \details
+      Create gradient colors array, filled with specified color.
+      \param color [in]  Color for all elements in array.
+      \param nColors [in]  Count of colors in gradient array.
+    */
+    void createColorArrayFilled(ODCOLORREF color, OdUInt32 nColors);
+    /** \details
+      Create gradient colors array from other colors array.
+      \param other [in]  Input colors array for copy from.
+    */
+    void copyGradient(const OdUInt32Array &other);
+    /** \details
+      Create gradient colors array from other colors array.
+      \param colors [in]  Linear array of colors.
+      \param nColors [in]  Count of colors in colors linear array.
+    */
+    void copyGradient(const ODCOLORREF *colors, OdUInt32 nColors);
+    /** \details
+      Create gradient from two input colors.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param nColors [in]  Number of color entries to be created in gradient colors array.
+      \param ipl [in]  Interpolation function.
+    */
+    void createGradient(ODCOLORREF color1, ODCOLORREF color2, OdUInt32 nColors,
+                        OdGiGradientGenerator::InterpolationType ipl = OdGiGradientGenerator::kLinearInterpolation);
+    /** \details
+      Create gradient from three input colors.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param color3 [in]  Third color.
+      \param nColors [in]  Number of color entries to be created in gradient colors array.
+      \param ipl [in]  Interpolation function.
+    */
+    void createGradient(ODCOLORREF color1, ODCOLORREF color2, ODCOLORREF color3, OdUInt32 nColors,
+                        OdGiGradientGenerator::InterpolationType ipl = OdGiGradientGenerator::kLinearInterpolation);
+    /** \details
+      Create gradient from three input colors.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param color3 [in]  Third color.
+      \param nColors [in]  Number of color entries to be created in gradient colors array.
+      \param ipl1 [in]  Interpolation function for interval between color1 and color2.
+      \param ipl2 [in]  Interpolation function for interval between color2 and color3.
+    */
+    void createGradient(ODCOLORREF color1, ODCOLORREF color2, ODCOLORREF color3, OdUInt32 nColors,
+                        OdGiGradientGenerator::InterpolationType ipl1, OdGiGradientGenerator::InterpolationType ipl2);
+    /** \details
+      Create gradient from four input colors.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param color3 [in]  Third color.
+      \param color4 [in]  Four color.
+      \param nColors [in]  Number of color entries to be created in gradient colors array.
+      \param ipl [in]  Interpolation function.
+    */
+    void createGradient(ODCOLORREF color1, ODCOLORREF color2, ODCOLORREF color3, ODCOLORREF color4, OdUInt32 nColors,
+                        OdGiGradientGenerator::InterpolationType ipl = OdGiGradientGenerator::kLinearInterpolation);
+    /** \details
+      Create gradient from four input colors.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param color3 [in]  Third color.
+      \param color4 [in]  Fourth color.
+      \param nColors [in]  Number of color entries to be created in gradient colors array.
+      \param ipl1 [in]  Interpolation function for interval between color1 and color2.
+      \param ipl2 [in]  Interpolation function for interval between color2 and color3.
+      \param ipl3 [in]  Interpolation function for interval between color3 and color4.
+    */
+    void createGradient(ODCOLORREF color1, ODCOLORREF color2, ODCOLORREF color3, ODCOLORREF color4, OdUInt32 nColors,
+                        OdGiGradientGenerator::InterpolationType ipl1, OdGiGradientGenerator::InterpolationType ipl2,
+                        OdGiGradientGenerator::InterpolationType ipl3);
+    /** \details
+      Create gradient from five input colors.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param color3 [in]  Third color.
+      \param color4 [in]  Fourth color.
+      \param color5 [in]  Fifth color.
+      \param nColors [in]  Number of color entries to be created in gradient colors array.
+      \param ipl [in]  Interpolation function.
+    */
+    void createGradient(ODCOLORREF color1, ODCOLORREF color2, ODCOLORREF color3, ODCOLORREF color4, ODCOLORREF color5, OdUInt32 nColors,
+                        OdGiGradientGenerator::InterpolationType ipl = OdGiGradientGenerator::kLinearInterpolation);
+    /** \details
+      Create gradient from five input colors.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param color3 [in]  Third color.
+      \param color4 [in]  Fourth color.
+      \param color5 [in]  Fifth color.
+      \param nColors [in]  Number of color entries to be created in gradient colors array.
+      \param ipl1 [in]  Interpolation function for interval between color1 and color2.
+      \param ipl2 [in]  Interpolation function for interval between color2 and color3.
+      \param ipl3 [in]  Interpolation function for interval between color3 and color4.
+      \param ipl4 [in]  Interpolation function for interval between color4 and color5.
+    */
+    void createGradient(ODCOLORREF color1, ODCOLORREF color2, ODCOLORREF color3, ODCOLORREF color4, ODCOLORREF color5, OdUInt32 nColors,
+                        OdGiGradientGenerator::InterpolationType ipl1, OdGiGradientGenerator::InterpolationType ipl2,
+                        OdGiGradientGenerator::InterpolationType ipl3, OdGiGradientGenerator::InterpolationType ipl4);
+
+    /** \details
+      Fill gradient range between from and to.
+      \param color [in]  Fill color.
+      \param from [in]  Start of range for fill.
+      \param to [in]  End of range for fill.
+    */
+    void fillInterval(ODCOLORREF color, double from = 0.0, double to = 1.0);
+    /** \details
+      Fill gradient range between from and to.
+      \param color [in]  Fill color.
+      \param from [in]  Start of range for fill.
+      \param to [in]  End of range for fill.
+    */
+    void fillInterval(ODCOLORREF color, OdUInt32 from, OdUInt32 to);
+    /** \details
+      Fill range of gradient colors array with another gradient.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param from [in]  Start of range for fill.
+      \param to [in]  End of range for fill.
+      \param ipl [in]  Interpolation function.
+    */
+    void generateInterval(ODCOLORREF color1, ODCOLORREF color2, double from = 0.0, double to = 1.0,
+                          OdGiGradientGenerator::InterpolationType ipl = OdGiGradientGenerator::kLinearInterpolation);
+    /** \details
+      Fill range of gradient colors array by another gradient.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param from [in]  Start of range for fill.
+      \param to [in]  End of range for fill.
+      \param ipl [in]  Interpolation function.
+    */
+    void generateInterval(ODCOLORREF color1, ODCOLORREF color2, OdUInt32 from, OdUInt32 to,
+                          OdGiGradientGenerator::InterpolationType ipl = OdGiGradientGenerator::kLinearInterpolation);
+
+    /** \details
+      Get count of colors in gradient colors array.
+    */
+    OdUInt32 colorsCount() const;
+    /** \details
+      Get color from gradient colors array.
+      \param nColor [in]  Index of color in array.
+    */
+    ODCOLORREF colorAt(OdUInt32 nColor) const;
+    /** \details
+      Get color from gradient colors array.
+      \param at [in]  Color coordinate (0.0 equals 0 in array; 1.0 equals colorsCount() - 1 in array).
+    */
+    ODCOLORREF colorAt(double at) const;
+    /** \details
+      Test whether gradient is initialized.
+    */
+    bool isInitialized() const;
+    /** \details
+      Get reference to array of gradient colors.
+    */
+    const OdUInt32Array &asArray() const;
+
+    /** \details
+      Set addressing mode.
+      \param mode [in]  New addressing mode.
+    */
+    void setAddressMode(OdGiGradientGenerator::AddressMode mode);
+    /** \details
+      Get addressing mode.
+    */
+    OdGiGradientGenerator::AddressMode addressMode() const;
+
+    /** \details
+      Interpolate color between color1 and color2.
+      \param color1 [in]  First color.
+      \param color2 [in]  Second color.
+      \param at [in]  Interpolation coordinate (0.0 - 1.0 for range without additional addressing).
+      \param to [in]  End of range for fill.
+      \param ipl [in]  Interpolation function.
+      \param mode [in]  Addressing mode.
+    */
+    static ODCOLORREF interpolateColor(ODCOLORREF color1, ODCOLORREF color2, double at,
+                                       OdGiGradientGenerator::InterpolationType ipl = OdGiGradientGenerator::kLinearInterpolation,
+                                       OdGiGradientGenerator::AddressMode mode = OdGiGradientGenerator::kWrapMode);
+
+    const OdGiGradientGenerator &operator =(const OdGiGradientGenerator &other);
+
+    static OdGiGradientGenerator createSpectrumGradient(OdUInt32 nColors, OdUInt8 alpha = 0);
+
+    void appendGradient(const OdGiGradientGenerator &other);
+    void operator +=(const OdGiGradientGenerator &other);
+    friend OdGiGradientGenerator operator +(const OdGiGradientGenerator &g1, const OdGiGradientGenerator &g2);
+  protected:
+    /** \details
+      inVal addressing.
+    */
+    OdUInt32 clampToRange(OdUInt32 inVal) const;
+    /** \details
+      inVal addressing.
+    */
+    OdUInt32 clampToRange(double inVal) const;
+    /** \details
+      Convert inVal to [0.0 - 1.0] range.
+    */
+    double toDoubleRange(OdUInt32 inVal) const;
+
+    /** \details
+      Linear interpolation function.
+    */
+    static double linterp(double a, double b, double t);
+    /** \details
+      Exponential interpolation function.
+    */
+    static double einterp(double a, double b, double t);
+    /** \details
+      Cosine interpolation function.
+    */
+    static double cinterp(double a, double b, double t);
+    /** \details
+      Inverted exponential interpolation function.
+    */
+    static double ieinterp(double a, double b, double t);
+};
+
+/** \details
+    Procedural textures generator.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiProceduralGenerator : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiProceduralGenerator);
+
+    // High-level functions
+
+    /** \details
+      Generate procedural texture.
+      Returns false if protocol extension not initialized or no support for current procedural texture type.
+      \param pTexture [in]  Procedural texture pointer.
+      \param image [out]  Output image.
+      \param renderCoef [in]  Texture detail multiplier. 1.0 - most standard device value, 10.0 - normal rendering.
+                     This value can be calculated from raster resolution.
+    */
+    virtual bool generateProceduralTexture(OdGiProceduralTexturePtr pTexture,
+                                           OdGiImageBGRA32 &image, double renderCoef = 1.0) = 0;
+
+    /** \details
+      Generate procedural wood texture.
+      \param color1 [in]  First wood texture color.
+      \param color2 [in]  Second wood texture color.
+      \param radialNoise [in]  Radial noise amount.
+      \param axialNoise [in]  Axial noise amount.
+      \param grainThickness [in]  Thickness of wood grains.
+      \param image [out]  Output image.
+      \param renderCoef [in]  Texture detail multiplier. 1.0 - most standard device value, 10.0 - normal rendering.
+                     This value can be calculated from raster resolution.
+    */
+    virtual void generateProceduralWood(OdGiPixelBGRA32 color1, OdGiPixelBGRA32 color2, double radialNoise, double axialNoise, double grainThickness,
+                                        OdGiImageBGRA32 &image, double renderCoef = 1.0) = 0;
+    /** \details
+      Generate procedural marble texture.
+      \param veinColor [in]  Color of marble veins.
+      \param veinSpacing [in]  Distance between veins multiplier.
+      \param veinWidth [in]  Marble veins width multiplier.
+      \param image [out]  Output image.
+      \param renderCoef [in]  Texture detail multiplier. 1.0 - most standard device value, 10.0 - normal rendering.
+                     This value can be calculated from raster resolution.
+    */
+    virtual void generateProceduralMarble(OdGiPixelBGRA32 stoneColor, OdGiPixelBGRA32 veinColor, double veinSpacing, double veinWidth,
+                                          OdGiImageBGRA32 &image, double renderCoef = 1.0) = 0;
+
+    // Low-level functions
+
+    /** \details
+      Set color gradient. 
+	  
+	  \remarks
+	  If gradient is not set up, it will be generated in generateProceduralXXX
+      functions. This function may be called before a generateProceduralXXX call for changing palettes
+      in procedural texture generation.
+    */
+    virtual void setColorGradient(const OdGiGradientGenerator &gradient) = 0;
+    /** \details
+      Get color gradient.
+    */
+    virtual const OdGiGradientGenerator &colorGradient() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiProceduralGenerator object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiProceduralGenerator> OdGiProceduralGeneratorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIPROCEDURALGENERATOR_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImage.h
new file mode 100755
index 0000000..20e8cd9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImage.h
@@ -0,0 +1,484 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_ODGIRASTERIMAGE_H_
+#define _OD_ODGIRASTERIMAGE_H_
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents a raster image within the Teigha vectorization framework.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiRasterImage : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiRasterImage);
+
+  enum Units
+  {
+    kNone = 0,
+    kMillimeter,
+    kCentimeter,
+    kMeter,
+    kKilometer,
+    kInch,
+    kFoot,
+    kYard,
+    kMile,
+    kMicroinches,
+    kMils,
+    kAngstroms,
+    kNanometers,
+    kMicrons,
+    kDecimeters,
+    kDekameters,
+    kHectometers,
+    kGigameters,
+    kAstronomical,
+    kLightYears,
+    kParsecs     
+  };
+
+  enum ImageSource
+  {
+    kUndefinedSource = -1, // Flag not set (unknown source)
+    kFromDwg         = 0,  // Raster image loaded from raster image definition
+    kFromOleObject   = 1,  // Raster image generated from ole data source
+    kFromRender      = 2,  // Raster image generated from rendering
+
+    kFromUnderlay    = 10, // Raster image is part of underlay
+    kFromImageBGRA32 = 11, // Raster image wraps OdGiImageBGRA32 image
+
+    // Aliases
+    kFromPdfUnderlay = kFromOleObject, // Raster image generated from PdfUnderlay
+    kFromFile        = kFromDwg        // Raster image generated from disk file
+  };
+
+  enum TransparencyMode
+  {
+    kTransparencyDef  = -1, // Default for native raster image (alpha 0 - transparent, 1-255 opaque)
+    kTransparencyOff  = 0,  // Alpha ignored for 32bpp formats
+    kTransparency1Bit = 1,  // Alpha 0-254 transparent, 255 opaque
+    kTransparency8Bit = 2   // Complete alpha level support for 32bpp formats
+  };
+
+  typedef struct tagPixelFormatInfo
+  {
+    OdUInt8 redOffset;
+    OdUInt8 numRedBits;
+    OdUInt8 greenOffset;
+    OdUInt8 numGreenBits;
+    OdUInt8 blueOffset;
+    OdUInt8 numBlueBits;
+    OdUInt8 alphaOffset;
+    OdUInt8 numAlphaBits;
+    OdUInt8 bitsPerPixel;
+
+    bool operator ==(const struct tagPixelFormatInfo& other) const
+    {
+      return (redOffset == other.redOffset) && (greenOffset == other.greenOffset) &&
+        (blueOffset == other.blueOffset) && (alphaOffset == other.alphaOffset) && (bitsPerPixel == other.bitsPerPixel) &&
+        (numRedBits == other.numRedBits) && (numGreenBits == other.numGreenBits) && (numBlueBits == other.numBlueBits) &&
+        (numAlphaBits == other.numAlphaBits);
+    }
+
+    tagPixelFormatInfo()
+      : redOffset(0)
+      , numRedBits(0)
+      , greenOffset(0)
+      , numGreenBits(0)
+      , blueOffset(0)
+      , numBlueBits(0)
+      , alphaOffset(0)
+      , numAlphaBits(0)
+      , bitsPerPixel(0)
+    {}
+
+    /** \details
+      Returns true if and only if the pixel format of this RasterImage object is RGB.
+    */
+    bool isRGB() const
+    {
+      return bitsPerPixel == 24 && 
+        redOffset == 0 && greenOffset == 8 && blueOffset == 16 && numRedBits == 8 && numGreenBits == 8 && numBlueBits == 8;
+    }
+
+    /** \details
+      Sets the pixel format of this RasterImage object to RGB.
+      \note
+      No palette conversion is performed.
+    */
+    void setRGB()
+    {
+      bitsPerPixel = 24;
+      redOffset    = 0;
+      greenOffset  = 8;
+      blueOffset   = 16;
+      numRedBits   = 8;
+      numGreenBits = 8;
+      numBlueBits  = 8;
+    }
+
+    /** \details
+      Returns true if and only if the pixel format of this RasterImage object is BGR.
+    */
+    bool isBGR() const
+    {
+      return bitsPerPixel == 24 && 
+        redOffset == 16 && greenOffset == 8 && blueOffset == 0 && numRedBits == 8 && numGreenBits == 8 && numBlueBits == 8;
+    }
+
+    /** \details
+      Sets the pixel format the pixel format of this RasterImage object to BGR.
+      \note
+      No palette conversion is performed.
+    */
+    void setBGR()
+    {
+      bitsPerPixel = 24;
+      redOffset    = 16;
+      greenOffset  = 8;
+      blueOffset   = 0;
+      numRedBits   = 8;
+      numGreenBits = 8;
+      numBlueBits  = 8;
+    }
+
+    /** \details
+      Returns true if and only if the pixel format of this RasterImage object is 16 bit BGR.
+    */
+    bool is16bitBGR() const
+    {
+      return bitsPerPixel == 16 && 
+        redOffset == 10 && greenOffset == 5 && blueOffset == 0 && numRedBits == 5 && numGreenBits == 5 && numBlueBits == 5;
+    }
+
+    /** \details
+      Sets the pixel format of this RasterImage object to 16 bit BGR.
+      \note
+      No palette conversion is performed.
+    */
+    void set16bitBGR()
+    {
+      bitsPerPixel = 16;
+      redOffset    = 10;
+      greenOffset  = 5;
+      blueOffset   = 0;
+      numRedBits   = 5;
+      numGreenBits = 5;
+      numBlueBits  = 5;
+    }
+
+    /** \details
+      Returns true if and only if the pixel format of this RasterImage object is RGBA.
+    */
+    bool isRGBA() const
+    {
+      return bitsPerPixel == 32 && alphaOffset == 24 && numAlphaBits == 8 &&
+        redOffset == 0 && greenOffset == 8 && blueOffset == 16 && numRedBits == 8 && numGreenBits == 8 && numBlueBits == 8;
+    }
+
+    /** \details
+      Sets the pixel format of this RasterImage object to RGBA.
+      \note
+      No palette conversion is performed.
+    */
+    void setRGBA()
+    {
+      bitsPerPixel = 32;
+      alphaOffset  = 24;
+      numAlphaBits = 8;
+      redOffset    = 0;
+      greenOffset  = 8;
+      blueOffset   = 16;
+      numRedBits   = 8;
+      numGreenBits = 8;
+      numBlueBits  = 8;
+    }
+
+    /** \details
+      Returns true if and only if the pixel format of this RasterImage object is BGRA.
+    */
+    bool isBGRA() const
+    {
+      return bitsPerPixel == 32 && alphaOffset == 24 && numAlphaBits == 8 &&
+        redOffset == 16 && greenOffset == 8 && blueOffset == 0 && numRedBits == 8 && numGreenBits == 8 && numBlueBits == 8;
+    }
+
+    /** \details
+      Sets the pixel format of this RasterImage object to BGRA.
+      \note
+      No palette conversion is performed.
+    */
+    void setBGRA()
+    {
+      bitsPerPixel = 32;
+      alphaOffset  = 24;
+      numAlphaBits = 8;
+      redOffset    = 16;
+      greenOffset  = 8;
+      blueOffset   = 0;
+      numRedBits   = 8;
+      numGreenBits = 8;
+      numBlueBits  = 8;
+    }
+  } PixelFormatInfo;
+
+  /** \details
+    Returns the image width in pixels of this RasterImage object.
+  */
+  virtual OdUInt32 pixelWidth() const = 0;
+
+  /** \details
+    Returns the image height in pixels of this RasterImage object.
+  */
+  virtual OdUInt32 pixelHeight() const = 0;
+
+  /** \details
+    Returns the default image resolution in pixels per unit of this RasterImage object.
+
+    \param xPelsPerUnit [out]  Receives the pixels per unit value (x direction).
+    \param yPelsPerUnit [out]  Receives the pixels per unit value (y direction).
+
+    \remarks
+    If the returned value is kNone, then xPelsPerUnit and yPelsPerUnit are not set.
+  */
+   virtual Units defaultResolution(double& xPelsPerUnit, double& yPelsPerUnit) const;
+
+  /** \details
+    Returns the number of bits per pixel used for colors by this RasterImage object.
+  */
+  virtual OdUInt32 colorDepth() const = 0;
+
+  /** \details
+    Returns the number of colors in the palette of this RasterImage object.
+  */
+  virtual OdUInt32 numColors() const = 0;
+
+  /** \details
+    Returns the index of transparent color in the image.
+    \remarks
+    If there is no transparent color, -1 should be returned.
+    
+    \note
+    The default implementation of this function returns -1.
+  */
+  virtual int transparentColor() const;
+
+  /** \details
+    Returns the color for the specified index, from the palette of this RasterImage object.
+    \param colorIndex [in]  Color index.
+  */
+  virtual ODCOLORREF color(OdUInt32 colorIndex) const = 0;
+
+  /** \details
+    Returns the size (in bytes) of the palette data of this RasterImage object.
+  */
+  virtual OdUInt32 paletteDataSize() const = 0;
+
+  /** \details
+    Returns the palette in BMP format of this RasterImage object.
+    \param bytes [out]  Receives the palette data.
+    
+    \note
+    It is up to the caller to allocate sufficient memory for the palette data.
+  */
+  virtual void paletteData(OdUInt8* bytes) const = 0;
+
+  /** \details
+    Returns the scan line size of this RasterImage object.
+    
+    \remarks
+    This function returns the number of bytes between the beginning of scan line N and
+    the beginning of scan line N+1 (taking into account any padding that is added to the 
+    end of the scan line).
+  */
+  virtual OdUInt32 scanLineSize() const;
+
+  /** \details
+    Returns the specified set of scanlines in BMP format from this RasterImage object,
+    or the pixel data in BMP format for this RasterImage object.
+
+    \param scnLines [out]  Receives the scan line data.
+    \param firstScanline [in]  Index of first scanline to retrieve.
+    \param numLines [in]  Number of scanlines to retrieve.
+
+    \remarks
+
+    * The number of accessible scanlines is equal to value returned by pixelHeight().
+    * The number of accessible bytes in a scanline is equal to the value returned by scanLineSize().
+    * The scanline returned by firstScanline == 0 is the first scanline in the image.
+    * The scanline returned by firstScanline == (pixelHeight() - 1) is the last scanline in the image.
+
+    \note
+    It us up to the caller to allocate sufficient memory for the scan line data.
+
+    \note
+    Implementation of this function with no arguments is optional; NULL can be returned 
+    if it is inconvenient to implement. The caller must take 
+    into account that the return value can be NULL.
+  */
+  virtual const OdUInt8* scanLines() const = 0;
+  virtual void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const = 0;
+
+  /** \details
+    Returns the pixel format for this RasterImage object.
+    
+    \note
+    This function returns the pixel format of the palette,
+    unless there is no palette, in which case it returns
+    the pixel format of the image itself.
+  */
+  virtual PixelFormatInfo pixelFormat() const = 0;
+
+  /** \details
+    Returns the scan lines alignment, in bytes, for this RasterImage object.
+    Example:
+    scanLinesAlignment() returns 4 for Windows BMP.
+  */
+  virtual OdUInt32 scanLinesAlignment() const = 0;
+
+  /** \details
+    Returns image source.
+  */
+  virtual ImageSource imageSource() const;
+
+  /** \details
+    Returns transparency mode for 32bpp formats.
+  */
+  virtual TransparencyMode transparencyMode() const;
+
+  /** \details
+    Sets image source. Returns image with new image source.
+    \param source [in]  New image source value.
+  */
+  OdSmartPtr<OdGiRasterImage> changeImageSource(ImageSource source);
+
+  /** \details
+    Sets transparency mode for 32bpp formats. Returns image with new transparency mode.
+    \param mode [in]  New transparency mode.
+  */
+  OdSmartPtr<OdGiRasterImage> changeTransparencyMode(TransparencyMode mode);
+
+  /** \details
+    Returns the size of a single scan line in BMP format for this RasterImage object.
+    \param pixelWidth [in]  Image width in pixels.
+    \param colorDepth [in]  Number of bits per pixel.
+  */
+  static OdUInt32 calcBMPScanLineSize(OdUInt32 pixelWidth, int colorDepth);
+
+  /** \details
+    Returns the 32 bit mask for requested number of color bits and offset.
+    \param numColorBits [in]  Number of color bits.
+    \param colorOffset [in]  Offset of color bits.
+  */
+  static OdUInt32 calcColorMask(OdUInt8 numColorBits, OdUInt8 colorOffset = 0);
+
+  /** \details
+    Converts this raster image as specified.
+    \param convertPaletteToRGB [in]  Color is converted to RGB if and only if true.
+    \param brightness [in]  Image brightness [0 .. 100].
+    \param fade [in]  Image fade value [0 .. 100].
+    \param backgroundColor [in]  Background color.
+    \param flipX [in]  Image is flipped about X-axis if and only if true.
+    \param flipY [in]  Image is flipped about Y-axis if and only if true.
+    \param rotate90 [in]  Image is rotated 90� if and only if true.
+    \param pDestDesc [in]  Pointer to an OdGiRasterImageDesc object to receive the image parameters.
+    \param transparency [in]  Image is transparent if true.
+    \remarks
+    Returns a SmartPointer to the converted image.
+  */
+  OdSmartPtr<OdGiRasterImage> convert(bool convertPaletteToRGB,
+    double brightness = 50.0, double contrast = 50.0, double fade = 0.0, ODCOLORREF backgroundColor = 0,
+    bool flipX = false, bool flipY = false, bool rotate90 = false,
+    const OdGiRasterImage* pDestDesc = 0,
+    bool transparency = false) const;
+
+  /** \details
+    Crops this raster image by rectangle.
+    The format of returned raster image is identical to format of source raster image
+
+    \param x [in] X-coordinate of start point
+    \paramy [in] Y-coordinate of start point
+    \paramwidth [in] Width of the crop rectangle
+    \paramheight [in] Height of the crop rectangle
+    \remarks 
+    All arguments are in pixels
+  */
+  virtual OdSmartPtr<OdGiRasterImage> crop(OdUInt32 x, OdUInt32 y, OdUInt32 width, OdUInt32 height) const;
+
+  /** \details
+    Returns user-end implementation of raster image.
+    \remarks
+    If doesn't overrided by user-end raster image implementation always returns null.
+  */
+  virtual void *imp() const;
+};
+
+typedef OdSmartPtr<OdGiRasterImage> OdGiRasterImagePtr;
+
+/** \details
+    This interface simply extends GiRasterImage to set image source and transparency mode values.
+    If raster image could be casted to this interface, values will be setted within this interface,
+    elsewhere raster image wrapper will be created to reset this values.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiRasterImageParam : public OdGiRasterImage
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiRasterImageParam);
+
+  enum ParamType
+  {
+    kImageSource      = (1 << 0),
+    kTransparencyMode = (1 << 1)
+  };
+
+  /** \details
+    Returns ParamType bitflags with which parameters are supported by this interface.
+  */
+  virtual OdUInt32 supportedParams() const = 0;
+
+  /** \details
+    Sets image source.
+    \param source [in]  New image source value.
+  */
+  virtual void setImageSource(ImageSource source) { }
+
+  /** \details
+    Sets image transparency mode.
+    \param mode [in]  New transparency mode value.
+  */
+  virtual void setTransparencyMode(TransparencyMode mode) { }
+};
+
+typedef OdSmartPtr<OdGiRasterImageParam> OdGiRasterImageParamPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _OD_ODGIRASTERIMAGE_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImageLoader.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImageLoader.h
new file mode 100755
index 0000000..8b3c04c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterImageLoader.h
@@ -0,0 +1,78 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIRASTERIMAGELOADER_H__
+#define __ODGIRASTERIMAGELOADER_H__
+
+#include "GiExport.h"
+#include "RxObject.h"
+#include "GiRasterImage.h"
+#include "DbBaseHostAppServices.h"
+
+#include "TD_PackPush.h"
+
+class OdGiContext;
+
+/** \details
+    Protocol extension for OdGiRasterImageLoader.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiRasterImageLoaderPE : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiRasterImageLoaderPE);
+
+    OdGiRasterImageLoaderPE();
+
+    virtual OdGiRasterImagePtr loadRasterImage(const OdString &fileName, OdDbBaseDatabase* pDb, OdDbBaseHostAppServices::FindFileHint hint = OdDbBaseHostAppServices::kDefault) = 0;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiRasterImageLoaderPE object pointers.
+*/
+typedef OdSmartPtr<OdGiRasterImageLoaderPE> OdGiRasterImageLoaderPEPtr;
+
+/** \details
+    Loads OdGiRasterImage from file.
+    Library: TD_Gi
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiRasterImageLoader : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiRasterImageLoader);
+
+    OdGiRasterImageLoader();
+
+    virtual OdGiRasterImagePtr loadRasterImage(const OdString &fileName, const OdGiContext &giCtx, OdDbBaseHostAppServices::FindFileHint hint = OdDbBaseHostAppServices::kDefault);
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdGiRasterImageLoader object pointers.
+*/
+typedef OdSmartPtr<OdGiRasterImageLoader> OdGiRasterImageLoaderPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIRASTERIMAGELOADER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterWrappers.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterWrappers.h
new file mode 100755
index 0000000..1c890e8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRasterWrappers.h
@@ -0,0 +1,516 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_RASTER_WRAPPERS__
+#define __OD_GI_RASTER_WRAPPERS__
+
+#include "Gi/GiExport.h"
+#include "Gi/GiRasterImage.h"
+#include "Gi/GiImage.h"
+#include "UInt8Array.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is a dummy implementation of the OdGiRasterImage interface.
+
+    \remarks
+    This class is intended to be used to preset image parameters for 
+    OdDbRasterImageDef objects without the actual loading of raster image files.
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiRasterImageDesc : public OdGiRasterImageParam
+{
+  OdUInt32                          m_pixelWidth, m_pixelHeight, m_colorDepth, m_palSize, m_alignment;
+  OdGiRasterImage::PixelFormatInfo  m_pixFmt;
+  Units                             m_units;
+  double                            m_xPelsPerUnit, m_yPelsPerUnit;
+  OdUInt8*                          m_pPal;
+  OdGiRasterImage::ImageSource      m_imageSource;
+  OdGiRasterImage::TransparencyMode m_transparencyMode;
+public:
+  OdGiRasterImageDesc();
+  virtual ~OdGiRasterImageDesc();
+
+  /** \details
+    Creates an OdGiRasterImage object with the specified parameters. 
+    \param pixelWidth [in]  Image width in pixels.
+    \param pixelHeight [in]  Image height in pixels.
+    \param colorDepth [in]  Number of bits per pixel used for colors.
+    \param units [in]  Units / pixel.
+    \param xPelsPerUnit [in]  Pixels per unit value ( x direction ).
+    \param yPelsPerUnit [in]  Pixels per unit value ( y direction ).
+    \param pSourceImage [in]  Source raster image to copy parameters from.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  static OdGiRasterImagePtr createObject(OdUInt32 pixelWidth, OdUInt32 pixelHeight, Units units = kNone, double xPelsPerUnit = 0.0, double yPelsPerUnit = 0.0);
+  static OdGiRasterImagePtr createObject(OdUInt32 pixelWidth, OdUInt32 pixelHeight, OdUInt32 colorDepth, Units units = kNone, double xPelsPerUnit = 0.0, double yPelsPerUnit = 0.0);
+  static OdGiRasterImagePtr createObject(const OdGiRasterImage *pSourceImage);
+
+  /** \details
+    Copy parameters from original OdGiRasterImage object.
+    \param pSourceImage [in]  Pointer to the original image object.
+  */
+  void setFrom(const OdGiRasterImage *pSourceImage);
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+
+  OdUInt32 pixelWidth() const;
+  OdUInt32 pixelHeight() const;
+  OdUInt32 colorDepth() const;
+  OdUInt32 numColors() const;
+  ODCOLORREF color(OdUInt32 colorIndex) const;
+  OdUInt32 paletteDataSize() const;
+  void paletteData(OdUInt8* bytes) const;
+  OdUInt32 scanLineSize() const;
+  const OdUInt8* scanLines() const;
+  void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+  PixelFormatInfo pixelFormat() const;
+  OdUInt32 scanLinesAlignment() const;
+  Units defaultResolution(double& xPelsPerUnit, double& yPelsPerUnit) const;
+
+  /** \details
+    Sets the image width in pixels of this RasterImageDesc object.
+    \param pixelWidth [in]  Pixel width.
+  */
+  void setPixelWidth(OdUInt32 pixelWidth);
+  /** \details
+    Sets the image height in pixels of this RasterImageDesc object.
+    \param pixelHeight [in]  Pixel height.
+  */
+  void setPixelHeight(OdUInt32 pixelHeight);
+
+  /** \details
+    Sets the number of bits per pixel used for colors by this RasterImageDesc object.
+    \param colorDepth [in]  Color depth.
+  */
+  void setColorDepth(OdUInt32 colorDepth);
+
+  OdGiRasterImage::PixelFormatInfo& pixelFormat();
+
+  /** \details
+    Sets the palette in BMP format for this RasterImageDesc object.
+    \param paletteData [in]  Palette data.
+    \param paletteSize [in]  Palette size in bytes.
+  */
+  void setPalette(OdUInt32 paletteSize, OdUInt8* paletteData);
+
+  /** \details
+    Sets the scan lines alignment, in bytes, for this RasterImage object.
+    \param alignment [in]  Scan line alignment.
+    Example:
+    Alignment is 4 for Windows BMP.
+  */
+  void setScanLinesAlignment(OdUInt32 alignment);
+
+  /** \details
+    Sets the default raster image resolution for this RasterImage object.
+    \param units [in]  Units / pixel.
+    \param xPelsPerUnit [in]  Pixels per unit value ( x direction ).
+    \param yPelsPerUnit [in]  Pixels per unit value ( y direction ).
+  */
+  void setDefaultResolution(Units units, double xPelsPerUnit, double yPelsPerUnit);
+
+  OdUInt32 supportedParams() const;
+  OdGiRasterImage::ImageSource imageSource() const;
+  void setImageSource(OdGiRasterImage::ImageSource source);
+  OdGiRasterImage::TransparencyMode transparencyMode() const;
+  void setTransparencyMode(OdGiRasterImage::TransparencyMode mode);
+};
+
+class OdGiImageBGRA32;
+
+/** \details
+    Emulates OdGiImageBGRA32 within OdGiRasterImage interface.
+    \remarks
+    Stores only pointer to original image, not a SmartPointer, so deletion of original image before
+    this class may cause access violation error.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiRasterImageBGRA32 : public OdGiRasterImageParam
+{
+protected:
+  OdGiImageBGRA32 *m_pBGRAImage;
+  OdGiRasterImage::TransparencyMode m_transparencyMode;
+public:
+  OdGiRasterImageBGRA32();
+  virtual ~OdGiRasterImageBGRA32();
+  
+  /** \details
+    Creates an OdGiRasterImage object with the specified parameters.
+    \param pImage [in]  Input BGRA32 image.
+    \param transparencyMode [in]  Transparency mode.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  static OdGiRasterImagePtr createObject(OdGiImageBGRA32 *pImage, OdGiRasterImage::TransparencyMode transparencyMode = OdGiRasterImage::kTransparency8Bit);
+
+  OdUInt32 pixelWidth() const;
+  OdUInt32 pixelHeight() const;
+  OdUInt32 colorDepth() const;
+  OdUInt32 numColors() const;
+  ODCOLORREF color(OdUInt32 colorIndex) const;
+  OdUInt32 paletteDataSize() const;
+  void paletteData(OdUInt8* bytes) const;
+  OdUInt32 scanLineSize() const;
+  const OdUInt8* scanLines() const;
+  void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+  OdGiRasterImage::PixelFormatInfo pixelFormat() const;
+  OdUInt32 scanLinesAlignment() const;
+  OdGiRasterImage::Units defaultResolution(double& xPelsPerUnit, double& yPelsPerUnit) const;
+  OdUInt32 supportedParams() const;
+  OdGiRasterImage::ImageSource imageSource() const;
+  OdGiRasterImage::TransparencyMode transparencyMode() const;
+  void setTransparencyMode(OdGiRasterImage::TransparencyMode mode);
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    Extends OdGiRasterImageBGRA32 class to keep a copy of OdGiImageBGRA32 inside.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiRasterImageBGRA32Holder : public OdGiRasterImageBGRA32
+{
+protected:
+  OdGiImageBGRA32 m_ImageCopy;
+public:
+  OdGiRasterImageBGRA32Holder();
+  ~OdGiRasterImageBGRA32Holder();
+  
+  /** \details
+    Creates an OdGiRasterImage object with the specified parameters.
+    \param pImage [in]  Input BGRA32 image.
+    \param transparencyMode [in]  Transparency mode.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  static OdGiRasterImagePtr createObject(OdGiImageBGRA32 *pImage, OdGiRasterImage::TransparencyMode transparencyMode = OdGiRasterImage::kTransparency8Bit);
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    Extends OdGiRasterImageBGRA32 class to keep a copy of OdGiImageBGRA32 and pixels inside.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiRasterImageBGRA32Copy : public OdGiRasterImageBGRA32Holder
+{
+private:
+  OdGiPixelBGRA32Array m_pxArray;
+public:
+  OdGiRasterImageBGRA32Copy();
+  ~OdGiRasterImageBGRA32Copy();
+  
+  /** \details
+    Creates an OdGiRasterImage object with the specified parameters.
+    \param pImage [in]  Input BGRA32 image.
+    \param transparencyMode [in]  Transparency mode.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  static OdGiRasterImagePtr createObject(OdGiImageBGRA32 *pImage, OdGiRasterImage::TransparencyMode transparencyMode = OdGiRasterImage::kTransparency8Bit);
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    This class stores full copy of original raster image data.
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiRasterImageHolder : public OdGiRasterImageParam
+{
+  OdUInt32                          m_pixelWidth, m_pixelHeight, m_colorDepth, m_alignment;
+  OdGiRasterImage::PixelFormatInfo  m_pixFmt;
+  Units                             m_units;
+  double                            m_xPelsPerUnit, m_yPelsPerUnit;
+  OdGiRasterImage::ImageSource      m_imageSource;
+  OdGiRasterImage::TransparencyMode m_transparencyMode;
+  int                               m_transparentColor;
+  OdUInt8Array                      m_palData;
+  OdUInt8Array                      m_pixData;
+public:
+  OdGiRasterImageHolder();
+  virtual ~OdGiRasterImageHolder();
+
+  /** \details
+    Store data from original OdGiRasterImage object.
+    \param pOrig [in]  Pointer to the original image object.
+  */
+  void setFrom(const OdGiRasterImage* pOrig);
+
+  /** \details
+    Creates an OdGiRasterImage object from original OdGiRasterImage object.
+    \param pImage [in]  Pointer to the original image object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  static OdGiRasterImagePtr createObject(const OdGiRasterImage* pImage);
+
+  OdUInt32 pixelWidth() const;
+  OdUInt32 pixelHeight() const;
+  Units defaultResolution(double& xPelsPerUnit, double& yPelsPerUnit) const;
+  OdUInt32 colorDepth() const;
+  OdUInt32 numColors() const;
+  ODCOLORREF color(OdUInt32 colorIndex) const;
+  OdUInt32 paletteDataSize() const;
+  void paletteData(OdUInt8* bytes) const;
+  OdUInt32 scanLineSize() const;
+  void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+  const OdUInt8* scanLines() const;
+  PixelFormatInfo pixelFormat() const;
+  OdUInt32 scanLinesAlignment() const;
+  int transparentColor() const;
+  ImageSource imageSource() const;
+  TransparencyMode transparencyMode() const;
+  OdUInt32 supportedParams() const;
+  void setImageSource(ImageSource source);
+  void setTransparencyMode(TransparencyMode mode);
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    This class is the base class for raster image transformer objects.
+
+    Library: TD_Gi
+
+    \remarks
+    Transforming an image does not effect the orignal.
+
+    The default methods for this class do nothing but return the
+    corresponding values from the original object.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiRasterImageWrapper : public OdGiRasterImageParam
+{
+  OdGiRasterImagePtr m_pOrig;
+public:
+  OdGiRasterImageWrapper();
+  virtual ~OdGiRasterImageWrapper();
+
+  /** \details
+    Sets the original OdGiRasterImage object associated with this RasterImageWrapper object.
+    \param pOrig [in]  Pointer to the original image object.
+  */
+  void setOriginal(const OdGiRasterImage* pOrig);
+  const OdGiRasterImage *original() const;
+  OdGiRasterImagePtr cloneOriginal() const;
+
+  OdUInt32 pixelWidth() const;
+  OdUInt32 pixelHeight() const;
+  Units defaultResolution(double& xPelsPerUnit, double& yPelsPerUnit) const;
+  OdUInt32 colorDepth() const;
+  OdUInt32 numColors() const;
+  ODCOLORREF color(OdUInt32 colorIndex) const;
+  OdUInt32 paletteDataSize() const;
+  void paletteData(OdUInt8* bytes) const;
+  OdUInt32 scanLineSize() const;
+  void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+  const OdUInt8* scanLines() const;
+  PixelFormatInfo pixelFormat() const;
+  OdUInt32 scanLinesAlignment() const;
+  int transparentColor() const;
+  ImageSource imageSource() const;
+  TransparencyMode transparencyMode() const;
+  OdUInt32 supportedParams() const;
+  void setImageSource(ImageSource source);
+  void setTransparencyMode(TransparencyMode mode);
+  void* imp() const;
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    This raster image transformer class transforms OdGiRasterImage objects to Bitonal images.
+
+    Library: TD_Gi
+
+    \remarks
+    Transforming an image does not effect the orignal.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiBitonalRasterTransformer : public OdGiRasterImageWrapper
+{
+  RGBQUAD m_palette[2];
+  int m_transpColor;
+public:
+  OdGiBitonalRasterTransformer();
+  virtual ~OdGiBitonalRasterTransformer();
+
+  /** \param foregroundColor [in]  Foreground color.
+    \param backgroundColor [in]  Background color.
+    \param transparent [in]  Image is transparent if and only if true.
+  */
+  void setOriginal(const OdGiRasterImage* pOrig, ODCOLORREF foregroundColor, ODCOLORREF backgroundColor, bool transparent);
+  OdUInt32 numColors() const;
+  ODCOLORREF color(OdUInt32 colorIndex) const;
+  OdUInt32 paletteDataSize() const;
+  void paletteData(OdUInt8* bytes) const;
+  PixelFormatInfo pixelFormat() const;
+  int transparentColor() const;
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    This raster image transformer class mirrors image upside down.
+
+    Library: TD_Gi
+
+    \remarks
+    Transforming an image does not effect the orignal.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiUpsideDownRasterTransformer : public OdGiRasterImageWrapper
+{
+public:
+  OdGiUpsideDownRasterTransformer();
+  virtual ~OdGiUpsideDownRasterTransformer();
+
+  void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+  const OdUInt8* scanLines() const;
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    This raster image transformer class mirrors image right to left.
+
+    Library: TD_Gi
+
+    \remarks
+    Transforming an image does not effect the orignal.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiLeftToRightRasterTransformer : public OdGiRasterImageWrapper
+{
+public:
+  OdGiLeftToRightRasterTransformer();
+  virtual ~OdGiLeftToRightRasterTransformer();
+
+  void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+  const OdUInt8* scanLines() const;
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+};
+
+/** \details
+    This raster image transformer class negates image colors.
+
+    Library: TD_Gi
+
+    \remarks
+    Transforming an image does not effect the orignal.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiInversionRasterTransformer : public OdGiRasterImageWrapper
+{
+public:
+  OdGiInversionRasterTransformer();
+  virtual ~OdGiInversionRasterTransformer();
+
+  ODCOLORREF color(OdUInt32 colorIndex) const;
+  void paletteData(OdUInt8* bytes) const;
+
+  void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+  const OdUInt8* scanLines() const;
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+protected:
+  virtual ODCOLORREF colorXform(ODCOLORREF color) const;
+};
+
+/** \details
+    This raster image transformer class converts image colors into grayscale.
+
+    Library: TD_Gi
+
+    \remarks
+    Transforming an image does not effect the orignal.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiGrayscaleRasterTransformer : public OdGiInversionRasterTransformer
+{
+public:
+  OdGiGrayscaleRasterTransformer();
+  virtual ~OdGiGrayscaleRasterTransformer();
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+protected:
+  virtual ODCOLORREF colorXform(ODCOLORREF color) const;
+};
+
+/** \details
+    This raster image transformer class converts image colors into monochrome.
+
+    Library: TD_Gi
+
+    \remarks
+    Transforming an image does not effect the orignal.
+
+    <group OdGi_Classes>
+*/
+class ODGI_EXPORT OdGiMonochromaticRasterTransformer : public OdGiGrayscaleRasterTransformer
+{
+  int m_threshold;
+public:
+  OdGiMonochromaticRasterTransformer();
+  virtual ~OdGiMonochromaticRasterTransformer();
+
+  OdRxObjectPtr clone() const;
+  void copyFrom(const OdRxObject *pSource);
+
+  void setThreshold(OdUInt8 treshold) { m_threshold = treshold; if (m_threshold > 254) m_threshold = 254; };
+  int threshold() const { return m_threshold; }
+protected:
+  virtual ODCOLORREF colorXform(ODCOLORREF color) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif //  __OD_GI_RASTER_WRAPPERS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRectIntersDetector.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRectIntersDetector.h
new file mode 100755
index 0000000..c690ca0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiRectIntersDetector.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIRECTINTERSDETECTOR__
+#define __ODGIRECTINTERSDETECTOR__
+
+
+#include "Gi/GiConveyorNode.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GePoint2dArray.h"
+
+class OdGiDeviation;
+class OdGiConveyorContext;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+    Conveyor node detecting if given primitive intersects with rectangular prism.
+    If intersects - something is passed through. In other case - primitive is eaten
+    by this conveyor node.
+*/
+class ODGI_EXPORT OdGiRectIntersDetector : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiRectIntersDetector);
+
+  virtual void set(const OdGePoint2d* points, // points defining sides of clipping prism perpendicular to XY
+                   bool   bClipLowerZ = false, // number of points is always two
+                   double dLowerZ = 0.0,
+                   bool   bClipUpperZ = false,
+                   double dUpperZ = 0.0) = 0;
+
+  virtual void set(const OdGePoint2dArray& points, // points defining sides of clipping prism perpendicular to XY
+                   bool   bClipLowerZ = false, // number of points is always two
+                   double dLowerZ = 0.0,
+                   bool   bClipUpperZ = false,
+                   double dUpperZ = 0.0) = 0;
+
+  virtual void get(OdGePoint2dArray& points,
+                   bool&   bClipLowerZ,
+                   double& dLowerZ,
+                   bool&   bClipUpperZ,
+                   double& dUpperZ) const = 0;
+
+  /** Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+};
+
+typedef OdSmartPtr<OdGiRectIntersDetector> OdGiRectIntersDetectorPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIRECTINTERSDETECTOR__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSectionGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSectionGeometry.h
new file mode 100755
index 0000000..a9eda44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSectionGeometry.h
@@ -0,0 +1,133 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_SECTION_SEOMETRY_MAP_H__
+#define __OD_GI_SECTION_SEOMETRY_MAP_H__
+
+#include "Gi/GiExport.h"
+#include "Ge/GeMatrix3d.h"
+#include "Gi/GiPathNode.h"
+#include "Gi/GiDrawable.h"
+#include "RxObject.h"
+
+typedef OdArray<OdGiDrawablePtr> OdGiDrawablePtrArray;
+
+/** \details
+  <group OdGi_Classes>
+
+  This class defines the selection geometry.
+
+  Library: TD_Gi
+*/
+class ODGI_EXPORT OdGiSectionGeometry
+{
+  public:
+    OdGiSectionGeometry():
+      m_foregroundFaceTransparency(50),
+      m_foregroundEdgeTransparency(50){}
+
+    const OdGiDrawablePtrArray& intBoundaryEnts() const { return m_intBoundaryEnts; }
+    const OdGiDrawablePtrArray& intFillEnts() const { return m_intFillEnts; }
+    const OdGiDrawablePtrArray& backgroundEnts() const { return m_backgroundEnts; }
+    const OdGiDrawablePtrArray& foregroundEnts() const { return m_foregroundEnts; }
+
+    int foregroundFaceTransparency() const { return m_foregroundFaceTransparency; }
+    int foregroundEdgeTransparency() const { return m_foregroundEdgeTransparency; }
+
+    OdGiDrawablePtrArray& intBoundaryEnts() { return m_intBoundaryEnts; }
+    OdGiDrawablePtrArray& intFillEnts() { return m_intFillEnts; }
+    OdGiDrawablePtrArray& backgroundEnts() { return m_backgroundEnts; }
+    OdGiDrawablePtrArray& foregroundEnts() { return m_foregroundEnts; }
+
+    void setForegroundTransparency(int faceTransp, int edgeTransp)
+    {
+      m_foregroundFaceTransparency = faceTransp;
+      m_foregroundEdgeTransparency = edgeTransp;
+    }
+
+  protected:
+    OdGiDrawablePtrArray m_intBoundaryEnts;
+    OdGiDrawablePtrArray m_intFillEnts;
+    OdGiDrawablePtrArray m_backgroundEnts;
+    OdGiDrawablePtrArray m_foregroundEnts;
+    int m_foregroundFaceTransparency;
+    int m_foregroundEdgeTransparency;
+};
+
+/** \details
+  <group OdGi_Classes>
+
+  This class defines the selection geometry map.
+
+  Library: TD_Gi
+*/
+class ODGI_EXPORT OdGiSectionGeometryMap : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiSectionGeometryMap);
+    virtual ~OdGiSectionGeometryMap(){}
+    virtual OdGiSectionGeometry* getAt(OdGiDrawable& section, const OdGiPathNode* path,
+                                       const OdGiDrawable& drawable, const OdGeMatrix3d& tf) = 0;
+    virtual void clear() = 0;
+};
+
+/** \details
+  The typified smart pointer for the /selection geometry map/ object. This  
+  template class is specialization of the OdSmartPtr class for the OdGiSectionGeometryMap class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdGiSectionGeometryMap> OdGiSectionGeometryMapPtr;
+
+/** \details
+  <group OdGi_Classes>
+
+  This class defines the section geometry manager.
+
+  Library: TD_Gi
+*/
+class ODGI_EXPORT OdGiSectionGeometryManager : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiSectionGeometryManager);
+    virtual OdDbStub* getLiveSection(const OdDbStub* layoutId, OdDbStub*& sectionSettingsId) const = 0;
+    virtual OdGiDrawablePtr createLiveSection(OdDbBaseDatabase *pDb, OdDbStub *visualStyleId,
+                                              const OdGePoint3dArray &points, const OdGeVector3d &verticalDir,
+                                              const double *dTop = NULL, const double *dBottom = NULL) const = 0;
+    virtual bool isLiveSection(const OdGiDrawable* pDrawable) const = 0;
+    virtual bool generateSectionGeometry(OdGiDrawable& section,
+                                         const OdGiDrawable& drawable,
+                                         const OdGeMatrix3d& xform,
+                                         OdGiSectionGeometry& geom,
+                                         bool* bHasForeground) const = 0;
+    virtual OdGiSectionGeometryMapPtr createSectionGeometryMap() = 0;
+    virtual int classifyExtentsRelativelySection(const OdGiDrawable* pDrawable, const OdGeExtents3d& ext) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbHelix object pointers.
+*/
+typedef OdSmartPtr<OdGiSectionGeometryManager> OdGiSectionGeometryManagerPtr;
+
+#endif // __OD_GI_SECTION_SEOMETRY_MAP_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelectProc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelectProc.h
new file mode 100755
index 0000000..983b0e1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelectProc.h
@@ -0,0 +1,110 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGISELECTPROC__
+#define __ODGISELECTPROC__
+
+#include "Gi/GiConveyorNode.h"
+#include "Gs/Gs.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GePoint2dArray.h"
+
+class OdGiDeviation;
+class OdGiConveyorContext;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+    This class implements conveyor nodes performing selections. 
+    
+    \remarks
+    
+    Behavior of this node depends on the selection mode.    
+    *  If the mode is "fence", the points specify polyline vertices.
+    *  If the mode is "crossing" or "window", the points specify polygon vertices. If exactly two points
+        are specified, the polygon is rectangle, with the points opposite vertices.
+
+    For any input primitive, this node performs the following actions:
+
+    1.  It checks for primitive intersections with the polygon border. 
+    
+    2.  If intersections are found, the node MARKS current drawable, and stops to handle the primitive.
+
+    3.  If the mode is mode is "crossing", and the primitive is inside the polygon, the node
+        node MARKS the current drawable and stops to handle the primitive.
+        
+    4.  If the mode is "window", and primitive is outside the polygon, the node
+        MARKS the current drawable and stops to handle the primitive.
+
+    To MARK the current drawable is means to currentDrawableDesc()->markBySelection(true).
+    If the drawable is neither a compound object nor uses nesting, means currentDrawableDesc()->markToSkip(true)
+
+    This conveyor node is used for implementation OdGsBaseVectorizeView::select()
+    and does not produce any output.
+*/
+class ODGI_EXPORT OdGiSelectProc : public OdGiConveyorNode
+{
+public:
+  enum
+  {
+    kCheckMarkerOnChange         = 1,
+    kCheckMarkerOnViewModeChange = 2,
+
+    kCheckMarkerFinish           = 0x80000000
+  };
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSelectProc);
+
+  virtual void set(const OdGePoint2d* pPoints,
+                   OdUInt32 nPoints,
+                   OdGsView::SelectionMode mode, OdGsSelectionReactor* pReactor) = 0;
+
+  virtual void get(OdGePoint2dArray& points,
+                   OdGsView::SelectionMode& mode) = 0;
+  
+  virtual void check_n_fire_selected(OdUInt32 flags = 0) = 0;
+
+  /** Sets max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+
+  /** Sets deviation object to obtain max deviation for curve tesselation.
+  */
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+
+  /** Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  /** Checks is selection reactor and selection mode supports subentity selection.
+  */
+  static bool supportsSubentitySelection(const OdGiViewport *pView, OdGsView::SelectionMode mode, OdGsSelectionReactor* pReactor);
+};
+
+typedef OdSmartPtr<OdGiSelectProc> OdGiSelectProcPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGISELECTPROC__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelector.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelector.h
new file mode 100755
index 0000000..211ae55
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSelector.h
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODODGISELECTOR_INCLUDED_
+#define _ODODGISELECTOR_INCLUDED_
+
+#include "Gi/GiConveyorNode.h"
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GePoint2dArray.h"
+#include "Gs/GsSelectionReactor.h"
+
+class OdGiDeviation;
+
+#include "TD_PackPush.h"
+
+/** \details
+    
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiSelector : public OdGiConveyorNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSelector);
+
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  virtual void setReactor(OdGsSelectionReactor& selectionReactor) = 0;
+};
+
+typedef OdSmartPtr<OdGiSelector> OdGiSelectorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODODGISELECTOR_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceIterator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceIterator.h
new file mode 100755
index 0000000..ec008ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceIterator.h
@@ -0,0 +1,128 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef __ODGISHELLFACEITERATOR__
+#define __ODGISHELLFACEITERATOR__
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    
+    <group OdGi_Classes> 
+*/
+class OdGiShellFaceIterator
+{
+  const OdGePoint3d* _points;
+  const OdInt32* _faceList;
+public:
+  inline OdGiShellFaceIterator()
+    : _points(0)
+    , _faceList(0)
+  {
+  }
+
+  inline OdGiShellFaceIterator(const OdGePoint3d* points, const OdInt32* faceList)
+  {
+    set(points, faceList);
+  }
+
+  inline void set(const OdGePoint3d* points, const OdInt32* faceList)
+  {
+    _points = points;
+    _faceList = faceList;
+  }
+
+  inline const OdInt32* faceListPos() { return _faceList; }
+
+  inline const OdGePoint3d& operator *() const
+  {
+    return _points[*_faceList];
+  }
+  inline operator const OdGePoint3d*() const
+  {
+    return _points + (*_faceList);
+  }
+  inline const OdGePoint3d* operator ->() const
+  {
+    return _points + *_faceList;
+  }
+  inline OdGiShellFaceIterator& operator ++()
+  {
+    ++_faceList;
+    return *this;
+  }
+  inline OdGiShellFaceIterator operator ++(int)
+  {
+    OdGiShellFaceIterator res(*this);
+    ++_faceList;
+    return res;
+  }
+  inline OdGiShellFaceIterator& operator --()
+  {
+    --_faceList;
+    return *this;
+  }
+  inline OdGiShellFaceIterator operator --(int)
+  {
+    OdGiShellFaceIterator res(*this);
+    --_faceList;
+    return res;
+  }
+  inline OdGiShellFaceIterator& operator += (const int n)
+  {
+    _faceList+=n;
+    return *this;
+  }
+  inline OdGiShellFaceIterator& operator -= (const int n)
+  {
+    _faceList-=n;
+    return *this;
+  }
+  inline OdGiShellFaceIterator operator + (const int n) const
+  {
+    OdGiShellFaceIterator res(*this);
+    res+=n;
+    return res;
+  }
+  inline OdGiShellFaceIterator operator - (const int n) const
+  {
+    OdGiShellFaceIterator res(*this);
+    res-=n;
+    return res;
+  }
+  inline bool operator < (const OdGiShellFaceIterator& op) const
+  {
+    return _faceList < op._faceList;
+  }
+  inline bool operator < (const OdInt32* op) const
+  {
+    return _faceList < op;
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODGISHELLFACEITERATOR__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceWithHolesIterator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceWithHolesIterator.h
new file mode 100755
index 0000000..920c3d6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiShellFaceWithHolesIterator.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef __ODGISHELLFACEWITHHOLESITERATOR__
+#define __ODGISHELLFACEWITHHOLESITERATOR__
+
+#include "TD_PackPush.h"
+
+/** \details
+    
+    <group OdGi_Classes> 
+*/
+class OdGiShellFaceWithHolesIterator
+{
+  const OdGePoint3d* _points;
+  const OdInt32* _faceList;
+  OdInt32 _loopSize;
+public:
+  OdInt32Array loopCounts;
+
+  OdGiShellFaceWithHolesIterator()
+    : _points(points)
+    , _faceList(faceList)
+    , _loopSize(0)
+  {
+  }
+
+  OdGiShellFaceWithHolesIterator(const OdGePoint3d* points, const OdInt32* faceList)
+    : _points(points)
+    , _faceList(faceList)
+    , _loopSize(0)
+  {
+    loopCounts.push_back(_loopSize = *faceList);
+  }
+
+  const OdGePoint3d& operator *() const
+  {
+    return _points[*_faceList];
+  }
+  const OdGePoint3d* operator ->() const
+  {
+    return _points + *_faceList;
+  }
+  OdGiShellFaceIterator& operator ++()
+  {
+    if(_loopSize--)
+      loopCounts.push_back(_loopSize = *faceList);
+    ++_faceList;
+    return *this;
+  }
+  OdGiShellFaceIterator operator ++(int)
+  {
+    OdGiShellFaceIterator res(*this);
+    ++(*this);
+    return res;
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODGISHELLFACEWITHHOLESITERATOR__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSpatialFilter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSpatialFilter.h
new file mode 100755
index 0000000..c2edbd0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSpatialFilter.h
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGISPATIALFILTER__
+#define __ODGISPATIALFILTER__
+
+#include "Gi/GiConveyorNode.h"
+
+#include "Ge/GeDoubleArray.h"
+#include "Ge/GeExtents2d.h"
+
+#include "TD_PackPush.h"
+
+class OdGiDeviation;
+class OdGiConveyorContext;
+
+/** \details
+
+    Conveyor member performing spatial filtering by 3D rectangular prism.
+
+    * exts        - base of the prism.
+    * bClipLowerZ - if lower boundary exists.
+    * dLowerZ     - lower boundary.
+    * bClipUpperZ - if upper boundary exists.
+    * dUpperZ     - upper boundary.
+
+    <group OdGi_Classes> 
+*/
+
+/** \details
+    This class defines an interface for spatial filtering by 3D rectangular prisms.
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiSpatialFilter : public OdRxObject
+{
+protected:
+  OdGiSpatialFilter();
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSpatialFilter);
+
+  virtual OdGiConveyorInput& input() = 0;
+  virtual OdGiConveyorOutput& insideOutput() = 0;
+  virtual OdGiConveyorOutput& intersectsOutput() = 0;
+  virtual OdGiConveyorOutput& disjointOutput() = 0;
+
+  // set output conveyor geometry to this member, if it is needn't
+
+  ODGI_EXPORT_STATIC static OdGiConveyorGeometry& kNullGeometry;
+
+  virtual void set(const OdGeExtents2d& exts,
+                   bool bClipLowerZ = false,
+                   double dLowerZ = 0.0,
+                   bool   bClipUpperZ = false,
+                   double dUpperZ = 0.0) = 0;
+
+  virtual void get(OdGeExtents2d& exts,
+                   bool&   bClipLowerZ,
+                   double& dLowerZ,
+                   bool&   bClipUpperZ,
+                   double& dUpperZ) const = 0;
+
+  virtual bool isSimplifyOpt(OdUInt32 opt) const = 0;
+
+  /** Sets the draw context object (to access to traits, etc).
+  */
+  virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
+
+  virtual void setDeviation(const OdGeDoubleArray& deviations) = 0;
+  virtual void setDeviation(const OdGiDeviation* pDeviation) = 0;
+};
+
+typedef OdSmartPtr<OdGiSpatialFilter> OdGiSpatialFilterPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGISPATIALFILTER__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiStack.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiStack.h
new file mode 100755
index 0000000..2238b1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiStack.h
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODGISTACK_H
+#define ODGISTACK_H
+
+#include "OdStack.h"
+
+#define OdGiStack OdStack
+
+#endif //#ifndef ODGISTACK_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsData.h
new file mode 100755
index 0000000..571c3d0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsData.h
@@ -0,0 +1,364 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGISUBENTITYTRAITSDATA_H__
+#define __ODGISUBENTITYTRAITSDATA_H__
+
+#include "TD_PackPush.h"
+
+#include "CmColor.h"
+#include "Gi/GiMaterial.h"
+
+struct OdGiDgLinetypeModifiers;
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class OdGiSubEntityTraitsData
+{
+  // Members
+  //
+  OdUInt16                         m_flags;
+  OdUInt16                         m_selFlags;
+  OdCmEntityColor                  m_cmColor;
+  OdDbStub*                        m_layerId;
+  OdDbStub*                        m_lineTypeId;
+  OdGiFillType                     m_fillType;
+  OdDb::LineWeight                 m_lineWeight;
+  double                           m_lineTypeScale;
+  double                           m_thickness;
+  OdDb::PlotStyleNameType          m_plotStyleNameType;
+  OdDbStub*                        m_plotStyleNameId;
+  OdDbStub*                        m_materialId;
+  const OdGiMapper*                m_mapper;
+  OdDbStub*                        m_visualStyleId;
+  OdCmTransparency                 m_cmTransparency;
+  OdUInt32                         m_drawFlags;
+  OdGiSubEntityTraits::ShadowFlags m_shadowFlags;
+  OdCmEntityColor                  m_cmSecondaryColor;
+  const OdGiDgLinetypeModifiers*   m_lsModifiers;
+  const OdGiFill*                  m_fill;
+
+  enum
+  {
+    kSelectionGeom    = 0x100,
+    kSectionable      = 0x200
+  };
+public:
+  enum
+  {
+    kLayerOff         = 1,
+    kLayerFrozen      = 2
+  };
+
+  // Constructors/destructors
+  //
+  OdGiSubEntityTraitsData()
+    : m_flags(0)
+    , m_selFlags(0)
+    , m_cmColor(OdCmEntityColor::kForeground)
+    , m_layerId(NULL)
+    , m_lineTypeId(NULL)
+    , m_fillType(kOdGiFillNever)
+    , m_lineWeight(OdDb::kLnWt000)
+    , m_lineTypeScale(1.0)
+    , m_thickness(0.0)
+    , m_plotStyleNameType(OdDb::kPlotStyleNameIsDictDefault)
+    , m_plotStyleNameId(NULL)
+    , m_materialId(NULL)
+    , m_mapper(NULL)
+    , m_visualStyleId(NULL)
+    , m_cmTransparency(OdUInt8(0xFF))
+    , m_drawFlags(0)
+    , m_shadowFlags(OdGiSubEntityTraits::kShadowsCastAndReceive)
+    , m_cmSecondaryColor(OdCmEntityColor::kForeground)
+    , m_lsModifiers(NULL)
+    , m_fill(NULL)
+  {
+  }
+
+  // Accessors / transformers
+  //
+  OdUInt16 flags() const;
+  OdUInt16 selFlags() const;
+  bool isLayerFrozen() const;
+  bool isLayerOff() const;
+  bool isLayerVisible() const;
+  bool visibility() const { return isLayerVisible(); }
+  const OdCmEntityColor& trueColor() const;
+  OdUInt16 color() const;
+  OdDbStub* layer() const;
+  OdDbStub* lineType() const;
+  OdGiFillType fillType() const;
+  OdDb::LineWeight lineWeight() const;
+  double lineTypeScale() const;
+  double thickness() const;
+  OdDb::PlotStyleNameType plotStyleNameType() const;
+  OdDbStub* plotStyleNameId() const;
+  OdDbStub* material() const;
+  const OdGiMapper* mapper() const;
+  OdDbStub* visualStyle() const;
+  const OdCmTransparency& transparency() const;
+  OdUInt32 drawFlags() const;
+  bool selectionGeom() const;
+  OdGiSubEntityTraits::ShadowFlags shadowFlags() const;
+  bool sectionable() const;
+  OdGiSubEntityTraits::SelectionFlags selectionFlags() const;
+  const OdCmEntityColor& secondaryTrueColor() const;
+  const OdGiDgLinetypeModifiers* lineStyleModifiers() const;
+  const OdGiFill* fill() const;
+
+  void setFlags(OdUInt16 flags);
+  void setSelFlags(OdUInt16 selFlags);
+  void setTrueColor(const OdCmEntityColor& trueColor);
+  void setColor(OdUInt16 colorIndex);
+  void setLayer(OdDbStub* layerId);
+  void setLineType(OdDbStub* lineTypeId);
+  void setFillType(OdGiFillType fillType);
+  void setLineWeight(OdDb::LineWeight lineWeight);
+  void setLineTypeScale(double lineTypeScale);
+  void setThickness(double thickness);
+  void setPlotStyleName(OdDb::PlotStyleNameType plotStyleNameType, OdDbStub* pPlotStyleNameId);
+  void setMaterial(OdDbStub* materialId);
+  void setMapper(const OdGiMapper* pMapper);
+  void setVisualStyle(OdDbStub* visualStyleId);
+  void setTransparency(const OdCmTransparency& transparency);
+  void setDrawFlags(OdUInt32 drawFlags);
+  void setSelectionGeom(bool bSelectionFlag);
+  void setShadowFlags(OdGiSubEntityTraits::ShadowFlags shadowFlags);
+  void setSectionable(bool bSectionableFlag);
+  void setSelectionFlags(OdGiSubEntityTraits::SelectionFlags selectionFlags);
+  void setSecondaryTrueColor(const OdCmEntityColor& trueColor);
+  void setLineStyleModifiers(const OdGiDgLinetypeModifiers* pLSMod);
+  void setFill(const OdGiFill* pFill);
+};
+
+
+inline OdUInt16 OdGiSubEntityTraitsData::flags() const
+{
+  return m_flags;
+}
+inline OdUInt16 OdGiSubEntityTraitsData::selFlags() const
+{
+  return m_selFlags;
+}
+inline bool OdGiSubEntityTraitsData::isLayerVisible() const
+{
+  return (m_flags & (kLayerOff|kLayerFrozen))==0;
+}
+inline bool OdGiSubEntityTraitsData::isLayerFrozen() const
+{
+  return GETBIT(m_flags, kLayerFrozen);
+}
+inline bool OdGiSubEntityTraitsData::isLayerOff() const
+{
+  return GETBIT(m_flags, kLayerOff);
+}
+inline OdUInt16 OdGiSubEntityTraitsData::color() const
+{
+  return m_cmColor.colorIndex();
+}
+inline const OdCmEntityColor& OdGiSubEntityTraitsData::trueColor() const
+{
+  return m_cmColor;
+}
+inline OdDbStub* OdGiSubEntityTraitsData::layer() const
+{
+  return m_layerId;
+}
+inline OdDbStub* OdGiSubEntityTraitsData::lineType() const
+{
+  return m_lineTypeId;
+}
+inline OdGiFillType OdGiSubEntityTraitsData::fillType() const
+{
+  return m_fillType;
+}
+inline OdDb::LineWeight OdGiSubEntityTraitsData::lineWeight() const
+{
+  return m_lineWeight;
+}
+inline double OdGiSubEntityTraitsData::lineTypeScale() const
+{
+  return m_lineTypeScale;
+}
+inline double OdGiSubEntityTraitsData::thickness() const
+{
+  return m_thickness;
+}
+inline OdDb::PlotStyleNameType OdGiSubEntityTraitsData::plotStyleNameType() const
+{
+  return m_plotStyleNameType;
+}
+inline OdDbStub* OdGiSubEntityTraitsData::plotStyleNameId() const
+{
+  return m_plotStyleNameId;
+}
+inline OdDbStub* OdGiSubEntityTraitsData::material() const
+{
+  return m_materialId;
+}
+inline const OdGiMapper* OdGiSubEntityTraitsData::mapper() const
+{
+  return m_mapper;
+}
+inline OdDbStub* OdGiSubEntityTraitsData::visualStyle() const
+{
+  return m_visualStyleId;
+}
+inline const OdCmTransparency& OdGiSubEntityTraitsData::transparency() const
+{
+  return m_cmTransparency;
+}
+inline OdUInt32 OdGiSubEntityTraitsData::drawFlags() const
+{
+  return m_drawFlags;
+}
+inline bool OdGiSubEntityTraitsData::selectionGeom() const
+{
+  return GETBIT(m_selFlags, kSelectionGeom);
+}
+inline OdGiSubEntityTraits::ShadowFlags OdGiSubEntityTraitsData::shadowFlags() const
+{
+  return m_shadowFlags;
+}
+inline bool OdGiSubEntityTraitsData::sectionable() const
+{
+  return GETBIT(m_selFlags, kSectionable);
+}
+inline OdGiSubEntityTraits::SelectionFlags OdGiSubEntityTraitsData::selectionFlags() const
+{
+  return (OdGiSubEntityTraits::SelectionFlags)(m_selFlags & 0xFF);
+}
+inline const OdCmEntityColor& OdGiSubEntityTraitsData::secondaryTrueColor() const
+{
+  return m_cmSecondaryColor;
+}
+inline const OdGiDgLinetypeModifiers* OdGiSubEntityTraitsData::lineStyleModifiers() const
+{
+  return m_lsModifiers;
+}
+inline const OdGiFill* OdGiSubEntityTraitsData::fill() const
+{
+  return m_fill;
+}
+
+
+inline void OdGiSubEntityTraitsData::setFlags(OdUInt16 flags)
+{
+  m_flags = flags;
+}
+inline void OdGiSubEntityTraitsData::setSelFlags(OdUInt16 selFlags)
+{
+  m_selFlags = selFlags;
+}
+inline void OdGiSubEntityTraitsData::setTrueColor(const OdCmEntityColor& trueColor)
+{
+  m_cmColor = trueColor;
+}
+inline void OdGiSubEntityTraitsData::setColor(OdUInt16 colorIndex)
+{
+  m_cmColor.setColorIndex(colorIndex);
+}
+inline void OdGiSubEntityTraitsData::setLayer(OdDbStub* layerId)
+{
+  m_layerId = layerId;
+}
+inline void OdGiSubEntityTraitsData::setLineType(OdDbStub* lineTypeId)
+{
+  m_lineTypeId = lineTypeId;
+}
+inline void OdGiSubEntityTraitsData::setFillType(OdGiFillType fillType)
+{
+  m_fillType = fillType;
+}
+inline void OdGiSubEntityTraitsData::setLineWeight(OdDb::LineWeight lineWeight)
+{
+  m_lineWeight = lineWeight;
+}
+inline void OdGiSubEntityTraitsData::setLineTypeScale(double lineTypeScale)
+{
+  m_lineTypeScale = lineTypeScale;
+}
+inline void OdGiSubEntityTraitsData::setThickness(double thickness)
+{
+  m_thickness = thickness;
+}
+inline void OdGiSubEntityTraitsData::setPlotStyleName(OdDb::PlotStyleNameType plotStyleNameType, OdDbStub* plotStyleNameId)
+{
+  m_plotStyleNameType = plotStyleNameType;
+  m_plotStyleNameId = plotStyleNameId;
+}
+inline void OdGiSubEntityTraitsData::setMaterial(OdDbStub* materialId)
+{
+  m_materialId = materialId;
+}
+inline void OdGiSubEntityTraitsData::setMapper(const OdGiMapper* pMapper)
+{
+  m_mapper = pMapper;
+}
+inline void OdGiSubEntityTraitsData::setVisualStyle(OdDbStub* visualStyleId)
+{
+  m_visualStyleId = visualStyleId;
+}
+inline void OdGiSubEntityTraitsData::setTransparency(const OdCmTransparency &transparency)
+{
+  m_cmTransparency = transparency;
+}
+inline void OdGiSubEntityTraitsData::setDrawFlags(OdUInt32 drawFlags)
+{
+  m_drawFlags = drawFlags;
+}
+inline void OdGiSubEntityTraitsData::setSelectionGeom(bool bSelectionFlag)
+{
+  SETBIT(m_selFlags, kSelectionGeom, bSelectionFlag);
+}
+inline void OdGiSubEntityTraitsData::setShadowFlags(OdGiSubEntityTraits::ShadowFlags shadowFlags)
+{
+  m_shadowFlags = shadowFlags;
+}
+inline void OdGiSubEntityTraitsData::setSectionable(bool bSectionableFlag)
+{
+  SETBIT(m_selFlags, kSectionable, bSectionableFlag);
+}
+inline void OdGiSubEntityTraitsData::setSelectionFlags(OdGiSubEntityTraits::SelectionFlags selectionFlags)
+{
+  m_selFlags = (m_selFlags & (~0xFF)) | (OdUInt16)selectionFlags;
+}
+inline void OdGiSubEntityTraitsData::setSecondaryTrueColor(const OdCmEntityColor& trueColor)
+{
+  m_cmSecondaryColor = trueColor;
+}
+inline void OdGiSubEntityTraitsData::setLineStyleModifiers(const OdGiDgLinetypeModifiers* pLSMod)
+{
+  m_lsModifiers = pLSMod;
+}
+inline void OdGiSubEntityTraitsData::setFill(const OdGiFill* pFill)
+{
+  m_fill = pFill;
+}
+
+#include "TD_PackPop.h"
+
+#endif // __ODGISUBENTITYTRAITSDATA_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsDataSaver.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsDataSaver.h
new file mode 100755
index 0000000..e3e0178
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiSubEntityTraitsDataSaver.h
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGISUBENTITYTRAITSDATASAVER_H__
+#define __ODGISUBENTITYTRAITSDATASAVER_H__
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiSubEntityTraitsData.h"
+#include "Gi/GiDgLinetype.h"
+#include "Gi/GiFill.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+struct OdGiSubEntityTraitsDataSaver : public OdGiSubEntityTraitsData
+{
+  ODRX_HEAP_OPERATORS();
+
+  OdGiSubEntityTraitsDataSaver() : OdGiSubEntityTraitsData() { }
+  OdGiSubEntityTraitsDataSaver(const OdGiSubEntityTraitsData &from) : OdGiSubEntityTraitsData(from) { allocPtrs(); }
+  OdGiSubEntityTraitsDataSaver(const OdGiSubEntityTraitsDataSaver &from) : OdGiSubEntityTraitsData(from) { allocPtrs(); }
+
+  ~OdGiSubEntityTraitsDataSaver() { deletePtrs(); }
+
+  void setMapper(const OdGiMapper* pMapper)
+  {
+    if (mapper()) delete mapper();
+    if (pMapper) OdGiSubEntityTraitsData::setMapper(new OdGiMapper(*pMapper));
+    else OdGiSubEntityTraitsData::setMapper(NULL);
+  }
+  void setLineStyleModifiers(const OdGiDgLinetypeModifiers* pLSMod)
+  {
+    if (lineStyleModifiers()) delete lineStyleModifiers();
+    if (pLSMod) OdGiSubEntityTraitsData::setLineStyleModifiers(new OdGiDgLinetypeModifiers(*pLSMod));
+    else OdGiSubEntityTraitsData::setLineStyleModifiers(NULL);
+  }
+  void setFill(const OdGiFill* pFill)
+  {
+    if (fill()) (OdGiFillPtr(fill(), kOdRxObjAttach));
+    if (pFill) OdGiSubEntityTraitsData::setFill(static_cast<OdGiFill*>(pFill->clone().detach()));
+    else OdGiSubEntityTraitsData::setFill(NULL);
+  }
+
+  OdGiSubEntityTraitsData &operator =(const OdGiSubEntityTraitsData &data)
+  {
+    deletePtrs();
+    static_cast<OdGiSubEntityTraitsData&>(*this) = data;
+    allocPtrs();
+    return *this;
+  }
+
+protected:
+  void deletePtrs()
+  {
+    if (mapper()) delete mapper();
+    if (lineStyleModifiers()) delete lineStyleModifiers();
+    if (fill()) (OdGiFillPtr(fill(), kOdRxObjAttach));
+  }
+  void allocPtrs()
+  {
+    if (mapper()) OdGiSubEntityTraitsData::setMapper(new OdGiMapper(*mapper()));
+    if (lineStyleModifiers()) OdGiSubEntityTraitsData::setLineStyleModifiers(new OdGiDgLinetypeModifiers(*lineStyleModifiers()));
+    if (fill()) OdGiSubEntityTraitsData::setFill(static_cast<OdGiFill*>(fill()->clone().detach()));
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODGISUBENTITYTRAITSDATASAVER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTextStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTextStyle.h
new file mode 100755
index 0000000..bd86562
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTextStyle.h
@@ -0,0 +1,558 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGITEXTSTYLE_H__
+#define __ODGITEXTSTYLE_H__
+
+#include "TD_PackPush.h"
+
+#include "OdCodePage.h"
+#include "OdFont.h"
+#include "Gi/TtfDescriptor.h"
+#include "DbBaseDatabase.h"
+
+class OdGiWorldDraw;
+class OdGiTextStyleImpl;
+class OdString;
+class OdGePoint2d;
+
+
+/** \details
+    This class provides an interface to the display attributes of text.
+
+    \remarks
+    This class is used as an argument to OdGiGeometry::text().
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiTextStyle
+{
+  // Members
+  //
+
+  // : public OdTtfDescriptor                         // MKU 14.02.2003
+
+  OdTtfDescriptor       m_ttfDescriptor;
+
+  mutable OdFontPtr     m_pFont;
+  mutable OdFontPtr     m_pBigFont;
+
+  mutable OdString      m_sFontPath;
+  mutable OdString      m_sBigFontPath;
+
+  OdString              m_sBigfontFile;
+  double                m_dTextSize;
+  double                m_dXScale;
+  double                m_dObliquingAngle;
+  double                m_dTrackingPercent;
+  mutable OdUInt16      m_flags;
+  mutable OdCodePageId  m_Codepage;
+
+  OdString              m_StyleName;
+
+  double                m_dIntercharSpacing;
+
+public:
+  enum
+  {
+    kShape       = 0x01,
+    kUpsideDown  = 0x02,
+    kVertical    = 0x04,
+    kUnderlined  = 0x08,
+    kOverlined   = 0x10,
+    kShxFont     = 0x20,
+    kPreLoaded   = 0x40,
+    kBackward    = 0x80,
+    kShapeLoaded = 0x100,
+    kStriked     = 0x200,
+    kUseIntercharSpacing   = 0x400,
+    kFixedIntercharSpacing = 0x800
+  };
+
+  /** \details
+    Controls if the text font file for this TextStyle marked as loaded.
+
+    \param shapeLoaded [in]  Controls shape loaded.
+  */
+  /*!DOM*/
+  void setShapeLoaded(
+    bool shapeLoaded) const;
+
+  /** \details
+    Returns true if and only if the text font file for this TextStyle marked as loaded.
+  */
+  /*!DOM*/
+  bool isShapeLoaded() const { return GETBIT(m_flags, kShapeLoaded); }
+
+  OdGiTextStyle();
+  ~OdGiTextStyle();
+
+  /** \details
+    Sets the parameters of this TextStyle object according to its parameters.
+
+    \param fontName [in]  Font filename.
+    \param bigFontName [in]  BigFont filename.
+    \param textSize [in]  Fixed text size.
+    \param xScale [in]  X-scale (width) factor of text.
+    \param obliquingAngle [in]  Obliquing angle of text.
+    \param trackingPercent [in]  Tracking percent of text.
+    \param isBackward [in]  Controls backwards drawing of text.
+    \param isUpsideDown [in]  Controls upside down drawing of text.
+    \param isVertical [in]  Controls vertical drawing of text.
+    \param isOverlined [in]  Controls overlined drawing of text.
+    \param isUnderlined [in]  Controls overlined drawing of text.
+
+    \remarks
+    obliquingAngle has a domain of �1.48335 radians (�85�). Negative angles will have Oda2PI added to them.
+
+    \note
+    All angles are expressed in radians.
+  */
+  void set(
+    const OdString& fontName,
+    const OdString&  bigFontName,
+    const double textSize,
+    const double xScale,
+    const double obliquingAngle,
+    const double trackingPercent,
+    const bool isBackward,
+    const bool isUpsideDown,
+    const bool isVertical,
+    const bool isOverlined,
+    const bool isUnderlined);
+
+  /** \details
+    Loads the font file(s) associated with this TextStyle.
+
+    \param pDb [in]  Pointer to the database whose OdDbHostAppServices object will be used.
+
+    \remarks
+    This function is run after a call to setFileName() or setBigFontFileName(), and
+    must be called after loading a True Type font (TTF).
+  */
+  void loadStyleRec(
+    OdDbBaseDatabase* pDb) const;
+
+  /** \details
+    Returns the fully qualified font file path associated with this TextStyle.
+
+    \param pDb [in]  Pointer to the database whose OdDbHostAppServices object will be used.
+
+  */
+  OdString getFontFilePath(
+    OdDbBaseDatabase* pDb) const;
+
+  /** \details
+    Returns the fully qualified BigFont file path associated with this TextStyle.
+
+    \param pDb [in]  Pointer to the database whose OdDbHostAppServices object will be used.
+
+  */
+  OdString getBigFontFilePath(
+    OdDbBaseDatabase* pDb) const;
+
+  /** \details
+    Sets the fully qualified font file path associated with this TextStyle.
+
+    \param fontFilePath [in]  Font file path.
+
+    \remarks
+    loadStyleRec() should be called after calling this function:
+  */
+  void setFontFilePath(
+    const OdString& fontFilePath){m_sFontPath = fontFilePath;}
+
+  /** \details
+    Sets the fully qualified BigFont file path associated with this TextStyle.
+
+    \param bigFontFilePath [in]  BigFont file path.
+
+    \remarks
+    loadStyleRec() should be called after calling this function:
+  */
+  void setBigFontFilePath(
+    const OdString& bigFontFilePath){m_sBigFontPath = bigFontFilePath;}
+
+  /** \details
+    Sets the fixed text size for this TextStyle.
+
+    \param textSize [in]  Fixed text size.
+  */
+  void setTextSize(
+    double textSize);
+
+  /** \details
+    Sets the X-scale (width) factor for this TextStyle.
+
+    \param xScale [in]  X-scale factor.
+  */
+  void setXScale(
+    double xScale);
+
+  /** \details
+    Sets the obliquing angle for this TextStyle.
+
+    \param obliquingAngle [in]  Obliquing angle.
+
+    \remarks
+    obliquingAngle has a domain of �1.48335 radians (�85�). Negative angles will have Oda2PI added to them.
+
+    \note
+    All angles are expressed in radians.
+  */
+  void setObliquingAngle(double obliquingAngle);
+
+  /** \details
+    Sets the tracking percent for this TextStyle.
+
+    \param trackingPercent [in]  TrackingPercent [0.75, 4.0].
+
+    \remarks
+    Tracking percent is a multiplier for the spacing between characters as defined in the font file.
+
+  */
+  void setTrackingPercent(
+    double trackingPercent);
+
+  /** \details
+    Controls the backwards drawing of text with this TextStyle.
+
+    \param isBackwards [in]  Controls backwards drawing.
+  */
+  void setBackward(
+    bool isBackward);
+
+  /** \details
+    Controls the upside down drawing of text with this TextStyle.
+
+    \param isUpsideDown [in]  Controls upside down drawing.
+  */
+  void setUpsideDown(
+    bool isUpsideDown);
+
+  /** \details
+    Controls the vertical drawing of text with this TextStyle.
+
+    \param isVertical [in]  Controls vertical drawing.
+  */
+  void setVertical(
+    bool isVertical);
+
+  /** \details
+    Controls the underlined drawing of text with this TextStyle.
+
+    \param underlined [in]  Controls underlined drawing.
+  */
+  void setUnderlined(
+    bool isUnderlined);
+
+  /** \details
+    Controls the overlined drawing of text with this TextStyle.
+
+    \param overlined [in]  Controls overlined drawing.
+  */
+  void setOverlined(
+    bool isOverlined);
+
+  /** \details
+    Controls the strike drawing of text with this TextStyle.
+
+    \param overlined [in]  Controls strike drawing.
+  */
+  void setStriked(
+    bool isStriked);
+
+  /*!DOM*/
+  void setPreLoaded(bool value) const;
+
+  /*!DOM*/
+  void setShxFont(bool value) const;
+
+  /** \details
+    Sets the name of the font file associated with this TextStyle.
+
+    \param fontFileName [in]  Filename.
+  */
+  void setFileName(
+    const OdString& fontFileName);
+    
+  /** \details
+    Sets the name of the BitFont file associated with this TextStyle.
+
+    \param bigFontFileName [in]  Filename.
+  */
+  void setBigFontFileName(
+    const OdString& bigFontFileName);
+
+  /** \details
+    Returns true if and only if text is drawn backwards with this TextStyle.
+  */
+  bool isBackward() const   { return GETBIT(m_flags, kBackward);  }
+
+  /** \details
+    Returns true if and only if text is drawn upside down with this TextStyle.
+  */
+  bool isUpsideDown() const { return GETBIT(m_flags, kUpsideDown);}
+
+  /** \details
+    Returns true if and only if text is drawn vertical with this TextStyle.
+  */
+  bool isVertical() const   { return GETBIT(m_flags, kVertical);  }
+
+  /** \details
+    Returns true if and only if text is drawn underlined with this TextStyle.
+  */
+  bool isUnderlined() const { return GETBIT(m_flags, kUnderlined);}
+
+  /** \details
+    Returns true if and only if text is drawn overlined with this TextStyle.
+  */
+  bool isOverlined() const  { return GETBIT(m_flags, kOverlined); }
+
+  /** \details
+    Returns true if and only if text is drawn strike with this TextStyle.
+  */
+  bool isStriked() const  { return GETBIT(m_flags, kStriked); }
+
+  /*!DOM*/
+  bool isPreLoaded() const  { return GETBIT(m_flags, kPreLoaded); }
+
+  /*!DOM*/
+  bool isShxFont() const    { return GETBIT(m_flags, kShxFont);   }
+
+  /*!DOM*/
+  bool isTtfFont() const    { return !isShxFont();  }
+
+  /** \details
+    Controls if the font file for this TextStyle is treated as a shape file.
+    \param isShape [in]  Controls setting.
+  */
+  /*!DOM*/
+   void setIsShape(
+    bool isShape) { SETBIT(m_flags, kShape, isShape); }
+
+  /** \details
+    Returns true if and only if the font file for this TextStyle is a shape file.
+  */
+  /*!DOM*/
+  bool isShape() const { return GETBIT(m_flags, kShape); }
+
+
+  /** \details
+    Sets this TextStyle to use the specified OdFont or Windows font characteristics.
+
+    \param pFont [in] Pointer to the font.
+    \param typeface [in] Typeface name of the font.
+    \param bold [in] Bold if and only if true.
+    \param italic [in] Italic if and only if true.
+    \param charset [in] Windows character set identifier.
+    \param pitchAndFamily [in] Windows pitch and character family identifier.
+
+    \remarks
+    If typeface is null, the Windows font information is removed from this text style.
+  */
+  void setFont(
+    const OdString& typeface, 
+    bool bold, bool italic, 
+    int charset, 
+    int pitchAndFamily);
+  void setFont(
+    OdFont* font){m_pFont = font;}
+
+  /** \details
+    Sets this TextStyle to use the specified OdFont as the BigFont.
+
+    \param pBigFont [in]  Pointer to the BigFont.
+  */
+  void setBigFont(
+    OdFont* pBigFont){m_pBigFont = pBigFont;}
+
+
+  /** \details
+    Returns the Windows font characteristics for this TextStyle.
+
+    \param typeface [out]  Typeface name of the font.
+    \param bold [out]  True if and only if bold.
+    \param italic [out]  True if and only if italic.
+    \param charset [out]  Windows character set identifier.
+    \param pitchAndFamily [out]  Windows pitch and character family identifier.
+  */
+  void font(
+    OdString& typeface,
+    bool& bold,
+    bool& italic,
+    int& charset,
+    int& pitchAndFamily) const;
+
+  /** \details
+    Returns the OdFont associated with this TextStyle.
+  */
+  OdFont* getFont() const     { return m_pFont;     }
+
+  /** \details
+    Returns the OdFont associated with the BigFont for this TextStyle.
+  */
+  OdFont* getBigFont() const  { return m_pBigFont;  }
+
+  /** \details
+    Returns a reference to the TTF descriptor for this TextStyle.
+  */
+  OdTtfDescriptor& ttfdescriptor()
+  {
+    return m_ttfDescriptor;
+  }
+  const OdTtfDescriptor& ttfdescriptor() const
+  {
+    return m_ttfDescriptor;
+  }
+
+  /** \details
+    Returns the BigFont filename for this TextStyle.
+  */
+  const OdString &bigFontFileName() const
+  {
+    return m_sBigfontFile;
+  }
+  /** \details
+      Returns the fixed text size for this TextStyle.
+  */
+  double textSize() const
+  {
+    return m_dTextSize;
+  }
+
+  /** \details
+    Returns the X-scale (width) factor for this TextStyle.
+  */
+  double xScale() const
+  {
+    return m_dXScale;
+  }
+
+  /** \details
+    Returns the obliquing angle for this TextStyle.
+
+    \remarks
+    obliquingAngle has a domain of �1.48335 radians (�85�). Negative angles will have Oda2PI added to them.
+
+    \note
+    All angles are expressed in radians.
+  */
+  double obliquingAngle() const
+  {
+    return m_dObliquingAngle;
+  }
+  /** \details
+    Returns the tracking percent for this TextStyle.
+
+    \remarks
+    Tracking percent is a multiplier for the spacing between characters as defined in the font file.
+
+    trackingPercent() has a range of  [0.75..4].
+  */
+  double trackingPercent() const
+  {
+    return m_dTrackingPercent;
+  }
+
+//  void odExtentsBox(const OdChar* pStr, int nStrLen, OdUInt32 flags, OdDbDatabase* pDb, OdGePoint3d& min, OdGePoint3d& max, OdGePoint3d* pEndPos = 0);     // MKU 02.06.2003
+
+  /** \details
+    Returns the CodePage associated with this TextStyle.
+  */
+  OdCodePageId getCodePage() const
+  {
+    return m_Codepage;
+  }
+
+  /** \details
+    Sets the CodePage associated with this TextStyle.
+    \param codePage [in]  CodePage.
+  */
+  void setCodePage(OdCodePageId codePage)
+  {
+    m_Codepage = codePage;
+  }
+
+  const OdString& styleName() const
+  {
+    return m_StyleName;
+  }
+
+  void setStyleName(const OdString& name)
+  {
+    m_StyleName = name;
+  }
+
+  /** \details
+    Controls if interchar spacing used.
+    \param isShape [in]  Controls setting.
+  */
+  /*!DOM*/
+   void setIsUseIntercharSpacing(
+    bool isUseIntercharSpacing) { SETBIT(m_flags, kUseIntercharSpacing, isUseIntercharSpacing); }
+
+  /** \details
+    Returns true if interchar spacing used.
+  */
+  /*!DOM*/
+  bool isUseIntercharSpacing() const { return GETBIT(m_flags, kUseIntercharSpacing); }
+
+    /** \details
+    Controls if fixed interchar spacing used.
+    \param isShape [in]  Controls setting.
+    */
+  /*!DOM*/
+   void setIsFixedIntercharSpacing(
+    bool isUseIntercharSpacing) { SETBIT(m_flags, kFixedIntercharSpacing, isUseIntercharSpacing); }
+
+  /** \details
+    Returns true if fixed interchar spacing used.
+  */
+  /*!DOM*/
+  bool isFixedIntercharSpacing() const { return GETBIT(m_flags, kFixedIntercharSpacing); }
+
+  /** \details
+    Returns the interchar spacing for this TextStyle.
+
+    \remarks
+    Interchar spacing is a factor of text size, that determine distance from start of character to 
+    start of next character for fixed interchar spacing mode or a additional distance from end of 
+    character to start of next character for common interchar spacing mode.
+  */
+  double getIntercharSpacing() const;
+
+  /** \details
+    Allow to set interchar spacing for this TextStyle.
+  */
+
+  void setIntercharSpacing( double dSpacing );
+};
+
+#include "TD_PackPop.h"
+
+#endif  // __ODGITEXTSTYLE_H__
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTraitsCache.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTraitsCache.h
new file mode 100755
index 0000000..915b415
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTraitsCache.h
@@ -0,0 +1,140 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGITRAITSCACHE_INCLUDED_
+#define _ODGITRAITSCACHE_INCLUDED_
+
+#include "GiCommonDraw.h"
+
+#define STL_USING_MAP
+#include "OdaSTL.h"
+
+class OdDbStub;
+
+#include "TD_PackPush.h"
+
+/** \details
+    
+    \sa
+    TD_Gi
+   
+    <group OdGi_Classes>
+*/
+template <class traitsContainer, class traitsTaker, OdUInt32 byMask = 0>
+class OdGiTraitsCache : public traitsTaker
+{
+  public:
+    enum CacheType
+    {
+      kCacheNone   = 0,
+      kCacheByMask = 1,
+      kCacheAll    = 2
+    };
+  protected:
+    struct CacheEntry
+    {
+      traitsContainer m_data;
+      OdUInt32        m_flags;
+      void set(const traitsContainer& data, OdUInt32 flags) { m_data = data; m_flags = flags; }
+    };
+   
+  protected:
+    CacheType           m_cacheType;
+    typedef std::map<OdDbStub*, CacheEntry> _mmap;
+    _mmap m_cacheData;
+    OdUInt32            m_traitsAttrib;
+  public:
+    OdGiTraitsCache()
+      : traitsTaker()
+      , m_cacheType(kCacheNone)
+      , m_traitsAttrib(0)
+    {
+    }
+    explicit OdGiTraitsCache(CacheType cacheType)
+      : traitsTaker()
+      , m_cacheType(cacheType)
+      , m_traitsAttrib(0)
+    {
+    }
+    ~OdGiTraitsCache()
+    {
+    }
+
+    void setCacheType(CacheType cacheType)
+    {
+      m_cacheType = cacheType;
+    }
+    CacheType cacheType() const
+    {
+      return m_cacheType;
+    }
+
+    void setAttributes(OdDbStub* objId, OdGiContext &giCtx, bool forceCaching = false)
+    {
+      if (m_cacheType != kCacheNone && m_cacheData.size() > 0)
+      {
+        // Note: iterator won't compile in this context on all platforms.
+        typename _mmap::iterator it = m_cacheData.find(objId);
+        if(it != m_cacheData.end())
+        {
+          m_traitsAttrib = it->second.m_flags;
+          if(!(m_traitsAttrib & byMask))
+            traitsTaker::setData(it->second.m_data);
+          return;
+        }
+      }
+      OdGiDrawablePtr drawable = giCtx.openDrawable(objId);
+      if (!drawable.isNull())
+      {
+        m_traitsAttrib = drawable->setAttributes(this);
+        if (m_cacheType != kCacheNone)
+        {
+          if (m_cacheType == kCacheAll || forceCaching || ((m_traitsAttrib & byMask) != 0))
+          {
+            m_cacheData[objId].set(this->getData(), m_traitsAttrib);
+          }
+        }
+      }
+    }
+
+    void setFlags(OdUInt32 uAttrib)
+    {
+      m_traitsAttrib = uAttrib;
+    }
+    OdUInt32 getFlags() const
+    {
+      return m_traitsAttrib;
+    }
+
+    void clear()
+    {
+      m_cacheData.clear();
+    }
+};
+
+// traitsContainer - must have operator =.
+// traitsTaker - must have setData(traitsContainer), getData() methods.
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGITRAITSCACHE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransformed.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransformed.h
new file mode 100755
index 0000000..a74dc6c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransformed.h
@@ -0,0 +1,107 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// GiBaseVectorizer.h: interface for the OdGiBaseVectorizer class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGITRANSFORMED_INCLUDED_
+#define _ODGITRANSFORMED_INCLUDED_
+
+
+#include "Gi/GiBaseVectorizer.h"
+#include "OdStack.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+This class is an implementation of transformation stack.
+Library: TD_Gi
+<group OdGi_Classes>
+*/
+template <class T> class OdGiTransformed : public T
+{
+  struct Transforms
+  {
+    Transforms() : bWorldToModelValid(false) {}
+    OdGeMatrix3d          xModelToWorld;
+    mutable OdGeMatrix3d  xWorldToModel;
+    mutable bool          bWorldToModelValid;
+  };
+  OdStack<Transforms>      m_TransformStack;
+
+  public:
+
+    void pushModelTransform(const OdGeMatrix3d& xMat)
+    {
+      const Transforms* pPrev = m_TransformStack.top();
+      Transforms* pNew = m_TransformStack.push();
+      if(pPrev)
+      {
+        pNew->xModelToWorld.setToProduct(pPrev->xModelToWorld, xMat);
+      }
+      else
+      {
+        pNew->xModelToWorld = xMat;
+      }
+    }
+  
+    void pushModelTransform(const OdGeVector3d& vNormal)
+    {
+      pushModelTransform(OdGeMatrix3d::planeToWorld(vNormal));
+    }
+  
+    void popModelTransform()
+    {
+      m_TransformStack.pop();
+    }
+
+    OdGeMatrix3d getModelToWorldTransform() const
+    {
+      if(m_TransformStack.top())
+        return m_TransformStack.top()->xModelToWorld;
+      return OdGeMatrix3d::kIdentity;
+    }
+
+    OdGeMatrix3d getWorldToModelTransform() const
+    {
+      const Transforms* pTop = m_TransformStack.top();
+      if(pTop)
+      {
+        if(!pTop->bWorldToModelValid)
+        {
+          pTop->xWorldToModel = pTop->xModelToWorld.inverse();
+          pTop->bWorldToModelValid = true;
+        }
+        return pTop->xWorldToModel;
+      }
+      return OdGeMatrix3d::kIdentity;
+    }
+};
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODGITRANSFORMED_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransientManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransientManager.h
new file mode 100755
index 0000000..93e91b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiTransientManager.h
@@ -0,0 +1,174 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGITRANSIENTMANAGER_H__
+#define __ODGITRANSIENTMANAGER_H__
+
+#include <RxObject.h>
+#include <Gi/GiExport.h>
+#include <UInt32Array.h>
+
+#include "TD_PackPush.h"
+
+class OdGiDrawable;
+
+/** \details
+    This class provides transient drawables manager functionality.
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiTransientManager : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiTransientManager);
+
+    enum OdGiTransientDrawingMode
+    {
+      kOdGiMain = 0,
+      kOdGiSprite,
+      kOdGiDirectShortTerm,
+      kOdGiHighlight,
+      kOdGiDirectTopmost,
+      kOdGiContrast,
+      kOdGiDrawingModeCount
+    };
+
+    /** \details
+        Adds new drawable into transient drawables manager.
+        \param pDrawable [in]  Drawable pointer.
+        \param mode [in]  Transient drawable mode.
+        \param subMode [in]  Draw order index.
+        \param viewportIds [in]  List of viewport indices.
+    */
+    virtual bool addTransient(OdGiDrawable *pDrawable,
+                              OdGiTransientDrawingMode mode,
+                              OdInt32 subMode,
+                              const OdUInt32Array &viewportIds) = 0;
+
+    /** \details
+        Erases drawable from transient drawables manager.
+        \param pDrawable [in]  Drawable pointer.
+        \param viewportIds [in]  List of viewport indices.
+    */
+    virtual bool eraseTransient(OdGiDrawable *pDrawable,
+                                const OdUInt32Array &viewportIds) = 0;
+
+    /** \details
+        Erases all drawables from specified drawable mode and order.
+        \param mode [in]  Transient drawable mode.
+        \param subMode [in]  Draw order index.
+        \param viewportIds [in]  List of viewport indices.
+    */
+    virtual bool eraseTransients(OdGiTransientDrawingMode mode,
+                                 OdInt32 subMode,
+                                 const OdUInt32Array &viewportIds) = 0;
+
+    /** \details
+        Updates drawable in the transient drawables manager.
+        \param pDrawable [in]  Drawable pointer.
+        \param viewportIds [in]  List of viewport indices.
+    */
+    virtual void updateTransient(OdGiDrawable *pDrawable,
+                                 const OdUInt32Array &viewportIds) const = 0;
+
+    /** \details
+        Appends child drawable to parent drawable in the transient drawables manager.
+        \param pDrawable [in]  Drawable pointer.
+        \param pParent [in]  Parent drawable pointer.
+    */
+    virtual bool addChildTransient(OdGiDrawable *pDrawable, OdGiDrawable *pParent) = 0;
+
+    /** \details
+        Erases child drawable from parent drawable in the transient drawables manager.
+        \param pDrawable [in]  Drawable pointer.
+        \param pParent [in]  Parent drawable pointer.
+    */
+    virtual bool eraseChildTransient(OdGiDrawable *pDrawable, OdGiDrawable *pParent) = 0;
+
+    /** \details
+        Updates child drawable of parent drawable in the transient drawables manager.
+        \param pDrawable [in]  Drawable pointer.
+        \param pParent [in]  Parent drawable pointer.
+    */
+    virtual void updateChildTransient(OdGiDrawable *pDrawable, OdGiDrawable *pParent) const = 0;
+
+    /** \details
+        Finds free order for specified drawable mode.
+        \param mode [in]  Transient drawable mode.
+        \param subMode [out]  Draw order index.
+        \param viewportIds [in]  List of viewport indices.
+        \remarks
+        Returns 0 if specified input draw order isn't free and transient manager couldn't find free draw order.
+        Returns 1 if specified input draw order is free.
+        Returns 2 if specified input draw order isn't free but transient manager found free draw order.
+    */
+    virtual OdInt32 getFreeSubDrawingMode(OdGiTransientDrawingMode mode,
+                                          OdInt32 &subMode,
+                                          const OdUInt32Array &viewportIds) const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiTransientManager object pointers.
+*/
+typedef OdSmartPtr<OdGiTransientManager> OdGiTransientManagerPtr;
+
+/** \details
+    Extracts transient manager using transient manager protocol extension from specified object.
+*/
+ODGI_EXPORT OdGiTransientManager *odgiGetTransientManager(const OdRxObject *pObject);
+/** \details
+    Sets transient manager using transient manager protocol extension for specified object.
+*/
+ODGI_EXPORT void odgiSetTransientManager(OdGiTransientManager *pManager, OdRxObject *pObject);
+
+/** \details
+    This class provides transient drawables manager protocol extension.
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiTransientManagerPE : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiTransientManagerPE);
+
+    /** \details
+        Returns transient manager for specified object.
+        \param pThis [in]  Pointer to object for which this procol extension was specified.
+    */
+    virtual OdGiTransientManager *transientManager(const OdRxObject *pThis) const = 0;
+    /** \details
+        Sets transient manager to specified object.
+        \param pThis [in]  Pointer to object for which this protocol extension was specified.
+        \param pManager [in]  Pointer to transient drawables manager.
+    */
+    virtual void setTransientManager(OdRxObject *pThis, OdGiTransientManager *pManager) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiTransientManagerPE object pointers.
+*/
+typedef OdSmartPtr<OdGiTransientManagerPE> OdGiTransientManagerPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif  // __ODGITRANSIENTMANAGER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiUtils.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiUtils.h
new file mode 100755
index 0000000..756c8a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiUtils.h
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_GI_UTILS__
+#define __OD_GI_UTILS__
+
+template <class T3dPtIter>
+void odgiSquareValues(OdInt32 nPoints, T3dPtIter pPoints, OdGeVector3d& n1, OdGeVector3d& n2)
+{
+  OdGeVector3d res;
+  nPoints -= 2;
+  n1 = n2 = OdGeVector3d::kIdentity;
+  for(T3dPtIter pPt1 = pPoints + 1, pPt2 = pPoints + 2; nPoints-- > 0; ++pPt1, ++pPt2)
+  {
+    res = (*pPt2 - *pPoints).crossProduct(*pPt1 - *pPoints);
+    if(res.dotProduct(n1) >= 0.)
+      n1 += res;
+    else
+      n2 += res;
+  }
+}
+
+template <class T3dPtIter>
+OdGeVector3d odgiFaceNormal(OdInt32 nPoints, T3dPtIter pPoints)
+{
+  OdGeVector3d n1, n2;
+  odgiSquareValues(nPoints, pPoints, n1, n2);
+  n1 += n2;
+  OdGe::ErrorCondition f;
+  n1.normalize(OdGeContext::gZeroTol, f);
+  if(f!=OdGe::kOk)
+    return n2.normalize(OdGeContext::gZeroTol, f);
+  return n1;
+}
+
+
+#endif // __OD_GI_UTILS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVariant.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVariant.h
new file mode 100755
index 0000000..fb66988
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVariant.h
@@ -0,0 +1,378 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// OdGiVariant type for generic procedural material.
+
+#ifndef __ODGIVARIANT_H__
+#define __ODGIVARIANT_H__
+
+#include "RootExport.h"
+#include "GiExport.h"
+
+#include "CmColor.h"
+#include "RxVariant.h"
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is used as the basis for the generic data storage used for procedural material definitions.
+
+    \sa
+    TD_Gi
+
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiVariant : public OdRxObject
+{
+  static void copyDataFrom(OdGiVariant &vTo, const OdGiVariant &vFrom);
+  public:
+    /** \details
+    Defines the current type set to an OdGiVariant object.
+    */
+    enum VariantType
+    {
+      kUndefined = 0, // Variant type is undefined (the default type). 
+      kBoolean,       // An OdGiVariant is of a boolean type (bool).
+      kInt,           // An OdGiVariant is of a long type (OdInt32).
+      kDouble,        // An OdGiVariant is of a double type (double).
+      kColor,         // An OdGiVariant is of a color type (OdCmEntityColor).
+      kString,        // An OdGiVariant is of a string type (OdString).
+      kTable          // An OdGiVariant is a table of key/value pairs.
+    };
+  public:
+    class EnumType
+    {
+      public:
+        explicit EnumType(int value) : m_value(value) { }
+        template <typename T> operator T() { return static_cast<T>(m_value); }
+        template <typename T> bool operator ==(T right) const { return static_cast<int>(right) == m_value; }
+        template <typename T> bool operator !=(T right) const { return !(*this == right); }
+      protected:
+        int m_value;
+    };
+  public:
+    ODRX_DECLARE_MEMBERS(OdGiVariant);
+
+    // Constructors
+    //OdGiVariant();
+    //OdGiVariant(const OdGiVariant &value);
+    //OdGiVariant(bool value);
+    //OdGiVariant(OdInt32 value);
+    //OdGiVariant(double value);
+    //OdGiVariant(const OdCmEntityColor &value);
+    //OdGiVariant(const OdString &value);
+    //OdGiVariant(const OdChar *value);
+  protected:
+    OdGiVariant();
+  public:
+    /** \details
+    This constructor creates an empty OdGiVariant instance and copies an input OdGiVariant into it.
+
+    \param value [in]  Reference to an existing OdGiVariant to copy.
+    */
+      static OdSmartPtr<OdGiVariant> createObject(const OdGiVariant &value);
+    
+    /** \details
+    Creates a new OdGiVariant object of the kBoolean type and initializes it with an input boolean value.
+
+    \param value [in]  Input initial boolean value.
+    */
+     static OdSmartPtr<OdGiVariant> createObject(bool value);
+
+    /** \details
+    Creates a new OdGiVariant object of the kInt type and initializes it with an input long value.
+
+    \param value [in]  Input initial long value.
+    */
+     static OdSmartPtr<OdGiVariant> createObject(OdInt32 value);
+
+    /** \details
+    Creates a new OdGiVariant object of the kDouble type and initializes it with an input floating point value.
+
+    \param value [in]  Input initial floating point value.
+    */
+    static OdSmartPtr<OdGiVariant> createObject(double value);
+
+    /** \details
+    Creates a new OdGiVariant object of the kColor type and initializes it with an input color value.
+
+    \param value [in]  Input initial color value.
+    */
+    static OdSmartPtr<OdGiVariant> createObject(const OdCmEntityColor &value);
+
+    /** \details
+    Creates a new OdGiVariant object of the kString type and initializes it with an input string.
+
+    \param value [in]  Input initial string value.
+    */
+    static OdSmartPtr<OdGiVariant> createObject(const OdString &value);
+
+    /** \details
+    Creates a new OdGiVariant object of the kString type and initializes it with a string of an input char array.
+
+    \param value [in]  Input initial char array.
+    */
+    static OdSmartPtr<OdGiVariant> createObject(const OdChar *value);
+
+    ~OdGiVariant();
+
+    bool operator ==(const OdGiVariant& value) const;
+
+    OdGiVariant &operator =(const OdGiVariant& value);
+
+    /** \details
+    Copies the contents of the specified object into this object.
+    
+    \param pSource [in]  Pointer to the source object.
+    
+    Throws:
+    <table>
+    Exception             Cause
+    eNotApplicable        The incoming object isn't of type OdGiVariant.
+    eNullObjectPointer    The incoming object is null.
+    </table>
+    */
+    virtual void copyFrom(const OdRxObject* pSource);
+    
+    /** \details
+    Returns the current type of the OdGiVariant object. All available types are defined in the VariantType enumeration.
+    */
+    VariantType type() const;
+
+    /** \details
+    Changes the OdGiVariant's type to kBoolean and assigns a new value.
+
+    \param value [in]  Input new boolean value to set.
+    */
+    void set(bool value);
+
+    /** \details
+    Changes the OdGiVariant's type to kInt and assigns a new value.
+
+    \param value [in]  Input new long value to set.
+    */
+    void set(OdInt32 value);
+
+    /** \details
+    Changes the OdGiVariant's type to kDouble and assigns a new value.
+
+    \param value [in]  Input new floating point value to set.
+    */
+    void set(double value);
+
+    /** \details
+    Changes the OdGiVariant's type to kColor and assigns a new value.
+
+    \param value [in]  Input new color value to set.
+    */
+    void set(const OdCmEntityColor &value);
+
+    /** \details
+    Changes the OdGiVariant's type to kString and assigns a new value.
+
+    \param value [in]  Input new string value to set.
+    */
+    void set(const OdString &value);
+    
+    /** \details
+    Changes the OdGiVariant's type to kString and assigns a new value.
+
+    \param value [in]  Input new char array to set as a string value.
+    */
+    void set(const OdChar *value);
+
+    /** \details
+    Returns the current value if the variant type is kBoolean. For other types the method throws an exception.
+    */
+    bool asBoolean() const;
+
+    /** \details
+    Returns the current value if the variant type is kInt. For other types the method throws an exception.
+    */
+    OdInt32 asInt() const;
+
+    /** \details
+    Returns the current value if the variant type is kDouble. For other types the method throws an exception.
+    */
+    double asDouble() const;
+
+    /** \details
+    Returns the current value if the variant type is kColor. For other types the method throws an exception.
+    */
+    const OdCmEntityColor &asColor() const;
+
+    /** \details
+    Returns the current value if the variant type is kString. For other types the method throws an exception.
+    */
+    const OdString &asString() const;
+
+    /** \details
+    Returns the current value as a float. The method calls the asDouble() and casts the result to a float.
+    */
+    float asFloat() const;
+
+    /** \details
+    Returns the current value as a char. The method calls the asInt() and casts the result to a char.
+    */
+    OdInt8 asChar() const;
+
+    /** \details
+    Returns the current value as an unsigned char. The method calls the asInt() and casts the result to an unsigned char.
+    */
+    OdUInt8 asUchar() const;
+
+    /** \details
+    Returns the current value as a short. The method calls the asInt() and casts the result to a short.
+    */
+    OdInt16 asShort() const;
+    
+    /** \details
+    Returns the current value as an unsigned short. The method calls the asInt() and casts the result to an unsigned short.
+    */
+    OdUInt16 asUshort() const;
+    
+    /** \details
+    Returns the current value as an unsigned long. The method calls the asInt() and casts the result to an unsigned long.
+    */
+    OdUInt32 asUint() const;
+    
+    /** \details
+    Returns the current value as a long. The method is equivalent to asInt().
+    */
+    OdInt32 asLong() const;
+
+    /** \details
+    Returns the current value as an unsigned long. The method is equivalent to asUint().
+    */
+    OdUInt32 asUlong() const;
+
+    /** \details
+    Returns the current value as an EnumType. The method calls the asInt() and creates an OdGiVariant::EnumType from the result.
+    */
+    EnumType asEnum() const;
+
+    /** \details
+    If the variant's type is kTable, gets the value paired with the specified string key. For other types the method is invalid.
+    
+    \param value [in]  Input reference to an OdGiVariant object to be filled with the retrieved value.
+    \param elem [in]  Input string key of an element in the table. 
+
+    \returns
+    true if value is successfully retrieved, false - otherwise.
+    */
+    bool getElem(const OdString &elem, OdGiVariant &value) const;
+    
+    /** \details
+    If the variant's type is kTable, gets the value paired with the specified string key. For other types the method is invalid.
+    
+    \param elem [in]  Input string key of an element in the table.
+
+    \returns
+    A pointer to the obtained OdGiVariant object. If the value isn't retrieved, returns NULL.
+    */
+    const OdGiVariant *getElem(const OdString &elem) const;
+    
+    /** \details
+    Adds the specified value to the table with the specified string key. If the object isn't of the kTable type, the method converts the type to kTable.
+    
+    \param value [in]  Value to be added with the elem key.
+    \param elem [in]  Input string key with which to add the value. 
+    */
+    void setElem(const OdString &elem, const OdGiVariant &value);
+
+    /** \details
+    If the variant's type is kTable, deletes the element with the specified string key from the table. For other types the method is invalid.
+    
+    \param elem [in]  Input string key with which to add the value. 
+    */
+    void deleteElem(const OdString &elem);
+
+    /** \details
+    If the variant's type is kTable, returns the number of table's elements. For other types the method is invalid.
+    */
+    OdInt32 getElemCount() const;
+
+    /** \details
+    If the variant's type is kTable, gets the key and OdGiVariant value from the table by the specified index. For other types the method is invalid.
+    
+    \param nElem [in]  Input index. Should be within the limits of the table size.
+    \param value [out]  Output OdGiVariant value at the nElem index.
+    \param elem [out]  Output string key at the nElem index.
+
+    \returns
+    true - if the key and value are retrieved successfully. 
+    false - otherwise. 
+    */
+    bool getElemAt(OdInt32 nElem, OdString &elem, OdGiVariant &value) const;
+
+    /** \details
+    If the variant's type is kTable, gets the key and a pointer to the OdGiVariant value from the table by the specified index. For other types the method is invalid.
+    
+    \param nElem [in]  Input index. Should be within the limits of the table size.
+    \param elem [out]  Output string key at the nElem index.
+
+    \returns
+    A pointer to the obtained OdGiVariant value. If the value isn't retrieved, returns NULL. 
+    */
+    const OdGiVariant *getElemAt(OdInt32 nElem, OdString &elem) const;
+
+    /** \details
+    Determines whether two OdGiVariant objects are equivalent by checking the types and values. For table elements, verifies equivalence of each element by its key. 
+
+
+    v1 - first input OdGiVariant object.
+    v2 - second input OdGiVariant object.
+
+    \returns
+    true - if two objects are equivalent.
+    false - otherwise.
+    */
+    static bool isEquivalent(const OdGiVariant *v1, const OdGiVariant *v2);
+  private:
+    VariantType m_type;
+    OdVariant m_variant;
+};
+
+template <typename T>
+inline bool operator ==(T left, const OdGiVariant::EnumType right)
+{
+  return (right == left);
+}
+
+template <typename T>
+inline bool operator !=(T left, const OdGiVariant::EnumType right)
+{
+  return (right != left);
+}
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiVariant object pointers.
+		
+	<group Type Definitions>
+*/
+typedef OdSmartPtr<OdGiVariant> OdGiVariantPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __ODGIVARIANT_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewport.h
new file mode 100755
index 0000000..99d69b3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewport.h
@@ -0,0 +1,256 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __GI_VIEWPORT__
+#define __GI_VIEWPORT__
+
+#include "RxObject.h"
+
+class OdGePoint2d;
+class OdGePoint3d;
+class OdGeVector3d;
+class OdDbStub;
+class OdGeMatrix3d;
+class OdGiContextualColors;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents the view characteristics of current Viewport within the Teigha vectorization framework.  
+
+    \remarks
+    Client code can query this information to generate the correct 
+    viewport -dependent geometric representation for an object.
+
+    \sa
+    TD_Gi:
+
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiViewport : public OdRxObject
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdGiViewport);
+
+  /** \details
+    Returns the transformation matrix from ModelSpace to EyeSpace for this Viewport object.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGeMatrix3d getModelToEyeTransform() const = 0;
+
+  /** \details
+    Returns the transformation matrix from EyeSpace to ModelSpace for this Viewport object.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGeMatrix3d getEyeToModelTransform() const = 0;
+
+  /** \details
+    Returns the transformation matrix from WCS to EyeSpace for this Viewport object.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGeMatrix3d getWorldToEyeTransform() const = 0;
+
+  /** \details
+    Returns the transformation matrix from EyeSpace to WCS for this Viewport object.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual OdGeMatrix3d getEyeToWorldTransform() const = 0;
+
+  /** \details
+    Returns true if and only if perspective mode is on for this Viewport.
+  */
+  virtual bool isPerspective() const = 0;
+
+  /** \details
+    Applies the current perspective transformation to the specified point.
+
+    \param point [in/out] Any 3D point.
+
+    \remarks
+    The point is transformed from EyeSpace coordinates to normalized device coordinates.
+
+    Returns true if and only if the point was transformed; i.e., a perspective transform
+    is active, and the point was neither too close or behind the camera.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual bool doPerspective(
+    OdGePoint3d& point) const = 0;
+
+  /** \details
+    Applies the inverse of the current perspective transformation to the specified point.
+
+    \param point [in/out] Any 3D point.
+
+    \remarks
+    The point is transformed from normalized device coordinates to EyeSpace coordinates
+
+    Returns true if and only if the point was transformed; i.e., a perspective transform
+    is active, and the point was neither too close or behind the camera.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual bool doInversePerspective(
+    OdGePoint3d& point) const = 0;
+
+  /** \details
+    Returns the display pixel density at the specified point for this Viewport object.
+
+    \param point [in]  WCS center of the unit square.
+    \param pixelDensity [out]  Receives the pixel density.
+    \param bUsePerspective [in]  Enable perspective inclusion into pixel density calculation.
+
+    \remarks
+    Pixel density is measured in pixels per WCS unit.
+
+    This function can be used to determine if the geometry generated for an object will 
+    be smaller than the size of a pixel.
+  */
+  virtual void getNumPixelsInUnitSquare(
+    const OdGePoint3d& point, 
+    OdGePoint2d& pixelDensity,
+    bool bUsePerspective = true) const = 0;
+
+  /** \details
+    Returns the WCS camera (eye) location for this Viewport object.
+  */
+  virtual OdGePoint3d getCameraLocation() const = 0;
+
+  /** \details
+    Returns the WCS camera target for this Viewport object.
+  */
+  virtual OdGePoint3d getCameraTarget() const = 0;
+
+  /** \details
+    Returns the WCS camera "up" vector for this Viewport object.
+  */
+  virtual OdGeVector3d getCameraUpVector() const = 0;
+
+  /** \details
+    Returns the vector from the camera target to the camera location.
+  */
+  virtual OdGeVector3d viewDir() const = 0;
+
+  /** \details
+    Returns the OdGi Viewport ID for this Viewport object.
+
+    \note
+    The value returned has no relationshp to the CVPORT system variable.
+  */
+  virtual OdUInt32 viewportId() const = 0;
+
+  /** \details
+    Returns the ID for this Viewport object..
+
+    \note
+    The value returned corresponds to the CVPORT system variable.
+  */
+  virtual OdInt16 acadWindowId() const = 0;
+
+  /** \details
+    Returns lower-left and upper-right corners of this Viewport object in 
+    normalized device Coordinates.
+
+    \param lowerLeft [out]  Receives the lower-left corner.
+    \param upperRight [out]  Receives the upper-right.
+
+    \remarks
+    This information lets position items that are fixed in size and/or position
+    with respect to a Viewport.
+
+    \sa
+    Coordinate Systems      
+  */
+  virtual void getViewportDcCorners(
+    OdGePoint2d& lowerLeft, 
+    OdGePoint2d& upperRight) const = 0;
+
+  /** \details
+    Returns the front and back clipping parameters for this Viewport object.
+
+    \param clipFront [out]  Receives true if and only if front clipping is enabled.
+    \param clipBack [out]   Receives true if and only if back clipping is enabled.
+    \param front [out]  Receives the front clipping distance.
+    \param back [out]  Receives the back clipping distance.
+
+    \remarks
+    Returns clipFront || clipBack.
+
+    front and back are the eye coordinate Z values. 
+
+    Clipping planes are perpendicular to the view direction.
+
+    If the front clipping plane is enabled, geometry in front of it is not displayed.
+
+    If the back clipping plane is enabled, geometry in back of it is not displayed.
+  */
+  virtual bool getFrontAndBackClipValues(
+    bool& clipFront, 
+    bool& clipBack, 
+    double& front, 
+    double& back) const = 0;
+
+  /** \details
+    Returns a multiplier that is used to scale all linetypes in this Viewport object.
+  */
+  virtual double linetypeScaleMultiplier() const = 0;
+
+  /** \details
+    Returns the WCS value below which linetype generation is not used.
+
+    \remarks
+    If the WCS length an entire linetype pattern is less than the returned value, then
+    the linetype will be rendered as continuous.
+  */
+  virtual double linetypeGenerationCriteria() const = 0;
+
+  /** \details
+    Returns true if and only if the specified layer is not frozen either globally or in this Viewport object.
+
+    \param layerId [in]  Object ID of OdLayerTableRecord.
+  */
+  virtual bool layerVisible(
+    OdDbStub* layerId) const = 0;
+
+  /** \details
+    Returns pointer to context-dependent colors storage.
+
+    \remarks
+    This pointer could be null if contextual colors doesn't specified by context.
+  */
+  virtual const OdGiContextualColors *contextualColors() const { return NULL; }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __GI_VIEWPORT__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportDraw.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportDraw.h
new file mode 100755
index 0000000..34d33bb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportDraw.h
@@ -0,0 +1,100 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIVIEWPORTDRAW_H__
+#define __ODGIVIEWPORTDRAW_H__
+
+#include "Gi/GiCommonDraw.h"
+#include "Gi/GiViewport.h"
+#include "Gi/GiViewportGeometry.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines the functionality for viewport -dependent entity-level vectorization.
+
+    \remarks
+    Consider a circular cone. A circular cone can be drawn as a circle and two silhouette lines. The circle could be drawn with
+    the subWorldDraw() function, but the silhouette lines are dependent on the view direction,
+    and must be computed with by subViewportDraw().
+    
+    \sa
+    TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiViewportDraw : public OdGiCommonDraw 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdGiViewportDraw);
+
+  /** \details
+    Returns a reference to the OdGiViewport object associated with this object.
+    
+    \remarks
+    The OdGiViewport contains information specific to the viewport being drawn.
+  */
+  virtual OdGiViewport& viewport() const = 0;
+
+  /** \details
+    Returns the OdGiViewportGeometry object associated with this object.  
+    
+    \remarks
+    This instance contains the functions that can be used by an entity to
+    vectorize itself.
+  */
+  virtual OdGiViewportGeometry& geometry() const = 0;
+
+  /** \details
+    Returns the number of viewports that have been deleted from the current database 
+    during this editing session..
+  */
+  virtual OdUInt32 sequenceNumber() const = 0;
+
+  /** \details
+    Returns true if and only if specified Viewport ID is a valid Viewport ID.
+    
+    \param viewportId [in]  Viewport ID.
+    
+    \remarks
+    viewportId is typically obtained from viewport().viewportId().
+  */
+  virtual bool isValidId(
+    const OdUInt32 viewportId) const = 0;
+
+  /** \details
+    Returns the Object ID of the OdDbViewport object associated with this object.
+    
+    \remarks
+    Returns NULL if TileMode == 1.
+  */
+  virtual OdDbStub* viewportObjectId() const = 0;
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIVIEWPORTDRAW_H__
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportGeometry.h
new file mode 100755
index 0000000..7e6998f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportGeometry.h
@@ -0,0 +1,259 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_GIVIEWPORT_GEOMETRY_H_
+#define _OD_GIVIEWPORT_GEOMETRY_H_
+
+#include "Gi/Gi.h"
+#include "Gi/GiGeometry.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+class OdGeMatrix2d;
+class OdGiRasterImage;
+class OdGiMetafile;
+class OdGiCommonDraw;
+class OdGsDCRect;
+
+#include "TD_PackPush.h"
+
+/** \details
+  This class defines the interface for objects that draw themselves.
+  <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiSelfGdiDrawable : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSelfGdiDrawable);
+
+  /** \details
+    This function is called to have a GDI self-drawable to draw itself.
+    \param drawObj [in]  Object to be drawn.
+    \param hdc [in]  Handle to the device context.
+    \param screenRect [in]  Screen rectangle in device coordinates (pixels).
+  */
+  virtual void draw(const OdGiCommonDraw& drawObj,
+                    void* hdc,
+                    const OdGsDCRect& screenRect) const = 0;
+};
+
+/** \details
+  This abstract class represents a protocol extension for the OdGiSelfGdiDrawable interface.
+  <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiSelfGiDrawablePE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiSelfGiDrawablePE);
+
+  // return false to create HDC and draw via OdGiSelfGdiDrawable interface
+  /** \details
+    Returns false to create HDC and draw object via OdGiSelfGdiDrawable interface.
+    
+    \param pRxObject [in] Pointer to a drawn object.
+    \param pDestGeom [in] Pointer to the Conveyor object. 
+    \param origin [in] Drawn object's origin.
+    \param u [in] Drawn object's width vector.
+    \param v [in] Drawn object's height vector.
+    \param screenRect [in] Screen rectangle in device coordinates (pixels).
+    \param isExport [in] Boolean flag, which indicates that image transparency is on.
+  */
+  virtual bool draw(OdRxObject* pRxObject, 
+                    class OdGiConveyorGeometry* pDestGeom,
+                    const OdGePoint3d& origin,
+                    const OdGeVector3d& u, const OdGeVector3d& v,
+                    const OdGsDCRect& screenRect,
+                    bool isExport = false) const = 0;
+};
+
+/** \details
+    This class defines functions that allow entities to vectorize themselves.
+    
+    \remarks
+    Vectorization with the methods of this class are viewport dependent. 
+    For viewport specific vectorization, use subViewportDraw() instead of subWorldDraw().
+
+    An OdGiViewportGeometry object passed to the subViewportDraw()
+    method of an entity.
+
+    Model coordinates are applied to all geometry in this class except for setExtents(). 
+   
+    You can obtain objects of the following classes fromOdGiViewportDraw:
+
+    <table>
+    Class                 Description
+    OdGiSubEntityTraits   Control of drawing attributes and selection markers. 
+    OdGiViewportGeometry  Drawing model coordinate geometry and transforms. 
+    </table>
+
+    \sa
+    TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiViewportGeometry : public OdGiGeometry
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiViewportGeometry);
+
+  /** \details
+    Draws a polyline, with coordinates specified in Eye Coordinates.
+
+    \param numVertices [in]  Number of vertices.
+    \param vertexList [in]  Array of vertices.
+
+    \remarks
+    This polyline is drawn with a continuous linetype.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual void polylineEye(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) = 0;
+
+  /** \details
+    Draws a filled polygon, with coordinates specified in Eye Coordinates.
+
+    \param numVertices [in]  Number of vertices in the polygon.
+    \param vertexList [in]  Vertices of the polygon.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual void polygonEye(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) = 0;
+
+  /** \details
+    Draws a polyline, with coordinates specified in normalized device Coordinates.
+
+    \param numVertices [in]  Number of vertices in the polyline.
+    \param vertexList [in]  Vertices of the polyline.
+
+    \remarks
+    This polyline is drawn with a continuous linetype.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual void polylineDc(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) = 0;
+
+  /** \details
+    Draws a filled polygon, with coordinates specified in normalized device Coordinates.
+
+    \param numVertices [in]  Number of vertices in the polygon.
+    \param vertexList [in]  Vertices of the polygon.
+
+    \sa
+    Coordinate Systems
+  */
+  virtual void polygonDc(
+    OdUInt32 numVertices, 
+    const OdGePoint3d* vertexList) = 0;
+
+  /** \details
+    Draws the specified raster image.
+
+    \param origin [in]  Image origin.
+    \param u [in]  Image width vector.
+    \param v [in]  Image height vector.
+    \param pImage [in]  Pointer to the image object.
+    \param uvBoundary [in]  Array of image boundary points (may not be null).
+    \param numBoundPts [in]  Number of boundary points.
+    \param transparency [in]  True if and only if image transparency is on.
+    \param brightness [in]  Image brightness [0 .. 100].
+    \param contrast [in]  Image contrast [0 .. 100].
+    \param fade [in]  Image fade value [0 .. 100].
+
+    \note
+    All coordinates are in Model coordinates.
+  */
+  virtual void rasterImageDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage, 
+    const OdGePoint2d* uvBoundary, 
+    OdUInt32 numBoundPts,
+    bool transparency = false,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0) = 0;
+
+  /** \details
+    Draws the specified Windows Metafile.
+
+    \param origin [in]  Metafile origin.
+    \param u [in]  Metafile width vector.
+    \param v [in]  Metafile height vector.
+    \param pMetafile [in]  Pointer to the Metafile object.
+    \param dcAligned [in]  reserved.
+    \param baAllowClipping [in]  reserved.
+
+    \note
+    All coordinates are in Model coordinates.
+  */
+  virtual void  metafileDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool dcAligned = true,
+    bool allowClipping = false) = 0;
+
+  /** \details
+    Passes to the rendering framework an object that can render itself.
+
+    \param origin [in]  Object origin.
+    \param u [in]  Object width vector.
+    \param v [in]  Object height vector.
+    \param dcAligned [in]  reserved.
+    \param allowClipping [in]  reserved.
+    \param pDrawable [in]  Pointer to the drawable.
+    \remarks
+    Teigha uses this function to render Ole2Frame entities. 
+    
+    \note
+    ownerDrawDc is not conveyor primitive, so Teigha's rendering framework performs no processing 
+    (transformation, linetyping, or clipping) for this object. 
+
+    All coordinates are in Model coordinates.
+
+    \sa
+    OdGiSelfGdiDrawable.
+  */
+  virtual void ownerDrawDc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiSelfGdiDrawable* pDrawable,
+    bool dcAligned = true,
+    bool allowClipping = false);
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraits.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraits.h
new file mode 100755
index 0000000..f81eff0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraits.h
@@ -0,0 +1,236 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_VIEWPORT_TRAITS__
+#define __OD_GI_VIEWPORT_TRAITS__
+
+#include "TD_PackPush.h"
+
+#include "Gi.h"
+#include "CmColorBase.h"
+#include "StaticRxObject.h"
+
+class OdGiShadowParameters;
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiToneOperatorParameters : public OdRxObject
+{
+public:
+  enum ExteriorDaylightMode
+  {
+    kDaylightOff  = 0,
+    kDaylightOn   = 1,
+    kDaylightAuto = 2
+  };
+public:
+  ODRX_DECLARE_MEMBERS(OdGiToneOperatorParameters);
+
+  OdGiToneOperatorParameters();
+  // GCC < 4.4 uses generated copy constructor which is references private OdRxObject copy constructor
+  OdGiToneOperatorParameters(const OdGiToneOperatorParameters &params);
+  // User-defined destructor moved to header.
+  // MSVC compiler bug: http://connect.microsoft.com/VisualStudio/feedback/details/680927/dereferencing-of-incomplete-type-not-diagnosed-fails-to-synthesise-constructor-and-destructor
+  virtual ~OdGiToneOperatorParameters() { }
+
+  bool operator ==(const OdGiToneOperatorParameters &params) const;
+  bool operator !=(const OdGiToneOperatorParameters &params) const;
+  OdGiToneOperatorParameters &operator =(const OdGiToneOperatorParameters &params);
+
+  virtual void setIsActive(bool bActive);
+  virtual bool isActive() const;
+
+  virtual void setChromaticAdaptation(bool bEnable);
+  virtual bool chromaticAdaptation() const;
+
+  virtual void setColorDifferentiation(bool bEnable);
+  virtual bool colorDifferentiation() const;
+
+  virtual void setWhiteColor(const OdCmEntityColor &color);
+  virtual const OdCmEntityColor &whiteColor() const;
+
+  virtual void setProcessBackground(bool bProcessBg);
+  virtual bool processBackground() const;
+
+  virtual bool setBrightness(double fBrightness);
+  virtual double brightness() const;
+
+  virtual bool setContrast(double fContrast);
+  virtual double contrast() const;
+
+  virtual bool setMidTones(double fMidTones);
+  virtual double midTones() const;
+
+  virtual bool setExteriorDaylight(ExteriorDaylightMode mode);
+  virtual ExteriorDaylightMode exteriorDaylight() const;
+private:
+  bool m_bIsActive;
+  bool m_bChromaticAdaptation;
+  bool m_bColorDifferentiation;
+  OdCmEntityColor m_clrWhiteColor;
+  bool m_bProcessBackground;
+  double m_fBrightness;
+  double m_fContrast;
+  double m_fMidTones;
+  ExteriorDaylightMode m_eExteriorDaylight;
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiToneOperatorParametersStatic : public OdStaticRxObject<OdGiToneOperatorParameters>
+{
+  public:
+    OdGiToneOperatorParametersStatic() : OdStaticRxObject<OdGiToneOperatorParameters>() { }
+    bool operator ==(const OdGiToneOperatorParameters &params) const { return params == *this; }
+    bool operator !=(const OdGiToneOperatorParameters &params) const { return params != *this; }
+    OdGiToneOperatorParameters &operator =(const OdGiToneOperatorParameters &params) { return (static_cast<OdGiToneOperatorParameters&>(*this) = params); }
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiToneOperatorParameters object pointers.
+*/
+typedef OdSmartPtr<OdGiToneOperatorParameters> OdGiToneOperatorParametersPtr;
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiPhotographicExposureParameters : public OdGiToneOperatorParameters
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiPhotographicExposureParameters);
+
+  OdGiPhotographicExposureParameters();
+  OdGiPhotographicExposureParameters(const OdGiPhotographicExposureParameters &params);
+  // WinCE failed to build w/o user-defined destructor.
+  virtual ~OdGiPhotographicExposureParameters() { }
+
+  bool operator ==(const OdGiPhotographicExposureParameters &params) const;
+  bool operator !=(const OdGiPhotographicExposureParameters &params) const;
+  OdGiPhotographicExposureParameters &operator =(const OdGiPhotographicExposureParameters &params);
+
+  virtual bool setExposure(double fExposure);
+  virtual double exposure() const;
+
+  virtual bool setWhitePoint(double fWhitePoint);
+  virtual double whitePoint() const;
+
+  virtual bool setBrightness(double fBrightness);
+
+  OdCmEntityColor whitePointToColor() const;
+
+  static double convertExposureToBrightness(double fExposure);
+  static double convertBrightnessToExposure(double fBrightness);
+private:
+  double m_fExposure;
+  double m_fWhitePoint;
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiPhotographicExposureParametersStatic : public OdStaticRxObject<OdGiPhotographicExposureParameters>
+{
+public:
+  OdGiPhotographicExposureParametersStatic() : OdStaticRxObject<OdGiPhotographicExposureParameters>() { }
+  bool operator ==(const OdGiPhotographicExposureParameters &params) const { return params == *this; }
+  bool operator !=(const OdGiPhotographicExposureParameters &params) const { return params != *this; }
+  OdGiPhotographicExposureParameters &operator =(const OdGiPhotographicExposureParameters &params) { return (static_cast<OdGiPhotographicExposureParameters&>(*this) = params); }
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiPhotographicExposureParameters object pointers.
+*/
+typedef OdSmartPtr<OdGiPhotographicExposureParameters> OdGiPhotographicExposureParametersPtr;
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiViewportTraits : public OdGiSubEntityTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiViewportTraits);
+
+  enum DefaultLightingType 
+  {
+    kOneDistantLight  = 0,
+    kTwoDistantLights = 1,
+    kBackLighting     = 2,
+    kUserDefinedLight = 3
+  };
+
+  virtual bool isDefaultLightingOn() const = 0;
+  virtual void setDefaultLightingOn(bool b) = 0;
+
+  virtual DefaultLightingType defaultLightingType() const = 0;
+  virtual void setDefaultLightingType(DefaultLightingType) = 0;
+
+  virtual OdGeVector3d userDefinedLightDirection() const = 0;
+  virtual void setUserDefinedLightDirection(const OdGeVector3d& lightDirection) = 0;
+
+  virtual double defaultLightingIntensity() const = 0;
+  virtual void setDefaultLightingIntensity(double dIntensity) = 0;
+
+  virtual OdCmEntityColor defaultLightingColor() const = 0;
+  virtual void setDefaultLightingColor(const OdCmEntityColor& color) = 0;
+
+  virtual void defaultLightingShadowParameters(OdGiShadowParameters &params) const = 0;
+  virtual void setDefaultLightingShadowParameters(const OdGiShadowParameters &params) = 0;
+
+  virtual void setAmbientLightColor(const OdCmEntityColor& color) = 0;
+  virtual OdCmEntityColor ambientLightColor() const = 0;
+
+  virtual void setContrast(double contrast) = 0;
+  virtual double contrast() const = 0;
+
+  virtual void setBrightness(double brightness) = 0;
+  virtual double brightness() const = 0;
+
+  virtual void setBackground(OdDbStub* bg) = 0;
+  virtual OdDbStub* background() const = 0;
+
+  virtual void setRenderEnvironment(OdDbStub* re) = 0;
+  virtual OdDbStub* renderEnvironment () const = 0;
+
+  virtual void setRenderSettings(OdDbStub* rs) = 0;
+  virtual OdDbStub* renderSettings() const = 0;
+
+  virtual void setToneOperatorParameters(const OdGiToneOperatorParameters &params) = 0;
+  virtual void toneOperatorParameters(OdGiToneOperatorParameters &params) = 0;
+};
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+typedef OdSmartPtr<OdGiViewportTraits> OdGiViewportTraitsPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_VIEWPORT_TRAITS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraitsData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraitsData.h
new file mode 100755
index 0000000..9bc3005
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiViewportTraitsData.h
@@ -0,0 +1,255 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_VIEWPORT_TRAITS_DATA__
+#define __OD_GI_VIEWPORT_TRAITS_DATA__
+
+#include "TD_PackPush.h"
+
+#include "Ge/GeVector3d.h"
+#include "Gi/GiViewportTraits.h"
+#include "Gi/GiLightTraits.h"
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiViewportTraitsData
+{
+  OdDbStub*                               m_backgroundId;
+  bool                                    m_bDefLightOn;
+  OdGiViewportTraits::DefaultLightingType m_lightType;
+  OdGeVector3d                            m_userDefLightDir;
+  double                                  m_defLightIntensity;
+  OdCmEntityColor                         m_defLightColor;
+  OdGiShadowParameters                    m_defShadowParams;
+  OdCmEntityColor                         m_colorAmbient;
+  double                                  m_dBrightness;
+  double                                  m_dContrast;
+  OdDbStub*                               m_renderEnvId;
+  OdDbStub*                               m_renderSettings;
+  OdDbStub*                               m_visualStyle;
+  OdGiToneOperatorParametersPtr           m_pToneOperators;
+
+public:
+
+  OdGiViewportTraitsData()
+    : m_backgroundId(NULL)
+    , m_bDefLightOn(false)
+    , m_lightType(OdGiViewportTraits::kOneDistantLight)
+    , m_userDefLightDir(OdGeVector3d::kZAxis)
+    , m_defLightIntensity(0.5)
+    , m_defLightColor(255, 255, 255)
+    , m_defShadowParams()
+    , m_colorAmbient()
+    , m_dBrightness(50.0)
+    , m_dContrast(50.0)
+    , m_renderEnvId(NULL)
+    , m_renderSettings(NULL)
+    , m_visualStyle(NULL)
+  {
+    m_defShadowParams.setShadowsOn(false);
+    m_pToneOperators = OdGiToneOperatorParameters::createObject();
+  }
+
+  OdGiDrawable::DrawableType type() const { return OdGiDrawable::kViewport; }
+
+  void setBackground(OdDbStub* backgroundId)
+  {
+    m_backgroundId = backgroundId;
+  }
+  OdDbStub* background() const
+  {
+    return m_backgroundId;
+  }
+
+  void setDefaultLightingOn(bool on)
+  {
+    m_bDefLightOn = on;
+  }
+  bool isDefaultLightingOn() const
+  {
+    return m_bDefLightOn;
+  }
+
+  void setDefaultLightingType(OdGiViewportTraits::DefaultLightingType typ)
+  {
+    m_lightType = typ;
+  }
+  OdGiViewportTraits::DefaultLightingType defaultLightingType() const
+  {
+    return m_lightType;
+  }
+
+  OdGeVector3d userDefinedLightDirection() const
+  {
+    return m_userDefLightDir;
+  }
+  void setUserDefinedLightDirection(const OdGeVector3d& lightDirection)
+  {
+    m_userDefLightDir = lightDirection;
+  }
+
+  double defaultLightingIntensity() const
+  {
+    return m_defLightIntensity;
+  }
+  void setDefaultLightingIntensity(double dIntensity)
+  {
+    m_defLightIntensity = dIntensity;
+  }
+
+  const OdCmEntityColor &defaultLightingColor() const
+  {
+    return m_defLightColor;
+  }
+  void setDefaultLightingColor(const OdCmEntityColor& color)
+  {
+    m_defLightColor = color;
+  }
+
+  const OdGiShadowParameters &defaultLightingShadowParameters() const
+  {
+    return m_defShadowParams;
+  }
+  void setDefaultLightingShadowParameters(const OdGiShadowParameters &params)
+  {
+    m_defShadowParams = params;
+  }
+
+  void setAmbientLightColor(const OdCmEntityColor& clr)
+  {
+    m_colorAmbient = clr;
+  }
+  const OdCmEntityColor &ambientLightColor() const
+  {
+    return m_colorAmbient;
+  }
+
+  void setBrightness(double brightness)
+  {
+    m_dBrightness = brightness;
+  }
+  double brightness() const
+  {
+    return m_dBrightness;
+  }
+
+  void setContrast(double contrast)
+  {
+    m_dContrast = contrast;
+  }
+  double contrast() const
+  {
+    return m_dContrast;
+  }
+
+  void setRenderEnvironment(OdDbStub* renderEnvId)
+  {
+    m_renderEnvId = renderEnvId;
+  }
+  OdDbStub* renderEnvironment() const
+  {
+    return m_renderEnvId;
+  }
+
+  void setRenderSettings(OdDbStub* renderSettingsId)
+  {
+    m_renderSettings = renderSettingsId;
+  }
+  OdDbStub* renderSettings() const
+  {
+    return m_renderSettings;
+  }
+
+  void setVisualStyle(OdDbStub* visualStyleId)
+  {
+    m_visualStyle = visualStyleId;
+  }
+  OdDbStub* visualStyle() const
+  {
+    return m_visualStyle;
+  }
+
+  void setToneOperatorParameters(const OdGiToneOperatorParameters &params)
+  {
+    if (params.isKindOf(OdGiPhotographicExposureParameters::desc()))
+    {
+      if (!m_pToneOperators->isKindOf(OdGiPhotographicExposureParameters::desc()))
+        m_pToneOperators = OdGiPhotographicExposureParameters::createObject();
+      *static_cast<OdGiPhotographicExposureParameters*>(m_pToneOperators.get()) = static_cast<const OdGiPhotographicExposureParameters&>(params);
+    }
+    else
+    {
+      if (m_pToneOperators->isKindOf(OdGiPhotographicExposureParameters::desc()))
+        m_pToneOperators = OdGiToneOperatorParameters::createObject();
+      *m_pToneOperators = params;
+    }
+  }
+  void toneOperatorParameters(OdGiToneOperatorParameters &params) const
+  {
+    if (m_pToneOperators->isKindOf(OdGiPhotographicExposureParameters::desc()) &&
+        params.isKindOf(OdGiPhotographicExposureParameters::desc()))
+      static_cast<OdGiPhotographicExposureParameters&>(params) = *static_cast<const OdGiPhotographicExposureParameters*>(m_pToneOperators.get());
+    else
+      params = *m_pToneOperators;
+  }
+  const OdGiToneOperatorParameters &toneOperatorParameters() const
+  {
+    return *m_pToneOperators;
+  }
+
+  static bool compareToneOps(const OdGiToneOperatorParametersPtr &op1, const OdGiToneOperatorParametersPtr &op2)
+  {
+    const bool bPhoto1 = op1->isKindOf(OdGiPhotographicExposureParameters::desc());
+    const bool bPhoto2 = op2->isKindOf(OdGiPhotographicExposureParameters::desc());
+    if (bPhoto1 && bPhoto2)
+      return *static_cast<const OdGiPhotographicExposureParameters*>(op1.get()) == *static_cast<const OdGiPhotographicExposureParameters*>(op2.get());
+    else if (!bPhoto1 && !bPhoto2)
+      return *op1 == *op2;
+    return false;
+  }
+
+  bool operator ==(const OdGiViewportTraitsData &data2) const
+  {
+    return ((m_backgroundId == data2.m_backgroundId) &&
+            (m_bDefLightOn == data2.m_bDefLightOn) &&
+            (m_lightType == data2.m_lightType) &&
+            m_userDefLightDir.isEqualTo(data2.m_userDefLightDir) &&
+            (m_colorAmbient == data2.m_colorAmbient) &&
+            OdEqual(m_dBrightness, data2.m_dBrightness) &&
+            OdEqual(m_dContrast, data2.m_dContrast) &&
+            (m_renderEnvId == data2.m_renderEnvId) &&
+            (m_renderSettings == data2.m_renderSettings) &&
+            (m_visualStyle == data2.m_visualStyle) &&
+            compareToneOps(m_pToneOperators, data2.m_pToneOperators));
+  }
+  bool operator !=(const OdGiViewportTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_VIEWPORT_TRAITS_DATA__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyle.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyle.h
new file mode 100755
index 0000000..cdd4b1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyle.h
@@ -0,0 +1,1350 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIVISUALSTYLE_H__
+#define __ODGIVISUALSTYLE_H__
+
+#include "TD_PackPush.h"
+
+#include "Gi/Gi.h"
+#include "Gi/GiVariant.h"
+
+class OdCmColorBase;
+
+/** \details
+    This class represents a set of visual style properties that can be applied to the faces of graphical entities.  
+    
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiFaceStyle : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiFaceStyle);
+
+  /** \details
+    Defines the lighting model of the face style to apply to the faces of graphical entities.  
+  */
+  enum LightingModel
+  {
+    kInvisible = 0, // Faces are invisible.
+    kConstant  = 1, // Faces are drawn in a constant color. 
+    kPhong     = 2, // Faces are drawn with Phong model to approximate realistic direct lighting.
+    kGooch     = 3  // Faces are drawn with non-photorealistic lighting model for automatic technical illustration.
+  };
+
+  /** \details
+    Defines the calculation method used for application of lighting effects to faces.
+  */
+  enum LightingQuality
+  {
+    kNoLighting        = 0, // No lighting calculations are applied to the faces.
+    kPerFaceLighting   = 1, // Color is calculated for each face based on its orientation to the light sources of the scene.
+    kPerVertexLighting = 2, // Color is calculated for each vertex of a face based on its orientation to the light sources of the scene.
+    kPerPixelLighting  = 3  // Color is calculated for each pixel of a face based on its orientation to the light sources of the scene.
+  };
+
+  /** \details
+    Defines modifications that affect the color of a face before any lighting and shading calculations have been performed.
+  */
+  enum FaceColorMode
+  {
+    kNoColorMode     = 0, // Apply no modifications to the faces. 
+    kObjectColor     = 1, // Apply the color of the drawable object to the faces of the object.
+    kBackgroundColor = 2, // Apply the display background color to the faces.
+    kMono            = 3, // All faces are treated as having a specific color, resulting in a "monochromatic" effect. 
+    kTint            = 4, // All faces have the hue and saturation values of their color mapped to the hue and saturation values of a specific color, resulting in a "tinted" effect. The luminance value remains unchanged. 
+    kDesaturate      = 5  // Apply a desaturation percentage to the diffuse color of a material.
+  };
+
+  /** \details
+    Defines the modifiers applied to the faces using this face style.
+  */
+  enum FaceModifier
+  {
+    kNoFaceModifiers = 0,  // Apply no face modifiers to the faces. 
+    kOpacity         = 1,  // Apply an opacity value to the faces. If unset, faces are displayed with full opacity. If set, faces are displayed with a specified degree of opacity from completely opaque to completely transparent. 
+    kSpecular        = 2   // Apply a specular highlight (indicating reflection and shininess values) to a material that is applied to the faces.
+  };
+
+  /** \details
+    Copies values from the given face style to this face style.
+
+    \param style [in]  Reference to the OdGiFaceStyle to copy into this face style.
+  */
+  void set(const OdGiFaceStyle& style);
+
+  OdGiFaceStyle& operator=(const OdGiFaceStyle& style);
+  bool operator==(const OdGiFaceStyle& style) const;
+
+  /** \details
+    Sets the lighting model to the given value. All valid values are described in the LightingModel enumeration.
+
+    \param lightingModel [in]  Lighting model value to set.
+  */
+  virtual void setLightingModel(LightingModel lightingModel) = 0;
+  
+  /** \details
+    Returns the currently used lighting model of the face style.
+  */
+  virtual LightingModel lightingModel() const = 0;
+
+  /** \details
+    Sets the lighting quality of faces to the given value. All valid values are described in the LightingQuality enum.
+
+    \param lightingQuality [in]  Lighting quality value to set.
+  */
+  virtual void setLightingQuality(LightingQuality lightingQuality) = 0;
+
+  /** \details
+    Returns the currently used lighting quality of the face style.
+  */
+  virtual LightingQuality lightingQuality() const = 0;
+
+  /** \details
+    Sets the face color mode of the face style. All valid values are described in the FaceColorMode enum.
+
+    \param mode [in]  Face color mode value to set.
+  */
+  virtual void setFaceColorMode(FaceColorMode mode) = 0;
+
+  /** \details
+    Returns the currently used face color mode value.
+  */
+  virtual FaceColorMode faceColorMode() const = 0;
+
+  /** \details
+    Sets a collection of bitflags representing the face modifiers in effect.
+
+    \param nModifiers [in]  Unsigned long value that represents a collection of bitwise flags defined in the FaceModifier enum.
+  */
+  virtual void setFaceModifiers(unsigned long nModifiers) = 0;
+  
+  /** \details
+    Enables or disables the specified face modifier flag.
+
+    \param flag [in]  Flag to enable or disable.
+    \param bEnable [in]  Value that indicates whether to enable or disable the specified flag. 
+  */
+  virtual void setFaceModifierFlag(FaceModifier flag, bool bEnable) = 0;
+
+  /** \details
+    Returns the collection of currently used face modifier flags.
+  */
+  virtual unsigned long faceModifiers() const = 0;
+
+  /** \details
+    Returns whether the specified face modifier flag is enabled.
+    
+    \param flag [in]  Flag to be checked whether it's enabled or disabled.
+  */
+  virtual bool isFaceModifierFlagSet(FaceModifier flag) const = 0;
+
+  /** \details
+    Sets the opacity level of the faces.
+
+    \param nLevel [in]  Opacity level to set. Must be in the range from 0.0 (faces are fully transparent) to 1.0 (no transparency).   
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable the opacity. 
+  */
+  virtual void setOpacityLevel(double nLevel, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns whether the opacity level is applied to faces.
+  */
+  virtual double opacityLevel() const = 0;
+
+  /** \details
+    Sets the amount of specular highlight (indicating reflection and shininess values) of a faces material.
+
+    \param nAmount [in]  Amount of specular highlight of a faces material to set.
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable the specular highlight. 
+  */
+  virtual void setSpecularAmount(double nAmount, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns the amount of specular highlight applied to a faces material.
+  */
+  virtual double specularAmount() const = 0;
+
+  /** \details
+    Sets the color that will be applied to produce a monochromatic effect on the faces.
+
+    \param color [in]  Reference to an OdCmColorBase value to set.
+    \param bEnableMode [in]  Value that indicates whether to enable or disable the mono color mode. 
+  */
+  virtual void setMonoColor(const OdCmColorBase& color, bool bEnableMode) = 0;
+  
+  /** \details
+    Returns a color that is applied to produce a monochromatic effect on the faces.
+  */
+  virtual const OdCmColorBase& monoColor() const = 0;
+
+  /** \details
+    Returns a color that is applied to produce a monochromatic effect on the faces.
+  */
+  virtual OdCmColorBase& monoColor() = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiFaceStyle object pointers.
+*/
+typedef OdSmartPtr<OdGiFaceStyle> OdGiFaceStylePtr;
+
+/** \details
+    This class defines a set of visual style properties that can be applied to the edges of graphical entities.    
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiEdgeStyle : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiEdgeStyle);
+
+  /** \details
+    Defines the model that is used to display the edges.
+  */
+  enum EdgeModel
+  {
+    kNoEdges    = 0,  // No edges are displayed.
+    kIsolines   = 1,  // Display isolines.
+    kFacetEdges = 2   // Display facet edges (the edges between neighbouring faces).
+  };
+
+  /** \details
+    Defines a collection of bitflags that represent the combination of edge styles that are in effect for displaying edges.
+  */
+  enum EdgeStyle
+  {
+    kNoEdgeStyle  = 0,  // No edge styles are applied to the edges.
+    kVisible      = 1,  // Visible edges are displayed.
+    kSilhouette   = 2,  // Silhouette edges are displayed.
+    kObscured     = 4,  // Obscured edges are displayed.
+    kIntersection = 8   // Intersection edges are displayed.
+  };
+
+  /** \details
+    Defines a collection of modifiers that can be applied to edges to give them various types of effects.
+  */
+  enum EdgeModifier
+  {
+    kNoEdgeModifiers = 0x000, // No modifiers are applied.
+    kOverhang        = 0x001, // Allow an edge to overhang its start and end points by a specified amount. 
+    kJitter          = 0x002, // Apply a jitter effect to the edges. The jitter effect is produced by drawing extra lines adjacent to the original line, with a specific amount of perturbation away from the original line.
+    kWidth           = 0x004, // Apply a width to the edges. 
+    kColor           = 0x008, // Apply a color that differs from the drawable object color to the edges. 
+    kHaloGap         = 0x010, // Apply a halo gap percentage to the edges of an object that is hidden by another object, such that the specified gap is displayed between the edges of the hidden object and the edges of the object which hides it.
+    kLinetype        = 0x020, // Apply a linetype to the edges.
+    kAlwaysOnTop     = 0x040, // Force edges to be on top. Edges will not participate in the Z-ordering of the displayed drawables.
+    kOpacity         = 0x080, // Apply an opacity value to the edges. If unset, edges are displayed with full opacity. If set, edges are displayed with a specified degree of opacity from completely opaque to completely transparent.
+    kWiggle          = 0x100, // Apply a wiggle value to the edges.
+    kTexture         = 0x200  // Apply a material texture to the edges.
+  };
+
+  /** \details
+    Defines a collection of jitter values that can be applied to edges.
+  */
+  enum JitterAmount
+  {
+    kJitterLow    = 1,  // A small amount of perturbation. 
+    kJitterMedium = 2,  // A medium amount of perturbation. 
+    kJitterHigh   = 3   // A large amount of perturbation. 
+  };
+
+  /** \details
+    Defines a collection of wiggle values that can be applied to edges.
+  */
+  enum WiggleAmount
+  {
+    kWiggleLow    = 1,  // A small amount of perturbation.
+    kWiggleMedium = 2,  // A medium amount of perturbation.
+    kWiggleHigh   = 3   // A large amount of perturbation.
+  };
+
+  /** \details
+    Defines a collection of linetypes that can be applied to edges.
+  */
+  enum LineType
+  {
+    kSolid            = 1,  // A solid line pattern is used to display edges.
+    kDashed           = 2,  // A dashed line pattern is used to display edges.
+    kDotted           = 3,  // A dotted line pattern is used to display edges.
+    kShortDash        = 4,  // A short dashed line pattern is used to display edges.
+    kMediumDash       = 5,  // A medium dashed line pattern is used to display edges.
+    kLongDash         = 6,  // A long dashed line pattern is used to display edges.
+    kDoubleShortDash  = 7,  // A double short dashed line pattern is used to display edges.
+    kDoubleMediumDash = 8,  // A double medium dashed line pattern is used to display edges.
+    kDoubleLongDash   = 9,  // A double long dashed line pattern is used to display edges.
+    kMediumLongDash   = 10, // A medium long dashed line pattern is used to display edges.
+    kSparseDot        = 11  // A sparse dotted line pattern is used to display edges.
+  };
+
+  /** \details
+    Defines the type of geometry to which the edge styles should be applied.
+  */
+  enum EdgeStyleApply
+  {
+    kDefault, // Apply the edge style to the geometry as designed.
+    kAll      // Apply the edge style to all geometry.
+  };
+
+  /** \details
+    Sets a specified edge style value for this OdGiEdgeStyle object.
+
+    \param style [in]  Reference to an OdGiEdgeStyle value to be copied into this edge style.
+  */
+  void set(const OdGiEdgeStyle& style);
+  OdGiEdgeStyle& operator=(const OdGiEdgeStyle& style);
+  bool operator==(const OdGiEdgeStyle& style) const;
+
+  /** \details
+    Sets a specified edge model value for this OdGiEdgeStyle object.
+
+    \param model [in]  Edge model value to set. All available values are defined in the EdgeModel enum.
+  */
+  virtual void setEdgeModel(EdgeModel model) = 0;
+
+  /** \details
+    Returns the currently used edge model value for this OdGiEdgeStyle object. All model values are defined in the EdgeModel enumeration.
+  */
+  virtual EdgeModel edgeModel() const = 0;
+
+  /** \details
+    Sets a combination of values from the EdgeStyle enumeration as an edge styles value for this OdGiEdgeStyle object.
+
+    \param nStyles [in]  A combination of bit flags from the EdgeStyle enumeration indicating desired edge styles.
+  */
+  virtual void setEdgeStyles(unsigned long nStyles) = 0;
+
+  /** \details
+    Enables or disables the given edge styles flag.
+
+    \param flag [in]  A flag to enable or disable.
+    \param bEnable [in]  A boolean value indicating if the given flag is to be enabled or disabled.
+  */
+  virtual void setEdgeStyleFlag(EdgeStyle flag, bool bEnable) = 0;
+
+  /** \details
+    Returns an unsigned long value that represents a collection of edge style flags in effect.
+  */
+  virtual unsigned long edgeStyles() const = 0;
+
+  /** \details
+    Returns whether the specified face modifier flag is enabled.
+
+    \param flag [in]  Flag to be checked whether it's enabled or disabled.
+  */
+  virtual bool isEdgeStyleFlagSet(EdgeStyle flag) const = 0;
+
+  /** \details
+    Sets the color of intersection edges.
+
+    \param color [in]  Intersection edges color to set.
+  */
+  virtual void setIntersectionColor(const OdCmColorBase& color) = 0;
+
+  /** \details
+    Returns the color of intersection edges.
+  */
+  virtual const OdCmColorBase& intersectionColor() const = 0;
+
+  /** \details
+    Returns the color of intersection edges.
+  */
+  virtual OdCmColorBase& intersectionColor() = 0;
+
+  /** \details
+    Sets the color of obscured edges.
+
+    \param color [in]  Obscured edges color to set.
+  */
+  virtual void setObscuredColor(const OdCmColorBase& color) = 0;
+
+  /** \details
+    Returns the color of obscured edges.
+  */
+  virtual const OdCmColorBase& obscuredColor() const = 0;
+  
+  /** \details
+    Returns the color of obscured edges.
+  */
+  virtual OdCmColorBase& obscuredColor() = 0;
+
+  /** \details
+    Sets the linetype of obscured edges.
+
+    \param ltype [in]  Obscured edges linetype to set.
+  */
+  virtual void setObscuredLinetype(LineType ltype) = 0;
+
+  /** \details
+    Returns the linetype of obscured edges.
+  */
+  virtual LineType obscuredLinetype() const = 0;
+
+  /** \details
+    Sets the linetype of intersection edges.
+
+    \param ltype [in]  Intersection edges linetype to set.
+  */
+  virtual void setIntersectionLinetype(LineType ltype) = 0;
+
+  /** \details
+    Returns the linetype of intersection edges.
+  */
+  virtual LineType intersectionLinetype() const = 0;
+
+  /** \details
+    Sets the angle threshold, above which a facet edge representing adjoining facets will be displayed.
+
+    \param nAngle [in]  Threshold angle to set. 
+  */
+  virtual void setCreaseAngle(double nAngle) = 0;
+
+  /** \details
+    Returns the double value that is the angle threshold (in degrees) above which a facet edge representing adjoining facets will be displayed.
+  */
+  virtual double creaseAngle() const = 0;
+
+  /** \details
+    Sets a collection of bitflags representing the edge modifiers in effect.
+
+    \param nModifiers [in]  Unsigned long value that represents a collection of bitwise flags defined in the EdgeModifier enumeration.
+  */
+  virtual void setEdgeModifiers(unsigned long nModifiers) = 0;
+
+  /** \details
+    Enables or disables the specified edge modifier flag.
+
+    \param flag [in]  Flag to enable or disable.
+    \param bEnable [in]  Value that indicates whether to enable or disable the specified flag. 
+  */
+  virtual void setEdgeModifierFlag(EdgeModifier flag, bool bEnable) = 0;
+
+  /** \details
+    Returns the collection of currently used edge modifier flags.
+  */
+  virtual unsigned long edgeModifiers() const = 0;
+
+  /** \details
+    Returns whether the specified edge modifier flag is enabled.
+    
+    \param flag [in]  Flag to be checked whether it's enabled or disabled.
+  */
+  virtual bool isEdgeModifierFlagSet(EdgeModifier flag) const = 0;
+
+  /** \details
+    Sets the color of edges.
+    
+    \param color [in]  Color value to set.
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable the color.
+  */
+  virtual void setEdgeColor(const OdCmColorBase& color, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns the color of edges.
+  */
+  virtual const OdCmColorBase& edgeColor() const = 0;
+
+  /** \details
+    Returns the color of edges.
+  */
+  virtual OdCmColorBase& edgeColor() = 0;
+
+  /** \details
+    Sets the opacity level of edges.
+
+    \param nLevel [in]  Opacity level to set. Must be in the range from 0.0 (edges are fully transparent) to 1.0 (no transparency).   
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable the opacity. 
+  */
+  virtual void setOpacityLevel(double nLevel, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns the opacity level applied to edges.
+  */
+  virtual double opacityLevel() const = 0;
+
+  /** \details
+    Sets the edge width in pixels.
+
+    \param nWidth [in]  The width to set.   
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable the edge width. 
+  */
+  virtual void setEdgeWidth(int nWidth, bool bEnableModifier) = 0;
+  
+  /** \details
+    Returns the edge width in pixels.
+  */
+  virtual int edgeWidth() const = 0;
+
+  /** \details
+    Sets the amount (in pixels) that edges should overhang their start and end points.
+
+    \param nAmount [in]  The overhang amount.   
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable edge overhang. 
+  */
+  virtual void setOverhangAmount(int nAmount, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns the edge overhang in pixels.
+  */
+  virtual int overhangAmount() const = 0;
+
+  /** \details
+    Sets the amount of jitter effect to be applied to jittered edges. 
+
+    \param amount [in]  The jitter amount to set. All applicable values are defined in the JitterAmount enumeration.   
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable jitter effect. 
+  */
+  virtual void setJitterAmount(JitterAmount amount, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns the amount of jitter effect as a JitterAmount value.
+  */
+  virtual JitterAmount jitterAmount() const = 0;
+
+  /** \details
+    Sets the amount of wiggle effect to be applied to edges. 
+
+    \param amount [in]  The wiggle amount to set. All applicable values are defined in the WiggleAmount enumeration.   
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable wiggle effect. 
+  */
+  virtual void setWiggleAmount(WiggleAmount amount, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns the amount of wiggle effect as a WiggleAmount value.
+  */
+  virtual WiggleAmount wiggleAmount() const = 0;
+
+  /** \details
+    Sets the color of silhouette edges. 
+
+    \param color [in]  Reference to an OdCmColorBase value to set.   
+  */
+  virtual void setSilhouetteColor(const OdCmColorBase& color) = 0;
+
+  /** \details
+    Returns the silhouette color.
+  */
+  virtual const OdCmColorBase& silhouetteColor() const = 0;
+
+  /** \details
+    Returns the silhouette color.
+  */
+  virtual OdCmColorBase& silhouetteColor() = 0;
+
+  /** \details
+    Sets the width of silhouette edges. 
+
+    \param nWidth [in]  Width of silhouette edges (in pixels) to set.   
+  */
+  virtual void setSilhouetteWidth(short nWidth) = 0;
+
+  /** \details
+    Returns the width of silhouette edges in pixels.
+  */
+  virtual short silhouetteWidth() const = 0;
+
+  /** \details
+    Sets the amount of halo gap. 
+
+    \param nHaloGap [in]  The halo gap amount to set. Value must be from 0 to 100.   
+    \param bEnableModifier [in]  Value that indicates whether to enable or disable halo gap. 
+  */
+  virtual void setHaloGap(int nHaloGap, bool bEnableModifier) = 0;
+
+  /** \details
+    Returns the halo gap amount.
+  */
+  virtual int haloGap() const = 0;
+
+   /** \details
+    Sets the number of isolines. 
+
+    \param nIsolines [in]  The number of isolines to set. Value must be between 0 and 2047.   
+   */
+  virtual void setIsolines(unsigned short nIsolines) = 0;
+
+  /** \details
+    Returns the number of isolines.
+  */
+  virtual unsigned short isolines() const = 0;
+
+  /** \details
+    Sets whether hide precision should be enabled.
+
+    \param bHidePrecision [in]  Value that indicates whether to enable or disable hide precision.   
+  */
+  virtual void setHidePrecision(bool bHidePrecision) = 0;
+
+  /** \details
+    Returns if hide precision is enabled or disabled.
+  */
+  virtual bool hidePrecision() const = 0;
+
+  /** \details
+    Sets a type to what geometry the edge style should be applied.
+
+    \param apply [in]  Value that represents the type of geometry to which the edge styles should be applied.   
+  */
+  virtual void setEdgeStyleApply(EdgeStyleApply apply) = 0;
+
+  /** \details
+    Returns the type of geometry to which the edge style will be applied as an EdgeStyleApply value.
+  */
+  virtual EdgeStyleApply edgeStyleApply() const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiEdgeStyle object pointers.
+*/
+typedef OdSmartPtr<OdGiEdgeStyle> OdGiEdgeStylePtr;
+
+/** \details
+    This class defines a set of display properties that can be applied to graphical entities.
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiDisplayStyle : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiDisplayStyle);
+  
+  /** \details
+      Defines a combination of display settings that can be enabled.
+  */
+  enum DisplaySettings
+  {
+    kNone        = 0x00,  // No display settings are used.
+    kBackgrounds = 0x01,  // Backgrounds are enabled.
+    kLights      = 0x02,  // Lights are enabled.
+    kMaterials   = 0x04,  // Materials are enabled.
+    kTextures    = 0x08   // Textures are enabled.
+  };
+
+  /** \details
+    Defines shadows types that can be displayed.
+  */
+  enum ShadowType
+  {
+    kShadowsNone          = 0,  // No shadow is displayed.
+    kShadowsGroundPlane   = 1,  // Ground plane shadows are displayed.
+    kShadowsFull          = 2,  // Full shadows are displayed.       
+    kShadowsFullAndGround = 3   // Full shadows are displayed along with shadows on the ground plane. 
+  };
+
+  /** \details
+    Sets values of the given display style to this display style.
+
+    \param style [in]  Reference to the OdGiDisplayStyle to copy into this display style.
+  */
+  void set(const OdGiDisplayStyle& style);
+  OdGiDisplayStyle& operator=(const OdGiDisplayStyle& style);
+  bool operator==(const OdGiDisplayStyle& style) const;
+
+  /** \details
+    Sets a collection of bitflags representing the display settings.
+
+    \param nSettings [in]  Unsigned long value that represents a collection of bitwise flags defined in the DisplaySettings enumeration.
+  */
+  virtual void setDisplaySettings(unsigned long nSettings) = 0;
+
+  /** \details
+    Enables or disables the specified display settings flag.
+
+    \param flag [in]  Flag to enable or disable.
+    \param bEnable [in]  Value that indicates whether to enable or disable the specified flag. 
+  */
+  virtual void setDisplaySettingsFlag(DisplaySettings flag, bool bEnable) = 0;
+
+  /** \details
+    Returns the collection of currently used display settings flags.
+  */
+  virtual unsigned long displaySettings() const = 0;
+
+  /** \details
+    Returns whether the specified display settings flag is enabled.
+    
+    \param flag [in]  Flag to be checked whether it's enabled or disabled.
+  */
+  virtual bool isDisplaySettingsFlagSet(DisplaySettings flag) const = 0;
+
+  /** \details
+    Sets the brightness value.
+
+    \param value [in]  Brightness level to set.
+  */
+  virtual void setBrightness(double value) = 0;
+
+  /** \details
+    Returns the brightness level.
+  */
+  virtual double brightness() const = 0;
+
+  /** \details
+    Sets the shadow type.
+
+    \param type [in]  Shadow type to set. All available types are defined in the ShadowType enumeration.
+  */
+  virtual void setShadowType(ShadowType type) = 0;
+
+  /** \details
+    Returns the currently used shadow type.
+  */
+  virtual ShadowType shadowType() const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiDisplayStyle object pointers.
+*/
+typedef OdSmartPtr<OdGiDisplayStyle> OdGiDisplayStylePtr;
+
+
+/** \details
+    Namespace contains visual style property related enumerations.
+    <group TD_Namespaces>
+*/
+namespace OdGiVisualStyleProperties
+{
+  /** \details
+    Defines the get/set properties for a visual style.
+  */
+  enum Property
+  {
+    kInvalidProperty              = -1, // Invalid property. 
+
+    // Face properties
+
+    kFaceLightingModel            =  0, // The lighting model applied to the faces of drawables. See the FaceLightingModel enumeration.
+    kFaceLightingQuality          =  1, // The calculation method of lighting effects applied to faces. See the FaceLightingQuality enumeration.
+    kFaceColorMode                =  2, // The color mode applied to faces. See the FaceColorMode enumeration.
+    kFaceModifiers                =  3, // Modifications applied to faces. See the FaceModifiers enumeration.
+    kFaceOpacity                  =  4, // The face opacity property. Double value representing the face opacity level in the range from 0.0 (faces are fully transparent) to 1.0 (no transparency).
+    kFaceSpecular                 =  5, // The face specular property. Double value representing the specular highlight amount (indicating reflection and shininess values) of the material that is applied to faces.
+    kFaceMonoColor                =  6, // The face monocolor effect property. OdCmColor representing the color applied to produce a "monochromatic" effect on faces.
+
+    // Edge properties
+
+    kEdgeModel                    =  7, // The edge model property. See the EdgeModel enumeration.
+    kEdgeStyles                   =  8, // The edge style property. See the EdgeStyles enumeration.
+    kEdgeIntersectionColor        =  9, // The intersected edges color. OdCmColor representing the color applied to intersection edges.
+    kEdgeObscuredColor            = 10, // The obscured edges color. OdCmColor representing the color applied to obscured edges.
+    kEdgeObscuredLinePattern      = 11, // The line pattern applied to obscured edges. See the EdgeLinePattern enumeration.
+    kEdgeIntersectionLinePattern  = 12, // The line pattern applied to intersection edges. See the EdgeLinePattern enumeration.
+    kEdgeCreaseAngle              = 13, // The edge crease angle. Double value indicating angle threshold, above which a facet edge representing adjoining facets will be displayed.
+    kEdgeModifiers                = 14, // Modifications applied to edges. See the EdgeModifiers enumeration.
+    kEdgeColor                    = 15, // The edge color property. OdCmColor representing the color applied to edges. 
+    kEdgeOpacity                  = 16, // The edge opacity property. Double value representing the edge opacity level in the range from 0.0 (faces are fully transparent) to 1.0 (no transparency).
+    kEdgeWidth                    = 17, // The edge width property. Integer value representing edge width in pixels.
+    kEdgeOverhang                 = 18, // The edge overhang property. Integer value representing the amount, in pixels, that edges should overhang their start and end points.
+    kEdgeJitterAmount             = 19, // The edge jitter amount. See the EdgeJitterAmount enum.
+    kEdgeSilhouetteColor          = 20, // The edge silhouette color property. OdCmColor enumeration the color applied to silhouette edges. 
+    kEdgeSilhouetteWidth          = 21, // The edge silhouette width property. Short value representing silhouette edge width in pixels. 
+    kEdgeHaloGap                  = 22, // The edge halo gap amount. Integer value from 0 to 100 representing the halo gap. 
+    kEdgeIsolines                 = 23, // The isolines number property. Unsigned short value, between 0 and 2047, indicating the number of isolines to display for curved surfaces.
+    kEdgeHidePrecision            = 24, // The hide precision property. Boolean value indicating hide precision enabled. True if enabled; otherwise, false.
+
+    // Display properties
+
+    kDisplayStyles                = 25, // Display settings. See the DisplayStyles enumeration.
+    kDisplayBrightness            = 26, // The display brightness property. Double value indicating brightness. 
+    kDisplayShadowType            = 27, // The display shadow type property. See the DisplayShadowType enumeration.
+
+    // New in AC2011, 2013
+    kUseDrawOrder                 = 28, // Boolean value indicating whether draw order is enabled. True if enabled; otherwise, false.
+    kViewportTransparency         = 29, // Boolean value indicating whether viewport transparency is enabled. True if enabled; otherwise, false.
+    kLightingEnabled              = 30, // Boolean value indicating whether lightning is enabled. True if enabled; otherwise, false.
+    kPosterizeEffect              = 31, // Boolean value indicating whether posterize effect is enabled. True if enabled; otherwise, false.
+    kMonoEffect                   = 32, // Boolean value indicating whether mono effect is enabled. True if enabled; otherwise, false.
+
+    // New in 2013
+    kBlurEffect                   = 33, // Boolean value indicating whether blur effect is enabled. True if enabled; otherwise, false.
+    kPencilEffect                 = 34, // Boolean value indicating whether pencil effect is enabled. True if enabled; otherwise, false.
+    kBloomEffect                  = 35, // Boolean value indicating whether bloom effect is enabled. True if enabled; otherwise, false.
+    kPastelEffect                 = 36, // Boolean value indicating whether pastel effect is enabled. True if enabled; otherwise, false.
+    kBlurAmount                   = 37, // The blur amount property. Integer value representing amount of blur effect.
+    kPencilAngle                  = 38, // The pencil angle amount property. Double value representing the angle amount.
+    kPencilScale                  = 39, // The pencil scale amount property. Double value representing the scale amount.
+    kPencilPattern                = 40, // The pencil pattern amount property. Integer value representing the pencil pattern.
+    kPencilColor                  = 41, // The pencil color property. OdCmColor representing the pencil color.
+    kBloomThreshold               = 42, // The bloom effect threshold property. Integer value representing the threshold value.
+    kBloomRadius                  = 43, // The bloom effect radius. Integer value representing the bloom radius.
+    kTintColor                    = 44, // The tint color property. OdCmColor representing the color used for tint effect.
+    kFaceAdjustment               = 45, // Boolean value indicating face adjustment enabled. True if enabled; otherwise, false.
+    kPostContrast                 = 46, // The post-processing contrast property. Integer value representing the contrast value.
+    kPostBrightness               = 47, // The post-processing brightness property. Integer value representing the brightness value.
+    kPostPower                    = 48, // Integer value.
+    kTintEffect                   = 49, // Boolean value indicating tint effect enabled. True if enabled; otherwise, false.
+    kBloomIntensity               = 50, // The bloom intensity property. Integer value representing the intensity of the bloom effect.
+    kColor                        = 51, // OdCmColor value.
+    kTransparency                 = 52, // Double value.
+    kEdgeWiggleAmount             = 53, // The edge wiggle amount property. See the WiggleAmount enumeration.
+    kEdgeTexturePath              = 54, // The edge texture path property. String value representing the path to texture. 
+    kDepthOfField                 = 55, // Boolean value indicating depth of field effect enabled. True if enabled; otherwise, false.
+    kFocusDistance                = 56, // The focus distance property. Double value indicating the focus distance value.
+    kFocusWidth                   = 57, // The focus width property. Double value indicating the focus width value.
+
+    kPropertyCount                      // The number of visual style properties. 
+  };
+
+  //
+  // Face properties
+  //
+  /** \details
+    Defines the lighting model to apply to the faces of drawables.
+  */
+  enum FaceLightingModel
+  {
+    kInvisible            = 0,  // Faces are invisible.
+    kConstant             = 1,  // Faces are drawn in a constant color.
+    kPhong                = 2,  // Faces are drawn with Phong model to approximate realistic direct lighting.
+    kGooch                = 3,  // Faces are drawn with non-photorealistic lighting model for automatic technical illustration.
+    // New in 2011
+    kZebra                = 4
+  };
+  
+  /** \details
+    Defines the calculation method of lighting effects to apply to faces.
+  */
+  enum FaceLightingQuality
+  {
+    kNoLighting           = 0,  // No lighting calculations are applied to the faces.
+    kPerFaceLighting      = 1,  // Color is calculated for each face based on its orientation to the light sources of the scene.
+    kPerVertexLighting    = 2,  // Color is calculated for each vertex of a face based on its orientation to the light sources of the scene.
+    kPerPixelLighting     = 3   // Color is calculated for each pixel of a face based on its orientation to the light sources of the scene.
+  };
+  
+  /** \details
+    Defines modifications that affect the color of a face before 
+    any lighting and shading calculations have been performed.
+  */
+  enum FaceColorMode    
+  {
+    kNoColorMode          = 0,  // Apply no modifications to the faces. 
+    kObjectColor          = 1,  // Apply the color of the drawable object to the faces of the object.
+    kBackgroundColor      = 2,  // Apply the display background color to the faces.
+    kMono                 = 3,  // All faces are treated as having a specific color, resulting in a "monochromatic" effect. 
+    kTint                 = 4,  // All faces have the hue and saturation values of their colors mapped to the hue and saturation values of a specific color, resulting in a "tinted" effect. The luminance value remains unchanged. 
+    kDesaturate           = 5   // Apply a desaturation percentage to the diffuse color of a material.
+  };
+
+  /** \details
+    Bitfield that describes modifications to faces made before 
+    any lighting and shading calculations have been performed.
+  */
+  enum FaceModifiers    
+  {
+    kNoFaceModifiers      = 0,  // Apply no face modifiers to the faces. 
+    kFaceOpacityFlag      = 1,  // Apply an opacity value to the faces. If unset, faces are displayed with full opacity. If set, faces are displayed with a specified degree of opacity from completely opaque to completely transparent. 
+    kSpecularFlag         = 2   // Apply a specular highlight (indicating reflection and shininess values) to a material that is applied to the faces.
+  };
+
+  //
+  // Edge properties
+  //
+
+  /** \details
+    Defines the model that is used to display the edges.
+  */
+  enum  EdgeModel       
+  {
+    kNoEdges              = 0,  // No edges are displayed.
+    kIsolines             = 1,  // Display isolines.
+    kFacetEdges           = 2   // Display facet edges (the edges between neighbouring faces).
+  };
+
+  /** \details
+    Defines a collection of bitflags that represent the combination of edge styles to display.
+  */
+  enum EdgeStyles       
+  {
+    kNoEdgeStyle          = 0,  // No edge styles are applied to the edges.
+    kVisibleFlag          = 1,  // Visible edges are displayed.
+    kSilhouetteFlag       = 2,  // Silhouette edges are displayed. A silhouette edge is an edge connecting a back facing polygon with a front facing polygon.
+    kObscuredFlag         = 4,  // Obscured edges are displayed.
+    kIntersectionFlag     = 8   // Intersection edges are displayed.
+  };
+
+  /** \details
+    Defines a collection of modifiers that can be applied to edges to give them various types of effects.
+  */
+  enum EdgeModifiers    
+  {
+    kNoEdgeModifiers      =   0,  // No modifiers are applied.
+    kEdgeOverhangFlag     =   1,  // Allow an edge to overhang its start and end points by a specified amount. 
+    kEdgeJitterFlag       =   2,  // Apply a jitter effect to the edges. The jitter effect is produced by drawing extra lines adjacent to the original line, with a specific amount of perturbation away from the original line.
+    kEdgeWidthFlag        =   4,  // Apply a width to the edges.
+    kEdgeColorFlag        =   8,  // Apply a color that differs from the drawable object color to the edges. 
+    kEdgeHaloGapFlag      =  16,  // Apply a halo gap percentage to the edges of an object that is hidden by another object, such that the specified gap is displayed between the edges of the hidden object and the edges of the object which hides it.
+    kAlwaysOnTopFlag      =  64,  // Force edges to be on top. Edges will not participate in the Z-ordering of the displayed drawables.
+    kEdgeOpacityFlag      = 128,  // Apply an opacity value to the edges. If unset, edges are displayed with full opacity. If set, edges are displayed with a specified degree of opacity from completely opaque to completely transparent.
+    // New in 2013
+    kEdgeWiggleFlag       = 256,  // Apply a wiggle value to the edges.
+    kEdgeTextureFlag      = 512   // Apply a material textures to the edges.
+  };
+
+  /** \details
+    Defines a collection of jitter values that can be applied to edges.
+  */
+  enum EdgeJitterAmount
+  {
+    kJitterLow            = 1,  // A small amount of perturbation.
+    kJitterMedium         = 2,  // A medium amount of perturbation.
+    kJitterHigh           = 3   // A large amount of perturbation.
+  };
+
+  /** \details
+    Defines a collection of wiggle values that can be applied to edges.
+  */
+  enum EdgeWiggleAmount
+  {
+    kWiggleLow            = 1,  // A small amount of perturbation.
+    kWiggleMedium         = 2,  // A medium amount of perturbation.
+    kWiggleHigh           = 3   // A large amount of perturbation.
+  };
+
+  /** \details
+    Defines a collection of line patterns that can be applied to edges.
+  */
+  enum EdgeLinePattern
+  {
+    kSolid                =  1, // A solid line pattern is used to display edges.
+    kDashedLine           =  2, // A dashed line pattern is used to display edges.
+    kDotted               =  3, // A dotted line pattern is used to display edges.
+    kShortDash            =  4, // A short dashed line pattern is used to display edges.
+    kMediumDash           =  5, // A medium dashed line pattern is used to display edges.
+    kLongDash             =  6, // A long dashed line pattern is used to display edges.
+    kDoubleShortDash      =  7, // A double short dashed line pattern is used to display edges.
+    kDoubleMediumDash     =  8, // A double medium dashed line pattern is used to display edges.
+    kDoubleLongDash       =  9, // A double long dashed line pattern is used to display edges.
+    kMediumLongDash       = 10, // A medium long dashed line pattern is used to display edges.
+    kSparseDot            = 11  // A sparse dotted line pattern is used to display edges.
+  };
+
+  //
+  // Display properties
+  //
+  /** \details
+      Defines a combination of display settings that can be enabled.
+  */
+  enum DisplayStyles
+  {
+    kNoDisplayStyle       = 0,  // No display settings are used.
+    kBackgroundsFlag      = 1,  // Backgrounds are enabled.
+    kLightingFlag         = 2,  // Lights are enabled.
+    kMaterialsFlag        = 4,  // Materials are enabled.
+    kTexturesFlag         = 8   // Textures are enabled.
+  };
+
+  /** \details
+    Defines shadow types that can be displayed.
+  */
+  enum DisplayShadowType
+  {
+    kShadowsNone          = 0,  // No shadow is displayed.
+    kShadowsGroundPlane   = 1,  // Ground plane shadows are displayed.
+    kShadowsFull          = 2,  // Full shadows are displayed. 
+    kShadowsFullAndGround = 3   // Full shadows are displayed along with shadows on the ground plane.
+  };
+};
+
+/** \details
+    Describes what kind of operation to perform when setting a visual style property.
+
+    <group TD_Namespaces>
+*/
+namespace OdGiVisualStyleOperations
+{
+  enum Operation
+  {
+    kInvalidOperation = -1, // Invalid operation.
+    kInherit          =  0, // Use the last property value specified.
+    kSet              =  1, // Replace the last property value with the one specified. 
+    kDisable          =  2, // Disable the specified bits in the property bitmask. 
+    kEnable           =  3  // Enable the specified bits in the property bitmask.
+  };
+};
+
+/** \details
+    This class defines a collection of visual properties that can be applied to graphical entities.
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiVisualStyle : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiVisualStyle);
+
+/** \details
+    Describes the type of visual style.
+*/
+  enum Type
+  {
+    kFlat,              // Flat shaded visual style.
+    kFlatWithEdges,     // Flat shaded visual style with edges displayed.
+    kGouraud,           // Gouraud shaded visual style. 
+    kGouraudWithEdges,  // Gouraud shaded visual style with edges displayed.
+    k2DWireframe,       // 2D wireframe visual style (using 2D graphics system). 
+    k3DWireframe,       // 3D wireframe visual style (using 3D graphics system).
+    kHidden,            // Hidden visual style.
+    kBasic,             // Basic visual style (default).
+    kRealistic,         // Phong shaded visual style.
+    kConceptual,        // Custom, user defined visual visual style. 
+    kCustom,            // Custom, user defined visual visual style. 
+    kDim,               // Visual style used for a dimming effect.
+    kBrighten,          // Visual style used for a brightening effect.
+    kThicken,           // Visual style used for a thickening effect.
+    kLinePattern,       // Visual style used to apply a line pattern.
+    kFacePattern,       // Visual style used to apply a face pattern.
+    kColorChange,       // Visual style used to apply a change of color.
+
+    kFaceOnly,          // Visual style with only face properties. All non-face properties are set to inherit.
+    kEdgeOnly,          // Visual stle with edge properties only. All non-edge properties are set to inherit.
+    kDisplayOnly,       // Visual style with display properties only. All non-display properties are set to inherit.
+
+    kJitterOff,         // Edge style override visual style with jitter edges off. All other properties are set to inherit.
+    kOverhangOff,       // Edge style override visual style with overhang edges off. All other properties are set to inherit.
+    kEdgeColorOff,      // Edge style override visual style with edge color off. All other properties are set to inherit.
+    kShadesOfGray,      // Shades of gray visual style.
+    kSketchy,           // Sketchy visual style. 
+    kXRay,              // Xray visual style. 
+    kShadedWithEdges,   // Shade visual style with edges displayed.
+    kShaded,            // Shaded visual style.
+    kByViewport,        // Visual style by viewport.
+    kByLayer,           // Visual style by layer.
+    kByBlock,           // Visual style by block.
+    kEmptyStyle         // Visual style with all properties set to inherit. This effectively creates an empty style upon which a custom visual style can be built.
+  };
+
+  OdGiVisualStyle& operator=(const OdGiVisualStyle& visualStyle);
+  bool operator==(const OdGiVisualStyle& visualStyle) const;
+
+  /** \details
+    Returns a reference to OdGiFaceStyle of this visual style.
+  */
+  virtual OdGiFaceStyle& faceStyle (void) = 0;
+  /** \details
+    Returns a reference to OdGiEdgeStyle of this visual style.
+  */
+  virtual OdGiEdgeStyle& edgeStyle (void) = 0;
+  /** \details
+    Returns a reference to OdGiDisplayStyle of this visual style.
+  */
+  virtual OdGiDisplayStyle& displayStyle (void) = 0;
+
+  /** \details
+    Returns a reference to OdGiFaceStyle of this visual style.
+  */
+  virtual const OdGiFaceStyle& faceStyle (void) const = 0;
+  /** \details
+    Returns a reference to OdGiEdgeStyle of this visual style.
+  */
+  virtual const OdGiEdgeStyle& edgeStyle (void) const = 0;
+  /** \details
+    Returns a reference to OdGiDisplayStyle of this visual style.
+  */
+  virtual const OdGiDisplayStyle& displayStyle (void) const = 0;
+
+  /** \details
+    Copies all properties of OdGiFaceStyle into this visual style.
+    \param style [in]  Collection of face properties.
+  */
+  virtual void setFaceStyle (const OdGiFaceStyle& style) = 0;
+  /** \details
+    Copies all properties of OdGiEdgeStyle into this visual style.
+    \param style [in]  Collection of edge properties.
+  */
+  virtual void setEdgeStyle (const OdGiEdgeStyle& style) = 0;
+  /** \details
+    Copies all properties of OdGiDisplayStyle into this visual style.
+    \param style [in]  Collection of display properties.
+  */
+  virtual void setDisplayStyle (const OdGiDisplayStyle& style) = 0;
+
+  /** \details
+    Sets up all properties of this visual style to values predefined for the specified visual style type.
+    \param type [in]  Visual style type.
+    \remarks
+    Throws an exception if invalid type of configuration is specified.
+  */
+  void configureForType (Type type);
+
+  // New interface
+
+  /** \details
+    Sets the given visual style type. Multiple properties are modified to change the visual style into the specified type.
+    
+    \param type [in]  Type of the visual style to set. All available types are defined in the Type enumeration.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setType(Type type) = 0;
+
+  /** \details
+    Returns the current visual style type. 
+  */
+  virtual Type type() const = 0;
+
+  typedef OdGiVisualStyleProperties::Property Property;
+  typedef OdGiVisualStyleOperations::Operation Operation;
+
+  /** \details
+    Sets the operation associated with the given property.
+    
+    \param prop [in]  The property for which the operation is to set.
+    \param op [in]  The operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, Operation op) = 0;
+
+  /** \details
+    Sets a property of the visual style.
+    
+    \param prop [in]  Property to set.
+    \param pVal [in]  Pointer to the OdGiVariant property value to set.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, const OdGiVariant *pVal,
+                        Operation op = OdGiVisualStyleOperations::kSet) = 0;
+
+  /** \details
+    Sets an integer property of the visual style.
+    
+    \param prop [in]  Property to set.
+    \param nVal [in]  Property value to set.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, OdInt32 nVal,
+                        Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+    Sets a boolean property of the visual style.
+    
+    \param prop [in]  Property to set.
+    \param bVal [in]  Property value to set.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, bool bVal,
+                        Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+    Sets a double property of the visual style.
+    
+    \param prop [in]  Property to set.
+    \param bVal [in]  Property value to set.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, double dVal,
+                        Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+    Sets a color property of the visual style.
+    
+    \param prop [in]  Color property to set.
+    \param red [in]  Red color component value. Valid values are from 0.0 to 1.0.
+    \param green [in]  Green component value. Valid values are from 0.0 to 1.0.
+    \param blue [in]  Blue component value. Valid values are from 0.0 to 1.0.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, double red, double green, double blue,
+                        Operation op = OdGiVisualStyleOperations::kSet);
+  /** \details
+    Sets a color property of the visual style.
+    
+    \param prop [in]  Color property to set.
+    \param pColor [in]  Reference to the color value to set.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, const OdCmColorBase &pColor,
+                        Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+    Sets a color property of the visual style.
+    
+    \param prop [in]  Color property to set.
+    \param pColor [in]  Reference to the color value to set.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, const OdCmEntityColor &pColor,
+                        Operation op = OdGiVisualStyleOperations::kSet);
+  
+  /** \details
+    Sets a string property of the visual style.
+    
+    \param prop [in]  String property to set.
+    \param pStr [in]  Reference to string value to set.
+    \param op [in]  Operation to use for setting the property.
+
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTrait(Property prop, const OdString &pStr,
+                        Operation op = OdGiVisualStyleOperations::kSet);
+
+  /** \details
+    Gets a property of the visual style.
+    
+    \param prop [in]  Property to get.
+    \param pOp [out]  Pointer to the operation used for the property. If NULL, nothing is returned.
+
+    \returns
+    OdGiVariantPtr for the property value if successful, otherwise an empty OdGiVariantPtr object.
+  */
+  virtual OdGiVariantPtr trait(Property prop, Operation *pOp = NULL) const = 0;
+
+  /** \details
+    Gets the operation associated with the given property of the visual style.
+    
+    \param prop [in]  Property for which the associated operation value is to be returned.
+    
+    \returns
+    Operation associated with the specified property if successful, otherwise the kInvalidOperation value.
+  */
+  virtual Operation operation(Property prop) const = 0;
+
+
+  /** \details
+    Sets a property flag into the visual style (for properties which are bitfield enumerations).
+    
+    \param flagProp [in]  Bitfield enumeration property to set.
+    \param flagVal [in]  Bit flag enumeration property to set into the visual style. 
+    \param bEnable [in]  Bool value set to true to enable the flag, false to disable.
+    
+    \returns
+    True if successful, otherwise false.
+  */
+  virtual bool setTraitFlag(Property flagProp, OdUInt32 flagVal, bool bEnable = true);
+
+  /** \details
+    Returns whether the given property flag from the visual style is enabled (for properties which are bitfield enumerations).
+  
+    \param flagProp [in]  Bitfield enumeration property.
+    \param flagVal [in]  Bit flag enumeration property to check if it's enable.
+    
+    \returns
+    True if the flag is enabled, otherwise false.
+  */
+  virtual bool traitFlag(Property flagProp, OdUInt32 flagVal) const;
+
+  /** \details
+    Returns the data type of the given visual style property.
+  
+    \param prop [in]  Visual style property.
+  */
+  static OdGiVariant::VariantType propertyType(Property prop);
+private:
+  void configureForFlat();
+  void configureForFlatWithEdges();
+  void configureForGouraud();
+  void configureForGouraudWithEdges();
+  void configureForBasic();
+  void configureFor2DWireframe();
+  void configureFor3DWireframe();
+  void configureForHidden();
+  void configureForRealistic();
+  void configureForConceptual();
+  void configureForDim();
+  void configureForBrighten();
+  void configureForThicken();
+  void configureForLinePattern();
+  void configureForFacePattern();
+  void configureForColorChange();
+
+  // Extended configurations
+  void configureForFaceOnly();
+  void configureForEdgeOnly();
+  void configureForDisplayOnly();
+
+  void configureForJitterOff();
+  void configureForOverhangOff();
+  void configureForEdgeColorOff();
+  void configureForShadesOfGray();
+  void configureForSketchy();
+  void configureForXRay();
+  void configureForShadedWithEdges();
+  void configureForShaded();
+  void configureForByViewport();
+  void configureForByLayer();
+  void configureForByBlock();
+  void configureForEmptyStyle();
+
+  // Extended flags configuration
+  void configureForAc27(bool b2d = false);
+
+  // Clear all changes which is made before
+  void configureForInit();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiVisualStyle object pointers.
+*/
+typedef OdSmartPtr<OdGiVisualStyle> OdGiVisualStylePtr;
+
+/** \details
+
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class FIRSTDLL_EXPORT OdGiVisualStyleTraits : public OdGiDrawableTraits
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiVisualStyleTraits);
+
+  virtual void setOdGiVisualStyle(const OdGiVisualStyle& visualStyle) = 0;
+  virtual const OdGiVisualStyle& odgiVisualStyle() const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiVisualStyleTraits object pointers.
+*/
+typedef OdSmartPtr<OdGiVisualStyleTraits> OdGiVisualStyleTraitsPtr;
+
+#include "TD_PackPop.h"
+
+#endif //__ODGIVISUALSTYLE_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleData.h
new file mode 100755
index 0000000..16c033a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleData.h
@@ -0,0 +1,720 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIVISUALSTYLEDATA_H__
+#define __ODGIVISUALSTYLEDATA_H__
+
+#include "Gi/GiVisualStyle.h"
+#include "StaticRxObject.h"
+#include "CmColor.h"
+
+#include "TD_PackPush.h"
+
+// OdGiVisualStyleDataContainer
+
+/** \details
+  <group OdGi_Classes>
+
+  This class defines the container for visual style data.
+
+  Library: TD_Gi
+*/
+class OdGiVisualStyleDataContainer : public OdStaticRxObject<OdGiVisualStyle>
+{
+  public:
+    // OdCmEntityColor wrapper for OdCmColorBase interface
+    struct OdCmColorBaseAdapt : public OdCmColorBase
+    {
+      OdGiVariant *m_pVar;
+
+      OdCmColorBaseAdapt() : m_pVar(NULL) { }
+
+      void setBase(OdGiVariant *pVar) { m_pVar = pVar; }
+      OdGiVariant *base() { return m_pVar; }
+
+      OdCmEntityColor &entColor() { return const_cast<OdCmEntityColor&>(m_pVar->asColor()); }
+      const OdCmEntityColor &entColor() const { return m_pVar->asColor(); }
+
+      OdCmEntityColor::ColorMethod colorMethod() const { return entColor().colorMethod(); }
+      void setColorMethod(OdCmEntityColor::ColorMethod colorMethod) { entColor().setColorMethod(colorMethod); }
+      bool isByColor() const { return entColor().isByColor(); }
+      bool isByLayer() const { return entColor().isByLayer(); }
+      bool isByBlock() const { return entColor().isByBlock(); }
+      bool isByACI() const { return entColor().isByACI(); }
+      bool isForeground() const { return entColor().isForeground(); }
+      bool isByDgnIndex() const { return entColor().isByDgnIndex(); }
+      OdUInt32 color() const { return entColor().color(); }
+      void setColor(OdUInt32 color) { entColor().setColor(color); }
+      void setRGB(OdUInt8 red, OdUInt8 green, OdUInt8 blue) { entColor().setRGB(red, green, blue); }
+      void setRed(OdUInt8 red) { entColor().setRed(red); }
+      void setGreen(OdUInt8 green) { entColor().setGreen(green); }
+      void setBlue(OdUInt8 blue) { entColor().setBlue(blue); }
+      OdUInt8 red() const { return entColor().red(); }
+      OdUInt8 green() const { return entColor().green(); }
+      OdUInt8 blue() const { return entColor().blue(); }
+      OdUInt16 colorIndex() const { return entColor().colorIndex(); }
+      void setColorIndex(OdUInt16 colorIndex) { entColor().setColorIndex(colorIndex); }
+#if 0
+      OdCmEntityColor m_entColor;
+
+      OdCmColorBaseAdapt() : m_entColor() { }
+      OdCmColorBaseAdapt(OdUInt8 red, OdUInt8 green, OdUInt8 blue) : m_entColor(red, green, blue) { }
+      OdCmColorBaseAdapt(const OdCmEntityColor &cColor) : m_entColor(cColor) { }
+      OdCmColorBaseAdapt(const OdCmColorBase &cColor) { m_entColor.setColor(cColor.color()); }
+      OdCmColorBaseAdapt(OdCmEntityColor::ColorMethod cm) : m_entColor(cm) { }
+
+      OdCmEntityColor::ColorMethod colorMethod() const { return m_entColor.colorMethod(); }
+      void setColorMethod(OdCmEntityColor::ColorMethod colorMethod) { m_entColor.setColorMethod(colorMethod); }
+      bool isByColor() const { return m_entColor.isByColor(); }
+      bool isByLayer() const { return m_entColor.isByLayer(); }
+      bool isByBlock() const { return m_entColor.isByBlock(); }
+      bool isByACI() const { return m_entColor.isByACI(); }
+      bool isForeground() const { return m_entColor.isForeground(); }
+      bool isByDgnIndex() const { return m_entColor.isByDgnIndex(); }
+      OdUInt32 color() const { return m_entColor.color(); }
+      void setColor(OdUInt32 color) { m_entColor.setColor(color); }
+      void setRGB(OdUInt8 red, OdUInt8 green, OdUInt8 blue) { m_entColor.setRGB(red, green, blue); }
+      void setRed(OdUInt8 red) { m_entColor.setRed(red); }
+      void setGreen(OdUInt8 green) { m_entColor.setGreen(green); }
+      void setBlue(OdUInt8 blue) { m_entColor.setBlue(blue); }
+      OdUInt8 red() const { return m_entColor.red(); }
+      OdUInt8 green() const { return m_entColor.green(); }
+      OdUInt8 blue() const { return m_entColor.blue(); }
+      OdUInt16 colorIndex() const { return m_entColor.colorIndex(); }
+      void setColorIndex(OdUInt16 colorIndex) { m_entColor.setColorIndex(colorIndex); }
+#endif
+      // Unnecessary methods
+      bool setNames(const OdString& /*colorName*/, const OdString& /*bookName*/ = OdString::kEmpty) { return false; }
+      OdString colorName() const { return OdString::kEmpty; }
+      OdString bookName() const { return OdString::kEmpty; }
+      OdString colorNameForDisplay() const { return OdString::kEmpty; }
+    };
+    // Style subclasses
+    class OdGiFaceStyleDataContainer : public OdStaticRxObject<OdGiFaceStyle>
+    {
+      protected:
+        OdGiVisualStyle           *m_pBase;
+        mutable OdCmColorBaseAdapt m_cmMonoColor;
+      public:
+        OdGiFaceStyleDataContainer()
+          : m_pBase(NULL)
+        {
+        }
+        ~OdGiFaceStyleDataContainer()
+        {
+        }
+
+        void setBase(OdGiVisualStyle *pBase)
+        {
+          m_pBase = pBase;
+          m_cmMonoColor.setBase(m_pBase->trait(OdGiVisualStyleProperties::kFaceMonoColor).get());
+        }
+        OdGiVisualStyle *base() const
+        {
+          return m_pBase;
+        }
+
+        virtual void setLightingModel(LightingModel lightingModel)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kFaceLightingModel, (OdInt32)lightingModel);
+        }
+        virtual LightingModel lightingModel() const
+        {
+          return (LightingModel)m_pBase->trait(OdGiVisualStyleProperties::kFaceLightingModel)->asInt();
+        }
+
+        virtual void setLightingQuality(LightingQuality lightingQuality)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kFaceLightingQuality, (OdInt32)lightingQuality);
+        }
+        virtual LightingQuality lightingQuality() const
+        {
+          return (LightingQuality)m_pBase->trait(OdGiVisualStyleProperties::kFaceLightingQuality)->asInt();
+        }
+
+        virtual void setFaceColorMode(FaceColorMode mode)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kFaceColorMode, (OdInt32)mode);
+        }
+        virtual FaceColorMode faceColorMode() const
+        {
+          return (FaceColorMode)m_pBase->trait(OdGiVisualStyleProperties::kFaceColorMode)->asInt();
+        }
+
+        virtual void setFaceModifiers(unsigned long nModifiers)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kFaceModifiers, (OdInt32)nModifiers);
+        }
+        virtual void setFaceModifierFlag(FaceModifier flag, bool bEnable)
+        {
+          m_pBase->setTraitFlag(OdGiVisualStyleProperties::kFaceModifiers, flag, bEnable);
+        }
+        virtual unsigned long faceModifiers() const
+        {
+          return (unsigned long)m_pBase->trait(OdGiVisualStyleProperties::kFaceModifiers)->asInt();
+        }
+        virtual bool isFaceModifierFlagSet(FaceModifier flag) const
+        {
+          return m_pBase->traitFlag(OdGiVisualStyleProperties::kFaceModifiers, flag);
+        }
+
+        virtual void setOpacityLevel(double nLevel, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kFaceOpacity, nLevel);
+          if (bEnableModifier)
+            setFaceModifierFlag(kOpacity, bEnableModifier);
+        }
+        virtual double opacityLevel() const
+        {
+          return m_pBase->trait(OdGiVisualStyleProperties::kFaceOpacity)->asDouble();
+        }
+
+        virtual void setSpecularAmount(double nAmount, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kFaceSpecular, nAmount);
+          if (bEnableModifier)
+            setFaceModifierFlag(kSpecular, bEnableModifier);
+        }
+        virtual double specularAmount() const
+        {
+          return m_pBase->trait(OdGiVisualStyleProperties::kFaceSpecular)->asDouble();
+        }
+
+        virtual void setMonoColor(const OdCmColorBase& color, bool bEnableMode)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kFaceMonoColor, color);
+          if (bEnableMode)
+            setFaceColorMode(kMono);
+        }
+        virtual const OdCmColorBase& monoColor() const
+        {
+          return m_cmMonoColor;
+        }
+        virtual OdCmColorBase& monoColor()
+        {
+          return m_cmMonoColor;
+        }
+    };
+    class OdGiEdgeStyleDataContainer : public OdStaticRxObject<OdGiEdgeStyle>
+    {
+      protected:
+        OdGiVisualStyle           *m_pBase;
+        mutable OdCmColorBaseAdapt m_cmIntColor;
+        mutable OdCmColorBaseAdapt m_cmObColor;
+        mutable OdCmColorBaseAdapt m_cmEdgeColor;
+        mutable OdCmColorBaseAdapt m_cmSilColor;
+        EdgeStyleApply             m_esApply;
+      public:
+        OdGiEdgeStyleDataContainer()
+          : m_pBase(NULL)
+          , m_esApply(kDefault)
+        {
+        }
+        ~OdGiEdgeStyleDataContainer()
+        {
+        }
+
+        void setBase(OdGiVisualStyle *pBase)
+        {
+          m_pBase = pBase;
+          m_cmIntColor.setBase(m_pBase->trait(OdGiVisualStyleProperties::kEdgeIntersectionColor).get());
+          m_cmObColor.setBase(m_pBase->trait(OdGiVisualStyleProperties::kEdgeObscuredColor).get());
+          m_cmEdgeColor.setBase(m_pBase->trait(OdGiVisualStyleProperties::kEdgeColor).get());
+          m_cmSilColor.setBase(m_pBase->trait(OdGiVisualStyleProperties::kEdgeSilhouetteColor).get());
+        }
+        OdGiVisualStyle *base() const
+        {
+          return m_pBase;
+        }
+
+        virtual void setEdgeModel(EdgeModel model)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeModel, (OdInt32)model);
+        }
+        virtual EdgeModel edgeModel() const
+        {
+          return (EdgeModel)m_pBase->trait(OdGiVisualStyleProperties::kEdgeModel)->asInt();
+        }
+
+        virtual void setEdgeStyles(unsigned long nStyles)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeStyles, (OdInt32)nStyles);
+        }
+        virtual void setEdgeStyleFlag(EdgeStyle flag, bool bEnable)
+        {
+          m_pBase->setTraitFlag(OdGiVisualStyleProperties::kEdgeStyles, flag, bEnable);
+        }
+        virtual unsigned long edgeStyles() const
+        {
+          return (unsigned long)m_pBase->trait(OdGiVisualStyleProperties::kEdgeStyles)->asInt();
+        }
+        virtual bool isEdgeStyleFlagSet(EdgeStyle flag) const
+        {
+          return m_pBase->traitFlag(OdGiVisualStyleProperties::kEdgeStyles, flag);
+        }
+
+        virtual void setIntersectionColor(const OdCmColorBase& color)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeIntersectionColor, color);
+        }
+        virtual const OdCmColorBase& intersectionColor() const
+        {
+          return m_cmIntColor;
+        }
+        virtual OdCmColorBase& intersectionColor()
+        {
+          return m_cmIntColor;
+        }
+
+        virtual void setObscuredColor(const OdCmColorBase& color)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeObscuredColor, color);
+        }
+        virtual const OdCmColorBase& obscuredColor() const
+        {
+          return m_cmObColor;
+        }
+        virtual OdCmColorBase& obscuredColor()
+        {
+          return m_cmObColor;
+        }
+
+        virtual void setObscuredLinetype(LineType ltype)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeObscuredLinePattern, (OdInt32)ltype);
+        }
+        virtual LineType obscuredLinetype() const
+        {
+          return (LineType)m_pBase->trait(OdGiVisualStyleProperties::kEdgeObscuredLinePattern)->asInt();
+        }
+
+        virtual void setIntersectionLinetype(LineType ltype)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeIntersectionLinePattern, (OdInt32)ltype);
+        }
+        virtual LineType intersectionLinetype() const
+        {
+          return (LineType)m_pBase->trait(OdGiVisualStyleProperties::kEdgeIntersectionLinePattern)->asInt();
+        }
+
+        virtual void setCreaseAngle(double nAngle)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeCreaseAngle, nAngle);
+        }
+        virtual double creaseAngle() const
+        {
+          return m_pBase->trait(OdGiVisualStyleProperties::kEdgeCreaseAngle)->asDouble();
+        }
+
+        virtual void setEdgeModifiers(unsigned long nModifiers)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeModifiers, (OdInt32)nModifiers);
+        }
+        virtual void setEdgeModifierFlag(EdgeModifier flag, bool bEnable)
+        {
+          m_pBase->setTraitFlag(OdGiVisualStyleProperties::kEdgeModifiers, flag, bEnable);
+        }
+        virtual unsigned long edgeModifiers() const
+        {
+          return (unsigned long)m_pBase->trait(OdGiVisualStyleProperties::kEdgeModifiers)->asInt();
+        }
+        virtual bool isEdgeModifierFlagSet(EdgeModifier flag) const
+        {
+          return m_pBase->traitFlag(OdGiVisualStyleProperties::kEdgeModifiers, flag);
+        }
+
+        virtual void setEdgeColor(const OdCmColorBase& color, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeColor, color);
+        }
+        virtual const OdCmColorBase& edgeColor() const
+        {
+          return m_cmEdgeColor;
+        }
+        virtual OdCmColorBase& edgeColor()
+        {
+          return m_cmEdgeColor;
+        }
+
+        virtual void setOpacityLevel(double nLevel, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeOpacity, nLevel);
+          if (bEnableModifier)
+            setEdgeModifierFlag(kOpacity, bEnableModifier);
+        }
+        virtual double opacityLevel() const
+        {
+          return m_pBase->trait(OdGiVisualStyleProperties::kEdgeOpacity)->asDouble();
+        }
+
+        virtual void setEdgeWidth(int nWidth, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeWidth, (OdInt32)nWidth);
+          if (bEnableModifier)
+            setEdgeModifierFlag(kWidth, bEnableModifier);
+        }
+        virtual int edgeWidth() const
+        {
+          return (int)m_pBase->trait(OdGiVisualStyleProperties::kEdgeWidth)->asInt();
+        }
+
+        virtual void setOverhangAmount(int nAmount, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeOverhang, (OdInt32)nAmount);
+          if (bEnableModifier)
+            setEdgeModifierFlag(kOverhang, bEnableModifier);
+        }
+        virtual int overhangAmount() const
+        {
+          return (int)m_pBase->trait(OdGiVisualStyleProperties::kEdgeOverhang)->asInt();
+        }
+
+        virtual void setJitterAmount(JitterAmount amount, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeJitterAmount, (OdInt32)amount);
+          if (bEnableModifier)
+            setEdgeModifierFlag(kJitter, bEnableModifier);
+        }
+        virtual JitterAmount jitterAmount() const
+        {
+          return (JitterAmount)m_pBase->trait(OdGiVisualStyleProperties::kEdgeJitterAmount)->asInt();
+        }
+
+        virtual void setWiggleAmount(WiggleAmount amount, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeWiggleAmount, (OdInt32)amount);
+          if (bEnableModifier)
+            setEdgeModifierFlag(kWiggle, bEnableModifier);
+        }
+        virtual WiggleAmount wiggleAmount() const
+        {
+          return (WiggleAmount)m_pBase->trait(OdGiVisualStyleProperties::kEdgeWiggleAmount)->asInt();
+        }
+
+        virtual void setSilhouetteColor(const OdCmColorBase& color)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeSilhouetteColor, color);
+        }
+        virtual const OdCmColorBase& silhouetteColor() const
+        {
+          return m_cmSilColor;
+        }
+        virtual OdCmColorBase& silhouetteColor()
+        {
+          return m_cmSilColor;
+        }
+
+        virtual void setSilhouetteWidth(short nWidth)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeSilhouetteWidth, (OdInt32)nWidth);
+        }
+        virtual short silhouetteWidth() const
+        {
+          return (short)m_pBase->trait(OdGiVisualStyleProperties::kEdgeSilhouetteWidth)->asInt();
+        }
+
+        virtual void setHaloGap(int nHaloGap, bool bEnableModifier)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeHaloGap, (OdInt32)nHaloGap);
+          if (bEnableModifier)
+            setEdgeModifierFlag(kHaloGap, bEnableModifier);
+        }
+        virtual int haloGap() const
+        {
+          return (int)m_pBase->trait(OdGiVisualStyleProperties::kEdgeHaloGap)->asInt();
+        }
+
+        virtual void setIsolines(unsigned short nIsolines)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeIsolines, (OdInt32)nIsolines);
+        }
+        virtual unsigned short isolines() const
+        {
+          return (unsigned short)m_pBase->trait(OdGiVisualStyleProperties::kEdgeIsolines)->asInt();
+        }
+
+        virtual void setHidePrecision(bool bHidePrecision)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kEdgeHidePrecision, bHidePrecision);
+        }
+        virtual bool hidePrecision() const
+        {
+          return (unsigned short)m_pBase->trait(OdGiVisualStyleProperties::kEdgeHidePrecision)->asBoolean();
+        }
+
+        virtual void setEdgeStyleApply(EdgeStyleApply apply)
+        {
+          m_esApply = apply;
+        }
+        virtual EdgeStyleApply edgeStyleApply() const
+        {
+          return m_esApply;
+        }
+    };
+    class OdGiDisplayStyleDataContainer : public OdStaticRxObject<OdGiDisplayStyle>
+    {
+      protected:
+        OdGiVisualStyle           *m_pBase;
+      public:
+        OdGiDisplayStyleDataContainer()
+          : m_pBase(NULL)
+        {
+        }
+        ~OdGiDisplayStyleDataContainer()
+        {
+        }
+
+        void setBase(OdGiVisualStyle *pBase)
+        {
+          m_pBase = pBase;
+        }
+        OdGiVisualStyle *base() const
+        {
+          return m_pBase;
+        }
+
+        virtual void setDisplaySettings(unsigned long nSettings)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kDisplayStyles, (OdInt32)nSettings);
+        }
+        virtual void setDisplaySettingsFlag(DisplaySettings flag, bool bEnable)
+        {
+          m_pBase->setTraitFlag(OdGiVisualStyleProperties::kDisplayStyles, flag, bEnable);
+        }
+        virtual unsigned long displaySettings() const
+        {
+          return (unsigned long)m_pBase->trait(OdGiVisualStyleProperties::kDisplayStyles)->asInt();
+        }
+        virtual bool isDisplaySettingsFlagSet(DisplaySettings flag) const
+        {
+          return m_pBase->traitFlag(OdGiVisualStyleProperties::kDisplayStyles, flag);
+        }
+
+        virtual void setBrightness(double value)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kDisplayBrightness, value);
+        }
+        virtual double brightness() const
+        {
+          return m_pBase->trait(OdGiVisualStyleProperties::kDisplayBrightness)->asDouble();
+        }
+
+        virtual void setShadowType(ShadowType type)
+        {
+          m_pBase->setTrait(OdGiVisualStyleProperties::kDisplayShadowType, (OdInt32)type);
+        }
+        virtual ShadowType shadowType() const
+        {
+          return (ShadowType)m_pBase->trait(OdGiVisualStyleProperties::kDisplayBrightness)->asInt();
+        }
+    };
+  protected:
+    OdGiFaceStyleDataContainer    m_faceStyle;
+    OdGiEdgeStyleDataContainer    m_edgeStyle;
+    OdGiDisplayStyleDataContainer m_displayStyle;
+    Type                          m_type;
+    OdStaticRxObject<OdGiVariant> m_props[OdGiVisualStyleProperties::kPropertyCount];
+    Operation                     m_ops[OdGiVisualStyleProperties::kPropertyCount];
+  public:
+    OdGiVisualStyleDataContainer()
+      : m_faceStyle()
+      , m_edgeStyle()
+      , m_displayStyle()
+      , m_type(kCustom)
+    {
+      // Setup redirections
+      m_faceStyle.setBase(this);
+      m_edgeStyle.setBase(this);
+      m_displayStyle.setBase(this);
+      // Face properties
+      m_props[OdGiVisualStyleProperties::kFaceLightingModel].set((OdInt32)OdGiVisualStyleProperties::kPhong);
+      m_props[OdGiVisualStyleProperties::kFaceLightingQuality].set((OdInt32)OdGiVisualStyleProperties::kPerVertexLighting);
+      m_props[OdGiVisualStyleProperties::kFaceColorMode].set((OdInt32)OdGiVisualStyleProperties::kNoColorMode);
+      m_props[OdGiVisualStyleProperties::kFaceModifiers].set((OdInt32)OdGiVisualStyleProperties::kNoFaceModifiers);
+      m_props[OdGiVisualStyleProperties::kFaceOpacity].set(0.6);
+      m_props[OdGiVisualStyleProperties::kFaceSpecular].set(30.0);
+      m_props[OdGiVisualStyleProperties::kFaceMonoColor].set(OdCmEntityColor(255, 255, 255));
+      // Edge properties
+      m_props[OdGiVisualStyleProperties::kEdgeModel].set((OdInt32)OdGiVisualStyleProperties::kIsolines);
+      m_props[OdGiVisualStyleProperties::kEdgeStyles].set((OdInt32)OdGiVisualStyleProperties::kObscuredFlag);
+      m_props[OdGiVisualStyleProperties::kEdgeIntersectionColor].set(OdCmEntityColor(OdCmEntityColor::kForeground));
+      m_props[OdGiVisualStyleProperties::kEdgeObscuredColor].set(OdCmEntityColor(OdCmEntityColor::kNone));
+      m_props[OdGiVisualStyleProperties::kEdgeObscuredLinePattern].set((OdInt32)OdGiVisualStyleProperties::kSolid);
+      m_props[OdGiVisualStyleProperties::kEdgeIntersectionLinePattern].set((OdInt32)OdGiVisualStyleProperties::kSolid);
+      m_props[OdGiVisualStyleProperties::kEdgeCreaseAngle].set(1.0);
+      m_props[OdGiVisualStyleProperties::kEdgeModifiers].set((OdInt32)OdGiVisualStyleProperties::kEdgeColorFlag);
+      m_props[OdGiVisualStyleProperties::kEdgeColor].set(OdCmEntityColor(OdCmEntityColor::kForeground));
+      m_props[OdGiVisualStyleProperties::kEdgeOpacity].set(1.0);
+      m_props[OdGiVisualStyleProperties::kEdgeWidth].set((OdInt32)1);
+      m_props[OdGiVisualStyleProperties::kEdgeOverhang].set((OdInt32)6);
+      m_props[OdGiVisualStyleProperties::kEdgeJitterAmount].set((OdInt32)OdGiVisualStyleProperties::kJitterMedium);
+      m_props[OdGiVisualStyleProperties::kEdgeSilhouetteColor].set(OdCmEntityColor(OdCmEntityColor::kForeground));
+      m_props[OdGiVisualStyleProperties::kEdgeSilhouetteWidth].set((OdInt32)5);
+      m_props[OdGiVisualStyleProperties::kEdgeHaloGap].set((OdInt32)0);
+      m_props[OdGiVisualStyleProperties::kEdgeIsolines].set((OdInt32)0);
+      m_props[OdGiVisualStyleProperties::kEdgeHidePrecision].set(false);
+      // Display properties
+      m_props[OdGiVisualStyleProperties::kDisplayStyles].set((OdInt32)OdGiVisualStyleProperties::kBackgroundsFlag);
+      m_props[OdGiVisualStyleProperties::kDisplayBrightness].set(0.0);
+      m_props[OdGiVisualStyleProperties::kDisplayShadowType].set((OdInt32)OdGiVisualStyleProperties::kShadowsNone);
+      // New in AC2011, 2013
+      m_props[OdGiVisualStyleProperties::kUseDrawOrder].set(false);
+      m_props[OdGiVisualStyleProperties::kViewportTransparency].set(true);
+      m_props[OdGiVisualStyleProperties::kLightingEnabled].set(true);
+      m_props[OdGiVisualStyleProperties::kPosterizeEffect].set(false);
+      m_props[OdGiVisualStyleProperties::kMonoEffect].set(false);
+      // New in 2013
+      m_props[OdGiVisualStyleProperties::kBlurEffect].set(false);
+      m_props[OdGiVisualStyleProperties::kPencilEffect].set(false);
+      m_props[OdGiVisualStyleProperties::kBloomEffect].set(false);
+      m_props[OdGiVisualStyleProperties::kPastelEffect].set(false);
+      m_props[OdGiVisualStyleProperties::kBlurAmount].set((OdInt32)50);
+      m_props[OdGiVisualStyleProperties::kPencilAngle].set(0.0);
+      m_props[OdGiVisualStyleProperties::kPencilScale].set(1.0);
+      m_props[OdGiVisualStyleProperties::kPencilPattern].set((OdInt32)0);
+      m_props[OdGiVisualStyleProperties::kPencilColor].set(OdCmEntityColor(0, 0, 0));
+      m_props[OdGiVisualStyleProperties::kBloomThreshold].set((OdInt32)50);
+      m_props[OdGiVisualStyleProperties::kBloomRadius].set((OdInt32)3);
+      m_props[OdGiVisualStyleProperties::kTintColor].set(OdCmEntityColor(0, 0, 255));
+      m_props[OdGiVisualStyleProperties::kFaceAdjustment].set(false);
+      m_props[OdGiVisualStyleProperties::kPostContrast].set((OdInt32)50);
+      m_props[OdGiVisualStyleProperties::kPostBrightness].set((OdInt32)50);
+      m_props[OdGiVisualStyleProperties::kPostPower].set((OdInt32)50);
+      m_props[OdGiVisualStyleProperties::kTintEffect].set(false);
+      m_props[OdGiVisualStyleProperties::kBloomIntensity].set((OdInt32)50);
+      m_props[OdGiVisualStyleProperties::kColor].set(OdCmEntityColor(OdCmEntityColor::kByLayer));
+      m_props[OdGiVisualStyleProperties::kTransparency].set(1.0);
+      m_props[OdGiVisualStyleProperties::kEdgeWiggleAmount].set((OdInt32)OdGiVisualStyleProperties::kWiggleMedium);
+      m_props[OdGiVisualStyleProperties::kEdgeTexturePath].set(OdString(OD_T("strokes_ogs.tif")));
+      m_props[OdGiVisualStyleProperties::kDepthOfField].set(false);
+      m_props[OdGiVisualStyleProperties::kFocusDistance].set(1.0);
+      m_props[OdGiVisualStyleProperties::kFocusWidth].set(1.0);
+    }
+    ~OdGiVisualStyleDataContainer()
+    {
+    }
+
+    virtual OdGiFaceStyle& faceStyle()
+    {
+      return m_faceStyle;
+    }
+    virtual OdGiEdgeStyle& edgeStyle()
+    {
+      return m_edgeStyle;
+    }
+    virtual OdGiDisplayStyle& displayStyle()
+    {
+      return m_displayStyle;
+    }
+
+    virtual const OdGiFaceStyle& faceStyle() const
+    {
+      return m_faceStyle;
+    }
+    virtual const OdGiEdgeStyle& edgeStyle() const
+    {
+      return m_edgeStyle;
+    }
+    virtual const OdGiDisplayStyle& displayStyle() const
+    {
+      return m_displayStyle;
+    }
+
+    virtual void setFaceStyle(const OdGiFaceStyle& style)
+    {
+      m_faceStyle.set(style);
+    }
+    virtual void setEdgeStyle(const OdGiEdgeStyle& style)
+    {
+      m_edgeStyle.set(style);
+    }
+    virtual void setDisplayStyle(const OdGiDisplayStyle& style)
+    {
+      m_displayStyle.set(style);
+    }
+
+    // New interface
+
+    virtual bool setType(Type type)
+    {
+      try
+      {
+        configureForType(type);
+      }
+      catch (const OdError &)
+      {
+        return false;
+      }
+      m_type = type;
+      return true;
+    }
+    virtual Type type() const
+    {
+      return m_type;
+    }
+
+    virtual bool setTrait(Property prop, Operation op)
+    {
+      if ((prop > OdGiVisualStyleProperties::kInvalidProperty) && (prop < OdGiVisualStyleProperties::kPropertyCount))
+      {
+        m_ops[prop] = op;
+        return true;
+      }
+      return false;
+    }
+    virtual bool setTrait(Property prop, const OdGiVariant *pVal,
+                          Operation op = OdGiVisualStyleOperations::kSet)
+    {
+      if ((prop > OdGiVisualStyleProperties::kInvalidProperty) && (prop < OdGiVisualStyleProperties::kPropertyCount) &&
+          pVal && (pVal->type() == propertyType(prop)))
+      {
+        static_cast<OdGiVariant&>(m_props[prop]) = *pVal;
+        m_ops[prop] = op;
+        return true;
+      }
+      return false;
+    }
+
+    virtual OdGiVariantPtr trait(Property prop, Operation *pOp = NULL) const
+    {
+      if ((prop > OdGiVisualStyleProperties::kInvalidProperty) && (prop < OdGiVisualStyleProperties::kPropertyCount))
+      {
+        if (pOp)
+          *pOp = m_ops[prop];
+        return OdGiVariantPtr(m_props + prop);
+      }
+      return OdGiVariant::createObject();
+    }
+    virtual Operation operation(Property prop) const
+    {
+      if ((prop > OdGiVisualStyleProperties::kInvalidProperty) && (prop < OdGiVisualStyleProperties::kPropertyCount))
+      {
+        return m_ops[prop];
+      }
+      return OdGiVisualStyleOperations::kInvalidOperation;
+    }
+};
+
+#include "TD_PackPop.h"
+
+#endif //__ODGIVISUALSTYLEDATA_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleTraitsData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleTraitsData.h
new file mode 100755
index 0000000..f6d2157
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiVisualStyleTraitsData.h
@@ -0,0 +1,78 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_VISUALSTYLE_TRAITS_DATA__
+#define __OD_GI_VISUALSTYLE_TRAITS_DATA__
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiVisualStyle.h"
+
+/** \details
+    Library: TD_Gi
+    <group OdGi_Classes>
+*/
+class OdGiVisualStyleTraitsData
+{
+  const OdGiVisualStyle*    m_visualStylePtr;
+
+public:
+
+  OdGiVisualStyleTraitsData()
+    : m_visualStylePtr(NULL)
+  {}
+  
+  OdGiDrawable::DrawableType type() const { return OdGiDrawable::kGeometry; }
+
+  void setOdGiVisualStyle(const OdGiVisualStyle& visualStyle)
+  {
+    m_visualStylePtr = &visualStyle;
+  }
+  const OdGiVisualStyle& odgiVisualStyle() const
+  {
+    return *m_visualStylePtr;
+  }
+
+  bool isOdGiVisualStyleSet() const
+  {
+    return m_visualStylePtr != NULL;
+  }
+  void resetOdGiVisualStyle()
+  {
+    m_visualStylePtr = NULL;
+  }
+
+  bool operator ==(const OdGiVisualStyleTraitsData &data2) const
+  {
+    return (isOdGiVisualStyleSet() == data2.isOdGiVisualStyleSet()) &&
+           (!isOdGiVisualStyleSet() || (odgiVisualStyle() == data2.odgiVisualStyle()));
+  }
+  bool operator !=(const OdGiVisualStyleTraitsData &data2) const
+  {
+    return !(*this == data2);
+  }
+};                          
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_VISUALSTYLE_TRAITS_DATA__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldDraw.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldDraw.h
new file mode 100755
index 0000000..6b5ebba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldDraw.h
@@ -0,0 +1,62 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIWORLDDRAW_H__
+#define __ODGIWORLDDRAW_H__
+
+#include "Gi/GiCommonDraw.h"
+#include "Gi/GiWorldGeometry.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines the functionality for viewport-independent entity-level vectorization.
+
+    \sa
+    TD_Gi
+    
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiWorldDraw : public OdGiCommonDraw
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiWorldDraw);
+
+  /** \details
+    Returns a reference to the OdGiWorldGeometry object associated with this object.  
+
+    \remarks
+    This instance contains the functions that can be used by an entity to
+    vectorize itself.
+  */
+  virtual OdGiWorldGeometry& geometry() const = 0;
+};
+
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIWORLDDRAW_H__
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldGeometry.h
new file mode 100755
index 0000000..8e062f5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiWorldGeometry.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __ODGIWORLDGEOMETRY_H__
+#define __ODGIWORLDGEOMETRY_H__
+
+#include "Gi/GiGeometry.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines functions that allow entities to vectorize themselves.
+    
+    \remarks
+    Vectorization with the methods of this class are viewport independent. 
+    For viewport specific vectorization, use subViewportDraw() instead of subWorldDraw().
+
+    An OdGiWorldGeometry object is part of the OdGiWorldDraw argument passed to the subWorldDraw()
+    method of an entity.
+
+    Model coordinates are applied to all geometry in this class except for setExtents(). 
+   
+    \sa
+    TD_Gi
+    <group OdGi_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGiWorldGeometry : public OdGiGeometry 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdGiWorldGeometry);
+
+  /** \details
+      Sets the extents of the current object.  
+
+      \param newExtents [in]  Array[2] of WCS points.
+      
+      \remarks
+      Generation of model coordinate geometry automatically calculates the extents.
+      You may override this calculation with this function.
+  */
+  virtual void setExtents(
+    const OdGePoint3d *newExtents) = 0;
+
+  /** \details
+      Starts segment of OdDbAttributes for block.
+
+      \remarks
+      If this drawable is a block and has OdDbAttributes it must call
+      this method exactly once before sending the attributes to 
+      draw(). Once this is called the object may draw only attributes
+      and no more primitives
+      The attributes must be the last objects vectorized.
+  */
+  virtual void startAttributesSegment() {}
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiXform.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiXform.h
new file mode 100755
index 0000000..e847d55
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/GiXform.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGIXFORM_H__
+#define __ODGIXFORM_H__
+
+#include "Gi/GiConveyorNode.h"
+class OdGeMatrix3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiXform : public OdGiConveyorNode
+{
+protected:
+  OdGiXform();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiXform);
+
+  virtual void setTransform(const OdGeMatrix3d& xMat) = 0;
+  virtual void transform(OdGeMatrix3d& xMat) const = 0;
+
+  /** \details
+    Enable output as 2d points mode.
+
+    \param bOutput2dPoints [in]  Output as 2d points mode flag.
+
+    \remarks
+    This flag indicating that when applying transformation to the input points, output points
+    should be considered as 2d points, z-coordinate won't be used and does not require calculation.
+
+    This way could be used to avoid extra arithmetic operations on doubles.
+
+    An example of setOutput2dPoints() usage is GDI device implementation.
+    The last stage of geometry conveyor when playing metafiles to device is
+    OdGiXForm (metafile to device transformation). It produces points in pixel
+    coordinates, does not require z coordinate to be calculated.
+  */
+  virtual void setOutput2dPoints(bool bOutput2dPoints) = 0;
+  virtual bool output2dPoints() const = 0;
+};
+
+typedef OdSmartPtr<OdGiXform> OdGiXformPtr;
+
+// Several Xform optimizations
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiXformOptimizer : public OdGiConveyorNode
+{
+protected:
+  OdGiXformOptimizer();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiXformOptimizer);
+
+  virtual void setTransform(const OdGeMatrix3d& xMat) = 0;
+  virtual OdGeMatrix3d transform() const = 0;
+
+  virtual void sync(OdGiXform* xForm) = 0;
+  virtual OdGiConveyorGeometry* redirectionGeometry() = 0;
+};
+
+typedef OdSmartPtr<OdGiXformOptimizer> OdGiXformOptimizerPtr;
+
+class OdGeVector3d;
+class OdGePoint3d;
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+class ODGI_EXPORT OdGiTranslationXform : public OdGiXformOptimizer
+{
+protected:
+  OdGiTranslationXform();
+public:
+  ODRX_DECLARE_MEMBERS(OdGiTranslationXform);
+
+  virtual void setTranslation(const OdGeVector3d &transform) = 0;
+  virtual const OdGeVector3d &translationAsVector() const = 0;
+
+  virtual void setTranslation(const OdGePoint3d &transform) = 0;
+  virtual const OdGePoint3d &translationAsPoint() const = 0;
+};
+
+typedef OdSmartPtr<OdGiTranslationXform> OdGiTranslationXformPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef __ODGIXFORM_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/OdPolyPolygon3d.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/OdPolyPolygon3d.h
new file mode 100755
index 0000000..f047f39
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/OdPolyPolygon3d.h
@@ -0,0 +1,113 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+//:> OdPolyPolygon3d.h: interface for the OdPolyPolygon3d class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_OdPolyPolygon3d_H__0D83A6B9_F93A_4801_AB9B_47B6648AE23B__INCLUDED_)
+#define AFX_OdPolyPolygon3d_H__0D83A6B9_F93A_4801_AB9B_47B6648AE23B__INCLUDED_
+
+#include "TD_PackPush.h"
+
+#if defined(_MSC_VER)
+#pragma warning (push)
+#pragma warning ( disable : 4512 )  // assignment operator could not be generated
+#endif
+
+#include "RxObject.h"
+#include "OdArray.h"
+#include "Ge/GePoint3d.h"
+#include "Int32Array.h"
+
+/** \details
+    This class implements multi-polygon objects.
+    
+    \remarks
+    These objects are typically used for TrueType font outlines.
+    
+    <group Other_Classes>
+*/
+class OdPolyPolygon3d
+{
+	OdGePoint3dArray m_Points; // Points defining the polygons.
+	OdInt32Array     m_Counts; // Counts of points in each polygon.
+
+public:
+  OdPolyPolygon3d() {}
+	virtual ~OdPolyPolygon3d() {}
+
+  /** \details
+    Adds a new 3D polygon to this PolyPolygon object.
+  */
+	void newContour() { m_Counts.append(0); }
+
+  /** \details
+    Appends a point to the last polygon of this PolyPolygon object.
+    \param point [in]  New point.
+  */
+  void addToCurrentContour(const OdGePoint3d& point) { m_Points.append(point); m_Counts[m_Counts.size() - 1]++; }
+
+  void removeLastContour() 
+  { 
+    if ( m_Counts.size() )
+    {
+      for ( int i = 0; i < m_Counts[m_Counts.size()-1]; i++)
+      {
+        m_Points.removeLast(); 
+      }
+      m_Counts.removeLast();
+    }
+  } 
+
+  /** \details
+    Sets the GrowLength for the m_Points array.
+    \remarks
+    The GrowLength for the m_Counts array is set to 1/10 this value.
+  */
+    void setGrowLength(OdInt32 growLength) 
+  { m_Points.setGrowLength(growLength); m_Counts.setGrowLength(growLength/10 > 0 ? growLength/10 : 1); }
+
+  /*!DOM*/
+  void setGrowLenght(OdInt32 growLength) { setGrowLength(growLength); }
+    
+  /** \details
+    Returns the points defining the polygons.
+  */
+	OdGePoint3dArray& points() { return m_Points; }
+	const OdGePoint3dArray& points() const { return m_Points; }
+  /** \details
+    Returns the counts of points defining the polygons.
+  */
+	OdInt32Array& counts() { return m_Counts; }
+	const OdInt32Array& counts() const { return m_Counts; }
+};
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
+#include "TD_PackPop.h"
+
+#endif // !defined(AFX_OdPolyPolygon3d_H__0D83A6B9_F93A_4801_AB9B_47B6648AE23B__INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/TtfDescriptor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/TtfDescriptor.h
new file mode 100755
index 0000000..1b7f820
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gi/TtfDescriptor.h
@@ -0,0 +1,217 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OdTtfDescriptor_h_Included_
+#define _OdTtfDescriptor_h_Included_
+
+#include "TD_PackPush.h"
+
+#include "Gi/Gi.h"
+#include "OdString.h"
+
+/** \details
+    This class implements TrueType Descriptor objects which provide an interface to
+    the characteristics of a TrueType font.
+    
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdTtfDescriptor
+{
+  // Members
+
+	OdUInt32        m_nFlags;
+  OdString        m_sFontFile;
+	OdString        m_Typeface;
+
+public:
+  // Constructor
+
+  OdTtfDescriptor() : m_nFlags(0) 
+  {
+  }
+
+  /** \param typeface [in]  Typeface.
+    \param bold [in]  True if and only if a bold font.
+    \param italic [in]  True if and only if an italic font.
+    \param charset [in]  Character set.
+    \param pitchAndFamily [in]  Pitch and Family.
+    
+    \remarks
+    The two low-order bits of pitchAndFamily specify the pitch of the font.
+    Bits 4 through 7 of pitchAndFamily specify the font family.
+
+  */
+  OdTtfDescriptor(const OdString& typeface, bool bold, bool italic, int charset, int pitchAndFamily)
+    : m_Typeface(typeface),m_nFlags(0)
+  {
+    setTtfFlags(bold, italic, charset, pitchAndFamily);
+  }
+
+  // Accessors /transformers
+
+  /** \details
+    Returns the filename of this TtfDescriptor object.
+  */
+  const OdString &fileName() const     { return m_sFontFile; }
+
+  /** \details
+    Returns the typeface of this TtfDescriptor object.
+  */
+  const OdString &typeface() const     { return m_Typeface;  }
+
+  OdUInt32 getTtfFlags() const  { return m_nFlags;    }
+
+  /** \details
+    Clears the filename of this TtfDescriptor object.
+  */
+  void clearFileName()
+  { 
+    m_sFontFile.empty();  
+  }
+  /** \details
+    Clears the typeface of this TtfDescriptor object.
+  */
+  void clearTypeface()
+  { 
+    m_Typeface.empty();  
+  }
+  /** \details
+    Adds the specified typeface to this TtfDescriptor object.
+  */
+  void addTypeface(OdChar typeface)
+  { 
+    m_Typeface += typeface;
+  }
+
+  /** \details
+    Returns the flags of this TtfDescriptor object. 
+    \param typeface [out]  Receives the full name of the font.
+    \param bold [out]  Receives true if and only if this is a bold font.
+    \param italic [out]  Receives true if and only if this is an italic font.
+    \param charset [out]  Receives the character set.
+    \param pitchAndFamily [out]  Receives the Pitch and Family.
+    
+    \remarks
+    The two low-order bits of pitchAndFamily specify the pitch of the font.
+    Bits 4 through 7 of pitchAndFamily specify the font family.
+  */
+	void getTtfFlags(bool& bold, bool& italic, int& charset, int& pitchAndFamily) const
+  {
+	  bold = isBold();
+	  italic = isItalic();
+	  charset = charSet();
+	  pitchAndFamily = this->pitchAndFamily();
+  }
+
+  /** \details
+    Sets the filename of this TtfDescriptor object.
+    \param filename [in]  Filename.
+  */
+  void setFileName(const OdString& filename)  { m_sFontFile = filename; }
+  /** \details
+    Sets the typeface of this TtfDescriptor object.
+    \param typeface [in]  Typeface.
+  */
+  void setTypeFace(const OdString& typeface)  { m_Typeface = typeface;  }
+  /** \details
+    Sets the flags of this TtfDescriptor object.
+    \param flags [in]  Flags.
+
+  */
+  void setTtfFlags(OdUInt32 flags)           { m_nFlags = flags;      }
+  /** \param bold [in]  True if and only if a bold font.
+    \param italic [in]  True if and only if an italic font.
+    \param charset [in]  Character set.
+    \param pitchAndFamily [in]  Pitch and Family.
+    
+    \remarks
+    The two low-order bits of pitchAndFamily specify the pitch of the font.
+    Bits 4 through 7 of pitchAndFamily specify the font family.
+  */
+  void setTtfFlags(bool bold, bool italic, int charset, int pitchAndFamily)
+  {
+    setBold(bold);
+    setItalic(italic);
+    setCharSet(charset);
+    setPitchAndFamily(pitchAndFamily);
+  }
+
+  /** \details
+    Sets the bold flag of this TtfDescriptor object.
+    \param bold [in]  True if and only if a bold font.
+  */
+   void setBold(bool bold)          { SETBIT(m_nFlags, 0x02000000, bold);  }
+  /** \details
+    Sets the italic flag of this TtfDescriptor object.
+    \param italic [in]  True if and only if an italic font.
+  */
+   void setItalic(bool italic)        { SETBIT(m_nFlags, 0x01000000, italic);  }
+  /** \details
+    Sets the character set of this TtfDescriptor object.
+    \param charset [in]  Character set.
+  */
+   void setCharSet(int charset)        { m_nFlags = ((m_nFlags & 0xFFFF00FF) | ((charset << 8) & 0x0000FF00)); }
+  /** \details
+    Sets the pitch and family of this TtfDescriptor object.
+    \param pitchAndFamily [in]  Pitch and Family.
+    
+    \remarks
+    The two low-order bits of pitchAndFamily specify the pitch of the font.
+    Bits 4 through 7 of pitchAndFamily specify the font family.
+  */
+  void setPitchAndFamily(int pitchAndFamily) { m_nFlags = ((m_nFlags & 0xFFFFFF00) | (pitchAndFamily & 0x000000FF));  }
+
+  /** \details
+    Returns true if and only if this TtfDescriptor is a bold font.
+  */
+  bool isBold() const             { return GETBIT(m_nFlags, 0x02000000);  }
+  /** \details
+    Returns true if and only if this TtfDescriptor is an italic font.
+  */
+  bool isItalic() const           { return GETBIT(m_nFlags, 0x01000000);  }
+  /** \details
+    Returns the character set for this TtfDescriptor object.
+  */
+  OdUInt16 charSet() const        { return OdUInt16((m_nFlags & 0x0000ff00) >> 8); }
+  /** \details
+    Returns the pitch and family of this TtfDescriptor object.
+    
+    \remarks
+    The two low-order bits of pitchAndFamily specify the pitch of the font.
+    Bits 4 through 7 of pitchAndFamily specify the font family.
+  */
+  int pitchAndFamily() const      { return (m_nFlags & 0x000000ff); }
+
+  /** \details
+    Returns the pitch of this TtfDescriptor object.
+  */
+  int getPitch() const            { return (pitchAndFamily() & 0x00000003); }
+  /** \details
+    Returns the family of this TtfDescriptor object.
+  */
+  int getFamily() const           { return (pitchAndFamily() & 0x000000f0); }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _OdTtfDescriptor_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiContextForDbDatabase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiContextForDbDatabase.h
new file mode 100755
index 0000000..3f8fdc8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiContextForDbDatabase.h
@@ -0,0 +1,333 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGI_CONTEXTFORDBDATABASE_INCLUDED_
+#define _ODGI_CONTEXTFORDBDATABASE_INCLUDED_
+
+#include "GiDefaultContext.h"
+#include "DbExport.h"
+#include "OdPlatform.h"
+#include "StaticRxObject.h"
+#include "DbDatabase.h"
+#include "DbDatabaseReactor.h"
+#include "Ps/PlotStyles.h"
+#include "Gi/GiSubEntityTraitsData.h"
+#include "Gi/GiLinetyper.h"
+
+#include "TD_PackPush.h"
+
+struct OdGsClientViewInfo;
+class OdGsView;
+class OdGiContextualColorsImpl;
+
+/** \details
+    This class defines the operations and properties that are used in the
+    Teigha vectorization of an OdDbDatabase.
+
+    Library: TD_Db
+
+    <group OdDb_Classes> 
+*/
+class TOOLKIT_EXPORT OdGiContextForDbDatabase : public OdGiDefaultContext
+{
+private:
+  enum
+  {
+    kPlotGeneration                  = 1,
+    kUseGsModel                      = 2,
+    kOdGiZeroTextNormals             = 4,
+    kDisableLayoutHelperLinkReactors = 8,
+    kTTFPolyDraw                     = 16,
+    kTrackDbDestroy                  = 32,
+    kManageContextualColors          = 64,
+    kKeepPSLayoutHelperView          = 128,
+    kErasePSLayoutHelperView         = 256,
+    kConstantModelSpaceLineweights   = 512,
+    kLastFlag                        = kConstantModelSpaceLineweights
+  };
+
+  OdUInt32              m_fflags;
+
+  class TOOLKIT_EXPORT DatabaseHolder : public OdStaticRxObject<OdDbDatabaseReactor>
+  {
+  public:
+    DatabaseHolder();
+    ~DatabaseHolder();
+
+    OdDbDatabase* m_pDb;
+
+    void setDatabase( bool bWasTrackDbDestroy, OdDbDatabase* pDb, bool bTrackDbDestroy );
+
+    void goodbye(const OdDbDatabase* pDb);
+  }
+  m_DbHolder;
+
+protected:
+  ODCOLORREF            m_paletteBackground;
+  OdPsPlotStyleTablePtr m_pPlotStyleTable;
+
+  OdGiContextForDbDatabase();
+
+public:
+
+  ODRX_DECLARE_MEMBERS(OdGiContextForDbDatabase);
+
+  ~OdGiContextForDbDatabase();
+
+  // OdGiContext overridden functions
+
+  virtual OdDbBaseDatabase* database() const;
+  virtual OdGiDrawablePtr openDrawable(OdDbStub* drawableId);
+  virtual OdUInt32 numberOfIsolines() const;
+  virtual double commonLinetypeScale() const;
+  virtual OdDb::LineWeight defaultLineWeight() const;
+  virtual bool quickTextMode() const;
+  virtual OdUInt32 textQuality() const;
+  virtual ImageQuality imageQuality() const;
+  virtual OdUInt32 fadingIntensityPercentage(FadingType fadingType) const;
+  virtual bool ttfPolyDraw() const;
+
+  /** \details
+    Sets the database to be vectorized.
+
+    \param pDb [in]  Pointer to the database.
+    \param bTrackDbDestroy [in]  if to the database is not NULL then
+    this parameter specifies if implementation should track database lifetime
+    (by adding reactor to the database and processing OdDbDatabaseReactor::goodbye() event)
+    and to clear pointer to the database if it will be destroyed. If you sure that lifetime of this object
+    is shorter then lifetime of the database you may set this parameter to false
+    to turn off unnecessary database lifetime tracking.
+  */
+  void setDatabase( OdDbDatabase* pDb, bool bTrackDbDestroy = true );
+
+  /** \details
+    Returns the database that is currently being vectorized.
+  */
+  OdDbDatabase* getDatabase() const;
+
+  /** \details
+    Returns the OdGsClientViewInfo for the specified viewport.
+    \param vpId [in]  Object ID of the viewport.
+    \param viewInfo [out]  Receives the client view info.
+  */
+  virtual void fillGsClientViewInfo(const OdDbObjectId& vpId, OdGsClientViewInfo& viewInfo);
+
+  /** \details
+  Returns the OdDbStub for the specified handle id.
+  \param objectId [in]  Object ID of the object.
+  Returns the pointer to OdDbStub.
+  */
+  virtual OdDbStub* getStubByID( OdUInt64 objectId ) const;
+
+  virtual OdDbStub* getStubByMatName(const OdString& strMatName) const;
+
+  virtual void getDefaultTextStyle(OdGiTextStyle& textStyle);
+
+  unsigned int circleZoomPercent(OdDbStub* viewportId) const;
+
+  virtual OdIntPtr drawableFilterFunctionId(OdDbStub* viewportId) const;
+  virtual OdUInt32 drawableFilterFunction(OdIntPtr functionId, const OdGiDrawable *pDrawable, OdUInt32 nFlags);
+
+  /** \details
+    Returns true if and only the GsModel flag of this Context Object is set..
+  */
+  bool useGsModel() const;
+
+  /** \details
+    Controls the GsModel flag of this Context Object.
+    \param enable [in]  Controls the Gs Model.
+  */
+  void enableGsModel(bool enable);
+
+  /** \details
+    Returns true if and only the PlotGeneration flag of this Context Object is set.
+  */
+  bool isPlotGeneration() const;
+
+  /** \details
+    Controls the PlotGeneration flag of this Context Object.
+    \param plotGeneration [in]  Controls plot generation.
+  */
+  void setPlotGeneration(bool plotGeneration);
+
+  /** \details
+    Returns true if and only the kOdGiZeroTextNormals flag of this Context Object is set.
+  */
+  virtual bool isZeroTextNormals() const;
+
+  /** \details
+    Controls the ZeroTextNormals flag of this Context Object.
+    \param bZeroTextNormals [in]  Controls text normals generation.
+  */
+  void setZeroTextNormals(bool bZeroTextNormals);
+
+  /** \details
+    Returns true if and only the kDisableLayoutHelperLinkReactors flag of this Context Object is set.
+  */
+  bool isLayoutHelperLinkReactorsDisabled() const;
+
+  /** \details
+    Controls the kDisableLayoutHelperLinkReactors flag of this Context Object.
+    \param bDisableLinkReactors [in]  Controls layout link reactors flag.
+  */
+  void disableLayoutHelperLinkReactors(bool bDisableLinkReactors);
+
+  /** \details
+    Returns true if and only the kManageContextualColors flag of this Context Object is set.
+  */
+  bool isContextualColorsManagementEnabled() const;
+
+  /** \details
+    Controls the kManageContextualColors flag of this Context Object.
+    \param bEnable [in]  Controls contextual colors management flag.
+  */
+  void enableContextualColorsManagement(bool bEnable);
+
+  /** \details
+    Update view contextual colors after view changes.
+    \param pView [in]  View pointer for update contextual colors.
+  */
+  virtual void updateContextualColors(OdGsView *pView);
+
+  /** \details
+    Initialize contextual colors container by contextual colors values.
+    \param pCtxColors [in]  Pointer to contextual colors container.
+  */
+  virtual void fillContextualColors(OdGiContextualColorsImpl *pCtxColors);
+
+  /** \details
+    Enables TrueType text contours info output.
+    \param bPolyDraw [in]  Controls kTTFPolyDraw flag of this Context Object.
+  */
+  void setTtfPolyDrawMode(bool bPolyDraw);
+
+  /** \details
+    Returns true if and only if the kKeepPSLayoutHelperView flag of this Context Object is set.
+  */
+  bool isKeepPSLayoutHelperViewEnabled() const;
+
+  /** \details
+    Controls the kKeepPSLayoutHelperView flag of this Context Object.
+    \param bEnable [in]  Controls PaperSpace layout helper view management flag.
+  */
+  void enableKeepPSLayoutHelperView(bool bEnable);
+
+  /** \details
+    Returns true if and only if the kErasePSLayoutHelperView flag of this Context Object is set.
+  */
+  bool erasePSLayoutHelperView() const;
+
+  /** \details
+    Controls the kErasePSLayoutHelperView flag of this Context Object.
+    \param bEnable [in]  Controls PaperSpace layout helper view management flag.
+  */
+  void setErasePSLayoutHelperView(bool bOn);
+
+  /** \details
+    Returns currents behavior of ModelSpace lineweights.
+  */
+  bool isConstantModelSpaceLineweightsEnabled() const;
+
+  /** \details
+    Controls behavior of ModelSpace lineweights.
+    \param bEnable [in]  Enable contant ModelSpace lineweights.
+  */
+  void enableConstantModelSpaceLineweights(bool bEnable);
+
+  /** \details
+    Returns true if and only if filling of TrueType fonts is enabled.
+  */
+  bool fillTtf() const;
+
+  /** \details
+    Returns true if and only if shell/mesh geometry primitives should be filled during this vectorization.
+  */
+  bool fillMode() const;
+
+  /** \details
+    Returns the palette background color for this Context object.
+  */
+  ODCOLORREF paletteBackground() const { return m_paletteBackground; }
+  /** \details
+    Sets the palette background color for this Context object.
+    \param paletteBackground [in]  Palette background.
+  */
+  void setPaletteBackground(ODCOLORREF paletteBackground) { m_paletteBackground = paletteBackground; }
+
+  /** \details
+    Loads the specified plot style table for this Context object.
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+  */
+  void loadPlotStyleTable(OdStreamBuf* pStreamBuf);
+  
+  /** \details
+    Returns the plot style type for this Context object.
+  */
+  virtual PStyleType plotStyleType() const;
+
+  /** \details
+    Returns the plot style data for the specified pen number or object Id.
+    \param penNumber [in]  Pen number.
+    \param psNameId [in]  Object id of the plot style name.
+    \param plotStyleData [out]  Receives the plot style data.
+  */
+  virtual void plotStyle(int penNumber, OdPsPlotStyleData& plotStyleData) const;
+
+  virtual void plotStyle(OdDbStub* psNameId, OdPsPlotStyleData& plotStyleData) const;
+
+  /** \details
+    Returns an interface for access section geometry functionality.
+  */
+  virtual OdGiSectionGeometryManagerPtr getSectionGeometryManager();
+
+  /** \details
+    Controls rendering anti-aliasing.
+  */
+  virtual OdUInt32 antiAliasingMode() const;
+
+  /** \details
+    Controls Xref properties overriding.
+  */
+  virtual bool xrefPropertiesOverride() const;
+
+  /** \details
+  Returns SolidHatchAsPolygonMode set for this Context Object.
+  */
+  SolidHatchAsPolygonMode hatchAsPolygon() const;
+
+  /** \details
+  Controls SolidHatchAsPolygonMode of this Context Object.
+  \param bOn [in]  Controls hatch as polygon generation.
+  */
+  void setHatchAsPolygon(SolidHatchAsPolygonMode mode);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiContextForDbDatabase object pointers.
+*/
+typedef OdSmartPtr<OdGiContextForDbDatabase> OdGiContextForDbDatabasePtr;
+
+
+#include "TD_PackPop.h"
+
+#endif //_ODGI_CONTEXTFORDBDATABASE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiDefaultContext.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiDefaultContext.h
new file mode 100755
index 0000000..01a7c6e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GiDefaultContext.h
@@ -0,0 +1,152 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGI_DEFAULTCONTEXT_INCLUDED_
+#define _ODGI_DEFAULTCONTEXT_INCLUDED_
+
+#include "Gi/GiCommonDraw.h"
+#include "DbRootExport.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines the default context that is used in the Teigha vectorization of OdDbDatabase instances.
+
+    Library: TD_DbRoot
+    
+    <group OdDbRoot_Classes>
+*/
+class DBROOT_EXPORT OdGiDefaultContext : public OdGiContext
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGiDefaultContext);
+
+  OdGiDefaultContext();
+  ~OdGiDefaultContext();
+
+  virtual void getDefaultTextStyle(OdGiTextStyle& textStyle);
+
+  virtual void drawText(
+    OdGiCommonDraw* pDraw,
+    OdGePoint3d& position,
+    const OdChar* msg,
+    OdInt32 numBytes,
+    const OdGiTextStyle* pTextStyle,
+    OdUInt32 flags = 0);
+
+  virtual void drawText(
+    OdGiCommonDraw* pDraw,
+    OdGePoint3d& position,
+    double height,
+    double width,
+    double oblique,
+    const OdString& msg);
+
+  virtual void drawText(
+    OdGiConveyorGeometry* pDest,
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    const OdChar* msg,
+    OdInt32 nLength,
+    bool raw,
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion);
+
+  virtual void drawShape(
+    OdGiCommonDraw* pDraw, 
+    OdGePoint3d& position, 
+    int shapeNumber, 
+    const OdGiTextStyle* pTextStyle);
+
+  void drawShape(
+    OdGiConveyorGeometry* pDest,
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    int shapeNumber,
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion);
+
+  virtual void textExtentsBox(
+    const OdGiTextStyle& textStyle, 
+    const OdChar* msg, 
+    int nLength,
+    OdUInt32 flags, 
+    OdGePoint3d& min, 
+    OdGePoint3d& max, 
+    OdGePoint3d* pEndPos = 0);
+
+  virtual void shapeExtentsBox(
+    const OdGiTextStyle& textStyle, 
+    int shapeNumber, 
+    OdGePoint3d& min, 
+    OdGePoint3d& max);
+  
+  virtual void setPlotGeneration(
+    bool plotGeneration) = 0;
+  
+  virtual ODCOLORREF paletteBackground() const = 0;
+  virtual void setPaletteBackground(
+    ODCOLORREF paletteBackground) = 0;
+
+  virtual bool isZeroTextNormals() const { return false; }
+
+  virtual bool supportVerticalTTFText() const { return false; }
+
+  /** \details
+    Returns true if and only the GsModel flag of this Context Object is set..
+  */
+  virtual bool useGsModel() const { return false; }
+
+  /** \details
+    Controls the GsModel flag of this Context Object.
+    \param enable [in]  Controls the Gs Model.
+  */
+  virtual void enableGsModel(bool enable);//{ throw OdError(eNotImplemented); }
+  
+  enum SolidHatchAsPolygonMode
+  {
+    kHatchTriangulation, //no polygons (default rendering)
+    kHatchPolygon, //polygons only
+    kHatchBoth //triangulation and polygons
+  };
+
+  virtual SolidHatchAsPolygonMode hatchAsPolygon() const { return kHatchTriangulation; }
+  virtual void setHatchAsPolygon(SolidHatchAsPolygonMode mode);
+
+  virtual OdDbStub* getStubByID( OdUInt64 persistentId ) const;
+  virtual OdUInt64 getIDByStub( OdDbStub* objectId ) const;
+  virtual OdDbBaseDatabase *getDatabaseByStub( OdDbStub* objectId ) const;
+  virtual OdDbStub* getOwnerIDByStub( OdDbStub* objectId ) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGiDefaultContext object pointers.
+*/
+typedef OdSmartPtr<OdGiDefaultContext> OdGiDefaultContextPtr;
+
+
+#include "TD_PackPop.h"
+
+#endif //_ODGI_DEFAULTCONTEXT_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GiBaseVectorizerImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GiBaseVectorizerImpl.h
new file mode 100755
index 0000000..9c309c8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GiBaseVectorizerImpl.h
@@ -0,0 +1,315 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GI_BASE_VECTORIZER_IMPL_H_
+#define __OD_GI_BASE_VECTORIZER_IMPL_H_
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsExport.h"
+#include "Gi/GiBaseVectorizer.h"
+#include "Gi/GiConveyorEmbranchment.h"
+#include "Gi/GiLinetypeRedir.h"
+#include "Ps/PlotStyles.h"
+#include "Gs/GsViewPropsDef.h"
+#include "Gs/GsViewImpl.h"
+
+/** \details
+    
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGiBaseVectorizerImpl: public OdGiViewport, public OdGiBaseVectorizer
+{
+protected:
+  ODRX_USING_HEAP_OPERATORS(OdGiBaseVectorizer);
+
+public:
+  OdGiBaseVectorizerImpl();
+
+  /** \details
+    This method is to be called when setting up the vectorizer to work
+    on the given view.
+  *
+  */
+      virtual void setUp(OdGsViewImpl& view);
+
+  OdGsViewImpl& view() const { ODA_ASSERT(m_view); return *m_view; }
+  /** \details
+    Returns the Aware flags for portion of geometry that had been vectorized
+    since last call resetAwareFlags().
+
+    \remarks
+    awareFlags() returns a combination of zero or more of the following:
+
+    <table>
+    Name                    Value         Geometry_depends_on
+    kVpID                   0x00000001    viewport Id (OdGiViewport::viewportId()).
+    kVpRegenType            0x00000002    regeneration type (OdGiCommonDraw::regenType()).
+    kVpRenderMode           0x00000004    render mode (OdGsView::mode()).
+    kVpWorldToEye           0x00000008    description to come...
+    kVpPerspective          0x00000010    description to come...
+    kVpResolution           0x00000020    description to come...
+    kVpMaxDevForCircle      0x00000040    description to come...
+    kVpMaxDevForCurve       0x00000080    description to come...
+    kVpMaxDevForBoundary    0x00000100    description to come...
+    kVpMaxDevForIsoline     0x00000200    description to come...
+    kVpMaxDevForFacet       0x00000400    description to come...
+    kVpCamLocation          0x00000800    description to come...
+    kVpCamTarget            0x00001000    description to come...
+    kVpCamUpVector          0x00002000    description to come...
+    kVpCamViewDir           0x00004000    description to come...
+    kVpViewport             0x00008000    description to come...
+    kVpFrontBack            0x00010000    description to come...
+    kVpFrozenLayers         0x00020000    description to come...
+    kVpLtypeScaleMult       0x00040000    description to come...
+    kEntityRegenDraw        0x00080000    description to come...
+    kVpDisableLayoutCache   0x00100000    description to come...
+    kVpModelTf              0x00200000    description to come...
+    kVpExcludeFromExtMinMax 0x00400000    description to come...
+    kSectionable            0x00800000    description to come...
+    kVpRenderModule         0x01000000    description to come...
+    kVpAnnoScale            0x02000000    description to come...
+    kVpFilterFunction       0x04000000    description to come...
+    kVpVisualStyle          0x08000000    description to come...
+    </table>
+
+    \sa
+
+    * resetAwareFlags
+  */
+  OdUInt32 awareFlags() const { return m_nAwareFlags; }
+  OdUInt32 &awareFlags() { return m_nAwareFlags; }
+
+  /** \details
+    Resets the Aware flags.
+
+    \sa
+    awareFlags
+  */
+  void resetAwareFlags()
+  {
+    //NS: traits processing was optimized, but it is not correct
+    //Aware flags can be changed when calulating for effective traits in affectTraits(),
+    //but on the other hand the flags are reset independently.
+    //As a result it is possible that aware flags have no kVpFrozenLayers flag set, but
+    //the traits are based on the layer (effective traits are used, unchanged from 
+    //the previously processed entity.
+#ifdef ENABLE_GITRAITSOPTIMIZATION
+    if(GETBIT(m_nAwareFlags, kVpFrozenLayers))
+      resetEntityTraitsData(); //force resetting traits
+#endif
+    m_nAwareFlags = 0;
+  }
+  /** \details
+    Returns the effective plot style for this vectorizer object.
+  */
+  const OdPsPlotStyleData& effectivePlotStyle() const;
+
+  OdGsView::RenderMode getRenderMode() const;
+
+  void clearLinetypeCache();
+
+  void setModelSection(OdGiDrawable* pSection, bool bUseSectionGeometryMap);
+  const OdGiDrawable* liveSection() const { return m_liveSection; }
+
+  OdGeMatrix3d modelToWorldTransform() const;
+  OdGeMatrix3d worldToModelTransform() const;
+
+  OdGeMatrix3d objectToDeviceMatrix() const;
+
+  /** OdGiViewport methods *
+  */
+  virtual OdGeMatrix3d getModelToEyeTransform() const;
+  virtual OdGeMatrix3d getEyeToModelTransform() const;
+  virtual OdGeMatrix3d getWorldToEyeTransform() const;
+  virtual OdGeMatrix3d getEyeToWorldTransform() const;
+
+  virtual OdGeMatrix3d getWorldToModelTransform() const;
+  virtual OdGeMatrix3d getModelToWorldTransform() const;
+
+  virtual bool isPerspective() const;
+  virtual bool doPerspective(OdGePoint3d& point) const;
+  virtual bool doInversePerspective(OdGePoint3d& point) const;
+  virtual void getNumPixelsInUnitSquare(
+    const OdGePoint3d& point, 
+    OdGePoint2d& pixelDensity,
+    bool includePerspective = true) const;
+
+  virtual OdGePoint3d getCameraLocation() const;
+  virtual OdGePoint3d getCameraTarget() const;
+  virtual OdGeVector3d getCameraUpVector() const;
+  virtual OdGeVector3d viewDir() const;
+  virtual OdUInt32 viewportId() const;
+  virtual OdInt16 acadWindowId() const;
+  virtual void getViewportDcCorners(
+    OdGePoint2d& lowerLeft, 
+    OdGePoint2d& upperRight) const;
+  virtual bool getFrontAndBackClipValues(
+    bool& clipFront, 
+    bool& clipBack, 
+    double& front, 
+    double& back) const;
+  virtual double linetypeScaleMultiplier() const;
+  virtual double linetypeGenerationCriteria() const;
+  virtual bool layerVisible(
+    OdDbStub* layerId) const;  
+
+  const OdGiContextualColors *contextualColors() const;
+
+  /** OdGiGeometry methods *
+  */
+  virtual void pushModelTransform(const OdGeVector3d& normal);
+  virtual void pushModelTransform(const OdGeMatrix3d & xfm);
+  virtual void popModelTransform();
+  virtual void xline(const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint);
+  virtual void ray(const OdGePoint3d& basePoint, const OdGePoint3d& throughPoint);
+  virtual void shell(OdInt32 numVertices, const OdGePoint3d* vertexList, OdInt32 faceListSize, const OdInt32* faceList,
+                     const OdGiEdgeData* pEdgeData = 0, const OdGiFaceData* pFaceData = 0, const OdGiVertexData* pVertexData = 0);
+  virtual void mesh(OdInt32 numRows, OdInt32 numColumns, const OdGePoint3d* vertexList,
+                    const OdGiEdgeData* pEdgeData = 0, const OdGiFaceData* pFaceData = 0, const OdGiVertexData* pVertexData = 0);
+
+  /** OdGiWorldGeometry methods *
+  */
+  virtual void setExtents(const OdGePoint3d *newExtents);
+
+  /** OdGiCommonDraw methods *
+  */
+  virtual double deviation(const OdGiDeviationType deviationType,
+      const OdGePoint3d& pointOnCurve) const;
+  virtual OdGiRegenType regenType() const;
+  
+  /** OdGiViewportDraw methods *
+  */
+  virtual OdUInt32 sequenceNumber() const;
+  virtual bool isValidId(const OdUInt32 viewportId) const;
+  virtual OdDbStub* viewportObjectId() const;
+  virtual OdGiViewport& viewport() const;
+
+  /** OdGiSubEntityTraits methods *
+  */
+  virtual void setFillPlane(const OdGeVector3d* pNormal = 0);
+  virtual void setFillType(OdGiFillType fillType);
+  virtual OdUInt32 setupForEntity() const;
+
+  /** OdGiConveyorContext methods *
+  */
+  virtual const OdGiViewport* giViewport() const;
+  virtual const OdGsView* gsView() const;
+
+  /** OdGiBaseVectorizer methods *
+  */
+  virtual void beginViewVectorization();
+  virtual void endViewVectorization();
+  virtual void onTraitsModified();
+
+protected:
+  /** \details
+    Returns true if and only if this VectorizeView object is configured to use a fill plane.
+  */
+  bool useFillPlane() const;
+
+  inline bool isOutputSuppressed() const;
+
+  /** \details
+    Returns true if and this if the effective linetype generation is continuous for vectorizer object.
+  */
+  bool isEffectiveLinetypeContinuous() const;
+
+  /** OdGiBaseVectorizer methods *
+  */
+  virtual void affectTraits(const OdGiSubEntityTraitsData* pSource,
+      OdGiSubEntityTraitsData& destination) const;
+
+private:
+  const OdPsPlotStyleData& plotStyle() const;
+  void affect2dTraits(const OdGiSubEntityTraitsData* pFrom, OdGiSubEntityTraitsData& to) const;
+  /** \details
+    Updates the Xline and Ray clipper prior to rendering each Xline and Ray.
+    \remarks
+    Called by ray() and xline().
+  */
+  void updateXlineNRayClipper();
+  void onModelToEyeChanged();
+  
+protected:
+  mutable OdUInt32            m_nAwareFlags;
+  OdGeVector3d                m_fillPlane;
+  OdGiContext::PStyleType     m_pstype;
+  mutable OdPsPlotStyleData   m_plotStyle;
+  OdUInt32                    m_setAttributesHints;
+  OdGiOrthoClipperPtr         m_pXlineNRayClipper;
+  OdGiConveyorEntryPoint      m_xlineNRayEntryPoint;
+  OdGiLinetypeRedirPtr        m_pLinetyper;
+  OdGiConveyorEmbranchmentPtr m_pOutputBranch;
+  OdRxObjectPtr               m_pGsReserved; // Reserved pointer for internal use (binary incompatible changes), do not delete.
+  OdGiDrawablePtr             m_liveSection;
+  OdRxObjectPtr               m_sectionGeometryMap;
+  OdCmTransparency            m_sectForegroundFace;
+  OdCmTransparency            m_sectForegroundEdge;
+
+private:
+  OdGsViewImpl*               m_view;
+  OdGiXformPtr                m_pXToLtp;
+  OdGiConveyorConnector       m_ltpEntryPoint;
+
+  mutable int                 m_nPenIndex;
+  mutable OdDbStub*           m_psnId;
+  mutable OdPsPlotStyleData   m_effectivePlotStyle;
+
+protected:
+  mutable OdGeMatrix3d        m_objectToDeviceMatrix;
+protected:
+  enum Flags
+  {
+    kFillPlaneSet               = OdGiBaseVectorizer::kLastFlag <<  1,
+    kLinetypeContinuous         = OdGiBaseVectorizer::kLastFlag <<  2,
+    kModelCache                 = OdGiBaseVectorizer::kLastFlag <<  3,
+    kHighlighted                = OdGiBaseVectorizer::kLastFlag <<  4,
+    kDontAbortRegen             = OdGiBaseVectorizer::kLastFlag <<  5,
+    kCheckLinePattern           = OdGiBaseVectorizer::kLastFlag <<  6,
+    kBreakSelection             = OdGiBaseVectorizer::kLastFlag <<  7,
+    kSuppressOutput             = OdGiBaseVectorizer::kLastFlag <<  8,
+    kSelectionGeometry          = OdGiBaseVectorizer::kLastFlag <<  9,  // Processing geometry which is intended only for selection
+    kSelectionDisabled          = OdGiBaseVectorizer::kLastFlag <<  10, // Processing geometry which shouldn't be used for selection
+    kObjectToDeviceValid        = OdGiBaseVectorizer::kLastFlag <<  11,
+    kDisableInfiniteGeomExtents = OdGiBaseVectorizer::kLastFlag <<  12,
+    kSectionableGeomExtentsOnly = OdGiBaseVectorizer::kLastFlag <<  13,
+    kDisableSection             = OdGiBaseVectorizer::kLastFlag <<  14,
+    kSectionForegroundGeometry  = OdGiBaseVectorizer::kLastFlag <<  15,
+    kInitGsState                = OdGiBaseVectorizer::kLastFlag <<  16,
+    kSetVpLtypeScaleMult        = OdGiBaseVectorizer::kLastFlag <<  17,
+    kSetVpFilterFunction        = OdGiBaseVectorizer::kLastFlag <<  18,
+    kLastOptionFlag             = kSetVpFilterFunction
+  };
+};
+
+inline bool OdGiBaseVectorizerImpl::isOutputSuppressed() const
+{
+  return GETBIT(m_flags, kSuppressOutput);
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GI_BASE_VECTORIZER_IMPL_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/Gs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/Gs.h
new file mode 100755
index 0000000..3fb4772
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/Gs.h
@@ -0,0 +1,1364 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __GS_H_INCLUDED_
+#define __GS_H_INCLUDED_
+
+#include "RxObject.h"
+#include "RxIterator.h"
+#include "Gs/GsExport.h"
+
+class OdGiDrawable;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiDrawable object pointers. 
+*/
+typedef OdSmartPtr<OdGiDrawable> OdGiDrawablePtr;
+
+class OdGeMatrix3d;
+class OdGePoint3d;
+class OdGeVector3d;
+class OdGePoint2d;
+class OdGiEdgeData;
+class OdGiFaceData;
+class OdGiVertexData;
+struct OdGiClipBoundary;
+class OdGiAbstractClipBoundary;
+class OdDbStub;
+class OdGeExtents3d;
+class OdGiVisualStyle;
+
+#include "TD_PackPush.h"
+
+#include "OdPlatform.h"
+#include "RxModule.h"
+#include "IntArray.h"
+#include "GsDCPointArray.h"
+#include "Ge/GePoint2dArray.h"
+
+class OdGsSelectionReactor;
+
+class OdGsView;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGsView object pointers. 
+*/
+typedef OdSmartPtr<OdGsView> OdGsViewPtr;
+
+class OdGsModel;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGsModel object pointers. 
+*/
+typedef OdSmartPtr<OdGsModel> OdGsModelPtr;
+
+/** \details
+  This template class is a specialization of the OdArray class for OdGsModel object pointers.
+*/
+typedef OdArray<OdGsModel*, OdMemoryAllocator<OdGsModel*> > OdGsModelArray;
+
+class OdGsDevice;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGsDevice object pointers. 
+*/
+typedef OdSmartPtr<OdGsDevice> OdGsDevicePtr;
+
+class OdRxDictionary;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxDictionary object pointers. 
+*/
+typedef OdSmartPtr<OdRxDictionary> OdRxDictionaryPtr;
+
+class OdGsReactor;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGsReactor object pointers. 
+*/
+typedef OdSmartPtr<OdGsReactor> OdGsReactorPtr;
+
+class OdGiRasterImage;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiRasterImage object pointers. 
+*/
+typedef OdSmartPtr<OdGiRasterImage> OdGiRasterImagePtr;
+
+#include "GsDefs.h"
+
+class OdGiContext;
+struct OdGsClientViewInfo;
+class OdGsFiler;
+
+#include "Gi/GiContextualColors.h"
+
+/** \details
+    This class is the abstract base class for classes that implement Viewport objects in GUI display windows.
+
+    \remarks
+    Each Viewport objects consists of a collection of objects to be viewed, and camera parameters that define the view.
+    
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGsView : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsView);
+  
+  enum RenderMode
+  {
+    kBoundingBox                  = -1,     // Bounding box. For internal use only.
+    k2DOptimized                  = 0,      // Standard *display*. Optimized for 2D.
+    kWireframe                    = 1,      // Standard *display*. Uses 3D pipeline.
+    kHiddenLine                   = 2,      // Wireframe *display*. Hidden lines removed.
+    kFlatShaded                   = 3,      // Faceted *display*. One *color* per face.
+    kGouraudShaded                = 4,      // Smooth shaded *display*. Colors interpolated between *vertices*.
+    kFlatShadedWithWireframe      = 5,      // Faceted *display* with wireframe overlay.
+    kGouraudShadedWithWireframe   = 6,      // Smooth shaded *display* with wireframe overlay.
+    kNone
+  };
+
+  enum Projection
+  {
+    kParallel     = 0,
+    kPerspective  = 1
+  };
+
+  enum SelectionMode
+  {
+    kWindow       = 0,
+    kCrossing     = 1,
+    kFence        = 2,
+    kWPoly        = 3,
+    kCPoly        = 4,
+
+    kPoint        = 16
+  };
+
+  /** \details
+    Returns the GsDevice object associated with this Viewport object.
+  */
+  virtual OdGsDevice* device() const = 0;
+
+  /** \details
+    Returns the GiContext object associated with this Viewport object.
+  */
+  virtual OdGiContext* userGiContext() const = 0;
+
+  /** \details
+    Sets the User Context object associated with this Viewport object.
+    \param pUserGiContext [in]  Pointer to the User Context.
+  */
+  virtual void setUserGiContext(OdGiContext* pUserGiContext) = 0;
+
+  /** \details
+    Returns the scale factor for displaying Lineweights in this Viewport object.
+  */
+  virtual double lineweightToDcScale() const = 0;
+  /** \details
+    Sets the scale factor for displaying Lineweights in this Viewport object.
+    \param scale [in]  Scale factor.
+  */
+  virtual void setLineweightToDcScale(double scale) = 0;
+
+  /** \details
+    Sets the lineweights for this Viewport object.
+    \param numLineweights [in]  Number of Lineweights.
+    \param lineweights [in]  Array of Lineweights.
+  */
+  virtual void setLineweightEnum(int numLineweights, const OdUInt8* lineweights) = 0;
+
+  /** \details
+    Sets the size and position of this Viewport object.
+    \param lowerLeft [in]  Lower-left corner in nomalized device coordinates [0.0 .. 1.0].
+    \param upperRight [in]  Upper-right corner in nomalized device coordinates [0.0 .. 1.0].
+    \param screenRect [in]  Screen rectangle in device coordinates (pixels).
+    
+    \remarks
+    (0,0) is the lower-left corner of the owning Device object. Coordinates increase upward and to the right.
+    
+    \note
+    The View object can be partly or completely off screen.    
+  */
+  virtual void setViewport(const OdGePoint2d& lowerLeft, const OdGePoint2d& upperRight) = 0;
+  virtual void setViewport(const OdGsDCRect& screenRect) = 0;
+  virtual void setViewport(const OdGsDCRectDouble& screenRect);
+
+  /** \details
+    Returns the size and position of this Viewport object.
+    \param lowerLeft [out]  Receives the lower-left corner in nomalized device coordinates [0.0 .. 1.0].
+    \param upperRight [out]  Receives the upper-right corner in nomalized device coordinates [0.0 .. 1.0].
+    \param screenRect [out]  Receives the screen rectangle in device coordinates (pixels).
+    
+    \remarks
+    (0,0) is the lower-left corner of the owning Device object.  Coordinates increase upward and to the right.
+    
+    \note
+    The View object may be partly or completely off screen.    
+  */
+  virtual void getViewport(OdGePoint2d& lowerLeft, OdGePoint2d& upperRight) const = 0;
+  virtual void getViewport(OdGsDCRect& screenRect) const = 0;
+  virtual void getViewport(OdGsDCRectDouble& screenRect) const;
+
+  /** \details
+    Defines a polygonal clip region for this Viewport object.
+    
+    \param numCoutours [in]  Number of polygonal contours.
+    \param numVertices [in]  Array of the number of vertices in each polygonal contour.
+    \param vertices [in]  Array of device coordinate (pixel) vertices defining the polygonal contours.
+  */
+  virtual void setViewportClipRegion(int numContours, int const* numVertices, OdGsDCPoint const* vertices) = 0;
+  virtual void setViewportClipRegion(int numContours, int const* numVertices, OdGePoint2d const* vertices) = 0;
+
+  /** \details
+    Returns a polygonal clip region for this Viewport object.
+    
+    \param counts [out]  Array of the number of vertices in each polygonal contour.
+    \param vertices [out]  Array of device coordinate (pixel) vertices defining the polygonal contours.
+  */
+  virtual void viewportClipRegion(OdIntArray& counts, OdGsDCPointArray& vertices) const = 0;
+  virtual void viewportClipRegion(OdIntArray& counts, OdGePoint2dArray& vertices) const = 0;
+
+  /** \details
+    Removes the polygonal clip region for this Viewport object.
+  */
+  void removeViewportClipRegion();
+
+  /** \details
+    Defines the 3d clipping for this Viewport object.
+
+    \param pBoundary [in]  3d clipping boundary.
+    \param pClipInfo [in]  Optional 3d clipping boundary extended data.
+  */
+  virtual void setViewport3dClipping(const OdGiClipBoundary* pBoundary, const OdGiAbstractClipBoundary* pClipInfo = NULL);
+
+  /** \details
+    Returns the current 3d clipping for this Viewport object.
+
+    \param ppClipInfo [out]  Optional 3d clipping boundary extended data.
+
+    \note
+    Returns null if 3d clipping boundary doesn't set.
+  */
+  virtual const OdGiClipBoundary *viewport3dClipping(const OdGiAbstractClipBoundary** ppClipInfo = NULL) const;
+
+  /** \details
+    Removes the 3d clipping from this Viewport object.
+  */
+  void removeViewport3dClipping();
+
+  /** \details
+    Sets the color and width of the border for this Viewport object.
+    \param color [in]  Border color.
+    \param width [in]  Border width in pixels.
+  */
+  virtual void setViewportBorderProperties(ODCOLORREF color, int width) = 0;
+
+  /** \details
+    Returns the color and width of the border for this Viewport object.
+    \param color [out]  Receives the border color.
+    \param width [out]  Receives the border width in pixels.
+  */
+  virtual void getViewportBorderProperties(ODCOLORREF& color, int& width) const = 0;
+
+  /** \details
+    Controls the border visibility for this Viewport object.
+    \param visible [in]  Controls visibility.
+  */
+  virtual void setViewportBorderVisibility(bool visible) = 0;
+
+  /** \details
+    Returns true if and  only if the border is visible for this Viewport object.
+  */
+  virtual bool isViewportBorderVisible() const = 0;
+
+  /** \details
+    Sets the camera parameters for this Viewport object.
+    
+    \param position [in]  Camera position.
+    \param target [in]  Camera target.
+    \param upVector [in]  Camera up vector.
+    \param fieldWidth [in]  Projection plane (field) width.
+    \param fieldHeight [in]  Projection plane (field) height.
+    \param projectionType [in]  Projection type.
+    
+    \remarks
+    All parameters are in WCS coordinates.
+
+    projectionType must be one of the following:
+    
+    <table>
+    Name           Value
+    kParallel      0
+    kPerspective   1
+    </table>
+    
+    \note
+    This method defines the transfomation from WCS coordinates to normalized device coordinates.
+  */
+  virtual void setView(
+    const OdGePoint3d& position,
+    const OdGePoint3d& target,
+    const OdGeVector3d& upVector,
+    double fieldWidth,
+    double fieldHeight,
+    Projection projectionType = kParallel) = 0;
+
+  /** \details
+    Returns the WCS camera position for this Viewport object.
+  */
+  virtual OdGePoint3d position() const = 0;
+
+  /** \details
+    Returns the WCS camera target for this Viewport object.
+  */
+  virtual OdGePoint3d target() const = 0;
+
+  /** \details
+    Returns the WCS camera up vector for this Viewport object.
+  */
+  virtual OdGeVector3d upVector() const = 0;
+
+  /** \details
+    Returns the perspective lens length for this Viewport object.
+  */
+  virtual double lensLength() const = 0;
+
+  /** \details
+    Sets the perspective lens length for this Viewport object.
+    \param lensLength [in]  Perspective lens length.
+  */
+  virtual void setLensLength(double lensLength) = 0;
+
+  /** \details
+    Returns true if and only if the projection type for this Viewport object is kPerspective. 
+  */
+  virtual bool isPerspective() const = 0;
+
+  /** \details
+    Returns the WCS projection plane (field) width for this Viewport object.
+  */
+  virtual double fieldWidth() const = 0;
+  /** \details
+    Returns the WCS projection plane (field) height for this Viewport object.
+  */
+  virtual double fieldHeight() const = 0;
+
+  /** \details
+    Controls the front clipping of this Viewport object.
+    \param enable [in]  Enable front clipping.
+  */
+  virtual void setEnableFrontClip(bool enable) = 0;
+
+  /** \details
+    Returns true if and only if front clipping is enabled for this Viewport object.
+  */
+  virtual bool isFrontClipped() const = 0;
+
+  /** \details
+    Sets the front clip distance from the target of this Viewport object.
+    \param frontClip [in]  Front clip distance.
+  */
+  virtual void setFrontClip(double frontClip) = 0;
+
+  /** \details
+    Returns the front clip distance from the target of this Viewport object.
+  */
+  virtual double frontClip() const = 0;
+
+  /** \details
+    Controls the back clipping of this Viewport object.
+    \param enable [in]  Enable back clipping.
+  */
+  virtual void setEnableBackClip(bool enable) = 0;
+
+  /** \details
+    Returns true if and only if back clipping is enabled for this Viewport object.
+  */
+  virtual bool isBackClipped() const = 0;
+
+  /** \details
+    Sets the back clip distance from the target of this Viewport object.
+    \param backClip [in]  Back clip distance.
+  */
+  virtual void setBackClip(double backClip) = 0;
+  /** \details
+    Returns the back clip distance from the target of this Viewport object.
+  */
+  virtual double backClip() const = 0;
+
+  /** \details
+      Returns the matrix that transforms world space to view space for this Viewport object.
+
+      \sa
+      Coordinate Systems.
+  */
+  virtual OdGeMatrix3d viewingMatrix() const = 0;
+
+  /** \details
+      Returns the matrix that transforms view space to normalized device space for this Viewport object.
+
+      \sa
+      Coordinate Systems.
+  */
+  virtual OdGeMatrix3d projectionMatrix() const = 0;
+
+  /** \details
+      Returns the matrix that transforms normalized device space to screen space for this Viewport object.
+
+      \sa
+      Coordinate Systems.
+  */
+  virtual OdGeMatrix3d screenMatrix() const = 0;
+
+  /** \details
+      Returns a matrix that transforms coordinates from world space to screen space for this Viewport object. 
+      
+      \remarks
+      This is equivalent to the concatenation of the viewingMatrix, 
+      projectionMatrix, and screenMatrix.
+
+      \sa
+      Coordinate Systems.
+  */
+  virtual OdGeMatrix3d worldToDeviceMatrix() const = 0;
+
+  /** \details
+      Returns the matrix that transforms coordinates from model space to screen space for this Viewport object.
+
+      \sa
+      Coordinate Systems.
+  */
+  virtual OdGeMatrix3d objectToDeviceMatrix() const = 0;
+
+  /** \details
+    Sets the render mode for this Viewport object.
+    
+    \param mode [in]  Render mode.
+    
+    \remarks
+    mode must be one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  virtual void setMode(RenderMode mode) = 0;
+
+  /** \details
+    Sets the render mode for this Viewport object.
+    
+    \remarks
+    mode must be one of the following:
+    
+    <table>
+    Name                            Value      Description
+    kBoundingBox                    -1         Bounding box. For internal use only.
+    k2DOptimized                    0          Standard display. Optimized for 2D.
+    kWireframe                      1          Standard display. Uses 3D pipeline.
+    kHiddenLine                     2          Wireframe display. Hidden lines removed.
+    kFlatShaded                     3          Faceted display. One color per face.
+    kGouraudShaded                  4          Smooth shaded display. Colors interpolated between vertices.
+    kFlatShadedWithWireframe        5          Faceted display with wireframe overlay.
+    kGouraudShadedWithWireframe     6          Smooth shaded display with wireframe overlay.
+    </table>
+  */
+  virtual RenderMode mode() const = 0;
+
+  /** \details
+    Adds the specified scene graph to this Viewport object.
+    
+    \param pSceneGraph [in]  Pointer to the root of the scene graph.
+    \param pModel [in]  Pointer to the Model object to which all scene graph notifications are to be directed.
+    
+    \remarks
+    This function is intended to be used as follows:
+    
+    1.  Construct a scene graph of OdGiDrawable objects. 
+        Each object draws its children with OdGiGeometry::draw().
+    
+    2.  With this function, add the root of the scene graph and the 
+        OdGsModel that handles notifications to this Viewport object.
+  */
+  virtual bool add(OdGiDrawable* pSceneGraph, OdGsModel* pModel) = 0;
+
+  /** \details
+    Removes the specified scene graph from this Viewport object.
+    
+    \param sceneGraph [in]  Pointer to the root of the scene graph.
+  */
+  virtual bool erase(OdGiDrawable* sceneGraph) = 0;
+  /** \details
+    Removes all scene graphs from this Viewport object.
+    
+    \param sceneGraph [in]  Root of scene graph.
+  */
+  virtual void eraseAll() = 0;
+
+  /** \details
+    Returns OdGsModel object associated with specified OdGiDrawable object in this Viewport object.
+
+    \param pDrawable [in]  Pointer onto OdGiDrawable object.
+  */
+  virtual OdGsModel *getModel(const OdGiDrawable *pDrawable) const = 0;
+  /** \details
+    Returns array of OdGsModel objects associated with this Viewport object.
+  */
+  virtual OdGsModelArray getModelList() const = 0;
+
+   /** \details
+    Marks for refresh the specified region of this Viewport object.
+     
+    \param screenRect [in]  Screen rectangle in device coordinates (pixels).
+    
+    \remarks
+    If screenRect is not specified, the entire area of this View is marked for refresh.
+   */
+  virtual void invalidate() = 0;
+  virtual void invalidate(const OdGsDCRect &screenRect) = 0;
+
+  /** \details
+    Returns true if and only if this Viewport object is showing the correct image.
+
+    \remarks
+    This implies the follow:
+    * No part of GUI area is flagged for refresh.
+    * All rasterizations are complete
+    * The rendering pipeline has been flushed.
+  */
+  virtual bool isValid() const = 0;
+
+  /** \details
+    Flushes any queued graphics to the display device.
+    
+    \remarks
+    If called while this Viewport object is in the interactive state, this function immediately returns.
+  */
+  virtual void update() = 0;
+
+  /** \details
+    Puts this Viewport object into interactive state.
+    
+    \param frameRateInHz [in]  Frames/second.
+    
+    \remarks
+    A frame rate of 0.0 specifies the default frame rate.
+  */
+  virtual void beginInteractivity(double frameRateInHz) = 0;
+  /** \details
+    Removes this Viewport object from the interactive state.
+    \param frameRateInHz [in]  Frames/second.
+  */
+  virtual void endInteractivity() = 0;
+  /** \details
+    Flushes the graphic pipeline and renders this Viewport object.
+    
+    \note
+    This function should be called only during interactivty. 
+  */
+  virtual void flush() = 0;
+
+  /** \details
+    Hides this Viewport object.
+  */
+  virtual void hide() = 0;
+
+  /** \details
+    Un-hides this Viewport object.
+  */
+  virtual void show() = 0;
+
+  /** \details
+    Returns true if and only if this Viewport object is not hidden.
+  */
+  virtual bool isVisible() = 0;
+
+  /** \details
+    Freezes the specified Layer object in this Viewport object.
+    \param layerID [in]  Layer to freeze.
+    \remarks
+    All layers are thawed by default.
+  */
+  virtual void freezeLayer(OdDbStub* layerID) = 0;
+
+  /** \details
+    Thaws the specified Layer object in this Viewport object.
+    \param layerID [in]  Layer to thaw.
+    \remarks
+    All layers are thawed by default.
+  */
+  virtual void thawLayer(OdDbStub* layerID) = 0;
+
+  /** \details
+    Thaws all Layer objects in this Viewport object.
+    \remarks
+    All layers are thawed by default.
+  */
+  virtual void clearFrozenLayers() = 0;
+
+  /** \details
+    Marks for regeneration all subViewportDraw() geometry for this Viewport object.
+  */
+  virtual void invalidateCachedViewportGeometry() = 0;
+
+  /** \details
+    Runs selection procedure inside this Viewport object.
+
+    \param pts [in]  Selection points in device coordinate space.
+    \param nPoints [in]  Count of selection points.
+    \param pReactor [in]  Selection callback pointer.
+    \param mode [in]  Selection mode.
+  */
+  virtual void select(const OdGsDCPoint* pts, int nPoints,
+    OdGsSelectionReactor* pReactor,
+    OdGsView::SelectionMode mode = OdGsView::kCrossing) = 0;
+
+  /** \details
+    Translates the camera position and target by the specified Camera Coordinate dolly amount.
+     
+    \param dollyVector [in]  Camera Coordinate dolly vector.
+    \param xDolly [in]  Camera Coordinate X dolly amount.
+    \param yDolly [in]  Camera Coordinate Y dolly amount.
+    \param zDolly [in]  Camera Coordinate Z dolly amount.
+     
+    \remarks
+    Camera Coordinates are relative to the view of a target from a camera. 
+    
+    * The Y-axis is along up vector. 
+    * The Z-axis is along the vector from camera postiton to the target. 
+    * The X-axis is the cross product Y-axis � Z-axis 
+  */
+    virtual void dolly(const OdGeVector3d& dollyVector) = 0;
+  virtual void dolly(double xDolly, double yDolly, double zDolly) = 0;
+
+  /** \details
+    Rotates the camera by the specified amount about the eye vector.
+     
+    \param rollAngle [in]  Camera CCW roll angle.
+     
+    \remarks
+    Positive angles rotate the camera counterclockwise about the eye vector
+    when viewed from the camera position to the target. This corresponds
+    to a clockwise rotation of the up vector.
+    
+    \note
+    Camera Coordinates are relative to the view of a target from a camera. 
+    
+    * The Y-axis is along up-vector. 
+    * The Z-axis (eye vector) is along the vector from camera postiton to the target. 
+    * The X-axis is the cross product Y-axis � Z-axis.
+    
+    All angles are expressed in radians.
+  */
+    virtual void roll(double rollAngle) = 0;
+
+  /** \details
+    Orbits the camera about the target by the specified amounts.
+     
+    \param xOrbit [in]  X-axis Orbit.
+    \param yOrbit [in]  Y-axis Orbit.
+     
+    \remarks
+    he camera moves on the surface a sphere whose center the camera target and whose
+    radius is the distance from the camera position to its target 
+    
+    * The camera is first rotated about an axis parallel to the X-axis and passing through the target.  
+    * The camera is next rotated about an axis parallel to the Y-axis and passing through the target  
+    
+    \note
+    Camera Coordinates are relative to the view of a target from a camera. 
+    
+    * The Y-axis is along up vector. 
+    * The Z-axis is along the vector from camera postiton to the target. 
+    * The X-axis is the cross product Y-axis � Z-axis 
+
+    All angles are expressed in radians.
+  */
+    virtual void orbit(double xOrbit, double yOrbit) = 0;
+
+  /** \details
+    Scales the focal length of the camera by the specified amount.
+     
+    \param zoomFactor [in]  Zoom factor.
+     
+  */
+    virtual void zoom(double zoomFactor) = 0;
+
+  /** \details
+    Rotates the target about the camera the specified amounts.
+     
+    \param xPan [in]  X-axis pan.
+    \param yPan [in]  Y-axis pan.
+     
+    \remarks
+    The target moves on the surface a sphere whose center the camera position and whose
+    radius is the distance from the camera position to its target 
+    
+    * The target is first rotated about an axis parallel to the X-axis and passing through the camera.  
+    * The target is next rotated about an axis parallel to the Y-axis and passing through the camera.  
+    
+    \note
+    Camera Coordinates are relative to the view of a target from a camera. 
+    
+    * The Y-axis is along up vector. 
+    * The Z-axis is along the vector from camera postiton to the target. 
+    * The X-axis is the cross product Y-axis � Z-axis 
+    All angles are expressed in radians.
+  */
+    virtual void pan(double xPan, double yPan) = 0;
+
+  /** \details
+    Scales the camera to completely include specified WCS box inside view frustum.
+
+    \param minPt [in]  minimal WCS box point.
+    \param maxPt [in]  maximal WCS box point.
+  */
+  virtual void zoomExtents(const OdGePoint3d &minPt, const OdGePoint3d &maxPt) = 0;
+
+  /** \details
+    Scales the camera to completely include specified screen area.
+
+    \param lowerLeft [in]  Lower-left corner in nomalized device coordinates [0.0 .. 1.0].
+    \param upperRight [in]  Upper-right corner in nomalized device coordinates [0.0 .. 1.0].
+  */
+  virtual void zoomWindow(const OdGePoint2d &lowerLeft, const OdGePoint2d &upperRight) = 0;
+
+  /** \details
+    Returns true if and only if specified point is visible inside current view frustum.
+
+    \param pt [in]  WCS point for check.
+  */
+  virtual bool pointInView(const OdGePoint3d &pt) const = 0;
+
+  /** \details
+    Returns true if and only if specified WCS box is visible completely or partially inside current view frustum.
+
+    \param minPt [in]  minimal WCS box point.
+    \param maxPt [in]  maximal WCS box point.
+  */
+  virtual bool extentsInView(const OdGePoint3d &minPt, const OdGePoint3d &maxPt) const = 0;
+
+  /** \details
+    Clones this view object.
+
+    \param cloneViewParameters [in]  If and only if true, view parameters will be cloned.
+    \param cloneGeometry [in]  If and only if true, geometry will be cloned.
+    
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  virtual OdGsViewPtr cloneView(bool cloneViewParameters = true, bool cloneGeometry = false) = 0;
+
+  /** \details
+    Sets the view parameters of the specified OdGsView object to that of this Viewport object.
+    \param pView [out]  Receives the view parameters.
+  */
+  virtual void viewParameters(OdGsView* pView) const = 0;
+
+  /** \details
+    Returns true if an only if any view parameters have exceeded their boundaries since the last
+    call to this function.
+    
+    \remarks
+    The following calls are monitored:
+    
+    * dolly()
+    * orbit()
+    * pan() 
+    * roll()
+    * setBackClip()
+    * setFrontClip()
+    * setView()
+    * zoom()
+  */
+  virtual bool exceededBounds() = 0;
+
+  /** \details
+    Controls stereo viewing for this Viewport object.
+    
+    \param enable [in]  Controls stereo viewing.
+  */
+  virtual void enableStereo(bool enabled) = 0;
+
+  /** \details
+    Returns true if and only if stereo viewing is enabled for this Viewport object.
+  */
+  virtual bool isStereoEnabled() const = 0;
+
+  /** \details
+    Sets the stereo parameters for this Viewport Object.
+    \param magnitude [in]  View separation [0.0 .. 2.0].
+    \param parallax [in]  Adjusts the plane of zero parallax [0.0 .. 2.0].
+    
+    \remarks
+    magnitude controls view eye separation, and hence the stereo effect.
+    
+    * A magnitude of 1.0 is the default value.
+    * A magnitude of 0.0 produces no stereo effect.
+    * A magnitude of 2.0 produces a double stereo effect.
+    
+    parallax adjusts the zero parallax plane.
+    
+    * A parallax of 1.0 is the default value. An object centered at the target will be half-in and half-out of the screen.
+    * A parallax of 0.0 moves the object into the screen.
+    * A parallax of 2.0 move the object out of the screen.
+    
+  */
+   virtual void setStereoParameters(double magnitude, double parallax) = 0;
+
+  /** \details
+    Returns the stereo parameters for this Viewport Object.
+    \param magnitude [out]  Receives the view separation [0.0 .. 2.0].
+    \param parallax [out]  Receives the plane of zero parallax adjustment [0.0 .. 2.0].
+    
+    \remarks
+    magnitude controls view eye separation, and hence the stereo effect.
+    
+    * A magnitude of 1.0 is the default value.
+    * A magnitude of 0.0 produces no stereo effect.
+    * A magnitude of 2.0 produces a double stereo effect.
+    
+    parallax adjusts the zero parallax plane.
+    
+    * A parallax of 1.0 is the default value. An object centered at the target will be half-in and half-out of the screen.
+    * A parallax of 0.0 moves the object into the screen.
+    * A parallax of 2.0 move the object out of the screen.
+    
+  */
+   virtual void getStereoParameters(double& magnitude, double& parallax) const = 0;
+
+  /** \details
+    Returns an iterator to traverse the lights attached to this Viewport object.
+    \param pLightsIterator [in]  Pointer to the lights iterator.
+  */
+  virtual void initLights(OdRxIterator* pLightsIterator) = 0;
+
+  /** \details
+    Sets a multiplier that is used to scale all linetypes in this Viewport object.
+    
+    \param linetypeScaleMultiplier [in]  Linetype scale multiplier.
+  */
+  virtual void setLinetypeScaleMultiplier(double linetypeScaleMultiplier) = 0;
+
+  /** \details
+    Returns current linetype scale multiplier value.
+  */
+  virtual double linetypeScaleMultiplier() const = 0;
+
+  /** \details
+    Sets a multiplier that could be used as an alternate scale factor for linetypes in this Viewport object.
+    
+    \param linetypeAlternateScaleMultiplier [in]  Alternate linetype scale multiplier.
+  */
+  virtual void setAlternateLinetypeScaleMultiplier(double linetypeAlternateScaleMultiplier) = 0;
+
+  /** \details
+    Returns current alternate linetype scale multiplier value.
+  */
+  virtual double linetypeAlternateScaleMultiplier() const = 0;
+
+  /** \details
+    Returns the ClientViewInfo for this Viewport object.
+    
+    \param clientViewInfo [out]  Receives the ClientViewInfo.
+  */
+  virtual void clientViewInfo(OdGsClientViewInfo& clientViewInfo) const;
+
+  enum ClearColor
+  {
+    kTransparent,
+    kDeviceBackground,
+    kPaletteBackground
+  };
+
+  /** \details
+    Sets the clear color for this view
+
+    \param color [in]  The clear color.
+  */
+  virtual void setClearColor(ClearColor color) = 0;
+
+  /** \details
+    Checks does specified point is inside viewport area.
+
+    \param screenPoint [in]  Check point in device coordinate space.
+  */
+  virtual bool pointInViewport(const OdGePoint2d& screenPoint) const = 0;
+
+  /** \details
+    Returns the display pixel density at the specified point for this Viewport object.
+
+    \param point [in]  WCS center of the unit square.
+    \param pixelDensity [out]  Receives the pixel density.
+    \param bUsePerspective [in]  Enable perspective inclusion into pixel density calculation.
+
+    \remarks
+    Pixel density is measured in pixels per WCS unit.
+
+    This function can be used to determine if the geometry generated for an object will 
+    be smaller than the size of a pixel.
+  */
+  virtual void getNumPixelsInUnitSquare(const OdGePoint3d& point,
+                                        OdGePoint2d& pixelDensity, bool bUsePerspective = true) const = 0;
+
+  /** \details
+    Sets background object for this view.
+
+    \param backgroundId [in]  New background object ID.
+  */
+  virtual void setBackground(OdDbStub *backgroundId) = 0;
+  /** \details
+    Returns current background object ID for this view.
+  */
+  virtual OdDbStub *background() const = 0;
+
+  /** \details
+    Sets visual style object for this view.
+
+    \param visualStyleId [in]  New visual style object ID.
+  */
+  virtual void setVisualStyle(OdDbStub *visualStyleId) = 0;
+  /** \details
+    Returns current visual style object ID for this view.
+  */
+  virtual OdDbStub *visualStyle() const = 0;
+  /** \details
+    Sets visual style for this view.
+
+    \param visualStyle [in]  New visual style data.
+  */
+  virtual void setVisualStyle(const OdGiVisualStyle &visualStyle) = 0;
+  /** \details
+    Returns current visual style for this view.
+
+    \param visualStyle [out]  OdGiVisualStyle structure to fill by current visual style data.
+
+    \remarks
+    Returns true if and only if OdGiVisualStyle structure is filled by visual style data.
+  */
+  virtual bool visualStyle(OdGiVisualStyle &visualStyle) const = 0;
+
+  /** \details
+    Returns image of current view buffer.
+
+    \param pImage [out]  Pointer for image to return.
+    \param region [in]  Rectangle specifies region to return.
+
+    \remarks
+    Implementation can throw eNotImplementedYet exception if current vectorization module doesn't support snap shots.
+  */
+  virtual void getSnapShot(OdGiRasterImagePtr &pImage, const OdGsDCRect &region) = 0;
+};
+
+/** \details
+    This stucture contains the Window ID and Viewport Object ID.
+    
+    Library: TD_Gs
+
+    <group !!RECORDS_TD_APIRef>
+*/
+struct OdGsClientViewInfo 
+{
+  enum ViewportFlags
+  {
+    kDependentViewport = 1,
+    kDependentGeometry = 2,
+    kHelperView        = 4,
+    kSetViewportId     = 8
+  };
+
+  long      viewportId;        // Returned by OdGiViewport::viewportId()
+  long      acadWindowId;      // Returned by OdGiViewport::acadWindowId()
+  OdDbStub* viewportObjectId;  // Returned by OdGiViewportDraw::viewportObjectId()
+  OdGiContextualColorsPtr contextColors; // Returned by OdGiViewport::contextualColors()
+  OdUInt32  viewportFlags;     // Optional view flags
+
+  OdGsClientViewInfo()
+    : viewportId(-1)
+    , acadWindowId(0)
+    , viewportObjectId(NULL)
+    , viewportFlags(0)
+  {
+  }
+};
+
+class OdGiContext;
+
+/** \details
+    This class is the abstract base class for classes that encapsulate GUI display windows.
+
+    \remarks
+    OdGsDevice objects own, update, and refresh one or more OdGsView objects.
+    
+    In addition, they responds to operating system notifications,
+    such as window resize, forwarded by the graphics system client.
+
+    Library: TD_Gs
+        
+    <group OdGs_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGsDevice : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsDevice);
+
+  /** \details
+    Returns a SmartPointer to the dictionary containing the 
+    properties for this Device object.
+  */
+  virtual OdRxDictionaryPtr properties() = 0;
+
+  /** \details
+    Returns the User Context object associated with this Device object.
+  */
+  virtual OdGiContext* userGiContext() const = 0;
+
+  /** \details
+    Sets the User Context object associated with this Device object.
+    \param pUserGiContext [in]  Pointer to the User Context.
+  */
+  virtual void setUserGiContext(OdGiContext* pUserGiContext) = 0;
+
+  /** \details
+    Marks for refresh the specified region of the GUI window of this Device object.
+     
+    \param screenRect [in]  Rectangular area.
+    
+    \remarks
+    If screenRect is not specified, the entire GUI window is marked for refresh.
+  */
+  virtual void invalidate() = 0;
+
+  virtual void invalidate(const OdGsDCRect &screenRect) = 0;
+
+  /** \details
+    Returns true if and only if the GUI window for this Device object is showing the correct image.
+
+    \remarks
+    This implies the follow:
+    * No part of GUI area is flagged for refresh.
+    * All rasterizations are complete
+    * The rendering pipeline has been flushed.
+  */
+  virtual bool isValid() const = 0;
+
+  /** \details
+    Updates the GUI window for this Device object.
+    
+    \param pUpdatedRect [out]  Pointer to the a rectangle to receive the region updated by this function.
+
+    \note
+    This function call is propagated to all OdGsView objects owned by this Device object,
+    thus displaying the correct image on the GUI window of this Device object.
+  */
+  virtual void update(OdGsDCRect* pUpdatedRect = 0) = 0;
+
+  /** \details
+    Notification function called whenever the size of the GUI window for this Device object has changed.
+    
+    \param outputRect [in]  New size of the output rectangle in device coordinates (pixels).
+
+    \note
+    This function should not be called if this Device object has a width and/or height of 0, .
+  */
+  virtual void onSize(const OdGsDCRect& outputRect) = 0;
+  virtual void onSize(const OdGsDCRectDouble& outputRect);
+
+  /** \details
+    Returns device surface output rectangle.
+
+    \param outputRect [out]  Obtains size of the output rectangle in device coordinates (pixels).
+  */
+  virtual void getSize(OdGsDCRect& outputRect) const = 0;
+  virtual void getSize(OdGsDCRectDouble& outputRect) const;
+
+  /** \details
+    
+    \remarks
+    Causes this Device object to realize its foreground pallette.
+  */
+    virtual void onRealizeForegroundPalette() = 0;
+
+  /** \details
+    Notification function typically called whenever the GUI window for this Device object loses focus.
+    
+    \remarks
+    Causes this Device object to realize its background pallette.
+  */
+    virtual void onRealizeBackgroundPalette() = 0;
+
+  /** \details
+    Notification function called whenever the OS screen resolution and/or color depth have changed.
+    
+    \param bitsPerPixel [in]  Color depth.
+    \param xPixels [in]  X pixels.
+    \param yPixels [in]  Y pixels.
+  
+    \remarks
+    This function is called after the operation.  
+  */
+  virtual void onDisplayChange(int bitsPerPixel, int xPixels, int yPixels) = 0;
+
+  /** \details
+    Creates a new OdGsView object, and associates it with this Device object.
+    
+    \param pViewInfo [in]  Pointer to the Client View Information for this Device object.
+    \param enableLayerVisibilityPerView [in]  Layer visibility per viewport is supported, if and only if true.
+    
+    \remarks
+    Returns a SmartPointer to the newly created object.
+
+    pViewInfo contains information returned by OdGiViewport::acadWindowId() and OdGiViewportDraw::viewportObjectId()
+  */
+  virtual OdGsViewPtr createView(
+    const OdGsClientViewInfo* pViewInfo = 0, 
+    bool enableLayerVisibilityPerView = false) = 0;
+
+  /** \details
+    Associates the specified Viewport object with this Device object.
+    
+    \param pView [in]  Pointer to the OdGsView object.
+  */
+  virtual void addView(OdGsView* pView) = 0;
+
+  /** \details
+    Creates a new OdGsModel object, and associates it with this Device object.
+    
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  virtual OdGsModelPtr createModel() = 0;
+
+  /** \details
+    Checks compatibility between specified OdGsModel and this Device object.
+
+    \param pModel [in]  Model object pointer to check compatibility.
+
+    \remarks
+    Use this method to check compatibility of exist Model object and newly created device
+    to be sure the exist Model object could be used with this Device object.
+
+    By default this always returns false. It is must be implemented in inherited classes
+    to enable Model object reuse support. If Device object use overriden Model object
+    it should return false if input Model object doesn't overriden.
+
+    Typical way to check compatibility is using of RTTI.
+
+    If your metafiles cache doesn't support per-device sharing override and return false.
+  */
+  virtual bool isModelCompatible(OdGsModel* pModel) const;
+
+  /** \details
+    Stores current device state into filer object.
+
+    \param pFiler [in]  Filer object.
+  */
+  virtual bool saveDeviceState(OdGsFiler *pFiler) const;
+  /** \details
+    Restores device state from filer object.
+
+    \param pFiler [in]  Filer object.
+  */
+  virtual bool loadDeviceState(OdGsFiler *pFiler);
+
+  /** \details
+    Inserts the specified Viewport object to the specified position in this Device object.
+
+    \param viewIndex [in]  View index.
+    \param pView [in]  Pointer to the OdGsView object.
+  */
+  virtual void insertView(int viewIndex, OdGsView* pView) = 0;
+
+  /** \details
+    Erases the specified View object.
+    \param pView [in]  Pointer to the OdGsView object.
+    \param viewIndex [in]  View index.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool eraseView(OdGsView* pView) = 0;
+  virtual bool eraseView(int viewIndex) = 0;
+
+  /** \details
+    Erases all views associated with this Device object.
+  */
+  virtual void eraseAllViews() = 0;
+
+  /** \details
+    Returns the number of views associated with this Device object.
+  */
+  virtual int numViews() const = 0;
+
+  /** \details
+    Returns the specified OdGsView object associated with this Device object.
+    \param viewIndex [in]  View index.
+  */
+  virtual OdGsView* viewAt(int viewIndex) = 0;
+
+  /** \details
+    Sets the Background Color of the GUI window of this Device object.
+    \param backgroundColor [in]  Background color.
+  */
+  virtual bool setBackgroundColor(ODCOLORREF backgroundColor) = 0;
+
+  /** \details
+    Returns the Background Color of the GUI window of this Device object.
+  */
+  virtual ODCOLORREF getBackgroundColor() = 0;
+
+  /** \details
+    Sets the logical pallete to be used by this Device object.
+    
+    \param logicalPalette [in]  Logical palette.
+    \param numColors [in]  Number of colors in palette.
+    
+    \remarks
+    The logical pallete is used with calls to OdGiSubEntityTraits::setColor().
+  */
+  virtual void setLogicalPalette(const ODCOLORREF* logicalPalette, int numColors) = 0;
+
+  /** \details
+    Returns the logical pallete used by this Device object.
+
+    \param numColors [out]  Number of colors in palette.
+  */
+  virtual const ODCOLORREF* getLogicalPalette(int &numColors) const = 0;
+
+  /** \details
+    Returns image of current device buffer.
+
+    \param pImage [out]  Pointer for image to return.
+    \param region [in]  Rectangle specifies region to return.
+
+    \remarks
+    Implementation can throw eNotImplementedYet exception if current vectorization module doesn't support snap shots.
+  */
+  virtual void getSnapShot(OdGiRasterImagePtr &pImage, const OdGsDCRect &region) = 0;
+};
+
+class OdGsModule;
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdGs events.
+    
+    \note
+    The default implementations of all methods in this class do nothing but return.
+
+    \sa
+    TD_Gs
+  
+    <group OdGs_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGsReactor : public OdRxObject
+{
+public:
+  /** \details
+    Notification function called whenever a OdGsView object has been created.
+    \param pView [in]  Pointer to the OdGsView object.
+
+    \remarks
+    This function is called after the operation.
+  */
+  virtual void viewWasCreated(OdGsView* pView);
+
+  /** \details
+    Notification function called whenever an OdGsView object is about to be destroyed.
+    \param pView [in]  Pointer to the OdGsView object.
+
+    \remarks
+    This function is called before the operation.
+  */
+  virtual void viewToBeDestroyed(OdGsView* pView);
+
+  /** \details
+    Notification function called whenever an OdGsModule object is about to be unloaded.
+    \param pModule [in]  Pointer to the OdGsModule object.
+
+    \remarks
+    This function is called after the operation.
+  */
+  virtual void gsToBeUnloaded(OdGsModule* pModule);
+};
+
+/** \details
+    This class provides management of OdGsDevice classes.
+    Library: TD_Gs 
+    <group OdGs_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGsModule : public OdRxModule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsModule);
+
+  /** \details
+    Creates a new OdGsDevice object, and associates it with this Module object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  virtual OdGsDevicePtr createDevice() = 0;
+
+  /** \details
+    Creates a new OdGsBaseVectorizeDevice object, and associates it with this Module object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  virtual OdGsDevicePtr createBitmapDevice();
+
+  /** \details
+    Adds the specified reactor to this object's reactor list.
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  virtual void addReactor(OdGsReactor* pReactor) = 0;
+
+  /** \details
+    Removes the specified reactor from this object's reactor list.
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  virtual void removeReactor(OdGsReactor* pReactor) = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGsModule object pointers. 
+*/
+typedef OdSmartPtr<OdGsModule> OdGsModulePtr;
+
+/** \details
+  Default Gs Marker value for highlight entire entity.
+*/
+const OdGsMarker kNullSubentIndex = 0;
+
+#include "TD_PackPop.h"
+
+#endif // __GS_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBMPDevice.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBMPDevice.h
new file mode 100755
index 0000000..cb91c73
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBMPDevice.h
@@ -0,0 +1,33 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __GSBMPDEVICE_H_INCLUDED_
+#define __GSBMPDEVICE_H_INCLUDED_
+
+
+
+#endif // __GSBMPDEVICE_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackground.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackground.h
new file mode 100755
index 0000000..c4e632e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackground.h
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGSBACKGROUND_H_INCLUDED_
+#define _ODGSBACKGROUND_H_INCLUDED_
+
+#include "RxObject.h"
+
+class OdGsBaseVectorizer;
+class OdGsPropertiesDirectRenderOutput;
+class OdGiBackgroundTraitsData;
+class OdGiDrawable;
+
+#include "TD_PackPush.h"
+
+/** \details
+    Library: TD_Gs
+    <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsNestedBackground
+{
+  public:
+    virtual void nestedBackgroundDisplay(OdGsBaseVectorizer& view,
+        const OdGiDrawable *pDrawable,
+        OdGiBackgroundTraitsData* pBackgroundTraits,
+        OdGsPropertiesDirectRenderOutput *pdro = NULL) = 0;
+};
+
+/** \details
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBackground : public OdRxObject
+                                       , public OdGsNestedBackground
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsBackground);
+
+  enum BackgroundType
+  {
+    kSolidBackground       = 0,
+    kGradientBackground    = 1,
+    kImageBackground       = 2,
+    kGroundPlaneBackground = 3,
+    kSkyBackground         = 4,
+    kIBLBackground         = 5
+  };
+
+  virtual BackgroundType type() const = 0;
+
+  virtual void display(OdGsBaseVectorizer& view,
+      const OdGiDrawable *pDrawable,
+      OdGiBackgroundTraitsData* pBackgroundTraits,
+      OdGsPropertiesDirectRenderOutput *pdro = NULL) = 0;
+
+  virtual void nestedBackgroundDisplay(OdGsBaseVectorizer& view,
+    const OdGiDrawable *pDrawable,
+    OdGiBackgroundTraitsData* pBackgroundTraits,
+    OdGsPropertiesDirectRenderOutput *pdro = NULL)
+  {
+    display(view, pDrawable, pBackgroundTraits, pdro);
+  }
+
+  virtual void setNestedBackground(OdGsNestedBackground * /*pNestedBackground*/) { }
+  virtual OdGsNestedBackground *getNestedBackground() const { return NULL; }
+
+  static OdSmartPtr<OdGsBackground> createObject(BackgroundType type);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsBackground object pointers.
+*/
+typedef OdSmartPtr<OdGsBackground> OdGsBackgroundPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODGSBACKGROUND_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackgroundProperties.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackgroundProperties.h
new file mode 100755
index 0000000..9c41055
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBackgroundProperties.h
@@ -0,0 +1,93 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_BACKGROUND_PROPERTIES__
+#define __OD_GS_BACKGROUND_PROPERTIES__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsProperties.h"
+#include "Gi/GiEnvironmentTraitsData.h"
+#include "Gs/GsBackground.h"
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBackgroundProperties : public OdGsProperties
+                                                 , protected OdGsNestedBackground
+{
+  OdGiBackgroundTraitsData* m_pBackgroundTraits;
+  OdGsBackgroundPtr m_pBackgroundPainter;
+  OdSmartPtr<OdGsBackgroundProperties> m_pSecondaryBackground;
+
+protected:
+  virtual void nestedBackgroundDisplay(OdGsBaseVectorizer& view,
+    const OdGiDrawable *pDrawable,
+    OdGiBackgroundTraitsData* pBackgroundTraits,
+    OdGsPropertiesDirectRenderOutput *pdro = NULL);
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsBackgroundProperties);
+
+  OdGsBackgroundProperties();
+  ~OdGsBackgroundProperties();
+
+  OdGiSolidBackgroundTraitsData* solidBackgroundTraitsData() const { return (OdGiSolidBackgroundTraitsData*)m_pBackgroundTraits; }
+  OdGiGradientBackgroundTraitsData* gradientBackgroundTraitsData() const { return (OdGiGradientBackgroundTraitsData*)m_pBackgroundTraits; }
+  OdGiImageBackgroundTraitsData* imageBackgroundTraitsData() const { return (OdGiImageBackgroundTraitsData*)m_pBackgroundTraits; }
+  OdGiGroundPlaneBackgroundTraitsData* groundPlaneBackgroundTraitsData() const { return (OdGiGroundPlaneBackgroundTraitsData*)m_pBackgroundTraits; }
+  OdGiSkyBackgroundTraitsData* skyBackgroundTraitsData() const { return (OdGiSkyBackgroundTraitsData*)m_pBackgroundTraits; }
+  OdGiIBLBackgroundTraitsData* iblBackgroundTraitsData() const { return (OdGiIBLBackgroundTraitsData*)m_pBackgroundTraits; }
+  OdGiBackgroundTraitsData* backgroundTraitsData() const { return m_pBackgroundTraits; }
+
+  OdGiDrawable::DrawableType backgroundType() const { return (m_pBackgroundTraits) ? m_pBackgroundTraits->type() : OdGiDrawable::kGeometry; }
+  const OdGsBackgroundProperties *secondaryBackground() const { return m_pSecondaryBackground.get(); }
+  OdGsBackgroundProperties *secondaryBackground() { return m_pSecondaryBackground.get(); }
+
+  bool isTraitsModified();
+
+  void clearTraits();
+
+  // OdGsProperties virtual overrides
+  
+  virtual PropertiesType propertiesType() const
+  {
+    return kBackground;
+  }
+
+  virtual OdSmartPtr<OdGsProperties> propertiesForType(PropertiesType type) const;
+
+  virtual void update(const OdGiDrawable* pUnderlyingDrawable,
+      OdGsViewImpl* view, OdUInt32 incFlags = kAll);
+
+  virtual void display(OdGsBaseVectorizer& view,
+      OdGsPropertiesDirectRenderOutput *pdro = NULL, OdUInt32 incFlags = kAll);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsBackgroundProperties object pointers.
+*/
+typedef OdSmartPtr<OdGsBackgroundProperties> OdGsBackgroundPropertiesPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_BACKGROUND_PROPERTIES__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseInclude.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseInclude.h
new file mode 100755
index 0000000..b770908
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseInclude.h
@@ -0,0 +1,461 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSBASEINCLUDE_INC
+#define ODGSBASEINCLUDE_INC
+
+// Previously GsBaseVectorizer.h defines module/device/view classes
+#include "Gs/GsBaseModule.h"
+#include "Gs/GsBaseVectorizeDevice.h"
+#include "Gs/GsBaseVectorizer.h"
+#include "Gs/GsBaseVectorizeView.h"
+#include "SaveState.h"
+#include "RxDictionary.h"
+#include "RxObjectImpl.h"
+#include "RxVariantValue.h"
+#include "ThreadsCounter.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Base template to join vectorize view and vectorizer objects with default behavior.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+template <class BaseVectorizerObject>
+class OdGsBaseVectorizeViewJoin : public OdGsBaseVectorizeView, public BaseVectorizerObject
+{
+  public:
+    OdGsBaseVectorizeViewJoin()
+    {
+      OdGsBaseVectorizer::setUp(*this);
+    }
+
+    IMPL_VECTORIZER_DEFAULT()
+
+    virtual void clearLinetypeCache() { OdGiBaseVectorizerImpl::clearLinetypeCache(); }
+
+#if !defined(_MSC_VER) || (_MSC_VER < 1600)
+    ODRX_USING_HEAP_OPERATORS(BaseVectorizerObject);
+#else
+    // Usage of template class as a base for new/delete operators in 'using' directive causes IntelliSense crash in VS2010
+    ODRX_USING_HEAP_OPERATORS(OdGsBaseVectorizeView);
+#endif
+
+#if 0
+
+    // Resolve ambiguous access
+    bool isPerspective() const
+    {
+      return OdGsViewImpl::isPerspective();
+      //return OdGsBaseVectorizer::view().isPerspective();
+    }
+    OdGeMatrix3d objectToDeviceMatrix() const
+    {
+      return OdGiBaseVectorizerImpl::objectToDeviceMatrix();
+    }
+    void getNumPixelsInUnitSquare(const OdGePoint3d& givenWorldpt,
+      OdGePoint2d& pixelArea, bool includePerspective = true) const
+    {
+      OdGsViewImpl::getNumPixelsInUnitSquare(givenWorldpt, pixelArea, includePerspective);
+      //OdGsBaseVectorizer::view().getNumPixelsInUnitSquare(givenWorldpt, pixelArea, includePerspective);
+    }
+
+#else
+    // Resolve ambiguous access. Typically we wants to call it from vectorizer, elsewhere it is not differs from worldToDevice.
+    OdGeMatrix3d objectToDeviceMatrix() const
+    {
+      return OdGiBaseVectorizerImpl::objectToDeviceMatrix();
+    }
+#endif
+  protected:
+    void updateGeometryByDevice() { }
+};
+
+/** \details
+    Enables multithreading behavior for joined view and vectorizer objects.
+        
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+template <class BaseVectorizerObject>
+
+class OdGsBaseVectorizeViewJoinMT : public OdGsBaseVectorizeViewJoin<BaseVectorizerObject>
+{
+  protected:
+    OdArray<OdGsViewPtr> m_vectorizers;
+    OdUInt32 m_vectUsage;
+  public:
+    OdGsBaseVectorizeViewJoinMT()
+      : m_vectUsage(0)
+    {
+    }
+
+    virtual OdUInt32 numVectorizers() const
+    {
+      if (OdGsBaseVectorizeView::baseDevice()->m_vectPerfData.enableParallelVectorization())
+      {
+        OdGsDevice *pDevice = OdGsBaseVectorizeView::device();
+        if (pDevice && !pDevice->properties().isNull() &&
+            pDevice->properties()->has(OD_T("MaxRegenThreads")))
+          return (OdUInt32)OdRxVariantValue(pDevice->properties()->getAt(OD_T("MaxRegenThreads")))->getUInt16();
+        return 4;
+      }
+      return 1;
+    }
+    virtual OdGsBaseVectorizer* getVectorizer(bool /*bDisplay*/)
+    {
+      m_vectUsage++;
+      if (m_vectUsage == 1)
+        return this;
+      if (m_vectorizers.size() < m_vectUsage - 1)
+      {
+        OdGsViewPtr pView;
+        {
+          OdSaveStateFlag(OdUInt32, OdGsClientViewInfo::kSetViewportId, _ss1, this->OdGsBaseVectorizeView::m_viewInfo.viewportFlags, true);
+          OdSaveState<long> _ss2(this->OdGsBaseVectorizeView::m_viewInfo.viewportId, (long)OdGsBaseVectorizeView::viewportId());
+          pView = OdGsBaseVectorizeView::cloneView(false);
+        }
+        OdGsBaseVectorizeViewJoinMT *pThis = static_cast<OdGsBaseVectorizeViewJoinMT*>(pView.get());
+        pThis->setUp(OdGsBaseVectorizer::view());
+        m_vectorizers.push_back(pView);
+      }
+      OdGsBaseVectorizer *pVect = static_cast<OdGsBaseVectorizeViewJoinMT*>(m_vectorizers[m_vectUsage - 2].get());
+      // viewParams?
+      return pVect;
+    }
+    virtual void releaseVectorizer(OdGsBaseVectorizer* /*pVect*/)
+    {
+      m_vectUsage--;
+    }
+
+    bool isMTRegen() const
+    {
+      return odThreadsCounter();
+    }
+    //bool isMTView() const
+    //{
+    //  return (&view() != this);
+    //}
+
+    // Note: do not delete this code branch, it is useful for find places where view is called unsafe for MT.
+#if 0
+  private:
+
+#define MT_VECT_VIEWMTH(mthSem, mthCall) \
+    mthSem \
+    { \
+      if (&view() != this) \
+        view().mthCall; \
+      OdGsViewImpl::mthCall; \
+    }
+#define MT_VECT_VIEWMTH_RET(mthSem, mthCall) \
+    mthSem \
+    { \
+      if (&view() != this) \
+        return view().mthCall; \
+      return OdGsViewImpl::mthCall; \
+    }
+
+    MT_VECT_VIEWMTH_RET(RenderMode mode() const, mode())
+    //MT_VECT_VIEWMTH(void setMode(RenderMode mode), setMode(mode))
+    //MT_VECT_VIEWMTH(void freezeLayer(OdDbStub* layerID), freezeLayer(layerID))
+    //MT_VECT_VIEWMTH(void thawLayer(OdDbStub* layerID), thawLayer(layerID))
+    //MT_VECT_VIEWMTH(void clearFrozenLayers(), clearFrozenLayers());
+    //MT_VECT_VIEWMTH(void setViewportBorderProperties(ODCOLORREF color, int width), setViewportBorderProperties(color, width))
+    MT_VECT_VIEWMTH(void getViewportBorderProperties(ODCOLORREF& color, int& width) const, getViewportBorderProperties(color, width))
+    //MT_VECT_VIEWMTH(void setViewportBorderVisibility(bool visible), setViewportBorderVisibility(visible))
+    MT_VECT_VIEWMTH_RET(bool isViewportBorderVisible() const, isViewportBorderVisible())
+    //MT_VECT_VIEWMTH(void setEnableFrontClip(bool enable), setEnableFrontClip(enable))
+    MT_VECT_VIEWMTH_RET(bool isFrontClipped() const, isFrontClipped())
+    //MT_VECT_VIEWMTH(void setFrontClip(double distance), setFrontClip(distance))
+    MT_VECT_VIEWMTH_RET(double frontClip() const, frontClip())
+    //MT_VECT_VIEWMTH(void setEnableBackClip(bool enable), setEnableBackClip(enable))
+    MT_VECT_VIEWMTH_RET(bool isBackClipped() const, isBackClipped())
+    //MT_VECT_VIEWMTH(void setBackClip(double distance), setBackClip(distance))
+    MT_VECT_VIEWMTH_RET(double backClip() const, backClip())
+    MT_VECT_VIEWMTH_RET(OdGePoint3d position() const, position())
+    MT_VECT_VIEWMTH_RET(OdGePoint3d target() const, target())
+    MT_VECT_VIEWMTH_RET(OdGeVector3d upVector() const, upVector())
+    MT_VECT_VIEWMTH_RET(double fieldWidth() const, fieldWidth())
+    MT_VECT_VIEWMTH_RET(double fieldHeight() const, fieldHeight())
+    MT_VECT_VIEWMTH_RET(double windowAspect() const, windowAspect())
+    MT_VECT_VIEWMTH_RET(double lensLength() const, lensLength())
+    //MT_VECT_VIEWMTH(void setLensLength(double lensLength), setLensLength(lensLength))
+    MT_VECT_VIEWMTH_RET(bool isPerspective() const, isPerspective())
+    //MT_VECT_VIEWMTH(void beginInteractivity(double frameRateInHz), beginInteractivity(frameRateInHz))
+    //MT_VECT_VIEWMTH(void endInteractivity(), endInteractivity())
+    //MT_VECT_VIEWMTH(void flush(), flush())
+    //MT_VECT_VIEWMTH(void hide(), hide())
+    //MT_VECT_VIEWMTH(void show(), show())
+    MT_VECT_VIEWMTH_RET(bool isVisible(), isVisible())
+    //MT_VECT_VIEWMTH_RET(OdGsViewPtr cloneView(bool cloneViewParameters = true, bool cloneGeometry = false),
+    //                    cloneView(cloneViewParameters, cloneGeometry))
+    //MT_VECT_VIEWMTH_RET(bool exceededBounds(), exceededBounds())
+    //MT_VECT_VIEWMTH(void enableStereo(bool enabled), enableStereo(enabled))
+    MT_VECT_VIEWMTH_RET(bool isStereoEnabled() const, isStereoEnabled())
+    //MT_VECT_VIEWMTH(void setStereoParameters(double magnitude, double parallax), setStereoParameters(magnitude, parallax))
+    MT_VECT_VIEWMTH(void getStereoParameters(double& magnitude, double& parallax) const, getStereoParameters(magnitude, parallax))
+    //MT_VECT_VIEWMTH(void initLights(OdRxIterator* pLightsIterator), initLights(pLightsIterator))
+    //MT_VECT_VIEWMTH(void setViewport(const OdGePoint2d& lowerLeft, const OdGePoint2d& upperRight), setViewport(lowerLeft, upperRight))
+    //MT_VECT_VIEWMTH(void setViewport(const OdGsDCRect& screenRect), setViewport(screenRect))
+    //MT_VECT_VIEWMTH(void setViewport(const OdGsDCRectDouble& screenRec), setViewport(screenRec))
+    MT_VECT_VIEWMTH(void getViewport(OdGePoint2d& lowerLeft, OdGePoint2d& upperRight) const, getViewport(lowerLeft, upperRight))
+    MT_VECT_VIEWMTH(void getViewport(OdGsDCRect& screenRect) const, getViewport(screenRect))
+    MT_VECT_VIEWMTH(void getViewport(OdGsDCRectDouble& screenRec) const, getViewport(screenRec))
+    MT_VECT_VIEWMTH_RET(OdGeMatrix3d screenMatrix() const, screenMatrix())
+    MT_VECT_VIEWMTH_RET(OdGeMatrix3d worldToDeviceMatrix() const, worldToDeviceMatrix())
+    ////MT_VECT_VIEWMTH_RET(OdGeMatrix3d objectToDeviceMatrix() const, objectToDeviceMatrix())
+    MT_VECT_VIEWMTH_RET(OdGeMatrix3d viewingMatrix() const, viewingMatrix())
+    MT_VECT_VIEWMTH_RET(OdGeMatrix3d projectionMatrix() const, projectionMatrix())
+    //MT_VECT_VIEWMTH(void viewParameters(OdGsView* pView) const, viewParameters(pView))
+    MT_VECT_VIEWMTH_RET(double lineweightToDcScale() const, lineweightToDcScale())
+    //MT_VECT_VIEWMTH(void setLineweightToDcScale(double scale), setLineweightToDcScale(scale))
+    //MT_VECT_VIEWMTH(void setLineweightEnum(int numLineweights, const OdUInt8* lineweights), setLineweightEnum(numLineweights, lineweights))
+    //MT_VECT_VIEWMTH(void setLinetypeScaleMultiplier(double linetypeScaleMultiplier), setLinetypeScaleMultiplier(linetypeScaleMultiplier))
+    //MT_VECT_VIEWMTH(void setAlternateLinetypeScaleMultiplier(double linetypeAlternateScaleMultiplier),
+    //                setAlternateLinetypeScaleMultiplier(linetypeAlternateScaleMultiplier))
+    MT_VECT_VIEWMTH_RET(double linetypeScaleMultiplier() const, linetypeScaleMultiplier())
+    //MT_VECT_VIEWMTH(void dolly(const OdGeVector3d& dollyVector), dolly(dollyVector))
+    //MT_VECT_VIEWMTH(void dolly(double xDolly, double yDolly, double zDolly), dolly(xDolly, yDolly, zDolly))
+    //MT_VECT_VIEWMTH(void roll(double rollAngle), roll(rollAngle))
+    //MT_VECT_VIEWMTH(void orbit(double xOrbit, double yOrbit), orbit(xOrbit, yOrbit))
+    //MT_VECT_VIEWMTH(void zoom(double zoomFactor), zoom(zoomFactor))
+    //MT_VECT_VIEWMTH(void pan(double xPan, double yPan), pan(xPan, yPan))
+    //MT_VECT_VIEWMTH(void setView(const OdGePoint3d & position, const OdGePoint3d& target, const OdGeVector3d& upVector,
+    //                             double fieldWidth, double fieldHeight, Projection projection = kParallel),
+    //                setView(position, target, upVector, fieldWidth, fieldHeight, projection))
+    MT_VECT_VIEWMTH(void viewportClipRegion(OdIntArray& counts, OdGePoint2dArray& vertices) const,
+                     viewportClipRegion(counts, vertices))
+    MT_VECT_VIEWMTH(void viewportClipRegion(OdIntArray& counts, OdGsDCPointArray& dcPts) const,
+                     viewportClipRegion(counts, dcPts))
+    //MT_VECT_VIEWMTH(void setViewportClipRegion(int numContours, const int* numVertices, const OdGePoint2d* vertices),
+    //                setViewportClipRegion(numContours, numVertices, vertices))
+    //MT_VECT_VIEWMTH(void setViewportClipRegion(int numContours, int const* numVertices, OdGsDCPoint const* vertices),
+    //                setViewportClipRegion(numContours, numVertices, vertices))
+    MT_VECT_VIEWMTH_RET(bool isDependentViewportView() const, isDependentViewportView())
+    MT_VECT_VIEWMTH_RET(bool isDependentGeometryView() const, isDependentGeometryView())
+    MT_VECT_VIEWMTH_RET(bool isHelperView() const, isHelperView())
+    ////MT_VECT_VIEWMTH_RET(const OdGsBaseModule *getGsModulePtr() const, getGsModulePtr())
+    MT_VECT_VIEWMTH_RET(const OdGiContextualColors *contextualColors() const, contextualColors())
+    //MT_VECT_VIEWMTH(void setContextualColors(OdGiContextualColors *pColors), setContextualColors())
+    MT_VECT_VIEWMTH_RET(bool pointInViewport(const OdGePoint2d& screenPoint) const, pointInViewport(screenPoint))
+    //MT_VECT_VIEWMTH(void setClearColor(ClearColor color), setClearColor(color))
+    MT_VECT_VIEWMTH(void invalidate(), invalidate())
+    MT_VECT_VIEWMTH(void invalidate(const OdGsDCRect &rect), invalidate(rect))
+    MT_VECT_VIEWMTH(void invalidateCachedViewportGeometry(), invalidateCachedViewportGeometry())
+    //MT_VECT_VIEWMTH(void select(const OdGsDCPoint* points, int numPoints, OdGsSelectionReactor* pReactor, OdGsView::SelectionMode mode = OdGsView::kCrossing),
+    //                select(points, numPoints, pReactor, mode))
+    //MT_VECT_VIEWMTH_RET(bool add(OdGiDrawable* sceneGraph, OdGsModel* model), add(sceneGraph, model))
+    //MT_VECT_VIEWMTH_RET(bool erase(OdGiDrawable* sceneGraph), erase(sceneGraph))
+    //MT_VECT_VIEWMTH(void eraseAll(), eraseAll())
+    MT_VECT_VIEWMTH_RET(bool isValid() const, isValid())
+    MT_VECT_VIEWMTH(void getNumPixelsInUnitSquare(const OdGePoint3d& givenWorldpt, OdGePoint2d& pixelArea, bool includePerspective = true) const,
+                    getNumPixelsInUnitSquare(givenWorldpt, pixelArea, includePerspective));
+    //MT_VECT_VIEWMTH(void setBackground(OdDbStub *backgroundId), setBackground(backgroundId))
+    MT_VECT_VIEWMTH_RET(OdDbStub *background() const, background())
+    //MT_VECT_VIEWMTH(void setVisualStyle(OdDbStub *visualStyleId), setVisualStyle(visualStyleId))
+    MT_VECT_VIEWMTH_RET(OdDbStub *visualStyle() const, visualStyle())
+    //MT_VECT_VIEWMTH(void setVisualStyle(const OdGiVisualStyle &visualStyle), setVisualStyle(visualStyle))
+    MT_VECT_VIEWMTH_RET(bool visualStyle(OdGiVisualStyle &visualStyle) const, visualStyle(visualStyle))
+    MT_VECT_VIEWMTH_RET(OdUInt32 viewportId() const, viewportId())
+    MT_VECT_VIEWMTH_RET(OdDbStub* getViewportObjectId() const, getViewportObjectId())
+    //MT_VECT_VIEWMTH_RET(bool viewExtents(OdGeBoundBlock3d& extents) const, viewExtents(extents))
+    //MT_VECT_VIEWMTH(void select(const OdGePoint2d* aPtDc, int numPoints, OdGsSelectionReactor* pReactor, OdGsView::SelectionMode mode = OdGsView::kCrossing),
+    //                select(aPtDc, numPoints, pReactor, mode))
+    MT_VECT_VIEWMTH_RET(bool isSnapping() const, isSnapping())
+    //MT_VECT_VIEWMTH(void setSnapping(bool val), setSnapping(val))
+    MT_VECT_VIEWMTH_RET(bool isRegenOnDrawForbidden() const, isRegenOnDrawForbidden())
+    //MT_VECT_VIEWMTH(void setRegenOnDrawForbidden(bool val), setRegenOnDrawForbidden())
+    //MT_VECT_VIEWMTH(void clearLinetypeCache(), clearLinetypeCache())
+    MT_VECT_VIEWMTH_RET(double linetypeAlternateScaleMultiplier() const, linetypeAlternateScaleMultiplier())
+    MT_VECT_VIEWMTH_RET(OdUInt32 frozenLayers() const, frozenLayers())
+    MT_VECT_VIEWMTH(void frozenLayers(OdDbStubPtrArray& frozenLayers) const, frozenLayers(frozenLayers))
+    MT_VECT_VIEWMTH_RET(bool isLayerVisible(OdDbStub* layerId) const, isLayerVisible(layerId))
+    MT_VECT_VIEWMTH_RET(int lineweightToPixels(OdDb::LineWeight lineweight) const, lineweightToPixels(lineweight))
+    MT_VECT_VIEWMTH_RET(double lineweightToPixels(double lineweight) const, lineweightToPixels(lineweight))
+    MT_VECT_VIEWMTH(void screenRect(OdGsDCPoint &lowerLeft, OdGsDCPoint &upperRight) const, screenRect(lowerLeft, upperRight))
+    MT_VECT_VIEWMTH(void screenRect(OdGePoint2d &lowerLeft, OdGePoint2d &upperRight) const, screenRect(lowerLeft, upperRight))
+    MT_VECT_VIEWMTH(void screenRectNorm(OdGsDCRect& normalizedRect) const, screenRectNorm(normalizedRect))
+    MT_VECT_VIEWMTH(void viewportDcCorners(OdGePoint2d& lower_left, OdGePoint2d& upper_right) const, viewportDcCorners(lower_left, upper_right))
+    MT_VECT_VIEWMTH_RET(bool doPerspectivePt(OdGePoint3d& point) const, doPerspectivePt(point))
+    MT_VECT_VIEWMTH_RET(bool doInversePerspectivePt(OdGePoint3d& point) const, doInversePerspectivePt(point))
+    MT_VECT_VIEWMTH_RET(OdGeMatrix3d eyeToScreenMatrix() const, eyeToScreenMatrix())
+    MT_VECT_VIEWMTH_RET(const OdGeMatrix3d& eyeToWorldMatrix() const, eyeToWorldMatrix())
+    MT_VECT_VIEWMTH_RET(const OdGeMatrix3d& worldToEyeMatrix() const, worldToEyeMatrix())
+    MT_VECT_VIEWMTH_RET(ClearColor clearColor() const, clearColor())
+    MT_VECT_VIEWMTH(void invalidate(const OdGeExtents3d& worldExt, OdDb::LineWeight extendByLineweight = OdDb::kLnWt000),
+                    invalidate(worldExt, extendByLineweight))
+    MT_VECT_VIEWMTH(void invalidateRegion(const OdGiPathNode& path), invalidateRegion(path))
+    MT_VECT_VIEWMTH_RET(OdGsDCRectArray invalidRects() const, invalidRects())
+    MT_VECT_VIEWMTH_RET(bool isViewportOnScreen() const, isViewportOnScreen())
+    MT_VECT_VIEWMTH_RET(bool isCompletelyVisible() const, isCompletelyVisible())
+    //MT_VECT_VIEWMTH(void setInversion(bool invertedX, bool invertedY), setInversion(invertexX, invertexY))
+    MT_VECT_VIEWMTH_RET(OdGiRegenType getRegenType() const, getRegenType())
+    MT_VECT_VIEWMTH_RET(double focalLength() const, focalLength())
+    MT_VECT_VIEWMTH_RET(const OdGeVector3d& eyeVector() const, eyeVector())
+    MT_VECT_VIEWMTH_RET(const OdGeVector3d& xVector() const, xVector())
+    MT_VECT_VIEWMTH_RET(double getLinetypeScaleMultiplier() const, getLinetypeScaleMultiplier())
+    MT_VECT_VIEWMTH_RET(double getLinetypeGenerationCriteria() const, getLinetypeGenerationCriteria())
+    MT_VECT_VIEWMTH_RET(double getDeviation(const OdGiDeviationType deviationType, const OdGePoint3d& pointOnCurve, bool bRecalculate = false) const,
+                        getDeviation(deviationType, pointOnCurve, bRecalculate))
+    //MT_VECT_VIEWMTH(void initDeviation(), initDeviation())
+    MT_VECT_VIEWMTH_RET(int cachedDrawables() const, cachedDrawables())
+#ifdef ODGS_LOCAL_IDS
+    MT_VECT_VIEWMTH_RET(OdUInt32 localViewportId(const OdGsBaseModel *pModel) const, localViewportId(pModel))
+    MT_VECT_VIEWMTH_RET(OdGsViewLocalId &getViewLocalId(), getViewLocalId())
+#endif
+    //MT_VECT_VIEWMTH_RET(bool sceneDept(double& zNear, double& zFar) const, sceneDept(zNear, zFar))
+    //MT_VECT_VIEWMTH_RET(bool usesDept(double* pMinDeptSupported = 0, double* pMaxDeptSupported = 0) const, usesDept(pMinDeptSupported, pMaxDepSupported))
+    MT_VECT_VIEWMTH_RET(bool isNonRectClipped() const, isNonRectClipped())
+    MT_VECT_VIEWMTH_RET(bool hasLweights() const, hasLweights())
+    MT_VECT_VIEWMTH_RET(const OdGePoint2d& dcScreenMin() const, dcScreenMin())
+    MT_VECT_VIEWMTH_RET(const OdGePoint2d& dcScreenMax() const, dcScreenMax())
+    MT_VECT_VIEWMTH_RET(const OdGePoint2d& dcLowerLeft() const, dcLowerLeft())
+    MT_VECT_VIEWMTH_RET(const OdGePoint2d& dcUpperRight() const, dcUpperRight())
+    MT_VECT_VIEWMTH_RET(OdGeMatrix3d perspectiveMatrix() const, perspectiveMatrix())
+    //MT_VECT_VIEWMTH(void invalidateCachedViewportGeometry(OdUInt32 mask), invalidateCachedViewportGeometry(mask))
+    MT_VECT_VIEWMTH_RET(double calcDeviation(const OdGiDeviationType type, const OdGePoint3d& pt) const, calcDeviation(type, pt))
+    MT_VECT_VIEWMTH_RET(OdGsPropertiesPtr getViewportPropertiesRoot() const, getViewportPropertiesRoot())
+    MT_VECT_VIEWMTH_RET(bool updateViewportProperties(OdUInt32 incFlags), updateViewportProperties(incFlags))
+    MT_VECT_VIEWMTH_RET(OdGsPropertiesPtr getViewportPropertiesForType(OdGsProperties::PropertiesType type) const, getViewportPropertiesForType(type))
+    MT_VECT_VIEWMTH_RET(const OdGeMatrix3d& rotationMatrix() const, rotationMatrix())
+    MT_VECT_VIEWMTH_RET(short viewportRotation() const, viewportRotation())
+    MT_VECT_VIEWMTH_RET(bool isRotated() const, isRotated())
+    MT_VECT_VIEWMTH_RET(double unrotatedFieldHeight() const, unrotatedFieldHeight())
+    MT_VECT_VIEWMTH_RET(double unrotatedFieldWidth() const, unrotatedFieldWidth())
+    //MT_VECT_VIEWMTH(void initCullingVolume(), initCullingVolume())
+    //MT_VECT_VIEWMTH(void setCullingVolume(OdGsCullingVolumePtr newVol), setCullingVolume(newVol))
+    MT_VECT_VIEWMTH_RET(OdGsCullingVolumePtr cullingVolume() const, cullingVolume())
+    MT_VECT_VIEWMTH_RET(bool isCullingVolumeInitialized() const, isCullingVolumeInitialized())
+    MT_VECT_VIEWMTH_RET(bool cullingVolumeIntersectWithOpt(const OdGsCullingPrimitive &prim) const, cullingVolumeIntersectWithOpt(prim))
+    MT_VECT_VIEWMTH_RET(OdGsCullingVolume::IntersectionStatus cullingVolumeIntersectWith(const OdGsCullingPrimitive &prim) const,
+                        cullingVolumeIntersectWith(prim))
+    MT_VECT_VIEWMTH(void cullingVolumeTransformBy(const OdGeMatrix3d &xfm), cullingVolumeTransformBy(xfm))
+
+#undef MT_VECT_VIEWMTH_RET
+#undef MT_VECT_VIEWMTH
+
+#endif
+};
+
+/** \details
+    Joins OdGsBaseVectorizeView and OdGsBaseVectorizer classes with default behavior.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class OdGsBaseVectorizeViewDef : public OdGsBaseVectorizeViewJoin<OdGsBaseVectorizer>
+{
+  public:
+    OdGsBaseVectorizeViewDef() { }
+};
+
+/** \details
+    Joins OdGsBaseVectorizeView and OdGsBaseVectorizer classes with multithread behavior.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class OdGsBaseVectorizeViewMT : public OdGsBaseVectorizeViewJoinMT<OdGsBaseVectorizer>
+{
+  public:
+    OdGsBaseVectorizeViewMT() { }
+
+    bool isMTView() const
+    {
+      return (&view() != this);
+    }
+};
+
+/** \details
+    Helper class provide base synchronization routines for device resources access.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class OdGsBaseDeviceMTHelpers
+{
+  public:
+    enum SyncType
+    {
+      kSyncDeviceAccess = 0,
+      kSyncDeviceResource,
+      kSyncRasterCache,
+      kSyncTextureCache,
+
+      kSyncCount
+    };
+  protected:
+    OdMutexPtr m_locker[kSyncCount];
+    bool m_bEnabled;
+  public:
+    OdGsBaseDeviceMTHelpers() : m_bEnabled(false) { }
+    void setEnabled(bool bEnable) { m_bEnabled = bEnable; }
+    bool isEnabled() const { return m_bEnabled; }
+    void lock(SyncType nSync)
+    {
+      //if (odThreadsCounter())
+      if (m_bEnabled)
+        m_locker[nSync].get()->lock();
+    }
+    void unlock(SyncType nSync)
+    {
+      //if (odThreadsCounter())
+      if (m_bEnabled)
+        m_locker[nSync].get()->unlock();
+    }
+};
+
+/** \details
+    Provides AutoLock functionality for device resources access.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class OdGsBaseDeviceMTSyncHelper
+{
+  OdGsBaseDeviceMTHelpers &m_syncPoint;
+  OdGsBaseDeviceMTHelpers::SyncType m_syncType;
+  public:
+    OdGsBaseDeviceMTSyncHelper(OdGsBaseDeviceMTHelpers &syncPoint, OdGsBaseDeviceMTHelpers::SyncType syncType)
+      : m_syncPoint(syncPoint), m_syncType(syncType)
+    {
+      m_syncPoint.lock(m_syncType);
+    }
+    ~OdGsBaseDeviceMTSyncHelper()
+    {
+      m_syncPoint.unlock(m_syncType);
+    }
+};
+
+#include "TD_PackPop.h"
+
+#endif // ODGSBASEINCLUDE_INC
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseMaterialView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseMaterialView.h
new file mode 100755
index 0000000..d20889a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseMaterialView.h
@@ -0,0 +1,379 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_BASE_MATERIAL_VIEW__
+#define __OD_GS_BASE_MATERIAL_VIEW__
+
+#include "Gs/GsBaseInclude.h"
+#include "Gs/GsExtAccum.h"
+#include "Gi/GiMapperItem.h"
+#include "Gi/GiMaterialItem.h"
+
+#include "TD_PackPush.h"
+
+class OdGsMaterialNode;
+/** <group !!RECORDS_TD_APIRef>
+*/
+struct OdGsMaterialTextureDataFiler
+{
+  virtual bool saveClientMaterialTextureData(const OdGiMaterialTextureData * /*pTextureData*/, OdGsFiler * /*pFiler*/)
+  {
+    return false;
+  }
+  virtual OdGiMaterialTextureDataPtr loadClientMaterialTextureData(OdGsFiler * /*pFiler*/)
+  {
+    return OdGiMaterialTextureDataPtr();
+  }
+};
+
+/** \details
+    This class provides material support for OdGsBaseVectorizeView.
+
+    \remarks
+    OdGsBaseMaterialView works only with diffuse material/mapping channel and not applicable for
+    complete rendering devices.
+    
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseMaterialVectorizer : public OdGsBaseVectorizer, public OdGsMaterialTextureDataFiler
+{
+  public:
+    enum MaterialViewFlags
+    {
+      kProcessMappers               = 1,        // Process material mappers
+      kProcessMaterials             = (1 << 1), // Process materials
+
+      kProcessMappersAndMaterials   = 3,        // Process both material mappers and materials
+
+      kMappersForRender             = (1 << 2), // OdGiMapperRenderItem instead of OdGiMapperItem
+      kMaterialsForRender           = (1 << 3), // OdGiMaterialRenderItem instead of OdGiMaterialItem
+
+      kMappersAndMaterialsForRender = 12,       // kMappersForRender | kMaterialsForRender
+
+      kProcessForRender             = 15,       // kProcessMappersAndMaterials | kMappersAndMaterialsForRender
+
+      // #5127 fix. Delay cache implementation.
+      kEnableDelayCache             = (1 << 4)  // Enable cache, which drop extents data after drawable extents computation
+    };
+
+    // Cache structures
+    enum DelayCacheEntryType
+    {
+      kInternal = 0,
+      kUser
+    };
+    struct DelayCacheEntry
+    {
+      DelayCacheEntry() : m_pNext(NULL) { }
+      virtual ~DelayCacheEntry() { }
+
+      DelayCacheEntry *m_pNext;
+
+      // Don't return kInternal here if you want get callback
+      virtual DelayCacheEntryType internalType() const { return kUser; }
+
+      DelayCacheEntry *nextEntry() { return m_pNext; }
+      void setNextEntry(DelayCacheEntry *pNext) { m_pNext = pNext; }
+
+      virtual void play(OdGsBaseMaterialVectorizer &mView) const
+      {
+        mView.playDelayCacheEntry(this);
+      }
+    };
+    friend class OdDefDelayCacheEntryMap;
+    friend class OdManageMViewPerDrawableData;
+  private:
+    bool                m_bMaterialCommited;    // Material already emitted by GsModel
+    struct ExtentsContainer
+    {
+      const OdGiDrawable *m_pCurrentDrawable;
+      OdGeExtents3d       m_Extents;
+      bool                m_bExtentsValid;
+      bool                m_bAwaiting;
+    };
+    struct DelayCache
+    {
+      const OdGiMapper *m_pCurMapper,   *m_pCopyMapper;
+      const OdDbStub   *m_pCurMaterial, *m_pCopyMaterial;
+      DelayCacheEntry   m_Cache;
+      DelayCacheEntry  *m_pTail;
+
+      DelayCache() : m_pCurMapper(NULL)
+                   , m_pCurMaterial(NULL)
+                   , m_pTail(&m_Cache)
+      {
+      }
+
+      void clear();
+    };
+    struct MViewPerDrawableData
+    {
+      bool                  m_bMapperNeedExtents;     // Mapper awaiting current drawable extents
+      bool                  m_bBaseLevel;
+      ExtentsContainer      m_CurrentDrawableExtents;
+      DelayCache            m_DelayCache;
+      MViewPerDrawableData()
+        : m_bMapperNeedExtents(false)
+        , m_bBaseLevel(false)
+      {
+        m_CurrentDrawableExtents.m_bExtentsValid = m_CurrentDrawableExtents.m_bAwaiting = false;
+        m_CurrentDrawableExtents.m_pCurrentDrawable = NULL;
+      }
+      ~MViewPerDrawableData()
+      {
+      }
+      void clear()
+      {
+        m_CurrentDrawableExtents.m_bExtentsValid = m_CurrentDrawableExtents.m_bAwaiting = false;
+        m_bMapperNeedExtents = false;
+        m_CurrentDrawableExtents.m_pCurrentDrawable = NULL;
+      }
+    } *m_pCurMvDrawableData, m_mvBaseDrawableData, m_mvGlobalDrawableDataInitializer;
+  protected:
+    OdUInt32            m_uMaterialViewFlags;   // Set of material view flags
+    OdGiMaterialItemPtr m_pCurrentMaterialItem; // Current material
+    OdGiMapperItemPtr   m_pCurrentMapperItem;   // Current mapper
+    OdGiMaterialTraitsData m_nullMaterialTraitsData;
+    OdGiMaterialItemPtr m_pNullMaterialItem;
+  public:
+    explicit OdGsBaseMaterialVectorizer(OdUInt32 uMaterialViewFlags = kProcessMappersAndMaterials);
+    ~OdGsBaseMaterialVectorizer();
+
+    // OdGsBaseVectorizerView overrides
+
+    virtual void onTraitsModified();
+
+    virtual void beginMetafile(OdRxObject* pMetafile);
+    virtual void endMetafile(OdRxObject* pMetafile);
+    virtual void beginViewVectorization();
+    virtual void endViewVectorization();
+
+    virtual void processMaterialNode(OdDbStub *materialId, OdGsMaterialNode *node);
+    virtual bool saveMaterialCache(const OdGsMaterialNode *pNode, OdGsFiler *pFiler);
+    virtual bool loadMaterialCache(OdGsMaterialNode *pNode, OdGsFiler *pFiler);
+
+    virtual bool doDraw(OdUInt32 drawableFlags, const OdGiDrawable *pDrawable);
+
+    // OdGsBaseMaterialView methods
+
+    /** \details
+      Returns current material item.
+    */
+    OdGiMaterialItemPtr currentMaterial() const;
+    /** \details
+      Sets current material item.
+      \param pMaterial [in]  New material item.
+    */
+    void resetCurrentMaterial(OdGiMaterialItemPtr pMaterial);
+    /** \details
+      Returns true if and only if materials support enabled.
+    */
+    bool isMaterialEnabled() const;
+    /** \details
+      Returns true if and only if current material available.
+    */
+    bool isMaterialAvailable() const;
+    /** \details
+      Removes current material item.
+    */
+    void resetCurrentMaterial();
+    /** \details
+      Returns current material mapper item.
+      \param bForCoords [in]  Set to true if mapper item pointer will be used for texture coordinates calculations.
+    */
+    OdGiMapperItemPtr currentMapper(bool bForCoords = true) const;
+    /** \details
+      Sets current material mapper item.
+      \param pMapper [in]  New material mapper item.
+    */
+    void resetCurrentMapper(OdGiMapperItemPtr pMapper);
+    /** \details
+      Returns true if and only if mappers support enabled.
+    */
+    bool isMapperEnabled() const;
+    /** \details
+      Returns true if and only if current mapper item available.
+    */
+    bool isMapperAvailable() const;
+
+    /** \details
+      Returns true if and only if delay cache is enabled and drawable extents is not available.
+    */
+    bool isMappingDelayed() const;
+
+    // Output callbacks
+
+    /** \details
+      Can be overrided by device for setup additional transform matrix to material mapper.
+      \param dm [out]  Transform matrix.
+      \remarks
+      Return true if transform matrix initialized.
+    */
+    virtual bool getDeviceMapperMatrix(OdGeMatrix3d &dm) const;
+    /** \details
+      Test does current material need to be processed.
+      \param materialId [in]  Material id.
+      \remarks
+      Return true material need to be skipped.
+      As default returns true for 2d optimized, wireframe and hidden render modes and if materialId null.
+    */
+    virtual bool skipMaterialProcess(OdDbStub *materialId) const;
+    /** \details
+      Can be overrided by device for process null materials.
+    */
+    virtual void nullMaterialStub();
+    /** \details
+      Called by OdGsBaseMaterialView for initialize/reinitialize material cache.
+      \param prevCache [in]  Previous cache, if available.
+      \param materialId [in]  Material id.
+      \param materialData [in]  Current material traits.
+      \remarks
+      As default returns null pointer.
+    */
+    virtual OdGiMaterialItemPtr fillMaterialCache(OdGiMaterialItemPtr prevCache, OdDbStub *materialId, const OdGiMaterialTraitsData &materialData);
+    /** \details
+      Called by OdGsBaseMaterialView for render material cache.
+      \param pCache [in]  Material cache.
+      \param materialId [in]  Material id.
+      \remarks
+      As default does nothing.
+    */
+    virtual void renderMaterialCache(OdGiMaterialItemPtr pCache, OdDbStub *materialId);
+
+    /** \details
+      Called by delay cache entry as default handler.
+      \param pEntry [in]  Pointer to caller entry.
+    */
+    virtual void playDelayCacheEntry(const DelayCacheEntry *pEntry);
+    /** \details
+      Sets user entry to delay cache.
+      \param pEntry [in]  Pointer to newly created cache entry.
+    */
+    void appendDelayCacheEntry(DelayCacheEntry *pEntry);
+    /** \details
+      Called by delay cache writer if mapping entry was changed.
+      \remarks
+      Can be used for link cache markers with texture coordinates which must be recalculated after extents
+      will be calculated.
+    */
+    virtual void mapperChangedForDelayCache();
+    /** \details
+      Called by delay cache writer after execution of all cache entries.
+      \remarks
+      Can be overrided for clear device's internal caches. If you want clear caches before execution,
+      you could override computeDelayedExtents method instead of delayCacheProcessed.
+    */
+    virtual void delayCacheProcessed(const OdGiDrawable *pDrawable);
+
+    bool saveMaterialItem(const OdGiMaterialItem *pMatItem, OdGsFiler *pFiler);
+    OdGiMaterialItemPtr loadMaterialItem(OdGsFiler *pFiler);
+    static bool saveMaterialTexture(const OdGiMaterialTexture *pTexture, OdGsFiler *pFiler);
+    static OdGiMaterialTexturePtr loadMaterialTexture(OdGsFiler *pFiler);
+    static bool saveMaterialTextureManager(const OdGiMaterialTextureManager *pManager, OdGsFiler *pFiler, OdGsMaterialTextureDataFiler *pSaver);
+    static bool loadMaterialTextureManager(OdGiMaterialTextureManager *pManager, OdGsFiler *pFiler, OdGsMaterialTextureDataFiler *pSaver);
+    virtual bool saveClientMaterialCache(const OdRxObject* pMtl, OdGsFiler *pFiler);
+    virtual OdRxObjectPtr loadClientMaterialCache(OdGsFiler *pFiler, OdGiMaterialItem *pMatItem);
+  protected:
+    /** \details
+      Called internally if extents needed for current drawable (delay cache disabled).
+      \param pDrawable [in]  Pointer to current drawable.
+      \param extents [out]  Computed extents.
+      \remarks
+      Returns true if and only if computed extents valid.
+      Can be overrided by device if it needs more fast implementation.
+    */
+    virtual bool computeDrawableExtents(const OdGiDrawable *pDrawable, OdGeExtents3d &extents);
+    /** \details
+      Called internally if extents needed for current drawable (if delay cache enabled).
+      \param pDrawable [in]  Pointer to current drawable.
+      \param extents [out]  Computed extents.
+      \remarks
+      Returns true if and only if computed extents valid.
+      Can be overrided by device if it needs more fast implementation.
+    */
+    virtual bool computeDelayedExtents(const OdGiDrawable *pDrawable, OdGeExtents3d &extents);
+  private:
+    void computeDrawableExtents();
+    bool tryGsModelExtents(OdGeExtents3d &extents) const;
+  protected:
+    OdGiMapperItemPtr _itlCreateMapperItem() const;
+    OdGiMaterialItemPtr _itlCreateMaterialItem() const;
+};
+
+/** \details
+    Implements OdGsBaseMaterialVectorizer pseudo constructor.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseMaterialViewPC : public OdGsBaseMaterialVectorizer
+{
+  protected:
+    void resetConstructorFlags(OdUInt32 uMaterialViewFlags);
+  public:
+    OdGsBaseMaterialViewPC() { }
+};
+
+/** \details
+    Joins OdGsBaseVectorizeView and OdGsBaseMaterialVectorizer classes with default behavior.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseMaterialView : public OdGsBaseVectorizeViewJoin<OdGsBaseMaterialViewPC>
+{
+  public:
+    explicit OdGsBaseMaterialView(OdUInt32 uMaterialViewFlags = kProcessMappersAndMaterials)
+    {
+      resetConstructorFlags(uMaterialViewFlags);
+    }
+};
+
+/** \details
+    Joins OdGsBaseVectorizeView and OdGsBaseMaterialVectorizer classes with multithread behavior.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseMaterialViewMT : public OdGsBaseVectorizeViewJoinMT<OdGsBaseMaterialViewPC>
+{
+  public:
+    explicit OdGsBaseMaterialViewMT(OdUInt32 uMaterialViewFlags = kProcessMappersAndMaterials)
+    {
+      resetConstructorFlags(uMaterialViewFlags);
+    }
+
+    bool isMTView() const
+    {
+      return (&view() != this);
+    }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_BASE_MATERIAL_VIEW__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModel.h
new file mode 100755
index 0000000..9f28d77
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModel.h
@@ -0,0 +1,429 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGSMODELIMPL_H__
+#define __ODGSMODELIMPL_H__
+
+#define OD_MATERIAL_CACHE_SUPPORTED
+class OdGsNode;
+class OdGsViewImpl;
+
+#include "TD_PackPush.h"
+
+#include "OdList.h"
+#include "UInt8Array.h"
+#include "UInt32Array.h"
+#include "DbStubPtrArray.h"
+#include "StaticRxObject.h"
+#include "OdVector.h"
+
+#include "Gi/GiDrawable.h"
+#include "Gi/GiCommonDraw.h"
+#include "Gi/GiPathNode.h"
+
+#include "Gs/GsExport.h"
+#include "Gs/GsModel.h"
+#include "Gs/GsViewProps.h"
+#include "Gs/GsExtAccum.h"
+#include "Gs/GsMaterialCache.h"
+#include "Gs/GsVisualStyleProperties.h"
+#include "Gs/GsViewLocalId.h"
+#include "Gs/GsHighlightData.h"
+
+#define CACHE_STATISTICS
+
+class OdGsLayerNode;
+class OdGsBaseVectorizeDevice;
+class OdGsBaseVectorizer;
+class OdGsBaseModule;
+
+class OdGsBaseModelImpl;
+class OdGsEntityNode;
+class OdGsContainerNode;
+
+enum ENodeType
+{
+  kBlockNode,
+  kContainerNode,
+  kLayerNode,
+  kEntityNode,
+  kMaterialNode,
+  kLastNodeType //number of types enumerated above
+};
+
+/** \details
+    GsBaseModel reactor.
+
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class OdGsBaseModelReactor : public OdGsModelReactor
+{
+  public:
+    virtual bool onHighlight(OdGsModel *pModel, const OdGiPathNode& path, bool bDoIt, const OdGsView* pView) { return true; }
+
+    virtual bool onInvalidate(OdGsModel *pModel, OdGsModel::InvalidationHint hint) { return true; }
+    virtual bool onInvalidate(OdGsModel *pModel, OdGsView* pView) { return true; }
+
+    enum ModelProperty
+    {
+      kModelTransform = 0,
+      kModelRenderType,
+      kModelAdditionMode,
+      kModelBackground,
+      kModelVisualStyle,
+      kModelSectioning,
+
+      kNumModelProps
+    };
+    virtual bool onPropertyModified(OdGsModel *pModel, ModelProperty nProp) { return true; }
+};
+
+/** \details
+    This class is the base class for custom GsBaseModel objects which coordinate custom caching support 
+    for Teigha vectorization applications.
+
+    \remarks
+    Clients should derive their custom model classes from this class.
+
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseModel : public OdGsModel
+{
+protected:
+  OdGiOpenDrawableFn      m_openDrawableFn;
+  OdGsNode* m_aNodes[kLastNodeType];
+
+  friend class OdGsNode;
+  friend class OdGsViewImpl;
+  friend class OdGsBaseVectorizer;
+  friend class OdGsBaseVectorizeDevice;
+
+  /** \details
+    Adds the specified Node object to this BaseModel object.
+    \param pNode [in]  Pointer to the Node to be added.  
+  */
+  void addNode(OdGsNode* pNode);
+
+public:
+  virtual void invalidateEntRect(OdGiDrawable* pDrawable, OdGiDrawable* pParent, bool bForceIfNoExtents = false);
+  virtual void invalidateEntRect(OdGsEntityNode* pNode, OdGsContainerNode* pParent, bool bForceIfNoExtents);
+
+#if defined(CACHE_STATISTICS)
+  unsigned m_nMfCached;
+  unsigned m_nMfReused;
+#endif//CACHE_STATISTICS
+protected:
+  bool m_bCheckFaded;
+public:
+  bool checkFaded() const { return m_bCheckFaded; }
+  void setCheckFaded(bool bOn) { m_bCheckFaded = bOn; }
+#ifdef ODA_DIAGNOSTICS
+  OdRefCounter m_nNodes; //number of OdGsNodes allocated within the model (not necessary in 
+                //m_pNodes list _directly_, can be owned by insert/block nodes).
+#endif
+
+  typedef std::pair<OdGsViewImpl*, OdUInt32> ViewRef;
+  OdArray<ViewRef, OdMemoryAllocator<ViewRef> > m_views;
+  typedef std::pair<const OdGsBaseModule*, OdUInt32> ModuleRef;
+  OdArray<ModuleRef, OdMemoryAllocator<ModuleRef> > m_modules;
+  const ViewPropsArray& getViewProps() const { return m_viewProps; }
+  OdGsViewImpl *refView() const;
+  OdGsBaseVectorizeDevice *refDevice() const;
+  OdUInt32 refModulesCount() const { return m_modules.size(); }
+#ifdef ODGS_LOCAL_IDS
+  virtual void attachLocalViewportId(OdGsViewImpl* pView, OdGsViewImpl* pFrom = NULL);
+  virtual OdUInt32 getLocalViewportId(OdGsViewImpl* pView);
+  virtual OdUInt32 getMaxLocalViewportId() const;
+#endif
+
+  /** \details
+    For internal needs. Do not use!
+  */
+  bool invalidVp(unsigned int viewportId) const
+  {
+    if(m_viewProps.size()>viewportId)
+      return m_viewProps[viewportId].isInvalid();
+    return true;
+  }
+
+  OdGsBaseModelImpl* impl() { return m_impl; }
+  void invalidateRegenDrawBlocks(OdGsViewImpl& view, const OdDbStub* layoutId);
+  void invalidateSectionableBlocks();
+
+  struct SectioningSettings
+  {
+    bool             m_bEnabled;
+    bool             m_bTopSet;
+    bool             m_bBottomSet;
+    bool             m_bVisualStyle;
+    OdGePoint3dArray m_points;
+    OdGeVector3d     m_upVector;
+    double           m_dTop;
+    double           m_dBottom;
+    OdDbStub        *m_visualStyle;
+    SectioningSettings()
+      : m_bEnabled(false), m_bTopSet(false), m_bBottomSet(false), m_bVisualStyle(false)
+      , m_dTop(0.0), m_dBottom(0.0), m_visualStyle(NULL) { }
+    bool isEnabled() const { return m_bEnabled && !m_points.isEmpty(); }
+  };
+
+protected:
+  void addViewRef(OdGsViewImpl* pView);
+  void removeViewRef(OdGsViewImpl* pView);
+
+  /** \details
+    For internal needs. Do not use!
+  */
+  void setInvalidVp(unsigned int viewportId, bool val)
+  {
+    if(m_viewProps.size()>viewportId)
+      m_viewProps[viewportId].setInvalid(val);
+  }
+  virtual void clearChangedLayersList();
+
+protected:
+
+  OdArray<ViewProps>           m_viewProps;
+  OdUInt32                     m_nLayers;
+  OdGsLayerNode*               m_pFirstChangedLayer;
+
+  OdGsView::RenderMode         m_renderModeOverride;
+  OdGeMatrix3d                 m_xForm;
+  AdditionMode                 m_additionMode;
+  OdDbStub*                    m_modelBackground;
+  OdGsVisualStylePropertiesPtr m_modelVisualStyle;
+
+  RenderType                   m_renderType;
+  // Reserved pointer for internal use (binary incompatible changes), do not delete.
+  OdRxObjectPtr                m_pGsReserved;
+
+  // Material cache support
+  OdGsMaterialCachePtr         m_pMaterialCache;
+
+  OdGsBaseModelImpl*           m_impl;
+
+  SectioningSettings           m_sectioning;
+
+#ifdef ODGS_LOCAL_IDS
+  OdGsBaseModelLocalIdsPtr     m_pViewIds;
+#endif
+
+  OdVector<OdGsModelReactor*, OdMemoryAllocator<OdGsModelReactor*> > m_modelReactors;
+  OdVector<OdGsBaseModelReactor*, OdMemoryAllocator<OdGsBaseModelReactor*> > m_baseModelReactors;
+
+protected:
+
+  OdGsBaseModel();
+  ~OdGsBaseModel();
+
+public:
+  /** \details
+    Returns the OdGsNode object associated with the specified Drawable.
+    
+    \param pDrawable [in]  Pointer to the Drawable object.
+    \remarks
+    If no Node object is associated with the Drawable object, one is created.
+  */
+  virtual OdGsNode* gsNode(OdGiDrawable* pDrawable);
+
+  /** \details
+    Removes the associations between the specified Node object and this BaseModel object.
+    \param pNode [in]  Pointer to the Node object. 
+  */
+  virtual void detach(OdGsNode* pNode);
+
+  /** \details
+    Removes all Node objects from this BaseModel object.
+  */
+  virtual void detachAll();
+
+  void detachAllFromDb(const OdDbBaseDatabase* pDb);
+
+  /** \details
+    Opens the specified object.
+    \param objectID [in]  Object ID of the Drawable object to be opened.
+    
+    \remarks
+    Returns a SmartPointer to the opened object.
+  */
+  OdGiDrawablePtr open(OdDbStub* objectId);
+
+  void setOpenDrawableFn(OdGiOpenDrawableFn openDrawableFn);
+  OdGiOpenDrawableFn openDrawableFn() const;
+
+  void onAdded(OdGiDrawable* pAdded, OdGiDrawable* pParent);
+  void onAdded(OdGiDrawable* pAdded, OdDbStub* parentID);
+  virtual void onAddedImpl(OdGiDrawable* pAdded, OdGiDrawable* pParent);
+  
+  void onModified(OdGiDrawable* pModified, OdGiDrawable* pParent);
+  void onModified(OdGiDrawable* pModified, OdDbStub* parentID);
+  virtual void onModifiedImpl(OdGiDrawable* pModified, OdGiDrawable* pParent);
+  
+  void onErased(OdGiDrawable* pErased, OdGiDrawable* pParent);
+  void onErased(OdGiDrawable* pErased, OdDbStub* parentID);
+  virtual void onErasedImpl(OdGiDrawable* pErased, OdGiDrawable* pParent);
+
+  void invalidate(InvalidationHint hint);
+  void invalidate(OdGsView* pView);
+  /** \param view [in]  BaseVectorizeView object for which data are to be invalidated.
+    \param mask [in]  Mask.
+  */
+  void invalidate(OdGsViewImpl& view, OdUInt32 mask);
+
+  /** \details
+    Returns the view properties that have changed for the specified Viewport
+    
+    \param viewportId [in]  Viewport ID. 
+  */
+  OdUInt32 viewChanges(OdUInt32 viewportId) const;
+  /** \details
+    Returns the size of the ViewProperties array for this BaseModel object.
+  */
+  OdUInt32 numViewProps() const;
+  
+  /** \details
+    Returns a reference to the the ViewProp structure for the specified Viewport.
+    
+    \param viewportId [in]  Viewport ID. 
+  */
+  const ViewProps& viewProps(OdUInt32 viewportId) const;
+  
+  /** \details
+    Updates the ViewProps structure for the specified Viewport.
+    \param viewport [in]  Viewport.
+  */
+  virtual void updateViewProps(const OdGsViewImpl& viewport);
+
+  virtual bool isViewPropsValid(OdUInt32 viewportId) const;
+
+  virtual OdGsLayerNode* gsLayerNode(OdDbStub* layerId, const OdGsBaseVectorizer* pView);
+
+  virtual void propagateLayerChanges(OdGsBaseVectorizeDevice& device);
+
+  void setTransform(const OdGeMatrix3d& xForm);
+
+  OdGeMatrix3d transform() const;
+
+  OdGsView::RenderMode renderModeOverride() const;
+
+  void setRenderModeOverride(OdGsView::RenderMode mode = OdGsView::kNone);
+
+  void highlight(const OdGiPathNode& path, bool bDoIt = true, const OdGsView* pView = NULL);
+  virtual void highlightImpl(const OdGiPathNode& path, bool bDoIt = true, const OdGsView* pView = NULL);
+
+  // Material cache support
+  OdGsMaterialCache* materialCache() { return m_pMaterialCache.get(); }
+
+  void setAdditionMode(AdditionMode mode);
+  AdditionMode additionMode() const;
+
+  void setRenderType(RenderType renderType);
+  RenderType renderType() const;
+
+  void setBackground(OdDbStub *backgroundId);
+  OdDbStub *background() const;
+
+  void setVisualStyle(OdDbStub *visualStyleId);
+  OdDbStub *visualStyle() const;
+  void setVisualStyle(const OdGiVisualStyle &visualStyle);
+  bool visualStyle(OdGiVisualStyle &visualStyle) const;
+
+  virtual bool makeStock(OdDbStub* layoutId);
+  virtual void releaseStock(OdDbStub* layoutId);
+
+  bool hasChangedLayers() const { return m_pFirstChangedLayer != NULL; }
+
+  void addModelReactor(OdGsModelReactor *pReactor);
+  void removeModelReactor(OdGsModelReactor *pReactor);
+
+  void setEnableSectioning(bool bEnable);
+  bool isSectioningEnabled() const;
+  bool setSectioning(const OdGePoint3dArray &points, const OdGeVector3d &upVector);
+  bool setSectioning(const OdGePoint3dArray &points, const OdGeVector3d &upVector,
+                     double dTop, double dBottom);
+  void setSectioningVisualStyle(OdDbStub *visualStyleId);
+  const SectioningSettings &getSectioning() const { return m_sectioning; }
+
+  virtual bool saveModelState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL) const;
+  virtual bool loadModelState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL);
+  virtual bool saveClientModelState(OdGsFiler *pFiler) const;
+  virtual bool loadClientModelState(OdGsFiler *pFiler);
+  bool postprocessModelLoading(OdGsFiler *pFiler);
+protected:
+  void onModifiedNode(OdGsNode* pCache, OdGiDrawable* pDrawable, OdGiDrawable* pParent);
+  void onModifiedDrawable(OdGiDrawable* pDrawable, OdGiDrawable* pParent);
+  void onPropertyModifiedImpl(OdGsBaseModelReactor::ModelProperty nProp, bool &bReturnValue);
+  virtual bool onPropertyModified(OdGsBaseModelReactor::ModelProperty nProp);
+};
+
+inline OdGsView::RenderMode OdGsBaseModel::renderModeOverride() const
+{
+  return m_renderModeOverride;
+}
+
+inline OdGiDrawablePtr OdGsBaseModel::open(OdDbStub* objectId) 
+{
+  if(m_openDrawableFn)
+    return m_openDrawableFn(objectId);
+  //ODA_ASSERT_ONCE(objectId==0);
+  return OdGiDrawablePtr();
+}
+
+inline OdUInt32 OdGsBaseModel::numViewProps() const
+{
+  return m_viewProps.size();
+}
+
+inline const ViewProps& OdGsBaseModel::viewProps(OdUInt32 viewportId) const
+{
+  ODA_ASSERT(m_viewProps.size() > viewportId);
+  return m_viewProps[viewportId];
+}
+
+inline OdUInt32 OdGsBaseModel::viewChanges(OdUInt32 viewportId) const
+{
+  return viewProps(viewportId).m_nViewChanges;
+}
+
+inline OdGsViewImpl *OdGsBaseModel::refView() const
+{
+  if (m_views.empty())
+    return NULL;
+  return m_views.first().first;
+}
+
+inline OdGsModel::AdditionMode OdGsBaseModel::additionMode() const
+{
+  return m_additionMode;
+}
+
+inline OdGsModel::RenderType OdGsBaseModel::renderType() const
+{
+  return m_renderType;
+}
+
+#include "TD_PackPop.h"
+
+#endif // __ODGSMODELIMPL_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModule.h
new file mode 100755
index 0000000..63b82f4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseModule.h
@@ -0,0 +1,196 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSBASEMODULE_INC
+#define ODGSBASEMODULE_INC
+
+#include "TD_PackPush.h"
+#include "Gs/GsExport.h"
+#include "Gs/Gs.h"
+
+class OdGsViewImpl;
+class OdGsBaseVectorizeDevice;
+
+/** \details
+    This class provides management of bitmapped GUI display windows.
+
+    Library: Gs 
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseModule : public OdGsModule
+{
+  OdRxObjectPtrArray  m_reactors;
+protected:
+  /** \details
+    Notifies connected reactors that the specified OdGsView object was created.
+    
+    \param pView [in]  Pointer to the OdGsView object.
+    \remarks
+    This function is called after the operation.
+  */
+  void fire_viewWasCreated(OdGsView* pView);
+
+  /** \details
+    Notifies connected reactors that the specified OdGsModule object is about to be unloaded.
+    
+    \param pModule [in]  Pointer to the GsModule object.
+    \remarks
+    This function is called before the operation.
+  */
+  void fire_gsToBeUnloaded(OdGsModule* pModule);
+
+  /** \details
+    Creates a new OdGsBaseVectorizeDevice object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  virtual OdSmartPtr<OdGsBaseVectorizeDevice> createDeviceObject() = 0;
+
+  /** \details
+    Creates a new OdGsViewImpl object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  virtual OdSmartPtr<OdGsViewImpl> createViewObject() = 0;
+
+  /** \details
+    Creates a new OdGsBaseVectorizeDevice object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+    This default implementation simply returns NULL which means that the option is not supported.
+  */
+  virtual OdSmartPtr<OdGsBaseVectorizeDevice> createBitmapDeviceObject();
+
+  /** \details
+    Creates a new OdGsBaseVectorizeView object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+    This default implementation simply returns NULL which means that the option is not supported.
+  */
+  virtual OdSmartPtr<OdGsViewImpl> createBitmapViewObject();
+
+  OdGsBaseModule();
+  
+  /** \details
+    Notification function called whenever this BaseModule object is about to be released.
+  */
+  void onFinalRelease();
+public:
+  ODRX_DECLARE_MEMBERS(OdGsBaseModule);
+
+  /** \details
+    Notifies connected reactors that the specified View object is about to be created.
+    
+    \param pView [in]  Pointer to the OdGsView object.
+    \remarks
+    This function is called before the operation.
+  */
+  void fire_viewToBeDestroyed(OdGsView* pView);
+
+  /** \details
+    Creates a new OdGsDevice object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  OdGsDevicePtr createDevice();
+  
+  /** \details
+    Creates a new OdGsBaseVectorizeDevice object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  OdGsDevicePtr createBitmapDevice();
+
+  /** \details
+    Creates a new OdGsViewImpl object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  OdSmartPtr<OdGsViewImpl> createView();
+
+  /** \details
+    Creates a new OdGsBaseVectorizeView object, and associates it with this BaseModule object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+  */
+  OdSmartPtr<OdGsViewImpl> createBitmapView();
+
+  /** \details
+    Adds the specified reactor to this object's reactor list.
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  void addReactor(OdGsReactor* pReactor);
+
+  /** \details
+    Removes the specified reactor from this object's reactor list.
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  void removeReactor(OdGsReactor* pReactor);
+
+  /** \details
+    Notification function called at the start of the client application.
+    \remarks
+    The user override of this function should register any custom objects defined in the 
+    custom application, using the OdRxObject::rxInit function.  It should also register
+    custom commands defined in the module.
+  */
+  void initApp();
+
+  /** \details
+    Notification function called at the end of the client application.
+    \remarks
+    The user override of this function should unregister any custom objects defined in the
+    custom application, using the OdRxObject::rxUninit function.  It should also
+    remove any custom commands that were registered in the initApp function.
+  */
+  void uninitApp();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsBaseModule object pointers.
+*/
+typedef OdSmartPtr<OdGsBaseModule> OdGsBaseModulePtr;
+
+/** \details
+    This function must be called before using any GS implementation classes.
+    \remarks
+    OdGsBaseModule::initApp() calls this function, so there is no need to call it explicitly
+    when using GS classes within an OdRx Module derived from OdGsBaseModule.
+
+    Library: Gs
+*/
+GS_TOOLKIT_EXPORT void odgsInitialize();
+
+/** \details
+    This function must be called after using any GS implementation classes.
+    \remarks
+    OdGsBaseModule::uninitApp() calls this function, so there is no need to call it explicitly
+    when using OdGs classes within an OdRx Module derived from OdGsBaseModule.
+
+    Library: Gs
+*/
+GS_TOOLKIT_EXPORT void odgsUninitialize();
+
+#include "TD_PackPop.h"
+
+#endif // ODGSBASEMODULE_INC
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeDevice.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeDevice.h
new file mode 100755
index 0000000..d927551
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeDevice.h
@@ -0,0 +1,440 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSBASEVECTORIZEDEVICE_INC
+#define ODGSBASEVECTORIZEDEVICE_INC
+
+#include "TD_PackPush.h"
+#include "Gs/GsBaseModule.h"
+#include "Gs/GsDCRectArray.h"
+#include "Gs/GsVectPerformance.h"
+#include "Gs/GsModel.h"
+#include "SlotManager.h"
+#include "ThreadsCounter.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for ODCOLORREF objects.
+*/
+typedef OdArray<ODCOLORREF, OdMemoryAllocator<ODCOLORREF> > ODGSPALETTE;
+
+class OdGiPathNode;
+class OdGiTransientManager;
+class OdGiSectionGeometryManager;
+
+class OdGsBaseVectorizeView;
+class OdGsViewImpl;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdGiTransientManager object pointers. 
+*/
+typedef OdSmartPtr<OdGiTransientManager> OdGiTransientManagerPtr;
+
+/** \details
+    This class implements bitmapped GUI display windows.
+
+    \remarks
+    OdGsBaseVectorizeDevice objects own, update, and refresh one or more OdGsView objects.
+    
+    In addition, they responds to operating system notifications,
+    such as window resize, forwarded by the graphics system client.
+
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseVectorizeDevice : public OdGsDevice
+{
+  friend class OdGsViewImpl;
+  friend class OdGsBaseVectorizeView;
+
+  friend class OdGsBaseModule;
+  OdGsBaseModulePtr       m_pModule;
+  OdSlotManager           m_slotManager;
+protected:
+  OdArray<OdGsViewPtr>    m_views;
+  ODGSPALETTE             m_logPalette;
+  ODCOLORREF              m_Background;
+  OdGsDCRect              m_outputRect;
+  OdSmartPtr<OdGiContext> m_pUserContext;
+  OdRxObjectPtr           m_sectionGeometryMap;
+  OdRxObjectPtr           m_sectionManager;
+  OdGiTransientManagerPtr m_transientManager;
+
+  OdUInt32                m_flags;
+  enum
+  {
+    kFirstFlag             = 1,
+
+    kInvalid               = kFirstFlag << 0,
+    kSortRenderTypes       = kFirstFlag << 1,
+    kSpatialIndexDisabled  = kFirstFlag << 2,
+    kDynamicHighlight      = kFirstFlag << 3,
+    kDynamicSubhighlight   = kFirstFlag << 4,
+    kSupportBlocks         = kFirstFlag << 5,
+    kSupportOverlays       = kFirstFlag << 6,
+    kSupportComposition    = kFirstFlag << 7,
+    kEnableComposition     = kFirstFlag << 8,
+    kMtDisplay             = kFirstFlag << 9,
+    kUseSectionGeometryMap = kFirstFlag << 10,
+    kUseVpLtypeScaleMult   = kFirstFlag << 11,
+    kUseVpFilterFunction   = kFirstFlag << 12,
+    kCullingVolumeEnabled  = kFirstFlag << 13,
+    kDisplayOffLayers      = kFirstFlag << 14,
+
+    kLastFlag              = kDisplayOffLayers
+  };
+  OdGsDCRectArray         m_invalidRects;
+  OdUInt32                m_invalidOverlays;
+
+  /*
+  virtual int invalidatedRectNum(int& max) const;
+  virtual void invalidatedRectAt(int i, OdGsDCRect& rect) const;
+  virtual void setInvalidatedRectAt(int i, const OdGsDCRect& rect);
+  virtual void eraseInvalidatedRectAt(int i);
+  virtual void clearInvalidatedRects();
+  */
+public:
+  bool invalid() const { return GETBIT(m_flags, kInvalid); }
+  void setValid(bool bFlag);
+
+  /** \details
+    Must be overridden to return true in child class to inform base implementation that
+    child class supports partial update.
+  */
+public:
+  virtual bool supportPartialUpdate() const;
+
+  void onViewAdded(OdGsView* pView);
+public:
+  ODRX_DECLARE_MEMBERS(OdGsBaseVectorizeDevice);
+
+  ~OdGsBaseVectorizeDevice();
+
+  OdGiContext* userGiContext() const;
+  void setUserGiContext(OdGiContext* pUserGiContext);
+
+  OdRxDictionaryPtr properties();
+  OdGsBaseVectorizeDevice();
+
+  /** \details
+    Returns the height of this Device object in pixels.
+  */
+  int height() const;
+
+  /** \details
+    Returns the width of this Device object in pixels.
+  */
+  int width() const;
+
+  void invalidate();
+
+  void invalidate(const OdGsDCRect &screenRect);
+
+  void invalidateRegion(const OdGiPathNode& path);
+
+  const OdGsDCRectArray& invalidRects() const;
+
+  bool isValid() const;
+
+  virtual void update(OdGsDCRect* pUpdatedRect);
+  virtual void updateGeometry();
+  virtual void updateScreen();
+
+  void onSize(const OdGsDCRect& outputRect);
+
+  const OdGsDCRect& outputRect() const;
+  void getSize(OdGsDCRect& outputRect) const;
+
+  void onRealizeForegroundPalette();
+
+  void onRealizeBackgroundPalette();
+
+  void onDisplayChange(
+    int bitsPerPixel, 
+    int xPixels, 
+    int yPixels);
+
+  OdGsViewPtr createView(
+    const OdGsClientViewInfo* pViewInfo = 0, 
+    bool enableLayerVisibilityPerView = false);
+
+  void addView(OdGsView* pView);
+
+  void insertView(int viewIndex, OdGsView* pView);
+
+  bool eraseView(OdGsView* pView);
+
+  int numViews() const;
+
+  OdGsView* viewAt(int viewIndex);
+  const OdGsView* viewAt(int viewIndex) const;
+  OdGsViewImpl* viewImplAt(int viewIndex);
+  const OdGsViewImpl* viewImplAt(int viewIndex) const;
+
+  bool eraseView(int viewIndex);
+
+  void eraseAllViews();
+
+  bool setBackgroundColor(ODCOLORREF backgroundColor);
+
+  ODCOLORREF getBackgroundColor();
+
+  void setLogicalPalette(const ODCOLORREF* logicalPalette, int numColors);
+
+  /** \details
+    Currently not implemented.
+  */
+  void getSnapShot(OdGiRasterImagePtr &pImage, const OdGsDCRect &region);
+
+  /** \details
+    Returns the specified color in the logical palette of this Device object.
+    \param colorIndex [in]  Color index.
+  */
+  ODCOLORREF getColor(OdUInt16 colorIndex) const;
+
+  /** \details
+    Returns background color in the logical palette of this Device object.
+  */
+  ODCOLORREF getPaletteBackground() const;
+
+  /** \details
+    Returns the logical palette of this Device object.
+  */
+  const ODCOLORREF* getPalette() const;
+
+  /** \details
+    Returns the logical palette of this Device object.
+    \param numColors [out]  Returns number of colors inside logical palette.
+  */
+  const ODCOLORREF* getLogicalPalette(int &numColors) const;
+
+  OdGsModelPtr createModel();
+  bool isModelCompatible(OdGsModel* pModel) const;
+
+  const OdGsView* rootView() const;
+
+  // renderTypes support
+  bool sortRenderTypes() const;
+  void setSortRenderTypes(bool flag);
+  virtual OdUInt32 renderTypeWeight(OdGsModel::RenderType renderType) const;
+  virtual OdGsModel::RenderType transientRenderType() const;
+  // overlays support
+  bool supportOverlays() const;
+  void setSupportOverlays(bool bFlag);
+  virtual OdUInt32 renderTypeOverlay(OdGsModel::RenderType renderType) const;
+  bool isOverlayInvalid(OdUInt32 nOverlay) const;
+  void setOverlayInvalid(OdUInt32 nOverlay, bool bFlag);
+  void resetOverlayFlags(bool bFlag = false);
+
+  bool isSpatialIndexDisabled() const;
+  void disableSpatialIndex(bool bSet);
+
+  bool isCullingVolumeEnabled() const;
+  void enableCullingVolume(bool bSet);
+
+  bool supportDynamicHighlight() const;
+  bool supportDynamicSubhighlight() const;
+
+  bool supportBlocks() const;
+
+  bool supportComposition() const;
+
+  bool compositionEnabled() const;
+  void enableComposition(bool bSet);
+
+  bool isDisplayOffLayersEnabled() const;
+  void enableDisplayOffLayers(bool bSet);
+
+  bool isValidViewportId(const OdUInt32 acgiId) const
+  {
+    return m_slotManager.contains(acgiId);
+  }
+
+  bool useVpLtypeScaleMult() const { return GETBIT(m_flags, kUseVpLtypeScaleMult); }
+  bool useVpFilterFunction() const { return GETBIT(m_flags, kUseVpFilterFunction); }
+
+  OdGiSectionGeometryManager *getSectionGeometryManager();
+  OdRxObjectPtr getSectionGeometryMap();
+  void clearSectionGeometryMap();
+  OdRxObject* mtServices() { return m_mtServices; }
+
+  OdGiTransientManager *transientManager();
+  void setTransientManager(OdGiTransientManager *pManager);
+
+  virtual bool isSupportDeviceStateSaving() const;
+  bool saveDeviceState(OdGsFiler *pFiler) const;
+  bool loadDeviceState(OdGsFiler *pFiler);
+  virtual bool saveClientDeviceState(OdGsFiler *pFiler) const;
+  virtual bool loadClientDeviceState(OdGsFiler *pFiler);
+  virtual bool saveLinkedDeviceState(OdGsFiler *pFiler) const;
+  virtual bool loadLinkedDeviceState(OdGsFiler *pFiler);
+protected:
+  friend class DisplayScheduler;
+  virtual bool supportParallelDisplay() const { return false; }
+  void initMtServices();
+  void viewUpdateScreen(OdGsBaseVectorizeView* pView, bool bUpdate);
+
+public:
+  GsVectPerformanceData m_vectPerfData;
+private:
+  OdRxObjectPtr m_mtServices;
+  OdRefCounter m_vectThreadIndex;
+  OdMutexPtr m_mtInvalidate;
+  OdMutexPtr m_mtSectionGeometryMap;
+};
+
+inline bool OdGsBaseVectorizeDevice::sortRenderTypes() const
+{
+  return GETBIT(m_flags, kSortRenderTypes);
+}
+
+inline void OdGsBaseVectorizeDevice::setSortRenderTypes(bool bFlag)
+{
+  SETBIT(m_flags, kSortRenderTypes, bFlag);
+}
+
+inline bool OdGsBaseVectorizeDevice::supportOverlays() const
+{
+  return GETBIT(m_flags, kSupportOverlays);
+}
+
+inline void OdGsBaseVectorizeDevice::setSupportOverlays(bool bFlag)
+{
+  SETBIT(m_flags, kSupportOverlays, bFlag);
+}
+
+inline bool OdGsBaseVectorizeDevice::isOverlayInvalid(OdUInt32 nOverlay) const
+{
+  return GETBIT(m_invalidOverlays, (1 << nOverlay));
+}
+
+inline void OdGsBaseVectorizeDevice::setOverlayInvalid(OdUInt32 nOverlay, bool bFlag)
+{
+  SETBIT(m_invalidOverlays, (1 << nOverlay), bFlag);
+}
+
+inline void OdGsBaseVectorizeDevice::resetOverlayFlags(bool bFlag)
+{
+  m_invalidOverlays = (bFlag) ? 0xFFFFFFFF : 0;
+}
+
+inline bool OdGsBaseVectorizeDevice::isSpatialIndexDisabled() const
+{
+  return GETBIT(m_flags, kSpatialIndexDisabled);
+}
+
+inline void OdGsBaseVectorizeDevice::disableSpatialIndex(bool bSet)
+{
+  SETBIT(m_flags, kSpatialIndexDisabled, bSet);
+}
+
+inline bool OdGsBaseVectorizeDevice::isCullingVolumeEnabled() const
+{
+  return GETBIT(m_flags, kCullingVolumeEnabled);
+}
+
+inline void OdGsBaseVectorizeDevice::enableCullingVolume(bool bSet)
+{
+  SETBIT(m_flags, kCullingVolumeEnabled, bSet);
+}
+
+inline bool OdGsBaseVectorizeDevice::supportDynamicHighlight() const
+{
+  return GETBIT(m_flags, kDynamicHighlight);
+}
+
+inline bool OdGsBaseVectorizeDevice::supportDynamicSubhighlight() const
+{
+  return GETBIT(m_flags, kDynamicSubhighlight);
+}
+
+inline bool OdGsBaseVectorizeDevice::supportBlocks() const
+{
+  return GETBIT(m_flags, kSupportBlocks);
+}
+
+inline bool OdGsBaseVectorizeDevice::supportComposition() const
+{
+  return GETBIT(m_flags, kSupportComposition);
+}
+
+inline bool OdGsBaseVectorizeDevice::compositionEnabled() const
+{
+  return GETBIT(m_flags, kEnableComposition);
+}
+
+inline void OdGsBaseVectorizeDevice::enableComposition(bool bSet)
+{
+  SETBIT(m_flags, kEnableComposition, bSet);
+}
+
+inline bool OdGsBaseVectorizeDevice::isDisplayOffLayersEnabled() const
+{
+  return GETBIT(m_flags, kDisplayOffLayers);
+}
+
+inline void OdGsBaseVectorizeDevice::enableDisplayOffLayers(bool bSet)
+{
+  SETBIT(m_flags, kDisplayOffLayers, bSet);
+}
+
+inline const
+OdGsDCRect& OdGsBaseVectorizeDevice::outputRect() const
+{
+  return m_outputRect;
+}
+
+inline
+void OdGsBaseVectorizeDevice::getSize(OdGsDCRect& outputRect) const
+{
+  outputRect = this->outputRect();
+}
+
+inline
+ODCOLORREF OdGsBaseVectorizeDevice::getColor(OdUInt16 colorIndex) const
+{
+  return m_logPalette[colorIndex];
+}
+
+inline
+const ODCOLORREF* OdGsBaseVectorizeDevice::getPalette() const
+{
+  return m_logPalette.getPtr();
+}
+
+inline
+const ODCOLORREF* OdGsBaseVectorizeDevice::getLogicalPalette(int &numColors) const
+{
+  numColors = (int)m_logPalette.size();
+  return m_logPalette.getPtr();
+}
+
+inline const OdGsDCRectArray&
+OdGsBaseVectorizeDevice::invalidRects() const
+{
+  return m_invalidRects;
+}
+
+#include "TD_PackPop.h"
+
+#endif // ODGSBASEVECTORIZEDEVICE_INC
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeView.h
new file mode 100755
index 0000000..993722f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizeView.h
@@ -0,0 +1,179 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSBASEVECTORIZEVIEW_INC
+#define ODGSBASEVECTORIZEVIEW_INC
+
+#include "TD_PackPush.h"
+
+#include <stdlib.h>
+#include <utility>
+
+#include "Gs/GsViewImpl.h"
+#include "Ge/GeExtents3d.h"
+#include "Gs/GsViewPropsDef.h"
+#include "Gs/GsBaseVectorizeDevice.h"
+
+/** \details
+    This class is a pattern implementation of the OdGsView interface. 
+    
+    \remarks
+    This class implements most of the OdGsView class.
+    It creates simplified eye coordinate system (ECS) output graphics,
+    which could be redirected by a client to a renderer to screen or file.
+    
+    \sa
+    DWF/SVG exports
+    
+    Library: Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseVectorizeView : public OdGsViewImpl
+{
+public:
+  OdGsBaseVectorizeView();
+  ~OdGsBaseVectorizeView();
+
+public:
+  /** OdGsBaseVectorizeView methods *
+  */
+
+  /** \details
+    Returns the specified OdGsView pointer 
+    as a pointer to an OdGsBaseVectorizeView object.
+    \param pView [in]  Pointer to an OdGsView object.
+  */
+  static OdGsBaseVectorizeView* safeCast(OdGsView* pView);
+
+  /** OdGsViewImpl methods *
+  */
+  virtual OdGiContext* userGiContext() const;
+  virtual void setUserGiContext(OdGiContext* pUserGiContext);
+  virtual void update();
+
+  virtual void select(const OdGePoint2d* aPtDc, int numPoints, OdGsSelectionReactor* pReactor,
+    OdGsView::SelectionMode mode = OdGsView::kCrossing);
+  TD_USING(OdGsViewImpl::select);
+
+  virtual bool viewExtents(OdGeBoundBlock3d& extents) const;
+
+  bool sceneDept(double& zNear, double& zFar) const;
+
+protected:
+
+  virtual void updateGeometryByDevice();
+
+  /** OdGsBaseVectorizeView methods *
+  */
+public:
+  virtual OdUInt32 numVectorizers() const = 0;
+
+protected:
+  virtual OdGsBaseVectorizer* getVectorizer(bool bDisplay) = 0;
+  virtual void releaseVectorizer(OdGsBaseVectorizer* pVect) = 0;
+
+  void updateGeometry();
+  void updateScreen();
+
+private:
+  void setVectThreadIndex(OdGsBaseVectorizer* pVect, bool bAssignIndex, int idx = -1);
+
+  //data
+protected:
+  OdSmartPtr<OdGiContext> m_userGiContext;
+
+private:
+  friend class OdGsBaseVectorizeDevice;
+  friend class VectorizerAutoPtr;
+  friend class BaseVectScheduler;
+};
+
+inline OdGsBaseVectorizeView* OdGsBaseVectorizeView::safeCast(OdGsView* pView)
+{
+  return static_cast<OdGsBaseVectorizeView*>(OdSmartPtr<OdGsViewImpl>(pView).get());
+}
+
+/** \details
+        
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class VectorizerAutoPtr
+{
+public:
+  VectorizerAutoPtr(OdGsBaseVectorizeView& view, bool bDisplay): m_view(view), m_obj(NULL)
+  {
+    m_obj = m_view.getVectorizer(bDisplay);
+    if(m_obj && bDisplay)
+        m_view.setVectThreadIndex(m_obj, true);
+  }
+  ~VectorizerAutoPtr()
+  {
+    if(m_obj)
+    {
+      m_view.setVectThreadIndex(m_obj, false);
+      m_view.releaseVectorizer(m_obj);
+    }
+  }
+  OdGsBaseVectorizer* operator ->()
+  {
+    return static_cast<OdGsBaseVectorizer*>(m_obj);
+  }
+  
+  const OdGsBaseVectorizer* operator ->() const
+  {
+    return const_cast<const OdGsBaseVectorizer*>(m_obj);
+  }
+
+  const OdGsBaseVectorizer* get() const
+  {
+    return const_cast<const OdGsBaseVectorizer*>(m_obj);
+  }
+  
+  OdGsBaseVectorizer* get()
+  {
+    return static_cast<OdGsBaseVectorizer*>(m_obj);
+  }
+
+protected:
+  OdGsBaseVectorizeView& m_view;
+  OdGsBaseVectorizer* m_obj;
+};
+
+#include "TD_PackPop.h"
+
+#define IMPL_VECTORIZER_DEFAULT()\
+  virtual OdUInt32 numVectorizers() const { return 1; }\
+  virtual OdGsBaseVectorizer* getVectorizer(bool /*bDisplay*/)\
+  { return this; }\
+  virtual void releaseVectorizer(OdGsBaseVectorizer* pVect)\
+  {ODA_ASSERT(pVect == (OdGsBaseVectorizer*)this); }
+
+#define IMPL_VECTORIZER_DEFAULT_EX()\
+  IMPL_VECTORIZER_DEFAULT()\
+  virtual void clearLinetypeCache(){ OdGiBaseVectorizerImpl::clearLinetypeCache(); }\
+  ODRX_USING_HEAP_OPERATORS(OdGiBaseVectorizer);
+
+#endif // ODGSBASEVECTORIZEVIEW_INC
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizer.h
new file mode 100755
index 0000000..143f1b7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBaseVectorizer.h
@@ -0,0 +1,517 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_BASE_VECTORIZER_H_
+#define __OD_GS_BASE_VECTORIZER_H_
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsExport.h"
+#include "Gs/GiBaseVectorizerImpl.h"
+#include "Gs/GsExtAccum.h"
+#include "Gs/GsModel.h"
+#include "GsMarkerArray.h"
+#include "Gs/GsHighlightData.h"
+
+class OdGsBaseModel;
+class OdGsLayerNode;
+class OdGsUpdateContext;
+class OdGiSelectProc;
+class OdGsEntityNode;
+class OdGsBlockReferenceNode;
+class OdGsBlockReferenceNodeImpl;
+struct OdGsGeomPortion;
+class OdGsMaterialNode;
+class OdGsBaseVectorizer;
+
+class OdGsMtContext;
+class OdGsUpdateState;
+class OdGiSharedRefDesc;
+class OdGiHistory;
+class OdGiSectionGeometry;
+
+/** \details
+            
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsWriter
+{
+public:
+  OdGsWriter();
+
+  /** \details
+    Returns the accumulated extents when writing to the object.
+  */
+  OdGsExtAccum& extentsAccum()
+  {
+    return *m_pExtAccum.get();
+  }
+  OdGsBaseModel* gsModel() const { return m_pGsModel; }
+  
+  bool isRecordingMetafile() { return m_pGeomPortion != 0; }
+  void beginMetafileRecording(OdGsGeomPortion* pGeomPortion) { m_pGeomPortion = pGeomPortion; }
+  void endMetafileRecording();
+  void onNestedDrawable(OdDbStub* layerId);
+
+  bool isLayerFrozen(OdGsLayerNode *pLayerNode) const;
+private:
+  friend class OdGsBaseVectorizer;
+  void set(OdGsBaseVectorizer* v) { m_vectorizer = v; }
+  void onLayerModified(OdDbStub* layerId);
+  void onLayerModified(OdDbStub* layerId, bool bFrozen);
+  void onFrozenLayerModified(OdDbStub* layerId) const;
+
+public:
+  OdGsBaseModel* m_pGsModel;
+
+protected:
+  OdGsExtAccumPtr m_pExtAccum;
+  OdGsGeomPortion* m_pGeomPortion;
+  OdGsBaseVectorizer* m_vectorizer;
+};
+
+class OdGiPointLightTraitsData;
+class OdGiSpotLightTraitsData;
+class OdGiDistantLightTraitsData;
+class OdGiWebLightTraitsData;
+
+/** \details
+        
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseVectorizer: public OdGiBaseVectorizerImpl
+{
+public:
+  OdGsBaseVectorizer();
+
+protected:
+  ODRX_USING_HEAP_OPERATORS(OdGiBaseVectorizer);
+
+public:  
+#ifdef SWIG
+	virtual void draw(const OdGiDrawable* pDrawable) {draw(pDrawable);};
+#endif
+  /** OdGsBaseVectorizer methods *
+  */
+  OdGsWriter& gsWriter() { return m_gsWriter; }
+  const OdGsWriter& gsWriter() const { return m_gsWriter; }
+  OdGsExtAccum& gsExtentsAccum() { return gsWriter().extentsAccum(); }
+
+  /** \details
+    Creates a new GsMetafile (cache) object.
+    \remarks
+    Returns a SmartPointer to the newly created object.
+    
+    GsMetafiles are used to record vectorizations, and rapidly 'redraw' them to a display device. 
+
+    \sa
+    * beginMetafile
+    * endMetafile
+    * playMetafile    
+  */
+  virtual OdRxObjectPtr newGsMetafile();
+  /** \details
+    Begins vectorization to the specified GsMetafile (cache) object.
+    \param pMetafile [in]  Pointer to the GsMetafile.
+    \remarks
+    GsMetafiles are used to record vectorizations, and rapidly 'redraw' them to a display device. 
+    
+    \sa
+    * endMetafile
+    * newGsMetafile
+    * playMetafile    
+  */
+  virtual void beginMetafile(OdRxObject* pMetafile);
+  /** \details
+    Ends vectorization to the specified GsMetafile (cache) object.
+    \param pMetafile [in]  Pointer to the GsMetafile.
+    \remarks
+    GsMetafiles are used to record vectorizations, and rapidly 'redraw' them to a display device. 
+    
+    \sa
+    * beginMetafile    
+    * newGsMetafile
+    * playMetafile    
+  */
+  virtual void endMetafile(OdRxObject* pMetafile);
+
+  /** \details
+    Plays (redraws) the specified Metafile (cache) object.
+    \param pMetafile [in]  Pointer to the GsMetafile.
+    \remarks
+    GsMetafiles are used to record vectorizations, and rapidly 'redraw' them to a display device. 
+    \sa
+    * beginMetafile
+    * endMetafile
+    * newGsMetafile    
+  */
+  virtual void playMetafile(const OdRxObject* pMetafile);
+
+  /** \details
+    Stores the specified Metafile (cache) into OdGsFiler object.
+    \param pMetafile [in]  Pointer to the GsMetafile.
+    \param pFiler [in]  Pointer to the OdGsFiler object.
+  */
+  virtual bool saveMetafile(const OdRxObject* pMetafile, OdGsFiler *pFiler);
+  /** \details
+    Loads the Metafile (cache) from OdGsFiler object.
+    \param pFiler [in]  Pointer to the OdGsFiler object.
+  */
+  virtual OdRxObjectPtr loadMetafile(OdGsFiler *pFiler);
+
+  /** \details
+	This method can be called right after endMetafile() to check whether
+	last recorded metafile was empty and optimize stored data.
+  */
+  bool isMetafileEmpty() const { return m_bMetafileIsEmpty; }
+
+  /** \details
+    Sets viewport's common data before display() call.
+  */
+  virtual void loadViewport();
+
+  virtual bool forceMetafilesDependence() const;
+
+  virtual bool isViewRegenerated() const;
+
+  /** \details
+    Draws the frame for the viewport.
+  */
+  virtual void drawViewportFrame();
+  virtual void updateViewport();
+
+
+  // Materials support
+  virtual void processMaterialNode(OdDbStub *materialId, OdGsMaterialNode *pNode);
+  virtual bool saveMaterialCache(const OdGsMaterialNode *pNode, OdGsFiler *pFiler);
+  virtual bool loadMaterialCache(OdGsMaterialNode *pNode, OdGsFiler *pFiler);
+
+  virtual void addPointLight(const OdGiPointLightTraitsData&) {}
+  virtual void addSpotLight(const OdGiSpotLightTraitsData&) {}
+  virtual void addDistantLight(const OdGiDistantLightTraitsData&) {}
+  virtual void addWebLight(const OdGiWebLightTraitsData&); 
+  // default implementation call's addPointLight
+
+  ~OdGsBaseVectorizer();
+
+  /** OdGiGeometry Overrides *
+  */
+  void pushModelTransform(const OdGeMatrix3d& xfm);
+  void pushModelTransform(const OdGeVector3d& normal);
+  void popModelTransform();
+
+  void pushClipBoundary(OdGiClipBoundary* pBoundary);
+  void pushClipBoundary(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo);
+  void popClipBoundary();
+
+  /** OdGiBaseVectorizer Overrides *
+  */
+  virtual void setEntityTraitsDataChanged();
+  virtual void setEntityTraitsDataChanged(int bit, bool value = true);
+
+  /** OdGsBaseVectorizer methods *
+  */
+  bool disableInfiniteGeomExtents() const { return GETBIT(m_flags, kDisableInfiniteGeomExtents); }
+  bool sectionableGeomExtentsOnly() const { return GETBIT(m_flags, kSectionableGeomExtentsOnly); }
+  void setSectionableGeomExtentsOnly(bool bOn) { SETBIT(m_flags, kSectionableGeomExtentsOnly, bOn); }
+
+  /** \details
+	This method sets internal state flag indicating playing mode and calls
+	playMetafile(). The flag can be accessed via isPlayingMfAsGeometry(),
+	see below.
+  */
+  void playMetafileMode(const OdRxObject* pMetafile, EMetafilePlayMode eMode);
+  /** \details
+	This method returns internal state indicating metafile playing mode.
+  */
+  EMetafilePlayMode metafilePlayMode() const { return m_eMfPlayMode;  }
+
+  enum MetafileTransformFlags
+  {
+    kSharedRefTransform = (1 << 0),
+    kSharedRefUpdate    = (1 << 1),
+    kSharedRefSelect    = (1 << 2)
+  };
+  virtual void pushMetafileTransform(const OdGeMatrix3d&, OdUInt32 = 0){}
+  virtual void popMetafileTransform(OdUInt32 = 0){}
+
+  virtual bool useSharedBlockReferences() const { return true; }
+  virtual bool useMetafileAsGeometry() const { return false; }
+  virtual OdGiConveyorOutput& outputForMetafileGeometry();
+  virtual void setTransformForMetafileGeometry(const OdGeMatrix3d&) {}
+  virtual OdGeMatrix3d getTransformForMetafileGeometry() const { return OdGeMatrix3d::kIdentity; }
+  virtual void reportUpdateError(OdDbStub* /*entityId*/, const OdError& error)
+  {
+#ifdef ODA_DIAGNOSTICS
+    throw error;
+#else
+    ODA_ASSERT(error); // prevent arg unused warning
+#endif
+  }
+
+  OdGsLayerNode* gsLayerNode(OdDbStub* layerId, OdGsBaseModel* pModel);
+
+  /** \details
+	This method returns internal state indicating color fading mode.
+  */
+  inline bool isFaded() const;
+  inline OdUInt32 fadingIntensity() const;
+
+  inline bool isHighlighted() const;
+
+  inline bool isSelecting() const;
+
+  bool isDragging() const;
+
+  virtual OdGiConveyorOutput& gsExtentsOutput() { return secondaryOutput(); }
+
+  /** \details
+    Controls analytic linetype support for circles and circular arcs in this VectorizeView object. 
+
+    \param analytic [in]  Analytic linetype support.
+
+    \sa
+    Analytic Linetyping
+  */
+  virtual void setAnalyticLinetypingCircles(bool analytic);
+
+  /** \details
+    Returns true if and only if analytic linetype support for circles and circular arcs is
+    enabled in this VectorizeView object.
+
+    \sa
+    Analytic Linetyping
+  */
+  virtual bool isAnalyticLinetypingCircles() const;
+  
+  /** \details
+    Controls analytic linetype support for ellipses, elliptical curves, 
+    and NURBS curves in this VectorizeView object. 
+
+    \param analytic [in]  Analytic linetype support.
+    \sa
+    Analytic Linetyping
+  */
+  virtual void setAnalyticLinetypingComplexCurves(bool analytic);
+
+  /** \details
+    Returns true if and only if analytic linetype support for ellipses, elliptical curves, 
+    and NURBS curves is enabled in this VectorizeView object.
+
+    \sa
+    Analytic Linetyping
+  */
+  virtual bool isAnalyticLinetypingComplexCurves() const;
+
+//#ifdef GS_INEXACT_SELECTION
+  void checkSelection();
+//#endif
+
+  virtual bool displayViewportProperties(OdGsPropertiesDirectRenderOutput *pdro = NULL,
+      OdUInt32 incFlags = OdGsProperties::kAll);
+
+  /** \details
+    Returns the secondary output from this vectorizer object.
+  */
+  OdGiConveyorOutput& secondaryOutput();
+
+  /** OdGiBaseVectorizerImpl methods *
+  */
+  virtual void setUp(OdGsViewImpl& view);
+
+  /** OdGiBaseVectorizer methods *
+  */
+  virtual void beginViewVectorization();
+  virtual void endViewVectorization();
+  virtual void onTraitsModified();
+  virtual bool regenAbort() const;
+  virtual bool doDraw(OdUInt32 drawableFlags, const OdGiDrawable* pDrawable);
+  virtual void setSelectionMarker(OdGsMarker selectionMarker);
+  virtual OdGiConveyorOutput& output();
+  virtual void setVisualStyle(OdDbStub *visualStyleId);
+  virtual void setVisualStyle(const OdGiVisualStyle& visualStyle);
+
+  const OdGsMarkerArray* highlightedSubentities() const
+  { return m_pCurHltBr.get() && m_pCurHltBr->markers().size() ? &m_pCurHltBr->markers() : NULL; }
+  OdGsHlBranch* findHighlightedSubnodeBranch();
+  OdUInt32 threadIndex() const { return m_threadIndex; }
+
+  void highlight(bool bHighlight);
+  /** \details
+    Returns current highlighting data.
+  */
+  const OdGsHlBranch* currentHighlightBranch() const { return m_pCurHltBr; }
+
+  OdGsLayerNode *activeLayerNode(bool bSync = false) const
+  { if (bSync) updateLayerTraits(m_effectiveEntityTraitsData);
+    return m_effectiveLayer; }
+protected:
+  void doSelect(const OdGePoint2d* aPtDc, int numPoints,
+      OdGsSelectionReactor* pReactor, OdGsView::SelectionMode mode);
+  bool doViewExtents(OdGeBoundBlock3d& extents);
+  /** \details
+    Paints the display with each of the drawable objects associated with this VectorizeView object.
+    
+    \param update [in]  If and only if true, the cache is updated before displaying the drawable.
+     
+    \remarks
+    The display is painted for each drawable from one of the following methods in the following order.
+    
+    1.  Model cache. 
+    2.  The metafile for the drawable.
+    3.  The drawable itself.
+  */
+  virtual void display(bool bUpdate);
+  /** \details
+    Recomputes the extents for this VectorizeView object.
+    
+    \param buildCache [in]  Builds Metafile (cache) objects if and only if true.
+  */
+  virtual void updateExtents(bool bBuildCache);
+
+  /** OdGiBaseVectorizer methods *
+  */
+  virtual const OdGiLayerTraitsData& effectiveLayerTraits() const;
+  virtual OdDbStub* switchLayer(OdDbStub* layerId) const;
+
+  void selectionMarkerOnChange(OdGsMarker nSelectionMarker);
+
+  void checkRenderType(const OdGsModel *pModel);
+  virtual void renderTypeOnChange(OdGsModel::RenderType renderType);
+
+  void displayWithoutNesting(OdGsEntityNode *pNode);
+
+public:
+  void updateExtentsInThreadInit(OdGsMtContext& mtContext);
+
+private:
+  void setInitGsState(bool bOn);
+  bool isRecordingHistory();
+  void deleteHistory();
+  void setThreadIndex(OdUInt32 idx) { m_threadIndex = idx; }
+  bool drawSectionable(const OdGiDrawable& drawable, bool& bRes);
+  bool drawSectionGeometry(OdGiSectionGeometry& geom, bool bVpModelTfAwareBefore);
+  void setCurrentState(OdGsUpdateState& newState);
+  OdGsUpdateState* currentState() { return m_curState; }
+  const OdGsUpdateState* currentState() const { return m_curState; }
+  void applyState(const OdGsUpdateState& s, const OdGsUpdateState& prev);
+
+public:
+  OdGsHlBranchPtr m_pCurHltBr;
+protected:
+  bool m_bMetafileIsEmpty;
+  OdGsWriter m_gsWriter;
+  OdGiSelectProc* m_pSelectProc;
+  OdGiConveyorGeometry* m_pDetachedOutput;
+  OdGiConveyorGeometry* m_pDetachedSecondaryOutput;
+  EMetafilePlayMode m_eMfPlayMode;
+  OdGsUpdateState* m_curState;
+  OdGsModel::RenderType m_curRenderType;
+  OdIntPtr m_drawableFilterFunction;
+  // Fading support
+  enum FadingFlags
+  {
+    kFfLockedLayer       = (1 << 0),
+    kFfXref              = (1 << 1),
+    kFfRefEdit           = (1 << 2),
+    kFfFlagsMask         = kFfLockedLayer  | kFfXref  | kFfRefEdit,
+    kEFfLockedLayer      = (1 << 4),
+    kEFfXref             = (1 << 5),
+    kEFfRefEdit          = (1 << 6),
+    kEFfFlagsMask        = kEFfLockedLayer | kEFfXref | kEFfRefEdit,
+    kEFfFlagsOffset      = 4,
+    kFvLockedLayerOffset = 8,
+    kFvLockedLayerMask   = (0xFF << kFvLockedLayerOffset),
+    kFvXrefOffset        = 16,
+    kFvXrefMask          = (0xFF << kFvXrefOffset),
+    kFvRefEditOffset     = 24,
+    kFvRefEditMask       = (0xFF << kFvRefEditOffset)
+  };
+  OdUInt32 m_fadingFlags;
+  template <OdGiContext::FadingType fadingType> friend class OdGsLockFadingFlag;
+private:
+  mutable const OdGiLayerTraitsData* m_pCachedLayer;
+  OdGsLayerNode* m_effectiveLayer;
+  OdGsExtAccumPtr m_pOutputExtents;
+  OdGiHistory* m_giHistory;
+  OdUInt32 m_threadIndex;
+  bool m_bTraitsDataChanged;
+  bool m_bByBlockTraitsChanged;
+  friend class OdGsUpdateContext;
+  friend class OdGsDisplayContext;
+  friend class OdGsBaseVectorizeView;
+};
+
+template <OdGiContext::FadingType fadingType>
+class OdGsLockFadingFlag
+{
+  protected:
+    OdUInt32 &m_lockedFlags;
+    bool m_bSavedBit;
+  public:
+    OdGsLockFadingFlag(OdGsBaseVectorizer &vectorizer)
+      : m_lockedFlags(vectorizer.m_fadingFlags)
+      , m_bSavedBit(GETBIT(vectorizer.m_fadingFlags, 1 << fadingType))
+    {}
+    void set(bool bNewVal) { SETBIT(m_lockedFlags, 1 << fadingType, bNewVal); }
+    OdGsLockFadingFlag(OdGsBaseVectorizer &vectorizer, bool bNewVal)
+      : m_lockedFlags(vectorizer.m_fadingFlags)
+      , m_bSavedBit(GETBIT(vectorizer.m_fadingFlags, 1 << fadingType))
+    { set(bNewVal); }
+    ~OdGsLockFadingFlag() { set(m_bSavedBit); }
+};
+
+inline bool OdGsBaseVectorizer::isFaded() const
+{ // Returns true in case if any type of fading is 'true' and fading value is positive
+  return !!((m_fadingFlags & kFfFlagsMask) & ((m_fadingFlags & kEFfFlagsMask) >> kEFfFlagsOffset));
+}
+
+inline OdUInt32 OdGsBaseVectorizer::fadingIntensity() const
+{ // Returns percentage in [0-100] range
+  OdUInt32 nIntensityMix = 100;
+  if (GETBIT(m_fadingFlags, kFfLockedLayer) && GETBIT(m_fadingFlags, kEFfLockedLayer))
+    nIntensityMix = nIntensityMix * (100 - ((m_fadingFlags & kFvLockedLayerMask) >> kFvLockedLayerOffset)) / 100;
+  if (GETBIT(m_fadingFlags, kFfXref) && GETBIT(m_fadingFlags, kEFfXref))
+    nIntensityMix = nIntensityMix * (100 - ((m_fadingFlags & kFvXrefMask) >> kFvXrefOffset)) / 100;
+  if (GETBIT(m_fadingFlags, kFfRefEdit) && GETBIT(m_fadingFlags, kEFfRefEdit))
+    nIntensityMix = nIntensityMix * (100 - ((m_fadingFlags & kFvRefEditMask) >> kFvRefEditOffset)) / 100;
+  return 100 - nIntensityMix;
+}
+
+inline bool OdGsBaseVectorizer::isSelecting() const
+{
+    return m_pSelectProc != 0;
+}
+
+inline bool OdGsBaseVectorizer::isHighlighted() const
+{
+  return GETBIT(m_flags, kHighlighted);
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_BASE_VECTORIZER_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBitMap.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBitMap.h
new file mode 100755
index 0000000..4075713
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBitMap.h
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_GSBITMAP_H_
+#define _OD_GSBITMAP_H_
+
+#include "RxObject.h"
+#include "Gs/Gs.h"
+#include "OdStreamBuf.h"
+#include "SmartPtr.h"
+
+
+/** \details
+
+    <group OdGs_Classes> 
+*/
+class OdGsPalette : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsPalette);
+  OdGsPalette(){}
+
+  virtual OdUInt32 numColors() const = 0;
+  virtual void setNumColors(OdUInt32 nColors) = 0;
+  virtual void setColorAt(OdUInt32 nIndex, OdUInt8 blue, OdUInt8 green, OdUInt8 red, OdUInt8 alpha = 0) = 0;
+  virtual void colorAt(OdUInt32 nIndex, OdUInt8& blue, OdUInt8& green, OdUInt8& red, OdUInt8* pAlpha = 0) const = 0;
+  virtual void setColors(OdUInt32 nColors, const ODCOLORREF* pColors);
+  virtual void getColors(OdUInt32 nColors, ODCOLORREF* pColors) const;
+};
+
+typedef OdSmartPtr<OdGsPalette> OdGsPalettePtr;
+
+
+/** \details
+
+    <group OdGs_Classes> 
+*/
+class OdGsBitMap : public OdRxObject
+{
+protected:
+  OdGsBitMap() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdGsBitMap);
+
+  virtual OdUInt32 width() const = 0;
+  virtual OdUInt32 height() const = 0;
+  virtual OdUInt8 bitPerPixel() const = 0;
+  virtual void create(OdUInt32 width, OdUInt32 height, OdUInt8 bitCount) = 0;
+
+  virtual OdUInt32 bitDataSize() const;
+  virtual OdUInt32 bytePerLine() const;
+  virtual const OdUInt8* bits() const = 0;
+  virtual void setBits(const OdUInt8* pData, OdUInt32 nSize) = 0;
+
+  virtual OdGsPalette* palette() = 0;
+  virtual const OdGsPalette* palette() const = 0;
+};
+
+typedef OdSmartPtr<OdGsBitMap> OdGsBitMapPtr;
+
+#endif //_OD_GSBITMAP_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockNode.h
new file mode 100755
index 0000000..465876c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockNode.h
@@ -0,0 +1,379 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_BLOCK_NODE__
+#define __OD_GS_BLOCK_NODE__
+
+#include "TD_PackPush.h"
+
+#include "GsBlockReferenceNode.h"
+#include "Ge/GeScale3d.h"
+#include "Gi/GiSubEntityTraitsData.h"
+#include "Gi/GiAnnoScaleSet.h"
+#define STL_USING_SET
+#define STL_USING_MAP
+#include "OdaSTL.h"
+#include "ThreadsCounter.h"
+
+class OdGsSharedRefDefinition;
+class OdGsReferenceImpl;
+
+/** \details
+
+    Library: Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBlockRefNodeDescMem
+{
+public:
+  OdGsBlockRefNodeDescMem(const OdDbStub* layoutBlockId, const OdGiSubEntityTraitsData& tr,
+    const OdGeScale3d& scale, bool bUsePlotStyles):
+      m_layoutBlockId(layoutBlockId),
+      m_layerId(tr.layer())
+    , m_lineTypeId(tr.lineType())
+    , m_cmColor(tr.trueColor().color())
+    , m_lineWeight(tr.lineWeight())
+    , m_lineTypeScale(tr.lineTypeScale())
+    , m_plotStyleNameType(bUsePlotStyles ? tr.plotStyleNameType() : OdDb::kPlotStyleNameIsDictDefault)
+    , m_plotStyleNameId(bUsePlotStyles ? tr.plotStyleNameId() : NULL)
+    , m_materialId(tr.material()), m_cmTransparency(tr.transparency().serializeOut())
+    , m_scale(scale)
+  {
+  }
+  OdGsBlockRefNodeDescMem(const OdGsBlockRefNodeDescMem& c)
+  {
+    ::memcpy(this, &c, sizeof(OdGsBlockRefNodeDescMem));
+  }
+  OdGsBlockRefNodeDescMem(){ ::memset(this, 0, sizeof(OdGsBlockRefNodeDescMem)); }
+
+protected:
+  bool lessOrEqual(const OdGsBlockRefNodeDescMem& v, bool& bEqual) const;
+
+public:
+  const OdDbStub* m_layoutBlockId;
+  OdDbStub* m_layerId;
+  OdDbStub* m_lineTypeId;
+  OdUInt32 m_cmColor;
+  OdDb::LineWeight m_lineWeight;
+  double m_lineTypeScale;
+
+  OdDb::PlotStyleNameType m_plotStyleNameType;
+  OdDbStub* m_plotStyleNameId;
+
+  OdDbStub* m_materialId;
+  OdUInt32 m_cmTransparency;
+
+  OdGeScale3d m_scale;
+};
+
+/** \details
+
+    Library: Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBlockRefNodeDesc: public OdGsBlockRefNodeDescMem
+{
+public:
+  OdGsBlockRefNodeDesc(const OdDbStub* layoutBlockId, const OdGiSubEntityTraitsData& tr,
+    const OdGeScale3d& scale, bool bUsePlotStyles, const OdGiAnnoScaleSet& annoScales):
+    OdGsBlockRefNodeDescMem(layoutBlockId, tr, scale, bUsePlotStyles), m_annoScales(annoScales)
+  {
+  }
+  OdGsBlockRefNodeDesc(const OdGsBlockRefNodeDesc& c): OdGsBlockRefNodeDescMem(c), m_annoScales(c.m_annoScales)
+  {
+  }
+  OdGsBlockRefNodeDesc(){}
+
+  bool operator < (const OdGsBlockRefNodeDesc& v) const
+  {
+    bool bEqual = false;
+    if(lessOrEqual(v, bEqual) && !bEqual)
+      return true;
+    return bEqual ? m_annoScales < v.m_annoScales : false;
+  }
+public:
+  OdGiAnnoScaleSet m_annoScales;
+};
+
+/** \details
+
+    Library: Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBlockNode: public OdGsNode
+{
+protected:
+  enum
+  {
+    kUnloaded   = OdGsNode::kLastFlag << 1,
+    kLastFlag   = kUnloaded
+  };
+public:
+  enum
+  {
+    kInvalidateRefExtentsMask = (kVpLastPropBit << 1)
+	//NS: use this mask in invalidate() to invalidate extents of corresponding
+	//references when block is modified
+  };
+
+  ODRX_DECLARE_MEMBERS(OdGsBlockNode);
+
+  OdGsBlockNode(OdGsBaseModel* pModel, const OdGiDrawable* pUnderlyingDrawable,
+    bool bSetGsNode): OdGsNode(pModel, pUnderlyingDrawable), m_bModelTfDependent(0)
+  {
+    if(bSetGsNode)
+      setToDrawable(pUnderlyingDrawable);
+  }
+  ~OdGsBlockNode()
+  {
+    if (isUnloaded())
+    {
+      // this block-node corresponds to block in xreffed db;
+      // here db can be unloaded, so prevent access to the associated block table record.
+      SETBIT(m_flags, kSyncDrawable, false);
+    }
+    clearInserts();
+  }
+
+  void setUnloaded(bool isUnloaded);
+  bool isUnloaded() const;
+  void setModelTfDependent(bool bOn);
+  bool isModelTfDependent() const;
+
+  virtual ENodeType nodeType() const { return kBlockNode; }
+
+  void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* view, OdUInt32 mask);
+
+  void addRef(OdGsBlockReferenceNode* pEntity)
+  {
+    if(odThreadsCounter())
+    {
+      TD_AUTOLOCK_P(m_insertsMt.get());
+      m_inserts.insert(pEntity);
+    }
+    else
+    {
+      m_inserts.insert(pEntity);
+    }
+  }
+
+  void release(OdGsBlockReferenceNode* pEntity)
+  {
+    TD_AUTOLOCK_P_DEF(m_insertsMt);
+    m_inserts.erase(pEntity);
+    if(!isUnloaded() || !m_inserts.empty())
+      return;
+    // this block-node corresponds to block in xreffed db;
+    // here db can be unloaded, so prevent access to the associated block table record.
+    SETBIT(m_flags, kSyncDrawable, false);
+    baseModel()->detach(this);
+  }
+
+  /** \details
+    Updates the cached data within this Node object for the specified VectorizeView and ContainerNode objects. 
+    \param pParent [in]  Pointer to the ContainerNode object for this Node object.
+    \param view [in]  VectorizeView object for which data are to be updated.
+  */
+  void update(OdGsUpdateContext&, OdGsContainerNode*, OdSiSpatialIndex*)
+  {
+    ODA_ASSERT(false);
+  }
+
+  /** \details
+    Paints the specified view with the cached data associated with this Node object.
+    \param view [in]  View to be painted.
+  */
+  void display(OdGsDisplayContext&)
+  {
+    ODA_ASSERT(false);
+  }
+
+  /** \details
+    Returns the extents of the underlying GiDrawable object(s) associated with this Node object.
+    
+    \param extents [out]  Receives the extents.
+    
+    \remarks
+    Returns true if and only if the GiDrawable object(s) have extents.
+  */
+  bool extents(OdGeExtents3d&) const
+  {
+    ODA_ASSERT(false);
+    return false;
+  }
+
+  /** \details
+    Invalidates parts of cache depended on layers modified since last regeneration.
+    
+    \remarks
+    For internal use only.
+    Returns this if and only if the this node is one of modified layers.
+  */
+  virtual void propagateLayerChanges(OdGsViewImpl& /*view*/);
+
+  void destroy();
+
+  void invalidateShared()
+  {
+    m_sharedImp.destroy();
+  }
+
+  OdGsSharedRefDefinition* createDef(const OdGsBlockRefNodeDesc& d);
+  OdGsSharedRefDefinition* findCreateDef(const OdGsBlockRefNodeDesc& d)
+  {
+    if(odThreadsCounter())
+    {
+      TD_AUTOLOCK_P(m_sharedMt.get());
+      OdGsSharedRefDefinition* pRes = m_sharedImp.findAt(d);
+      return pRes ? pRes : createDef(d);
+    }
+    OdGsSharedRefDefinition* pRes = m_sharedImp.findAt(d);
+    return pRes ? pRes : createDef(d);
+  }
+
+  void invalidateSharedSubents(OdUInt32 vpID, OdUInt32 nViewChanges);
+
+  void invalidateSharedRegenDraw(OdUInt32 vpID, const OdDbStub* layoutId);
+  void invalidateSharedSectionable();
+  void invalidateSharedAwareFlags(OdGsViewImpl* pView, OdUInt32 nViewChanges, const OdDbStub* layoutId);
+
+  void removeDef(OdGsSharedRefDefinition* pDef)
+  {
+    if(odThreadsCounter())
+    {
+      TD_AUTOLOCK_P(m_sharedMt.get());
+      m_sharedImp.removeDef(pDef);
+    }
+    else
+    {
+      m_sharedImp.removeDef(pDef);
+    }
+  }
+  bool findDef(OdGsSharedRefDefinition* pDef, OdGsBlockRefNodeDesc& d)
+  {
+    if(odThreadsCounter())
+    {
+      TD_AUTOLOCK_P(m_sharedMt.get());
+      return m_sharedImp.findDef(pDef, d);
+    }
+    return m_sharedImp.findDef(pDef, d);
+  }
+
+  bool saveNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL) const;
+  bool loadNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL);
+  bool postprocessNodeLoading(OdGsFiler *pFiler);
+
+protected:
+  void clearInserts();
+
+protected:
+  class GS_TOOLKIT_EXPORT ImpMap
+  {
+  public:
+    ~ImpMap() { clear(); }
+    void clear();
+    void destroy();
+    OdGsSharedRefDefinition* findAt(const OdGsBlockRefNodeDesc& d)
+    {
+      _map::iterator it = m_map.find(d);
+      return (it == m_map.end() ? NULL : it->second);
+    }
+    OdGsSharedRefDefinition* insertAt(const OdGsBlockRefNodeDesc& d,
+        OdGsReferenceImpl* pImp);
+    bool layersChanged(OdGsViewImpl& view, OdGsBaseModel* pModel);
+    void invalidateSubents(OdUInt32 vpID, OdUInt32 nViewChanges);
+    void invalidateRegenDraw(OdUInt32 vpID, const OdDbStub* layoutId);
+    void removeDef(OdGsSharedRefDefinition* pDef);
+    bool findDef(OdGsSharedRefDefinition* pDef, OdGsBlockRefNodeDesc& d);
+    void invalidateSectionable();
+#ifndef ODGS_LOCAL_IDS
+    void invalidateAwareFlags(OdGsViewImpl* pView, OdUInt32 nViewChanges, const OdDbStub* layoutId);
+#else
+    void invalidateAwareFlags(OdGsViewImpl* pView, OdUInt32 nViewChanges, const OdDbStub* layoutId, OdGsBaseModel* pModel);
+#endif
+    void propagateLayerChangesStock();
+
+  public:
+    typedef std::map<OdGsBlockRefNodeDesc, OdGsSharedRefDefinition*,
+        std::less<OdGsBlockRefNodeDesc> > _map;
+    _map m_map;
+  };
+
+protected:
+  typedef std::set<OdGsBlockReferenceNode*> Inserts;
+  typedef Inserts::iterator InsertIterator;
+  Inserts m_inserts;
+  ImpMap m_sharedImp;
+  OdMutexPtr m_sharedMt;
+  OdMutexPtr m_insertsMt;
+  volatile int m_bModelTfDependent;
+};
+
+inline void OdGsBlockNode::setUnloaded(bool isUnloaded)
+{
+  SETBIT(m_flags, kUnloaded, isUnloaded);
+}
+
+inline bool OdGsBlockNode::isUnloaded() const
+{
+  return GETBIT(m_flags, kUnloaded);
+}
+
+inline void OdGsBlockNode::setModelTfDependent(bool bOn)
+{
+  if(isModelTfDependent() == bOn)
+      return;
+#ifndef TD_SINGLE_THREAD
+  OdInterlockedExchangeAdd(&m_bModelTfDependent, bOn ? 1 : -1);
+#else
+  m_bModelTfDependent = bOn;
+#endif
+  if(bOn)
+  {
+    //don't keep content of m_sharedImp anymore. These definitions remain 
+    //on inserts, if any, and will be released in the course of their update()
+    if(odThreadsCounter())
+    {
+      TD_AUTOLOCK_P(m_sharedMt.get());
+      m_sharedImp.clear();
+    }
+    else
+    {
+      m_sharedImp.clear();
+    }
+  }
+}
+
+inline bool OdGsBlockNode::isModelTfDependent() const
+{
+  //atomic function is required, called in MT mode (update)
+#ifndef TD_SINGLE_THREAD
+  return OdInterlockedExchangeAdd(&const_cast<OdGsBlockNode*>(this)->m_bModelTfDependent, 0) != 0;
+#else
+  return m_bModelTfDependent;
+#endif
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_BLOCK_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockReferenceNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockReferenceNode.h
new file mode 100755
index 0000000..804b2dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsBlockReferenceNode.h
@@ -0,0 +1,488 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_BLOCKREFERENCE_NODE__
+#define __OD_GS_BLOCKREFERENCE_NODE__
+
+#include "TD_PackPush.h"
+
+#include "GsEntityNode.h"
+#include "OdVector.h"
+
+class OdGsSpQueryContext;
+
+/** \details
+        
+    Library: TD_SpatialIndex
+
+    <group OdSi_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdSiRecursiveVisitor : public OdSiVisitor
+{
+public:
+  OdSiRecursiveVisitor(): m_pQuery(NULL), m_worldToNode(NULL), m_nodeToWorld(NULL),
+      m_worldToModel(NULL), m_modelToWorld(NULL){}
+
+  const OdSiShape* query() const { return m_pQuery; }
+  void resetQuery(const OdSiShape* pQuery) { m_pQuery = pQuery; }
+
+  const OdGeMatrix3d* worldToNode() const { return m_worldToNode; }
+  void setWorldToNode(const OdGeMatrix3d* tf) { m_worldToNode = tf; }
+  const OdGeMatrix3d* nodeToWorld() const { return m_nodeToWorld; }
+  void setNodeToWorld(const OdGeMatrix3d* tf) { m_nodeToWorld = tf; }
+  const OdGeMatrix3d* worldToModel() const { return m_worldToModel; }
+  void setWorldToModel(const OdGeMatrix3d* tf) { m_worldToModel = tf; }
+  const OdGeMatrix3d* modelToWorld() const { return m_modelToWorld; }
+  void setModelToWorld(const OdGeMatrix3d* tf) { m_modelToWorld = tf; }
+
+protected:
+  const OdSiShape* m_pQuery;
+  const OdGeMatrix3d* m_worldToNode;
+  const OdGeMatrix3d* m_nodeToWorld;
+  const OdGeMatrix3d* m_worldToModel;
+  const OdGeMatrix3d* m_modelToWorld;
+};
+
+typedef OdSiRecursiveVisitor OdSiSelBaseVisitor;
+
+/** \details
+        
+    Library: TD_SpatialIndex
+
+    <group OdSi_Classes> 
+*/
+class OdSiRecursiveVisitorTf
+{
+public:
+  OdSiRecursiveVisitorTf(OdSiRecursiveVisitor& v, const OdGeMatrix3d& mat);
+  ~OdSiRecursiveVisitorTf();
+  operator OdSiRecursiveVisitor*() { return &m_visitor; }
+
+protected:
+  OdSiRecursiveVisitor& m_visitor;
+private:
+  const OdSiShape* m_prevQuery;
+  std::auto_ptr<OdSiShape> m_transformedQuery;
+};
+typedef OdSiRecursiveVisitorTf OdSiSelectVisitorTf;
+
+/** \details
+        
+  Library: TD_SpatialIndex
+
+  <group OdSi_Classes> 
+*/
+class OdGsSpQueryContextTf: public OdSiRecursiveVisitorTf
+{
+public:
+  OdGsSpQueryContextTf(OdSiRecursiveVisitor& v, const OdGeMatrix3d& objectTf, const OdGeMatrix3d& objectTfInv,
+      const OdGeScale3d& scale);
+  ~OdGsSpQueryContextTf();
+
+protected:
+  OdGeMatrix3d m_nodeToWorld;
+  OdGeMatrix3d m_worldToNode;
+  const OdGeMatrix3d* m_prevNodeToWorld;
+  const OdGeMatrix3d* m_prevWorldToNode;
+  OdGeMatrix3d m_modelToWorld;
+  OdGeMatrix3d m_worldToModel;
+  const OdGeMatrix3d* m_prevModelToWorld;
+  const OdGeMatrix3d* m_prevWorldToModel;
+};
+
+// forward declarations
+class OdGsBlockReferenceNodeImpl;
+class OdGsBlockNode;
+class WorldDrawBlockRef;
+class OdGsUpdateState;
+
+/** \details
+    This class is a service class for handling of viewport aware flags array.
+    
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsAwareFlagsArray
+{
+public:
+  OdGsAwareFlagsArray(){}
+  enum
+  {
+    kChildrenNotUpToDate = 0x80000000
+  };
+  void setChildrenUpToDate(bool childrenUpToDate, const OdUInt32 nVpID);
+  bool childrenUpToDate(OdUInt32 nVpID) const;
+  OdUInt32 get(OdUInt32 nVpID) const;
+  void set(OdUInt32 nVpID, OdUInt32 flags);
+  void clear() { m_vpAwareFlags.clear(); }
+  bool isEmpty() const { return m_vpAwareFlags.isEmpty(); }
+  OdUInt32 numAwareFlags() const { return m_vpAwareFlags.size(); }
+  bool areInvalid(OdUInt32 nVpID) const;
+
+protected:
+  bool findFlag(OdUInt32 nVpID) const
+  { return nVpID < m_vpAwareFlags.size(); }
+
+private:
+  // viewport aware flags
+  OdUInt32Vector m_vpAwareFlags;
+};
+
+/** \details
+    This class is the base class for implementation of GS reference nodes.
+    Derivatives of this class implement different model of storing referenced objects.
+
+    Library: Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBlockReferenceNodeImpl
+{
+public:
+  OdGsBlockReferenceNodeImpl();
+  void* operator new(size_t);
+  void  operator delete(void*);
+
+  void addRef()
+  {
+    ++m_nRefCounter;
+  }
+  void release()
+  {
+	ODA_ASSERT((m_nRefCounter > 0));
+	if (!(--m_nRefCounter))
+      delete this;
+  }
+  long numRefs() const { return m_nRefCounter; }
+
+  // Main methods, used for OdGsNode interface implementation
+
+  //pBlock can be NULL.
+  //If is not NULL only when it is passed directly from the function where the drawable is open.
+  //If it is NULL and it is required then use blockNode.underlyingDrawable() 
+  virtual void updateSubitems(OdGsUpdateContext& ctx,
+      OdGsBlockNode& blockNode, const OdGiDrawable* pBlock) = 0;
+  virtual void display(OdGsDisplayContext& ctx, bool isHighlightedAll) = 0;
+
+  //NS: following methods return true if operation succeded (invalidation
+  //or destroying leave the object valid). If they return false, it means that
+  //OdGsNode should release the instance and recreate m_pImpl.
+  virtual bool invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView,
+	  OdUInt32 mask) = 0;
+  virtual bool destroy() = 0;
+  virtual bool destroySubitems() = 0;
+
+  virtual bool select(OdGsBaseVectorizer& view, OdSiSelBaseVisitor* pVisitor,
+	  bool bHasExtents, OdGsView::SelectionMode mode) = 0;
+  virtual void highlight(bool bDoIt, bool bWholeBranch) = 0;
+  // Methods for traversing internal subitems
+  virtual OdGsEntityNode* firstEntity() = 0;
+  virtual void playAsGeometry(OdGsBaseVectorizer& view, EMetafilePlayMode eMode) = 0;
+  virtual bool isSharedReference() const { return false; }
+  virtual bool isSharedDefinition() const { return false; }
+  virtual bool layersChanged(OdGsViewImpl& view) const;
+
+  virtual void makeStock() = 0;
+  virtual void releaseStock() = 0;
+  virtual void propagateLayerChangesStock() = 0;
+  virtual void doSpatialQuery(OdGsSpQueryContext& ctx) = 0;
+
+  virtual bool saveNodeImplState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer) const = 0;
+  virtual bool loadNodeImplState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer, OdGsBaseModel *pModel) = 0;
+  virtual void postprocessNodeImplLoading(OdGsFiler * /*pFiler*/) { }
+protected:
+  virtual ~OdGsBlockReferenceNodeImpl();
+
+protected:
+  OdRefCounter m_nRefCounter;
+};
+
+/** \details
+        
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBlockReferenceNode: public OdGsEntityNode,
+	protected OdGsAwareFlagsArray
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsBlockReferenceNode);
+  
+  OdGsBlockReferenceNode(OdGsBaseModel* pModel, const OdGiDrawable* pDrawable, bool bSetGsNode = false);
+public:
+  ~OdGsBlockReferenceNode();
+  
+  // additional flags for processing of inserts
+  enum
+  {
+    kValid                = OdGsEntityNode::kLastFlag << 1,
+    kBrExcludeFromViewExt = OdGsEntityNode::kLastFlag << 2,
+    kBrClipped            = OdGsEntityNode::kLastFlag << 3,
+    kLastFlag             = kBrClipped
+  };
+  
+  bool isValid() const { return GETBIT(m_flags, kValid); }
+  void setValid(bool bSet) { SETBIT(m_flags, kValid, bSet); }
+  bool excludeFromViewExt() const { return GETBIT(m_flags, kBrExcludeFromViewExt); }
+  void setExcludeFromViewExt(bool bSet) { SETBIT(m_flags, kBrExcludeFromViewExt, bSet); }
+
+  virtual bool isReference() const { return true; }
+  virtual bool layersChanged(OdGsViewImpl& view) const;
+  // implementation of OdGsEntityNode interface:
+  virtual void update(OdGsUpdateContext& ctx, OdGsContainerNode* pParent,
+      OdSiSpatialIndex* pParentIndex);
+  virtual void propagateLayerChanges(OdGsViewImpl& view);
+
+  virtual void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask);
+  virtual void destroy();
+  virtual void destroySubitems();
+
+  virtual bool select(OdGsBaseVectorizer& view, OdSiSelBaseVisitor*,
+    OdGsView::SelectionMode mode);
+
+  /** \details
+  Add/release counter of highlighted children of the node, and set kHLT/kHLT_All flags if necessary
+  \param nSubnodes [in]  number of subnodes
+  \param bHighlight [in]  if true then highlight else unhighlight
+  \param bAll [in]  if true then consider kHLT_All flag
+  Returns true if and only if highlighting of the child caused changing of kHLT flag on the container.
+  */
+  bool highlightSubnodes(OdUInt32 nSubnodes, bool bHighlight, bool bAll);
+  
+  /** \details
+      Returns the Aware flags for the specified Viewport for object.
+      \param viewportId [in]  Viewport ID. 
+  */
+   virtual OdUInt32 awareFlags(OdUInt32 viewportId) const;
+
+  /** \details
+  Check Aware flags for the specified Viewport and return true if flags are invalid,
+  i.e. cannot be used for determining awareness of the node about view properties.
+  \param viewportId [in]  Viewport ID. 
+  */
+   virtual bool awareFlagsAreInvalid(OdUInt32 viewportId) const;
+  
+  /** \details
+      Returns true if the node has no graphical content.
+  */
+  virtual bool isEmpty();
+
+  virtual OdGsEntityNode* firstEntity();
+  virtual OdGsEntityNode* firstAttrib() { return m_pFirstAttrib; }
+  void updateImpl(OdGsUpdateContext& ctx, const OdGiDrawable* pInsert,
+      OdSiSpatialIndex* pParentIndex);
+  
+  OdGsBlockNode* blockNode() const { return m_pBlockNode; }
+  void clearBlockNode();
+
+  virtual void makeStock();
+  virtual void releaseStock();
+  virtual void propagateLayerChangesStock();
+  void updateBlockNode(const OdGiDrawable* pBlockTableRecord);
+  //For testing purposes
+  void* sharedDefinition();
+  virtual bool isMInsert() const { return false; }
+  static OdGsBlockReferenceNode* create(OdGsBaseModel* pModel, const OdGiDrawable* pDrawable);
+  virtual void doDisplay(OdGsDisplayContext& ctx);
+  virtual bool doSelect(OdGsBaseVectorizer& vect, OdGiDrawable* pDrw,
+      OdSiSelBaseVisitor* pVisitor, OdGsView::SelectionMode mode);
+
+  virtual void spatialQuery(const OdGsView& view, OdSiRecursiveVisitor* pVisitor);
+
+protected:
+  virtual void setChildrenUpToDate(bool childrenUpToDate, const OdUInt32 nVpID);
+  virtual bool childrenUpToDate(OdUInt32 nVpID) const;
+  virtual bool childrenRegenDraw(OdUInt32 nVpID) const;
+  void updateAttribute(OdGsUpdateContext& ctx, OdGsEntityNode* pNode,
+      const OdGiDrawable* pInsert, OdGsMarker marker);
+  // Tool methods
+  void setAwareFlags(OdUInt32 viewportId, OdUInt32 nAwareFlags);
+  virtual void playAsGeometry(OdGsBaseVectorizer& view, EMetafilePlayMode eMode);
+  void initBlockNode(const OdGiDrawable* pBlock);
+  void setMetafile(OdGsUpdateContext& ctx, OdGsEntityNode::Metafile* pMf,
+      OdUInt32 awareFlags, const OdGeExtents3d& ext);
+  bool needRegen(OdUInt32 nVpID) const
+  {
+    if(!childrenUpToDate(nVpID))
+        return true;
+    OdUInt32 nAF = awareFlags(nVpID);
+    if( nAF == 0xFFFFFFFF || (baseModel()->viewChanges(nVpID) & nAF) != 0 )
+    {
+      const_cast<OdGsBlockReferenceNode*>(this)->setChildrenUpToDate(false, nVpID);
+      return true;
+    }
+    return false;
+  }
+  virtual void doUpdateImpl(OdGsUpdateContext& ctx, const OdGiDrawable* pBlockTableRecord, unsigned iInstance);
+  void drawBlock(OdGsUpdateContext& ctx, const OdGiDrawable* pBlockTableRecord,
+      OdGsBlockReferenceNodeImpl* pContainer,
+      bool bEnableSharedGraphics);
+  void postUpdateStep(OdGsUpdateState& state);
+  void addEntPropsFromState(const OdGsUpdateState& state);
+  void checkCancelledSharedRef(OdGsUpdateState& state);
+  static void actionPostUpdateStep(void* pObj, OdGsUpdateState& state);
+  static void actionAddEntPropsFromState(void* pObj, OdGsUpdateState& state);
+  static void actionCheckCancelledSharedRef(void* pObj, OdGsUpdateState& state);
+  static void actionRestartLocked(void* pObj, OdGsUpdateContext& ctx);
+  virtual void doSpatialQuery(OdGsSpQueryContext& ctx);
+
+  bool saveClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer) const;
+  bool loadClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer);
+  bool postprocessNodeLoading(OdGsFiler *pFiler);
+private:
+  void createImpl(const OdGsUpdateContext& ctx, bool bTryShared);
+  void drawBlockImpl(OdGsUpdateContext& ctx, const OdGiDrawable* pBlockTableRecord,
+      OdGsBlockReferenceNodeImpl* pContainer,
+      bool bEnableSharedGraphics);
+
+  bool isAProxy(OdGiDrawable *pDrw, const OdGiContext *pCtx = NULL) const;
+protected:
+  // Pointer to implementation object
+  TPtr<OdGsBlockReferenceNodeImpl> m_pImpl;
+  // Pointer to the node, corresponding to the block table record  
+  OdGsBlockNode* m_pBlockNode;
+  // list of attributes
+  OdGsEntityNode* m_pFirstAttrib;
+
+  friend class WorldDrawBlockRef;
+  friend class GsDrawableNested;
+  friend class OdGsSpQueryContext;
+};
+
+/** \details
+            
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsMInsertBlockNode: public OdGsBlockReferenceNode
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsMInsertBlockNode);
+  OdGsMInsertBlockNode(OdGsBaseModel* pModel, const OdGiDrawable* pInsert, bool bSetGsNode = false);
+public:
+  ~OdGsMInsertBlockNode();
+
+  virtual void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask);
+  virtual void destroy();
+  virtual void destroySubitems();
+
+  virtual void highlight(bool bDoIt, bool bWholeBranch);
+
+  virtual OdGsEntityNode* firstEntity();
+  virtual OdGsEntityNode* firstAttrib();
+  virtual bool layersChanged(OdGsViewImpl& view) const;
+  virtual void playAsGeometry(OdGsBaseVectorizer& view, EMetafilePlayMode eMode);
+
+  virtual void makeStock();
+  virtual void releaseStock();
+  virtual void propagateLayerChangesStock();
+  virtual bool isMInsert() const { return true; }
+  virtual void doUpdateImpl(OdGsUpdateContext& ctx,
+    const OdGiDrawable* pBlockTableRecord, unsigned iInstance);
+  OdGsEntityNode*& firstAttrib(unsigned iInstance) { return item(iInstance)->m_pFirstAttrib; }
+  void stretchExtents();
+  void setParams(const OdGeMatrix3d& blockTf, int nCols, int nRows, double sx, double sy)
+  {
+    m_blockTf = blockTf;
+    m_nCols = nCols;
+    m_nRows = nRows;
+    m_sx = sx;
+    m_sy = sy;
+  }
+  static void actionStretchExtents(void* pObj, OdGsUpdateState& state);
+  virtual void doDisplay(OdGsDisplayContext& ctx);
+  virtual bool doSelect(OdGsBaseVectorizer& vect, OdGiDrawable* pDrw,
+      OdSiSelBaseVisitor* pVisitor, OdGsView::SelectionMode mode);
+
+protected:
+  void destroyCollection();
+
+  bool selectSubitems(OdGsBaseVectorizer& view,
+	  OdSiSelBaseVisitor* pVisitor, OdGsView::SelectionMode mode);
+  bool selectAttributes(OdGsBaseVectorizer& view);
+
+protected:
+  class GS_TOOLKIT_EXPORT CollectionItem
+  {
+  public:
+    CollectionItem() : m_nodeImp(0), m_pFirstAttrib(0) { }
+    CollectionItem(const CollectionItem& c):
+    m_nodeImp(c.m_nodeImp), m_pFirstAttrib(c.m_pFirstAttrib){}
+    void copyFrom(const CollectionItem& c);
+
+    OdGsBlockReferenceNodeImpl* imp() { return m_nodeImp; }
+    const OdGsBlockReferenceNodeImpl* imp() const { return m_nodeImp; }
+    OdGsEntityNode* firstAttrib() { return m_pFirstAttrib; }
+    const OdGsEntityNode* firstAttrib() const { return m_pFirstAttrib; }
+
+  public:
+    TPtr<OdGsBlockReferenceNodeImpl> m_nodeImp;
+    OdGsEntityNode* m_pFirstAttrib;
+
+    bool operator ==(const CollectionItem &it2) const
+    {
+      return (m_nodeImp == it2.m_nodeImp) && (m_pFirstAttrib == it2.m_pFirstAttrib);
+    }
+    bool operator !=(const CollectionItem &it2) const
+    {
+      return (m_nodeImp != it2.m_nodeImp) || (m_pFirstAttrib != it2.m_pFirstAttrib);
+    }
+  };
+  class GS_TOOLKIT_EXPORT Collection: public OdArray<CollectionItem>
+  {
+  public:
+    Collection(): OdArray<CollectionItem>(){}
+    Collection(const Collection& c);
+    ~Collection();
+  };
+protected:
+  OdGsBlockReferenceNodeImpl* getImpl(unsigned iInstance) { return item(iInstance)->m_nodeImp; }
+  CollectionItem* item(unsigned iInstance);
+  void clearParams() {m_nCols = m_nRows = 0; m_sx = m_sy = 0.; m_blockTf.setToIdentity(); }
+
+  bool saveClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer) const;
+  bool loadClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer);
+  bool postprocessNodeLoading(OdGsFiler *pFiler);
+protected:
+  // Collection of implementation objects, representing clipped MINSERT.
+  // (If MINSERT is not clipped, it's represented by only implementation 
+  // object OdGsBlockReferenceNode::m_pImpl)
+  Collection* m_pCollectionImpl;
+  OdGeMatrix3d m_xModelToWorld;
+  OdGeMatrix3d m_blockTf;
+  int m_nCols;
+  int m_nRows;
+  double m_sx;
+  double m_sy;
+};
+
+inline void OdGsBlockReferenceNode::clearBlockNode()
+{
+  m_pBlockNode = 0;
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_REFERENCE_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsContainerNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsContainerNode.h
new file mode 100755
index 0000000..fb91083
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsContainerNode.h
@@ -0,0 +1,708 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_CONTAINER_NODE__
+#define __OD_GS_CONTAINER_NODE__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsNode.h"
+#include "Si/SiSpatialIndex.h"
+#include "OdVector.h"
+
+class OdGsEntityNode;
+class OdGsLightNode;
+class OdGsBlockNode;
+
+/** \details
+    This class implements OdGsNode descendent objects that
+    can serve as containers for OdGsEntityNode objects.
+
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsContainerNode : public OdGsNode
+{
+protected:
+  enum
+  {
+    kEntityListValid  = OdGsNode::kLastFlag << 1,
+    kCheckWorkset     = OdGsNode::kLastFlag << 2,
+    kHasStockData     = OdGsNode::kLastFlag << 3,
+    kVpDepCache       = OdGsNode::kLastFlag << 4,
+    kLastFlag         = kVpDepCache
+  };
+
+  enum
+  {
+    kChildrenNotUpToDate = 0x80000000 //special flag to use in setChildrenUpToDate/childrenUpToDate
+      //per each viewport, flags are stored in m_vpAwareFlags
+  };
+
+  struct GS_TOOLKIT_EXPORT VpData : public OdRxObject
+  {
+    OdGsEntityNode*         m_pFirstEntity;
+    OdGsEntityNode*         m_pLastEntity;
+    OdList<OdGsLightNode*>  m_lightPtrs; // some of the lights are entities (ones that lies in model space)
+    OdSiSpatialIndexPtr     m_pSpIndex;
+    OdGsEntityNode*         m_pClearSpatialQueryStateFirst;
+    int                     m_nChild;
+    OdUInt32                m_nChildErased;
+    OdUInt32                m_nChildSingleThreaded;
+    OdUInt32                m_nChildHighlighted;
+    OdGeExtents3d           m_realExtents; //Keeps real extents (for EXTMIN/MAX support)
+    OdUInt32                m_maxLw;
+    OdUInt32                m_flags;
+    OdRxObjectPtr           m_pLightsData; // #21117 : pointer added for future needs. Probably temporary.
+
+    enum
+    {
+      kEntityListValid  = OdGsContainerNode::kEntityListValid,
+      kVpDepCache       = OdGsContainerNode::kVpDepCache
+    };
+
+    VpData();
+    static OdSmartPtr<VpData> createObject(bool bShareable = false);
+  };
+  typedef OdSmartPtr<VpData> VpDataPtr;
+  typedef OdVector<VpDataPtr> VpDataArray;
+
+  inline VpData *getVpData(OdUInt32 nVpId, bool bCreateIfNotFound = true) const;
+  VpData *makeVpData(OdUInt32 nVpId) const;
+  inline OdUInt32 vpDataId(const VpData *pVpData) const;
+public:
+  inline bool hasVpData(OdUInt32 nVpId) const;
+  inline OdUInt32 numVpData() const;
+  OdUInt32 isAttached(OdGsEntityNode *pNode) const;
+  void setEntityListsInvalid();
+  OdUInt32 viewportId(const OdGsViewImpl &pView, bool bForceVpId = true) const;
+  inline bool isVpDepCache() const;
+public:
+  /** \details
+    Controls the EntityListValid flag for this ContainterNode object.
+    \param nVpId [in]  Viewport ID.
+    \param entityListValid [in]  Controls flag.
+    
+    \remarks
+    This flag is typically set by update() and cleared by invalidate().     
+  */
+  void setEntityListValid(OdUInt32 nVpId, bool entityListValid);
+  
+  /** \details
+    Returns true if and only if the ChildrenUpToDate flag is set for this ContainterNode object.
+    \param nVpId [in]  Viewport ID.
+    \remarks
+    This flag is typically set by update() and cleared by addChild() and invalidate().
+  */
+  bool childrenUpToDate(OdUInt32 nVpId) const;
+
+  /** \details
+    Returns true if and only if a regen is required for the specified Viewport object for this ContainterNode object.
+    \param nVpId [in]  Viewport ID. 
+  */
+  bool needRegen(OdUInt32 nVpId) const;
+
+  void addChildNode(OdUInt32 nVpId, OdGsEntityNode* pEnt);
+
+  void turnOnLights(OdGsBaseVectorizer& view);
+  virtual ENodeType nodeType() const { return kContainerNode; }
+
+  /** \details
+    Vectorizes the entities in all of the child nodes of this ContainerNode object.
+    \param ctx [in]  Display context.
+  */
+  virtual void displayEntityList(OdGsDisplayContext& ctx);
+
+  /** \details
+    Returns pointer to the first entity node inside container.
+    \param nVpId [in]  Viewport ID.
+  */
+  OdGsEntityNode* firstEntityNode(OdUInt32 nVpId);
+  /** \details
+    Returns pointer to the first entity node inside container.
+    \param nVpId [in]  Viewport ID.
+  */
+  const OdGsEntityNode* firstEntityNode(OdUInt32 nVpId) const;
+  /** \details
+    Returns pointer to the last entity node inside container.
+    \param nVpId [in]  Viewport ID.
+  */
+  OdGsEntityNode* lastEntityNode(OdUInt32 nVpId);
+  /** \details
+    Returns pointer to the last entity node inside container.
+    \param nVpId [in]  Viewport ID.
+  */
+  const OdGsEntityNode* lastEntityNode(OdUInt32 nVpId) const;
+  /** \details
+    Returns light nodes list.
+    \param nVpId [in]  Viewport ID.
+  */
+  OdList<OdGsLightNode*> &lightNodesList(OdUInt32 nVpId);
+  /** \details
+    Returns light nodes list.
+    \param nVpId [in]  Viewport ID.
+  */
+  const OdList<OdGsLightNode*> &lightNodesList(OdUInt32 nVpId) const;
+
+  /** \details
+    Returns the Aware flags for the specified Viewport for this ContainerNode object.
+    
+    \param viewportId [in]  Viewport ID. 
+    
+    \remarks
+    awareFlags() returns a combination of zero or more of the following:
+    
+    <table>
+    Name                            Value
+    kVpID                           0x00000001
+    kVpRegenType                    0x00000002
+    kVpRenderMode                   0x00000004
+    kVpWorldToEye                   0x00000008
+    kVpPerspective                  0x00000010
+    kVpResolution                   0x00000020
+    kVpMaxDevForCircle              0x00000040
+    kVpMaxDevForCurve               0x00000080
+    kVpMaxDevForBoundary            0x00000100
+    kVpMaxDevForIsoline             0x00000200
+    kVpMaxDevForFacet               0x00000400
+    kVpCamLocation                  0x00000800
+    kVpCamTarget                    0x00001000
+    kVpCamUpVector                  0x00002000
+    kVpCamViewDir                   0x00004000
+    kVpViewport                     0x00008000
+    kVpFrontBack                    0x00010000
+    kVpFrozenLayers                 0x00020000
+    kVpLtypeScaleMult               0x00040000
+    kEntityRegenDraw                0x00080000
+    kVpDisableLayoutCache           0x00100000
+    kVpModelTf                      0x00200000
+    kVpExcludeFromExtMinMax         0x00400000
+    kSectionable                    0x00800000
+    kVpRenderModule                 0x01000000
+    kVpAnnoScale                    0x02000000
+    kVpFilterFunction               0x04000000
+    kVpVisualStyle                  0x08000000
+    </table>
+  */
+   OdUInt32 awareFlags(OdUInt32 viewportId) const;
+
+  /** \details
+    Sets the Aware flags for the specified Viewport for this ContainerNode object.
+    
+    \param viewportId [in]  Viewport ID. 
+    \param flags [in]  Aware flags.
+    
+    \remarks
+    awareFlags() returns a combination of zero or more of the following:
+    
+    <table>
+    Name                            Value
+    kVpID                           0x00000001
+    kVpRegenType                    0x00000002
+    kVpRenderMode                   0x00000004
+    kVpWorldToEye                   0x00000008
+    kVpPerspective                  0x00000010
+    kVpResolution                   0x00000020
+    kVpMaxDevForCircle              0x00000040
+    kVpMaxDevForCurve               0x00000080
+    kVpMaxDevForBoundary            0x00000100
+    kVpMaxDevForIsoline             0x00000200
+    kVpMaxDevForFacet               0x00000400
+    kVpCamLocation                  0x00000800
+    kVpCamTarget                    0x00001000
+    kVpCamUpVector                  0x00002000
+    kVpCamViewDir                   0x00004000
+    kVpViewport                     0x00008000
+    kVpFrontBack                    0x00010000
+    kVpFrozenLayers                 0x00020000
+    kVpLtypeScaleMult               0x00040000
+    kEntityRegenDraw                0x00080000
+    kVpDisableLayoutCache           0x00100000
+    kVpModelTf                      0x00200000
+    kVpExcludeFromExtMinMax         0x00400000
+    kSectionable                    0x00800000
+    kVpRenderModule                 0x01000000
+    kVpAnnoScale                    0x02000000
+    kVpFilterFunction               0x04000000
+    kVpVisualStyle                  0x08000000
+    </table>
+  */
+   void setAwareFlags(OdUInt32 viewportId, OdUInt32 flags);
+
+protected:
+  virtual void propagateLayerChanges(OdGsViewImpl& view);
+  bool saveVpData(OdGsFiler *pFiler, const VpData *pVpData) const;
+  bool loadVpData(OdGsFiler *pFiler, VpData *pVpData);
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsContainerNode);
+
+  /** \param pModel [in]  Pointer to the BaseModel object.
+    \param pUnderlyingDrawable [in]  Pointer to the underlying Drawable object.
+    \param bTopLevel [in]  true if container represents layout's block
+  */
+  OdGsContainerNode(OdGsBaseModel* pModel, const OdGiDrawable* pUnderlyingDrawable, bool bSetGsNode = true);
+
+  /** \details
+    Returns true if and only if the EntityListValid flag is set for this ContainterNode object.
+    \param nVpId [in]  Viewport ID.
+    \remarks
+    This flag is typically set by update() and cleared by invalidate().     
+  */
+  bool entityListValid(OdUInt32 nVpId) const;
+  bool allEntityListsValid() const;
+  bool isEmpty() const;
+
+  /** \details
+    Controls the ChildrenUpToDate flag for this ContainterNode object.
+    \param childrenUpToDate [in]  Controls flag.
+    \param nVpID [in]  Viewport ID.
+    \remarks
+    This flag is typically set by update() and cleared by addChild() and invalidate().
+  */
+  void setChildrenUpToDate(bool childrenUpToDate, OdUInt32* nVpID = NULL);
+  bool childrenRegenDraw(OdUInt32 nVpID) const;
+  void setChildrenRegenDraw(bool bVal, OdUInt32 nVpID);
+
+  /** \details
+    Adds a child node to this ContainerNode object.
+    \param pDrawable [in]  Pointer to the Drawable object.
+    \param unerased [in]  Added child is unerased.
+  */
+  virtual void addChild(const OdGiDrawable* pDrawable, OdGsViewImpl *pView, bool unerased = false);
+
+  // adds information about the light if the light doesn't have gsNode yet
+  virtual void addLight(OdUInt32 nVpId, const OdGiDrawable* pDrawable, const OdGeMatrix3d& model2World);
+
+  /** \details
+    Removes the specified child node from this ContainerNode object.
+    \param pNode [in]  Pointer to the child object. 
+  */
+  virtual void removeChild(OdGsNode* pNode);
+
+  void update(OdGsUpdateContext& ctx, OdGsContainerNode* pParent, OdSiSpatialIndex* pParentIndex);
+
+  void display(OdGsDisplayContext& ctx);
+
+  /** \details
+    Returns a reference to the spatial index for this ContainerNode object.
+    \param nVpId [in]  Viewport ID.
+  */
+  OdSiSpatialIndex& spatialIndex(OdUInt32 nVpId);
+  /** \details
+    Returns a reference to the spatial index for this ContainerNode object.
+    \param nVpId [in]  Viewport ID.
+  */
+  const OdSiSpatialIndex& spatialIndex(OdUInt32 nVpId) const;
+
+  /** \note
+    The default implementation of this function ignores the pParent argument.
+  */
+  void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask);
+
+  /** \details
+    Returns summ of all aware flags for entire viewports list.
+  */
+  OdUInt32 currViewChanges() const;
+
+  /** \details
+    Returns extents of this container node object.
+    \param extents [out]  Reference to the OdGeExtents3d object which will receive current container node extents.
+  */
+  bool extents(OdGeExtents3d& extents) const;
+
+  virtual bool extents(const OdGsView* pView, OdGeExtents3d& ext) const;
+
+  /** \details
+    Updates invalidVp flag for entire entities list.
+  */
+  void propagateInvalidVpFlag();
+
+  bool checkWorkset() const;
+  void setCheckWorkset(bool bVal);
+  bool updateEntityList(OdGsUpdateContext& ctx);
+  void updateEntities(OdGsUpdateContext& ctx);
+  bool findCompatibleCache(OdGsViewImpl& view);
+  /** \details
+    Add/release counter of highlighted children of the node, and set kHLT/kHLT_All flags if necessary
+    \param nSubnodes [in]  number of subnodes
+    \param bHighlight [in]  if true then highlight else unhighlight
+    \param bAll [in]  if true then consider kHLT_All flag
+    Returns true if and only if highlighting of the child caused changing of kHLT flag on the container.
+  */
+  bool highlightSubnodes(OdUInt32 nSubnodes, bool bHighlight, bool bAll);
+
+  void destroy();
+
+  void destroySubitems();
+
+  inline OdUInt32 maxLineWeightIndexUsed(OdUInt32 nVpId) const;
+
+  /** \details
+    Returns real extents of the node
+    \param nVpId [in]  Viewport ID.
+  */
+  inline const OdGeExtents3d& realExtents(OdUInt32 nVpId) const;
+
+  /** \details
+    Sets real extents of the node and its maximal lineweight
+    \param nVpId [in]  Viewport ID.
+    \param ext [in]  New real extents for the node.
+    \param nMaxLw [in]  New maximal lineweight for the node.
+  */
+  inline void setRealExtents(OdUInt32 nVpId, const OdGeExtents3d& ext, OdUInt32 nMaxLw);
+
+  inline void addViewRef(OdUInt32 nVpId);
+  inline void removeViewRef(OdUInt32 nVpId);
+  inline const ViewRefs& viewRefs() const;
+
+  inline const StockProps& stock() const;
+  void makeStock();
+  void releaseStock();
+  void propagateLayerChangesStock();
+
+  bool saveNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL) const;
+  bool loadNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL);
+  bool postprocessNodeLoading(OdGsFiler *pFiler);
+
+  bool safeEntityUpdate(OdGsEntityNode* pEntity, OdGsUpdateContext& ctx, OdSiSpatialIndex* pSpatialIndex);
+  void addEntProps(const OdGsUpdateContext& ctx);
+  bool doMTUpdate(OdGsUpdateContext& ctx);
+  void doSTUpdate(OdGsUpdateContext& ctx);
+
+  /** \details
+    Removes entities marked as erased.
+  */
+  void removeErased();
+
+  /** \details
+    Returns number of child entities
+    \param nVpId [in]  Viewport ID.
+  */
+  inline int numberOfChildren(OdUInt32 nVpId) const;
+  inline OdUInt32 numberOfChildrenST(OdUInt32 nVpId) const;
+  inline OdUInt32 numberOfChildrenErased(OdUInt32 nVpId) const;
+protected:
+  mutable VpDataArray m_vpData;
+  mutable VpDataPtr m_shareableData;
+  OdUInt32Vector m_vpAwareFlags; //this memory is never shared, no need in OdArray with refcounter on buffer
+  ViewRefs m_viewRefs;
+  StockProps m_stock;
+};
+
+inline OdGsContainerNode::VpData *OdGsContainerNode::getVpData(OdUInt32 nVpId, bool bCreateIfNotFound) const
+{
+  if (!GETBIT(m_flags, kVpDepCache))
+    return m_shareableData;
+  VpData *pVpData = (m_vpData.size() > nVpId) ? m_vpData[nVpId].get() : NULL;
+  if (!pVpData && bCreateIfNotFound)
+    return makeVpData(nVpId);
+  return pVpData;
+}
+
+inline OdUInt32 OdGsContainerNode::vpDataId(const VpData *pVpData) const
+{
+  if (GETBIT(m_flags, kVpDepCache))
+  {
+    const OdUInt32 nVpData = m_vpData.size();
+    const VpDataPtr *pVpDataPtr = m_vpData.getPtr();
+    for (OdUInt32 nVpId = 0; nVpId < nVpData; nVpId++)
+    {
+      if (pVpDataPtr[nVpId].get() == pVpData)
+        return nVpId;
+    }
+  }
+  return 0;
+}
+
+inline bool OdGsContainerNode::hasVpData(OdUInt32 nVpId) const
+{
+  if (!GETBIT(m_flags, kVpDepCache))
+    return true;
+  return ((m_vpData.size() > nVpId) && !m_vpData.getAt(nVpId).isNull());
+}
+
+inline OdUInt32 OdGsContainerNode::numVpData() const
+{
+  if (!GETBIT(m_flags, kVpDepCache))
+    return 1;
+  return m_vpData.size();
+}
+
+inline bool OdGsContainerNode::isVpDepCache() const
+{
+  return GETBIT(m_flags, kVpDepCache);
+}
+
+inline bool OdGsContainerNode::entityListValid(OdUInt32 nVpId) const
+{
+  if (!isVpDepCache())
+    return GETBIT(m_flags, kEntityListValid);
+  const VpData *pVpData = getVpData(nVpId, false);
+  if (pVpData)
+    return GETBIT(pVpData->m_flags, kEntityListValid);
+  return false;
+}
+
+inline bool OdGsContainerNode::allEntityListsValid() const
+{
+  return GETBIT(m_flags, kEntityListValid);
+}
+
+inline bool OdGsContainerNode::isEmpty() const
+{
+  const OdUInt32 nVpData = numVpData();
+  for (OdUInt32 nView = 0; nView < nVpData; nView++)
+  {
+    const VpData *pVpData = getVpData(nView, false);
+    if (pVpData && pVpData->m_pFirstEntity)
+      return false;
+  }
+  return true;
+}
+
+inline void OdGsContainerNode::setEntityListsInvalid()
+{
+  for (OdUInt32 nView = 0; nView < numVpData(); nView++)
+  {
+    if (hasVpData(nView))
+      SETBIT_0(getVpData(nView, false)->m_flags, VpData::kEntityListValid);
+  }
+  SETBIT_0(m_flags, kEntityListValid);
+}
+
+inline void OdGsContainerNode::setEntityListValid(OdUInt32 nVpId, bool bValid)
+{
+  SETBIT(getVpData(nVpId)->m_flags, kEntityListValid, bValid);
+  if (!bValid || !isVpDepCache())
+    SETBIT(m_flags, kEntityListValid, bValid);
+  else
+  { // Check does all entity lists valid
+    const OdUInt32 nViews = numVpData();
+    bool bAllListsValid = true;
+    for (OdUInt32 nView = 0; nView < nViews; nView++)
+    {
+      const VpData *pVpData = getVpData(nView, false);
+      if (pVpData && !GETBIT(pVpData->m_flags, VpData::kEntityListValid))
+      {
+        bAllListsValid = false;
+        break;
+      }
+    }
+    SETBIT(m_flags, kEntityListValid, bAllListsValid);
+  }
+}
+
+inline OdSiSpatialIndex& OdGsContainerNode::spatialIndex(OdUInt32 nVpId)
+{
+  return *getVpData(nVpId)->m_pSpIndex.get();
+}
+
+inline const OdSiSpatialIndex& OdGsContainerNode::spatialIndex(OdUInt32 nVpId) const
+{
+  return *getVpData(nVpId)->m_pSpIndex.get();
+}
+
+inline OdGsEntityNode* OdGsContainerNode::firstEntityNode(OdUInt32 nVpId)
+{
+  VpData *pVpData = getVpData(nVpId, false);
+  if (!pVpData)
+    return NULL;
+  return pVpData->m_pFirstEntity;
+}
+
+inline const OdGsEntityNode* OdGsContainerNode::firstEntityNode(OdUInt32 nVpId) const
+{
+  VpData *pVpData = getVpData(nVpId, false);
+  if (!pVpData)
+    return NULL;
+  return pVpData->m_pFirstEntity;
+}
+
+inline OdGsEntityNode* OdGsContainerNode::lastEntityNode(OdUInt32 nVpId)
+{
+  VpData *pVpData = getVpData(nVpId, false);
+  if (!pVpData)
+    return NULL;
+  return pVpData->m_pLastEntity;
+}
+
+inline const OdGsEntityNode* OdGsContainerNode::lastEntityNode(OdUInt32 nVpId) const
+{
+  VpData *pVpData = getVpData(nVpId, false);
+  if (!pVpData)
+    return NULL;
+  return pVpData->m_pLastEntity;
+}
+
+inline OdList<OdGsLightNode*> &OdGsContainerNode::lightNodesList(OdUInt32 nVpId)
+{
+  return getVpData(nVpId)->m_lightPtrs;
+}
+
+inline const OdList<OdGsLightNode*> &OdGsContainerNode::lightNodesList(OdUInt32 nVpId) const
+{
+  return getVpData(nVpId)->m_lightPtrs;
+}
+
+inline bool OdGsContainerNode::childrenUpToDate(OdUInt32 nVpID) const
+{
+  if(m_vpAwareFlags.size()>nVpID)
+    return !GETBIT(m_vpAwareFlags[nVpID], kChildrenNotUpToDate);
+  return false;
+}
+
+inline void OdGsContainerNode::setChildrenUpToDate(bool bValid, OdUInt32* nVpID)
+{
+  if(nVpID)
+  {
+    OdUInt32Array::size_type n = m_vpAwareFlags.size();
+    if(n <= *nVpID)
+      m_vpAwareFlags.insert(m_vpAwareFlags.end(), (*nVpID)+1-n, 0xFFFFFFFF);
+    SETBIT(m_vpAwareFlags[*nVpID], kChildrenNotUpToDate, !bValid);
+  }
+  else
+  {
+    ODA_ASSERT(!bValid);
+    for(OdUInt32 i = 0; i < m_vpAwareFlags.size(); ++i)
+      SETBIT(m_vpAwareFlags[i], kChildrenNotUpToDate, true);
+  }
+}
+
+inline OdUInt32 OdGsContainerNode::awareFlags(OdUInt32 nVpID) const
+{
+  if(m_vpAwareFlags.size()>nVpID)
+    return m_vpAwareFlags[nVpID] & ~kChildrenNotUpToDate;
+  return 0xFFFFFFFF;
+}
+
+inline void OdGsContainerNode::setAwareFlags(OdUInt32 nVpID, OdUInt32 flags)
+{
+  flags &= ~kChildrenNotUpToDate;
+  OdUInt32Array::size_type n = m_vpAwareFlags.size();
+  if(n <= nVpID)
+  {
+    m_vpAwareFlags.insert(m_vpAwareFlags.end(), nVpID+1-n, 0xFFFFFFFF);
+    m_vpAwareFlags[nVpID] = flags;
+  }
+  else
+  {
+    m_vpAwareFlags[nVpID] = ((m_vpAwareFlags[nVpID] & kChildrenNotUpToDate) | flags);
+  }
+}
+
+inline bool OdGsContainerNode::needRegen(OdUInt32 nVpID) const
+{
+  if(!childrenUpToDate(nVpID))
+    return true;
+
+  OdUInt32 nAF = awareFlags(nVpID);
+  return ( nAF == 0xFFFFFFFF || ( baseModel()->viewChanges(nVpID) & nAF) != 0 );
+}
+
+inline bool OdGsContainerNode::checkWorkset() const
+{
+  return GETBIT(m_flags, kCheckWorkset);
+}
+
+inline void OdGsContainerNode::setCheckWorkset(bool bVal)
+{
+  SETBIT(m_flags, kCheckWorkset, bVal);
+}
+
+inline bool OdGsContainerNode::childrenRegenDraw(OdUInt32 nVpID) const
+{
+  if(m_vpAwareFlags.size()>nVpID)
+    return GETBIT(m_vpAwareFlags[nVpID], kEntityRegenDraw);
+  return false;
+}
+
+inline void OdGsContainerNode::setChildrenRegenDraw(bool bVal, OdUInt32 nVpID)
+{
+  OdUInt32Array::size_type n = m_vpAwareFlags.size();
+  if(n <= nVpID)
+    m_vpAwareFlags.insert(m_vpAwareFlags.end(), nVpID+1-n, 0xFFFFFFFF);
+  SETBIT(m_vpAwareFlags[nVpID], kEntityRegenDraw, bVal);
+}
+
+inline OdUInt32 OdGsContainerNode::maxLineWeightIndexUsed(OdUInt32 nVpId) const
+{
+  VpData *pVpData = getVpData(nVpId, false);
+  if (!pVpData)
+    return 0;
+  return pVpData->m_maxLw;
+}
+
+inline const OdGeExtents3d& OdGsContainerNode::realExtents(OdUInt32 nVpId) const
+{
+  VpData *pVpData = getVpData(nVpId, false);
+  if (!pVpData)
+    return OdGeExtents3d::kInvalid;
+  return getVpData(nVpId)->m_realExtents;
+}
+
+inline void OdGsContainerNode::setRealExtents(OdUInt32 nVpId, const OdGeExtents3d& ext, OdUInt32 nMaxLw)
+{
+  VpData *pVpData = getVpData(nVpId);
+  pVpData->m_realExtents = ext;
+  pVpData->m_maxLw = nMaxLw;
+}
+
+inline void OdGsContainerNode::addViewRef(OdUInt32 nVpId)
+{
+  m_viewRefs.add(nVpId);
+}
+
+inline void OdGsContainerNode::removeViewRef(OdUInt32 nVpId)
+{
+  m_viewRefs.remove(nVpId);
+}
+
+inline const ViewRefs& OdGsContainerNode::viewRefs() const
+{
+  return m_viewRefs;
+}
+
+inline const StockProps& OdGsContainerNode::stock() const
+{
+  return m_stock;
+}
+
+inline int OdGsContainerNode::numberOfChildren(OdUInt32 nVpId) const
+{
+  return getVpData(nVpId)->m_nChild;
+}
+
+inline OdUInt32 OdGsContainerNode::numberOfChildrenST(OdUInt32 nVpId) const
+{
+  return getVpData(nVpId)->m_nChildSingleThreaded;
+}
+
+inline OdUInt32 OdGsContainerNode::numberOfChildrenErased(OdUInt32 nVpId) const
+{
+  return getVpData(nVpId)->m_nChildErased;
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_CONTAINER_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsCullingVolume.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsCullingVolume.h
new file mode 100755
index 0000000..e34c342
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsCullingVolume.h
@@ -0,0 +1,431 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGSCULLINGVOLUME_H_INCLUDED_
+#define _ODGSCULLINGVOLUME_H_INCLUDED_
+
+#include "OdaCommon.h"
+#include "RxObject.h"
+#include "Gs/GsExport.h"
+#include "Ge/GeBoundBlock3d.h"
+#include "Ge/GeExtents3d.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeSphere.h"
+#include "Ge/GeVector3d.h"
+
+#include "TD_PackPush.h"
+
+// Culling primitives:
+// BBox (AABB - Axis Aligned Bounding Box)
+// BSphere (Bounding Sphere)
+// OBBox (OBB - Oriented Bounding Box)
+
+/** \details
+    Base class for culling primitives.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsCullingPrimitive
+{
+  public:
+    /** \details
+      Type of culling primitive.
+
+      \remarks
+      <table>
+      Name               Value    Description
+      kPrimBBox          0        Axis Alligned Bounding Box.
+      kPrimBSphere       1        Bounding Sphere.
+      kPrimOBBox         2        Oriented Bounding Box.
+      </table>
+    */
+    enum PrimitiveType
+    {
+      kPrimBBox,
+      kPrimBSphere,
+      kPrimOBBox
+    };
+  public:
+    OdGsCullingPrimitive()
+    {
+    }
+
+    virtual ~OdGsCullingPrimitive()
+    {
+    }
+
+    /** \details
+      Returns culling primitive type.
+      
+      \remarks
+      <table>
+      Name               Value    Description
+      kPrimBBox          0        Axis Alligned Bounding Box.
+      kPrimBSphere       1        Bounding Sphere.
+      kPrimOBBox         2        Oriented Bounding Box.
+      </table>
+    */
+    virtual PrimitiveType primitiveType() const = 0;
+};
+
+/** \details
+    Culling primitive: axis alligned bounding box.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsCullingBBox : public OdGsCullingPrimitive, public OdGeExtents3d
+{
+  public:
+    OdGsCullingBBox()
+      : OdGsCullingPrimitive()
+      , OdGeExtents3d()
+    {
+    }
+
+    OdGsCullingBBox(const OdGePoint3d &min, const OdGePoint3d &max)
+      : OdGsCullingPrimitive()
+      , OdGeExtents3d(min, max)
+    {
+    }
+
+    OdGsCullingBBox(const OdGeExtents3d &ext)
+      : OdGsCullingPrimitive()
+      , OdGeExtents3d(ext.minPoint(), ext.maxPoint())
+    {
+    }
+
+    OdGsCullingBBox(const OdGsCullingBBox &aabb)
+      : OdGsCullingPrimitive()
+      , OdGeExtents3d(aabb.minPoint(), aabb.maxPoint())
+    {
+    }
+
+    ~OdGsCullingBBox()
+    {
+    }
+
+    OdGsCullingBBox &operator =(const OdGeExtents3d &ext)
+    {
+      set(ext.minPoint(), ext.maxPoint());
+      return *this;
+    }
+
+    OdGsCullingBBox &operator =(const OdGsCullingBBox &aabb)
+    {
+      set(aabb.minPoint(), aabb.maxPoint());
+      return *this;
+    }
+
+    // OdGsCullingPrimitive overrides
+
+    /** \details
+      Returns culling primitive type.
+    */
+    PrimitiveType primitiveType() const
+    {
+      return kPrimBBox;
+    }
+};
+
+/** \details
+    Culling primitive: bounding sphere.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsCullingBSphere : public OdGsCullingPrimitive, public OdGeSphere // GeSphere has many unnecessary data for culling
+{
+  public:
+    OdGsCullingBSphere()
+      : OdGsCullingPrimitive()
+      , OdGeSphere()
+    {
+    }
+
+    OdGsCullingBSphere(double radius, const OdGePoint3d &center)
+      : OdGsCullingPrimitive()
+      , OdGeSphere(radius, center)
+    {
+    }
+
+    OdGsCullingBSphere(const OdGeSphere &sphere)
+      : OdGsCullingPrimitive()
+      , OdGeSphere(sphere)
+    {
+    }
+
+    OdGsCullingBSphere(const OdGsCullingBSphere &bsphere)
+      : OdGsCullingPrimitive()
+      , OdGeSphere(bsphere)
+    {
+    }
+
+    ~OdGsCullingBSphere()
+    {
+    }
+
+    OdGsCullingBSphere &operator =(const OdGeSphere &sphere)
+    {
+      set(sphere.radius(), sphere.center());
+      return *this;
+    }
+
+    OdGsCullingBSphere &operator =(const OdGsCullingBSphere &bsphere)
+    {
+      set(bsphere.radius(), bsphere.center());
+      return *this;
+    }
+
+    // OdGsCullingPrimitive overrides
+
+    /** \details
+      Returns culling volume type.
+    */
+    PrimitiveType primitiveType() const
+    {
+      return kPrimBSphere;
+    }
+};
+
+/** \details
+    Culling primitive: oriented bounding box.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsCullingOBBox : public OdGsCullingPrimitive, public OdGeBoundBlock3d
+{
+  public:
+    OdGsCullingOBBox()
+      : OdGsCullingPrimitive()
+      , OdGeBoundBlock3d()
+    {
+    }
+
+    OdGsCullingOBBox(const OdGePoint3d &base, const OdGeVector3d &xAxis, const OdGeVector3d &yAxis, const OdGeVector3d &zAxis)
+      : OdGsCullingPrimitive()
+      , OdGeBoundBlock3d(base, xAxis, yAxis, zAxis)
+    {
+    }
+
+    OdGsCullingOBBox(const OdGeBoundBlock3d &bb)
+      : OdGsCullingPrimitive()
+      , OdGeBoundBlock3d(bb)
+    {
+    }
+
+    OdGsCullingOBBox(const OdGsCullingOBBox &obb)
+      : OdGsCullingPrimitive()
+      , OdGeBoundBlock3d(obb)
+    {
+    }
+
+    ~OdGsCullingOBBox()
+    {
+    }
+
+    OdGsCullingOBBox &operator =(const OdGeBoundBlock3d &bb)
+    {
+      OdGePoint3d base; OdGeVector3d side1, side2, side3;
+      bb.get(base, side1, side2, side3);
+      set(base, side1, side2, side3);
+      return *this;
+    }
+
+    OdGsCullingOBBox &operator =(const OdGsCullingOBBox &obb)
+    {
+      OdGePoint3d base; OdGeVector3d side1, side2, side3;
+      obb.get(base, side1, side2, side3);
+      set(base, side1, side2, side3);
+      return *this;
+    }
+
+    // OdGsCullingPrimitive overrides
+
+    /** \details
+      Returns culling primitive type.
+    */
+    PrimitiveType primitiveType() const
+    {
+      return kPrimOBBox;
+    }
+};
+
+// Projection culling primitives:
+// Ortho (Orthogonal culling box merged with optimization for 2d mode)
+// Frustum (Perspective culling box without near and far culling planes)
+
+/** \details
+    Base class for orthogonal and perspective culling volumes.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsCullingVolume : public OdRxObject
+{
+  public:
+    enum ProjectionType
+    {
+      kProjOrtho,
+      kProjPerspective
+    };
+    enum IntersectionStatus
+    {
+      kIntersectNot, // No intersection detected
+      kIntersectOk, // Intersects with projection boundary
+      kIntersectIn // Primitive completely inside projection boundary
+    };
+  public:
+    ODRX_DECLARE_MEMBERS(OdGsCullingVolume);
+
+    /** \details
+        Returns type of projection for this culling volume object.
+
+        \remarks
+        <table>
+        Name               Value    Description
+        kProjOrtho         0        Orthogonal projection.
+        kProjPerspective   1        Perspective projection.
+        </table>
+    */
+    virtual ProjectionType projectionType() const = 0;
+
+    /** \details
+        Optimized intersection test between culling volume and culling primitive.
+        \param prim [in]  Input primitive for culling detection.
+    */
+    virtual bool intersectWithOpt(const OdGsCullingPrimitive &prim) const = 0;
+    /** \details
+        Intersection test between culling volume and culling primitive (returns complete and incomplete
+        intersection statuses).
+
+        \remarks
+        Return value intersection statuses:
+        <table>
+        Name               Value    Description
+        kIntersectNot      0        No intersection detected.
+        kIntersectOk       1        Intersects with culling volume boundary.
+        kIntersectIn       2        Culling volume primitive is completely inside culling volume boundary.
+        </table>
+
+        \param prim [in]  Input primitive for culling detection.
+    */
+    virtual IntersectionStatus intersectWith(const OdGsCullingPrimitive &prim) const = 0;
+
+    /** \details
+        Transform culling volume by transformation matrix.
+        \param xfm [in]  Xform matrix.
+    */
+    virtual void transformBy(const OdGeMatrix3d& xfm) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsCullingVolume object pointers.
+*/
+typedef OdSmartPtr<OdGsCullingVolume> OdGsCullingVolumePtr;
+
+/** \details
+    Orthogonal culling volume.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsOrthoCullingVolume : public OdGsCullingVolume
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGsOrthoCullingVolume);
+
+    /** \details
+        Initialize frustum culling volume by new values.
+        \param position [in]  View position.
+        \param direction [in]  View direction.
+        \param upVector [in]  View up vector.
+        \param volumeWidth [in]  Horizontal field of view.
+        \param volumeHeight [in]  Vertical field of view.
+    */
+    virtual void init(const OdGePoint3d &position, const OdGeVector3d &direction, const OdGeVector3d &upVector,
+                      double volumeWidth, double volumeHeight) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsOrthoCullingVolume object pointers.
+*/
+typedef OdSmartPtr<OdGsOrthoCullingVolume> OdGsOrthoCullingVolumePtr;
+
+/** \details
+    Perspective culling volume.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsFrustumCullingVolume : public OdGsCullingVolume
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGsFrustumCullingVolume);
+
+    /** \details
+        Initialize frustum culling volume by new values.
+        \param position [in]  View position.
+        \param direction [in]  View direction.
+        \param upVector [in]  View up vector.
+        \param fovY [in]  Horizontal field of view in radians.
+        \param aspect [in]  Aspect ratio between horizontal and vertical field of view (aspect = h / v).
+        \param nPlanes [in]  Number of culling planes to test intersection (1,2,3,4 - enable only side planes, 5 - enable nearZ plane, 6 - enable farZ plane).
+        \param nearZ [in]  Near Z-axis culling plane (must be greater than zero).
+        \param farZ [in]  Far Z-axis culling plane.
+    */
+    virtual void init(const OdGePoint3d &position, const OdGeVector3d &direction, const OdGeVector3d &upVector,
+                      double fovY, double aspect, OdUInt32 nPlanes = 4, double nearZ = 1.0, double farZ = 1e20) = 0;
+    /** \details
+        Initialize frustum culling volume by new values.
+        \param position [in]  View position.
+        \param direction [in]  View direction.
+        \param upVector [in]  View up vector.
+        \param fovX [in]  Horizontal field of view in radians.
+        \param aspect [in]  If enabled - then fovY is aspect ratio (fovY = h / v), elsewhere fovY is vertical field of view in radians.
+        \param fovY [in]  Aspect ratio or vertical field of view in radians (see aspect argument description).
+        \param nPlanes [in]  Number of culling planes to test intersection (1,2,3,4 - enable only side planes, 5 - enable nearZ plane, 6 - enable farZ plane).
+        \param nearZ [in]  Near Z-axis culling plane (must be greater than zero).
+        \param farZ [in]  Far Z-axis culling plane.
+    */
+    virtual void init(const OdGePoint3d &position, const OdGeVector3d &direction, const OdGeVector3d &upVector,
+                      double fovX, bool aspect, double fovY, OdUInt32 nPlanes = 4, double nearZ = 1.0, double farZ = 1e20) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsFrustumCullingVolume object pointers.
+*/
+typedef OdSmartPtr<OdGsFrustumCullingVolume> OdGsFrustumCullingVolumePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODGSCULLINGVOLUME_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCPointArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCPointArray.h
new file mode 100755
index 0000000..ed0401e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCPointArray.h
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSDCPOINTARRAY_INCLUDED
+#define ODGSDCPOINTARRAY_INCLUDED
+
+#include "OdArray.h"
+class OdGsDCPoint;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGsDCPoint objects.
+*/
+typedef OdArray<OdGsDCPoint, OdMemoryAllocator<OdGsDCPoint> > OdGsDCPointArray;
+
+#endif // ODGSDCPOINTARRAY_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCRectArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCRectArray.h
new file mode 100755
index 0000000..abd666f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDCRectArray.h
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSDCRECTARRAY_INCLUDED
+#define ODGSDCRECTARRAY_INCLUDED
+
+#include "OdArray.h"
+class OdGsDCRect;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGsDCPoint objects.
+*/
+typedef OdArray<OdGsDCRect, OdMemoryAllocator<OdGsDCRect> > OdGsDCRectArray;
+
+#endif //#ifndef ODGSDCRECTARRAY_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDbRootLinkage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDbRootLinkage.h
new file mode 100755
index 0000000..04f88b2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDbRootLinkage.h
@@ -0,0 +1,263 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGSDBROOTLINKAGE_H_INCLUDED_
+#define _ODGSDBROOTLINKAGE_H_INCLUDED_
+
+#include "OdaCommon.h"
+#include "RxObject.h"
+#include "Gs/GsExport.h"
+#include "Gi/GiDrawable.h"
+#include "DbBaseHostAppServices.h"
+#include "DbBaseDatabase.h"
+#include "AbstractViewPE.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    Provides connection between Gs module and DbRoot module export classes.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsDbRootLinkage
+{
+  public:
+    OdGsDbRootLinkage() {}
+
+    /** \details
+        Initialize DbRoot link classes.
+    */
+    static void initialize();
+    /** \details
+        Uninitialize DbRoot link classes.
+    */
+    static void uninitialize();
+    /** \details
+        Returns true if and only if DbRoot link classes initialized.
+    */
+    static bool isInitialized();
+    /** \details
+        Checks does initialized at least one DbRoot link class.
+    */
+    static bool isInitializedAny();
+
+    /** \details
+        Returns OdDbBaseDatabasePE class descriptor.
+    */
+    static OdRxClass *getDbBaseDatabasePEClass();
+    /** \details
+        Returns OdDbBaseDatabasePE protocol extension linked with database object.
+        \param pDb [in]  Database object pointer.
+    */
+    static OdDbBaseDatabasePE *getDbBaseDatabasePE(const OdDbBaseDatabase *pDb);
+    /** \details
+        Returns OdDbBaseDatabasePE protocol extension linked with drawable database object.
+        \param pDrw [in]  Drawable pointer.
+    */
+    static OdDbBaseDatabasePE *getDbBaseDatabasePEForDrawable(const OdGiDrawable *pDrw, OdDbBaseDatabase *&pDb);
+
+    /** \details
+        Returns OdDbBaseHostAppServices class descriptor.
+    */
+    static OdRxClass *getDbBaseHostAppServicesClass();
+    /** \details
+        Returns OdDbBaseHostAppServices class pointer linked with host application services object.
+        \param pServices [in]  Host application services object pointer.
+    */
+    static OdDbBaseHostAppServices *getDbBaseHostAppServices(const OdRxObject *pServices);
+    /** \details
+        Returns OdDbBaseHostAppServices class pointer linked with database object.
+        \param pDb [in]  Database object pointer.
+    */
+    static OdDbBaseHostAppServices *getDatabaseDbBaseHostAppServices(const OdDbBaseDatabase *pDb);
+    /** \details
+        Displays warning message for specified database object.
+        \param pDb [in]  Database object pointer.
+        \param message [in]  Warning message.
+    */
+    static bool displayWarning(const OdDbBaseDatabase *pDb, const OdString &message);
+
+    /** \details
+        Returns OdDbBaseLayerPE class descriptor.
+    */
+    static OdRxClass *getDbBaseLayerPEClass();
+    /** \details
+        Returns OdDbBaseLayerPE protocol extension linked with layer object.
+        \param pLayer [in]  Layer object pointer.
+    */
+    static OdDbBaseLayerPE *getDbBaseLayerPE(const OdRxObject *pLayer);
+
+    /** \details
+        Returns OdDbBaseVisualStylePE class descriptor.
+    */
+    static OdRxClass *getDbBaseVisualStylePEClass();
+    /** \details
+        Returns OdDbBaseVisualStylePE protocol extension linked with visual style object.
+        \param pVisualStyle [in]  Visual Style object pointer.
+    */
+    static OdDbBaseVisualStylePE *getDbBaseVisualStylePE(const OdRxObject *pVisualStyle);
+
+    /** \details
+        Returns OdDbBaseLayoutPE class descriptor.
+    */
+    static OdRxClass *getDbBaseLayoutPEClass();
+    /** \details
+        Returns OdDbBaseLayoutPE protocol extension linked with layout object.
+        \param pLayout [in]  Layout object pointer.
+    */
+    static OdDbBaseLayoutPE *getDbBaseLayoutPE(const OdRxObject *pLayout);
+    /** \details
+        Checks that specified object is a paper layout drawable which is not combined with block table.
+        \param pLayout [in]  Layout object pointer.
+    */
+    static bool isLayoutDrawable(const OdGiDrawable *pLayout);
+
+    /** \details
+        Returns OdAbstractViewPE class descriptor.
+    */
+    static OdRxClass *getAbstractViewPEClass();
+    /** \details
+        Returns OdAbstractViewPE protocol extension linked with layout object.
+        \param pViewport [in]  Viewport object pointer.
+    */
+    static OdAbstractViewPE *getAbstractViewPE(const OdRxObject *pViewport);
+
+    /** \details
+        Returns OdDbBaseBlockPE class descriptor.
+    */
+    static OdRxClass *getDbBaseBlockPEClass();
+    /** \details
+        Returns OdDbBaseBlockPE protocol extension linked with block object.
+        \param pBlock [in]  Block object pointer.
+    */
+    static OdDbBaseBlockPE *getDbBaseBlockPE(const OdRxObject *pBlock);
+
+    /** \details
+        Returns OdDbBaseBlockRefPE class descriptor.
+    */
+    static OdRxClass *getDbBaseBlockRefPEClass();
+    /** \details
+        Returns OdDbBaseBlockRefPE protocol extension linked with block reference object.
+        \param pBlockRef [in]  Block reference object pointer.
+    */
+    static OdDbBaseBlockRefPE *getDbBaseBlockRefPE(const OdRxObject *pBlockRef);
+    /** \details
+        Returns true if drawable is a block reference.
+        \param pBlockRef [in]  Block reference object pointer.
+        \param bMInsert [out]  Set to true if drawable is MInsert.
+    */
+    static bool isBlockRefDrawable(const OdGiDrawable *pBlockRef, bool *bMInsert = NULL);
+
+    /** \details
+        Returns OdDbBaseSortEntsPE class descriptor.
+    */
+    static OdRxClass *getDbBaseSortEntsPEClass();
+    /** \details
+        Returns OdDbBaseSortEntsPE protocol extension linked with entity sorting object.
+        \param pSortEnts [in]  Entity sorting object pointer.
+    */
+    static OdDbBaseSortEntsPE *getDbBaseSortEntsPE(const OdRxObject *pSortents);
+
+    /** \details
+        Returns OdDbBaseLongTransactionPE class descriptor.
+    */
+    static OdRxClass *getDbBaseLongTransactionPEClass();
+    /** \details
+        Returns OdDbBaseLongTransactionPE protocol extension linked with long transaction object.
+        \param pLT [in]  Long transaction object pointer.
+    */
+    static OdDbBaseLongTransactionPE *getDbBaseLongTransactionPE(const OdRxObject *pLT);
+
+    /** \details
+    Returns OdDbBaseHatchPE class descriptor.
+    */
+    static OdRxClass *getDbBaseHatchPEClass();
+    /** \details
+    Returns OdDbBaseHatchPE protocol extension linked with hatch object.
+    \param pHatch [in]  hatch object pointer.
+    */
+    static OdDbBaseHatchPE *getDbBaseHatchPE(const OdRxObject *pHatch);
+    /** \details
+    Returns true if drawable is a hatch.
+    \param pHatch [in]  Hatch object pointer.
+    */
+    static bool isHatchDrawable(const OdGiDrawable *pHatch);
+};
+
+// OdDbStub helpers
+
+/** \details
+    Returns database for Object ID.
+    \param pId [in]  Object persistent ID.
+*/
+GS_TOOLKIT_EXPORT OdDbBaseDatabase *odgsDbGetDatabase(OdDbStub *pId);
+
+/** \details
+    Returns owner for Object ID.
+    \param pId [in]  Object persistent ID.
+*/
+GS_TOOLKIT_EXPORT OdDbStub *odgsDbGetOwner(OdDbStub *pId);
+
+/** \details
+    Returns redirected Object ID.
+    \param pId [out]  Object persistent ID.
+*/
+GS_TOOLKIT_EXPORT OdDbStub *odgsDbRedirectID(OdDbStub *&pId);
+
+/** \details
+    Checks does Object ID is redirected.
+    \param pId [in]  Object persistent ID.
+*/
+GS_TOOLKIT_EXPORT bool odgsDbObjectIDRedirected(OdDbStub *pId);
+
+/** \details
+    Resets Object ID redirection state.
+    \param pId [in]  Object persistent ID.
+    \param bSet [in]  New redirection state.
+*/
+GS_TOOLKIT_EXPORT void odgsDbObjectIDSetRedirected(OdDbStub *pId, bool bSet);
+
+/** \details
+    Resets Object ID locking state.
+    \param pId [in]  Object persistent ID.
+    \param bSet [in]  New locking state.
+*/
+GS_TOOLKIT_EXPORT void odgsDbObjectIDSetLockingFlag(OdDbStub *pId, bool bSet);
+
+/** \details
+    Returns database for redirected Object ID.
+    \param pId [in]  Object persistent ID.
+*/
+GS_TOOLKIT_EXPORT OdDbBaseDatabase *odgsDbObjectIDRedirectedDatabase(OdDbStub *pId);
+
+/** \details
+    Checks that Object ID is erased.
+    \param pId [in]  Object persistent ID.
+*/
+GS_TOOLKIT_EXPORT bool odgsDbObjectIDErased(OdDbStub *pId);
+
+#include "TD_PackPop.h"
+
+#endif // _ODGSDBROOTLINKAGE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDefs.h
new file mode 100755
index 0000000..482f948
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDefs.h
@@ -0,0 +1,308 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __GSDEFS_H_INCLUDED_
+#define __GSDEFS_H_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "OdRound.h"
+
+//****************************************************************************
+// Helper classes
+//****************************************************************************
+
+// copied(with modification) from limits.h to avoid extra #includes
+
+#define SCALAR_MIN    (-2147483647 - 1)  // minimum(signed) int32 value
+#define SCALAR_MAX      2147483647      // maximum(signed) int32 value
+
+/** \details
+    This class represents 2D Device Coordinate points.
+    Library: TD_Gs
+
+    \remarks
+    Device coordinates are measured in pixels from the lower-left corner
+    of the device.
+    
+    \sa
+    Coordinate Systems.
+    
+    <group OdGs_Classes> 
+*/
+class OdGsDCPoint
+{
+public:
+  enum MaxFlag { Maximum };
+  enum MinFlag { Minimum };
+  
+  /** \param xx [in]  The X-coordinate of this point.
+    \param yy [in]  The Y-coordinate of this point.
+    
+    \remarks
+    Builds an instance of the object
+    
+    OdGsDCPoint(Maximum) sets x = SCALAR_MAX, y = SCALAR_MAX
+    
+    OdGsDCPoint(Minimum) sets x = SCALAR_MIN, y = SCALAR_MIN
+  */
+  OdGsDCPoint() { }
+  OdGsDCPoint(long xx, long yy) : x(xx), y(yy) { }
+  
+  
+  OdGsDCPoint(MaxFlag) { x = SCALAR_MAX; y = SCALAR_MAX; }
+  OdGsDCPoint(MinFlag) { x = SCALAR_MIN; y = SCALAR_MIN; }
+  
+  /** \remarks
+    Sets this object to the value of the object on the right.
+
+    Maximum sets x = SCALAR_MAX, y = SCALAR_MAX
+    
+    Minimum sets x = SCALAR_MIN, y = SCALAR_MIN
+  */
+  void operator=(MaxFlag) { x = SCALAR_MAX; y = SCALAR_MAX; }
+  void operator=(MinFlag) { x = SCALAR_MIN; y = SCALAR_MIN; }
+  
+  void operator=(const OdGsDCPoint& dcPoint) { x = dcPoint.x; y = dcPoint.y; }
+  bool operator==(const OdGsDCPoint& dcPoint) const { return x == dcPoint.x && y == dcPoint.y; }
+  bool operator!=(const OdGsDCPoint& dcPoint) const { return x != dcPoint.x || y != dcPoint.y; }
+  inline long operator[](unsigned int i) const { return *(&x + i); }
+
+  long x;  // X-coordinate.
+  long y;  // Y-coordinate.
+};
+
+/** \details
+    This class represents 2D device coordinate rectangles.
+    Library: TD_Gs
+
+    \remarks
+    Device coordinates are measured in pixels from the lower-left corner
+    of the device.
+    
+    \sa
+    Coordinate Systems.
+    
+    <group OdGs_Classes>
+*/
+class OdGsDCRect
+{
+public:
+  enum NullFlag { Null };
+  /** \param minPoint [in]  Lower-left corner.
+    \param maxPoint [in]  Upper-right corner.
+    \param xMin [in]  Minimum X-coordinate.
+    \param xMax [in]  Maximum X-coordinate.
+    \param yMin [in]  Minimum Y-coordinate.
+    \param yMax [in]  Maximum Y-coordinate.
+  */
+  OdGsDCRect() { }
+  OdGsDCRect(const OdGsDCPoint& minPoint, const OdGsDCPoint& maxPoint) : m_min(minPoint), m_max(maxPoint) { }
+  OdGsDCRect(long xMin, long xMax, long yMin, long yMax) : m_min(xMin,yMin), m_max(xMax,yMax) { }
+  OdGsDCRect(NullFlag) { set_null(); }
+  
+  OdGsDCRect & operator=(const OdGsDCRect& dcRect)
+  {
+    m_min = dcRect.m_min;
+    m_max = dcRect.m_max;
+    return*this;
+  }
+  void operator|=(const OdGsDCRect& dcRect)
+  {
+    if(m_min.x > dcRect.m_min.x) 
+      m_min.x = dcRect.m_min.x; 
+    if(m_max.x < dcRect.m_max.x) 
+      m_max.x = dcRect.m_max.x;
+    
+    if(m_min.y > dcRect.m_min.y)
+      m_min.y = dcRect.m_min.y;
+    if(m_max.y < dcRect.m_max.y)
+      m_max.y = dcRect.m_max.y;
+  }
+  void operator&=(const OdGsDCRect& dcRect)
+  {
+    intersectWith(dcRect);
+  }
+  bool operator==(const OdGsDCRect& dcRect) const
+  {
+    return m_min == dcRect.m_min && m_max == dcRect.m_max; 
+  }
+  bool operator!=(const OdGsDCRect& dcRect) const
+  {
+    return !(*this == dcRect);
+  }
+  /** \details
+    Sets this rectangle object to the null rectangle.
+  */
+  void set_null()
+  { 
+    m_min = OdGsDCPoint::Maximum; 
+    m_max = OdGsDCPoint::Minimum; 
+  } 
+  
+  /** \details
+    Returns true if and only if this rectangle object is the null rectangle.
+  */
+  bool is_null() const
+  {
+    ODA_ASSERT((m_min.x <= m_max.x && m_min.y <= m_max.y) ||
+     (m_min == OdGsDCPoint::Maximum && m_max == OdGsDCPoint::Minimum));
+    return m_min.x > m_max.x;
+  }
+  
+  /** \details
+    Returns true if and only if this rectangle object is inside the specified rectangle object.
+    \param dcRect [in]  Any display coordinate rectangle.
+    
+    \remarks
+    A coincident edge is considered inside.
+  */
+  bool within(const OdGsDCRect& dcRect) const
+  {
+    ODA_ASSERT(!is_null()); 
+    return m_min.x >= dcRect.m_min.x && 
+      m_min.y >= dcRect.m_min.y && 
+      m_max.x <= dcRect.m_max.x &&
+      m_max.y <= dcRect.m_max.y;
+  }
+
+  void offset(long x, long y)
+  {
+    m_min.x += x;
+    m_max.x += x;
+    m_min.y += y;
+    m_max.y += y;
+  }
+
+  void intersectWith(const OdGsDCRect& dcRect, bool bValidate = true)
+  {
+    if(m_min.x < dcRect.m_min.x)
+      m_min.x = dcRect.m_min.x; 
+    if(m_max.x > dcRect.m_max.x) 
+      m_max.x = dcRect.m_max.x;
+
+    if(m_min.y < dcRect.m_min.y)
+      m_min.y = dcRect.m_min.y;
+    if(m_max.y > dcRect.m_max.y)
+      m_max.y = dcRect.m_max.y;
+
+    if(bValidate && (m_min.x > m_max.x || m_min.y > m_max.y))
+      *this = Null;
+  }
+
+  void normalize()
+  {
+    long tmp;
+    if (m_max.x < m_min.x)
+      tmp = m_max.x, m_max.x = m_min.x, m_min.x = tmp;
+    if (m_max.y < m_min.y)
+      tmp = m_max.y, m_max.y = m_min.y, m_min.y = tmp;
+  }
+
+  OdGsDCPoint m_min;
+  OdGsDCPoint m_max;
+};
+
+/** \details
+    This class represents 2D device coordinate rectangles.
+    Library: TD_Gs
+
+    \remarks
+    Device coordinates are measured in pixels from the lower-left corner
+    of the device.
+    
+    \sa
+    Coordinate Systems.
+    
+    <group OdGs_Classes>
+*/
+class OdGsDCRectDouble
+{
+public:
+  /** \param minPoint [in]  Lower-left corner.
+    \param maxPoint [in]  Upper-right corner.
+    \param xMin [in]  Minimum X-coordinate.
+    \param xMax [in]  Maximum X-coordinate.
+    \param yMin [in]  Minimum Y-coordinate.
+    \param yMax [in]  Maximum Y-coordinate.
+  */
+  OdGsDCRectDouble() { }
+
+  OdGsDCRectDouble(const OdGePoint2d& minPoint, const OdGePoint2d& maxPoint)
+    : m_min(minPoint), m_max(maxPoint) { }
+
+  OdGsDCRectDouble(double xMin, double xMax, double yMin, double yMax)
+    : m_min(xMin,yMin), m_max(xMax,yMax) { }
+
+  explicit OdGsDCRectDouble(const OdGsDCRect& rc)
+    : m_min(rc.m_min.x, rc.m_min.y), m_max(rc.m_max.x,rc.m_max.y) { }
+
+  OdGsDCRectDouble& operator=(const OdGsDCRect& dcRect)
+  {
+    m_min.x = dcRect.m_min.x;
+    m_min.y = dcRect.m_min.y;
+    m_max.x = dcRect.m_max.x;
+    m_max.y = dcRect.m_max.y;
+    return *this;
+  }
+  bool operator==(const OdGsDCRectDouble& dcRect) const
+  {
+    return m_min == dcRect.m_min && m_max == dcRect.m_max; 
+  }
+  bool operator!=(const OdGsDCRectDouble& dcRect) const
+  {
+    return !(*this == dcRect);
+  }
+
+  OdGsDCRect round() const
+  {
+    return OdGsDCRect(OdGsDCRect(
+        OdTruncateToLong(m_min.x),
+        OdTruncateToLong(m_max.x),
+        OdTruncateToLong(m_min.y),
+        OdTruncateToLong(m_max.y)));
+  }
+
+  OdGePoint2d m_min;
+  OdGePoint2d m_max;
+};
+
+typedef void* OdGsWindowingSystemID; // i.e. -- HWND
+
+enum EMetafilePlayMode
+{
+  kMfDisplay, //play for visualization. Default, valid for all metafile types.
+  //Following modes are valid only if metafile can be played as OdGiConveyorGeometry
+  //( if useMetafileAsGeometry() returns true).
+  kMfSelect, //play as geometry for selection
+  kMfNested, //play data of nested metafiles only
+  kMfExtents //play as geometry for extents calculation
+};
+
+// Negative GETBIT
+#ifndef GETBITNEG
+#define GETBITNEG(flags, bit) (((flags) & (bit)) != (bit))
+#endif
+
+#include "TD_PackPop.h"
+
+#endif // __GSDEFS_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawCancelException.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawCancelException.h
new file mode 100755
index 0000000..5a0da1a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawCancelException.h
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+// GsDrawCancelException.h : OdGsDrawCancelException class
+
+// Copyright � Menhirs NV. All rights reserved.
+
+//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#ifndef H_GS_DRAW_CANCEL_EXCEPTION
+#define H_GS_DRAW_CANCEL_EXCEPTION
+
+#include "Gs/GsExport.h"
+
+/** \details
+  Exception thrown when draw operation is cancelled.
+  Bricscad throws it in progress bar meter and catches in preview image draw function;
+  OdGsBaseVectorizeView::doDraw() is an intermediate catcher which throws it further.
+        
+  Library: TD_Gs
+  <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsDrawCancelException
+{
+};
+
+#endif // H_GS_DRAW_CANCEL_EXCEPTION
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawableHolder.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawableHolder.h
new file mode 100755
index 0000000..a491f7e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsDrawableHolder.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef ODGSDRAWABLEHOLDER_INC
+#define ODGSDRAWABLEHOLDER_INC
+
+#include "TD_PackPush.h"
+#include "Ge/GeExtents3d.h"
+#include "IntArray.h"
+#include "Gi/GiDrawable.h"
+
+class OdGsNode;
+class OdGsBaseModel;
+class OdDbStub;
+
+/** \details
+  <group OdGs_Classes> 
+    
+  Library: TD_Gs
+*/
+struct DrawableHolder
+{
+  DrawableHolder(): m_drawableId(0), m_pGsRoot(0)
+  {
+  }
+  OdDbStub* m_drawableId;
+  OdGiDrawablePtr m_pDrawable;
+  OdSmartPtr<OdGsBaseModel> m_pGsModel;
+  OdGsNode* m_pGsRoot;
+  OdRxObjectPtr m_pMetafile;
+  OdGeExtents3d m_lastExt;
+};
+typedef OdArray<DrawableHolder> DrawableHolderArray;
+
+#include "TD_PackPop.h"
+
+#endif // ODGSDRAWABLEHOLDER_INC
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEmptyMetafileCache.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEmptyMetafileCache.h
new file mode 100755
index 0000000..4601f88
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEmptyMetafileCache.h
@@ -0,0 +1,131 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_EMPTY_METAFILE_CACHE__
+#define __OD_GS_EMPTY_METAFILE_CACHE__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsEntityNode.h"
+#define STL_USING_MAP
+#include "OdaSTL.h"
+
+class OdGsLayerNode;
+
+/** <group OdGs_Classes>
+*/
+class OdGsEmptyMetafileCache
+{
+  private:
+    typedef std::map<OdUInt32, OdGsEntityNode::MetafilePtr> OdMmap;
+    // Global map
+    friend class OdGsModuleObject;
+    GS_STATIC_EXPORT static OdMmap * s_mfMap;
+    GS_STATIC_EXPORT static OdMutex* s_mtMfMap;
+    static void rxInit();
+    static void rxUninit();
+    // Local map
+    OdMmap m_mfMap;
+  public:
+    OdGsEmptyMetafileCache();
+
+    static void get(OdGsEntityNode::MetafilePtr &pPtr, OdUInt32 flags, OdGsLayerNode *pLayerNode = NULL);
+  protected:
+    void getLocal(OdGsEntityNode::MetafilePtr &pPtr, OdUInt32 flags, OdGsLayerNode &pLayerNode);
+    static void getGlobal(OdGsEntityNode::MetafilePtr &pPtr, OdUInt32 flags, OdGsLayerNode *pLayerNode);
+    static void getImpl(OdGsEntityNode::MetafilePtr &pPtr, OdMmap &mfMap, OdUInt32 flags, OdGsLayerNode *pLayerNode);
+};
+
+#define ODGS_EMFCACHE_DEFINE_MEMBERS() \
+  GS_STATIC_EXPORT OdGsEmptyMetafileCache::OdMmap* OdGsEmptyMetafileCache::s_mfMap = NULL; \
+  GS_STATIC_EXPORT                        OdMutex* OdGsEmptyMetafileCache::s_mtMfMap = NULL; \
+  void OdGsEmptyMetafileCache::rxInit() \
+  { \
+    s_mfMap   = new OdMmap(); \
+    s_mtMfMap = new OdMutex(); \
+  } \
+  void OdGsEmptyMetafileCache::rxUninit() \
+  { \
+    delete s_mfMap;   s_mfMap = NULL; \
+    delete s_mtMfMap; s_mtMfMap = NULL; \
+  }
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_EMPTY_METAFILE_CACHE__
+
+// Inlines
+
+#if defined(__OD_GS_EMPTY_METAFILE_CACHE__) && (defined(__OD_GS_EMPTY_METAFILE_CACHE_INLINES_INCLUDE__) || !defined(__OD_GS_LAYER_NODE__))
+
+#ifndef __OD_GS_EMPTY_METAFILE_CACHE_INLINES__
+#define __OD_GS_EMPTY_METAFILE_CACHE_INLINES__
+
+#include "Gs/GsLayerNode.h"
+
+inline
+OdGsEmptyMetafileCache::OdGsEmptyMetafileCache()
+{
+}
+
+inline
+void OdGsEmptyMetafileCache::get(OdGsEntityNode::MetafilePtr &pPtr, OdUInt32 flags, OdGsLayerNode *pLayerNode)
+{
+  if (pLayerNode)
+    pLayerNode->m_emfCache.getLocal(pPtr, flags, *pLayerNode);
+  else
+    getGlobal(pPtr, flags, pLayerNode);
+}
+
+inline
+void OdGsEmptyMetafileCache::getLocal(OdGsEntityNode::MetafilePtr &pPtr, OdUInt32 flags, OdGsLayerNode &pLayerNode)
+{
+  TD_AUTOLOCK_P_DEF(pLayerNode.m_mt);
+  getImpl(pPtr, m_mfMap, flags, &pLayerNode);
+}
+
+inline
+void OdGsEmptyMetafileCache::getGlobal(OdGsEntityNode::MetafilePtr &pPtr, OdUInt32 flags, OdGsLayerNode *pLayerNode)
+{
+  OdMutexPtrAutoLock autoLock(odThreadsCounter() ? s_mtMfMap : NULL);
+  getImpl(pPtr, *s_mfMap, flags, pLayerNode);
+}
+
+inline
+void OdGsEmptyMetafileCache::getImpl(OdGsEntityNode::MetafilePtr &pPtr, OdMmap &mfMap, OdUInt32 flags, OdGsLayerNode *pLayerNode)
+{
+  OdMmap::iterator it = mfMap.find(flags);
+  if (it != mfMap.end())
+  {
+    pPtr = it->second;
+    return;
+  }
+  pPtr = OdGiRxObjectReImpl<OdGsEntityNode::Metafile>::createObject();
+  pPtr->m_nAwareFlags = flags;
+  pPtr->m_first.m_pLayer = pLayerNode;
+  mfMap[flags] = pPtr;
+}
+
+#endif // __OD_GS_EMPTY_METAFILE_CACHE_INLINES__
+
+#endif // defined(__OD_GS_EMPTY_METAFILE_CACHE__) && (defined(__OD_GS_EMPTY_METAFILE_CACHE_INLINES_INCLUDE__) || !defined(__OD_GS_LAYER_NODE__))
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEntityNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEntityNode.h
new file mode 100755
index 0000000..55e9a24
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsEntityNode.h
@@ -0,0 +1,973 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_ENTITY_NODE__
+#define __OD_GS_ENTITY_NODE__
+
+#include "Gs/GsNode.h"
+#include "Si/SiSpatialIndex.h"
+#include "OdArrayMemAlloc.h"
+#include "Gs/GsHighlightData.h"
+
+class OdGsBaseVectorizer;
+
+#include "TD_PackPush.h"
+
+/** <group !!RECORDS_TD_APIRef>
+*/
+struct OdGsGeomPortion
+{
+  OdGsLayerNode*    m_pLayer;
+  OdRxObjectPtr     m_pGsMetafile;
+  OdGsGeomPortion*  m_pNext;
+
+  OdGsGeomPortion()
+    : m_pLayer(0)
+    , m_pGsMetafile(0)
+    , m_pNext(0)
+  {
+  }
+
+  void copyFrom(OdGsGeomPortion& c)
+  {
+    m_pLayer = c.m_pLayer;
+    m_pGsMetafile = c.m_pGsMetafile;
+    m_pNext = c.m_pNext;
+  }
+
+  void clear()
+  {
+    m_pLayer = NULL;
+    m_pGsMetafile = NULL;
+    m_pNext = NULL;
+  }
+};
+
+class OdGsBaseContext;
+
+/** \details
+    This class implements OdGsNode descendant objects that
+    can serve as containers for other OdGsNode objects.
+
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsEntityNode : public OdGsNode, public OdSiEntity
+{
+  OdGsEntityNode*             m_pNextEntity;
+
+  struct NextEntityEntry
+  {
+    OdGsEntityNode*           m_pNextEntity;
+    OdUInt32                  m_entFlags;
+  };
+  void allocNextEntityArray(OdUInt32 nMaxVpId);
+  inline NextEntityEntry *firstEntEntry() { return reinterpret_cast<NextEntityEntry*>(m_pNextEntity); }
+  inline const NextEntityEntry *firstEntEntry() const { return reinterpret_cast<const NextEntityEntry*>(m_pNextEntity); }
+  inline void checkEntEntry(OdUInt32 nVpId) const { if ((OdUInt32)OdPtrToInt32(firstEntEntry()->m_pNextEntity) <= nVpId) throw OdError(eInvalidIndex); }
+  inline NextEntityEntry *nextEntEntry(OdUInt32 nVpId) { checkEntEntry(nVpId); return reinterpret_cast<NextEntityEntry*>(m_pNextEntity) + (nVpId + 1); }
+  inline const NextEntityEntry *nextEntEntry(OdUInt32 nVpId) const { checkEntEntry(nVpId); return reinterpret_cast<const NextEntityEntry*>(m_pNextEntity) + (nVpId + 1); }
+protected:
+  mutable OdGeExtents3d       m_extents;
+
+public:
+  class GS_TOOLKIT_EXPORT Metafile : public OdRxObject
+  {
+  public:
+    void* operator new(size_t);
+    void operator delete(void *);
+
+    Metafile();
+    ~Metafile();
+
+    bool play(OdGsBaseVectorizer& view, EMetafilePlayMode eMode, OdGsEntityNode& node, OdGsBaseContext* ctx = NULL);
+    bool playNested(const OdGsView& view, OdGsEntityNode& node, OdGsBaseContext& ctx);
+    bool hasDataToPlay(OdGsBaseVectorizer& view, EMetafilePlayMode eMode = kMfDisplay);
+    bool layersChanged(OdUInt32 nVpId) const;
+    bool containsVpFrozenLayers() const;
+    bool containsFrozenLayers() const;
+
+    bool isEmpty() const;
+
+    OdUInt32            m_nAwareFlags;
+    OdGeExtents3d       m_extents;
+    OdGsGeomPortion     m_first;
+  };
+  friend class Metafile;
+
+  /** \details
+    This template class is a specialization of the OdSmartPtr class for Metafile object pointers.
+  */
+  typedef OdSmartPtr<Metafile> MetafilePtr;
+
+  friend class OdGsModuleObject;
+  friend class OdGsBlockReferenceNode;
+public:
+  static void* Alloc(size_t nBytes) { return OdGsNode::s_aAlloc.getAt(1)->alloc((int)nBytes); }
+  static void Free(void* pMemBlock) { OdGsNode::s_aAlloc.getAt(1)->release(pMemBlock); }
+  static void* Realloc(void* pMemBlock, size_t newSize, size_t)
+  {
+    if(pMemBlock)
+      OdGsNode::s_aAlloc.getAt(1)->release(pMemBlock);
+    return OdGsNode::s_aAlloc.getAt(1)->alloc((int)newSize);
+  }
+  /** \details
+      This template class is a specialization of the OdArray class for MetafilePtr objects.
+  */
+  class MetafilePtrArray: public OdArrayMemAlloc<MetafilePtr, OdObjectsAllocator<MetafilePtr>, OdGsEntityNode>
+  {
+  public:
+    ~MetafilePtrArray(){}
+  };
+
+  class GS_TOOLKIT_EXPORT MetafileHolder
+  {
+  public:
+    enum 
+    {
+      kArray = 1,
+      kVpDependent = 2,
+      kAwareFlagsRegenType = 4,
+
+      kRegenTypeStandard = 8,
+      kRegenTypeHideOrShade = 16,
+      kRegenTypeRenderCommand = 32,
+      kRegenTypeMask = kRegenTypeStandard | kRegenTypeHideOrShade | kRegenTypeRenderCommand,
+
+      kDependentGeometry = 64, // Marks PaperSpace entities
+      kLayerDependent = 128 // Marks compound entities w/o blocks cache (#15036)
+    };
+    MetafileHolder(): m_flags(0)
+    {
+      *reinterpret_cast<Metafile**>(rawPtr()) = 0;
+    }
+    MetafileHolder(const MetafileHolder& c): m_flags(0)
+    {
+      *reinterpret_cast<Metafile**>(rawPtr()) = 0;
+      if(!c.isValid())
+        return;
+      if(c.isArray())
+      {
+        allocateArray();
+        getArray() = const_cast<MetafileHolder&>(c).getArray();
+      }
+      else
+      {
+        *reinterpret_cast<Metafile**>(rawPtr()) = const_cast<MetafileHolder&>(c).get();
+        get()->addRef();
+      }
+      m_flags = c.m_flags;
+    }
+    ~MetafileHolder()
+    {
+      destroy();
+    }
+    
+    bool isValid() const { return *((const Metafile**)rawPtr()) != NULL; }
+    bool isArray() const { return GETBIT(flags(), kArray); }
+    
+    bool isVpDependent() const { return GETBIT(flags(), kVpDependent); }
+    void setVpDependent(bool bOn)
+    {
+      SETBIT(m_flags, kVpDependent, bOn);
+      if(bOn)
+      {
+        SETBIT(m_flags, kRegenTypeMask, false);
+        setAwareFlagsRegenType(false);
+      }
+    }
+
+    bool isAwareFlagsRegenType() const { return GETBIT(flags(), kAwareFlagsRegenType); }
+    bool isRegenTypeDependent() const { return GETBIT(flags(), kRegenTypeMask); }
+
+    void setDependentGeometry(bool bSet) { SETBIT(m_flags, kDependentGeometry, bSet); }
+    bool isDependentGeometry() const { return GETBIT(flags(), kDependentGeometry); }
+
+    void setLayerDependent(bool bSet) { SETBIT(m_flags, kLayerDependent, bSet); }
+    bool isLayerDependent() const { return GETBIT(m_flags, kLayerDependent); }
+
+    Metafile* get()
+    {
+        ODA_ASSERT(!isArray());
+        return *reinterpret_cast<Metafile**>(rawPtr());
+    }
+    const Metafile* get() const
+    {
+        ODA_ASSERT(!isArray());
+        return *reinterpret_cast<Metafile**>(const_cast<MetafileHolder*>(this)->rawPtr());
+    }
+    MetafilePtrArray& getArray()
+    {
+        ODA_ASSERT(isArray());
+        return *reinterpret_cast<MetafilePtrArray*>(rawPtr());
+    }
+    const MetafilePtrArray& getArray() const
+    {
+        ODA_ASSERT(isArray());
+        return *reinterpret_cast<const MetafilePtrArray*>(rawPtr());
+    }
+    void set(Metafile* pMf)
+    {
+      destroy();
+      *reinterpret_cast<Metafile**>(rawPtr()) = pMf;
+      if(pMf)
+        pMf->addRef();
+    }
+
+    void setAtRegenType(Metafile* pMf, OdGiRegenType eRegenType)
+    {
+      int index = eRegenType - kOdGiStandardDisplay;
+      if(isArray())
+      {
+        ODA_ASSERT(isRegenTypeDependent());
+        setAt(index, pMf);
+      }
+      else if(isRegenTypeDependent())
+      {
+        if(GETBIT(m_flags , kRegenTypeStandard << index))
+        {
+          set(pMf);
+          if(!pMf)
+            setAwareFlagsRegenType(false);
+          return;
+        }
+        allocateArray();
+        setAt(index, pMf);
+      }
+      else
+      {
+        set(pMf);
+      }
+      if(pMf)
+      {
+        m_flags |= kRegenTypeStandard << index;
+        if(pMf->m_nAwareFlags & kVpRegenType)
+          setAwareFlagsRegenType(true);
+      }
+    }
+    
+    Metafile* getAtRegenType(OdGiRegenType& eRegenType)
+    {
+      ODA_ASSERT(isRegenTypeDependent());
+      ODA_ASSERT(!isArray());
+      if(GETBIT(flags(), kRegenTypeStandard))
+        eRegenType = kOdGiStandardDisplay;
+      else if(GETBIT(flags(), kRegenTypeHideOrShade))
+        eRegenType = kOdGiHideOrShadeCommand;
+      else
+        eRegenType = kOdGiRenderCommand;
+      return get();
+    }
+
+    void allocateArray();
+
+    void destroy();
+    int checkValid();
+
+    void moveTo(MetafileHolder& c, int& n);
+    OdUInt32 awareFlags(OdUInt32 nVpID) const
+    {
+      if(isArray())
+      {
+        if(isVpDependent())
+            return getArray().at(nVpID)->m_nAwareFlags;
+        return kVpRenderMode | (isAwareFlagsRegenType() ? kVpRegenType : 0);
+      }
+      return isValid() ? get()->m_nAwareFlags : 0;
+    }
+
+    void setAt(int n, Metafile* pMf)
+    {
+      ODA_ASSERT(isArray());
+      if(getArray().size() <= OdUInt32(n))
+        getArray().resize(n + 1);
+      getArray()[n] = pMf;
+    }
+
+  protected:
+    int flags() const { return (int)m_flags; }
+    void* rawPtr() { return &m_data; }
+    const void* rawPtr() const { return &m_data; }
+    bool isValidMf(const Metafile& mf) const;
+    void setAwareFlagsRegenType(bool bOn) { SETBIT(m_flags, kAwareFlagsRegenType, bOn); }
+
+  protected:
+    OdUInt8 m_flags;
+#ifdef TD_STRICT_ALIGNMENT
+    OdIntPtr m_data[odmax(sizeof(MetafilePtrArray),sizeof(OdRxObject*)) / sizeof(OdIntPtr)];
+#else
+    OdUInt8 m_data[odmax(sizeof(MetafilePtrArray),sizeof(OdRxObject*))];
+#endif
+  };
+
+protected:
+  OdGsHlBranchPtr m_hlBranch;
+
+  virtual void propagateLayerChanges(OdGsViewImpl& view);
+protected:
+  /** \details
+    Returns a reference to the metafile array of this EntityNode object as an array of MetafilePtr.
+  */
+  MetafilePtrArray& metafileArray();
+
+  mutable MetafileHolder m_metafile;
+  /** \details
+    Returns a reference to the metafile array of this EntityNode object as an array of MetafilePtr.
+  */
+  const MetafilePtrArray& metafileArray() const;
+
+  /** \details
+    Returns the array the objects in the metafile array of this EntityNode object.
+  */
+  OdGsEntityNode::MetafilePtr metafile() const;
+
+  void setExtentsFromMetafiles();
+public:
+  static OdGsEntityNode::MetafilePtr getEmptyMetafile(OdUInt32 flags, OdGsLayerNode *pLayerNode = NULL);
+
+  /** \details
+    Returns the specified MetafilePtr from the metafile array of this EntityNode object.
+    \param metafileIndex [in]  Metafile index.
+  */
+  OdGsEntityNode::MetafilePtr metafileAt(int metafileIndex) const;
+  
+  /** \details
+    Sets the metafile array for this EntityNode object from the specified array of objects.
+    \param metafiles [in] Array of metafile objects.
+  */
+  void setMetafile(OdGsEntityNode::Metafile* metafiles);
+  
+  /** \details
+    Sets the specified entry in the metafile array of this EntityNode object.
+    \param metafileIndex [in]  Metafile index.
+    \param pMetafile [in]  Pointer to the Metafile object
+  */
+  void setMetafileAt(int metafileIndex, OdGsEntityNode::Metafile* pMetafile);
+
+  /** \details
+    Convert a RegenType dependent cache to Viewport dependent cache.
+    \param view [in]  VectorizeView object for which cache is to be converted.
+  */
+  void convertToViewportDependent(const OdGsUpdateContext& ctx);
+
+  /** \param view [in]  view object for which metafile is to be returned.
+    \param ctx [in]  Check for viewport changes if and only if true.
+  */
+  OdGsEntityNode::Metafile* metafile(const OdGsViewImpl& view,
+      OdGsUpdateContext* ctx, bool bFindCompatible = true);
+  /** \param view [in]  VectorizeView object for which metafile is to be returned.
+  */
+  void setMetafile(OdGsUpdateContext& ctx, OdGsEntityNode::Metafile* metafiles);
+  OdRxObject* findCompatibleCache(const OdGsViewImpl& keyView, OdGsUpdateContext* ctx, OdUInt32 awareMask = 0);
+protected:
+  // m_flags (don't add new flags here, we already utilized ~30 bits)
+  enum
+  {
+    kHasExtents         = OdGsNode::kLastFlag << 1,
+    kSpatiallyIndexed   = OdGsNode::kLastFlag << 2,
+    kInWorkset          = OdGsNode::kLastFlag << 3,
+    kSingleThreaded     = OdGsNode::kLastFlag << 4,
+    kOwned              = OdGsNode::kLastFlag << 5,
+    kDrawableRegenDraw  = OdGsNode::kLastFlag << 6,
+    kEntityUnerased     = OdGsNode::kLastFlag << 7,
+    kInvisible          = OdGsNode::kLastFlag << 8,
+    kExtentsOutOfMS     = OdGsNode::kLastFlag << 9,
+    kNonSelectable      = OdGsNode::kLastFlag << 10,
+    kSkipSelection      = OdGsNode::kLastFlag << 11,
+    kErased             = OdGsNode::kLastFlag << 12,
+    kDrawableIsXref     = OdGsNode::kLastFlag << 13,
+    kMultilistNextPtr   = OdGsNode::kLastFlag << 14,
+    kLastFlag           = kMultilistNextPtr
+  };
+  // m_entFlags (add all new flags related to EntityNode here, keep some free space inside m_flags for inherited classes)
+  enum
+  {
+    kLineweightBit1     = (1 << 0), // reserve 5 bits for maximal lineweight
+    kLineweightBit2     = (1 << 1),
+    kLineweightBit3     = (1 << 2),
+    kLineweightBit4     = (1 << 3),
+    kLineweightBit5     = (1 << 4),
+    kLineweightBitMask  = kLineweightBit1 | kLineweightBit2 | kLineweightBit3 | kLineweightBit4 | kLineweightBit5,
+    kLastEntFlag        = kLineweightBit5
+  };
+  // m_markToSkipFlags
+  enum
+  {
+    kMarkedToSkipFirst  = 0x00000001,
+    kMarkedToSkipLast   = kMarkedToSkipFirst << 30,
+    kMarkedToSkipAll    = 0x7FFFFFFF
+  };
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsEntityNode);
+
+  /** \param pModel [in]  Pointer to the BaseModel object.
+    \param pUnderlyingDrawable [in]  Pointer to the underlying Drawable object.
+  */
+  OdGsEntityNode(OdGsBaseModel* pModel, const OdGiDrawable* pUnderlyingDrawable, bool bSetGsNode = false);
+public:
+  ~OdGsEntityNode();
+
+  /** \details
+    Sets the next entity for this EntityNode object to the specified EntityNode object.
+    \param pNextEntity [in]  Pointer to the next EntityNode.
+    \param nVpId [in]  Viewport ID.
+  */
+  void setNextEntity(OdGsEntityNode* pNextEntity);
+  void setNextEntity(OdUInt32 nVpId, OdGsEntityNode* pNextEntity);
+  /** \details
+    Returns the next entity for this EntityNode object.
+    \param nVpId [in]  Viewport ID.
+  */
+  OdGsEntityNode* nextEntity();
+  OdGsEntityNode* nextEntity(OdUInt32 nVpId);
+  /** \details
+    Returns the next entity for this EntityNode object.
+    \param nVpId [in]  Viewport ID.
+  */
+  const OdGsEntityNode* nextEntity() const;
+  const OdGsEntityNode* nextEntity(OdUInt32 nVpId) const;
+  /** \details
+    Returns number of next entities.
+  */
+  OdUInt32 numNextEntity() const;
+  /** \details
+    Enable multiple entity links.
+  */
+  void enableMultipleNextEntities(OdUInt32 nMaxVpId);
+
+  void update(OdGsUpdateContext& ctx, OdGsContainerNode* pParent,
+      OdSiSpatialIndex* pParentIndex);
+
+  /** \details
+    Returns the Aware flags for the specified Viewport for this ContainerNode object.
+    
+    \param viewportId [in]  Viewport ID. 
+    
+    \remarks
+    awareFlags() returns a combination of zero or more of the following:
+    
+    <table>
+    Name                            Value
+    kSuppressViewportDraw           0x01
+    kDrawInvisibleEnts              0x02
+    kDrawLayerOff                   0x04
+    kDrawLayerFrozen                0x08
+    kIgnoreFillPlane                0x10
+    kFillPlaneSet                   0x20
+    </table>
+  */
+  virtual OdUInt32 awareFlags(OdUInt32 viewportId) const;
+
+  virtual ENodeType nodeType() const { return kEntityNode; }
+  
+  virtual bool isReference() const { return false; }
+  virtual bool isLight() const { return false; }
+
+  void display(OdGsDisplayContext& ctx);
+
+  void select(OdGsBaseVectorizer& view);
+
+  void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask);
+
+  bool extents(OdGeExtents3d& extents) const;
+
+  /** \details
+    Returns true if and only if this EntityNode object is spatially indexed.
+    \param nVpId [in]  Viewport ID.
+  */
+  bool spatiallyIndexed() const;
+  bool spatiallyIndexed(OdUInt32 nVpId) const;
+  /** \details
+    Controls the spatial indexing of this EntityNode object.
+    \param nVpId [in]  Viewport ID.
+    \param spatiallyIndexed [in]  Controls spatially indexed.
+  */
+  void setSpatiallyIndexed(bool spatiallyIndexed);
+  void setSpatiallyIndexed(OdUInt32 nVpId, bool spatiallyIndexed);
+
+  /** \details
+    Returns true if and only if this EntityNode object is the child of a ContainerNode object.
+    \param nVpId [in]  Viewport ID.
+  */
+  bool owned() const;
+  bool owned(OdUInt32 nVpId) const;
+  /** \details
+    Controls the owned status of this EntityNode object.
+    \param nVpId [in]  Viewport ID.
+    \param owned [in]  Controls owned status.
+  */
+  void setOwned(bool owned);
+  void setOwned(OdUInt32 nVpId, bool owned);
+
+  /** \remarks
+    Returns true if and only if the underlying GiDrawable object(s) have extents.
+  */
+  bool hasExtents() const;
+
+  const OdGeExtents3d& extents() const;
+
+  /** \details
+    Returns true if the node has no graphical content.
+  */
+  virtual bool isEmpty();
+
+  /** \details
+    Returns true if the node has no graphical content.
+  */
+  virtual bool hasFrozenLayers();
+
+  /** \details
+    Returns true if and only if this EntityNode object is marked to be skipped
+    with the given mask (thread).
+  */
+  inline bool markedToSkip(unsigned mask);
+
+  /** \details
+    Controls the MarkToSkip status of this EntityNode object.
+    \param markToSkip [in]  Controls MarkToSkip.
+    \param mask [in]  the mask(thread).
+  */
+  inline void markToSkip(unsigned mask, bool markToSkip);
+
+  inline void markToSkipAll();
+
+  static unsigned markToSkipMask(OdUInt32 threadIndex)
+  {
+    ODA_ASSERT(threadIndex >= 0 && threadIndex < 31);
+    return kMarkedToSkipFirst << threadIndex;
+  }
+
+  void destroy(){}
+
+  virtual bool layersChanged(OdGsViewImpl& view) const;
+
+  bool markedAsNonSelectable() const;
+  void markAsNonSelectable(bool val);
+  bool isMarkedSkipSelection() const;
+  void markSkipSelection(bool val);
+  bool isMarkedErased() const;
+  void markErased(bool val);
+
+  bool isInWorkset() const;
+  void setInWorkset(bool val);
+
+  bool isRegenOnDraw() const;
+  void setRegenOnDraw(bool val);
+
+  bool isSingleThreaded() const;
+  void setSingleThreaded(bool val);
+
+  virtual void highlight(bool bDoIt, bool bWholeBranch);
+  void setHlBranch(OdGsHlBranch* pBr) { m_hlBranch = pBr; }
+  OdGsHlBranch* hlBranch() { return m_hlBranch; }
+  const OdGsHlBranch* hlBranch() const { return m_hlBranch; }
+
+  virtual void playAsGeometry(OdGsBaseVectorizer& view, EMetafilePlayMode eMode);
+
+  bool extents(const OdGsView* pView, OdGeExtents3d& ext) const;
+  OdDb::LineWeight getMaxLineweightUsed() const;
+  inline void addLineweight(OdUInt32 lwd);
+
+  friend inline OdUInt32 getLineweight(const OdGsEntityNode& entNode);
+  friend inline void setLineweight(OdGsEntityNode& entNode, OdUInt32 lwd);
+  void setLineweight(OdUInt32 lwd);
+  OdUInt32 getLineweight() const;
+
+  bool entityUnerased() const;
+  void setEntityUnerased(bool flag);
+
+  bool isInvisible() const;
+
+  bool isDrawableRegenDraw() const;
+
+  bool isExtentsOutOfModelSpace() const;
+  void setExtentsOutOfModelSpace(bool flag);
+
+  void resetInvalidVpFlag();
+
+public:
+  virtual void makeStock();
+  virtual void releaseStock();
+  virtual void propagateLayerChangesStock();
+
+  bool saveNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL) const;
+  bool loadNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL);
+protected:
+  bool findMetafileInStock(OdGsUpdateContext& ctx);
+  void insertToSpatialIndex(OdUInt32 nVpId, OdSiSpatialIndex& parentIndex,
+                            const OdGeExtents3d& prevExtents);
+  inline void setExtentsFlags();
+
+private:
+  MetafileHolder m_mfStock;
+  volatile int m_markToSkipFlags;
+protected:
+  // This flags willn't increase memory usage (at least on Win32) since utilize free space in 8 bytes alignment (__alignof(entity_node) == 8).
+  OdUInt32 m_entFlags;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsEntityNode object pointers. 
+*/
+typedef OdSmartPtr<OdGsEntityNode> OdGsEntityNodePtr;
+
+
+inline void OdGsEntityNode::setNextEntity(OdGsEntityNode* pNextEntity)
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    throw OdError(eInvalidIndex);
+  m_pNextEntity = pNextEntity;
+}
+
+inline void OdGsEntityNode::setNextEntity(OdUInt32 nVpId, OdGsEntityNode* pNextEntity)
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    nextEntEntry(nVpId)->m_pNextEntity = pNextEntity;
+  else
+    m_pNextEntity = pNextEntity;
+}
+
+inline void OdGsEntityNode::enableMultipleNextEntities(OdUInt32 nMaxVpId)
+{
+  if (nMaxVpId == 0xFFFFFFFF) nMaxVpId = 0;
+  if ((numNextEntity() <= nMaxVpId) || ((nMaxVpId == 0) && GETBIT(m_flags, kMultilistNextPtr)))
+    allocNextEntityArray(nMaxVpId);
+}
+
+inline OdGsEntityNode* OdGsEntityNode::nextEntity()
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    throw OdError(eInvalidIndex);
+  return m_pNextEntity;
+}
+
+inline OdGsEntityNode* OdGsEntityNode::nextEntity(OdUInt32 nVpId)
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    return nextEntEntry(nVpId)->m_pNextEntity;
+  //if (nVpId > 0) // Normal case, since we can request from non-VpDep container
+  //  throw OdError(eInvalidIndex);
+  return m_pNextEntity;
+}
+
+inline const OdGsEntityNode* OdGsEntityNode::nextEntity() const
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    throw OdError(eInvalidIndex);
+  return m_pNextEntity;
+}
+
+inline const OdGsEntityNode* OdGsEntityNode::nextEntity(OdUInt32 nVpId) const
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    return nextEntEntry(nVpId)->m_pNextEntity;
+  //if (nVpId > 0) // Normal case, since we can request from non-VpDep container
+  //  throw OdError(eInvalidIndex);
+  return m_pNextEntity;
+}
+
+inline OdUInt32 OdGsEntityNode::numNextEntity() const
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    return (OdUInt32)OdPtrToInt32(firstEntEntry()->m_pNextEntity);
+  return 1;
+}
+
+inline bool OdGsEntityNode::hasExtents() const
+{
+  return GETBIT(m_flags, kHasExtents);
+}
+
+inline const OdGeExtents3d& OdGsEntityNode::extents() const
+{
+  return m_extents;
+}
+
+inline bool OdGsEntityNode::markedToSkip(unsigned mask)
+{
+  ODA_ASSERT((mask >= kMarkedToSkipFirst) && (mask <= kMarkedToSkipLast));
+  //atomic function is required, called in MT mode (display)
+#ifndef TD_SINGLE_THREAD
+  return (mask & OdInterlockedExchangeAdd(&m_markToSkipFlags, 0)) != 0;
+#else
+  return GETBIT(m_markToSkipFlags, mask);
+#endif
+}
+
+inline void OdGsEntityNode::markToSkip(unsigned mask, bool bSkip)
+{
+  ODA_ASSERT((mask >= kMarkedToSkipFirst) && (mask <= kMarkedToSkipLast));
+  if(markedToSkip(mask) != bSkip)
+  {
+    //atomic function is required, called in MT mode (display)
+#ifndef TD_SINGLE_THREAD
+    if(bSkip)
+      OdInterlockedExchangeAdd(&m_markToSkipFlags, mask);
+    else
+      OdInterlockedExchangeAdd(&m_markToSkipFlags, -(int)mask);
+#else
+    SETBIT(m_markToSkipFlags, mask, bSkip);
+#endif
+  }
+}
+
+inline void OdGsEntityNode::markToSkipAll()
+{
+  //atomic function is NOT required, is NOT called in MT mode
+  m_markToSkipFlags = kMarkedToSkipAll;
+}
+
+inline bool OdGsEntityNode::spatiallyIndexed() const
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    throw OdError(eInvalidIndex);
+  return GETBIT(m_flags, kSpatiallyIndexed);
+}
+
+inline bool OdGsEntityNode::spatiallyIndexed(OdUInt32 nVpId) const
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    return GETBIT(nextEntEntry(nVpId)->m_entFlags, kSpatiallyIndexed);
+  //if (nVpId > 0) // Normal case, since we can request from non-VpDep container
+  //  throw OdError(eInvalidIndex);
+  return GETBIT(m_flags, kSpatiallyIndexed);
+}
+
+inline void OdGsEntityNode::setSpatiallyIndexed(bool bIndexed)
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    throw OdError(eInvalidIndex);
+  SETBIT(m_flags, kSpatiallyIndexed, bIndexed);
+}
+
+inline void OdGsEntityNode::setSpatiallyIndexed(OdUInt32 nVpId, bool bIndexed)
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    SETBIT(nextEntEntry(nVpId)->m_entFlags, kSpatiallyIndexed, bIndexed);
+  else
+    SETBIT(m_flags, kSpatiallyIndexed, bIndexed);
+}
+
+inline bool OdGsEntityNode::owned() const
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    throw OdError(eInvalidIndex);
+  return GETBIT(m_flags, kOwned);
+}
+
+inline bool OdGsEntityNode::owned(OdUInt32 nVpId) const
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    return GETBIT(nextEntEntry(nVpId)->m_entFlags, kOwned);
+  //if (nVpId > 0) // Normal case, since we can request from non-VpDep container
+  //  throw OdError(eInvalidIndex);
+  return GETBIT(m_flags, kOwned);
+}
+
+inline void OdGsEntityNode::setOwned(bool bOwned)
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    throw OdError(eInvalidIndex);
+  SETBIT(m_flags, kOwned, bOwned);
+}
+
+inline void OdGsEntityNode::setOwned(OdUInt32 nVpId, bool bOwned)
+{
+  if (GETBIT(m_flags, kMultilistNextPtr))
+    SETBIT(nextEntEntry(nVpId)->m_entFlags, kOwned, bOwned);
+  else
+    SETBIT(m_flags, kOwned, bOwned);
+}
+
+inline OdGsEntityNode::MetafilePtrArray& OdGsEntityNode::metafileArray()
+{
+  return m_metafile.getArray();
+}
+
+inline const OdGsEntityNode::MetafilePtrArray& OdGsEntityNode::metafileArray() const
+{
+  return m_metafile.getArray();
+}
+
+inline OdGsEntityNode::MetafilePtr OdGsEntityNode::metafile() const
+{
+  return m_metafile.get();
+}
+
+inline OdGsEntityNode::MetafilePtr OdGsEntityNode::metafileAt(int metafileIndex) const
+{
+  return metafileArray()[metafileIndex];
+}
+
+#define VPMETAFILEHOLDERARRAY_DESTRUCTOR ~MetafilePtrArray
+
+inline void OdGsEntityNode::setMetafile(OdGsEntityNode::Metafile* pMetafile)
+{
+  m_metafile.set(pMetafile);
+}
+
+inline bool OdGsEntityNode::entityUnerased() const
+{
+  return GETBIT(m_flags, kEntityUnerased);
+}
+
+inline void OdGsEntityNode::setEntityUnerased(bool flag)
+{
+  SETBIT(m_flags, kEntityUnerased, flag);
+}
+
+inline bool OdGsEntityNode::isInvisible() const
+{
+  return GETBIT(m_flags, kInvisible);
+}
+
+inline bool OdGsEntityNode::isDrawableRegenDraw() const
+{
+  return GETBIT(m_flags, kDrawableRegenDraw);
+}
+
+inline void OdGsEntityNode::resetInvalidVpFlag()
+{
+  if (invalidVp())
+  {
+    setInvalidVp(false);
+  }
+}
+
+inline bool OdGsEntityNode::markedAsNonSelectable() const
+{
+  return GETBIT(m_flags, kNonSelectable);
+}
+
+inline void OdGsEntityNode::markAsNonSelectable(bool val)
+{
+  SETBIT(m_flags, kNonSelectable, val);
+}
+
+inline bool OdGsEntityNode::isMarkedSkipSelection() const
+{
+  return GETBIT(m_flags, kSkipSelection);
+}
+
+inline void OdGsEntityNode::markSkipSelection(bool val)
+{
+  SETBIT(m_flags, kSkipSelection, val);
+}
+
+inline bool OdGsEntityNode::isMarkedErased() const
+{
+  return GETBIT(m_flags, kErased);
+}
+
+inline void OdGsEntityNode::markErased(bool val)
+{
+  SETBIT(m_flags, kErased, val);
+}
+
+inline bool OdGsEntityNode::Metafile::isEmpty() const
+{
+  for(const OdGsGeomPortion* ptr = &m_first; ptr; ptr = ptr->m_pNext)
+  {
+    if(ptr->m_pGsMetafile.get())
+      return false;
+  }
+  return true;
+}
+
+inline bool OdGsEntityNode::isExtentsOutOfModelSpace() const
+{
+  return GETBIT(m_flags, kExtentsOutOfMS);
+}
+
+inline void OdGsEntityNode::setExtentsOutOfModelSpace(bool val)
+{
+  SETBIT(m_flags, kExtentsOutOfMS, val);
+}
+
+inline bool OdGsEntityNode::isInWorkset() const
+{
+  return GETBIT(m_flags, kInWorkset);
+}
+
+inline void OdGsEntityNode::setInWorkset(bool val)
+{
+  SETBIT(m_flags, kInWorkset, val);
+}
+
+inline bool OdGsEntityNode::isSingleThreaded() const
+{
+  return GETBIT(m_flags, kSingleThreaded);
+}
+
+inline void OdGsEntityNode::setSingleThreaded(bool val)
+{
+  SETBIT(m_flags, kSingleThreaded, val);
+}
+
+inline bool OdGsEntityNode::isRegenOnDraw() const
+{
+  return GETBIT(m_flags, kDrawableRegenDraw);
+}
+
+inline void OdGsEntityNode::setRegenOnDraw(bool val)
+{
+   SETBIT(m_flags, kDrawableRegenDraw, val);
+}
+
+inline void OdGsEntityNode::highlight(bool bDoIt, bool bWholeBranch)
+{
+    OdGsNode::highlight(bDoIt, bWholeBranch);
+    if(hlBranch() && (!bDoIt || bWholeBranch))
+      setHlBranch(NULL);
+}
+
+inline void OdGsEntityNode::setExtentsFlags()
+{
+  SETBIT(m_flags, kHasExtents, m_extents.isValidExtents());
+  SETBIT(m_flags, kExtentsOutOfMS, !OdSi::properExtents(m_extents));
+}
+
+inline OdUInt32 getLineweight(const OdGsEntityNode& entNode)
+{
+	return entNode.m_entFlags & OdGsEntityNode::kLineweightBitMask;
+}
+
+inline void setLineweight(OdGsEntityNode& entNode, OdUInt32 lwd)
+{
+  entNode.m_entFlags = ((lwd & OdGsEntityNode::kLineweightBitMask) | (entNode.m_entFlags & ~OdGsEntityNode::kLineweightBitMask));
+}
+
+inline void OdGsEntityNode::addLineweight(OdUInt32 lwd)
+{
+  if (lwd)
+  {
+    OdUInt32 maxLwd = ::getLineweight(*this);
+    if (lwd > maxLwd)
+      ::setLineweight(*this, lwd);
+  }
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_ENTITY_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExport.h
new file mode 100755
index 0000000..e53d5d3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExport.h
@@ -0,0 +1,44 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+/*  GeExport.h
+
+*/
+#ifndef _GS_EXPORT_DEFINED
+#define _GS_EXPORT_DEFINED
+
+#include "OdPlatformSettings.h"
+
+#ifdef GSDEVGL_EXPORTS
+  #define GS_TOOLKIT_EXPORT     OD_TOOLKIT_EXPORT
+  #define GS_STATIC_EXPORT      OD_STATIC_EXPORT
+  #define GS_TEMPLATE_EXPORT    
+#else                           
+  #define GS_TOOLKIT_EXPORT     OD_TOOLKIT_IMPORT
+  #define GS_STATIC_EXPORT      OD_STATIC_IMPORT
+  #define GS_TEMPLATE_EXPORT    OD_EXTERN
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _GS_EXPORT_DEFINED */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExtAccum.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExtAccum.h
new file mode 100755
index 0000000..82d31d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsExtAccum.h
@@ -0,0 +1,272 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSEXTACCUM_INC
+#define ODGSEXTACCUM_INC
+
+#include "TD_PackPush.h"
+
+#include "OdArray.h"
+
+#include "Ge/GeExtents3d.h"
+
+#include "Gi/GiExtAccum.h"
+
+#include "Gs/GsExport.h"
+#include "Gs/Gs.h"
+
+class OdGsViewImpl;
+
+/** \details
+    Base class for Gs conveyor node implementations.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsConveyorNodeBase : public OdGiConveyorInput,
+                                               public OdGiConveyorOutput
+{
+protected:
+  typedef OdArray<OdGiConveyorOutput*, OdMemoryAllocator<OdGiConveyorOutput*> > SourceNodeArray;
+  SourceNodeArray m_sources;
+  OdGiConveyorGeometry *m_pDestGeom;
+
+  class update_geometry
+  {
+    OdGiConveyorGeometry* m_pGeometry;
+  public:
+    update_geometry(OdGiConveyorGeometry* pGeometry) : m_pGeometry(pGeometry) {}
+    void operator ()(OdGiConveyorOutput* pSourceNode)
+    {
+      pSourceNode->setDestGeometry(*m_pGeometry);
+    }
+  };
+public:
+  OdGsConveyorNodeBase();
+
+  void addSourceNode(OdGiConveyorOutput& sourceNode);
+  void removeSourceNode(OdGiConveyorOutput& sourceNode);
+
+  void setDestGeometry(OdGiConveyorGeometry& destGeometry);
+  OdGiConveyorGeometry& destGeometry() const;
+
+  void updateLink();
+  void updateLink(OdGiConveyorGeometry* pGeometry);
+
+  virtual OdGiConveyorGeometry* optionalGeometry() = 0;
+};
+
+/** \details
+    Wrapper extensions accumulator class adopted for Gs.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsExtAccum : public OdGiExtAccum,
+                                       public OdGsConveyorNodeBase,
+                                       public OdGiConveyorGeometry
+{
+  OdGiExtAccumPtr m_pExtAccum;
+  OdGsViewImpl *m_pBaseVV;
+  int m_maxLineweight;
+  OdGiConveyorContext *m_pConContext;
+protected:
+  OdGsExtAccum();
+public:
+  ODRX_DECLARE_MEMBERS(OdGsExtAccum);
+
+  // OdGsExtAccum functions
+
+  OdGiConveyorGeometry* optionalGeometry();
+
+  OdGiExtAccum *giExtAccum() { return m_pExtAccum.get(); }
+  const OdGiExtAccum *giExtAccum() const { return m_pExtAccum.get(); }
+
+  /** \details
+    Setup current OdGsViewImpl object for optional use of additional information into extents calculations.
+    \param pBaseVV [in]  Pointer to the view
+  */
+  virtual void setBaseView(OdGsViewImpl *pBaseVV);
+  
+  OdGsViewImpl* baseView() { return m_pBaseVV; }
+
+  // OdGiExtAccum functions
+
+  virtual void setDrawContext(OdGiConveyorContext* pDrawContext);
+  virtual OdGiConveyorGeometry& geometry();
+  virtual bool getExtents(OdGeExtents3d& extents) const;
+  virtual void resetExtents(const OdGeExtents3d& newExtents = OdGeExtents3d());
+  virtual void addExtents(const OdGeExtents3d& extents);
+  virtual bool plineContainBulges() const;
+
+  virtual void setDeviation(const OdGeDoubleArray& deviations)
+  {
+    m_pExtAccum->setDeviation(deviations);
+  }
+  virtual void setDeviation(const OdGiDeviation* pDeviation)
+  {
+    m_pExtAccum->setDeviation(pDeviation);
+  }
+
+  int getLineweight() const;
+  void addLineweight(int lwd);
+  OdDb::LineWeight getOdDbLineWeight() const;
+
+  // OdGiConveyorNode functions
+
+  virtual OdGiConveyorInput& input();
+  virtual OdGiConveyorOutput& output();
+
+  // OdGiConveyorGeometry functions
+
+  virtual void plineProc(const OdGiPolyline& polyline,
+    const OdGeMatrix3d* pXfm = 0,
+    OdUInt32 fromIndex = 0,
+    OdUInt32 numSegs = 0);
+  virtual void polylineProc(
+    OdInt32 numPoints, const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    const OdGeVector3d* pExtrusion = 0,
+    OdGsMarker baseSubEntMarker = -1);
+  virtual void polygonProc(
+    OdInt32 numPoints, const OdGePoint3d* vertexList,
+    const OdGeVector3d* pNormal = 0,
+    const OdGeVector3d* pExtrusion = 0);
+  virtual void xlineProc(
+    const OdGePoint3d& firstPoint, const OdGePoint3d& secondPoint);
+  virtual void rayProc(
+    const OdGePoint3d& basePoint, const OdGePoint3d& throughPoint);
+  virtual void meshProc(
+    OdInt32 numRows, 
+    OdInt32 numColumns,
+    const OdGePoint3d* vertexList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+  virtual void shellProc(
+    OdInt32 numVertices, const OdGePoint3d* vertexList,
+    OdInt32 faceListSize, const OdInt32* faceList,
+    const OdGiEdgeData* pEdgeData = 0,
+    const OdGiFaceData* pFaceData = 0,
+    const OdGiVertexData* pVertexData = 0);
+  virtual void circleProc(
+    const OdGePoint3d& center, 
+    double radius, 
+    const OdGeVector3d& normal, 
+    const OdGeVector3d* pExtrusion = 0);
+  virtual void circleProc(
+    const OdGePoint3d& firstPoint, 
+    const OdGePoint3d& secondPoint, 
+    const OdGePoint3d& thirdPoint, 
+    const OdGeVector3d* pExtrusion = 0);
+  virtual void circularArcProc(
+    const OdGePoint3d& center,
+    double radius,
+    const OdGeVector3d& normal,
+    const OdGeVector3d& startVector,
+    double sweepAngle,
+    OdGiArcType arcType = kOdGiArcSimple, const OdGeVector3d* pExtrusion = 0);
+  virtual void circularArcProc(
+    const OdGePoint3d& firstPoint,
+    const OdGePoint3d& secondPoint,
+    const OdGePoint3d& thirdPoint,
+    OdGiArcType arcType = kOdGiArcSimple, const OdGeVector3d* pExtrusion = 0);
+  virtual void ellipArcProc(
+    const OdGeEllipArc3d& ellipArc,
+    const OdGePoint3d* endPointOverrides = 0,
+    OdGiArcType arcType = kOdGiArcSimple, const OdGeVector3d* pExtrusion = 0);
+  virtual void nurbsProc(
+    const OdGeNurbCurve3d& nurbsCurve);
+  virtual void textProc(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    const OdChar* msg, 
+    OdInt32 numBytes, 
+    bool raw, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0);
+  virtual void textProc2(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    const OdChar* msg, 
+    OdInt32 numBytes, 
+    bool raw, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0,
+    const OdGeExtents3d* extentsBox = 0);
+  virtual void shapeProc(
+    const OdGePoint3d& position,
+    const OdGeVector3d& direction, 
+    const OdGeVector3d& upVector,
+    int shapeNumber, 
+    const OdGiTextStyle* pTextStyle,
+    const OdGeVector3d* pExtrusion = 0);
+  virtual void rasterImageProc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiRasterImage* pImage, 
+    const OdGePoint2d* uvBoundary,
+    OdUInt32 numBoundPts,
+    bool transparency = false,
+    double brightness = 50.0,
+    double contrast = 50.0,
+    double fade = 0.0);
+  virtual void metafileProc(
+    const OdGePoint3d& origin,
+    const OdGeVector3d& u,
+    const OdGeVector3d& v,
+    const OdGiMetafile* pMetafile,
+    bool dcAligned = true,
+    bool allowClipping = false);
+  virtual void setExtentsProc(const OdGePoint3d *pPoints, bool bTransform = true);
+  virtual void polypointProc(
+    OdInt32 numPoints,
+    const OdGePoint3d* vertexList,
+    const OdCmEntityColor* pColors,
+    const OdCmTransparency* pTransparency = 0,
+    const OdGeVector3d* pNormals = 0,
+    const OdGeVector3d* pExtrusions = 0,
+    const OdGsMarker* pSubEntMarkers = 0,
+    OdInt32 nPointSize = 0);
+  virtual void rowOfDotsProc(
+    OdInt32 numPoints, const OdGePoint3d& startPoint, const OdGeVector3d& dirToNextPoint);
+  void edgeProc(
+    const OdGiEdge2dArray& edges, const OdGeMatrix3d* pXform = 0);
+
+protected:
+  void CheckLineweight();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsExtAccum object pointers.
+*/
+typedef OdSmartPtr<OdGsExtAccum> OdGsExtAccumPtr;
+
+#include "TD_PackPop.h"
+
+#endif // ODGSEXTACCUM_INC
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFiler.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFiler.h
new file mode 100755
index 0000000..a8a2305
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFiler.h
@@ -0,0 +1,381 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_FILER_H__
+#define __OD_GS_FILER_H__
+
+#include "TD_PackPush.h"
+
+#include "OdStreamBuf.h"
+#include "Gs/GsExport.h"
+#include "OdBinaryData.h"
+#include "OdVector.h"
+#include "IntArray.h"
+#include "UInt8Array.h"
+#include "UInt32Array.h"
+#include "UInt16Array.h"
+#include "GsMarkerArray.h"
+#include "DbStubPtrArray.h"
+#include "Ge/GePoint2d.h"
+#include "UInt64Array.h"
+
+class OdGePoint2d;
+class OdGeVector2d;
+class OdGePoint3d;
+class OdGeVector3d;
+class OdGeMatrix3d;
+class OdGeExtents3d;
+
+class OdDbStub;
+typedef OdRxObject OdDbBaseDatabase;
+
+class OdGsView;
+class OdGsCache;
+
+class OdGsDCRect;
+class OdGsDCRectDouble;
+typedef OdArray<float, OdMemoryAllocator<float> > OdFloatArray;
+typedef OdArray<OdGePoint2d, OdMemoryAllocator<OdGePoint2d> > OdGePoint2dArray;
+
+/** <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsFiler : public OdRxObject
+{
+  public:
+    ODRX_DECLARE_MEMBERS(OdGsFiler);
+
+    OdGsFiler() { }
+    virtual ~OdGsFiler() { }
+  public:
+    enum Section
+    {
+      kEOFSection = -1,      // EOF
+      // V1 sections
+      kHeaderSection = 0,     // File header
+      kDatabaseLinkSection,   // Database linkage section
+      kGsModuleSection,       // Gs Module section
+      kDeviceSection,         // Gs Device section
+      kClientDeviceSection,   // Client Gs Device section
+      kViewSection,           // Gs View section
+      kClientViewSection,     // Client Gs View section
+      kModelSection,          // Gs Model section
+      kClientModelSection,    // Client Gs Model section
+      kNodeSection,           // Gs Node section
+      kClientNodeSection,     // Client Gs Node section
+      kMetafileSection,       // Gs Metafile section
+      kClientMetafileSection, // Client Gs Metafile section
+      kClientMaterialSection, // Client Gs Material section
+      kBlockRefImplSection,   // Block reference cache implementation section
+      kLinkedDeviceSection,   // Linked Gs Device section
+      kRenditionSection,      // Client visual rendition section
+      // V2 sections
+      kRuntimeChangesSection  // Runtime Gs modifications section
+    };
+    enum Version
+    {
+      kV1 = 100,
+      kV2 = 200,
+      kVLast = kV2
+    };
+    struct SubstitutionActuator
+    {
+      typedef void (*SetPtrFunc)(void *pPlace, const void *pValue);
+      SubstitutionActuator() { }
+      virtual ~SubstitutionActuator() { }
+      virtual void applySubstitution(void *pPlace, const void *pValue, SetPtrFunc pSetFunc) { pSetFunc(pPlace, pValue); }
+    };
+    struct Substitutor
+    {
+      // Register known substitution
+      virtual void registerSubstitution(const void *pValue, const void *pSubstitution, OdUInt32 size = sizeof(OdIntPtr), bool bRegister = true, bool bImmediate = false) = 0;
+      // Register substitution request
+      virtual void requestSubstitution(void *pPlace, const void *pValue, OdUInt32 size = sizeof(OdIntPtr), bool bRegister = true, bool bImmediate = true) = 0;
+      // Register substitution request for smart pointer
+      virtual void requestSubstitution(OdBaseObjectPtr *pPlace, const void *pValue, bool bRegister = true, bool bImmediate = true) = 0;
+      // Register substitution with non-default behavior
+      virtual void requestSubstitution(void *pPlace, OdGsFiler::SubstitutionActuator *pActuator, const void *pValue, OdUInt32 size = sizeof(OdIntPtr), bool bRegister = true, bool bImmediate = true) = 0;
+      // Clear substitutions
+      virtual void clearSubstitutions(const void *pValue = NULL, OdUInt32 size = 0) = 0;
+      // Run substitutions
+      virtual void runSubstitutions(const void *pValue = NULL, OdUInt32 size = 0, bool bClear = true) = 0;
+    };
+  public:
+    // Attach stream and initiate read/write process
+    virtual bool setStream(OdStreamBuf *pStream, bool bWrite = false) = 0;
+    virtual OdStreamBufPtr getStream() const = 0;
+
+    // Setup working database
+    virtual void setDatabase(const OdDbBaseDatabase *pDb) = 0;
+    virtual OdDbBaseDatabase *getDatabase() const = 0;
+
+    // File version control
+    virtual void setVersion(OdUInt32 nVersion) = 0;
+    virtual OdUInt32 version() const = 0;
+
+    // Database hash control
+    virtual void wrDbHash(const OdDbBaseDatabase *pDb) = 0;
+    virtual bool checkDbHash(const OdDbBaseDatabase *pDb) = 0;
+
+    // Setup sections for writing
+    virtual void setWriteSections(OdUInt64 nSections) = 0;
+    virtual void setWriteSection(Section section, bool bSet) = 0;
+    virtual bool isWriteSection(Section section) const = 0;
+
+    // Setup sections for reading
+    virtual void setReadSections(OdUInt64 nSections) = 0;
+    virtual void setReadSection(Section section, bool bSet) = 0;
+    virtual bool isReadSection(Section section) const = 0;
+
+    // Section writing
+    virtual void wrSectionBegin(Section section) = 0;
+    virtual void wrSectionEnd(Section section) = 0;
+    virtual void wrEOFSection() = 0;
+
+    // Section reading
+    virtual Section rdSection() const = 0;
+    virtual Section curSection() const = 0;
+    virtual void skipSection() const = 0;
+    virtual void rdBackSection() const = 0;
+    virtual bool checkEOF() const = 0;
+
+    // Substitutions processing
+    virtual Substitutor *subst() const = 0;
+    virtual void makeSubstitutions(bool bClear = true) const = 0;
+    virtual OdRxObjectPtr getSubstitutor() const = 0;
+    virtual void setSubstitutor(OdRxObject *pSubst) = 0;
+
+    // Arbitrary data
+    virtual void setArbitraryData(const OdChar *pName, OdRxObject *pObject) = 0;
+    virtual OdRxObjectPtr getArbitraryData(const OdChar *pName) const = 0;
+    virtual bool hasArbitraryData(const OdChar *pName) const = 0;
+    virtual void clearArbitraryData() = 0;
+
+    // Pointers registration
+    virtual void registerPtr(const void *pPtr) = 0;
+    virtual void unregisterPtr(const void *pPtr) = 0;
+    virtual bool isPtrRegistered(const void *pPtr) const = 0;
+    virtual void clearRegisteredPtrs() = 0;
+
+    // Process handles
+    virtual void wrHandle(OdDbStub *pHandle) = 0;
+    virtual OdDbStub *rdHandle() const = 0;
+
+    // Process classes
+    virtual void wrClass(OdRxObject *pObj) = 0;
+    virtual OdRxObjectPtr rdClass() const = 0;
+
+    // Process raw data
+    virtual void wrRawData(const void *pData, OdUInt32 nDataSize) = 0;
+    virtual void rdRawData(void *pData, OdUInt32 nDataSize) const = 0;
+
+    // Process data primitives
+    virtual void wrBool(bool bVal);
+    virtual bool rdBool() const;
+
+    virtual void wrInt(int val);
+    virtual int rdInt() const;
+
+    virtual void wrUInt(unsigned int val);
+    virtual unsigned int rdUInt() const;
+
+    virtual void wrChar(char val);
+    virtual char rdChar() const;
+
+    virtual void wrUInt8(OdUInt8 val);
+    virtual OdUInt8 rdUInt8() const;
+
+    virtual void wrInt16(OdInt16 val);
+    virtual OdInt16 rdInt16() const;
+
+    virtual void wrUInt16(OdUInt16 val);
+    virtual OdUInt16 rdUInt16() const;
+
+    virtual void wrInt32(OdInt32 val);
+    virtual OdInt32 rdInt32() const;
+
+    virtual void wrUInt32(OdUInt32 val);
+    virtual OdUInt32 rdUInt32() const;
+
+    virtual void wrInt64(OdInt64 val);
+    virtual OdInt64 rdInt64() const;
+
+    virtual void wrUInt64(OdUInt64 val);
+    virtual OdUInt64 rdUInt64() const;
+
+    virtual void wrIntPtr(OdIntPtr val);
+    virtual OdIntPtr rdIntPtr() const;
+
+    void wrPtr(const void *pPtr) { wrIntPtr((OdIntPtr)pPtr); }
+    void *rdPtr() const { return (void*)rdIntPtr(); }
+
+    virtual void wrCOLORREF(ODCOLORREF val);
+    virtual ODCOLORREF rdCOLORREF() const;
+
+    virtual void wrFloat(float val);
+    virtual float rdFloat() const;
+
+    virtual void wrDouble(double val);
+    virtual double rdDouble() const;
+
+    virtual void wrPoint2d(const OdGePoint2d &pt);
+    virtual void rdPoint2d(OdGePoint2d &pt) const;
+
+    virtual void wrVector2d(const OdGeVector2d &vec);
+    virtual void rdVector2d(OdGeVector2d &vec) const;
+
+    virtual void wrPoint3d(const OdGePoint3d &pt);
+    virtual void rdPoint3d(OdGePoint3d &pt) const;
+
+    virtual void wrVector3d(const OdGeVector3d &vec);
+    virtual void rdVector3d(OdGeVector3d &vec) const;
+
+    virtual void wrMatrix3d(const OdGeMatrix3d &mat);
+    virtual void rdMatrix3d(OdGeMatrix3d &mat) const;
+
+    virtual void wrExtents3d(const OdGeExtents3d &ext);
+    virtual void rdExtents3d(OdGeExtents3d &ext) const;
+
+    virtual void wrAnsiString(const OdAnsiString &str);
+    virtual void rdAnsiString(OdAnsiString &str) const;
+    OdAnsiString rdAnsiStringRet() const { OdAnsiString str; rdAnsiString(str); return str; }
+
+    virtual void wrString(const OdString &str);
+    virtual void rdString(OdString &str) const;
+    OdString rdStringRet() const { OdString str; rdString(str); return str; }
+
+    virtual void wrUInt8Array (const OdUInt8Array& arr);
+    virtual void wrUInt16Array(const OdUInt16Array& arr);
+    virtual void wrUInt16Array(OdUInt32 count, const OdUInt16* arr);
+    virtual void wrUInt32Array(const OdUInt32Array& arr);
+    virtual void wrUInt32Array(const OdUInt32Vector& arr);
+    virtual void wrUInt64Array(const OdUInt64Array& arr);
+    virtual void wrUInt64Array(const OdUInt64Vector& vec);
+    virtual void wrUInt64Array(OdUInt32 count, const OdUInt64* arr);
+    virtual void wrIntArray   (const OdIntArray& arr);
+    virtual void wrFloatArray (const OdFloatArray& arr);
+    virtual void wrFloatArray (OdUInt32 count, const float* arr);
+    virtual void wrPoint2dArray  (const OdGePoint2dArray& arr);
+    virtual void wrPoint3dArray  (const OdGePoint3dArray& arr);
+    virtual void wrDbStubPtrArray(const OdDbStubPtrArray& arr);
+    virtual void wrGsDCRect      (const OdGsDCRect& rc);
+    virtual void wrGsDCRectDouble(const OdGsDCRectDouble& rcd);
+
+    virtual void rdUInt8Array (OdUInt8Array& arr);
+    virtual void rdUInt16Array(OdUInt16Array& arr);
+    virtual void rdUInt16Array(OdUInt32 count, OdUInt16* arr);
+    virtual void rdUInt32Array(OdUInt32Array& arr);
+    virtual void rdUInt32Array(OdUInt32Vector& arr);
+    virtual void rdUInt64Array(OdUInt64Array& arr);
+    virtual void rdUInt64Array(OdUInt64Vector& vec);
+    virtual void rdUInt64Array(OdUInt32 count, OdUInt64* arr);
+    virtual void rdIntArray   (OdIntArray& arr);
+    virtual void rdFloatArray (OdFloatArray& arr);
+    virtual void rdFloatArray (OdUInt32 count, float* arr);
+    virtual void rdPoint2dArray  (OdGePoint2dArray& arr);
+    virtual void rdPoint3dArray  (OdGePoint3dArray& arr);
+    virtual void rdDbStubPtrArray(OdDbStubPtrArray& arr);
+    virtual void rdGsDCRect      (OdGsDCRect& dcrc);
+    virtual void rdGsDCRectDouble(OdGsDCRectDouble& dcrcd);
+
+    // Create filer object
+    static OdSmartPtr<OdGsFiler> createObject(OdStreamBuf *pStream, bool bForWrite, const OdDbBaseDatabase *pDb, OdUInt32 nVersion = kVLast);
+};
+
+typedef OdSmartPtr<OdGsFiler> OdGsFilerPtr;
+
+#define OdGsFiler_wrArray(filer, arry, wrFunc) \
+  { \
+    filer.wrUInt32(arry.size()); \
+    for (OdUInt32 nVal = 0; nVal < arry.size(); nVal++) \
+      filer.wrFunc(arry.getPtr()[nVal]); \
+  }
+#define OdGsFilerPtr_wrArray(pFiler, arry, wrFunc) \
+  OdGsFiler_wrArray((*pFiler), arry, wrFunc)
+
+#define OdGsFiler_wrArrayRaw(filer, arry, typSz) \
+  { \
+    filer.wrUInt32(arry.size()); \
+    if (!arry.isEmpty()) \
+      filer.wrRawData(arry.getPtr(), arry.size() * typSz); \
+  }
+#define OdGsFilerPtr_wrArrayRaw(pFiler, arry, typSz) \
+  OdGsFiler_wrArrayRaw((*pFiler), arry, typSz)
+
+#define OdGsFiler_rdArray(filer, arry, rdFunc) \
+  { \
+    arry.clear(); \
+    OdUInt32 nElems = filer.rdUInt32(); \
+    arry.setPhysicalLength(nElems); \
+    for (OdUInt32 nElem = 0; nElem < nElems; nElem++) \
+      arry.push_back(filer.rdFunc()); \
+  }
+#define OdGsFilerPtr_rdArray(pFiler, arry, rdFunc) \
+  OdGsFiler_rdArray((*pFiler), arry, rdFunc)
+
+#define OdGsFiler_rdArrayArg(filer, arry, rdFunc) \
+  { \
+    OdUInt32 nElems = filer.rdUInt32(); \
+    arry.resize(nElems); \
+    for (OdUInt32 nElem = 0; nElem < nElems; nElem++) \
+      filer.rdFunc(arry[nElem]); \
+  }
+#define OdGsFilerPtr_rdArrayArg(pFiler, arry, rdFunc) \
+  OdGsFiler_rdArrayArg((*pFiler), arry, rdFunc)
+
+#define OdGsFiler_rdArrayRaw(filer, arry, typSz) \
+  { \
+    OdUInt32 nElems = filer.rdUInt32(); \
+    arry.resize(nElems); \
+    if (nElems) \
+      filer.rdRawData(arry.asArrayPtr(), nElems * typSz); \
+  }
+#define OdGsFilerPtr_rdArrayRaw(pFiler, arry, typSz) \
+  OdGsFiler_rdArrayRaw((*pFiler), arry, typSz)
+
+/** <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsFilerCreatorPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsFilerCreatorPE);
+public:
+  virtual OdGsFilerPtr createGsFiler(OdStreamBuf *pStream, bool bForWrite, const OdDbBaseDatabase *pDb) = 0;
+};
+
+typedef OdSmartPtr<OdGsFilerCreatorPE> OdGsFilerCreatorPEPtr;
+
+/** <group OdGs_Classes>
+*/
+class GS_TOOLKIT_EXPORT OdGsFilerDbHashPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsFilerDbHashPE);
+public:
+  virtual OdBinaryData computeDbHash(const OdDbBaseDatabase *pDb) = 0;
+};
+
+typedef OdSmartPtr<OdGsFilerDbHashPE> OdGsFilerDbHashPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_FILER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFilerV100Impl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFilerV100Impl.h
new file mode 100755
index 0000000..7c20b0d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsFilerV100Impl.h
@@ -0,0 +1,443 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OdGsFilerV100Impl_H__
+#define __OdGsFilerV100Impl_H__
+
+#include "TD_PackPush.h"
+#include "Ge/GeMatrix3d.h"
+#include "Ge/GeExtents3d.h"
+#include "DbBaseDatabase.h"
+#include "GsFiler.h"
+#include "OdStack.h"
+#include "RxObjectImpl.h"
+
+
+// Database linker
+class OdGsFilerDbLinker : public OdRxObject
+{
+public:
+  OdGsFilerDbLinker() { }
+  virtual ~OdGsFilerDbLinker() { }
+public:
+  // Get database hash
+  virtual OdBinaryData getDbHash(const OdDbBaseDatabase *pDb) const;
+
+  // Transform database handle
+  virtual OdUInt64 stubToDbHandle(OdDbStub *pStub) const = 0;
+  virtual OdDbStub *handleToDbStub(OdUInt64 nHandle) const = 0;
+
+  // Util methods
+  virtual OdDbBaseDatabase *getDatabase() const = 0;
+  virtual OdDbBaseDatabase *getDatabase(OdDbStub *pStub) const = 0;
+};
+
+typedef OdSmartPtr<OdGsFilerDbLinker> OdGsFilerDbLinkerPtr;
+
+
+
+#define STL_USING_MAP
+#define STL_USING_SET
+#include "OdaSTL.h"
+
+// Implement substitutor
+struct GS_TOOLKIT_EXPORT OdGsFiler_SubstitutorImpl : public OdRxObject, public OdGsFiler::Substitutor
+{
+  template<OdUInt32 nBytes> struct DataTyp
+  {
+    OdUInt8 m_data[nBytes];
+    static int compare(const DataTyp &t1, const DataTyp &t2)
+    {
+      for (OdUInt32 nb = 0; nb < nBytes; nb++)
+      {
+        if (t1.m_data[nb] != t2.m_data[nb])
+          return int(t1.m_data[nb]) - int(t2.m_data[nb]);
+      }
+      return 0;
+    }
+    bool operator ==(const DataTyp &t2) const { return compare(*this, t2) == 0; }
+    bool operator !=(const DataTyp &t2) const { return compare(*this, t2) != 0; }
+    bool operator <(const DataTyp &t2) const { return compare(*this, t2) < 0; }
+    bool operator <=(const DataTyp &t2) const { return compare(*this, t2) <= 0; }
+    bool operator >(const DataTyp &t2) const { return compare(*this, t2) > 0; }
+    bool operator >=(const DataTyp &t2) const { return compare(*this, t2) >= 0; }
+
+    operator const void*() const { return this; }
+  };
+  struct VoidsSet
+  {
+    void *m_pVoid;
+    OdGsFiler::SubstitutionActuator *m_pAct;
+  };
+  struct VoidArry : public VoidsSet
+  {
+    OdInt32 m_nVoids;
+    VoidArry()
+      : m_nVoids(0)
+    {
+      m_pVoid = NULL;
+      m_pAct = NULL;
+    }
+    ~VoidArry() { clear(); }
+    VoidsSet *getSet() { return (VoidsSet*)m_pVoid; }
+    VoidsSet *at(OdInt32 n) {
+      if (m_nVoids == 1)
+        return this;
+      return getSet() + n;
+    }
+    bool contains(void *pVoid);
+    void add(void *pVoid, OdGsFiler::SubstitutionActuator *pAct);
+    void kill(void *pVoid);
+    void clear();
+  };
+
+  struct AbstractTyp
+  {
+    void *m_pContainer;
+    AbstractTyp() : m_pContainer(NULL) { }
+  };
+  typedef std::map<OdUInt32, AbstractTyp> RegsMap;
+  typedef std::map<OdUInt32, AbstractTyp> SubstsMap;
+  RegsMap m_regs;
+  SubstsMap m_substs;
+
+  template<OdUInt32 nBytes> struct Procs
+  {
+    typedef OdGsFiler_SubstitutorImpl::DataTyp<nBytes> ProcTyp;
+    typedef std::map<ProcTyp, ProcTyp> RegMap;
+    typedef std::map<ProcTyp, VoidArry> SubstMap;
+    static void makeSubst(void *pPlace, const void *pSubstitution)
+    {
+      *(ProcTyp*)(pPlace) = *(const ProcTyp*)(pSubstitution);
+    }
+    static void runSubst(void *pPlace, const void *pSubstitution, OdGsFiler::SubstitutionActuator *pActuator)
+    {
+      ODA_ASSERT(pActuator);
+      pActuator->applySubstitution(pPlace, pSubstitution, makeSubst);
+    }
+    static void subst(OdGsFiler_SubstitutorImpl &impl, const void *pValue, void *pPlace, OdGsFiler::SubstitutionActuator *pAct, const void *pSubstitution, bool bClear)
+    {
+      if (pPlace && pSubstitution)
+      {
+        runSubst(pPlace, pSubstitution, pAct);
+        return;
+      }
+      if (pValue)
+      {
+        if (pPlace)
+        {
+          RegMap *pRegMap = (RegMap*)impl.m_regs[nBytes].m_pContainer;
+          OD_TYPENAME RegMap::iterator itReg = pRegMap->find(*(const ProcTyp*)pValue);
+          if (itReg != pRegMap->end())
+          {
+            runSubst(pPlace, itReg->second, pAct);
+            if (bClear)
+              pRegMap->erase(itReg);
+          }
+        }
+        else if (pSubstitution)
+        {
+          SubstMap *pSubMap = (SubstMap*)impl.m_substs[nBytes].m_pContainer;
+          OD_TYPENAME SubstMap::iterator itSub = pSubMap->find(*(const ProcTyp*)pValue);
+          if (itSub != pSubMap->end())
+          {
+            for (OdInt32 n = 0; n < itSub->second.m_nVoids; n++)
+              runSubst(itSub->second.at(n)->m_pVoid, pSubstitution, itSub->second.at(n)->m_pAct);
+            if (bClear)
+              pSubMap->erase(itSub);
+          }
+        }
+        else
+        {
+          RegMap *pRegMap = (RegMap*)impl.m_regs[nBytes].m_pContainer;
+          SubstMap *pSubMap = (SubstMap*)impl.m_substs[nBytes].m_pContainer;
+          if (pRegMap && pSubMap)
+          {
+            OD_TYPENAME RegMap::iterator itReg = pRegMap->find(*(const ProcTyp*)pValue);
+            OD_TYPENAME SubstMap::iterator itSub = pSubMap->find(*(const ProcTyp*)pValue);
+            if ((itReg != pRegMap->end()) && (itSub != pSubMap->end()))
+            {
+              for (OdInt32 n = 0; n < itSub->second.m_nVoids; n++)
+                runSubst(itSub->second.at(n)->m_pVoid, itReg->second, itSub->second.at(n)->m_pAct);
+            }
+            if (bClear)
+            {
+              if (itReg != pRegMap->end())
+                pRegMap->erase(itReg);
+              if (itSub != pSubMap->end())
+                pSubMap->erase(itSub);
+            }
+          }
+          else if (bClear)
+          {
+            if (pRegMap)
+            {
+              OD_TYPENAME RegMap::iterator itReg = pRegMap->find(*(const ProcTyp*)pValue);
+              if (itReg != pRegMap->end())
+                pRegMap->erase(itReg);
+            }
+            if (pSubMap)
+            {
+              OD_TYPENAME SubstMap::iterator itSub = pSubMap->find(*(const ProcTyp*)pValue);
+              if (itSub != pSubMap->end())
+                pSubMap->erase(itSub);
+            }
+          }
+        }
+        return;
+      }
+      RegMap *pRegMap = (RegMap*)impl.m_regs[nBytes].m_pContainer;
+      SubstMap *pSubMap = (SubstMap*)impl.m_substs[nBytes].m_pContainer;
+      if (pRegMap && pSubMap)
+      {
+        OD_TYPENAME RegMap::iterator itReg = pRegMap->begin();
+        while (itReg != pRegMap->end())
+        {
+          OD_TYPENAME SubstMap::iterator itSub = pSubMap->find(itReg->first);
+          if (itSub != pSubMap->end())
+          {
+            for (OdInt32 n = 0; n < itSub->second.m_nVoids; n++)
+              runSubst(itSub->second.at(n)->m_pVoid, itReg->second, itSub->second.at(n)->m_pAct);
+          }
+          itReg++;
+        }
+      }
+      if (bClear)
+      {
+        if (pRegMap) { delete pRegMap; impl.m_regs[nBytes].m_pContainer = NULL; }
+        if (pSubMap) { delete pSubMap; impl.m_substs[nBytes].m_pContainer = NULL; }
+      }
+    }
+    static void reg(OdGsFiler_SubstitutorImpl &impl, const void *pValue, const void *pSubstitution, bool bRegister, bool bImmediate)
+    {
+      if (bRegister)
+      {
+        OdGsFiler_SubstitutorImpl::AbstractTyp &cont = impl.m_regs[nBytes];
+        if (!cont.m_pContainer)
+          cont.m_pContainer = new RegMap;
+        RegMap &pMap = *(RegMap*)cont.m_pContainer;
+        pMap[*(const ProcTyp*)pValue] = *(const ProcTyp*)pSubstitution;
+      }
+      if (bImmediate)
+        subst(impl, pValue, NULL, NULL, pSubstitution, false);
+    }
+    static void req(OdGsFiler_SubstitutorImpl &impl, void *pPlace, OdGsFiler::SubstitutionActuator *pAct, const void *pValue, bool bRegister, bool bImmediate)
+    {
+      if (bRegister)
+      {
+        if (bImmediate)
+        {
+          RegMap *pRegMap = (RegMap*)impl.m_regs[nBytes].m_pContainer;
+          if (pRegMap)
+          {
+            OD_TYPENAME RegMap::iterator itReg = pRegMap->find(*(const ProcTyp*)pValue);
+            if (itReg != pRegMap->end())
+            {
+              runSubst(pPlace, itReg->second, pAct);
+              return;
+            }
+          }
+        }
+        OdGsFiler_SubstitutorImpl::AbstractTyp &cont = impl.m_substs[nBytes];
+        if (!cont.m_pContainer)
+          cont.m_pContainer = new SubstMap;
+        SubstMap &pMap = *(SubstMap*)cont.m_pContainer;
+        pMap[*(const ProcTyp*)pValue].add(pPlace, pAct);
+      }
+      else if (bImmediate)
+        subst(impl, pValue, pPlace, pAct, NULL, false);
+    }
+    static void clear(OdGsFiler_SubstitutorImpl &impl, const void *pValue)
+    {
+      RegMap *pRegMap = (RegMap*)impl.m_regs[nBytes].m_pContainer;
+      SubstMap *pSubMap = (SubstMap*)impl.m_substs[nBytes].m_pContainer;
+      if (pValue)
+      {
+        if (pRegMap)
+        {
+          OD_TYPENAME RegMap::iterator it = pRegMap->find(*(const ProcTyp*)pValue);
+          if (it != pRegMap->end())
+            pRegMap->erase(it);
+        }
+        if (pSubMap)
+        {
+          OD_TYPENAME SubstMap::iterator it = pSubMap->find(*(const ProcTyp*)pValue);
+          if (it != pSubMap->end())
+            pSubMap->erase(it);
+        }
+      }
+      else
+      {
+        if (pRegMap) { delete pRegMap; impl.m_regs[nBytes].m_pContainer = NULL; }
+        if (pSubMap) { delete pSubMap; impl.m_substs[nBytes].m_pContainer = NULL; }
+      }
+    }
+  };
+
+  static OdGsFiler::SubstitutionActuator g_defActuator;
+  static struct OdRxObjectSubstitutionActuator : public OdGsFiler::SubstitutionActuator
+  {
+    OdRxObjectSubstitutionActuator() { }
+    virtual void applySubstitution(void *pPlace, const void *pValue, SetPtrFunc pSetFunc)
+    {
+      OdGsFiler::SubstitutionActuator::applySubstitution(pPlace, pValue, pSetFunc);
+      if (pPlace)
+        (*reinterpret_cast<OdRxObjectPtr*>(pPlace))->addRef();
+    }
+  } g_rxObjectActuator;
+
+  // Register known substitution
+  virtual void registerSubstitution(const void *pValue, const void *pSubstitution, OdUInt32 size = sizeof(OdIntPtr), bool bRegister = true, bool bImmediate = false);
+  // Register substitution request
+  virtual void requestSubstitution(void *pPlace, const void *pValue, OdUInt32 size = sizeof(OdIntPtr), bool bRegister = true, bool bImmediate = true);
+  // Register substitution request for smart pointer
+  virtual void requestSubstitution(OdBaseObjectPtr *pPlace, const void *pValue, bool bRegister = true, bool bImmediate = true);
+  // Register substitution with non-default behavior
+  virtual void requestSubstitution(void *pPlace, OdGsFiler::SubstitutionActuator *pActuator, const void *pValue, OdUInt32 size = sizeof(OdIntPtr), bool bRegister = true, bool bImmediate = true);
+  // Clear substitutions
+  virtual void clearSubstitutions(const void *pValue = NULL, OdUInt32 size = 0);
+  // Run substitutions
+  virtual void runSubstitutions(const void *pValue = NULL, OdUInt32 size = 0, bool bClear = true);
+#undef REG_FUNCCALL
+  ~OdGsFiler_SubstitutorImpl() { clearSubstitutions(); }
+};
+
+
+// Implement V1 version filer
+class GS_TOOLKIT_EXPORT OdGsFilerV100Impl : public OdGsFiler {
+protected:
+  enum Flags {
+    kOpenedForWrite = (1 << 0),
+
+    kLastFlag = kOpenedForWrite
+  };
+protected:
+  mutable OdStreamBufPtr  m_pStream;
+  OdGsFilerDbLinkerPtr    m_pLinker;
+  OdUInt64                m_nSectionsToWrite;
+  OdUInt64                m_nSectionsToRead;
+  OdUInt32                m_nFlags;
+  OdUInt32                m_nVersion;
+  mutable Section         m_nCurSection;
+  mutable OdUInt32        m_nCurSectionSize;
+  struct WrSectionData {
+    OdGsFiler::Section  m_type;
+    OdUInt64            m_begin;
+    WrSectionData()
+      : m_type(OdGsFiler::kEOFSection)
+      , m_begin(0)
+    { }
+    WrSectionData(OdGsFiler::Section section, OdUInt32 tell)
+      : m_type(section)
+      , m_begin(tell)
+    { }
+  };
+  OdStack<WrSectionData> m_sectionStack;
+  mutable OdSmartPtr<OdGsFiler_SubstitutorImpl> m_subst;
+  typedef std::map<OdString, OdRxObjectPtr> ArbDataMap;
+  ArbDataMap m_arbData;
+  typedef std::set<const void *> RegPtrsSet;
+  RegPtrsSet m_regPtrs;
+protected:
+  bool isWriting() const { return GETBIT(m_nFlags, kOpenedForWrite); }
+  void setWriting(bool bSet) { SETBIT(m_nFlags, kOpenedForWrite, bSet); }
+
+  void assertWr() const { if (!isWriting()) throw OdError(eNotOpenForWrite); }
+  void assertRd() const { if (isWriting()) throw OdError(eNotOpenForRead); }
+public:
+  OdGsFilerV100Impl()
+    : m_nSectionsToWrite(OdUInt64(-1))
+    , m_nSectionsToRead(OdUInt64(-1))
+    , m_nFlags(0)
+    , m_nVersion(kV2)
+    , m_nCurSection(kEOFSection)
+    , m_nCurSectionSize(0)
+  {
+    m_subst = OdRxObjectImpl<OdGsFiler_SubstitutorImpl>::createObject();
+  }
+  ~OdGsFilerV100Impl()
+  {
+  }
+
+  OdUInt32 headerTestChunk() const;
+  bool rdHeaderSection();
+  void wrHeaderSection();
+
+  virtual bool setStream(OdStreamBuf *pStream, bool bWrite = false);
+  virtual OdStreamBufPtr getStream() const;
+
+  virtual void setDatabase(const OdDbBaseDatabase *pDb);
+  virtual OdDbBaseDatabase *getDatabase() const;
+
+  virtual void setVersion(OdUInt32 nVersion);
+  virtual OdUInt32 version() const;
+
+  virtual void wrDbHash(const OdDbBaseDatabase *pDb);
+  virtual bool checkDbHash(const OdDbBaseDatabase *pDb);
+
+  virtual void setWriteSections(OdUInt64 nSections);
+  virtual void setWriteSection(Section section, bool bSet);
+  virtual bool isWriteSection(Section section) const;
+
+  virtual void setReadSections(OdUInt64 nSections);
+  virtual void setReadSection(Section section, bool bSet);
+  virtual bool isReadSection(Section section) const;
+
+  virtual void wrSectionBegin(Section section);
+  virtual void wrSectionEnd(Section section);
+  virtual void wrEOFSection();
+
+  virtual Section rdSection() const;
+  virtual Section curSection() const;
+  virtual void skipSection() const;
+  virtual void rdBackSection() const;
+  virtual bool checkEOF() const;
+
+  virtual Substitutor *subst() const;
+  virtual void makeSubstitutions(bool bClear = true) const;
+  virtual OdRxObjectPtr getSubstitutor() const;
+  virtual void setSubstitutor(OdRxObject *pSubst);
+
+  virtual void setArbitraryData(const OdChar *pName, OdRxObject *pObject);
+  virtual OdRxObjectPtr getArbitraryData(const OdChar *pName) const;
+  virtual bool hasArbitraryData(const OdChar *pName) const;
+  virtual void clearArbitraryData();
+
+  virtual void registerPtr(const void *pPtr);
+  virtual void unregisterPtr(const void *pPtr);
+  virtual bool isPtrRegistered(const void *pPtr) const;
+  virtual void clearRegisteredPtrs();
+
+  virtual void wrHandle(OdDbStub *pHandle);
+  virtual OdDbStub *rdHandle() const;
+
+  virtual void wrClass(OdRxObject *pObj);
+  virtual OdRxObjectPtr rdClass() const;
+
+  virtual void wrRawData(const void *pData, OdUInt32 nDataSize);
+  virtual void rdRawData(void *pData, OdUInt32 nDataSize) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif // __OdGsFilerV100Impl_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsHighlightData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsHighlightData.h
new file mode 100755
index 0000000..e69f072
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsHighlightData.h
@@ -0,0 +1,179 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGSHIGHLIGHTDATA_H__
+#define __ODGSHIGHLIGHTDATA_H__
+
+#include "GsMarkerArray.h"
+#include "Gi/GiDrawable.h"
+#include "Gs/GsExport.h"
+#include "TPtr.h"
+
+#include "TD_PackPush.h"
+
+class OdGsHlBranch;
+typedef TPtr<OdGsHlBranch> OdGsHlBranchPtr;
+typedef OdArray<OdGsHlBranchPtr> OdGsHlBranchPtrArray;
+
+class OdGsHlBranchReactor;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsHlBranchReactor object pointers.
+*/
+typedef OdSmartPtr<OdGsHlBranchReactor> OdGsHlBranchReactorPtr;
+
+/** \details
+    This class is a service class to keep information about highlighted subentities and nested entities on OsGsEntityNode.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsHlBranch
+{
+  protected:
+    ODRX_HEAP_OPERATORS();
+
+    OdRefCounter m_nRefCounter;        // shared ownership
+    const void* m_pDrawableId;         // persistent id or transient drawable pointer (depends from flag)
+    bool m_bPersistentId;              // true if m_pDrawableId stores OdDbStub pointer
+    OdGsHlBranchReactorPtr m_pReactor; // OdGsHlBranch reactor
+    OdGsMarkerArray m_aMarkers;        // sorted array of markers
+    OdGsHlBranchPtrArray m_aChild;     // sorted array of nested entities
+    // the sorting rule: first are transient entities with id 0, sorted by drw() value,
+    // next are persistent entities with id != 0, sorted by id()
+  public:
+    OdGsHlBranch(const OdDbStub* pDrawableId)
+      : m_nRefCounter(1)
+      , m_pDrawableId(pDrawableId)
+      , m_bPersistentId(true)
+      , m_aMarkers(0, 1)
+      , m_aChild(0, 1)
+    {
+    }
+    OdGsHlBranch(const OdGiDrawable* pTransDrawable)
+      : m_nRefCounter(1)
+      , m_pDrawableId(pTransDrawable)
+      , m_bPersistentId(false)
+      , m_aMarkers(0, 1)
+      , m_aChild(0, 1)
+    {
+    }
+
+    static OdGsHlBranchPtr create(OdDbStub* pDrawableId, OdGsMarker marker);
+    static OdGsHlBranchPtr create(OdGiDrawable* pTransDrawable, OdGsMarker marker);
+
+    void addRef()
+    {
+      ++m_nRefCounter;
+    }
+    void release()
+    {
+      ODA_ASSERT((m_nRefCounter > 0));
+      if (!(--m_nRefCounter))
+        delete this;
+    }
+
+    // access to nested entities
+    const OdGsHlBranchPtrArray& aChild() const { return m_aChild; }
+    // access to subentities
+    const OdGsMarkerArray& markers() const { return m_aMarkers; }
+
+    // add/remove/find nested entities info
+    OdGsHlBranch* addChild(OdDbStub* pDrawableId);
+    OdGsHlBranch* addChild(const OdGiDrawable* pTransDrawable);
+    void removeChild(const OdGsHlBranch* pChild);
+    OdGsHlBranch* findChild(const OdDbStub* pDrawableId); // search in a sorted array, fast
+    OdGsHlBranch* findChild(const OdGiDrawable* pTransDrawable); // search in a sorted array, fast
+
+    // add/remove/find subentities info
+    bool addMarker(OdGsMarker marker);
+    bool removeMarker(OdGsMarker marker);
+    bool hasMarker(OdGsMarker marker) const; // search in a sorted array, fast
+
+    // access to the OdGsEntityNode data
+    const OdDbStub* id() const
+    {
+      return (m_bPersistentId) ? reinterpret_cast<const OdDbStub*>(m_pDrawableId) : NULL;
+    }
+    const OdGiDrawable* drw() const
+    {
+      return (!m_bPersistentId) ? reinterpret_cast<const OdGiDrawable*>(m_pDrawableId) : NULL;
+    }
+    bool isEmpty() const
+    {
+      return markers().isEmpty() && aChild().isEmpty();
+    }
+
+    // access flags
+    bool isPersistentId() const { return m_bPersistentId; }
+
+    // reactor
+    void setReactor(OdGsHlBranchReactor *pReactor);
+    OdGsHlBranchReactor *reactor();
+
+    static inline bool isValidMarker(OdGsMarker marker)
+    {
+      return (marker != kNullSubentIndex);
+    }
+};
+
+/** \details
+    This class is a reactor for OdGsHlBranch class.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsHlBranchReactor : public OdRxObject
+{
+  public:
+    virtual void onChildAdded(OdGsHlBranch *pHlBranch, OdGsHlBranch *pHlBranchAdded) = 0;
+    virtual void onChildRemoved(OdGsHlBranch *pHlBranch, OdGsHlBranch *pHlBranchRemoved) = 0;
+    virtual void onMarkerAdded(OdGsHlBranch *pHlBranch, OdGsMarker gsMarker) = 0;
+    virtual void onMarkerRemoved(OdGsHlBranch *pHlBranch, OdGsMarker gsMarker) = 0;
+};
+
+// gcc3x template instantiation must be done after class declaration
+inline void OdGsHlBranch::setReactor(OdGsHlBranchReactor *pReactor) { m_pReactor = pReactor; }
+inline OdGsHlBranchReactor *OdGsHlBranch::reactor() { return m_pReactor.get(); }
+
+/** \details
+    This class is a multimodule reactor reactor implementation for OdGsHlBranch class.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsHlBranchMultimoduleReactor
+{
+  public:
+    static void attach(OdGsHlBranch *pHlBranch, const void *pModule, OdGsHlBranchReactor *pReactor);
+    static void detach(OdGsHlBranch *pHlBranch, const void *pModule);
+    static OdGsHlBranchReactor *getReactor(OdGsHlBranch *pHlBranch, const void *pModule);
+    static void setReactor(OdGsHlBranch *pHlBranch, const void *pModule, OdGsHlBranchReactor *pReactor);
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODGSHIGHLIGHTDATA_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLayerNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLayerNode.h
new file mode 100755
index 0000000..a4f2dd8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLayerNode.h
@@ -0,0 +1,189 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_LAYER_NODE__
+#define __OD_GS_LAYER_NODE__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsNode.h"
+#include "Gi/GiLayerTraitsData.h"
+#include "ThreadsCounter.h"
+#include "GsEmptyMetafileCache.h"
+#include "OdVector.h"
+
+typedef OdVector<OdGiLayerTraitsData, OdMemoryAllocator<OdGiLayerTraitsData> > OdGiLayerTraitsDataArray;
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsLayerNode : public OdGsNode
+{
+  enum
+  {
+    kDirty     = OdGsNode::kLastFlag << 1,
+    kVpDep     = OdGsNode::kLastFlag << 2,
+    kVpFrozen  = OdGsNode::kLastFlag << 3,
+
+    kLastFlag = kVpFrozen
+  };
+
+  /** \details
+      No operation.
+  */
+  void update(OdGsUpdateContext& ctx, OdGsContainerNode* pParent,
+      OdSiSpatialIndex* pParentIndex);
+
+  /** \details
+      No operation.
+  */
+  virtual void display(OdGsDisplayContext& ctx);
+
+  /** \details
+      No operation.
+  */
+  bool extents(OdGeExtents3d& ) const;
+
+  void propagateLayerChanges(OdGsViewImpl& view);
+
+  OdGiLayerTraitsData m_layerTraits;
+  mutable OdGiLayerTraitsDataArray m_vpLayerTraits;
+
+  friend class OdGsBaseModel;
+  OdGsLayerNode* m_pNextChanged;
+public:
+  ODRX_DECLARE_MEMBERS(OdGsLayerNode);
+
+  /** \param pModel [in]  Pointer to the BaseModel object.
+    \param pUnderlyingDrawable [in]  Pointer to the underlying Drawable object.
+  */
+  OdGsLayerNode(OdGsBaseModel* pModel, const OdGiDrawable* pUnderlyingDrawable, bool bSetGsNode = true);
+  ~OdGsLayerNode();
+
+  void destroy() {}
+
+  OdGiLayerTraitsData& layerTraits(OdUInt32 nVpId);
+
+  const OdGiLayerTraitsData& layerTraits(OdUInt32 nVpId) const;
+
+  void reserveLayerTraits(OdUInt32 nVpId);
+
+  bool isDirty() const;
+  void setDirty(bool bDirty);
+  bool isUpToDate(OdUInt32 nVpId) const;
+  bool isValidCache(OdUInt32 nVpId) const;
+  void setCacheUpToDate(OdUInt32 nVpId);
+  bool isInvalidated() const;
+  bool isVpDep() const;
+  virtual ENodeType nodeType() const { return kLayerNode; }
+  inline bool isVpFrozen() const;
+  inline bool isFrozen() const;
+
+  /** \details
+      No operation.
+  */
+  void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask);
+
+  /** \details
+  */
+  void update(OdGsBaseVectorizer& view);
+
+  bool isTraitsCompatible(OdUInt32 nVpId1, OdUInt32 nVpId2) const;
+
+  bool saveNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL) const;
+  bool loadNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL);
+private:
+  friend class OdGsEmptyMetafileCache;
+  OdGsEmptyMetafileCache m_emfCache;
+  OdMutexPtr m_mt;
+};
+
+inline bool
+OdGsLayerNode::isDirty() const
+{
+  return GETBIT(m_flags, kDirty);
+}
+
+inline void
+OdGsLayerNode::setDirty(bool bDirty)
+{
+  SETBIT(m_flags, kDirty, bDirty);
+}
+
+inline bool OdGsLayerNode::isUpToDate(OdUInt32 nVpId) const
+{
+  if(isInvalidated())
+    return false;
+  if(isVpDep())
+  {
+    if(nVpId > 0 && m_vpLayerTraits.size() < nVpId)
+      return false;
+    return !GETBIT(layerTraits(nVpId).flags(), 0x80000000);
+  }
+  return !GETBIT(layerTraits(0).flags(), 0x80000000);
+}
+
+inline bool OdGsLayerNode::isInvalidated() const
+{
+  return (m_layerTraits.m_flags == 0xFFFFFFFF) && !m_vpLayerTraits.size();
+}
+
+inline bool OdGsLayerNode::isVpDep() const
+{
+  return GETBIT(m_flags, kVpDep);
+}
+
+inline OdGiLayerTraitsData& OdGsLayerNode::layerTraits(OdUInt32 nVpId)
+{
+  return const_cast<OdGiLayerTraitsData&>(static_cast<const OdGsLayerNode*>(this)->layerTraits(nVpId));
+}
+
+inline const OdGiLayerTraitsData& OdGsLayerNode::layerTraits(OdUInt32 nVpId) const
+{
+  if(isVpDep() && nVpId > 0)
+  {
+    ODA_ASSERT(m_vpLayerTraits.size() >= nVpId);
+    return m_vpLayerTraits[--nVpId];
+  }
+  return m_layerTraits;
+}
+
+inline bool OdGsLayerNode::isVpFrozen() const
+{
+  return GETBIT(m_flags, kVpFrozen);
+}
+
+inline bool OdGsLayerNode::isFrozen() const
+{
+  return m_layerTraits.isFrozen();
+}
+
+// Include inline OdGsEmptyMetafileCache methods
+#ifndef __OD_GS_EMPTY_METAFILE_CACHE_INLINES_INCLUDE__
+#define __OD_GS_EMPTY_METAFILE_CACHE_INLINES_INCLUDE__
+#include "GsEmptyMetafileCache.h"
+#endif
+//
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_LAYER_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLight.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLight.h
new file mode 100755
index 0000000..149a456
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLight.h
@@ -0,0 +1,117 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OdGsLight_h_Included_
+#define _OdGsLight_h_Included_
+
+#include "RxObject.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for Light objects in an OdGs framework.
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class FIRSTDLL_EXPORT OdGsLight : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsLight);
+
+  enum LightType
+  {
+    kPointLight      = 0,
+    kDistantLight    = 1,
+    kSpotlight       = 2
+  };
+
+  enum LightAttenuation
+  {
+    kAttenNone            = 0,
+    kAttenInverseLinear   = 1,
+    kAttenInverseSquare   = 2
+  };
+
+  /** \details
+    Returns the type of this Light object.
+    
+    \remarks
+    type() returns one of the following:
+    
+    <table>
+    Name             Value
+    kPointLight      0
+    kDistantLight    1
+    kSpotlight       2
+    </table>
+  */
+  virtual LightType type() const = 0;
+  
+  /** \details
+    Returns the WCS position of this Light object. 
+  */
+  virtual OdGePoint3d position() const = 0;
+
+  /** \details
+    Returns the WCS target of this Light object. 
+  */
+  virtual OdGePoint3d target() const = 0;
+  /** \details
+    Returns the WCS direction of this Light object. 
+  */
+  virtual OdGeVector3d direction() const = 0;
+  /** \details
+    Returns the color of this Light object. 
+  */
+  virtual ODCOLORREF color() const = 0;
+  /** \details
+    Returns the intensity of this Light object. 
+  */
+  virtual double intensity() const = 0;
+  /** \details
+    Returns the attenuation of this Light object. 
+    
+    \remarks
+    attenuation() returns one of the following:
+    
+    <table>
+    Name                  Value      
+    kAttenNone            0          
+    kAttenInverseLinear   1
+    kAttenInverseSquare   2
+    </table>
+  */
+  virtual LightAttenuation attenuation() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsLight object pointers.
+*/
+typedef OdSmartPtr<OdGsLight> OdGsLightPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _OdGsLight_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLightNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLightNode.h
new file mode 100755
index 0000000..42f715d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsLightNode.h
@@ -0,0 +1,93 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_LIGHT_NODE__
+#define __OD_GS_LIGHT_NODE__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsEntityNode.h"
+#include "Gi/GiLightTraitsData.h"
+
+// Lights are entities that have some special meaning
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsLightNode : public OdGsEntityNode
+{
+
+  // In case light isn't in model space
+  
+  OdGeMatrix3d m_model2World; 
+  OdGiLightTraitsData* m_pLightTraits;
+  OdGsLightNode *m_pNextLight; // #21117 : pointer added for future needs. Probably temporary.
+  OdRxObjectPtr m_pLightSubData; // #21117 : pointer added for future needs. Probably temporary.
+
+  void update();
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsLightNode);
+
+  ~OdGsLightNode();
+  OdGsLightNode(OdGsBaseModel* pModel, const OdGiDrawable* pUnderlyingDrawable, bool bSetGsNode = true);
+public:
+
+  void setModelTransform(const OdGeMatrix3d& xform) { m_model2World = xform; }
+  OdGeMatrix3d modelTransform() const { return m_model2World; }
+
+  OdGiDrawable::DrawableType drawableType() { return underlyingDrawable()->drawableType(); }
+
+  virtual bool isLight() const { return true; }
+
+  OdGiPointLightTraitsData* pointLightTraitsData() { return (OdGiPointLightTraitsData*)m_pLightTraits; }
+  OdGiSpotLightTraitsData* spotLightTraitsData() { return (OdGiSpotLightTraitsData*)m_pLightTraits; }
+  OdGiDistantLightTraitsData* distantLightTraitsData() { return (OdGiDistantLightTraitsData*)m_pLightTraits; }
+  OdGiWebLightTraitsData* webLightTraitsData() { return (OdGiWebLightTraitsData*)m_pLightTraits; }
+  OdGiLightTraitsData* lightTraitsData() { return m_pLightTraits; }
+
+  // OdGsNode virtual overrides
+  
+  virtual void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask);
+  virtual void update(OdGsUpdateContext& ctx, OdGsContainerNode* pParent,
+      OdSiSpatialIndex*);
+
+  virtual bool saveClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer) const;
+  virtual bool loadClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer);
+
+  /** \details
+    Returns true if and only if specified drawable is a light entity.
+    \param drawableType [in]  Drawable type.
+  */
+  static bool drawableIsLight(OdGiDrawable::DrawableType drawableType);
+};
+
+typedef OdSmartPtr<OdGsLightNode> OdGsLightNodePtr;
+
+inline bool OdGsLightNode::drawableIsLight(OdGiDrawable::DrawableType drawableType)
+{
+  return (drawableType >= OdGiDrawable::kDistantLight && drawableType <= OdGiDrawable::kSpotLight) || (drawableType == OdGiDrawable::kWebLight);
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_LIGHT_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialCache.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialCache.h
new file mode 100755
index 0000000..cfd68d0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialCache.h
@@ -0,0 +1,99 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_MATERIAL_CACHE__
+#define __OD_GS_MATERIAL_CACHE__
+
+// Cache for material nodes
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+
+class OdGsBaseVectorizer;
+class OdGsBaseModel;
+class OdGsMaterialNode;
+class OdGsFiler;
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsMaterialCache : public OdRxObject
+{
+  protected:
+    OdUInt32                m_nMaterials;
+    OdGsMaterialNode*       m_pMaterials;
+    OdGsMaterialNode*       m_pCurrentNode;
+    OdGsBaseModel*          m_pModel;
+  public:
+    OdGsMaterialCache();
+    ~OdGsMaterialCache();
+
+    ODRX_DECLARE_MEMBERS(OdGsMaterialCache);
+
+    void setBaseModel(OdGsBaseModel* pModel);
+
+    OdGsBaseModel* baseModel() { return m_pModel; }
+    const OdGsBaseModel* baseModel() const { return m_pModel; }
+
+    static OdSmartPtr<OdGsMaterialCache> createObject(OdGsBaseModel* pModel);
+
+    // Search for already initialized node
+    OdGsMaterialNode *searchNode(OdDbStub *mtl) const;
+    // Get current node
+    OdGsMaterialNode *currentNode() const;
+    // Initialize new node, if not already initialized or changed and set's as current node
+    void setMaterial(OdGsBaseVectorizer& view, OdDbStub *mtl, bool bDontReinit = false);
+    // Reset current node
+    void setCurrentNode(OdGsMaterialNode *curNode = NULL);
+
+    // Remove material node on Erase
+    bool removeNode(OdDbStub *mtl);
+    bool removeNode(OdGsCache *pCsh);
+
+    // Cache accessors
+    OdUInt32 getCacheSize() const;
+    OdGsMaterialNode *getCacheNode(OdUInt32 n) const;
+
+    // Aliases
+    inline void addNode(OdGsBaseVectorizer& view, OdDbStub *mtl)
+    {
+      setMaterial(view, mtl, true);
+    }
+
+    // Clear cache
+    void clearCache();
+
+    // Invalidate cache
+    void invalidateCache();
+
+    // Save cache to filer
+    bool saveMaterialCache(OdGsFiler *pFiler) const;
+    // Load cache from filer
+    bool loadMaterialCache(OdGsFiler *pFiler);
+};
+
+typedef OdSmartPtr<OdGsMaterialCache> OdGsMaterialCachePtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_MATERIAL_CACHE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialNode.h
new file mode 100755
index 0000000..46c586e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsMaterialNode.h
@@ -0,0 +1,137 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_MATERIAL_NODE__
+#define __OD_GS_MATERIAL_NODE__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsNode.h"
+#include "Gi/GiMaterial.h"
+#include "Gi/GiMaterialTraitsData.h"
+#define STL_USING_MAP
+#include "OdaSTL.h"
+
+// Materials cached in GsModel, but in separate cache, instead all geometry.
+
+// GsModel caches hierarchy:
+// OdGsBaseModel
+//   OdGsContainerNode <-- OdGsNode - geometry cache
+//     OdGsEntityNode <-- OdGsNode
+//       OdGsLightNode - has separate array, but stored into geometry cache too
+//   OdGsLayerNode <-- OdGsNode - layers cache
+// OdGsBaseMode::OdGsMaterialCache
+//   OdGsMaterialNode <-- OdGsNode - materials cache
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsMaterialNode : public OdGsNode
+{
+  /** \details
+      No operation.
+  */
+  void update(OdGsUpdateContext& ctx, OdGsContainerNode* pParent,
+      OdSiSpatialIndex* pParentIndex);
+
+  /** \details
+      No operation.
+  */
+  void display(OdGsDisplayContext& ctx);
+
+  /** \details
+      No operation.
+  */
+  bool extents(OdGeExtents3d& ) const;
+
+  /** \details
+      No operation.
+  */
+  virtual void propagateLayerChanges(OdGsViewImpl& view);
+
+  OdGiMaterialTraitsData m_materialTraits;
+  bool m_dataInitialized;
+  bool m_dataModified;
+  struct DataEntry
+  {
+    bool m_cachedDataModified;
+    OdRxObjectPtr m_pCachedData;
+
+    DataEntry() : m_cachedDataModified(true) { }
+  };
+  typedef std::map<const void *, DataEntry> CacheMap;
+  CacheMap m_cacheMap;
+
+  mutable OdGsMaterialNode* m_pMatPrev;
+  mutable OdGsMaterialNode* m_pMatNext;
+public:
+  ODRX_DECLARE_MEMBERS(OdGsMaterialNode);
+
+  /** \param pModel [in]  Pointer to the BaseModel object.
+    \param pUnderlyingDrawable [in]  Pointer to the underlying Drawable object.
+  */
+  OdGsMaterialNode(OdGsBaseModel* pModel, const OdGiDrawable* pUnderlyingDrawable, bool bSetGsNode = true);
+  ~OdGsMaterialNode();
+
+  void destroy() {}
+
+  OdGiMaterialTraitsData& materialTraits();
+  const OdGiMaterialTraitsData& materialTraits() const;
+
+  // Called from OdGsNode if material data changed at update.
+  // May be used by inherited nodes to update device-dependant information.
+  virtual void onModified(OdGsBaseVectorizer& view);
+
+  /** \details
+      No operation.
+  */
+  void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask);
+
+  /** \details
+  */
+  void update(OdGsBaseVectorizer& view);
+
+  OdGsMaterialNode *nextNode() const;
+  OdGsMaterialNode *prevNode() const;
+  OdGsMaterialNode *setNextNode(OdGsMaterialNode *newNode);
+  OdGsMaterialNode *setPrevNode(OdGsMaterialNode *newNode);
+
+  bool isDataModified() const;
+
+  bool isCachedDataModified(OdGsBaseVectorizer& view) const;
+  void setCachedDataUpdated(OdGsBaseVectorizer& view);
+
+  const OdRxObject *cachedData(OdGsBaseVectorizer& view) const;
+  void setCachedData(OdGsBaseVectorizer& view, OdRxObject *newCachedData);
+
+  virtual ENodeType nodeType() const { return kMaterialNode; }
+
+  bool saveNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL) const;
+  bool loadNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL);
+};
+
+// Cache for material nodes
+#include "GsMaterialCache.h"
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_MATERIAL_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsModel.h
new file mode 100755
index 0000000..559a9e1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsModel.h
@@ -0,0 +1,243 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGSMODEL_H_INCLUDED_
+#define __ODGSMODEL_H_INCLUDED_
+
+#include "Gs/Gs.h"
+
+class OdGiPathNode;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class FIRSTDLL_EXPORT ODRX_ABSTRACT OdGsCache : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsCache);
+
+  /** \details
+    Returns pointer to the Model object associated with this Cache object.
+  */
+  virtual OdGsModel* model() const = 0;
+
+  /** \details
+    Reset pointer to the underlying GiDrawable object associated with this Cache object.
+  */
+  virtual void setDrawableNull() = 0;
+
+  /** \details
+    Returns the extents of the underlying GiDrawable object(s) associated with this Cache object.
+    
+    \param extents [out]  Receives the extents.
+    
+    \remarks
+    Returns true if and only if the GiDrawable object(s) have extents.
+  */
+  virtual bool extents(OdGeExtents3d& extents) const = 0;
+};
+
+typedef OdGiDrawablePtr (*OdGiOpenDrawableFn)(OdDbStub* id);
+
+class OdGsModelReactor;
+
+/** \details
+    The class represents collections of drawable objects in the Teigha framework.
+
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class FIRSTDLL_EXPORT ODRX_ABSTRACT OdGsModel : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsModel);
+
+  /** \details
+    Specifies the function called by open() for this Model object.
+    \param openDrawableFn [in]  Function to be called.
+  */
+  virtual void setOpenDrawableFn(OdGiOpenDrawableFn openDrawableFn) = 0;
+
+  /** \details
+    Notification function called whenever a drawable object is added to this Model object.
+
+    \param pAdded [in]  Pointer to the added Drawable object.
+    \param pParent [in]  Pointer to the parent of the added Drawable object.
+  */
+  virtual void onAdded(OdGiDrawable* pAdded, OdGiDrawable* pParent) = 0;
+
+  /** \param parentID [in]  Object ID of the parent of the added Drawable object.
+  */
+  virtual void onAdded(OdGiDrawable* pAdded, OdDbStub* parentID) = 0;
+  
+  /** \details
+    Notification function called whenever a drawable object is modified in this Model object.
+
+    \param pModified [in]  Pointer to the modified Drawable object.
+    \param pParent [in]  Pointer to the parent of the modified Drawable object.
+  */
+  virtual void onModified(OdGiDrawable* pModified, OdGiDrawable* pParent) = 0;
+
+  /** \param parentID [in]  Object ID of the parent of the modified Drawable object.
+  */
+  virtual void onModified(OdGiDrawable* pModified, OdDbStub* parentID) = 0;
+  
+  /** \details
+    Notification function called whenever a drawable object is erased from this Model object.
+
+    \param pErased [in]  Pointer to the erased Drawable object.
+    \param pParent [in]  Pointer to the parent of the erased Drawable object.
+  */
+  virtual void onErased(OdGiDrawable* pErased, OdGiDrawable* pParent) = 0;
+
+  /** \param parentID [in]  Object ID of the parent of the erased Drawable object.
+  */
+  virtual void onErased(OdGiDrawable* pErased, OdDbStub* parentID) = 0;
+
+  // Invalidation Hint
+  
+  enum InvalidationHint
+  {
+    kInvalidateIsolines       = 0,
+    kInvalidateViewportCache  = 1,
+    kInvalidateAll            = 2,
+    kInvalidateMaterials      = 3,
+    kInvalidateLinetypes      = 4
+  };
+
+  /** \details
+    Invalidates the specified cached data contained in this Model object.
+    \param pView [in]  Pointer to the VectorizeView object for which data are to be invalidated.
+    \param hint [in]  Invalidation hint.
+    
+    \remarks
+    hint must be one of the following:
+    
+    <table>
+    Name                        Value
+    kInvalidateIsolines         0
+    kInvalidateViewportCache    1
+    kInvalidateAll              2
+    </table>
+    
+  */
+  virtual void invalidate(InvalidationHint hint) = 0;
+
+  virtual void invalidate(OdGsView* pView) = 0;
+
+  virtual void setTransform(const OdGeMatrix3d&) = 0;
+
+  virtual OdGeMatrix3d transform() const = 0;
+
+  virtual void highlight(const OdGiPathNode& path, bool bDoIt = true, const OdGsView* pView = 0) = 0;
+
+  enum RenderType
+  { 
+    kMain = 0,           // Use main Z-buffer
+    kSprite,             // Use alternate Z-buffer (for sprites)
+    kDirect,             // Render on device directly
+    kHighlight,          // Render on device directly (skipping frame buffer and Z-buffer)
+    kHighlightSelection, // Render on device directly using highlighting style (skipping frame buffer and Z-buffer)
+    kDirectTopmost,      // Render on top of all other render types without Z-buffer
+    kContrast,           // Render with contrast style
+    kUser1,
+    kUser2,
+    kUser3,
+    kCount               // Count of RenderTypes
+  };
+
+  virtual void setRenderType(RenderType renderType) = 0;
+  virtual RenderType renderType() const = 0;
+
+  //virtual bool addSceneGraphRoot(OdGiDrawable* pRoot) = 0;
+  //virtual bool eraseSceneGraphRoot(OdGiDrawable* pRoot) = 0;
+
+  //virtual void onPaletteModified() = 0;
+  //virtual bool getTransformAt(const OdGsPath*, OdGeMatrix3d &) = 0;
+  //virtual void setExtents(const OdGePoint3d&, const OdGePoint3d&) = 0;
+  //virtual void setViewClippingOverride(bool bOverride) = 0;
+  //virtual void setMaterialsOverride(bool bOverride) = 0;
+  virtual void setRenderModeOverride(OdGsView::RenderMode mode = OdGsView::kNone) = 0;
+
+  enum AdditionMode
+  {
+    kAddDrawable = 0, // Add new drawable
+    kUneraseDrawable  // Added drawables are unerased
+  };
+
+  virtual void setAdditionMode(AdditionMode mode) = 0;
+  virtual AdditionMode additionMode() const = 0;
+
+  virtual void setBackground(OdDbStub *backgroundId) = 0;
+  virtual OdDbStub *background() const = 0;
+
+  virtual void setVisualStyle(OdDbStub *visualStyleId) = 0;
+  virtual OdDbStub *visualStyle() const = 0;
+  virtual void setVisualStyle(const OdGiVisualStyle &visualStyle) = 0;
+  virtual bool visualStyle(OdGiVisualStyle &visualStyle) const = 0;
+
+  virtual void addModelReactor(OdGsModelReactor *pReactor) = 0;
+  virtual void removeModelReactor(OdGsModelReactor *pReactor) = 0;
+
+  virtual void setEnableSectioning(bool bEnable) = 0;
+  virtual bool isSectioningEnabled() const = 0;
+  virtual bool setSectioning(const OdGePoint3dArray &points, const OdGeVector3d &upVector) = 0;
+  virtual bool setSectioning(const OdGePoint3dArray &points, const OdGeVector3d &upVector,
+                             double dTop, double dBottom) = 0;
+  virtual void setSectioningVisualStyle(OdDbStub *visualStyleId) = 0;
+};
+
+/** \details
+    GsModel reactor.
+
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class OdGsModelReactor
+{
+  public:
+    OdGsModelReactor() { }
+    virtual ~OdGsModelReactor() { }
+
+    //virtual bool onSceneGraphRootAdded(OdGsModel *pModel, OdGiDrawable *pAdded) { return true; }
+    //virtual bool onSceneGraphRootErased(OdGsModel *pModel, OdGiDrawable *pErased) { return true; }
+
+    virtual bool onAdded(OdGsModel *pModel, OdGiDrawable *pAdded, OdGiDrawable *pParent) { return true; }
+    virtual bool onAdded(OdGsModel *pModel, OdGiDrawable *pAdded, OdDbStub *parentID) { return true; }
+
+    virtual bool onErased(OdGsModel *pModel, OdGiDrawable *pErased, OdGiDrawable *pParent) { return true; }
+    virtual bool onErased(OdGsModel *pModel, OdGiDrawable *pErased, OdDbStub *parentID) { return true; }
+
+    virtual bool onModified(OdGsModel *pModel, OdGiDrawable *pModified, OdGiDrawable *pParent) { return true; }
+    virtual bool onModified(OdGsModel *pModel, OdGiDrawable *pModified, OdDbStub *parentID) { return true; }
+};
+
+#include "TD_PackPop.h"
+
+#endif // __ODGSMODEL_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsNode.h
new file mode 100755
index 0000000..ecb5c33
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsNode.h
@@ -0,0 +1,273 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_NODE__
+#define __OD_GS_NODE__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsBaseModel.h"
+#include "ChunkAllocator.h"
+
+class OdGsContainerNode;
+class OdGsLayerNode;
+	
+class OdGsBaseModel;
+class OdGsUpdateContext;
+class OdGsDisplayContext;
+class OdSiSpatialIndex;
+
+/** \details
+    This class is the base class for custom GsNode objects which implement custom caching support 
+    for Teigha vectorization applications.
+
+    \remarks
+    Cached rendering information may be stored in a custom GsNode descendant
+    for each drawable in an OdDbDatabase object.
+    
+    This cached information can be fed into the Teigha vectorization
+    framework during a redraw instead of making the usual calls to subWorldDraw() and 
+    subViewportDraw(), thereby greatly improving the speed of redraws.
+
+    \remarks
+    Clients should derive their custom node classes from this class.
+
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT ODRX_ABSTRACT OdGsNode : public OdGsCache
+{
+  friend class OdGsBaseModel;
+  friend class OdGsViewImpl;
+protected:
+  mutable OdGsNode* m_pPrev;
+  mutable OdGsNode* m_pNext;
+
+  GS_STATIC_EXPORT static AllocatorArray s_aAlloc;
+
+  OdGsBaseModel*    m_pModel;
+  void*             m_underlyingDrawable;
+
+  enum
+  {
+    kPersistent = 0x00000001,
+    kContainer  = 0x00000002,
+    kHLT        = 0x00000004, // Highlight
+    kHLT_All    = 0x00000008, // Highlight whole branch
+    kSyncDrawable=0x00000010,
+    kHidden     = 0x00000020,
+    kSelectHidden=0x00000040,
+    kLastFlag   = kSelectHidden
+  };
+
+  mutable OdUInt32  m_flags;
+
+  enum { kInvalidateVp = 0x80000000 };
+public:
+  inline bool invalidVp() const { return GETBIT(m_flags, kInvalidateVp); }
+protected:
+  inline void setInvalidVp(bool val) { SETBIT(m_flags, kInvalidateVp, val); }
+
+  /** \details
+    Removes the associations between the underlying Drawable object and this GsNode object.
+  */
+  void clearDrawable();
+
+public:
+  void setToDrawable(const OdGiDrawable* pUnderlyingDrawable);
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsNode);
+
+  void* operator new(size_t);
+  void operator delete(void *);
+
+  /** \note
+      OdGsNode objects perform no reference counting. This function does nothing but return.
+  */
+  void addRef();
+
+  /** \note
+      OdGsNode objects perform no reference counting. This function does nothing but return.
+  */
+  void release();
+
+  /** \param pModel [in]  Pointer to the BaseModel object.
+    \param pUnderlyingDrawable [in]  Pointer to the underlying Drawable object.
+  */
+  OdGsNode(OdGsBaseModel* pModel, const OdGiDrawable* pUnderlyingDrawable);
+protected:
+  OdGsNode(const OdGsNode& c);
+public:
+  virtual ~OdGsNode();
+
+  /** \details
+    Pointer to the BaseModel object associated with this Node object.
+  */
+  OdGsBaseModel* baseModel() const;
+
+  OdGsModel* model() const;
+
+  /** \details
+    Returns true if and only if this Node object serves as a container for other Node objects.
+  */
+  bool isContainer() const;
+
+  virtual ENodeType nodeType() const = 0;
+  bool isSyncDrawable() const { return GETBIT(m_flags, kSyncDrawable); }
+
+  /** \details
+    Invalidates the cached data within this object.
+    
+    \param pParent [in]  Pointer to the ContainerNode object for this Node object.
+    \param pView [in]  Pointer to the VectorizeView object for which data are to be invalidated.
+    \param mask [in]  Mask.
+    \remarks
+    The cached data will be regenerated the next time this Node object is accessed.
+  */
+  virtual void invalidate(OdGsContainerNode* pParent, OdGsViewImpl* pView, OdUInt32 mask) = 0;
+
+  /** \details
+    Returns the underlying Drawable object associated with this Node object.
+  */
+  OdGiDrawablePtr underlyingDrawable() const;
+
+  /** \details
+    Returns ObjectID of the underlying Drawable object associated with this Node object.
+  */
+  OdDbStub* underlyingDrawableId() const;
+
+  /** \details
+    Updates the cached data within this Node object for the specified VectorizeView and ContainerNode objects. 
+    \param pParent [in]  Pointer to the ContainerNode object for this Node object.
+    \param view [in]  VectorizeView object for which data are to be updated.
+  */
+  virtual void update(OdGsUpdateContext& ctx, OdGsContainerNode* pParent,
+      OdSiSpatialIndex* pParentIndex) = 0;
+
+  /** \details
+    Paints the specified view with the cached data associated with this Node object.
+    \param view [in]  View to be painted.
+  */
+  virtual void display(OdGsDisplayContext& ctx) = 0;
+
+  /** \details
+    Invalidates parts of cache depended on layers modified since last regeneration.
+    
+    \remarks
+    For internal use only.
+    Returns this if and only if the this node is one of modified layers.
+  */
+  virtual void propagateLayerChanges(OdGsViewImpl& view) = 0;
+
+  virtual void highlight(bool bDoIt, bool bWholeBranch);
+
+  bool isHighlighted() const;
+  bool isHighlightedAll() const;
+
+  virtual void destroy() = 0;
+
+  void hide(bool bDoIt);
+  bool isHidden() const;
+
+  void setSelectableIfHidden(bool bSelectable);
+  bool isSelectableIfHidden() const;
+
+  virtual bool saveNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL) const;
+  virtual bool loadNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer = NULL);
+  virtual bool saveClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer) const;
+  virtual bool loadClientNodeState(OdGsFiler *pFiler, OdGsBaseVectorizer *pVectorizer);
+  virtual bool postprocessNodeLoading(OdGsFiler *pFiler);
+
+  TD_USING(OdGsCache::extents);
+
+  virtual bool extents(const OdGsView* pView, OdGeExtents3d& ext) const;
+
+  virtual OdDb::LineWeight getMaxLineweightUsed() const;
+
+  virtual void setDrawableNull();
+};
+
+inline OdGiDrawablePtr OdGsNode::underlyingDrawable() const
+{
+  if(GETBIT(m_flags, kPersistent))
+    return m_pModel->open(reinterpret_cast<OdDbStub*>(m_underlyingDrawable));
+  return reinterpret_cast<OdGiDrawable*>(m_underlyingDrawable);
+}
+
+inline OdDbStub* OdGsNode::underlyingDrawableId() const
+{
+  if(GETBIT(m_flags, kPersistent))
+    return reinterpret_cast<OdDbStub*>(m_underlyingDrawable);
+  return 0;
+}
+
+inline void OdGsNode::highlight(bool bDoIt, bool bWholeBranch)
+{
+  SETBIT(m_flags, kHLT, bDoIt);
+  SETBIT(m_flags, kHLT_All, bDoIt ? bWholeBranch : false);
+}
+
+inline bool OdGsNode::isHighlighted() const
+{
+  return GETBIT(m_flags, kHLT);
+}
+
+inline bool OdGsNode::isHighlightedAll() const
+{
+  return GETBIT(m_flags, kHLT_All);
+}
+
+inline OdGsBaseModel* OdGsNode::baseModel() const
+{
+  return const_cast<OdGsBaseModel*>(m_pModel);
+}
+
+inline bool OdGsNode::isContainer() const
+{
+  return GETBIT(m_flags, kContainer);
+}
+
+inline void OdGsNode::hide(bool bDoIt)
+{
+  SETBIT(m_flags, kHidden, bDoIt);
+}
+
+inline bool OdGsNode::isHidden() const
+{
+  return GETBIT(m_flags, kHidden);
+}
+
+inline void OdGsNode::setSelectableIfHidden(bool bSelectable)
+{
+  SETBIT(m_flags, kSelectHidden, bSelectable);
+}
+
+inline bool OdGsNode::isSelectableIfHidden() const
+{
+  return GETBIT(m_flags, kSelectHidden);
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_NODE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsPageParams.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsPageParams.h
new file mode 100755
index 0000000..3585d2d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsPageParams.h
@@ -0,0 +1,149 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _GSPAGEPARAMS_INCLUDED_
+#define _GSPAGEPARAMS_INCLUDED_ / 
+
+#include "TD_PackPush.h"
+
+/** \details
+  This class stores printing page size and margins.
+
+  \remarks
+  All values are in millimeters.
+
+  \sa
+  TD_Gs
+
+  <group OdGs_Classes> 
+*/
+class OdGsPageParams
+{
+  double m_dPaperWidth;  // All are in mm.
+  double m_dPaperHeight;
+  
+  double m_dLeftMargin;
+  double m_dRightMargin;
+  double m_dTopMargin;
+  double m_dBottomMargin;
+public:
+  OdGsPageParams()
+    : m_dPaperWidth(210.)
+    , m_dPaperHeight(297.)
+    , m_dLeftMargin(0.)
+    , m_dRightMargin(0.)
+    , m_dTopMargin(0.)
+    , m_dBottomMargin(0.)
+  {
+  }
+
+  OdGsPageParams(double dPaperWidth, double dPaperHeight)
+    : m_dPaperWidth(dPaperWidth)
+    , m_dPaperHeight(dPaperHeight)
+    , m_dLeftMargin(0.)
+    , m_dRightMargin(0.)
+    , m_dTopMargin(0.)
+    , m_dBottomMargin(0.)
+  {
+  }
+
+  ~OdGsPageParams()
+  {
+  }
+
+  OdGsPageParams(const OdGsPageParams& data)
+  {
+    *this = data;
+  }
+
+  OdGsPageParams& operator=(const OdGsPageParams& from)
+  {
+   m_dPaperWidth   = from.m_dPaperWidth;  // All are in mm.
+   m_dPaperHeight  = from.m_dPaperHeight;
+   m_dLeftMargin   = from.m_dLeftMargin;
+   m_dRightMargin  = from.m_dRightMargin;
+   m_dTopMargin    = from.m_dTopMargin;
+   m_dBottomMargin = from.m_dBottomMargin;
+   return *this;
+  }
+
+  double getPaperWidth() const   { return m_dPaperWidth;   }
+  double getPaperHeight() const  { return m_dPaperHeight;  }
+  double getLeftMargin() const   { return m_dLeftMargin;   }
+  double getRightMargin() const  { return m_dRightMargin;  }
+  double getTopMargin() const    { return m_dTopMargin;    }
+  double getBottomMargin() const { return m_dBottomMargin; }
+
+  void set(
+    double dPaperWidth,
+    double dPaperHeight,
+    double dLeftMargin = 0.,
+    double dRightMargin = 0.,
+    double dTopMargin = 0.,
+    double dBottomMargin = 0.
+    )
+  {
+    const double dTol = OdGeContext::gZeroTol.equalPoint();
+    if (OdNegative(dPaperWidth-dTol) || OdNegative(dPaperHeight-dTol) || OdNegative(dLeftMargin) || OdNegative(dRightMargin) || OdNegative(dTopMargin) || OdNegative(dBottomMargin))
+    {
+      ODA_FAIL_ONCE();
+      return;
+    }
+
+    if (dLeftMargin + dRightMargin >= dPaperWidth - dTol)
+    {
+      ODA_FAIL_ONCE();
+      return;
+    }
+
+    if (dTopMargin + dBottomMargin >= dPaperHeight - dTol)
+    {
+      ODA_FAIL_ONCE();
+      return;
+    }
+
+    m_dPaperWidth = dPaperWidth;
+    m_dPaperHeight = dPaperHeight;
+    m_dLeftMargin = dLeftMargin;
+    m_dRightMargin = dRightMargin;
+    m_dTopMargin = dTopMargin;
+    m_dBottomMargin = dBottomMargin;
+  }
+
+  void scale(double dScale)
+  {
+    if (dScale > 1e-8)
+    {
+      m_dPaperWidth *= dScale;
+      m_dPaperHeight *= dScale;
+      m_dLeftMargin *= dScale;
+      m_dRightMargin *= dScale;
+      m_dTopMargin *= dScale;
+      m_dBottomMargin *= dScale;
+    }
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif //_GSPAGEPARAMS_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsProperties.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsProperties.h
new file mode 100755
index 0000000..9c50772
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsProperties.h
@@ -0,0 +1,182 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODGSPROPERTIES_H_INCLUDED_
+#define _ODGSPROPERTIES_H_INCLUDED_
+
+#include "OdaCommon.h"
+#include "RxObject.h"
+#include "Gi/GiDrawable.h"
+#include "Gi/GiCommonDraw.h"
+#include "Gs/GsExport.h"
+#include "CmColor.h"
+
+class OdDbStub;
+
+class OdGiRasterImage;
+class OdGsBaseVectorizer;
+class OdGsViewImpl;
+
+#include "TD_PackPush.h"
+
+/** \details
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class OdGsPropertiesDirectRenderOutput
+{
+  public:
+    enum DirectRenderFlags
+    {
+      DirectRender_Point           = 1,
+      DirectRender_LineFlat        = (1 << 1),
+      DirectRender_LineGouraud     = (1 << 2),
+      DirectRender_TriangleFlat    = (1 << 3),
+      DirectRender_TriangleGouraud = (1 << 4),
+      DirectRender_PolygoneFlat    = (1 << 5),
+      DirectRender_PolygoneGouraud = (1 << 6),
+      DirectRender_Image           = (1 << 7)
+    };
+    struct DirectRenderImageUV
+    {
+      double u, v;
+    };
+    struct DirectRenderImageParams
+    {
+      DirectRenderImageUV *uvCoords;
+      const OdGiDrawable *pDrawable; // For images caching
+    };
+  public:
+    virtual void directRenderOutputPoint(const OdGePoint3d &/*point*/,
+                                         const OdCmEntityColor &/*color*/)
+    {
+    }
+    virtual void directRenderOutputLineFlat(const OdGePoint3d &/*pt1*/, const OdGePoint3d &/*pt2*/,
+                                            const OdCmEntityColor &/*color*/)
+    {
+    }
+    virtual void directRenderOutputLineGouraud(const OdGePoint3d &/*pt1*/, const OdGePoint3d &/*pt2*/,
+                                               const OdCmEntityColor &/*clr1*/, const OdCmEntityColor &/*clr2*/)
+    {
+    }
+    virtual void directRenderOutputTriangleFlat(const OdGePoint3d &/*pt1*/, const OdGePoint3d &/*pt2*/, const OdGePoint3d &/*pt3*/,
+                                                const OdCmEntityColor &/*color*/)
+    {
+    }
+    virtual void directRenderOutputTriangleGouraud(const OdGePoint3d &/*pt1*/, const OdGePoint3d &/*pt2*/, const OdGePoint3d &/*pt3*/,
+                                                   const OdCmEntityColor &/*clr1*/, const OdCmEntityColor &/*clr2*/, const OdCmEntityColor &/*clr3*/)
+    {
+    }
+    virtual void directRenderOutputPolygoneFlat(OdUInt32 /*nPts*/, const OdGePoint3d * /*pPts*/,
+                                                const OdCmEntityColor &/*color*/)
+    {
+    }
+    virtual void directRenderOutputPolygoneGouraud(OdUInt32 /*nPts*/, const OdGePoint3d * /*pPts*/,
+                                                   const OdCmEntityColor * /*pClrs*/)
+    {
+    }
+    virtual void directRenderOutputImage(const OdGePoint3d * /*pRect*/, const OdGiRasterImage * /*pImage*/,
+                                         const OdGsPropertiesDirectRenderOutput::DirectRenderImageParams &/*driParams*/)
+    {
+    }
+
+    virtual OdUInt32 directRenderOutputFlags() const = 0;
+};
+
+/** \details
+    Library: TD_Gs
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsProperties : public OdRxObject
+{
+public:
+  enum PropertiesType
+  {
+    kViewport          = 1,
+    kBackground        = (1 << 1),
+    kVisualStyle       = (1 << 2),
+    kRenderEnvironment = (1 << 3),
+    kRenderSettings    = (1 << 4),
+    // Simple device
+    kDeviceSimple      = 0,
+    // Background-compatible device
+    kDeviceBackground  = 3, // kViewport | kBackground
+    // Normal vectorization device
+    kDeviceNormal      = 7, // kViewport | kBackground | kVisualStyle
+    // Rendering device
+    kDeviceRender      = 0xFF, // kAll
+    // Enable all properties
+    kAll               = 0xFF
+  };
+protected:
+  void *m_pUnderlyingDrawable;
+  const OdGiDrawable *m_pInconsistentDrawable;
+  OdGiContext* m_context;
+
+  OdGiDrawablePtr (*m_pOpenDrawableFn)(OdDbStub* id);
+  bool m_bDrawablePersistent;
+  // For optimize
+  OdGiDrawable::DrawableType m_dType;
+public:
+  ODRX_DECLARE_MEMBERS(OdGsProperties);
+
+  OdGsProperties();
+
+  void setOpenDrawableFn(OdGiDrawablePtr (*fn)(OdDbStub*));
+
+  void setUnderlyingDrawable(const OdGiDrawable *pUnderlyingDrawable, OdGiContext* ctx);
+  OdGiDrawablePtr underlyingDrawable() const;
+  bool isUnderlyingDrawableChanged(const OdGiDrawable *pUnderlyingDrawable) const;
+  bool hasUnderlyingDrawable() const;
+
+  bool isUnderlyingDrawablePersistent() const;
+  OdDbStub* underlyingDrawableId() const;
+
+  OdGiDrawable::DrawableType underlyingDrawableType() const;
+
+  virtual PropertiesType propertiesType() const = 0;
+
+  // Search down in hierarchy for appropriate properties
+  virtual OdSmartPtr<OdGsProperties> propertiesForType(PropertiesType /*type*/) const;
+
+  // Update attributes
+  virtual void update(const OdGiDrawable* pUnderlyingDrawable,
+      OdGsViewImpl* view, OdUInt32 incFlags = kAll) = 0;
+  // Display attributed data
+  virtual void display(OdGsBaseVectorizer& view,
+      OdGsPropertiesDirectRenderOutput *pdro = NULL, OdUInt32 incFlags = kAll) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsProperties object pointers.
+*/
+typedef OdSmartPtr<OdGsProperties> OdGsPropertiesPtr;
+
+// NULL
+#ifndef NULL
+#define NULL 0
+#endif
+
+#include "TD_PackPop.h"
+
+#endif // _ODGSPROPERTIES_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsRenderSettingsProperties.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsRenderSettingsProperties.h
new file mode 100755
index 0000000..a7ef1c1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsRenderSettingsProperties.h
@@ -0,0 +1,117 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_RENDERSETTINGS_PROPERTIES__
+#define __OD_GS_RENDERSETTINGS_PROPERTIES__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsProperties.h"
+#include "Gi/GiEnvironmentTraitsData.h"
+
+// Manages:
+// OdRenderEnvironment
+// OdRenderSettings
+// OdMentalRayRenderSettings
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsRenderEnvironmentProperties : public OdGsProperties
+{
+  OdGiRenderEnvironmentTraitsData* m_pRenderEnvironmentTraits;
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsRenderEnvironmentProperties);
+
+  OdGsRenderEnvironmentProperties();
+  ~OdGsRenderEnvironmentProperties();
+
+  OdGiRenderEnvironmentTraitsData* renderEnvironmentTraitsData() const { return m_pRenderEnvironmentTraits; }
+
+  bool isTraitsModified();
+
+  void clearTraits();
+
+  // OdGsProperties virtual overrides
+  
+  virtual PropertiesType propertiesType() const
+  {
+    return kRenderEnvironment;
+  }
+
+  virtual OdSmartPtr<OdGsProperties> propertiesForType(PropertiesType type) const;
+
+  virtual void update(const OdGiDrawable* pUnderlyingDrawable, OdGsViewImpl* view, OdUInt32 incFlags = kAll);
+
+  virtual void display(OdGsBaseVectorizer& view, OdGsPropertiesDirectRenderOutput *pdro = NULL, OdUInt32 incFlags = kAll);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsRenderEnvironmentProperties object pointers.
+*/
+typedef OdSmartPtr<OdGsRenderEnvironmentProperties> OdGsRenderEnvironmentPropertiesPtr;
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsRenderSettingsProperties : public OdGsProperties
+{
+  OdGiCombinedRenderSettingsTraitsData* m_pRenderSettingsTraits;
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsRenderSettingsProperties);
+
+  OdGsRenderSettingsProperties();
+  ~OdGsRenderSettingsProperties();
+
+  OdGiRenderSettingsTraitsData* renderSettingsTraitsData() const { return m_pRenderSettingsTraits; }
+  bool hasMentalRayRenderSettings() const { return (m_pRenderSettingsTraits) ? m_pRenderSettingsTraits->hasMentalRayRenderSettings() : false; }
+  OdGiMentalRayRenderSettingsTraitsData* mentalRayRenderSettingsTraitsData() const { return m_pRenderSettingsTraits; }
+  bool hasRapidRTRenderSettings() const { return (m_pRenderSettingsTraits) ? m_pRenderSettingsTraits->hasRapidRTRenderSettings() : false; }
+  OdGiRapidRTRenderSettingsTraitsData* rapidRTRenderSettingsTraitsData() const { return m_pRenderSettingsTraits; }
+
+  bool isTraitsModified();
+
+  void clearTraits();
+
+  // OdGsProperties virtual overrides
+  
+  virtual PropertiesType propertiesType() const
+  {
+    return kRenderSettings;
+  }
+
+  virtual OdSmartPtr<OdGsProperties> propertiesForType(PropertiesType type) const;
+
+  virtual void update(const OdGiDrawable* pUnderlyingDrawable, OdGsViewImpl* view, OdUInt32 incFlags = kAll);
+
+  virtual void display(OdGsBaseVectorizer& view, OdGsPropertiesDirectRenderOutput *pdro = NULL, OdUInt32 incFlags = kAll);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsRenderSettingsProperties object pointers.
+*/
+typedef OdSmartPtr<OdGsRenderSettingsProperties> OdGsRenderSettingsPropertiesPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_RENDERSETTINGS_PROPERTIES__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSelectionReactor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSelectionReactor.h
new file mode 100755
index 0000000..6eb1df2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSelectionReactor.h
@@ -0,0 +1,229 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __ODGSSELECTIONREACTOR_H_INCLUDED_
+#define __ODGSSELECTIONREACTOR_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+class OdDbStub;
+class OdGiViewport;
+class OdGiDrawable;
+class OdGiPathNode;
+
+/** \details
+    This struct contains information related to an OdGiDrawable object.
+    
+    \remarks
+    This includes the Drawable object, its parent object, and some flags.
+    Library: TD_Gs
+    <group OdGi_Classes> 
+*/
+struct OdGiDrawableDesc 
+{
+  OdGiDrawableDesc()
+    : pParent(0)
+    , persistId(0)
+    , pTransientDrawable(0)
+    , nDrawableFlags(0)
+    , nDrawableDescFlags(0)
+  {}
+
+  OdGiDrawableDesc*   pParent; // Pointer to the parent of the Drawable object.
+
+  OdDbStub*           persistId; // Persistent ID of the *database* object associated with the Drawable object.
+
+  const OdGiDrawable* pTransientDrawable; // Pointer to the Drawable object.
+
+  OdUInt32            nDrawableFlags; // Drawable flags for the Drawable object (come from subSetAttributes).
+
+  enum DrawableDescFlags
+  {
+    kFirstFlag            = 1,
+
+    kMarkedToSkip         = kFirstFlag << 0,
+    kMarkedBySelection    = kFirstFlag << 1, // selected for crossing/fence; not selected for window
+    kMarkedBySubSelection = kFirstFlag << 2, // selected for crossing/fence; not selected for window
+    kMarkedByGeometry     = kFirstFlag << 3, // geometry output for entire drawable
+    kMarkedBySubGeometry  = kFirstFlag << 4, // geometry output for current marker
+    kMarkedToBreak        = kFirstFlag << 5, // break selection process entirely
+    kMarkedForForcedSelection = kFirstFlag << 6,
+    kLastFlag             = kMarkedForForcedSelection
+  };
+  
+  OdUInt32            nDrawableDescFlags; // additional desc flags
+
+  /** \details
+      Sets the Skip flag for the Drawable object.
+      
+      \param skip [in]  Controls Skip flag.
+      \remarks
+      If set, the Drawable object will be skipped during vectorization.
+  */
+  void markToSkip(bool skip) const;
+
+  /** \details
+      Returns true if and only if this Drawable marked to be skipped during vectorization.
+  */
+  bool isMarkedToSkip() const;
+
+  void markBySelection(bool val) const;
+
+  bool isMarkedBySelection() const;
+
+  void markBySubSelection(bool val) const;
+
+  bool isMarkedBySubSelection() const;
+
+  void markByGeometry(bool val) const;
+
+  bool isMarkedByGeometry() const;
+
+  void markBySubGeometry(bool val) const;
+
+  bool isMarkedBySubGeometry() const;
+
+  void markToBreak(bool val) const;
+
+  bool isMarkedToBreak() const;
+
+  void markForForcedSelection(bool val) const;
+
+  bool isMarkedForForcedSelection() const;
+};
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdGs Selection events.
+    
+    \note
+    The default implementations of all methods in this class do nothing but return.
+
+    \sa
+    TD_Gs
+  
+    <group OdGs_Classes> 
+*/
+class OdGsSelectionReactor
+{
+public:
+  /** \details
+    Notification function called whenever an OdGiDrawableDesc object has been selected.
+
+    \param pDrawableDesc [in]  Pointer to the OdGiDrawableDesc object.
+
+    \remarks
+    Returns true if and only if the operation is to continue.
+    
+    This function is called after the operation.
+  */
+  virtual bool selected(const OdGiDrawableDesc& pDrawableDesc) = 0;
+
+  enum
+  {
+    kNotImplemented = 0x80000000,
+    kContinue       = 0,
+    kBreak          = 1,
+    kSkipDrawable   = 2
+  };
+  /** \details
+  */
+  virtual OdUInt32 selected(const OdGiPathNode& /*pathNode*/, const OdGiViewport& /*viewInfo*/)
+  {
+    return OdUInt32(kNotImplemented);
+  }
+};
+
+inline void OdGiDrawableDesc::markToSkip(bool val) const
+{
+  SETBIT(const_cast<OdGiDrawableDesc*>(this)->nDrawableDescFlags, kMarkedToSkip, val);
+}
+
+inline bool OdGiDrawableDesc::isMarkedToSkip() const
+{
+  return GETBIT(nDrawableDescFlags, kMarkedToSkip);
+}
+
+inline void OdGiDrawableDesc::markBySelection(bool val) const
+{
+  SETBIT(const_cast<OdGiDrawableDesc*>(this)->nDrawableDescFlags, kMarkedBySelection, val);
+}
+
+inline bool OdGiDrawableDesc::isMarkedBySelection() const
+{
+  return GETBIT(nDrawableDescFlags, kMarkedBySelection);
+}
+
+inline void OdGiDrawableDesc::markBySubSelection(bool val) const
+{
+  SETBIT(const_cast<OdGiDrawableDesc*>(this)->nDrawableDescFlags, kMarkedBySubSelection, val);
+}
+
+inline bool OdGiDrawableDesc::isMarkedBySubSelection() const
+{
+  return GETBIT(nDrawableDescFlags, kMarkedBySubSelection);
+}
+
+inline void OdGiDrawableDesc::markByGeometry(bool val) const
+{
+  SETBIT(const_cast<OdGiDrawableDesc*>(this)->nDrawableDescFlags, kMarkedByGeometry, val);
+}
+
+inline bool OdGiDrawableDesc::isMarkedByGeometry() const
+{
+  return GETBIT(nDrawableDescFlags, kMarkedByGeometry);
+}
+
+inline void OdGiDrawableDesc::markBySubGeometry(bool val) const
+{
+  SETBIT(const_cast<OdGiDrawableDesc*>(this)->nDrawableDescFlags, kMarkedBySubGeometry, val);
+}
+
+inline bool OdGiDrawableDesc::isMarkedBySubGeometry() const
+{
+  return GETBIT(nDrawableDescFlags, kMarkedBySubGeometry);
+}
+
+inline void OdGiDrawableDesc::markToBreak(bool val) const
+{
+  SETBIT(const_cast<OdGiDrawableDesc*>(this)->nDrawableDescFlags, kMarkedToBreak, val);
+}
+
+inline bool OdGiDrawableDesc::isMarkedToBreak() const
+{
+  return GETBIT(nDrawableDescFlags, kMarkedToBreak);
+}
+
+inline void OdGiDrawableDesc::markForForcedSelection(bool val) const
+{
+	SETBIT(const_cast<OdGiDrawableDesc*>(this)->nDrawableDescFlags, kMarkedForForcedSelection, val);
+}
+
+inline bool OdGiDrawableDesc::isMarkedForForcedSelection() const
+{
+	return GETBIT(nDrawableDescFlags, kMarkedForForcedSelection);
+}
+
+#include "TD_PackPop.h"
+
+#endif // __ODGSSELECTIONREACTOR_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSpatialQuery.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSpatialQuery.h
new file mode 100755
index 0000000..047bc4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsSpatialQuery.h
@@ -0,0 +1,79 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef __OD_GS_SPATIAL_QUERY_H_
+#define __OD_GS_SPATIAL_QUERY_H_
+
+#include "TD_PackPush.h"
+#include "Si/BBox.h"
+#include "Gs/SiVolume.h"
+#include "Gs/GsExport.h"
+#include "Ge/GeExtents3d.h"
+
+class OdGsViewImpl;
+class OdGsDCPoint;
+class OdGePoint2d;
+
+/** \details
+            
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsSpatialQuery
+{
+public:
+  OdGsSpatialQuery(){}
+
+  /** \details
+  Builds a spatial query for the specified polygon in this view object.
+  \param sceneExtents [in]  Whole scene extents.
+  \param points [in]  Array of points in eye coords.
+  \param numPoints [in]  Number of points.
+  */
+  const OdSiShape& build(const OdGsViewImpl& view,
+      const OdGeExtents3d& sceneExtents,
+      int numPoints, const OdGePoint2d* points);
+
+  /** \details
+    Builds a spatial query for the specified polygon in this view object.
+    \param sceneExtents [in]  Whole scene extents.
+    \param points [in]  Array of points in screen coords.
+    \param numPoints [in]  Number of points. 
+  */
+  const OdSiShape& build(const OdGsViewImpl& view,
+      const OdGeExtents3d& sceneExtents,
+      int numPoints = 0, const OdGsDCPoint* points = 0);
+
+  /** \details
+  Returns the current query's bounding box; assumed to be called after 'build()'.
+  */
+  const OdSi::BBox& getBBox() const { return m_spqbox; }
+
+protected:
+  OdSi::BBox m_spqbox;
+  OdSi::Volume m_spqvol;
+};
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_SPATIAL_QUERY_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVectPerformance.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVectPerformance.h
new file mode 100755
index 0000000..b36ea39
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVectPerformance.h
@@ -0,0 +1,94 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef GS_VECT_PERFORMANCE_H
+#define GS_VECT_PERFORMANCE_H
+
+#include "TD_PackPush.h"
+
+/** \details
+ <group OdGs_Classes> 
+    
+ Library: TD_Gs
+*/
+class GsDevicePerformanceTm
+{
+public:
+    GsDevicePerformanceTm() { reset(); }
+    void reset()
+    {
+        m_update = 0;
+        m_updateGeometry = 0;;
+        m_updateScreen = 0;
+        m_updateEntities = 0;
+    }
+
+public:
+    double m_update;
+    double m_updateGeometry;
+    double m_updateScreen;
+    double m_updateEntities;
+};
+
+enum EParallelVectOptions
+{
+    eEnableParallelVectorization = 0x00000001,
+    eEnableParallelDisplay       = 0x00000002,
+    eEnableOptimalThreadsNumber  = 0x00000004,
+    eEnableSchedulerLogOutput    = 0x00000008,
+    eEnablePerfMeasurements      = 0x00000010,
+    eForcePartialUpdateForTest   = 0x00000020
+};
+
+/** \details
+  <group OdGs_Classes> 
+    
+  Library: TD_Gs
+*/
+class GsVectPerformanceData
+{
+public:
+    GsVectPerformanceData(): m_options(0), m_numVectUsedUpdateGeom(0),
+        m_numVectUsedUpdateScr(0){}
+    bool enableParallelVectorization() const
+    { return GETBIT(m_options, eEnableParallelVectorization); }
+    bool enableParallelDisplay() const
+    { return GETBIT(m_options, eEnableParallelDisplay); }
+    bool schedulerLogOutput() const
+    { return GETBIT(m_options, eEnableSchedulerLogOutput); }
+    bool optimalThreadsNumber() const
+    { return GETBIT(m_options, eEnableOptimalThreadsNumber); }
+    bool enablePerfMeasurements() const
+    { return GETBIT(m_options, eEnablePerfMeasurements); }
+    bool forcePartialUpdateForTest() const
+    { return GETBIT(m_options, eForcePartialUpdateForTest); }
+
+public:
+    OdUInt32 m_options; //bit flags, see EParallelVectOptions
+    GsDevicePerformanceTm m_tm;
+    OdUInt32 m_numVectUsedUpdateGeom;
+    OdUInt32 m_numVectUsedUpdateScr;
+};
+
+#include "TD_PackPop.h"
+
+#endif // GS_VECT_PERFORMANCE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewImpl.h
new file mode 100755
index 0000000..1269b10
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewImpl.h
@@ -0,0 +1,880 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODGSVIEWIMPL_INC
+#define ODGSVIEWIMPL_INC
+
+#include "TD_PackPush.h"
+#include "Gs/Gs.h"
+#include "Gs/GsBaseModule.h"
+#include "Gs/GsDCRectArray.h"
+#include "DbStubPtrArray.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeVector3d.h"
+#include "Ge/GeMatrix3d.h"
+#include "UInt8Array.h"
+#include "SharedPtr.h"
+#include "Gs/GsDrawableHolder.h"
+#include "Gi/GiCommonDraw.h"
+#include "Gs/GsProperties.h"
+#include "Gs/GsCullingVolume.h"
+#include "Gs/GsViewLocalId.h"
+#include "Gi/GiAbstractClipBoundary.h"
+#include "OdMutex.h"
+
+class OdGsBaseVectorizeDevice;
+class OdGeBoundBlock3d;
+class OdGiPathNode;
+
+/** \details
+    This class implements Viewport objects in GUI display windows.
+    
+    Library: Gs
+    
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsViewImpl : public OdGsView
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdGsViewImpl);
+
+  OdGsViewImpl();
+  ~OdGsViewImpl();
+
+  // OdGsView methods
+
+  /** \details
+    Initializes this Viewport object.
+    
+    \param pDevice [in]  Pointer to the OdGsBaseVectorizeDevice associated with this Viewport object.
+    \param pViewInfo [in]  Pointer to the Client View Information for this Viewport object.
+    \param enableLayerVisibilityPerView [in]  Layer visibility per viewport is supported, if and only if true.
+  */
+  virtual void init(OdGsBaseVectorizeDevice* pDevice, 
+    const OdGsClientViewInfo* pViewInfo = 0, 
+    bool enableLayerVisibilityPerView = false);
+
+  virtual OdGsDevice* device() const;
+
+  virtual void clientViewInfo(OdGsClientViewInfo& viewInfo) const;
+
+  virtual RenderMode mode() const;
+  bool setModeOverride(RenderMode mode);
+  virtual void setMode(RenderMode mode);
+
+  virtual void freezeLayer(OdDbStub* layerID);
+  virtual void thawLayer(OdDbStub* layerID);
+  virtual void clearFrozenLayers();
+
+  virtual void setViewportBorderProperties(ODCOLORREF color, int width);
+  virtual void getViewportBorderProperties(ODCOLORREF& color, int& width) const;
+  virtual void setViewportBorderVisibility(bool visible);
+  virtual bool isViewportBorderVisible() const;
+
+  virtual void setEnableFrontClip(bool enable);
+  virtual bool isFrontClipped() const;
+  virtual void setFrontClip(double distance);
+  virtual double frontClip() const;
+
+  virtual void setEnableBackClip(bool enable);
+  virtual bool isBackClipped() const;
+  virtual void setBackClip(double distance);
+  virtual double backClip() const;
+
+  virtual OdGePoint3d position() const;
+  virtual OdGePoint3d target() const;
+  virtual OdGeVector3d upVector() const;
+  virtual double fieldWidth() const;
+  virtual double fieldHeight() const;
+  /** \details
+    Returns the width to height ratio for this view object.
+  */
+  double windowAspect() const;
+
+  virtual double lensLength() const;
+  virtual void setLensLength(double lensLength);
+
+  virtual bool isPerspective() const;
+
+  virtual void beginInteractivity(double frameRateInHz);
+  virtual void endInteractivity();
+  virtual void flush();
+
+  virtual void hide();
+  virtual void show();
+  virtual bool isVisible();
+
+  virtual OdGsViewPtr cloneView(bool cloneViewParameters = true, bool cloneGeometry = false);
+  virtual bool exceededBounds();
+  virtual void enableStereo(bool enabled);
+  virtual bool isStereoEnabled() const;
+  virtual void setStereoParameters(double magnitude, double parallax);
+  virtual void getStereoParameters(double& magnitude, double& parallax) const;
+  virtual void initLights(OdRxIterator* pLightsIterator);
+  virtual void getSnapShot(OdGiRasterImagePtr &pImage, const OdGsDCRect &region);
+
+  virtual void setViewport(const OdGePoint2d& lowerLeft, const OdGePoint2d& upperRight);
+  virtual void setViewport(const OdGsDCRect& screenRect);
+  virtual void setViewport(const OdGsDCRectDouble& screenRec);
+
+  virtual void getViewport(OdGePoint2d& lowerLeft, OdGePoint2d& upperRight) const;
+  virtual void getViewport(OdGsDCRect& screenRect) const;
+  virtual void getViewport(OdGsDCRectDouble& screenRec) const;
+
+  virtual OdGeMatrix3d screenMatrix() const;
+  virtual OdGeMatrix3d worldToDeviceMatrix() const;
+  virtual OdGeMatrix3d objectToDeviceMatrix() const;
+  virtual OdGeMatrix3d viewingMatrix() const;
+  virtual OdGeMatrix3d projectionMatrix() const;
+
+  virtual void viewParameters(OdGsView* pView) const;
+
+  virtual double lineweightToDcScale() const;
+  virtual void setLineweightToDcScale(double scale);
+  virtual void setLineweightEnum(int numLineweights, const OdUInt8* lineweights);
+  virtual void setLinetypeScaleMultiplier(double linetypeScaleMultiplier);
+  virtual void setAlternateLinetypeScaleMultiplier(double linetypeAlternateScaleMultiplier);
+  virtual double linetypeScaleMultiplier() const;
+
+  virtual void dolly(const OdGeVector3d& dollyVector);
+  virtual void dolly(double xDolly, double yDolly, double zDolly);
+  virtual void roll(double rollAngle);
+  virtual void orbit(double xOrbit, double yOrbit);
+  virtual void zoom(double zoomFactor);
+  virtual void pan(double xPan, double yPan);
+  virtual void setView(const OdGePoint3d & position,
+    const OdGePoint3d& target,
+    const OdGeVector3d& upVector,
+    double fieldWidth,
+    double fieldHeight,
+    Projection projection = kParallel);
+
+  virtual void zoomExtents(const OdGePoint3d &minPt, const OdGePoint3d &maxPt);
+  virtual void zoomWindow(const OdGePoint2d &lowerLeft, const OdGePoint2d &upperRight);
+  virtual bool pointInView(const OdGePoint3d &pt) const;
+  virtual bool extentsInView(const OdGePoint3d &minPt, const OdGePoint3d &maxPt) const;
+
+  virtual void viewportClipRegion(OdIntArray& counts, OdGePoint2dArray& vertices) const;
+  virtual void viewportClipRegion(OdIntArray& counts, OdGsDCPointArray& dcPts) const;
+  virtual void setViewportClipRegion(int numContours, const int* numVertices, const OdGePoint2d* vertices);
+  virtual void setViewportClipRegion(int numContours, int const* numVertices, OdGsDCPoint const* vertices);
+
+  bool isDependentViewportView() const;
+  bool isDependentGeometryView() const;
+  bool isHelperView() const;
+
+  const OdGsBaseModule *getGsModulePtr() const;
+
+  const OdGiContextualColors *contextualColors() const;
+  void setContextualColors(OdGiContextualColors *pColors);
+
+  virtual bool pointInViewport(const OdGePoint2d& screenPoint) const;
+
+  virtual void setClearColor(ClearColor color);
+  virtual void invalidate();
+  virtual void invalidate(const OdGsDCRect &rect);
+  virtual void invalidateCachedViewportGeometry();
+  /** \details
+    Evokes the specified OdGsSelectionReactor object for the specified polygon in this VectorizeView object.
+    \param points [in]  Array of points.
+    \param numPoints [in]  Number of points.
+    \param pReactor [in]  Pointer to the reactor. 
+  */
+  virtual void select(const OdGsDCPoint* points, int numPoints, OdGsSelectionReactor* pReactor,
+    SelectionMode mode = kCrossing);
+
+  virtual bool add(OdGiDrawable* sceneGraph, OdGsModel* model);
+  virtual bool erase(OdGiDrawable* sceneGraph);
+  virtual void eraseAll();
+
+  virtual OdGsModel *getModel(const OdGiDrawable *pDrawable) const;
+  virtual OdGsModelArray getModelList() const;
+
+  virtual bool isValid() const;
+  virtual void getNumPixelsInUnitSquare(const OdGePoint3d& givenWorldpt,
+    OdGePoint2d& pixelArea, bool includePerspective = true) const;
+
+  virtual void setBackground(OdDbStub *backgroundId);
+  virtual OdDbStub *background() const;
+  virtual void setVisualStyle(OdDbStub *visualStyleId);
+  virtual OdDbStub *visualStyle() const;
+  virtual void setVisualStyle(const OdGiVisualStyle &visualStyle);
+  virtual bool visualStyle(OdGiVisualStyle &vs) const;
+
+  // OdGsViewImpl methods
+
+  /** \details
+    Returns the specified OdGsView pointer 
+    as a pointer to an OdGsViewImpl object.
+    \param pView [in]  Pointer to an OdGsView object.
+  */
+  static OdGsViewImpl* safeCast(OdGsView* pView);
+  static const OdGsViewImpl* safeCast(const OdGsView* pView);
+
+  OdUInt32 viewportId() const { return m_giViewportId; }
+
+  //NS TODO: rename to viewportObjectId()
+  OdDbStub* getViewportObjectId() const { return m_viewInfo.viewportObjectId; }
+
+  /** \details
+    Returns the OdGsBaseVectorizeDevice associated with this Viewport object.
+  */
+  OdGsBaseVectorizeDevice* baseDevice() { return m_pDevice; }
+  const OdGsBaseVectorizeDevice* baseDevice() const { return m_pDevice; }
+
+  OdDbStub* annotationScaleId() const;
+  OdIntPtr drawablesFilterFunction() const;
+
+  /** \details
+    Returns the eye coordinate system extents of this view object.
+    
+    \param extents [out]  Receives the extents.
+
+    \remarks
+    Returns true if and only if the extents are defined.
+  */
+  virtual bool viewExtents(OdGeBoundBlock3d& extents) const = 0;
+
+  // Own methods
+  virtual void select(const OdGePoint2d* aPtDc, int numPoints, OdGsSelectionReactor* pReactor,
+    SelectionMode mode = kCrossing) = 0;
+
+  bool isSnapping() const;
+  void setSnapping(bool val);
+  bool isRegenOnDrawForbidden() const;
+  void setRegenOnDrawForbidden(bool val);
+  bool isAccumulateVpChanges() const;
+  virtual void clearLinetypeCache() = 0;
+  double linetypeAlternateScaleMultiplier() const;
+
+  // Legacy plot modes (#12611)
+  // Legacy Wireframe
+  virtual bool isSupportLegacyWireframeMode() const;
+  virtual bool isLegacyWireframeMode() const;
+  virtual void setLegacyWireframeMode(bool bSet);
+  // Legacy Hidden
+  virtual bool isSupportLegacyHiddenMode() const;
+  virtual bool isLegacyHiddenMode() const;
+  virtual void setLegacyHiddenMode(bool bSet);
+  // Transparencies plotting
+  virtual bool isPlotTransparency() const;
+  virtual void setPlotTransparency(bool bSet);
+
+  /** \details
+    Returns the frozen layers for this view object.
+    
+    \param frozenLayers [out]  Receives an array of frozen layer Object IDs.
+    
+    \remarks
+    If called without the frozenLayers argument, returns true if and only if there
+    are any frozen layers.    
+  */
+  OdUInt32 frozenLayers() const { return m_frozenLayers.size(); }
+  void frozenLayers(OdDbStubPtrArray& frozenLayers) const { frozenLayers = m_frozenLayers; }
+  bool isLayerVisible(OdDbStub* layerId) const;
+
+  /** \details
+    Returns the number of pixels corresponding to the specified lineweight for this view object.
+    \param lineweight [in]  Lineweight.
+  */
+  int lineweightToPixels(OdDb::LineWeight lineweight) const;
+  double lineweightToPixels(double lineweight) const;
+
+  /** \details
+    Introduces a DCS rectangle into this vectorization context.
+    \param lowerLeft [in]  Lower-left corner.
+    \param upperRight [in]  Upper-right corner.
+  */
+  void screenRect(OdGsDCPoint &lowerLeft, OdGsDCPoint &upperRight) const;
+  void screenRect(OdGePoint2d &lowerLeft, OdGePoint2d &upperRight) const;
+  void screenRectNorm(OdGsDCRect& normalizedRect) const;
+  void viewportDcCorners(OdGePoint2d& lower_left, OdGePoint2d& upper_right) const;
+  bool doPerspectivePt(OdGePoint3d& point) const;
+  bool doInversePerspectivePt(OdGePoint3d& point) const;
+
+  OdGeMatrix3d eyeToScreenMatrix() const;
+  inline const OdGeMatrix3d& eyeToWorldMatrix() const;
+  inline const OdGeMatrix3d& worldToEyeMatrix() const;
+  ClearColor clearColor() const;
+
+  virtual void invalidate(const OdGeExtents3d& worldExt,
+      OdDb::LineWeight extendByLineweight = OdDb::kLnWt000);
+  void invalidateRegion(const OdGiPathNode& path);
+
+  OdGsDCRectArray invalidRects() const;
+  /** \details
+    Returns true if and only if this view object is not off-screen.
+  */
+  bool isViewportOnScreen() const;
+
+  bool isCompletelyVisible() const;
+  void setCompletelyVisible(bool val);
+
+  // Since layout view can be rotated to 90, 180 or 270 (for printing)
+  // views linked to viewports of this layout must be rotated accordingly.
+  // To determine viewport's rotation angle by it's corners coordinates 
+  // it's necessary to know if overall layout's window coordinates inverted. 
+  //
+  // For example overall layout's output rectangle can be (0,0)-(100,100)
+  // or (0,100)-(100,0)
+  // This means invertedX == invertedY == false in the first case and
+  // invertedX = false, invertedY == true in the second.
+  // Vieport with coordinates (10,10)-(90,90) inside this layout will be 
+  // considered unrotated in the first case or rotated to 270 degrees 
+  // in the second case.
+  void setInversion(bool invertedX, bool invertedY);
+
+  OdGiRegenType getRegenType() const { return m_regenerationType; }
+
+  /** \details
+    Returns the WCS (ECS) focal length of the lens for this view object.
+  */
+  double focalLength() const;
+
+  const OdGeVector3d& eyeVector() const { return m_eyeVector; }
+  const OdGeVector3d& xVector() const { return m_xVector; }
+  const OdGeVector3d& getUpVector() const { return m_upVector; }
+
+  double getLinetypeScaleMultiplier() const;
+  double getLinetypeGenerationCriteria() const;
+
+  virtual double getDeviation(const OdGiDeviationType deviationType,
+      const OdGePoint3d& pointOnCurve, bool bRecalculate = false) const;
+  void initDeviation();
+
+  /** \details
+    Returns the number of cached drawables for this view object.
+  */
+  int cachedDrawables() const { return m_nCachedDrawables!=0; }
+
+#ifdef ODGS_LOCAL_IDS
+  // Local viewport ID section
+  OdUInt32 localViewportId(const OdGsBaseModel *pModel) const
+  {
+    return m_localId.localViewportId(pModel);
+  }
+  virtual bool isLocalViewportIdCompatible(const OdGsViewImpl *pView) const;
+  OdGsViewLocalId &getViewLocalId()
+  {
+    return m_localId;
+  }
+#endif
+protected:
+  /** \details
+    Returns the minimum and maximum z-values for this view object.
+    \param zNear [out]  Receives the minimum z-value.
+    \param zFar [out]  Receives the maximum z-value.
+    \remarks
+    Returns true if and only if this view object has z-values associated with it.
+  */
+  virtual bool sceneDept(double& zNear, double& zFar) const;
+
+  /** \details
+    Returns the minimum and maximum depth of this view object.
+    \param pMinDeptSupported [out]  Receives the minimum depth supported.
+    \param pMaxDeptSupported [out]  Receives the maximum depth supported.
+    \remarks
+    Returns true if and only if this view object supports depth.    
+    
+    \note
+    The default implementation of this function does nothing but return false.
+  */
+  virtual bool usesDept(double* pMinDeptSupported = 0, double* pMaxDeptSupported = 0) const;
+  
+protected:
+  /** \details
+    Notification function called whenever the World to Eye transformation matrix has been changed.
+  */
+  void onWorldToEyeChanged();
+
+  /** \details
+    Notification function called whenever this ViewImpl object is about to be released.
+  */
+  void onFinalRelease();
+
+  virtual void updateViewProps(bool bFullUpdate = true);
+
+  inline bool isCheckValid() const;
+  inline void setCheckValid(bool bValue) const;
+  inline bool isInvalid() const;
+  inline void setInvalid(bool bValue) const;
+  inline void setPerspectiveEnabled(bool bValue) const;
+
+public:
+  inline bool isNonRectClipped() const;
+  inline bool hasLweights() const { return !m_lweights.empty(); }
+  inline const OdUInt8Array &getLweightsEnum() const { return m_lweights; }
+
+  const OdGePoint2d& dcScreenMin() const { return m_dcScreenMin; }
+  const OdGePoint2d& dcScreenMax() const { return m_dcScreenMax; }
+  const OdGePoint2d& dcLowerLeft() const { return m_dcLowerLeft; }
+  const OdGePoint2d& dcUpperRight() const { return m_dcUpperRight; }
+
+  /** \details
+    Returns the perspective transformation matrix for this view object.
+  */
+  OdGeMatrix3d perspectiveMatrix() const;
+
+  /** \param mask [in]  Mask.
+  */
+  void invalidateCachedViewportGeometry(OdUInt32 mask);
+
+protected:
+  /** \details
+    Returns the OdGiDrawable associated with the specified DrawableHolder object.
+    \param drawableHolder [in]  Drawable holder.
+     
+  */
+  OdGiDrawablePtr drawableAt(DrawableHolder& drawableHolder);
+  OdGsNode* getRootNode(DrawableHolder& holder);
+  virtual void propagateInvalidVpFlag();
+  virtual void propagateLayersChanges();
+
+public:
+  double calcDeviation(const OdGiDeviationType type, const OdGePoint3d& pt) const;
+
+  // Viewport properties (backgrounds, render settings, visual styles) management
+  OdGsPropertiesPtr getViewportPropertiesRoot() const;
+  bool updateViewportProperties(OdUInt32 incFlags);
+  OdGsPropertiesPtr getViewportPropertiesForType(OdGsProperties::PropertiesType type) const;
+
+  // Printing support methods
+
+  const OdGeMatrix3d& rotationMatrix() const;
+  short viewportRotation() const;
+  inline bool isRotated() const;
+
+  /** \details
+   When viewport is not rotated (or rotated 180)
+
+   +-----------------* m_dcScreenMax
+   |                 |
+   |                 |
+   |                 | fieldHeight
+   |                 | unrotatedFieldHeight
+   |                 |
+   |m_dcScreenMin    |
+   *-----------------+
+        fieldWidth
+    unrotatedFieldWidth
+
+   When viewport is rotated to 90 or 270:
+  
+   m_dcScreenMin
+   *-----------------+
+   |                 |
+   |                 |
+   |                 | fieldHeight
+   |                 | unrotatedFieldWidth
+   |                 |
+   |                 |
+   +-----------------* m_dcScreenMax
+        fieldWidth
+    unrotatedFieldHeight
+
+    Returns fieldWidth and fieldHeight 
+  */
+  double unrotatedFieldHeight() const;
+  double unrotatedFieldWidth() const;
+
+  /** \details
+    Returns actual field width variable (without inclusion if aspect ratio).
+  */
+  double actualFieldWidth() const;
+  /** \details
+    Returns actual field height variable (without inclusion if aspect ratio).
+  */
+  double actualFieldHeight() const;
+
+  // Primitives culling routines
+
+  /** \details
+    Initialize culling volume, associated with current view.
+
+    \remarks
+    Default implementation initializes culling volume for overall view, and transforms overall view culling volume
+    for all viewports inside overall view space (only if viewports has orthogonal projection). 
+    This method can be overrided into user device for adjust described behaviour.
+    If this method overrided as empty function (not create culling volume inside) - all culling functionality
+    will be disabled.
+
+    \sa
+    *  isCullingVolumeInitialized
+    *  cullingVolumeIntersectWithOpt
+    *  cullingVolumeIntersectWith
+  */
+  virtual void initCullingVolume();
+  /** \details
+    Sets culling volume associated with current view.
+    \param newVol [in]  Smart pointer to new culling volume object.
+    \sa
+    *  cullingVolume
+    *  initCullingVolume
+  */
+  void setCullingVolume(OdGsCullingVolumePtr newVol);
+  /** \details
+    Returns culling volume associated with current view.
+    \sa
+    *  initCullingVolume
+    *  setCullingVolume
+  */
+  OdGsCullingVolumePtr cullingVolume() const;
+  /** \details
+    Returns true if and only if culling volume associated with current view.
+    \remarks
+    Culling volume consider associated with current view if pointer to culling volume is not null.
+    \sa
+    *  initCullingVolume
+    *  setCullingVolume
+    *  cullingVolume
+  */
+  virtual bool isCullingVolumeInitialized() const;
+  /** \details
+    Optimized intersection test between culling volume associated with current view and culling primitive.
+    \remarks
+    Returns true if culling volume is not initialized.
+    \param prim [in]  Input primitive for culling detection.
+    \sa
+    *  isCullingVolumeInitialized
+    *  cullingVolumeIntersectWith
+  */
+  virtual bool cullingVolumeIntersectWithOpt(const OdGsCullingPrimitive &prim) const;
+  /** \details
+    Complete intersection test between culling volume associated with current view and culling primitive.
+
+    \remarks
+    Returns kIntersectIn intersection status if culling volume is not initialized.
+    Return value intersection statuses:
+    <table>
+    Name               Value    Description
+    kIntersectNot      0        No intersection detected.
+    kIntersectOk       1        Intersects with culling volume boundary.
+    kIntersectIn       2        Culling volume primitive is completely inside culling volume boundary.
+    </table>
+
+    \param prim [in]  Input primitive for culling detection.
+
+    \sa
+    *  isCullingVolumeInitialized
+    *  cullingVolumeIntersectWithOpt
+  */
+  virtual OdGsCullingVolume::IntersectionStatus cullingVolumeIntersectWith(const OdGsCullingPrimitive &prim) const;
+  /** \details
+    Applies transformation for culling volume associated with current view.
+    \param xfm [in]  Transformation matrix.
+    \sa
+    *  initCullingVolume
+  */
+  virtual void cullingVolumeTransformBy(const OdGeMatrix3d &xfm);
+
+  /** \details
+    Defines the 3d clipping for this Viewport object.
+
+    \param pBoundary [in]  3d clipping boundary.
+    \param pClipInfo [in]  Optional 3d clipping boundary extended data.
+  */
+  virtual void setViewport3dClipping(const OdGiClipBoundary* pBoundary, const OdGiAbstractClipBoundary* pClipInfo = NULL);
+  /** \details
+    Returns the current 3d clipping for this Viewport object.
+
+    \param ppClipInfo [out]  Optional 3d clipping boundary extended data.
+  */
+  virtual const OdGiClipBoundary *viewport3dClipping(const OdGiAbstractClipBoundary** ppClipInfo = NULL) const;
+  /** \details
+    Returns the current 3d clipping for this Viewport object as single object.
+  */
+  OdGiClipBoundaryWithAbstractData *viewport3dClippingObject();
+  /** \details
+    Returns true if and only if 3d clipping set for this Viewport object.
+  */
+  bool hasViewport3dClipping() const;
+
+  virtual bool saveViewState(OdGsFiler *pFiler) const;
+  virtual bool loadViewState(OdGsFiler *pFiler);
+  virtual bool saveClientViewState(OdGsFiler *pFiler) const;
+  virtual bool loadClientViewState(OdGsFiler *pFiler);
+private:
+  void setExtents(const OdGeExtents3d& ext, bool bAdd);
+  void getExtents(OdGeExtents3d& ext) const;
+
+private:
+  enum EGsViewImplFlags
+  {
+    kFirstViewImplFlag       = 1,
+
+    kInvalid                 = kFirstViewImplFlag << 0, // device surface entirely invalid
+    kCheckValid              = kFirstViewImplFlag << 1, // device surface entirely valid
+    kBorderVisible           = kFirstViewImplFlag << 2,
+    kDoFrontClip             = kFirstViewImplFlag << 3,
+    kDoBackClip              = kFirstViewImplFlag << 4,
+    kPerspectiveEnabled      = kFirstViewImplFlag << 5,
+    kHidden                  = kFirstViewImplFlag << 6, // view is hidden
+    kTransparentClearColor   = kFirstViewImplFlag << 7,
+    kDevBgClearColor         = kFirstViewImplFlag << 8,
+    kEyeToWorldValid         = kFirstViewImplFlag << 9,
+    kWorldToEyeValid         = kFirstViewImplFlag << 10,
+    kWorldToDeviceValid      = kFirstViewImplFlag << 11,
+    kSnapping                = kFirstViewImplFlag << 12,
+    kForbidDrawableRegenDraw = kFirstViewImplFlag << 13,
+    kSceneDeptInvalid        = kFirstViewImplFlag << 14,
+    kDepViewInside           = kFirstViewImplFlag << 15,
+    kLegacyWireframe         = kFirstViewImplFlag << 16,
+    // there are two modes with hidden lines removed:
+    // - normal, set by SHADEMODE command in CAD for display and
+    //   represented by 'Hidden' visual style in shade plot viewport/layout props for printing, and
+    // - legacy, set by HIDE command in CAD for display and
+    //   according to 'OdDbViewport/OdDbPlotSettings::kHidden' shade plot for printing;
+    // they both use 'kHiddenLine' render mode, but have some differences, e.g. in plot style usage;
+    // this flag is to distinguish these two cases
+    kLegacyHidden            = kFirstViewImplFlag << 17,
+    kPlotTransparency        = kFirstViewImplFlag << 18,
+    kAccumulateVpChanges     = kFirstViewImplFlag << 19
+  };
+
+private:
+  OdGsBaseModulePtr m_pModule;
+  OdDbStubPtrArray m_lastFrozenLayers;
+
+  mutable OdUInt32 m_gsViewImplFlags;
+  ODCOLORREF m_borderColor;
+  int m_borderWeight;
+  double m_frontClipDist;
+  double m_backClipDist;
+  bool m_screenInvertedX;
+  bool m_screenInvertedY;
+  OdGePoint2d m_dcScreenMin;
+  OdGePoint2d m_dcScreenMax;
+  OdGePoint2d m_dcLowerLeft;
+  OdGePoint2d m_dcUpperRight;
+
+  double m_fieldWidth;
+  double m_fieldHeight;
+  double m_lensLength;
+  double m_eyeVecLength;
+
+  OdGePoint3d m_position;
+  OdGePoint3d m_target;
+  OdGeVector3d m_upVector;
+  OdGeVector3d m_eyeVector;
+  OdGeVector3d m_xVector;
+  mutable OdGeMatrix3d m_worldToDeviceMatrix;
+  mutable OdGeMatrix3d m_eyeToWorld;
+  mutable OdGeMatrix3d m_worldToEye;
+
+  OdIntArray m_nrcCounts;
+  OdGePoint2dArray m_nrcPoints;
+  double m_linetypeScaleMultiplier;
+  double m_linetypeAlternateScaleMultiplier;
+  double m_lineweightToDcScale;
+  OdUInt8Array m_lweights;
+  OdGsCullingVolumePtr m_pCullingVolume;
+  OdSharedPtr<OdGiClipBoundaryWithAbstractData> m_p3dClip;
+
+  double m_deviation[5];
+
+  int m_nCachedDrawables;
+  OdGeExtents3d m_extents;
+
+  OdGsPropertiesPtr m_pProperties;
+  mutable OdMutex m_mtExtents;
+
+protected:
+  OdGsBaseVectorizeDevice* m_pDevice;
+  OdGsClientViewInfo m_viewInfo;
+  OdUInt32 m_giViewportId;
+#ifdef ODGS_LOCAL_IDS
+  OdGsViewLocalId m_localId;
+#endif
+  OdGiRegenType m_regenerationType;
+  // Reserved pointer for internal use (binary incompatible changes), do not delete.
+  OdRxObjectPtr m_pGsReserved;
+
+  // Made protected for access in OdGiViewport methods
+  RenderMode m_renderMode;
+
+  DrawableHolderArray m_drawables;
+
+  OdDbStubPtrArray m_frozenLayers;
+
+  friend class GsViewImplHelper;
+  friend class OdGiBaseVectorizerImpl;
+  friend class OdGsBaseVectorizer;
+  friend class OdGsBaseModule;
+  friend class OdGsBaseVectorizeDevice;
+};
+
+inline bool OdGsViewImpl::isDependentViewportView() const
+{
+  return GETBIT(m_viewInfo.viewportFlags, OdGsClientViewInfo::kDependentViewport);
+}
+
+inline bool OdGsViewImpl::isDependentGeometryView() const
+{
+  return GETBIT(m_viewInfo.viewportFlags, OdGsClientViewInfo::kDependentGeometry);
+}
+
+inline bool OdGsViewImpl::isHelperView() const
+{
+  return GETBIT(m_viewInfo.viewportFlags, OdGsClientViewInfo::kHelperView);
+}
+
+inline const OdGsBaseModule *OdGsViewImpl::getGsModulePtr() const
+{
+  return m_pModule.get();
+}
+
+inline const OdGiContextualColors *OdGsViewImpl::contextualColors() const
+{
+  return m_viewInfo.contextColors.get();
+}
+
+inline void OdGsViewImpl::setContextualColors(OdGiContextualColors *pColors)
+{
+  m_viewInfo.contextColors = pColors;
+  invalidate();
+}
+
+bool OdGsViewImpl::isCheckValid() const
+{
+  return GETBIT(m_gsViewImplFlags, kCheckValid);
+}
+
+void OdGsViewImpl::setCheckValid(bool bValue) const
+{
+  SETBIT(m_gsViewImplFlags, kCheckValid, bValue);
+}
+
+bool OdGsViewImpl::isInvalid() const
+{
+  return GETBIT(m_gsViewImplFlags, kInvalid);
+}
+
+void OdGsViewImpl::setInvalid(bool bValue) const
+{
+  SETBIT(m_gsViewImplFlags, kInvalid, bValue);
+}
+
+void OdGsViewImpl::setPerspectiveEnabled(bool bValue) const
+{
+  SETBIT(m_gsViewImplFlags, kPerspectiveEnabled, bValue);
+}
+
+bool OdGsViewImpl::isNonRectClipped() const
+{
+  return m_nrcCounts.size() != 0;
+}
+
+bool OdGsViewImpl::isRotated() const
+{
+  short rotation = viewportRotation();
+  return rotation == 90 || rotation == 270;
+}
+
+const OdGeMatrix3d& OdGsViewImpl::eyeToWorldMatrix() const
+{
+  if(!GETBIT(m_gsViewImplFlags, kEyeToWorldValid))
+  {
+    m_eyeToWorld.setCoordSystem(target(), xVector(), upVector(), eyeVector());
+    SETBIT(m_gsViewImplFlags, kEyeToWorldValid, true);
+  }
+  return m_eyeToWorld;
+}
+
+const OdGeMatrix3d& OdGsViewImpl::worldToEyeMatrix() const
+{
+  if(!GETBIT(m_gsViewImplFlags, kWorldToEyeValid))
+  {
+    m_worldToEye = eyeToWorldMatrix().inverse();
+    SETBIT(m_gsViewImplFlags, kWorldToEyeValid, true);
+  }
+  return m_worldToEye;
+}
+
+inline OdGsViewImpl* OdGsViewImpl::safeCast(OdGsView* pView)
+{
+  return OdSmartPtr<OdGsViewImpl>(pView).get();
+}
+
+inline const OdGsViewImpl* OdGsViewImpl::safeCast(const OdGsView* pView)
+{
+  return OdSmartPtr<OdGsViewImpl>(pView).get();
+}
+
+inline bool OdGsViewImpl::isSnapping() const
+{
+  return GETBIT(m_gsViewImplFlags, kSnapping);
+}
+
+inline void OdGsViewImpl::setSnapping(bool val)
+{
+  SETBIT(m_gsViewImplFlags, kSnapping, val);
+}
+
+inline bool OdGsViewImpl::isRegenOnDrawForbidden() const
+{
+  return GETBIT(m_gsViewImplFlags, kForbidDrawableRegenDraw);
+}
+
+inline void OdGsViewImpl::setRegenOnDrawForbidden(bool val)
+{
+  SETBIT(m_gsViewImplFlags, kForbidDrawableRegenDraw, val);
+}
+
+inline bool OdGsViewImpl::isAccumulateVpChanges() const
+{
+  return GETBIT(m_gsViewImplFlags, kAccumulateVpChanges);
+}
+
+inline bool OdGsViewImpl::isCompletelyVisible() const
+{
+  return GETBIT(m_gsViewImplFlags, kDepViewInside);
+}
+
+inline void OdGsViewImpl::setCompletelyVisible(bool val)
+{
+  SETBIT(m_gsViewImplFlags, kDepViewInside, val);
+}
+
+inline OdGiClipBoundaryWithAbstractData *OdGsViewImpl::viewport3dClippingObject()
+{
+  return m_p3dClip.get();
+}
+
+inline bool OdGsViewImpl::hasViewport3dClipping() const
+{
+  return !m_p3dClip.isNull();
+}
+
+inline double OdGsViewImpl::actualFieldWidth() const
+{
+  return m_fieldWidth;
+}
+
+inline double OdGsViewImpl::actualFieldHeight() const
+{
+  return m_fieldHeight;
+}
+
+#include "TD_PackPop.h"
+
+#endif // ODGSVIEWIMPL_INC
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewLocalId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewLocalId.h
new file mode 100755
index 0000000..e0f0bcc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewLocalId.h
@@ -0,0 +1,132 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef __OD_GS_VIEW_LOCAL_ID__
+#define __OD_GS_VIEW_LOCAL_ID__
+
+#include "Gs/Gs.h"
+
+#include "TD_PackPush.h"
+
+class OdGsViewImpl;
+class OdGsBaseModel;
+
+/* Note:
+   All GsNode's locally owned by only one GsModel, so GsNode metafiles is also owned by GsModel. GsModel could be shared
+   between different rendering modules. But viewportId is creating from SlotManager owned by rendering device, so
+   viewportId's for different devices will lie in same range, so couldn't be used as unique view identifier inside
+   GsModel. To solve problem we create for each GsModel their own SlotManager which is used for generate unique
+   viewportId for each view referenced by GsModel. This localViewportId is stored on GsModel side, view access to it
+   and store it's own copy localViewportId for optimization purposes (this is not problem for MT because only one
+   GsModel is used per parallel vectorization.
+*/
+
+/** \details
+        
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsBaseModelLocalIds : public OdRxObject
+{
+  /* Note: the initial registration will be done on addViewRef. But for example MT ghost views or views
+           of layout helper will do registration on first update. In this case first of all we
+           search exist registered view, if it is doesn't exist we search view with similar viewportId
+           and similar device (case of MT ghost view and layout helper view). Composite device
+           must register view ID manually.                                                               */
+  public:
+    // Call on view deletion to clear model view entry
+    virtual void onViewDelete(OdGsViewImpl *pView) = 0;
+    // Manually reset Id
+    virtual void resetViewId(OdGsViewImpl *pView, OdUInt32 nId) = 0;
+    // Get current view Id (or -1 if view doesn't registered)
+    virtual OdUInt32 getViewId(OdGsViewImpl *pView) = 0;
+    // Make view registration (you must check first does id is already registered)
+    virtual OdUInt32 registerView(OdGsViewImpl *pView) = 0;
+    // Get maximum registered Id
+    virtual OdUInt32 getMaxId() const = 0;
+
+    static OdSmartPtr<OdGsBaseModelLocalIds> createObject();
+};
+typedef OdSmartPtr<OdGsBaseModelLocalIds> OdGsBaseModelLocalIdsPtr;
+
+/** \details
+            
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+// Used in OdGsViewImpl
+class GS_TOOLKIT_EXPORT OdGsViewLocalId
+{
+  protected:
+    mutable const OdGsBaseModel *m_pLocalIdModel;
+    mutable OdUInt32 m_localId;
+    OdArray<OdGsBaseModelLocalIdsPtr> m_localIdRefs;
+    OdGsViewImpl *m_pView;
+  public:
+    explicit OdGsViewLocalId(OdGsViewImpl *pView = NULL)
+      : m_pLocalIdModel(NULL)
+      , m_localId(0)
+      , m_pView(pView)
+    {
+    }
+    ~OdGsViewLocalId();
+
+    void setView(OdGsViewImpl *pView)
+    {
+      m_pView = pView;
+    }
+    OdGsViewImpl *view() const
+    {
+      return m_pView;
+    }
+
+    // Gets local viewport Id optimized
+    OdUInt32 localViewportId(const OdGsBaseModel *pModel) const
+    {
+      if (m_pLocalIdModel == pModel)
+        return m_localId;
+      m_pLocalIdModel = pModel;
+      return m_localId = getLocalViewportId(pModel);
+    }
+    // Gets local viewport Id directly from GsModel
+    OdUInt32 getLocalViewportId(const OdGsBaseModel *pModel) const;
+
+    // Reset current state
+    void reset()
+    {
+      m_pLocalIdModel = NULL;
+      m_localId = 0;
+    }
+
+    OdArray<OdGsBaseModelLocalIdsPtr> &refs()
+    {
+      return m_localIdRefs;
+    }
+};
+
+#define ODGS_LOCAL_IDS
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_VIEW_LOCAL_ID__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewProps.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewProps.h
new file mode 100755
index 0000000..9d4d1f0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewProps.h
@@ -0,0 +1,324 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_VIEW_PROPS__
+#define __OD_GS_VIEW_PROPS__
+
+#include "GsViewPropsDef.h"
+#include "Ge/GeMatrix3d.h"
+#include "DbStubPtrArray.h"
+#include "GsViewLocalId.h"
+
+#include "TD_PackPush.h"
+
+class OdGsViewImpl;
+
+/** \details
+    
+    Library: TD_Gs
+
+    <group !!RECORDS_TD_APIRef> 
+*/
+struct GS_TOOLKIT_EXPORT ViewProps
+{
+public:
+    ViewProps();
+    OdUInt32              m_vpId;
+    OdDbStub*             m_vpObjectId;
+    OdGiRegenType         m_regenType;
+    OdGsView::RenderMode  m_renderMode;
+    OdGeMatrix3d          m_worldToEye;
+    OdGePoint3d           m_cameraLocation;
+    OdGePoint3d           m_cameraTarget;
+    OdGeVector3d          m_cameraUpVector;
+    OdGeVector3d          m_viewDir;
+    OdGePoint2d           m_vpLowerLeft;
+    OdGePoint2d           m_vpUpperRight;
+    double                m_deviation[5];
+    double                m_frontClip;
+    double                m_backClip;
+    OdDbStubPtrArray      m_frozenLayers;
+    double                m_linetypeScaleMultiplier;
+    const void*           m_renderModule;
+    OdDbStub*             m_annoScale;
+    OdIntPtr              m_filterFunction;
+    OdDbStub*             m_visualStyle;
+    OdUInt32              m_nViewChanges;
+
+    void set(const OdGsViewImpl& view);
+    OdUInt32 difference(const ViewProps& props) const;
+    bool isCompatibleWith(const ViewProps& props, OdUInt32 nFlags,
+        bool bCompareFrozenLayers = true) const;
+    bool isInvalid() const { return GETBIT(m_nViewChanges, 0x80000000); }
+    void setInvalid(bool bValue) { SETBIT(m_nViewChanges, 0x80000000, bValue); }
+};
+typedef OdArray<ViewProps> ViewPropsArray;
+
+/** \details
+    
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT ViewRefs
+{
+public:
+  ViewRefs() : m_nViews(0), m_nMaxVpId(-1) {}
+  OdUInt32 numViews() const { return m_nViews; }
+  void add(OdUInt32 viewportId)
+  {
+    if(viewportId < m_data.size())
+    {
+      if(!m_data[viewportId])
+        ++m_nViews;
+    }
+    else
+    {
+      m_data.insert(m_data.end(), viewportId + 1 - m_data.size(), 0);
+      ++m_nViews;
+    }
+    ++m_data[viewportId];
+    m_nMaxVpId = -1;
+  }
+  void remove(OdUInt32 viewportId)
+  {
+    ODA_ASSERT(m_nViews);
+    ODA_ASSERT(m_data.size() > viewportId);
+    ODA_ASSERT(m_data[viewportId] > 0);
+    if((--m_data[viewportId]) == 0)
+    {
+      --m_nViews;
+      if(!m_nViews)
+        m_data.clear();
+    }
+    m_nMaxVpId = -1;
+  }
+  int maxViewportId() const
+  {
+    if (m_nMaxVpId < 0)
+    {
+      for(unsigned i = m_data.size(); i; )
+        if(m_data[--i])
+          return m_nMaxVpId = (int)i;
+    }
+    return m_nMaxVpId;
+  }
+  unsigned numDifferentViewports() const
+  {
+    unsigned count = 0;
+    for(unsigned i = 0; i < m_data.size(); ++i)
+      if(m_data[i])
+        ++count;
+    return count;
+  }
+  void clear() { m_data.clear(); m_nViews = 0; m_nMaxVpId = -1; }
+#ifndef ODGS_LOCAL_IDS
+  void set(OdGsDevice& device, OdUInt32 nViews);
+#else
+  void set(const OdGsBaseModel *pModel);
+#endif
+  bool contains(OdUInt32 viewportId) const
+  {
+    return (viewportId < m_data.size()) && (m_data[viewportId] != 0);
+  }
+
+  class const_iterator
+  {
+  public:
+    const_iterator(const ViewRefs& refs): m_refs(refs), m_pos(-1){}
+    const_iterator(const const_iterator& c): m_refs(c.m_refs), m_pos(c.m_pos){}
+    void start() { m_pos = -1; findNext(); }
+    bool done() const { return m_pos < 0 || m_pos >= (int)(m_refs.m_data.size()); }
+    OdUInt32 viewportId() const { ODA_ASSERT(!done()); return m_pos; }
+    void step() { findNext(); }
+
+  protected:
+    void findNext()
+    {
+      ODA_ASSERT(m_pos > -2);
+      for(++m_pos; (m_pos < (int)m_refs.m_data.size()) && !m_refs.m_data[m_pos]; ++m_pos);
+    }
+  protected:
+    const ViewRefs& m_refs;
+    int m_pos;
+  };
+
+  friend class const_iterator;
+protected:
+  typedef OdIntArray _marray;
+  _marray m_data;
+  OdUInt32 m_nViews;
+  mutable int m_nMaxVpId; // cache maxViewportId
+};
+
+/** \details
+        
+    Library: TD_Gs
+
+    <group OdGs_Classes> 
+*/
+class StockProps
+{
+public:
+  StockProps(): m_deviceClass(0){}
+  StockProps(const StockProps& c): m_viewRefs(c.m_viewRefs),
+      m_viewProps(c.m_viewProps), m_deviceClass(c.m_deviceClass){}
+
+  const ViewProps& viewProps(unsigned i) const { return m_viewProps.getAt(i); }
+  unsigned numViewProps() const { return m_viewProps.size(); }
+  const ViewRefs& viewRefs() const { return m_viewRefs; }
+  const OdRxClass* deviceClass() const { return m_deviceClass; }
+
+  bool set(const ViewRefs& refs, const ViewPropsArray& props,
+      const OdRxClass* deviceClass)
+  {
+      if(!deviceClass)
+          return false;//no device to identity cached data
+      unsigned i = 0;
+      for(; (i < props.size()) && props.getAt(i).isInvalid(); ++i);
+      if(i == props.size())
+          return false; //all props are invalid, won't be used anyway
+      m_viewRefs = refs;
+      m_viewProps = props;
+      m_deviceClass = deviceClass;
+      return true;
+  }
+  void clear() { m_viewRefs.clear(); m_viewProps.clear(); }
+
+protected:
+  ViewRefs m_viewRefs;
+  ViewPropsArray m_viewProps;
+  const OdRxClass* m_deviceClass;
+};
+
+inline bool sameSortedArrays(const OdDbStubPtrArray& ar1, const OdDbStubPtrArray& ar2)
+{
+  if (ar1.size() == ar2.size())
+  {
+    if (ar1.getPtr() != ar2.getPtr())
+      return ::memcmp(ar1.getPtr(), ar2.getPtr(), sizeof(OdDbStub*) * ar2.size()) == 0;
+    else
+      return true;
+  }
+  return false;
+}
+
+inline bool ViewProps::isCompatibleWith(
+    const ViewProps& props, OdUInt32 nMask
+    ,bool bCompareFrozenLayers
+    ) const
+{
+  //NS: optimization
+  if((!nMask) && !bCompareFrozenLayers)
+    return true;
+  if(GETBIT(nMask, kVpID))
+  {
+    if((m_vpId!=props.m_vpId) || (m_vpObjectId!=props.m_vpObjectId))
+      return false;
+  }
+  if(GETBIT(nMask, kVpRegenType))
+  {
+    if(m_regenType!=props.m_regenType)
+      return false;
+  }
+  if(GETBIT(nMask, kVpRenderMode))
+  {
+    if(m_renderMode!=props.m_renderMode)
+      return false;
+  }
+  if(bCompareFrozenLayers && (GETBIT(nMask, kVpFrozenLayers) ||
+     !sameSortedArrays(m_frozenLayers, props.m_frozenLayers)))
+  {
+    return false;
+  }
+  if(GETBIT(nMask, kVpFrontBack))
+  {
+    if(m_frontClip!=props.m_frontClip || m_backClip!=props.m_backClip)
+      return false;
+  }
+  if(GETBIT(nMask, kVpCamLocation))
+  {
+    if(m_cameraLocation!=props.m_cameraLocation)
+      return false;
+  }
+  if(GETBIT(nMask, kVpCamTarget))
+  {
+    if(m_cameraTarget!=props.m_cameraTarget)
+      return false;
+  }
+  if(GETBIT(nMask, kVpMaxDevForCircle))
+  {
+    if(OdNegative(m_deviation[kOdGiMaxDevForCircle] - props.m_deviation[kOdGiMaxDevForCircle]))
+      return false;
+  }
+  if(GETBIT(nMask, kVpCamUpVector))
+  {
+    if(m_cameraUpVector!=props.m_cameraUpVector)
+      return false;
+  }
+  if(GETBIT(nMask, kVpCamViewDir))
+  {
+    if(m_viewDir!=props.m_viewDir)
+      return false;
+  }
+  if(GETBIT(nMask, kVpViewport))
+  {
+    if(m_vpLowerLeft!=props.m_vpLowerLeft || m_vpUpperRight!=props.m_vpUpperRight)
+      return false;
+  }
+  if(GETBIT(nMask, kVpWorldToEye))
+  {
+    if(m_worldToEye!=props.m_worldToEye)
+      return false;
+  }
+  if(GETBIT(nMask, kVpLtypeScaleMult))
+  {
+    if(!OdEqual(m_linetypeScaleMultiplier, props.m_linetypeScaleMultiplier))
+      return false;
+  }
+  if(GETBIT(nMask, kVpRenderModule))
+  {
+    if(m_renderModule!=props.m_renderModule)
+      return false;
+  }
+  if(GETBIT(nMask, kVpAnnoScale))
+  {
+    if(m_annoScale!=props.m_annoScale)
+      return false;
+  }
+  if(GETBIT(nMask, kVpFilterFunction))
+  {
+    if(m_filterFunction!=props.m_filterFunction)
+      return false;
+  }
+  if(GETBIT(nMask, kVpVisualStyle))
+  {
+    if(m_visualStyle!=props.m_visualStyle)
+      return false;
+  }
+  return true;
+}
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_VIEW_PROPS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewPropsDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewPropsDef.h
new file mode 100755
index 0000000..8c1662e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewPropsDef.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef __OD_GS_VIEW_PROPS_DEF__
+#define __OD_GS_VIEW_PROPS_DEF__
+
+enum
+{
+  kVpID                   = 0x00000001,
+  kVpRegenType            = 0x00000002,
+  kVpRenderMode           = 0x00000004,
+  kVpWorldToEye           = 0x00000008,
+  kVpPerspective          = 0x00000010,
+  kVpResolution           = 0x00000020,
+  kVpMaxDevForCircle      = 0x00000040,
+  kVpMaxDevForCurve       = 0x00000080,
+  kVpMaxDevForBoundary    = 0x00000100,
+  kVpMaxDevForIsoline     = 0x00000200,
+  kVpMaxDevForFacet       = 0x00000400,
+  kVpCamLocation          = 0x00000800,
+  kVpCamTarget            = 0x00001000,
+  kVpCamUpVector          = 0x00002000,
+  kVpCamViewDir           = 0x00004000,
+  kVpViewport             = 0x00008000,
+  kVpFrontBack            = 0x00010000,
+  kVpFrozenLayers         = 0x00020000,
+  kVpLtypeScaleMult       = 0x00040000,
+  kEntityRegenDraw        = 0x00080000,
+  kVpDisableLayoutCache   = 0x00100000,
+  kVpModelTf              = 0x00200000,
+  kVpExcludeFromExtMinMax = 0x00400000,
+  kSectionable            = 0x00800000,
+  kVpRenderModule         = 0x01000000,
+  kVpAnnoScale            = 0x02000000,
+  kVpFilterFunction       = 0x04000000,
+  kVpVisualStyle          = 0x08000000,
+  kVpLastPropBit          = kVpVisualStyle,
+  kVpAllProps             = 0x0FFFFFFF
+};
+
+inline bool isModelTfDependent(OdUInt32 flags)
+{
+    return GETBIT(flags, kVpModelTf);
+}
+
+#endif // __OD_GS_VIEW_PROPS_DEF__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewportProperties.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewportProperties.h
new file mode 100755
index 0000000..483d8a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsViewportProperties.h
@@ -0,0 +1,90 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_VIEWPORT_PROPERTIES__
+#define __OD_GS_VIEWPORT_PROPERTIES__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsProperties.h"
+#include "Gi/GiViewportTraitsData.h"
+#include "Gs/GsBackgroundProperties.h"
+#include "Gs/GsVisualStyleProperties.h"
+#include "Gs/GsRenderSettingsProperties.h"
+
+// Viewports is not entities or nodes (this is objects with one attributes set per scene)
+
+// OdGsViewportProperties hierarhy:
+// OdGsViewportProperties
+//   OdGsBackgroundProperties
+//   OdGsVisualStyleProperties
+//   OdGsRenderEnvironmentProperties
+//   OdGsRenderSettingsProperties
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsViewportProperties : public OdGsProperties
+{
+  OdGiViewportTraitsData* m_pViewportTraits;
+  // Internal handlers
+  OdGsBackgroundPropertiesPtr  m_pBackground;
+  OdGsVisualStylePropertiesPtr m_pVisualStyle;
+  OdGsRenderEnvironmentPropertiesPtr m_pRenderEnvironment;
+  OdGsRenderSettingsPropertiesPtr m_pRenderSettings;
+public:
+  ODRX_DECLARE_MEMBERS(OdGsViewportProperties);
+
+  OdGsViewportProperties();
+  ~OdGsViewportProperties();
+
+  OdGiViewportTraitsData* viewportTraitsData() const { return m_pViewportTraits; }
+
+  bool isTraitsModified();
+
+  void clearTraits();
+
+  // OdGsProperties virtual overrides
+
+  virtual PropertiesType propertiesType() const
+  {
+    return kViewport;
+  }
+
+  virtual OdSmartPtr<OdGsProperties> propertiesForType(PropertiesType type) const;
+  
+  // Update attributes
+  virtual void update(const OdGiDrawable* pUnderlyingDrawable,
+      OdGsViewImpl* view, OdUInt32 incFlags = kAll);
+  // Display attributed data
+  virtual void display(OdGsBaseVectorizer& view,
+      OdGsPropertiesDirectRenderOutput *pdro = NULL, OdUInt32 incFlags = kAll);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsViewportProperties object pointers.
+*/
+typedef OdSmartPtr<OdGsViewportProperties> OdGsViewportPropertiesPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_VIEWPORT_PROPERTIES__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVisualStyleProperties.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVisualStyleProperties.h
new file mode 100755
index 0000000..c38297a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/GsVisualStyleProperties.h
@@ -0,0 +1,85 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_GS_VISUALSTYLE_PROPERTIES__
+#define __OD_GS_VISUALSTYLE_PROPERTIES__
+
+#include "TD_PackPush.h"
+
+#include "Gs/GsProperties.h"
+#include "Gi/GiVisualStyle.h"
+#include "Gi/GiVisualStyleTraitsData.h"
+
+// VisualStyles is not entities or nodes
+// VisualStyles can be dynamicly modified outside viewport's:
+//   OdGsPropertiesPtr vs = props->propertiesForType(kVisualStyle);
+//   vs->update(newVS, view, kVisualStyle);
+// Then may be putted to view:
+//   vs->display(this->view, NULL, kVisualStyle);
+// Or accesed directly from viewport (on onTraitsModified for example):
+//   OdGsVisualStylePropertiesPtr pVS = props->propertiesForType(kVisualStyle);
+//   OdGiVisualStyleTraitsData* pVSData = pVS->visualStyleTraitsData();
+//   pVSData->(useOfData());
+
+/** <group OdGs_Classes> 
+*/
+class GS_TOOLKIT_EXPORT OdGsVisualStyleProperties : public OdGsProperties
+{
+  OdGiVisualStyleTraitsData* m_pVisualStyleTraits;
+
+public:
+  ODRX_DECLARE_MEMBERS(OdGsVisualStyleProperties);
+
+  OdGsVisualStyleProperties();
+  ~OdGsVisualStyleProperties();
+
+  OdGiVisualStyleTraitsData* visualStyleTraitsData() const { return m_pVisualStyleTraits; }
+
+  bool isTraitsModified();
+
+  void clearTraits();
+
+  // OdGsProperties virtual overrides
+  
+  virtual PropertiesType propertiesType() const
+  {
+    return kVisualStyle;
+  }
+
+  virtual OdSmartPtr<OdGsProperties> propertiesForType(PropertiesType type) const;
+
+  virtual void update(const OdGiDrawable* pUnderlyingDrawable,
+      OdGsViewImpl* view, OdUInt32 incFlags = kAll);
+
+  virtual void display(OdGsBaseVectorizer& view,
+      OdGsPropertiesDirectRenderOutput *pdro = NULL, OdUInt32 incFlags = kAll);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdGsVisualStyleProperties object pointers.
+*/
+typedef OdSmartPtr<OdGsVisualStyleProperties> OdGsVisualStylePropertiesPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_GS_VISUALSTYLE_PROPERTIES__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/LineWtIndex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/LineWtIndex.h
new file mode 100755
index 0000000..7673196
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/LineWtIndex.h
@@ -0,0 +1,140 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __OD_LINE_WT_INDEX__
+#define __OD_LINE_WT_INDEX__
+
+inline int lineWeightIndex(OdDb::LineWeight lw)
+{
+  switch(lw)
+  {
+  case OdDb::kLnWt000:
+    return 0;
+  case OdDb::kLnWt005:
+    return 1;
+  case OdDb::kLnWt009:
+    return 2;
+  case OdDb::kLnWt013:
+    return 3;
+  case OdDb::kLnWt015:
+    return 4;
+  case OdDb::kLnWt018:
+    return 5;
+  case OdDb::kLnWt020:
+    return 6;
+  case OdDb::kLnWt025:
+    return 7;
+  case OdDb::kLnWt030:
+    return 8;
+  case OdDb::kLnWt035:
+    return 9;
+  case OdDb::kLnWt040:
+    return 10;
+  case OdDb::kLnWt050:
+    return 11;
+  case OdDb::kLnWt053:
+    return 12;
+  case OdDb::kLnWt060:
+    return 13;
+  case OdDb::kLnWt070:
+    return 14;
+  case OdDb::kLnWt080:
+    return 15;
+  case OdDb::kLnWt090:
+    return 16;
+  case OdDb::kLnWt100:
+    return 17;
+  case OdDb::kLnWt106:
+    return 18;
+  case OdDb::kLnWt120:
+    return 19;
+  case OdDb::kLnWt140:
+    return 20;
+  case OdDb::kLnWt158:
+    return 21;
+  case OdDb::kLnWt200:
+    return 22;
+  case OdDb::kLnWt211:
+    return 23;
+  default:break;
+  }
+  return 0;
+}
+
+inline OdDb::LineWeight lineWeightByIndex(int lw)
+{
+  switch(lw)
+  {
+  case 0:
+    return OdDb::kLnWt000;
+  case 1:
+    return OdDb::kLnWt005;
+  case 2:
+    return OdDb::kLnWt009;
+  case 3:
+    return OdDb::kLnWt013;
+  case 4:
+    return OdDb::kLnWt015;
+  case 5:
+    return OdDb::kLnWt018;
+  case 6:
+    return OdDb::kLnWt020;
+  case 7:
+    return OdDb::kLnWt025;
+  case 8:
+    return OdDb::kLnWt030;
+  case 9:
+    return OdDb::kLnWt035;
+  case 10:
+    return OdDb::kLnWt040;
+  case 11:
+    return OdDb::kLnWt050;
+  case 12:
+    return OdDb::kLnWt053;
+  case 13:
+    return OdDb::kLnWt060;
+  case 14:
+    return OdDb::kLnWt070;
+  case 15:
+    return OdDb::kLnWt080;
+  case 16:
+    return OdDb::kLnWt090;
+  case 17:
+    return OdDb::kLnWt100;
+  case 18:
+    return OdDb::kLnWt106;
+  case 19:
+    return OdDb::kLnWt120;
+  case 20:
+    return OdDb::kLnWt140;
+  case 21:
+    return OdDb::kLnWt158;
+  case 22:
+    return OdDb::kLnWt200;
+  case 23:
+    return OdDb::kLnWt211;
+  }
+  return OdDb::kLnWt000;
+}
+
+#endif // __OD_LINE_WT_INDEX__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/SiVolume.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/SiVolume.h
new file mode 100755
index 0000000..520ecb6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Gs/SiVolume.h
@@ -0,0 +1,241 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+// Volumetric spatial index query shape. For perspective mode projections.
+
+#ifndef _SpVolume_h_Included_
+#define _SpVolume_h_Included_
+
+#include "TD_PackPush.h"
+
+#include "Si/SiSpatialIndex.h"
+#include "Ge/GePlane.h"
+
+namespace OdSi
+{
+
+class Volume : public OdSiShape
+{
+  protected:
+    // Subset of OdGePlane functionality. Optimized allocation, transforms and accessibility.
+    class PlaneImpl
+    {
+      OdGePoint3d  m_origin;
+      OdGeVector3d m_normal;
+      double       m_dist;
+      public:
+        PlaneImpl() : m_dist(0.0) { }
+        PlaneImpl(const PlaneImpl &pl2) : m_origin(pl2.m_origin), m_normal(pl2.m_normal), m_dist(pl2.m_dist) { }
+        PlaneImpl &operator =(const PlaneImpl &pl2)
+        {
+          m_origin = pl2.m_origin; m_normal = pl2.m_normal; m_dist = pl2.m_dist;
+          return *this;
+        }
+
+        void set(const OdGePoint3d &origin, const OdGeVector3d &normal)
+        {
+          m_origin = origin;
+          m_normal = normal;
+          m_dist = -m_normal.dotProduct(m_origin.asVector());
+        }
+        void transformBy(const OdGeMatrix3d &xfm)
+        {
+          m_origin.transformBy(xfm);
+          m_normal.transformBy(xfm);
+          m_normal.normalize();
+          m_dist = -m_normal.dotProduct(m_origin.asVector());
+        }
+        void getCoefficients(double& a, double& b, double& c, double& d) const
+        {
+          a = m_normal.x; b = m_normal.y; c = m_normal.z; d = m_dist;
+        }
+    };
+    OdUInt32 m_nPlanes;
+    //OdGePlane m_plane[6];
+    PlaneImpl m_plane[6];
+    bool m_planeValid[6];
+  public:
+    Volume() : m_nPlanes(0) {}
+    Volume( const Volume& source ) : m_nPlanes(source.m_nPlanes)
+    {
+      for (OdUInt32 npl = 0; npl < m_nPlanes; npl++)
+      {
+        if (source.m_planeValid[npl])
+          m_plane[npl] = source.m_plane[npl];
+        m_planeValid[npl] = source.m_planeValid[npl];
+      }
+    }
+    Volume( const OdGePoint3d& origin, const OdGeVector3d& zAxis, const OdGeVector3d& yAxis, const OdGeVector3d& xAxis,
+            double xFov, double yFov, bool xFovAsAspect = false, bool yFovAsAspect = false,
+            bool bNearPlane = false, double fNearPlane = 0.01,
+            bool bFarPlane  = false, double fFarPlane  = 1.0 );
+
+    // Si interface
+    virtual bool contains( const OdGeExtents3d& extents, bool planar = false, const OdGeTol& tol = OdGeContext::gTol ) const;
+    
+    virtual bool intersects( const OdGeExtents3d& extents, bool planar = false, const OdGeTol& tol = OdGeContext::gTol ) const;
+
+    virtual OdSiShape* clone() const
+    {
+      return new Volume(*this);
+    }
+
+    virtual void transform(const OdGeMatrix3d& mtx)
+    {
+      for (OdUInt32 npl = 0; npl < m_nPlanes; npl++)
+      {
+        if (m_planeValid[npl])
+          m_plane[npl].transformBy(mtx);
+      }
+    }
+
+    // misc
+    static double fovToPlane(double fov, double len)
+    {
+      return 2.0 * (len * tan(fov * 0.5));
+    }
+    static double fovFromPlane(double plane, double len)
+    {
+      return atan(plane / len * .5) * 2.0;
+    }
+  protected:
+    static bool planeFromTri(const OdGePoint3d &A, const OdGePoint3d &B, const OdGePoint3d &C, /*OdGePlane*/ PlaneImpl &pl)
+    {
+      OdGeVector3d u = B - A;
+      OdGeVector3d v = C - A;
+      if (!u.isZeroLength(1e-100) && !v.isZeroLength(1e-100))
+      {
+        u.normalize(1e-100);
+        v.normalize(1e-100);
+      }
+      else
+      {
+        return false;
+      }
+      pl.set(A, u.crossProduct(v).normal());
+      return true;
+    }
+    static bool aabbInsidePlane(const OdGePoint3d &min, const OdGePoint3d &max, const /*OdGePlane*/ PlaneImpl &plane, const OdGeTol &tol)
+    {
+      double pt[3];
+      double pl[4];
+      plane.getCoefficients(pl[0], pl[1], pl[2], pl[3]);
+      pt[0] = (pl[0] > 0.0) ? max.x : min.x;
+      pt[1] = (pl[1] > 0.0) ? max.y : min.y;
+      pt[2] = (pl[2] > 0.0) ? max.z : min.z;
+      return pl[0] * pt[0] + pl[1] * pt[1] + pl[2] * pt[2] + pl[3] >= /*0.0*/ -tol.equalVector();
+    }
+};
+
+inline
+Volume::Volume( const OdGePoint3d& origin, const OdGeVector3d& zAxis, const OdGeVector3d& yAxis, const OdGeVector3d& xAxis,
+                double xFov, double yFov, bool xFovAsAspect, bool yFovAsAspect,
+                bool bNearPlane, double fNearPlane,
+                bool bFarPlane, double fFarPlane )
+{
+  // Aspect is width/height, so x is y*aspect, y is x/aspect
+  ODA_ASSERT(!(xFovAsAspect && yFovAsAspect));
+  double nearPlane_ = odmax(fNearPlane, 1.0); // near plane is required for plane calculation
+  double planeWidth = 1., planeHeight = 1.;
+  if (!xFovAsAspect)
+    planeWidth = fovToPlane(xFov, nearPlane_);
+  if (!yFovAsAspect)
+    planeHeight = fovToPlane(yFov, nearPlane_);
+  if (xFovAsAspect)
+    planeWidth = xFov * planeHeight;
+  if (yFovAsAspect)
+    planeHeight = planeWidth / yFov;
+  OdGeVector3d basisX(xAxis.normal()), basisY(yAxis.normal()), basisZ(zAxis.normal());
+  //basisX = basisZ.crossProduct(basisY).normal(); // from input, for support isotropy
+  OdGeVector3d deltaX = basisX * (planeWidth * 0.5);
+  OdGeVector3d deltaY = basisY * (planeHeight * 0.5);
+  OdGePoint3d nearPlane = origin + basisZ * nearPlane_;
+  OdGePoint3d planeQuad[4] =
+  {
+    nearPlane - deltaX - deltaY,
+    nearPlane + deltaX - deltaY,
+    nearPlane + deltaX + deltaY,
+    nearPlane - deltaX + deltaY
+  };
+  m_planeValid[0] = planeFromTri(planeQuad[0], origin, planeQuad[1], m_plane[0]);
+  m_planeValid[1] = planeFromTri(planeQuad[1], origin, planeQuad[2], m_plane[1]);
+  m_planeValid[2] = planeFromTri(planeQuad[2], origin, planeQuad[3], m_plane[2]);
+  m_planeValid[3] = planeFromTri(planeQuad[3], origin, planeQuad[0], m_plane[3]);
+  if (bNearPlane || bFarPlane)
+  {
+    m_planeValid[4] = bNearPlane;
+    if (bNearPlane)
+      m_plane[4].set(origin + basisZ * fNearPlane, basisZ);
+    if (bFarPlane)
+    {
+      m_planeValid[5] = true;
+      m_plane[5].set(origin + basisZ * fFarPlane, -basisZ);
+      m_nPlanes = 6;
+    }
+    else
+      m_nPlanes = 5;
+  }
+  else
+    m_nPlanes = 4;
+}
+
+inline
+bool Volume::contains( const OdGeExtents3d& extents, bool planar, const OdGeTol& tol ) const
+{
+  ODA_ASSERT( planar == false );
+  OdUInt32 i;
+  for (i = 0; i < m_nPlanes; i++)
+  {
+    if (!m_planeValid[i])
+      continue;
+    if (!aabbInsidePlane(extents.minPoint(), extents.maxPoint(), m_plane[i], tol))
+      return false; // entirely outside
+  }
+  for (i = 0; i < m_nPlanes; i++)
+  {
+    if (!m_planeValid[i])
+      continue;
+    if (!aabbInsidePlane(extents.maxPoint(), extents.minPoint(), m_plane[i], tol))
+      return false; // intersects
+  }
+  return true; // entirely inside
+}
+
+inline
+bool Volume::intersects( const OdGeExtents3d& extents, bool planar, const OdGeTol& tol ) const
+{
+  ODA_ASSERT( planar == false );
+  for (OdUInt32 i = 0; i < m_nPlanes; i++)
+  {
+    if (!m_planeValid[i])
+      continue;
+    if (!aabbInsidePlane(extents.minPoint(), extents.maxPoint(), m_plane[i], tol))
+      return false;
+  }
+  return true;
+}
+
+} // OdSi
+
+#include "TD_PackPop.h"
+
+#endif // _SpVolume_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GsMarkerArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GsMarkerArray.h
new file mode 100755
index 0000000..3721a8e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/GsMarkerArray.h
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef GSMARKERARRAY_INCLUDED
+#define GSMARKERARRAY_INCLUDED
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdGsMarker objects.
+*/
+typedef OdArray<OdGsMarker, OdMemoryAllocator<OdGsMarker> > OdGsMarkerArray;
+
+#endif // GSMARKERARRAY_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPattern.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPattern.h
new file mode 100755
index 0000000..4e3dd6e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPattern.h
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_HATCHPATTERN_H
+#define OD_HATCHPATTERN_H
+
+#include "TD_PackPush.h"
+
+#include "Ge/GePoint2d.h"
+#include "Ge/GeVector2d.h"
+#include "Ge/GeDoubleArray.h"
+
+/** \details
+    This class implements a single line of an OdDbHatchPattern object.
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class OdHatchPatternLine
+{
+public:
+  double            m_dLineAngle;
+  OdGePoint2d       m_basePoint;
+  OdGeVector2d      m_patternOffset;
+  OdGeDoubleArray   m_dashes;
+
+  OdHatchPatternLine()
+    : m_dLineAngle(0.0)
+  {
+  }
+  void transformBy(const OdGeMatrix2d& ocsXform)
+  {
+    m_basePoint.transformBy(ocsXform);
+    m_patternOffset.transformBy(ocsXform);
+
+    OdGeVector2d pO(OdGeVector2d::kXAxis);
+    pO.rotateBy(m_dLineAngle);
+    pO.transformBy(ocsXform);
+    m_dLineAngle = pO.angle();
+
+    OdGeDoubleArray::iterator pDash;
+    for(pDash = m_dashes.begin(); pDash != m_dashes.end(); ++ pDash)
+    {
+      (*pDash) *= pO.length();
+    }
+  }
+  void scale(double s)
+  {
+    m_patternOffset *= s;
+    for (unsigned  int j = 0; j < m_dashes.size(); ++j)
+      m_dashes[j] *= s;
+  }
+};
+
+/** \details
+  This template class is a specialization of the OdArray class for OdHatchPatternLine objects.
+*/
+typedef OdArray<OdHatchPatternLine> OdHatchPattern;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef OD_HATCHPATTERN_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPatternManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPatternManager.h
new file mode 100755
index 0000000..6655421
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/HatchPatternManager.h
@@ -0,0 +1,152 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef OD_DBHATCH_PATTERN_MANAGER
+#define OD_DBHATCH_PATTERN_MANAGER
+
+#include "OdString.h"
+#include "Ge/GePoint2d.h"
+#include "DbHatch.h"
+#include "Ge/GeDoubleArray.h"
+#include "StringArray.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+    This class manages hatch patterns within a Teigha application.
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class ODRX_ABSTRACT TOOLKIT_EXPORT OdHatchPatternManager : public OdRxObject
+{
+protected:
+  OdHatchPatternManager() {}
+public:
+  ODRX_DECLARE_MEMBERS(OdHatchPatternManager);
+
+  /** \details
+    Sets the Host Application Services object for this hatchPatternManager object.
+    \param pServices [in]  Pointer to the HostAppServices object.
+  */
+  virtual void setApplicationService(OdDbHostAppServices *pServices) = 0;
+
+  /** \details
+    Retrieves the specified hatch pattern from this hatchPatternManager object.
+    \param hatchPatternName [in]  Hatch pattern name.
+    \param hatchPatternType [in]  Hatch pattern type.
+    \param measurementValue [in]  Measurement value.  
+    \param hatchPattern [out]  Hatch pattern.
+    
+    \remarks
+    hatchPatternType must be one of the following:
+    
+    <table>
+    Name                        Value    Description
+    OdDbHatch::kUserDefined     0        User-defined hatch.
+    OdDbHatch::kPreDefined      1        Defined in acad.pat and acadiso.pat. 
+    OdDbHatch::kCustomDefined   2        In its own PAT file.
+    </table>
+    
+    measurementValue must be one of the following:
+
+    <table>
+    Name             Value
+    OdDb::kEnglish   0
+    OdDb::kMetric    1
+    </table>
+  */
+  virtual OdResult retrievePattern(OdDbHatch::HatchPatternType hatchPatternType, const OdString& hatchPatternName, 
+    OdDb::MeasurementValue measurementValue, OdHatchPattern& hatchPattern) = 0;
+
+  /** \details
+    Appends the specified hatch pattern to this hatchPatternManager object.
+
+    \param hatchPatternName [in]  Hatch pattern name.
+    \param hatchPatternType [in]  Hatch pattern type.
+    \param measurementValue [in]  Measurement value.  
+    \param hatchPattern [in]  Hatch pattern.
+    
+    \remarks
+    hatchPatternType must be one of the following:
+    
+    <table>
+    Name                        Value    Description
+    OdDbHatch::kUserDefined     0        User-defined hatch.
+    OdDbHatch::kPreDefined      1        Defined in acad.pat and acadiso.pat. 
+    OdDbHatch::kCustomDefined   2        In its own PAT file.
+    </table>
+    
+    measurementValue must be one of the following:
+
+    <table>
+    Name             Value
+    OdDb::kEnglish   0
+    OdDb::kMetric    1
+    </table>
+  */
+  virtual void appendPattern(OdDbHatch::HatchPatternType hatchPatternType, const OdString& hatchPatternName, 
+                             const OdHatchPattern& hatchPattern, OdDb::MeasurementValue measurementValue = OdDb::kEnglish) = 0;
+
+  /** \details
+    Retrieves names of loaded patterns.
+
+    \param hatchPatternType [in]  Hatch pattern type.
+    \param measurementValue [in]  Measurement value.  
+    \param patternNames [out]  Receive loaded pattern names.
+    
+    \remarks
+    hatchPatternType must be one of the following:
+    
+    <table>
+    Name                        Value    Description
+    OdDbHatch::kUserDefined     0        User-defined hatch.
+    OdDbHatch::kPreDefined      1        Defined in acad.pat and acadiso.pat. 
+    OdDbHatch::kCustomDefined   2        In its own PAT file.
+    </table>
+    
+    measurementValue must be one of the following:
+
+    <table>
+    Name             Value
+    OdDb::kEnglish   0
+    OdDb::kMetric    1
+    </table>
+  */
+  virtual OdResult retrievePatternList(OdDbHatch::HatchPatternType hatchPatternType, OdDb::MeasurementValue measurementValue,
+                                       OdStringArray& patternNames) = 0;
+
+  /** \details
+    Clears all loaded patterns.
+  */
+  virtual void reset() = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdHatchPatternManager object pointers.
+*/
+typedef OdSmartPtr<OdHatchPatternManager> OdHatchPatternManagerPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IdArrays.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IdArrays.h
new file mode 100755
index 0000000..adc182d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IdArrays.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _IDARRAY_H_
+#define _IDARRAY_H_
+
+#include "OdArray.h"
+#include "DbTypedId.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbSoftPointerId objects.
+*/
+typedef OdArray<OdDbSoftPointerId, OdMemoryAllocator<OdDbSoftPointerId> > OdSoftPtrIdArray;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbHardPointerId objects.
+*/
+typedef OdArray<OdDbHardPointerId, OdMemoryAllocator<OdDbHardPointerId> > OdHardPtrIdArray;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbSoftOwnershipId objects.
+*/
+typedef OdArray<OdDbSoftOwnershipId, OdMemoryAllocator<OdDbSoftOwnershipId> > OdSoftOwnIdArray;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbHardOwnershipId objects.
+*/
+typedef OdArray<OdDbHardOwnershipId, OdMemoryAllocator<OdDbHardOwnershipId> > OdHardOwnIdArray;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbObjectId objects.
+*/
+typedef OdArray<OdDbObjectId, OdMemoryAllocator<OdDbObjectId> > OdDbObjectIdArray;
+
+/** \details
+    This template class is a specialization of the OdArray class for OdDbTypedId objects.
+*/
+typedef OdArray<OdDbTypedId, OdMemoryAllocator<OdDbTypedId> > OdTypedIdsArray;
+
+
+#endif //_IDARRAY_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int16Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int16Array.h
new file mode 100755
index 0000000..32ea022
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int16Array.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODINT16ARRAY_INCLUDED
+#define ODINT16ARRAY_INCLUDED
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdInt16 objects.
+*/
+typedef OdArray<OdInt16, OdMemoryAllocator<OdInt16> > OdInt16Array;
+
+#endif // ODINT16ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int32Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int32Array.h
new file mode 100755
index 0000000..2c366a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int32Array.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODINT32ARRAY_INCLUDED
+#define ODINT32ARRAY_INCLUDED
+
+#include "OdArray.h"
+/** \details
+    This template class is a specialization of the OdArray class for OdInt32 objects.
+*/
+typedef OdArray<OdInt32, OdMemoryAllocator<OdInt32> > OdInt32Array;
+
+#endif // ODINT32ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64.h
new file mode 100755
index 0000000..ffb020b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64.h
@@ -0,0 +1,256 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _INC_ODAINT64_38FF72C90128_INCLUDED
+#define _INC_ODAINT64_38FF72C90128_INCLUDED
+
+#ifndef EMCC
+#error "If this code is used anywhere?"
+#endif
+
+#include "TD_PackPush.h"
+#include "OdHeap.h"
+
+/** \details
+    This class represents signed 64-bit integers.
+
+    <group Other_Classes>
+*/
+class OdInt64
+{
+public:
+  /** \details
+      to assign 0 or 1
+  */
+  
+  inline OdInt64& operator=(const OdInt64& n);
+  OdInt64& operator=(int n);
+  OdInt64() : low(0), hi(0) { }
+  OdInt64(int n) { hi = (n>=0 ? 0 : -1); low = n; }
+  OdInt64(const OdInt64& n) { *this = n; }
+  OdInt64& operator+=(const OdInt64& n);
+  inline OdInt64 operator+(const OdInt64& n) const {return (OdInt64(*this)+=n);}
+  inline OdInt64& operator-=(const OdInt64 n) { return (*this += -n); }
+  inline OdInt64 operator-(const OdInt64& n) const {return (OdInt64(*this)-=n);}
+  inline OdInt64 operator/(const OdInt32& n) const {return (OdInt64(*this)/=n);}
+  OdInt64& operator/=(const OdInt32& n);
+  OdUInt32 operator%(OdUInt32 n)const{return ((2<<31)%n*2*(hi%n)+(low%n))%n; }
+  inline OdInt64& operator++();
+  inline OdInt64 operator++(int /*dummy*/);
+  inline OdInt64& operator--();
+  inline bool operator>(const OdInt64& n) const;
+  inline bool operator<(const OdInt64& n) const;
+  inline bool operator>=(const OdInt64& n) const;
+  inline bool operator<=(const OdInt64& n) const;
+  inline bool operator!=(const OdInt64& n) const;
+  inline bool operator==(const OdInt64& n) const;
+
+  OdUInt32 operator & (OdUInt32 mask) const
+  { return low & mask;}
+
+  /** \details
+      to compare with 0 or 1
+  */
+  
+  inline bool operator!=(int n) const;
+  /** \details
+      to compare with 0 or 1
+  */
+  
+  inline bool operator==(int n) const;
+
+  bool operator>(int n) const { return operator>(OdInt64(n)); }
+  bool operator<(int n) const { return operator<(OdInt64(n)); }
+
+  inline OdInt64 operator-() const;
+  OdInt64& operator >>=(int n);
+  OdInt64& operator <<=(int n)
+  {
+    while(n--) { *this += *this; }
+    return *this;
+  }
+  OdInt64 operator >>(int n) const
+  {
+    OdInt64 res = *this;
+    return (res>>=n);
+  }
+  OdInt64 operator <<(int n) const
+  {
+    OdInt64 res = *this;
+    return (res<<=n);
+  }
+
+  OdInt64 operator | (const OdInt64& n)
+  {
+    OdInt64 res;
+    res.low = low | n.low;
+    res.hi = hi | n.hi;
+    return res;
+  }
+
+  OdInt64& operator |=(const OdInt64& n)
+  {
+    low |= n.low;
+    hi |= n.hi;
+    return *this;
+  }
+
+protected:
+#ifdef ODA_BIGENDIAN
+  OdInt32   hi;
+  OdUInt32  low;
+#else
+  OdUInt32  low;
+  OdInt32   hi;
+#endif
+};
+
+/** \details
+    This class represents unsigned 64-bit integers..
+
+    <group Other_Classes>
+*/
+class OdUInt64 : public OdInt64
+{
+public :
+  OdUInt64 () { }
+  OdUInt64 (int n) : OdInt64(n) { }
+  OdUInt64 (const OdInt64& n) : OdInt64(n) { }
+  OdUInt64 (const OdUInt64& n) : OdInt64(n) { }
+
+  bool operator > (const OdUInt64& n) const
+  {
+    if (hi == n.hi)
+      return low > n.low;
+    // else
+    return OdUInt32(hi) > OdUInt32(n.hi);
+  }
+  bool operator < (const OdUInt64& n) const
+  {
+    return (!operator>(n) && operator!=(n));
+  }
+  bool operator>(int n) const { return operator>(OdUInt64(n)); }
+  bool operator<(int n) const { return operator<(OdUInt64(n)); }
+
+  OdUInt64 operator >>(int n) const
+  {
+    OdUInt64 res = *this;
+    return (res>>=n);
+  }
+  OdUInt64& operator >>= (int n);
+};
+
+//----------------------------------------------------------
+//
+// OdInt64 inline methods
+//
+//----------------------------------------------------------
+inline OdInt64& OdInt64::operator=(int n)
+{
+  hi = (n>=0 ? 0 : -1);
+  low = OdUInt32(n);
+  return *this;
+}
+
+inline OdInt64& OdInt64::operator++()
+{
+  return (*this += 1);
+}
+
+inline OdInt64 OdInt64::operator++(int /*dummy*/)
+{
+  OdInt64 t = *this;
+  *this += 1;
+  return t;
+}
+
+inline OdInt64& OdInt64::operator--()
+{
+  return (*this += -1);
+}
+
+inline bool OdInt64::operator > (const OdInt64& n) const
+{
+  if (hi == n.hi)
+    return low > n.low;
+  /** \details
+      else
+  */
+  return hi > n.hi;
+}
+
+inline bool OdInt64::operator < (const OdInt64& n) const
+{
+  return (!operator>(n) && operator!=(n));
+}
+
+inline bool OdInt64::operator >= (const OdInt64& n) const
+{
+  return (operator>(n) || operator==(n));
+}
+
+inline bool OdInt64::operator <= (const OdInt64& n) const
+{
+  return (operator<(n) || operator==(n));
+}
+
+inline bool OdInt64::operator!=(int n) const
+{
+  return (!operator==(n));
+}
+
+inline bool OdInt64::operator!=(const OdInt64& n) const
+{
+  return (hi != n.hi || low != n.low);
+}
+
+inline bool OdInt64::operator==(int n) const
+{
+  return (hi == (n >= 0 ? 0 : -1) && low == OdUInt32(n));
+}
+
+inline bool OdInt64::operator==(const OdInt64& n) const
+{
+  return (hi == n.hi && low == n.low);
+}
+
+inline OdInt64 OdInt64::operator-() const
+{
+  OdInt64 res;
+  res.hi = ~hi; res.low =~low;
+  return (res += 1);
+}
+
+inline OdInt64& OdInt64::operator=(const OdInt64& n)
+{
+  low = n.low;
+  hi = n.hi;
+  return *this;
+}
+
+#include "TD_PackPop.h"
+
+#endif /* _INC_ODAINT64_38FF72C90128_INCLUDED */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64Array.h
new file mode 100755
index 0000000..5effda7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int64Array.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODINT64ARRAY_INCLUDED
+#define ODINT64ARRAY_INCLUDED
+
+#include "OdArray.h"
+/** \details
+    This template class is a specialization of the OdArray class for OdInt64 objects.
+*/
+typedef OdArray<OdInt64, OdMemoryAllocator<OdInt64> > OdInt64Array;
+
+#endif // ODINT64ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int8Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int8Array.h
new file mode 100755
index 0000000..c70fef8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Int8Array.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODINT8ARRAY_INCLUDED
+#define ODINT8ARRAY_INCLUDED
+
+#include "OdArray.h"
+/** \details
+    This template class is a specialization of the OdArray class for OdInt8 objects.
+*/
+typedef OdArray<OdInt8, OdMemoryAllocator<OdInt8> > OdInt8Array;
+
+#endif // ODINT8ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IntArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IntArray.h
new file mode 100755
index 0000000..a9f2880
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/IntArray.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_INTARRAY_H
+#define OD_INTARRAY_H
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for int objects.
+*/
+typedef OdArray<int, OdMemoryAllocator<int> > OdIntArray;
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LoadReasons.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LoadReasons.h
new file mode 100755
index 0000000..faf8e85
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LoadReasons.h
@@ -0,0 +1,52 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// DynamicLinker.h: interface for the OdaDynamicLinkerI class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_ODAAPP_LOADREASONS_H_INCLUDED_)
+#define _ODAAPP_LOADREASONS_H_INCLUDED_
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdaApp
+{
+  enum LoadReasons
+  {
+    kOnProxyDetection       = 0x01,
+    kOnTeighaStartup     = 0x02,
+    kOnCommandInvocation    = 0x04,
+    kOnLoadRequest          = 0x08,
+    kLoadDisabled           = 0x10,
+    kTransparentlyLoadable  = 0x20
+  };
+};
+
+#endif // !defined(_ODAAPP_LOADREASONS_H_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LyLayerFilter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LyLayerFilter.h
new file mode 100755
index 0000000..986ea15
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/LyLayerFilter.h
@@ -0,0 +1,376 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _OD_LY_H
+#define _OD_LY_H
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "OdArray.h"
+#include "DbObjectId.h"
+#include "IdArrays.h"
+
+
+class OdLyLayerFilter;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdLyLayerFilter object pointers.
+*/
+typedef OdSmartPtr<OdLyLayerFilter> OdLyLayerFilterPtr;
+/** \details
+  This template class is a specialization of the OdArray class for OdLyLayerFilter object pointers.
+*/
+typedef OdArray<OdLyLayerFilterPtr> OdLyLayerFilterArray;
+
+class OdDbLayerTableRecord;
+class OdDbDxfFiler;
+class OdLySystemInternals;
+
+/** \details
+            
+    Library: TD_Db
+
+    <group OdLy_Classes> 
+*/
+class OdLyRelExpr
+{
+public:
+    virtual ~OdLyRelExpr() {}
+    virtual const OdString& getConstant() const = 0;
+    virtual const OdString& getVariable() const = 0;
+protected:
+    OdLyRelExpr() {}
+};
+
+/** \details
+            
+    Library: TD_Db
+
+    <group OdLy_Classes> 
+*/
+class OdLyAndExpr
+{
+public:
+    virtual ~OdLyAndExpr() {}
+    virtual const OdArray<OdLyRelExpr*>& getRelExprs() const = 0;
+protected:
+    OdLyAndExpr() {}
+};
+
+/** \details
+            
+    Library: TD_Db
+
+    <group OdLy_Classes> 
+*/
+class OdLyBoolExpr
+{
+public:
+    virtual ~OdLyBoolExpr() {}
+    virtual const OdArray<OdLyAndExpr*>& getAndExprs() const = 0;
+protected:
+    OdLyBoolExpr() {}
+};
+
+/** \details
+    This class implements LayerFilter objects. 
+
+    \remarks
+    This class allows the client to specify, retrieve, and nest and unnest LayerFilters,
+    and to determine if a layer is visible with for LayerFilter object.
+    
+    All Layer Filters implement this interface.
+    \sa
+    TD_Db
+    <group OdLy_Classes> 
+*/
+class TOOLKIT_EXPORT OdLyLayerFilter : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdLyLayerFilter);
+  OdLyLayerFilter();
+  virtual ~OdLyLayerFilter();
+  
+  /** \details
+    Returns the name of this LayerFilter object.
+  */
+  virtual const OdString& name() const;
+  
+  /** \details
+    Sets the name of this LayerFilter object.
+    \param name [in]  Name.
+    
+    \remarks
+    Returns true if and only if successful.
+
+    Some LayerFilter objects do not allow renamimg; e.g., "All", "Xref".
+
+  */
+  virtual bool setName(
+    const OdString& name);
+    
+  /** \details
+    Returns true if and only if this LayerFilter object can be renamed.
+
+    \remarks
+    Some LayerFilter objects do not allow renamimg; e.g., "All", "Xref".
+  */
+  virtual bool allowRename() const;
+
+  /** \details
+    Returns the parent LayerFilter of this LayerFilter object.
+
+    \remarks
+    All LayerFilter objects, except the top level, "ALL", have parents.
+  */
+  virtual OdLyLayerFilter* parent() const;
+  
+  /** \details
+    Returns the nested LayerFilters of this LayerFilter object.
+  */
+  virtual const OdLyLayerFilterArray& getNestedFilters() const;
+
+  /** \details
+    Adds the specified LayerFilter as a nested LayerFilter to this LayerFilter object.
+    \param pLayerFilter [in]  Pointer to the LayerFilter to nest.
+  */
+  virtual void addNested(
+    OdLyLayerFilter* pLayerFilter);
+    
+  /** \details
+    Removes the specified LayerFilter as a nested LayerFilter of this LayerFilter object.
+    \param pLayerFilter [in]  Pointer to the LayerFilter to remove.
+  */
+  virtual void removeNested(
+    OdLyLayerFilter* pLayerFilter);
+  
+  /** \details
+    Notification function called after a LayerFilter is loaded.
+    
+    \remarks
+    This is an opportunity for a LayerFilter to automatically generate its nested filters.
+  */
+  virtual OdResult generateNested();
+  
+  
+  /** \details
+    Returns true if and only if this LayerFilter was dynamically generated.
+    
+    \remarks
+    True indicates that this LayerFilter should not be persisted.
+  */
+  virtual bool dynamicallyGenerated() const;
+  
+  /** \details
+    Returns true if and only if this LayerFilter allows nested LayerFilters.
+  */
+  virtual bool allowNested() const;
+  
+  /** \details
+    Returns true if and only if this LayerFilter can be deleted.
+  */
+  virtual bool allowDelete() const;
+  
+  /** \details
+    Returns true if and only if this LayerFilter is a proxy LayerFilter.
+  */
+  virtual bool isProxy() const;
+  
+  /** \details
+    Returns true if and only if this LayerFilter filters for the Object ID of a LayerTableRecord.
+    
+    \remarks
+    These filters are known as LayerGroups.
+  */
+  virtual bool isIdFilter() const;
+  
+  /** \details
+    Returns true if and only if the specified layer is visible with this LayerFilter object.
+    \param layer [in]  Layer.
+  */
+  virtual bool filter(
+    OdDbLayerTableRecord* layer) const;
+  
+  /** \details
+    Returns the filter expression for this LayerFilter object.
+    
+    BNF for the valid boolean expression:
+    <bool_expr>::= <bool_expr> or <and_expr> | <and_expr>
+    <and_expr>::=<and_expr> and <rel_expr> | <rel_expr>
+    <rel_expr>::=<variable><rel_op><constant> 
+    <rel_op>::= == | !=
+    <constant>::=A-Z0-9*?~@.,-
+    <variable>::=#A-Z0-9
+
+    Supported variables are:
+
+    NAME
+    LOCKED
+    PLOTTABLE
+    LINETYPE
+    LINEWEIGHT
+    COLOR
+    OFF
+    FROZEN
+    PLOTSTYLENAME
+    NEWVPFROZEN
+    VP
+    VPFROZEN
+    VPCOLOR
+    VPLINETYPE
+    VPLINEWEIGHT
+  */
+  virtual const OdString& filterExpression() const;
+
+  /** \details
+    Returns the filter expression for this LayerFilter object.
+  */
+  const OdLyBoolExpr* filterExpressionTree() const;
+  
+  /** \details
+    Sets the filter expression for this LayerFilter object.
+    \param filterExpression [in]  Filter expression.
+  */
+  virtual OdResult setFilterExpression(
+     const OdString& filterExpression );
+  
+  
+  /** \details
+    Returns true if and only if this LayerFilter object and the specified LayerFilter
+    object allow the same layers.
+    \param pOther [in]  Pointer to the other LayerFilter.
+  */
+  virtual bool compareTo(
+    const OdLyLayerFilter* pOther) const;
+  
+  /** \details
+    Reads the DXF format data of this object from the specified filter.
+    \param pFiler [in]  Pointer to the filer from which data are to be read.
+  */
+  virtual OdResult readFrom(
+    OdDbDxfFiler* pFiler);
+    
+  /** \details
+    Writes the DXF format data of this object to the specified filter.
+    \param pFiler [in]  Pointer to the filer to which data are to be written.
+  */
+  virtual void writeTo(
+    OdDbDxfFiler* pFiler) const;
+  
+private:
+  void* m_pImpl;
+  friend class OdLySystemInternals;
+  
+protected:
+  OdLyLayerFilter( OdLySystemInternals* );
+};
+
+
+/** \details
+    This class implements LayerGroup objects. 
+
+    \remarks
+    This class allows the client to specify, retrieve, and group and ungroup layers,
+    and to determine if a layer is grouped within a LayerGroup object.
+
+    \sa
+    TD_Db
+    <group OdLy_Classes> 
+*/
+class TOOLKIT_EXPORT OdLyLayerGroup : public OdLyLayerFilter
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdLyLayerGroup);
+  OdLyLayerGroup();
+  
+  /** \details
+    Adds the specified layer to this LayerGroup object.
+    \param layerId [in]  Object ID of the OdDbLayerTableRecord.
+  */
+  virtual void addLayerId(
+    const OdDbObjectId& layerId);
+    
+  /** \details
+    Removes the specified layer to this LayerGroup object.
+    \param layerId [in]  Object ID of the OdDbLayerTableRecord.
+  */
+  virtual void removeLayerId (
+    const OdDbObjectId& layerId);
+  
+  /** \details
+    Returns the LayerTableRecord Object IDs in this LayerGroup object.
+  */
+  virtual const OdDbObjectIdArray& layerIds() const;
+  
+protected:
+  OdLyLayerGroup( OdLySystemInternals* );
+};
+
+typedef OdSmartPtr<OdLyLayerGroup> OdLyLayerGroupPtr;
+
+/** \details
+    This class simplifies accessing LayerFilter objects in the LayerTable extension dictionary.
+    \sa
+    TD_Db
+    <group OdLy_Classes> 
+*/
+class OdLyLayerFilterManager : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdLyLayerFilterManager);
+  /** \details
+    Returns the root and current filters from the database containing this LayerFilterManager object.
+    \param pRoot [out]  Receives a SmartPointer to the root filter.
+    \param pCurrent [out]  Receives a SmartPointer to the filter current when setFilters() was last called.  
+  */
+  virtual OdResult getFilters(
+    OdLyLayerFilterPtr& pRoot, 
+    OdLyLayerFilterPtr& pCurrent ) = 0;
+  
+  /** \details
+    Writes the filter tree and current filters to the database containing this LayerFilterManager object.
+    \param pRoot [in]  Pointer to the root filter.
+    \param pCurrent [in]  Pointer to the current filter to be persisted.  
+  */
+  virtual void setFilters(
+    const OdLyLayerFilterPtr pRoot, 
+    const OdLyLayerFilterPtr pCurrent ) = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdLyLayerFilterManager object pointers.
+*/
+typedef OdSmartPtr<OdLyLayerFilterManager> OdLyLayerFilterManagerPtr;
+
+/** \details
+  Returns a LayerFilterManager object for the specified database.
+  \param pDb [in]  Pointer to the database.
+*/
+TOOLKIT_EXPORT OdLyLayerFilterManagerPtr odlyGetLayerFilterManager(
+  OdDbDatabase* pDb );
+
+#include "TD_PackPop.h"
+
+#endif  // _OD_LY_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MaterialResolver.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MaterialResolver.h
new file mode 100755
index 0000000..61374ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MaterialResolver.h
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_MATERIALRESOLVER_INCLUDED_
+#define _OD_MATERIALRESOLVER_INCLUDED_
+
+#include "TD_PackPush.h"
+
+class OdDbObjectId;
+
+/** <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdMaterialResolver
+{
+public:
+  virtual OdResult resolveMaterial(OdUInt64 materialId, OdDbObjectId &objectId) const = 0;
+  virtual ~OdMaterialResolver() {};
+};
+
+#include "TD_PackPop.h"
+
+#endif // _OD_MATERIALRESOLVER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemFileStreamImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemFileStreamImpl.h
new file mode 100755
index 0000000..0fc7a6a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemFileStreamImpl.h
@@ -0,0 +1,948 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// MemFileStreamImpl.h : implementation for the OdMemFileStreamImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_MEMORYFILESTREAMIMPL_H_INCLUDED_)
+#define _MEMORYFILESTREAMIMPL_H_INCLUDED_
+
+#include "RxObjectImpl.h"
+#include "MemoryStream.h"
+#include "OdAlloc.h"
+
+#ifdef OD_HAVE_UNISTD_FILE
+#include <unistd.h>
+#endif
+
+#ifdef OD_HAVE_WINDOWS_STORAGE_FILE
+#include <windows.storage.h>
+#endif
+
+#ifdef OD_HAVE_WRL_FILE
+#include <wrl/client.h>
+#include <wrl/wrappers/corewrappers.h>
+#endif
+
+//DD:EXPORT_ON
+
+/** \details
+    <group TD_Namespaces>
+*/
+namespace TmpFileHelper
+{
+#define TEMPFILE_PREFIX  "tx$"
+
+  /** \details
+    Returns the temporary file name.
+  */
+  static OdString getTempFile(OdDbBaseHostAppServices* pHostAppServices, const OdAnsiString& prefix = TEMPFILE_PREFIX)
+  {
+    OdString tmpDir = pHostAppServices->getTempPath();
+#if defined(_WINRT)
+    GUID result;
+    if (CoCreateGuid(&result) < 0) 
+        return OdString::kEmpty;
+    tmpDir = tmpDir.format(L"%ls%llx%x%x.tmp", tmpDir.c_str(), result.Data1, result.Data2, result.Data3);
+
+#elif defined(_WIN32)  // Win 32 + 64 bit
+    OdChar tmpFile[MAX_PATH];
+    ::GetTempFileName(tmpDir.c_str(), !prefix.isEmpty() ? OdString(prefix).c_str() : L"tmp", 0, tmpFile);
+    if (odStrLen(tmpFile))
+      tmpDir = OdString(tmpFile, (int)odStrLen(tmpFile));
+#else
+    char tmpFile[4096];  // sufficient for Win, Linux, Mac
+    tmpFile[0] = 0;
+
+    OdAnsiCharArray dstBuf;
+    int lenStr = tmpDir.getLength();
+    dstBuf.reserve(lenStr * 4); // UTF-8 can use up to 4 bytes per character
+    OdCharMapper::unicodeToUtf8(tmpDir.c_str(), lenStr, dstBuf);
+    strcat(tmpFile, (const char*)dstBuf.asArrayPtr());
+    
+    strcat(tmpFile, !prefix.isEmpty() ? prefix.c_str() : "tmp");
+#ifdef OD_HAVE_MKSTEMPS_FUNC
+    strcat(tmpFile, "XXXXXX.tmp");
+    int fileDescriptor = mkstemps(tmpFile, 4);
+#else
+    strcat(tmpFile, "XXXXXX");
+    int fileDescriptor = mkstemp(tmpFile);
+#endif
+    if (fileDescriptor == -1)
+    {
+      tmpFile[0] = 0;
+    }
+    else
+      close(fileDescriptor);
+    // Convert Utf8 back to Unicode
+    OdAnsiString ansiTmpFile(tmpFile);
+    OdCharArray buf;
+    OdCharMapper::utf8ToUnicode(ansiTmpFile.c_str(), ansiTmpFile.getLength(), buf);
+    tmpDir = OdString(buf.getPtr(), buf.size() - 1);
+#endif
+    return tmpDir;
+  }
+
+} // namespace
+
+/*
+same as OdMemoryStreamImpl, except that it uses a much larger PageSize, and a filled page
+is swapped to an automatically created + associated temporary disk file;
+the page data is then deleted, and if accessed, swapped-in from file again before accessing;
+the PAGE's size should be at least 512 kB
+*/
+
+/** \details
+  <group Other_Classes>
+
+  Declares the page data.
+*/
+class PAGE
+{
+public:
+  PAGE*    m_pNextPage;
+  PAGE*    m_pPrevPage;
+  OdUInt64 m_nPageStartAddr;
+  OdUInt8* m_data;
+  bool     m_modified;
+  bool     m_savedToFile;
+  OdUInt64 m_nFilePos;
+};
+
+/** \details
+
+<group Other_Classes>
+*/
+class OdMemFileStreamDummyBase { };
+
+
+/** \details
+  <group Other_Classes>
+
+  This class defines the interface for paged-memory file I/O objects.
+*/
+template <class TBase = OdMemFileStreamDummyBase>
+class OdMemFileStreamImpl : public TBase
+{
+  friend class OdMemoryStream;   
+
+  OdUInt64  m_numPages;
+  PAGE*     m_pFirstPage;
+  PAGE*     m_pCurrPage;
+  PAGE*     m_pLastPage;
+
+  /** \details
+    <group Other_Classes>
+
+     Helper class to swap in/out a PAGE from/to disk file.
+  */
+  class PageSwitcher
+  {
+    // the *singleton* data buffer
+
+    OdArray<OdUInt8, OdMemoryAllocator<OdUInt8> >  m_dataBuffer;
+    PAGE*          m_activePage;   
+    OdString   m_sTmpFileName;
+    OdStreamBufPtr m_pTmpFile;
+    OdDbBaseHostAppServices* m_pHostAppServices;
+
+    /** \details
+      Releases the disk file. 
+    */
+    bool releaseDiskFile(bool deleteIt)
+    {
+      m_pTmpFile = NULL;
+      if (deleteIt && !m_sTmpFileName.isEmpty())
+        remove(m_sTmpFileName);
+      m_sTmpFileName.empty();
+      m_activePage = 0;
+      return true;
+    };
+
+  public:
+    /** \details
+      Constructor creates the empty page switcher.
+    */
+    PageSwitcher()
+      : m_activePage(NULL)
+    {
+    };
+
+    /** \details
+      Destructor deletes the buffer for page data and releases the disk file.
+    */
+    ~PageSwitcher()
+    {
+      setBufferSize(0);
+      releaseDiskFile(true);
+    };
+
+    void setAppServices(OdDbBaseHostAppServices* pHostAppServices)
+    {
+      m_pHostAppServices = pHostAppServices;
+    }
+
+    /** \details
+      Sets the buffer size for storing page data. 
+
+      \param pageSize [in]  page size.
+    */
+    inline void  setBufferSize(OdUInt32 pageSize) { m_dataBuffer.resize(pageSize); };
+
+    /** \details
+      Returns the page data as an array of 8-bit codes.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    inline OdUInt8*  dataBuffer(PAGE* pPage) { return m_dataBuffer.asArrayPtr();};
+
+    /** \details
+      Returns the size of the page data.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    inline OdUInt32  dataSize(PAGE* pPage)   { return m_dataBuffer.length(); };
+
+    /** \details
+      Returns the current active page data. 
+    */
+    inline PAGE* activePage() const { return m_activePage; };
+
+    /** \details
+      Makes the page data as active.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    inline void  setActivePage(PAGE* pPage) { m_activePage = pPage; };
+
+    /** \details
+      Checks whether the page data is current and active, and returns True if the page data 
+      is active or False if the page data is inactive.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    inline bool  isActivePage(PAGE* pPage) const { return (pPage == m_activePage); };
+
+    /** \details
+      Checks whether the page data is modified, and returns True if the page data 
+      is modified or False if the page data is not changed.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    inline bool  isModified(PAGE* pPage) const { return pPage->m_modified; };
+
+    /** \details
+      Marks the page data as modified.
+
+      \param pPage [in]  pointer to the page data.
+      \param modified [in]  True if the page data is modified, False if the page data is not changed.
+    */
+    inline void  setModified(PAGE* pPage, bool modified) { pPage->m_modified = modified; };
+
+    /** \details
+      Checks whether the page data is saved, and returns True if the page data 
+      is saved or False if the page data is unsaved.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    inline bool  isSaved(PAGE* pPage) const { return pPage->m_savedToFile; };
+
+    /** \details
+      Marks the page data as saved.
+
+      \param pPage [in]  pointer to the page data.
+      \param saved [in]  True if the page data is saved, False if the page data is unsaved.
+    */
+    inline void  setSaved(PAGE* pPage, bool saved) { pPage->m_savedToFile = saved; };
+
+    /** \details
+      Returns the file position of the page data.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    inline OdUInt64 filePosition(PAGE* pPage) const { return pPage->m_nFilePos; };
+
+    /** \details
+      Sets the file position of the page data.
+
+      \param pPage [in]  pointer to the page data.
+      \param seekPos [in]  position in the file.
+    */
+    inline void  setFilePosition(PAGE* pPage, OdUInt64 seekPos) { pPage->m_nFilePos = seekPos; };
+
+    /** \details
+      Initializes the page data.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    void initializePage(PAGE* pPage)
+    {
+      ODA_ASSERT(pPage);
+      pPage->m_pPrevPage = 0;
+      pPage->m_pNextPage = 0;
+      pPage->m_data = dataBuffer(pPage);
+      setModified(pPage, false);
+      setSaved(pPage, false);
+      setFilePosition(pPage, 0);
+    };
+
+    /** \details
+      Gets the temporary disk file as a stream. 
+    */
+    OdStreamBufPtr& diskFile()
+    {
+      if (!m_pTmpFile.isNull())
+        return m_pTmpFile;
+
+      // determine temporary filename
+      if (m_pHostAppServices)
+      {
+        m_sTmpFileName = TmpFileHelper::getTempFile(m_pHostAppServices);
+        m_pTmpFile = odrxSystemServices()->createFile(m_sTmpFileName,
+          (Oda::FileAccessMode)(Oda::kFileRead | Oda::kFileWrite),
+          Oda::kShareDenyReadWrite,
+          Oda::kCreateAlways);
+        ODA_ASSERT(!m_pTmpFile.isNull());
+        return m_pTmpFile;
+      } 
+      else
+        throw OdError(eNullObjectPointer);
+    };
+
+    /** \details
+      Saves the specified page data in the disk file and marks it as saved.
+      Returns True if saving is successful.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    bool savePage(PAGE* pPage)
+    {
+      if (pPage && isSaved(pPage) && !isModified(pPage)) // no need to save here
+        return true;
+
+      if (!pPage || diskFile().isNull())
+        return false;
+
+      if (isSaved(pPage))
+      {
+        diskFile()->seek(filePosition(pPage), OdDb::kSeekFromStart);
+      }
+      else
+      {
+        diskFile()->seek(0, OdDb::kSeekFromEnd);
+        setFilePosition(pPage, diskFile()->tell());
+      }
+      diskFile()->putBytes(dataBuffer(pPage), dataSize(pPage));
+
+      setModified(pPage, false);
+      setSaved(pPage, true);
+      return true;
+    };
+
+    /** \details
+      Loads the specified page data from the disk file and makes it active. 
+      Returns True if loading is successful.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    bool loadPage(PAGE* pPage)
+    {
+      if (!pPage)
+        return false;
+      if (isActivePage(pPage) && !isModified(pPage)) // no need to (re-)load here
+        return true;
+
+      if (isSaved(pPage) && !diskFile().isNull())
+      {
+        diskFile()->seek(filePosition(pPage), OdDb::kSeekFromStart);
+        diskFile()->getBytes(dataBuffer(pPage), dataSize(pPage));
+      }
+
+      setModified(pPage, false);
+      setActivePage(pPage);
+      return true;
+    };
+
+    /** \details
+      Checks whether the page data can be ensured. 
+
+      \param pPage [in]  pointer to the page data.
+    */
+    bool ensurePage(PAGE* pPage)
+    {
+      ODA_ASSERT(pPage);
+      return isActivePage(pPage) ? true : switchToPage(pPage);
+    };
+
+    /** \details
+      Switches to the page data. If the specified page data is not active, the 
+      method saves the current active page data and loads the specified page data.
+      Returns True if the page data is loaded successfully or is active.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    bool switchToPage(PAGE* pPage)
+    {
+      ODA_ASSERT(pPage);
+      if (isActivePage(pPage))
+        return true;
+      savePage(activePage());
+      return loadPage(pPage);
+    };
+
+    /** \details
+      Rewinds the page data.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    bool rewind(PAGE* pPage)
+    {
+      ODA_ASSERT(pPage);
+      // 'pPage' is loaded at next read/write access
+      return isActivePage(pPage) ? true : savePage(activePage());
+    }
+
+    /** \details
+      Truncates the page data.
+
+      \param pPage [in]  pointer to the page data.
+    */
+    bool truncate(PAGE* pPage)
+    {
+      ODA_ASSERT(pPage);
+      bool wasSaved = isSaved(pPage);
+      setModified(pPage, false);
+      setSaved(pPage, false);
+      if (!wasSaved || diskFile().isNull())
+      {
+        return true;
+      }
+
+      diskFile()->seek(filePosition(pPage), OdDb::kSeekFromStart);
+      diskFile()->truncate();
+      return true;
+    };
+  }; // class PageSwitcher
+
+  PageSwitcher m_pageSwitcher;
+
+  /** \details
+    Copies the file stream.
+  */
+  OdMemFileStreamImpl& operator= (const OdMemFileStreamImpl&) {return *this;}
+
+protected:
+  OdUInt64  m_nCurPos;
+  OdUInt64  m_nEndPos;
+  OdUInt32  m_nPageDataSize;
+
+  /** \details
+    Returns the page switcher.
+  */
+  inline PageSwitcher& pageSwitcher() { return m_pageSwitcher; };
+
+  /** \details
+    Returns the allocated memory size for all pages.
+  */
+  inline OdUInt64 allocated() const { return m_numPages * m_nPageDataSize; }
+  inline OdUInt64 curPageNo() const { return (m_nCurPos / m_nPageDataSize); }
+  inline OdUInt32 posInCurPage() const { return OdUInt32(m_nCurPos % m_nPageDataSize); }
+  inline OdUInt32 leftInCurPage() const { return (m_pCurrPage ? m_nPageDataSize - posInCurPage() : 0); }
+
+  /** \details
+    Adds new page data.
+  */
+  void addPage();
+
+  /** \details
+    Finds the next page data.
+  */
+  void seekNextPage(bool bCreateNew = false);
+
+  /** \details
+    Finds the previous page data.
+  */
+  inline void seekPrevPage()
+  {
+    if(m_pCurrPage->m_pPrevPage)
+    {
+      m_nCurPos -= posInCurPage();
+      m_nCurPos -= m_nPageDataSize;
+      m_pCurrPage = m_pCurrPage->m_pPrevPage;
+      pageSwitcher().switchToPage(m_pCurrPage);
+    }
+    else
+      throw OdError(eEndOfFile);
+  }
+
+  inline OdUInt8* currPos() { return m_pCurrPage->m_data + posInCurPage(); }
+  inline const OdUInt8* currPos() const { return m_pCurrPage->m_data + posInCurPage(); }
+
+public:
+  OdMemFileStreamImpl(OdUInt32 nPageDataSize = 0x00200000) // 2MB
+    : m_numPages(0)
+    , m_pFirstPage(0)
+    , m_pCurrPage(0)
+    , m_pLastPage(0)
+    , m_nCurPos(0)
+    , m_nEndPos(0)
+    , m_nPageDataSize(0)
+  {
+    setPageDataSize(nPageDataSize);
+    setAppServices(0);
+  }
+
+  void setAppServices(OdDbBaseHostAppServices* pHostAppServices)
+  {
+    pageSwitcher().setAppServices(pHostAppServices);
+  }
+
+  /** \details
+    Returns the page data size.
+  */
+  OdUInt32 pageDataSize() const { return m_nPageDataSize; }
+
+  /** \details
+    Sets the page data size and buffer size for page switcher.
+
+    \param nPageSize [in]  page data size.
+  */
+  void setPageDataSize(OdUInt32 nPageSize)
+  {
+    m_nPageDataSize = nPageSize;
+    pageSwitcher().setBufferSize(nPageSize);
+  }
+
+  /** \details
+    Reserves the specified number of bytes for the file memory stream object.
+  */
+  void reserve(OdUInt64 nSize)
+  {
+    while(nSize > allocated())
+      addPage();
+  }
+
+  /** \details
+    Returns the length in bytes of the file associated with this stream object.
+  */
+  OdUInt64 length() 
+  {
+    return m_nEndPos; 
+  }
+
+  /** \details
+    Moves the current position of the file pointer for this stream object to the specified location.
+
+    \param offset [in]  number of bytes
+    \param seekType [in]  seek type
+  */
+  OdUInt64 seek(OdInt64 offset, OdDb::FilerSeekType whence);
+
+  /** \details
+    Returns the current position of the file pointer for this stream object.
+  */
+  OdUInt64 tell()
+  {
+    return m_nCurPos;
+  }
+
+  /** \details
+    Checks whether the file pointer has reached the end of a file, and returns True if the  
+    current position for this stream object is at the end of file.
+  */
+  bool isEof()
+  {
+    return (m_nCurPos>=m_nEndPos);
+  }
+
+  /** \details
+    Returns the byte at the current position of the file pointer for this stream object and 
+    increments the pointer.
+  */
+  OdUInt8 getByte();
+
+  /** \details
+    Returns the specified number of bytes, starting at the current position of the file pointer 
+    for this stream object, and increments the pointer on the specified number of bytes.
+
+    \param buffer [in]  pointer to the character buffer
+    \param nLen [in]  number of bytes
+  */
+  void getBytes(void* buffer, OdUInt32 nLen);
+
+  /** \details
+    Writes the byte to the current position of the file pointer for this stream object, and 
+    increments the pointer.
+
+    \param val [in]  byte to be wrote
+  */
+  void putByte(OdUInt8 val);
+
+  /** \details
+    Writes the specified number of bytes, starting at the current position of the file pointer 
+    for this stream object, and increments the pointer on the specified number of bytes.
+
+    \param buffer [in]  pointer to the character buffer
+    \param nLen [in]  number of bytes
+  */
+  void putBytes(const void* buffer, OdUInt32 nLen);
+
+  //void copyDataTo(TBase* pDest, OdUInt32 nSrcStart = 0, OdUInt32 nSrcEnd = 0)
+  //{
+  //  TBase::copyDataTo(pDest, nSrcStart, nSrcEnd);
+  //}
+
+  /** \details
+    Sets the current position of the file pointer for this stream object to zero.
+  */
+  void rewind()
+  {
+    m_nCurPos = 0;
+    m_pCurrPage = m_pFirstPage;
+    if(m_pCurrPage)
+    {
+      pageSwitcher().rewind(m_pCurrPage);
+    }
+  }
+
+  /** \details
+    Sets the length of the file associated with this stream object to zero.
+  */
+  void truncate()
+  {
+    if(m_pCurrPage)
+    {
+      pageSwitcher().truncate(m_pCurrPage);
+      PAGE* pNext, *pCurr = m_pCurrPage->m_pNextPage;
+      m_pCurrPage->m_pNextPage = 0;
+      m_pLastPage = m_pCurrPage;
+      m_nEndPos = m_nCurPos;
+      while(pCurr)
+      {
+        pNext = pCurr->m_pNextPage;
+        pCurr->m_data = 0;
+        if (pageSwitcher().activePage() == pCurr)
+        {
+          pageSwitcher().setActivePage(0);
+        }
+        ::odrxFree(pCurr);
+        --m_numPages;
+        pCurr = pNext;
+      }
+    }
+  }
+
+  /** \details
+    Destructor deletes stream object.
+  */
+  ~OdMemFileStreamImpl();
+};
+
+////////////////////////////////////////////////////////
+
+template <class TBase>
+OdMemFileStreamImpl<TBase>::~OdMemFileStreamImpl()
+{
+  PAGE* pNext, *pCurr = m_pFirstPage;
+  while(pCurr)
+  {
+    pNext = pCurr->m_pNextPage;
+    pCurr->m_data = 0;
+    if (pageSwitcher().activePage() == pCurr)
+    {
+      int t=0;
+    }
+    ::odrxFree(pCurr);
+    pCurr = pNext;
+  }
+  m_pFirstPage = 0;
+}
+
+template <class TBase>
+void OdMemFileStreamImpl<TBase>::addPage()
+{
+  PAGE* pPage = (PAGE*)::odrxAlloc(sizeof(PAGE));
+  if (!pPage)
+    throw OdError(eOutOfMemory);
+
+  pageSwitcher().initializePage(pPage);
+
+  pPage->m_pPrevPage = m_pLastPage;
+  if(m_pLastPage)
+  {
+    m_pLastPage->m_pNextPage = pPage;
+    if(!m_pCurrPage)
+    {
+      m_pCurrPage = pPage;
+      pageSwitcher().switchToPage(m_pCurrPage);
+    }
+    pPage->m_nPageStartAddr = pPage->m_pPrevPage->m_nPageStartAddr + m_nPageDataSize;
+  }
+  else
+  {
+    m_pFirstPage = m_pCurrPage = pPage;
+    pPage->m_nPageStartAddr = 0;
+    pageSwitcher().switchToPage(m_pCurrPage);
+  }
+  m_pLastPage = pPage;
+  ++m_numPages;
+}
+
+template <class TBase>
+void OdMemFileStreamImpl<TBase>::seekNextPage(bool bCreateNew)
+{
+  if(bCreateNew)
+  {
+    if(!m_pCurrPage)
+    {
+      addPage();
+      return;
+    }
+    if(!m_pCurrPage->m_pNextPage)
+      addPage();
+  }
+  if(m_pCurrPage->m_pNextPage)
+  {
+    m_pCurrPage = m_pCurrPage->m_pNextPage;
+    m_nCurPos += leftInCurPage();
+    pageSwitcher().switchToPage(m_pCurrPage);
+  }
+  else
+    throw OdError(eEndOfFile);
+}
+
+template <class TBase>
+OdUInt64 OdMemFileStreamImpl<TBase>::seek(OdInt64 offset, OdDb::FilerSeekType from)
+{
+  OdUInt64 nNewPos;
+  switch(from)
+  {
+  case OdDb::kSeekFromEnd:
+    nNewPos = m_nEndPos + offset;
+    break;
+  case OdDb::kSeekFromCurrent:
+    nNewPos = m_nCurPos + offset;
+    break;
+  case OdDb::kSeekFromStart:
+    if(!offset)
+    {
+      rewind();
+      return 0;
+    }
+    nNewPos = offset;
+    break;
+  default:
+    throw OdError(eInvalidInput);
+    break;
+  };
+
+  if(nNewPos != m_nCurPos)
+  {
+    if (nNewPos > m_nEndPos)
+      throw OdError( eEndOfFile );
+
+    OdInt64 nFromEnd = m_nEndPos - nNewPos;
+
+    bool bForward = false;
+    bool bBack = false;
+    if (m_pCurrPage)
+    {
+      if (nNewPos >= m_pCurrPage->m_nPageStartAddr)
+      {
+        bForward = true;
+      }
+      else
+      {
+        bBack = true;
+      }
+    }
+
+    if (nFromEnd == 0)
+    {
+      m_pCurrPage = m_pLastPage;
+      bForward = true;
+    }
+    else if (bForward)
+    {
+      if (nFromEnd < ((OdInt64)nNewPos - (OdInt64)m_pCurrPage->m_nPageStartAddr))
+      {
+        m_pCurrPage = m_pLastPage;
+        bForward = false;
+      }
+    }
+    else if (bBack)
+    {
+      if (nNewPos < (m_pCurrPage->m_nPageStartAddr - nNewPos))
+      {
+        m_pCurrPage = m_pFirstPage;
+        bForward = true;
+      }
+    }
+    else
+    {
+      if (nNewPos <= (OdUInt64)nFromEnd)
+      {
+        m_pCurrPage = m_pFirstPage;
+        bForward = true;
+      }
+      else
+      {
+        m_pCurrPage = m_pLastPage;
+      }
+    }
+
+    m_nCurPos = nNewPos;
+    if (bForward)
+    {
+      nNewPos = nNewPos / m_nPageDataSize * m_nPageDataSize ;
+      while(m_pCurrPage && m_pCurrPage->m_nPageStartAddr < nNewPos)
+      {
+        m_pCurrPage = m_pCurrPage->m_pNextPage;
+      }
+    }
+    else
+    {
+      while(m_pCurrPage->m_nPageStartAddr > m_nCurPos)
+      {
+        m_pCurrPage = m_pCurrPage->m_pPrevPage;
+      }
+    }
+    pageSwitcher().switchToPage(m_pCurrPage);
+  }
+  return m_nCurPos;
+}
+
+template <class TBase>
+OdUInt8 OdMemFileStreamImpl<TBase>::getByte()
+{
+  OdUInt8 ret;
+  if(m_nCurPos < m_nEndPos)
+  {
+    pageSwitcher().ensurePage(m_pCurrPage);
+    OdUInt32 nPosInPage = posInCurPage();
+    ret = m_pCurrPage->m_data[nPosInPage];
+    ++m_nCurPos;
+    if ((nPosInPage + 1) == m_nPageDataSize)
+      m_pCurrPage = m_pCurrPage->m_pNextPage;
+  }
+  else
+  {
+    throw OdError(eEndOfFile);
+  }
+  return ret;
+}
+
+template <class TBase>
+void OdMemFileStreamImpl<TBase>::getBytes(void* buffer, OdUInt32 nLen)
+{
+  if (nLen==0)
+    return;
+
+  OdUInt64 nNewPos = m_nCurPos + nLen;
+  if(nNewPos <= m_nEndPos)
+  {
+    OdUInt8* pDest = (OdUInt8*)buffer;
+    OdUInt32 nToCopy = odmin(leftInCurPage(), nLen);
+    if(nToCopy)
+    {
+      pageSwitcher().ensurePage(m_pCurrPage);
+      ::memcpy(pDest, currPos(), nToCopy);
+      pDest += nToCopy;
+      nLen -= nToCopy;
+    }
+    while(nLen)
+    {
+      seekNextPage();
+      nToCopy = odmin(m_nPageDataSize, nLen);
+      ::memcpy(pDest, m_pCurrPage->m_data, nToCopy);
+      pDest += nToCopy;
+      nLen -= nToCopy;
+    }
+    m_nCurPos = nNewPos;
+    if(m_nCurPos && (m_nCurPos % m_nPageDataSize)==0)
+      m_pCurrPage = m_pCurrPage->m_pNextPage;
+  }
+  else
+  {
+    throw OdError(eEndOfFile);
+  }
+}
+
+template <class TBase>
+void OdMemFileStreamImpl<TBase>::putByte(OdUInt8 val)
+{
+  if(!m_pCurrPage)
+  {
+    seekNextPage(true);
+  }
+  pageSwitcher().ensurePage(m_pCurrPage);
+  pageSwitcher().setModified(m_pCurrPage, true);
+  OdUInt64 nPosInPage = posInCurPage();
+  m_pCurrPage->m_data[nPosInPage] = val;
+  ++m_nCurPos;
+  m_nEndPos = odmax(m_nCurPos, m_nEndPos);
+  if ((nPosInPage + 1) == m_nPageDataSize)
+  {
+    m_pCurrPage = m_pCurrPage->m_pNextPage;
+  }
+}
+
+template <class TBase>
+void OdMemFileStreamImpl<TBase>::putBytes(const void* buffer, OdUInt32 nLen)
+{
+  if (nLen == 0)
+  {
+    return;
+  }
+  const OdUInt8* pSrc = (const OdUInt8*)buffer;
+  OdUInt32 nToCopy = odmin(leftInCurPage(), nLen);
+  if(nToCopy)
+  {
+    pageSwitcher().ensurePage(m_pCurrPage);
+    pageSwitcher().setModified(m_pCurrPage, true);
+    ::memcpy(currPos(), pSrc, nToCopy);
+    pSrc += nToCopy;
+    nLen -= nToCopy;
+  }
+  while(nLen)
+  {
+    seekNextPage(true);
+    pageSwitcher().setModified(m_pCurrPage, true);
+    nToCopy = odmin(m_nPageDataSize, nLen);
+    ::memcpy(m_pCurrPage->m_data, pSrc, nToCopy);
+    pSrc += nToCopy;
+    nLen -= nToCopy;
+  }
+  m_nCurPos += nToCopy;
+  if(m_nCurPos && (m_nCurPos % m_nPageDataSize)==0)
+  {
+    m_pCurrPage = m_pCurrPage->m_pNextPage;
+  }
+  m_nEndPos = odmax(m_nCurPos, m_nEndPos);
+}
+
+//DD:EXPORT_OFF
+
+#endif // !defined(_MEMORYFILESTREAMIMPL_H_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStream.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStream.h
new file mode 100755
index 0000000..761ebb2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStream.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// MemoryStream.h: interface for the OdMemoryStreamImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_MEMORYSTREAM_H_INCLUDED_)
+#define _MEMORYSTREAM_H_INCLUDED_
+
+
+
+#include "OdStreamBuf.h"
+
+#include "TD_PackPush.h"
+
+class OdMemoryStream;
+typedef OdSmartPtr<OdMemoryStream> OdMemoryStreamPtr;
+
+/** \details
+    This class defines the interface for paged-memory I/O objects. 
+    
+    Library: TD_Root
+
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdMemoryStream : public OdStreamBuf
+{
+protected:
+  OdMemoryStream();
+public:
+  ODRX_DECLARE_MEMBERS(OdMemoryStream);
+  
+  /** \details
+    Creates a new MemoryStream object, and returns a SmartPointer to the new object.
+    \param pageSize [in]  PageDataSize.
+  */
+  static OdMemoryStreamPtr createNew(OdUInt32 pageDataSize = 0x800);
+  /** \details
+    Returns the PageDataSize for this MemoryStream object.
+  */
+  virtual OdUInt32 pageDataSize() const = 0;
+
+  /** \details
+    Sets the PageDataSize for this MemoryStream object.
+    \param pageDataSize [in]  PageDataSize.
+  */
+  virtual void setPageDataSize(OdUInt32 pageDataSize) = 0;
+
+  /** \details
+    Reserves the specified number of bytes for this MemoryStream object.
+  */
+  virtual void reserve(OdUInt64 numBytes) = 0;
+
+  /** \details
+    Returns a unique file name to be associated with this MemoryStream object.
+  */
+  OdString fileName();
+};
+
+#include "TD_PackPop.h"
+
+#endif // !defined(_MEMORYSTREAM_H_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStreamImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStreamImpl.h
new file mode 100755
index 0000000..0478af5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MemoryStreamImpl.h
@@ -0,0 +1,446 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// MemoryStreamImpl.h: implementation for the OdMemoryStreamImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_MEMORYSTREAMIMPL_H_INCLUDED_)
+#define _MEMORYSTREAMIMPL_H_INCLUDED_
+
+#include "RxObjectImpl.h"
+#include "MemoryStream.h"
+#include "OdAlloc.h"
+
+//DD:EXPORT_ON
+
+
+/** \details
+
+    {group:Other_Classes}
+*/
+class OdMemoryStreamDummyBase { };
+
+/** \details
+
+    {group:Other_Classes}
+*/
+template <class TBase = OdMemoryStreamDummyBase>
+class OdMemoryStreamImpl : public TBase
+{
+  friend class OdMemoryStream;
+  struct PAGE
+  {
+    PAGE*    m_pNextPage;
+    PAGE*    m_pPrevPage;
+    OdUInt64 m_nPageStartAddr;
+    OdUInt8  m_data[1];
+  };
+  OdUInt64  m_numPages;
+  PAGE*     m_pFirstPage;
+  PAGE*     m_pCurrPage;
+  PAGE*     m_pLastPage;
+  OdMemoryStreamImpl& operator= (const OdMemoryStreamImpl&) {return *this;}
+protected:
+  OdUInt64  m_nCurPos;
+  OdUInt64  m_nEndPos;
+  OdUInt32  m_nPageDataSize;
+
+  inline OdUInt64 allocated() const { return m_numPages * m_nPageDataSize; }
+  inline OdUInt64 curPageNo() const { return (m_nCurPos / m_nPageDataSize); }
+  inline OdUInt32 posInCurPage() const { return OdUInt32(m_nCurPos % m_nPageDataSize); }
+  inline OdUInt32 leftInCurPage() const { return (m_pCurrPage ? m_nPageDataSize - posInCurPage() : 0); }
+  void addPage();
+  void seekNextPage(bool bCreateNew = false);
+  inline void seekPrevPage()
+  {
+    if(m_pCurrPage->m_pPrevPage)
+    {
+      m_nCurPos -= posInCurPage();
+      m_nCurPos -= m_nPageDataSize;
+      m_pCurrPage = m_pCurrPage->m_pPrevPage;
+    }
+    else
+      throw OdError(eEndOfFile);
+  }
+  inline OdUInt8* currPos() { return m_pCurrPage->m_data + posInCurPage(); }
+  inline const OdUInt8* currPos() const { return m_pCurrPage->m_data + posInCurPage(); }
+public:
+  OdMemoryStreamImpl(OdUInt32 nPageDataSize = 0x400)
+    : m_numPages(0)
+    , m_pFirstPage(0)
+    , m_pCurrPage(0)
+    , m_pLastPage(0)
+    , m_nCurPos(0)
+    , m_nEndPos(0)
+    , m_nPageDataSize(nPageDataSize)
+  {
+  }
+
+  // The methods correspond to OdMemoryStream interface
+  //
+  OdUInt32 pageDataSize() const { return m_nPageDataSize; }
+
+  void setPageDataSize(OdUInt32 nPageSize) { m_nPageDataSize = nPageSize; }
+
+  void reserve(OdUInt64 nSize)
+  {
+    while(nSize > allocated())
+      addPage();
+  }
+
+  // The methods correspond to OdStreamBuf interface
+  //
+  OdUInt64 length() 
+	{
+		return m_nEndPos; 
+	}
+
+  OdUInt64 seek(OdInt64 offset, OdDb::FilerSeekType whence);
+
+  const void *pageAlignedAddress(OdUInt32 nLen);
+
+  OdUInt64 tell()
+  {
+    return m_nCurPos;
+  }
+
+  bool isEof()
+  {
+    return (m_nCurPos>=m_nEndPos);
+  }
+
+  OdUInt8 getByte();
+  void getBytes(void* buffer, OdUInt32 nLen);
+
+  void putByte(OdUInt8 val);
+  void putBytes(const void* buffer, OdUInt32 nLen);
+
+  //void copyDataTo(TBase* pDest, OdUInt32 nSrcStart = 0, OdUInt32 nSrcEnd = 0)
+  //{
+  //  TBase::copyDataTo(pDest, nSrcStart, nSrcEnd);
+  //}
+
+  void rewind()
+  {
+    m_nCurPos = 0;
+    m_pCurrPage = m_pFirstPage;
+  }
+
+  void truncate()
+  {
+    if(m_pCurrPage)
+    {
+      PAGE* pNext, *pCurr = m_pCurrPage->m_pNextPage;
+      m_pCurrPage->m_pNextPage = 0;
+      m_pLastPage = m_pCurrPage;
+      m_nEndPos = m_nCurPos;
+      while(pCurr)
+      {
+        pNext = pCurr->m_pNextPage;
+        ::odrxFree(pCurr);
+        pCurr = pNext;
+      }
+    }
+  }
+
+  ~OdMemoryStreamImpl();
+};
+
+////////////////////////////////////////////////////////
+/** \details
+
+    {group:Other_Classes}
+*/
+template <class TBase>
+OdMemoryStreamImpl<TBase>::~OdMemoryStreamImpl()
+{
+  PAGE* pNext, *pCurr = m_pFirstPage;
+  while(pCurr)
+  {
+    pNext = pCurr->m_pNextPage;
+    ::odrxFree(pCurr);
+    pCurr = pNext;
+  }
+  m_pFirstPage = 0;
+}
+
+template <class TBase>
+void OdMemoryStreamImpl<TBase>::addPage()
+{
+  PAGE* pPage = (PAGE*)::odrxAlloc(sizeof(PAGE)-1+m_nPageDataSize);
+  if (!pPage)
+    throw OdError(eOutOfMemory);
+  pPage->m_pPrevPage = m_pLastPage;
+  pPage->m_pNextPage = 0;
+  if(m_pLastPage)
+  {
+    m_pLastPage->m_pNextPage = pPage;
+    if(!m_pCurrPage)
+      m_pCurrPage = pPage;
+    pPage->m_nPageStartAddr = pPage->m_pPrevPage->m_nPageStartAddr + m_nPageDataSize;
+  }
+  else
+  {
+    m_pFirstPage = m_pCurrPage = pPage;
+    pPage->m_nPageStartAddr = 0;
+  }
+  m_pLastPage = pPage;
+  ++m_numPages;
+}
+
+template <class TBase>
+void OdMemoryStreamImpl<TBase>::seekNextPage(bool bCreateNew)
+{
+  if(bCreateNew)
+  {
+    if(!m_pCurrPage)
+    {
+      addPage();
+      return;
+    }
+    if(!m_pCurrPage->m_pNextPage)
+      addPage();
+  }
+  if(m_pCurrPage->m_pNextPage)
+  {
+    m_pCurrPage = m_pCurrPage->m_pNextPage;
+    m_nCurPos += leftInCurPage();
+  }
+  else
+    throw OdError(eEndOfFile);
+}
+
+template <class TBase>
+OdUInt64 OdMemoryStreamImpl<TBase>::seek(OdInt64 offset, OdDb::FilerSeekType from)
+{
+  OdUInt64 nNewPos;
+	switch(from)
+	{
+	case OdDb::kSeekFromEnd:
+		nNewPos = m_nEndPos + offset;
+		break;
+	case OdDb::kSeekFromCurrent:
+		nNewPos = m_nCurPos + offset;
+		break;
+	case OdDb::kSeekFromStart:
+    if(!offset)
+    {
+      rewind();
+      return 0;
+    }
+		nNewPos = offset;
+		break;
+	default:
+		throw OdError(eInvalidInput);
+		break;
+	};
+  if(nNewPos != m_nCurPos)
+  {
+    if (nNewPos > m_nEndPos)
+      throw OdError( eEndOfFile );
+
+    OdInt64 nFromEnd = m_nEndPos - nNewPos;
+
+    bool bForward = false;
+    bool bBack = false;
+    if (m_pCurrPage)
+    {
+      if (nNewPos >= m_pCurrPage->m_nPageStartAddr)
+      {
+        bForward = true;
+      }
+      else
+      {
+        bBack = true;
+      }
+    }
+
+    if (nFromEnd == 0)
+    {
+      m_pCurrPage = m_pLastPage;
+      bForward = true;
+    }
+    else if (bForward)
+    {
+      if (nFromEnd < ((OdInt64)nNewPos - (OdInt64)m_pCurrPage->m_nPageStartAddr))
+      {
+        m_pCurrPage = m_pLastPage;
+        bForward = false;
+      }
+    }
+    else if (bBack)
+    {
+      if (nNewPos < (m_pCurrPage->m_nPageStartAddr - nNewPos))
+      {
+        m_pCurrPage = m_pFirstPage;
+        bForward = true;
+      }
+    }
+    else
+    {
+      if (nNewPos <= (OdUInt64)nFromEnd)
+      {
+        m_pCurrPage = m_pFirstPage;
+        bForward = true;
+      }
+      else
+      {
+        m_pCurrPage = m_pLastPage;
+      }
+    }
+    m_nCurPos = nNewPos;
+    if (bForward)
+    {
+      nNewPos = nNewPos / m_nPageDataSize * m_nPageDataSize ;
+      while(m_pCurrPage && m_pCurrPage->m_nPageStartAddr < nNewPos)
+      {
+        m_pCurrPage = m_pCurrPage->m_pNextPage;
+      }
+    }
+    else
+    {
+      while(m_pCurrPage->m_nPageStartAddr > m_nCurPos)
+      {
+        m_pCurrPage = m_pCurrPage->m_pPrevPage;
+      }
+    }
+  }
+  return m_nCurPos;
+}
+
+template <class TBase>
+const void *OdMemoryStreamImpl<TBase>::pageAlignedAddress(OdUInt32 nLen)
+{
+#ifndef TD_STRICT_ALIGNMENT
+  if (leftInCurPage() >= nLen)
+    return currPos();
+#endif
+  return NULL;
+}
+
+template <class TBase>
+OdUInt8 OdMemoryStreamImpl<TBase>::getByte()
+{
+  OdUInt8 ret;
+  if(m_nCurPos < m_nEndPos)
+  {
+    OdUInt32 nPosInPage = posInCurPage();
+    ret = m_pCurrPage->m_data[nPosInPage];
+    ++m_nCurPos;
+    if ((nPosInPage + 1) == m_nPageDataSize)
+      m_pCurrPage = m_pCurrPage->m_pNextPage;
+  }
+  else
+  {
+    throw OdError(eEndOfFile);
+  }
+  return ret;
+}
+
+template <class TBase>
+void OdMemoryStreamImpl<TBase>::getBytes(void* buffer, OdUInt32 nLen)
+{
+  if (nLen==0)
+    return;
+
+  OdUInt64 nNewPos = m_nCurPos + nLen;
+  if(nNewPos <= m_nEndPos)
+  {
+    OdUInt8* pDest = (OdUInt8*)buffer;
+    OdUInt32 nToCopy = odmin(leftInCurPage(), nLen);
+    if(nToCopy)
+    {
+      ::memcpy(pDest, currPos(), nToCopy);
+      pDest += nToCopy;
+      nLen -= nToCopy;
+    }
+    while(nLen)
+    {
+      seekNextPage();
+      nToCopy = odmin(m_nPageDataSize, nLen);
+      ::memcpy(pDest, m_pCurrPage->m_data, nToCopy);
+      pDest += nToCopy;
+      nLen -= nToCopy;
+    }
+    m_nCurPos = nNewPos;
+    if(m_nCurPos && (m_nCurPos % m_nPageDataSize)==0)
+      m_pCurrPage = m_pCurrPage->m_pNextPage;
+  }
+  else
+  {
+    throw OdError(eEndOfFile);
+  }
+}
+
+template <class TBase>
+void OdMemoryStreamImpl<TBase>::putByte(OdUInt8 val)
+{
+  if(!m_pCurrPage)
+  {
+    seekNextPage(true);
+  }
+  OdUInt64 nPosInPage = posInCurPage();
+  m_pCurrPage->m_data[nPosInPage] = val;
+  ++m_nCurPos;
+  m_nEndPos = odmax(m_nCurPos, m_nEndPos);
+  if ((nPosInPage + 1) == m_nPageDataSize)
+    m_pCurrPage = m_pCurrPage->m_pNextPage;
+}
+
+template <class TBase>
+void OdMemoryStreamImpl<TBase>::putBytes(const void* buffer, OdUInt32 nLen)
+{
+  if (nLen == 0)
+  {
+    return;
+  }
+  const OdUInt8* pSrc = (const OdUInt8*)buffer;
+  OdUInt32 nToCopy = odmin(leftInCurPage(), nLen);
+  if(nToCopy)
+  {
+    ::memcpy(currPos(), pSrc, nToCopy);
+    pSrc += nToCopy;
+    nLen -= nToCopy;
+  }
+  while(nLen)
+  {
+    seekNextPage(true);
+    nToCopy = odmin(m_nPageDataSize, nLen);
+    ::memcpy(m_pCurrPage->m_data, pSrc, nToCopy);
+    pSrc += nToCopy;
+    nLen -= nToCopy;
+  }
+  m_nCurPos += nToCopy;
+  if(m_nCurPos && (m_nCurPos % m_nPageDataSize)==0)
+    m_pCurrPage = m_pCurrPage->m_pNextPage;
+  m_nEndPos = odmax(m_nCurPos, m_nEndPos);
+}
+
+//DD:EXPORT_OFF
+
+#endif // !defined(_MEMORYSTREAMIMPL_H_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MessageDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MessageDefs.h
new file mode 100755
index 0000000..06b81d8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/MessageDefs.h
@@ -0,0 +1,490 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance").
+// All rights reserved.
+//
+// This software and its documentation and related materials are owned by
+// the Alliance. The software may only be incorporated into application
+// programs owned by members of the Alliance, subject to a signed
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable
+// trade secrets of the Alliance and its suppliers. The software is also
+// protected by copyright law and international treaty provisions. Application
+// programs incorporating this software must include the following statement
+// with their copyright notices:
+//
+//   This application incorporates Teigha(R) software pursuant to a license
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance.
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+////////////////////////////////////////////////////////////
+// Message codes definition container
+
+
+//              Code                        Message string
+OD_MESSAGE_DEF( sidLayoutNo,                OD_T("Layout%d"))
+OD_MESSAGE_DEF( sidDwgFile,                 OD_T(".dwg file"))
+OD_MESSAGE_DEF( sidDb,                      OD_T("Database"))
+OD_MESSAGE_DEF( sidDbHeader,                OD_T("Database header"))
+OD_MESSAGE_DEF( sidObjectsAudited,          OD_T("%d objects audited")) // param: Number of objects
+OD_MESSAGE_DEF( sidErrorsFound,             OD_T("Total errors found during audit %d, fixed %d")) // param: Number of errors
+OD_MESSAGE_DEF( sidDictionary,              OD_T("%ls Dictionary")) // param: Dictionary name
+OD_MESSAGE_DEF( sidTable,                   OD_T("%ls Table")) // param: Table name
+OD_MESSAGE_DEF( sidDbLayerZeroMissed,       OD_T("Layer 0 missing"))
+OD_MESSAGE_DEF( sidDbLayerZeroBadIndex,     OD_T("Layer 0 has invalid index %d"))
+OD_MESSAGE_DEF( sidDbLtMissed,              OD_T("LineType %ls missing")) // param: line type name
+OD_MESSAGE_DEF( sidDbLtContsBadIndex,       OD_T("LineType Continuous has invalid index %d"))
+OD_MESSAGE_DEF( sidDbSymbolTableMissed,     OD_T("Missing Symbol Table \"%ls\""))
+OD_MESSAGE_DEF( sidDbRegAppAcadMissed,      OD_T("RegApp ACAD missing"))
+OD_MESSAGE_DEF( sidDbRegAppAcadBadIndex,    OD_T("RegApp ACAD has invalid index %d"))
+OD_MESSAGE_DEF( sidDbTxtStStandardMissed,   OD_T("TextStyle Standard missing"))
+OD_MESSAGE_DEF( sidDbDimStStandardMissed,   OD_T("DimensionStyle Standard missing"))
+OD_MESSAGE_DEF( sidDbMlStStandardMissed,    OD_T("MLineStyle Standard missing"))
+OD_MESSAGE_DEF( sidDbVpActiveMissed,        OD_T("Viewport *Active missing"))
+OD_MESSAGE_DEF( sidDbLtByBlockName,         OD_T("LineType ByBlock has invalid name \"%ls\""))
+OD_MESSAGE_DEF( sidDbLtByBlockInList,       OD_T("LineType ByBlock placed in ordinary list"))
+OD_MESSAGE_DEF( sidDbLtByLayerName,         OD_T("LineType ByLayer has invalid name %ls"))
+OD_MESSAGE_DEF( sidDbLtByLayerInList,       OD_T("LineType ByLayer placed in ordinary list"))
+OD_MESSAGE_DEF( sidDbNamedObjectsDictionaryMissed,OD_T("Named objects Dictionary missing"))
+OD_MESSAGE_DEF( sidDbDictionaryMissed,      OD_T("%ls dictionary missing"))   // param: dictionary name (ACAD_MLSTYLE, ACAD_GROUP, ...)
+OD_MESSAGE_DEF( sidInvalidLayoutId,         OD_T("Layout Id %ls")) // param: LayoutId
+OD_MESSAGE_DEF( sidInvalidLayoutAssoc,      OD_T("Layout %ls associated with invalid BlockTableRecord")) // param: LayoutId
+OD_MESSAGE_DEF( sidInvalidLayoutBackPtr,    OD_T("Layout %ls associated with BlockTableRecord %ls that doesn't point back")) // param: LayoutId, RecordId
+OD_MESSAGE_DEF( sidSysVar,                  OD_T("System Variable \"%ls\"")) // param: Name of system variable
+OD_MESSAGE_DEF( sidLayoutOverallVp,         OD_T("Overall Viewport Id %ls"))
+OD_MESSAGE_DEF( sidInvalidObjectId,         OD_T("Object Id"))
+OD_MESSAGE_DEF( sidIsNotTextStyleRec,       OD_T("Is not a TextStyleTableRecord"))
+OD_MESSAGE_DEF( sidIsNotInTable,            OD_T("Is not in Table"))
+OD_MESSAGE_DEF( sidIsShapeFile,             OD_T("Is Shape file"))
+OD_MESSAGE_DEF( sidVxRecRef,                OD_T("VXTableRecord reference"))
+OD_MESSAGE_DEF( sidGenNamePrefix,           OD_T("$TD_AUDIT_GENERATED"))
+OD_MESSAGE_DEF( sidGenNameSymUtilPrefix,    OD_T("$TD_SYMUTILREPAIR_GENERATED"))
+// General validation
+OD_MESSAGE_DEF( sidVarValidDouble,          OD_T("Not %g"))
+OD_MESSAGE_DEF( sidVarValidInt,             OD_T("Not %d"))
+OD_MESSAGE_DEF( sidVarValidPositive,        OD_T("Not >0"))
+OD_MESSAGE_DEF( sidVarValidZeroPositive,    OD_T("Not >=0"))
+OD_MESSAGE_DEF( sidVarValidNegative,        OD_T("Not <0"))
+OD_MESSAGE_DEF( sidVarValidZeroNegative,    OD_T("Not <=0"))
+OD_MESSAGE_DEF( sidVarValidNonZero,         OD_T("Equal to 0"))
+OD_MESSAGE_DEF( sidVarValidRangeInt,        OD_T("Not %d..%d"))
+OD_MESSAGE_DEF( sidVarValidRangeDouble,     OD_T("Not %g..%g"))
+OD_MESSAGE_DEF( sidVarValidRangeDegree,     OD_T("Not %f..%f degrees"))
+OD_MESSAGE_DEF( sidVarValidMinInt,          OD_T("Not >= %d"))
+OD_MESSAGE_DEF( sidVarValidMaxInt,          OD_T("Not <= %d"))
+OD_MESSAGE_DEF( sidVarValidInvalid,         OD_T("Invalid"))
+OD_MESSAGE_DEF( sidVarValid,                OD_T("%ls"))
+OD_MESSAGE_DEF( sidVarValidInts2,           OD_T("Not %d or %d"))
+OD_MESSAGE_DEF( sidVarValidInts4,           OD_T("Not %d, %d, %d, or %d"))
+OD_MESSAGE_DEF( sidVarValidDisparity,       OD_T("Disparity"))
+// General default values
+OD_MESSAGE_DEF( sidVarDefDouble,            OD_T("Set to %g"))
+OD_MESSAGE_DEF( sidVarDefInt,               OD_T("Set to %d"))
+OD_MESSAGE_DEF( sidVarDefObj,               OD_T("Set to %ls"))
+OD_MESSAGE_DEF( sidVarDefDegree,            OD_T("Set to %f degrees"))
+OD_MESSAGE_DEF( sidVarDefColor,             OD_T("Set to %d"))
+OD_MESSAGE_DEF( sidVarDefLayer,             OD_T("Set to default Layer \"%ls\""))
+OD_MESSAGE_DEF( sidVarDefLinetype,          OD_T("Set to default LineType \"%ls\""))
+OD_MESSAGE_DEF( sidVarDefZAxis,             OD_T("Set to (0 0 1)"))
+OD_MESSAGE_DEF( sidVarDefViewMode,          OD_T("Set to %#x"))
+OD_MESSAGE_DEF( sidVarDefFalse,             OD_T("Set to False"))
+OD_MESSAGE_DEF( sidVarDefTrue,              OD_T("Set to True"))
+OD_MESSAGE_DEF( sidVarDefNull,              OD_T("Set to Null"))
+OD_MESSAGE_DEF( sidVarDefDefault,           OD_T("Set to Default"))
+OD_MESSAGE_DEF( sidVarDefCreate,            OD_T("Created"))
+OD_MESSAGE_DEF( sidVarDefRemove,            OD_T("Removed"))
+OD_MESSAGE_DEF( sidVarDefUpdate,            OD_T("Updated"))
+OD_MESSAGE_DEF( sidVarDefRepair,            OD_T("Repaired"))
+OD_MESSAGE_DEF( sidVarDefUnerase,           OD_T("UnErased"))
+OD_MESSAGE_DEF( sidVarDefLayerColorMethod,  OD_T("Set to ByACI"))
+// Color
+OD_MESSAGE_DEF( sidColorInvalidIndex,       OD_T("Color index %d"))
+OD_MESSAGE_DEF( sidColorInvalidMethod,      OD_T("Color method %d"))
+OD_MESSAGE_DEF( sidValidColorIndices,       OD_T("Not 1..255, ByBlock, or ByLayer"))
+OD_MESSAGE_DEF( sidValidLayerColorIndices,  OD_T("Not 1..255"))
+OD_MESSAGE_DEF( sidValidColorMethods,       OD_T("Not ByLayer, ByBlock, ByPen, Foreground, LayerOff, LayerFrozen, None, ByColor, or ByACI"))
+// Objects
+OD_MESSAGE_DEF( sidObjProp,                 OD_T("%ls")) // param: Name of object property
+OD_MESSAGE_DEF( sidObjPropInt,              OD_T("%ls - %d"))
+OD_MESSAGE_DEF( sidObjPropDouble,           OD_T("%ls - %g"))
+OD_MESSAGE_DEF( sidObjPropStr,              OD_T("%ls - \"%ls\""))
+OD_MESSAGE_DEF( sidObjPropColor,            OD_T("Color value"))
+OD_MESSAGE_DEF( sidObjPropLayerId,          OD_T("Layer Id %ls"))
+OD_MESSAGE_DEF( sidObjPropLinetypeId,       OD_T("LineType Id %ls"))
+OD_MESSAGE_DEF( sidObjPropLinetypeName,     OD_T("LineType name \"%ls\""))
+OD_MESSAGE_DEF( sidObjPropPlotStyleNameId,  OD_T("PlotStyleName Id %ls"))
+OD_MESSAGE_DEF( sidObjPropReactorId,        OD_T("Reactor Id %ls"))
+OD_MESSAGE_DEF( sidObjPropExtDicId,         OD_T("Extension dictionary Id %ls"))
+OD_MESSAGE_DEF( sidObjPropOwnerId,          OD_T("Owner Id %ls"))
+OD_MESSAGE_DEF( sidObjPropClassVersion,     OD_T("Class version %d"))
+OD_MESSAGE_DEF( sidXDataRegAppId,           OD_T("XData item RegApp \"%ls\""))
+OD_MESSAGE_DEF( sidXDataHandle,             OD_T("XData handle %ls"))
+OD_MESSAGE_DEF( sidXDataInvalidGrcode,      OD_T("XData contains invalid groupcode (%d)"))
+OD_MESSAGE_DEF( sidXdataSizeExceeded,       OD_T("XData size (%d) exceeded"))
+OD_MESSAGE_DEF( sidXDataGrcode3doubles,     OD_T("XData %d (%g,%g,%g)"))
+OD_MESSAGE_DEF( sidXDataGrcode1double,      OD_T("XData %d (%g)"))
+OD_MESSAGE_DEF( sidXDataUnpairedBrackets,   OD_T("XData contains unpaired \"{\" \"}\" brackets"))
+OD_MESSAGE_DEF( sidInvalidChildId,          OD_T("Unable to open entry object %ls"))
+OD_MESSAGE_DEF( sidDicClonFlag,             OD_T("Duplicate record cloning (merge) flag (%d)"))
+OD_MESSAGE_DEF( sidObjPropColorByLayer,     OD_T("Set to ByLayer"))
+OD_MESSAGE_DEF( sidObjPropPlotStByLayer,    OD_T("Set to ByLayer"))
+OD_MESSAGE_DEF( sidObjPropMaterialId,       OD_T("Material Id %ls"))
+OD_MESSAGE_DEF( sidObjPropMaterialByLayer,  OD_T("Set to ByLayer"))
+OD_MESSAGE_DEF( sidObjPropMaterialGlobal,   OD_T("Set to Global"))
+
+// SortEntsTable
+OD_MESSAGE_DEF( sidFoundDuplicateKeys,      OD_T("Duplicate keys were found"))
+
+// Hatch
+OD_MESSAGE_DEF( sidHatchAssocInvalid,       OD_T("Associative entity %ls"))
+OD_MESSAGE_DEF( sidHatchAssocHatch,         OD_T("Associative entity %ls is Hatch"))
+OD_MESSAGE_DEF( sidHatchAssocReactor,       OD_T("Associative entity %ls missing Hatch as reactor"))
+OD_MESSAGE_DEF( sidHatchRemoveAssoc,        OD_T("Associativity removed"))
+OD_MESSAGE_DEF( sidHatchAssocFlag,          OD_T("Associative flag is true but associative entities are missing"))
+OD_MESSAGE_DEF( sidHatchNoPatternDef,       OD_T("No Hatch pattern definition"))
+
+OD_MESSAGE_DEF( sidHatchConflictGradFlags,  OD_T("Gradient Hatch with solid flag false and/or pattern type not kPreDefined"))
+OD_MESSAGE_DEF( sidHatchGradFlagsFixed,     OD_T("Fixed."))
+
+OD_MESSAGE_DEF( sidInvalidHatchBoundaryData,   OD_T("Hatch has invalid boundary data"))
+OD_MESSAGE_DEF( sidNoClosedHatchBoundaryLoops, OD_T("No Closed Hatch Boundary Loops"))
+
+OD_MESSAGE_DEF( sidHatchBndDupVerts,        OD_T("Polyline Hatch boundary has duplicated vertices"))
+
+// MText
+OD_MESSAGE_DEF( sidMTextLinespacingStyle,   OD_T("Line spacing style (%d)"))
+OD_MESSAGE_DEF( sidMTextAttachPt,           OD_T("Attachment point (%d)"))
+OD_MESSAGE_DEF( sidMTextDrawDir,            OD_T("Drawing direction (%d)"))
+OD_MESSAGE_DEF( sidMTextLinespacingFactor,  OD_T("Line spacing factor (%g)"))
+OD_MESSAGE_DEF( sidMTextXDir,               OD_T("X-axis direction"))
+OD_MESSAGE_DEF( sidMTextExtDic,             OD_T("Extension dictionary entry \"%ls\" %ls"))
+// MLine
+OD_MESSAGE_DEF( sidMLineJustification,      OD_T("Justification (%d)"))
+OD_MESSAGE_DEF( sidMLineScale,              OD_T("Scale (%g)"))
+OD_MESSAGE_DEF( sidMLineStyleId,            OD_T("MLineStyle Id %ls"))
+OD_MESSAGE_DEF( sidMLineStyleNumElements,   OD_T("The number of elements in MLineStyle (%d)"))
+OD_MESSAGE_DEF( sidMLineStFillColor,        OD_T("Fill color"))
+OD_MESSAGE_DEF( sidMLineStStartAngle,       OD_T("Start angle %g"))
+OD_MESSAGE_DEF( sidMLineStEndAngle,         OD_T("End angle %g"))
+OD_MESSAGE_DEF( sidMLineStSegmentsNum,      OD_T("Segments amount %d"))
+OD_MESSAGE_DEF( sidMLineStElemLinetypeId,   OD_T("Element(%d) lineType Id %ls"))
+OD_MESSAGE_DEF( sidMLineStElemColor,        OD_T("Element(%d) has invalid color"))
+OD_MESSAGE_DEF( sidMLineStyleName,          OD_T("MLineStyle name \"%ls\""))
+
+// Raster Image
+OD_MESSAGE_DEF( sidNumClipPoints,           OD_T("Number of points in clipping boundary %d"))
+OD_MESSAGE_DEF( sidImgInvalidReactorId,     OD_T("An image entity's reactor \"%ls\""))
+
+// View, Vp
+OD_MESSAGE_DEF( sidViTilemodeCorners,       OD_T("Tilemode Viewport corners (%g,%g)..(%g,%g)"))
+OD_MESSAGE_DEF( sidViTilemodeCornersValid,  OD_T("Not within (0,0)..(1,1)"))
+OD_MESSAGE_DEF( sidViTilemodeCornersDef,    OD_T("Set to (0,0)..(1,1)"))
+OD_MESSAGE_DEF( sidViSnapXIncr,             OD_T("Snap X increment %g"))
+OD_MESSAGE_DEF( sidViSnapYIncr,             OD_T("Snap Y increment %g"))
+OD_MESSAGE_DEF( sidViGridXIncr,             OD_T("Grid X increment %g"))
+OD_MESSAGE_DEF( sidViGridYIncr,             OD_T("Grid Y increment %g"))
+OD_MESSAGE_DEF( sidViViewWidth,             OD_T("View width %g"))
+OD_MESSAGE_DEF( sidViViewHeight,            OD_T("View height %g"))
+OD_MESSAGE_DEF( sidViLensLength,            OD_T("Lens length %g"))
+OD_MESSAGE_DEF( sidViViewDirection,         OD_T("View direction"))
+OD_MESSAGE_DEF( sidViViewMode,              OD_T("View mode %d"))
+OD_MESSAGE_DEF( sidViRenderMode,            OD_T("Render mode %d"))
+OD_MESSAGE_DEF( sidViTwistAngle,            OD_T("Twist angle %g"))
+OD_MESSAGE_DEF( sidVpHeight,                OD_T("Height (%g)"))
+OD_MESSAGE_DEF( sidVpWidth,                 OD_T("Width (%g)"))
+OD_MESSAGE_DEF( sidVpUCS,                   OD_T("Viewport saved UCS"))
+OD_MESSAGE_DEF( sidVpUCSInvalidXAxis,       OD_T("UCS X-Axis non-unit length"))
+OD_MESSAGE_DEF( sidVpUCSInvalidYAxis,       OD_T("UCS Y-Axis non-unit length"))
+OD_MESSAGE_DEF( sidVpUCSNonPerpendicular,   OD_T("Non-perpendicular UCS X and Y axes"))
+OD_MESSAGE_DEF( sidVpCenter,                OD_T("Viewport center (%g. %g)"))
+OD_MESSAGE_DEF( sidVpCenterDef,             OD_T("Set to (0, 0)"))
+OD_MESSAGE_DEF( sidResized,                 OD_T("Resized"))
+// Tables, recs
+OD_MESSAGE_DEF( sidTblVxOneEmptyRec,        OD_T("There is only one empty VX record"))
+OD_MESSAGE_DEF( sidTblBlockBeginInvalid,    OD_T("BlockBegin Id"))
+OD_MESSAGE_DEF( sidTblBlockBeginErased,     OD_T("BlockBegin Id is erased"))
+OD_MESSAGE_DEF( sidTblBlockBeginNotOurs,    OD_T("BlockBegin owner Id is invalid %ls"))
+OD_MESSAGE_DEF( sidTblBlockEndInvalid,      OD_T("BlockEnd Id"))
+OD_MESSAGE_DEF( sidTblBlockEndErased,       OD_T("BlockEnd Id is erased"))
+OD_MESSAGE_DEF( sidTblBlockEndNotOurs,      OD_T("BlockEnd owner Id is invalid %ls"))
+OD_MESSAGE_DEF( sidTblBlockInvalidSortents, OD_T("Object Id %ls is not an OdDbSortentsTable object"))
+OD_MESSAGE_DEF( sidRecSpaceDuplicateEntry,  OD_T("Duplicate entry of \"%ls\" in BlockRecord Table"))
+OD_MESSAGE_DEF( sidRecSpaceNameInvalid,     OD_T("\"%ls\" record name \"%ls\""))
+OD_MESSAGE_DEF( sidRecNameEmpty,            OD_T("Record name is empty"))
+OD_MESSAGE_DEF( sidRecNameInvalidChars,     OD_T("Character(s) in record name"))
+OD_MESSAGE_DEF( sidRecCommentInvalidChars,  OD_T("Character(s) in record comment"))
+OD_MESSAGE_DEF( sidRecDuplicateName,        OD_T("Duplicate record name \"%ls\""))
+OD_MESSAGE_DEF( sidRecXRefBlockInvalid,     OD_T("Is externally dependent on an Xref, but Xref BlockRecord (%ls)"))
+OD_MESSAGE_DEF( sidRecXRefBlockIdNotNull,   OD_T("Is not externally dependent on an Xref, but XRefBlockId (%ls) is not Null"))
+OD_MESSAGE_DEF( sidRecXRefBlockIdInvalid,   OD_T("Is externally dependent on an Xref, but XRefBlockId (%ls)"))
+OD_MESSAGE_DEF( sidRecXRefInvalidFlag,      OD_T("Is not externally dependent on an Xref, but XRefBlockId (%ls) is valid and name has vertical bar"))
+OD_MESSAGE_DEF( sidRecXRefDepNameInvalid,   OD_T("Is externally dependent on an Xref, but name (%ls) has no vertical bar"))
+OD_MESSAGE_DEF( sidRecXRefBreakCycle,       OD_T("Breaking circular reference from \"%ls\" to \"%ls\""))
+OD_MESSAGE_DEF( sidRecXRefBindNotFound,     OD_T("Cannot bind Xref \"%ls\", it is not found. Please reload or detach it, and try again."))
+OD_MESSAGE_DEF( sidRecXRefBindUnloaded,     OD_T("Cannot bind Xref \"%ls\", it is unloaded. Please reload or detach it, and try again."))
+OD_MESSAGE_DEF( sidRecNameVertBar,          OD_T("Non Xref-dependent record contains vertical bar."))
+OD_MESSAGE_DEF( sidRecRemoveDependence,     OD_T("Removed dependence"))
+OD_MESSAGE_DEF( sidRecAttrDefFalse,         OD_T("hasAttributeDefinitions flag is false, but record has AttributeDefinitions"))
+OD_MESSAGE_DEF( sidRecAttrDefTrue,          OD_T("hasAttributeDefinitions flag is true, but record has no AttributeDefinitions"))
+OD_MESSAGE_DEF( sidRecAttrDefAlwaysFalse,   OD_T("Layout BlockTableRecord has alerted hasAttributeDefinitions flag"))
+OD_MESSAGE_DEF( sidRecLtSegmentsNum,        OD_T("Dash count less than 2"))
+OD_MESSAGE_DEF( sidRecLtBadSegmentType,     OD_T("Bad complex LineType element type"))
+OD_MESSAGE_DEF( sidRecLtContPattern,        OD_T("Continuous pattern length is not zero"))
+OD_MESSAGE_DEF( sidRecLtDescription,        OD_T("Description unprintable"))
+OD_MESSAGE_DEF( sidRecTxtStLastHeight,      OD_T("Last height %g"))
+OD_MESSAGE_DEF( sidRecTxtStScaleFactor,     OD_T("Scale factor %g not in range"))
+OD_MESSAGE_DEF( sidRecTxtStTextSize,        OD_T("Text size %g not in range"))
+OD_MESSAGE_DEF( sidRecVxNullVp,             OD_T("Viewport Id is Null"))
+OD_MESSAGE_DEF( sidRecVxBadVp,              OD_T("Viewport Id"))
+OD_MESSAGE_DEF( sidRecvInvalidFileSection,  OD_T("File section \"%ls\" has invalid data"))
+OD_MESSAGE_DEF( sidUnknownSysVar,           OD_T("Unknown System Variable %ls"))
+OD_MESSAGE_DEF( sidUnknownSymbolTable,      OD_T("Unknown Symbol Table %ls"))
+OD_MESSAGE_DEF( sidIgnored,                 OD_T("Ignored"))
+
+// Dimension
+OD_MESSAGE_DEF( sidInvalidDimOverridesData, OD_T("Dimension overrides data with group code %d"))
+OD_MESSAGE_DEF( sidInvalidDimOverrides,     OD_T("Dimension overrides"))
+OD_MESSAGE_DEF( sidDimBlockRotation,        OD_T("Dimension block rotation (%g)"))
+OD_MESSAGE_DEF( sidDimObliqueAngle,         OD_T("Dimension oblique angle (%g)"))
+OD_MESSAGE_DEF( sidDimTextRotation,         OD_T("Dimension text rotation (%g)"))
+OD_MESSAGE_DEF( sidDimTextStyleNull,        OD_T("Dimension TextStyle Id is Null"))
+OD_MESSAGE_DEF( sidDimIsNotTextStyleRec,    OD_T("Dimension TextStyleTableRecord"))
+
+// Leader
+OD_MESSAGE_DEF( sidLeaderAnntEnbl,          OD_T("Annotation enabled but Id is Null"))
+OD_MESSAGE_DEF( sidLeaderAnntDisbl,         OD_T("Annotation disabled but Id is Not Null"))
+OD_MESSAGE_DEF( sidLeaderAnntDisable,       OD_T("Disable annotation"))
+OD_MESSAGE_DEF( sidLeaderAnntToNull,        OD_T("Set to Null"))
+OD_MESSAGE_DEF( sidLeaderAnntId,            OD_T("Annotation Id %ls"))
+OD_MESSAGE_DEF( sidDimStyle,                OD_T("DimensionStyle %ls"))
+OD_MESSAGE_DEF( sidLeaderArrowHead,         OD_T("Arrow head block"))
+// Text
+OD_MESSAGE_DEF( sidTextHeight,              OD_T("Height (%g)"))
+OD_MESSAGE_DEF( sidTextWidthFactor,         OD_T("WidthFactor (%g)"))
+OD_MESSAGE_DEF( sidTextObliqueAngle,        OD_T("ObliqueAngle (%g)"))
+OD_MESSAGE_DEF( sidTextTextStyle,           OD_T("TextStyle (%ls)"))
+// DimAssoc
+OD_MESSAGE_DEF( sidDimAssocDimId,           OD_T("Dimension Id %ls"))
+// Group
+OD_MESSAGE_DEF( sidGroupEntryReactor,       OD_T("Entity %ls in group does not have group as persistent reactor"))
+OD_MESSAGE_DEF( sidGroupDefAddReactor,      OD_T("Add persistent reactor"))
+// Polylines
+OD_MESSAGE_DEF( sidPolyVertNumErr,          OD_T("Has only %d vertices"))
+OD_MESSAGE_DEF( sidPolyVertNumAdd,          OD_T("%d vertices added"))
+OD_MESSAGE_DEF( sidPolyVertLayerMatch,      OD_T("Layer %ls doesn't match to owner"))
+OD_MESSAGE_DEF( sidPolyVertLinetypeMatch,   OD_T("LineType %ls doesn't match to owner"))
+OD_MESSAGE_DEF( sidPolyVertColorMatch,      OD_T("Color %d doesn't match to owner"))
+OD_MESSAGE_DEF( sidPolyVertValid,           OD_T("Should match to owner"))
+OD_MESSAGE_DEF( sidPolylineSurfType,        OD_T("Curves and smooth surface type (%d)"))
+OD_MESSAGE_DEF( sidPolyBulgeErr,            OD_T("Has %d vertices, but %d bulges"))
+OD_MESSAGE_DEF( sidPolyBulgeValid,          OD_T("num bulges > num vertices"))
+OD_MESSAGE_DEF( sidPolyBulgeDef,            OD_T("Set num bulges to num vertices"))
+OD_MESSAGE_DEF( sidPolyWidthErr,            OD_T("Has %d vertices, but %d widths"))
+OD_MESSAGE_DEF( sidPolyWidthValid,          OD_T("num widths > num vertices"))
+OD_MESSAGE_DEF( sidPolyWidthDef,            OD_T("Set num widths to num vertices"))
+OD_MESSAGE_DEF( sidPolyIdentifiersErr,      OD_T("Has %d vertices, but %d vertex identifiers"))
+OD_MESSAGE_DEF( sidPolyIdentifiersValid,    OD_T("num identifiers > num vertices"))
+OD_MESSAGE_DEF( sidPolyIdentifiersDef,      OD_T("Set num identifiers to num vertices"))
+OD_MESSAGE_DEF( sidPolyFitType,             OD_T("Fit type"))
+// Containers
+OD_MESSAGE_DEF( sidCntrEntryInvalid,        OD_T("Entry object %ls"))
+OD_MESSAGE_DEF( sidCntrCrossRefInvalid,     OD_T("Cross references %ls in entities list"))
+OD_MESSAGE_DEF( sidCntrMultipleEntry,       OD_T("Multiple entries of reference %ls"))
+OD_MESSAGE_DEF( sidCntrLastRefMatch,        OD_T("Last entity %ls does not match to last reference %ls in container"))
+OD_MESSAGE_DEF( sidCntrEntryTypeInvalid,    OD_T("Invalid use of entity %ls"))
+OD_MESSAGE_DEF( sidCntrSubentTypeInvalid,   OD_T("Invalid subentity type %ls"))
+OD_MESSAGE_DEF( sidPolyfaceMeshVertexIndex, OD_T("Invalid vertex index"))
+OD_MESSAGE_DEF( sidPolyfaceMeshHasNoFaces,  OD_T("Polyface Mesh has no valid faces"))
+OD_MESSAGE_DEF( sidPolyfaceMeshVertexAfterFace, OD_T("Polyface Mesh vertex after face"))
+OD_MESSAGE_DEF( sidPolyfaceMeshVertexNumInvalid, OD_T("Polyface Mesh vertex's number"))
+OD_MESSAGE_DEF( sidPolyfaceMeshFaceNumInvalid  , OD_T("Polyface Mesh face's number"))
+
+// Block reference
+OD_MESSAGE_DEF( sidBlkRefBlockRecErased,    OD_T("BlockTableRecord %ls is erased"))
+OD_MESSAGE_DEF( sidBlkRefBlockRecInvalid,   OD_T("BlockTableRecord %ls"))
+OD_MESSAGE_DEF( sidMissingBlockRecord,      OD_T("BlockTableRecord %ls is missing"))
+
+OD_MESSAGE_DEF( sidBlkRefScaleHasZero,      OD_T("Scale has zero component (%g %g %g)"))
+OD_MESSAGE_DEF( sidBlkRefScaleValid,        OD_T("Scale must have no zero components"))
+
+// Shapes
+OD_MESSAGE_DEF( sidUnknownShapeName,        OD_T("Can't resolve Shape name \"%ls\""))
+OD_MESSAGE_DEF( sidNullShapeFile,           OD_T("Shape Style (font file) is not set"))
+OD_MESSAGE_DEF( sidNullShapeNumber,         OD_T("Shape number is not set"))
+OD_MESSAGE_DEF( sidCantGetShapeName,        OD_T("Can't get Shape name without \"%ls\""))
+
+// Ellipse
+OD_MESSAGE_DEF( sidNormalDirectionIsInvalid,OD_T("Normal direction (%g %g %g)"))
+OD_MESSAGE_DEF( sidPerpToMajor,             OD_T("Must be perpendicular to Major Axis"))
+OD_MESSAGE_DEF( sidAdjusted,                OD_T("Adjusted"))
+OD_MESSAGE_DEF( sidEllipseRatio,            OD_T("Ratio %lf"))
+OD_MESSAGE_DEF( sidEllipseEqualAngle,       OD_T("Start angle (%lf) and end angle are equal (degenerate geometry)"))
+
+// Spline
+OD_MESSAGE_DEF( sidCoincidentControlPoints, OD_T("Control points of spline are coincident"))
+OD_MESSAGE_DEF( sidInvalidKnotVector,       OD_T("Knot vector of spline"))
+
+// XRecord
+OD_MESSAGE_DEF( sidXRecordInvalidGrcode,    OD_T("XRecord contains invalid groupcode"))
+OD_MESSAGE_DEF( sidXRecordHandle,           OD_T("XRecord handle %ls"))
+OD_MESSAGE_DEF( sidXRecord3doubles,         OD_T("XRecord %d (%g,%g,%g)"))
+OD_MESSAGE_DEF( sidXRecord1double,          OD_T("XRecord %d (%g)"))
+
+// MInsertBlock
+OD_MESSAGE_DEF( sidMInsertNumRows,          OD_T("Number of rows (%d)"))
+OD_MESSAGE_DEF( sidMInsertNumColumns,       OD_T("Number of columns (%d)"))
+
+// 2d Entities
+OD_MESSAGE_DEF( sidNormalized,              OD_T("Normalized"))
+OD_MESSAGE_DEF( sidThickness,               OD_T("Invalid Thickness"))
+OD_MESSAGE_DEF( sidZeroed,                  OD_T("Set to 0"))
+
+// Recover
+OD_MESSAGE_DEF( sidRecvStart,               OD_T("Recover .dwg file."))
+OD_MESSAGE_DEF( sidRecvSecLocHeader,        OD_T("Header section-locator"))
+OD_MESSAGE_DEF( sidRecvSecLocClasses,       OD_T("Classes section-locator"))
+OD_MESSAGE_DEF( sidRecvSecLocObjectMap,     OD_T("ObjectMap section-locator"))
+OD_MESSAGE_DEF( sidRecvSecLoc,              OD_T("Section-locator records"))
+OD_MESSAGE_DEF( sidRecvBadCrc,              OD_T("CRC does not match in %ls"))
+OD_MESSAGE_DEF( sidRecvSkip,                OD_T("Skip"))
+OD_MESSAGE_DEF( sidRecvBadAddr,             OD_T("%ls address %08X"))
+OD_MESSAGE_DEF( sidRecvFileTooShort,        OD_T("File too short"))
+OD_MESSAGE_DEF( sidRecvFailed,              OD_T("Failed"))
+OD_MESSAGE_DEF( sidRecvFinishFailed,        OD_T("Recovery failed."))
+OD_MESSAGE_DEF( sidRecvStartAudit,          OD_T("Audit recovered Database."))
+OD_MESSAGE_DEF( sidRecvRestoreObjectMap,    OD_T("Handle table (ObjectMap) was reconstructed from objects."))
+OD_MESSAGE_DEF( sidRecvTotalObs,            OD_T("Total objects in the handle table found %d."))
+OD_MESSAGE_DEF( sidRecvLoadedObs,           OD_T("Loaded objects %d (with errors %d). Invalid objects %d."))
+OD_MESSAGE_DEF( sidRecvErrorsFound,         OD_T("Total errors found during recover: %d."))
+OD_MESSAGE_DEF( sidRecvDbHeaderErr,         OD_T("Database header has errors"))
+OD_MESSAGE_DEF( sidRecvSections,            OD_T("Sections"))
+OD_MESSAGE_DEF( sidRecvObjectMap,           OD_T("ObjectMap"))
+OD_MESSAGE_DEF( sidRecvHeader,              OD_T("Header"))
+OD_MESSAGE_DEF( sidRecv2ndHeader,           OD_T("Second header"))
+OD_MESSAGE_DEF( sidRecvClasses,             OD_T("Classes"))
+OD_MESSAGE_DEF( sidRecvInvalidHandseed,     OD_T("Database handseed (%ls) is less than next available handle (%ls)"))
+OD_MESSAGE_DEF( sidRecvObject,              OD_T("Object %ls"))
+OD_MESSAGE_DEF( sidRecvObjFreeSpaceBadSize, OD_T("ObjFreeSpace data does not match section-locator ObjFreeSpace size"))
+OD_MESSAGE_DEF( sidRecvObjFreeSpaceErr,     OD_T("ObjFreeSpace section"))
+OD_MESSAGE_DEF( sidRecvTemplateErr,         OD_T("Template section"))
+OD_MESSAGE_DEF( sidRecvPreviewImgErr,       OD_T("Preview image"))
+OD_MESSAGE_DEF( sidRecvUnknownSecErr,       OD_T("Unknown section"))
+OD_MESSAGE_DEF( sidRecv2ndHdrErr,           OD_T("Second header after ObjFreeSpace data"))
+OD_MESSAGE_DEF( sidRecv2ndHdrAddrErr,       OD_T("Second header by address from file header (ObjFreeSpace end)"))
+OD_MESSAGE_DEF( sidRecvSs2ndHdr,            OD_T("Start sentinel of SecondHeader not found"))
+OD_MESSAGE_DEF( sidRecvResize,              OD_T("Resize"))
+OD_MESSAGE_DEF( sidRecvReconstruct,         OD_T("Reconstruct"))
+OD_MESSAGE_DEF( sidRecvObjectMapErr,        OD_T("ObjectMap has errors"))
+OD_MESSAGE_DEF( sidRecvRecover,             OD_T("Recover"))
+OD_MESSAGE_DEF( sidRecvAddObj,              OD_T("Add"))
+OD_MESSAGE_DEF( sidRecvBadRemainsEntry,     OD_T("Remains entry"))
+OD_MESSAGE_DEF( sidRecvClassMissed,         OD_T("Class %ls is missing"))
+OD_MESSAGE_DEF( sidRecvAddClass,            OD_T("Add class"))
+OD_MESSAGE_DEF( sidRecvClassListErr,        OD_T("Classes list"))
+OD_MESSAGE_DEF( sidRecvObjInvalid,          OD_T("Object %ls"))
+OD_MESSAGE_DEF( sidRecvObjInvalidOffset,    OD_T("Object %ls has invalid offset %08X"))
+OD_MESSAGE_DEF( sidRecvObjInvalidSize,      OD_T("Object %ls has invalid size %d"))
+OD_MESSAGE_DEF( sidRecvObjAddrInvalidSize,  OD_T("Object at address %08X has invalid size %d"))
+OD_MESSAGE_DEF( sidRecvObjHandleUnmatched,  OD_T("Object %ls has handle different from ObjectMap Handle %ls"))
+OD_MESSAGE_DEF( sidRecvObjInvalidData,      OD_T("Object %ls has invalid data"))
+OD_MESSAGE_DEF( sidRecvSkippedRec,          OD_T("Record %ls is skipped"))
+OD_MESSAGE_DEF( sidRecvRootObjInvalid,      OD_T("Root object %ls")) // class name
+OD_MESSAGE_DEF( sidRecvBadRootTables,       OD_T("Unable to recover root tables"))
+OD_MESSAGE_DEF( sidRecvBadDictionary,       OD_T("%ls (%ls)"))  // 1 - dic class, 2 - dic name
+OD_MESSAGE_DEF( sidRecvBadRecClass,         OD_T("Invalid class type of %ls"))
+OD_MESSAGE_DEF( sidRecvBadMlineStandard,    OD_T("MLineStyle Standard"))
+OD_MESSAGE_DEF( sidRecvBadPlotStNormal,     OD_T("PlotStyle Normal"))
+OD_MESSAGE_DEF( sidRecvRegAppAcad,          OD_T("RegApp ACAD"))
+OD_MESSAGE_DEF( sidRecvLinetypeByBlock,     OD_T("LineType ByBlock"))
+OD_MESSAGE_DEF( sidRecvLinetypeByLayer,     OD_T("LineType ByLayer"))
+OD_MESSAGE_DEF( sidRecvLinetypeContinuous,  OD_T("LineType Continuous"))
+OD_MESSAGE_DEF( sidRecvLayerZero,           OD_T("Layer Zero"))
+OD_MESSAGE_DEF( sidRecvPaperSpaceLayout,    OD_T("Paper Space has no Layout"))
+OD_MESSAGE_DEF( sidRecvModelSpaceLayout,    OD_T("Model Space has no Layout"))
+OD_MESSAGE_DEF( sidRecvPaperSpaceInvalid,   OD_T("Paper Space"))
+OD_MESSAGE_DEF( sidRecvModelSpaceInvalid,   OD_T("Model Space"))
+OD_MESSAGE_DEF( sidRecvBadSectionAddr,      OD_T("Unable to recover address of section %ls"))
+OD_MESSAGE_DEF( sidRecvGrDataLength,        OD_T("GrData of entity %ls has invalid length %d"))
+OD_MESSAGE_DEF( sidCantRestoreProxy,        OD_T("Can't restore %ls from Proxy"))
+OD_MESSAGE_DEF( sidEmptyProxyEntity,        OD_T("Empty proxy entity %ls"))
+OD_MESSAGE_DEF( sidUnexpectedProxyFormat,   OD_T("Proxy object of AC21 version uses unexpected format of binary data"))
+// Recover R12
+OD_MESSAGE_DEF( sidRecvHeaderErr,           OD_T("File header has errors"))
+OD_MESSAGE_DEF( sidRecv2ndHeaderErr,        OD_T("Second file header has errors"))
+OD_MESSAGE_DEF( sidRecvTableRecsErr,        OD_T("Table %ls records section has error(s)"))
+OD_MESSAGE_DEF( sidRecvTableRecordErr,      OD_T("%ls record (index = %d) has error: %ls"))
+OD_MESSAGE_DEF( sidRecvEntityErr,           OD_T("Load entity %ls on address %X error"))
+OD_MESSAGE_DEF( sidRecvDuplHandle,          OD_T("Duplicate or invalid handle %ls"))
+OD_MESSAGE_DEF( sidRecvBadRecIndex,         OD_T("Invalid record index %d"))
+// Warnings
+OD_MESSAGE_DEF( sidNoDimBlockGenerated,     OD_T("Dimension block missing. %ls will be removed.")) // param: Dimension description
+OD_MESSAGE_DEF( sidUnknownDXFversion,       OD_T("Unknown DXF file version."))  // Not used anymore
+OD_MESSAGE_DEF( sidBinaryIncompatible,      OD_T("Module %ls has incompatible version"))
+OD_MESSAGE_DEF( sidErrorUnloadingModule,    OD_T("Error unloading module \"%ls\"\nOdError: %ls"))
+OD_MESSAGE_DEF( sidErrorNotThatKindOfClass, OD_T("Object of class %ls can't be cast to %ls."))
+OD_MESSAGE_DEF( sidViewHasInvalidLensLength,OD_T("Paper Space View \"%ls\" has lens length value other than 50.0 (%g). Acad crashes on such dxf files. It will be saved as 50.0."))
+OD_MESSAGE_DEF( sidNoCPConversionTable,     OD_T("Code page conversion is impossible because conversion table for \"%ls\" is missing."))
+// Table
+OD_MESSAGE_DEF( sidTableStyle,              OD_T("TableStyle (%ls)"))
+
+OD_MESSAGE_DEF( sidAuditFailed,             OD_T("Audit Failed"))
+
+OD_MESSAGE_DEF( sidRefToBlockIsCyclic,      OD_T("Reference to Block %ls is cyclic"))
+OD_MESSAGE_DEF( sidCurrentDimstyle,         OD_T("Database current: %ls")) // param: Dimstyle name
+
+OD_MESSAGE_DEF( sidRequiresIntegerBetween,  OD_T("Requires an integer between %d and %d."))
+OD_MESSAGE_DEF( sidRequiresRealBetween,     OD_T("Requires a real between %g and %g."))
+OD_MESSAGE_DEF( sidRequiresNOrNOnly,        OD_T("Requires %d or %d only."))
+OD_MESSAGE_DEF( sidRequiresModelSpace,      OD_T("%ls only valid in Model Space.")) // param: Name of system variable
+OD_MESSAGE_DEF( sidCommandCanceled,         OD_T("Command canceled."))
+OD_MESSAGE_DEF( sidCancel,                  OD_T("*Cancel*"))
+
+// Progress meter
+OD_MESSAGE_DEF( sidPmSavingTo,              OD_T("Saving to %ls ..."))
+OD_MESSAGE_DEF( sidPmAuditing,              OD_T("Auditing..."))
+OD_MESSAGE_DEF( sidPmPreloadingR14,         OD_T("Pre-Loading R14 .dwg file..."))
+OD_MESSAGE_DEF( sidPmLoadingHandles,        OD_T("Loading Handles..."))
+OD_MESSAGE_DEF( sidPmLoadingDWGfile,        OD_T("Loading .dwg file..."))
+OD_MESSAGE_DEF( sidPmLoadingFrom,           OD_T("Loading from %s ..."))
+OD_MESSAGE_DEF( sidPmRecoveringDWGfile,     OD_T("Recovering .dwg file..."))
+OD_MESSAGE_DEF( sidPmRecoveringFileHeader,  OD_T("Recovering file header..."))
+OD_MESSAGE_DEF( sidPmRecoveringObjects,     OD_T("Recovering objects..."))
+OD_MESSAGE_DEF( sidPmRecoveringObjectMap,   OD_T("Loading Object Map from Objects..."))
+OD_MESSAGE_DEF( sidPmLoadingObjectMap,      OD_T("Loading Object Map..."))
+OD_MESSAGE_DEF( sidPmLoadingDXFFile,        OD_T("Loading .dxf file..."))
+OD_MESSAGE_DEF( sidPmResolvingHeaderRoundtrip, OD_T("Resolving header round trip..."))
+OD_MESSAGE_DEF( sidPmUndoingConversion,     OD_T("Undoing conversion"))
+OD_MESSAGE_DEF( sidPmDatabaseConversion,    OD_T("Database conversion : "))
+
+OD_MESSAGE_DEF( sidCannotSetVarToThatValue, OD_T("Cannot set %s to that value."))
+OD_MESSAGE_DEF( sidDuplicateOwnership,      OD_T("Duplicate ownership of reference %ls"))
+OD_MESSAGE_DEF( sidBadDxfHeader,            OD_T("Error in drawing header on line/offset %d."))
+OD_MESSAGE_DEF( sidBadDxf,                  OD_T("Syntax error or premature end of file on line/offset %d."))
+OD_MESSAGE_DEF( sidLayoutInvalidModelType,  OD_T("Layout has invalid ModelType flag"))
+
+// Font
+OD_MESSAGE_DEF( sidFontSubstitution,              OD_T("Substituting font \"%ls\" by font \"%ls\""))
+OD_MESSAGE_DEF( sidFontSubstitutedPath,           OD_T("  (font path: \"%ls\")"))
+OD_MESSAGE_DEF( sidFontSubstitutionByDefault,     OD_T("Substituting font \"%ls\" by default font."))
+OD_MESSAGE_DEF( sidGdtFontSubstitutionByDefault,  OD_T("Substituting font \"%ls\" by default gdt font."))
+
+// Spa
+OD_MESSAGE_DEF( sidSpaModelingOperationError,    OD_T("Modeling operation error:\n%ls"))
+
+// 2dConstraintsGroup
+OD_MESSAGE_DEF( sidNodesNotSorted,    OD_T("Nodes are not sorted (will be fixed)"))
+OD_MESSAGE_DEF( sidSorted,    OD_T("Sorted"))
+
+// AssocArray
+OD_MESSAGE_DEF( sidAssArrAbsentSrcBTR,      OD_T("Id Source BTR"))
+OD_MESSAGE_DEF( sidAssArrItemProviderId,    OD_T("Entity provider of AssocArrayItem locator(\"%d\", \"%d\", \"%d\")"))
+
+OD_MESSAGE_DEF( sidIdViewObjsDxf,    OD_T("Inventor exported custom objects can't be saved to .dxf. Their geometry will be lost."))
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbAssocProjectedEntityPersSubentIdHolder.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbAssocProjectedEntityPersSubentIdHolder.h
new file mode 100755
index 0000000..944efaf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbAssocProjectedEntityPersSubentIdHolder.h
@@ -0,0 +1,108 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_ASSOCPROJECTEDENTITYPERSSUBENTIDHOLDER_H
+#define OD_ASSOCPROJECTEDENTITYPERSSUBENTIDHOLDER_H
+
+#include "ModelDocObjExports.h"
+#include "DbEntity.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbAssocProjectedEntityPersSubentIdHolder : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbAssocProjectedEntityPersSubentIdHolder);
+
+  OdDbAssocProjectedEntityPersSubentIdHolder();
+  virtual ~OdDbAssocProjectedEntityPersSubentIdHolder();
+
+  //virtual void copied(const OdDbObject*,const OdDbObject*);
+  //virtual void modified(const OdDbObject*);
+  //virtual OdResult getPlane(OdGePlane& gePlane, OdDb::Planarity& gePlanarity) const;
+  //virtual OdResult subErase(int);
+  //virtual OdResult getSubentityGeometry(const OdDbSubentId&,OdGePoint3d &,OdGeCurve3d const * &,OdGeSurface const * &) const;
+  //virtual OdResult getEdgeVertexSubentities(const OdDbSubentId&,OdDbSubentId&,OdDbSubentId&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&);
+  //virtual OdResult getEdgeVertexSubentities(const OdDbSubentId&,OdDbSubentId&,OdDbSubentId&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&);
+  //virtual OdResult getAllSubentities(unsigned long,OdArray<OdDbSubentId>&);
+  //virtual OdResult getAllSubentities(const OdDbSourceEdgeRef&,unsigned long,OdArray<OdDbSubentId>&);
+  //virtual OdResult getTransientSubentIds(const OdDbAssocIndexPersSubentId&,OdArray<OdDbSubentId>&) const;
+  //OdResult releasePersSubent(const OdDbAssocIndexPersSubentId&);
+  //virtual OdDbAssocIndexPersSubentId createNewPersSubent(const OdDbSubentId&);
+  //virtual OdResult getSourceSubentity3d(const OdDbSubentId&,OdDbSubentRef*&,int*);
+  //virtual OdResult syncUpWithSourceEntity3d(bool);
+  //virtual bool isInSyncWithSourceEntity3d(int) const;
+  //virtual void enableSourceEntity3dChangeTracking(bool,int);
+  //virtual bool isTrackingSourceEntity3dChanges(int) const;
+  //virtual OdResult setTransform(OdGeMatrix3d const &);
+  //virtual OdGeMatrix3d const & transform() const;
+  //virtual OdResult setTransform3d(OdGeMatrix3d const &);
+  //virtual OdGeMatrix3d const & transform3d() const;
+  //virtual OdResult setProjectionProvider(const OdDbObjectId&);
+  //virtual OdDbObjectId projectionProvider() const;
+  //OdResult setCurrentSourceId(int);
+  //virtual OdResult fixupSourceEntity3d(const OdDbCompoundObjectId&,int);
+  //int currentSourceId() const;
+  //OdArray<int> sourceIds() const;
+  //virtual OdResult setSourceEntity3d(const OdDbCompoundObjectId&,int);
+  //virtual const OdDbCompoundObjectId& sourceEntity3d(bool,int) const;
+  //virtual OdResult resumeAndSyncUpWithSourceEntity3d();
+  //virtual OdResult visit(const OdDbAssocProjectedEntityPersSubentIdVisitor*);
+  //virtual bool suspendPersIdNodes(OdDbAssocPersSubentIdSuspendCallback*);
+  //virtual void removeAllTransientSubentIds();
+  //virtual void reset(bool);
+  //virtual bool contains(const OdDbSourceEdgeRef&) const;
+  //virtual bool isEmpty() const;
+  //virtual OdResult getEdgeVertexSubentities(const OdDbSubentId&,OdDbSubentId&,OdDbSubentId&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&);
+  //virtual OdResult getEdgeVertexSubentities(const OdDbSubentId&,OdDbSubentId&,OdDbSubentId&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&);
+  //virtual OdResult getEdgeVertexSubentities(const OdDbSubentId&,OdDbSubentId&,OdDbSubentId&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&,OdArray<OdDbSubentId>&);
+
+  //static const int kCurrentSourceId;
+  ////static void attachPEs();
+  //static void uninit();
+  //static void init();
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  //virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  //virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbAssocProjectedEntityPersSubentIdHolder object pointers.
+*/
+typedef OdSmartPtr<OdDbAssocProjectedEntityPersSubentIdHolder> OdDbAssocProjectedEntityPersSubentIdHolderPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_ASSOCPROJECTEDENTITYPERSSUBENTIDHOLDER_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbDetailSymbol.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbDetailSymbol.h
new file mode 100755
index 0000000..8a6b35e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbDetailSymbol.h
@@ -0,0 +1,173 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DETAILSYMBOL_H
+#define OD_DETAILSYMBOL_H
+
+#include "DbViewSymbol.h"
+#include "DbDetailViewStyle.h"
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents a Detail Symbol entity.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbDetailSymbol : public OdDbViewSymbol
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbDetailSymbol);
+
+  /** \details
+    Default constructor. Creates an OdDbDetailSymbol instance.
+  */
+  OdDbDetailSymbol();
+  ~OdDbDetailSymbol();
+
+  /** \details
+    Defines boundary types for Detail Symbol entities.
+  */
+  enum BoundaryType
+  {
+    kCircularBoundary,		// Circular boundary
+    kRectangularBoundary,	// Rectangular boundary
+    kCustomBoundary       // Custom boundary type
+  };
+
+
+  /** \details
+    Defines which property of the style is overridden.
+  */
+  enum OverriddenProperty
+  {
+    kNone = 0,				// No properties are overridden
+    kModelEdge = 0x1,			// Indicates the model edge type of the corresponding OdDbDetailViewStyle object has been overridden.
+    kIdentifierPosition = 0x1 << 1	// Indicates the identifier placement of the corresponding OdDbDetailViewStyle object has been overridden.
+  };
+
+  /** \details
+    Returns the boundary type for this OdDbDetailSymbol object as a value defined in the BoundaryType enumeration. 
+  */
+  BoundaryType boundaryType() const;
+
+  /** \details
+    Returns the type of the model edge as a value defined in the OdDbDetailViewStyle::ModelEdge enumeration. 
+  */
+  OdDbDetailViewStyle::ModelEdge modelEdgeType() const;
+
+  /** \details
+    Returns true only if the specified property is overridden.
+
+    \param property [in]  The property value to check if it's overridden from the corresponding detail view style. 
+    All applicable values are defined in the OverriddenProperty enumeration.
+  */
+  bool isOverriddenProperty(OdDbDetailSymbol::OverriddenProperty property) const;
+
+  /** \details
+    Returns whether the identifier of this Detail Symbol entity must be displayed.
+  */
+  bool displayIdentifier() const;
+
+
+  /** \details
+    Returns the origin of this Detail Symbol entity.
+  */
+  OdGePoint3d origin() const;
+
+  /** \details
+    Returns the direction of this Detail Symbol entity.
+  */
+  const OdGeVector3d direction() const;
+
+  /** \details
+    Returns the boundary size of this Detail Symbol entity.
+  */
+  const OdGeVector2d& boundarySize() const;
+
+  /** \details
+    Returns the origin of the model edge of of this Detail Symbol entity.
+  */
+  const OdGePoint3d& modelEdgeOrigin() const;
+
+  /** \details
+    Returns the scale parameter of the parent view.
+  */
+  double owningViewScale() const;
+
+  /** \details
+    Returns the scale parameter of the associated detail view.
+  */
+  double detailViewScale() const;
+
+  /** \details
+    Returns the model edge direction of this Detail Symbol entity.
+  */
+  const OdGeVector3d& modelEdgeDirection() const;
+
+  /** \details
+    Returns the identifier position of this Detail Symbol entity.
+  */
+  const OdGePoint3d identifierPosition() const;
+
+  // Methods to use internal only :
+  OdResult setIdentifierPosition( const OdGePoint3d& pt );
+
+  OdResult setDetailViewScale( double viewScale );
+  OdResult setOwningViewScale( double viewScale );
+
+  OdResult setBoundaryType( OdDbDetailSymbol::BoundaryType bndType );
+
+  OdResult setModelEdgeType( OdDbDetailViewStyle::ModelEdge modelEdgeType );
+  OdResult setModelEdgeOrigin( const OdGePoint3d& pt );
+  OdResult setModelEdgeDirection( const OdGeVector3d& dir );
+
+  OdResult setDisplayIdentifier( const bool displayIdentifier );
+
+  OdResult setOrigin( const OdGePoint3d& pt );
+  OdResult setBoundarySize( const OdGeVector2d& size );
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdGiDrawable methods :
+  virtual bool subWorldDraw(OdGiWorldDraw* pWorldDraw) const;
+
+  virtual OdResult subTransformBy( const OdGeMatrix3d& xfm ) ODRX_OVERRIDE;
+  virtual OdResult subGetGripPoints( OdGePoint3dArray& gripPoints ) const ODRX_OVERRIDE;
+  virtual OdResult subMoveGripPointsAt( const OdIntArray& indices, const OdGeVector3d& offset ) ODRX_OVERRIDE;
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbDetailSymbol object pointers.
+*/
+typedef OdSmartPtr<OdDbDetailSymbol> OdDbDetailSymbolPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_DETAILSYMBOL_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSectionSymbol.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSectionSymbol.h
new file mode 100755
index 0000000..984226f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSectionSymbol.h
@@ -0,0 +1,204 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_SECTIONSYMBOL_H
+#define OD_SECTIONSYMBOL_H
+
+#include "DbViewSymbol.h"
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents Section Symbol entities.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbSectionSymbol : public OdDbViewSymbol
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSectionSymbol);
+
+  /** \details
+    Default constructor. Creates an OdDbDetailSymbol instance.
+  */
+  OdDbSectionSymbol();
+  ~OdDbSectionSymbol();
+
+  /** \details
+    Returns the number of points in the section line of this Section Symbol entity.
+  */
+  int sectionPointsCount() const;
+
+  /** \details
+    Gets all points in the section line of this Section Symbol entity.
+
+    \param pts [out]  Receives section line points.
+  */
+  void getSectionPoints(OdGePoint3dArray& pts) const;
+
+  /** \details
+    Gets values of label offset from all vertices.
+
+    \param offsets [out]  Receives offset vectors.
+  */
+  void getLabelOffsets(OdGeVector3dArray& offsets) const;
+
+  /** \details
+    Gets the section line point at the specified index. 
+
+    \param idx [in]  Index of the section line vertex.
+    \param pt [out]  Receives the point at the index idx.
+
+    \note
+    eOk value if successful, eOutOfRange if idx is out of range (idx > sectionPointsCount()).
+  */
+  OdResult getSectionPointAt(int idx, OdGePoint3d& pt) const;
+
+  /** \details
+    Gets the section vertex bulge parameter at the specified index. 
+
+    \param idx [in]  Index of the section symbol vertex.
+    \param bulge [out]  Receives the bulge at the index idx.
+
+    \note
+    eOk value if successful, eOutOfRange if idx is out of range (idx > sectionPointsCount()).
+  */
+  OdResult getBulgeAt(int idx, double& bulge) const;
+
+  /** \details
+    Gets the label at the specified vertex index. 
+
+    \param idx [in]  Index of the section symbol vertex.
+    \param sName [out]  Receives the string that represents label.
+
+    \note
+    eOk value if successful, eOutOfRange if idx is out of range (idx > sectionPointsCount()).
+  */
+  OdResult getLabelNameAt(int idx, OdString& sName) const;
+
+
+  /** \details
+    Gets the label offset value from the specified vertex. 
+
+    \param idx [in]  Index of the section symbol vertex.
+    \param offset [out]  Receives the offset value.
+
+    \note
+    eOk value if successful, eOutOfRange if  idx is out of range (idx > sectionPointsCount()).
+  */
+  OdResult getLabelOffsetAt(int idx, OdGeVector3d& offset) const;
+
+  /** \details
+    Checks whether the view direction of the section symbol is left.
+
+    \note
+    Returns true only if the view direction is left, and false otherwise.
+  */
+  bool isViewDirectionLeft() const;
+  void setViewDirectionLeft(bool bLeft);
+
+  /** \details
+    Checks whether the section symbol defines a half or full section.
+
+    \note
+    Returns true only if the section symbol defines a half section cut, false for full sections.
+  */
+  bool isHalfSection() const;
+  void setIsHalfSection(bool bHalf);
+
+  // Methods to use internal only :
+
+  /** \details
+    Appends new point of section line.
+
+    \param pt [in]  Point of the section line.
+    \param bulge [in]  Value of bulge.
+
+    \note
+    eOk value if successful.
+  */
+  OdResult addSectionPoint(const OdGePoint3d& pt, double bulge = 0);
+
+  /** \details
+    Modifies point by index.
+
+    \param idx [in]  Index of the section symbol vertex.
+    \param pt [in]  New value of point.
+    \param bulge [in]  Value of bulge.
+
+    \note
+    eOk value if successful, eOutOfRange if idx is out of range (idx > sectionPointsCount()).
+  */
+  OdResult setSectionPointAt(int idx, const OdGePoint3d& pt, double bulge = 0);
+
+ /** \details
+    Modifies label name by index.
+
+    \param idx [in]  Index of the section symbol vertex.
+    \param name [in]  Name of label.
+
+    \note
+    eOk value if successful, eOutOfRange if idx is out of range (idx > sectionPointsCount()).
+ */
+  OdResult setLabelNameAt(int idx, const OdString & name);
+
+ /** \details
+    Modifies label offset by index.
+
+    \param idx [in]  Index of the section symbol vertex.
+    \param offset [in]  Value of label's offset.
+
+    \note
+    eOk value if successful, eOutOfRange if idx is out of range (idx > sectionPointsCount()).
+ */
+  OdResult setLabelOffsetAt(int idx, const OdGeVector3d& offset);
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  // OdGiDrawable methods :
+  virtual bool subWorldDraw(OdGiWorldDraw* pWorldDraw) const;
+
+  // Methods to use internal only :
+  //OdResult setSectionPoints(const OdGePoint3dArray& pts);
+  //OdResult setSectionPoints(const OdGePoint3dArray& pts, const OdGeDoubleArray& bulges);
+  //OdResult removeSectionPointAt(int idx);
+  //void clearSectionPoints();
+  //OdResult setLabelNames(const OdArray<OdString>& names);
+  //OdResult setLabelOffsets(const OdGeVector3dArray& offsets);
+  //void resetLabelOffsets(bool allOffsets = true);
+  //bool flipDirection();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSectionSymbol object pointers.
+*/
+typedef OdSmartPtr<OdDbSectionSymbol> OdDbSectionSymbolPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_SECTIONSYMBOL_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSynergy.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSynergy.h
new file mode 100755
index 0000000..bea99d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbSynergy.h
@@ -0,0 +1,190 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_SYNERGY_H
+#define OD_SYNERGY_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+//namespace OdSynergyObj
+//{
+//  enum ViewEdgeLayerStyleType {};
+//  enum ViewEdgeType {};
+//  enum ViewRepZoneType {};
+//}
+
+//class MODELDOCOBJ_EXPORT OdDbSynergyLayerMapping : public OdDbObject
+//{
+//public:
+//  ODDB_DECLARE_MEMBERS(OdDbSynergyLayerMapping);
+//  OdDbSynergyLayerMapping();
+//  virtual ~OdDbSynergyLayerMapping();
+//
+//  //void layerIds(OdArray<OdDbObjectId>&) const;
+//  //void removeLayerId(enum OdSynergyObj::ViewEdgeLayerStyleType);
+//  //void addLayerId(enum OdSynergyObj::ViewEdgeLayerStyleType, OdDbObjectId);
+//  //bool layerId(enum OdSynergyObj::ViewEdgeLayerStyleType, OdDbObjectId&) const;
+//
+//protected:
+//  // OdDbObject methods :
+//  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+//  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+//  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+//  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+//};
+
+//class MODELDOCOBJ_EXPORT OdDbIdwViewMapping : public OdDbObject
+//{
+//public:
+//  ODDB_DECLARE_MEMBERS(OdDbIdwViewMapping);
+//  OdDbIdwViewMapping();
+//  virtual ~OdDbIdwViewMapping();
+//
+//  void setViewRepId(OdDbObjectId);
+//  OdDbObjectId viewRepId() const;
+//  void setViewportId(OdDbObjectId);
+//  OdDbObjectId viewportId() const;
+//  void setInventorViewId(OdUInt64);
+//  OdUInt64 inventorViewId() const;
+//  
+//protected:
+//  // OdDbObject methods :
+//  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+//  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+//  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+//  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+//};
+
+//class MODELDOCOBJ_EXPORT OdDbIdwSheetMapping : public OdDbObject
+//{
+//public:
+//  ODDB_DECLARE_MEMBERS(OdDbIdwSheetMapping);
+//  OdDbIdwSheetMapping();
+//  virtual ~OdDbIdwSheetMapping();
+//
+//  //bool hasInventorModelDocViews() const;
+//  //OdResult invalidIds(OdArray<OdUInt64>&) const;
+//  //OdResult update(OdArray<OdUInt64>&);
+//  //bool eraseViewMappingByViewRepId(OdDbObjectId);
+//  //bool eraseViewMappingByViewportId(OdDbObjectId);
+//  //bool eraseViewMappingByViewId(OdUInt64);
+//  //OdDbIdwViewMapping* addIdwViewMapping(OdUInt64, OdDbObjectId, OdDbObjectId);
+//  //const OdDbIdwViewMapping* idwViewMappingByViewRepId(OdDbObjectId) const;
+//  //const OdDbIdwViewMapping* idwViewMappingByViewportId(OdDbObjectId) const;
+//  //const OdDbIdwViewMapping* idwViewMappingByViewId(OdUInt64) const;
+//  //OdDbIdwViewMapping* idwViewMappingByViewRepId(OdDbObjectId);
+//  //OdDbIdwViewMapping* idwViewMappingByViewportId(OdDbObjectId);
+//  //OdDbIdwViewMapping* idwViewMappingByViewId(OdUInt64);
+//  //void setLayoutId(OdDbObjectId);
+//  //OdDbObjectId layoutId() const;
+//  //void setIdwSheetId(unsigned long);
+//  //unsigned long idwSheetId() const;
+//
+//protected:
+//  // OdDbObject methods :
+//  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+//  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+//  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+//  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+//
+////private: 
+////  void eraseViewMappings();
+//};
+
+/** \details
+    This class and its functions are not currently implemented.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbSynergyMappings : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbSynergyMappings);
+  OdDbSynergyMappings();
+  virtual ~OdDbSynergyMappings();
+
+  //bool hasInventorModelDocViews(class OdDbDatabase *) const;
+  //OdResult allLayoutIds(OdArray<OdDbObjectId>&) const;
+  //OdResult invalidIds(OdArray<unsigned long>&, OdArray<OdUInt64>&) const;
+  //const OdDbSynergyLayerMapping& layerMapping() const;
+  //OdDbSynergyLayerMapping& layerMapping();
+  //OdResult update(OdArray<unsigned long>&, OdArray<OdUInt64>&);
+  //bool eraseAllIdwSheetMappings();
+  //bool eraseIdwSheetMappingByLayoutId(OdDbObjectId);
+  //bool eraseIdwSheetMappingBySheetId(unsigned long);
+  //OdDbIdwSheetMapping* addIdwSheetMapping(unsigned long,OdDbObjectId);
+  //const OdDbIdwSheetMapping* idwSheetMappingByLayoutId(OdDbObjectId) const;
+  //const OdDbIdwSheetMapping* idwSheetMappingBySheetId(unsigned long) const;
+  //OdDbIdwSheetMapping* idwSheetMappingByLayoutId(OdDbObjectId);
+  //OdDbIdwSheetMapping* idwSheetMappingBySheetId(unsigned long);
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  // virtual subErase
+
+//private:
+//  void eraseIdwSheetMappings();
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSynergyMappings object pointers.
+*/
+typedef OdSmartPtr<OdDbSynergyMappings> OdDbSynergyMappingsPtr;
+
+/** \details
+    This class and its functions are not currently implemented.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+//class MODELDOCOBJ_EXPORT OdDbSynergyBulletin : public OdDbObject
+//{
+//public:
+//  ODDB_DECLARE_MEMBERS(OdDbSynergyBulletin);
+//  OdDbSynergyBulletin();
+//  virtual ~OdDbSynergyBulletin();
+//
+//protected:
+//  // OdDbObject methods :
+//  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+//  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+//  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+//  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+//};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSynergyBulletin object pointers.
+*/
+//typedef OdSmartPtr<OdDbSynergyBulletin> OdDbSynergyBulletinPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_SYNERGY_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewBorder.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewBorder.h
new file mode 100755
index 0000000..f7b472a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewBorder.h
@@ -0,0 +1,304 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWBORDER_H
+#define OD_VIEWBORDER_H
+
+#include "DbEntity.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents the border entity that is used by model documentation views and defines the region for placing the view on the layout.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewBorder : public OdDbEntity
+{
+  friend class OdDbAssocViewRepActionBody;
+  friend class OdDbImpAssocViewRepActionBody;
+  //friend class OdDbViewBorderImpl;
+  //friend class OdDbViewSymbolImpl;
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewBorder);
+
+  /** \details
+    Default constructor. Creates an OdDbViewBorder instance.
+  */
+  OdDbViewBorder();
+  virtual ~OdDbViewBorder();
+
+
+  /** \details
+    Defines view style types.
+  */
+  enum ViewStyleType 
+  {
+    kFromBase               = 0,  // The style defined by the base view.
+    kWireframeVisibleEdges  = 1,  // Wireframe style with visible edges only.
+    kWireframeHiddenEdges   = 2,  // Wireframe style with hidden edges displayed.
+    kShadedVisibleEdges     = 3,  // Shaded style with visible edges only.
+    kShadedHiddenEdges      = 4   // Shaded style with hidden edges displayed.
+  };
+
+  /** \details
+    Defines the types of source data of the documentation view. Views can be created from model space or from external Autodesk Inventor or Inventor Fusion files. 
+  */
+  enum SourceType
+  {
+    kSourceNotDefined   = 0,  // Source type is not defined.
+    kInventorSource     = 1,  // Source data is from an Autodesk Inventor file.
+    kFusionSource       = 2,  // Source data is from an Autodesk Inventor Fusion file.
+    kModelSpaceSource   = 3   // Source data is from model space.
+  };
+
+  /** \details
+    Returns WCS coordinates of the center point of the view border entity in paper space. 
+  */
+  OdGePoint3d insertionPoint() const;
+
+  /** \details
+    Returns the height of the view border entity. 
+  */
+  double height() const;
+
+  /** \details
+    Returns the width of the view border entity. 
+  */
+  double width() const;
+
+  /** \details
+    Returns the source data type of the model documentation view as a SourceType enumeration value.
+  */
+  OdDbViewBorder::SourceType sourceType() const;
+
+  /** \details
+    Returns the full path to a referenced Autodesk Inventor file.
+
+    \note
+    Returns a String object that contains the full path to the Inventor file.
+    If the view source type isn't SourceType::kInventorSource, the method returns an empty string.
+  */
+  OdString inventorFileReference() const;
+
+  /** \details
+    Returns true value if the projection type is the first angle and false otherwise.
+  */
+  bool isFirstAngleProjection() const;
+
+  /** \details
+    Returns the rotation angle of the model documentation view around the line of sight 
+    (vector perpendicular to the display, going from the front of display toward the back). 
+    Zero angle is on the X-axis of the display coordinate system, and positive direction of rotation is counterclockwise.
+
+    \note
+    Returns the view's rotation angle in radians as a double value.
+  */
+  double rotationAngle() const;
+
+
+  /** \details
+    Returns the view style type as a ViewStyleType enumeration value.
+  */
+  OdDbViewBorder::ViewStyleType viewStyleType() const;
+
+  /** \details
+    Returns the scale factor of the model documentation view. 
+    The scale factor defines a ratio between paper space units and viewport units in model space.
+    For example, if the scale factor is 2 that means 1 unit of the viewport maps to 2 units in paper space.  
+  */
+  double scale() const;
+
+  /** \details
+    Returns the DPI value for the views with the shaded view styles (ViewStyleType::kShadedVisibleEdges, ViewStyleType::kShadedHiddenEdges).  
+  */
+  OdUInt32 shadedDPI() const;
+
+  /** \details
+    Returns ObjectId of the associated OdDbViewport object.  
+  */
+  OdDbObjectId viewportId() const;
+  OdResult setViewportId(const OdDbObjectId& viewportId);
+
+protected:
+  // OdGiDrawable methods :
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  virtual void subHighlight(bool bDoIt = true, const OdDbFullSubentPath* pSubId = 0, bool highlightAll = false) const;
+
+  //// OdDbObject methods :
+  //virtual OdResult subErase(bool erasing);
+  //virtual OdResult subDeepClone(OdDbObject* pOwnerObject, OdDbObject*& pClonedObject, 
+  //                              OdDbIdMapping& idMap, bool isPrimary = true) const;
+  //virtual OdResult subWblockClone(OdRxObject* pOwnerObject, OdDbObject*& pClonedObject, 
+  //                                OdDbIdMapping& idMap, bool isPrimary = true) const;
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+public:
+  //virtual void audit(OdDbAuditInfo* pAuditInfo);
+
+  //virtual OdResult subGetStretchPoints(OdGePoint3dArray& stretchPoints) const;
+  //virtual OdResult subMoveStretchPointsAt(const OdIntArray& indices, 
+  //                                        const OdGeVector3d& offset);
+
+  // OdDbEntity methods :
+  //virtual OdResult subGetGripPoints(OdDbGripDataPtrArray& grips, 
+  //                                  const double curViewUnitSize, 
+  //                                  const int gripSize, 
+  //                                  const OdGeVector3d& curViewDir, 
+  //                                  const int bitflags) const;
+  //virtual OdResult subGetGripPoints(OdGePoint3dArray& gripPoints, 
+  //                                  OdIntArray& osnapModes, 
+  //                                  OdIntArray& geomIds) const;
+  //virtual OdResult subMoveGripPointsAt(const OdDbVoidPtrArray& gripAppData,
+  //                                     const OdGeVector3d& offset, 
+  //                                     const int bitflags);
+  //virtual OdResult subMoveGripPointsAt(const OdIntArray& indices, 
+  //                                     const OdGeVector3d& offset);
+  //virtual void subGripStatus(const OdDb::GripStat status);
+
+  //virtual OdResult subGetOsnapPoints(OdDb::OsnapMode osnapMode, 
+  //                                   OdGsMarker gsSelectionMark, 
+  //                                   const OdGePoint3d& pickPoint, 
+  //                                   const OdGePoint3d& lastPoint, 
+  //                                   const OdGeMatrix3d& viewXform, 
+  //                                   OdGePoint3dArray& snapPoints, 
+  //                                   OdIntArray& geomIds) const;
+  //virtual OdResult subGetOsnapPoints(OdDb::OsnapMode osnapMode, 
+  //                                   OdGsMarker gsSelectionMark, 
+  //                                   const OdGePoint3d& pickPoint, 
+  //                                   const OdGePoint3d& lastPoint, 
+  //                                   const OdGeMatrix3d& viewXform, 
+  //                                   OdGePoint3dArray& snapPoints, 
+  //                                   OdIntArray& geomIds, 
+  //                                   const OdGeMatrix3d& insertionMat) const;
+
+  //virtual OdResult subIntersectWith(const OdDbEntity* pEnt, 
+  //                                  OdDb::Intersect intType, 
+  //                                  const OdGePlane& projPlane, 
+  //                                  OdGePoint3dArray& points, 
+  //                                  OdGsMarker thisGsMarker = 0, 
+  //                                  OdGsMarker otherGsMarker = 0) const;
+
+  //virtual OdResult subIntersectWith(const OdDbEntity* pEnt, 
+  //                                  OdDb::Intersect intType, 
+  //                                  OdGePoint3dArray& points, 
+  //                                  OdGsMarker thisGsMarker = 0, 
+  //                                  OdGsMarker otherGsMarker = 0) const;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xform);
+
+  //virtual OdResult subGetClassID(CLSID* pClsid) const;
+
+  //virtual void subList() const;
+
+  //virtual void subHighlight(bool bDoIt = true, 
+  //                          const OdDbFullSubentPath* pSubId = 0, 
+  //                          bool highlightAll = false) const;
+
+  //virtual  OdResult  subGetSubentPathsAtGsMarker(OdDb::SubentType type,
+  //                                               OdGsMarker gsMark, 
+  //                                               const OdGePoint3d& pickPoint,
+  //                                               const OdGeMatrix3d& viewXform, 
+  //                                               int& numPaths,
+  //                                               OdDbFullSubentPath*& subentPaths, 
+  //                                               int numInserts = 0,
+  //                                               OdDbObjectId* entAndInsertStack = NULL) const;
+
+  //virtual  OdResult  subGetGsMarkersAtSubentPath(const OdDbFullSubentPath* pSubPath, 
+  //                                               OdArray<OdGsMarker>& gsMarkers) const;
+
+  //virtual  OdResult  subGetSubentClassId(const OdDbFullSubentPath* pSubPath, CLSID* clsId) const;
+
+  //virtual void saveAs(OdGiWorldDraw* mode, OdDb::SaveType st);
+
+  //virtual OdResult setLayer(const OdString& newVal,
+  //                          bool doSubents = true,
+  //                          bool allowHiddenLayer = false);
+  //virtual OdResult setLayer(OdDbObjectId newVal,
+  //                          bool doSubents = true,
+  //                          bool allowHiddenLayer = false);
+
+public:
+  // Internal use only methods:
+  //OdResult setViewportId(const OdDbObjectId& viewportId);
+  OdGePoint2d centerPoint(bool exludeSketchEnts = true) const;
+  OdGePoint3d centerPoint3d(bool exludeSketchEnts = true) const;
+  OdResult getSize(OdGePoint3d& minPt, OdGePoint3d& maxPt) const;
+  OdResult setSize(const OdGePoint3d& minPt, const OdGePoint3d& maxPt);
+  void setScale(double newScale);
+  //OdResult recalculateBorder();
+
+  //void setTransientEnts(const OdArray<OdDbEntity*>& traientEnts);
+  //void setDisableUnHighlight(bool bIsDisable);
+  //bool hitTest(const OdGePoint3d& inputPt) const;
+
+  // Internal use only methods: subentity related methods
+  //OdResult getSubentColor(const OdDbSubentId& subentId, OdCmColor& color) const;
+  //OdResult setSubentColor(const OdDbSubentId& subentId, const OdCmColor& color);
+
+  //OdResult getSubentLayerId(const OdDbSubentId& subentId, OdDbObjectId& layerId) const;
+  //OdResult setSubentLayer(const OdDbSubentId& subentId, OdDbObjectId newVal);
+
+  //OdResult getSubentLinetypeId(const OdDbSubentId& subentId, OdDbObjectId& linetypeId) const;
+  //OdResult setSubentLinetype(const OdDbSubentId& subentId, OdDbObjectId newVal);
+
+  //OdResult getSubentLinetypeScale(const OdDbSubentId& subentId, double& linetypeScale) const;
+  //OdResult setSubentLinetypeScale(const OdDbSubentId& subentId, double newVal);
+
+  //const OdString& getSubentPlotStyleName(const OdDbSubentId& subentId) const;
+  //OdResult setSubentPlotStyleName(const OdDbSubentId& subentId, const OdString& newName);
+
+  //OdResult getSubentLineWeight(const OdDbSubentId& subentId, OdDb::LineWeight& lineweight) const;
+  //OdResult setSubentLineWeight(const OdDbSubentId& subentId, OdDb::LineWeight newVal);
+
+  //OdResult getSubentVisibility(const OdDbSubentId& subentId, OdDb::Visibility& visVal) const;
+  //OdResult setSubentVisibility(const OdDbSubentId& subentId, OdDb::Visibility newVal);
+
+  //OdResult subentIdToNestedEnts(const OdDbSubentId& subentId, OdDbFullSubentPathArray &nestedEnts) const;
+
+ protected:
+
+  OdDbObjectId getScaleId() const;
+  void setScaleId( const OdDbObjectId scaleId );
+
+//private:
+//  OdGeMatrix3d transientXform() const;
+
+//private:
+//  static  double sViewBoderOffset;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewBorder object pointers.
+*/
+typedef OdSmartPtr<OdDbViewBorder> OdDbViewBorderPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWBORDER_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRep.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRep.h
new file mode 100755
index 0000000..4411c61
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRep.h
@@ -0,0 +1,144 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREP_H
+#define OD_VIEWREP_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRep : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRep);
+  OdDbViewRep();
+  virtual ~OdDbViewRep();
+
+  enum ViewStyleType 
+  {
+    kVisibleLines                = 0,
+    kVisibleAndHiddenLines       = 1,
+    kShadedVisibleLines          = 2,
+    kShadedVisibleAndHiddenLines = 3
+  };
+
+  enum SourceType
+  {
+    kSourceNotDefined   = 0,
+    kInventorSource     = 1,
+    kFusionSource       = 2,
+    kModelSpaceSource   = 3
+  };
+
+  enum ViewType
+  {
+    kBaseFront = 0,
+    kBaseTop = 1,
+    kBaseRight = 2,
+    kBaseBack = 3,
+    kBaseBottom = 4,
+    kBaseLeft = 5,
+    kBaseNEIsometric = 6,
+    kBaseNWIsometric = 7,
+    kBaseSEIsometric = 8,
+    kBaseSWIsometric = 9,
+    kBaseCurrent = 10,
+    kDetail = 13,
+    kSection = 14,
+    kProjected = 15
+  };
+
+  enum
+  {
+    kShaded = 1,
+    kLabelVisibility = 1 << 1,
+    kScaleFromParent = 1 << 6
+  };
+
+  OdResult sketchModelSpaceToModelSpaceXform( OdGeMatrix3d &mat ) const;
+  OdResult sketchModelSpaceToPaperSpaceXform( OdGeMatrix3d &mat ) const;
+
+  OdResult viewModelSpaceToModelSpaceXform( OdGeMatrix3d &mat ) const;
+  OdResult viewModelSpaceToPaperSpaceXform( OdGeMatrix3d &mat ) const;
+
+  OdDbObjectId selSetObjId() const;
+  bool isPartialMSView() const;
+  unsigned long viewIndex() const;
+
+  void setInventorDrawingViewId(OdUInt64 invDVid);
+  OdUInt64 inventorDrawingViewId() const;
+  OdDbObjectId layoutId() const;
+
+  const class OdRxSketchManager* getSketchManager() const;
+  OdRxSketchManager* getSketchManager();
+
+  OdDbObjectId viewBlockReference() const;
+  OdDbObjectId blockReference() const;
+  OdDbObjectId viewBorderId() const;
+  OdDbObjectId viewportId() const;
+
+  enum OdDbViewRep::SourceType sourceType();
+  const OdString& label();
+  bool labelVisibility();
+  double scale();
+  
+  bool isShaded();
+  enum OdDbViewRep::ViewStyleType viewStyleType();
+  enum OdDbViewRep::ViewType viewType();
+  void camera( OdGePoint3d &eye, OdGePoint3d &target, OdGeVector3d &upVector );
+  double rotationAngle() const;
+  OdGePoint2d viewBasePoint() const;
+  OdGePoint3d center();
+  OdResult updateViewportScale( double scale );
+  bool isScaleFromParent() const;
+  void setScaleFromParent( bool fromParent );
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  friend class OdDbImpAssocViewRepActionBody;
+
+private:
+  void setRotationAngle(double angle);
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRep object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRep> OdDbViewRepPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREP_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepBlockReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepBlockReference.h
new file mode 100755
index 0000000..641fab9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepBlockReference.h
@@ -0,0 +1,85 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_VIEW_REP_BLOCK_REFERENCE_
+#define _OD_VIEW_REP_BLOCK_REFERENCE_
+
+#include "DbBlockReference.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents a block reference in one specific viewport only.
+
+    \sa
+    AcModelDocObj
+
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepBlockReference : public OdDbBlockReference
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepBlockReference);
+  OdDbViewRepBlockReference();
+
+  /** \details
+    Sets the viewport which can view this block reference.
+
+    \param viewportId [in]  OdDbObjectId of viewport.
+  */
+  void setOwnerViewportId(const OdDbObjectId& viewportId);
+
+  /** \details
+    Returns OdDbObjectId of the viewport which can view this block reference.
+  */
+  OdDbObjectId ownerViewportId() const;
+
+  // OdDbBlockReference methods
+  virtual OdGePoint3d position() const;
+
+  // OdDbEntity methods
+  OdResult subGetGeomExtents(OdGeExtents3d& extents) const ODRX_OVERRIDE;
+
+  OdResult subGetGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath, OdGsMarkerArray& gsMarkers) const ODRX_OVERRIDE;
+
+  // OdDbObject methods
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const ODRX_OVERRIDE;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler) ODRX_OVERRIDE;
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const ODRX_OVERRIDE;
+
+protected:
+  // OdDbObject methods
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const ODRX_OVERRIDE;
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const ODRX_OVERRIDE;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepBlockReference object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepBlockReference> OdDbViewRepBlockReferencePtr;
+
+#include "TD_PackPop.h"
+
+#endif // _OD_VIEW_REP_BLOCK_REFERENCE_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepCutDefinition.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepCutDefinition.h
new file mode 100755
index 0000000..7b3dc4e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepCutDefinition.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPCUTDEFINITION_H
+#define OD_VIEWREPCUTDEFINITION_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepCutDefinition : public OdDbObject
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbViewRepCutDefinition);
+  OdDbViewRepCutDefinition();
+  virtual ~OdDbViewRepCutDefinition();
+
+  //
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepCutDefinition object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepCutDefinition> OdDbViewRepCutDefinitionPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPCUTDEFINITION_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepDetailDefinition.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepDetailDefinition.h
new file mode 100755
index 0000000..9e7b30f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepDetailDefinition.h
@@ -0,0 +1,88 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPDETAILDEFINITION_H
+#define OD_VIEWREPDETAILDEFINITION_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+#include "DbViewRepCutDefinition.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepDetailDefinition : public OdDbViewRepCutDefinition
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepDetailDefinition);
+  OdDbViewRepDetailDefinition();
+  virtual ~OdDbViewRepDetailDefinition();
+
+  enum FenceType
+  {
+    FT_RECTANGULAR = 1,
+    FT_CIRCULAR = 2
+  };
+
+  enum EdgeType
+  {
+    ET_SMOOTH = 0,
+    ET_JAGGED = 1,
+    ET_SMOOTH_WITH_BORDER = 2,
+    ET_SMOOTH_WITH_CONNECTION_LINE = 6,
+  };
+
+  void setDisplayConnectLine(bool);
+  bool displayConnectLine() const;
+
+  void setDisplayFullBoundary(bool);
+  bool displayFullBoundary() const;
+
+  void setJagged(bool);
+  bool jagged() const;
+
+  void setEdgeType(EdgeType);
+  EdgeType edgeType() const;
+
+  void setBoundaryType(FenceType);
+  FenceType boundaryType() const;
+
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepDetailDefinition object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepDetailDefinition> OdDbViewRepDetailDefinitionPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPDETAILDEFINITION_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepImage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepImage.h
new file mode 100755
index 0000000..8ff5b88
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepImage.h
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPIMAGE_H
+#define OD_VIEWREPIMAGE_H
+
+#include "DbEntity.h"
+#include "ModelDocObjExports.h"
+#include "../Gi/GiImage.h"
+#include "../Gi/GiViewportDraw.h"
+#include "../Gi/GiRasterWrappers.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepImage : public OdDbEntity
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepImage);
+
+  OdDbViewRepImage();
+  virtual ~OdDbViewRepImage();
+
+
+	OdGePoint3d const &  centerPoint() const;
+	void setCenterPoint(OdGePoint3d const & );
+
+	double getHeight() const;
+	void setHeight(double);
+
+	double getWidth() const;
+	void setWidth(double);
+
+	OdDbObjectId ownerViewportId() const;
+	void setOwnerViewportId(const OdDbObjectId);
+
+  /*
+	AcGeMatrix3d getModelCoordinate() const;
+	void setModelCoordinate(AcGeMatrix3d const & );
+
+	unsigned char* getRawImageBytes() const;
+	void setRawImageBytes(unsigned char*);
+
+	virtual void saveAs(AcGiWorldDraw*,enum AcDb::SaveType);
+
+	void setImageData(AcGiImageBGRA32 const&);
+	void setImageData(unsigned char*);
+
+	virtual enum Acad::ErrorStatus subTransformBy(AcGeMatrix3d const&);
+	virtual void subViewportDraw(AcGiViewportDraw*);
+   */
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+  virtual void subViewportDraw(OdGiViewportDraw* pVd) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepImage object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepImage> OdDbViewRepImagePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPIMAGE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepInventorSource.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepInventorSource.h
new file mode 100755
index 0000000..547d8c0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepInventorSource.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPINVENTORSOURCE_H
+#define OD_VIEWREPINVENTORSOURCE_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+#include "DbViewRepSource.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepInventorSource : public OdDbViewRepSource
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepInventorSource);
+  //OdDbViewRepInventorSource(const OdString&);
+  OdDbViewRepInventorSource();
+  virtual ~OdDbViewRepInventorSource();
+
+  //bool isMultiBody() const;
+  //bool isiFactory() const;
+  //bool isiComponent() const;
+  //bool isWeldment() const;
+  //bool hasFlatPattern() const;
+  //bool isSheetMetal() const;
+  //bool isPresentation() const;
+  //bool isAssembly() const;
+  //bool isPart() const;
+  //bool isFlagOn(unsigned long) const;
+  //void setInventorSourceFlags(unsigned long);
+  //unsigned long inventorSourceFlags() const;
+  //void setPresentationView(class const OdString&);
+  //OdString presentationView() const;
+  //void setMemberName(class const OdString&);
+  //OdString memberName() const;
+  //void setWeldmentInstance(class const OdString&);
+  //OdString weldInstance() const;
+  //void setLOD(class const OdString&);
+  //OdString LOD() const;
+  //void setPositionalName(class const OdString&);
+  //OdString positionalName() const;
+  //void setPath(class const OdString&);
+  //OdString path() const;
+
+  //virtual enum OdDbViewRep::SourceType type() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+#include "TD_PackPop.h"
+
+#endif //OD_VIEWREPINVENTORSOURCE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelPlaneDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelPlaneDef.h
new file mode 100755
index 0000000..8d941d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelPlaneDef.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPMODELPLANEDEF_H
+#define OD_VIEWREPMODELPLANEDEF_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class and its functions are not currently implemented.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepModelPlaneDef : public OdDbObject
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbViewRepModelPlaneDef);
+  OdDbViewRepModelPlaneDef();
+  virtual ~OdDbViewRepModelPlaneDef();
+
+  //virtual enum OdDbViewRepOrientationDef::OrientationDefType type() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepModelPlaneDef object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepModelPlaneDef> OdDbViewRepModelPlaneDefPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPMODELPLANEDEF_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceSource.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceSource.h
new file mode 100755
index 0000000..6a99149
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceSource.h
@@ -0,0 +1,75 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPMODELSPACESOURCE_H
+#define OD_VIEWREPMODELSPACESOURCE_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+#include "DbViewRepSource.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepModelSpaceSource : public OdDbViewRepSource
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepModelSpaceSource);
+  OdDbViewRepModelSpaceSource();
+  virtual ~OdDbViewRepModelSpaceSource();
+
+  //OdResult deleteSelSet(OdDbObjectId);
+  //OdDbObjectId updateSelSet(OdDbObjectId, bool, const OdArray<OdDbObjectId>&);
+  //OdDbObjectId addSelSet(const OdArray<OdDbObjectId>&);
+  //OdArray<OdDbObjectId>& selSetObjIds();
+  //const OdArray<OdDbObjectId>& selSetObjIds() const;
+  //void fixupBodyOccSnapshot(class OdDbIdMapping&);
+  //void setBodyOccSnapshot(const OdDbViewRepModelSpaceBodyOccurrenceSnapshot&);
+  //OdDbViewRepModelSpaceBodyOccurrenceSnapshot* bodyOccSnapshot();
+  //const OdDbViewRepModelSpaceBodyOccurrenceSnapshot* bodyOccSnapshot() const;
+
+  //virtual enum OdDbViewRep::SourceType type() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  //virtual subErase
+  //virtual decomposeForSave
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepModelSpaceSource object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepModelSpaceSource> OdDbViewRepModelSpaceSourcePtr;
+
+#include "TD_PackPop.h"
+
+#endif //OD_VIEWREPMODELSPACESOURCE_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceViewSelSet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceViewSelSet.h
new file mode 100755
index 0000000..9f8d2ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepModelSpaceViewSelSet.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_DBVIEWREPMODELSPACEVIEWSELSET_INCLUDED_
+#define OD_DBVIEWREPMODELSPACEVIEWSELSET_INCLUDED_
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    
+    Library:  AcModelDocObj
+
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepModelSpaceViewSelSet : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepModelSpaceViewSelSet);
+
+  OdDbViewRepModelSpaceViewSelSet();
+  //OdDbViewRepModelSpaceViewSelSet(const OdArray<OdDbObjectId>&);
+  virtual ~OdDbViewRepModelSpaceViewSelSet();
+
+  static bool getSelectedObjIdsForView(const OdDbObjectId&, OdArray<OdDbObjectId>&);
+
+  void setSelectedObjIds(const OdArray<OdDbObjectId>&);
+  OdArray<OdDbObjectId>& selectedObjIds();
+  const OdArray<OdDbObjectId>& selectedObjIds() const;
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+typedef OdSmartPtr<OdDbViewRepModelSpaceViewSelSet> OdDbViewRepModelSpaceViewSelSetPtr;
+
+#include "TD_PackPop.h"
+
+#endif //OD_DBVIEWREPMODELSPACEVIEWSELSET_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientation.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientation.h
new file mode 100755
index 0000000..dd57014
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientation.h
@@ -0,0 +1,69 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPORIENTATION_H
+#define OD_VIEWREPORIENTATION_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+#include "DbViewRepOrientationDef.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepOrientation : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepOrientation);
+  
+  OdDbViewRepOrientation();
+  OdDbViewRepOrientation(const OdGePoint3d &, const OdGePoint3d &, const OdGeVector3d &);
+  virtual ~OdDbViewRepOrientation();
+
+  const OdGeVector3d& upVector() const;
+  void setUpVector(OdGeVector3d const &);
+  const OdGePoint3d& eye() const;
+  void setEye(const OdGePoint3d&);
+  const OdGePoint3d& target() const;
+  void setTarget(const OdGePoint3d &);
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepOrientation object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepOrientation> OdDbViewRepOrientationPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPORIENTATION_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientationDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientationDef.h
new file mode 100755
index 0000000..4d20cdf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepOrientationDef.h
@@ -0,0 +1,62 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPORIENTATIONDEF_H
+#define OD_VIEWREPORIENTATIONDEF_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepOrientationDef : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepOrientationDef);
+  OdDbViewRepOrientationDef();
+  virtual ~OdDbViewRepOrientationDef();
+
+  //enum OrientationDefType {};
+  //virtual enum OdDbViewRepOrientationDef::OrientationDefType type() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepOrientationDef object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepOrientationDef> OdDbViewRepOrientationDefPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPORIENTATIONDEF_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepProjectionDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepProjectionDef.h
new file mode 100755
index 0000000..784f454
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepProjectionDef.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPPROJECTIONDEF_H
+#define OD_VIEWREPPROJECTIONDEF_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class and its functions are not currently implemented.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepProjectionDef : public OdDbObject
+{
+public:
+
+  ODDB_DECLARE_MEMBERS(OdDbViewRepProjectionDef);
+  OdDbViewRepProjectionDef();
+  virtual ~OdDbViewRepProjectionDef();
+
+  //virtual enum OdDbViewRepOrientationDef::OrientationDefType type() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepProjectionDef object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepProjectionDef> OdDbViewRepProjectionDefPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPPROJECTIONDEF_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSectionDefinition.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSectionDefinition.h
new file mode 100755
index 0000000..4b25ac0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSectionDefinition.h
@@ -0,0 +1,72 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPSECTIONDEFINITION_H
+#define OD_VIEWREPSECTIONDEFINITION_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+#include "DbViewRepCutDefinition.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepSectionDefinition : public OdDbViewRepCutDefinition
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepSectionDefinition);
+  OdDbViewRepSectionDefinition();
+  virtual ~OdDbViewRepSectionDefinition();
+
+  //void setConstrainTo(enum aciv::ViewEnums::ESectionConstrainTo);
+  //enum aciv::ViewEnums::ESectionConstrainTo constrainTo() const;
+  //void setParticipation(enum aciv::ViewEnums::ESectionParticipation);
+  //enum aciv::ViewEnums::ESectionParticipation participation() const;
+  //void setFullDepth(bool);
+  //bool fullDepth() const;
+  //void setMethodAligned(bool);
+  //bool methodAligned() const;
+
+  void setDepth(double);
+  double depth() const;
+
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepSectionDefinition object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepSectionDefinition> OdDbViewRepSectionDefinitionPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPSECTIONDEFINITION_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSource.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSource.h
new file mode 100755
index 0000000..d65d5ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSource.h
@@ -0,0 +1,175 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPSOURCE_H
+#define OD_VIEWREPSOURCE_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepSource : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepSource);
+  //OdDbViewRepSource();
+  virtual ~OdDbViewRepSource();
+
+  //virtual enum OdDbViewRep::SourceType type() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+  //virtual subErase
+  //virtual decomposeForSave
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepSource object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepSource> OdDbViewRepSourcePtr;
+
+//class OdDbViewRepModelSpaceOccurrence;
+//class OdDbViewRepModelSpaceBodyPath;
+//class OdDbViewRepModelSpaceXRefFileRecord;
+
+/** \details
+    This class and its functions are not currently implemented.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+//class MODELDOCOBJ_EXPORT OdDbViewRepModelSpaceBodyRecord : public OdDbObject
+//{
+//public:
+//  ODDB_DECLARE_MEMBERS(OdDbViewRepModelSpaceBodyRecord);
+//  //OdDbViewRepModelSpaceBodyRecord(const OdDbObjectId&, const struct _GUID&, const OdDbObjectId&);
+//  //OdDbViewRepModelSpaceBodyRecord(const OdDbObjectId&, const struct _GUID&);
+//  OdDbViewRepModelSpaceBodyRecord();
+//  virtual ~OdDbViewRepModelSpaceBodyRecord();
+//
+//  //OdResult transfer2DWGBodyRecord(class aciv::DWGBodyRecord*) const;
+//  //OdResult fixObjId();
+//  //void setBoundingBox(const OdGePoint3d&, const OdGePoint3d&);
+//  //void boundingBox(OdGePoint3d&, OdGePoint3d&) const;
+//  //void setBlockDefObjId(const OdDbObjectId&);
+//  //OdDbObjectId blockDefObjId() const;
+//  //bool isXRef() const;
+//  //void setBodyVerGuid(const struct _GUID&);
+//  //struct _GUID& bodyVerGuid();
+//  //const struct _GUID& bodyVerGuid() const;
+//  //void setBodyHandle(const OdDbHandle&);
+//  //OdDbHandle bodyHandle() const;
+//  //void setBodyObjId(const OdDbObjectId&);
+//  //OdDbObjectId bodyObjId() const;
+//
+//protected:
+//  // OdDbObject methods :
+//  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+//  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+//  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+//  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+//
+////private: 
+////  OdResult dwgInFieldsMigrate(OdDbDwgFiler*);
+////  void dwgOutFieldsDowngrade(OdDbDwgFiler*) const;
+////  OdResult dxfInFieldsMigrate(OdDbDxfFiler*);
+////  void dxfOutFieldsDowngrade(OdDbDxfFiler*) const;
+//};
+
+/** \details
+    This class and its functions are not currently implemented.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+//class MODELDOCOBJ_EXPORT OdDbViewRepModelSpaceBodyOccurrenceSnapshot : public OdDbObject
+//{
+//public:
+//  ODDB_DECLARE_MEMBERS(OdDbViewRepModelSpaceBodyOccurrenceSnapshot);
+//  OdDbViewRepModelSpaceBodyOccurrenceSnapshot();
+//  virtual ~OdDbViewRepModelSpaceBodyOccurrenceSnapshot();
+//
+//  //const OdDbViewRepModelSpaceOccurrence* findOccurrence(const OdDbViewRepModelSpaceBodyPath&,
+//  //                                                      const OdDbObjectId&) const;
+//  //OdResult getSubOccurrences(const OdArray<OdDbObjectId>&, 
+//  //                           OdArray<OdDbViewRepModelSpaceOccurrence>&) const;
+//  //OdResult fixObjId();
+//  //bool isEqualTo(const OdDbViewRepModelSpaceBodyOccurrenceSnapshot&,
+//  //               const OdArray<OdDbObjectId>&) const;
+//  //bool isEqualTo(const OdDbViewRepModelSpaceBodyOccurrenceSnapshot&) const;
+//  //bool isEqual(const OdArray<OdDbViewRepModelSpaceOccurrence>&,
+//  //             const OdArray<OdDbViewRepModelSpaceBodyRecord>&,
+//  //             const OdArray<OdDbViewRepModelSpaceXRefFileRecord>&,
+//  //             const OdArray<OdDbViewRepModelSpaceOccurrence>&);
+//  //unsigned short getVersionNum() const;
+//
+//protected:
+//  // OdDbObject methods :
+//  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+//  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+//  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+//  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+//};
+
+/** \details
+    This class and its functions are not currently implemented.
+
+    Library: AcModelDocObj
+
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepFusionSource : public OdDbViewRepSource
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepFusionSource);
+  OdDbViewRepFusionSource();
+  virtual ~OdDbViewRepFusionSource();
+
+  //virtual enum OdDbViewRep::SourceType type() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepFusionSource object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepFusionSource> OdDbViewRepFusionSourcePtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPSOURCE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSourceMgr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSourceMgr.h
new file mode 100755
index 0000000..5196c64
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepSourceMgr.h
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPSOURCEMGR_H
+#define OD_VIEWREPSOURCEMGR_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepSourceMgr : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewRepSourceMgr);
+  OdDbViewRepSourceMgr();
+  virtual ~OdDbViewRepSourceMgr();
+
+  //OdResult eraseInventorSourceId(OdDbObjectId);
+  void removeInventorSourceId(OdDbObjectId);
+  void addInventorSourceId(const OdDbObjectId);
+  //OdResult eraseModelSpaceSourceId(OdDbObjectId);
+  void setModelSpaceSourceId(const OdDbObjectId);
+  OdDbObjectId modelSpaceSourceId() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepSourceMgr object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepSourceMgr> OdDbViewRepSourceMgrPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPSOURCEMGR_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepStandard.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepStandard.h
new file mode 100755
index 0000000..b3f8ee6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewRepStandard.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWREPSTANDARD_H
+#define OD_VIEWREPSTANDARD_H
+
+#include "DbObject.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class MODELDOCOBJ_EXPORT OdDbViewRepStandard : public OdDbObject
+{
+public:
+  //enum DpiResolutionType {};
+  //enum ProjectionType {};
+  //enum SectionThreadEndDisplayType {};
+  //enum CircularThreadEdgeDisplayType {};
+  //enum PreviewDisplayType {};
+  //enum SynergyVersion {};
+
+  ODDB_DECLARE_MEMBERS(OdDbViewRepStandard);
+  //OdDbViewRepStandard(enum OdDbViewRepStandard::DpiResolutionType,
+  //                    enum OdDbViewRepStandard::ProjectionType,
+  //                    enum OdDbViewRepStandard::SectionThreadEndDisplayType,
+  //                    enum OdDbViewRepStandard::CircularThreadEdgeDisplayType,
+  //                    enum OdDbViewRepStandard::PreviewDisplayType,
+  //                    enum OdDbViewRepStandard::SynergyVersion);
+  OdDbViewRepStandard();
+  virtual ~OdDbViewRepStandard();
+
+  //enum OdDbViewRepStandard::SynergyVersion synergyVersion() const;
+  //enum OdDbViewRepStandard::PreviewDisplayType previewDisplayType() const;
+  //enum OdDbViewRepStandard::CircularThreadEdgeDisplayType circularThreadEdgeDisplayType() const;
+  //enum OdDbViewRepStandard::SectionThreadEndDisplayType sectionThreadEndDisplayType() const;
+  //enum OdDbViewRepStandard::ProjectionType projectionType() const;
+  //enum OdDbViewRepStandard::DpiResolutionType dpiResolutionType() const;
+
+protected:
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+//private:
+//  OdResult initialize();
+//  void setPreviewDisplayType(enum OdDbViewRepStandard::PreviewDisplayType);
+//  void setCircularThreadEdgeDisplayType(enum OdDbViewRepStandard::CircularThreadEdgeDisplayType);
+//  void setSectionThreadEndDisplayType(enum OdDbViewRepStandard::SectionThreadEndDisplayType);
+//  void setProjectionType(enum OdDbViewRepStandard::ProjectionType);
+//  void setDpiResolutionType(enum OdDbViewRepStandard::DpiResolutionType);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepStandard object pointers.
+*/
+typedef OdSmartPtr<OdDbViewRepStandard> OdDbViewRepStandardPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWREPSTANDARD_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewSymbol.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewSymbol.h
new file mode 100755
index 0000000..77db752
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/DbViewSymbol.h
@@ -0,0 +1,153 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VIEWSYMBOL_H
+#define OD_VIEWSYMBOL_H
+
+#include "DbEntity.h"
+#include "ModelDocObjExports.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This abstract class is the base class for OdDbSectionSymbol and OdDbDetailSymbol classes.
+
+    Library: AcModelDocObj
+    <group OdModelDocObj_Classes> 
+*/
+class ODRX_ABSTRACT MODELDOCOBJ_EXPORT OdDbViewSymbol : public OdDbEntity
+{
+  //friend class OdDbViewSymbolSystemInternals;
+public:
+  ODDB_DECLARE_MEMBERS(OdDbViewSymbol);
+  virtual ~OdDbViewSymbol();
+
+  /** \details
+    Returns an ObjectId of the associated model documentation view style object for this OdDbViewSymbol entity.  
+  */
+  OdDbObjectId symbolStyleId() const;
+
+  /** \details
+    Sets an ObjectId of the associated model documentation view style object for this OdDbViewSymbol entity.
+
+    \param styleId [in]  Id of the view style to be set.
+  */
+  void setSymbolStyleId(const OdDbObjectId& styleId);
+
+  /** \details
+    Returns the scale factor for this OdDbViewSymbol entity.  
+  */
+  double scale() const;
+
+  /** \details
+    Sets the scale factor for this OdDbViewSymbol entity.
+    
+    \param val [in]  Scale value to be set.
+  */
+  void setScale(double val);
+
+  /** \details
+    Gets the identifier of the view symbol as a string value.
+    
+    \param sName [in]  Receives the identifier string.
+
+    \note
+    OdResult::eOk value if successful, OdResult::eNotApplicable otherwise. 
+  */
+  OdResult getIdentifier(OdString& sName) const;
+
+  /** \details
+    Sets the identifier of the view symbol as a string value.
+    
+    \param sName [in]  The identifier string to be set.
+
+    \note
+    OdResult::eOk value if successful. 
+  */
+  OdResult setIdentifier(const OdString& sName);
+
+protected:
+  // Internal use only methods:
+  OdDbObjectId owningViewRep() const;
+  //void setOwningViewRep(const OdDbObjectId& owner);
+  //OdResult createDefinition(class OdRxSymbolSketch* pSketchObject);
+  //OdResult exportSymbolGeometry(OdArray<OdGeCurve3d*>& geomArr, const OdDbObjectId& viewRepId);
+  //OdResult setSymbolGeometry(const OdDbObjectIdArray& entIds);
+  //OdResult setSymbolGeometry(const OdArray<OdDbObject*>& entities);
+  //OdResult updateDefinition();
+
+protected:
+  // OdGiDrawable methods :
+  virtual bool subWorldDraw(OdGiWorldDraw* pWorldDraw) const;
+
+  // OdDbObject methods :
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  //virtual void audit(OdDbAuditInfo* pAuditInfo);
+  //virtual OdResult subErase(bool erasing);
+  //virtual void objectClosed(const OdDbObjectId& objectId);
+  //virtual void subClose();
+
+  //OdDbEntity methods :
+  //virtual void subSetDatabaseDefaults(OdDbDatabase* pDb, bool doSubents);
+  //virtual OdResult subGetGeomExtents(OdGeExtents3d& extents) const;
+  //virtual OdResult subGetOsnapPoints(OdDb::OsnapMode osnapMode,
+  //                                   OdGsMarker gsSelectionMark,
+  //                                   const OdGePoint3d& pickPoint,
+  //                                   const OdGePoint3d& lastPoint,
+  //                                   const OdGeMatrix3d& xWorldToEye,
+  //                                   OdGePoint3dArray& snapPoints) const;
+  //virtual OdResult subTransformBy(const OdGeMatrix3d& xfm);
+  //virtual void subGripStatus(const OdDb::GripStat status);
+  //virtual OdResult subGetGripPoints(OdDbGripDataPtrArray& grips,
+  //                                  const double curViewUnitSize,
+  //                                  const int gripSize,
+  //                                  const OdGeVector3d& curViewDir,
+  //                                  const int bitFlags) const;
+  //virtual OdResult subMoveGripPointsAt(const OdDbVoidPtrArray& grips,
+  //                                     const OdGeVector3d& offset,
+  //                                     int bitFlags);
+  //virtual OdResult subGetClassID(void* pClsid) const;
+  //virtual void subList() const;
+  //virtual void saveAs(OdGiWorldDraw* pWd, OdDb::DwgVersion ver) const;
+
+protected:
+  // Makes OdDbViewSymbol an abstract class.
+  OdDbViewSymbol();
+
+//private:
+//friend class OdDbAssocViewSymbolConstrGrpPE;
+//class OdDbViewSymbolImp* m_pImpl;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewSymbol object pointers.
+*/
+typedef OdSmartPtr<OdDbViewSymbol> OdDbViewSymbolPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VIEWSYMBOL_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/ModelDocObjExports.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/ModelDocObjExports.h
new file mode 100755
index 0000000..3588c54
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/ModelDocObjExports.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _MODELDOCOBJEXPORTS_DEFINED_
+#define _MODELDOCOBJEXPORTS_DEFINED_
+
+#include "OdPlatformSettings.h"
+
+#ifdef MODELDOCOBJ_DLL_EXPORTS
+#define MODELDOCOBJ_EXPORT OD_TOOLKIT_EXPORT
+#define MODELDOCOBJ_EXPORT_STATIC OD_STATIC_EXPORT
+#else
+#define MODELDOCOBJ_EXPORT OD_TOOLKIT_IMPORT
+#define MODELDOCOBJ_EXPORT_STATIC OD_STATIC_IMPORT
+#endif
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManager.h
new file mode 100755
index 0000000..f33a659
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManager.h
@@ -0,0 +1,72 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef ODRXSKETCHMANAGER_H_
+#define ODRXSKETCHMANAGER_H_
+
+#include "RxObject.h"
+
+
+#include "ModelDocObjExports.h"
+#include "TD_PackPush.h"
+
+/** <group OdModelDocObj_Classes>
+*/
+class MODELDOCOBJ_EXPORT OdRxSketchManager : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS( OdRxSketchManager );
+  OdRxSketchManager();
+  virtual ~OdRxSketchManager();
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;
+  virtual OdResult dxfInFields( OdDbDxfFiler* pFiler );
+  virtual void dxfOutFields( OdDbDxfFiler* pFiler ) const;
+
+  
+  //virtual OdResult applyPartialUndo( AcDbDwgFiler *, unsigned short );
+  void clearSketchObjects();
+  OdDbObjectId constructionLineType()const;
+  void deleteSketch( OdRxSketchObject const *pSketchObj );
+  OdResult enterSketchMode( OdRxSketchObject *pSketchObj );
+  OdResult exitSketchMode();
+  OdRxSketchObject *  getActiveSketch();
+  OdRxSketchObject *  getSketchFromTag( unsigned short tag );
+  OdRxSymbolSketch *  getSymbolSketchFromSymbol( OdDbObjectId const &symbolId );
+  OdRxSymbolSketch *  getSymbolSketchFromViewRep( OdDbObjectId const &viewRepId );
+  bool hasSketchObjects()const;
+  bool isDirty()const;
+  bool isInSketchMode()const;
+  OdDbObjectId const owningViewRep()const;  
+  void setIsDirty( bool bDirty );
+  OdDbObjectId const sketchBlockReference()const;
+  void transformSketches( OdGeMatrix3d const &matrix );
+  void updateConstraintGroupWorkPlanes( OdGePlane const &plane );
+
+protected:
+
+  class OdRxSketchManagerImpl* m_pImpl;
+};
+
+typedef OdSmartPtr<OdRxSketchManager> OdRxSketchManagerPtr;
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManagerImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManagerImpl.h
new file mode 100755
index 0000000..347972b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchManagerImpl.h
@@ -0,0 +1,66 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef ODRXSKETCHMANAGERIMPL_H_
+#define ODRXSKETCHMANAGERIMPL_H_
+
+#include "RxSketchManager.h"
+
+/** <group OdModelDocObj_Classes>
+*/
+class OdRxSketchManagerImpl
+{
+private:
+  friend class OdRxSketchManager;
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;
+  virtual OdResult dxfInFields( OdDbDxfFiler* pFiler );
+  virtual void dxfOutFields( OdDbDxfFiler* pFiler ) const;
+
+  void clearSketchObjects();
+  OdDbObjectId constructionLineType()const;
+  void deleteSketch( OdRxSketchObject const *pSketchObj );
+  OdResult enterSketchMode( OdRxSketchObject *pSketchObj );
+  OdResult exitSketchMode();
+  OdRxSketchObject *  getActiveSketch();
+  OdRxSketchObject *  getSketchFromTag( unsigned short tag );
+  OdRxSymbolSketch *  getSymbolSketchFromSymbol( OdDbObjectId const &symbolId );
+  OdRxSymbolSketch *  getSymbolSketchFromViewRep( OdDbObjectId const &viewRepId );
+  bool hasSketchObjects()const;
+  bool isDirty()const;
+  bool isInSketchMode()const;
+  OdDbObjectId const owningViewRep()const;
+  void setIsDirty( bool bDirty );
+  OdDbObjectId const sketchBlockReference()const;
+  void transformSketches( OdGeMatrix3d const &matrix );
+  void updateConstraintGroupWorkPlanes( OdGePlane const &plane );
+
+
+  OdArray <OdRxSketchObjectPtr> m_pSketchObjects;
+  OdUInt16 m_LastTag;
+  OdDbObjectId m_OwningViewRepId;
+  OdDbObjectId m_sketchBlockReferenceId;
+
+};
+
+#endif // ODRXSKETCHMANAGERIMPL_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchObject.h
new file mode 100755
index 0000000..6feb4a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelDocObj/RxSketchObject.h
@@ -0,0 +1,134 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODRXSKETCHOBJECT_H_
+#define ODRXSKETCHOBJECT_H_
+
+//#include "RxObject.h"
+
+//class OdRxSketchManager;
+#include "ModelDocObjExports.h"
+
+/** <group OdModelDocObj_Classes>
+*/
+class MODELDOCOBJ_EXPORT OdRxSketchObject : public OdRxObject
+{
+protected:
+  OdRxSketchObject();
+public:
+  ODRX_USING_HEAP_OPERATORS(OdRxObject);
+  ODRX_DECLARE_MEMBERS(OdRxSketchObject);
+  virtual ~OdRxSketchObject();
+
+  //enum OdSySketchObjValidateStatus {}; 
+  //OdResult restoreEntity() const;
+  //OdDbObjectId getConstraintGroup() const;
+  //OdResult exportGeometry(OdArray<OdGeCurve3d*>&) const;
+  //OdResult getGeometry(OdArray<OdGeCurve3d*>&) const;
+  //bool hasEntity(OdDbObjectId) const;
+  //void addEntities(const OdArray<OdDbObjectId> &);
+  //OdResult getEntities(OdArray<OdDbObjectId>&) const;
+  //bool repair();
+  //enum OdRxSketchObject::OdSySketchObjValidateStatus validate() const;
+  //OdRxSketchManager* owningSketchManager();
+  //const OdRxSketchManager* owningSketchManager() const;
+  //void setConstraintGroupWorkplane(const OdGePlane&);
+  //void transform(const OdGeMatrix3d&);
+  //OdDbObjectId sketchBlkRefId() const;
+  unsigned short sketchTag() const;
+
+  OdDbObjectId getViewRepId() const;
+  OdDbObjectId getSecSymbolId() const;
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+protected:
+  //void deActivate();
+  //void activate();
+  //void cleanUp();
+  //void setOwner(OdRxSketchManager*);
+
+  class OdRxSketchObjectImpl* m_pImpObj;
+};
+
+/** <group OdModelDocObj_Classes>
+*/
+class MODELDOCOBJ_EXPORT OdRxFreeSketch : public OdRxSketchObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxFreeSketch);
+
+  OdRxFreeSketch();
+  virtual ~OdRxFreeSketch();
+
+//protected:
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbViewRepSource object pointers.
+*/
+typedef OdSmartPtr<OdRxSketchObject> OdRxSketchObjectPtr;
+
+/** <group OdModelDocObj_Classes>
+*/
+class MODELDOCOBJ_EXPORT OdRxSymbolSketch : public OdRxSketchObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxSymbolSketch);
+
+  OdRxSymbolSketch();
+  virtual ~OdRxSymbolSketch();
+
+  //protected:
+};
+
+/** <group OdModelDocObj_Classes>
+*/
+class MODELDOCOBJ_EXPORT OdRxSectionSketch : public OdRxSketchObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxSectionSketch);
+
+  OdRxSectionSketch();
+  virtual ~OdRxSectionSketch();
+
+  //protected:
+};
+
+/** <group OdModelDocObj_Classes>
+*/
+class MODELDOCOBJ_EXPORT OdRxDetailSketch : public OdRxSketchObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxDetailSketch);
+
+  OdRxDetailSketch();
+  virtual ~OdRxDetailSketch();
+
+  //protected:
+};
+
+#endif // ODRXSKETCHOBJECT_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerDefs.h
new file mode 100755
index 0000000..bfc96a4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerDefs.h
@@ -0,0 +1,118 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef TYPEVER_H
+#define TYPEVER_H /*!DOM*/
+
+/** See also: AfTypeVerEnum 
+*/
+typedef int AfTypeVer;
+
+enum AfTypeVerEnum
+{
+  kAfVerMask           = 0x00FFFFFF,
+  kAfVerInvalid        = kAfVerMask,
+  kAfVerAny            = 0x00000000,
+  kAfVerUnknown        = kAfVerAny,
+
+  kAfVer105            = 105,
+  kAfVer106            = 106,
+  kAfVer107            = 107,
+  kAfVer200            = 200,
+  kAfVer201            = 201,
+  kAfVer400            = 400,
+  kAfVer500            = 500,
+  kAfVer600            = 600,
+  kAfVer700            = 700,
+  kAfVer1000           = 1000,
+  kAfVer1100           = 1100,
+  kAfVer20800          = 20800,
+  kAfVer21200          = 21200,
+  kAfVer21500          = 21500,
+  kAfVer21600          = 21600,
+  kAfVer21700          = 21700,
+  kAfVer21800          = 21800,
+#if defined(SWIGCSHARP)
+  kAfTypeMask          = (uint)0xFF000000,
+#elif defined(SWIGJAVA)
+  kAfTypeMask          = (long)0xFF000000,
+#else
+  kAfTypeMask          = (OdInt32)0xFF000000,
+#endif
+  kAfTypeInvalid       = kAfTypeMask,
+  kAfTypeAny           = 0x00000000,
+  kAfTypeUnknown       = kAfTypeAny,
+
+  kAfTypeASCII         = 0x01000000,
+  kAfTypeBinary        = 0x02000000,
+#if defined(SWIGCSHARP)
+  kAfTypeIndexed       = (uint)0x80000000, // used only with kAfTypeASCII
+#elif defined(SWIGJAVA)
+  kAfTypeIndexed       = (long)0x80000000, // used only with kAfTypeASCII
+#else
+  kAfTypeIndexed       = (OdInt32)0x80000000, // used only with kAfTypeASCII
+#endif
+
+  
+  kAfTypeVerInvalid    = kAfTypeInvalid | kAfVerInvalid,
+  kAfTypeVerAny        = kAfTypeAny     | kAfVerAny,
+  kAfTypeVerUnknown    = kAfTypeVerAny,
+
+  //////// these constants are for convenience //////////
+
+  kAf_ASCII_Any        = kAfTypeASCII|kAfVerAny,
+  kAf_ASCII_106        = kAfTypeASCII|kAfVer106,
+  kAf_ASCII_400        = kAfTypeASCII|kAfVer400,
+  kAf_ASCII_500        = kAfTypeASCII|kAfVer500,
+  kAf_ASCII_600        = kAfTypeASCII|kAfVer600,
+  kAf_ASCII_700        = kAfTypeASCII|kAfVer700,
+  kAf_ASCII_20800      = kAfTypeASCII|kAfVer20800,
+  kAf_ASCII_21200      = kAfTypeASCII|kAfVer21200,
+  kAf_ASCII_21500      = kAfTypeASCII|kAfVer21500,
+
+  kAf_Binary_Any       = kAfTypeBinary|kAfVerAny,
+  kAf_Binary_106       = kAfTypeBinary|kAfVer106,
+  kAf_Binary_400       = kAfTypeBinary|kAfVer400,
+  kAf_Binary_500       = kAfTypeBinary|kAfVer500,
+  kAf_Binary_600       = kAfTypeBinary|kAfVer600,
+  kAf_Binary_700       = kAfTypeBinary|kAfVer700,
+  kAf_Binary_20800     = kAfTypeBinary|kAfVer20800,
+  kAf_Binary_21200     = kAfTypeBinary|kAfVer21200,
+  kAf_Binary_21500     = kAfTypeBinary|kAfVer21500
+};
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum BoolOperType
+  {
+    kBoolUnite     = 0,
+    kBoolIntersect = 1,
+    kBoolSubtract  = 2
+  };
+}
+
+#endif //TYPEVER_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry.h
new file mode 100755
index 0000000..775b8ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry.h
@@ -0,0 +1,1875 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_MODELERGEOMETRY_INCLUDED_
+#define _OD_MODELERGEOMETRY_INCLUDED_
+
+#define STL_USING_MAP
+#include "OdaSTL.h"
+#include "RxObject.h"
+#include "ModelerDefs.h"
+#include "DbEntity.h"
+#include "Db3dSolid.h"
+#include "DbRegion.h"
+#include "DbSubDMesh.h"
+#include "DbNurbSurface.h"
+#include "Ge/GeNurbCurve3d.h"
+#include "Ge/GeCurve3dPtrArray.h"
+#include "MaterialResolver.h"
+
+class OdStreamBuf;
+class OdBrBrep;
+class OdBrEntity;
+class OdGiCommonDraw;
+class OdGiViewportDraw;
+class OdDbCurve;
+class OdDbRevolveOptions;
+class OdDbSweepOptions;
+class OdDbLoftOptions;
+class OdDbSection;
+class SectArgs;
+class OdBrMesh2dFilter;
+class OdBrMesh2d;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class defines the interface for classes that
+    provide conversion services for ACIS SAT and SAB data.
+
+    \remarks
+    This class is used to convert ACIS data between various
+    versions of SAT and SAB.  
+    
+    For example, if a version 2004 .dwg file is saved as an R15 .dxf file, 
+    the SAB data in the 2004 file must be converted to version 700 SAT,
+    so as to be be valid within the R15 .dxf file.
+
+    Library: ModelerGeometry
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdModelerGeometry : public OdRxObject
+{
+protected:
+  OdModelerGeometry() {}
+
+public:  
+  ODRX_DECLARE_MEMBERS(OdModelerGeometry);
+
+  // in/out functionality
+
+  /** \details
+      Reads the ACIS data from the specified StreamBuf object into this ModelerGeometry object.
+
+      \remarks
+      The implementation of this function is responsible for determining
+      the type (SAT/SAB) and version of the data read.
+
+      \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data is to be read.   
+      \param typeVer [out]  Receives the type and version of the ACIS file.
+      \param standardSaveFlag [in]  Controls the saving and restoring of used count data in the saved file.
+      
+      \remarks
+      Returns eOk if successful, or an appropriate error code if not.
+
+      pStreamIn may be NULL.
+     
+      \sa
+      AfTypeVerEnum
+  */
+  virtual OdResult in(OdStreamBuf* pStreamBuf, AfTypeVer *typeVer = 0, bool standardSaveFlag = true) = 0;
+  
+
+  /** \details
+      Writes the ACIS data from this ModelerGeometry object to the specified StreamBuf object.
+
+      \note
+      This function is responsible for converting
+      the contained ACIS data to the specified type and format. If afVer == kAfTypeVerAny, 
+      then any type or version may be written.
+
+      \param pStreamBuf [in]  Pointer to the StreamBuf object to which the data is to be written.   
+      \param typeVer [in]  Type and version of the ACIS file.
+      \param standardSaveFlag [in]  Controls the saving and restoring of used count data in the saved file.
+
+      \remarks
+      Returns eOk if successful, or an appropriate error code if not.
+
+      \sa
+      AfTypeVerEnum
+  */
+  virtual OdResult out(OdStreamBuf* pStreamBuf, AfTypeVer typeVer, bool standardSaveFlag = true) const = 0;
+
+  /** \details
+      Populates the specified BrBrep object with the ACIS BREP data of this ModelerGeometry object.
+      \param brBrep [out]  Receives the BREP data. 
+      \remarks
+      Returns true if and only if successful.
+      
+  */
+  virtual bool brep(OdBrBrep& brBrep) const = 0;
+
+
+  virtual OdResult setSubentPath(OdBrEntity & /*pInpEnt*/, OdDbFullSubentPath& /*subpath*/) { return eNotImplemented; }
+
+  virtual OdResult generateMesh(const OdBrMesh2dFilter& filter, OdBrMesh2d &mesh2d) { return eNotImplemented; }
+
+  /** \details
+    Draw functionality.
+  */
+  enum
+  {
+    kNothing      =  0,
+    kIsolines     =  1,
+    kEdges        =  2,
+    kShells       =  4,
+    kOrderedEdges =  8,  //  Geometry is returned as closed loops.
+    kSurfIsolines = 16
+  };
+
+  /** \details
+    Sets the Facetres for this ModelerGeometry object.
+    \param facetRes [in]  Facet resolution.
+  */
+  virtual bool setFACETRES(double facetRes) = 0;
+
+  struct NumIsolines
+  {
+    OdUInt32 numU, numV;
+  };
+  /** \details
+    Creates a viewport-independent geometric representation of this ModelerGeometry object.
+    
+    \remarks
+    Returns true if and only if the geometric representation can be generated in a
+    viewport-independent manner. 
+
+    \note
+    A return value of false indicates that viewportDraw() must be called for this object.
+
+    The 3D GS will call this function at least once, but may cache subsequent display updates.
+
+    \param pWd [in]  Pointer to the OdGiCommonDraw interface.
+    \param geomType [in]  Geometry type.
+    \param pNumIsolines [in]  Number of isolines in U and V directions.
+    
+    \remarks
+    geomType must be a combination of one or more of the following:
+    
+    <table>
+    Name            Value
+    kNothing        0   
+    kIsolines       1
+    kEdges          2
+    kShells         4
+    kOrderedEdges   8
+    kSurfIsolines   16
+    </table>
+  */
+  virtual bool worldDraw(OdGiCommonDraw* pWd, OdUInt32 geomType, const NumIsolines *pNumIsolines = 0) = 0;
+  
+  /** \details
+    Creates a viewport-dependent silhouette representation of this ModelerGeometry object.
+
+    \remarks
+    Causes this ModelerGeometry object to describe its geometry to the specified OdGiViewportDraw object. 
+
+    This function is called once per viewport.
+
+    \remarks
+    It is possible to have totally different images in each viewport; a schematic
+    in one viewport, a layout in another.
+    
+    \param pVd [in]  Pointer to the OdGiViewportDraw interface.
+  */
+  virtual bool drawSilhouettes(OdGiViewportDraw* pVd) = 0;
+  virtual OdResult getCachedSilhouettes(OdGeCurve3dPtrArray* cachedSilhouettes) = 0;
+
+  /** \details
+    Explodes this ModelerGeometry object into a set of OdDbEntity objects.  
+
+    \param entitySet [in/out] Receives an array of pointers to the new entities.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+
+    \note
+    Entities resulting from the explosion are appended to the specified array.
+    
+    The newly created entities are not database residents.
+  */
+  virtual bool explode(OdDbEntityPtrArray& entitySet) const = 0;
+  
+  /** \details
+    Returns the transformation matrix for this ModelerGeometry object.
+    \param xfm [out]  Receives the transformation matrix.
+  */
+  virtual bool getTransformation(OdGeMatrix3d& xfm) = 0;
+  
+  /** \details
+    Applies the specified 3D transformation matrix to this ModelerGeometry object.
+
+    \param xfm [in]  3D transformation matrix.
+  */
+  virtual void transformBy( const OdGeMatrix3d& xfm ) = 0;
+  
+  /** \details
+    Creates a WCS aligned solid box centered about the world origin. 
+    
+    \param xLen [in]  Dimension along the WCS X-axis.
+    \param yLen [in]  Dimension along the WCS Y-axis. 
+    \param zLen [in]  Dimension along the WCS Z-axis. 
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not. 
+    
+    \note
+    The following constraints apply:
+    
+    * xLen >= 1e-6.
+    * yLen >= 1e-6.
+    * zLen >= 1e-6.
+  */
+  virtual void createBox( double xLen, double yLen, double zLen ) = 0;
+  /** \details
+    Creates a WCS aligned frustum centered about the world origin. 
+    
+    \param height [in]  Dimension along the WCS Z-axis.
+    \param xRadius [in]  Base radius along the WCS X-axis. 
+    \param yRadius [in]  Base radius along the WCS Y-axis.
+    \param topXRadius [in]  Top radius along the WCS X-axis. 
+
+    \remarks
+    The function can generate a frustum that is any one of the following:
+    
+    * A circular cylinder
+    * An elliptical cylinder
+    * A circular cone
+    * An elliptical cone
+    * A truncated circular cone
+    * A truncated elliptical cone
+    
+    \note
+    The following constraints apply:
+    
+    * height >= 1e-6.
+    * xRadius >= 1e-6.
+    * yRadius >= 1e-6.
+    * topXRadius >= 1e-6. 
+  */
+  virtual void createFrustum( double height, double xRadius, double yRadius, double topXRadius ) = 0;
+  /** \details
+    Creates a sphere centered about the world origin. 
+    
+    \param radius [in]  Radius.
+
+    \note
+    The following constraints apply:
+    
+    * radius >= 1e-6.
+
+  */
+  virtual void createSphere( double radius ) = 0;
+  /** \details
+    Creates a WCS aligned torus centered about the world origin
+    and with the Z-axis as its axis of rotation. 
+    
+    \param majorRadius [in]  Radius of the torus
+    \param minorRadius [in]  Radius of the tube.
+
+    \note
+    The following constraints apply:
+    
+    * minorRadius >= 1e-6.
+    * |majorRadius| >= 1e-6
+    * if majorRadius < 0, then minorRadius > |majorRadius| + 1e-6
+  */
+  virtual void createTorus( double majorRadius, double minorRadius ) = 0;
+
+  /** \details
+    Creates a WCS aligned wedge centered about the world origin. 
+    
+    \param xLen [in]  Dimension along the WCS X-axis.
+    \param yLen [in]  Dimension along the WCS Y-axis. 
+    \param zLen [in]  Dimension along the WCS Z-axis. 
+
+    \remarks
+    The inclined face is defined by the points 
+    
+              ( xLen/2, -yLen/2, -zLen/2)
+              (-xLen/2, -yLen/2,  zLen/2)  
+              ( xLen/2,  yLen/2, -zLen/2)
+              (-xLen/2, +yLen/2,  zLen/2)  
+    
+    \note
+    The following constraints apply:
+    
+    * xLen >= 1e-6.
+    * yLen >= 1e-6.
+    * zLen >= 1e-6.
+  */
+  virtual void createWedge( double xLen, double yLen, double zLen ) = 0;
+
+  /** \details
+    Creates a solid by extruding the specified region.
+   
+    \param pRegion [in]  Pointer to the region to be extruded.
+    \param height [in]  Height of the extrusion.
+    \param taperAngle [in]  Taper angle.
+
+    \remarks
+    The extrusion direction is along the normal of the region. Height may be negative.     
+
+
+    \note
+    All angles are expressed in radians.
+     
+    The following constraints apply:
+    
+    * |height| >= 1e-6.
+    * |taperAngle| < OdaPI2 - 1e-6.
+  */
+  virtual OdResult extrude(const OdDbRegion* pRegion, double height, double taperAngle, bool isSolid = true) = 0;
+
+  /** \details
+    Creates a solid by revolving the specified region.
+   
+    \param pRegion [in]  Pointer to the region to be extruded.
+    \param axisPoint [in]  Point on the axis of revolution.
+    \param axisDir [in]  Vector defining the axis of revolution.
+    \param angleOfRevolution [in]  Angle of revolution.
+    
+    \remarks
+    The axis of revolution is projected onto the plane of the region, parallel to its normal.
+
+    \note
+    All angles are expressed in radians.
+    
+    The following constraints apply:
+    
+    * The projected axis of revolution cannot intersect the region. 
+    * angleOfRevolution >= 1e-6
+  */
+  virtual OdResult revolve(const OdDbRegion* pRegion, const OdGePoint3d& axisPoint, 
+    const OdGeVector3d& axisDir, double angleOfRevolution, bool isSolid = true) = 0;
+
+  /** \details
+    Clears the color attributes of this ModelerGeometry object.
+  */
+  virtual void ClearColorAttributes() = 0;
+
+  /** \details
+  Clears the material attributes of this ModelerGeometry object.
+  */
+  virtual void ClearMaterialAttributes() = 0;
+
+  /** \details
+  Clears the material mapper attributes of this ModelerGeometry object.
+  */
+  virtual void ClearMaterialMapperAttributes() = 0;
+
+  /** \details
+    Describes a material state.
+  */
+  enum MaterialState
+  {
+    kNoMaterials = 0, 
+    kHasMaterials = 1,
+    kUnknown = 2
+  };
+  virtual MaterialState hasMaterials() const {return kUnknown; }
+
+  /** \details
+    Returns true if and only if TrueColor attributes are attached to the faces and/or
+    edges of this ModelerGeometry object.
+  */
+  virtual bool hasTrueColorAttributes() const = 0;
+
+  /** \details
+    Returns the plane of this ModelerGeometry object.
+
+    \param regionPlane [out]  Receives the region plane.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if (bodyType() != kRegion).
+    
+  */
+  virtual OdResult getPlane(OdGePlane& regionPlane) const = 0;
+
+  /** \details
+    Sets the mm/unit for this ModelerGeometry object.
+    \param mmPerUnit [in]  mm/unit. 
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool setMMPerUnit(double  mmPerUnit) = 0;
+  /** \details
+    Returns the mm/unit for this ModelerGeometry object.
+    \param mmPerUnit [out]  mm/unit.
+    \remarks
+    Returns true if and only if successful.
+  */
+  virtual bool getMMPerUnit(double &mmPerUnit) const = 0;
+  
+  /** \details
+    Geometry type.
+  */
+  enum geomType
+  {
+    kUndefined = 0,
+    kBody      = 1,
+    kSolid     = 2,
+    kRegion    = 3,
+    kSurface   = 4
+  };
+
+  /** \details
+    Returns the body type of this ModelerGeometry object:
+    \remarks
+    bodyType returns one of the following:
+    
+    <table>
+    Name         Value
+    kUndefined   0
+    kBody        1
+    kSolid       2
+    kRegion      3
+    </table>
+  */
+  virtual geomType bodyType() const = 0;
+
+  // new methods
+  /** \details
+    Performs a Boolean operation between this ModelerGeometry object and another ModelerGeometry object. 
+
+    \param operation [in] Type of Boolean operation.
+    \param otherRegion [out] Pointer to the other ModelerGeometry object which also will contain the result of the Boolean operation.
+
+    \returns Returns eOk if the Boolean operation is successful or an appropriate error code if not. 
+    If ModelerGeometry is null, eInvalidInput is returned.
+
+    \remarks 
+    Possible operation types are: 
+* kBoolUnite - Unites two ModelerGeometry objects into one.
+* kBoolIntersect - Returns the intersection of two ModelerGeometry objects.
+* kBoolSubtract - Subtracts the second ModelerGeometry object from the first one.
+  */
+  virtual OdResult booleanOper(OdDb::BoolOperType operation, OdSmartPtr<OdModelerGeometry> otherRegion) = 0;
+  
+  /** \details
+    Performs a Boolean operation between this ModelerGeometry object and another ModelerGeometry object. 
+
+    \param operation [in] Type of Boolean operation.	
+    \param pModelerPar [in] Pointer to the other ModelerGeometry object which also will contain the result of the Boolean operation.
+    \param intersectionEntities [out] Array of intersection entities.
+    
+    \returns Returns eOk if Boolean operation is successful or an appropriate error code if not. 
+    If ModelerGeometry is null, eInvalidInput is returned.
+
+    \remarks 
+    Possible operation types are: 
+* kBoolUnite - Unites two ModelerGeometry objects into one.
+* kBoolIntersect - Returns the intersection of two ModelerGeometry objects.
+* kBoolSubtract - Subtracts the second ModelerGeometry object from the first one.
+  */
+  virtual OdResult booleanOper(OdDb::BoolOperType operation, const OdSmartPtr<OdModelerGeometry> pModelerPar, OdDbEntityPtrArray& intersectionEntities) = 0;
+  
+  /** \details
+    Returns the area of this ModelerGeometry object. 
+    \param regionArea [out] Reference for returning the area value.
+    \returns Returns eOk if successful or an appropriate error code in the other case. 
+    Area value is returned in square drawing units.
+  */
+  virtual OdResult getArea(double& regionArea) const = 0;
+  
+  /** \details
+    Returns the perimeter of this ModelerGeometry object. 
+    \param dRegionPerimeter [out] Reference to a double value to store the perimeter.
+    
+    \returns Returns eOk if the perimeter was successfully returned to the calling 
+    subroutine or an appropriate error code in the other case.
+  */
+  virtual OdResult getPerimeter(double&) const = 0;
+
+  /** \details
+    Calculates the area properties of this ModelerGeometry object. 
+  
+    The method validates the origin, xAxis, and yAxis parameters to ensure that:
+* axes are perpendicular to each other.
+* axes and the origin lie in the same plane as the region.
+
+  \param origin        [in]  Origin of the coordinate system to use for evaluation (WCS). 
+  \param xAxis         [in]  X-axis of the coordinate system to use for evaluation (WCS).
+  \param yAxis         [in]  Y-axis of the coordinate system to use for evaluation (WCS).
+  \param perimeter     [out] Reference for returning the value of the ModelerGeometry object's perimeter.
+  \param area          [out] Reference for returning the value of the ModelerGeometry object's area.
+  \param centroid      [out] Reference for returning the centroid of the ModelerGeometry object.
+  \param momInertia    [out] Static array for returning moments of inertia for the ModelerGeometry object.
+  \param prodInertia   [out] Reference for returning the ModelerGeometry object's product of inertia.
+  \param prinMoments   [out] Static array for returning principal moments for the ModelerGeometry object. 
+  \param prinAxes      [out] Static array for returning principle axes of the ModelerGeometry object. 
+  \param radiiGyration [out] Static array for returning radii of gyration of the ModelerGeometry object. 
+  \param extentsLow    [out] Reference for returning the ModelerGeometry object's minimum extents point. 
+  \param extentsHigh   [out] Reference for returning the ModelerGeometry object's maximum extents point.
+
+  \returns Returns eOk if successful, or an appropriate error code otherwise.
+
+  \remarks 
+  Returned values are measured using the values of origin, xAxis, and yAxis parameters, 
+  and are represented in WCS coordinates.
+  */
+  virtual OdResult getAreaProp( const OdGePoint3d& origin, const OdGeVector3d& xAxis,
+    const OdGeVector3d& yAxis, double& perimeter,
+    double& area, OdGePoint2d& centroid,
+    double momInertia[2], double& prodInertia,
+    double prinMoments[2], OdGeVector2d prinAxes[2],
+    double radiiGyration[2], OdGePoint2d& extentsLow,
+    OdGePoint2d& extentsHigh ) const = 0;
+  
+  /** \details
+    Clears the contents of this ModelerGeometry object.
+    
+    \returns Returns eOk if successful, or an appropriate error code otherwise.
+  */
+  virtual OdResult clear( ) = 0;
+  
+  /** \details
+    Creates a ModelerGeometry object by extruding a region along a path curve. 
+
+    \param region [in] Pointer to a region object for extruding from.
+    \param path   [in] Pointer to a curve object to extrude along. Must be one of the following: 
+* Line
+* OdDbArc
+* OdDbCircle
+* Ellipse
+* OdDbSpline
+* OdDb2dPolyline
+* non-spline fit OdDb3dPolyline
+
+    \param taperAngle [in] Extrusion taper angle in radians. Default value is 0.0. 
+    Value must be between 0.5 pi and -0.5 pi. 
+    If the path represented by the OdDbCurve object is closed, the taper angle parameter is ignored.
+    \param isSolid [in] Boolean flag that indicates that the ModelerGeometry object is a solid.
+    
+    \returns Returns eOk if extruding operation is successful or an appropriate error code if not.
+
+    \remarks
+    Entity path must not have self-intersections, and it is recommended that the path not have high curvature areas. 
+    The following constraints are applied: |taper Angle| >= 1e-6
+  */
+  virtual OdResult extrudeAlongPath(const OdDbRegion* region, const OdDbCurve* path, double taperAngle = 0.0, bool isSolid = true) = 0;
+  
+  /** \details
+    Intersects the given entity with this ModelerGeometry object and imprints their intersection graph 
+    onto the ModelerGeometry object. 
+
+    \param pEntity [in] A pointer to an entity to be imprinted.
+
+    \returns Returns eOk if imprinting entity onto the ModelerGeometry object is successful or an appropriate error code if not. 
+  
+    \remarks
+    The given entity must be one of the following:
+* Curve
+* OdDb3dSolid
+* Body
+* Region
+* Trace
+* OdDbSolid
+* Face
+
+    If the ModelerGeometry object is null, or if the given entity is not one of the entities listed 
+    above, eInvalidInput is returned.
+    If as a result of intersection a closed loop of new edges is created, a new face will be made. 
+    If an open loop of edges is made, it can be added to an existing loop as a spur. 
+    Or it can be added as a slit in the face. 
+  */
+  virtual OdResult imprintEntity(const OdDbEntity *pEntity) = 0;
+  
+  /** \details
+    Checks whether the solid interferes with another solid object.
+
+    \param otherSolid         [in] A pointer to another solid object for checking interference.
+    \param createNewSolid     [in] A flag determining where a new solid object containing the interference must be created.
+    \param solidsInterfere    [out] A reference to a boolean variable where the result of the interference checking will be stored and returned.
+    \param commonVolumeSolid  [out] A reference to a pointer to a new solid containing the interference of the origin solid and otherSolid. 
+
+    \returns Returns eOk if interference checking is successful or an appropriate error code in other case.
+
+    \remarks
+    The caller of this function is responsible for the memory used by the object pointed to by commonVolumeSolid (resulting from intersection of this solid and otherSolid) when the function finishes. 
+    If commonVolumeSolid is added to a database, the database takes responsibility for the memory pointed to by commonVolumeSolid. 
+    If commonVolumeSolid is not added to a database, the caller must delete memory when it is no longer needed to avoid a memory leak.
+  */
+  virtual OdResult checkInterference(const OdDb3dSolid* otherSolid,
+    bool createNewSolid, 
+    bool& solidsInterfere,
+    OdDb3dSolidPtr &commonVolumeSolid)
+    const = 0;
+  
+  /** \details
+    Returns volume properties of the ModelerGeometry object.
+
+    \param volume         [out] Reference for returning the volume of the ModelerGeometry object.
+    \param centroid       [out] Reference to an OdGePoint3d object for returning the point, representing the centroid of the ModelerGeometry object.
+    \param momInertia     [out] A static array for returning X, Y, Z moments of inertia of the ModelerGeometry object.
+    \param prodInertia    [out] A static array for returning X, Y, Z products of inertia of the ModelerGeometry object. 
+    \param prinMoments    [out] A static array for returning X, Y, Z principal moments of the ModelerGeometry object.
+    \param prinAxes       [out] A static array for returning an OdGeVector3d object, determining principal axes of the ModelerGeometry object.
+    \param radiiGyration  [out] A static array for returning X, Y, Z radii of gyration of the ModelerGeometry object.
+    \param extents        [out] A reference to an OdGeExtents3d object for returning the bounding box of the ModelerGeometry object.
+
+    \returns Returns the result of getting volume properties of the ModelerGeometry object: 
+    eOk if successful or an appropriate error code in other case. All properties are evaluated in the WCS.
+  */
+  virtual OdResult getMassProp(double& volume,
+    OdGePoint3d& centroid,
+    double momInertia[3],
+    double prodInertia[3],
+    double prinMoments[3],
+    OdGeVector3d prinAxes[3], 
+    double radiiGyration[3],
+    OdGeExtents3d& extents) const = 0;
+  
+  /** \details
+    Creates a DbRegion entity as a result of the intersection between the specified plane and the ModelerGeometry object. 
+
+    \param plane          [in] Reference to an OdGePlane object to use as the section cutting plane.
+    \param sectionRegion  [out] Reference to a new region created as the result of the intersection between the specified plane and the ModelerGeometry object.
+    \param pSectionCurves [out] Pointer to an array of section curves.
+ 
+    \returns Returns the result of intersecting the ModelerGeometry object with a 
+    plane: eOk if successful or an appropriate error code in other case. 
+    Value eOk is also returned when a plane and the ModelerGeometry object do not 
+    intersect each other or if the intersection region is not a valid region, that is, 
+    it intersects at a point, along a bounding face of the ModelerGeometry object and so on. 
+  */
+  virtual OdResult getSection(const OdGePlane& plane, OdDbRegionPtr &sectionRegion, OdDbEntityPtrArray* pSectionCurves = NULL) const = 0;
+  
+  /** \details
+    Slices the ModelerGeometry object with a plane and transforms the native ModelerGeometry object
+    to be the portion remaining on the positive side of the normal of the slicing plane.
+
+    \param plane         [in] Reference to a slicing plane.
+    \param getNegHalfToo [in] Flag determining whether the other (negative) part of the native ModelerGeometry object should be created as a separate ModelerGeometry object (when true).
+    \param negHalfSolid  [out] Reference to a pointer to the created ModelerGeometry object representing the negative half of the native ModelerGeometry object. If getNegHalfToo is false, NULL value is returned.
+
+    \returns Returns eOk if the native ModelerGeometry object was successfully sliced or an appropriate error code in other case. 
+    If the slicing plane does not intersect the ModelerGeometry object, the ModelerGeometry object is left unchanged, negHalfSolid is set to NULL, and eOk is returned. 
+
+    \remarks
+    The caller of this function is responsible for the memory used by the object pointed to by negHalfSolid when the function finishes. 
+    If negHalfSolid is added to a database, the database takes responsibility for the memory. 
+    If negHalfSolid is not added to a database, the caller must delete memory when it is no longer needed to avoid a memory leak.
+  */
+  virtual OdResult getSlice(const OdGePlane& plane, bool getNegHalfToo, OdDb3dSolidPtr &negHalfSolid) = 0;
+  
+  /** \details
+    Slices the ModelerGeometry object with a surface and transforms the native ModelerGeometry object to be the portion remaining on the positive side of the slicing surface normal.
+
+    \param pSurface       [in] Pointer to a slicing surface.
+    \param bGetNegHalfToo [in] Flag determining whether the other (negative) part of the native ModelerGeometry object should be created as a separate ModelerGeometry object (when true).
+    \param pNegHalfSolid  [out] Reference to a pointer to the created ModelerGeometry object representing the negative half of the native ModelerGeometry object. If bGetNegHalfToo is false, NULL value is returned.
+
+    \returns Returns eOk if the native ModelerGeometry object was successfully sliced or an appropriate error code in other case. 
+    If pSurface pointer is NULL or the ModelerGeometry object is empty, returns eInvalidInput.
+    
+    \remarks
+    The native ModelerGeometry object will be transformed to a resulting body which is located in the negative side of the surface normal.	
+    
+    The caller of this function is responsible for the memory used by the object pointed to by pNegHalfSolid when the function finishes. 
+    If pNegHalfSolid is added to a database, the database takes responsibility for the memory. 
+    If pNegHalfSolid is not added to a database, the caller must delete memory when it is no longer needed to avoid a memory leak.
+  */
+  virtual OdResult getSlice(OdDbSurface* pSurface, bool bGetNegHalfToo, OdDb3dSolidPtr& pNegHalfSolid) = 0;
+ 
+  /** \details
+    Removes all edges and faces that are not needed for supporting the topology of the ModelerGeometry object. 
+
+    \returns Returns eOk if successful or an appropriate error code in other case.
+  */
+  virtual OdResult cleanBody() = 0;
+  
+  /** \details
+    Offsets all faces by the specified distance. 
+
+    \param offsetDistance) [in] A distance for offset.
+
+    \returns Returns eOk if all faces are successfully offset, or an appropriate error code in other case. 
+    Returns eInvalidInput if the offsetDistance is less than -maxSide/2, 
+    where maxSide is the size of the greater side of the ModelerGeometry object's bounding box. 
+    Also, eInvalidInput is returned when the absolute value of offsetDistance is less than 1e-6.
+    
+    \remarks
+    If a face has surfaces that cannot be offset, it is removed. Therefore, the offset operation 
+    can cause the ModelerGeometry object to become invalid. 
+  */
+  virtual OdResult offsetBody(double offsetDistance) = 0;
+
+  /** \details
+    Separates the ModelerGeometry object into an array of solids representing the additional disjoint volumes. 
+    This ModelerGeometry object is reduced to a solid with one volume. 
+
+    \param newSolids [out] Reference to an array of pointers to OdDb3dSolid objects representing the additional disjoint volumes. 
+
+    \returns Returns eOk if separating was successful or an appropriate error code in other case.
+
+    \remarks
+    The calling application is responsible for the resulting entities (either appending them to a database or deleting them when they are no longer needed). 
+    If the new solids from the output array are not appended to the database, there will be a memory leak. 
+  */
+  virtual OdResult separateBody(OdDb3dSolidPtrArray &newSolids) = 0;
+  /** \details
+    Creates an object by sweeping a planar curve, region, or planar surface in the direction of the given vector using a distance equal to the length of the vector.
+
+    \param pSweepEnt    [in] A pointer to the swept entity.
+    \param directionVec [in] Vector determining the direction and length of extruding.
+    \param sweepOptions [in] A set of sweeping options.
+    \param isSolid [in] Boolean flag that indicates that this ModelerGeometry object is solid.
+    
+    \returns Returns eOk if extruding was successful or an appropriate error code in other case.
+    
+    \remarks
+    Sweeping parameters (for example, angle) are set through the sweepOptions object reference. 
+  */
+  virtual OdResult createExtrudedObject ( OdDbEntity* pSweepEnt,
+                                          const OdGeVector3d& directionVec,
+                                          OdDbSweepOptions& sweepOptions,
+                                          bool isSolid = true) = 0;
+  /** \details
+    Creates a lofted object from the given curves.
+
+    \param crossSectionCurves [in] Array of curve entities to be used as cross sections for the lofting operation.
+    \param guideCurves [in] Array of guide curves.
+    \param pPathCurve [in] Path curve.
+    \param loftOptions [in] Options for lofting.
+    \param isSolid [in] Boolean flag.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+
+    \remarks
+    Lofting parameters can be passed with the loftOptions parameter. 
+  */
+  virtual OdResult createLoftedObject (
+    OdDbEntityPtrArray& crossSectionCurves,
+    OdDbEntityPtrArray& guideCurves,
+    OdDbEntity* pPathCurve, 
+    OdDbLoftOptions& loftOptions,
+    bool isSolid = true) = 0;
+  
+  /** \details
+    Creates a pyramid. World origin is centered about the base of the pyramid and the pyramid is positioned at half of the specified height above the world origin.
+
+    \param height     [in] Value of the pyramid's height.
+    \param sides      [in] Quantity of sides for the pyramid.
+    \param radius     [in] Radius for circle inscribed into the bottom polygon.
+    \param topRadius  [in] Radius for circle inscribed into the top polygon. 
+
+    \returns Returns eOk if successful or an appropriate error code in the other case. 
+    
+    \remarks 
+    The pyramid's base is located in the X-Y plane of the WCS. The pyramid's direction (from the base to the top) coincides with the positive direction of the Z-axis.
+    When radius and topRadius values are equal, a prism is created. 
+
+    The following constraints are applied:
+* |height| >= 1e-6;
+* |radius| >= 1e-6;
+* |topRadius| >= 1e-6;
+* 3 <= sides <= 64.
+  */
+  virtual OdResult createPyramid(double height, int sides, 
+    double radius, double topRadius = 0.0 ) = 0;
+
+  /** \details
+    Creates an object by revolving a specified curve, region, or planar surface around the specified axis of revolution.
+
+    \param pRevEnt        [in] Pointer to the planar curve, region, or planar surface that must be revolved. 
+    \param axisPnt        [in] Point on the axis of revolution.
+    \param axisDir        [in] Direction of the revolution axis.
+    \param revAngle       [in] Revolve angle in radians.
+    \param startAngle     [in] Start angle of rotation. If 0, rotation will start from the current position of pRevEnt.
+    \param revolveOptions [in] Revolve options.
+    \param isSolid        [in] Boolean flag.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case. 
+    
+    \remarks
+    Axis of revolution is defined by a point (axisPnt) and vector (axisDir). 
+    pRevEnt will be revolved according to the start and revolve angles counter-clockwise about the axisDir vector. 
+    
+    Options for revolving can be specified with the revolveOptions object reference.
+  */
+  virtual OdResult createRevolvedObject ( OdDbEntity* pRevEnt,
+    const OdGePoint3d& axisPnt,
+    const OdGeVector3d& axisDir,
+    double revAngle, double startAngle,
+    OdDbRevolveOptions& revolveOptions,
+    bool isSolid = true) = 0;
+
+  /** \details
+    Creates a swept object by sweeping a face along the specified path.
+
+    \param pSweepEnt    [in] Pointer to the face entity for sweeping.
+    \param pPathEnt     [in] Pointer to the curve entity that determines the path to sweep along.
+    \param sweepOptions [in] Sweep options.
+    \param isSolid      [in] Boolean flag.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+    
+    \remarks
+    To set optional sweep parameters (for example, draft angle) use the sweepOptions parameter. 
+    The default value for the alignment option of OdDbSweepOptions (returned by align() method) is kNoAlignment. 
+    Set it to kAlignSweepEntityToPath before calling this method.
+  */
+  virtual OdResult createSweptObject ( OdDbEntity* pSweepEnt,
+    OdDbEntity* pPathEnt,
+    OdDbSweepOptions& sweepOptions,
+    bool isSolid = true) = 0;
+
+  // Loft options utility functions
+  /** \details
+    Checks whether cross section curves are valid for the lofting operation. 
+
+    \param crossSectionCurves   [in]  A list of cross-section curves.
+    \param allOpen              [out] A passed-in parameter indicating whether all of the cross-section curves are open.
+    \param allClosed            [out] A passed-in parameter indicating whether all of the cross-section curves are closed.
+    \param allPlanar            [out] A passed-in parameter indicating whether all of the cross-section curves are planar.
+    \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+
+    \returns Returns eOk if curves are valid or eInvalidInput otherwise.
+  */
+  virtual OdResult checkCrossSectionCurves (
+    OdDbEntityPtrArray& crossSectionCurves,
+    bool& allOpen, bool& allClosed, bool& allPlanar,
+    bool displayErrorMessages = false ) = 0;
+  
+  /** \details
+    Checks whether guide curves are valid for the lofting operation.
+
+    \param guideCurves          [in] A list of guide curves.
+    \param displayErrorMessages [in] Indicates whether error messages are displayed. Default value is false.
+
+    \returns Returns eOk if guide curves are valid or eInvalidInput otherwise.
+  */
+  virtual OdResult checkGuideCurves ( OdDbEntityPtrArray& guideCurves,
+    bool displayErrorMessages = false ) = 0;
+  
+  /** \details
+    Checks whether a path curve is valid for the lofting operation.
+
+    \param pPathCurve           [in] A pointer to the path curve (can be NULL).
+    \param displayErrorMessages [in] Indicates whether error messages are displayed. Default value is false.
+
+    \returns Returns eOk if a path curve is valid or eInvalidInput otherwise.
+  */
+  virtual OdResult checkPathCurve ( OdDbEntity *pPathCurve,
+    bool displayErrorMessages = false ) = 0;
+
+  // Sweep options utility functions
+  /** \details
+    Determines if the specified sweep entity is valid and returns the planarity of the sweep entity.
+
+    \param pSweepEnt            [in]  A pointer to the curve, region, or planar surface to be swept.
+    \param planarity            [out] A passed-in parameter for returning the planarity flag of the entity.
+    \param pnt                  [out] A passed-in parameter for returning the point on the sweep entity if planarity is kPlanar, or a point on the line if planarity is kLinear.
+    \param vec                  [out] A passed-in parameter for returning the normal vector of the entity if planarity is kPlanar, or the line direction if planarity is kLinear.
+    \param closed               [out] A passed-in parameter for returning the closed flag determining whether an entity to be swept is a closed entity.
+    \param approxArcLen         [out] A passed-in parameter for returning the approximate arc length.
+    \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+
+    \returns If kPlanar is returned, then pnt and vec will specify the normal plane
+    of the entity. If kLinear is returned, then pnt and vec will specify
+    a defining point and direction of the sweep entity.
+  */
+  virtual OdResult  checkSweepCurve ( OdDbEntity *pSweepEnt,
+    OdDb::Planarity& planarity, OdGePoint3d& pnt, OdGeVector3d& vec,
+    bool& closed, double& approxArcLen, bool displayErrorMessages = false ) = 0;
+
+  virtual OdResult  checkSweepPathCurve ( OdDbEntity *pPathEnt,    bool displayErrorMessages = false ) = 0;
+
+  // Revolve options utility functions
+  /** \details
+    Checks whether a specified entity is valid for the revolve operation.
+
+    \param pRevEnt              [in]  A pointer to the entity (curve or region) to be revolved.
+    \param axisPnt              [in]  A point on the axis of revolution.
+    \param axisDir              [in]  A vector determining the direction of the revolution axis.
+    \param closed               [out] A passed-in parameter for returning the indicator determining whether the revolved entity is closed.
+    \param endPointsOnAxis      [out] A passed-in parameter for returning the indicator determining whether the revolved entity is open and whether its endpoints lie on the axis of revolution.
+    \param planar               [out] A passed-in parameter for returning the indicator determining whether the revolved entity is planar.
+    \param displayErrorMessages [in]  Indicates whether error messages are displayed. Default value is false.
+
+    \returns Returns eOk if a specified entity is valid for revolving, or eInvalidInput otherwise.
+  */
+  virtual OdResult checkRevolveCurve(
+    OdDbEntity* pRevEnt,
+    const OdGePoint3d& axisPnt,
+    const OdGeVector3d& axisDir,
+    bool& closed,
+    bool& endPointsOnAxis,
+    bool& planar,
+    bool displayErrorMessages = false) = 0;
+
+  /** \details
+    Creates an extruded surface when given a planar entity with thickness, 
+    or creates a plane surface when given a simple, closed planar entity.
+
+    \param pFromEntity [in]  Pointer to either a planar entity with thickness, a simple, closed planar entity, or an OdDbSolid entity 
+    pointed to by pFromEntity. 
+
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not. 
+  */
+  virtual OdResult createFrom ( const OdDbEntity* pFromEntity ) = 0;
+
+  /** \details
+    Creates region (OdDbRegion class) entities for each face of the ModelerGeometry object. 
+
+    \param regions [out]  Reference to an array of the OdDbRegion entities created from the face of the ModelerGeometry object.
+  
+    \returns Returns eOk if successful, or an appropriate error code otherwise.
+  */
+  virtual OdResult convertToRegion ( OdDbEntityPtrArray& regions ) = 0;
+
+  /** \details
+    Creates a 3D solid object by thickening the surface by a specified amount. 
+    
+    \param thickness  [in] Amount to thicken the surface.
+    \param bBothSides [in] Flag indicating whether the thickening should be applied to both sides of the surface.
+    \param pSolid     [out] Reference to an OdDb3dSolid object pointer created during the thickening. If thickening fails, this parameter is NULL.
+    
+    \returns Returns eOk if successful, or an appropriate error code otherwise.
+  */
+  virtual OdResult thicken(double thickness, bool bBothSides, OdDb3dSolidPtr& pSolid) const = 0;
+  /** \details
+    This method returns eOk if successful.
+
+    \param ent [in]  An entity with which this entity is intersected.
+    \param intType [in]  Type of intersection.
+    \param points [out]  An array of points in which the intersection points should be appended.
+    \param thisGsMarker [in]  GS marker of the subentity of this entity which is involved in the intersection.
+    \param otherGsMarker [in]  GS marker of the subentity of the entity pointed to by pEnt which is involved in the intersection.
+  */
+  virtual OdResult intersectWith( const OdDbEntity* ent, OdDb::Intersect intType, 
+    OdGePoint3dArray& points, OdGsMarker thisGsMarker, OdGsMarker otherGsMarker ) const = 0;
+
+  /** \details
+    This method returns eOk if successful.
+
+    \param ent [in]  An entity with which this entity is intersected.
+    \param intType [in]  Type of intersection.
+    \param projPlane [in]  A projection plane for the intersection of the two entities.
+    \param points [out]  An array of points in which the intersection points should be appended.
+    \param thisGsMarker [in]  GS marker of the subentity of this entity which is involved in the intersection.
+    \param otherGsMarker [in]  GS marker of the subentity of the entity pointed to by pEnt which is involved in the intersection.
+  */
+  virtual OdResult intersectWith( const OdDbEntity* ent, OdDb::Intersect intType, const OdGePlane& projPlane, 
+    OdGePoint3dArray& points, OdGsMarker thisGsMarker, OdGsMarker otherGsMarker ) const = 0;
+
+  virtual OdResult copySubEntity(const OdDbSubentId &subentId, OdDbEntityPtr &newEntity) const = 0;
+  /** \details
+    Tapers specified faces about a specified base point and draft vector for a specified draft angle.
+
+    \param faceSubentIds [in] Array of faces' subentity IDs. Faces with specified IDs will be tapered.
+    \param basePoint     [in] Reference to the base point of the draft plane.
+    \param draftVector   [in] Reference to the draft direction vector.
+    \param draftAngle    [in] Draft angle in radians.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+
+    \remarks
+    The base point and draft vector define a draft plane about which faces are tapered. 
+    If a face is lying in the draft plane, it will not be modified. 
+  */
+  virtual OdResult taperFaces(const OdArray<OdDbSubentId *> &faceSubentIds, const OdGePoint3d &basePoint, 
+                              const OdGeVector3d &draftVector, double draftAngle) = 0;
+  /** \details
+    Removes the specified faces from this ModelerGeometry object.
+
+    \param faceSubentIds [in] Array of faces' subentity IDs. Faces with specified IDs will be removed.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+    
+    \remarks
+    After removing the specified faces, the adjacent faces will enlarge to fill the gaps. 
+  */
+  virtual OdResult removeFaces(const OdArray<OdDbSubentId *> &faceSubentIds) = 0;
+
+  /** \details
+    Offsets the specified faces of this ModelerGeometry object for the specified distance.
+
+    \param faceSubentIds  [in] Array of faces' subentity IDs. Faces with specified IDs will be offset.
+    \param offsetDistance [in] Offset distance.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+    
+    \remarks
+    The following constraints are applied:
+* number of specified faces (in faceSubentIds parameter) must be more than zero
+* offsetDistance >= minus half of the max side of the ModelerGeometry object's bounding box
+* |offsetDistance| >= 1e-6
+  */
+  virtual OdResult offsetFaces(const OdArray<OdDbSubentId *> &faceSubentIds, double offsetDistance) = 0;
+
+  /** \details
+    Transforms this ModelerGeometry object into a thin-walled ModelerGeometry object shell by offsetting faces. 
+
+    \param faceSubentIds  [in] Array of faces' subentity IDs. Faces with specified IDs will be removed from the shell.
+    \param offsetDistance [in] Offset distance for each face.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+
+    \remarks 
+    Offset can have an outside or inside direction related to the ModelerGeometry object, depending on the sign of the offsetDistance parameter:
+* positive value means outside direction
+* negative value means inside direction
+  */
+  virtual OdResult shellBody(const OdArray<OdDbSubentId *> &faceSubentIds, double offsetDistance) = 0;
+
+  /** \details
+    Transforms the specified faces of a ModelerGeometry object by applying the transformation 
+    matrix for rotation and (or) moving the faces. 
+
+    \param faceSubentIds  [in] Array of faces' subentity IDs. Faces with specified IDs will be transformed.
+    \param matrix         [in] Transformation matrix to be applied to the specified faces.
+
+    \returns Returns eOk if successful or an appropriate error code in other case.	
+  */
+  virtual OdResult transformFaces(const OdArray<OdDbSubentId *> &faceSubentIds, const OdGeMatrix3d &matrix) = 0;
+
+  /** \details
+    This method returns eOk if successful.
+
+    \param type [in]  A subentity type specified by the OdDb::SubentType enumeration.
+    \param gsMark [in]  GS marker representing a specific subentity.
+    \param pickPoint [in]  WCS coordinates of the point picked during the selection of the entity.
+    \param viewXform [in]  A transformation matrix to transform from WCS to DCS.
+    \param subentPaths [out]  An array of full subentity path objects identifying the subentities generated from the GS marker.
+    \param entAndInsertStack [in]  An array of object IDs that are the nested containers of the subentity.
+  */
+  virtual OdResult getSubentPathsAtGsMarker(OdDb::SubentType type,
+                                            OdGsMarker gsMark, 
+                                            const OdGePoint3d& pickPoint,
+                                            const OdGeMatrix3d& viewXform, 
+                                            OdDbFullSubentPathArray& subentPaths, 
+                                            const OdDbObjectIdArray* entAndInsertStack = 0) const = 0;
+  /** \details
+    Returns an array of GS markers. 
+
+    \param subPath [in]  A full subentity path object identifying the subentity.
+    \param gsMarkers [out]   An array with GSMarkers for the subentities.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getGsMarkersAtSubentPath(const OdDbFullSubentPath& subPath, 
+                                            OdGsMarkerArray& gsMarkers) const = 0;
+  /** \details
+    For internal use only.
+    
+    \param ent [in] ACIS object pointer. 
+  */
+  virtual OdDbSubentId internalSubentId(void* ent) const = 0;
+
+  /** \details
+    For internal use only.
+    
+    \param id [out] Subentity ID in the ACIS object. 
+  */
+  virtual void* internalSubentPtr(const OdDbSubentId& id) const = 0;
+
+  virtual bool getNurbCurvesCache(OdGeCurve3dPtrArray &)  const { return false; }
+
+  // for internal use only
+  virtual OdResult setBody(const void * /*pBody*/) { return eNotImplemented; }
+  virtual void * body( ) const { return 0; }
+  
+  /** \details
+    Sets the color of the specified face or edge subentity. 
+
+    \param subentId [in] ID of the subentity (face or edge) to be colored.
+    \param color    [in] Color value to set.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult setSubentColor(const OdDbSubentId &subentId, const OdCmColor &color) = 0;
+
+  /** \details
+    Returns the color of the specified subentity.
+
+    \param subentId [in] ID of the subentity.
+    \param color    [in] A reference to an OdCmColor object to store the current color of the specified subentity.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getSubentColor(const OdDbSubentId &subentId, OdCmColor &color) const = 0;
+  
+  /** \details
+    Sets a material for the specified subentity.
+
+    \param subentId [in] Subentity ID. 
+    \param matId    [in] Object ID for the material.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+    
+    \remarks
+    To remove the currently assigned material, set matId parameter value to NULL.    
+  */
+  virtual OdResult setSubentMaterial(const OdDbSubentId &subentId, OdDbObjectId matId) = 0;
+
+  /** \details
+    Returns the material of the specified subentity.
+
+    \param subentId [in] Subentity ID.
+    \param matId    [in] Reference to an OdDbObjectId for returning the material object ID.
+    
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getSubentMaterial(const OdDbSubentId &subentId, OdUInt64& matId) const = 0;
+
+  virtual OdResult setSubentMaterialMapper( const OdDbSubentId &subentId, 
+                                            OdGeMatrix3d &mx, 
+                                            OdUInt8 &projection, 
+                                            OdUInt8 &tiling, 
+                                            OdUInt8 &autoTransform) = 0;
+  virtual OdResult getSubentMaterialMapper( const OdDbSubentId &subentId,
+                                            OdGeMatrix3d &mx, 
+                                            OdUInt8 &projection, 
+                                            OdUInt8 &tiling, 
+                                            OdUInt8 &autoTransform) const = 0;
+  /** \details
+    Creates chamfers at the edges of a ModelerGeometry object.
+
+    \param edgeSubentIds    [in] Array of edge object IDs. The chamfer will be applied at the specified edges.
+    \param baseFaceSubentId [in] Base face object IDs. Chamfer will be applied on the specified face.
+    \param baseDist         [in] Chamfer distance for the base face.
+    \param otherDist        [in] Chamfer distance for the other faces.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult chamferEdges(const OdArray<OdDbSubentId *> &edgeSubentIds,
+                                const OdDbSubentId& baseFaceSubentId, 
+                                double baseDist, 
+                                double otherDist) = 0;
+  /** \details
+    Creates rounded fillets on the edges of a ModelerGeometry object.
+
+    \param edgeSubentIds [in] Array of edges' object IDs. Fillet will be applied on the specified edges.
+    \param radius        [in] Array of fillet radius values for the corresponding edges.
+    \param startSetback  [in] Array of start setback values for the corresponding edges.
+    \param endSetback    [in] Array of end setback values for the corresponding edges.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult filletEdges( const OdArray<OdDbSubentId *> &edgeSubentIds,
+                                const OdGeDoubleArray& radius, 
+                                const OdGeDoubleArray& startSetback, 
+                                const OdGeDoubleArray& endSetback) = 0;
+
+  /** \details
+    Intersects the specified plane with this ModelerGeometry object and creates the intersection in a resulting array. 
+ 
+    \param sectionPlane   [in]  Pointer to a plane object used for intersection (section cutting plane).
+    \param sectionObjects [out] A reference to an entity array for representing resulting sections.
+    
+    \returns 
+    Returns eOk if the intersection operation is successfully performed, or an appropriate error code otherwise. 
+  */
+  virtual OdResult createSectionObjects(const OdGePlane& sectionPlane, OdDbEntityPtrArray& sectionObjects) const = 0;
+
+  /** \details
+    Creates new entities that represent the result of interference between this ModelerGeometry object and a specified entity. 
+    Created entities are appended to the specified array.
+
+    \param interferenceObjects [out]  Output array of interference entities.
+    \param pEntity             [in]   Pointer to an entity the object must interfere with. pEntity can point to the following entity types: OdDbSurface, OdDb3dSolid, OdDbRegion, or OdDbBody.
+    \param flags               [in]   Interference flags; equal to kDefault (0x00).
+
+    \returns Returns eOk if interference entities are successfully created or an appropriate error code otherwise. 
+    For example, if interference entities are not created, eNoIntersection error code is returned.
+    eInvalidInput is returned if an unsupported entity or NULL pointer is provided as a value of pEntity.  
+  */
+  virtual OdResult createInterferenceObjects( OdDbEntityPtrArray& interferenceObjects,
+                                              OdDbEntityPtr pEntity, 
+                                              unsigned int flags ) const = 0;
+  /** \details
+    Slices this ModelerGeometry object with the specified plane and sets the object to be the portion on the positive normal side plane. 
+    
+    \param slicePlane      [in]   Reference to a plane object to be used for slicing the ModelerGeometry object.
+    \param pNegHalfSurface [out]  Pointer to a new surface representing the negative side of the object that is sliced by the specified plane.
+    \param pNewSurface     [out]  Pointer to a new surface representing the positive half of the object that is sliced by the specified plane.
+    \param bNotModifyItself [in]  Boolean flag.
+    
+    \returns Returns eOk if the slicing operation is successfully performed or an appropriate error code otherwise. 
+  */
+  virtual OdResult sliceByPlane(const OdGePlane& slicePlane, OdDbSurfacePtr& pNegHalfSurface, OdDbSurfacePtr& pNewSurface, bool bNotModifyItself) = 0;
+  
+  /** \details
+    Slices this ModelerGeometry object with the specified surface. 
+
+    \param pSlicingSurface [in]  Pointer to the surface to be used to slice this object. 
+    \param pNegHalfSurface [out] Pointer to a new surface object representing the other (negative) side of the sliced surface.
+    \param pNewSurface     [out] Pointer to a new surface object representing the positive side of the sliced surface.
+    \param bNotModifyItself [in] Boolean flag.
+    
+    \returns Returns eOk if the slicing operation is successfully performed or an appropriate error code otherwise. 
+  */
+  virtual OdResult sliceBySurface(const OdDbSurfacePtr pSlicingSurface, OdDbSurfacePtr& pNegHalfSurface, OdDbSurfacePtr& pNewSurface, bool bNotModifyItself) = 0;
+
+  /** \details
+    Extrudes faces of the ModelerGeometry object with specified distance and taper angle.
+
+    \param faceSubentIds  [in] Face's subentity ID in the drawing object.
+    \param height         [in] Distance of extrusion.
+    \param taper          [in] Taper angle.
+  
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+    
+    \remarks  
+    The distance of extrusion is determined by the height parameter and the taper angle (the taper parameter). 
+  
+    The extrusion direction can be along or opposite the normal of each extruded face depending on the height value: 
+* If height is positive, direction is along the normal (extruding faces outward from the drawing object).
+* If height is negative, direction is opposite the normal (extruding faces into the drawing object).
+  
+    If the absolute value of taper is less than 1e-6, taper angle is assumed to be equal to 0.0.
+
+    If taper value does not equal 0.0, each face should have edges that join together smoothly (i.e. tangents at the points of connection must be equal). 
+  
+    The following constraints are applied:
+* number of specified faces (in faceSubentIds parameter) must be more than zero
+* |height| >= 1e-6
+* |taper| >= (PI/2) - 1e-6
+  */
+  virtual OdResult extrudeFaces(const OdArray<OdDbSubentId *> &faceSubentIds, double height, double taper) = 0;
+  
+  /** \details
+    Extrudes specified faces along the specified path determined by a curve entity. 
+
+    \param faceSubentIds [in] Array of faces' subentity IDs. Faces with specified IDs will be extruded.
+    \param path          [in] Pointer to a curve object to extrude along (extrusion path). Can not be NULL.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+
+    Faces for extrusion must be planar.
+    
+    Curve entity must be one of the following:
+* OdDbLine
+* OdDbArc
+* OdDbEllipse
+* OdDbSpline
+* OdDb2dPolyline
+* Non-spline fit OdDb3dPolyline
+
+    Extrusion path must not have self-intersections. Also it is recommended that the path doesn't have high curvature areas. 
+    If one of the end points of the path is not located on the region's plane, the path will move the point on the plane. 
+  */
+  virtual OdResult extrudeFacesAlongPath(const OdArray<OdDbSubentId *> &faceSubentIds, const OdDbCurve* path) = 0;
+  
+  virtual OdResult ChangeFacesDoubleSidedParam(bool isDoubleSided) = 0;
+
+  /** \details
+    Converts this ModelerGeometry object to nurb surfaces.
+    
+    \param nurbSurfaceArray [in] Array of generated nurb surfaces.
+    
+    \returns Returns eOk if converting operation was successfully finished or an appropriate error code otherwise. 
+  */
+  virtual OdResult convertToNurbSurface(OdDbNurbSurfaceArray& nurbSurfaceArray) = 0;
+
+  virtual OdResult get( int& iUDegree, int& iVDegree, bool& bRational, int& iUNumControlPoints, int& iVNumControlPoints,
+                        OdGePoint3dArray& ctrlPtsArr, OdGeDoubleArray& weights, 
+                        OdGeKnotVector& uKnots, OdGeKnotVector& vKnots) const = 0;
+
+  virtual OdResult set (int iUDegree, int iVDegree, bool bRational, int iUNumControlPoints, int iVNumControlPoints,
+                        const OdGePoint3dArray& ctrlPtsArr, const OdGeDoubleArray& weights, 
+                        const OdGeKnotVector& uKnots, const OdGeKnotVector& vKnots) = 0;
+  /** \details
+    Returns the quantity of control points in the u direction.
+
+    \param iCount [out] A passed-in parameter for returning the quantity of control points in the u direction.
+
+    \returns Returns eOk if successful or an appropriate error code otherwise.
+  */
+  virtual OdResult getNumberOfControlPointsInU(int& iCount) const = 0;
+  
+  /** \details
+    Returns the quantity of control points in the v direction.
+
+    \param iCount [out] A passed-in parameter for returning the quantity of control points in the v direction.
+
+    \returns Returns eOk if successful or an appropriate error code otherwise.
+  */
+  virtual OdResult getNumberOfControlPointsInV(int& iCount) const = 0;
+
+  /** \details
+    Returns the quantity of knots in the u direction.
+
+    \param iCount [out] A passed-in parameter for returning the quantity of knots in the u direction.
+
+    \returns Returns eOk if successful or an appropriate error code otherwise.
+  */
+  virtual OdResult getNumberOfKnotsInU(int& iCount) const = 0;
+  
+  /** \details
+    Returns the quantity of knots in the v direction.
+
+    \param iCount [out] A passed-in parameter for returning the quantity of knots in the v direction.
+
+  \returns Returns eOk if successful or an appropriate error code otherwise.
+  */
+  virtual OdResult getNumberOfKnotsInV(int& iCount) const = 0;
+
+  /** \details
+    Returns the knot vector in the u direction.
+
+    \param knots [out] A passed-in parameter for returning the knot vector in the u direction.
+
+    \returns Returns eOk if successful or an appropriate error code otherwise.
+  */
+  virtual OdResult getUKnots(OdGeKnotVector& knots) const = 0;
+
+  /** \details
+    Returns the knot vector in the v direction.
+
+    \param knots [out] A passed-in parameter for returning the knot vector in the v direction.
+
+    \returns Returns eOk if successful or an appropriate error code otherwise.
+  */
+  virtual OdResult getVKnots(OdGeKnotVector& knots) const = 0;
+
+  /** \details
+    Returns the degree of the ModelerGeometry object in the u direction.
+
+    \param iDegree [out] A passed-in parameter for returning the degree in the u direction.
+
+    \returns Returns eOk if successful. 
+  */
+  virtual OdResult getDegreeInU(int& iDegree) const = 0;
+  
+  /** \details
+    Returns the degree of the ModelerGeometry object in the v direction.
+
+    \param iDegree [out] A passed-in parameter for returning the degree in the v direction.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult getDegreeInV(int& iDegree) const = 0;
+
+  /** \details
+    Determines whether the ModelerGeometry object is closed in the u direction.
+
+    \param bIsClosed [out] A passed-in parameter for returning the indicator of whether the ModelerGeometry object is closed in the u direction. 
+    bIsClosed is equal to true if the ModelerGeometry object is closed in the u direction, otherwise it is equal to false.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult isClosedInU(bool& bIsClosed) const = 0;
+
+  /** \details
+    Determines whether the ModelerGeometry object is closed in the v direction.
+
+    \param bIsClosed [out] A passed-in parameter for returning the indicator of whether the ModelerGeometry object is closed in the v direction. 
+    bIsClosed is equal to true if the ModelerGeometry object is closed in the v direction, otherwise it is equal to false.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult isClosedInV(bool& bIsClosed) const = 0;
+
+  /** \details
+    Determines whether the ModelerGeometry object is periodic in the u direction.
+
+    \param bIsPeriodic [out] A passed-in parameter for returning the indicator of whether the ModelerGeometry object is periodic in the u direction. 
+    bIsPeriodic is equal to true if the ModelerGeometry object is periodic in the u direction, otherwise it is equal to false.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult isPeriodicInU(bool& bIsPeriodic) const = 0;
+
+  /** \details
+    Determines whether the ModelerGeometry object is periodic in the v direction.
+
+    \param bIsPeriodic [out] A passed-in parameter for returning the indicator of whether the ModelerGeometry object is periodic in the v direction. 
+    bIsPeriodic is equal to true if the ModelerGeometry object is periodic in the v direction, otherwise it is equal to false.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult isPeriodicInV(bool& bIsPeriodic) const = 0;
+
+  /** \details
+    Returns the period value in the u direction for the ModelerGeometry object.
+    Returned value is valid only if the ModelerGeometry object is periodic in the u direction.
+
+    \param dPeriod [out] A passed-in parameter for returning the period value in the u direction.
+
+    \returns Returns eOk if successful. 
+  */
+  virtual OdResult getPeriodInU(double& dPeriod) const = 0;
+  /** \details
+    Returns the period value in the v direction for the ModelerGeometry object.
+    Returned value is valid only if the ModelerGeometry object is periodic in the v direction.
+
+    \param dPeriod [out] A passed-in parameter for returning the period value in the v direction.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult getPeriodInV(double& dPeriod) const = 0;
+
+  /** \details
+    Evaluates the position on the ModelerGeometry object at the specified parameter value (u, v).
+  
+    \param dU   [in]  u direction parameter. 
+    \param dV   [in]  v direction parameter.
+    \param pos  [out] A passed-in parameter for returning the evaluated position on the ModelerGeometry object.
+  
+    \returns Returns eOk if evaluation is successfully done. 
+    If the u or v value is out of range, returns eOutOfRange.
+  */
+  virtual OdResult evaluate(double dU, double dV, OdGePoint3d& pos) const = 0;
+
+  /** \details
+    Evaluates the position and first derivatives on the ModelerGeometry object at the specified parameter value (u, v).
+
+    \param dU     [in]  u direction parameter. 
+    \param dV     [in]  v direction parameter.
+    \param pos    [out] A passed-in parameter for returning the evaluated position on the ModelerGeometry object.
+    \param uDeriv [out] A passed-in parameter for returning the first derivative with respect to u.
+    \param vDeriv [out] A passed-in parameter for returning the first derivative with respect to v.
+
+    \returns 
+    Returns eOk if evaluation is successfully done. 
+    If the u or v value is out of range, returns eOutOfRange.
+  */
+  virtual OdResult evaluate(double dU, double dV, OdGePoint3d& pos, OdGeVector3d& uDeriv, OdGeVector3d& vDeriv) const = 0;
+
+  /** \details
+    Evaluates the position and first and second derivatives on the ModelerGeometry object at the specified parameter value (u, v).
+
+    \param dU       [in]  u direction parameter. 
+    \param dV       [in]  v direction parameter.
+    \param pos      [out] A passed-in parameter for returning the evaluated position on the surface.
+    \param uDeriv   [out] A passed-in parameter for returning the first derivative with respect to u.
+    \param vDeriv   [out] A passed-in parameter for returning the first derivative with respect to v.
+    \param uuDeriv  [out] A passed-in parameter for returning the second derivative with respect to u twice.
+    \param uvDeriv  [out] A passed-in parameter for returning the second derivative with respect to u and v. 
+    \param vvDeriv  [out] A passed-in parameter for returning the second derivative with respect to v twice. 
+
+    \returns Returns eOk if evaluation is successfully done. 
+    If the u or v value is out of range, returns eOutOfRange.
+  */
+  virtual OdResult evaluate(double dU, double dV, OdGePoint3d& pos, OdGeVector3d& uDeriv, OdGeVector3d& vDeriv,
+                            OdGeVector3d& uuDeriv, OdGeVector3d& uvDeriv, OdGeVector3d& vvDeriv) const = 0;
+
+  /** \details
+    Evaluates the position and an arbitrary number of derivatives of the ModelerGeometry object at the specified parameter value (u, v).
+
+    \param dU           [in]  u direction parameter. 
+    \param dV           [in]  v direction parameter.
+    \param iDerivDegree [in]  The degree of derivatives to evaluate.
+    \param point        [out] A passed-in parameter for returning the evaluated position on the ModelerGeometry object.
+    \param derivatives  [out] A passed-in parameter for returning derivatives array of vectors, in the order of uDeriv, vDeriv, uuDeriv, uvDeriv, vvDeriv.
+
+    \returns Returns eOk if evaluation is successfully done. 
+    If the u or v value is out of range, returns eOutOfRange.
+  */
+  virtual OdResult evaluate(double dU, double dV, int iDerivDegree, OdGePoint3d& point, OdGeVector3dArray& derivatives) const = 0;
+
+  /** \details
+    Determines whether the ModelerGeometry object is rational.
+    If the ModelerGeometry object is rational, the method returns true, otherwise the method returns false.
+
+    \param bIsRational [out] A passed-in parameter for returning the indicator of whether the ModelerGeometry object is rational.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult isRational(bool& bIsRational) const = 0;
+
+  /** \details
+    Determines whether the ModelerGeometry object is a planar surface. If the surface is planar, also returns the plane information and normal.
+    If the surface is planar, the method returns true via the bIsPlanar parameter, otherwise the method returns false.
+
+    \param bIsPlanar    [out] A passed-in parameter for returning the indicator of whether the surface is planar.
+    \param ptOnSurface  [out] A passed-in parameter for returning the point on the surface (if the surface is planar).
+    \param normal       [out] A passed-in parameter for returning the plane normal (if the surface is planar).
+
+    \returns Returns eOk if successful. If the surface doesn't contain any NURBS information, returns eFail. 
+  */
+  virtual OdResult isPlanar(bool& bIsPlanar, OdGePoint3d& ptOnSurface, OdGeVector3d& normal) const = 0;
+
+  /** \details
+    Determines whether a specified point is on the ModelerGeometry object.
+    If the specified point is on the ModelerGeometry object, the method returns true via bOnSurface, otherwise the method returns false.
+
+    \param point      [in] A point.
+    \param bOnSurface [out] A passed-in parameter for returning the indicator of whether the specified point is on the surface.
+
+    \returns Returns eOk if successful.
+  */
+  virtual OdResult isPointOnSurface(const OdGePoint3d& point, bool& bOnSurface) const = 0;
+
+  /** \details
+    Returns the normal vector at the specified parameter location ([u, v]).
+
+    \param dU     [in]  u parameter.
+    \param dV     [in]  v parameter.
+    \param normal [out] A passed-in parameter for returning the normal vector.
+
+    \returns Returns eOk if successful. If the dU or dV values are invalid, returns eOutOfRange. 
+  */
+  virtual OdResult getNormal(double dU, double dV, OdGeVector3d& normal) const = 0;
+
+  /** \details
+    Returns the simple patches in the u direction.
+
+    \param span [out] A passed-in parameter for returning the number of simple patches in the u direction.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getNumberOfSpansInU(int& iSpan) const = 0;
+  
+  /** \details
+    Returns the simple patches in the v direction.
+
+    \param span [out] A passed-in parameter for returning the number of simple patches in the v direction.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getNumberOfSpansInV(int& iSpan) const = 0;
+
+  /** \details
+    Returns the specified number of isolines created in the v direction. 
+
+    \param dNumberSegments [in] Number of isoline segments.
+    \param lineSegments [out] Array of isoline segments.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getIsolineAtU(double dNumberSegments, OdDbCurvePtrArray& lineSegments) const = 0;
+
+  /** \details
+    Returns the specified number of isolines created in the u direction. 
+
+    \param dNumberSegments [in] Number of isoline segments.
+    \param lineSegments [out] Array of isoline segments.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getIsolineAtV(double dNumberSegments, OdDbCurvePtrArray& lineSegments) const = 0;
+
+  /** \details
+    Inserts a knot at the specified u or v parameter.
+    The knot insertion doesn't modify the shape of the ModelerGeometry object. 
+
+    \param dVal [in] New knot.
+    \param iUorV [in] u or v parameter.
+  
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+
+  */
+  virtual OdResult InsertKnot(double dVal, int iUorV) = 0;
+
+  /** \details
+    Inserts a row of control points at the given u knot parameter.
+
+    \param dU [in] u parameter.
+    \param vCtrlPts  [in] An array of control points to be added.
+    \param vWeights  [in] Array of weight values to add if the surface is rational.
+
+    \returns Returns eOk if successful. 
+    If the dU parameter is out of range, returns eOutOfRange.
+  */
+  virtual OdResult InsertControlPointsAtU(double dU, const OdGePoint3dArray& vCtrlPts, const OdGeDoubleArray& vWeights) = 0;
+
+  /** \details
+    Inserts a row of control points at the given v knot parameter.
+
+    \param dU [in] v parameter.
+    \param vCtrlPts  [in] An array of control points to be added.
+    \param vWeights  [in] Array of weight values to add if the surface is rational.
+
+    \returns Returns eOk if successful. 
+    If the dU parameter is out of range, returns eOutOfRange.
+  */
+  virtual OdResult InsertControlPointsAtV(double dV, const OdGePoint3dArray& uCtrlPts, const OdGeDoubleArray& uWeights) = 0;
+
+  /** \details
+    Removes a row of control points at the specified position in the control points array.
+    The method modifies the shape of the ModelerGeometry object.
+
+    \param iUDegree [in] An index of the control point to remove from the array.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult RemoveControlPointsAtU(int iUDegree) = 0;
+  
+  /** \details
+    Removes a row of control points at the specified position in the control points array.
+    The method modifies the shape of the ModelerGeometry object.
+
+    \param iVDegree [in] An index of the control point to remove from the array.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult RemoveControlPointsAtV(int iVDegree) = 0;
+  
+  /** \details
+    Rebuilds this ModelerGeometry object with a specified new degree and quantity of control points in the u and v directions.
+    This operation modifies the shape of the ModelerGeometry object.
+
+    \param iUDegree     [in] The new degree value in the u direction.
+    \param iVDegree     [in] The new degree value in the v direction.
+    \param iNumUCtrlPts [in] The new quantity of control points in the u direction.
+    \param iNumVCtrlPts [in] The new quantity of control points in the v direction.
+    \param bRestore     [in] Restore flag.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult rebuild(int iUDegree, int iVDegree, int iNumUCtrlPts, int iNumVCtrlPts, bool bRestore) = 0;
+
+  /** \details
+    Adjusts the location and tangent of a point on this ModelerGeometry object with the specified parameter ([u, v]). 
+    The local control points are adjusted accordingly. 
+    If the pointer uDeriv and vDeriv are equal to NULL, then only the location of the point is adjusted.
+
+    \param dU     [in] u parameter.
+    \param dV     [in] v parameter.
+    \param point  [in] A new location of the point on the surface.
+    \param uDeriv [in] The tangent vector in the u direction.
+    \param vDeriv [in] The tangent vector in the v direction.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult modifyPositionAndTangent(double dU, double dV, const OdGePoint3d& point, const OdGeVector3d* uDeriv, const OdGeVector3d* vDeriv) = 0;
+
+  /** \details
+    Returns the u and v parameter for a point on this ModelerGeometry object.
+
+    \param point [in] A point on the ModelerGeometry object.
+    \param dU    [in] A passed-in parameter for returning the value of the u parameter.
+    \param dV    [in] A passed-in parameter for returning the value of the v parameter.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult getParameterOfPoint(const OdGePoint3d& point, double& dU, double& dV) const = 0;
+
+  /** \details
+    Returns the control points and the quantity of control points in both u and v directions.
+
+    \param iUCount  [out] The quantity of control points in the u direction.
+    \param iVCount  [out] The quantity of control points in the v direction.
+    \param points   [out] Array of control points (in WCS coordinates).
+
+    \returns Returns eOk if control points were successfully returned, or an appropriate error code in the other case.
+
+    \remarks
+    The control points will be allocated in the passed-in OdGePoint3d array. 
+    The column indexes are for the v direction, and row indexes are for the u direction. 
+    For example, if the surface has n control points in the u direction and m control points in the v direction, 
+    the array looks like [0,0], [0,1], ...[0,vCount-1], ..., [uCount-1,0], [uCount-1,1], ...[uCount-1,vCount-1]. 
+  */
+  virtual OdResult getControlPoints(int& iUCount, int& iVCount, OdGePoint3dArray& points) const = 0;
+
+  /** \details
+    Sets the control points. 
+
+    \param iUCount [in] The new value of the quantity of control points in the u direction.
+    \param iVCount [in] The new value of the quantity of control points in the v direction.
+    \param points  [in] New array of control points (in WCS coordinates).
+
+    \returns Returns eOk if control points were successfully set or an appropriate error code in the other case. 
+
+    \remarks
+    The new quantity of control points in the u and v direction must be equal to the current values. 
+    New control points are allocated in an AcGePoint3d array. 
+    The column indexes are for the v direction, and row indexes are for the u direction. 
+    For example, if the surface has n control points in the u direction and m control points in the v direction, the array looks like [0,0], [0,1], ...[0,vCount-1], ..., [uCount-1,0], [uCount-1,1], ...[uCount-1,vCount-1].
+  */
+  virtual OdResult setControlPoints(int iUCount, int iVCount, const OdGePoint3dArray& points) = 0;
+
+  virtual OdResult getControlPointAndWeight(int iUIndex, int iVIndex, OdGePoint3d& point, double& weight, bool& bIsRational) const = 0;
+
+  virtual OdResult setControlPointAndWeight(int iUIndex, int iVIndex, const OdGePoint3d& point, double weight) = 0;
+
+  /** \details
+    Sets the new color for subentities. 
+
+    \param color [in] New color value.
+
+    \returns Returns eOk if the new color value was successfully set or an appropriate error code in the other case. 
+  */
+  virtual OdResult setColorToSubents(OdCmColor const& color) = 0;
+  
+  /** \details
+    Sets the material. 
+
+    \param materialId [in] New material.
+
+    \returns Returns eOk if the new material value was successfully set or an appropriate error code in the other case. 
+  */
+  virtual OdResult setMaterialToSubents(OdDbObjectId materialId) = 0;
+
+  virtual OdResult setMaterialResolver(const OdMaterialResolver *pResolver) = 0;
+
+  virtual OdResult setMaterialMapperToSubents(OdGeMatrix3d &mx, OdUInt8 &projection,
+                                              OdUInt8 &tiling, OdUInt8 &autoTransform) = 0;
+
+  virtual OdResult generateSectionGeometry(const OdDbSection*      pSection,
+                                           OdDbEntityPtrArray&     sourceEntArr,
+                                           OdArray<OdDbEntityPtr>& intBoundaryEnts,
+                                           OdArray<OdDbEntityPtr>& intFillEnts,
+                                           OdArray<OdDbEntityPtr>& backgroundEnts,
+                                           OdArray<OdDbEntityPtr>& foregroundEnts,
+                                           OdArray<OdDbEntityPtr>& curveTangencyEnts,
+                                           bool                    bIsSetProperties) = 0;
+  /** \details
+    Trims the surface with specified cutting curves. 
+    When curves are used, the actual trimming boundary is formed by projecting 
+    the curves onto the surface, so the additional information of project direction needs to be provided.
+
+    \param toolIds            [in] Reference to an array of the cutting entity's IDs. Bodies of specified entities are used to trim the specified surface.
+    \param toolCurveIds       [in] Reference to an array of the cutting curve's IDs. The specified surface will be trimmed by projecting curves to it.
+    \param projVectors        [in] Reference to an array of projection direction for each cutting curve.
+    \param pickPoint          [in] Pick point that specifies which area of the specified surface must be trimmed.
+    \param viewVector         [in] Vector representing the view direction for creating a ray starting from the pick point.
+    \param bAutoExtend        [in] If this option is set, then when a tool body consists of a single face with analytic geometry, the underlying geometry will be extended as much as possible to make sure the surface is trimmed. The tool body supplied will not be modified. 
+    \param bAssociativeEnabled [in] Specifies whether the surface trimming operation should be associative.  
+    
+    \returns Returns eOk if trimming operation was successfully finished or an appropriate error code otherwise. 
+  */
+  virtual OdResult trimSurface( const OdDbObjectIdArray& toolIds,
+                                const OdDbObjectIdArray& toolCurveIds, 
+                                const OdGeVector3dArray& projVectors,
+                                const OdGePoint3d&       pickPoint, 
+                                const OdGeVector3d&      viewVector,
+                                bool                     bAutoExtend,
+                                bool                     bAssociativeEnabled) = 0;
+
+  virtual OdResult projectOnToEntity( const OdDbEntity*   pEntityToProject,
+                                      const OdGeVector3d& projectionDirection,
+                                      OdDbEntityPtrArray& projectedEntities ) const = 0;
+
+  /** \details
+    Creates a solid by trimming and (or) extending the specified surfaces and 3D solids, forming an enclosed volume.
+
+    \param limitingBodies [in] Reference to the entity array (representing surface and solids) that are used to create a solid.
+    \params limitingFlags [in] Reserved for internal use.  
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult createSculptedSolid(OdDbEntityPtrArray& limitingBodies,
+                                       const OdGeIntArray& limitingFlags) = 0;
+
+  /** \details 
+    Creates a ray which starts from a specified point and has a specified direction.
+
+    \param rayBasePoint [in]  A base point to start a ray from.
+    \param rayDir      [in]  A ray direction.
+    \param rayRadius   [in]  A ray radius. It defines the tolerance used for intersection checking.
+    \param subEntIds   [out] A reference to subentities array to return. Returned subentities can be one of the following: faces, edges, or vertices.
+    \param parameters   [out] An array of parameters to return. Parameters shows the intersection between a ray and subentities.
+
+    \returns Returns eOk if a ray was successfully created or an appropriate error code in the other case.
+  */
+  virtual OdResult rayTest( const OdGePoint3d&      rayBasePoint, 
+                            const OdGeVector3d&     rayDir,
+                            double                  rayRadius, 
+                            OdArray<OdDbSubentId> & subEntIds, 
+                            OdGeDoubleArray&        parameters) const = 0;
+
+  /** \details 
+    Creates a tangent surface between two edges of a surface with constant radius and trimming or no trimming of the original surfaces.
+
+    \param surf1    [out] Pointer to a first source surface.
+    \param pickPt1  [in]  3D point specifying the side on the first source surface that will be kept after filleting.
+    \param surf2    [out] Pointer to a second source surface.
+    \param pickPt2  [in] 3D point specifying the side on the second source surface that will be kept after filleting.
+    \param dRadius  [in] Radius for fillet operation (positive value).
+    \param trimMode [in] Flag that specifies the OdDb::FilletTrimMode value. 
+    \param projDir  [in] 3D vector specifying the projection (view) direction for pick points.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+    
+    \remarks     
+    The trimMode can be one of the following:
+* kTrimNone
+* kTrimFirst
+* kTrimSecond
+* kTrimBoth
+  */
+  virtual OdResult createFilletSurface (OdDbSurfacePtr&      surf1,
+                                        const OdGePoint3d&   pickPt1,
+                                        OdDbSurfacePtr&      surf2,
+                                        const OdGePoint3d&   pickPt2,
+                                        double               dRadius,
+                                        OdDb::FilletTrimMode trimMode,
+                                        const OdGeVector3d&  projDir) = 0;
+
+  /** \details 
+    Extends the edges of this ModelerGeometry object.
+
+    \param edgesId [out] Array of full sub-entity paths of the edges that need to be extended.
+    \param dExtDist [in] Distance at which the ModelerGeometry object should be expanded.
+    \param extOption [in] Extension option, if edges need to be extended or stretched.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */
+  virtual OdResult extendEdges( OdDbFullSubentPathArray& edgesId,
+                                double                   dExtDist, 
+                                EdgeExtensionType        extOption ) = 0;
+
+  virtual OdResult getObjectMesh( const OdDbFaceterSettings *faceter,
+                                  OdGePoint3dArray& vertexArray, 
+                                  OdInt32Array& faceArray,
+                                  OdGiFaceData*& faceData ) = 0;
+                                  
+                                  
+  /** \details 
+    Returns the bounding box.
+
+    \param box [out] 3D bounding boxes as minimum and maximum 3D points.
+
+    \returns Returns eOk if successful or an appropriate error code in the other case.
+  */                                  
+  virtual OdResult getBoundingBox(OdGeExtents3d &box) = 0;
+
+  /** \details 
+    For internal use only.
+  */ 
+  virtual OdResult generateSectionGeometry( SectArgs& sectArgs, OdDbEntity *pEnt, bool* bHasForeground ) = 0;
+
+  virtual OdResult createCachedCurves(OdGeCurve3dPtrArray& pCurves) = 0;
+
+#ifdef SOLID_HISTORY
+  virtual OdResult SetPerSubentityAttributes(unsigned long iEntIndex) = 0;
+#endif
+
+  virtual OdResult convertTo(const OdGePoint3dArray &arrVertexes, const OdInt32Array &arrEdges, const OdInt32Array &arrFaces, OdGiFaceData &fd,
+    OdInt32Array &arrFacesColors, OdInt32Array &arrFacesMaterials, OdDbEntity* pEntity) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdModelerGeometry object pointers.
+*/
+typedef OdSmartPtr<OdModelerGeometry> OdModelerGeometryPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _OD_MODELERGEOMETRY_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/C3dModelerDefines.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/C3dModelerDefines.h
new file mode 100755
index 0000000..4f91095
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/C3dModelerDefines.h
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2015, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2015 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+/*  C3dModelerDefines.h
+
+*/
+#ifndef _C3DMODELERDEFINES_H_INCLUDED
+#define _C3DMODELERDEFINES_H_INCLUDED
+
+/** \brief Dictionary keys for the C3D licence activation.
+     \details
+     Library: ModelerGeometry
+     <group Other_Classes>
+*/
+#define C3D_LICENCE_KEY       L"C3D_LICENCE_KEY"
+#define C3D_LICENCE_SIGNATURE L"C3D_LICENCE_SIGNATURE"
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _C3DMODELERDEFINES_H_INCLUDED */
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelGeomExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelGeomExport.h
new file mode 100755
index 0000000..0b96882
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelGeomExport.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+/*  ModelGeomExport.h
+
+*/
+#ifndef _MG_EXPORT_DEFINED
+#define _MG_EXPORT_DEFINED
+
+
+#include "OdPlatformSettings.h"
+
+#ifdef MODELERGEOMETRY_DLL_EXPORTS
+#define MODELERGEOM_EXPORT          OD_TOOLKIT_EXPORT
+#define MODELERGEOM_EXPORT_STATIC   OD_STATIC_EXPORT
+#else
+#define MODELERGEOM_EXPORT          OD_TOOLKIT_IMPORT
+#define MODELERGEOM_EXPORT_STATIC   OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _MG_EXPORT_DEFINED */
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelerModule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelerModule.h
new file mode 100755
index 0000000..3e07808
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometry/ModelerModule.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODMODELERMODULEIMPL_INCLUDED_
+#define _ODMODELERMODULEIMPL_INCLUDED_
+
+#include "ModelGeomExport.h"
+#include "RxDynamicModule.h"
+
+
+class wrTriangulationParams;
+
+/** \details
+    Library: ModelerGeometry
+    <group Other_Classes>
+*/
+class MODELERGEOM_EXPORT ModelerModule : public OdRxModule
+{
+protected:
+  void initApp();
+  void uninitApp();
+public:
+  virtual OdResult setTriangulationParams(const wrTriangulationParams &TriangulationParams);
+  virtual void getTriangulationParams(wrTriangulationParams &TriangulationParams);
+
+  // for internal use only
+  virtual void *dummy() const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for ModelerModule object pointers.
+*/
+typedef OdSmartPtr<ModelerModule> ModelerModulePtr;
+
+#endif //_ODMODELERMODULEIMPL_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometryCreator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometryCreator.h
new file mode 100755
index 0000000..1aec259
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerGeometryCreator.h
@@ -0,0 +1,142 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_MODELERGEOMETRYCREATOR_INCLUDED_
+#define _OD_MODELERGEOMETRYCREATOR_INCLUDED_
+
+#include "RxObject.h"
+#include "ModelerGeometry.h"
+#include "OdArray.h"
+
+class OdStreamBuf;
+
+#include "TD_PackPush.h"
+
+/** \details
+    This utility class loads and saves SAT/SAB files, and performs other
+    miscellaneous other ACIS-related operations.
+    
+    \remarks
+    The functions in this class can do the following: 
+    * Create OdModelerGeometry instances from a specified input stream.
+    * Save SAT/SAB data from an OdModelerGeometry instance.
+    * Create region entities from sets of curves.
+
+    Library: ModelerGeometry
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdModelerGeometryCreator : public OdRxObject
+{
+protected:
+  OdModelerGeometryCreator() {}
+public:  
+  ODRX_DECLARE_MEMBERS(OdModelerGeometryCreator);
+
+  /** \details
+      Creates one or more instances of OdModelerGeometry from the specified SAT/SAB file.
+      
+      \param models [out]  Receives an array of OdModelerGeometry SmartPointers.
+      \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.   
+      \param standardSaveFlag [in]  Controls the saving and restoring of use count data in the save file.
+
+      \remarks
+      Since OdModelerGeometry does not support multi-body SAT files, such files 
+      are divided into a set of single body OdModelerGeometry objects
+
+      Empty streamBuf generates single element array with empty OdModelerGeometry.
+
+      Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult createModeler(OdArray<OdModelerGeometryPtr> &models, 
+    OdStreamBuf* pStreamBuf, 
+    bool standardSaveFlag = true) = 0;
+
+  /** \details
+    Creates a single SAT/SAB file from the specified array of objects.
+
+    \param models [in]  Array of SmartPointers to the OdDbModelerGeometry objects to be written.
+    \param pStreamBuf [in]  Pointer to the StreamBuf object to which the data are to be written.   
+    \param typeVer [in] Type and version of ACIS data to write.
+    \param standardSaveFlag [in] Controls the saving and restoring of use count data in the save file.
+  */
+  virtual OdResult createSat(const OdArray<OdModelerGeometryPtr> &models, 
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer typeVer, 
+    bool standardSaveFlag = true) = 0;
+
+  /** \param entities [in]  Array of SmartPointers to the OdDbEntity objects to be written.
+    \remarks
+    Color attributes are also added to the SAT/SAB file from the specified OdDbEntity objects.
+    \returns
+    Returns eOk if successful, or an appropriate error code if not.
+    \note
+    Only the following OdDbEntity types are valid: OdDb3dSolid, OdDbBody, and OdDbRegion/
+  */
+  virtual OdResult createSat(const OdDbEntityPtrArray &entities, 
+    OdStreamBuf* pStreamBuf, 
+    AfTypeVer typeVer, 
+    bool standardSaveFlag = true) = 0;
+
+  /** \details
+    Creates OdDbRegion entities from the closed loops defined by the specified curve segments.
+
+    \param curveSegments [in]  Array of curve segments.
+    \param pRegions [out]  Receives an array of pointers to the regions.
+
+    \remarks
+    Each curve segment must be one of the following
+
+    @untitled table
+    OdDb3dPolyline
+    OdDbArc
+    OdDbCircle
+    OdDbEllipse
+    OdDbLine
+    OdDbPolyline
+    OdDbSpline
+
+    The newly created regions are non- database -resident. It is up to the caller to either add them
+    to an OdDbDatabase or to delete them.
+
+    \returns 
+    Returns eOk if successful, or an appropriate error code if not. 
+    
+    \remarks
+    * All curves must be in the same plane.
+    * The endpoint of each curve must be equal to the start point of the next curve
+    * The endpoint of the last curve must be equal to the start point of the first curve.
+    
+  */
+  virtual OdResult createRegionFromCurves(const OdRxObjectPtrArray& curveSegments, 
+    OdArray<OdModelerGeometryPtr> &pRegions) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdModelerGeometryCreator object pointers.
+*/
+typedef OdSmartPtr<OdModelerGeometryCreator> OdModelerGeometryCreatorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _OD_MODELERGEOMETRYCREATOR_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerHistory.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerHistory.h
new file mode 100755
index 0000000..43537d0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerHistory.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_MODELERHISTORY_INCLUDED_
+#define _OD_MODELERHISTORY_INCLUDED_
+
+#define STL_USING_MAP
+#include "OdaSTL.h"
+#include "RxObject.h"
+#include "ModelerDefs.h"
+#include "Db3dSolid.h"
+#include "DbObject.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+
+  Library: TD_Db
+  <group OdDbSh_Classes> 
+*/
+class TOOLKIT_EXPORT OdDbShModelerHistory : public OdRxObject
+{
+protected:
+  OdDbShModelerHistory() {}
+public:  
+  ODRX_DECLARE_MEMBERS(OdDbShModelerHistory);
+
+  virtual OdDbObjectId createShHistory( OdDb3dSolid const* pSolid, OdDbObjectPtr& pHistObj ) = 0;
+  virtual void getHistoryVariables( const OdDbObjectPtr& pHistObj, bool& bShowHistory, bool& bRecordHistory ) = 0;
+  virtual void setShowHistory( OdDbObjectPtr& pHistObj, bool bShowHistory ) = 0;
+  virtual void setRecordHistory( OdDbObjectPtr& pHistObj, bool bRecordHistory ) = 0;
+  virtual void clearHistory( OdDbObjectPtr& pHistObj ) = 0;
+
+  virtual OdResult createBox( OdDb3dSolid* pSolid, double dXLen, double dYLen, double dZLen ) = 0;
+  virtual OdResult createFrustum( OdDb3dSolid* pSolid, double dHeight, double dXRadius, double dYRadius, double dTopXRadius ) = 0;
+  virtual OdResult createWedge( OdDb3dSolid* pSolid, double dXLen, double dYLen, double dZLen ) = 0;
+  virtual OdResult createPyramid( OdDb3dSolid* pSolid, double dHeight, int iSides, double dRadius, double dTopRadius ) = 0;
+  virtual OdResult createSphere( OdDb3dSolid* pSolid, double dRadius ) = 0;
+  virtual OdResult createTorus( OdDb3dSolid* pSolid, double dMajorRadius, double dMinorRadius ) = 0;
+
+  virtual OdResult setSubentColor( OdDb3dSolid* pSolid, const OdDbSubentId &subentId, const OdCmColor &color ) = 0;
+  virtual OdResult setSubentMaterial( OdDb3dSolid* pSolid, const OdDbSubentId &subentId, OdDbObjectId matId ) = 0;
+
+  virtual OdResult createLoftedSolid( OdDb3dSolid* pSolid, OdDbEntityPtrArray& crossSections, OdDbEntityPtrArray& guideCurves, OdDbEntity* pPathCurve, OdDbLoftOptions& loftOpt ) = 0;
+  virtual OdResult createRevolvedSolid( OdDb3dSolid* pSolid, OdDbEntity* pRevolveCurve, const OdGePoint3d& axisPoint, const OdGeVector3d& axisDir, double dAngleOfRevolution, double dStartAngle, OdDbRevolveOptions& revolveOpt ) = 0;
+  virtual OdResult createSweptSolid( OdDb3dSolid* pSolid, OdDbEntity* pSweepCurve, OdDbEntity* pPathCurve, const OdGeVector3d& directioVector, OdDbSweepOptions& sweepOpt ) = 0;
+
+  virtual OdResult booleanOper( OdDb3dSolid* pSolid, OdDb3dSolid* pSecondEll,OdDb::BoolOperType operation) = 0;
+
+  virtual OdResult postInDatabase( OdDbObjectId objSolidId ) = 0;
+  virtual OdResult subTransformBy( OdDb3dSolid* pSolid, const OdGeMatrix3d& xform ) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdModelerHistory object pointers.
+*/
+typedef OdSmartPtr<OdDbShModelerHistory> OdDbShModelerHistoryPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _OD_MODELERHISTORY_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerMarkers.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerMarkers.h
new file mode 100755
index 0000000..51c96f2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerMarkers.h
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef MODELERMARKERS_H
+#define MODELERMARKERS_H /*!DOM*/
+
+#define kSubentTypeStep 4
+#define kFirstFaceMarker (OdDb::kFaceSubentType + kSubentTypeStep)
+#define kFirstEdgeMarker (OdDb::kEdgeSubentType + kSubentTypeStep)
+#define kFirstVertexMarker (OdDb::kVertexSubentType + kSubentTypeStep)
+
+#define getFaceIndex(gsMarker) (((gsMarker) - OdDb::kFaceSubentType) / kSubentTypeStep)
+#define getEdgeIndex(gsMarker) (((gsMarker) - OdDb::kEdgeSubentType) / kSubentTypeStep)
+#define getVertexIndex(gsMarker) (((gsMarker) - OdDb::kVertexSubentType) / kSubentTypeStep)
+
+#define getTypedIndex(gsMarker, type) (((gsMarker) - (type)) / kSubentTypeStep)
+
+#define getFaceMarker(nIndex) ((nIndex) * kSubentTypeStep + OdDb::kFaceSubentType)
+#define getEdgeMarker(nIndex) ((nIndex) * kSubentTypeStep + OdDb::kEdgeSubentType)
+#define getVertexMarker(nIndex) ((nIndex) * kSubentTypeStep + OdDb::kVertexSubentType)
+
+#define getTypedMarker(nIndex, type) ((nIndex) * kSubentTypeStep + (type))
+
+#define isIndexValid(nIndex) ((nIndex)>0)
+#define isMarkerInvalid(gsMarker) ((gsMarker) < kFirstFaceMarker || 0 == (gsMarker)%kSubentTypeStep)
+
+#define isValidFaceMarker(gsMarker) ((gsMarker) >= kFirstFaceMarker && ((((gsMarker) - kFirstFaceMarker) % kSubentTypeStep) == 0))
+#define isValidEdgeMarker(gsMarker) ((gsMarker) >= kFirstEdgeMarker && ((((gsMarker) - kFirstEdgeMarker) % kSubentTypeStep) == 0))
+#define isValidVertexMarker(gsMarker) ((gsMarker) >= kFirstVertexMarker && ((((gsMarker) - kFirstVertexMarker) % kSubentTypeStep) == 0))
+
+#endif //MODELERMARKERS_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerTools.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerTools.h
new file mode 100755
index 0000000..4cf3531
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ModelerTools.h
@@ -0,0 +1,113 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+// ModelerTools.h : auxilary functionality of geometry modeler
+
+// Copyright � Menhirs NV. All rights reserved.
+
+//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
+
+#ifndef _OD_MODELERTOOLS_INCLUDED_
+#define _OD_MODELERTOOLS_INCLUDED_
+
+//#include "BricsysChanges.h"
+#include "ModelerGeometry.h"
+
+#include "TD_PackPush.h"
+
+typedef void (*MainHistStreamFunc)(void*);
+
+
+/** \details
+    This class defines the interface for classes that
+    provide the services for ACIS SAT and SAB data.
+
+    Library: ModelerGeometry
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdModelerTools: public OdRxObject
+{
+protected:
+    OdModelerTools() {}
+public:  
+    ODRX_DECLARE_MEMBERS(OdModelerTools);
+
+    /** \details
+      Delete the modeler bulletins.
+    */
+    virtual OdResult deleteModelerBulletins() = 0;
+
+    /** \details
+      Should be called from the main stream to start ACIS thread-safety mode.
+      Prepares separate history streams for each thread, turns the thread-safety mode on.
+      Returns false if no modeler geometry exist.
+    */
+    virtual void beginThreadSafetyMode(unsigned nThreads, const unsigned* aThreads) = 0;
+
+    /** \details
+      Should be called from the main stream to end ACIS thread-safety mode.
+      Merges separate history streams into the main history, turns the thread-safety mode off.
+    */
+    virtual void endThreadSafetyMode(unsigned nThreads, const unsigned* aThreads) = 0;
+
+    /** \details
+      Should be called from a thread function to start modeler in this particular thread.
+      Substitutes default history stream by unique one for the given thread.
+    */
+    virtual bool startThread() = 0;
+
+    /** \details
+      Should be called from a thread function to stop modeler in this particular thread.
+      Restores default history stream for the given thread.
+    */
+    virtual bool stopThread() = 0;
+
+    /** \details
+      Checks if the modeler is started in this particular thread.
+    */
+    virtual bool isThreadStarted() const = 0;
+
+    /** \details
+      Checks topology and geometry correctness of given entity.
+      Results are returned as text in parameter 'report'.
+    */
+    virtual OdResult check3dSolid(const OdDb3dSolidPtr&, OdString& report) = 0;
+
+    /** \details
+    Executes given function when history stream is set to a main one
+    */
+    virtual void executeInMainHistoryStream(MainHistStreamFunc func, void* data) = 0;
+};
+
+
+/** \details
+  The typified smart pointer for the /modeler tools/ object. This template 
+  class is specialization of the OdSmartPtr class for the OdModelerTools class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdModelerTools> OdModelerToolsPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_OD_MODELERTOOLS_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/NextCodeDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/NextCodeDefs.h
new file mode 100755
index 0000000..81bfc17
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/NextCodeDefs.h
@@ -0,0 +1,81 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODA_NEXT_CODE_H_
+#define ODA_NEXT_CODE_H_
+
+#define NEXT_CODE(code)           \
+  if (pFiler->nextItem() != code) \
+  {                               \
+    ODA_FAIL_ONCE();              \
+    return eMakeMeProxy;          \
+  }
+
+#define NEXT_UINT64(code, ref64)                 \
+  switch (pFiler->nextItem())                    \
+  {                                              \
+  case code:                                     \
+    ref64 = pFiler->rdUInt64();                  \
+    break;                                       \
+  case (91 + code - 160): /* hi */               \
+    ref64 = pFiler->rdUInt32();                  \
+    ref64  <<= 32;                               \
+    if (pFiler->nextItem() != (91 + code - 160)) \
+    { /* low */                                  \
+      ref64 += pFiler->rdUInt32();               \
+      break;                                     \
+    }                                            \
+  default:                                       \
+    ODA_FAIL_ONCE();                             \
+    return eMakeMeProxy;                         \
+  }
+
+#define DXF_OUT_UINT64(code, ref64)                                       \
+  if (pFiler->dwgVersion() > OdDb::vAC21)                                 \
+    pFiler->wrUInt64(code, ref64);                                        \
+  else                                                                    \
+  {                                                                       \
+    pFiler->wrUInt32(91 + code - 160, (OdUInt32) (ref64 >> 32)); /* hi */ \
+    pFiler->wrUInt32(92 + code - 160, (OdInt32) ref64); /* low */         \
+  }
+
+#define DWG_IN_UINT64(ref64)                          \
+  if (pFiler->dwgVersion() > OdDb::vAC21)             \
+    ref64 = pFiler->rdInt64();                        \
+  else                                                \
+  {                                                   \
+    ref64 = pFiler->rdInt32(); /* hi */               \
+    ref64  <<= 32;                                    \
+    ref64 += (OdUInt32) pFiler->rdInt32(); /* low */  \
+  }
+
+#define DWG_OUT_UINT64(ref64)                            \
+  if (pFiler->dwgVersion() > OdDb::vAC21)                \
+    pFiler->wrInt64(ref64);                              \
+  else                                                   \
+  {                                                      \
+    pFiler->wrInt32((OdInt32) (ref64 >> 32)); /* hi */   \
+    pFiler->wrInt32((OdInt32) ref64); /* low */          \
+  }
+
+#endif // ODA_NEXT_CODE_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Objects.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Objects.h
new file mode 100755
index 0000000..cb87373
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Objects.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OBJECTS_INCLUDED_
+#define _OBJECTS_INCLUDED_
+
+#include "DbDictionary.h"
+#include "DbGroup.h"
+#include "DbMlineStyle.h"
+#include "DbXrecord.h"
+#include "DbProxyObject.h"
+#include "DbWipeout.h"
+#include "DbDictionaryVar.h"
+#include "DbDictionaryWithDefault.h"
+#include "DbIdBuffer.h"
+#include "DbRasterImageDef.h"
+#include "DbLayerIndex.h"
+#include "DbLayout.h"
+#include "DbPlaceHolder.h"
+#include "DbRasterVariables.h"
+#include "DbSortentsTable.h"
+#include "DbSpatialFilter.h"
+#include "DbSpatialIndex.h"
+#include "DbVbaProject.h"
+#include "DbWipeoutVariables.h"
+#include "CAseDLPNTableRecord.h"
+#include "DbLayerFilter.h"
+#include "DbDimAssoc.h"
+#include "DbColor.h"
+#include "DbMaterial.h"
+#include "DbTableStyle.h"
+#include "DbField.h"
+#endif // _OBJECTS_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAlloc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAlloc.h
new file mode 100755
index 0000000..cb84a20
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAlloc.h
@@ -0,0 +1,78 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_ALLOC_INCLUDED_
+#define _OD_ALLOC_INCLUDED_
+
+#include "OdAllocExport.h"
+
+/** \details
+    Defines the interface for Teigha memory management.
+*/
+
+//DD:EXPORT_ON
+
+#ifdef __cplusplus
+  extern "C" {
+#endif
+
+  /** \details
+    Allocates a block of memory.
+    \param nBytes [in]  Number of bytes to allocate.
+    \remarks
+    Returns a pointer to the newly allocated memory block.
+    \sa
+    Memory Management
+  */
+  extern ALLOCDLL_EXPORT void* odrxAlloc  (size_t nBytes);
+  /** \details
+    Reallocates a block of memory.
+    \param pMemBlock [in]  Pointer to the previously allocated memory block.
+    \param newSize [in]  New size in bytes.
+    \param oldSize [in]  Old size in bytes.
+    \remarks
+    Returns a pointer to the newly allocated memory block.
+    \sa
+    Memory Management
+  */
+  extern ALLOCDLL_EXPORT void* odrxRealloc(void* pMemBlock, size_t newSize, size_t oldSize);
+  /** \details
+    Frees a block of memory.
+    \param pMemBlock [in]  Pointer to the previously allocated memory block.
+    \sa
+    Memory Management
+  */
+  extern ALLOCDLL_EXPORT void  odrxFree   (void* pMemBlock);
+  /** \details
+      For internal use only.  
+  */
+  extern ALLOCDLL_EXPORT OdUInt64 GetMemoryUsageInternalInfo(OdUInt32 target);
+
+#ifdef __cplusplus
+  }   // extern "C"
+#endif
+
+//DD:EXPORT_OFF
+
+#endif 
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAllocExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAllocExport.h
new file mode 100755
index 0000000..b1457dd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAllocExport.h
@@ -0,0 +1,49 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+/*  OdAllocExport.h
+
+*/
+#ifndef _OD_ALLOCEXPORT_DEFINED
+#define _OD_ALLOCEXPORT_DEFINED
+
+
+#include "OdPlatformSettings.h"
+
+#ifdef ALLOC_DLL_EXPORTS
+  #define ALLOCDLL_EXPORT        OD_TOOLKIT_EXPORT
+  #define ALLOCDLL_EXPORT_STATIC OD_STATIC_EXPORT
+#else
+#ifdef EMCC
+  #define ALLOCDLL_EXPORT           __attribute__((visibility("default")))
+  #define ALLOCDLL_EXPORT_STATIC    __attribute__((visibility("default")))
+#else
+  #define ALLOCDLL_EXPORT           OD_TOOLKIT_IMPORT
+  #define ALLOCDLL_EXPORT_STATIC    OD_STATIC_IMPORT
+#endif
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _OD_ALLOCEXPORT_DEFINED */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAnsiString.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAnsiString.h
new file mode 100755
index 0000000..214588d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAnsiString.h
@@ -0,0 +1,739 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#ifndef __ODANSISTRING_H__
+#define __ODANSISTRING_H__
+
+#ifdef TD_UNICODE
+#define ODA_CDECL 
+#define ODA_PASCAL 
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "OdMutex.h"
+#include "OdPlatform.h"
+#include "OdArrayPreDef.h"
+#include "OdCodePage.h"
+
+#define odaIsValidString(lpch)    (true)
+
+#include "TD_PackPush.h"
+class OdString;
+
+#ifdef sgi
+#include <string>
+ // va_XXXX items are in std namespace for newest SGI compiler
+ 
+using namespace std; 
+#endif
+
+/** \details
+This structure contains string data used by OdAnsiString.
+
+\remarks
+An char array (buffer) is allocated along with this structure, and
+is freed when this structure is freed.
+
+Library: TD_Root
+<group !!RECORDS_TD_APIRef>
+*/
+struct OdStringDataA
+{            
+  /** \details
+  Number of references to this string.
+  */
+  OdRefCounter nRefs;      
+
+  /** \details
+  String length in characters, omitting the 0 terminator.
+  */
+  int nDataLength; 
+
+  /** \details
+  String allocation length in characters, omitting the 0 terminator. 
+  */
+  int nAllocLength;       
+  
+  OdCodePageId codepage;
+
+  /** \details
+  Returns the underlying char array (buffer) of this StringData object.
+  */
+  char* data()           
+  { return (char*)(this+1); }
+};
+
+#ifdef _WIN32_WCE
+ODA_ASSUME((sizeof(OdStringDataA)%8)==0);
+#endif
+
+/** \details
+This structure represents empty strings used by OdAnsiString.
+
+<group !!RECORDS_TD_APIRef>
+*/
+      struct OdEmptyStringDataA
+{
+  OdStringDataA  kStrData;
+  char        kChar;
+};
+
+/** \details
+This class implements Teigha single-byte character string objects.
+
+\remarks
+OdAnsiString objects use zero-based indices to access string elements.
+
+<group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdAnsiString
+{
+public:
+
+  OdAnsiString()
+  { init(); }
+
+  /** \param source [in]  Source.
+  */
+  OdAnsiString(const OdAnsiString& source);
+
+  /** \param ch [in]  Character to repeat.
+  \param length [in]  Number of characters.
+  */
+  OdAnsiString(char ch, int length);
+
+  OdAnsiString(const char* source);
+
+  OdAnsiString(const char* source, int length);
+  OdAnsiString(const char* source, OdCodePageId);
+  OdAnsiString(const char* source, int length, OdCodePageId);
+  OdAnsiString(const OdString& , OdCodePageId);
+
+  void setCodepage(OdCodePageId id);
+  
+  OdCodePageId codepage() const
+  { return getData()->codepage; }
+
+  /** \details
+  Returns the number of characters in this String object.
+  */
+  int getLength() const
+  { return getData()->nDataLength; }
+
+  /** \details
+  Returns true and only if this String object is empty.
+  */
+  bool isEmpty() const
+  { return getData()->nDataLength == 0; }
+
+  /** \details
+  Sets this String object to the empty string.
+  */
+  void empty();
+
+  /** \details
+  Returns the single character of this String object at the specified position.
+  \param charIndex [in]  Character index. 
+  */
+  char getAt(int charIndex) const
+  {
+    ODA_ASSERT(charIndex >= 0);
+    ODA_ASSERT(charIndex < getData()->nDataLength);
+    return m_pchData[charIndex];
+  }
+
+  /** \details
+  Indexing Operator
+
+  \remarks
+  Returns the single character of this String object at the specified position.
+  \param charIndex [in]  Character index. 
+  */
+  char operator[](int charIndex) const
+  {
+    ODA_ASSERT(charIndex >= 0);
+    ODA_ASSERT(charIndex < getData()->nDataLength);
+    return m_pchData[charIndex];
+  }
+
+  /** \details
+  Sets the single character of this String object at the specified position.
+  \param charIndex [in]  Character index.
+  \param ch [in]  Character.
+  \note
+  No range checking is performed.
+  */
+  void setAt(int charIndex, char ch);
+
+  /** \details
+  Returns the underlying char array (buffer) of this String object.
+  */
+  const char* c_str() const
+  { return m_pchData; }
+
+  /** \details
+  Returns the underlying char array (buffer) of this String object.
+  */
+  operator const char*() const
+  { return m_pchData; }
+
+  OdAnsiString& operator=(const OdAnsiString& source);
+
+  OdAnsiString& operator=(char ch);
+
+  OdAnsiString& operator=(const char* source);
+
+  OdAnsiString& operator=(const OdString& source);
+
+  /** \details
+  Concatenation-Equals Operator.
+  \remarks
+  Sets this object to the concatenation of this String object with the 
+  value on the right, and returns a reference to this String object.
+  */
+  OdAnsiString& operator+=(const OdAnsiString& string);
+
+  OdAnsiString& operator+=(char ch);
+
+  OdAnsiString& operator+=(const char* string);
+
+  /** \details
+  Concatenation Operator.
+  \remarks
+  Returns the concatenation of this object on the left with the object on the right.
+  */
+  friend FIRSTDLL_EXPORT OdAnsiString operator+(const OdAnsiString& string1, const OdAnsiString& string2);
+  friend FIRSTDLL_EXPORT OdAnsiString operator+(const OdAnsiString& string, char ch);
+  friend FIRSTDLL_EXPORT OdAnsiString operator+(char ch, const OdAnsiString& string);
+
+  friend FIRSTDLL_EXPORT OdAnsiString operator+(const OdAnsiString& string1, const char* string2);
+  friend FIRSTDLL_EXPORT OdAnsiString operator+(const char* string1, const OdAnsiString& string2);
+
+  /** \details
+  Case sensitive string comparison.  
+
+  \param otherString [in]  Other string.
+
+  \remarks
+  compare() returns one of the following:
+
+  <table>
+  Returns   Condition
+  < 0       This String object < otherString. 
+  0         This String object == otherString.
+  > 0       This String object > otherString.
+  </table>
+  */
+  int compare(const char* otherString) const
+  { ODA_ASSERT(odaIsValidString(otherString)); return odStrCmpA(m_pchData, otherString); }    // MBCS/Unicode aware 
+
+  /** \details
+  Case insensitive string comparison.  
+
+  \param otherString [in]  Other string.
+
+  \remarks
+  iCompare() returns one of the following:
+
+  <table>
+  Returns   Condition
+  < 0       This String object < otherString. 
+  0         This String object == otherString.
+  > 0       This String object > otherString.
+  </table>
+  */
+  int iCompare(const char* otherString) const
+  { ODA_ASSERT(odaIsValidString(otherString)); return odStrICmpA(m_pchData, otherString); }   
+
+  /** \details
+  Returns the substring specified by a start index and a length from this String object.
+  \param startIndex [in]  Starting index.
+  \param length [in]  Length of substring. 
+
+  \remarks
+  If length is not specified, the remainder of this String object is returned.
+  */
+  OdAnsiString mid(int startIndex, int length) const;
+
+  OdAnsiString mid(int startIndex) const;
+
+  /** \details
+  Returns the leftmost substring of the specified length from this String object.
+  \param length [in]  Length of substring. 
+  */
+  OdAnsiString left(int length) const;
+
+  /** \details
+  Returns the rightmost substring of the specified length from this String object.
+  \param length [in]  Length of substring. 
+  */
+  OdAnsiString right(int length) const;
+
+  /** \details
+  Returns the longest leftmost substring of this String object 
+  that consists solely of characters that are
+  contained in the specified character set.
+
+  \param charSet [in]  Character set.
+
+  \remarks
+  If the first character in this String object is not in the specified character set,
+  an empty string is returned.
+  */
+  OdAnsiString spanIncluding(const char* charSet) const;
+
+  /** \details
+  Returns the longest leftmost substring of this String object 
+  that consists solely of characters that are
+  not contained in the specified character set.
+
+  \param charSet [in]  Character set.
+
+  \remarks
+  If the first character in this String object in the specified character set,
+  an empty string is returned.
+  */
+  OdAnsiString spanExcluding(const char* charSet) const;
+
+  /** \details
+  Converts this String object to upper case.
+
+  \remarks
+  Returns a reference to this String object.  
+  */
+  OdAnsiString& makeUpper();
+
+  /** \details
+  Converts this String object to lower case.
+
+  \remarks
+  Returns a reference to this String object.  
+  */
+  OdAnsiString& makeLower();
+
+  /** \details
+  Reverses this String object.
+
+  \remarks
+  Returns a reference to this String object.  
+  */
+  OdAnsiString& makeReverse();
+
+
+  /** \details
+  Removes all whitespace from the right side of this String object.
+
+  \remarks
+  Returns a reference to this String object.
+
+  A space (' ') is used if no whitespace characters are specfied.  
+  */
+  OdAnsiString& trimRight();
+
+  /** \details
+  Removes all whitespace from the left side of this String object.
+
+  \remarks
+  Returns a reference to this String object.  
+
+  A space (' ') is used if no other whitespace characters are specfied.  
+  */
+  OdAnsiString& trimLeft();
+
+  /** \param whiteChar [in]  Whitespace character.
+  */
+  OdAnsiString& trimRight(char whiteChar);
+
+  /** \param whiteChars [in]  Whitespace characters.
+  */
+  OdAnsiString& trimRight(const char* whiteChars);
+
+  /** \param whiteChar [in]  Whitespace character.
+  */
+  OdAnsiString& trimLeft(char whiteChar);
+
+  /** \param whiteChars [in]  Whitespace characters.
+  */
+  OdAnsiString& trimLeft(const char* whiteChars);
+
+  /** \details
+  Replaces all occurrences of the specified character or string in this String object.
+
+  \param oldChar [in]  Old character.
+  \param newChar [in]  New character.
+
+  \remarks
+  Returns the number of characters or strings replaced.
+  */
+  int replace(char oldChar, char newChar);
+
+  /** \param oldString [in]  Old string.
+  \param newString [in]  New string.
+  */
+  int replace(const char* oldString, const char* newString);
+
+  /** \details
+  Removes all occurrences of the specified character from this String object.
+
+  \param removeChar [in]  Character to remove.
+
+  \remarks
+  Returns the number of characters removed.
+  */
+  int remove(char chRemove);
+
+  /** \details
+  Inserts the specified character or string into this String object.
+
+  \param insertChar [in]  Character to insert.
+  \param insertIndex [in]  Insertion index.
+
+  \remarks
+  Returns the new length of this String object.
+
+  If insertIndex exceeds the length of this String object, 
+  this String object is lengthened as necessary to accommodate the insertion.
+  */
+  int insert(int insertIndex, char insertChar);
+
+  /** \details
+  \param insertString [in]  String to insert.
+  */
+  int insert(int insertIndex, const char* insertString);
+
+  /** \details
+  Deletes the specified number characters from this String object.
+
+  \param deleteIndex [in]  Deletion index.
+  \param count [in]  Number of characters to delete.
+  \remarks
+  Returns the new length of this String object.
+  */
+  int deleteChars(int deleteIndex, int count = 1);
+
+
+  /** \details
+  Returns the first occurrence of the specified character or string in this String object.
+
+  \param searchChar [in]  Search character.
+
+  \remarks
+  Returns -1 if not found.
+  */
+  int find(char searchChar) const;
+
+  /** \details
+  Returns the last occurrence of the specified character in this String object.
+
+  \param searchChar [in]  Search character.
+
+  \remarks
+  Returns -1 if not found.
+  */
+  int reverseFind(char searchChar) const;
+
+  /** \param startIndex [in]  Start index.
+  */
+  int find(char searchChar, int startIndex) const;
+
+  /** \details
+  Returns the first occurrence in this String object of any member of the specified character set. 
+
+  \param charSet [in]  Character set.
+
+  \remarks
+  Returns -1 if not found.
+  */
+  int findOneOf(const char* charSet) const;
+
+  int find(const char* searchString) const;
+
+  /** \param searchString [in]  Search string.
+  */
+  int find(const char* searchString, int startIndex) const;
+
+  /** \details
+  Assigns a value to this String object using a printf-style format string and 
+  arguments.
+  \param formatString [in]  Format string.
+  \remarks
+  Returns a reference to this String Object.
+  */
+  OdAnsiString& format(const char* formatString, ...);
+
+  /** \details
+  Assigns a value to this String object using a vsprintf-style format string and 
+  argument list.
+  \param formatString [in]  Format string.
+  \param argList [in]  Argument list.   
+  \remarks
+  Returns a reference to this String Object.
+  */
+  OdAnsiString& formatV(const char* formatString, va_list argList); 
+
+  /** \details
+  Returns a modifiable C style char array (buffer) of the specified minimum length for this String object.
+  \param minBufferLength [in]  Minimum buffer length.
+
+  \note
+  releaseBuffer() should be called before using any other OdAnsiString methods.
+
+  The pointer returned by this function is not valid after releaseBuffer() is called.
+  */
+  char* getBuffer(int minBufLength);
+
+  /** \details
+  Releases a buffer obtained by getBuffer() or getBufferSetLength(), and sets its length.
+  \param newLength [in]  New buffer length.
+  \remarks
+  If newLength == -1, the buffer is treated as 0 terminated.  
+  */
+  void releaseBuffer(int newLength = -1);
+
+  /** \details
+  Returns a modifiable C style char array (buffer) of of the specified length for this String object.
+  \param length [in]  buffer length.
+
+  \note
+  releaseBuffer() should be called before using any other OdAnsiString methods.
+
+  The pointer returned by this function is not valid after releaseBuffer() is called.
+  */
+  char* getBufferSetLength(int length);
+
+  /** \details
+  Releases any unused memory allocated by this String object.
+  */
+  void freeExtra();
+
+  /** \details
+  Enables reference counting for this String object.
+  */
+  char* lockBuffer();
+
+  /** \details
+  Disables reference counting for this String object.
+  */
+  void unlockBuffer();
+
+public:
+  ~OdAnsiString();
+
+  /** \details
+  Returns the number of characters allocated for the underlying char array (buffer) in this String object.
+  */
+  int getAllocLength() const
+  { return getData()->nAllocLength; }
+
+protected:
+  FIRSTDLL_EXPORT_STATIC static OdEmptyStringDataA kEmptyData;
+
+  /** \details
+  Pointer to the underlying char array (buffer). 
+  */
+  char* m_pchData;  
+
+  /** \details
+  Returns the StringData for this String object.
+  */
+  OdStringDataA* getData() const
+  { ODA_ASSERT(m_pchData != NULL); return ((OdStringDataA*)m_pchData)-1; }
+
+  /** \details
+  Initializes this String object to an empty string.
+  */
+  void init();
+
+  /** \details
+  Copies the specified number of characters from this String object to the destination String object.
+  \param destString [out]  Destination string.
+  \param copyLength [in]  Number of characters to copy.
+  \param copyIndex [in]  First byte to copy.
+  \param extraLength [in]  Extra characters to allocate.
+
+  \remarks
+  This function calls allocBuffer(copyLength + extraLength)
+  */
+  void allocCopy(OdAnsiString& destString, int copyLength, int copyIndex, int extraLength) const;
+
+  /** \details
+  Allocates the specified number of characters for the character buffer of this String object.
+  \param length [in]  buffer length.
+  */
+  void allocBuffer(int length);
+
+  /** \details
+  Copies the specified string to this String object.
+
+  \param sourceLength [in]  Number of characters to copy.
+  \param source [in]  Source string.
+
+  \remarks
+  If getAllocLength() < sourceLength, this function calls allocBuffer(sourceLength).
+  */
+    void assignCopy(int sourceLength, const char* source);
+
+  /** \details
+  Concatenates and copies the specified strings to this String object.
+
+  \param sourceLength1 [in]  Number of characters in first string to copy.
+  \param sourceLength2 [in]  Number of characters in second string to copy.
+  \param source1 [in]  First source string.
+  \param source2 [in]  Second source string.
+
+  \remarks
+  If getAllocLength() < (sourceLength1 + sourceLength2), this function calls allocBuffer(sourceLength1 + sourceLength2).
+  */
+    void concatCopy(int sourceLength1, const char* source1, int sourceLength2, const char* source2);
+
+  /** \details
+  Concatenates the string to this String object.
+
+  \param sourceLength [in]  Number of characters to copy.
+  \param source [in]  Source string.
+
+  \remarks
+  If getAllocLength() < getLength() + sourceLength, this function calls allocBuffer(getLength()+ sourceLength2).
+  */
+    void concatInPlace(int sourceLength, const char* source);
+
+  /** \details
+  Assures there are no multiple references to the StringData associated with this String object. 
+
+  \remarks
+  If there is more than one reference to the StringData object, it is released, and
+  replaced with a copy thereof 
+  */
+  void copyBeforeWrite();
+
+  /** \details
+  Assures the character buffer of this String object is at least the specified size.
+  \param newLength [in]  New length of buffer.
+
+  \remarks
+  If getAllocLength() < newLength, this function calls allocBuffer(newLength).
+  */
+  void allocBeforeWrite(int newLength);
+
+  /** \details
+  Releases the reference to the specified StringData object.
+
+  \param pStringData [in]  Pointer to the StringData object.
+
+  \remarks
+  If pStringData is not specified, the StringData associated with
+  this String object is released.
+
+  Decrements the reference count of the StringData object.
+
+  When its reference count reaches zero, the StringData object is freed.
+  */
+  void release();
+
+  static void ODA_PASCAL release(OdStringDataA* pStringData);
+
+  /** \details
+  Returns the length of the specified string.
+  \param string [in]  0 terminated string or NULL.
+  \remarks
+  Returns 0 if string == NULL.
+  */
+  static int ODA_PASCAL safeStrlen(const char* string)
+  { return (string == NULL) ? (int)0 : (int)odStrLenA(string); }
+
+  /** \details
+  Frees the specified StringData object.
+  \param pStringData [in]  Pointer to the StringData object.
+  */
+  static void freeData(OdStringDataA* pStringData);
+  friend class OdString;
+};
+
+inline bool operator==(const OdAnsiString& s1, const OdAnsiString& s2)
+{ return s1.compare(s2) == 0; }
+
+inline bool operator==(const OdAnsiString& s1, const char* s2)
+{ return s1.compare(s2) == 0; }
+
+inline bool operator==(const char* s1, const OdAnsiString& s2)
+{ return s2.compare(s1) == 0; }
+
+inline bool operator!=(const OdAnsiString& s1, const OdAnsiString& s2)
+{ return s1.compare(s2) != 0; }
+
+inline bool operator!=(const OdAnsiString& s1, const char* s2)
+{ return s1.compare(s2) != 0; }
+
+inline bool operator!=(const char* s1, const OdAnsiString& s2)
+{ return s2.compare(s1) != 0; }
+
+inline bool operator<(const OdAnsiString& s1, const OdAnsiString& s2)
+{ return s1.compare(s2) < 0; }
+
+inline bool operator<(const OdAnsiString& s1, const char* s2)
+{ return s1.compare(s2) < 0; }
+
+inline bool operator<(const char* s1, const OdAnsiString& s2)
+{ return s2.compare(s1) > 0; }
+
+inline bool operator>(const OdAnsiString& s1, const OdAnsiString& s2)
+{ return s1.compare(s2) > 0; }
+
+inline bool operator>(const OdAnsiString& s1, const char* s2)
+{ return s1.compare(s2) > 0; }
+
+inline bool operator>(const char* s1, const OdAnsiString& s2)
+{ return s2.compare(s1) < 0; }
+
+inline bool operator<=(const OdAnsiString& s1, const OdAnsiString& s2)
+{ return s1.compare(s2) <= 0; }
+
+inline bool operator<=(const OdAnsiString& s1, const char* s2)
+{ return s1.compare(s2) <= 0; }
+
+inline bool operator<=(const char* s1, const OdAnsiString& s2)
+{ return s2.compare(s1) >= 0; }
+
+inline bool operator>=(const OdAnsiString& s1, const OdAnsiString& s2)
+{ return s1.compare(s2) >= 0; }
+
+inline bool operator>=(const OdAnsiString& s1, const char* s2)
+{ return s1.compare(s2) >= 0; }
+
+inline bool operator>=(const char* s1, const OdAnsiString& s2)
+{ return s2.compare(s1) <= 0; }
+
+typedef OdArray<OdAnsiString> OdAnsiStringArray;
+
+#include "TD_PackPop.h"
+
+#endif // TD_UNICODE
+
+#endif // __ODANSISTRING_H__
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArray.h
new file mode 100755
index 0000000..e67932a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArray.h
@@ -0,0 +1,1515 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODARRAY_H_INCLUDED
+#define ODARRAY_H_INCLUDED
+
+#include <new>
+
+#include "TD_PackPush.h"
+
+#include "OdArrayPreDef.h"
+#include "OdHeap.h"
+#include "OdMutex.h"
+#include "OdError.h"
+#include "RxSystemServices.h"
+
+/** \details
+    This template class implements memory allocation functions within Teigha.
+    
+    \sa
+    TD_Db
+    
+    <group Other_Classes>
+*/
+template <class T> class OdMemoryAllocator
+{
+public:
+  typedef unsigned int size_type;
+  /** \details
+    This function copies the specified number of elements from source to destination.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param numElements [in]  Number of elements.
+    
+    \note
+    If the source and destination regions overlap, the behavior of this function is undefined. Use move() to handle overlapping regions.
+  */
+  static inline void copy(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numElements)
+  {
+    memcpy(pDestination, pSource, numElements * sizeof(T));
+  }
+  
+  /** \details
+    This function copies the specified number of elements from source to destination.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param numElements [in]  Number of elements.
+    
+    \remarks
+    If the source and destination regions overlap, move copies the overlapping region before it is overwritten.
+    
+    \note
+    Use copy() to handle non-overlapping regions. 
+  */
+  static inline void move(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numElements)
+  {
+    memmove(pDestination, pSource, numElements * sizeof(T));
+  }
+  /** \details
+    This function constructs an element.
+    
+    \param pElement [out]  Receives the element. 
+    \param value [in]  Value for the element.
+  */
+  static inline void construct(
+    T* pElement, 
+    const T& value = T())
+  {
+    *pElement = value;
+  }
+
+  /** \details
+    This function constructs an array of elements.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param value [in]  Value for the elements.
+    \param numElements [in]  Number of elements.
+    
+    \note
+    When called with two arguments, this function does nothing but return.
+  */
+  static inline void constructn(
+    T* pDestination, 
+    size_type numElements, 
+    const T& value)
+  {
+    while(numElements--)
+    {
+      pDestination[numElements] = value;
+    }
+  }
+  
+  static inline void constructn(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numElements)
+  {
+    copy(pDestination, pSource, numElements);
+  }
+  static inline void constructn(
+    T*, 
+    size_type)
+  {
+    // DOES NOTHING
+  }
+  /** \details
+    Destroys the specified element or elements.
+    
+    \note
+    This function does nothing but return.
+  */
+  static inline void destroy(
+    T*)
+  {
+    // DOES NOTHING
+  }
+  static inline void destroy(
+    T*, 
+    size_type )
+  {
+    // DOES NOTHING
+  }
+  /** \details
+     Returns true if and only if odrxRealloc can be used to resize an array.
+ 
+     \note
+     This function always returns true.
+  */
+  static inline bool useRealloc()
+  {
+    return true;
+  }
+};
+
+
+/** \details
+    This template class implements object allocation functions within Teigha.
+    
+    \remarks
+    This class is for objects that must be copied with the assignment operator.
+    For objects that can be copied with memcpy(), see OdPlainObjectsAllocator.
+    
+    \sa
+    TD_Db
+
+    <group Other_Classes>
+*/
+template <class T> class OdObjectsAllocator
+{
+public:
+  typedef unsigned int size_type;
+  
+  /** \details
+    This function copies the specified number of objects from source to destination.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param numObjects [in]  Number of objects.
+    
+    \note
+    If the source and destination regions overlap, the behavior of this function is undefined. Use move() to handle overlapping regions.
+  */
+  static inline void copy(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numObjects)
+  {
+    while(numObjects--)
+    {
+      *pDestination = *pSource;
+      pDestination++;
+      pSource++;
+    }
+  }
+
+  /** \details
+    This function copies the specified number of objects from source to destination.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param numObjects [in]  Number of objects.
+    
+    \remarks
+    If the source and destination regions overlap, move copies the overlapping region before it is overwritten.
+    
+    \note
+    Use copy() to handle non-overlapping regions. 
+  */
+  static inline void move(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numObjects)
+  {
+    if (pDestination <= pSource || pDestination >= pSource + numObjects)
+    {
+      copy(pDestination, pSource, numObjects);
+    }
+    else
+    {
+      while(numObjects--)
+      {
+        pDestination[numObjects] = pSource[numObjects];
+      }
+    }
+  }
+  /** \details
+    This function constructs an object.
+    
+    \param pObject [out]  Receives the object. 
+    \param value [in]  Value for the object.
+  */
+  static inline void construct(
+    T* pObject)
+  {
+#ifdef new
+#undef new
+#endif
+    ::new (pObject) T;
+  }
+  static inline void construct(
+     T* pObject, 
+     const T& value)
+  {
+#ifdef new
+#undef new
+#endif
+    ::new (pObject) T(value);
+  }
+  /** \details
+    This function constructs an array of objects.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param value [in]  Value for the objects.
+    \param numObjects [in]  Number of objects.
+    
+  */
+  static inline void constructn(
+    T* pDestination, 
+    size_type numObjects, 
+    const T& value)
+  {
+    while(numObjects--)
+    {
+      construct(pDestination+numObjects, value);
+    }
+  }
+  static inline void constructn(
+    T* pDestination, 
+    size_type numObjects)
+  {
+    while(numObjects--)
+    {
+      construct(pDestination+numObjects);
+    }
+  }
+  static inline void constructn(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numObjects)
+  {
+    while(numObjects--)
+    {
+      construct(pDestination, *pSource);
+      pDestination++;
+      pSource++;
+    }
+  }
+  /** \details
+    Destroys the specified object or objects.
+    \param pObject [in]  Pointer to the object. 
+    \param objects [in]  Array of objects.
+    \param numObjects [in]  Number of objects.
+  */
+  static inline void destroy(
+    T* pObject)
+  {
+    pObject->~T();
+    pObject = 0;
+  }
+  static inline void destroy(
+    T* objects, 
+    size_type numObjects)
+  {
+    while(numObjects--)
+    {
+      destroy(objects + numObjects);
+    }
+  }
+  /** \details
+     Returns true if and only if odrxRealloc can be used to resize an array.
+     
+     \note
+     This function always returns false.
+  */
+  static inline bool useRealloc()
+  {
+    return false;
+  }
+};
+/** \details
+    This template class implements object allocation functions for objects within Teigha.
+    
+    \remarks
+    This class is for objects that can copied with memcpy() (plain objects). For objects that must be copied with the assignment operator,
+    see OdObjectsAllocator.
+    
+    \sa
+    TD_Db
+
+    <group Other_Classes>
+*/
+template <class T> class OdPlainObjectsAllocator
+{
+public:
+  typedef unsigned int size_type;
+  
+  /** \details
+    This function copies the specified number of objects from source to destination.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param numObjects [in]  Number of objects.
+    
+    \note
+    If the source and destination regions overlap, the behavior of this function is undefined. Use move() to handle overlapping regions.
+  */
+  static inline void copy(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numObjects)
+  {
+    memcpy(pDestination, pSource, numObjects * sizeof(T));
+  }
+  
+  /** \details
+    This function copies the specified number of objects from source to destination.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param numObjects [in]  Number of objects.
+    
+    \remarks
+    If the source and destination regions overlap, move copies the overlapping region before it is overwritten.
+    
+    \note
+    Use copy() to handle non-overlapping regions. 
+  */
+  static inline void move(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numObjects)
+  {
+    memmove(pDestination, pSource, numObjects * sizeof(T));
+  }
+  
+  /** \details
+    This function constructs an object.
+    
+    \param pObject [out]  Receives the object. 
+    \param value [in]  Value for the object.
+  */
+  static inline void construct(
+    T* pObject)
+  {
+#ifdef new
+#undef new
+#endif
+    ::new (pObject) T;
+  }
+  static inline void construct(
+    T* pObject, 
+    const T& value)
+  {
+#ifdef new
+#undef new
+#endif
+    ::new (pObject) T(value);
+  }
+  
+  /** \details
+    This function constructs an array of objects.
+    
+    \param pDestination [in]  Pointer to the destination.
+    \param pSource [in]  Pointer to the source.
+    \param value [in]  Value for the objects.
+    \param numObjects [in]  Number of objects.
+    
+  */
+  static inline void constructn(
+    T* pDestination, 
+    size_type numObjects, 
+    const T& value)
+  {
+    while(numObjects--)
+    {
+      construct(pDestination+numObjects, value);
+    }
+  }
+  static inline void constructn(
+    T* pDestination, 
+    size_type numObjects)
+  {
+    while(numObjects--)
+    {
+      construct(pDestination+numObjects);
+    }
+  }
+  static inline void constructn(
+    T* pDestination, 
+    const T* pSource, 
+    size_type numObjects)
+  {
+    while(numObjects--)
+    {
+      construct(pDestination, *pSource);
+      pDestination++;
+      pSource++;
+    }
+  }
+  
+  /** \details
+    Destroys the specified object or objects.
+    \param pObject [in]  Pointer to the object. 
+    \param objects [in]  Array of objects.
+    \param numObjects [in]  Number of objects.
+  */
+  static inline void destroy(
+    T* pObject)
+  {
+    pObject->~T();
+    pObject = 0;
+  }
+  static inline void destroy(
+    T* objects, 
+    size_type numObjects)
+  {
+    while(numObjects--)
+    {
+      destroy(objects + numObjects);
+    }
+  }
+  /** \details
+     Returns true if and only if odrxRealloc can be used to resize an array.
+     
+     \note
+     This function always returns true.
+  */
+  static inline bool useRealloc()
+  {
+    return true;
+  }
+};
+
+/** \details
+
+    <group !!RECORDS_TD_APIRef>
+*/
+struct FIRSTDLL_EXPORT OdArrayBuffer
+{
+  typedef unsigned int size_type;
+
+  mutable OdRefCounter m_nRefCounter;
+  int               m_nGrowBy;
+  size_type         m_nAllocated;
+  size_type         m_nLength;
+
+  FIRSTDLL_EXPORT_STATIC static OdArrayBuffer g_empty_array_buffer;
+};
+
+
+
+/** \details
+    This template class implements dynamic Array objects within Teigha.
+
+    \remarks
+    Methods are provided to access Array elements via both array indices and array pointers (iterators).
+
+    Some definitions are in order:
+    
+    1. Logical Length or Size -- The number of entries in the array. Initially zero.
+    2. Physical Length -- The maximum Logical Length of the array before it automatically grows.
+    3. Grow Length -- The number of entries by which the Physical Length will grow as required.
+    
+    \sa
+    TD_Db
+    
+    <group Other_Classes>
+*/
+template <class T, class A> class OdArray
+{
+public:
+  typedef typename A::size_type size_type;
+  typedef T* iterator;
+  typedef const T* const_iterator;
+  typedef T value_type;
+  typedef const T& const_reference;
+  typedef T& reference;
+private:
+  struct Buffer : OdArrayBuffer
+  {
+    T* data() const { return (T*)(this+1); }
+
+    static Buffer* allocate(size_type nLength2Allocate, int nGrowBy)
+    {
+      size_type nBytes2Allocate = sizeof(Buffer) + nLength2Allocate * sizeof(T);
+      ODA_ASSERT(nBytes2Allocate > nLength2Allocate); // size_type overflow
+      if(nBytes2Allocate > nLength2Allocate)
+      {
+        Buffer* pBuffer = (Buffer*)::odrxAlloc(nBytes2Allocate);
+        if (pBuffer)
+        {
+          pBuffer->m_nRefCounter = 1;
+          pBuffer->m_nGrowBy     = nGrowBy;
+          pBuffer->m_nAllocated  = nLength2Allocate;
+          pBuffer->m_nLength     = 0;
+          return pBuffer;
+        }
+      }
+      throw OdError(eOutOfMemory);
+    }
+    static Buffer* _default()
+    {
+      return (Buffer*)&g_empty_array_buffer;
+    }
+    void release()
+    {
+      ODA_ASSERT(m_nRefCounter);
+      if((--m_nRefCounter)==0 && this != _default())
+      {
+        A::destroy(data(), m_nLength);
+        ::odrxFree(this);
+      }
+    }
+    void addref() const { ++m_nRefCounter; }
+  };
+  class reallocator
+  {
+    bool _may_use_realloc;
+    Buffer* m_pBuffer;
+  public:
+    inline reallocator( bool may_use_realloc = false ) : _may_use_realloc(may_use_realloc), m_pBuffer(NULL)
+    {
+      if ( !_may_use_realloc )
+      {
+        m_pBuffer = Buffer::_default();
+        m_pBuffer->addref(); 
+      }
+    }
+    inline void reallocate(OdArray* pArray, size_type nNewLen )
+    {
+      if(!pArray->referenced())
+      {
+        if(nNewLen > pArray->physicalLength())
+        {
+          if ( !_may_use_realloc )
+          {
+            m_pBuffer->release();
+            m_pBuffer = pArray->buffer();
+            m_pBuffer->addref(); // save buffer to ensure copy from itself would work (e.g insertAt)
+          }
+          pArray->copy_buffer(nNewLen, _may_use_realloc);
+        }
+      }
+      else
+      {
+        pArray->copy_buffer(nNewLen);
+      }
+    }
+    inline ~reallocator() 
+    {
+      if ( !_may_use_realloc ) m_pBuffer->release();
+    }
+  };
+  friend class reallocator;
+  const_iterator begin_const() const { return begin(); }
+  iterator begin_non_const() { return begin(); }
+  const_iterator end_const() { return end(); }
+  iterator end_non_const() { return end(); }
+  void copy_before_write(size_type len, bool may_use_realloc = false )
+  {
+    if( referenced() )
+      copy_buffer(len);
+    else if ( len > physicalLength() )
+      copy_buffer( len, may_use_realloc );
+  }
+  void copy_if_referenced() { if(referenced()) { copy_buffer(physicalLength()); } }
+  void copy_buffer( size_type len, bool may_use_realloc = false, bool force_size = false )
+  {
+    Buffer* pOldBuffer = buffer();
+    int nGrowBy = pOldBuffer->m_nGrowBy;
+    size_type len2 = len;
+    if ( !force_size )
+    {
+      if(nGrowBy > 0)
+      {
+        len2 += nGrowBy;
+        len2 = ((len2 - 1) / nGrowBy) * nGrowBy;
+      }
+      else
+      {
+        len2 = pOldBuffer->m_nLength;
+        len2 = len2 + -nGrowBy * len2 / 100;
+        if(len2 < len)
+        {
+          len2 = len;
+        }
+      }
+    }
+    if ( may_use_realloc && A::useRealloc() && !empty() )
+    {
+      Buffer* pNewBuffer = reinterpret_cast<Buffer*>( ::odrxRealloc( 
+        pOldBuffer, len2 * sizeof(T) + sizeof(Buffer), pOldBuffer->m_nAllocated * sizeof(T) + sizeof(Buffer) ) );
+      if (!pNewBuffer)
+        throw OdError(eOutOfMemory);
+      pNewBuffer->m_nAllocated = len2;
+      pNewBuffer->m_nLength = odmin(pNewBuffer->m_nLength, len);
+      m_pData = pNewBuffer->data();
+    }
+    else 
+    {
+      Buffer* pNewBuffer = Buffer::allocate(len2, nGrowBy);
+      if (!pNewBuffer)
+        throw OdError(eOutOfMemory);
+      len = odmin(pOldBuffer->m_nLength, len);
+      A::constructn(pNewBuffer->data(), pOldBuffer->data(), len);
+      pNewBuffer->m_nLength = len;
+      m_pData = pNewBuffer->data();
+      pOldBuffer->release();
+    }
+  }
+  inline void assertValid(size_type index) const
+  { 
+    if(!isValid(index)) 
+    { 
+      ODA_FAIL(); 
+      throw OdError_InvalidIndex(); 
+    } 
+  }
+  static inline void rise_error(OdResult e) 
+  { 
+    ODA_FAIL(); 
+    throw OdError(e); 
+  }
+public:
+  // STL-like interface
+  
+  /** \details
+    Returns an iterator that references the first element in this Array object.
+  */
+  iterator begin() 
+  { 
+    if(!empty()) 
+    { 
+      copy_if_referenced(); 
+      return data(); 
+    } 
+    return 0;
+  }
+  const_iterator begin() const 
+  { 
+    if(!empty()) 
+    { 
+      return data(); 
+    } 
+    return 0; 
+  }
+
+  /** \details
+    Returns an iterator that references the location after the last element in this Array object.
+  */
+  iterator end() 
+  { 
+    if(!empty()) 
+    { 
+      copy_if_referenced(); 
+      return data() + length(); 
+    } 
+    return 0; 
+  }
+  const_iterator end() const 
+  { 
+    if(!empty()) 
+    { 
+      return data() + length(); 
+    } 
+    return 0; 
+  }
+  
+  /** \details
+    Inserts an element, number of elements, or range of elements, into this Array object. 
+    
+    \param before [in]  Position where first element is to be inserted.
+    \param first [in]  Position of first element to be inserted.
+    \param afterLast [in]  Position of first element after the last element to be inserted.
+    
+    \remarks
+    The range of elements may be from another Array object.
+  */
+  void insert(
+    iterator before, 
+    const_iterator first, 
+    const_iterator afterLast)
+  {
+    size_type len = length();
+    size_type index = (size_type)(before - begin_const());
+    if(index <= len && afterLast>=first)
+    {
+      if(afterLast > first)
+      {
+        size_type num2copy = (size_type)(afterLast - first);
+        reallocator r( first < begin() || first >= end() );
+        r.reallocate(this, len + num2copy);
+        A::constructn(m_pData + len, first, num2copy);
+        buffer()->m_nLength = len + num2copy;
+        T* pDestination = m_pData + index;
+        if(index != len)
+        {
+          A::move(pDestination + num2copy, pDestination, len - index);
+        }
+        A::copy(pDestination, first, (size_type)(afterLast - first));
+      }
+    }
+    else
+    {
+      rise_error(eInvalidInput);
+    }
+  }
+  /** \details
+    Specifies the logical length for this Array object.
+    \param logicalLength [in]  Logical length.
+    \param value [in]  Value for the elements added to obtain the new logical length.
+  */
+  void resize( 
+    size_type logicalLength, 
+    const T& value )
+  {
+    size_type len = length();
+    int d = logicalLength - len;
+    if ( d > 0 )
+    {
+      reallocator r( m_pData > &value || &value > (m_pData + len) );
+      r.reallocate(this, logicalLength);
+      A::constructn(m_pData + len, d, value);
+    }
+    else if ( d < 0 )
+    {
+      d=-d;
+      if(!referenced())
+      {
+        A::destroy(m_pData + logicalLength, d);
+      }
+      else
+      {
+        copy_buffer(logicalLength);
+      }
+    }
+    buffer()->m_nLength = logicalLength;
+  }
+  
+  void resize( 
+    size_type logicalLength )
+  {
+    size_type len = length();
+    int d = logicalLength - len;
+    if ( d > 0 )
+    {
+      copy_before_write( len + d, true );
+      A::constructn(m_pData + len, d);
+    }
+    else if ( d < 0 )
+    {
+      d = -d;
+      if ( !referenced() )
+      {
+        A::destroy( m_pData + logicalLength, d );
+      }
+      else
+      {
+        copy_buffer(logicalLength);
+      }
+    }
+    buffer()->m_nLength = logicalLength;
+  }
+  
+  /** \details
+    Returns the logical length of this Array object.
+  */
+  size_type size() const 
+  { 
+    return buffer()->m_nLength; 
+  }
+
+  /** \details
+    Returns true if and only if this Array is empty.
+  */
+  bool empty() const 
+  { 
+    return size() == 0; 
+  }
+  
+  /** \details
+    Returns the physical length of this Array object.
+  */
+  size_type capacity() const 
+  { 
+    return buffer()->m_nAllocated; 
+  }
+
+  /** \details
+    Sets the physical length of this Array object to the specified
+    reserve length if the reserve length is greater than its physical length.
+
+    \param reserveLength [in]  Minimum physical length.
+  */
+  void reserve(
+    size_type reserveLength) 
+  { 
+    if(physicalLength() < reserveLength) 
+    { 
+      setPhysicalLength(reserveLength); 
+    } 
+  }
+
+  /** \details
+    Assigns the specified range of elements to this Array object.
+
+    \param first [in]  Position of first element to be assigned.
+    \param afterLast [in]  Position of first element after the last element to be assigned.
+    
+    \remarks
+    After this Array object is cleared, this function assigns the specified range of elements from
+    another Array object.  
+  */
+  void assign(
+    const_iterator first, 
+    const_iterator afterLast)
+  { 
+    erase(begin_non_const(), end_non_const()); 
+    insert(begin_non_const(), first, afterLast); 
+  }
+  
+  /** \details
+    Removes the specified element or range of elements from this Array object.
+
+    \param first [in]  Position of first element to be erased.
+    \param afterLast [in]  Position of first element after the last element to be erased.
+  */
+  iterator erase(
+    iterator first, 
+    iterator afterLast)
+  {
+    size_type i = (size_type)(first - begin_const());
+    if(first != afterLast)
+    {
+      removeSubArray(i, (size_type)(afterLast-begin_const()-1));
+    }
+    return begin_non_const()+i;
+  }
+  /** \param where [in]  Element to remove.
+  */
+  iterator erase(
+    iterator where)
+  {
+    size_type i = (size_type) (where - begin_const());
+    removeAt(i);
+    return begin_non_const()+i;
+  }
+  /** \details
+    Removes all elements from this Array object.
+  */
+  void clear()
+  { 
+    erase(begin_non_const(), end_non_const()); 
+  }
+
+  /** \details
+    Appends an element to the end of this Array object.
+  */
+  void push_back(
+    const T& value) 
+  { 
+    insertAt(length(), value); 
+  }
+  
+  /** \param numElements [in]  Number of elements to insert.
+    \param value [in]  Value to insert.
+  */
+  iterator insert(
+    iterator before, 
+    size_type numElements, 
+    const T& value)
+  {
+    size_type len = length();
+    size_type index = (size_type)(before - begin_const());
+    reallocator r( m_pData > &value || &value > (m_pData + len) );
+    r.reallocate(this, len + numElements);
+    A::constructn(m_pData + len, numElements, value);
+    buffer()->m_nLength = len + numElements;
+    T* pData = data();
+    pData += index;
+    if(index != len)
+    {
+      A::move(pData + numElements, pData, len - index);
+    }
+    while(numElements--)
+    {
+      pData[numElements] = value;
+    }
+    return begin_non_const()+index;
+  }
+  
+  iterator insert(
+    iterator before, 
+    const T& value = T())
+  {
+    size_type index = (size_type)(before - begin_const());
+    insertAt(index, value);
+    return (begin_non_const() + index);
+  }  
+
+  /** \details
+    Returns true if and only if this Array object contains ths specified value.
+    
+    \param value [in]  Value for which to search.
+    \param start [in]  Starting index of search.
+  */
+  bool contains(
+    const T& value, 
+    size_type start = 0) const
+  { 
+    size_type dummy; 
+    return find(value, dummy, start); 
+  }
+
+  /** \details
+    Returns the number of elements in this Array object.
+  */
+  size_type length() const 
+  { 
+    return buffer()->m_nLength; 
+  }
+  
+  /** \details
+    Returns true if and only if this Array is empty.
+  */
+  bool isEmpty() const 
+  { 
+    return length() == 0; 
+  }
+  
+  /** \details
+    Returns the logical length of this Array object.
+  */
+  size_type logicalLength() const 
+  { 
+    return length(); 
+  }
+  
+  /** \details
+    Returns the physical length of this Array object.
+  */
+  size_type physicalLength() const 
+  { 
+    return buffer()->m_nAllocated; 
+  }
+  
+  /** \details
+    Returns the grow length of this Array object.
+  */
+  int growLength() const 
+  { 
+    return buffer()->m_nGrowBy; 
+  }
+  
+  /** \details
+    Returns the data buffer of this Array object. 
+  */
+  const T* asArrayPtr() const 
+  { 
+    return data(); 
+  }
+
+  /** \details
+    Returns the data buffer of this Array object. 
+  */
+  const T* getPtr() const 
+  { 
+    return data(); 
+  }
+
+  T* asArrayPtr() 
+  { 
+    copy_if_referenced(); 
+    return data(); 
+  }
+  
+  /** \remarks
+    For convenient access to the data.
+  */
+  const T& operator [](
+    size_type index) const 
+  { 
+    assertValid(index); 
+    return m_pData[index]; 
+  }
+  T& operator [](
+    size_type index) 
+  { 
+    assertValid(index); 
+    copy_if_referenced(); 
+    return m_pData[index]; 
+  }
+
+  /** \details
+    Returns the element of this Array object at the specified index.
+    \param arrayIndex [in]  Array index. 
+  */
+  T& at(
+    size_type arrayIndex) 
+  { 
+    assertValid(arrayIndex); 
+    copy_if_referenced(); 
+    return *(data() + arrayIndex); 
+  }
+  const T& at(size_type arrayIndex) const 
+  { 
+    assertValid(arrayIndex); 
+    return *(data() + arrayIndex); 
+  }
+  
+  /** \details
+    Sets the element of this Array object at the specified index.
+    \param arrayIndex [in]  Array index.
+    \param value [in]  Value. 
+  */
+  OdArray& setAt(
+    size_type arrayIndex, 
+    const T& value)
+  { 
+    assertValid(arrayIndex); 
+    copy_if_referenced(); 
+    m_pData[arrayIndex] = value; 
+    return *this; 
+  }
+
+  /** \details
+    Returns the element of this Array object at the specified position.
+    \param arrayIndex [in]  Array index. 
+  */
+  const T& getAt(
+    size_type arrayIndex) const 
+  { 
+    assertValid(arrayIndex); 
+    return *(data() + arrayIndex); 
+  }
+  
+  /** \details
+    Returns the first element of this Array object.
+  */
+  T& first() 
+  { 
+    return *begin(); 
+  }
+  const T& first() const 
+  { 
+    return *begin(); 
+  }
+  
+  /** \details
+    Returns the last element of this Array object.
+  */
+  T& last() 
+  { 
+    return at(length() - 1); 
+  }
+  const T& last() const 
+  { 
+    return at(length() - 1); 
+  }
+  
+  size_type append(
+    const T& value) 
+  { 
+    insertAt(length(), value); 
+    return length() - 1; 
+  }
+  
+  iterator append() 
+  { 
+    size_type i = append(T()); 
+    return begin_non_const() + i;
+  }
+  
+  /** \details
+    Removes the first element in this Array object.
+  */
+  OdArray& removeFirst() 
+  { 
+    return removeAt(0); 
+  }
+  
+  /** \details
+    Removes the last element in this Array object.
+  */
+  OdArray& removeLast() 
+  { 
+    return removeAt(length() - 1); 
+  }
+  
+  /** \details
+    Sets the grow length of this Array object.
+    \param growLength [in]  Grow length. 
+  */
+  OdArray& setGrowLength(
+    int growLength)
+  {
+    if (growLength != 0)
+    {
+      copy_if_referenced();
+      buffer()->m_nGrowBy = growLength;
+    }
+    else
+    {
+      ODA_FAIL();
+    }
+    return *this;
+  }
+
+  /** \param physicalLength [in]  Initial physical length.
+    \param growLength [in]  Initial grow length.
+  */
+  explicit OdArray(
+    size_type physicalLength, 
+    int growLength = 8) : m_pData(0)
+  {
+    if (growLength == 0)
+    {
+      growLength = 8;
+    }
+    m_pData = Buffer::allocate(physicalLength, growLength)->data();
+  }
+  
+  OdArray() : m_pData(Buffer::_default()->data()) 
+  { 
+    buffer()->addref(); 
+  }
+  
+  OdArray(const OdArray& source) : m_pData((T*)source.data()) 
+  { 
+    buffer()->addref(); 
+  }
+  
+  ~OdArray() 
+  { 
+    buffer()->release(); 
+  }
+  
+  OdArray& operator =(
+    const OdArray& source)
+  {
+    source.buffer()->addref();
+    buffer()->release();
+    m_pData = source.m_pData;
+    return *this;
+  }
+  
+  bool operator ==(
+    const OdArray& array) const
+  {
+    if(length() == array.length())
+    {
+      for(size_type i = 0; i < length(); i++)
+      {
+        if(at(i) != array[i])
+        {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+  
+  /** \details
+    Sets all the elements in this Array object to the specified value.
+    \param value [in]  Value to assign.
+  */
+  OdArray& setAll(
+    const T& value)
+  {
+    copy_if_referenced();
+    T* pData = data();
+    size_type n = length();
+    while(n)
+    {
+      pData[--n] = value;
+    }
+    return *this;
+  }
+  /** \details
+    Appends the specified value or Array object to the end of this Array object.
+
+    \param otherArray [in]  Array to append.
+    \param value [in]  Value to append.
+    
+    \remarks
+    If called with otherArray, returns a reference to this Array object.
+    
+    If called with value, returns the index of the new last element.
+    
+    If called with no arguments, returns an interator (pointer) to the first element 
+    after the last element in the array.
+  */
+  OdArray& append(
+    const OdArray& otherArray)
+  {
+    insert(end_non_const(), otherArray.begin(), otherArray.end());
+    return *this;
+  }
+  
+  /** \details
+    Inserts the specified value into this Array object at the specified index.
+
+    \param arrayIndex [in]  Array index.
+    \param value [in]  Value to insert.
+    
+    \remarks
+                0 <= arrayIndex <= length()
+    
+    Elements starting at arrayIndex will have their indices incremented.
+     
+    Returns a reference to this Array object.
+  */
+  OdArray& insertAt(
+    size_type arrayIndex, 
+    const T& value)
+  {
+    size_type len = length();
+    if( arrayIndex == len )
+    {
+      resize( len + 1, value );
+    }
+    else if ( arrayIndex < len )
+    {
+      reallocator r( m_pData > &value || &value > (m_pData + len) );
+      r.reallocate( this, len+1 );
+      A::construct( m_pData + len );
+      ++(buffer()->m_nLength);
+      A::move(m_pData + arrayIndex + 1, m_pData + arrayIndex, len - arrayIndex);
+      m_pData[arrayIndex] = value;
+    }
+    else
+    {
+      rise_error(eInvalidIndex);
+    }
+    return *this;
+  }
+  
+  /** \details
+    Removes the element at the specified index from this Array object.
+
+    \param arrayIndex [in]  Array index.
+    
+    \remarks
+                0 <= arrayIndex < length()
+    
+    Elements starting at arrayIndex+1 will have their indices decremented.
+     
+    Returns a reference to this Array object.
+  */
+  OdArray& removeAt(
+    size_type arrayIndex)
+  {
+    assertValid(arrayIndex);
+    size_type len = length();
+    if(arrayIndex < --len)
+    {
+      copy_if_referenced();
+      T* pData = data();
+      A::move(pData + arrayIndex, pData + arrayIndex + 1, len - arrayIndex);
+    }
+    resize(len);
+    return *this;
+  }
+  
+  /** \details
+    Removes the specified elements from this Array object.
+
+    \param startIndex [in]  Start index.
+    \param endIndex [in]   End index.
+    
+    \remarks
+    Elements from startIndex through endIndex inclusive will be removed.
+    
+    Returns a reference to this Array object.
+  */
+  OdArray& removeSubArray(
+    size_type startIndex, 
+    size_type endIndex)
+  {
+    if(!isValid(startIndex) || startIndex > endIndex)
+    {
+      rise_error(eInvalidIndex);
+    }
+    size_type len = length();
+    copy_if_referenced();
+    T* pData = data();
+    ++endIndex;
+    size_type n2remove = endIndex - startIndex;
+    A::move(pData + startIndex, pData + endIndex, len - endIndex);
+    A::destroy(pData + len - n2remove, n2remove);
+    buffer()->m_nLength -= n2remove;
+    return *this;
+  }
+  
+  /** \details
+    Returns true if and only if this Array object contains ths specified value.
+    
+    \param value [in]  Value for which to search.
+    \param findIndex [out]  Receives the index of the found value.
+    \param start [in]  Starting index of search.
+    
+    \remarks
+    Returns the index at which the element was found.
+  */
+  bool find(
+    const T& value, 
+    size_type& findIndex, 
+    size_type start=0) const
+  {
+    if(!empty())
+    {
+      assertValid(start);
+      size_type len = length();
+      const T* pData = data();
+      for(size_type i = start; i<len; ++i)
+      {
+        if(pData[i] == value)
+        {
+          findIndex = i;
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+  
+  /** \details
+    Sets the logical length of this Array object.
+    \param logLength [in]  Logical length.
+    \remarks
+    The physical length is increased as required. 
+  */
+  OdArray& setLogicalLength(
+    size_type logLength)
+  {
+    resize(logLength);
+    return *this;
+  }
+  
+  /** \details
+    Sets the physical length of this Array object.
+    \param physLength [in]  Physical length.
+    \remarks
+    The logical length is decreased as required.
+  */
+  OdArray& setPhysicalLength(
+    size_type physLength)
+  {
+    if(physLength==0)
+    {
+      *this = OdArray<T, A>();
+    }
+    else if(physLength != physicalLength())
+    {
+      copy_buffer(physLength, !referenced(), true);
+    }
+    return *this;
+  }
+  
+  /** \details
+    Reverses the order of the elements in this Array object.
+  */
+  OdArray& reverse()
+  {
+    if(!empty())
+    {
+      copy_if_referenced();
+      T tmp;
+      iterator iter1 = begin_non_const();
+      iterator iter2 = end_non_const();
+      --iter2;
+      while(iter1 < iter2)
+      {
+        tmp = *iter1;
+        *iter1 = *iter2;
+        *iter2 = tmp;
+        ++iter1;
+        --iter2;
+      }
+    }
+    return *this;
+  }
+    
+  /** \details
+    Swaps the specified elements in this Array object.
+    \param firstIndex [in]  Index of first element.
+    \param secondIndex [in]  Index of second element. 
+  */
+  OdArray& swap(
+    size_type firstIndex, 
+    size_type secondIndex)
+  {
+    if(!isValid(firstIndex) || !isValid(secondIndex))
+    {
+      rise_error(eInvalidIndex);
+    }    
+    if(firstIndex != secondIndex)
+    {
+      const T tmp = at(firstIndex);
+      at(firstIndex) = at(secondIndex);
+      at(secondIndex) = tmp;
+    }
+    return *this;
+  }
+  /** \details
+    Removes the element with the specified value from this Array object.
+    
+    \param value [in]  Value for which to search.
+    \param start [in]  Starting index of search.
+    
+    \remarks
+    Removes the first occurance of value starting at start.
+   
+    Returns true if and only if an element was removed.
+  */
+  bool remove(
+    const T& value, 
+    size_type start = 0)
+  {
+    size_type i = 0;
+    if(find(value, i, start))
+    {
+      removeAt(i);
+      return true;
+    }
+    return false;
+  }
+private:
+
+  T*    m_pData;
+
+  bool isValid(size_type i) const 
+  { 
+    return (i < length());
+  }
+
+  T* data() 
+  { 
+    return (length() ? m_pData : 0); 
+  }
+
+  const T* data() const 
+  { 
+    return m_pData; 
+  }
+
+  Buffer* buffer() const
+  {
+    return (reinterpret_cast<Buffer*>(const_cast<OdArray*>(this)->m_pData) - 1);
+  }
+  bool referenced() const
+  {
+    return (buffer()->m_nRefCounter>1);
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // ODARRAY_H_INCLUDED
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayMemAlloc.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayMemAlloc.h
new file mode 100755
index 0000000..fabd03b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayMemAlloc.h
@@ -0,0 +1,894 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef ODARRAYMEMALLOC_H_INCLUDED
+#define ODARRAYMEMALLOC_H_INCLUDED
+
+#include <new>
+
+#include "TD_PackPush.h"
+
+#include "OdArray.h"
+#include "OdAlloc.h"
+
+/** <group Other_Classes>
+*/
+class OdrxMemoryManager
+{
+public:
+  static void* Alloc(size_t nBytes) { return ::odrxAlloc(nBytes); }
+  static void Free(void* pMemBlock) { ::odrxFree(pMemBlock); }
+  static void* Realloc(void* pMemBlock, size_t newSize, size_t oldSize)
+  {
+    return ::odrxRealloc(pMemBlock, newSize, oldSize);
+  }
+};
+template <class T, class A = OdObjectsAllocator<T>, class Mm = OdrxMemoryManager> class OdArrayMemAlloc;
+
+/** \details
+    This template class implements dynamic Array objects within DWGdirect.
+
+    \remarks
+    Methods are provided to access Array elements via both array indices and array pointers (iterators).
+
+    Some definitions are in order:
+
+    1. Logical Length or Size -- The number of entries in the array. Initially zero.
+    2. Physical Length -- The maximum Logical Length of the array before it automatically grows.
+    3. Grow Length -- The number of entries by which the Physical Length will grow as required.
+
+    \sa
+    Db
+
+    <group Other_Classes>
+*/
+template <class T, class A, class Mm> class OdArrayMemAlloc
+{
+public:
+  typedef typename A::size_type size_type;
+  typedef T* iterator;
+  typedef const T* const_iterator;
+private:
+  struct Buffer : OdArrayBuffer
+  {
+    T* data() const { return (T*)(this+1); }
+
+    static Buffer* allocate(size_type nLength2Allocate, int nGrowBy)
+    {
+      size_type nBytes2Allocate = sizeof(Buffer) + nLength2Allocate * sizeof(T);
+      ODA_ASSERT(nBytes2Allocate > nLength2Allocate); // size_type overflow
+      if(nBytes2Allocate > nLength2Allocate)
+      {
+        Buffer* pBuffer = (Buffer*)Mm::Alloc(nBytes2Allocate);
+        if (pBuffer)
+        {
+          pBuffer->m_nRefCounter = 1;
+          pBuffer->m_nGrowBy     = nGrowBy;
+          pBuffer->m_nAllocated  = nLength2Allocate;
+          pBuffer->m_nLength     = 0;
+          return pBuffer;
+        }
+      }
+      throw OdError(eOutOfMemory);
+    }
+    static Buffer* _default()
+    {
+      return (Buffer*)&g_empty_array_buffer;
+    }
+    void release()
+    {
+      ODA_ASSERT(m_nRefCounter);
+      if((--m_nRefCounter)==0 && this != _default())
+      {
+        A::destroy(data(), m_nLength);
+        Mm::Free(this);
+      }
+    }
+    void addref() const { ++m_nRefCounter; }
+  };
+  class reallocator
+  {
+    bool _may_use_realloc;
+    Buffer* m_pBuffer;    
+  public:
+    inline reallocator( bool may_use_realloc = false ) : _may_use_realloc(may_use_realloc) , m_pBuffer(NULL)
+    {
+      if ( !_may_use_realloc )
+      {
+        m_pBuffer = Buffer::_default();
+        m_pBuffer->addref();
+      }
+    }
+    inline void reallocate(OdArrayMemAlloc* pArray, size_type nNewLen )
+    {
+      if(!pArray->referenced())
+      {
+        if(nNewLen > pArray->physicalLength())
+        {
+          if ( !_may_use_realloc )
+          {
+            m_pBuffer->release();
+            m_pBuffer = pArray->buffer();
+            m_pBuffer->addref(); // save buffer to ensure copy from itself would work (e.g insertAt)
+          }
+          pArray->copy_buffer(nNewLen, _may_use_realloc);
+        }
+      }
+      else
+      {
+        pArray->copy_buffer(nNewLen);
+      }
+    }
+    inline ~reallocator()
+    {
+      if ( !_may_use_realloc ) m_pBuffer->release();
+    }
+  };
+  friend class reallocator;
+  const_iterator begin_const() const { return begin(); }
+  iterator begin_non_const() { return begin(); }
+  const_iterator end_const() { return end(); }
+  iterator end_non_const() { return end(); }
+  void copy_before_write(size_type len, bool may_use_realloc = false )
+  {
+    if( referenced() )
+      copy_buffer(len);
+    else if ( len > physicalLength() )
+      copy_buffer( len, may_use_realloc );
+  }
+  void copy_if_referenced() { if(referenced()) { copy_buffer(physicalLength()); } }
+  void copy_buffer( size_type len, bool may_use_realloc = false, bool force_size = false )
+  {
+    Buffer* pOldBuffer = buffer();
+    int nGrowBy = pOldBuffer->m_nGrowBy;
+    size_type len2 = len;
+    if ( !force_size )
+    {
+      if(nGrowBy > 0)
+      {
+        len2 += nGrowBy;
+        len2 = ((len2 - 1) / nGrowBy) * nGrowBy;
+      }
+      else
+      {
+        len2 = pOldBuffer->m_nLength;
+        len2 = len2 + -nGrowBy * len2 / 100;
+        if(len2 < len)
+        {
+          len2 = len;
+        }
+      }
+    }
+    if ( may_use_realloc && A::useRealloc() && !empty() )
+    {
+      Buffer* pNewBuffer = reinterpret_cast<Buffer*>( Mm::Realloc(
+        pOldBuffer, len2 * sizeof(T) + sizeof(Buffer), pOldBuffer->m_nAllocated * sizeof(T) + sizeof(Buffer) ) );
+      pNewBuffer->m_nAllocated = len2;
+      pNewBuffer->m_nLength = odmin(pNewBuffer->m_nLength, len);
+      m_pData = pNewBuffer->data();
+    }
+    else
+    {
+      Buffer* pNewBuffer = Buffer::allocate(len2, nGrowBy);
+      len = odmin(pOldBuffer->m_nLength, len);
+      A::constructn(pNewBuffer->data(), pOldBuffer->data(), len);
+      pNewBuffer->m_nLength = len;
+      m_pData = pNewBuffer->data();
+      pOldBuffer->release();
+    }
+  }
+  inline void assertValid(size_type index) const { if(!isValid(index)) { ODA_FAIL(); throw OdError_InvalidIndex(); } }
+  static inline void rise_error(OdResult e) { ODA_FAIL(); throw OdError(e); }
+public:
+  // STL-like interface
+
+  /** \details
+    Returns an iterator that references the first element in this Array object.
+  */
+  iterator begin() { if(!empty()) { copy_if_referenced(); return data(); } return 0; }
+  const_iterator begin() const { if(!empty()) { return data(); } return 0; }
+
+  /** \details
+    Returns an iterator that references the location after the last element in this Array object.
+  */
+  iterator end() { if(!empty()) { copy_if_referenced(); return data() + length(); } return 0; }
+  const_iterator end() const { if(!empty()) { return data()+length(); } return 0; }
+
+  /** \details
+    Inserts an element, number of elements, or range of elements, into this Array object.
+
+    \param before [in]  Position where first element is to be inserted.
+    \param first [in]  Position of first element to be inserted.
+    \param afterLast [in]  Position of first element after the last element to be inserted.
+
+    \remarks
+    The range of elements may be from another Array object.
+  */
+  void insert(
+    iterator before,
+    const_iterator first,
+    const_iterator afterLast)
+  {
+    size_type len = length();
+    size_type index = (size_type)(before - begin_const());
+    if(index <= len && afterLast>=first)
+    {
+      if(afterLast > first)
+      {
+        size_type num2copy = (size_type)(afterLast - first);
+        reallocator r( first < begin() || first >= end() );
+        r.reallocate(this, len + num2copy);
+        A::constructn(m_pData + len, first, num2copy);
+        buffer()->m_nLength = len + num2copy;
+        T* pDestination = m_pData + index;
+        if(index != len)
+        {
+          A::move(pDestination + num2copy, pDestination, len - index);
+        }
+        A::copy(pDestination, first, (size_type)(afterLast - first));
+      }
+    }
+    else
+    {
+      rise_error(eInvalidInput);
+    }
+  }
+  /** \details
+    Specifies the logical length for this Array object.
+    \param logicalLength [in]  Logical length.
+    \param value [in]  Value for the elements added to obtain the new logical length.
+  */
+  void resize(
+    size_type logicalLength,
+    const T& value )
+  {
+    size_type len = length();
+    int d = logicalLength - len;
+    if ( d > 0 )
+    {
+      reallocator r( m_pData > &value || &value > (m_pData + len) );
+      r.reallocate(this, logicalLength);
+      A::constructn(m_pData + len, d, value);
+    }
+    else if ( d < 0 )
+    {
+      d=-d;
+      if(!referenced())
+      {
+        A::destroy(m_pData + logicalLength, d);
+      }
+      else
+      {
+        copy_buffer(logicalLength);
+      }
+    }
+    buffer()->m_nLength = logicalLength;
+  }
+
+  void resize(
+    size_type logicalLength )
+  {
+    size_type len = length();
+    int d = logicalLength - len;
+    if ( d > 0 )
+    {
+      copy_before_write( len + d, true );
+      A::constructn(m_pData + len, d);
+    }
+    else if ( d < 0 )
+    {
+      d = -d;
+      if ( !referenced() )
+      {
+        A::destroy( m_pData + logicalLength, d );
+      }
+      else
+      {
+        copy_buffer(logicalLength);
+      }
+    }
+    buffer()->m_nLength = logicalLength;
+  }
+
+  /** \details
+    Returns the logical length of this Array object.
+  */
+  size_type size() const { return buffer()->m_nLength; }
+
+  /** \details
+    Returns true if and only if this Array is empty.
+  */
+  bool empty() const { return size() == 0; }
+
+  /** \details
+    Returns the physical length of this Array object.
+  */
+  size_type capacity() const { return buffer()->m_nAllocated; }
+
+  /** \details
+    Sets the physical length of this Array object to the specified
+    reserve length if the reserve length is greater than its physical length.
+
+    \param reserveLength [in]  Minimum physical length.
+  */
+  void reserve(
+    size_type reserveLength) { if(physicalLength() < reserveLength) { setPhysicalLength(reserveLength); } }
+
+  /** \details
+    Assigns the specified range of elements to this Array object.
+
+    \param first [in]  Position of first element to be assigned.
+    \param afterLast [in]  Position of first element after the last element to be assigned.
+
+    \remarks
+    After this Array object is cleared, this function assigns the specified range of elements from
+    another Array object.
+  */
+  void assign(
+    const_iterator first,
+    const_iterator afterLast)
+  { erase(begin_non_const(), end_non_const()); insert(begin_non_const(), first, afterLast); }
+
+  /** \details
+    Removes the specified element or range of elements from this Array object.
+
+    \param first [in]  Position of first element to be assigned.
+    \param afterLast [in]  Position of first element after the last element to be assigned.
+  */
+  iterator erase(
+    iterator first,
+    iterator afterLast)
+  {
+    size_type i = (size_type)(first - begin_const());
+    if(first != afterLast)
+    {
+      removeSubArray(i, (size_type)(afterLast-begin_const()-1));
+    }
+    return begin_non_const()+i;
+  }
+  /** \param where [in]  Element to remove.
+  */
+  iterator erase(
+    iterator where)
+  {
+    size_type i = where - begin_const();
+    removeAt(i);
+    return begin_non_const()+i;
+  }
+  /** \details
+    Removes all elements from this Array object.
+  */
+  void clear() { erase(begin_non_const(), end_non_const()); }
+
+  /** \details
+    Appends an element to the end of this Array object.
+  */
+  void push_back(
+    const T& value) { insertAt(length(), value); }
+
+  /** \param numElements [in]  Number of elements to insert.
+    \param value [in]  Value to insert.
+  */
+  iterator insert(
+    iterator before,
+    size_type numElements,
+    const T& value)
+  {
+    size_type len = length();
+    size_type index = before - begin_const();
+    reallocator r( m_pData > &value || &value > (m_pData + len) );
+    r.reallocate(this, len + numElements);
+    A::constructn(m_pData + len, numElements, value);
+    buffer()->m_nLength = len + numElements;
+    T* pData = data();
+    pData += index;
+    if(index != len)
+    {
+      A::move(pData + numElements, pData, len - index);
+    }
+    while(numElements--)
+    {
+      pData[numElements] = value;
+    }
+    return begin_non_const()+index;
+  }
+
+  iterator insert(
+    iterator before,
+    const T& value = T())
+  {
+    size_type index = before - begin_const();
+    insertAt(index, value);
+    return (begin_non_const() + index);
+  }
+
+  // ARX-like interface
+
+  /** \details
+    Returns true if and only if this Array object contains ths specified value.
+
+    \param value [in]  Value for which to search.
+    \param start [in]  Starting index of search.
+  */
+  bool contains(
+    const T& value,
+    size_type start = 0) const
+  { size_type dummy; return find(value, dummy, start); }
+
+
+  /** \details
+    Returns the number of elements in this Array object.
+  */
+  size_type length() const { return buffer()->m_nLength; }
+
+  /** \details
+    Returns true if and only if this Array is empty.
+  */
+  bool isEmpty() const { return length() == 0; }
+
+  /** \details
+    Returns the logical length of this Array object.
+  */
+  size_type logicalLength() const { return length(); }
+
+  /** \details
+    Returns the physical length of this Array object.
+  */
+  size_type physicalLength() const { return buffer()->m_nAllocated; }
+
+  /** \details
+    Returns the grow length of this Array object.
+  */
+  int growLength() const { return buffer()->m_nGrowBy; }
+
+  /** \details
+    Returns the data buffer of this Array object.
+  */
+  const T* asArrayPtr() const { return data(); }
+
+  /** \details
+    Returns the data buffer of this Array object.
+  */
+  const T* getPtr() const { return data(); }
+
+  T* asArrayPtr() { copy_if_referenced(); return data(); }
+
+  /** \remarks
+    For convenient access to the data.
+  */
+  const T& operator [](
+    size_type index) const { assertValid(index); return m_pData[index]; }
+  T& operator [](
+    size_type index) { assertValid(index); copy_if_referenced(); return m_pData[index]; }
+
+
+  /** \details
+    Returns the element of this Array object at the specified index.
+    \param arrayIndex [in]  Array index.
+  */
+  T& at(
+    size_type arrayIndex) { assertValid(arrayIndex); copy_if_referenced(); return *(data() + arrayIndex); }
+  const T& at(size_type arrayIndex) const { assertValid(arrayIndex); return *(data() + arrayIndex); }
+
+  /** \details
+    Sets the element of this Array object at the specified index.
+    \param arrayIndex [in]  Array index.
+    \param value [in]  Value.
+  */
+  OdArrayMemAlloc& setAt(
+    size_type arrayIndex,
+    const T& value)
+  { assertValid(arrayIndex); copy_if_referenced(); m_pData[arrayIndex] = value; return *this; }
+
+  /** \details
+    Returns the element of this Array object at the specified position.
+    \param arrayIndex [in]  Array index.
+  */
+  const T& getAt(
+    size_type arrayIndex) const { assertValid(arrayIndex); return *(data() + arrayIndex); }
+
+  /** \details
+    Returns the first element of this Array object.
+  */
+  T& first() { return *begin(); }
+  const T& first() const { return *begin(); }
+
+  /** \details
+    Returns the last element of this Array object.
+  */
+  T& last() { return at(length()-1); }
+  const T& last() const { return at(length()-1); }
+
+  size_type append(
+    const T& value) { insertAt(length(), value); return length()-1; }
+
+  iterator append() { size_type i = append(T()); return begin_non_const() + i; }
+
+  /** \details
+    Removes the first element in this Array object.
+  */
+  OdArrayMemAlloc& removeFirst() { return removeAt(0); }
+
+  /** \details
+    Removes the last element in this Array object.
+  */
+  OdArrayMemAlloc& removeLast() { return removeAt(length()-1); }
+
+  /** \details
+    Sets the grow length of this Array object.
+    \param growLength [in]  Grow length.
+  */
+  OdArrayMemAlloc& setGrowLength(
+    int growLength)
+  {
+    if(growLength != 0)
+    {
+      copy_if_referenced();
+      buffer()->m_nGrowBy = growLength;
+    }
+    else
+    {
+      ODA_FAIL();
+    }
+    return *this;
+  }
+
+  /** \param physicalLength [in]  Initial physical length.
+    \param growLength [in]  Initial grow length.
+  */
+  explicit OdArrayMemAlloc(
+    size_type physicalLength,
+    int growLength = 8) : m_pData(0)
+  {
+    if(growLength != 0)
+    {
+      m_pData = Buffer::allocate(physicalLength, growLength)->data();
+    }
+    else
+    {
+      ODA_FAIL();
+      *this = OdArrayMemAlloc<T,A>();
+    }
+  }
+
+  OdArrayMemAlloc() : m_pData(Buffer::_default()->data()) { buffer()->addref(); }
+
+  OdArrayMemAlloc(const OdArrayMemAlloc& source) : m_pData((T*)source.data()) { buffer()->addref(); }
+
+  ~OdArrayMemAlloc() { buffer()->release(); }
+
+  OdArrayMemAlloc& operator =(
+    const OdArrayMemAlloc& source)
+  {
+    source.buffer()->addref();
+    if (m_pData != 0)
+        buffer()->release();
+    m_pData = source.m_pData;
+    return *this;
+  }
+
+  bool operator ==(
+    const OdArrayMemAlloc& array) const
+  {
+    if(length() == array.length())
+    {
+      for(size_type i = 0; i < length(); i++)
+      {
+        if(at(i) != array[i])
+        {
+          return false;
+        }
+      }
+      return true;
+    }
+    return false;
+  }
+
+  /** \details
+    Sets all the elements in this Array object to the specified value.
+    \param value [in]  Value to assign.
+  */
+  OdArrayMemAlloc& setAll(
+    const T& value)
+  {
+    copy_if_referenced();
+    T* pData = data();
+    size_type n = length();
+    while(n)
+    {
+      pData[--n] = value;
+    }
+    return *this;
+  }
+  /** \details
+    Appends the specified value or Array object to the end of this Array object.
+
+    \param otherArray [in]  Array to append.
+    \param value [in]  Value to append.
+
+    \remarks
+    If called with otherArray, returns a reference to this Array object.
+
+    If called with value, returns the index of the new last element.
+
+    If called with no arguments, returns an interator (pointer) to the first element
+    after the last element in the array.
+  */
+  OdArrayMemAlloc& append(
+    const OdArrayMemAlloc& otherArray)
+  {
+    insert(end_non_const(), otherArray.begin(), otherArray.end());
+    return *this;
+  }
+
+  /** \details
+    Inserts the specified value into this Array object at the specified index.
+
+    \param arrayIndex [in]  Array index.
+    \param value [in]  Value to insert.
+
+    \remarks
+                0 <= arrayIndex <= length()
+
+    Elements starting at arrayIndex will have their indices incremented.
+
+    Returns a reference to this Array object.
+  */
+  OdArrayMemAlloc& insertAt(
+    size_type arrayIndex,
+    const T& value)
+  {
+    size_type len = length();
+    if( arrayIndex == len )
+    {
+      resize( len + 1, value );
+    }
+    else if ( arrayIndex < len )
+    {
+      reallocator r( m_pData > &value || &value > (m_pData + len) );
+      r.reallocate( this, len+1 );
+      A::construct( m_pData + len );
+      ++(buffer()->m_nLength);
+      A::move(m_pData + arrayIndex + 1, m_pData + arrayIndex, len - arrayIndex);
+      m_pData[arrayIndex] = value;
+    }
+    else
+    {
+      rise_error(eInvalidIndex);
+    }
+    return *this;
+  }
+
+  /** \details
+    Removes the element at the specified index from this Array object.
+
+    \param arrayIndex [in]  Array index.
+
+    \remarks
+                0 <= arrayIndex < length()
+
+    Elements starting at arrayIndex+1 will have their indices decremented.
+
+    Returns a reference to this Array object.
+  */
+  OdArrayMemAlloc& removeAt(
+    size_type arrayIndex)
+  {
+    assertValid(arrayIndex);
+    size_type len = length();
+    if(arrayIndex < --len)
+    {
+      copy_if_referenced();
+      T* pData = data();
+      A::move(pData + arrayIndex, pData + arrayIndex + 1, len - arrayIndex);
+    }
+    resize(len);
+    return *this;
+  }
+
+  /** \details
+    Removes the specified elements from this Array object.
+
+    \param startIndex [in]  Start index.
+    \param endIndex [in]   End index.
+
+    \remarks
+    Elements from startIndex through endIndex inclusive will be removed.
+
+    Returns a reference to this Array object.
+  */
+  OdArrayMemAlloc& removeSubArray(
+    size_type startIndex,
+    size_type endIndex)
+  {
+    if(!isValid(startIndex) || startIndex > endIndex)
+    {
+      rise_error(eInvalidIndex);
+    }
+    size_type len = length();
+    copy_if_referenced();
+    T* pData = data();
+    ++endIndex;
+    size_type n2remove = endIndex - startIndex;
+    A::move(pData + startIndex, pData + endIndex, len - endIndex);
+    A::destroy(pData + len - n2remove, n2remove);
+    buffer()->m_nLength -= n2remove;
+    return *this;
+  }
+
+  /** \details
+    Returns true if and only if this Array object contains ths specified value.
+
+    \param value [in]  Value for which to search.
+    \param findIndex [out]  Receives the index of the found value.
+    \param start [in]  Starting index of search.
+
+    \remarks
+    Returns the index at which the element was found.
+  */
+  bool find(
+    const T& value,
+    size_type& findIndex,
+    size_type start=0) const
+  {
+    if(!empty())
+    {
+      assertValid(start);
+      size_type len = length();
+      const T* pData = data();
+      for(size_type i = start; i<len; ++i)
+      {
+        if(pData[i] == value)
+        {
+          findIndex = i;
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  /** \details
+    Sets the logical length of this Array object.
+    \param logLength [in]  Logical length.
+    \remarks
+    The physical length is increased as required.
+  */
+  OdArrayMemAlloc& setLogicalLength(
+    size_type logLength)
+  {
+    resize(logLength);
+    return *this;
+  }
+
+  /** \details
+    Sets the physical length of this Array object.
+    \param physLength [in]  Physical length.
+    \remarks
+    The logical length is decreased as required.
+  */
+  OdArrayMemAlloc& setPhysicalLength(
+    size_type physLength)
+  {
+    if(physLength==0)
+    {
+      *this = OdArrayMemAlloc<T, A>();
+    }
+    else if(physLength != physicalLength())
+    {
+      copy_buffer(physLength,true,true);
+    }
+    return *this;
+  }
+
+  /** \details
+    Reverses the order of the elements in this Array object.
+  */
+  OdArrayMemAlloc& reverse()
+  {
+    if(!empty())
+    {
+      copy_if_referenced();
+      T tmp;
+      iterator iter1 = begin_non_const();
+      iterator iter2 = end_non_const();
+      --iter2;
+      while(iter1 < iter2)
+      {
+        tmp = *iter1;
+        *iter1 = *iter2;
+        *iter2 = tmp;
+        ++iter1;
+        --iter2;
+      }
+    }
+    return *this;
+  }
+
+
+  /** \details
+    Swaps the specified elements in this Array object.
+    \param firstIndex [in]  Index of first element.
+    \param secondIndex [in]  Index of second element.
+  */
+  OdArrayMemAlloc& swap(
+    size_type firstIndex,
+    size_type secondIndex)
+  {
+    if(!isValid(firstIndex) || !isValid(secondIndex))
+    {
+      rise_error(eInvalidIndex);
+    }
+    if(firstIndex != secondIndex)
+    {
+      const T tmp = at(firstIndex);
+      at(firstIndex) = at(secondIndex);
+      at(secondIndex) = tmp;
+    }
+    return *this;
+  }
+  /** \details
+    Removes the element with the specified value from this Array object.
+
+    \param value [in]  Value for which to search.
+    \param start [in]  Starting index of search.
+
+    \remarks
+    Removes the first occurance of value starting at start.
+
+    Returns true if and only if an element was removed.
+  */
+  bool remove(
+    const T& value,
+    size_type start = 0)
+  {
+    size_type i = 0;
+    if(find(value, i, start))
+    {
+      removeAt(i);
+      return true;
+    }
+    return false;
+  }
+private:
+
+  T*    m_pData;
+
+  bool isValid(size_type i) const { return (i < length()); }
+
+  T* data() { return (length() ? m_pData : 0); }
+
+  const T* data() const { return m_pData; }
+
+  Buffer* buffer() const
+  {
+    return (reinterpret_cast<Buffer*>(const_cast<OdArrayMemAlloc*>(this)->m_pData) - 1);
+  }
+  bool referenced() const
+  {
+    return (buffer()->m_nRefCounter>1);
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // ODARRAYMEMALLOC_H_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayPreDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayPreDef.h
new file mode 100755
index 0000000..7334e21
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdArrayPreDef.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODARRAYPREDEFD_H_INCLUDED
+#define ODARRAYPREDEFD_H_INCLUDED
+
+template <class T> class OdMemoryAllocator;
+template <class T> class OdObjectsAllocator;
+template <class T> class OdPlainObjectsAllocator;
+template <class T, class A = OdObjectsAllocator<T> > class OdArray;
+
+#endif // ODARRAYPREDEFD_H_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAuditInfo.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAuditInfo.h
new file mode 100755
index 0000000..0f1629d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdAuditInfo.h
@@ -0,0 +1,236 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_AUDITINFO_INCLUDED_
+#define _OD_AUDITINFO_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "DbRootExport.h"
+#include "OdString.h"
+#include "CmColor.h"
+#include "RxObject.h"
+
+class OdAuditInfoImpl;
+//class OdRxObject;
+
+/** \details
+  This class tracks audit information during a database audit.
+
+  \sa
+  TD_Db
+
+  <group OdDb_Classes>
+*/
+class DBROOT_EXPORT OdAuditInfo
+{
+public:
+
+  enum PrintDest
+  {
+    kSilent  = 0, // None.
+    kCmdLine = 1, // Command line.
+    kFile    = 2, // File.
+    kBoth    = 3  // Both command line and file.
+  };
+  struct MsgInfo
+  {
+    OdString strName;
+    OdString strValue;
+    OdString strValidation;
+    OdString strDefaultValue;
+    bool     bIsError;
+  };
+
+  OdAuditInfo();
+
+  virtual ~OdAuditInfo();
+
+  /** \details
+    Returns true if and only if errors are to be fixed during the
+    audit that uses this AuditInfo object.
+  */
+  bool fixErrors() const;
+
+  /** \details
+    Controls the fixing of errors are to be fixed during the
+    audit that uses this AuditInfo object.
+
+    \param fixErrors [in]  Fix errors.
+  */
+  void setFixErrors(
+    bool fixErrors);
+
+  /** \details
+    Returns the number of errors reported to this AuditInfo object.
+  */
+  int numErrors() const;
+
+  /** \details
+    Returns the number of errors reported as fixed to this AuditInfo object.
+  */
+  int numFixes() const;
+
+  /** \details
+    Increments the count of errors reported to this AuditInfo object.
+    \param increment [in]  Increment.
+  */
+  void errorsFound(
+    int count);
+
+  /** \details
+    Increments the count of errors reported as fixed to this AuditInfo object.
+    \param increment [in]  Increment.
+  */
+  void errorsFixed(
+    int count);
+
+  /** \details
+    Notification function called to print error information.
+    \remarks
+    Prints log information about an error detected or fixed during an audit.
+
+    \param name [in] Type of erroneous data found.
+    \param value [in] Value of the bad data.
+    \param validation [in] Reason the data were bad.
+    \param defaultValue [in] Default value to which the were set.
+
+    \note
+    As implemented, this functions does nothing.
+  */
+  virtual void printError(
+    const OdString& name,
+    const OdString& value,
+    const OdString& validation = OdString::kEmpty,
+    const OdString& defaultValue = OdString::kEmpty );
+
+  /** \param pObject [in]  Pointer to the object which generated the error.
+
+    \remarks
+    pObject->isA()->name() is used to generate the name.
+  */
+  virtual void printError(
+    const OdRxObject* pObject,
+    const OdString& value,
+    const OdString& validation = OdString::kEmpty,
+    const OdString& defaultValue = OdString::kEmpty);
+
+  /** \details
+    Notification function called to print log information.
+
+    \param logInfo [in]  Log information.
+  */
+  virtual void printInfo (
+    const OdString& logInfo);
+
+  /** \details
+    Allows fixed objects to specify a regen is required.
+  */
+  void requestRegen();
+
+  /** \details
+    Resets the number of errors reported to this AuditInfo object.
+  */
+  void resetNumEntities();
+
+  /** \details
+    Increments by one the number of errors reported as processed to this AuditInfo object.
+  */
+  void incNumEntities();
+
+  /** \details
+    Returns the number of entities reported as processed to this AuditInfo object.
+  */
+  int numEntities();
+
+  /** \details
+    Returns the last error information that is intended for printing.
+  */
+  virtual const MsgInfo& getLastInfo();
+
+  /** \details
+    Sets the last error information that is intended for printing.
+    \param lastInfo [in]  Last error information.
+  */
+  virtual void setLastInfo(
+    MsgInfo &lastInfo);
+
+  /*  If the current count of entities being maintained in the instance
+      of OdAuditInfo is a multiple of 100, and msg is not NULL,
+      then this function will print the string pointed to by msg
+      followed by the current entity count out to the audit log file.
+     void printNumEntities(const OdChar* msg);
+  */
+
+  /** \details
+    Sets the destination for log printing.
+    \param printDest [in]  Print destination.
+
+    \remarks
+    printDest must be one of the following:
+
+    <table>
+    Name        Value  Description
+    kSilent     0      None.
+    kCmdLine    1      Command line.
+    kFile       2      File.
+    kBoth       3      Both command line and file.
+    </table>
+  */
+  void setPrintDest(
+    PrintDest printDest);
+
+  /** \details
+    Returns the destination for log printing.
+
+    \remarks
+    getPrintDest() returns one of the following:
+
+    <table>
+    Name        Value  Description
+    kSilent     0      None.
+    kCmdLine    1      Command line.
+    kFile       2      File.
+    kBoth       3      Both command line and file.
+    </table>
+  */
+  PrintDest  getPrintDest();
+
+private:
+  OdAuditInfoImpl* m_pImpl;
+};
+
+/** \details
+    This registration allows you to catch the invoking of each audit info destructor.
+*/
+typedef void (*ODAUDITINFO_CALLBACK)(const OdAuditInfo*);
+DBROOT_EXPORT void odrxRegisterAuditInfoDestructorCallback(const ODAUDITINFO_CALLBACK callbackFunc);
+DBROOT_EXPORT void odrxUnregisterAuditInfoDestructorCallback();
+
+#include "TD_PackPop.h"
+
+#endif // _OD_AUDITINFO_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdBinaryData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdBinaryData.h
new file mode 100755
index 0000000..5596ccb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdBinaryData.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODBINARYDATA_INCLUDED_
+#define _ODBINARYDATA_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdArray.h"
+
+class OdDbDwgFiler;
+
+/** \details
+    This class is a specialization of the OdArray class for OdUInt8 (byte) objects.
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class OdBinaryData : public OdArray<OdUInt8, OdMemoryAllocator<OdUInt8> >
+{
+};
+
+
+/** \details
+    This Class is a specialization of the OdBinaryData class for BitBinary data.
+
+    <group Other_Classes>
+*/
+class OdBitBinaryData : public OdBinaryData
+{
+  OdUInt32 m_nBitSize;
+public:
+  OdBitBinaryData() : m_nBitSize(0) {}
+
+  /** \details
+    Returns the size in bits of this BitBinaryData object.
+  */
+  OdUInt32 getBitSize() const { return m_nBitSize; }
+
+  /** \details
+    Resizes this BitBinaryData object to the specified number of bits.
+    
+    \param bitSize [in]  Bit size.
+  */
+  void setBitSize(OdUInt32 value) { m_nBitSize = value; resize((m_nBitSize+7)/8); }
+
+  /** \details
+    Sets the size in bits of this BitBinaryData object to be 8 * its current size in bytes.
+    
+    \param bitSize [in]  Bit size.
+  */
+  void updateBitSize() {setBitSize( size() * 8 );}
+};
+
+#include "TD_PackPop.h"
+
+#endif //_ODBINARYDATA_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharConverter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharConverter.h
new file mode 100755
index 0000000..786b916
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharConverter.h
@@ -0,0 +1,229 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __ODCHARCONVERTER_H__
+#define __ODCHARCONVERTER_H__
+
+#include "OdaCommon.h"
+#include "OdCharMapper.h"
+#include "OdArray.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdCharConverter
+{
+  template <class CharType> inline bool isDigit(CharType ch)
+  {
+    return (ch >= '0' && ch <= '9');
+  }
+
+  template <class CharType> inline bool isHexDigit(CharType ch)
+  {
+    return (ch >= '0' && ch <= '9') ||
+          (ch >= 'a' && ch <= 'f') ||
+          (ch >= 'A' && ch <= 'F');
+  }
+
+  template <class CharType> inline bool checkDigits(const CharType* ptr, int numDigits, bool hex = true)
+  {
+    for (int i = 0; i < numDigits; i++)
+    {
+      if ( !(hex ? isHexDigit(ptr[i]) : isDigit(ptr[i])) )
+      {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  template <class CharType> inline char isCIForMIF(const CharType* ptr)
+  {
+    if (*ptr == '\\')
+    {
+      CharType ch2 = *++ptr;
+      if (*ptr++ == '+')
+      {
+        if ((ch2 == 'U' || ch2 == 'u') && checkDigits(ptr, 4))
+          return 'u';
+        
+        if ((ch2 == 'M' || ch2 == 'm') && (*ptr >= '1' && *ptr <= '5') && checkDigits(++ptr, 4))
+          return 'm';
+      }
+    }
+    return '\0';
+  }
+
+  template <class CharType> inline bool isCIF(const CharType* ptr)
+  {
+    if ( !ptr )
+      return false;
+    return (ptr[0] == '\\' && ( ptr[1] == 'U' || ptr[1] == 'u' ) && ptr[2] == '+' && 
+      checkDigits(&ptr[3], 4) );
+  }
+
+  template <class CharType> inline bool isMIF(const CharType* ptr)
+  {
+    if ( !ptr )
+      return false;
+    return (ptr[0] == '\\' && ( ptr[1] == 'M' || ptr[1] == 'm' ) && ptr[2] == '+' && 
+      checkDigits(&ptr[4], 4) && ptr[3] >= '1' && ptr[3] <= '5');
+  }
+
+  template <class CharType> inline unsigned int hexValue(const CharType c)
+  {
+    if (c >= '0' && c <= '9') return(c - '0');
+    if (c >= 'A' && c <= 'F') return(c - 'A' + 10);
+    if (c >= 'a' && c <= 'f') return(c - 'a' + 10);
+    return(0);
+  }
+
+  inline int getMIFIndex(OdCodePageId id )
+  {
+    switch(id)
+    {
+      case CP_ANSI_932:
+      case CP_DOS932:      return '1';
+      case CP_ANSI_950:    
+      case CP_BIG5:        return '2';
+      case CP_ANSI_949:    
+      case CP_KSC5601:     return '3';
+      case CP_ANSI_1361:   
+      case CP_JOHAB:       return '4';
+      case CP_ANSI_936:    
+      case CP_GB2312:      return '5';
+      default:             return '0';
+    }
+  }
+
+  template <class CharType> inline int getMIFString(OdChar val, OdCodePageId cp, CharType* dstBuf, int size)
+  {
+    if ( size < 8 )
+      return 0;  
+    dstBuf[0] = '\\';
+    dstBuf[1] = 'M';
+    dstBuf[2] = '+';
+    dstBuf[3] = (CharType)getMIFIndex(cp);
+    for( int i = 0; i < 4; i++ )
+    {
+      CharType byteVal = (CharType)(val & 0x0f);
+      dstBuf[7 - i] = CharType((byteVal <= 9) ? ('0' + byteVal) : ('A' - 10 + byteVal));
+      val >>= 4;
+    }
+    return 8;
+  }
+
+  template <class CharType> inline int getCIFString(OdUInt16 val, CharType* dstBuf, int size)
+  {
+    if ( size < 7 )
+      return 0;  
+    dstBuf[0] = '\\';
+    dstBuf[1] = 'U';
+    dstBuf[2] = '+';
+    for( int i = 0; i < 4; i++ )
+    {
+      CharType byteVal = (CharType)(val & 0x0f);
+      dstBuf[6 - i] = CharType((byteVal <= 9) ? ('0' + byteVal) : ('A' - 10 + byteVal));
+      val >>= 4;
+    }
+    return 7;
+  }
+
+  template <class CharType> inline OdCodePageId getMIFCodepage(CharType cp)
+  {
+    switch(cp)
+    {
+      case '1':    return CP_ANSI_932;
+      case '2':    return CP_ANSI_950;
+      case '3':    return CP_ANSI_949;
+      case '4':    return CP_ANSI_1361;
+      case '5':    return CP_ANSI_936;
+      default:     return CP_UNDEFINED;
+    }
+  }
+
+  template <class CharType> inline  bool parseMIFString(CharType* srcBuf, OdChar& val, OdCodePageId& cp)
+  {
+    if ( !isMIF<CharType>(srcBuf) )
+      return false;
+
+    cp = getMIFCodepage(srcBuf[3]);
+    val = OdChar(
+        (hexValue(srcBuf[4]) << 12)
+      + (hexValue(srcBuf[5]) << 8)
+      + (hexValue(srcBuf[6]) << 4)
+      + hexValue(srcBuf[7]));
+    return true;
+  }
+
+  template <class CharType> inline bool parseCIFString(CharType* srcBuf, OdChar& val)
+  {
+    if ( !isCIF<CharType>(srcBuf) )
+      return false;
+
+    val = OdChar(
+        (hexValue(srcBuf[3]) << 12)
+      + (hexValue(srcBuf[4]) << 8)
+      + (hexValue(srcBuf[5]) << 4)
+      + hexValue(srcBuf[6]));
+    return true;
+  }
+
+  inline bool isMBCBCodepage(OdCodePageId id)
+  {
+    return id == CP_ANSI_932 ||
+      id == CP_ANSI_936 ||
+      id == CP_ANSI_949 ||
+      id == CP_ANSI_950 ||
+      id == CP_ANSI_1361 ||
+      id == CP_BIG5 ||
+      id == CP_JOHAB ||
+      id == CP_GB2312 ||
+      id == CP_KSC5601 ||
+      id == CP_DOS932;
+  }
+
+  inline bool isMIFCodepage(OdCodePageId id)
+  {
+    return isMBCBCodepage(id);
+  }
+
+
+  inline OdCodePageId checkTheSameCP(OdCodePageId cp)
+  {
+    switch (cp)
+    {
+      case CP_DOS932:  return CP_ANSI_932;
+      case CP_BIG5:    return CP_ANSI_950;
+      case CP_KSC5601: return CP_ANSI_949;
+      case CP_GB2312:  return CP_ANSI_936;
+      case CP_JOHAB:   return CP_ANSI_1361;
+      default:break;
+    }
+    return cp;
+  }
+}
+
+#endif // __ODCHARCONVERTER_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharMapper.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharMapper.h
new file mode 100755
index 0000000..892c4a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCharMapper.h
@@ -0,0 +1,311 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_CHARMAPPER_H_
+#define _OD_CHARMAPPER_H_
+
+#include "TD_PackPush.h"
+
+#include "OdCodePage.h"
+#include "OdError.h"
+#include "OdArray.h"
+
+class OdStreamBuf;
+class OdString;
+typedef OdArray <char, OdMemoryAllocator<char> > OdAnsiCharArray;
+typedef OdArray<OdChar, OdMemoryAllocator<OdChar> > OdCharArray;
+
+
+/** \details
+    This class implements character mapping.
+    Library: TD_Root
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdCharMapper
+{
+  static OdString m_MapFile;
+private:
+	OdCharMapper();
+public:
+//	static OdResult initialize(OdStreamBuf* pIo);
+
+  /** \details
+    Initializes this CharMapper object from the specified mapping file.
+    \param filename [in]  File name.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult initialize(const OdString& filename);
+
+  /** \details
+    Maps the specified Unicode character to the specified code page.
+    \param sourceChar [in]  Unicode source character.
+    \param codepageId [in]  Object ID of the code page.
+    \param codepageChar [out]  Receives the code page character.
+    \param bTryToUseSystemCP [in]   Try to use default ANSI code page and OEM  code page in case conversion with codepageId is not OK
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult unicodeToCodepage(OdChar sourceChar,
+    OdCodePageId codepageId,
+    OdChar& codepageChar,
+    bool bTryToUseSystemCP = true );
+
+  /** \details
+  Maps the specified Unicode character to the specified code page using IMLangFontLink2 interface.
+  \param sourceChar [in]  Unicode source character.
+  \param codepageId [in]  Object ID of the code page.
+  \param codepageChar [out]  Receives the code page character.
+  \remarks
+  Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult unicodeToCodepage2(OdChar sourceChar,
+    OdCodePageId codepageId,
+    OdChar& codepageChar);
+
+  /** \details
+    Maps the specified code page character to Unicode.
+    \param sourceChar [in]  Code page source character.
+    \param codepageId [in]  Object ID of the code page.
+    \param unicodeChar [out]  Receives the Unicode character.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult codepageToUnicode(OdChar sourceChar,
+    OdCodePageId codepageId,
+    OdChar& unicodeChar);
+
+  /** \details
+    Returns true if and only if the specified byte is one of the leading bytes of the specified code page.
+    \param testByte [in]  Byte to test.
+    \param codepageId [in]  Object ID of the code page.
+  */
+  static bool isLeadByte(OdUInt8 testByte, OdCodePageId codepageId);
+
+  /** \details
+    Returns the code page with the specified description.
+    \param description [in]  Description.  
+    \param codepageId [out]  Receives the object ID of the code page.  
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult codepageDescToId(const OdString& description, OdCodePageId& codepageId);
+
+  /** \details
+    Returns the description for the specified code page.
+    \param description [out]  Receives the description.  
+    \param codepageId [in]  Object ID of the code page.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult codepageIdToDesc(OdCodePageId codepageId, OdString& description);
+
+  /** \details
+    Returns the number of valid code pages for this CharMapper object.
+  */
+  static OdUInt32 numValidCodepages();
+
+  /** \details
+    Returns the code page corresponding to the specified ANSI code page.
+    \param ansiCodePage [in]  ANSI code page.
+  */
+  static OdCodePageId ansiCpToAcadCp(OdUInt32 ansiCodePage);
+
+  /** \details
+    Returns the ANSI code page corresponding to the specified code page.
+    \param acadCodePageId [in]  code page.
+  */
+  static OdUInt32 acadCpToAnsiCp(OdCodePageId acadCodePageId);
+
+  /** \details
+    Returns the code page corresponding to the specified ANSI character set.
+    \param ansiCharacterSet [in]  Character Set.
+  */
+   static OdCodePageId getCodepageByCharset(OdUInt16 ansiCharacterSet);
+
+   static OdUInt16 getReorderCharsetByChar(OdChar ch);
+
+   /** \details
+   Returns true if and only if the specified code page supports conversion.
+   \param codepageId [in]  Object ID of the code page.
+   */
+   static bool isConversionSupported(OdCodePageId codepageId);
+
+   static void wideCharToMultiByte(OdCodePageId codePage, const OdChar* srcBuf, int srcSize, OdAnsiCharArray& dstBuf);
+   // Returns number of characters (! not dstBuf length)
+   static void multiByteToWideChar(OdCodePageId codePage, const char* srcBuf, int srcSize, OdCharArray& dstBuf);
+
+   // This is actually CESU-8 encoding used in DXF (http://www.unicode.org/reports/tr26/)
+   static void utf8ToUnicode(const char* srcBuf, int srcSize, OdCharArray& dstBuf);
+   static void unicodeToUtf8(const OdChar* srcBuf, int srcSize, OdAnsiCharArray& dstBuf);
+
+   /** \details
+     Adds the bigFont to map.
+     \param bigFont [in]  big font file name.  
+     \param cpIndex [in]  code page index.
+     
+     \remarks
+     cpIndex must be one of the following:
+     
+     <table>
+     Value    Description
+     1        CP_ANSI_932
+     2        CP_ANSI_950
+     3        CP_ANSI_949
+     5        CP_ANSI_936
+     </table>
+
+     Returns eOk if successful, or an appropriate error code if not.
+   */
+   static OdResult addBigFontWithIndex(const OdString& bigFont, OdInt32 cpIndex);
+
+   /** \details
+     Adds the bigFont to map.
+     \param bigFont [in]  big font file name.  
+     \param codePageId [in]  CodePage ID.
+
+     \remarks
+     codePageId must be one of the following:
+     
+     @untitled table
+     CP_ANSI_932
+     CP_ANSI_950
+     CP_ANSI_949
+     CP_ANSI_936
+
+     Returns eOk if successful, or an appropriate error code if not.
+   */
+   static OdResult addBigFontWithCodepage(const OdString& bigFont, OdCodePageId codePageId);
+
+   /** \details
+     Adds the bigfont list from io stream to map.
+     \param io [in]  stream with next format.
+
+     Anything after a '#' character is a comment (and ignored)
+     The ';' character is used to separate the file name from the code page index
+  
+     <BIGFONTFILENAME.SHX>;<CODE PAGE INDEX>
+   
+     There should be no leading or trailing spaces for the filename
+    
+     JAPANESE_CODEPAGE_INDEX = 1,
+     TRADITIONAL_CHINESE_CODEPAGE_INDEX = 2,
+     KOREAN_CODEPAGE_INDEX = 3,
+     KOREAN_JOHAB_CODEPAGE_INDEX = 4,
+     SIMPLIFIED_CHINESE_CODEPAGE_INDEX = 5
+    
+     Returns eOk if successful, or an appropriate error code if not.
+   */
+   static OdResult addBigFonts(OdStreamBuf* io);
+
+   /** \details
+     Returns the OdCodePageId.
+     \remarks
+     getCpByBigFont returns one of the following:
+     
+     @untitled table
+     CP_ANSI_932
+     CP_ANSI_950
+     CP_ANSI_949
+     CP_ANSI_936
+     \param bigFont [in]  big font file name.  
+   */
+
+   static OdCodePageId getCpByBigFont(const OdString& bigFont);
+   /** \details
+     Returns the code page index.
+     \remarks
+     getCpIndexByBigFont returns one of the following:
+     
+     <table>
+     Value     Description
+     1         CP_ANSI_932
+     2         CP_ANSI_950
+     3         CP_ANSI_949
+     5         CP_ANSI_936
+     \param bigFont [in]  big font file name.  
+     </table>
+   */
+   static OdInt32 getCpIndexByBigFont(const OdString& bigFont);
+
+   /** \details
+     Returns the check sum for an ANSI string.
+     \param str [in]  String for calculating check sum.  
+   */
+   static double getCheckSumAnsi(OdAnsiString str);
+
+   /** \details
+     Returns the check sum for a unicode string.
+     \param str [in]  String for calculating check sum.  
+   */
+   static double getCheckSumUnicode(OdString str);
+
+   static OdString convertCIFcoding(const OdString& strText);
+};
+
+// Surrogate pairs support
+template<class T> inline bool odIsLeadSurrogate(T chr) {
+  return (chr >= 0xD800 && chr <= 0xDFFF);
+}
+template<class T> inline bool odIsTailSurrogate(T chr) {
+  return (chr >= 0xDC00 && chr <= 0xDFFF);
+}
+template<class T1, class T2> inline T1 odToCodepoint(T1 chr, T2 chr2) {
+  return (chr << 10) + chr2 + (0x10000 - (0xD800 << 10) - 0xDC00);
+}
+template<class T> inline OdUInt32 odToCodeValue(T chr, T chr2) {
+  return ((OdUInt32)chr << 10) + chr2 + (0x10000 - (0xD800 << 10) - 0xDC00);
+}
+template<class T> inline bool odIsCodepoint(T chr) {
+  return (chr >= 0x10000 && chr <= 0x10FFFF);
+}
+template<class T> inline T odToLeadSurrogate(T chr) {
+  return ((0xD800 - (0x10000 >> 10)) + (chr >> 10));
+}
+template<class T> inline T odToTailSurrogate(T chr) {
+  return (0xDC00 + (chr & 0x3FF));
+}
+
+enum OdAsianCpIndex
+{
+  JAPANESE_CP_INDEX = 1,              // 932
+  TRADITIONAL_CHINESE_CP_INDEX = 2,   // 950
+  KOREAN_WANSUNG_CP_INDEX = 3,        // 949
+  KOREAN_JOHAB_CP_INDEX = 4,          // 1361
+  SIMPLIFIED_CHINESE_CP_INDEX = 5     // 936
+};
+
+/** \details
+  Returns the specified text converted from one code page to another.
+  \param source [in]  Source text.
+  \param sourceId [in]  Object ID of source code page.
+  \param destId [in]  Object ID of destination code page.
+*/
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCodePage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCodePage.h
new file mode 100755
index 0000000..98bce33
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdCodePage.h
@@ -0,0 +1,82 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODCODE_PAGE_INCLUDED_
+#define _ODCODE_PAGE_INCLUDED_
+
+typedef enum 
+{
+  CP_UNDEFINED = 0,   // undefined
+  CP_ASCII     = 1,   // ascii
+  CP_8859_1    = 2,   // iso8859-1
+  CP_8859_2    = 3,   // iso8859-2
+  CP_8859_3    = 4,   // iso8859-3   
+  CP_8859_4    = 5,   // iso8859-4   
+  CP_8859_5    = 6,   // iso8859-5
+  CP_8859_6    = 7,   // iso8859-6
+  CP_8859_7    = 8,   // iso8859-7
+  CP_8859_8    = 9,   // iso8859-8
+  CP_8859_9    = 10,  // iso8859-9
+  CP_DOS437    = 11,  // dos437 
+  CP_DOS850    = 12,  // dos850 
+  CP_DOS852    = 13,  // dos852 
+  CP_DOS855    = 14,  // dos855 
+  CP_DOS857    = 15,  // dos857 
+  CP_DOS860    = 16,  // dos860 
+  CP_DOS861    = 17,  // dos861 
+  CP_DOS863    = 18,  // dos863 
+  CP_DOS864    = 19,  // dos864 
+  CP_DOS865    = 20,  // dos865 
+  CP_DOS869    = 21,  // dos869 
+  CP_DOS932    = 22,  // dos932 
+  CP_MACINTOSH = 23,  // mac-roman
+  CP_BIG5      = 24,  // big5
+  CP_KSC5601   = 25,  // ksc5601   
+  CP_JOHAB     = 26,  // johab     
+  CP_DOS866    = 27,  // dos866    
+  CP_ANSI_1250 = 28,  // ansi 1250 
+  CP_ANSI_1251 = 29,  // ansi 1251 
+  CP_ANSI_1252 = 30,  // ansi 1252 
+  CP_GB2312    = 31,  // gb2312    
+  CP_ANSI_1253 = 32,  // ansi 1253 
+  CP_ANSI_1254 = 33,  // ansi 1254 
+  CP_ANSI_1255 = 34,  // ansi 1255 
+  CP_ANSI_1256 = 35,  // ansi 1256 
+  CP_ANSI_1257 = 36,  // ansi 1257 
+  CP_ANSI_874  = 37,  // ansi 874  
+  CP_ANSI_932  = 38,  // ansi 932  
+  CP_ANSI_936  = 39,  // ansi 936  
+  CP_ANSI_949  = 40,  // ansi 949  
+  CP_ANSI_950  = 41,  // ansi 950  
+  CP_ANSI_1361 = 42,  // ansi 1361 
+  CP_ANSI_1200 = 43,  // ansi 1200 
+  CP_ANSI_1258 = 44,  // ansi 1258 
+  CP_CNT       = 45   // Current ( returned by OdRxSystemServices::systemCodePage() )
+} OdCodePageId;
+
+
+#endif // _ODCODE_PAGE_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDToStr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDToStr.h
new file mode 100755
index 0000000..f2fa7ce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDToStr.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_DTOSTR_
+#define _OD_DTOSTR_
+
+//DD:EXPORT_ON
+
+#include "OdString.h"
+#include "OdAnsiString.h"
+
+FIRSTDLL_EXPORT void odDToStr(char* dst, double val, char fmt, int prec, int cropzeros = 0);
+FIRSTDLL_EXPORT OdString odDToStr(double val, char fmt, int prec, int cropzeros = 0);
+FIRSTDLL_EXPORT double odStrToD(const OdChar* p, OdChar** ppend = 0);
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+FIRSTDLL_EXPORT inline double odStrToD(const __wchar_t* p, __wchar_t** ppend = 0)
+{
+  return odStrToD(reinterpret_cast<const OdChar*>(p), reinterpret_cast<OdChar**>(ppend));
+}
+#endif
+FIRSTDLL_EXPORT double odStrToD(const char* p, char** ppend = 0);
+FIRSTDLL_EXPORT double odStrToD(const OdString&);
+FIRSTDLL_EXPORT double odStrToD(const OdAnsiString&);
+
+//DD:EXPORT_OFF
+
+#endif // _OD_DTOSTR_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystem.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystem.h
new file mode 100755
index 0000000..1288040
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystem.h
@@ -0,0 +1,572 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_GEOCOORDINATESYSTEM_
+#define _OD_DB_GEOCOORDINATESYSTEM_
+
+#include "TD_PackPush.h"
+#include "Ge/GeExtents2d.h"
+#include "DbDatabase.h"
+#include "Ge/GePoint3d.h"
+
+class OdDbGeoCoordinateSystemCategory;
+class OdDbGeoCoordinateSystem;
+class OdDbGeoCoordinateSystemTransformer;
+typedef OdSmartPtr<OdDbGeoCoordinateSystemCategory> OdDbGeoCoordinateSystemCategoryPtr;
+typedef OdSmartPtr<OdDbGeoCoordinateSystem> OdDbGeoCoordinateSystemPtr;
+typedef OdSmartPtr<OdDbGeoCoordinateSystemTransformer> OdDbGeoCoordinateSystemTransformerPtr;
+
+struct OdDbGeoDatum
+{
+  OdString id;
+  OdString desc;
+};
+
+struct OdDbGeoEllipsoid
+{
+  OdString id;
+  OdString desc;
+  double   polarRadius; 
+  double   eccentricity;
+};
+
+struct OdDbGeoProjectionParameter
+{
+  OdString name;
+  double   value;
+};
+/** \details
+  This abstract class represents a category which holds string identifiers referring to 
+  a group of coordinate reference systems.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeoCoordinateSystemCategory : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemCategory);
+  
+  /** \details
+    Default constructor.
+  */
+  OdDbGeoCoordinateSystemCategory();
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdDbGeoCoordinateSystemCategory();
+
+  /** \details
+    Returns the category's ID.
+    
+    \param categoryId [in/out] Category ID.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getId(OdString& categoryId) const = 0;
+  
+  /** \details
+    Returns the number of coordinate systems that belong to this category.
+    
+    \param num [in/out] Number of coordinate systems.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getNumOfCoordinateSystem(int& num) const = 0;
+  
+  /** \details
+    Returns the coordinate system at the specified index.
+    
+    \param index [in] Index.
+    \param pCoordSys [in/out] Pointer to an OdDbGeoCoordinateSystem object.
+        
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getCoordinateSystemAt(int index, OdDbGeoCoordinateSystemPtr& pCoordSys) const = 0;
+  
+  /** \details
+    Creates and returns all coordinate system categories.
+    
+    \param allCategories [in/out] Array of pointers to returned categories.
+        
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  static  OdResult createAll(OdArray<OdDbGeoCoordinateSystemCategoryPtr>& allCategories);
+};
+
+/** \details
+  This abstract class represents a coordinate reference system (CRS) definition.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeoCoordinateSystem : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystem);
+
+  /** \details
+    This enumeration indicates the type of a coordinate reference system.
+  */
+  enum Type
+  {
+    kTypeUnknown = 0,     // The coordinate system is not set.
+    kTypeArbitrary = 1,   // The coordinate system is arbitrary.
+    kTypeGeographic = 2,  // The coordinate system is geographic.
+    kTypeProjected = 3    // The coordinate system is projected.
+  };
+
+  /** \details
+    This enumeration represents the coordinate reference system projection method types.
+  */
+  enum ProjectionCode
+  {
+    kProjectionCodeUnknown     = 0,     // Unknown projection code.
+    kProjectionCodeAlber       = 4,     // Albers equal-area conic projection.
+    kProjectionCodeAzede       = 59,    // Azimuthal equidistant projection (elevated ellipsoid).
+    kProjectionCodeAzmea       = 11,    // Lambert azimuthal equal-area projection.
+    kProjectionCodeAzmed       = 7,     // Lambert azimuthal equidistant projection.
+    kProjectionCodeBipolar     = 31,    // Bipolar oblique conformal conic projection.
+    kProjectionCodeBonne       = 24,    // Bonne Pseudo Conical projection.
+    kProjectionCodeCassini     = 22,    // Cassini projection.
+    kProjectionCodeEckert4     = 25,    // Eckert pseudocylindrical projection (number IV).
+    kProjectionCodeEckert6     = 26,    // Eckert pseudocylindrical projection (number VI).
+    kProjectionCodeEdcnc       = 12,    // Equidistant conic projection (conic projection).
+    kProjectionCodeEdcyl       = 20,    // Equidistant cylindrical projection (spherical only).
+    kProjectionCodeGaussK      = 46,    // Gauss-Kruger: Transverse Mercator projection without scale reduction parameter.
+    kProjectionCodeGnomonic    = 19,    // Gnomonic projection.
+    kProjectionCodeGoode       = 28,    // Goode homolosine projection.
+    kProjectionCodeHom1uv      = 1281,  // Unrectified Hotine Oblique Mercator Projection. Single point form.
+    kProjectionCodeHom1xy      = 1282,  // Rectified Hotine Oblique Mercator Projection. Single poin form.
+    kProjectionCodeHom2uv      = 1283,  // Unrectified Hotine Oblique Mercator Projection. Two point form.
+    kProjectionCodeHom2xy      = 1284,  // Rectified Hotine Oblique Mercator Projection. Two point form.
+    kProjectionCodeKrovak      = 47,    // Original Krovak projection. 
+    kProjectionCodeKrvk95      = 51,    // Krovak projection includes 1995 adjustment.
+    kProjectionCodeLL          = 1,     // Produces (processes) latitude and longitude.  
+    kProjectionCodeLm1sp       = 36,    // Single standard parallel variation of the Lambert Conformal Conic projection.
+    kProjectionCodeLm2sp       = 37,    // Double standard parallel variation of the Lambert Conformal Conic projection.
+    kProjectionCodeLmblg       = 38,    // Belgian variation of the Lambert Conformal Conic projection.
+    kProjectionCodeLmtan       = 8,     // Lambert Tangential Conformal Conic projection.
+    kProjectionCodeMiller      = 13,    // Miller cylindrical projection.
+    kProjectionCodeMndotl      = 41,    // Minnesota DOT variation of the Lambert Conformal Conic projection. 
+    kProjectionCodeMndott      = 42,    // Minnesota DOT variation of the Transverse Mercator projection.
+    kProjectionCodeModpc       = 10,    // Lallemand IMW Modified Polyconic projection.
+    kProjectionCodeMollweid    = 27,    // Mollweide projection.
+    kProjectionCodeMrcat       = 6,     // Mercator Cylindrical projection. 
+    kProjectionCodeMrcatK      = 49,    // Standard Mercator projection with a scale reduction factor instead of a standard parallel.
+    kProjectionCodeMstero      = 15,    // Modified Stereographic projection.
+    kProjectionCodeNeacyl      = 29,    // Normal aspect. Equal-area Cylindrical projection.
+    kProjectionCodeNerth       = 55,    // Non-Earth projection.  
+    kProjectionCodeNzealand    = 16,    // New Zealand National Grid.
+    kProjectionCodeOblqM       = 5,     // Oblique Mercator projection.
+    kProjectionCodeObqcyl      = 56,    // Oblique Cylindrical projection. 
+    kProjectionCodeOrtho       = 18,    // Orthographic projection.
+    kProjectionCodeOstn02      = 60,    // Transverse Mercator projection with the OSTN02 grid shift tacked on.
+    kProjectionCodeOstn97      = 58,    // Transverse Mercator projection with the OSTN97 grid shift tacked on.
+    kProjectionCodeOstro       = 34,    // Oblique Stereographic projection.
+    kProjectionCodePlycn       = 9,     // Hassler American Polyconic projection.
+    kProjectionCodePstro       = 33,    // Polar Stereographic projection.
+    kProjectionCodePstrosl     = 53,    // Polar Stereographic projection with standard latitude.
+    kProjectionCodeRskew       = 1285,  // Hotine Oblique Mercator (variant B) projection.
+    kProjectionCodeRskewc      = 1286,  // Rectified Skew Orthomorphic projection, false origin and azimuth at center.
+    kProjectionCodeRskewo      = 1287,  // Rectified Skew Orthomorphic projection.
+    kProjectionCodeRobinson    = 23,    // Robinson Cylindrical projection.
+    kProjectionCodeSinus       = 17,    // Sinusoidal projection.
+    kProjectionCodeSotrm       = 43,    // Transverse Mercator south oriented projection.
+    kProjectionCodeSstro       = 35,    // Synder's Oblique Stereographic projection.
+    kProjectionCodeSwiss       = 32,    // Swiss projection.
+    kProjectionCodeSys34       = 57,    // Combination of Transverse Mercator projection and a polynomial expansion used in Denmark.
+    kProjectionCodeSys34_99    = 61,    // Combination of Transverse Mercator projection and a polynomial expansion used in Denmark. Polynomials are of the 1999 vintage.
+    kProjectionCodeTeacyl      = 30,    // Transverse aspect. Equal-area Cylindrical projection.
+    kProjectionCodeTm          = 3,     // Gauss-Kruger or Transverse Mercator Projection.
+    kProjectionCodeTrmeraf     = 54,    // Transverse Mercator projection with affine post-processor.  
+    kProjectionCodeTrmrkrg     = 62,    // Transverse Mercator projection using Kruger formulation.  
+    kProjectionCodeTrmrs       = 45,    // Transverse Mercator projection per J. P. Snyder.
+    kProjectionCodeVdgrntn     = 21,    // Van der Grinten projection.
+    kProjectionCodeWccsl       = 39,    // Wisconsin County Coordinate System variation; Lambert Conformal Conic projection.
+    kProjectionCodeWccst       = 40,    // Wisconsin County Coordinate System variation; Transverse Mercator projection.
+    kProjectionCodeUtm         = 44,    // The UTM direct variation of the Transverse Mercator projection.
+    kProjectionCodeWinkl       = 63,    // Winkel Tripel projection.
+    kProjectionCodeNrthsrt     = 64,    // North with scale and rotation projection. 
+    kProjectionCodeLmbrtaf     = 65,    // Lambert Conformal Conic projection with affine post-processor.
+    kProjectionCodeSys34_01    = 66,    // Combination of Transverse Mercator projection and polynomial expansion used in Denmark.
+    kProjectionCodeEdcylE      = 67,    // Equidistant Cylindrical projection, Ellipsoidal or Spherical.
+    kProjectionCodePlateCarree = 68,    // Plate Carré projection.
+    kProjectionCodePvMercator  = 69,    // Popular Visualisation Pseudo Mercator projection (Google Earth).
+    kProjectionCodeLmMich      = 70,    // Lambert Conic Conformal (2SP Michigan) projection.
+  };
+  /** \details
+    This enumeration represents the linear or angular unit.
+  */
+  enum Unit
+  {
+    kUnitUnknown = 0,
+    kUnitMeter = 1,
+    kUnitFoot = 2,
+    kUnitInch = 3,
+    kUnitIFoot = 4,
+    kUnitClarkeFoot = 5,
+    kUnitIInch = 6,
+    kUnitCentimeter = 7,
+    kUnitKilometer = 8,
+    kUnitYard = 9,
+    kUnitSearsYard = 10,
+    kUnitMile = 11,
+    kUnitIYard = 12,
+    kUnitIMile = 13,
+    kUnitKnot = 14,
+    kUnitNautM = 15,
+    kUnitLat66 = 16,
+    kUnitLat83 = 17,
+    kUnitDecimeter = 18,
+    kUnitMillimeter = 19,
+    kUnitDekameter = 20,
+    kUnitHectometer = 21,
+    kUnitGermanMeter = 22,
+    kUnitCaGrid = 23,
+    kUnitClarkeChain = 24,
+    kUnitGunterChain = 25,
+    kUnitBenoitChain = 26,
+    kUnitSearsChain = 27,
+    kUnitClarkeLink = 28,
+    kUnitGunterLink = 29,
+    kUnitBenoitLink = 30,
+    kUnitSearsLink = 31,
+    kUnitRod = 32,
+    kUnitPerch = 33,
+    kUnitPole = 34,
+    kUnitFurlong = 35,
+    kUnitRood = 36,
+    kUnitCapeFoot = 37,
+    kUnitBrealey = 38,
+    kUnitSearsFoot = 39,
+    kUnitGoldCoastFoot = 40,
+    kUnitMicroInch = 41,
+    kUnitIndianYard = 42,
+    kUnitIndianFoot = 43,
+    kUnitIndianFt37 = 44,
+    kUnitIndianFt62 = 45,
+    kUnitIndianFt75 = 46,
+    kUnitIndianYd37 = 47,
+    kUnitDecameter = 48,
+    kUnitInternationalChain = 49,
+    kUnitInternationalLink = 50,
+    kUnitBrFootTrunc = 51,
+    kUnitBrChainTrunc = 52,
+    kUnitBrLinkTrunc = 53,
+    kUnitDegree = 1001,
+    kUnitGrad = 1002,
+    kUnitGrade = 1003,
+    kUnitMapInfo = 1004,
+    kUnitMil = 1005,
+    kUnitMinute = 1006,
+    kUnitRadian = 1007,
+    kUnitSecond = 1008,
+    kUnitDecisec = 1009,
+    kUnitCentisec = 1010,
+    kUnitMillisec = 1011,
+  };
+  /** \details
+    Default constructor.
+  */
+  OdDbGeoCoordinateSystem();
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdDbGeoCoordinateSystem();
+  /** \details
+    Returns the coordinate reference system's identifier string.
+    
+    \param coordSysId [out] Coordinate reference system's identifier.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not. 
+  */
+  virtual OdResult getId(OdString& coordSysId) const = 0;
+  /** \details
+    Returns this CRS's EPSG code.
+    
+    \param epsgCode [out] EPSG code.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not. 
+  */
+  virtual OdResult getEpsgCode(int& epsgCode) const = 0;
+  /** \details
+    Returns this CRS's type.
+    
+    \param type [out] CRS's type.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not. 
+  */
+  virtual OdResult getType(OdDbGeoCoordinateSystem::Type& type) const = 0;
+  /** \details
+    Returns the description of this CRS.
+    
+    \param coordSysDesc [out] CRS's description.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not. 
+  */
+  virtual OdResult getDescription(OdString& coordSysDesc) const = 0;
+  /** \details
+    Returns the unit of the coordinate system axis of this CRS.
+    
+    \param unit [out] Unit value.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    All axis contains the same unit.
+  */
+  virtual OdResult getUnit(OdDb::UnitsValue& unit) const = 0;
+  /** \details
+    Returns the unit of the coordinate system axis of this CRS.
+    
+    \param unit [out] Unit value.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    Each axis contains the same unit.
+  */
+  virtual OdResult getUnit(OdDbGeoCoordinateSystem::Unit& unit) const = 0;
+  /** \details
+    Returns the factor that is used for multiplying the length units of this CRS 
+    for calculating the equivalent in meters.
+    
+    \param unitScale [out] Scale factor.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getUnitScale(double& unitScale) const = 0;
+  /** \details
+    Returns the projection method of this CRS.
+    
+    \param prjCode [out] Projection method.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getProjectionCode(OdDbGeoCoordinateSystem::ProjectionCode& prjCode) const = 0;
+  /** \details
+    Returns the projection parameters of this CRS.
+    
+    \param prjParams [out] Projection parameters.
+    \param includeSpecialParams [in] Boolean flag that indicates if the special projection parameters should be counted.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getProjectionParameters(OdArray<OdDbGeoProjectionParameter>& prjParams,
+    bool includeSpecialParams) const = 0;
+  /** \details
+    Returns the datum of this CRS.
+    
+    \param datum [in/out] Datum value.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getDatum(OdDbGeoDatum& datum) const = 0;
+  /** \details
+    Returns the ellipsoid related to this CRS.
+    
+    \param ellipsoid [out] Ellipsoid.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    If the CRS contains an ellipsoid, it will not be geodetic and the datum reference will not have a value.
+  */
+  virtual OdResult getEllipsoid(OdDbGeoEllipsoid& ellipsoid) const = 0;
+  /** \details
+    Returns the projection method parameter offset easting of this CRS.
+    
+    \param offsetVec [in/out] Offset vector.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getOffset(OdGeVector2d& offsetVec) const = 0;
+  /** \details
+    Returns the cartesian extents of this CRS.
+    
+    \param exts [out] Extents.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getCartesianExtents(OdGeExtents2d& exts) const = 0;
+  /** \details
+    Returns the geodetic extents of this CRS, the range of longitude and latitude.
+    
+    \param exts [out] Extents.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getGeodeticExtents(OdGeExtents2d& exts) const = 0;
+  /** \details
+    Returns the string in XML format that represents this CRS.
+    
+    \param strXml [out] CRS's representation in XML format.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getXmlRepresentation(OdString& strXml) const = 0;
+  /** \details
+    Returns the string in WKT format that represents this CRS.
+    
+    \param strWkt [out] CRS's representation in WKT format.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getWktRepresentation(OdString& strWkt) const = 0;
+  /** \details
+    Creates and returns a new OdDbGeoCoordinateSystem object from the current virtual catalog.
+    
+    \param coordSysIdOrFullDef [in] ID, WKT or XML representation of the CRS definition to load.
+    \param pCoordSys [out] New CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  static OdResult create(const OdString& coordSysIdOrFullDef, 
+    OdDbGeoCoordinateSystemPtr& pCoordSys);
+  /** \details
+    Creates and returns a new OdDbGeoCoordinateSystem object for every existing, 
+    persistent CRS definition from the current virtual catalog when the passed in 
+    geodetic point is within the geodetic extents of the CRS.
+    
+    \param geoPt [in] Geodetic point.
+    \param allCoordSys [out] Array of pointers to the new CRS objects.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+
+    \remarks
+    This method is not supported yet.
+  */
+  static OdResult createAll(const OdGePoint3d& geoPt, OdArray<OdDbGeoCoordinateSystemPtr>& allCoordSys);
+  /** \details
+    Creates and returns a new OdDbGeoCoordinateSystem object for every existing, 
+    persistent CRS definition from the specified catalog.
+    
+    \param allCoordSys [out] Array of pointers to the new CRS objects.
+    \param pCategory [in] Category.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    If pCategory is NULL, all existing and persistent CRS definitions are returned.
+  */
+  static OdResult createAll(OdArray<OdDbGeoCoordinateSystemPtr>& allCoordSys,
+    const OdDbGeoCoordinateSystemCategory* pCategory = NULL);
+};
+
+/** \details
+  This abstract class represents a transformer object which is used to transform points from the source 
+  CRS to the target CRS.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeoCoordinateSystemTransformer : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemTransformer);
+  /** \details
+    Default constructor.
+  */
+  OdDbGeoCoordinateSystemTransformer();
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdDbGeoCoordinateSystemTransformer();
+  /** \details
+    Returns the source CRS's ID.
+    
+    \param sourceCoordSysId [out] Source CRS's ID.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getSourceCoordinateSystemId(OdString& sourceCoordSysId) const = 0;
+  /** \details
+    Returns the target CRS's ID.
+    
+    \param targetCoordSysId [out] Target CRS's ID.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getTargetCoordinateSystemId(OdString& targetCoordSysId) const = 0;
+  /** \details
+    Transforms the point from the source CRS to the target CRS.
+    
+    \param pointIn [in] Point in the source CRS.
+    \param pointOut [out] Point in the target CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult transformPoint(const OdGePoint3d& pointIn, OdGePoint3d& pointOut) const = 0;
+  /** \details
+    Transforms the array of points from the source CRS to the target CRS.
+    
+    \param pointsIn [in] Point array in the source CRS.
+    \param pointsOut [out] Point array in the target CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult transformPoints(const OdGePoint3dArray& pointsIn, OdGePoint3dArray& pointsOut) const = 0;
+  /** \details
+    Transforms the point from the source CRS to the target CRS.
+    
+    \param sourceCoordSysId [in] Source CRS's ID.
+    \param targetCoordSysId [in] Target CRS's ID.
+    \param pointIn [in] Point in the source CRS.
+    \param pointOut [out] Point in the target CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  static OdResult transformPoint(const OdString& sourceCoordSysId,
+    const OdString& targetCoordSysId,
+    const OdGePoint3d& pointIn,
+    OdGePoint3d& pointOut);
+
+  /** \details
+    Transforms the array of points from the source CRS to the target CRS.
+    
+    \param sourceCoordSysId [in] Source CRS's ID.
+    \param targetCoordSysId [in] Target CRS's ID.
+    \param pointsIn [in] Point array in the source CRS.
+    \param pointsOut [out] Point array in the target CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  static OdResult transformPoints(const OdString& sourceCoordSysId,
+    const OdString& targetCoordSysId,
+    const OdGePoint3dArray& pointsIn,
+    OdGePoint3dArray& pointsOut);
+  /** \details
+    Creates a new OdDbGeoCoordinateSystemTransformer object from the source CRS and target CRS.
+    
+    \param sourceCoordSysId [in] Source CRS's ID.
+    \param targetCoordSysId [in] Target CRS's ID.
+    \param pCoordSysTransformer [out] New OdDbGeoCoordinateSystemTransformer object.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  static OdResult create(const OdString& sourceCoordSysId, 
+    const OdString& targetCoordSysId,
+    OdDbGeoCoordinateSystemTransformerPtr& pCoordSysTransformer);
+};
+
+#include "TD_PackPop.h"
+
+#endif //_OD_DB_GEOCOORDINATESYSTEM_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystemPE.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystemPE.h
new file mode 100755
index 0000000..7ef4e7e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdDbGeoCoordinateSystemPE.h
@@ -0,0 +1,178 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_DB_GEOCOORDINATESYSTEM_PE_
+#define _OD_DB_GEOCOORDINATESYSTEM_PE_
+
+#include "OdDbGeoCoordinateSystem.h"
+
+#include "TD_PackPush.h"
+/** \details
+  This abstract class represents a protocol extension for a category which holds string 
+  identifiers referring to a group of coordinate reference systems.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeoCoordinateSystemCategoryPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemCategoryPE);
+  
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdDbGeoCoordinateSystemCategoryPE() {};
+  
+  /** \details
+    Creates and returns all coordinate system categories.
+    
+    \param allCategories [in/out] Array of pointers to returned categories.
+        
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult  createAll(OdArray<OdDbGeoCoordinateSystemCategoryPtr>& allCategories) const = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbGeoCoordinateSystemCategoryPE object pointers.
+*/
+typedef OdSmartPtr<OdDbGeoCoordinateSystemCategoryPE> OdDbGeoCoordinateSystemCategoryPEPtr;
+
+/** \details
+  This abstract class represents a protocol extension for a coordinate reference system (CRS) definition.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeoCoordinateSystemPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemPE);
+  
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdDbGeoCoordinateSystemPE() {};
+  
+  /** \details
+    Creates and returns a new OdDbGeoCoordinateSystem object from the current virtual catalog.
+    
+    \param coordSysIdOrFullDef [in] ID, WKT or XML representation of the CRS definition to load.
+    \param pCoordSys [out] New CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult create(const OdString& coordSysIdOrFullDef, OdDbGeoCoordinateSystemPtr& pCoordSys) const = 0;
+  /** \details
+    Creates and returns a new OdDbGeoCoordinateSystem object for every existing, 
+    persistent CRS definition from the current virtual catalog.
+    
+    \param geoPt [in] Geodetic point.
+    \param allCoordSys [out] Array of pointers to the new CRS objects.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult createAll(const OdGePoint3d& geoPt, OdArray<OdDbGeoCoordinateSystemPtr>& allCoordSys) const = 0;
+  
+  /** \details
+    Creates and returns a new OdDbGeoCoordinateSystem object for every existing, 
+    persistent CRS definition from the current virtual catalog.
+    
+    \param allCoordSys [out] Array of pointers to the new CRS objects.
+    \param pCategory [in] Category.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+    
+    \remarks
+    If pCategory is NULL, all existing and persistent CRS definitions are returned.
+  */
+  virtual OdResult createAll(OdArray<OdDbGeoCoordinateSystemPtr>& allCoordSys, const OdDbGeoCoordinateSystemCategory* pCategory = NULL) const = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbGeoCoordinateSystemPE object pointers.
+*/
+typedef OdSmartPtr<OdDbGeoCoordinateSystemPE> OdDbGeoCoordinateSystemPEPtr;
+
+/** \details
+  This abstract class represents a protocol extension for a transformer object 
+  which is used to transform points from the source CRS to the target CRS.
+
+  <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbGeoCoordinateSystemTransformerPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbGeoCoordinateSystemTransformerPE);
+  
+  /** \details
+    Virtual destructor.
+  */
+  virtual ~OdDbGeoCoordinateSystemTransformerPE() {};
+  /** \details
+    Transforms the point from the source CRS to the target CRS.
+    
+    \param sourceCoordSysId [in] Source CRS's ID.
+    \param targetCoordSysId [in] Target CRS's ID.
+    \param pointIn [in] Point in the source CRS.
+    \param pointOut [out] Point in the target CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult transformPoint(const OdString& sourceCoordSysId,
+    const OdString& targetCoordSysId,
+    const OdGePoint3d& pointIn,
+    OdGePoint3d& pointOut) const = 0;
+  /** \details
+    Transforms the array of points from the source CRS to the target CRS.
+    
+    \param sourceCoordSysId [in] Source CRS's ID.
+    \param targetCoordSysId [in] Target CRS's ID.
+    \param pointsIn [in] Point array in the source CRS.
+    \param pointsOut [out] Point array in the target CRS.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult transformPoints(const OdString& sourceCoordSysId,
+    const OdString& targetCoordSysId,
+    const OdGePoint3dArray& pointsIn,
+    OdGePoint3dArray& pointsOut) const = 0;
+  
+  /** \details
+    Creates a new OdDbGeoCoordinateSystemTransformer object from the source and target CRSs.
+    
+    \param sourceCoordSysId [in] Source CRS's ID.
+    \param targetCoordSysId [in] Target CRS's ID.
+    \param pCoordSysTransformer [out] New OdDbGeoCoordinateSystemTransformer object.
+    
+    \returns Returns eOK if successful, or an appropriate error code if not.
+  */
+  virtual OdResult create(const OdString& sourceCoordSysId, 
+    const OdString& targetCoordSysId,
+    OdDbGeoCoordinateSystemTransformerPtr& pCoordSysTransformer) const = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbGeoCoordinateSystemTransformerPE object pointers.
+*/
+typedef OdSmartPtr<OdDbGeoCoordinateSystemTransformerPE> OdDbGeoCoordinateSystemTransformerPEPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_OD_DB_GEOCOORDINATESYSTEM_PE_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdError.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdError.h
new file mode 100755
index 0000000..4bb976b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdError.h
@@ -0,0 +1,88 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OdError_h_Included_
+#define _OdError_h_Included_
+
+#include "OdResult.h"
+class OdErrorContext;
+#include "OdString.h"
+#include "TD_PackPush.h"
+
+/** \details
+This class implement OdError node objects in an OdErrorNode stack..
+
+\remarks
+Each Error object points to the previous Error object in the stack.
+
+Library: TD_Root
+<group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError
+{
+  OdErrorContext* m_pContext;
+public:
+  void setContext(OdErrorContext* pErrorContext);
+  const OdErrorContext* context() const;
+  OdErrorContext* context();
+
+  /** \param code [in]  Error code.
+  */
+  explicit OdError(OdResult code);
+  OdError(const OdError& source);
+
+  /** \param pErrorContext [in]  Pointer to the ErrorContext.
+  */
+  explicit OdError(OdErrorContext* pErrorContext);
+
+  /** \param errorMessage [in]  Error message.
+  */
+  explicit OdError(const OdString& errorMessage);
+
+  /** \param previousError [in]  Previous Error object.
+  */
+  OdError(const OdString& errorMessage, const OdError& previousError);
+  ~OdError();
+
+  OdError& operator = (const OdError& source);
+
+  /** \details
+  Returns the OdResult code of this Error object.
+  */
+  OdResult code() const;
+
+  /** \details
+  Returns the description of this Error object.
+  */
+  OdString description() const;
+
+  /** \details
+  Sets the Error object previous to this one in this Error stack.
+  \param previousError [in]  Previous Error object.
+  */
+  void attachPreviousError(const OdError& previousError);
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorContext.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorContext.h
new file mode 100755
index 0000000..3182fb7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorContext.h
@@ -0,0 +1,93 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OdErrorContext_h_Included_
+#define _OdErrorContext_h_Included_
+
+#include "OdaDefs.h"
+#include "RxObjectImpl.h"
+#include "OdString.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class implements a node in an ErrorContext stack.
+    
+    \remarks
+    Each ErrorContext object points to the previous ErrorContext object in the stack.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdErrorContext : public OdRxObject
+{
+protected:
+  OdErrorContext* m_pPreviousError;
+  OdErrorContext() : m_pPreviousError(0) {}
+  /** \param pPreviousError [in]  Pointer to the previous ErrorContext object.
+  */
+  OdErrorContext(OdErrorContext* pPreviousError);
+public:
+  virtual ~OdErrorContext();
+  
+  /** \details
+    Returns the description of this ErrorContext object.
+  */
+  virtual OdString description() const = 0;
+  
+  /** \details
+    Returns the OdResult code of this ErrorContext object.
+  */
+  virtual OdResult code() const = 0;
+  
+  /** \details
+    Returns the complete description of this ErrorContext object.
+    \remarks
+    completeDescription() returns a string containing the concatination of
+    all of the description strings in the ErrorContext stack.
+    
+    The default implementation of this function returns a string in the following format:
+            
+                   <Description n-1>\n
+                    Previous error: <Description n-2>\n
+                    Previous error: <Description n-3>\n
+                    ...
+                    Previous error: <Description 0>\n
+  */
+  OdString completeDescription() const;
+  /** \details
+    Returns the ErrorContext object previous to this one in this ErrorContext stack.
+  */
+  OdErrorContext* getPreviousError() const { return m_pPreviousError; }
+
+  /** \details
+    Sets the ErrorContext object previous to this one in this ErrorContext stack.
+    \param pPreviousError [in]  Pointer to the previous ErrorContext object.
+  */
+  void setPreviousError(OdErrorContext* pPreviousError);
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorWithId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorWithId.h
new file mode 100755
index 0000000..11963d8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdErrorWithId.h
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OdErrorContextWithId_h_Included_
+#define _OdErrorContextWithId_h_Included_
+
+#include "TD_PackPush.h"
+#include "OdError.h"
+
+/** \details
+
+<group Error_Classes>
+*/
+class DBROOT_EXPORT OdError_WithId : public OdError
+{
+public:
+  OdError_WithId(OdResult res, OdDbStub* id, const OdString& className = OdString::kEmpty);
+  /** \details
+    Returns the Object ID associated with this Error object.
+
+    \note
+    The exception handler is responsible for assuring that
+    ObjectId() is valid at the time of handling the exception.
+  */
+  OdDbStub* getObjectId() const;
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFileDepMgr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFileDepMgr.h
new file mode 100755
index 0000000..111c9bf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFileDepMgr.h
@@ -0,0 +1,213 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODFILEDEPMGR_INCLUDED_
+#define _ODFILEDEPMGR_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdString.h"
+#include "RxDictionary.h"
+
+/** \details
+    This class represents entries in the DWG section of File Dependency List.
+    Library: TD_Db
+    <group Other_Classes> 
+*/
+class TOOLKIT_EXPORT OdFileDependencyInfo : public OdRxObject
+{
+protected:
+  OdFileDependencyInfo();
+
+public:
+  ODRX_DECLARE_MEMBERS(OdFileDependencyInfo);
+  virtual void copyFrom(
+    const OdRxObject* pSource);
+  OdString m_FullFileName;      // Full name of file.
+  OdString m_FileName;          // Base name of file.
+  OdString m_FoundPath;         // Path at which file was found.
+  OdString m_FingerprintGuid;   // Fingerprint GUID.
+  OdString m_VersionGuid;       // Version GUID.
+  OdString m_Feature;           // Name of the application or *feature* that created this entry.
+  bool m_bIsModified;           // Database was modified since last save.
+  bool m_bAffectsGraphics;      // Entry affects the screen view.
+  OdInt32 m_nIndex;             // Unique File Dependency List *index*.
+  OdInt32 m_nTimeStamp;         // Seconds since 1/1/1980.
+  OdInt32 m_nFileSize;          // Current File size.
+  OdRefCounter m_nReferenceCount;    // Current reference count for *database*.
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdFileDependencyInfo object pointers.
+*/
+typedef OdSmartPtr<OdFileDependencyInfo> OdFileDependencyInfoPtr;
+
+/** \details
+    This class allows management of entries in the DWG section of the File Dependency List. 
+
+    Library: TD_Db
+    
+    \remarks
+    Every OdDbDatabase instance has permanently associated with it an instance of the this class.
+    <group Other_Classes> 
+*/
+class TOOLKIT_EXPORT OdFileDependencyManager : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFileDependencyManager);
+
+  OdFileDependencyManager() {};
+
+  /** \details
+    Creates an entry in the DWG section of the File Dependency List.
+
+    \param feature [in]  Name of the application or feature creating the entry.
+    \param fullFileName [in]  Full name of file for the entry.
+    \param affectsGraphics [in]  True if and only if the entry affects the screen view.
+    \param noIncrement [in]  If true, duplicate records are created instead of 
+                    incrementing the reference count of the existing entry.
+    
+    \remarks
+    Returns the Unique File Dependency List ID for the new entry, or 0 if not successful.
+  */
+  virtual OdUInt32 createEntry(
+    const OdString& feature,
+    const OdString& fullFileName,
+    const bool affectsGraphics = false,
+    const bool noIncrement = false) = 0;
+
+
+  /** \details
+    Returns the specified entry in the DWG section of the File Dependency List.
+    
+    \param feature [in]  Name of the application or feature that created the entry.
+    \param fullFileName [in]  Full name of file for the entry.
+    \param fdlIndex [in]  File Dependency List index.
+    \param fileInfo [out]  Receives the file dependency information
+    \param useCachedInfo [in]  True to use cached information, false to use updated information.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  virtual OdResult getEntry(
+    const OdString& feature,
+    const OdString& fullFileName,
+    OdFileDependencyInfoPtr& fileInfo, 
+    const bool useCachedInfo = false) = 0;
+
+  virtual OdResult getEntry(
+    OdUInt32 fdlIndex,
+    OdFileDependencyInfoPtr& fileInfo, 
+    const bool useCachedInfo = false) = 0;
+
+  /** \details
+    Updates the specified entry in the DWG section of the File Dependency List.
+    
+    \param feature [in]  Name of the application or feature that created the entry.
+    \param fullFileName [in]  Full name of file for the entry.
+    \param index [in]  File Dependency List index.
+
+    \remarks
+    This function resets the mIsModified, mTimestamp, and mFileSize members of the entry.    
+  */
+  virtual OdResult updateEntry(
+    const OdString& feature,
+    const OdString& fullFileName) = 0;
+  virtual OdResult updateEntry(
+    OdUInt32 index) = 0;
+
+  /** \details
+    Erases the specified entry from the DWG section of the File Dependency List.
+    
+    \param feature [in]  Name of the application or feature that created the entry.
+    \param fullFileName [in]  Full name of file for the entry.
+    \param fdlIndex [in]  File Dependency List index.
+    \param forceRemove [in]  True to erases the entry regardless of its reference count.
+
+    \remarks
+    If the reference count of the entry is 1, or forceRemove is true, the entry is erased. Otherwise,
+    this function merely decrements the reference count.
+  */
+  virtual OdResult eraseEntry(
+    const OdString& feature,
+    const OdString& fullFileName,
+    const bool forceRemove = false) = 0;
+  virtual OdResult eraseEntry(
+    OdUInt32 fdlIndex,
+    const bool forceRemove = false) = 0;
+
+  /** \details
+    Returns the number of unique entries in the DWG section of the File Dependency List.
+  */
+  virtual OdUInt32 countEntries() = 0;
+
+  /** \details
+    Initializes an iterator for the DWG section of the File Dependency List.
+    
+    \param feature [in]  Name of the application or feature creating the entry.
+    \param modifiedOnly [in]  True to return only modified entries.
+    \param affectsGraphicsOnly [in]  True to return only  entries that effect the screen view.
+    \param walkXRefTree [in]  True to traverse the File Dependency Lists of Xref'd drawings.    
+    
+    \remarks
+    If no arguments are specified, all entries in the local list will be traversed. 
+    Specifying feature, modifiedOnly true, and/or affectsGraphicsOnly true will restrict the entries traversed.
+  */
+  virtual void iteratorInitialize(
+    const OdString& feature = OdString::kEmpty, 
+    const bool modifiedOnly = false,
+    const bool affectsGraphicsOnly = false,
+    const bool walkXRefTree = false) = 0;
+
+  /** \details
+    Returns the index of the next entry in the DWG section of the File Dependency List.
+    
+    \remarks
+    The returned value may be used in the getEntry() and eraseEntry() functions.
+  */
+  virtual OdUInt32 iteratorNext() = 0;
+
+  // get feature list for saving
+
+  /** \details
+    Returns the dictionary containing the feature list in the DWG section of the File Dependency List.
+  */
+  virtual void getFeatures(
+    OdRxDictionaryPtr& features) = 0;
+  
+  /** \details
+    Removes the Xref entries added to the DWG section of the File Dependency List
+    by iteratorInitialize.
+  */
+  virtual void clearXRefEntries() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdFileDependencyManager object pointers.
+*/
+typedef OdSmartPtr<OdFileDependencyManager> OdFileDependencyManagerPtr;
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFont.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFont.h
new file mode 100755
index 0000000..d158083
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFont.h
@@ -0,0 +1,604 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// OdFont.h: interface for the OdFont class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_ODFONT_H__0B76813A_DCFA_450E_8591_B6C6F1ED76EC__INCLUDED_)
+#define AFX_ODFONT_H__0B76813A_DCFA_450E_8591_B6C6F1ED76EC__INCLUDED_
+
+#include "RxObject.h"
+#include "OdArray.h"
+#include "OdCharMapper.h"
+
+// For memset below
+#include <memory.h>
+
+class OdGiCommonDraw;
+class OdGiConveyorGeometry;
+class OdGePoint2d;
+class OdGePoint3d;
+class OdStreamBuf;
+
+#include "TD_PackPush.h"
+
+typedef enum {
+  kFontTypeUnknown    = 0,  // Unknown.
+  kFontTypeShx        = 1,  // SHX font.
+  kFontTypeTrueType   = 2,  // TrueType font.
+  kFontTypeShape      = 3,  // Shape file.
+  kFontTypeBig        = 4,  // BigFont file.
+  kFontTypeRsc        = 5   // MicroStation Recource file.
+} OdFontType;
+
+/** \details
+    This structure implements character properties in an OdGi context. 
+    Library: TD_Root
+    <group !!RECORDS_TD_APIRef>
+*/
+struct FIRSTDLL_EXPORT OdCharacterProperties
+{
+  OdCharacterProperties()
+  { ::memset(this, 0, sizeof(*this)); }
+
+  bool  bUnderlined;
+  bool  bOverlined;
+  bool  bStriked;
+  bool  bLastChar;
+  bool  bInBigFont;
+  bool  bAsian;
+  bool  bValid;
+};
+
+/** \details
+    This structure implements text properties in an OdGi context.
+    Library: TD_Root
+    <group !!RECORDS_TD_APIRef>
+*/
+struct FIRSTDLL_EXPORT OdTextProperties
+{
+  OdUInt16 m_flags;
+  double   m_trackingPercent;
+  OdUInt16 m_textQuality;
+  enum
+  {
+    kNormalText   = 0x01,
+    kVerticalText = 0x02,
+    kUnderlined   = 0x04,
+    kOverlined    = 0x08,
+    kLastChar     = 0x10,
+    kInBigFont    = 0x20,
+    kInclPenups   = 0x40,
+    kZeroNormals  = 0x80,
+    kBezierCurves = 0x100,
+    kStriked      = 0x200
+  };
+  OdChar  m_prevChar;
+public:
+  OdTextProperties() : m_flags(0), m_trackingPercent(0.0), m_textQuality(50), m_prevChar(0) {}
+  /** \details
+    Returns true if and only if the Normal Text flag is set for this TextProperties object.
+  */
+  bool isNormalText() const { return GETBIT(m_flags, kNormalText); }
+  /** \details
+    Controls the Normal Text flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setNormalText(bool value) { SETBIT(m_flags, kNormalText, value); }
+  /** \details
+    Returns true if and only if the Vertical Text flag is set for this TextProperties object.
+  */
+  bool isVerticalText() const { return GETBIT(m_flags, kVerticalText); }
+  /** \details
+    Controls the Vertical Text flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setVerticalText(bool value) { SETBIT(m_flags, kVerticalText, value); }
+  /** \details
+    Returns true if and only if the Underlined flag is set for this TextProperties object.
+  */
+  bool isUnderlined() const { return GETBIT(m_flags, kUnderlined); }
+  /** \details
+    Controls the Underlined flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setUnderlined(bool value) { SETBIT(m_flags, kUnderlined, value); }
+  /** \details
+    Returns true if and only if the Overlined flag is set for this TextProperties object.
+  */
+  bool isOverlined() const { return GETBIT(m_flags, kOverlined); }
+  /** \details
+    Controls the Overlined flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setOverlined(bool value) { SETBIT(m_flags, kOverlined, value); }
+  /** \details
+    Returns true if and only if the Striked flag is set for this TextProperties object.
+  */
+  bool isStriked() const { return GETBIT(m_flags, kStriked); }
+  /** \details
+    Controls the Striked flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setStriked(bool value) { SETBIT(m_flags, kStriked, value); }
+  /** \details
+  Returns true if and only if the LastChar flag is set for this TextProperties object.
+  */
+
+  /** \details
+    Returns true if and only if the LastChar flag is set for this TextProperties object.
+  */
+  bool isLastChar() const { return GETBIT(m_flags, kLastChar); }
+  /** \details
+    Controls the LastChar flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setLastChar(bool value) { SETBIT(m_flags, kLastChar, value); }
+  /** \details
+    Returns true if and only if the InBigFont flag is set for this TextProperties object.
+  */
+  bool isInBigFont() const { return GETBIT(m_flags, kInBigFont); }
+  /** \details
+    Controls the InBigFont flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setInBigFont(bool value) { SETBIT(m_flags, kInBigFont, value); }
+  /** \details
+    Returns true if and only if the IncludePenups flag is set for this TextProperties object.
+  */
+  bool isIncludePenups() const { return GETBIT(m_flags, kInclPenups); }
+  /** \details
+    Controls the IncludePenups flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setIncludePenups(bool value) { SETBIT(m_flags, kInclPenups, value); }
+  /** \details
+    Returns true if and only if the ZeroNormals flag is set for this TextProperties object.
+  */
+  bool isZeroNormals() const { return GETBIT(m_flags, kZeroNormals); }
+  /** \details
+    Controls the kZeroNormals flag for this TextProperties object.
+    \param value [in]  Controls the flag.
+  */
+  void setZeroNormals(bool value) { SETBIT(m_flags, kZeroNormals, value); }
+  /** \details
+    Returns smooth TTF text contour output flag.
+  */
+  bool ttfPolyDraw() const { return GETBIT(m_flags, kBezierCurves); }
+  /** \details
+    Sets smooth TTF text contour output flag.
+
+    bFlag (in) New flag value.
+  */
+  void setTtfPolyDraw(bool bFlag) { SETBIT(m_flags, kBezierCurves, bFlag); }
+  /** \details
+    Returns the tracking percent for this TextProperties object.
+  */
+  double trackingPercent() const {return m_trackingPercent; }
+  /** \details
+    Sets the tracking percent for this TextProperties object.
+    \param trackingPercent [in]  Tracking percent.
+  */
+  void setTrackingPercent(double trackingPercent) { m_trackingPercent = trackingPercent; }
+
+  /** \details
+    Returns the text quality percent for this vectorization process.
+    \remarks
+    Returns a value in the range [0,100]. 50 is the default.
+  */
+  OdUInt32 textQuality() const { return m_textQuality; }
+
+  /** \details
+    Returns the text quality percent for this vectorization process.
+    \remarks
+    Sets a value in the range [0,100]. 50 is the default.
+  */
+  void setTextQuality(OdUInt32 val) { m_textQuality = (OdUInt16)val; }
+};
+
+typedef OdUInt32 OdFontSubType;
+
+class OdGePoint2d;
+class OdGiConveyorGeometry;
+class OdTtfDescriptor;
+
+/** \details
+    This class is the base interface class for classes that implements font objects.
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdFont : public OdRxObject
+{
+  OdUInt32 m_Flags;
+
+public:
+  ODRX_DECLARE_MEMBERS(OdFont);
+
+  OdFont() : m_Flags(0) {}
+
+  enum
+  {
+    kBigFont10 = 0x0001,
+    kUniFont10 = 0x0002,
+    kFont10    = 0x0004,
+    kFont11    = 0x0008,
+    kFont10A   = 0x0010,
+    kTrueType  = 0x0020,
+    kFontGdt   = 0x0040,
+    kFontSimplex6 = 0x0080,
+    kShapes11   = 0x0100,
+    kFontRsc    = 0x0200   // MicroStation Resource file.
+  };
+
+  /** \details
+    Returns the font flags for this Font object.
+    \remarks
+    getFlags() returns a combination of zero or more of the following: 
+    
+    <table>
+    Name              Value
+    kBigFont10        0x0001
+    kUniFont10        0x0002
+    kFont10           0x0004
+    kFont11           0x0008
+    kFont10A          0x0010
+    kTrueType         0x0020
+    kFontGdt          0x0040
+    kFontSimplex6     0x0080
+    kShapes11         0x0100
+    kFontRsc          0x0200
+    </table>
+  */
+    OdUInt32 getFlags() const { return m_Flags; }
+  /** \details
+    Returns the font flags for this Font object.
+    
+    \remarks
+    flags() returns a combination of zero or more of the following: 
+    
+    <table>
+    Name              Value
+    kBigFont10        0x0001
+    kUniFont10        0x0002
+    kFont10           0x0004
+    kFont11           0x0008
+    kFont10A          0x0010
+    kTrueType         0x0020
+    kFontGdt          0x0040
+    kFontSimplex6     0x0080
+    kShapes11         0x0100
+    kFontRsc          0x0200
+    </table>
+  */
+    OdUInt32 flags() { return m_Flags; }
+
+  /** \details
+    Sets the font flags for this Font object.
+    \param fontFlags [in]  Font flags.
+
+    \remarks
+    fontFlags must be a combination of zero or more of the following:
+    
+    <table>
+    Name              Value
+    kBigFont10        0x0001
+    kUniFont10        0x0002
+    kFont10           0x0004
+    kFont11           0x0008
+    kFont10A          0x0010
+    kTrueType         0x0020
+    kFontGdt          0x0040
+    kFontSimplex6     0x0080
+    kShapes11         0x0100
+    kFontRsc          0x0200
+    </table>
+  */
+    void setFlags(OdUInt32 fontFlags) { m_Flags = fontFlags; }
+
+  /** \details
+    Adds the specified font flags to this Font object.
+    \param fontFlags [in]  Font flags.
+
+    \remarks
+    fontFlags must be a combination of zero or more of the following:
+     
+    <table>
+    Name              Value
+    kBigFont10        0x0001
+    kUniFont10        0x0002
+    kFont10           0x0004
+    kFont11           0x0008
+    kFont10A          0x0010
+    kTrueType         0x0020
+    kFontGdt          0x0040
+    kFontSimplex6     0x0080
+    kShapes11         0x0100
+    kFontRsc          0x0200
+    </table>
+  */
+    void addFlag(OdUInt32 fontFlags) { m_Flags |= fontFlags; }
+
+  /** \details
+    Initializes this Font object to read font data from the specified StreamBuf object.
+
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.    
+  */
+      virtual OdResult initialize(OdStreamBuf* pStreamBuf) = 0;
+  /** \details
+    Draws the specified character with this Font object.
+    \param character [in]  Character to draw.
+    \param advance [in]  Offset to next character.
+    \param pWd [in/out] Draw object that can be used by this function to set the 
+              necessary attributes and create the necessary geometry.
+    \param textProperties [in] Text properties.
+    \param pGeometry [in] Pointer to the modeler geometry.
+
+  */
+  virtual OdResult     drawCharacter(OdChar character, OdGePoint2d& advance, OdGiCommonDraw* pWd,
+                                     OdTextProperties& textProperties) = 0;
+  virtual OdResult     drawCharacter(OdChar character, OdGePoint2d& advance,
+                                     OdGiConveyorGeometry* pGeometry,
+                                     OdTextProperties& textProperties) = 0;
+  /** \details
+    Returns the height of this Font object above the baseline.
+  */
+  virtual double       getAbove() const = 0;
+  /** \details
+    Returns the depth of this font object below the baseline.
+  */
+  virtual double       getBelow() const = 0;
+  /** \details
+    Returns an array of the characters defined in this Font object.
+    \param characters [out]  Receives the array of characters.
+  */
+  virtual OdUInt32     getAvailableChars(OdCharArray& characters) = 0;
+  /** \details
+    Returns true if and only if the specified character is defined in this Font object.
+    \param character [in]  Character.
+  */
+  virtual bool        hasCharacter(OdChar character) = 0;
+  
+  /** \details
+    Returns the height of this Font object.
+  */
+  virtual double      getHeight() const                                                   // MKU 20.02.2003
+  {
+    return getAbove() + getBelow();
+  }
+  /** \details
+    Returns the internal leading of this Font object.
+    \note
+    The default implementation of this function always returns 0.
+  */
+  virtual double getInternalLeading() const
+  {
+    return 0;
+  }
+
+
+  //  removed here from GiContextForDbDatabase.cpp              // MKU 04.03.2003
+
+  /** \details
+    Returns the height of this Font object above the baseline.
+    \note
+    The default implementation of this function returns getAbove(), unless it is 0.0, in which case this function returns 1.0. 
+  */
+  double fontAbove() const  
+  {
+    double above = getAbove();
+    if(OdZero(above))
+    {
+      above = 1.0;
+    }
+    return above;
+  }
+  /** \details
+    Returns the underline position for this Font object at the specified text size.
+    \param textSize [in]  Text size.
+    \note
+    The default implementation of this function returns -2.0 * textSize.
+  */
+  virtual double getUnderlinePos(double textSize) const
+  {
+    return -0.2 * textSize;
+    
+  }
+  /** \details
+    Returns the overline position for this Font object at the specified text size.
+    \param textSize [in]  Text size.
+    \note
+    The default implementation of this function returns 1.2 * textSize.
+  */
+  virtual double getOverlinePos(double textSize) const
+  {
+    return 1.2 * textSize;
+  }
+  
+  /** \details
+    Returns true if and only if this Font object is an SHX font.
+    \note
+    The default implementation of this function always returns true.
+  */
+  virtual bool isShxFont()
+  {
+    return true;
+  }
+  /** \details
+    Returns the average width of characters in this Font object.
+    \note
+    The default implementation of this function always returns 0.0.
+  */
+  virtual double getAverageWidth()
+  {
+    return 0.0;
+  }
+
+  /** \details
+    Returns arrays of points over and under the baseline for the specified character in this OdFont object.
+    \param character [in]  Character.
+    \param advance [in]  Offset to next character.
+    \param pointsOver [in]  Array of points over the baseline..
+    \param pointsUnder [in]  Array of points under the baseline.
+    \param textFlags [in] Text flags.
+
+    \remarks
+    textFlags must be a combination of one or more of the following:
+ 
+    <table>
+    Name                                Value
+    OdTextProperties::kNormalText       0x01
+    OdTextProperties::kVerticalText     0x02
+    OdTextProperties::kUnderlined       0x04
+    OdTextProperties::kOverlined        0x08
+    OdTextProperties::kLastChar         0x10
+    OdTextProperties::kInBigFont        0x20
+    OdTextProperties::kInclPenups       0x40
+    </table>
+    
+    \note
+    The default implementation of this function does nothing but return.
+    
+  */
+  virtual void getScore( OdUInt16 character, 
+                         OdGePoint2d& advance, 
+                         OdGePoint3d* pointsOver,
+                         OdGePoint3d* pointsUnder,
+                         const OdTextProperties& textFlags);
+
+  /** \details
+    Returns the font data for the specified character.
+    \param dwTable [in]  Metric table to query.
+    \param dwOffset [in]  Offset into table.
+    \param pBuffer [in]  Pointer to to the buffer to receive the data.
+    \param cbData [in]  ???.
+    \remarks
+    Returns the number of bytes returned in buffer.
+    
+    \note
+    The default implementation of this function does nothing but return -1.
+  */
+  virtual OdUInt32 getFontData(
+    OdUInt32 dwTable,     // metric table to query
+    OdUInt32 dwOffset,    // offset into table being queried
+    void * pBuffer,  // pointer to buffer for returned data
+    OdUInt32 cbData       ) const;
+
+  /** \details
+    Returns true if and only if the font supports vertical mode.
+    
+    \note
+    The default implementation of this function returns false.
+  */
+  virtual bool supportsVerticalMode()
+  {
+    return false;
+  }
+
+  /** \details
+    Returns font file name.
+
+    \note
+    The default implementation of this function returns empty string.
+  */
+  virtual OdString getFileName() const
+  {
+    return OdString();
+  }
+  virtual void getDescriptor(OdTtfDescriptor& descr)
+  {
+  }
+
+  /** \details
+    Returns the LOGFONT for this font
+
+    \param lpLogFont [in] Pointer to the buffer to receive the data.
+    \remarks
+    Returns the number of bytes returned in buffer. In case lpLogFont is NULL methods return
+    number of bytes required in buffer. 
+    
+    \note
+    The default implementation of this function does nothing but return -1.
+  */
+  virtual OdInt32 getLogFont(void* lpLogFont) const
+  {
+    return -1;
+  }
+};
+
+inline void OdFont::getScore( OdUInt16 /*character*/, 
+                         OdGePoint2d& /*advance*/, 
+                         OdGePoint3d* /*pointsOver*/,
+                         OdGePoint3d* /*pointsUnder*/,
+                         const OdTextProperties& /*flags*/ )
+  {}
+
+inline OdUInt32 OdFont::getFontData(
+    OdUInt32 /*dwTable*/,     // metric table to query
+    OdUInt32 /*dwOffset*/,    // offset into table being queried
+    void * /*lpvBuffer*/,  // pointer to buffer for returned data
+    OdUInt32 /*cbData*/       ) const
+  {
+    return OdUInt32(-1);
+  }
+
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdFont object pointers.
+*/
+typedef OdSmartPtr<OdFont> OdFontPtr;
+
+/** \details
+  This class is the base interface class for text iterators, to be used both by Teigha and DGNdirect clients.
+  
+  <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdBaseTextIterator : public OdRxObject
+{
+public:
+  virtual OdChar nextChar() = 0;
+  /** \details
+  Returns the properties of the character at the current position of this TextIterator object.
+  */
+  virtual const OdCharacterProperties& currProperties() const = 0;
+
+  /** \details
+  Returns the character at the current position of this TextIterator object.
+  */
+  virtual const OdChar* currPos() const = 0;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdBaseTextIterator object pointers.
+*/
+typedef OdSmartPtr<OdBaseTextIterator> OdBaseTextIteratorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // !defined(AFX_ODFONT_H__0B76813A_DCFA_450E_8591_B6C6F1ED76EC__INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFontServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFontServices.h
new file mode 100755
index 0000000..6ad809a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdFontServices.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OdFontServices_h_Included_
+#define _OdFontServices_h_Included_
+
+#include "RxObject.h"
+#include "DbBaseDatabase.h"
+#include "Gi/GiTextStyle.h"
+#include "Gi/GiExport.h"
+
+class OdDbBaseHostAppServices;
+/** \details
+    This class is the base class for classes that provide platform-dependent font services for Teigha.
+
+    Library: TD_Gi
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdFontServices : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdFontServices);
+  /** \details
+    Returns the specified OdGiTextStyle record for the specified OdDbDatabase object.
+    \param textStyle [out]  Receives the TextStyle record.
+    \param pDb [in]  Pointer to the database.
+  */
+  virtual void loadStyleRec(OdGiTextStyle& textStyle, OdDbBaseDatabase* pDb) const = 0;
+  /** \details
+    Returns the FontFilePath for the specified OdGiTextStyle and OdDbDatabase objects.
+    \param textStyle [in]  TextStyle object.
+    \param pDb [in]  Pointer to the database.
+  */
+  virtual OdString getFontFilePath(OdGiTextStyle& textStyle, OdDbBaseDatabase* pDb) const = 0;
+  /** \details
+    Returns the BigFontFilePath for the specified OdGiTextStyle and OdDbDatabase objects.
+    \param textStyle [in]  TextStyle object.
+    \param pDb [in]  Pointer to the database.
+  */
+  virtual OdString getBigFontFilePath(OdGiTextStyle& textStyle, OdDbBaseDatabase* pDb) const = 0;
+  /** \details
+    Returns the default OdFont object associated with this FontServices object.
+  */
+  virtual OdFontPtr defaultFont() const = 0;
+  /** \details
+    Retrieval OdTtfDescriptor data from file.
+  */
+  virtual bool getTTFParamFromFile(OdString fileName, OdTtfDescriptor& descr) const = 0;
+  /** \details
+    Locates the TTF or TTC file containing the specified font description.
+  */
+  virtual bool ttfFileNameByDescriptor(const OdTtfDescriptor& descr, OdString& fileName, OdDbBaseHostAppServices* pHost) = 0;
+
+  virtual bool getSystemFontFolders(OdStringArray& aDirs) = 0;
+
+  virtual void collectFilePathsInDirectory(OdStringArray& res, const OdString& sPath, const OdString& sFilter = L"*.*") = 0;
+
+};
+
+#define ODDB_FONT_SERVICES OD_T("OdDbFontServices")
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdFontServices object pointers.
+*/
+typedef OdSmartPtr<OdFontServices> OdFontServicesPtr;
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdGUID.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdGUID.h
new file mode 100755
index 0000000..725c979
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdGUID.h
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODGUID_H_INCLUDED
+#define ODGUID_H_INCLUDED
+
+struct OdGUID {
+public:
+  OdUInt8 m_data[0x10];
+};
+
+#endif // ODGUID_H_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdHeap.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdHeap.h
new file mode 100755
index 0000000..ea7afc2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdHeap.h
@@ -0,0 +1,130 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_HEAPOPERATORS_INCLUDED_
+#define _OD_HEAPOPERATORS_INCLUDED_
+
+#include "OdAlloc.h"
+#include <new>
+
+#ifdef __BCPLUSPLUS__ // borland compiler does not support "placement delete"
+
+/** \details
+    Defines the new and delete operators for a class derived from the OdRxObject class.
+*/
+#define ODRX_HEAP_OPERATORS() \
+void* operator new(size_t s) { return ::odrxAlloc(s); }\
+void operator delete(void* p) { ::odrxFree(p); }\
+void* operator new[](size_t s) { return ::odrxAlloc(s); }\
+void operator delete[](void* p) { ::odrxFree(p); }\
+void *operator new(size_t, void* p) { return p; }\
+void *operator new[](size_t, void* p) { return p; }
+
+#elif defined(_MSC_VER) // MSVC ignores exception specs (and gives warning)
+
+/** \details
+    Defines the new and delete operators for a class derived from the OdRxObject class.
+*/
+#define ODRX_HEAP_OPERATORS() \
+void* operator new(size_t s)\
+{\
+  void* p = ::odrxAlloc(s);\
+  if ( !p ) throw std::bad_alloc();\
+  return p;\
+}\
+void operator delete(void* p) { ::odrxFree(p); }\
+void* operator new[](size_t s)\
+{\
+  void* p = ::odrxAlloc(s);\
+  if ( !p ) throw std::bad_alloc();\
+  return p;\
+}\
+void operator delete[](void* p) { ::odrxFree(p); }\
+void *operator new(size_t, void* p) { return p; }\
+void operator delete( void*, void* ) {}\
+void *operator new[](size_t, void* p) { return p; }\
+void operator delete[]( void*, void* ) {}
+
+#else
+
+/** \details
+    Defines the new and delete operators for a class derived from the OdRxObject class.
+*/
+#define ODRX_HEAP_OPERATORS() \
+void* operator new(size_t s) throw(std::bad_alloc)\
+{\
+  void* p = ::odrxAlloc(s);\
+  if ( !p ) throw std::bad_alloc();\
+  return p;\
+}\
+void operator delete(void* p) { ::odrxFree(p); }\
+void* operator new[](size_t s) throw(std::bad_alloc)\
+{\
+  void* p = ::odrxAlloc(s);\
+  if ( !p ) throw std::bad_alloc();\
+  return p;\
+}\
+void operator delete[](void* p) { ::odrxFree(p); }\
+void *operator new(size_t, void* p) throw() { return p; }\
+void operator delete( void*, void* ) {}\
+void *operator new[](size_t, void* p) throw() { return p; }\
+void operator delete[]( void*, void* ) {}
+
+#endif
+
+/** \details
+    Defines the new and delete operators that generate the exception.
+*/
+#define ODRX_NO_HEAP_OPERATORS() \
+void* operator new(size_t ) throw() { ODA_FAIL(); return 0; }\
+void operator delete(void* ) { ODA_FAIL(); throw OdError(eNotApplicable); }\
+void* operator new[](size_t ) throw() { ODA_FAIL(); return 0; }\
+void operator delete[](void* ) { ODA_FAIL(); throw OdError(eNotApplicable); }
+
+#ifdef OD_REDEFINE_HEAP_OPERATORS
+
+/** \details
+    Defines the new and delete operators that use the new and delete operators of a base class.
+*/
+#define ODRX_USING_HEAP_OPERATORS(T) \
+void* operator new(size_t s) throw() { return T::operator new(s); }\
+void operator delete(void* p) { T::operator delete(p); }\
+void* operator new[](size_t s) throw() { return T::operator new(s); }\
+void operator delete[](void* p) { T::operator delete(p); }
+
+#else
+
+/** \details
+    Defines the new and delete operators that use the new and delete operators of a base class.
+*/
+#define ODRX_USING_HEAP_OPERATORS(T) \
+using T::operator new;\
+using T::operator delete;\
+using T::operator new[];\
+using T::operator delete[]
+
+#endif
+
+
+#endif // _OD_HEAPOPERATORS_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdList.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdList.h
new file mode 100755
index 0000000..8d340bd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdList.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODA_LISTT_H_
+#define _ODA_LISTT_H_
+
+#define STL_USING_LIST
+#include "OdaSTL.h"
+
+#include "OdMemory.h"
+
+/** \details
+    This template class extends the functionality of the standard STL class std::list.
+    <group Other_Classes>
+*/
+#ifdef OD_STD_ALLOCATOR_AS_IS
+template<class T, class A = OD_TYPENAME3 std::allocator<T> >
+#else
+template<class T, class A = OdAllocator<T> >
+#endif
+class OdList : public std::list<T, A>
+{
+public:
+	typedef typename std::list<T,A>::iterator iterator;
+	OdList() {}
+	virtual ~OdList() {}
+	/** \details
+	  Appends an item to the end of the list.
+	  
+	  \remarks
+	  Returns an iterator pointing to the new member.
+	*/
+	iterator append() { return this->insert(this->end(), T()); }
+};
+
+
+template<class T, class A> class OdList;
+
+#endif //_ODA_LISTT_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMemory.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMemory.h
new file mode 100755
index 0000000..684d5aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMemory.h
@@ -0,0 +1,147 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_MEMORY_H_
+#define _OD_MEMORY_H_
+
+#define STL_USING_MEMORY
+#include "OdaSTL.h"
+
+#include "OdPlatform.h"
+#include "OdAlloc.h"
+
+// TEMPLATE CLASS allocator
+// Some compilers don't have support for construct & destroy functions.
+
+#ifndef OD_STD_ALLOCATOR
+/** \details
+    This template class extends the functionality of the standard STL class std::allocator
+    for those compilers that not support for construct and destroy.
+    
+    \note
+    If construct and destroy are supported, as indicated by #define OD_STD_ALLOCATOR,
+    this class is does nothing to std::allocator.
+    
+    <group Other_Classes>
+*/
+template<class T>
+class OdAllocator : public std::allocator<T>
+{
+public:
+  typedef typename std::allocator<T>::size_type       size_type;
+  typedef typename std::allocator<T>::difference_type difference_type;
+  typedef typename std::allocator<T>::pointer         pointer;
+  typedef typename std::allocator<T>::const_pointer   const_pointer;
+  typedef typename std::allocator<T>::reference       reference;
+  typedef typename std::allocator<T>::const_reference const_reference;
+  typedef typename std::allocator<T>::value_type      value_type;
+
+private:
+  inline void constructn(size_type N, pointer ptr, const T& _V = T())
+  {
+    while(N--) construct(ptr + N, _V);
+  }
+  inline void destroyn(size_type N, pointer ptr)
+  {
+    while(N--) destroy(ptr + N);
+  }
+public:
+  /** \details
+    Allocates a block of memory sufficient to store the specified number of elements.
+    \param N [in]  Number of elements. 
+    \remarks
+    Returns a pointer to the allocated memory.
+  */
+  pointer allocate(size_type N, const void * = 0)
+  {
+    pointer res = NULL;
+    if (N)
+    {
+      res = (pointer)::odrxAlloc(N * sizeof(T));
+      constructn(N, res);
+    }
+    return res;
+  }
+  
+  //!DOM For CodeWarrior
+
+  pointer allocate(size_type N, const_pointer = 0)
+  {
+    pointer res = NULL;
+    if (N)
+    {
+      res = (pointer)::odrxAlloc(N * sizeof(T));
+      constructn(N, res);
+    }
+    return res;
+  }
+
+#ifdef _MSC_VER
+
+#if _MSC_VER > 1600
+#ifndef _FARQ /* specify standard memory model */
+ #define _FARQ
+ #define _PDFT ptrdiff_t
+ #define _SIZT size_t
+#endif
+#endif //!DOM _MSC_VER > 1600
+  /** \details
+    Allocates a block of memory sufficient to store the specified number of characters.
+    \param N [in]  Number of characters. 
+    \remarks
+    Returns a pointer to the allocated memory.
+    
+    \note
+    Prevents "Freeing Mismatched Memory" errors in Purify.
+  */
+  char _FARQ *_Charalloc(size_type N)
+  {
+    return (char _FARQ*)::odrxAlloc(N);
+  }
+#endif
+
+  /** \details
+    Frees a block of memory allocated with allocate.
+    \param P [in]  Pointer to the memory.
+  */
+  void deallocate(void* P, size_type = 0 ) { ::odrxFree(P); }
+};
+
+#else
+/** \details
+
+    <group Other_Classes>
+*/
+template<class T>
+class OdAllocator : public std::allocator<T>
+{};
+
+
+#endif
+
+
+#endif //_OD_MEMORY_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdModuleNames.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdModuleNames.h
new file mode 100755
index 0000000..ff666ee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdModuleNames.h
@@ -0,0 +1,124 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef MODULE_NAMES_DEFINED
+#define MODULE_NAMES_DEFINED
+
+#define OdDbRootModuleName       L"TD_DbRoot.dll"
+
+#define OdGsModuleName           L"TD_Gs.dll"
+#define OdGiModuleName           L"TD_Gi.dll"
+#define OdDbModuleName           L"TD_Db.dll"
+
+#define OdWinGDIModuleName       L"WinGDI.txv"
+#define OdWinOpenGLModuleName    L"WinOpenGL.txv"
+#define OdWinDirectXModuleName   L"WinDirectX.txv"
+#define OdWinBitmapModuleName    L"WinBitmap.txv"
+#define OdWinGLES2ModuleName     L"WinGLES2.txv"
+
+#define OdDynBlocksModuleName    L"TD_DynBlocks"
+#define OdAveModuleName          L"TD_Ave"
+
+#define OdDbCommandsModuleName   L"DbCommands"
+
+#define OdDwf7ExportModuleName   L"TD_Dwf7Export"
+
+#define OdDwf7ImportModuleName    L"TD_Dwf7Import"
+#define OdPdfImportVIModuleName   L"TD_PdfImportVI"
+#define OdDgnImportModuleName     L"TD_DgnImport"
+#define OdColladaImportModuleName L"TD_ColladaImport"
+#define OdPdfExportModuleName     L"TD_PdfExport"
+#define OdSvgExportModuleName     L"TD_SvgExport"
+#define OdSTLExportModuleName     L"TD_STLExport"
+#define OdColladaExportModuleName L"TD_ColladaExport"
+#define OdRasterExportModuleName  L"TD_RasterExport"
+
+#define OdSmModuleName           L"TD_Sm"
+#define OdDgnUnderlayModuleName  L"TD_DgnUnderlay"
+#define OdDwfUnderlayModuleName  L"TD_DwfUnderlay"
+#define OdSpatialIndexModuleName L"TD_SpatialIndex.dll"
+
+#define OdFTFontEngineModuleName L"TD_FtFontEngine"
+#define OdPdfModuleVIModuleName  L"PdfModuleVI"
+
+#define ODPS_PLOTSTYLE_SERVICES_APPNAME L"PlotStyleServices"
+#define RX_RASTER_SERVICES_APPNAME (L"RxRasterServices")
+
+#define DbConstraintsModuleName           L"DbConstraints"
+#define SynergyObjDPWModuleName           L"AcSynergyObjDPW"
+#define OdModelerGeometryModuleName       L"ModelerGeometry"
+#define OdRecomputeDimBlockModuleName     L"RecomputeDimBlock"
+#define OdExFieldEvaluatorModuleName      L"ExFieldEvaluator"
+#define OdRasterProcessorModuleName       L"RasterProcessor"
+#define OdOleItemHandlerModuleName        L"OdOleItemHandler"
+#define OdOleSsItemHandlerModuleName      L"OdOleSsItemHandler"
+#define OdExDeepCloningModuleName         L"ExDeepCloning"
+#define OdExDynamicBlocksModuleName       L"ExDynamicBlocks"
+#define OdExEvalWatcherModuleName         L"ExEvalWatchers"
+#define OdGripPointsModuleName            L"GripPoints"
+#define OdModelerCommandsModuleName       L"ModelerCommands"
+#define OdCurveFunctionsModuleName        L"OdCurveFunctions"
+#define OdOverrulingSampleModuleName      L"OverrulingSample"
+#define OdAsdkSmileyDbModuleName          L"AsdkSmileyDb"
+#define OdAeciIbModuleName                L"AECIIB"
+#define OdAutoSurfServicesModuleName      L"AutoSurfServices"
+#define OdAcIdViewObjModuleName           L"AcIdViewObj"
+#define OdPlotSettingsValidatorModuleName L"PlotSettingsValidator"
+#define OdThreadPoolModuleName            L"ThreadPool"
+#define OdLspModuleName                   L"OdLsp"
+#define OdSpaModelerModuleName            L"SpaModeler"
+#define OdC3dModelerModuleName            L"C3dModeler"
+#define OdExCustObjsModuleName            L"ExCustObjs"
+#define OdExCommandsModuleName            L"ExCommands"
+#define OdOpenCadTxModuleName             L"OpenCadTx"
+#define Od3DSolidHistoryTxModuleName      L"TD_3DSolidHistory"
+#define OdDgnLSModuleName                 L"AcDgnLS"
+#define DbPointCloudObjModuleName         L"AcDbPointCloudObj"
+#define OdModelDocObjModuleName           L"AcModelDocObj"
+#define OdJoinEntityPEModuleName          L"TD_DbJoinEntityPE"
+#define ExDimAssocModuleName              L"ExDimAssoc"
+#define OdGeolocationObjModuleName        L"AcGeolocationObj"
+#define OdGeoDataModuleName               L"OdGeoData"
+#define OdGeoMapPEModuleName              L"OdDbGeoMapPE"
+#define OdGeoCommandsModuleName           L"GeoCommands"
+//#define OdDwfExportModuleName             L"OdDwfExportModule"
+#define OdDwfExportModuleName             L"TD_Dwf7Export"
+
+#define RX_RCS_FILE_SERVICES              L"RcsFileServices"
+
+#define TfCoreModuleName                  L"TD_TfCore"
+
+#define OdQtOpenGLModuleName              L"OdaQtOpenGL.txv"
+#define OdQtGLES2ModuleName               L"OdaQtGLES2.txv"
+
+#define ODDB_HOST_APP_SERVICES L"OdDbHostAppServices"
+#define ODRP_RASTERPROCESSING_SERVICES_APPNAME L"RasterProcessingServices"
+
+
+#if defined(ODA_WINDOWS) && !defined(_WINRT)
+#  define OdOlePlatformItemHandlerModuleName OdOleItemHandlerModuleName
+#else
+#  define OdOlePlatformItemHandlerModuleName OdOleSsItemHandlerModuleName
+#endif
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultimap.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultimap.h
new file mode 100755
index 0000000..788381a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultimap.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_MULTIMAP_H
+#define OD_MULTIMAP_H
+
+#define  STL_USING_MAP
+#include "OdaSTL.h"
+
+#include "OdPlatform.h"
+
+/** \details
+    This template class extends the functionality of the standard STL class std::multimap.
+
+    \remarks
+    The default constructor creates an empty set.
+
+    The template arguments are the same as that of the STL class std::multimap.
+    Library: TD_Db
+    <group Other_Classes>
+*/
+template<class Key, 
+         class T, 
+				 class Pred = OD_TYPENAME std::less<Key>, 
+				 class A = OD_TYPENAME2 std::allocator<OD_TYPENAME2 std::pair<const Key, T> > >
+class OdMultimap : public std::multimap<Key, T, Pred, A>
+{
+public:
+	typedef typename std::multimap<Key, T, Pred, A>::iterator iterator;
+	typedef typename std::multimap<Key, T, Pred, A>::const_iterator const_iterator;
+
+  // 01.06.2002 G. Udov trying to eliminate using static variables
+
+  OdMultimap(const Pred& comp = Pred(), const A& al = A()) 
+    : std::multimap<Key, T, Pred, A>(comp, al) {}
+
+  OdMultimap(const typename std::multimap<Key, T, Pred, A>::value_type *first, 
+             const typename  std::multimap<Key, T, Pred, A>::value_type *last, 
+             const Pred& comp = Pred(), 
+             const A& al = A())
+    : std::multimap<Key, T, Pred, A>(first, last, comp, al) {}
+  
+  /** \details
+    Returns an iterator addressing the first element in the multimap that has a key equal to the specified key.
+    \param key [in]  Search key.
+  */
+  iterator find_ex(const Key& key)
+  {
+    iterator i = find (key),
+             iend = this->end();
+    while (i != iend && !this->key_comp() (key, i->first))
+    {
+      if (i->first == key)
+        return i;
+      ++i;
+    }
+    return iend;
+  }
+
+  const_iterator find_ex(const Key& key) const
+  {
+    const_iterator i = find (key),
+                   iend = this->end();
+    while (i != iend && !this->key_comp() (key, i->first))
+    {
+      if (i->first == key)
+        return i;
+      ++i;
+    }
+    return iend;
+  }
+
+  /** \details
+    Returns an iterator addressing the last element in a multimap that has a key equivalent to the specified key.
+    \param key [in]  Search key.
+  */
+  iterator find_last(const Key& key)
+  {
+    iterator i = find (key), j,
+             iend = this->end();
+    while (i != iend && !this->key_comp() (key, i->first))
+    {
+      j = i;
+      ++i;
+    }
+    return j;
+  }
+};
+
+
+#endif // OD_MULTIMAP_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultiset.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultiset.h
new file mode 100755
index 0000000..732bed0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMultiset.h
@@ -0,0 +1,114 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_MULTISET_H
+#define OD_MULTISET_H
+
+#define  STL_USING_SET
+#include "OdaSTL.h"
+
+#include "OdPlatform.h"
+
+/** \details
+    This template class extends the functionality of the standard STL class std::multiset.
+
+    \remarks
+    The default constructor creates an empty set.
+
+    The template arguments are the same as that of the STL class std::multiset.
+    Library: TD_Db
+    <group Other_Classes>
+*/
+template<class Key, 
+                                 class Pred = OD_TYPENAME std::less<Key>, 
+                                 class A = OD_TYPENAME2 std::allocator<Key> >
+class OdMultiset : public std::multiset<Key, Pred, A>
+{
+public:
+  typedef typename std::multiset<Key, Pred, A>::iterator iterator;
+  typedef typename std::multiset<Key, Pred, A>::const_iterator const_iterator;
+
+  // 01.06.2002 G. Udov trying to eliminate using static variables
+  
+  OdMultiset(const Pred& comp = Pred(), const A& al = A()) 
+    : std::multiset<Key, Pred, A>(comp, al) {}
+
+  OdMultiset(const typename std::multiset<Key, Pred, A>::value_type *first, 
+             const typename std::multiset<Key, Pred, A>::value_type *last, 
+             const Pred& comp = Pred(), 
+             const A& al = A())
+    : std::multiset<Key, Pred, A>(first, last, comp, al) {}
+  
+  /** \details
+    Returns an iterator addressing the first element in the multiset that has a key equal to the specified key.
+    \param key [in]  Search key.
+  */
+  iterator find_ex(const Key& key)
+  {
+    iterator i = std::multiset<Key, Pred, A>::find (key),
+             iend = this->end();
+    while (i != iend && !this->key_comp() (key, *i))
+    {
+      if (*i == key)
+        return i;
+      ++i;
+    }
+    return iend;
+  }
+
+  // This method and the previous one do the same. But the former is used for constant objects.
+  
+  const_iterator find_ex(const Key& key) const
+  {
+    const_iterator i = find (key),
+                   iend = this->end();
+    while (i != iend && !this->key_comp() (key, *i))
+    {
+      if (*i == key)
+        return i;
+      ++i;
+    }
+    return iend;
+  }
+
+  /** \details
+    Returns an iterator addressing the last element in a multiset that has a key equivalent to the specified key.
+    \param key [in]  Search key.
+  */
+  iterator find_last(const Key& key)
+  {
+    iterator i = find (key), j,
+             iend = this->end();
+    while (i != iend && !this->key_comp() (key, *i))
+    {
+      j = i;
+      ++i;
+    }
+    return j;
+  }
+};
+
+#endif // OD_MULTISET_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMutex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMutex.h
new file mode 100755
index 0000000..8e30f67
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdMutex.h
@@ -0,0 +1,419 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_MUTEX_H_
+#define _OD_MUTEX_H_
+
+#include "RootExport.h"
+#include "TD_PackPush.h"
+#ifdef OD_POSIX_THREADS
+#include <pthread.h>
+#elif defined(ODA_WINDOWS)
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+#include <windows.h>
+#endif
+
+/** \details
+    This class implements Mutex objects in a Teigha context.
+    
+    \remarks
+    Mutex objects are used to synchronize between threads and across processes.
+    Library: TD_Root
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdMutex 
+{
+#ifdef OD_POSIX_THREADS
+  pthread_mutex_t _mutex;
+public:
+  OdMutex()
+  {
+    pthread_mutexattr_t attr;
+    pthread_mutexattr_init(&attr);
+    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); 
+    pthread_mutex_init(&_mutex, &attr);
+    pthread_mutexattr_destroy(&attr);
+  }
+  ~OdMutex()
+  {
+    pthread_mutex_destroy((pthread_mutex_t*)&_mutex);
+  }
+  /** \details
+  Locks this Mutex object.
+  */
+  void lock()
+  {
+    pthread_mutex_lock(&_mutex);
+  }
+  /** \details
+  Unlocks this Mutex object.
+  */
+  void unlock()
+  {
+    pthread_mutex_unlock(&_mutex);
+  }
+#elif (defined(ODA_WINDOWS)) && !defined(_WIN32_WCE) && !defined(_WINRT)
+  CRITICAL_SECTION _mutex;
+public:
+  OdMutex()
+  {
+    InitializeCriticalSection(&_mutex);
+  }
+  ~OdMutex()
+  {
+    DeleteCriticalSection(&_mutex);
+  }
+  /** \details
+  Locks this Mutex object.
+  */
+  void lock()
+  {
+    EnterCriticalSection(&_mutex);
+  }
+  /** \details
+  Unlocks this Mutex object.
+  */
+  void unlock()
+  {
+    LeaveCriticalSection(&_mutex);
+  }
+#else
+public:
+  OdMutex() {}
+  ~OdMutex() {}
+  /** \details
+  Locks this Mutex object.
+  */
+  void lock() {}
+  /** \details
+  Unlocks this Mutex object.
+  */
+  void unlock() {}
+#endif
+};
+
+/** \details
+    This class implements Mutex AutoLock objects in a Teigha context.
+    
+    \remarks
+    Mutex objects are used to synchronize between threads and across processes.
+    
+    MutexAutoLock objects automatically lock the specified OdMutex object
+    when constructed and unlock it when destroyed.
+    
+    Library: TD_Root
+    <group Other_Classes>
+*/
+class OdMutexAutoLock
+{
+public:
+  /** \param mutex [in]  Mutex to be Autolocked.
+  */
+  OdMutexAutoLock(OdMutex& mutex) : m_Mutex(mutex)
+  {
+    m_Mutex.lock();
+  }
+  ~OdMutexAutoLock()
+  { 
+    m_Mutex.unlock();
+  }
+private:
+  OdMutex& m_Mutex;
+};
+
+#ifndef TD_SINGLE_THREAD
+#define TD_AUTOLOCK(Mutex) OdMutexAutoLock autoLock(Mutex);
+#else
+#define TD_AUTOLOCK(Mutex)
+#endif
+
+
+#ifndef TD_SINGLE_THREAD
+#if defined(_MSC_VER) && _M_IX86 >= 400 && !defined(_WIN32_WCE)
+// Intel486 platform with Microsoft compiler
+#pragma warning(push)
+#pragma warning(disable:4035)
+#pragma warning(disable:4793)
+inline int OdInterlockedExchange(volatile int* dest, int val)
+{
+  __asm
+  {
+    mov edx, dest
+    mov eax, val
+    lock xchg [edx], eax
+  }
+}
+inline int OdInterlockedExchangeAdd(volatile int* dest, int incr)
+{
+  __asm
+  {
+    mov edx, dest
+    mov eax, incr
+    lock xadd [edx], eax
+  }
+}
+inline int OdInterlockedIncrement(volatile int* dest)
+{
+  __asm
+  {
+    mov edx, dest
+    mov eax, 1
+    lock xadd [edx], eax
+    inc eax
+  }
+}
+inline int OdInterlockedDecrement(volatile int* dest)
+{
+  __asm
+  {
+    mov edx, dest
+    mov eax, -1
+    lock xadd [edx], eax
+    dec eax
+  }
+}
+#pragma warning(pop)
+#elif (defined(_WIN32) || defined(_WIN64)) && !defined(_WIN32_WCE) && !defined(_WINRT)
+// Windows platform with generic compiler - use interlocked functions from Win32 API
+#define OdInterlockedExchange(dest, val) InterlockedExchange((LONG*)(dest), val)
+#define OdInterlockedExchangeAdd(dest, incr) InterlockedExchangeAdd((LONG*)(dest), incr)
+#define OdInterlockedIncrement(dest) InterlockedIncrement((LONG*)(dest))
+#define OdInterlockedDecrement(dest) InterlockedDecrement((LONG*)(dest))
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+// Intel platform with GCC compiler
+inline int OdInterlockedExchange(volatile int* dest, int val)
+{
+  int ret;
+  __asm__ __volatile__ (
+    "lock; xchgl %0, (%1)"
+    : "=r" (ret)
+    : "r" (dest), "0" (val)
+    : "memory");
+  return ret;
+}
+inline int OdInterlockedExchangeAdd(volatile int* dest, int incr)
+{
+  int ret;
+  __asm__ __volatile__ (
+    "lock; xaddl %0, (%1)"
+    : "=r" (ret)
+    : "r" (dest), "0" (incr)
+    : "memory");
+  return ret;
+}
+inline int OdInterlockedIncrement(volatile int* dest)
+{
+  return OdInterlockedExchangeAdd(dest, 1) + 1;
+}
+inline int OdInterlockedDecrement(volatile int* dest)
+{
+  return OdInterlockedExchangeAdd(dest, -1) - 1;
+}
+#elif defined(__GNUC__) && defined(__POWERPC__)
+// Macintosh PowerPC platform with GCC compiler
+inline int OdInterlockedExchange(volatile int* dest, int val)
+{
+  // Assembler code is taken from Wine 0.9.4 sources
+  // See http://cvs.winehq.org/cvsweb/wine/libs/port/interlocked.c?rev=1.7&content-type=text/x-cvsweb-markup
+  int ret = 0;
+  __asm__ __volatile__ (
+    "0:  lwarx %0, 0, %1\n"
+    "    stwcx. %2, 0, %1\n"
+    "    bne- 0b\n"
+    "    isync\n"
+    : "=&r"(ret)
+    : "r"(dest), "r"(val)
+    : "cr0", "memory", "r0");
+  return ret;
+}
+inline int OdInterlockedExchangeAdd(volatile int* dest, int incr)
+{
+  // Assembler code is taken from Wine 0.9.4 sources
+  // See http://cvs.winehq.org/cvsweb/wine/libs/port/interlocked.c?rev=1.7&content-type=text/x-cvsweb-markup
+  int ret = 0;
+  int zero = 0;
+  __asm__ __volatile__ (
+    "0:  lwarx %0, %3, %1\n"
+    "    add %0, %2, %0\n"
+    "    stwcx. %0, %3, %1\n"
+    "    bne- 0b\n"
+    "    isync\n"
+    : "=&r" (ret)
+    : "r"(dest), "r"(incr), "r"(zero)
+    : "cr0", "memory", "r0");
+  return ret - incr;
+}
+inline int OdInterlockedIncrement(volatile int* dest)
+{
+  return OdInterlockedExchangeAdd(dest, 1) + 1;
+}
+inline int OdInterlockedDecrement(volatile int* dest)
+{
+  return OdInterlockedExchangeAdd(dest, -1) - 1;
+}
+#elif defined(__APPLE__)
+// iOS or Mac platform
+#include <libkern/OSAtomic.h>
+inline int OdInterlockedExchange(volatile int* dest, int val)
+{
+  int oldValue = *dest;
+  while (!OSAtomicCompareAndSwapIntBarrier(oldValue, val, dest))
+    oldValue = *dest;
+  return oldValue;
+}
+inline int OdInterlockedExchangeAdd(volatile int* dest, int incr)
+{
+  return OSAtomicAdd32Barrier(incr, dest) - incr;
+}
+inline int OdInterlockedIncrement(volatile int* dest)
+{
+  return OSAtomicIncrement32Barrier(dest);
+}
+inline int OdInterlockedDecrement(volatile int* dest)
+{
+  return OSAtomicDecrement32Barrier(dest);
+}
+#elif defined(ANDROID) && !defined(ANDROID_GOOGLE)
+//TODO Android r10c NDK doesn't provide such functionality
+// Android platform with GCC or MinGW compiler
+#include <sys/atomics.h>
+inline int OdInterlockedExchange(volatile int* dest, int val)
+{
+  return __atomic_swap(val, dest);
+}
+inline int OdInterlockedExchangeAdd(volatile int* dest, int incr)
+{
+  // There is no atomic instruction to add. This implementation isn't completely safe.
+  return __atomic_swap(*dest + incr, dest);
+}
+inline int OdInterlockedIncrement(volatile int* dest)
+{
+  return __atomic_inc(dest) + 1;
+}
+inline int OdInterlockedDecrement(volatile int* dest)
+{
+  return __atomic_dec(dest) - 1;
+}
+/* 
+#elif defined(__sun)
+// sparc on Sun Studio compiler, solaris
+#include <atomic.h>
+inline int OdInterlockedExchange(volatile int* dest, int val)
+{
+  return (int)atomic_swap_uint((volatile uint_t*)dest, (uint_t)val);
+}
+inline int OdInterlockedExchangeAdd(volatile int* dest, int incr)
+{
+  return (int)atomic_add_int_nv((volatile uint_t*)dest, incr) - incr;
+}
+inline int OdInterlockedIncrement(volatile int* dest)
+{
+  return (int)atomic_inc_uint_nv((volatile uint_t*)dest);
+}
+inline int OdInterlockedDecrement(volatile int* dest)
+{
+  return (int)atomic_dec_uint_nv((volatile uint_t*)dest);
+}
+#elif defined (__hpux)
+// HPUX (require libatomic: https://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=Atomic)
+#include <atomic.h>
+inline int OdInterlockedExchange(volatile int* dest, int val)
+{
+  return (int)atomic_swap_32((volatile uint32_t*)dest, (uint32_t)val);
+}
+inline int OdInterlockedExchangeAdd(volatile int* dest, int incr)
+{
+  // There is no atomic instruction to add. This implementation isn't completely safe.
+  return (int)atomic_swap_32((volatile uint32_t*)dest, (uint32_t)(*desc + incr));
+}
+inline int OdInterlockedIncrement(volatile int* dest)
+{
+  return (int)atomic_inc_32((volatile uint32_t*)dest) + 1;
+}
+inline int OdInterlockedDecrement(volatile int* dest)
+{
+  return (int)atomic_dec_32((volatile uint32_t*)dest) - 1;
+}*/
+#else
+// here should go other platforms
+// synchronization is disabled if no atomic functions are defined
+#define TD_SINGLE_THREAD
+#endif //architecture
+#endif //TD_SINGLE_THREAD
+
+/** \details
+    This class implements reference counter with interlocked operations for Teigha objects.
+    
+    Library: TD_Root
+    <group Other_Classes>
+*/
+#ifndef TD_SINGLE_THREAD
+#ifdef _MANAGED
+#pragma managed(push, off)
+#endif
+/** <group !!RECORDS_TD_APIRef>
+*/
+  struct OdRefCounter
+{
+  typedef int RefCounterType;
+  volatile RefCounterType _ref_count;
+  OdRefCounter& operator = (RefCounterType n) { _ref_count = 0; OdInterlockedExchange(&_ref_count, n); return *this; }
+  operator RefCounterType () const { return OdInterlockedExchangeAdd(const_cast<RefCounterType*>(&_ref_count), 0); }
+  RefCounterType operator ++ () { return OdInterlockedIncrement(&_ref_count); }
+  RefCounterType operator -- () { return OdInterlockedDecrement(&_ref_count); }
+  // 1 as default is not correct for all classes 
+  // (see for example OdArrayBuffer, CAllocator)
+  OdRefCounter() : _ref_count(-1) {} // undefined
+  OdRefCounter(int n) : _ref_count(n) {}
+};
+
+/** <group !!RECORDS_TD_APIRef>
+*/
+  struct OdVolatile
+{
+  typedef int VolatileType;
+  volatile VolatileType _val;
+  OdVolatile& operator = (VolatileType n) { _val = 0; OdInterlockedExchange(&_val, n); return *this; }
+  operator VolatileType () const { return OdInterlockedExchangeAdd(const_cast<VolatileType*>(&_val), 0); }
+  VolatileType operator|=(VolatileType n) { return OdInterlockedExchange(&_val, _val|n); }
+  VolatileType operator&=(VolatileType n) { return OdInterlockedExchange(&_val, _val&n); }
+  OdVolatile() : _val(0) {}
+  OdVolatile(int n): _val(n) {}
+};
+
+#ifdef _MANAGED
+#pragma managed(pop)
+#endif
+
+#else
+typedef int OdRefCounter;
+typedef int OdVolatile;
+#endif
+
+#include "TD_PackPop.h"
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPath.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPath.h
new file mode 100755
index 0000000..1f1507f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPath.h
@@ -0,0 +1,62 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODPATH_INCLUDED_
+#define _ODPATH_INCLUDED_
+
+#include "OdString.h"
+
+namespace Oda
+{
+
+// Support methods operating with relative paths:
+//   isRelativePath()
+//   makeRelativePath()
+//   adjustPath()
+//
+#ifdef ODA_UNIXOS
+#define pathChar '/'
+#define dirDiv L"/"
+#define dirCur L"./"
+#define dirUp L"../"
+inline bool	isRelativePath(const OdChar* path)
+{
+  return path && path[0] != L'/';
+}
+#else
+#define pathChar '\\'
+#define dirDiv L"\\"
+#define dirCur L".\\"
+#define dirUp L"..\\"
+inline bool	isRelativePath(const OdChar* path)
+{
+  return path && odWStrChr(path, ':') == 0;
+}
+#endif
+
+FIRSTDLL_EXPORT bool makeRelativePath(const OdString& from, const OdString& to, OdString& out, bool windowsMode = false);
+FIRSTDLL_EXPORT bool adjustPath(OdString& path, bool windowsMode = false);
+
+} // namespace Oda
+
+#endif // _ODPATH_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatform.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatform.h
new file mode 100755
index 0000000..8faa602
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatform.h
@@ -0,0 +1,959 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_PLATFORM_H_
+#define _OD_PLATFORM_H_
+
+
+#include "OdPlatformSettings.h"
+#include "OdGUID.h"
+// Moved from OdaCommon.h, to be used in string functions
+#define odmin(X,Y) ((X) < (Y) ? (X) : (Y))
+#define odmax(X,Y) ((X) > (Y) ? (X) : (Y))
+
+
+#if defined(ODA_WINDOWS)
+#include <cmath>
+#include <float.h>
+#define Odisnan ::_isnan
+#define Odfinite ::_finite
+#define GETSS(s,n) ::gets_s(s,n)
+#define OdWprintf _wprintf_p
+#define OdPrintf _printf_p
+
+#if defined(_MSC_VER) && (_MSC_VER < 1400)
+#ifndef GET_X_LPARAM
+#define GET_X_LPARAM(lParam)	((int)(short)LOWORD(lParam))
+#endif
+#ifndef GET_Y_LPARAM
+#define GET_Y_LPARAM(lParam)	((int)(short)HIWORD(lParam))
+#endif
+#endif
+
+#else
+#include <stdio.h>
+#include <limits.h>
+#define GETSS(s, n) gets(s)
+#define MAX_PATH PATH_MAX
+
+#define OdWprintf wprintf
+#define OdPrintf printf
+
+#if defined(__APPLE__)
+#include <math.h>
+#define Odisnan std::isnan
+#define Odfinite std::isfinite
+#else
+#include <math.h>
+#define Odisnan isnan
+#define Odfinite finite
+#endif
+#endif
+
+#ifdef ANDROID_WCHAR
+#include "../../ThirdParty/wchar/stdlib_.h"
+#include "../../ThirdParty/wchar/wchar_.h"
+#define Od_atof       Citrus::atof
+#define Od_abs        Citrus::abs
+#define Od_labs       Citrus::labs
+#define Od_llabs      Citrus::llabs
+#define Od_srand      Citrus::srand
+#define Od_rand       Citrus::rand
+#define Od_wcstombs   Citrus::wcstombs
+#define Od_wcscpy     Citrus::wcscpy
+#define Od_wcscmp     Citrus::wcscmp
+#define Od_wcscat     Citrus::wcscat
+#define Od_wcschr     Citrus::wcschr
+#define Od_wcscpy     Citrus::wcscpy
+#define Od_wcslen     Citrus::wcslen
+#define Od_wcsncpy    Citrus::wcsncpy
+#else
+#define Od_atof       atof
+#define Od_abs        abs
+#define Od_labs       labs
+#define Od_llabs      llabs
+#define Od_srand      srand
+#define Od_rand       rand
+#define Od_wcstombs   wcstombs
+#define Od_wcscpy     wcscpy
+#define Od_wcscmp     wcscmp
+#define Od_wcscat     wcscat
+#define Od_wcschr     wcschr
+#define Od_wcscpy     wcscpy
+#define Od_wcslen     wcslen
+#define Od_wcsncpy    wcsncpy
+#endif
+
+#ifndef odStrChr
+#define odStrChr(str, ch) strchr(str, ch)
+#endif
+
+#ifndef odWStrChr
+#define odWStrChr(str, ch) Od_wcschr(str, ch)
+#endif
+
+#ifdef OD_STRING_FNS
+
+
+extern int Od_stricmp(const OdChar*str, const OdChar* str2);
+extern int Od_strnicmp(const OdChar *s1, const OdChar *s2, int len);
+extern OdChar* Od_strupr(OdChar* str);
+extern OdChar* Od_strlwr(OdChar* str);
+extern OdChar* Od_strrev(OdChar* str);
+extern int Od_strnicmpA(const char *s1, const char *s2, int len);
+extern int Od_stricmpA(const char* str, const char* str2);
+extern char* Od_struprA(char* str);
+extern char* Od_strlwrA(char* str);
+extern char* Od_strrevA(char* str);
+
+#define odStrUpr(str) Od_strupr(str)
+#define odStrLwr(str) Od_strlwr(str)
+#define odStrRev(str) Od_strrev(str)
+
+#if !defined(__linux__)
+
+#define odStrICmp(str, str2) Od_stricmp(str, str2)
+#define odStrnICmp(str, str2, n) Od_strnicmp(str, str2, n)
+#define odStrnICmpA Od_strnicmpA
+#define odStrICmpA(str, str2) Od_stricmpA(str, str2)
+#define odStrUprA(str) Od_struprA(str)
+#define odStrLwrA(str) Od_strlwrA(str)
+#define odStrRevA(str) Od_strrevA(str)
+
+#endif // !defined(__linux__)
+
+#endif  /*  OD_STRING_FNS  */
+
+/*   strings functions  */
+
+#if defined(ANDROID_WCHAR)
+  #include <string>
+  #if !defined(OD_WSTRING_DEFINED) && (!defined(_STRINGFWD_H) || !defined(_GLIBCXX_USE_WCHAR_T))
+    #define OD_WSTRING_DEFINED
+    #include <bits/basic_string.h>
+    //#include <iosfwd> 
+    namespace std 
+    {
+      typedef basic_string<wchar_t> wstring;
+      typedef basic_istringstream<wchar_t> wistringstream;
+      typedef basic_stringstream<wchar_t> wstringstream;
+    }
+  #endif
+  #include "../../ThirdParty/wchar/wchar_.h" // #include <wchar_.h>
+
+  #define odStrLen(str) Citrus::wcslen(str)
+  #define odStrCmp(str, str2) Citrus::wcscmp(str, str2)
+  inline long Od_strtoint(const OdChar* str)
+  { 
+    return Citrus::wcstol((const wchar_t*)str, 0, 10);
+  }
+  #define odStrToInt(str) Od_strtoint(str)
+
+  #pragma MARKMESSAGE("DNA: odStrToInt() looses highest bit of UInt32: FFFFFFFF -> 7FFFFFFF (at least on WIN64)")
+  #define odStrToUInt(str) reinterpret_cast<unsigned long>(Od_strtoint(str))
+  // TODO
+  //inline unsigned long Od_strtouint(const OdChar* str)
+  //{ 
+  //  return Citrus::wcstoul((const wchar_t*)str, 0, 10);
+  //}
+  //#define odStrToUInt(str) Od_strtouint(str)
+
+ // #define odSScanf Citrus::swscanf
+ // #define odSprintf Citrus::swprintf
+  inline double Od_wtof(const wchar_t* str)
+  {
+    wchar_t *endptr = 0;
+    return Citrus::wcstold(str, &endptr);
+  }
+  #define odStrToF Od_wtof
+  #define odStrStr Citrus::wcsstr
+  // see OdDToStr.h and TD/Source/fltcvt/OdGdtoa.cpp for odDToStr and odStrToD
+  #define wcsicmp Citrus::wcscasecmp
+  #define wcsnicmp Citrus::wcsncasecmp
+#else
+  #include <wchar.h>
+#endif
+
+#ifndef odStrLen
+#define odStrLen(str)         wcslen(str)
+#endif
+
+#ifndef odStrLenA
+#define odStrLenA(str)        strlen(str)
+#endif
+
+#ifndef odStrCmp
+#define odStrCmp(str, str2)   wcscmp(str, str2)
+#endif
+
+#ifndef odStrCmpA
+#define odStrCmpA(str, str2)  strcmp(str, str2)
+#endif
+
+#if defined(ODA_WINDOWS)
+#include <Windows.h>
+#endif
+
+#if defined( ANDROID ) || defined ( _WIN32_WCE ) || (defined (_MSC_VER) && _MSC_VER < 1400) || defined(_WINRT)
+  #define FSEEK fseek
+  #define FTELL ftell
+  #define FOPEN fopen
+  #define OFFSETTYPE(offset) (long)offset
+
+#elif defined(__APPLE__) || defined( __hpux )
+  #define FSEEK fseeko
+  #define FTELL ftello
+  #define FOPEN fopen
+  #define OFFSETTYPE(offset) offset
+#else
+  #define FSEEK fseeko64
+  #define FTELL ftello64
+  #define FOPEN fopen64
+  #define OFFSETTYPE(offset) offset
+#endif
+
+#if defined(__linux__) || defined(EMCC)
+
+#include <wctype.h> // towlower, towupper
+#if !defined(EMCC) && !defined(__clang__)
+#include <bits/stl_algobase.h>  // For std::swap (gcc 3.3 and 3.4)
+#endif
+#include <utility> // std::swap
+
+#ifndef wcsicmp
+#define wcsicmp wcscasecmp
+#endif
+
+#ifndef wcsnicmp
+#define wcsnicmp wcsncasecmp
+#endif
+
+#ifndef wcsupr
+inline wchar_t* wcsupr(wchar_t* s)
+{
+  if(!s)
+    return 0;
+  for(wchar_t* p = s; *p; ++p)
+    *p = towupper(*p);
+  return s;
+}
+#endif
+
+#ifndef wcslwr
+inline wchar_t* wcslwr(wchar_t* s)
+{
+  if(!s)
+    return 0;
+  for(wchar_t* p = s; *p; ++p)
+    *p = towlower(*p);
+  return s;
+}
+#endif
+#ifndef wcsrev
+inline wchar_t* wcsrev(wchar_t* s)
+{
+  if(!s)
+    return 0;
+  wchar_t* e = s + wcslen(s) - 1;
+  wchar_t* s_ = s;
+  while(s < e)
+  {
+    std::swap(*s, *e);
+    ++s;
+    --e;
+  }
+  return s_;
+}
+#endif
+
+#ifdef OD_STRING_FNS
+
+#ifndef stricmp
+#define stricmp Od_stricmpA
+#endif
+
+#ifndef strupr
+#define strupr Od_struprA
+#endif
+
+#ifndef strlwr
+#define strlwr Od_strlwrA
+#endif
+
+#ifndef strrev
+#define strrev Od_strrevA
+#endif
+
+#ifndef strnicmp
+#define strnicmp Od_strnicmpA
+#endif
+
+#endif //OD_STRING_FNS
+
+#endif //defined(__linux__) || defined(EMCC)
+
+#ifndef odStrICmp
+
+#if defined(_WINRT)
+#include <WinNls.h>
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return CompareStringEx( LOCALE_NAME_INVARIANT, NORM_IGNORECASE, (const wchar_t*)str, -1, (const wchar_t*)str2, -1, NULL, NULL, 0) - 2; }
+#elif defined(_WIN32) ||defined(_WIN64) || defined(_WIN32_WCE)
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return CompareStringW( LOCALE_NEUTRAL, NORM_IGNORECASE, (const wchar_t*)str, -1, (const wchar_t*)str2, -1) - 2; }
+#elif (defined ( __BORLANDC__ ) && (__BORLANDC__) >= 0x530) ||(defined(_MSC_VER) && _MSC_VER > 1200)
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return _wcsicmp(str, str2); }
+#else
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2){ return wcsicmp(str, str2); }
+#endif
+#define odStrICmp Od_stricmpW
+#endif
+
+#ifndef odStrICmpA
+#if defined(_WINRT)
+#define odStrICmpA(str, str2) _stricmp(str, str2)
+#else
+#define odStrICmpA(str, str2) stricmp(str, str2)
+#endif
+#endif
+
+#ifndef odStrnICmp
+#if defined(_WINRT)
+#include <WinNls.h>
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return CompareStringEx( LOCALE_NAME_INVARIANT, NORM_IGNORECASE, (const wchar_t*)str, (int)odmin(wcslen((const wchar_t*)str), n), (const wchar_t*)str2, (int)odmin(wcslen((const wchar_t*)str), n), NULL, NULL, 0) - 2; }
+#elif defined(_WIN32) ||defined(_WIN64) || defined(_WIN32_WCE)
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return CompareStringW( LOCALE_NEUTRAL, NORM_IGNORECASE, (const wchar_t*)str, (int)odmin(wcslen((const wchar_t*)str), n), (const wchar_t*)str2, (int)odmin(wcslen((const wchar_t*)str2), n))-2;}
+#elif (defined ( __BORLANDC__ ) && (__BORLANDC__) >= 0x530) || (defined(_MSC_VER) && _MSC_VER > 1200)
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return _wcsnicmp(str, str2, n);}
+#else
+inline int Od_stricmpW(const OdChar* str, const OdChar* str2, size_t n){ return wcsnicmp(str, str2, n);}
+#endif
+#define odStrnICmp Od_stricmpW
+#endif
+
+#ifndef odStrnICmpA
+#define odStrnICmpA(str, str2, n) strnicmp(str, str2, n)
+#endif
+
+
+#ifndef odStrUpr
+#if defined(ODA_WINDOWS) && !defined(_WINRT)
+inline OdChar* Od_struprW(OdChar* str){return (OdChar*)CharUpperW((wchar_t*)str);}
+#elif defined(_WINRT)
+inline OdChar* Od_struprW(OdChar* str){return (OdChar*)_wcsupr((wchar_t*)str);}
+#else
+inline OdChar* Od_struprW(OdChar* str){return (OdChar*)wcsupr((OdChar*)str);}
+#endif
+#define odStrUpr(str) Od_struprW(str)
+#endif
+
+#ifndef odStrUprA
+#define odStrUprA(str) strupr(str)
+#endif
+
+#ifndef odStrLwr
+#if defined(ODA_WINDOWS) && !defined(_WINRT)
+inline OdChar* Od_strlwrW(OdChar* str){return (OdChar*)CharLowerW((wchar_t*)str);}
+#elif defined (_WINRT)
+inline OdChar* Od_strlwrW(OdChar* str){return (OdChar*)_wcslwr((wchar_t*)str);}
+#else
+inline OdChar* Od_strlwrW(OdChar* str){return (OdChar*)wcslwr((OdChar*)str);}
+#endif
+#define odStrLwr(str) Od_strlwrW(str)
+#endif
+
+#ifndef odStrLwrA
+#define odStrLwrA(str) strlwr(str)
+#endif
+
+#ifndef odStrRev
+#if defined(ODA_WINDOWS)
+inline OdChar* Od_strrevW(OdChar* str) {return (OdChar*)_wcsrev((wchar_t*)str);}
+#else
+inline OdChar* Od_strrevW(OdChar* str) {return (OdChar*)wcsrev((wchar_t*)str);}
+#endif
+#define odStrRev(str) Od_strrevW(str)
+#endif
+
+#ifndef odStrRevA
+#define odStrRevA(str) strrev(str)
+#endif
+
+#ifndef odStrToInt
+inline long Od_strtoint(const OdChar* str){ return wcstol((const wchar_t*)str, 0, 10);}
+#define odStrToInt(str) Od_strtoint(str)
+#endif
+
+#ifndef odStrToUInt
+inline long Od_strtouint(const OdChar* str){ return wcstoul((const wchar_t*)str, 0, 10);}
+#define odStrToUInt(str) Od_strtouint(str)
+#endif
+
+#if (defined(sgi) || defined(_AIX) || defined(sparc)) && !defined(__GNUC__)
+#define TD_NEED_SWFNS
+#endif
+#if defined(TD_NEED_SWFNS) || defined(__APPLE__) || defined(EMCC)// #7324
+#define TD_NEED_SWFNS_SCANF
+#endif
+#if defined(TD_NEED_SWFNS) || defined(__APPLE__) || defined(__hpux) || defined(ANDROID) || defined(EMCC)// #7324 & #8357 & #9786
+#define TD_NEED_SWFNS_PRINTF
+#endif
+
+#ifndef odSScanf
+  #if defined(TD_NEED_SWFNS_SCANF)
+    #ifdef ANDROID_WCHAR
+      #include "../../ThirdParty/wchar/wchar_.h"
+    #else
+      #include <wchar.h>
+    #endif
+    #include <stdio.h>
+    #include <stdarg.h>
+    #include <string>
+    FIRSTDLL_EXPORT int Od_vswscanfV(const wchar_t* buffer, const wchar_t* lpszFormat, va_list argList);
+    inline int ddswscanf(const wchar_t* buffer, const wchar_t* format, ...)
+    {
+      va_list argList;
+      va_start(argList, format);
+      int count = Od_vswscanfV(buffer, format, argList);
+      va_end(argList);
+      return count;
+    }
+    #define odSScanf ddswscanf
+  #else
+    #if defined(_WINRT)
+      #define odSScanf swscanf_s
+    #else
+      #define odSScanf swscanf
+    #endif
+  #endif
+#endif
+
+#ifndef odSprintf
+  #if defined(ODA_WINDOWS)
+    #define odSprintf _snwprintf
+  #elif defined(TD_NEED_SWFNS_PRINTF)
+    #include <stdio.h>
+    #include <stdarg.h>
+    #include <string>
+    extern std::wstring Od_vswprintfV(const wchar_t* lpszFormat, va_list argList);
+    inline int ddswprintf(wchar_t *buffer, size_t count, const wchar_t *format, ...)
+    {
+      va_list argList;
+      va_start(argList, format);
+      std::wstring ws = Od_vswprintfV(format, argList);
+      va_end(argList);
+      int toCopy = ws.length() < count - 1 ? ws.length() : count - 1;
+      Od_wcsncpy(buffer, ws.c_str(), toCopy);
+      buffer[toCopy] = '\0';
+      return 0;
+    }
+    #define odSprintf ddswprintf
+  #else
+    #define odSprintf swprintf
+  #endif
+#endif
+
+#ifndef odSprintfA
+  #if defined(ODA_WINDOWS)
+    #define odSprintfA _snprintf
+  #else
+    #define odSprintfA snprintf
+  #endif
+#endif
+
+#ifndef odStrToF
+#if defined (ODA_WINDOWS)
+#define odStrToF _wtof
+#else
+#include <wchar.h>
+inline double Od_wtof(const wchar_t* str)
+{
+  wchar_t *endptr = 0;
+  return wcstod(str, &endptr);
+}
+#define odStrToF Od_wtof
+#endif
+#endif
+
+
+#ifndef OD_TYPENAME
+#define OD_TYPENAME
+#endif
+
+#ifndef OD_TYPENAME2
+#define OD_TYPENAME2
+#endif
+
+#ifndef OD_TYPENAME3
+#define OD_TYPENAME3
+#endif
+
+#ifndef OD_BSEARCH
+#define OD_BSEARCH ::bsearch
+#endif
+
+#ifndef TD_USING
+#define TD_USING(a) using a
+#endif
+
+#ifndef OD_LINKEDARRAY_SCOPE
+#define OD_LINKEDARRAY_SCOPE
+#endif
+
+#ifndef odStrStr 
+  #ifdef TD_NEED_WCSSTR
+    // This is missing on some older HP compiler versions.
+    extern wchar_t *wcsstr(const wchar_t* wcs1, const wchar_t* wcs2);
+  #endif
+  #define odStrStr ::wcsstr
+#endif
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+#define OD_MAKEWORD(a, b)      ((OdUInt16)(((OdUInt8)(a)) | ((OdUInt16)((OdUInt8)(b))) << 8))
+#define OD_MAKELONG(a, b)      ((OdInt32)(((OdUInt16)(a)) | ((OdUInt32)((OdUInt16)(b))) << 16))
+#define OD_LOWORD(l)           ((OdUInt16)(l))
+#define OD_HIWORD(l)           ((OdUInt16)(((OdUInt32)(l) >> 16) & 0xFFFF))
+#define OD_LOBYTE(w)           ((OdUInt8)(w))
+#define OD_HIBYTE(w)           ((OdUInt8)(((OdUInt16)(w) >> 8) & 0xFF))
+
+inline void odSwapBytes(OdUInt8& xX, OdUInt8& yY) { xX ^= yY; yY ^= xX; xX ^= yY; }
+inline void odSwapWords(OdUInt16& xX, OdUInt16& yY) { xX ^= yY; yY ^= xX; xX ^= yY; }
+
+#ifdef ODA_BIGENDIAN
+
+inline void odSwap2BytesNumber(OdUInt16& W)
+{
+  odSwapBytes(((OdUInt8*)&(W))[0], ((OdUInt8*)&(W))[1]);
+}
+
+inline void odSwap2BytesNumber(OdInt16& W) 
+{ 
+  odSwapBytes(((OdUInt8*)&(W))[0], ((OdUInt8*)&(W))[1]); 
+}
+
+inline void odSwap4BytesNumber(OdUInt32& DW)
+{
+  odSwapWords(((OdUInt16*)&(DW))[0], ((OdUInt16*)&(DW))[1]);
+  odSwapBytes(((OdUInt8*)&(DW))[0], ((OdUInt8*)&(DW))[1]);
+  odSwapBytes(((OdUInt8*)&(DW))[2], ((OdUInt8*)&(DW))[3]);
+}
+
+inline void odSwap4BytesNumber(OdInt32& DW)
+{
+  // NOTE: Using above unsigned version on AIX results in runtime errors.
+  // Macro version also causes errors on AIX.
+  OdInt8* p = (OdInt8*)&DW;
+  OdInt8 tmp;
+  tmp = p[0]; p[0] = p[3]; p[3] = tmp;
+  tmp = p[1]; p[1] = p[2]; p[2] = tmp;
+}
+
+inline void odSwap8Bytes(void* pBytes)
+{
+  odSwapBytes(((OdUInt8*)(pBytes))[0], ((OdUInt8*)(pBytes))[7]);
+  odSwapBytes(((OdUInt8*)(pBytes))[1], ((OdUInt8*)(pBytes))[6]);
+  odSwapBytes(((OdUInt8*)(pBytes))[2], ((OdUInt8*)(pBytes))[5]);
+  odSwapBytes(((OdUInt8*)(pBytes))[3], ((OdUInt8*)(pBytes))[4]);
+}
+
+inline void odSwap4Bytes(void* pBytes)
+{
+  odSwapBytes(((OdUInt8*)(pBytes))[0], ((OdUInt8*)(pBytes))[3]);
+  odSwapBytes(((OdUInt8*)(pBytes))[1], ((OdUInt8*)(pBytes))[2]);
+}
+
+#define odSwapInt64(n)
+
+#else
+
+#define odSwap2BytesNumber(n)
+#define odSwap4BytesNumber(n)
+#define odSwap8Bytes(bytes)
+#define odSwap4Bytes(bytes)
+
+inline void odSwapInt64(void* pBytes)
+{
+  odSwapBytes(((OdUInt8*)(pBytes))[0], ((OdUInt8*)(pBytes))[7]);
+  odSwapBytes(((OdUInt8*)(pBytes))[1], ((OdUInt8*)(pBytes))[6]);
+  odSwapBytes(((OdUInt8*)(pBytes))[2], ((OdUInt8*)(pBytes))[5]);
+  odSwapBytes(((OdUInt8*)(pBytes))[3], ((OdUInt8*)(pBytes))[4]);
+}
+
+#endif // ODA_BIGENDIAN
+
+/** \details
+  Checks if 8 bytes buffer represents a valid non-zero IEEE double value.
+  (In this format doubles are stored in .dwg files.)
+*/
+inline bool isValidNonZeroIEEEDouble(const OdUInt8 * buf)
+{
+#ifdef ODA_BIGENDIAN
+  int nExponent = (buf[0] & 0x7F) << 4 | (buf[1] & 0xF0) >> 4;
+#else
+  int nExponent = (buf[7] & 0x7F) << 4 | (buf[6] & 0xF0) >> 4;
+#endif
+  switch (nExponent)
+  {
+  case 0:     // The value is zero or possibly denormalized
+  case 2047:  // -INF, +INF or Nan
+    return false;
+  }
+  return true;
+}
+
+inline void fixDouble(double * pD)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  odSwap8Bytes(pD);
+  if (!isValidNonZeroIEEEDouble((OdUInt8 *)pD))
+  { // if unnormalized or NaN or infinity, set it to 0.0
+    //*pD = 0.;
+    ::memset((void*)pD, 0, sizeof(double)); // Support TD_STRICT_ALIGNMENT (#8352)
+  }
+}
+
+
+#define OD_INT8_FROM_BUFFPTR(pBuffPtr) *(pBuffPtr++)
+
+inline OdUInt64 OD_INT64_FROM_BUFFPTR(const OdUInt8 *pBuffPtr)
+{
+  OdUInt32 low(*pBuffPtr++);
+  low |= ((OdUInt32)*pBuffPtr++) << 8;
+  low |= ((OdUInt32)*pBuffPtr++) << 16;
+  low |= ((OdUInt32)*pBuffPtr++) << 24;
+
+  OdUInt32 high(*pBuffPtr++);
+  high |= ((OdUInt32)*pBuffPtr++) << 8;
+  high |= ((OdUInt32)*pBuffPtr++) << 16;
+  high |= ((OdUInt32)*pBuffPtr++) << 24;
+
+  OdUInt64 res(high);
+  res <<= 32;
+  res |= low;
+  return res;
+}
+
+#define OD_BYTES_FROM_BUFFPTR(pBuffPtr, ResBuff, nCount) (pBuffPtr+=nCount, ::memcpy(ResBuff, pBuffPtr-nCount, nCount))
+
+#define OD_INT8_TO_BUFFPTR(pBuffPtr, val) (++pBuffPtr, pBuffPtr[-1] = OdUInt8(val))
+#define OD_BYTES_TO_BUFFPTR(pBuffPtr, FromBuff, nCount) (pBuffPtr+=nCount, ::memcpy(pBuffPtr-nCount, FromBuff, nCount))
+
+
+
+#ifndef ODA_BIGENDIAN
+
+#ifdef TD_STRICT_ALIGNMENT
+
+extern double getStrictDouble(OdUInt8** ppBuff);
+extern void setStrictDouble(OdUInt8** ppBuff, double d);
+extern void setStrictInt16(OdUInt8** ppBuff, OdInt16 val);
+extern void setStrictInt32(OdUInt8** ppBuff, OdInt32 val);
+extern void setStrictInt64(OdUInt8** ppBuff, OdInt64 val);
+
+#define OD_INT16_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 2,   (OdInt16)(   *(pBuffPtr - 2)          \
+                                                                    | (*(pBuffPtr - 1) << 8)))
+#define OD_INT32_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 4,   (OdInt32)(   *(pBuffPtr - 4)          \
+                                                                    | (*(pBuffPtr - 3) << 8)    \
+                                                                    | (*(pBuffPtr - 2) << 16)   \
+                                                                    | (*(pBuffPtr - 1) << 24)))
+
+#define OD_INT64_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 8,   (OdInt64)(   *(pBuffPtr - 8)          \
+                                                                    | (OdInt64(*(pBuffPtr - 7)) << 8)    \
+                                                                    | (OdInt64(*(pBuffPtr - 6)) << 16)   \
+                                                                    | (OdInt64(*(pBuffPtr - 5)) << 24)   \
+                                                                    | (OdInt64(*(pBuffPtr - 4)) << 32)   \
+                                                                    | (OdInt64(*(pBuffPtr - 3)) << 40)   \
+                                                                    | (OdInt64(*(pBuffPtr - 2)) << 48)   \
+                                                                    | (OdInt64(*(pBuffPtr - 1)) << 56)))
+
+#define OD_DOUBLE_FROM_BUFFPTR(pBuffPtr) getStrictDouble(&pBuffPtr)
+
+#define OD_INT16_TO_BUFFPTR(pBuffPtr, val) setStrictInt16(&pBuffPtr, val)
+#define OD_INT32_TO_BUFFPTR(pBuffPtr, val) setStrictInt32(&pBuffPtr, val)
+#define OD_INT64_TO_BUFFPTR(pBuffPtr, val) setStrictInt64(&pBuffPtr, val)
+
+#define OD_DOUBLE_TO_BUFFPTR(pBuffPtr, val) setStrictDouble(&pBuffPtr, val)
+
+
+#else
+
+inline double getValidDouble(OdUInt8** ppBuff)
+{
+  double d = isValidNonZeroIEEEDouble(*ppBuff) ? *((double*)(*ppBuff)) : 0.0;
+  *ppBuff+=8;
+  return d;
+}
+
+#define OD_INT16_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 2, *((OdInt16*)(pBuffPtr - 2)))
+#define OD_INT32_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 4, *((OdInt32*)(pBuffPtr - 4)))
+#define OD_INT64_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 8, *((OdInt64*)(pBuffPtr - 8)))
+
+#define OD_DOUBLE_FROM_BUFFPTR(pBuffPtr) getValidDouble(&pBuffPtr)
+//#define OD_POINT3D_FROM_BUFFPTR(pBuffPtr) (pBuffPtr+=24, *((OdGePoint3d*)(pBuffPtr-24)))
+
+#define OD_INT16_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=2, *((OdInt16*)(pBuffPtr-2)) = OdInt16(val))
+#define OD_INT32_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=4, *((OdInt32*)(pBuffPtr-4)) = OdInt32(val))
+#define OD_INT64_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=8, *((OdInt64*)(pBuffPtr-8)) = OdInt64(val))
+
+#define OD_DOUBLE_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=8, *((double*)(pBuffPtr-8)) = double(val))
+//#define OD_POINT3D_TO_BUFFPTR(pBuffPtr, val) (pBuffPtr+=24, *((OdGePoint3d*)(pBuffPtr-24)) = val)
+
+#endif // TD_STRICT_ALIGNMENT
+
+
+#else
+
+
+extern double getBeDouble(OdUInt8** ppBuff);
+//extern OdGePoint3d getBePnt3d(OdUInt8** ppBuff);
+extern void setStrictInt16(OdUInt8** ppBuff, OdInt16 val);
+extern void setStrictInt32(OdUInt8** ppBuff, OdInt32 val);
+extern void setStrictInt64(OdUInt8** ppBuff, OdInt64 val);
+extern void setBeDouble(OdUInt8** ppBuff, double d);
+//extern void setBePnt3(OdUInt8** ppBuff, const OdGePoint3d& p);
+
+
+// SGI doesn't like these versions.
+//#define OD_INT16_FROM_BUFFPTR(pBuffPtr) ((OdInt16)(*pBuffPtr++ | (*pBuffPtr++ << 8)))
+//#define OD_INT32_FROM_BUFFPTR(pBuffPtr) ((OdInt32)(*pBuffPtr++ | (*pBuffPtr++ << 8) | (*pBuffPtr++ << 16) | (*pBuffPtr++ << 24)))
+// So use these instead
+#define OD_INT16_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 2, (OdInt16)(   *(pBuffPtr - 2)          \
+                                                                  | (*(pBuffPtr - 1) << 8)))
+#define OD_INT32_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 4, (OdInt32)(   *(pBuffPtr - 4)          \
+                                                                  | (*(pBuffPtr - 3) << 8)    \
+                                                                  | (*(pBuffPtr - 2) << 16)   \
+                                                                  | (*(pBuffPtr - 1) << 24)))
+#define OD_INT64_FROM_BUFFPTR(pBuffPtr) (pBuffPtr += 8, (OdInt64)(   *(pBuffPtr - 8)          \
+                                                                  | (((OdInt64)(*(pBuffPtr - 7))) << 8)    \
+                                                                  | (((OdInt64)(*(pBuffPtr - 6))) << 16)   \
+                                                                  | (((OdInt64)(*(pBuffPtr - 5))) << 24)   \
+                                                                  | (((OdInt64)(*(pBuffPtr - 4))) << 32)   \
+                                                                  | (((OdInt64)(*(pBuffPtr - 3))) << 40)   \
+                                                                  | (((OdInt64)(*(pBuffPtr - 2))) << 48)   \
+                                                                  | (((OdInt64)(*(pBuffPtr - 1))) << 56)))
+
+#define OD_DOUBLE_FROM_BUFFPTR(pBuffPtr) getBeDouble(&pBuffPtr)
+//#define OD_POINT3D_FROM_BUFFPTR(pBuffPtr) getBePnt3d(&pBuffPtr)
+
+#define OD_INT16_TO_BUFFPTR(pBuffPtr, val) setStrictInt16(&pBuffPtr, val)
+#define OD_INT32_TO_BUFFPTR(pBuffPtr, val) setStrictInt32(&pBuffPtr, val)
+#define OD_INT64_TO_BUFFPTR(pBuffPtr, val) setStrictInt64(&pBuffPtr, val)
+
+#define OD_DOUBLE_TO_BUFFPTR(pBuffPtr, val) setBeDouble(&pBuffPtr, val)
+//#define OD_POINT3D_TO_BUFFPTR(pBuffPtr, val) setBePnt3(&pBuffPtr, val)
+
+#endif // ODA_BIGENDIAN
+
+
+#if defined(ODA_WINDOWS)
+#include "WINDOWS.H"
+#include "WINGDI.H"
+#endif
+
+#if defined(_WIN32) && !defined(WIN64) && !defined(_WINRT)
+// COLORREF on WIN64 is 8 bytes
+#define ODCOLORREF COLORREF
+#define ODRGB(r,g,b) RGB(r,g,b)
+#define ODRGBA(r,g,b,a) (((ODCOLORREF)ODRGB(r,g,b))|(((DWORD)(BYTE)(a))<<24))
+#define ODGETRED(rgb) GetRValue(rgb)
+#define ODGETGREEN(rgb) GetGValue(rgb)
+#define ODGETBLUE(rgb) GetBValue(rgb)
+#define ODGETALPHA(rgba) ((BYTE)((rgba)>>24))
+#define ODRECT RECT
+
+#else //#ifdef _WIN32
+
+#define ODCOLORREF OdUInt32
+#define ODRGB(r,g,b) ((ODCOLORREF)(((OdUInt8)(r)|((OdUInt16)((OdUInt8)(g))<<8))|(((OdUInt32)(OdUInt8)(b))<<16)))
+#define ODRGBA(r,g,b,a) (((ODCOLORREF)ODRGB(r,g,b))|(((OdUInt32)(OdUInt8)(a))<<24))
+
+#define ODGETRED(rgb)     ((OdUInt8)(rgb))
+#define ODGETGREEN(rgb)   ((OdUInt8)(((OdUInt16)(rgb)) >> 8))
+#define ODGETBLUE(rgb)    ((OdUInt8)((rgb)>>16))
+#define ODGETALPHA(rgba)  ((OdUInt8)((rgba)>>24))
+
+typedef struct OdTagRECT{
+  OdInt32 left;
+  OdInt32 top;
+  OdInt32 right;
+  OdInt32 bottom;
+} ODRECT;
+
+#if !defined(WIN64) || defined(_WINRT)
+
+#if !defined(_WINRT)
+#ifndef RGBQUAD_DEFINED
+#define RGBQUAD_DEFINED
+#if defined(__sun)
+#pragma pack(2)
+#else
+#pragma pack(push,2)
+#endif
+/** \details
+  <group !!RECORDS_TD_APIRef>
+*/
+      typedef struct tagRGBQUAD 
+{
+  OdUInt8  rgbBlue;
+  OdUInt8  rgbGreen;
+  OdUInt8  rgbRed;
+  OdUInt8  rgbReserved;
+} RGBQUAD, *LPRGBQUAD;
+#if defined(__sun)
+#pragma pack()
+#else
+#pragma pack(pop)
+#endif
+#endif
+
+#ifndef BITMAPINFOHEADER_DEFINED
+#define BITMAPINFOHEADER_DEFINED
+/** \details
+  <group !!RECORDS_TD_APIRef>
+*/
+#if defined(__sun)
+#pragma pack(2)
+#else
+#pragma pack(push,2)
+#endif
+
+typedef struct tagBITMAPINFOHEADER {
+  OdUInt32  biSize;
+  OdInt32   biWidth;
+  OdInt32   biHeight;
+  OdUInt16  biPlanes;
+  OdUInt16  biBitCount;
+  OdUInt32  biCompression;
+  OdUInt32  biSizeImage;
+  OdInt32   biXPelsPerMeter;
+  OdInt32   biYPelsPerMeter;
+  OdUInt32  biClrUsed;
+  OdUInt32  biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
+
+#if defined(__sun)
+#pragma pack()
+#else
+#pragma pack(pop)
+#endif
+
+#endif
+
+#ifndef BITMAPINFO_DEFINED
+#define BITMAPINFO_DEFINED
+typedef struct tagBITMAPINFO { 
+  BITMAPINFOHEADER bmiHeader; 
+  RGBQUAD          bmiColors[1];
+} BITMAPINFO, *PBITMAPINFO;
+
+#endif //BITMAPINFO_DEFINED
+
+#endif //_WINRT
+#ifndef BITMAPFILEHEADER_DEFINED
+#define BITMAPFILEHEADER_DEFINED
+#if defined(__sun)
+#pragma pack(2)
+#else
+#pragma pack(push,2)
+#endif
+/** \details
+  <group !!RECORDS_TD_APIRef>
+*/
+      typedef struct tagBITMAPFILEHEADER 
+{
+  OdUInt16 bfType;
+  OdUInt32 bfSize;
+  OdUInt16 bfReserved1;
+  OdUInt16 bfReserved2;
+  OdUInt32 bfOffBits;
+} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
+#if defined(__sun)
+#pragma pack()
+#else
+#pragma pack(pop)
+#endif
+#endif
+
+#endif //#ifndef WIN64
+#endif //#ifdef _WIN32
+
+#ifndef ODA_WINDOWS
+#ifndef CLSID
+#define CLSID OdGUID
+#endif
+#endif
+
+#define ODTOCMCOLOR(colorref) OdCmEntityColor( ODGETRED(colorref), ODGETGREEN(colorref), ODGETBLUE(colorref) )
+#define ODTOCOLORREF(cmColor) ODRGB( cmColor.red(), cmColor.green(), cmColor.blue() )
+
+//////////////////////////////////////////////////////////////////////////
+//  IR.111706. MacOS X dynamic library loading.
+//  Some code taken from Dlcompat open source library.
+//  www.opendarwin.org/projects/dlcompat/
+
+#if defined(_TOOLKIT_IN_DLL_) && defined(__GNUC__) && defined(__APPLE__) // GNU compiler MacOS X
+
+#include <mach-o/dyld.h>
+
+#   ifndef RTLD_LAZY
+#     define RTLD_LAZY	0x1
+#   endif
+#   ifndef RTLD_NOW
+#     define RTLD_NOW	0x2
+#   endif
+#   ifndef RTLD_LOCAL
+#     define RTLD_LOCAL	0x4
+#   endif
+#   ifndef RTLD_GLOBAL
+#     define RTLD_GLOBAL	0x8
+#   endif
+#   ifndef RTLD_NOLOAD
+#     define RTLD_NOLOAD	0x10
+#   endif
+#   ifndef RTLD_NODELETE
+#     define RTLD_NODELETE	0x80
+#   endif
+
+class OdString;
+void* LoadSharedLibrary(const OdString& path, int mode = 2);
+void *GetFunction(void *handle, char *symbol);
+bool FreeSharedLibrary(void *handle);
+
+#endif //defined(__GNUC__) && defined(__APPLE__) // GNU compiler MacOS X
+
+#if defined(_TOOLKIT_IN_DLL_) && defined(__GNUC__) && !defined(__APPLE__) // GNU compiler Linux
+
+#include <dlfcn.h>
+
+#endif // defined(_TOOLKIT_IN_DLL_) && defined(__GNUC__) && !defined(__APPLE__) // GNU  compiler Linux
+
+#include <time.h>
+
+size_t od_strftime(char *s, size_t maxsize, const char *format, const struct tm *t);
+
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif // _OD_PLATFORM_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformSettings.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformSettings.h
new file mode 100755
index 0000000..8cbacc0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformSettings.h
@@ -0,0 +1,875 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _OD_PLATFORM_SETTINGS_H_
+#define _OD_PLATFORM_SETTINGS_H_
+
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#define TD_UNICODE
+
+
+#if defined(_MSC_VER)
+// warning C4290: C++ Exception Specification ignored
+#pragma warning ( disable : 4290 )
+// warning C4514: ... : unreferenced inline function has been removed
+#pragma warning ( disable : 4514 )
+// identifier was truncated to '255' characters in the debug information
+#pragma warning ( disable : 4786 )
+// class 'NAME' needs to have dll-interface to be used by clients of class NAME
+#pragma warning ( disable : 4251 )
+// copy constructor could not be generated
+#pragma warning ( disable : 4511 ) 
+// assignment operator could not be generated
+#pragma warning ( disable : 4512 ) 
+// alignment changed after including header
+#pragma warning ( disable : 4103 ) 
+
+#if _MSC_VER == 1900
+// declaration of local variable hides previous local declaration
+#pragma warning ( disable : 4456)
+// declaration of local variable hides function parameter
+#pragma warning ( disable : 4457)
+//
+#pragma warning ( disable : 4458)
+
+#endif
+
+#if _MSC_VER < 1600
+#define NO_SHARED_PTR
+#endif
+
+#ifndef _DEBUG
+#pragma warning ( disable : 4100 ) // unreferenced formal parameter
+#pragma warning ( disable : 4702 ) // unreachable code
+#pragma warning ( disable : 4710 ) // not inlined
+#endif
+
+#define ODRX_ABSTRACT __declspec(novtable)
+
+#if (_MSC_VER > 1310)
+/*!DOM*/
+#define ODRX_OVERRIDE override
+/*!DOM*/
+#define ODRX_SEALED sealed
+/*!DOM*/
+#define ODRX_SEALED_VIRTUAL virtual
+#pragma warning ( disable : 4481 ) // nonstandard extension used: override specifier 'sealed'
+#else
+/*!DOM*/
+#define ODRX_OVERRIDE
+/*!DOM*/
+#define ODRX_SEALED
+/*!DOM*/
+#define ODRX_SEALED_VIRTUAL
+#endif 
+
+#else
+
+#define ODRX_ABSTRACT
+#define ODRX_OVERRIDE
+#define ODRX_SEALED
+#define ODRX_SEALED_VIRTUAL
+
+#endif  // _MSC_VER
+
+#define TD_FUNC __FUNCTION__
+
+#ifdef _MSC_VER                                    ///////////////////////// Microsoft Visual C++
+
+  #define ODA_WINDOWS
+  //#define TD_USING(a)
+  #if _MSC_VER <= 1200  
+    #undef TD_FUNC
+    #define TD_FUNC OD_T("")
+  #endif
+
+  #if _MSC_VER > 1200  //&& !defined(_WIN32_WCE) // || _MSC_VER = 1   // 1200 == VC6
+    #define OD_TYPENAME typename
+    #define OD_STD_ALLOCATOR_AS_IS
+  #endif
+
+  #if _MSC_VER >= 1400
+    #pragma warning ( disable : 4996 )
+    #ifndef _CRT_SECURE_NO_DEPRECATE
+      #define _CRT_SECURE_NO_DEPRECATE
+    #endif
+  #endif
+
+  #if defined(_IA64_)
+    #define TD_STRICT_ALIGNMENT
+  #endif
+
+  #if defined(_WIN32_WCE)  ///////////////////////// Windows CE
+
+    #define OD_TYPENAME typename
+    #define OD_STRING_FNS
+    #define OD_NO_GETENV
+
+    extern void *bsearch(const void *key, const void *base, size_t numeles, size_t widthele, int(__cdecl *cfunc)(const void *elem1, const void *elem2));
+
+    #ifdef ARM
+      #define TD_STRICT_ALIGNMENT
+    #endif // ARM
+
+  #define OD_USE_STD_LIST
+  #define OD_HAVE_PATHFILEEXISTS_FUNC
+  #define OD_HAVE_GETFILEATTRIBUTES_FUNC
+  #define OD_HAVE_SHLWAPI_FILE
+  #define OD_HAVE_MEM_H_FILE
+
+  #define OD_NONEED_ALLOC_REDEFINITION
+  #define _IOFBF          0x0000
+  #endif // _WIN32_WCE
+
+  #if defined(_WINRT)
+    #define OD_NO_GETENV
+    #ifdef ARM
+      #define TD_STRICT_ALIGNMENT
+    #endif //ARM
+    #define OD_HAVE_WINDOWS_STORAGE_FILE
+    #define OD_HAVE_WRL_FILE
+    #define OD_BUILD_EXE_AS_LIBRARY
+    #define OD_NEED_S_ISDIR_FUNC
+
+    #define GetDateFormat(lpLocaleName, dwFlags, lpDate, lpFormat, lpDateStr, cchDate) GetDateFormatEx(lpLocaleName, dwFlags, lpDate, lpFormat, lpDateStr, cchDate, NULL)
+    #define GetTimeFormat(Locale, dwFlags, lpTime, lpFormat, lpTimeStr, cchTime) GetTimeFormatEx(Locale, dwFlags, lpTime, lpFormat, lpTimeStr, cchTime)
+
+    #define access _access
+    #define R_OK 04
+    #define W_OK 02
+  #endif // _WINRT
+
+
+  #ifndef _WIN32_WCE
+    // Available functoinality
+    #define OD_HAVE_WSTAT_FUNC
+    #define OD_HAVE_SETLOCALE_FUNC
+    #define OD_HAVE_PRINT_FUNC
+    #define OD_HAVE_REMOVE_FUNC
+    // Available header files
+    #define OD_HAVE_WINSPOOL_FILE
+    #define OD_HAVE_FSTREAM_FILE
+    #define OD_HAVE_SSTREAM_FILE
+    #define OD_HAVE_IO_FILE
+    #define OD_HAVE_SYS_STAT_FILE
+    #define OD_HAVE_SYS_TYPES_FILE
+    #define OD_HAVE_IOMANIP_FILE
+    #define OD_HAVE_ERROR_FILE
+    #define OD_HAVE_TIME_FILE
+
+    #define ODA_USE_FTIME
+  #endif //_WIN32_WCE
+
+  #ifndef _WINRT
+    #define OD_HAVE_FINDFIRSTFILE_FUNC
+    #define OD_HAVE_MATH_FILE
+    #define OD_HAVE_OLE_ITEM_HANDLER_MODULE
+
+    #ifndef RC_INVOKED // prevent RC4011 warning
+      #define OD_HAS_OPENGL
+      #define OD_HAS_GDI
+      #define OD_HAS_GLES2
+    #endif // !RC_INVOKED
+  #endif // _WINRT
+
+  #if !defined(_WIN32_WCE) && !defined(_WINRT)
+    #define OD_HAVE_GETSTDHANDLE_FUNC
+    #define OD_WINDOWS_DESKTOP
+    #define OD_HAS_DIRECTX
+  #endif
+
+  #define OD_HAVE_WINDOWS_FILE
+  #define OD_HAVE_DIRECT_FILE
+  #define OD_LOGB _logb
+
+#elif defined(__sun)                               ///////////////////////// Solaris
+
+  #define TD_STRICT_ALIGNMENT
+  #define OD_STRING_FNS
+  #define OD_STD_ALLOCATOR
+  #define ODA_UNIXOS
+
+  #ifndef __GNUC__
+    #undef TD_FUNC
+    #define TD_FUNC OD_T("")
+  #else
+    #ifdef CS
+      #undef CS
+    #endif
+    #define OD_USE_STD_LIST
+  #endif
+  
+  #define OD_TYPENAME typename
+
+  #ifndef __GNUC__
+    #define OD_TYPENAME2 typename
+    #define OD_LINKEDARRAY_SCOPE OdLinkedArray<T, A>::
+    #define OD_HAVE_SPECIFIC_DISTANCE_FUNC
+  #endif
+
+  #if defined(sparc)
+    #define ODA_BIGENDIAN
+  #endif
+
+  #if defined(__GNUC__)
+    #define TD_USING(a) using a
+    #define ODA_NEED_TEMP_USING
+    #define OD_SUN_GCC
+  #endif
+
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_CLOCALE_FILE
+  #define OD_HAVE_FUNCTIONAL_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_RESOURCE_FILE
+  // Available finctionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define ODA_USE_FTIME
+#elif defined(ANDROID)
+
+  #if defined(__arm__)
+    #define TD_STRICT_ALIGNMENT
+  #endif // ARM
+  #define OD_STRING_FNS
+  #define OD_TYPENAME typename
+  #define ODA_UNIXOS
+  #define ODA_NEED_TEMP_USING
+  #define OD_STD_ALLOCATOR_AS_IS
+  #define OD_NO_TMPDIR
+
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_RESOURCE_FILE
+  // Available finctionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_HAS_OPENGL
+  #define OD_HAS_GLES2
+
+  #define OD_BUILD_EXE_AS_LIBRARY
+  #define ODA_USE_FTIME
+#elif defined(__APPLE__) && defined(__GNUC__)    ///////////////////////// Mac OS/X
+
+  #ifdef __IPHONE_OS_VERSION_MIN_REQUIRED        // iOS devices require aligned doubles
+    #define TD_STRICT_ALIGNMENT
+    #define OD_BUILD_EXE_AS_LIBRARY
+  #endif
+
+  #define OD_STRING_FNS
+
+  #if defined(__BIG_ENDIAN__) || !defined(__LITTLE_ENDIAN__)
+    #define ODA_BIGENDIAN
+  #endif
+  #define OD_TYPENAME typename
+  #define ODA_UNIXOS
+  #define ODA_NEED_TEMP_USING
+  #define OD_STD_ALLOCATOR_AS_IS
+  #define OD_CONVERT_UNICODETOUTF8
+
+  #define ODA_COLLECT_TTF_FONTS_IN_DRAWING_FOLDER
+  #define ODA_LINKED_WITH_FRAMEWORK_FONDATION
+  // Available functionality
+  #define OD_HAVE_UUID_FUNC
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_NEED_ADDITIONAL_OUTPUT
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_UUID_UUID_FILE
+  #define OD_HAVE_DLFCN_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_RESOURCE_FILE
+
+  #define OD_HAS_OPENGL
+  #define OD_HAS_GLES2
+
+  #define ODA_USE_FTIME
+#elif defined(sgi)                                 ///////////////////////// SGI
+
+  #define OD_STRING_FNS
+  #define ODA_BIGENDIAN
+  #define OD_STD_ALLOCATOR
+  #ifdef ODA_SGI_721 
+    #define OD_TYPENAME 
+  #else 
+    #define OD_TYPENAME typename 
+  #endif 
+  #define ODA_UNIXOS
+  #undef TD_FUNC
+  #define TD_FUNC OD_T("")
+
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_RESOURCE_FILE
+  // Available finctionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_REDEFINE_HEAP_OPERATORS
+  #define ODA_USE_FTIME
+#elif defined(__hpux)                              ///////////////////////// HP RISC/Itanium
+
+  #define TD_STRICT_ALIGNMENT
+  #define OD_STRING_FNS
+  #define ODA_BIGENDIAN
+  #define OD_STD_ALLOCATOR
+  #define ODA_NEED_TEMP_USING
+  #define ODA_FORMAT
+  #define ODA_UNIXOS
+
+  // Requires typename keyword in some contexts, which are illegal with other compilers.
+  #define OD_TYPENAME typename
+
+  #define TD_USING(a) using a;
+
+  #define OD_REDEFINE_STD 1
+  #define OD_USING_BUGWARE 1
+
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_FUNCTIONAL_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_RESOURCE_FILE
+  // Available finctionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_REDEFINE_HEAP_OPERATORS
+  #define ODA_USE_FTIME
+#elif defined(_AIX)                                //////////////////////// IBM AIX
+
+  #define OD_STRING_FNS
+  #define ODA_BIGENDIAN
+  #define OD_STD_ALLOCATOR_AS_IS
+  #define ODA_NEED_TEMP_USING
+  // Requires typename keyword in some contexts, which are illegal with other compilers.
+  #define OD_TYPENAME typename
+  #define OD_TYPENAME3 typename
+  #define ODA_UNIXOS
+
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_RESOURCE_FILE
+  // Available finctionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_REDEFINE_HEAP_OPERATORS
+  #define ODA_USE_FTIME
+#elif defined(__BCPLUSPLUS__)|| defined(__BORLANDC__) //////////////////////// Borland C++
+  #define ODA_WINDOWS
+  #undef TD_FUNC
+  #define TD_FUNC __FUNC__
+
+  #define OD_STD_ALLOCATOR_AS_IS
+  #define ODA_GCC_2_95
+  #define OD_BSEARCH std::bsearch
+  #define OD_LOGB _logb
+
+  // Available finctionality
+  #define OD_HAVE_WSTAT_FUNC
+  #define OD_HAVE_FINDFIRSTFILE_FUNC
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+  // Available header files
+  #define OD_HAVE_IO_FILE
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_WINDOWS_FILE
+
+  #define OD_HAVE_GETSTDHANDLE_FUNC
+  #define OD_WINDOWS_DESKTOP
+
+  #define OD_HAVE_OLE_ITEM_HANDLER_MODULE
+
+  #define OD_HAS_OPENGL
+  #define OD_HAS_GDI
+  #define OD_HAS_GLES2
+
+  #define ODA_USE_FTIME
+#elif defined(__linux__)|| defined(__FreeBSD__)  || defined(__MVS__)
+
+  #define OD_STRING_FNS
+  #define OD_TYPENAME typename
+  #define ODA_UNIXOS
+  #define ODA_NEED_TEMP_USING
+  #define OD_STD_ALLOCATOR_AS_IS
+  #define OD_CONVERT_UNICODETOUTF8
+  #define ODA_COLLECT_TTF_FONTS_IN_DRAWING_FOLDER
+  // Linux ppc requires big endian byte ordering
+  #if defined(__BIG_ENDIAN__) || defined(__s390__)
+    #define ODA_BIGENDIAN
+  #endif
+  #if defined(ARM) ||  defined(EMCC)
+    #define TD_STRICT_ALIGNMENT
+  #endif
+
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_RESOURCE_FILE
+  // Available functionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_HAS_OPENGL
+  #define OD_HAS_GLES2
+
+  #define ODA_USE_FTIME
+#elif defined(__MWERKS__)                          //////////////////////// Metrowerks Codewarrior
+
+  #include <TargetConditionals.h>
+
+  #if TARGET_OS_MAC
+    #define ODA_BIGENDIAN
+    #define OD_STRING_FNS
+    #define OD_NO_GETENV
+  #endif
+  #define OD_HAVE_TIME_FILE
+
+  // Available header files/functionality
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_MATH_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_RESOURCE_FILE
+
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_HAS_OPENGL
+  #define OD_HAS_GLES2
+#elif defined(__CYGWIN32__) || defined(__MINGW32__) //////////////////////// MINGW (Cygwin)
+
+  #define ODA_UNIXOS
+  #define OD_TYPENAME typename
+  #define OD_LOGB ilogb
+  #define OD_STRING_FNS
+  #define ODA_NEED_TEMP_USING
+  // Available header files/functionality
+  #define OD_HAVE_IO_FILE
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_STDIO_FILE
+  // Available finctionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_HAS_OPENGL
+  #define OD_HAS_GLES2
+
+  #define ODA_USE_FTIME
+#elif defined(EMCC)
+
+  #define ODA_UNIXOS
+  #define OD_TYPENAME typename
+  #define OD_LOGB ilogb
+  #define OD_STRING_FNS
+  #define ODA_NEED_TEMP_USING
+  #define OD_STD_ALLOCATOR_AS_IS
+  #define TD_STRICT_ALIGNMENT
+  #define OD_CONVERT_UNICODETOUTF8
+  #define ODA_COLLECT_TTF_FONTS_IN_DRAWING_FOLDER
+  // Available header files
+  #define OD_HAVE_SYS_STAT_FILE
+  #define OD_HAVE_SYS_TYPES_FILE
+  #define OD_HAVE_IOMANIP_FILE
+  #define OD_HAVE_ERROR_FILE
+  #define OD_HAVE_TIME_FILE
+  #define OD_HAVE_UNISTD_FILE
+  #define OD_HAVE_SYS_TIME_FILE
+  #define OD_HAVE_DIRENT_FILE
+  #define OD_HAVE_STDIO_FILE
+  #define OD_HAVE_RESOURCE_FILE
+  // Available finctionality
+  #define OD_HAVE_SETLOCALE_FUNC
+  #define OD_HAVE_PRINT_FUNC
+  #define OD_HAVE_REMOVE_FUNC
+
+  #define OD_HAS_OPENGL
+  #define OD_HAS_GLES2
+
+  #define ODA_USE_FTIME
+#else                                              //////////////////////// Unsupported
+
+#error "Unsupported Platform/Compiler"
+#endif
+
+#ifndef OD_LOGB
+  #define OD_LOGB logb
+#endif
+
+#if !defined(ODA_WINDOWS)
+// @@@TODO: check for this platforms
+#if (!defined(__sun) && !defined(__hpux) && !defined(sgi))
+  #define OD_POSIX_THREADS
+#endif
+#define OD_HAVE_COMPLEX_FILE
+#endif
+
+#if defined(TARGET_OS_MAC) && !defined(__MACH__)
+#define OD_HAVE_CONSOLE_H_FILE
+#define OD_HAVE_CCOMMAND_FUNC
+#endif
+
+#if defined(__APPLE__) || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 10)
+#define OD_HAVE_MKSTEMPS_FUNC
+#endif
+#define OD_T(x) ( (const OdChar*)__OD_T(x))
+#define __OD_T(x) L ## x
+
+#if defined(ODA_WINDOWS)
+#if _MSC_VER >= 1900
+#define OD_CONCAT(a, b) __OD_T(a) __OD_T(b)
+#else
+#define OD_CONCAT(a, b) __OD_T(a) ## __OD_T(b)
+#endif
+#if defined(__BCPLUSPLUS__) && (__BCPLUSPLUS__ >= 1408)
+  #define DDLL(a) a##ULL
+#else
+  #define DDLL(a) a
+#endif
+#else
+  #if defined(__sun) || defined(sgi) || defined(__hpux) || defined(_AIX)
+    #define OD_CONCAT(a, b) L##a L##b
+  #else
+    #define OD_CONCAT(a, b) L##a b
+  #endif
+  #define DDLL(a) a##ULL
+#endif
+
+#if defined(_NATIVE_WCHAR_T_DEFINED)
+typedef unsigned short OdChar;
+typedef unsigned short OdUChar;
+#else
+typedef wchar_t OdChar;
+typedef wchar_t OdUChar;
+#endif
+
+#if defined(ODA_WINDOWS)
+#define ODCHAR_IS_INT16LE 1
+#else
+#define ODCHAR_IS_INT16LE 0
+#endif
+
+typedef signed char OdInt8;
+typedef short OdInt16;
+typedef int OdInt;
+
+typedef unsigned char OdUInt8;
+typedef unsigned short OdUInt16;
+
+#if   UINT_MAX == 0xFFFFFFFFUL
+#define OD_SIZEOF_INT  4
+#elif UINT_MAX > 0xFFFFFFFFU && UINT_MAX == 0xFFFFFFFFFFFFFFFFU
+#error "8 byte size of `int' type unsupported!"
+#else
+#error "Unsupported number of *bytes* in `int' type!"
+#endif
+
+#if   ULONG_MAX == 0xFFFFFFFFUL
+#define OD_SIZEOF_LONG  4
+#elif (ULONG_MAX > 0xFFFFFFFFU && ULONG_MAX == 0xFFFFFFFFFFFFFFFFU) || (defined(sparc) && defined(_LP64))
+#define OD_SIZEOF_LONG  8
+#else
+#error "Unsupported number of *bytes* in `long' type!"
+#endif
+
+#if OD_SIZEOF_LONG == 4
+typedef long OdInt32;
+typedef unsigned long OdUInt32;
+#else // assumes 4-byte int type
+typedef int OdInt32;
+typedef unsigned int OdUInt32;
+#endif
+
+#if defined(_IA64_) || defined(ODA_WINDOWS)
+#define BUILTIN_INT64 __int64
+#define OD_ATOI64 _atoi64
+#define PERCENT18LONG "%18I64d\r\n"
+#define HANDLEFORMAT "%I64X\r\n"
+
+#elif OD_SIZEOF_LONG == 8
+#define BUILTIN_INT64 long
+#define OD_ATOI64 atol
+#define PERCENT18LONG  "%18ld\r\n"
+#define HANDLEFORMAT  "%lX\r\n"
+
+#elif defined(ODA_UNIXOS)
+#define BUILTIN_INT64 long long
+#define OD_ATOI64 atoll
+#if (defined(__hpux) && !defined(atoll) && defined(__cplusplus)) || defined(_AIX_SOURCE)
+inline long long atoll(const char *instr)
+{
+  long long retval;
+  int i;
+
+  retval = 0;
+  for (; *instr; instr++) {
+    retval = 10*retval + (*instr - '0');
+  }
+  return retval;
+}
+#endif
+#define PERCENT18LONG "%18lld\r\n"
+#define HANDLEFORMAT "%llX\r\n"
+#endif
+
+#ifdef BUILTIN_INT64
+typedef BUILTIN_INT64 OdInt64;
+typedef unsigned BUILTIN_INT64 OdUInt64;
+#else
+#include "Int64.h"
+#define OD_ATOI64 atoi // TODO
+#error ("sprinf can't process this without built-in in64 type")
+#define PERCENT18LONG "%18d\r\n" // TODO
+#define HANDLEFORMAT "%X\r\n"
+#endif
+
+// C99 definitions for int64 portable printf format
+#ifdef _MSC_VER
+#ifndef PRId64W
+#define PRId64W L"%I64d"
+#endif
+#ifndef PRIu64W
+#define PRIu64W L"%I64u"
+#endif
+#ifndef PRIx64W
+#define PRIx64W L"%I64x"
+#endif
+#ifndef PRIX64W
+#define PRIX64W L"%I64X"
+#endif
+#ifndef PRId64
+#define PRId64 "%I64d"
+#endif
+#ifndef PRIu64
+#define PRIu64 "%I64u"
+#endif
+#ifndef PRIx64
+#define PRIx64 "%I64x"
+#endif
+#ifndef PRIX64
+#define PRIX64 "%I64X"
+#endif
+#else // ifdef _MSC_VER
+#ifndef PRId64W
+#define PRId64W L"%lld"
+#endif
+#ifndef PRIu64W
+#define PRIu64W L"%llu"
+#endif
+#ifndef PRIx64W
+#define PRIx64W L"%llx"
+#endif
+#ifndef PRIX64W
+#define PRIX64W L"%llX"
+#endif
+#ifndef PRId64
+#define PRId64 "%lld"
+#endif
+#ifndef PRIu64
+#define PRIu64 "%llu"
+#endif
+#ifndef PRIx64
+#define PRIx64 "%llx"
+#endif
+#ifndef PRIX64
+#define PRIX64 "%llX"
+#endif
+#endif //ifdef _MSC_VER
+
+
+typedef void * VoidPtr;
+typedef ptrdiff_t OdIntPtr; // Integer able to store a pointer (32 or 64 depending on platform)
+#if (OD_SIZEOF_LONG == 4) && !defined(_WIN64) && !defined(__hpux) && !defined(_AIX)
+#define OD_INTPTR_UNIQUE
+#endif
+
+typedef ptrdiff_t OdGsMarker; // Integer able to store a pointer (32 or 64 depending on platform)
+
+typedef ptrdiff_t OdHWnd;
+
+
+#if defined (_WIN64)
+#define OD_SIZEOF_PTR 8
+#else
+// This may need to be adjusted
+#define OD_SIZEOF_PTR OD_SIZEOF_LONG
+#endif
+
+#define OdIntToPtr(arg)   ((void*)((ptrdiff_t)(arg)))
+
+#define OdPtrToInt32(arg)   ((OdInt32)((ptrdiff_t)(arg)))
+
+#define OdIntToGsMarker(arg) ((OdGsMarker)((ptrdiff_t)(arg)))
+
+//////////////////////////////////////////////////////////////////////////
+//  Non-MSVC dynamic library loading.
+
+#ifdef  _TOOLKIT_IN_DLL_
+
+  #if defined(ODA_WINDOWS)
+
+    #pragma warning( disable: 4275 4251 )
+    #define OD_DLL_EXPORT __declspec(dllexport)
+    #define OD_DLL_IMPORT __declspec(dllimport)
+
+  #elif defined(ODA_UNIXOS) // GNU compiler MacOS X (xCode), unix, linex and others
+
+    #define OD_DLL_EXPORT __attribute__((visibility("default")))
+    #define OD_DLL_IMPORT __attribute__((visibility("default")))
+
+  #endif
+
+  #define OD_EXTERN  extern
+
+  #if defined(_MSC_VER)
+    #define OD_TOOLKIT_EXPORT OD_DLL_EXPORT
+    #define OD_STATIC_EXPORT
+    #define OD_TOOLKIT_IMPORT 
+    #define OD_STATIC_IMPORT OD_DLL_IMPORT
+  #elif defined(__BORLANDC__)
+    #define OD_TOOLKIT_EXPORT  OD_DLL_EXPORT
+    #define OD_STATIC_EXPORT
+    #define OD_TOOLKIT_IMPORT  OD_DLL_IMPORT
+    #define OD_STATIC_IMPORT
+  #else
+    #define OD_TOOLKIT_EXPORT  OD_DLL_EXPORT
+    #define OD_STATIC_EXPORT
+    #define OD_TOOLKIT_IMPORT
+    #define OD_STATIC_IMPORT   OD_DLL_IMPORT
+  #endif
+
+#else   // of _TOOLKIT_IN_DLL_
+
+  #define OD_TOOLKIT_EXPORT
+  #define OD_STATIC_EXPORT
+  #define OD_TOOLKIT_IMPORT
+  #define OD_STATIC_IMPORT
+
+  #define OD_DLL_EXPORT
+  #define OD_DLL_IMPORT
+  #define OD_EXTERN
+
+#endif  // of _TOOLKIT_IN_DLL_
+//////////////////////////////////////////////////////////////////////////
+
+#if (defined(__GNUC__ ) && !defined(__FreeBSD__) )  ||  (defined(_SOLX64))
+  #define TD_USE_VA_COPY
+#endif
+
+#if defined(__GNUC__) && !defined(GCC_VERSION)
+#define GCC_VERSION __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__
+#endif
+
+#if (defined EMCC && !defined(OD_TYPENAME))
+#define OD_TYPENAME typename
+#endif
+
+#endif //#ifndef _OD_PLATFORM_SETTINGS_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformStreamer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformStreamer.h
new file mode 100755
index 0000000..fc72c74
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdPlatformStreamer.h
@@ -0,0 +1,385 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_PLATFORMSTREAMER_H_
+#define _OD_PLATFORMSTREAMER_H_
+
+#include "OdPlatform.h"
+#include "OdStreamBuf.h"
+#include "DbHandle.h"
+#include "OdString.h"
+
+/** \details
+    This class implements platform dependent stream I/O for various data types.
+    <group Other_Classes>
+*/
+class OdPlatformStreamer
+{
+public:
+  /** \details
+    Reads a 16-bit integer from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  static OdInt16    rdInt16   (OdStreamBuf& streamBuf);
+  /** \details
+    Reads a 32-bit integer from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  static OdInt32    rdInt32   (OdStreamBuf& streamBuf);
+  /** \details
+    Reads a 64-bit integer from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  static OdInt64    rdInt64   (OdStreamBuf& streamBuf);
+  /** \details
+    Reads a 32-bit floating point number from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  static float      rdFloat   (OdStreamBuf& streamBuf);
+  /** \details
+    Reads a double from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  static double     rdDouble  (OdStreamBuf& streamBuf);
+  /** \details
+    Reads a handle from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  static OdDbHandle rdDbHandle(OdStreamBuf& streamBuf);
+  /** \details
+    Reads two doubles from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+    \param doubles [out]  Array of doubles to receive the data.
+  */
+  static void       rd2Doubles(OdStreamBuf& streamBuf, void* doubles);
+
+  /** \details
+    Reads three doubles from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+    \param doubles [out]  Array of doubles to receive the data.
+  */
+  static void       rd3Doubles(OdStreamBuf& streamBuf, void* doubles);
+  
+  /** \details
+    Reads the specified number of doubles from the specified StreamBuf object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+    \param doubles [out]  Array of doubles to receive the data.
+    \param numDoubles [in]  Number of doubles.
+  */
+  static void       rdDoubles (OdStreamBuf& streamBuf, int numDoubles, void* doubles);
+
+  /** \details
+    Writes a 16-bit integer to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param value [in]  Value to be written.
+  */
+  static void       wrInt16   (OdStreamBuf& streamBuf, OdInt16 value);
+  /** \details
+    Writes a 32-bit integer to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param value [in]  Value to be written.
+  */
+  static void       wrInt32   (OdStreamBuf& streamBuf, OdInt32 value);
+  /** \details
+    Writes a 64-bit integer to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param value [in]  Value to be written.
+  */
+  static void       wrInt64   (OdStreamBuf& streamBuf, OdInt64 value);
+  /** \details
+    Writes a 32-bit floating point number to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param value [in]  Value to be written.
+  */
+  static void       wrFloat   (OdStreamBuf& out, float val);
+  /** \details
+    Writes a double to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param value [in]  Value to be written.
+  */
+  static void       wrDouble  (OdStreamBuf& streamBuf, double value);
+  /** \details
+    Writes a handle to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param value [in]  Value to be written.
+  */
+  static void       wrDbHandle(OdStreamBuf& streamBuf, OdDbHandle value);
+  /** \details
+    Writes two doubles to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param doubles [in]  Array of doubles to be written.
+  */
+  static void       wr2Doubles(OdStreamBuf& streamBuf, const void* doubles);
+  /** \details
+    Writes three doubles to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param doubles [in]  Array of doubles to be written.
+  */
+  static void       wr3Doubles(OdStreamBuf& streamBuf, const void* doubles);
+  /** \details
+    Writes the specified number of doubles to the specified StreamBuf object.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    \param doubles [in]  Array of doubles to be written.
+    \param numDoubles [in]  Number of doubles.
+  */
+  static void       wrDoubles (OdStreamBuf& streamBuf, int numDoubles, const void* doubles);
+
+  /** \details
+      Extracts a Unicode string from buffer, and returns it as an OdString.
+
+      \param buffer [in/out] Buffer pointer to read the Unicode string from.
+      \param size [in] Length of the Unicode string in characters (assumes 2 byte characters in buffer
+               stored in little endian format), or -1 if the string is null terminated.
+
+      \remarks
+      The buffer pointer is incremented to the next byte past the string that
+      was read in.  If size is > 0, size * 2 bytes will be read.  If size is -1,
+      a null terminated string will be read from buffer, including the null byte.
+  */
+  inline static OdString getUnicodeStrFromBuffer(const OdUInt8*& buffer, OdInt32 size);
+
+  /** \details
+      Writes a Unicode string to the passed in buffer, in little endian format, 
+      using 2 bytes per character.  The trailing null character is NOT written.
+
+      \param val [in]  Unicode string to be written.
+      \param buffer [in]  Char buffer to which will receive the Unicode data.
+
+      \remarks
+      The buffer pointer is incremented to the next byte past the string that
+      was written. 
+  */
+  inline static void putUnicodeStrToBuffer(const OdString& val, OdUInt8*& buffer);
+
+};
+
+inline OdInt16 OdPlatformStreamer::rdInt16(OdStreamBuf& streamBuf)
+{
+  OdInt16 res;
+  streamBuf.getBytes(&res, sizeof(res));
+  odSwap2BytesNumber(res);
+  return res;
+}
+inline OdInt32 OdPlatformStreamer::rdInt32(OdStreamBuf& streamBuf)
+{
+  OdInt32 res;
+  streamBuf.getBytes(&res, sizeof(res));
+  odSwap4BytesNumber(res);
+  return res;
+}
+inline OdInt64 OdPlatformStreamer::rdInt64(OdStreamBuf& streamBuf)
+{
+  OdInt64 res;
+  streamBuf.getBytes(&res, sizeof(res));
+  odSwap8Bytes(&res);
+  return res;
+}
+inline float OdPlatformStreamer::rdFloat(OdStreamBuf& streamBuf)
+{
+  float res;
+  streamBuf.getBytes(&res, sizeof(res));
+  odSwap4Bytes(&res);
+  return res;
+}
+inline double OdPlatformStreamer::rdDouble(OdStreamBuf& streamBuf)
+{
+  double res;
+  ODA_ASSUME(sizeof(res) == 8)
+  streamBuf.getBytes(&res, 8);
+  odSwap8Bytes(&res);
+  // if unnormalized or NaN or infinity, set it to 0.0
+  if (!isValidNonZeroIEEEDouble((OdUInt8 *)&res))
+    return 0.0;
+  return res;
+}
+inline OdDbHandle OdPlatformStreamer::rdDbHandle(OdStreamBuf& streamBuf)
+{
+  OdDbHandle res;
+  ODA_ASSUME(sizeof(res) == 8)
+  streamBuf.getBytes(&res, 8);
+  odSwapInt64(&res);
+  return res;
+}
+inline void OdPlatformStreamer::rd2Doubles(OdStreamBuf& streamBuf, void* pRes2Doubles)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  streamBuf.getBytes(pRes2Doubles, sizeof(double)*2);
+  fixDouble((double*)pRes2Doubles);
+  fixDouble((double*)pRes2Doubles+1);
+}
+inline void OdPlatformStreamer::rd3Doubles(OdStreamBuf& streamBuf, void* pRes3Doubles)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  streamBuf.getBytes(pRes3Doubles, sizeof(double)*3);
+  fixDouble((double*)pRes3Doubles);
+  fixDouble((double*)pRes3Doubles+1);
+  fixDouble((double*)pRes3Doubles+2);
+}
+inline void OdPlatformStreamer::rdDoubles(OdStreamBuf& streamBuf, int n, void* pResDoubles)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  streamBuf.getBytes(pResDoubles, sizeof(double)*n);
+  double* pD = (double*)pResDoubles;
+  while (n--) { fixDouble(pD++); }
+}
+
+inline void OdPlatformStreamer::wrInt16(OdStreamBuf& streamBuf, OdInt16 val)
+{
+  odSwap2BytesNumber(val);
+  streamBuf.putBytes(&val, sizeof(val));
+}
+inline void OdPlatformStreamer::wrInt32(OdStreamBuf& streamBuf, OdInt32 val)
+{
+  odSwap4BytesNumber(val);
+  streamBuf.putBytes(&val, sizeof(val));
+}
+inline void OdPlatformStreamer::wrInt64(OdStreamBuf& streamBuf, OdInt64 val)
+{
+  odSwap8Bytes(&val);
+  streamBuf.putBytes(&val, sizeof(val));
+}
+inline void OdPlatformStreamer::wrFloat(OdStreamBuf& streamBuf, float val)
+{
+  odSwap4Bytes(&val);
+  streamBuf.putBytes(&val, sizeof(val));
+}
+inline void OdPlatformStreamer::wrDouble(OdStreamBuf& streamBuf, double val)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  odSwap8Bytes(&val);
+  streamBuf.putBytes(&val, sizeof(val));
+}
+inline void OdPlatformStreamer::wrDbHandle(OdStreamBuf& streamBuf, OdDbHandle val)
+{
+  odSwapInt64(&val);
+  streamBuf.putBytes(&val, sizeof(val));
+}
+
+inline OdString OdPlatformStreamer::getUnicodeStrFromBuffer(const OdUInt8*& buffer, OdInt32 size)
+{
+  OdString ret;
+#if ODCHAR_IS_INT16LE
+  if (size == -1)
+  {
+    // null terminated
+    ret = (OdChar*)buffer;
+    buffer += ((ret.getLength() + 1) * 2);
+  }
+  else
+  {
+    OdUInt8* pBuf = (OdUInt8*)ret.getBuffer(size+1);
+    OD_BYTES_FROM_BUFFPTR(buffer, pBuf, (size<<1));
+    ret.releaseBuffer(size);
+  }
+#else
+  OdInt32 finalSize = size;
+  if (size == -1)
+  {
+    // null terminated
+    size = 1; 
+    OdUInt16* tmp16 = (OdUInt16*)buffer;
+    for ( ; *tmp16; tmp16++)
+      size++;
+    finalSize = size - 1;
+  }
+  OdChar* pBuf = ret.getBuffer(size + 1);
+  for (OdInt32 i = 0; i < size; i++)
+  {
+    *pBuf++ = OdUInt16(OD_INT16_FROM_BUFFPTR(buffer));
+  }
+  *pBuf = L'\0';
+  ret.releaseBuffer(finalSize);
+#endif
+
+  return ret;
+}
+
+#ifndef ODCHAR_IS_INT16LE
+#error "OdaDefs.h must be included before OdPlatformStreamer.h"
+#endif
+
+void OdPlatformStreamer::putUnicodeStrToBuffer(const OdString& val, OdUInt8*& buffer)
+{
+  OdInt32 nLen = val.getLength();
+#if ODCHAR_IS_INT16LE
+  OD_BYTES_TO_BUFFPTR(buffer, val.c_str(), nLen*sizeof(OdChar));
+#else
+  const OdChar* p = val.c_str();
+  for (OdUInt32 i = 0; i < nLen; i++)
+  {
+    OD_INT16_TO_BUFFPTR(buffer, (OdInt16)*p++);
+  }
+#endif
+}
+
+
+// Verify that preprocessor symbol ODCHAR_IS_INT16LE has been correctly defined
+#if ODCHAR_IS_INT16LE
+#ifdef ODA_BIGENDIAN
+#error "ODCHAR_IS_INT16LE is defined for a big endian platform"
+#endif
+ODA_ASSUME(sizeof(OdChar) == 2);
+#endif
+
+
+#ifdef ODA_BIGENDIAN
+
+inline void OdPlatformStreamer::wr2Doubles(OdStreamBuf& streamBuf, const void* p2Doubles)
+{
+  wrDouble(streamBuf, *(((double*)p2Doubles)+0));
+  wrDouble(streamBuf, *(((double*)p2Doubles)+1));
+}
+inline void OdPlatformStreamer::wr3Doubles(OdStreamBuf& streamBuf, const void* p3Doubles)
+{
+  wrDouble(streamBuf, *(((double*)p3Doubles)+0));
+  wrDouble(streamBuf, *(((double*)p3Doubles)+1));
+  wrDouble(streamBuf, *(((double*)p3Doubles)+2));
+}
+inline void OdPlatformStreamer::wrDoubles(OdStreamBuf& streamBuf, int n, const void* pDoubles)
+{
+  while(n--) wrDouble(streamBuf, ((double*)pDoubles)[n]);
+}
+
+#else // #ifdef ODA_BIGENDIAN
+
+inline void OdPlatformStreamer::wr2Doubles(OdStreamBuf& streamBuf, const void* p2Doubles)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  streamBuf.putBytes(p2Doubles, sizeof(double)*2);
+}
+inline void OdPlatformStreamer::wr3Doubles(OdStreamBuf& streamBuf, const void* p3Doubles)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  streamBuf.putBytes(p3Doubles, sizeof(double)*3);
+}
+inline void OdPlatformStreamer::wrDoubles(OdStreamBuf& streamBuf, int n, const void* pDoubles)
+{
+  ODA_ASSUME(sizeof(double) == 8)
+  streamBuf.putBytes(pDoubles, sizeof(double) * n);
+}
+
+#endif // ODA_BIGENDIAN
+
+#endif // _OD_PLATFORMSTREAMER_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdResult.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdResult.h
new file mode 100755
index 0000000..92381ae
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdResult.h
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OdResult_h_Included_
+#define _OdResult_h_Included_
+
+#define OD_ERROR_DEF(code, string)  code,
+enum OdResult
+{
+#include "ErrorDefs.h"
+  eDummyLastError
+};
+#undef OD_ERROR_DEF
+
+#define OD_MESSAGE_DEF(code, string)  code,
+enum OdMessage
+{
+  sidDummyFirstMessage = eDummyLastError -1,
+#include "MessageDefs.h"
+  sidDummyLastMessage
+};
+#undef OD_MESSAGE_DEF
+
+typedef OdResult OdWarning;
+
+#endif //_OdResult_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdRound.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdRound.h
new file mode 100755
index 0000000..4848595
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdRound.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODROUND_INCLUDED_
+#define _ODROUND_INCLUDED_
+
+#include <math.h>
+#include <limits.h>
+
+inline double OdRound(double a)
+{
+  double aFloor = ::floor(a);
+  if(a-aFloor >= 0.5)
+    return aFloor+1.0;
+  return aFloor;
+}
+
+
+inline long OdRoundToLong(double a)
+{
+  if (a >= 0.)
+  {
+    a += .5;
+    if (a > double(LONG_MAX))
+      throw OdError(eArithmeticOverflow);
+    return long(a);
+  }
+  else
+  {
+    a -= .5;
+    if (a < double(LONG_MIN))
+      throw OdError(eArithmeticOverflow);
+    return long(a);
+  }
+}
+
+inline long OdTruncateToLong(double a)
+{
+  if (a >= 0.)
+  {
+    a += .5;
+    if (a > double(LONG_MAX))
+      return LONG_MAX;
+    else
+      return long(a);
+  }
+  else
+  {
+    a -= .5;
+    if (a < double(LONG_MIN))
+      return LONG_MIN;
+    else
+      return long(a);
+  }
+}
+
+#endif //#ifndef _ODROUND_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdSetLocale.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdSetLocale.h
new file mode 100755
index 0000000..44df7e3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdSetLocale.h
@@ -0,0 +1,122 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _OD_SETLOCALE_H_
+#define _OD_SETLOCALE_H_
+
+#include "TD_PackPush.h"
+
+
+#if (defined(_WIN32) || defined(WIN64)) && !defined(_WIN32_WCE)
+  #define TD_USE_LOCALE
+#endif
+
+
+#ifdef TD_USE_LOCALE
+
+#include <locale.h>
+#include "OdString.h"
+#include "OdMutex.h"
+
+/** \details
+    This class sets and restores the current locale of the of Teigha context.
+    
+    \remarks
+    The locale is restored OdSetLocale objects go out of scope.
+    
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdSetLocale
+{
+public:
+  /** \param category [in]  Category affected.
+    \param locale [in]  Name of locale.
+    \param ansiCp [in]  ANSI code page.
+  */
+  OdSetLocale(int category, const OdString& locale)
+    : _autoLock(_mutex)
+  {
+    set(category, locale);
+  }
+  OdSetLocale(int category, int ansiCp)
+    : _autoLock(_mutex)
+  {
+    if (ansiCp)
+    {
+      OdString loc;
+      loc.format(OD_T(".%d"),ansiCp);
+      set(category, loc.c_str());
+    }
+  }
+  ~OdSetLocale()
+  {
+    reset();
+  }
+  void set(int category, const OdString& loc)
+  {
+    ODA_ASSERT(_origLocale.isEmpty());
+    _category = category;
+    
+    OdString origLocale = ::_wsetlocale(_category, 0);
+    if (origLocale.iCompare(loc) != 0 && ::_wsetlocale(_category, loc) != 0)
+    {
+      _origLocale = origLocale;
+    }
+  }
+  void reset()
+  {
+    if (!_origLocale.isEmpty())
+    {
+      _wsetlocale(_category, _origLocale);
+#ifdef _DEBUG
+      OdString loc = _wsetlocale(_category, 0);
+      ODA_ASSERT(!loc.iCompare(_origLocale));
+#endif
+      _origLocale.empty();
+    }
+  }
+
+private:  
+  FIRSTDLL_EXPORT_STATIC static OdMutex  _mutex;
+
+  OdMutexAutoLock _autoLock;
+  OdString        _origLocale;
+  int             _category;
+};
+
+#define SET_LOCALE(category, locale) OdSetLocale loc(category, locale);
+#define RESET_LOCALE() loc.reset();
+#else  // TD_USE_LOCALE
+
+#define SET_LOCALE(category, locale)
+#define RESET_LOCALE()
+
+#endif // TD_USE_LOCALE
+
+
+#include "TD_PackPop.h"
+
+#endif // _OD_SETLOCALE_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStack.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStack.h
new file mode 100755
index 0000000..569805d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStack.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODSTACK_H_
+#define _ODSTACK_H_
+
+#include "TD_PackPush.h"
+
+template <class T> class OdStackItem;
+template <class T> class OdStack;
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+template <class T>
+class OdStackItem : public T
+{
+  friend class OdStack<T>;
+protected:
+  OdStackItem* m_pUnder;
+  inline OdStackItem(OdStackItem* pUnder, const T& val)
+    : T(val), m_pUnder(pUnder) { }
+  inline OdStackItem(OdStackItem* pUnder) : m_pUnder(pUnder) { }
+};
+
+/** \details
+
+    <group OdGi_Classes> 
+*/
+template <class T>
+class OdStack
+{
+  typedef OdStackItem<T> TItem;
+public:
+  TItem* m_pTop;
+  inline OdStack() : m_pTop(0) { }
+  inline void push(const T& inVal)
+  {
+    m_pTop = new TItem(m_pTop, inVal);
+  }
+  inline T* push()
+  {
+    m_pTop = new TItem(m_pTop);
+    return top();
+  }
+  inline void pop(T& outVal)
+  {
+    ODA_ASSERT(m_pTop); // pop from empty stack
+    outVal = *m_pTop;
+    pop();
+  }
+
+  inline const T* top() const { return m_pTop; }
+  inline T* top() { return m_pTop; }
+
+  inline void pop()
+  {
+    TItem* pTop = m_pTop;
+    ODA_ASSERT(pTop); // pop from empty stack
+    m_pTop = pTop->m_pUnder;
+    delete pTop;
+  }
+
+  inline ~OdStack()
+  {
+    while(m_pTop)
+    {
+      pop();
+    }
+  }
+
+  inline T* beforeTop() const 
+  { 
+    ODA_ASSERT(m_pTop);
+    return m_pTop->m_pUnder;
+  }
+
+  bool empty()const { return m_pTop == 0; }
+  
+  size_t size() const
+  {
+    size_t n = 0;
+    for ( TItem* p = m_pTop; p; p = p->m_pUnder)
+      ++n;
+    return n;
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODSTACK_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStreamBuf.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStreamBuf.h
new file mode 100755
index 0000000..f8a8a11
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdStreamBuf.h
@@ -0,0 +1,173 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODSTREAMBUF_DEFINED
+#define ODSTREAMBUF_DEFINED
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+class OdString;
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum FilerSeekType
+  {
+    kSeekFromStart   = SEEK_SET, // Start of file.
+    kSeekFromCurrent = SEEK_CUR, // Current position of file pointer.
+    kSeekFromEnd     = SEEK_END  // End of file.
+  };
+}
+
+/** \details
+    This class is the base class for classes that provide platform-dependent I/O for Teigha.
+    
+    Library: TD_Root
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdStreamBuf : public OdRxObject
+{
+protected:
+  OdStreamBuf();
+public:
+  ODRX_DECLARE_MEMBERS(OdStreamBuf);
+
+  /** \details
+    Returns the name of the file associated with this StreamBuf object.
+  */
+  virtual OdString  fileName();
+
+  /** \details
+    Returns true if and only if the current position of the file pointer for
+    this StreamBuf object is at the end of file.
+  */
+  virtual bool      isEof();
+  /** \details
+    Returns the current position of the file pointer for
+    this StreamBuf object.
+  */
+  virtual OdUInt64  tell();
+  /** \details
+    Returns the length in bytes of the file associated with
+    this StreamBuf object.
+  */
+  virtual OdUInt64  length();
+
+  /** \details
+    Sets the length of the file associated with
+    this StreamBuf object to zero.
+  */
+  virtual void      truncate();
+  /** \details
+    Sets the current position of the file pointer for
+    this StreamBuf object to zero.
+  */
+  virtual void      rewind();
+  /** \details
+    Moves the current position of the file pointer for
+    this StreamBuf object to the specified location.
+
+    \param offset [in]  Number of bytes.
+    \param seekType [in]  Seek type.
+    
+    \remarks
+    seekType must be one of the following:
+    
+    <table>
+    Name                    Value       Description.
+    OdDb::kSeekFromStart    SEEK_SET    Start of file.
+    OdDb::kSeekFromCurrent  SEEK_CUR    Current position of file pointer.
+    OdDb::kSeekFromEnd      SEEK_END    End of file.
+    </table>
+  */
+  virtual OdUInt64  seek(OdInt64 offset, OdDb::FilerSeekType seekType);
+
+  /** \details
+    Returns the byte at the current position of the file pointer
+    for this StreamBuf object, and increments the pointer.
+  */
+  virtual OdUInt8   getByte();
+  /** \details
+    Returns the specified number of bytes, starting at the current position of the file pointer
+    for this StreamBuf object, and increments the pointer by numBytes.
+    \param buffer [in]  Character buffer.
+    \param numBytes [in]  Number of bytes.
+  */
+  virtual void      getBytes(void* buffer, OdUInt32 numBytes);
+
+  /** \details
+    Writes the byte to the current position of the file pointer
+    for this StreamBuf object, and increments the pointer.
+    \param value [in]  Byte to write. 
+  */
+  virtual void      putByte(OdUInt8 value);
+  /** \details
+    Writes the specified number of bytes, starting at the current position of the file pointer
+    for this StreamBuf object, and increments the pointer by numBytes.
+    \param buffer [in]  Character buffer.
+    \param numBytes [in]  Number of bytes.
+  */
+  virtual void      putBytes(const void* buffer, OdUInt32 numBytes);
+
+  /** \details
+    Copies the specified bytes from this StreamBuf object to the specified StreamBuf object.
+    \param pDestination [in]  Pointer to the StreamBuf object to receive the data.
+    \param sourceStart [in]  Starting position of the file pointer of this StreamBuf object.
+    \param sourceEnd [in]  Ending position of the file pointer of this StreamBuf object.
+    \remarks
+    Bytes are copied from sourceStart to sourceEnd inclusive.
+  */
+  virtual void      copyDataTo(OdStreamBuf* pDestination, OdUInt64 sourceStart = 0, OdUInt64 sourceEnd = 0);
+  /** \details
+    Returns the share mode for this StreamBuf object.
+    
+    \remarks
+    getShareMode returns one of the following:
+    
+    <table>
+    Name                         Value       Description
+    Oda::kShareDenyReadWrite     0x10        deny read/write mode
+    Oda::kShareDenyWrite         0x20        deny write mode
+    Oda::kShareDenyRead          0x30        deny read mode
+    Oda::kShareDenyNo            0x40        deny none mode
+    </table>
+  */
+  virtual OdUInt32  getShareMode();
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdStreamBuf object pointers.
+*/
+typedef OdSmartPtr<OdStreamBuf> OdStreamBufPtr;
+
+#include "TD_PackPop.h"
+
+#endif //ODSTREAMBUF_DEFINED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdString.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdString.h
new file mode 100755
index 0000000..397b06e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdString.h
@@ -0,0 +1,1126 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#ifndef __ODSTRING_H__
+#define __ODSTRING_H__
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "OdMutex.h"
+#include "OdPlatformSettings.h"
+#include "OdCodePage.h"
+#include "OdAnsiString.h"
+
+#define odaIsValidString(lpch)    (true)
+
+#include "TD_PackPush.h"
+
+#ifdef sgi
+#include <string>
+using namespace std;  // va_XXXX items are in std namespace for newest SGI compiler
+#endif
+
+/** \details
+    This structure contains string data used by OdString.
+
+    \remarks
+    An OdChar array (buffer) is allocated along with this structure, and
+    is freed when this structure is freed.
+    
+    Library: TD_Root
+    <group !!RECORDS_TD_APIRef>
+*/
+struct OdStringData
+{            
+  /** \details
+    Number of references to this string.
+  */
+  OdRefCounter nRefs;      
+
+  /** \details
+    String length in characters, omitting the 0 terminator.
+  */
+  int nDataLength; 
+
+  /** \details
+    String allocation length in characters, omitting the 0 terminator. 
+  */
+  int nAllocLength;       
+
+  /** \details
+    Underlying OdChar array (buffer) of this StringData object.
+  */
+  OdChar* unicodeBuffer;
+  
+  /** \details
+    Underlying char array (buffer) of this StringData object.
+  */
+  char* ansiString;
+};
+
+/** \details
+    This class implements Teigha character String objects.
+
+    \remarks
+    OdString objects use zero-based indices to access string elements.
+
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdString
+{
+public:
+
+  FIRSTDLL_EXPORT_STATIC const static OdString kEmpty;
+
+  OdString()
+  { init(); }
+
+  /** \param source [in]  Source.
+  */
+  OdString(const OdString& source);
+
+  /** \param ch [in]  Character to repeat.
+    \param length [in]  Number of characters.
+  */
+  OdString(OdChar ch, int length);
+
+  OdString(const OdChar* source);
+  OdString(const OdChar* source, int length);
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString(const __wchar_t* source);
+  OdString(const __wchar_t* source, int length);
+#endif
+
+
+  OdString(const char* lpch, OdCodePageId codepage = CP_CNT);
+  OdString(const char* lpch, int nLength, OdCodePageId codepage = CP_CNT);
+  OdString(const OdAnsiString&);
+protected:
+  explicit OdString(OdStringData* pData);
+public:
+
+  /** \details
+    Returns the number of characters in this String object.
+  */
+  int getLength() const
+  { 
+    if (isUnicodeNotInSync())
+      syncUnicode();
+    return getData()->nDataLength; 
+  }
+  int getLengthA() const;
+
+  /** \details
+    Returns true and only if this String object is empty.
+  */
+  bool isEmpty() const
+  {
+    return (getData()->nDataLength == 0 && 
+      (getData()->ansiString == 0 || getAnsiString()->isEmpty()));
+  }
+
+  /** \details
+    Sets this String object to the empty string.
+  */
+  void empty();
+
+  /** \details
+    Returns the single character of this String object at the specified position.
+    \param charIndex [in]  Character index. 
+  */
+  OdChar getAt(int charIndex) const
+  {
+#ifdef TD_UNICODE
+    if (isUnicodeNotInSync())
+      syncUnicode();
+#endif
+    ODA_ASSERT(charIndex >= 0);
+    ODA_ASSERT(charIndex < getData()->nDataLength);
+    return getData()->unicodeBuffer[charIndex];
+  }
+
+  /** \details
+    Indexing Operator
+    
+    \remarks
+    Returns the single character of this String object at the specified position.
+    \param charIndex [in]  Character index. 
+  */
+  OdChar operator[](int charIndex) const
+  {
+    return getAt(charIndex);
+  }
+
+  /** \details
+    Sets the single character of this String object at the specified position.
+    \param charIndex [in]  Character index.
+    \param ch [in]  Character.
+    \note
+    No range checking is performed.
+  */
+  void setAt(int charIndex, OdChar ch);
+
+#if defined(_MSC_VER) && defined(_WIN32) && defined(_DEBUG) && defined(ODA_LINT)
+#define UPDATECONSTSTRINGDIAGNISTIC
+private:
+  void updateConstStringDiagnostic(const OdChar* pAddr) const;
+public:
+#else
+  #define updateConstStringDiagnostic(pAddr)
+#endif
+
+  /** \details
+    Returns the underlying OdChar array (buffer) of this String object.
+  */
+  const OdChar* c_str() const
+  { 
+    if (isUnicodeNotInSync())
+      syncUnicode();
+    const OdChar* pRet = getData()->unicodeBuffer;
+    updateConstStringDiagnostic(pRet);
+    return pRet;
+  }
+
+  /** \details
+    Returns the underlying character array (buffer) of this String object.
+  */
+  inline operator const OdChar*() const
+  { 
+    return c_str();
+  }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  operator const __wchar_t*() const
+  { 
+    return reinterpret_cast<const __wchar_t*>(c_str());
+  }
+#endif
+
+  operator const char*() const;
+
+  OdString& operator=(const OdString& source);
+
+  OdString& operator=(OdChar ch);
+  
+  OdString& operator=(const OdChar* source);
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString& operator=(const __wchar_t* source){ return operator=((const OdChar*)source); }
+#endif
+
+  OdString& operator=(const OdAnsiString& source);
+
+  OdString& operator=(const char* source);
+
+  /** \details
+    Concatenation-Equals Operator.
+    \remarks
+    Sets this object to the concatenation of this String object with the 
+    value on the right, and returns a reference to this String object.
+  */
+  OdString& operator+=(const OdString& string);
+
+  OdString& operator+=(OdChar ch);
+
+  OdString& operator+=(const OdChar* string);
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString& operator+=(const __wchar_t* string){ return operator+=((const OdChar*)string); }
+#endif
+
+  OdString& operator+=(const char* string);
+
+  /** \details
+    Concatenation Operator.
+    \remarks
+    Returns the concatenation of this object on the left with the object on the right.
+  */
+  friend FIRSTDLL_EXPORT OdString operator+(const OdString& string1, const OdString& string2);
+  friend FIRSTDLL_EXPORT OdString operator+(const OdString& string, OdChar ch);
+  friend FIRSTDLL_EXPORT OdString operator+(OdChar ch, const OdString& string);
+
+  friend FIRSTDLL_EXPORT OdString operator+(const OdString& string1, const OdChar* string2);
+  friend FIRSTDLL_EXPORT OdString operator+(const OdChar* string1, const OdString& string2);
+
+  /** \details
+    Case sensitive string comparison.  
+    
+    \param otherString [in]  Other string.
+    
+    \remarks
+    compare() returns one of the following:
+    
+    <table>
+    Returns   Condition
+    < 0       This String object < otherString. 
+    0         This String object == otherString.
+    > 0       This String object > otherString.
+    </table>
+  */
+  int compare(const OdChar* otherString) const
+  { 
+    if (isUnicodeNotInSync())
+      syncUnicode();
+    return odStrCmp((const wchar_t*)getData()->unicodeBuffer, (const wchar_t*)otherString);
+  }
+
+  inline int compare(const OdString& otherString) const{ return compare(otherString.c_str());}
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  int compare(const __wchar_t* otherString) const { return compare((const OdChar*)otherString);}
+#endif
+
+  /** \details
+  Case sensitive string comparison.  
+
+  \param otherString [in]  Other string.
+
+  \remarks
+  compare() returns one of the following:
+
+  <table>
+  Returns   Condition
+  < 0       This String object < otherString. 
+  0         This String object == otherString.
+  > 0       This String object > otherString.
+  </table>
+  */
+  int compare(const char* otherString) const;
+
+  /** \details
+    Case insensitive string comparison.  
+    
+    \param otherString [in]  Other string.
+    
+    \remarks
+    iCompare() returns one of the following:
+    
+    <table>
+    Returns   Condition
+    < 0       This String object < otherString. 
+    0         This String object == otherString.
+    > 0       This String object > otherString.
+    </table>
+  */
+  int iCompare(const OdChar* otherString) const
+  { 
+    if (isUnicodeNotInSync())
+      syncUnicode();
+    return odStrICmp(getData()->unicodeBuffer, otherString); 
+  }   
+  inline int iCompare(const OdString& otherString) const{ return iCompare(otherString.c_str()); }
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  __forceinline int iCompare(const __wchar_t* otherString) const {return iCompare((const OdChar*)otherString);}
+#endif   
+
+  /** \details
+    Returns the substring specified by a start index and a length from this String object.
+    \param startIndex [in]  Starting index.
+    \param length [in]  Length of substring. 
+    
+    \remarks
+    If length is not specified, the remainder of this String object is returned.
+  */
+  OdString mid(int startIndex, int length) const;
+
+  OdString mid(int startIndex) const;
+
+  /** \details
+    Returns the leftmost substring of the specified length from this String object.
+    \param length [in]  Length of substring. 
+  */
+  OdString left(int length) const;
+
+  /** \details
+    Returns the rightmost substring of the specified length from this String object.
+    \param length [in]  Length of substring. 
+  */
+  OdString right(int length) const;
+
+  /** \details
+    Returns the longest leftmost substring of this String object 
+    that consists solely of characters that are
+    contained in the specified character set.
+
+    \param charSet [in]  Character set.
+    
+    \remarks
+    If the first character in this String object is not in the specified character set,
+    an empty string is returned.
+  */
+  OdString spanIncluding(const OdChar* charSet) const;
+  
+  inline OdString spanIncluding(const OdString& charSet) const { return spanIncluding(charSet.c_str()); }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString spanIncluding(const __wchar_t* charSet) const{return spanIncluding((const OdChar*)charSet);}
+#endif
+
+  /** \details
+    Returns the longest leftmost substring of this String object 
+    that consists solely of characters that are
+    not contained in the specified character set.
+
+    \param charSet [in]  Character set.
+    
+    \remarks
+    If the first character in this String object in the specified character set,
+    an empty string is returned.
+  */
+  OdString spanExcluding(const OdChar* charSet) const;
+
+  inline OdString spanExcluding(const OdString& charSet) const{ return spanExcluding(charSet.c_str());}
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString spanExcluding(const __wchar_t* charSet) const{return spanExcluding((const OdChar*)charSet);}
+#endif
+  
+  /** \details
+    Converts this String object to upper case.
+
+    \remarks
+    Returns a reference to this String object.  
+  */
+  OdString& makeUpper();
+
+  /** \details
+    Converts this String object to lower case.
+
+    \remarks
+    Returns a reference to this String object.  
+  */
+  OdString& makeLower();
+
+  /** \details
+    Reverses this String object.
+
+    \remarks
+    Returns a reference to this String object.  
+  */
+  OdString& makeReverse();
+
+
+  /** \details
+    Removes all whitespace from the right side of this String object.
+   
+    \remarks
+    Returns a reference to this String object.
+    
+    A space (' ') is used if no whitespace characters are specfied.  
+  */
+  OdString& trimRight();
+
+  /** \details
+    Removes all whitespace from the left side of this String object.
+   
+    \remarks
+    Returns a reference to this String object.  
+
+    A space (' ') is used if no other whitespace characters are specfied.  
+  */
+  OdString& trimLeft();
+
+  /** \param whiteChar [in]  Whitespace character.
+  */
+  OdString& trimRight(OdChar whiteChar);
+
+  /** \param whiteChars [in]  Whitespace characters.
+  */
+  OdString& trimRight(const OdChar* whiteChars);
+
+  inline OdString& trimRight(const OdString& whiteChars){ return trimRight(whiteChars.c_str());}
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString& trimRight(const __wchar_t* whiteChars){return trimRight((const OdChar*)whiteChars);}
+#endif
+
+  /** \param whiteChar [in]  Whitespace character.
+  */
+  OdString& trimLeft(OdChar whiteChar);
+
+  /** \param whiteChars [in]  Whitespace characters.
+  */
+  OdString& trimLeft(const OdChar* whiteChars);
+  
+  inline OdString& trimLeft(const OdString& whiteChars){ return trimLeft(whiteChars.c_str());}
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString& trimLeft(const __wchar_t* whiteChars){return trimLeft((const OdChar*)whiteChars);}
+#endif
+  /** \details
+    Replaces all occurrences of the specified character or string in this String object.
+
+    \param oldChar [in]  Old character.
+    \param newChar [in]  New character.
+    
+    \remarks
+    Returns the number of characters or strings replaced.
+  */
+  int replace(OdChar oldChar, OdChar newChar);
+
+  /** \param oldString [in]  Old string.
+    \param newString [in]  New string.
+  */
+  int replace(const OdChar* oldString, const OdChar* newString);
+  
+  inline int replace(const OdString& oldString, const OdString& newString){ return replace(oldString.c_str(), newString.c_str());}
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  int replace(const __wchar_t* oldString, const __wchar_t* newString){return replace((const OdChar*)oldString, (const OdChar*)newString);}
+#endif
+  /** \details
+    Removes all occurrences of the specified character from this String object.
+
+    \param removeChar [in]  Character to remove.
+
+    \remarks
+    Returns the number of characters removed.
+  */
+  int remove(OdChar chRemove);
+
+  /** \details
+    Inserts the specified character or string into this String object.
+    
+    \param insertChar [in]  Character to insert.
+    \param insertIndex [in]  Insertion index.
+  
+    \remarks
+    Returns the new length of this String object.
+    
+    If insertIndex exceeds the length of this String object, 
+    this String object is lengthened as necessary to accommodate the insertion.
+  */
+  int insert(int insertIndex, OdChar insertChar);
+
+  /** \details
+    \param insertString [in]  String to insert.
+  */
+
+  int insert(int insertIndex, const OdChar* insertString);
+
+  int insert(int insertIndex, const OdString& insertString){return insert(insertIndex, insertString.c_str());}
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  int insert(int insertIndex, const __wchar_t* insertString){return insert(insertIndex,(const OdChar*)insertString);}
+#endif
+  /** \details
+    Deletes the specified number characters from this String object.
+
+    \param deleteIndex [in]  Deletion index.
+    \param count [in]  Number of characters to delete.
+    \remarks
+    Returns the new length of this String object.
+  */
+  int deleteChars(int deleteIndex, int count = 1);
+
+
+  /** \details
+    Returns the first occurrence of the specified character or string in this String object.
+
+    \param searchChar [in]  Search character.
+     
+    \remarks
+    Returns -1 if not found.
+  */
+  int find(OdChar searchChar) const;
+
+  /** \details
+    Returns the last occurrence of the specified character in this String object.
+
+    \param searchChar [in]  Search character.
+     
+    \remarks
+    Returns -1 if not found.
+  */
+  int reverseFind(OdChar searchChar) const;
+
+  /** \details
+    Returns the last occurrence of the specified character in this String object.
+
+    \param searchChar [in]  Search character.
+    \param startIndex [in]  An index from which to start searching back.
+
+    \remarks
+    Returns -1 if not found.
+  */
+  int reverseFind(OdChar searchChar, int startIndex) const;
+
+  /** \param startIndex [in]  Start index.
+  */
+  int find(OdChar searchChar, int startIndex) const;
+
+  /** \details
+    Returns the first occurrence in this String object of any member of the specified character set. 
+
+    \param charSet [in]  Character set.
+     
+    \remarks
+    Returns -1 if not found.
+  */
+  int findOneOf(const OdChar* charSet) const;
+
+  int find(const OdChar* searchString) const;
+
+  /** \param searchString [in]  Search string.
+  */
+  int find(const OdChar* searchString, int startIndex) const;
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  int findOneOf(const __wchar_t* charSet) const{return findOneOf((const OdChar*)charSet);}
+  int findOneOf(const OdString& charSet) const{return findOneOf((const OdChar*)charSet);}
+
+  int find(const __wchar_t* searchString) const{return find((const OdChar*)searchString);}
+
+  int find(const OdString& searchString) const{return find((const OdChar*)searchString);}
+
+  int find(const __wchar_t* searchString, int startIndex) const{return find((const OdChar*)searchString,startIndex);}
+
+  int find(const OdString& searchString, int startIndex) const{return find((const OdChar*)searchString,startIndex);}
+#endif
+  /** \details
+    Assigns a value to this String object using a printf-style format string and 
+    arguments.
+    \param formatString [in]  Format string.
+    \remarks
+    Returns a reference to this String Object.
+  */
+  OdString& format(const OdChar* formatString, ...);
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  OdString& format(const __wchar_t* formatString, ...);
+#endif
+
+  /** \details
+    Assigns a value to this String object using a vsprintf-style format string and 
+    argument list.
+    \param formatString [in]  Format string.
+    \param argList [in]  Argument list.   
+    \remarks
+    Returns a reference to this String Object.
+  */
+  OdString& formatV(const OdChar* formatString, va_list argList); 
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+  inline OdString& formatV(const __wchar_t* formatString, va_list argList)
+  {
+    return formatV((const OdChar*)formatString, argList);
+  }
+#endif
+                                                                
+  /** \details
+    Returns a modifiable C style OdChar array (buffer) of the specified minimum length for this String object.
+    \param minBufferLength [in]  Minimum buffer length.
+    
+    \note
+    releaseBuffer() should be called before using any other OdString methods.
+    
+    The pointer returned by this function is not valid after releaseBuffer() is called.
+  */
+  OdChar* getBuffer(int minBufLength);
+
+  /** \details
+    Releases a buffer obtained by getBuffer() or getBufferSetLength(), and sets its length.
+    \param newLength [in]  New buffer length.
+    \remarks
+    If newLength == -1, the buffer is treated as 0 terminated.  
+  */
+  void releaseBuffer(int newLength = -1);
+
+  /** \details
+    Returns a modifiable C style OdChar array (buffer) of of the specified length for this String object.
+    \param length [in]  buffer length.
+    
+    \note
+    releaseBuffer() should be called before using any other OdString methods.
+    
+    The pointer returned by this function is not valid after releaseBuffer() is called.
+  */
+  OdChar* getBufferSetLength(int length);
+
+  /** \details
+    Releases any unused memory allocated by this String object.
+  */
+  void freeExtra();
+
+  /** \details
+    Enables reference counting for this String object.
+  */
+  OdChar* lockBuffer();
+
+  /** \details
+    Disables reference counting for this String object.
+  */
+  void unlockBuffer();
+
+/*   disable wide char functionalities
+   Constructor.  This OdString will receive a copy of the wide character string referenced
+   by lpsz.
+  OdString(const OdCharW* lpsz);
+
+  Constructor. This OdString will receive a copy of the first nLength wide characters of
+  the string referenced by lpch.
+  OdString(const OdCharW* lpch, int nLength);
+
+   Assignment operator.  This OdString is assigned the value of lpsz.
+  const OdString& operator=(const OdCharW* lpsz);
+
+*/
+
+#ifdef NOT_IMPLEMENTED
+
+  /*!DOM*/
+  /** \details
+    Case sensitive string comparison.  
+    
+    \param otherString [in]  Other string.
+    
+    \remarks
+    collate() returns one of the following:
+    
+    <table>
+    Returns   Condition
+    < 0       This String object < otherString. 
+    0         This String object == otherString.
+    > 0       This String object > otherString.
+    </table>
+  */
+  int collate(const OdChar* otherString) const;
+
+  /*!DOM*/
+  /** \details
+    Case insensitive string comparison.  
+    
+    \param otherString [in]  Other string.
+    
+    \remarks
+    icollate() returns one of the following:
+    
+    <table>
+    Returns   Condition
+    < 0       This String object < otherString. 
+    0         This String object == otherString.
+    > 0       This String object > otherString.
+    </table>
+  */
+  int iCollate(const OdChar* otherString) const;
+  /** \param formatID [in]  Format ID. 
+  */
+  OdString& ODA_CDECL format(unsigned int formatID, ...);
+#endif
+
+
+public:
+  ~OdString();
+
+  /** \details
+    Returns the number of characters allocated for the underlying OdChar array (buffer) in this String object.
+  */
+  int getAllocLength() const
+  { return getData()->nAllocLength; }
+
+protected:
+  FIRSTDLL_EXPORT_STATIC static OdStringData kEmptyData;
+
+  /** \details
+    Pointer to the underlying OdChar array (buffer). 
+  */
+  OdStringData* m_pData;  
+  
+  /** \details
+    Returns the StringData for this String object.
+  */
+  OdStringData* getData() const
+    { ODA_ASSERT(m_pData!= NULL); return m_pData; }
+
+  /** \details
+    Initializes this String object to an empty string.
+  */
+  void init();
+
+  /** \details
+    Copies the specified number of characters from this String object to the destination String object.
+    \param destString [out]  Destination string.
+    \param copyLength [in]  Number of characters to copy.
+    \param copyIndex [in]  First byte to copy.
+    \param extraLength [in]  Extra characters to allocate.
+    
+    \remarks
+    This function calls allocBuffer(copyLength + extraLength)
+  */
+  void allocCopy(OdString& destString, int copyLength, int copyIndex, int extraLength) const;
+
+  /** \details
+    Allocates the specified number of characters for the character buffer of this String object.
+    \param length [in]  buffer length.
+    allocAlways - if true, allocates new OdStringData even for 0 length unicode buffer (for ansi string constructors)
+  */
+  void allocBuffer(int length, bool allocAlways = false);
+
+  /** \details
+    Copies the specified string to this String object.
+    
+    \param sourceLength [in]  Number of characters to copy.
+    \param source [in]  Source string.
+
+    \remarks
+    If getAllocLength() < sourceLength, this function calls allocBuffer(sourceLength).
+  */
+    void assignCopy(int sourceLength, const OdChar* source);
+
+  /** \details
+    Concatenates and copies the specified strings to this String object.
+    
+    \param sourceLength1 [in]  Number of characters in first string to copy.
+    \param sourceLength2 [in]  Number of characters in second string to copy.
+    \param source1 [in]  First source string.
+    \param source2 [in]  Second source string.
+
+    \remarks
+    If getAllocLength() < (sourceLength1 + sourceLength2), this function calls allocBuffer(sourceLength1 + sourceLength2).
+  */
+    void concatCopy(int sourceLength1, const OdChar* source1, int sourceLength2, const OdChar* source2);
+
+  /** \details
+    Concatenates the string to this String object.
+    
+    \param sourceLength [in]  Number of characters to copy.
+    \param source [in]  Source string.
+
+    \remarks
+    If getAllocLength() < getLength() + sourceLength, this function calls allocBuffer(getLength()+ sourceLength2).
+  */
+    void concatInPlace(int sourceLength, const OdChar* source);
+ 
+  /** \details
+    Assures there are no multiple references to the StringData associated with this String object. 
+    
+    \remarks
+    If there is more than one reference to the StringData object, it is released, and
+    replaced with a copy thereof 
+  */
+  void copyBeforeWrite();
+
+  /** \details
+    Assures the character buffer of this String object is at least the specified size.
+    \param newLength [in]  New length of buffer.
+    
+    \remarks
+    If getAllocLength() < newLength, this function calls allocBuffer(newLength).
+  */
+  void allocBeforeWrite(int newLength);
+
+  /** \details
+    Releases the reference to the specified StringData object.
+    
+    \param pStringData [in]  Pointer to the StringData object.
+    
+    \remarks
+    If pStringData is not specified, the StringData associated with
+    this String object is released.
+    
+    Decrements the reference count of the StringData object.
+        
+    When its reference count reaches zero, the StringData object is freed.
+  */
+  void release();
+
+  static void release(OdStringData* pStringData);
+
+  /** \details
+    Returns the length of the specified string.
+    \param string [in]  0 terminated string or NULL.
+    \remarks
+    Returns 0 if string == NULL.
+  */
+  static int safeStrlen(const OdChar* string)
+  { return (string == NULL) ? (int)0 : (int)odStrLen((const wchar_t*)string); }
+
+  /** \details
+    Frees the specified StringData object.
+    \param pStringData [in]  Pointer to the StringData object.
+  */
+  static void freeData(OdStringData* pStringData);
+
+  bool isUnicodeNotInSync() const
+  {
+    return !getData()->unicodeBuffer && getData()->ansiString;
+  }
+  void syncUnicode() const;
+  OdAnsiString* getAnsiString() const
+  {
+    if (getData()->ansiString)
+      return reinterpret_cast<OdAnsiString*>(&getData()->ansiString);
+    else 
+      return 0;
+  }
+  void freeAnsiString()const;
+  friend class OdAnsiString;
+};
+
+typedef OdChar OdCharW;
+typedef OdString OdString;
+
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+inline OdString operator+(const OdString& string1, const __wchar_t* string2)
+{
+  return operator+(string1, (const OdChar*)string2);
+}
+inline OdString operator+(const __wchar_t* string1, const OdString& string2)
+{
+  return operator+((const OdChar*)string1, string2);
+}
+#endif
+
+inline bool operator==(const OdString& s1, const OdString& s2)
+  { return s1.compare(s2) == 0; }
+
+inline bool operator==(const OdString& s1, const OdChar* s2)
+  { return s1.compare(s2) == 0; }
+
+inline bool operator==(const OdChar* s1, const OdString& s2)
+  { return s2.compare(s1) == 0; }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+inline bool operator==(const OdString& s1, const __wchar_t* s2)
+{ return s1.compare((const OdChar*)s2) == 0; }
+
+inline bool operator==(const __wchar_t* s1, const OdString& s2)
+{ return s2.compare((const OdChar*)s1) == 0; }
+#endif
+
+inline bool operator==(const OdString& s1, const char* s2)
+{ return s1.compare(s2) == 0; }
+
+inline bool operator==(const char* s1, const OdString& s2)
+{ return odStrCmpA((const char*)s2, s1) == 0; }
+
+inline bool operator!=(const OdString& s1, const OdString& s2)
+  { return s1.compare(s2) != 0; }
+
+inline bool operator!=(const OdString& s1, const OdChar* s2)
+  { return s1.compare(s2) != 0; }
+
+inline bool operator!=(const OdChar* s1, const OdString& s2)
+  { return s2.compare(s1) != 0; }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+inline bool operator!=(const OdString& s1, const __wchar_t* s2)
+{ return s1.compare((const OdChar*)s2) != 0; }
+
+inline bool operator!=(const __wchar_t* s1, const OdString& s2)
+{ return s2.compare((const OdChar*)s1) != 0; }
+#endif
+
+inline bool operator!=(const OdString& s1, const char* s2)
+{ return s1.compare(s2) != 0; }
+
+inline bool operator!=(const char* s1, const OdString& s2)
+{ return s2.compare(s1) != 0; }
+
+inline bool operator<(const OdString& s1, const OdString& s2)
+  { return s1.compare(s2) < 0; }
+
+inline bool operator<(const OdString& s1, const OdChar* s2)
+  { return s1.compare(s2) < 0; }
+
+inline bool operator<(const OdChar* s1, const OdString& s2)
+  { return s2.compare(s1) > 0; }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+inline bool operator<(const OdString& s1, const __wchar_t* s2)
+{ return s1.compare((const OdChar*)s2) < 0; }
+
+inline bool operator<(const __wchar_t* s1, const OdString& s2)
+{ return s2.compare((const OdChar*)s1) > 0; }
+#endif
+
+inline bool operator<(const OdString& s1, const char* s2)
+{ return s1.compare(s2) < 0; }
+
+inline bool operator<(const char* s1, const OdString& s2)
+{ return s2.compare(s1) > 0; }
+
+inline bool operator>(const OdString& s1, const OdString& s2)
+  { return s1.compare(s2) > 0; }
+
+inline bool operator>(const OdString& s1, const OdChar* s2)
+  { return s1.compare(s2) > 0; }
+
+inline bool operator>(const OdChar* s1, const OdString& s2)
+  { return s2.compare(s1) < 0; }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+inline bool operator>(const OdString& s1, const __wchar_t* s2)
+{ return s1.compare((const OdChar*)s2) > 0; }
+inline bool operator>(const __wchar_t* s1, const OdString& s2)
+{ return s2.compare((const OdChar*)s1) < 0; }
+#endif
+
+inline bool operator>(const OdString& s1, const char* s2)
+{ return s1.compare(s2) > 0; }
+
+inline bool operator>(const char* s1, const OdString& s2)
+{ return s2.compare(s1) < 0; }
+
+inline bool operator<=(const OdString& s1, const OdString& s2)
+  { return s1.compare(s2) <= 0; }
+
+inline bool operator<=(const OdString& s1, const OdChar* s2)
+  { return s1.compare(s2) <= 0; }
+
+inline bool operator<=(const OdChar* s1, const OdString& s2)
+  { return s2.compare(s1) >= 0; }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+inline bool operator<=(const OdString& s1, const __wchar_t* s2)
+{ return s1.compare((const OdChar*)s2) <= 0; }
+inline bool operator<=(const __wchar_t* s1, const OdString& s2)
+{ return s2.compare((const OdChar*)s1) >= 0; }
+#endif
+
+inline bool operator<=(const OdString& s1, const char* s2)
+{ return s1.compare(s2) <= 0; }
+
+inline bool operator<=(const char* s1, const OdString& s2)
+{ return s2.compare(s1) >= 0; }
+
+inline bool operator>=(const OdString& s1, const OdString& s2)
+  { return s1.compare(s2) >= 0; }
+
+inline bool operator>=(const OdString& s1, const OdChar* s2)
+  { return s1.compare(s2) >= 0; }
+
+inline bool operator>=(const OdChar* s1, const OdString& s2)
+  { return s2.compare(s1) <= 0; }
+
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+inline bool operator>=(const OdString& s1, const __wchar_t* s2)
+{ return s1.compare((const OdChar*)s2) >= 0; }
+
+inline bool operator>=(const __wchar_t* s1, const OdString& s2)
+{ return s2.compare((const OdChar*)s1) <= 0; }
+#endif
+
+inline bool operator>=(const OdString& s1, const char* s2)
+{ return s1.compare(s2) >= 0; }
+
+inline bool operator>=(const char* s1, const OdString& s2)
+{ return s2.compare(s1) <= 0; }
+
+#if defined(ODA_UNIXOS)
+/** <group Other_Classes>
+*/
+class OdW2US
+{
+  OdUInt16* _buf;
+public:
+  OdW2US(const wchar_t* pStr)
+  {
+    size_t len = Od_wcslen(pStr);
+    _buf = new OdUInt16[len+1];
+    for (size_t i = 0; i < len; i++)
+    {
+      _buf[i] = (OdUInt16)pStr[i];
+    }
+    _buf[len] = 0;
+  }
+  ~OdW2US() 
+  {
+    delete _buf;
+  }
+  operator const OdUInt16*() const { return _buf; }
+};
+
+/** \details
+    <group Other_Classes>
+*/
+class OdUS2W
+{
+  wchar_t* _buf;
+public:
+  OdUS2W(const OdUInt16* pStr)
+  {
+    size_t len = 0;
+    if (const OdUInt16* p = pStr)
+    {
+      while (*p++)
+        len++;
+    }
+    _buf = new wchar_t[len+1];
+    for (size_t i = 0; i < len; i++)
+    {
+      _buf[i] = (wchar_t)pStr[i];
+    }
+    _buf[len] = 0;
+  }
+  ~OdUS2W() 
+  {
+    delete _buf;
+  }
+  operator const wchar_t*() const { return _buf; }
+};
+
+#else
+
+#define OdUS2W(a) (const wchar_t*)(a)
+#define OdW2US(a) (const OdUInt16*)(a)
+
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+/** \details
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdConstString : public OdString
+{
+public:
+  OdConstString(const OdChar* pSource = NULL);
+  // Destructor of base class OdString is not virtual (critical for performance).
+  // Therefore ~OdConstString is missing
+
+  OdConstString& operator=(const OdConstString& pSource);
+  OdString& operator=(const OdString& pSource);
+  OdString& operator=(OdChar ch);
+  OdString& operator=(const OdChar* pSource);
+  OdString& operator=(const OdAnsiString& pSource);
+  OdString& operator=(const char* pSource);
+  operator const OdChar*() const;
+
+protected:
+  OdStringData m_data;  
+};
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "TD_PackPop.h"
+
+#endif // __ODSTRING_H__
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTimeStamp.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTimeStamp.h
new file mode 100755
index 0000000..d7d728b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTimeStamp.h
@@ -0,0 +1,429 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODTIME_INCLUDED_
+#define _ODTIME_INCLUDED_
+
+#include "TD_PackPush.h"
+class OdString;
+
+/** \details
+    This class represents TimeStamp objects in an OdDbDatabase instance.
+
+    \sa
+    TD_Db
+
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdTimeStamp
+{
+public:
+  enum InitialValue
+  {
+    kInitZero          = 1,  // Midnight, January 1, 1970, UTC.
+    kInitLocalTime     = 2,  // Workstation date in local time.
+    kInitUniversalTime = 3   // Workstation date in Universal (Greenwich Mean) Time.
+  };
+
+  /** \param init [in]  Initial value.
+    
+    \remarks
+    The default constructor initializes the Julian date and time to midnight, January 1, 1970,  UTC.
+    
+    init must be one of the following:
+    
+    <table>
+    Name                 Value    Description
+    kInitZero            1        Midnight, January 1, 1970, UTC.
+    kInitLocalTime       2        Workstation date in local time.
+    kInitUniversalTime   3        Workstation date in Universal (Greenwich Mean) Time.
+    </table>
+  */
+   OdTimeStamp();
+  OdTimeStamp(
+    InitialValue init);
+
+	/** \details
+	  Returns the date of this TimeStamp object.
+	  \param month [out]  Receives the month.
+	  \param day [out]  Receives the day.
+	  \param year [out]  Receives the year.
+	*/
+  void getDate(
+    short& month, 
+    short& day, 
+    short& year) const;
+
+	/** \details
+	  Sets the date of this TimeStamp object.
+	  \param month [in]  Month.
+	  \param day [in]  Day.
+	  \param year [in]  Year.
+	*/
+  void setDate(
+    short month, 
+    short day, 
+    short year);
+
+	/** \details
+	  Returns the month of this TimeStamp object.
+	*/
+  short month() const;
+
+	/** \details
+	  Sets the month of this TimeStamp object.
+	  \param month [in]  Month.
+	*/
+  void setMonth(
+    short month);
+
+	/** \details
+	  Returns the day of this TimeStamp object.
+	*/
+  short day() const;
+
+	/** \details
+	  Sets the day of this TimeStamp object.
+	  \param day [in]  Day.
+	*/
+  void setDay(
+    short day);
+
+	/** \details
+	  Returns the year of this TimeStamp object.
+	*/
+  short year() const;
+
+	/** \details
+	  Sets the year of this TimeStamp object.
+	  \param year [in]  Year.
+	*/
+  void setYear(
+    short year);
+
+	/** \details
+	  Returns the time of this TimeStamp object.
+	  \param hour [out]  Receives the hour.
+	  \param minute [out]  Receives the minute.
+	  \param second [out]  Receives the second.
+	  \param millisecond [out]  Receives the millisecond.
+	*/
+  void getTime(
+    short& hour, 
+    short& minute, 
+    short& second, 
+    short& millisecond) const;
+
+	/** \details
+	  Sets the time of this TimeStamp object.
+	  \param hour [in]  Hour.
+	  \param minute [in]  Minute.
+	  \param second [in]  Second.
+	  \param millisecond [in]  Millisecond.
+	*/
+  void setTime(
+    short hour, 
+    short minute, 
+    short second, 
+    short millisecond);
+
+	/** \details
+	  Returns the hour of this TimeStamp object.
+	*/
+  short hour() const;
+
+	/** \details
+	  Sets the hour of this TimeStamp object.
+	  \param hour [in]  Hour.
+	*/
+  void setHour(
+    short hour);
+
+	/** \details
+	  Returns the minute of this TimeStamp object.
+	*/
+  short minute() const;
+
+	/** \details
+	  Sets the minute of this TimeStamp object.
+	  \param minute [in]  Minute.
+	*/
+  void setMinute(
+    short minute);
+
+	/** \details
+	  Returns the second of this TimeStamp object.
+	*/
+  short second() const;
+
+	/** \details
+	  Sets the second of this TimeStamp object.
+	  \param second [in]  Second.
+	*/
+  void setSecond(short second);
+
+	/** \details
+	  Returns the millisecond of this TimeStamp object.
+	*/
+  short millisecond() const;
+
+	/** \details
+	  Sets the millisecond of this TimeStamp object.
+	  \param millisecond [in]  Millisecond.
+	*/
+  void setMillisecond(
+    short millisecond);
+
+	/** \details
+	  Sets this TimeStamp object to Midnight, January 1, 1970, UTC.
+	*/
+  void setToZero();
+
+  /** \details
+	  Sets this TimeStamp object to the workstation date in local time.
+  */
+  void getLocalTime();
+
+  /** \details
+	  Sets this TimeStamp object to the workstation date in Universal (Greenwich Mean) Time.
+  */
+  void getUniversalTime();
+
+	/** \details
+	  Converts this TimeStamp object from local time to Universal (Greenwich Mean) Time.
+	*/
+  void localToUniversal();
+
+	/** \details
+	  Converts this TimeStamp object from Universal (Greenwich Mean) Time to local time.
+	*/
+  void universalToLocal();
+
+	/** \details
+	  Returns the Julian day of this TimeStamp object.
+	*/
+  OdUInt32 julianDay() const;
+
+	/** \details
+	  Sets the Julian day of this TimeStamp object.
+	  
+	  \param julianDay [in]  Julian day.
+	*/
+  void setJulianDay(
+    OdUInt32 julianDay);
+
+	/** \details
+	  Returns the milliseconds past midnight for this TimeStamp object.
+	*/
+  OdUInt32 msecsPastMidnight() const;
+
+	/** \details
+	  Sets the milliseconds past midnight for this TimeStamp object.
+	  
+	  \param msecsPastMidnight [in]  Milliseconds past midnight.
+	*/
+  void setMsecsPastMidnight(
+    OdUInt32 msecsPastMidnight);
+
+	/** \details
+	  Sets the Julian Date for this TimeStamp object.
+
+	  \param julianDay [in]  Julian day.
+	  \param msecsPastMidnight [in]  Milliseconds past midnight.
+	*/
+  void setJulianDate(
+    OdUInt32 julianDay, 
+    OdUInt32 msecsPastMidnight);
+
+	/** \details
+	  Returns the fraction of the Julian date of this TimeStamp object.
+
+	  \remarks
+	  The Julian fraction is the fraction of the day since midnight.
+	*/
+  double julianFraction() const;
+
+	/** \details
+	  Sets the fraction of the Julian date of this TimeStamp object.
+	  \param julianFraction [in]  Julian fraction.
+	  \remarks
+	  The Julian fraction is the fraction of the day since midnight.
+	*/
+  void setJulianFraction(
+    double julianFraction);
+
+  bool operator==(
+    const OdTimeStamp& tStamp) const;
+
+  bool operator!=(
+    const OdTimeStamp& tStamp) const
+  {
+    return !(operator==(tStamp));
+  }
+
+  bool operator>(
+    const OdTimeStamp& tStamp) const;
+
+  bool operator>=(
+    const OdTimeStamp& tStamp) const
+  {
+    return ! operator<(tStamp);
+  }
+
+  bool operator<(
+    const OdTimeStamp& tStamp) const;
+
+  bool operator<=(
+    const OdTimeStamp& tStamp) const
+  {
+    return ! operator>(tStamp);
+  }
+
+  const OdTimeStamp operator+(
+    const OdTimeStamp &tStamp) const
+  {
+    return OdTimeStamp(*this) += tStamp;
+  }
+
+  const OdTimeStamp operator-(
+    const OdTimeStamp &tStamp) const
+  {
+    return OdTimeStamp(*this) -= tStamp;
+  }
+
+  const OdTimeStamp& operator+=(
+    const OdTimeStamp &tStamp);
+
+  const OdTimeStamp& operator-=(
+    const OdTimeStamp &tStamp);
+
+  /** \details
+      Adds the specified TimeStamp object to this TimeStamp object, and returns the sum.
+      
+      \param tStamp [in]  TimeStamp.
+  */
+  const OdTimeStamp& add(
+    const OdTimeStamp &tStamp)
+  {
+    return operator+=(tStamp);
+  }
+
+  /** \details
+      Subtracts the specified TimeStamp object from this TimeStamp object, and returns the difference.
+      
+      \param tStamp [in]  TimeStamp.
+  */
+  const OdTimeStamp& subtract(
+    const OdTimeStamp &tStamp)
+  {
+    return operator-=(tStamp);
+  }
+
+  /** \details
+    Returns this TimeStamp object as standard formatted string.
+    
+    \param timeString [out]  Receives the formatted time string.
+    
+    \remarks
+    The returned string is always 24 characters in length, and is in the form
+    
+                  Tue Oct 11 08:06:22 2005
+  */
+  void ctime(
+    class OdString& timeString) const;
+
+  /** \details
+    Returns this TimeStamp object as a user-formatted string.
+    
+    \param timeString [out]  Receives the formatted time string.
+    \param format [in]  Format string.
+    
+    \remarks
+    The formatting codes for the format string are as follows; the # suppresses leading zeros:
+
+    <table>
+    Code          Description
+    %a            Short weekday 
+    %A            Full weekday 
+    %b            Short month 
+    %B            Full month 
+    %c            Short date and time for current locale
+    %#c           Long date and time for current locale 
+    %d            Day of month (01 - 31) 
+    %#d           Day of month (1 - 31) 
+    %H            Hour in 24 hour format (00 - 23) 
+    %#H           Hour in 24 hour format (0 - 23) 
+    %I            Hour in 12 hour format (01 - 12) 
+    %#I           Hour in 12 hour format (1 - 12) 
+    %j            Day of year (001 - 366) 
+    %#j           Day of year (1 - 366) 
+    %m            Month (01 - 12) 
+    %#m           Month (1 - 12) 
+    %M            Minute (00 - 59) 
+    %#M           Minute (0 - 59) 
+    %p            AM/PM indicator for current local
+    %S            Second (00 - 59) 
+    %#S           Second (0 - 59) 
+    %U            Week of the year, first day of week is Sunday (00 - 53) 
+    %#U           Week of the year, first day of week is Sunday (0 - 53) 
+    %w            Weekday, Sunday is 0, (0 - 6) 
+    %#w           Weekday, Sunday is 0, (0 - 6) 
+    %W            Week of the year, first day of week is Monday (00 - 53) 
+    %#W           Week of the year, first day of week is Monday (0 - 53) 
+    %x            Date for the current locale 
+    %X            Time for the current locale 
+    %y            Year without century (00 - 99) 
+    %#y           Year without century (0 - 99) 
+    %Y            Year with century  
+    %Y            Year with century, no leading zeros 
+    %z            Time-zone name  
+    %Z            Time zone abbreviation
+    </table>
+  */
+  void strftime(
+    const OdString& format, 
+    OdString &timeString) const;
+
+  /** \details
+    Returns this TimeStamp object as long.
+    
+    \remarks
+    packedValue returns the number of seconds elapsed since midnight, January 1, 1970, Universal (Greenwich Mean) Time.
+    
+    If this TimeStamp object contains a date before midnight, January 1, 1970,  UTC, 
+    or after 3:14:07 on January 19, 2038, UT, packedValue() returns -1.
+  */
+  OdInt64 packedValue() const;
+  void setPackedValue(OdInt64 t);
+  short weekday() const;
+private:
+  OdUInt32 m_julianDay;
+  OdUInt32 m_msec;
+};
+#include "TD_PackPop.h"
+
+#endif // _ODTIME_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdToolKit.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdToolKit.h
new file mode 100755
index 0000000..2604894
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdToolKit.h
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// OdToolKit.h
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef _ODTOOLKIT_H_INCLUDED_
+#define _ODTOOLKIT_H_INCLUDED_
+
+class OdRxDictionary;
+class OdDbHostAppServices;
+
+#include "DynamicLinker.h"
+
+#endif // _ODTOOLKIT_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTrueTypeFontBase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTrueTypeFontBase.h
new file mode 100755
index 0000000..f792db9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdTrueTypeFontBase.h
@@ -0,0 +1,55 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_ODTRUETYPEFONTBASE_INCLUDED_
+#define _OD_ODTRUETYPEFONTBASE_INCLUDED_
+
+#define  STL_USING_MAP
+#include "OdaSTL.h"
+
+#include "OdFont.h"
+#include "DbRootExport.h"
+#include "IntArray.h"
+
+class OdGiConveyorGeometry;
+
+/** \details
+
+    <group Other_Classes>
+*/
+class ODRX_ABSTRACT DBROOT_EXPORT OdTrueTypeFontBase : public OdFont
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdTrueTypeFontBase);
+
+  virtual void getGlyhpIndexes(const OdCharArray& srcArray, OdCharArray& glyphs, 
+              OdIntArray* visualOrderFromLogical = NULL) = 0;
+  virtual bool isSupportReorder() = 0;
+
+  virtual OdString getSubstituteFontByChar(OdChar unicodeChar) const = 0;
+};
+
+typedef OdSmartPtr<OdTrueTypeFontBase> OdTrueTypeFontBasePtr;
+
+#endif // _OD_ODTRUETYPEFONTBASE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnidirectionalList.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnidirectionalList.h
new file mode 100755
index 0000000..f0e4372
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnidirectionalList.h
@@ -0,0 +1,545 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODA_UNIDIRECTIONALLISTT_H_
+#define _ODA_UNIDIRECTIONALLISTT_H_
+
+#include "OdArrayMemAlloc.h"
+
+#include "TD_PackPush.h"
+
+template<class T, class A = OdObjectsAllocator<T>, class Mm = OdrxMemoryManager> class OdUnidirectionalList;
+
+/** \details
+    This class declares the unidirectional list.
+    Library:  TD_Db
+    <group Other_Classes> 
+*/
+template<class T, class A, class Mm>
+class OdUnidirectionalList
+{
+  struct SNode
+  {
+    SNode()
+    : m_pNext(NULL)
+    {
+    }
+
+  public:
+    SNode* m_pNext;
+    T m_value;
+  };
+
+  class CmpValues
+  {
+  public:
+    CmpValues(const T& value)
+    : m_value(value) 
+    {
+    }
+
+    bool operator()(const T& value) const
+    {
+      return (m_value == value);
+    }
+
+  protected:
+    const T& m_value;
+  };
+
+public:
+  class ConstIterator
+  {
+  public:
+    ConstIterator(SNode* pNode = NULL)
+    : m_pNode(pNode)
+    {
+    }
+
+    const T& operator*() const
+    {
+      ODA_ASSERT(m_pNode != NULL);
+
+      return m_pNode->m_value;
+    }
+
+    const T* operator->() const
+    {
+      ODA_ASSERT(m_pNode != NULL);
+
+      return &(m_pNode->m_value);
+    }
+
+    ConstIterator& operator++()
+    {
+      ODA_ASSERT(m_pNode != NULL);
+
+      m_pNode = m_pNode->m_pNext;
+
+      return *this;
+    }
+
+    ConstIterator operator++(int)
+    {
+      ODA_ASSERT(m_pNode != NULL);
+
+      return ConstIterator(m_pNode->m_pNext);
+    }
+
+    bool operator==(const ConstIterator& it) const
+    {
+      return (m_pNode == it.m_pNode);
+    }
+
+    bool operator!=(const ConstIterator& it) const
+    {
+      return (m_pNode != it.m_pNode);
+    }
+
+    SNode* node()
+    {
+      return m_pNode;
+    }
+
+    void setNode(SNode* pNode)
+    {
+      m_pNode = pNode;
+    }
+
+  private:
+    ConstIterator& operator--()
+    {
+      return *this;
+    }
+
+    ConstIterator operator--(int)
+    {
+      return ConstIterator();
+    }
+
+  protected:
+    SNode* m_pNode;
+  };
+
+  class Iterator : public ConstIterator
+  {
+  public:
+    Iterator(SNode* pNode = NULL)
+    : ConstIterator(pNode)
+    {
+    }
+
+    T& operator*()
+    {
+      ODA_ASSERT(ConstIterator::m_pNode != NULL);
+
+      return ConstIterator::m_pNode->m_value;
+    }
+
+    T* operator->()
+    {
+      ODA_ASSERT(ConstIterator::m_pNode != NULL);
+
+      return &(ConstIterator::m_pNode->m_value);
+    }
+
+    Iterator& operator++()
+    {
+      ODA_ASSERT(ConstIterator::m_pNode != NULL);
+
+      ConstIterator::m_pNode = ConstIterator::m_pNode->m_pNext;
+
+      return *this;
+    }
+
+    Iterator operator++(int)
+    {
+      ODA_ASSERT(ConstIterator::m_pNode != NULL);
+
+      return Iterator(ConstIterator::m_pNode->m_pNext);
+    }
+
+  private:
+    Iterator& operator--()
+    {
+      return *this;
+    }
+
+    Iterator operator--(int)
+    {
+      return Iterator();
+    }
+  };
+
+  typedef typename A::size_type size_type;
+  typedef Iterator iterator;
+  typedef ConstIterator const_iterator;
+
+public:
+  OdUnidirectionalList();
+  OdUnidirectionalList(const OdUnidirectionalList& list);
+
+  ~OdUnidirectionalList();
+
+  OdUnidirectionalList& operator=(const OdUnidirectionalList& list);
+
+  iterator begin();
+  const_iterator begin() const;
+  iterator end();
+  const_iterator end() const;
+
+  size_type size() const;
+
+  bool isEmpty() const;
+
+  iterator insertAfter(const_iterator it, const T& value = T());
+  iterator insertAtBegin(const T& value = T());
+
+  iterator removeAfter(const_iterator it);
+
+  void clear();
+
+  bool find(iterator& it, iterator& prevIt, const T& value
+    , const_iterator prevStartIt = const_iterator()) const;
+  bool find(iterator& it, const T& value) const;
+  
+  template<class P>
+  bool findIf(iterator& it, iterator& prevIt, P pred
+    , const_iterator prevStartIt = const_iterator()) const;
+  template<class P>
+  bool findIf(iterator& it, P pred) const;
+
+  bool operator==(const OdUnidirectionalList& list) const;
+
+protected:
+  static SNode* createNode();
+  static SNode* createNode(const T& value);
+
+  static void destroyNode(SNode* pNode);
+
+  static SNode* copyList(SNode* pNode);
+
+private:
+  SNode* m_pHead;
+  size_type m_size;
+};
+
+
+template<class T, class A, class Mm>
+inline OdUnidirectionalList<T, A, Mm>::OdUnidirectionalList()
+: m_pHead(NULL), m_size(0)
+{
+}
+
+template<class T, class A, class Mm>
+inline OdUnidirectionalList<T, A, Mm>::OdUnidirectionalList(const OdUnidirectionalList<T, A, Mm>& list)
+: m_pHead(copyList(list.m_pHead)), m_size(list.m_size)
+{
+}
+
+template<class T, class A, class Mm>
+inline OdUnidirectionalList<T, A, Mm>::~OdUnidirectionalList()
+{
+  clear();
+}
+
+template<class T, class A, class Mm>
+inline OdUnidirectionalList<T, A, Mm>& OdUnidirectionalList<T, A, Mm>::operator=(const OdUnidirectionalList<T, A, Mm>& list)
+{
+  if(this != &list)
+  {
+    clear();
+
+    m_pHead = copyList(list.m_pHead);
+    m_size = list.m_size;
+  }
+
+  return *this;
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::SNode* OdUnidirectionalList<T, A, Mm>::createNode()
+{
+  SNode* pNewNode = reinterpret_cast<SNode*>(Mm::Alloc(sizeof(SNode)));
+
+  if(pNewNode == NULL)
+    throw OdError(eOutOfMemory);
+
+  A::construct(&(pNewNode->m_value));
+
+  return pNewNode;
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::SNode* OdUnidirectionalList<T, A, Mm>::createNode(const T& value)
+{
+  SNode* pNewNode = reinterpret_cast<SNode*>(Mm::Alloc(sizeof(SNode)));
+
+  if(pNewNode == NULL)
+    throw OdError(eOutOfMemory);
+
+  A::construct(&(pNewNode->m_value), value);
+
+  return pNewNode;
+}
+
+template<class T, class A, class Mm>
+inline void OdUnidirectionalList<T, A, Mm>::destroyNode(SNode* pNode)
+{
+  ODA_ASSERT(pNode != NULL);
+
+  A::destroy(&(pNode->m_value));
+
+  Mm::Free(pNode);
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::SNode* OdUnidirectionalList<T, A, Mm>::copyList(SNode* pNode)
+{
+  SNode* pHead = NULL;
+
+  if(pNode != NULL)
+  {
+    SNode* pNewNode = pHead = createNode(pNode->m_value);
+
+    pNewNode->m_pNext = NULL;
+
+    for(pNode = pNode->m_pNext; pNode != NULL; pNode = pNode->m_pNext)
+    {
+      pNewNode->m_pNext = createNode(pNode->m_value);
+
+      pNewNode->m_pNext->m_pNext = NULL;
+
+      pNewNode = pNewNode->m_pNext;
+    }
+  }
+
+  return pHead;
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::iterator OdUnidirectionalList<T, A, Mm>::begin()
+{
+  return iterator(m_pHead);
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::const_iterator OdUnidirectionalList<T, A, Mm>::begin() const
+{
+  return const_iterator(m_pHead);
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::iterator OdUnidirectionalList<T, A, Mm>::end()
+{
+  return iterator();
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::const_iterator OdUnidirectionalList<T, A, Mm>::end() const
+{
+  return const_iterator();
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::size_type OdUnidirectionalList<T, A, Mm>::size() const
+{
+  return m_size;
+}
+
+template<class T, class A, class Mm>
+inline bool OdUnidirectionalList<T, A, Mm>::isEmpty() const
+{
+  return (m_size == 0);
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::iterator OdUnidirectionalList<T, A, Mm>::insertAfter(const_iterator it
+  , const T& value)
+{
+  SNode* pNode = createNode(value);
+
+  if(it.node() != NULL)
+  {
+    pNode->m_pNext = it.node()->m_pNext;
+    it.node()->m_pNext = pNode;
+
+  }
+  else
+  {
+    pNode->m_pNext = m_pHead;
+    m_pHead = pNode;
+  }
+  
+  ++m_size;
+
+  return iterator(pNode);
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::iterator OdUnidirectionalList<T, A, Mm>::insertAtBegin(const T& value)
+{
+  SNode* pNode = createNode(value);
+
+  pNode->m_pNext = m_pHead;
+  m_pHead = pNode;
+  
+  ++m_size;
+
+  return iterator(pNode);
+}
+
+template<class T, class A, class Mm>
+inline typename OdUnidirectionalList<T, A, Mm>::iterator OdUnidirectionalList<T, A, Mm>::removeAfter(const_iterator it)
+{
+  if(it.node() != NULL)
+  {
+    SNode* pNode = it.node()->m_pNext;
+
+    if(pNode != NULL)
+    {
+      it.node()->m_pNext = pNode->m_pNext;
+
+      destroyNode(pNode);
+
+      --m_size;
+    }
+
+    return iterator(it.node()->m_pNext);
+  }
+
+  SNode* pNode = m_pHead;
+
+  m_pHead = m_pHead->m_pNext;
+
+  destroyNode(pNode);
+  
+  --m_size;
+
+  return iterator(m_pHead);
+}
+
+template<class T, class A, class Mm>
+inline void OdUnidirectionalList<T, A, Mm>::clear()
+{
+  SNode* pNode;
+  SNode* pNextNode;
+
+  for(pNode = m_pHead; pNode != NULL; pNode = pNextNode)
+  {
+    pNextNode = pNode->m_pNext;
+
+    destroyNode(pNode);
+  }
+
+  m_pHead = NULL;
+  m_size = 0;
+}
+
+template<class T, class A, class Mm>
+inline bool OdUnidirectionalList<T, A, Mm>::find(iterator& it, iterator& prevIt
+  , const T& value, const_iterator prevStartIt) const
+{
+  return find(it, prevIt, CmpValues(value), prevStartIt);
+}
+
+template<class T, class A, class Mm>
+inline bool OdUnidirectionalList<T, A, Mm>::find(iterator& it, const T& value) const
+{
+  return find(it, CmpValues(value));
+}
+
+template<class T, class A, class Mm>
+template<class P>
+inline bool OdUnidirectionalList<T, A, Mm>::findIf(iterator& it, iterator& prevIt
+  , P pred, const_iterator prevStartIt) const
+{
+  if(!isEmpty())
+  {
+    ODA_ASSERT(m_pHead != NULL);
+
+    SNode* pPrevNode = prevStartIt.node();
+    SNode* pNode = ((pPrevNode != NULL) ? pPrevNode->m_pNext : m_pHead);
+
+    for(; pNode != NULL; pPrevNode = pNode, pNode = pNode->m_pNext)
+    {
+      if(pred(pNode->m_value))
+      {
+        it.setNode(pNode);
+        prevIt.setNode(pPrevNode);
+
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+
+template<class T, class A, class Mm>
+template<class P>
+inline bool OdUnidirectionalList<T, A, Mm>::findIf(iterator& it, P pred) const
+{
+  if(!isEmpty())
+  {
+    ODA_ASSERT(m_pHead != NULL);
+
+    for(SNode* pNode = m_pHead; pNode != NULL; pNode = pNode->m_pNext)
+    {
+      if(pred(pNode->m_value))
+      {
+        it.setNode(pNode);
+
+        return true;
+      }
+    }
+  }
+
+  return false;
+}
+
+template<class T, class A, class Mm>
+inline bool OdUnidirectionalList<T, A, Mm>::operator==(const OdUnidirectionalList<T, A, Mm>& list) const
+{
+  if(m_size == list.m_size)
+  {
+    SNode* pNode1 = m_pHead;
+    SNode* pNode2 = list.m_pHead;
+
+    for(; pNode1 != NULL; pNode1 = pNode1->m_pNext, pNode2 = pNode2->m_pNext)
+    {
+      ODA_ASSERT(pNode2 != NULL);
+
+      if(pNode1->m_value != pNode2->m_value)
+        return false;
+    }
+
+    return true;
+  }
+
+  return false;
+}
+
+#include "TD_PackPop.h"
+
+#endif // _ODA_UNIDIRECTIONALLISTT_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnitsFormatter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnitsFormatter.h
new file mode 100755
index 0000000..06d0395
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUnitsFormatter.h
@@ -0,0 +1,335 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_UNITSFORMATTER_H_INCLUDED_
+#define _OD_UNITSFORMATTER_H_INCLUDED_
+
+#include "OdPlatform.h"
+#include "DbExport.h"
+#include "RxObject.h"
+#include "OdString.h"
+#include "OdDToStr.h"
+#include "SharedPtr.h"
+
+class OdCmColorBase;
+class OdGePoint3d;
+
+/** \details
+    This class defines the interface for a Units Formatter.
+
+    <group Other_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdUnitsFormatter : public OdRxObject
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdUnitsFormatter);
+
+  enum LUnits
+  {
+    kScientific    = 1,
+    kDecimal       = 2,
+    kEngineering   = 3, // feet and decimal inches
+    kArchitectural = 4, // feet and fractional inches
+    kFractional    = 5,
+    kWindowsDesktop = 6
+  };
+
+  enum DimzinValues
+  {
+    kSuppressesZeroFeetAndPreciselyZeroInches = 0,
+    kIncludesZeroFeetAndPreciselyZeroInches   = 1,
+    kIncludesZeroFeetAndSuppressesZeroInches  = 2,
+    kIncludesZeroInchesAndSuppressesZeroFeet  = 3,
+    // for dimentions
+    kSuppressesLeadingZeros                   = 4,
+    kSuppressesTrailingZeros                  = 8,
+    kSuppressesBothLeadingAndTrailingZeros    = 12
+  };
+
+  /** \details
+    Returns the specified color value or OdCmColorBase object as a string.
+    \param value [in]  Value to format.
+  */
+  virtual OdString formatCmColor(const OdCmColorBase& value) const = 0;
+
+  /** \details
+    Returns the specified string as an wrapped OdCmColorBase object.
+    \param string [in]  String to unformat.
+  */
+  virtual OdSharedPtr<OdCmColorBase> unformatCmColor(const OdString& string) const = 0;
+
+  /** \details
+    Returns the specified distance value as a string.
+    \param value [in]  Value to format.
+    \remarks
+    The returned value depends on the DIMZIN, LUNITS, LUPREC, and UNITMODE system variables.
+  */
+  virtual OdString formatLinear(double value) const = 0;
+
+  /** \details
+    Returns the specified string as a distance value.
+    \param string [in]  String to unformat.
+    \remarks
+    The returned value depends on the UNITMODE system variable.
+  */
+  virtual double unformatLinear(const OdString& string) const = 0;
+
+  /** \details
+    Returns the specified angle value as a string.
+    \param value [in]  Value to format.
+    \remarks
+    The returned value depends on the ANGBASE, AUNITS, AUPREC, DIMZIN, and UNITMODE system variables.
+    \note
+    All angles are expressed in radians.
+  */
+  virtual OdString formatAngle(double value) const = 0;
+
+  /** \details
+    Returns the specified string as an angle value.
+    \param string [in]  String to unformat.
+    \remarks
+    The returned value depends on the ANGBASE system variable.
+    \note
+    All angles are expressed in radians.
+  */
+  virtual double unformatAngle(const OdString& string) const = 0;
+
+  static bool isZeroFeetSuppressed(int dimzin);
+  static bool isZeroInchesSuppressed(int dimzin);
+
+  /** \details
+    Returns the specified distance value as a string.
+    \param value [in]  Value to format.
+    \param lUnits [in]  Length units. 
+    \param precision [in]  Number of decimal places.
+    \param dimzin [in]  A combination of ZeroSuppressionFlags.
+    \param unitMode [in]  UNITMODE value.
+    \param decsep [in]  Decimal separator.
+    \param thsep [in]  Thousands separator.
+    \remarks
+    * A zero value for decsep specifies the default seoarator is to be used.
+    * A zero value for thsep specifies that no separator is to be used.
+  */
+  static OdString formatL(double value, LUnits lUnits, int precision, int dimzin, int unitMode, const OdChar* decsep = 0, const OdChar* thsep = 0);
+  static OdString formatArea(double value, LUnits lUnits, int precision, int dimzin, int unitMode, const OdChar* decsep = 0, const OdChar* thsep = 0);
+
+  /** \details
+    Returns the specified length string as a length value.
+    \param string [in]  String to unformat.
+  */
+  static double unformatL(const OdString& string);
+
+  enum AUnits
+  {
+    kDegrees    = 0,
+    kDegMinSec  = 1,
+    kGrads      = 2,
+    kRadians    = 3,
+    kSurveyors  = 4
+  };
+
+
+  /** \details
+    Returns the specified angular value as a string.
+    \param value [in]  Value to format.
+    \param aUnits [in]  Angle units. 
+    \param precision [in]  Number of decimal places.
+    \param dimzin [in]  A combination of ZeroSuppressionFlags.
+    \param unitMode [in]  UNITMODE value.
+    \param decsep [in]  Decimal separator.
+    \remarks
+    * A zero value for decsep specifies the default separator is to be used.
+    \note
+    All angles are expressed as radians.
+  */
+  static OdString formatA(double value, AUnits aUnits, int precision, int dimzin, int unitMode, const OdChar* decsep = 0);
+
+  /** \details
+    Returns the specified string as an angular value.
+    \param string [in]  String to unformat.
+    \note
+    All angles are expressed as radians.
+  */
+  static double unformatA(const OdString& string);
+  static double unformatA_unnorm(const OdString& string, bool refuseDots = false);
+
+private:
+  static OdString _formatL(double value, bool isItArea, LUnits lUnits, int precision, int dimzin, int unitMode, const OdChar* decsep = 0, const OdChar* thsep = 0);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbUnitsFormatter object pointers.
+*/
+typedef OdSmartPtr<OdUnitsFormatter> OdUnitsFormatterPtr;
+
+
+/** \details
+    This class defines the interface for a Units Formatter.
+
+    <group Other_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdUnitsFormatterTool
+{ 
+public:
+  OdUnitsFormatterTool()  {}
+  ~OdUnitsFormatterTool() {}
+
+  static OdString formatDecimal(double value, int precision, int dimzin, const OdChar* decsep, const OdChar* thsep = 0);
+  static double angle(const OdChar*& buf, bool refuseDots = false);
+  static int toInt(const OdString& sValue, int nMinValid = INT_MIN, int nMaxValid = INT_MAX);
+  static bool isZero(double v, int precision);
+  static OdString formatArchitectural(bool isNegative, int feet, int entier, int numerator, int denominator, int dimzin, int mode);
+  static bool negative(const OdChar*& buf);
+  static double integer(const OdChar*& buf);
+  static void fraction(double value, int& entier, int& numerator, int& denominator, int precision)
+  {
+    denominator = 1 << precision;
+    value = double(floor(value * denominator + 0.5)) / double(denominator);
+    entier = int(floor(value));
+    numerator = int((value - entier) * double(denominator));
+    while((numerator % 2) == 0 && (numerator != 0))
+    {
+      numerator   /= 2;
+      denominator /= 2;
+    }
+  }
+
+  static double base_denominator(int prec, double base)
+  {
+    double denom = 1.;
+    for(int i = 0; i < prec; ++i)
+      denom *= base;
+    return denom;
+  }
+
+  static double linear_denominator(int prec)
+  {
+    return base_denominator(prec, 10.);
+  }
+
+  static bool digit(OdChar c)
+  {
+    return (c >= '0' && c <= '9');
+  }
+
+  static double denominator(int prec)
+  {
+    double denom = 1.;
+    switch(prec)
+    {
+    default:
+    {
+      for(int i = prec; i >= 5; i--)
+        denom *= 10.;
+    }
+      //case 8: // 19d58'58.8889"
+      //  denom *= 10;
+      //case 7: // 19d58'58.889"
+      //  denom *= 10;
+      //case 6: // 19d58'58.89"
+      //  denom *= 10;
+      //case 5: // 19d58'58.9"
+      //  denom *= 10;
+    case 4: // 19d58'59"
+    case 3:
+      denom *= 60;
+    case 2: // 19d59'
+    case 1:
+      denom *= 60;
+    case 0: // 20d
+      break;
+    }
+    return denom;
+  }
+
+  static void decomp(double v, int& degs, int& mins, double& secs, int prec);
+
+  static OdString format(int degs, int mins, double secs, int prec)
+  {
+      OdString res;
+      switch (prec)
+      {
+      case 0:
+        res.format(OD_T("%dd"), degs);
+        break;
+      case 1:
+      case 2:
+        res.format(OD_T("%dd%d'"), degs, mins);
+        break;
+      case 3:
+        prec = 4;
+        // no break
+      default:
+        prec -= 4;
+        OdString s = odDToStr(secs, 'f', prec);
+        res.format(OD_T("%dd%d'%ls\""), degs, mins, s.c_str());
+        break;
+      }
+
+    return res;
+  }
+
+  static OdString next(OdString& list, const OdChar* delim = OD_T(","))
+  {
+    OdString res = list.spanExcluding(delim);
+    if(res.getLength() != list.getLength())
+    {
+      list = list.mid(res.getLength()+1);
+    }
+    else
+    {
+      list.empty();
+    }
+    return res;
+  }
+
+  static int countOccurences(const OdString& string, OdChar delim = ',')
+  {
+    int nOccurences = 0;
+    int nDigits = 0;
+    int nSpec = 0;
+    const OdChar *pBuffer = string.c_str();
+    while (*pBuffer)
+    {
+      if (*pBuffer >= '0' && *pBuffer <= '9')
+        nDigits++;
+      else if (*pBuffer == '+' || *pBuffer == '-')
+      {
+        nSpec++;
+        if (nDigits > 0)
+          break;
+        }
+      else if (*pBuffer == delim && nDigits > 0 && nSpec <= 1)
+      {
+        nDigits = nSpec = 0;
+        nOccurences++;
+      }
+      else
+        break;
+      pBuffer++;
+    } 
+    return nOccurences;
+  }
+};
+
+#endif //#ifndef _OD_UNITSFORMATTER_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUtilAds.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUtilAds.h
new file mode 100755
index 0000000..33ea57a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdUtilAds.h
@@ -0,0 +1,62 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODUTILADS_H_
+#define _ODUTILADS_H_
+
+#include "DbDatabase.h"
+
+/** \details
+    Return true if and only if the specified string matches the wild-card pattern of this WildcardExpr object.
+    \param string [in]  String to test.
+    \param wcPattern [in]  Wildcard pattern.
+    
+    \remarks
+    The following wildcard characters are supported:
+    
+    <table>
+    Name              Character      Description
+    Back quote        `              Escapes the next character (takes it literally).
+    Comma             ,              Separates patterns.
+    Asterisk          *              Matches any character sequence, including a null sequence, anywhere in the pattern.
+    Question Mark     ?              Matches a single character.
+    Period            .              Matches a single non-alphanumeric character.
+    At sign           @              Matches a single alphabetic character.
+    Pound sign        #              Matches a single numeric character.
+    Tilda             ~              If the first character in a pattern, matches anything but the pattern.
+    Brackets          [...]          Matches a single enclosed character.
+    Tilda brackets    [~...]         Matches a single non-enclosed character.
+    Hyphen            -              In brackets, matches a single character in the specified range.
+    </table>
+*/
+DBROOT_EXPORT bool odutWcMatch(const OdString& string, const OdString& wcPattern);
+
+DBROOT_EXPORT bool odutWcMatchNoCase(const OdString& string, const OdString& wcPattern);
+
+DBROOT_EXPORT double oddbGetUnitsConversion(OdDb::UnitsValue from, OdDb::UnitsValue to);
+
+DBROOT_EXPORT void OdClearFontTable();
+
+#endif // _ODUTILADS_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdValue.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdValue.h
new file mode 100755
index 0000000..8c35de0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdValue.h
@@ -0,0 +1,268 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _ODVALUE_INCLUDED_
+#define _ODVALUE_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "StaticRxObject.h"
+
+class OdValueImpl;
+class OdValue;
+typedef OdSmartPtr<OdValue> OdValuePtr;
+
+/** \details
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT OdValue : public OdStaticRxObject<OdRxObject>
+{
+public:
+  ODRX_HEAP_OPERATORS();
+
+  enum DataType
+  {
+    kUnknown            = 0x00,
+    kLong               = 0x01,
+    kDouble             = 0x02,
+    kString             = 0x04,
+    kDate               = 0x08,
+    kPoint              = 0x10,
+    k3dPoint            = 0x20,
+    kObjectId           = 0x40,
+    kBuffer             = 0x80,
+    kResbuf             = 0x100,
+    kGeneral            = 0x200,
+    kColor              = 0x400
+  };
+
+  enum UnitType
+  {
+    kUnitless           = 0x00,
+    kDistance           = 0x01,
+    kAngle              = 0x02,
+    kArea               = 0x04,
+    kVolume             = 0x08,
+    kCurrency           = 0x10,
+    kPercentage         = 0x20
+  };
+
+  enum ParseOption
+  {
+    kParseOptionNone        = 0x00,
+    kSetDefaultFormat       = 0x01,
+    kPreserveMtextFormat    = 0x02,
+    kConvertTextToValue     = 0x04,
+    kChangeDataType         = 0x08,
+    kParseTextForFieldCode  = 0x10
+  };
+
+  enum FormatOption
+  {
+    kFormatOptionNone       = 0x00,
+    kForEditing             = 0x01,
+    kForExpression          = 0x02,
+    kUseMaximumPrecision    = 0x04,
+    kIgnoreMtextFormat      = 0x08
+  };
+
+
+public:
+  ODRX_DECLARE_MEMBERS(OdValue);
+
+  OdValue(void);
+  ~OdValue(void);
+
+  OdValue(const OdValue& value);
+  OdValue(const OdString& value);
+  OdValue(OdInt32 value);
+  OdValue(double value);
+  OdValue(const OdInt64& date);
+  OdValue(double x, double y);
+  OdValue(double x, double y, double z);
+  OdValue(const OdDbObjectId& objectId);
+  OdValue(const OdResBufPtr& resBuf);
+  // OdValue(const OdRxVariantValue& var);
+
+  OdValue(const void* buffer, OdInt32 bufferSize);
+
+  /** \details
+  Sets the datatype of this FieldValue object to kUnknown.
+  \remarks
+  This function always returns true.
+  */
+  bool reset();
+  /** \details
+  Returns the datatype of this FieldValue object.
+  \remarks
+  dataType() returns one of the following:
+
+  <table>
+  Name              Value
+  kUnknown          0x00
+  kLong             0x01
+  kDouble           0x02
+  kString           0x04
+  kDate             0x08
+  kPoint            0x10
+  k3dPoint          0x20
+  kObjectId         0x40
+  kBuffer           0x80
+  kResbuf           0x100
+  </table>
+  */
+  OdValue::DataType dataType () const;
+  /** \details
+  Returns true if and only if the datatype of this FieldValue is not kUnknown.
+  */
+  bool isValid () const;
+
+  /** \remarks
+  Returns this object as the specified type.
+
+  \note
+  OdInt64 is used for date values.
+  */
+  operator OdString() const;
+  operator OdInt32() const;
+  operator double() const;
+  operator OdInt64() const;
+  operator OdDbObjectId() const;  
+
+  OdValue& operator=(const OdValue& value);
+  OdValue& operator=(const OdString& value);
+  OdValue& operator=(OdInt32 value);
+  OdValue& operator=(double value);
+  OdValue& operator=(OdInt64 date);
+  OdValue& operator=(const OdDbObjectId& objectId);
+  OdValue& operator=(const OdResBufPtr& resBuf);
+
+  // OdValue& operator=    (const OdRxVariantValue& var);
+
+  // bool  get                    (const OdChar*& pszValue) const;
+
+  /** \details
+  Returns the value of this FieldValue object.
+  \param value [out]  Receives the value.
+  \param date [out]  Receives the date value
+  \param x [out]  Receives the X-coordinate of the point.
+  \param y [out]  Receives the Y-coordinate of the point.
+  \param z [out]  Receives the Z-coordinate of the point.
+  \param resBuf [out]  Receives the  ResBuf list.
+  \param objectId [in]  Object ID.
+  \remarks
+  Returns true if and only if successful.
+  */
+  bool get(OdString& value) const;
+  bool get(OdInt32& value) const;
+  bool get(double& value) const;
+  bool get(OdInt64& date) const;
+  bool get(double& x, double& y) const;
+  bool get(double& x, double& y, double& z) const;
+  bool get(OdDbObjectId& objectId) const;
+  bool get(OdResBufPtr& resBuf) const;
+
+  // bool get(OdRxVariantValue& var) const;
+
+  /** \param pBuffer [out]  Receives a pointer to the buffer.
+  \param bufferSize [out]  Receives the buffer size.
+  */
+  bool get(void*& pBuf, OdInt32& bufferSize) const;
+  /** \details
+  Sets the value for this FieldValue object according to the arguments.
+  \param value [in]  Value.
+  \param date [in]  Date value
+  \param x [in]  X-coordinate of the point.
+  \param y [in]  Y-coordinate of the point.
+  \param z [in]  Z-coordinate of the point.
+  \param buffer [in]  Buffer.
+  \param bufferSize [in]  Buffer size.
+  \param resBuf [in]  ResBuf list.
+  \param objectId [in]  Object ID.
+  \remarks
+  Returns true if and only if successful.
+  */
+  bool set(const OdValue& value);
+  bool set(const OdString& value);
+  bool set(OdInt32 value);
+  bool set(double value);
+  bool set(const OdInt64& date);
+  bool set(double x, double y);
+  bool set(double x, double y, double z);
+  bool set(const OdDbObjectId& objectId);
+  bool set(const OdResBufPtr& resBuf);
+
+  // bool  set                    (const OdRxVariantValue& var);
+
+  bool set(const void* buffer, OdInt32 bufferSize);
+
+//     bool  reset                   (void);
+
+  bool  reset  (OdValue::DataType nDataType);
+//     bool  resetValue              (void);
+
+  OdValue::UnitType unitType (void) const;
+  void  setUnitType (OdValue::UnitType nUnitType);
+  OdString   getFormat (void) const;
+  void  setFormat (const OdString& pszFormat);
+
+//     bool  parse                   (const OdString& pszText, 
+//                                             OdValue::DataType nDataType, 
+//                                             OdValue::UnitType nUnitType, 
+//                                             const ACHAR* pszFormat, 
+//                                             OdValue::ParseOption nOption, 
+//                                             const AcDbObjectId* pTextStyleId);
+// 
+
+  OdString  format(OdDbDatabase* pDb = 0) const;
+  OdString format(OdValue::FormatOption nOption, OdDbDatabase* pDb = 0);
+  OdString format(const OdString& pszFormat, OdValue::FormatOption nOption, OdDbDatabase* pDb = 0);
+  bool format(const OdString& pszFormat, OdString& pszValue, OdDbDatabase* pDb = 0) const;
+ 
+  bool  convertTo               (OdValue::DataType nDataType, 
+                                          OdValue::UnitType nUnitType);
+  bool  convertTo               (OdValue::DataType nDataType, 
+                                          OdValue::UnitType nUnitType, 
+                                          bool bResetIfIncompatible);
+
+  virtual OdResult dwgInFields (
+    OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(
+    OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields (
+    OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(
+    OdDbDxfFiler* pFiler) const;
+
+protected:
+  OdValue(OdValueImpl* pValImpl);
+
+  friend class OdDbSystemInternals;
+  OdValueImpl* m_pImpl;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODVALUE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdVector.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdVector.h
new file mode 100755
index 0000000..0e2453a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdVector.h
@@ -0,0 +1,1172 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OdVector_H_INCLUDED
+#define OdVector_H_INCLUDED
+
+#include <new>
+
+#include "TD_PackPush.h"
+
+#include "OdArrayMemAlloc.h"
+#include "OdAlloc.h"
+
+template <class T, class A = OdObjectsAllocator<T>, class Mm = OdrxMemoryManager> class OdVector;
+
+/** \details
+    This template class implements dynamic Array objects within Teigha.
+
+    \remarks
+    Methods are provided to access Array elements via both array indices and array pointers (iterators).
+
+    Some definitions are in order:
+
+    1. Logical Length or Size -- The number of entries in the array. Initially zero.
+    2. Physical Length -- The maximum Logical Length of the array before it automatically grows.
+    3. Grow Length -- The number of entries by which the Physical Length will grow as required.
+
+    \sa
+    Db
+
+    <group Other_Classes>
+*/
+template <class T, class A, class Mm> class OdVector
+{
+public:
+  typedef typename A::size_type size_type;
+  typedef T* iterator;
+  typedef const T* const_iterator;
+  // compatibility with OdArray
+  typedef T value_type;
+  typedef const T& const_reference;
+  typedef T& reference;
+
+private:
+  static T* allocate(size_type physicalLength);
+  
+  void release();
+  
+  void reallocate(size_type physicalLength, bool isUseRealloc = false, bool isForcePhysicalLength = false);
+  
+  bool isValid(size_type index) const;
+  void assertValid(size_type index) const;
+  
+  static void riseError(OdResult res);
+  
+  const_iterator begin_const() const;
+  iterator begin_non_const();
+  const_iterator end_const() const;
+  iterator end_non_const();
+
+public:
+  /** \param physicalLength [in]  Initial physical length.
+  \param growLength [in]  Initial grow length.
+  */
+  explicit OdVector(size_type physicalLength, int growLength = 8);
+  OdVector();
+  OdVector(const OdVector& vec);
+  
+  ~OdVector();
+  OdVector& operator=(const OdVector& vec);
+  
+  /** \details
+  Returns an iterator that references the first element in this Array object.
+  */
+  iterator begin();
+  const_iterator begin() const;
+  iterator end();
+  const_iterator end() const;
+  
+  /** \details
+  Inserts an element, number of elements, or range of elements, into this Array object.
+
+  \param before [in]  Position where first element is to be inserted.
+  \param first [in]  Position of first element to be inserted.
+  \param afterLast [in]  Position of first element after the last element to be inserted.
+
+  \remarks
+  The range of elements may be from another Array object.
+  */
+  void insert(iterator before, const_iterator first, const_iterator afterLast);
+
+  /** \param numElem [in]  Number of elements to insert.
+  \param value [in]  Value to insert.
+  */
+  iterator insert(iterator before, size_type numElem, const T& value);
+  iterator insert(iterator before, const T& value = T());
+
+  /** \details
+  Inserts the specified value into this Array object at the specified index.
+
+  \param index [in]  Array index.
+  \param value [in]  Value to insert.
+
+  \remarks
+        0 <= index <= length()
+
+  Elements starting at index will have their indices incremented.
+
+  Returns a reference to this Array object.
+  */
+  OdVector& insertAt(size_type index, const T& value);
+
+  /** \details
+  Removes the element at the specified index from this Array object.
+
+  \param index [in]  Array index.
+
+  \remarks
+      0 <= index < length()
+
+  Elements starting at index+1 will have their indices decremented.
+
+  Returns a reference to this Array object.
+  */
+  OdVector& removeAt(size_type index);
+
+  /** \details
+  Removes the specified elements from this Array object.
+
+  \param startIndex [in]  Start index.
+  \param endIndex [in]   End index.
+
+  \remarks
+  Elements from startIndex through endIndex inclusive will be removed.
+
+  Returns a reference to this Array object.
+  */
+  OdVector& removeSubArray(size_type startIndex, size_type endIndex);
+
+  /** \details
+  Removes the element with the specified value from this Array object.
+
+  \param value [in]  Value for which to search.
+  \param startIndex [in]  Starting index of search.
+
+  \remarks
+  Removes the first occurance of value starting at startIndex.
+
+  Returns true if and only if an element was removed.
+  */
+  bool remove(const T& value, size_type startIndex = 0);
+
+  /** \details
+  Specifies the logical length for this Array object.
+  \param logicalLength [in]  Logical length.
+  \param value [in]  Value for the elements added to obtain the new logical length.
+  */
+  void resize(size_type logicalLength, const T& value);
+  void resize(size_type logicalLength);
+
+  /** \details
+  Returns the logical length of this Array object.
+  */
+  size_type size() const;
+
+  /** \details
+  Returns true if and only if this Array is empty.
+  */
+  bool empty() const;
+
+  /** \details
+  Returns the physical length of this Array object.
+  */
+  size_type capacity() const;
+
+  /** \details
+  Sets the physical length of this Array object to the specified
+  reserve length if the reserve length is greater than its physical length.
+
+  \param reserveLength [in]  Minimum physical length.
+  */
+  void reserve(size_type reserveLength);
+
+  /** \details
+  Assigns the specified range of elements to this Array object.
+
+  \param first [in]  Position of first element to be assigned.
+  \param afterLast [in]  Position of first element after the last element to be assigned.
+
+  \remarks
+  After this Array object is cleared, this function assigns the specified range of elements from
+  another Array object.
+  */
+  void assign(const_iterator first, const_iterator afterLast);
+
+  /** \details
+  Removes the specified element or range of elements from this Array object.
+
+  \param first [in]  Position of first element to be assigned.
+  \param afterLast [in]  Position of first element after the last element to be assigned.
+  */
+  iterator erase(iterator first, iterator afterLast);
+
+  /** \param where [in]  Element to remove.
+  */
+  iterator erase(iterator where);
+
+  /** \details
+  Removes all elements from this Array object.
+  */
+  void clear();
+
+  /** \details
+  Appends an element to the end of this Array object.
+  */
+  void push_back(const T& value);
+
+  /** \details
+  Returns true if and only if this Array object contains ths specified value.
+
+  \param value [in]  Value for which to search.
+  \param startIndex [in]  Starting index of search.
+  */
+  bool contains(const T& value, size_type startIndex = 0) const;
+
+  /** \details
+  Returns the number of elements in this Array object.
+  */
+  size_type length() const;
+
+  /** \details
+  Returns true if and only if this Array is empty.
+  */
+  bool isEmpty() const;
+
+  /** \details
+  Returns the logical length of this Array object.
+  */
+  size_type logicalLength() const;
+
+  /** \details
+  Returns the physical length of this Array object.
+  */
+  size_type physicalLength() const;
+
+  /** \details
+  Returns the grow length of this Array object.
+  */
+  int growLength() const;
+
+  /** \details
+  Returns the data buffer of this Array object.
+  */
+  const T* asArrayPtr() const;
+
+  /** \details
+  Returns the data buffer of this Array object.
+  */
+  const T* getPtr() const;
+
+  T* asArrayPtr();
+
+  /** \remarks
+  For convenient access to the data.
+  */
+  const T& operator[](size_type index) const;
+  T& operator[](size_type index);
+
+  /** \details
+  Returns the element of this Array object at the specified index.
+  \param arrayIndex [in]  Array index.
+  */
+  T& at(size_type index);
+  const T& at(size_type index) const;
+
+  /** \details
+  Sets the element of this Array object at the specified index.
+  \param arrayIndex [in]  Array index.
+  \param value [in]  Value.
+  */
+  OdVector& setAt(size_type index, const T& value);
+
+  /** \details
+  Returns the element of this Array object at the specified position.
+  \param arrayIndex [in]  Array index.
+  */
+  const T& getAt(size_type index) const;
+
+  /** \details
+  Returns the first element of this Array object.
+  */
+  T& first();
+  const T& first() const;
+
+  /** \details
+  Returns the last element of this Array object.
+  */
+  T& last();
+  const T& last() const;
+
+  size_type append(const T& value);
+  iterator append();
+
+  /** \details
+  Appends the specified value or Array object to the end of this Array object.
+
+  \param vec [in]  Array to append.
+  \param value [in]  Value to append.
+
+  \remarks
+  If called with otherArray, returns a reference to this Array object.
+
+  If called with value, returns the index of the new last element.
+
+  If called with no arguments, returns an interator (pointer) to the first element
+  after the last element in the array.
+  */
+  OdVector& append(const OdVector& vec);
+
+  /** \details
+  Removes the first element in this Array object.
+  */
+  OdVector& removeFirst();
+
+  /** \details
+  Removes the last element in this Array object.
+  */
+  OdVector& removeLast();
+
+  bool operator==(const OdVector& vec) const;
+
+  /** \details
+  Sets all the elements in this Array object to the specified value.
+  \param value [in]  Value to assign.
+  */
+  OdVector& setAll(const T& value);
+
+  /** \details
+  Returns true if and only if this Array object contains ths specified value.
+
+  \param value [in]  Value for which to search.
+  \param index [out]  Receives the index of the found value.
+  \param startIndex [in]  Starting index of search.
+
+  \remarks
+  Returns the index at which the element was found.
+  */
+  bool find(const T& value, size_type& index, size_type startIndex = 0) const;
+
+  /** \details
+  Sets the logical length of this Array object.
+  \param logicalLength [in]  Logical length.
+  \remarks
+  The physical length is increased as required.
+  */
+  OdVector& setLogicalLength(size_type logicalLength);
+
+  /** \details
+  Sets the physical length of this Array object.
+  \param physicalLength [in]  Physical length.
+  \remarks
+  The logical length is decreased as required.
+  */
+  OdVector& setPhysicalLength(size_type physicalLength);
+
+  /** \details
+  Sets the grow length of this Array object.
+  \param growLength [in]  Grow length.
+  */
+  OdVector& setGrowLength(int growLength);
+
+  /** \details
+  Reverses the order of the elements in this Array object.
+  */
+  OdVector& reverse();
+
+  /** \details
+  Swaps the specified elements in this Array object.
+  \param firstIndex [in]  Index of first element.
+  \param secondIndex [in]  Index of second element.
+  */
+  OdVector& swap(size_type firstIndex, size_type secondIndex);
+
+private:
+  T* m_pData;
+  size_type m_physicalLength;
+  size_type m_logicalLength;
+  int m_growLength;
+};
+
+
+#define VEC_SIZE_TYPE typename OdVector<T, A, Mm>::size_type
+#define VEC_ITERATOR typename OdVector<T, A, Mm>::iterator
+#define VEC_CONST_ITERATOR typename OdVector<T, A, Mm>::const_iterator
+
+
+template<class T, class A, class Mm>
+inline OdVector<T, A, Mm>::OdVector(VEC_SIZE_TYPE physicalLength, int growLength)
+: m_pData(NULL), m_physicalLength(physicalLength), m_logicalLength(0)
+, m_growLength(growLength)
+{
+  if(m_growLength == 0)
+  {
+    ODA_FAIL();
+    m_growLength = -200;
+  }
+  if (m_physicalLength)
+  {
+    m_pData = allocate(m_physicalLength);
+  }
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>::OdVector()
+: m_pData(NULL), m_physicalLength(0), m_logicalLength(0), m_growLength(-200)
+{
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>::OdVector(const OdVector<T, A, Mm>& vec)
+: m_pData(NULL), m_physicalLength(vec.m_physicalLength)
+, m_logicalLength(vec.m_logicalLength), m_growLength(vec.m_growLength)
+{
+  if(m_physicalLength > 0)
+  {
+    m_pData = allocate(m_physicalLength);
+
+    A::copy(m_pData, vec.m_pData, m_logicalLength);
+  }
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>::~OdVector()
+{
+  release();
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::operator=(const OdVector<T, A, Mm>& vec)
+{
+  if(this != &vec)
+  {
+    if(m_physicalLength < vec.m_logicalLength)
+    {
+      release();
+      
+      m_pData = allocate(vec.m_logicalLength);
+      m_physicalLength = vec.m_logicalLength;
+    }
+    
+    m_logicalLength = vec.m_logicalLength;
+    
+    A::copy(m_pData, vec.m_pData, m_logicalLength);
+  }
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline T* OdVector<T, A, Mm>::allocate(VEC_SIZE_TYPE physicalLength)
+{
+  ODA_ASSERT(physicalLength != 0);
+  const VEC_SIZE_TYPE  numByte = physicalLength*sizeof(T);
+
+  ODA_ASSERT(numByte >= physicalLength); // size_type overflow
+
+  T* pData = ((numByte >= physicalLength)
+    ? reinterpret_cast<T*>(Mm::Alloc(numByte))
+    : NULL);
+
+  if(pData == NULL)
+    throw OdError(eOutOfMemory);
+
+  return pData;
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::release()
+{
+  if(m_pData != NULL)
+  {
+    A::destroy(m_pData, m_logicalLength);
+
+    Mm::Free(m_pData);
+    m_pData = NULL;
+    m_physicalLength = 0;
+  }
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::reallocate(VEC_SIZE_TYPE physicalLength, bool isUseRealloc, bool isForcePhysicalLength)
+{
+  T* pOldData = m_pData;
+  VEC_SIZE_TYPE newPhysicalLength = physicalLength;
+
+  if(!isForcePhysicalLength)
+  {
+    if(m_growLength > 0)
+    {
+      newPhysicalLength = ((newPhysicalLength + m_growLength - 1)/m_growLength) * m_growLength;
+    }
+    else
+    {
+      newPhysicalLength = m_logicalLength + (-m_growLength)*m_logicalLength/100;
+
+      if(newPhysicalLength < physicalLength)
+        newPhysicalLength = physicalLength;
+    }
+  }
+  
+  if(isUseRealloc && A::useRealloc() && m_logicalLength > 0 && m_pData != NULL)
+  {
+    m_pData = reinterpret_cast<T*>(Mm::Realloc(pOldData, newPhysicalLength*sizeof(T), m_physicalLength*sizeof(T)));
+
+    if (!m_pData)
+      throw OdError(eOutOfMemory);
+
+    m_physicalLength = newPhysicalLength;
+
+    if(physicalLength < m_logicalLength)
+      m_logicalLength = physicalLength;
+  }
+  else
+  {
+    T* pNewData = allocate(newPhysicalLength);
+    const VEC_SIZE_TYPE newLogicalLength = odmin(m_logicalLength, physicalLength);
+
+    A::constructn(pNewData, pOldData, newLogicalLength);
+    
+    release();
+
+    m_pData = pNewData;
+    m_physicalLength = newPhysicalLength;
+    m_logicalLength = newLogicalLength;
+  }
+}
+
+template <class T, class A, class Mm>
+inline bool OdVector<T, A, Mm>::isValid(VEC_SIZE_TYPE index) const
+{
+  // index is unsigned here, no need >= 0 check
+  return (index < m_logicalLength);
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::assertValid(VEC_SIZE_TYPE index) const
+{
+  if(!isValid(index))
+  {
+    ODA_FAIL();
+    throw OdError_InvalidIndex();
+  }
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::riseError(OdResult res)
+{
+  ODA_FAIL();
+  throw OdError(res);
+}
+
+template <class T, class A, class Mm>
+inline VEC_CONST_ITERATOR OdVector<T, A, Mm>::begin_const() const
+{
+  return begin();
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::begin_non_const()
+{
+  return begin();
+}
+
+template <class T, class A, class Mm>
+inline VEC_CONST_ITERATOR OdVector<T, A, Mm>::end_const() const
+{
+  return end();
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::end_non_const()
+{
+  return end();
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::begin()
+{
+  return (!isEmpty() ? m_pData : NULL);
+}
+
+template <class T, class A, class Mm>
+inline VEC_CONST_ITERATOR OdVector<T, A, Mm>::begin() const
+{
+  return (!isEmpty() ? m_pData : NULL);
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::end()
+{
+  return (!isEmpty() ? m_pData + m_logicalLength : NULL);
+}
+
+template <class T, class A, class Mm>
+inline VEC_CONST_ITERATOR OdVector<T, A, Mm>::end() const
+{
+  return (!isEmpty() ? m_pData + m_logicalLength : NULL);
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::insert(VEC_ITERATOR before, VEC_CONST_ITERATOR first, VEC_CONST_ITERATOR afterLast)
+{
+  const VEC_SIZE_TYPE oldLogicalLength = m_logicalLength;
+  const VEC_SIZE_TYPE index = (VEC_SIZE_TYPE)(before - begin_const());
+  
+  if(index <= m_logicalLength && afterLast >= first)
+  {
+    if(afterLast > first)
+    {
+      const VEC_SIZE_TYPE numElem = (VEC_SIZE_TYPE)(afterLast - first);
+      const VEC_SIZE_TYPE newLogicalLength = oldLogicalLength + numElem;
+      
+      if(newLogicalLength > m_physicalLength)
+        reallocate(newLogicalLength, first < begin() || first >= end());
+      
+      A::constructn(m_pData + oldLogicalLength, first, numElem);
+      
+      m_logicalLength = newLogicalLength;
+      
+      T* pData = m_pData + index;
+      
+      if(index != oldLogicalLength)
+        A::move(pData + numElem, pData, oldLogicalLength - index);
+      
+      A::copy(pData, first, numElem);
+    }
+  }
+  else
+    riseError(eInvalidInput);
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::insert(VEC_ITERATOR before, VEC_SIZE_TYPE numElem, const T& value)
+{
+  const VEC_SIZE_TYPE oldLogicalLength = m_logicalLength;
+  const VEC_SIZE_TYPE newLogicalLength = oldLogicalLength + numElem;
+  const VEC_SIZE_TYPE index = (VEC_SIZE_TYPE)(before - begin_const());
+  
+  if(newLogicalLength > m_physicalLength)
+    reallocate(newLogicalLength, &value < begin() || &value >= end());
+  
+  A::constructn(m_pData + oldLogicalLength, numElem, value);
+  
+  m_logicalLength = newLogicalLength;
+  
+  T* pData = m_pData + index;
+  
+  if(index != oldLogicalLength)
+    A::move(pData + numElem, pData, oldLogicalLength - index);
+  
+  while(numElem--)
+    pData[numElem] = value;
+  
+  return (begin_non_const() + index);
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::insert(VEC_ITERATOR before, const T& value)
+{
+  const VEC_SIZE_TYPE index = (VEC_SIZE_TYPE)(before - begin_const());
+  
+  insertAt(index, value);
+  
+  return (begin_non_const() + index);
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::insertAt(VEC_SIZE_TYPE index, const T& value)
+{
+  const VEC_SIZE_TYPE oldLogicalLength = m_logicalLength;
+  const VEC_SIZE_TYPE newLogicalLength = oldLogicalLength + 1;
+  
+  if(index == oldLogicalLength)
+    resize(newLogicalLength, value);
+  else if(index < oldLogicalLength)
+  {
+    if(newLogicalLength > m_physicalLength)
+      reallocate(newLogicalLength, &value < begin() || &value >= end());
+    
+    A::construct(m_pData + oldLogicalLength);
+    
+    ++m_logicalLength;
+    
+    T* pData = m_pData + index;
+    
+    A::move(pData + 1, pData, oldLogicalLength - index);
+    
+    m_pData[index] = value;
+  }
+  else
+    riseError(eInvalidIndex);
+  
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::removeAt(VEC_SIZE_TYPE index)
+{
+  assertValid(index);
+  
+  const VEC_SIZE_TYPE newLogicalLength = m_logicalLength - 1;
+  
+  if(index < newLogicalLength)
+  {
+    T* pData = m_pData + index;
+    A::move(pData, pData + 1, newLogicalLength - index);
+  }
+  
+  resize(newLogicalLength);
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::removeSubArray(VEC_SIZE_TYPE startIndex, VEC_SIZE_TYPE endIndex)
+{
+  if(!isValid(startIndex) || startIndex > endIndex)
+    riseError(eInvalidIndex);
+  
+  const VEC_SIZE_TYPE oldLogicalLength = m_logicalLength;
+  
+  T* pData = m_pData;
+  
+  ++endIndex;
+  
+  const VEC_SIZE_TYPE numElem = endIndex - startIndex;
+  
+  A::move(pData + startIndex, pData + endIndex, oldLogicalLength - endIndex);
+  A::destroy(pData + oldLogicalLength - numElem, numElem);
+  
+  m_logicalLength -= numElem;  
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline bool OdVector<T, A, Mm>::remove(const T& value, VEC_SIZE_TYPE startIndex)
+{
+  VEC_SIZE_TYPE index = 0;
+  if(find(value, index, startIndex))
+  {
+    removeAt(index);
+    return true;
+  }
+  return false;
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::resize(VEC_SIZE_TYPE logicalLength, const T& value)
+{
+  const VEC_SIZE_TYPE oldLogicalLength = m_logicalLength;
+  const int lengthDiff = logicalLength - oldLogicalLength;
+
+  if(lengthDiff > 0)
+  {
+    if(logicalLength > m_physicalLength)
+      reallocate(logicalLength, &value < begin() || &value >= end());
+
+    A::constructn(m_pData + oldLogicalLength, lengthDiff, value);
+  }
+  else if(lengthDiff < 0)
+    A::destroy(m_pData + logicalLength, -lengthDiff);
+
+  m_logicalLength = logicalLength;
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::resize(VEC_SIZE_TYPE logicalLength)
+{
+  const VEC_SIZE_TYPE oldLogicalLength = m_logicalLength;
+  const int lengthDiff = logicalLength - oldLogicalLength;
+
+  if(lengthDiff > 0)
+  {
+    if(logicalLength > m_physicalLength)
+      reallocate(logicalLength, true);
+    A::constructn(m_pData + oldLogicalLength, lengthDiff);
+  }
+  else if(lengthDiff < 0)
+    A::destroy(m_pData + logicalLength, -lengthDiff);
+
+  m_logicalLength = logicalLength;
+}
+
+template <class T, class A, class Mm>
+inline VEC_SIZE_TYPE OdVector<T, A, Mm>::size() const
+{
+  return m_logicalLength;
+}
+
+template <class T, class A, class Mm>
+inline bool OdVector<T, A, Mm>::empty() const
+{
+  return (m_logicalLength == 0);
+}
+
+template <class T, class A, class Mm>
+inline VEC_SIZE_TYPE OdVector<T, A, Mm>::capacity() const
+{
+  return m_physicalLength;
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::reserve(VEC_SIZE_TYPE reserveLength)
+{
+  if(m_physicalLength < reserveLength)
+    setPhysicalLength(reserveLength);
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::assign(VEC_CONST_ITERATOR first, VEC_CONST_ITERATOR afterLast)
+{
+  erase(begin_non_const(), end_non_const());
+  
+  insert(begin_non_const(), first, afterLast);
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::erase(VEC_ITERATOR first, VEC_ITERATOR afterLast)
+{
+  const VEC_SIZE_TYPE index = (VEC_SIZE_TYPE)(first - begin_const());
+	
+  if(first != afterLast)
+    removeSubArray(index, (VEC_SIZE_TYPE)(afterLast - begin_const() - 1));
+	
+  return (begin_non_const() + index);
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::erase(VEC_ITERATOR it)
+{
+  const VEC_SIZE_TYPE index = (VEC_SIZE_TYPE)(it - begin_const());
+	
+  removeAt(index);
+
+  return (begin_non_const() + index);
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::clear()
+{
+  erase(begin_non_const(), end_non_const());
+}
+
+template <class T, class A, class Mm>
+inline void OdVector<T, A, Mm>::push_back(const T& value)
+{
+  insertAt(m_logicalLength, value);
+}
+
+template <class T, class A, class Mm>
+inline bool OdVector<T, A, Mm>::contains(const T& value, VEC_SIZE_TYPE startIndex) const
+{
+  VEC_SIZE_TYPE index;
+
+  return find(value, index, startIndex);
+}
+
+template <class T, class A, class Mm>
+inline VEC_SIZE_TYPE OdVector<T, A, Mm>::length() const
+{
+  return m_logicalLength;
+}
+
+template <class T, class A, class Mm>
+inline bool OdVector<T, A, Mm>::isEmpty() const
+{
+  return (m_logicalLength == 0);
+}
+
+template <class T, class A, class Mm>
+inline VEC_SIZE_TYPE OdVector<T, A, Mm>::logicalLength() const
+{
+  return m_logicalLength;
+}
+
+template <class T, class A, class Mm>
+inline VEC_SIZE_TYPE OdVector<T, A, Mm>::physicalLength() const
+{
+  return m_physicalLength;
+}
+
+template <class T, class A, class Mm>
+inline int OdVector<T, A, Mm>::growLength() const
+{
+  return m_growLength;
+}
+
+template <class T, class A, class Mm>
+inline const T* OdVector<T, A, Mm>::asArrayPtr() const
+{
+  return m_pData;
+}
+
+template <class T, class A, class Mm>
+inline const T* OdVector<T, A, Mm>::getPtr() const
+{
+  return m_pData;
+}
+
+template <class T, class A, class Mm>
+inline T* OdVector<T, A, Mm>::asArrayPtr()
+{ // OdArray::asArrayPtr invokes non-const version of data() method which checks length and return null.
+  // Constant version of asArrayPtr and getPtr will return m_pData as is for OdArray too.
+  return (length()) ? m_pData : NULL;
+}
+
+template <class T, class A, class Mm>
+inline const T& OdVector<T, A, Mm>::operator[](VEC_SIZE_TYPE index) const
+{
+  assertValid(index);
+  return m_pData[index];
+}
+
+template <class T, class A, class Mm>
+inline T& OdVector<T, A, Mm>::operator[](VEC_SIZE_TYPE index)
+{
+  assertValid(index);
+  return m_pData[index];
+}
+
+template <class T, class A, class Mm>
+inline T& OdVector<T, A, Mm>::at(VEC_SIZE_TYPE index)
+{
+  assertValid(index);
+  return m_pData[index];
+}
+
+template <class T, class A, class Mm>
+inline const T& OdVector<T, A, Mm>::at(VEC_SIZE_TYPE index) const
+{
+  assertValid(index);
+  return m_pData[index];
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::setAt(VEC_SIZE_TYPE index, const T& value)
+{
+  assertValid(index);
+  
+  m_pData[index] = value;
+  
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline const T& OdVector<T, A, Mm>::getAt(VEC_SIZE_TYPE index) const
+{
+  assertValid(index);
+  return m_pData[index];
+}
+
+template <class T, class A, class Mm>
+inline T& OdVector<T, A, Mm>::first()
+{
+  return m_pData[0];
+}
+
+template <class T, class A, class Mm>
+inline const T& OdVector<T, A, Mm>::first() const
+{
+  return m_pData[0];
+}
+
+template <class T, class A, class Mm>
+inline T& OdVector<T, A, Mm>::last()
+{
+  return m_pData[m_logicalLength - 1];
+}
+
+template <class T, class A, class Mm>
+inline const T& OdVector<T, A, Mm>::last() const
+{
+  return m_pData[m_logicalLength - 1];
+}
+
+template <class T, class A, class Mm>
+inline VEC_SIZE_TYPE OdVector<T, A, Mm>::append(const T& value)
+{
+  insertAt(m_logicalLength, value);
+  return (m_logicalLength - 1);
+}
+
+template <class T, class A, class Mm>
+inline VEC_ITERATOR OdVector<T, A, Mm>::append()
+{
+  const VEC_SIZE_TYPE index = append(T());
+  return (begin_non_const() + index);
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::append(const OdVector<T, A, Mm>& vec)
+{
+  insert(end_non_const(), vec.begin(), vec.end());
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::removeFirst()
+{
+  return removeAt(0);
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::removeLast()
+{
+  return removeAt(m_logicalLength - 1);
+}
+
+template <class T, class A, class Mm>
+inline bool OdVector<T, A, Mm>::operator==(const OdVector<T, A, Mm>& vec) const
+{
+  if(m_logicalLength == vec.m_logicalLength)
+  {
+    for(VEC_SIZE_TYPE i = 0; i < m_logicalLength; ++i)
+    {
+      if(m_pData[i] != vec.m_pData[i])
+        return false;
+    }
+    return true;
+  }
+  return false;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::setAll(const T& value)
+{
+  for(VEC_SIZE_TYPE i = 0; i < m_logicalLength; ++i)
+    m_pData[i] = value;
+  
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline bool OdVector<T, A, Mm>::find(const T& value, VEC_SIZE_TYPE& index, VEC_SIZE_TYPE startIndex) const
+{
+  if(!isEmpty())
+  {
+    assertValid(startIndex);
+    
+    for(VEC_SIZE_TYPE i = startIndex; i < m_logicalLength; ++i)
+    {
+      if(m_pData[i] == value)
+      {
+        index = i;
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::setLogicalLength(VEC_SIZE_TYPE logicalLength)
+{
+  resize(logicalLength);
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::setPhysicalLength(VEC_SIZE_TYPE physicalLength)
+{
+  if(physicalLength == 0)
+  {
+    release();
+    
+    m_pData = NULL;
+    m_physicalLength = 0;
+  }
+  else if(physicalLength != m_physicalLength)
+    reallocate(physicalLength, true, true);
+  
+  if(m_physicalLength < m_logicalLength)
+    m_logicalLength = m_physicalLength;
+  
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::setGrowLength(int growLength)
+{
+  if(growLength != 0)
+    m_growLength = growLength;
+  else
+    ODA_FAIL();
+  
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::reverse()
+{
+  if(!isEmpty())
+  {
+    T value;
+    VEC_ITERATOR it1 = begin_non_const();
+    VEC_ITERATOR it2 = end_non_const();
+    
+    --it2;
+    
+    while(it1 < it2)
+    {
+      value = *it1;
+      *it1 = *it2;
+      *it2 = value;
+      
+      ++it1;
+      --it2;
+    }
+  }  
+  return *this;
+}
+
+template <class T, class A, class Mm>
+inline OdVector<T, A, Mm>& OdVector<T, A, Mm>::swap(VEC_SIZE_TYPE firstIndex, VEC_SIZE_TYPE secondIndex)
+{
+  if(!isValid(firstIndex) || !isValid(secondIndex))
+    riseError(eInvalidIndex);
+  
+  if(firstIndex != secondIndex)
+  {
+    const T value = m_pData[firstIndex];
+    m_pData[firstIndex] = m_pData[secondIndex];
+    m_pData[secondIndex] = value;
+  }
+  
+  return *this;
+}
+
+
+#include "TD_PackPop.h"
+
+typedef OdVector<int, OdMemoryAllocator<int> > OdIntVector;
+typedef OdVector<OdUInt32, OdMemoryAllocator<OdUInt32> > OdUInt32Vector;
+typedef OdVector<OdInt32, OdMemoryAllocator<OdInt32> > OdInt32Vector;
+typedef OdVector<OdUInt8, OdMemoryAllocator<OdUInt8> > OdUInt8Vector;
+typedef OdVector<OdUInt64, OdMemoryAllocator<OdUInt64> > OdUInt64Vector;
+#ifdef OD_GEPNT3D_H
+typedef OdVector<OdGePoint3d, OdMemoryAllocator<OdGePoint3d> > OdGePoint3dVector;
+#endif
+#ifdef OD_GEVEC3D_H
+typedef OdVector<OdGeVector3d, OdMemoryAllocator<OdGeVector3d> > OdGeVector3dVector;
+#endif
+
+#endif // OdVector_H_INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaCommon.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaCommon.h
new file mode 100755
index 0000000..c9e99ed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaCommon.h
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODA_COMMON_INCLUDED_
+#define _ODA_COMMON_INCLUDED_
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#endif
+
+#if defined(_MSC_VER) && !defined(_WIN32_WINNT) && !defined(_WINRT)
+#define _WIN32_WINNT 0x0500
+#endif
+
+#ifdef _WINRT
+#define _WIN32_WINNT 0x0602
+#endif
+
+#include "TDVersion.h"
+#include "DbExport.h"
+
+#include  "DebugStuff.h"
+#include  "OdaDefs.h"
+#include  "OdPlatform.h"
+
+#include "OdModuleNames.h"
+
+/* {NoAutoLink} */
+#define OdaPI 3.14159265358979323846
+/* {NoAutoLink} */
+#define OdaPI2 (OdaPI / 2.0)
+/* {NoAutoLink} */
+#define OdaPI4 (OdaPI / 4.0)
+/* {NoAutoLink} */
+#define Oda2PI (OdaPI+OdaPI)
+
+/** \details
+  Converts a value in radians to a value in degrees.
+
+  \sa
+  OdaToRadian() pseudo-function
+*/
+#define OdaToDegree(rad) ((rad)/OdaPI*180.0)
+
+/** \details
+  Converts a value in degrees to a value in radians.
+
+  \sa
+  OdaToDegree() pseudo-function
+*/
+#define OdaToRadian(deg) ((deg)*OdaPI/180.0)
+
+// SSL:
+// from http://www.ex.ac.uk/cimt/dictunit/dictunit.htm
+//
+// Even as late as the middle of the 20th century there were some differences in UK
+// and US measures which were nominally the same. The UK inch measured 2.53998 cm while
+// the US inch was 2.540005 cm. Both were standardised at 2.54 cm in July 1959.
+
+/* {NoAutoLink} */
+const double kMmPerInch = 25.4;
+
+#ifdef EMCC
+#include <iostream>
+#endif
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaDefs.h
new file mode 100755
index 0000000..7f362c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaDefs.h
@@ -0,0 +1,521 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODA_DEFS_
+#define _ODA_DEFS_
+
+#ifndef _ODA_COMMON_INCLUDED_
+#error  "Each cpp module MUST include OdaCommon.h as first header included"
+#endif
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum DwgVersion
+  {
+    kDHL_MC0_0   = 0,
+    kDHL_AC1_2   = 1,
+    kDHL_AC1_40  = 2,
+    kDHL_AC1_50  = 3,
+    kDHL_AC2_20  = 4,
+    kDHL_AC2_10  = 5,
+    kDHL_AC2_21  = 6,
+    kDHL_AC2_22  = 7,
+    kDHL_1001    = 8,
+    kDHL_1002    = 9,             // Release 2.5
+    vAC025       = kDHL_1002,     // Release 2.5
+    kDHL_1003    = 10,            // Release 2.6
+    vAC026       = kDHL_1003,     // Release 2.6
+    kDHL_1004    = 11,            // Release 9
+    vAC09        = kDHL_1004,     // Release 9
+    kDHL_1005    = 12,
+    kDHL_1006    = 13,            // Release 10
+    vAC10        = kDHL_1006,     // Release 10
+    kDHL_1007    = 14,
+    kDHL_1008    = 15,
+    kDHL_1009    = 16,             // R11 and R12
+    vAC12        = kDHL_1009,      // R11 and R12
+    kDHL_1010    = 17,
+    kDHL_1011    = 18,
+    kDHL_1012    = 19,             // R13
+    vAC13        = kDHL_1012,      // R13
+    kDHL_1013    = 20,             // R14 beta
+    vAC14beta    = kDHL_1013,      // R14 beta
+    kDHL_1014    = 21,             // R14 release
+    vAC14        = kDHL_1014,      // R14 release
+    kDHL_1500    = 22,             // R15 (2000) beta
+    kDHL_1015    = 23,             // R15 (2000) release
+    vAC15        = kDHL_1015,      // R15 (2000) release
+    kDHL_1800a   = 24,             // R18 (2004) beta
+    kDHL_1800    = 25,             // R18 (2004) release
+    vAC18        = kDHL_1800,      // R18 (2004) release
+    kDHL_2100a   = 26,             // R21 (2007) beta
+    kDHL_1021    = 27,             // R21 (2007) release
+    vAC21        = kDHL_1021,      // R21 (2007) release
+    kDHL_2400a   = 28,             // R24 (2010) beta
+    kDHL_1024    = 29,             // R24 (2010) release
+    vAC24        = kDHL_1024,      // R24 (2010) release
+    kDHL_2700a   = 30,             // R27 (2013) beta
+    kDHL_1027    = 31,             // R27 (2013) release
+    vAC27        = kDHL_1027,      // R27 (2013) release
+
+    kDHL_PRECURR = vAC24,
+    kDHL_CURRENT = vAC27,
+    kDHL_Unknown = 32766,
+    kDHL_Max     = 32767
+  };
+
+  enum MaintReleaseVer
+  {
+    kMRelease0      = 0,
+    kMRelease1      = 1,
+    kMRelease2      = 2,
+    kMRelease3      = 3,
+    kMRelease4      = 4,
+    kMRelease5      = 5,
+    kMRelease6      = 6,
+    kMRelease7      = 7,
+    kMRelease8      = 8,
+    kMRelease9      = 9,
+    kMRelease10     = 10,
+    kMRelease11     = 11,
+    kMRelease12     = 12,
+    kMRelease13     = 13,
+    kMRelease14     = 14,
+    kMRelease15     = 15,
+    kMRelease16     = 16,
+    kMRelease17     = 17,
+    kMRelease18     = 18,
+    kMRelease19     = 19,
+    kMRelease20     = 20,
+    kMRelease21     = 21,
+    kMRelease22     = 22,
+    kMRelease23     = 23,
+    kMRelease24     = 24,
+    kMRelease25     = 25,
+    kMRelease26     = 26,
+    kMRelease27     = 27,
+    kMRelease28     = 28,
+    kMRelease29     = 29,
+    kMRelease30     = 30,
+    kMRelease31     = 31,
+    kMRelease32     = 32,
+    kMRelease33     = 33,
+    kMRelease34     = 34,
+    kMRelease35     = 35,
+    kMRelease36     = 36,
+    kMRelease37     = 37,
+    kMRelease38     = 38,
+    kMRelease39     = 39,
+    kMRelease40     = 40,
+    kMRelease41     = 41,
+    kMRelease42     = 42,
+    kMRelease43     = 43,
+    kMRelease44     = 44,
+    kMRelease45     = 45,
+    kMRelease46     = 46,
+    kMRelease47     = 47,
+    kMRelease48     = 48,
+    kMRelease49     = 49,
+    kMRelease50     = 50,
+    kMRelease51     = 51,
+    kMRelease52     = 52,
+    kMRelease53     = 53,
+    kMRelease54     = 54,
+    kMRelease55     = 55,
+    kMRelease56     = 56,
+    kMRelease57     = 57,
+    kMRelease58     = 58,
+    kMRelease59     = 59,
+    kMRelease60     = 60,
+    kMRelease61     = 61,
+    kMRelease62     = 62,
+    kMRelease63     = 63,
+    kMRelease64     = 64,
+    kMRelease65     = 65,
+    kMRelease66     = 66,
+    kMRelease67     = 67,
+    kMRelease68     = 68,
+    kMRelease69     = 69,
+    kMRelease70     = 70,
+    kMRelease71     = 71,
+    kMRelease72     = 72,
+    kMRelease73     = 73,
+    kMRelease74     = 74,
+    kMRelease75     = 75,
+    kMRelease76     = 76,
+    kMRelease77     = 77,
+    kMRelease78     = 78,
+    kMRelease79     = 79,
+    kMRelease80     = 80,
+    kMRelease81     = 81,
+    kMRelease82     = 82,
+    kMRelease83     = 83,
+    kMRelease84     = 84,
+    kMRelease85     = 85,
+    kMRelease86     = 86,
+    kMRelease87     = 87,
+    kMRelease88     = 88,
+    kMRelease89     = 89,
+    kMRelease90     = 90,
+    kMRelease91     = 91,
+    kMRelease92     = 92,
+    kMRelease93     = 93,
+    kMRelease94     = 94,
+    kMRelease95     = 95,
+    kMRelease96     = 96,
+    kMRelease97     = 97,
+    kMRelease98     = 98,
+    kMRelease99     = 99,
+    kMRelease100    = 100,
+    kMRelease101    = 101,
+    kMRelease102    = 102,
+    kMRelease103    = 103,
+    kMRelease104    = 104,
+    kMRelease105    = 105,
+    kMRelease106    = 106,
+    kMRelease107    = 107,
+    kMRelease108    = 108,
+    kMRelease109    = 109,
+    kMRelease110    = 110,
+    kMRelease111    = 111,
+    kMRelease112    = 112,
+    kMRelease113    = 113,
+    kMRelease114    = 114,
+    kMRelease115    = 115,
+    kMRelease116    = 116,
+    kMRelease117    = 117,
+    kMRelease118    = 118,
+    kMRelease119    = 119,
+    kMRelease120    = 120,
+    kMRelease121    = 121,
+    kMRelease122    = 122,
+    kMRelease123    = 123,
+    kMRelease124    = 124,                             
+    kMRelease125    = 125,
+    kMRelease126    = 126,
+    kMRelease127    = 127,
+    kMRelease128    = 128,
+    kMRelease129    = 129,
+    kMRelease130    = 130,
+    kMRelease131    = 131,
+    kMRelease132    = 132,
+    kMRelease133    = 133,
+    kMRelease134    = 134,
+    kMRelease135    = 135,
+    kMRelease136    = 136,
+    kMRelease137    = 137,
+    kMRelease138    = 138,
+    kMRelease139    = 139,
+    kMRelease140    = 140,
+    kMRelease141    = 141,
+    kMRelease142    = 142,
+    kMRelease143    = 143,
+    kMRelease144    = 144,
+    kMRelease145    = 145,
+    kMRelease146    = 146,
+    kMRelease147    = 147,
+    kMRelease148    = 148,
+    kMRelease149    = 149,
+    kMRelease150    = 150,
+    kMRelease151    = 151,
+    kMRelease152    = 152,
+    kMRelease153    = 153,
+    kMRelease154    = 154,
+    kMRelease155    = 155,
+    kMRelease156    = 156,
+    kMRelease157    = 157,
+    kMRelease158    = 158,
+    kMRelease159    = 159,
+    kMRelease160    = 160,
+    kMRelease161    = 161,
+    kMRelease162    = 162,
+    kMRelease163    = 163,
+    kMRelease164    = 164,
+    kMRelease165    = 165,
+    kMRelease166    = 166,
+    kMRelease167    = 167,
+    kMRelease168    = 168,
+    kMRelease169    = 169,
+    kMRelease170    = 170,
+    kMRelease171    = 171,
+    kMRelease172    = 172,
+    kMRelease173    = 173,
+    kMRelease174    = 174,
+    kMRelease175    = 175,
+    kMRelease176    = 176,
+    kMRelease177    = 177,
+    kMRelease178    = 178,
+    kMRelease179    = 179,
+    kMRelease180    = 180,
+    kMRelease181    = 181,
+    kMRelease182    = 182,
+    kMRelease183    = 183,
+    kMRelease184    = 184,
+    kMRelease185    = 185,
+    kMRelease186    = 186,
+    kMRelease187    = 187,
+    kMRelease188    = 188,
+    kMRelease189    = 189,
+    kMRelease190    = 190,
+    kMRelease191    = 191,
+    kMRelease192    = 192,
+    kMRelease193    = 193,
+    kMRelease194    = 194,
+    kMRelease195    = 195,
+    kMRelease196    = 196,
+    kMRelease197    = 197,
+    kMRelease198    = 198,
+    kMRelease199    = 199,
+    kMRelease200    = 200,
+    kMRelease201    = 201,
+    kMRelease202    = 202,
+    kMRelease203    = 203,
+    kMRelease204    = 204,
+    kMRelease205    = 205,
+    kMRelease206    = 206,
+    kMRelease207    = 207,
+    kMRelease208    = 208,
+    kMRelease209    = 209,
+    kMRelease210    = 210,
+    kMRelease211    = 211,
+    kMRelease212    = 212,
+    kMRelease213    = 213,
+    kMRelease214    = 214,
+    kMRelease215    = 215,
+    kMRelease216    = 216,
+    kMRelease217    = 217,
+    kMRelease218    = 218,
+    kMRelease219    = 219,
+    kMRelease220    = 220,
+    kMRelease221    = 221,
+    kMRelease222    = 222,
+    kMRelease223    = 223,
+    kMRelease224    = 224,
+    kMRelease225    = 225,
+    kMRelease226    = 226,
+    kMRelease227    = 227,
+    kMRelease228    = 228,
+    kMRelease229    = 229,
+    kMRelease230    = 230,
+    kMRelease231    = 231,
+    kMRelease232    = 232,
+    kMRelease233    = 233,
+    kMRelease234    = 234,
+    kMRelease235    = 235,
+    kMRelease236    = 236,
+    kMRelease237    = 237,
+    kMRelease238    = 238,
+    kMRelease239    = 239,
+    kMRelease240    = 240,
+    kMRelease241    = 241,
+    kMRelease242    = 242,
+    kMRelease243    = 243,
+    kMRelease244    = 244,
+    kMRelease245    = 245,
+    kMRelease246    = 246,
+    kMRelease247    = 247,
+    kMRelease248    = 248,
+    kMRelease249    = 249,
+    kMRelease250    = 250,
+    kMRelease251    = 251,
+    kMRelease252    = 252,
+    kMRelease253    = 253,
+    kMRelease254    = 254,
+    kMRelease255    = 255,
+
+    // kMRelease57 - R27 (2016) beta
+    // kMRelease105 -R27 (2016) release
+    kMReleaseFirstValid1500 = kMRelease41,
+    kMReleaseCurrent = kMRelease105,
+    kMReleaseUnknown = 126,
+    kMReleaseMax     = 127,
+    kMRelease2010Max = 255
+  };
+
+  // lineweights are in 100ths of a millimeter
+  enum LineWeight
+  {
+    kLnWt000          =   0,
+    kLnWt005          =   5,
+    kLnWt009          =   9,
+    kLnWt013          =  13,
+    kLnWt015          =  15,
+    kLnWt018          =  18,
+    kLnWt020          =  20,
+    kLnWt025          =  25,
+    kLnWt030          =  30,
+    kLnWt035          =  35,
+    kLnWt040          =  40,
+    kLnWt050          =  50,
+    kLnWt053          =  53,
+    kLnWt060          =  60,
+    kLnWt070          =  70,
+    kLnWt080          =  80,
+    kLnWt090          =  90,
+    kLnWt100          = 100,
+    kLnWt106          = 106,
+    kLnWt120          = 120,
+    kLnWt140          = 140,
+    kLnWt158          = 158,
+    kLnWt200          = 200,
+    kLnWt211          = 211,
+    kLnWtByLayer      =  -1,
+    kLnWtByBlock      =  -2,
+    kLnWtByLwDefault  =  -3
+  };
+
+  enum PlotStyleNameType
+  {
+    kPlotStyleNameByLayer       = 0,
+    kPlotStyleNameByBlock       = 1,
+    kPlotStyleNameIsDictDefault = 2,
+    kPlotStyleNameById          = 3
+  };
+
+// ODA_MT_DB_BEGIN
+  enum MultiThreadedMode
+  {
+    kSTMode       =  0,
+    kMTRendering  =  1,
+    kMTLoading    =  2
+  };
+// ODA_MT_DB_END
+
+  // Do not append any enums here !
+}
+
+#define SETBIT(flags, bit, value) ((value) ? (flags |= (bit)) : (flags &= ~(bit)))
+#define GETBIT(flags, bit) (((flags) & (bit)) ? true : false)
+
+#define SETBIT_0(flags, bit) (flags &= ~(bit))
+#define SETBIT_1(flags, bit) (flags |=  (bit))
+
+inline bool OdPositive(double x, double tol = 1.e-10)
+{
+  return (x > tol);
+}
+
+inline bool OdNegative(double x, double tol = 1.e-10)
+{
+  return (x < -tol);
+}
+
+inline bool OdZero(double x, double tol = 1.e-10)
+{
+  return !OdPositive(x, tol) && !OdNegative(x, tol);
+}
+
+inline bool OdNonZero(double x, double tol = 1.e-10)
+{
+  return OdPositive(x, tol) || OdNegative(x, tol);
+}
+
+inline bool OdEqual(double x, double y, double tol = 1.e-10)
+{
+  return OdZero(x - y, tol);
+}
+
+inline bool OdLess(double x, double y, double tol = 1.e-10)
+{
+  return x < y - tol;
+}
+
+inline bool OdLessOrEqual(double x, double y, double tol = 1.e-10)
+{
+  return x <= y + tol;
+}
+
+inline bool OdGreater(double x, double y, double tol = 1.e-10)
+{
+  return x > y + tol;
+}
+
+inline bool OdGreaterOrEqual(double x, double y, double tol = 1.e-10)
+{
+  return x >= y - tol;
+}
+
+inline double OdSign(double x)
+{
+  return (x < 0.0 ? -1.0 : (x > 0.0 ? 1.0 : 0.0));
+}
+
+inline int OdSign(int x)
+{
+  return (x < 0 ? -1 : (x > 0 ? 1 : 0));
+}
+
+inline int OdCmpDouble(double x, double y, double tol = 1.e-10)
+{
+  if (OdEqual(x,y,tol))
+    return 0;
+  if (OdPositive(x - y, tol))
+    return 1;
+  else
+    return -1;
+}
+
+inline double safeDivide( double a, double b)
+{
+  if (a == 0.)
+    return 0.;
+  
+  if (b != 0.)
+  {
+    // Binary exponent of 1.e+300 (value which can be safely represented
+    // by IEEE double. Note that even if on some platforms double can represent
+    // larger values they are saved to a .dwg file as IEEE where
+    // DBL_MAX = 1.7976931348623158e+308 and DBL_MAX_EXP = 1024
+    static const int maxBinExp = 997;
+    int nExpA, nExpB;
+    //double dMantissa = 
+    frexp(a, &nExpA);
+    //dMantissa = 
+    frexp(b, &nExpB);
+    if ((nExpA - nExpB) < maxBinExp)
+      return a / b;
+  }
+
+  bool bNeg = (a < 0.);
+  if (b < 0.)
+    bNeg = !bNeg;
+
+  return bNeg ? -1.e+300 : 1.e+300;
+}
+
+
+
+#endif // _ODA_DEFS_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaSTL.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaSTL.h
new file mode 100755
index 0000000..9ca149e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OdaSTL.h
@@ -0,0 +1,830 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////
+// Purpose: Declarations for using STL without warning noise.
+//
+// Usage: Include this file and define at least one of the STL_USING_xxx
+//        macros. Currently supported data types from the STL:
+//
+//        // defines for using the STL
+//        #define STL_USING_ALL
+//        #define STL_USING_MAP
+//        #define STL_USING_VECTOR
+//        #define STL_USING_LIST
+//        #define STL_USING_STRING
+//        #define STL_USING_STREAM
+//        #define STL_USING_IOSTREAM
+//        #define STL_USING_MEMORY
+//        #define STL_USING_STACK
+//        #define STL_USING_ALGORITHM
+//        #define STL_USING_FUNCTIONAL
+//        #define STL_USING_UTILITY
+//        #define STL_USING_SET
+//        #define STL_USING_LIMITS
+//
+// Sample:
+//        #define STL_USING_ALL
+//        #include "OdaSTL.h"
+//
+//   this file based on Oskar Wieland (oskar.wieland@gmx.de)  STL.H
+//////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////
+// include guards
+//////////////////////////////////////////////////////////////////////
+
+//   !!! Do not prevent the multiple include for this file
+
+//#ifndef _ODA_STLHELPER_INCLUDED_
+//#define _ODA_STLHELPER_INCLUDED_
+
+
+//////////////////////////////////////////////////////////////////////
+// handy define to include all stuff
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_ALL
+
+#define STL_USING_MAP
+#define STL_USING_VECTOR
+#define STL_USING_LIST
+#define STL_USING_STRING
+#define STL_USING_STREAM
+#define STL_USING_IOSTREAM
+#define STL_USING_MEMORY
+#define STL_USING_STACK
+#define STL_USING_ALGORITHM
+#define STL_USING_FUNCTIONAL
+#define STL_USING_UTILITY
+#define STL_USING_SET
+#define STL_USING_LIMITS
+
+#endif
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for map
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_MAP
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+
+// BUG: C4786 Warning Is Not Disabled with #pragma Warning
+// STATUS: Microsoft has confirmed this to be a bug in the Microsoft product. 
+// This warning can be ignored. This occured only in the <map> container.
+
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif // _MSC_VER
+
+#include <map>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif  //STL_USING_MAP
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for vector
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_VECTOR
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <vector>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif  // STL_USING_VECTOR
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for list
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_LIST
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif
+
+#include <list>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif  // STL_USING_LIST
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for string
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_STRING
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <string>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4514)  // unreferenced inline/local function has been removed
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters 
+                                // in the debug information
+#endif 
+
+#endif  // STL_USING_STRING
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for streams
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_STREAM
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#ifdef OD_HAVE_SSTREAM_FILE
+#include <sstream>
+#endif
+
+#ifdef OD_HAVE_FSTREAM_FILE
+#include <fstream>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif //STL_USING_STREAM
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for input/output streams
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_IOSTREAM
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <iostream>
+#ifdef OD_HAVE_IOMANIP_FILE
+#include <iomanip>
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif //STL_USING_IOSTREAM
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for memory
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_MEMORY
+
+// The STL library provides a type called auto_ptr for managing pointers.  
+// This template class acts as a stack variable for dynamically allocated 
+// memory.  When the variable goes out of scope, its destructor gets called.  
+// In its destructor, it calls delete on the contained pointer, making sure 
+// that the memory is returned to the heap.
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <memory>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif //STL_USING_MEMORY
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for stack
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_STACK
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <stack>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif // STL_USING_STACK
+
+
+#ifdef STL_USING_QUEUE
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+// to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <queue>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif // STL_USING_STACK
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for algorithm
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_ALGORITHM
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <algorithm>
+#include <iterator>
+
+// in STLPORT used with BCC 5.6 std::remove clashes with remove(char*) from iostream
+#ifdef __SGI_STL_PORT
+/** \details
+  
+    <group TD_Namespaces>
+*/
+/*!DOM*/
+namespace std 
+{
+  using _STLP_STD::remove;
+}
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif // STL_USING_ALGORITHM
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for functional
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_FUNCTIONAL
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <functional>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif // STL_USING_FUNCTIONAL
+
+
+//////////////////////////////////////////////////////////////////////
+// STL neccessary declaration for utilities
+//////////////////////////////////////////////////////////////////////
+
+#ifdef STL_USING_UTILITY
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template 'vector'
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <utility>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif // STL_USING_FUNCTIONAL
+
+#ifdef STL_USING_SET
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#endif // _MSC_VER
+
+#ifdef _MSC_VER
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#endif
+
+#ifdef _MSC_VER
+#pragma warning(disable: 4018)  // signed/unsigned mismatch
+#pragma warning(disable: 4097)  // typedef-name 'identifier1' used as synonym for class-name 'identifier2'
+#pragma warning(disable: 4100)  // unreferenced formal parameter
+#pragma warning(disable: 4127)  // conditional expression is constant
+#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable: 4244)  // 'conversion' conversion from 'type1' to 'type2', possible loss of data
+#pragma warning(disable: 4245)  // conversion from 'type1' to 'type2', signed/unsigned mismatch
+#pragma warning(disable: 4284)  // return type for 'identifier::operator ->' is not a UDT or reference 
+                                // to a UDT. Will produce errors if applied using infix notation
+#pragma warning(disable: 4511)  // 'class' : copy constructor could not be generated
+#pragma warning(disable: 4512)  // 'class' : assignment operator could not be generated
+#pragma warning(disable: 4702)  // unreachable code
+#pragma warning(disable: 4710)  // 'function' : function not inlined
+#pragma warning(disable: 4786)  // identifier was truncated to 'number' characters in the debug information
+// MSVC8 /analyze warnings
+#if _MSC_VER > 1310
+#pragma warning( disable : 6011 )
+#pragma warning( disable : 6219 )
+#pragma warning( disable : 6221 )
+#pragma warning( disable : 6255 )
+#pragma warning( disable : 6308 )
+#pragma warning( disable : 6320 )
+#pragma warning( disable : 6321 )
+#pragma warning( disable : 6387 )
+#endif // /analyze
+#endif 
+
+#include <set>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif  // STL_USING_SET
+
+#ifdef STL_USING_LIMITS
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#include <yvals.h>              // warning numbers get enabled in yvals.h 
+#pragma warning(disable: 4663)  // C++ language change: to explicitly specialize class template ...
+
+#undef min // in windows header min & max are defined
+#undef max
+
+#endif // _MSC_VER
+
+#include <limits>
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif // _MSC_VER
+
+#endif  // STL_USING_LIMITS
+
+
+//////////////////////////////////////////////////////////////////////
+// verify proper use of macros
+//////////////////////////////////////////////////////////////////////
+
+#if defined(STL_USING_MAP)    || defined(STL_USING_VECTOR) || defined(STL_USING_LIST)      || \
+    defined(STL_USING_STRING) || defined(STL_USING_STREAM) || defined STL_USING_FUNCTIONAL || \
+    defined(STL_USING_MEMORY) || defined(STL_USING_STACK)  || defined STL_USING_ALGORITHM  || \
+    defined(STL_USING_UTILITY) || defined(STL_USING_IOSTREAM) || defined(STL_USING_SET) || \
+    defined(STL_USING_LIMITS)
+
+#define _ODA_STL_
+
+#else
+#pragma message( "Warning: You included \"OdaSTL.H\" without using any STL features!" )
+
+#endif
+
+//#endif  // _ODA_STLHELPER_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandler.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandler.h
new file mode 100755
index 0000000..3ec3b6d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandler.h
@@ -0,0 +1,256 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODOLEITEMHANDLER_INCLUDED_
+#define _ODOLEITEMHANDLER_INCLUDED_
+
+#include "RxObject.h"
+#include "DbSystemServices.h"
+#include "OdErrorContext.h"
+#include "Gi/GiViewportGeometry.h"
+#include "RxModule.h"
+#include "OdStreamBuf.h"
+#include "DbRootExport.h"
+
+#include "TD_PackPush.h"
+
+class COleClientItem;
+
+/** \details
+    This class is the base class for classes that provide platform-dependent I/O for OLE items for Teigha.
+
+    <group Other_Classes>
+*/
+class DBROOT_EXPORT OdOleItemInitStream : public OdStreamBuf
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdOleItemInitStream);
+
+  /** \details
+    Returns the Object ID of the frame associated with this OdOleItemInitStream object.
+  */
+  virtual OdDbStub* frameId() const = 0;
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdOleItemInitStream object pointers.
+*/
+typedef OdSmartPtr<OdOleItemInitStream> OdOleItemInitStreamPtr;
+
+class OdOleItemHandler;
+class OdDbObjectId;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdOleItemHandler object pointers.
+*/
+typedef OdSmartPtr<OdOleItemHandler> OdOleItemHandlerPtr;
+
+/** \details
+    This class defines the interface for custom OLE handlers.
+
+    <group Other_Classes>
+*/
+class DBROOT_EXPORT OdOleItemHandler : public OdGiSelfGdiDrawable
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdOleItemHandler);
+
+  /** \details
+    Reads the binary data for the OdDbOle2Frame of this OleItemHandler object from the specified stream.
+    
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+
+    \remarks
+    See MFC COleClientItem::Serialize(CArchive& ar) for details.
+    Assume that ar.m_bForceFlat is TRUE.
+  */
+  virtual void load(OdStreamBuf& streamBuf) = 0;
+
+  /** \details
+    Writes the binary data for the OdDbOle2Frame of this OleItemHandler object to the specified stream.
+    
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+    
+    \remarks
+    See MFC COleClientItem::Serialize(CArchive& ar) for details.
+    Assume that ar.m_bForceFlat is TRUE.
+  */
+  virtual void save(OdStreamBuf& streamBuf) const = 0;
+
+  /** \details
+    Returns the data size (in bytes) of the compound document of this OleItemHandler object.
+  */
+  virtual OdUInt32 getCompoundDocumentDataSize() const = 0;
+
+  /** \details
+    Writes the compound document data of this OleItemHandler object to the specified stream.
+    \param streamBuf [out]  StreamBuf object to which the data are to be written.
+  */
+  virtual void getCompoundDocument(OdStreamBuf& streamBuf) const = 0;
+
+  /** \details
+    Reads the compound document data of this OleItemHandler object from the specified stream.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+    \param numBytes [in]  Number of bytes to be written.
+  */
+  virtual void setCompoundDocument(OdUInt32 numBytes, OdStreamBuf& streamBuf) = 0;
+
+  enum Type
+  {
+    kUnknown     = 0,
+    kLink        = 1,
+    kEmbedded    = 2,
+    kStatic      = 3
+  };
+  /** \details
+    Returns the type of the OdDbOleFrame of this OdOleItemHandler.
+    
+    \remarks
+    type() returns one of the following:
+    
+    <table>
+    Name          Value
+    kUnknown      0
+    kLink         1
+    kEmbedded     2
+    kStatic       3
+    </table>
+  */
+  virtual Type type() const = 0;
+
+  enum DvAspect
+  {
+    kContent    = 1,
+    kThumbnail  = 2,
+    kIcon       = 4,
+    kDocPrint   = 8
+  };
+
+  /** \details
+    Returns the draw aspect of this OleItemHandler object.
+    
+    \remarks
+    drawAspect() returns one of the following:
+    
+    <table>
+    Name          Value
+    kContent      1 
+    kThumbnail    2 
+    kIcon         4 
+    kDocPrint     8
+    </table>
+  */
+  virtual DvAspect drawAspect() const = 0;
+
+  /** \details
+    Returns the link name of this OleItemHandler object.
+  */
+  virtual OdString linkName() const = 0;
+
+  /** \details
+    Returns the link path of this OleItemHandler object.
+  */
+  virtual OdString linkPath() const = 0;
+
+  /** \details
+    Returns the user type of this OleItemHandler object.
+  */
+  virtual OdString userType() const = 0;
+
+  /** \details
+    Sets the draw aspect of this OleItemHandler object.
+    \param drawAspect [in]  Draw aspect.
+
+    \remarks
+    drawAspect must be one of the following:
+    
+    <table>
+    Name          Value
+    kContent      1 
+    kThumbnail    2 
+    kIcon         4 
+    kDocPrint     8
+    </table>
+  */
+  virtual void setDrawAspect(DvAspect drawAspect) = 0;
+
+  enum PlotQuality
+  {
+    kMonochrome   = 0,  // e.g., spreadsheet
+    kLowGraphics  = 1,  // e.g., color text & pie charts
+    kHighGraphics = 2,  // e.g., photograph 
+    kAutomatic    = 3   // Automatic dependent on document type
+  };
+
+  /** \details
+  Returns the output quality for this OLE object (DXF 73).
+
+  \remarks
+  Controls the color depth and resolution when plotted.
+
+  outputQuality() returns one of the following:
+
+  <table>
+  Name               Value    Example
+  kMonochrome        0        Spreadsheet
+  kLowGraphics       1        Color text & pie charts
+  kHighGraphics      2        Photograph
+  kAutomatic         3        Automatic dependent on document type
+  </table>
+  */
+  virtual PlotQuality outputQuality() const = 0;
+
+  /** \details
+  Sets the output quality for this OLE object (DXF 73).
+
+  \param quality [in]  Output quality.
+
+  \remarks
+  Controls the color depth and resolution when plotted.
+
+  quality must be one of the following:
+
+  <table>
+  Name               Value    Example
+  kMonochrome        0        Spreadsheet
+  kLowGraphics       1        Color text & pie charts
+  kHighGraphics      2        Photograph
+  kAutomatic         3        Automatic dependent on document type
+  </table>
+  */
+  virtual void setOutputQuality(PlotQuality  quality) = 0;
+
+  virtual COleClientItem* getOleClientItem(void) const = 0;
+  /** \details
+    Embeds a raster image to this OLE object.
+    
+    \param pImage [in] Pointer to a raster image. 
+    \param pRxDb [in] Pointer to a database object.
+    
+    \returns Returns true if a raster image is successfully embedded to the OLE object, 
+    or returns false in the other case.
+  */  virtual bool embedRaster(OdSmartPtr<class OdGiRasterImage> pImage,
+                           OdRxObject* pRxDb = NULL) = 0;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODOLEITEMHANDLER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandlerBase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandlerBase.h
new file mode 100755
index 0000000..43516de
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleItemHandlerBase.h
@@ -0,0 +1,161 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OLEITEMDATAHEADER_INCLUDED_
+#define _OLEITEMDATAHEADER_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "OleItemHandler.h"
+#include "UInt8Array.h"
+#include "DbRootExport.h"
+
+
+/** \details
+    This class is intended to be used in implementing custom OLE handlers.
+
+    \remarks
+    This class represents header of OdDbOle2Frame binary data.
+    
+    The header is an MFC COleClientItem object's fields serialized
+    through MFC CArchive object. See MFC source code for details.
+
+    <group Other_Classes>
+*/
+class DBROOT_EXPORT OdOleItemHandlerBase : public OdOleItemHandler
+{
+protected:
+  /* FROM MFC SOURCE:
+  enum OLE_OBJTYPE
+  {
+    OT_UNKNOWN  = 0,
+
+    // These are OLE 1.0 types and OLE 2.0 types as returned from GetType().
+    OT_LINK     = 1,
+    OT_EMBEDDED = 2,
+    OT_STATIC   = 3,
+    
+    // All OLE2 objects are written with this tag when serialized.  This
+    //  differentiates them from OLE 1.0 objects written with MFC 2.0.
+    //  This value will never be returned from GetType().
+    OT_OLE2     = 256,
+  };
+  */
+  
+  //OdUInt32  m_nOleVer;    // (enum OLE_OBJTYPE) must be always OT_OLE2
+  //OdUInt32  m_nItemId;    // id in COleDocument
+  //DvAspect  m_adviseType; // view advise type (DVASPECT)
+  //OdUInt16  m_bMoniker;   // flag indicating whether to create moniker upon load
+  //DvAspect  m_drawAspect; // current default display aspect
+
+  OdUInt32    m_nOleVer;  
+  OdUInt32    m_nItemId;   
+  DvAspect    m_adviseType; 
+  OdUInt16    m_bMoniker;   
+  DvAspect    m_drawAspect; 
+  PlotQuality m_quality;
+
+
+  OdOleItemHandlerBase();
+public:
+  ODRX_DECLARE_MEMBERS(OdOleItemHandlerBase);
+
+  /** \details
+    Reads the header of the OdDbOle2Frame object.
+    \param streamBuf [in]  StreamBuf object from which the data are to be read.
+  */
+  void load(OdStreamBuf& streamBuf);
+
+  /** \details
+    Writes the header of the OdDbOle2Frame object.
+    \param streamBuf [in]  StreamBuf object to which which the data are to be written.
+  */
+  void save(OdStreamBuf& streamBuf) const;
+
+  /** \note
+    The default implementation of this function does nothing.
+  */
+  void draw(const OdGiCommonDraw& drawObj, void* hdc, const OdGsDCRect& screenRect) const;
+
+  /** \note
+      The default implementation of this function returns kUnknown.
+  */
+  Type type() const;
+
+  /** \note
+      The default implementation of this function returns an empty string.
+  */
+  OdString linkName() const;
+
+  /** \note
+      The default implementation of this function returns an empty string.
+  */
+  OdString linkPath() const;
+
+  /** \note
+      The default implementation of this function returns an empty string.
+  */
+  OdString userType() const;
+
+  DvAspect drawAspect() const;
+  void setDrawAspect(DvAspect drawAspect);
+
+  OdUInt32 itemId() const;
+  void setItemId(OdUInt32 nId);
+
+  DvAspect adviseType() const;
+  void setAdviseType(DvAspect at);
+
+  bool monikerAssigned() const;
+  void setMonikerAssigned(bool assigned);
+
+  OdUInt32 oleVersion() const;
+  void setOleVersion(OdUInt32 oleVer);
+
+  PlotQuality outputQuality() const;
+  void setOutputQuality(PlotQuality quality);
+
+  virtual COleClientItem* getOleClientItem(void) const;
+
+  virtual bool embedRaster(OdSmartPtr<OdGiRasterImage> pImage,
+                           OdRxObject* pRxDb = NULL);
+};
+
+/** \details
+    This class provides an interface to OLE compound documents.
+    <group Other_Classes>
+*/
+class DBROOT_EXPORT OdOleItemSimplestHandler : public OdOleItemHandlerBase
+{
+  OdUInt8Array  m_compDocData;
+public:
+  OdUInt32 getCompoundDocumentDataSize() const;
+
+  void getCompoundDocument(OdStreamBuf& streamBuf) const;
+
+  void setCompoundDocument(OdUInt32 numBytes, OdStreamBuf& streamBuf);
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _OLEITEMDATAHEADER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleStorage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleStorage.h
new file mode 100755
index 0000000..ebaf6e3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/OleStorage.h
@@ -0,0 +1,174 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODSTORAGE_INCLUDED_
+#define _ODSTORAGE_INCLUDED_
+
+#include "RxObject.h"
+#include "OdStreamBuf.h"
+#include "DbSystemServices.h"
+#include "OdErrorContext.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for custom classes
+    that implement unsigned ByteData storage.
+    Library: TD_Db
+    <group Other_Classes> 
+*/
+class FIRSTDLL_EXPORT OdByteData : public OdRxObject
+{
+public:
+  typedef OdUInt32 SizeType;
+
+  ODRX_DECLARE_MEMBERS(OdByteData);
+  /** \details
+    Copies the specified bytes from this ByteData object to the specified buffer.
+    
+    \param start [in]  Starting position.
+    \param bufferSize [in]  Number of bytes.
+    \param buffer [out]  Receives the bytes.
+  */
+  virtual SizeType readAt(SizeType start, OdUInt8 *buffer, SizeType bufferSize) const = 0;
+
+  /** \details
+    Copies the specified bytes from the specified buffer to this ByteData object.
+    
+bufferSize  
+  */
+  virtual SizeType writeAt(SizeType start, const OdUInt8 *buffer, SizeType bufferSize) = 0;
+
+  /** \details
+    Returns the number of bytes in this ByteData object.
+  */
+  virtual SizeType size() const = 0;
+  /** \details
+    Resizes this ByteData object.
+    \param bufferSize [in]  Number of bytes.
+  */
+  virtual void resize(SizeType bufferSize) = 0;
+
+  /** \details
+    Empties this ByteData object.
+  */
+  virtual void flush() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdByteData object pointers.
+*/
+typedef OdSmartPtr<OdByteData> OdByteDataPtr;
+
+
+/** \details
+    This class implements OdError objects with access to their associated ErrorContext objects.
+    
+    Library: TD_Db
+    <group Error_Classes> 
+*/
+class OdOleStorageError : public OdError
+{
+public:
+  /** \param pErrorContext [in]  Pointer to the ErrorContext.
+  */
+  OdOleStorageError(OdErrorContext* pErrorContext) : OdError(pErrorContext) { }
+};
+
+class OdOleStorage;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdOleStorage object pointers.
+*/
+typedef OdSmartPtr<OdOleStorage> OdOleStoragePtr;
+
+/** \details
+    This class is the base class for custom classes that implement OLE storage.
+
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdOleStorage : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdOleStorage);
+
+  /** \details
+    Initializes this OleStorage object.
+    \param pByteData [in]  Pointer to the OdByteData for this OleStorage object.
+    \param accessMode [in]   Mode in which to open this OleStorage object.
+    
+    \remarks
+    accessMode must be a combination of one or more of the following:
+    
+    <table>
+    Name                Value          Description
+    Oda::kFileRead      0x80000000     Read access.
+    Oda::kFileWrite     0x40000000     Write access.
+    </table>
+  */
+  virtual void init(OdByteData* pByteData, int accessMode = Oda::kFileRead) = 0;
+
+  /** \details
+    Returns the raw OdByteData for this OleStorage object.
+  */
+  virtual OdByteDataPtr rawData() const = 0;
+
+  /** \details
+    Opens an OdStreamBuf for this OleStorage object. For internal use only.
+    
+    \param filename [in]  Filename.
+    \param accessMode [in]   Mode in which to open this OleStorage object.
+    \param createIfNotFound [in]  Controls the creation of the file if it does not exist.
+    
+    \remarks
+    Returns a SmartPointer for the newly created OdStreamBuf object.
+
+    accessMode must be a combination of one or more of the following:
+    
+    <table>
+    Name                Value          Description
+    Oda::kFileRead      0x80000000     Read access.
+    Oda::kFileWrite     0x40000000     Write access.
+    </table>
+    
+    \note
+    createIfNotFound is for Teigha internal use only, and should always be false for Teigha applications.
+
+  */
+  virtual OdStreamBufPtr openStream(const OdString &filename,
+                                    bool createIfNotFound = false,
+                                    int accessMode = Oda::kFileRead) = 0;
+                                    
+  /** \details
+    Creates a service object for this OleStorage object.
+    \param pInitData [in]  Pointer to the initial data.
+  */
+  static OdOleStoragePtr createServiceObject(OdByteData* pInitData);
+};
+
+#define ODRX_OLESTORAGE_SERVICE_NAME OdOleStorage::desc()->name()
+
+#include "TD_PackPop.h"
+
+#endif // _ODSTORAGE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfExportService.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfExportService.h
new file mode 100755
index 0000000..4ce08b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfExportService.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _PDFEXPORTSERVICE_INCLUDED_
+#define _PDFEXPORTSERVICE_INCLUDED_
+
+#include "RxObject.h"
+#include "Gi/GiDrawable.h"
+#include "DbBaseDatabase.h"
+#include "RxDictionary.h"
+
+#include "TD_PackPush.h"
+
+
+// forward declaration
+struct PDF2PRCExportParams;
+
+/** \details
+    This is helper service for PdfExport to support export of 3d entities.
+    
+    \sa
+    <group OdExport_Classes>
+*/
+class PdfExportServiceInterface
+{
+protected:
+  PdfExportServiceInterface() {}
+public:  
+  virtual OdResult serialize(OdStreamBufPtr pBuffer, OdRxObjectPtr &context, const OdGiDrawable* pDrawable, const PDF2PRCExportParams *params, OdDbBaseDatabase *pDb) = 0;
+
+  virtual ~PdfExportServiceInterface() {}
+};
+
+
+inline OdRxClassPtr getPdfExportService()
+{
+  return odrxServiceDictionary()->getAt(OD_T("PdfExportService"));
+}
+
+#include "TD_PackPop.h"
+
+#endif // _PDFEXPORTSERVICE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfKey.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfKey.h
new file mode 100755
index 0000000..bf1b2e1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfKey.h
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef PDFKEY_H
+#define PDFKEY_H
+
+void initPdfSupport();
+void uninitPdfSupport();
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfPlatforms.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfPlatforms.h
new file mode 100755
index 0000000..82205bf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/PdfKey/PdfPlatforms.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef PDFPLATFORMS_H
+#define PDFPLATFORMS_H
+
+// Auxiliary define to check supported platforms for PdfModuleVI.
+
+// WIN32 DLL 71, 8, 9, 2010
+#if !defined(_WIN32_WCE) && defined(_WIN32) && !defined(_WIN64) && defined(_TOOLKIT_IN_DLL_) && (_MSC_VER == 1310 || _MSC_VER == 1400 || _MSC_VER == 1500 || _MSC_VER == 1600)
+#define PDF_VI_MODULE_PLATFORMS
+#endif
+
+//or all unix 
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ps/PlotStyles.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ps/PlotStyles.h
new file mode 100755
index 0000000..77aba95
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ps/PlotStyles.h
@@ -0,0 +1,543 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+// RxPlotStyle.h -- interfaces for setting up plotstyles support for rendering
+
+#ifndef __OD_RX_PLOT_STYLE__
+#define __OD_RX_PLOT_STYLE__
+
+
+#include "RxObject.h"
+#include "CmColor.h"
+#include "RxModule.h"
+#include "Ge/GeDoubleArray.h"
+#include "StringArray.h"
+
+#define STL_USING_MAP
+#define STL_USING_ALGORITHM
+#include "OdaSTL.h"
+
+class OdStreamBuf;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdPs
+{
+  enum FillStyle
+  {
+    kFsSolid            = 64,
+    kFsCheckerboard     = 65,
+    kFsCrosshatch       = 66,
+    kFsDiamonds         = 67,
+    kFsHorizontalBars   = 68,
+    kFsSlantLeft        = 69,
+    kFsSlantRight       = 70,
+    kFsSquareDots       = 71,
+    kFsVerticalBars     = 72,
+    kFsUseObject        = 73,
+
+    kFsLast             = kFsUseObject
+  };
+
+  enum LineEndStyle
+  {
+    kLesButt          = 0,
+    kLesSquare        = 1,
+    kLesRound         = 2,
+    kLesDiamond       = 3,
+    kLesUseObject     = 4
+  };
+  
+  enum LineJoinStyle
+  {
+    kLjsMiter         = 0,
+    kLjsBevel         = 1,
+    kLjsRound         = 2,
+    kLjsDiamond       = 3,
+    kLjsUseObject     = 5
+  };
+  
+  // plotstyle's linetype
+  
+  enum LineType
+  {
+    kLtpSolid                            = 0,
+    kLtpDashed                           = 1,
+    kLtpDotted                           = 2,
+    kLtpDashDot                          = 3,
+    kLtpShortDash                        = 4,
+    kLtpMediumDash                       = 5,
+    kLtpLongDash                         = 6,
+    kLtpShortDashX2                      = 7,
+    kLtpMediumDashX2                     = 8,
+    kLtpLongDashX2                       = 9,
+    kLtpMediumLongDash                   = 10,
+    kLtpMediumDashShortDashShortDash     = 11,
+    kLtpLongDashShortDash                = 12,
+    kLtpLongDashDotDot                   = 13,
+    kLtpLongDashDot                      = 14,
+    kLtpMediumDashDotShortDashDot        = 15,
+    kLtpSparseDot                        = 16,
+    kLtpISODash                          = 17,
+    kLtpISODashSpace                     = 18,
+    kLtpISOLongDashDot                   = 19,
+    kLtpISOLongDashDoubleDot             = 20,
+    kLtpISOLongDashTripleDot             = 21,
+    kLtpISODot                           = 22,
+    kLtpISOLongDashShortDash             = 23,
+    kLtpISOLongDashDoubleShortDash       = 24,
+    kLtpISODashDot                       = 25,
+    kLtpISODoubleDashDot                 = 26,
+    kLtpISODashDoubleDot                 = 27,
+    kLtpISODoubleDashDoubleDot           = 28,
+    kLtpISODashTripleDot                 = 29,
+    kLtpISODoubleDashTripleDot           = 30,
+    kLtpUseObject                        = 31,
+
+    kLtpLast = kLtpUseObject
+  };
+
+}
+
+/** \details
+    This class represents PlotStyle data for a single color (or object color) in OdPsPlotStyle objects.
+ 
+    Library: PlotStyleSvcs
+    <group Other_Classes> 
+*/
+class OdPsPlotStyleData
+{
+protected:
+  enum ColorPolicy
+  {
+    kDither       = 1,
+    kGrayScale    = 2,
+    kNotUseObject = 4
+  };
+
+  OdCmEntityColor       m_color; 
+  OdInt16               m_colorPolicy;
+  bool                  m_bAdaptiveLinetype; // not in color policy
+  OdInt16               m_screening;
+  OdInt16               m_physPenNum;
+  OdInt16               m_virtPenNum;
+  OdInt16               m_psLt;
+  OdInt16               m_fillStyle;
+  OdInt16               m_lineEndStyle;
+  OdInt16               m_lineJoinStyle;
+  double                m_dLinePatSz;
+  double                m_lineweight;
+
+public:
+
+  OdPsPlotStyleData()
+    : m_color(255, 255, 255)
+    , m_colorPolicy(0)
+    , m_bAdaptiveLinetype(false)
+    , m_screening(100)
+    , m_physPenNum(-1)
+    , m_virtPenNum(-1)
+    , m_psLt(OdInt16(OdPs::kLtpUseObject))
+    , m_fillStyle(OdInt16(OdPs::kFsUseObject))
+    , m_lineEndStyle(OdInt16(OdPs::kLesUseObject))
+    , m_lineJoinStyle(OdInt16(OdPs::kLjsUseObject))
+    , m_dLinePatSz(0.0)
+    , m_lineweight(-1)
+  {}
+
+  FIRSTDLL_EXPORT FIRSTDLL_EXPORT_STATIC static const OdPsPlotStyleData kDefault;
+
+   // m_color(255, 255, 255) indicates "UseEntity: in PlotStyles
+
+  /** \details
+    Equality operator.
+  */
+  bool operator ==(const OdPsPlotStyleData& other) const
+  {
+    return (
+        m_color             == other.m_color             &&
+        m_colorPolicy       == other.m_colorPolicy       &&
+        m_bAdaptiveLinetype == other.m_bAdaptiveLinetype &&
+        m_screening         == other.m_screening         &&
+        m_physPenNum        == other.m_physPenNum        &&
+        m_virtPenNum        == other.m_virtPenNum        &&
+        m_psLt              == other.m_psLt              &&
+        m_fillStyle         == other.m_fillStyle         &&
+        m_lineEndStyle      == other.m_lineEndStyle      &&
+        m_lineJoinStyle     == other.m_lineJoinStyle     &&
+        m_dLinePatSz        == other.m_dLinePatSz        &&
+        m_lineweight        == other.m_lineweight        
+      );
+  }
+
+  /** \details
+    Inequality operator.
+  */
+  bool operator !=(const OdPsPlotStyleData& other) const { return !operator ==(other); }
+
+  /** \details
+    Returns the Color for this PlotStyleData object.
+  */
+  const OdCmEntityColor&  color() const { return m_color; }
+
+  OdInt16 colorPolicy() const { return m_colorPolicy; }
+  /** \details
+    Returns the Physical Pen Number for this PlotStyleData object.
+  */
+  OdInt16                 physicalPenNumber() const { return m_physPenNum; }
+  /** \details
+    Returns the Virtual Pen Number for this PlotStyleData object.
+  */
+  OdInt16                 virtualPenNumber() const { return m_virtPenNum; }
+  
+  /** \details
+    Returns the Screening for this PlotStyleData object.
+    
+    \returns
+    Returns a value in the range [0.0 .. 100.0].
+    * 0 indicates white.
+    * 100 indicates colors at their full intensities.
+  */
+  int                     screening() const { return m_screening; }
+
+  /** \details
+    Returns the Line Pattern Size for this PlotStyleData object.
+  */
+  double                  linePatternSize() const { return m_dLinePatSz; }
+  /** \details
+    Returns the Linetype for this PlotStyleData object.
+  */
+  OdPs::LineType          linetype() const { return OdPs::LineType(m_psLt); }
+
+  /** \details
+    Returns true if an only if the Linetype is adaptive for this PlotStyleData object.
+  */
+  bool                    isAdaptiveLinetype() const { return m_bAdaptiveLinetype; }
+  /** \details
+    Returns true if an only if Grayscale is on for this PlotStyleData object.
+  */
+  bool                    isGrayScaleOn() const { return GETBIT(m_colorPolicy, kGrayScale); }
+  /** \details
+    Returns true if an only if Dither is on for this PlotStyleData object.
+  */
+  bool                    isDitherOn() const { return GETBIT(m_colorPolicy, kDither); }
+  /** \details
+    Returns the Lineweight for this PlotStyleData object.
+  */
+  double                  lineweight() const { return m_lineweight; }
+  /** \details
+    Returns the Fill Style for this PlotStyleData object.
+  */
+  OdPs::FillStyle         fillStyle() const { return OdPs::FillStyle(m_fillStyle); }
+  /** \details
+    Returns the Line End Style for this PlotStyleData object.
+  */
+  OdPs::LineEndStyle      endStyle()  const { return OdPs::LineEndStyle(m_lineEndStyle); }
+  /** \details
+    Returns the Line Join Style for this PlotStyleData object.
+  */
+  OdPs::LineJoinStyle     joinStyle() const { return OdPs::LineJoinStyle(m_lineJoinStyle); }
+
+  /** \details
+    Sets the Color for this PlotStyleData object.
+    \param color [in]  Color.
+  */
+  void setColor(const OdCmEntityColor& color) 
+  { 
+    m_color = color;
+    SETBIT(m_colorPolicy, kNotUseObject, !(color.red()==255 && color.green()==255 && color.blue()==255));
+  }
+  
+  void setColorPolicy(OdInt16 colorPolicy) { m_colorPolicy = colorPolicy; }
+
+  /** \details
+    Sets the Physical Pen Number for this PlotStyleData object.
+    \param physicalPenNumber [in]  Physical Pen Number.
+  */
+  void setPhysicalPenNumber(OdInt16 physicalPenNumber) { m_physPenNum = physicalPenNumber; }
+  /** \details
+    Sets the Virtual Pen Number for this PlotStyleData object.
+    \param virtualPenNumber [in]  Virtual Pen Number.
+  */
+  void setVirtualPenNumber(OdInt16 virtualPenNumber) { m_virtPenNum = virtualPenNumber; }
+  /** \details
+    Sets the Screening for this PlotStyleData object.
+    
+    \param screening [in]  Screening.
+    
+    \remarks
+    screening must be in range [0.0 .. 100.0].
+    * 0 indicates white.
+    * 100 indicates the colors at their full intensities.
+  */
+  void setScreening(int screening) { m_screening = OdInt16(screening); }
+  /** \details
+    Sets the Line Pattern Size for this PlotStyleData object.
+    \param linePatternSize [in]  Line Pattern Size.
+    
+  */
+  void setLinePatternSize(double linePatternSize) { m_dLinePatSz = linePatternSize; }
+  /** \details
+    Sets the Linetype for this PlotStyleData object.
+    \param linetype [in]  Linetype.
+  */
+  void setLinetype(OdPs::LineType linetype) { m_psLt = OdInt16(linetype); }
+  
+  /** \details
+    Controls if the Linetype is adaptive for this PlotStyleData object.
+    \param adaptiveLinetype [in]  Controls Adaptive Linetype.
+  */
+  void setAdaptiveLinetype(bool adaptiveLinetype) { m_bAdaptiveLinetype = adaptiveLinetype; }
+  /** \details
+    Controls if Grayscale is on for this PlotStyleData object.
+    \param grayScaleOn [in]  Controls Grayscale On.
+  */
+  void setGrayScaleOn(bool grayScaleOn) { SETBIT(m_colorPolicy, kGrayScale, grayScaleOn); }
+  /** \details
+    Controls if Dither is on for this PlotStyleData object.
+    \param ditherOn [in]  Controls Dither On.
+  */
+  void setDitherOn(bool ditherOn) { SETBIT(m_colorPolicy, kDither, ditherOn); }
+  /** \details
+    Sets the Lineweight for this PlotStyleData object.
+    \param lineweight [in]  Lineweight.
+  */
+  void setLineweight(double lineweight) { m_lineweight = lineweight; }
+  /** \details
+    Sets the Fill Style for this PlotStyleData object.
+    \param fillStyle [in]  Fill Style.
+  */
+  void setFillStyle(OdPs::FillStyle fillStyle) { m_fillStyle = OdInt16(fillStyle); }
+  /** \details
+    Sets the LineEndStyle for this PlotStyleData object.
+    \param LineEndStyle [in]  LineEndStyle.
+  */
+  void setEndStyle(OdPs::LineEndStyle lineEndStyle) { m_lineEndStyle = OdInt16(lineEndStyle); }
+  /** \details
+    Sets the Line Join Style for this PlotStyleData object.
+    
+    \param lineJoinStyle [in] Line Join Style.
+  */
+  void setJoinStyle(OdPs::LineJoinStyle lineJoinStyle) { m_lineJoinStyle = OdInt16(lineJoinStyle); }
+};
+
+/** \details
+    This class represents PlotStyle objects.
+ 
+    Library: PlotStyleSvcs
+
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdPsPlotStyle : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdPsPlotStyle);
+
+  /** \details
+    Returns the name of this PlotStyle object.
+  */
+  virtual OdString  name() const = 0;
+
+  /** \details
+    Returns the description of this PlotStyle object.
+  */
+  virtual OdString  description() const = 0;
+  /** \details
+    Returns the PlotStyleData for this PlotStyle object.
+    \param data [out]  Receives the data.
+  */
+  virtual void      getData(OdPsPlotStyleData& data) const = 0;
+  /** \details
+    Returns the localizedName of this PlotStyle object.
+  */
+  virtual OdString  localizedName() const = 0;
+
+  virtual void      setData(const OdPsPlotStyleData& data) = 0;
+
+  virtual void      setDescription(const OdString& desc) = 0;
+
+  virtual void      setName(const OdString& name) = 0;
+
+  virtual void      setLocalizedName(const OdString& name) = 0;
+
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdPsPlotStyle object pointers.
+*/
+typedef OdSmartPtr<OdPsPlotStyle> OdPsPlotStylePtr;
+
+namespace OdPs
+{
+
+  // predicate
+  class OdPsStrLess : public std::binary_function<OdString, OdString, bool>
+  {
+  public:
+    bool operator()(const OdString& x, const OdString& y) const
+    {
+      return x.iCompare(y) < 0;
+    }
+  };
+
+} // OdPs
+
+typedef std::map<const OdChar*, OdPsPlotStylePtr, OdPs::OdPsStrLess> OdPsPlotStylesMap;
+typedef OdArray<OdPsPlotStylePtr> OdPsPlotStylesArray;
+
+/** \details
+    This class implements Plot Style Tables.
+
+    Library: PlotStyleSvcs
+
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdPsPlotStyleTable : public OdRxObject
+{
+public:  
+  ODRX_DECLARE_MEMBERS(OdPsPlotStyleTable);
+
+  virtual OdRxObjectPtr clone() const = 0;
+
+  virtual void copyFrom(const OdRxObject* pSource) = 0;
+
+  /** \details
+    Returns true if and only if the global scale factor is to be applied to non-ISO linetypes
+    for this PlotStyleTable object.
+  */
+  virtual bool      isApplyScaleFactor() const = 0;
+
+  /** \details
+    Returns the description of this PlotStyleTable object.
+  */
+  virtual OdString  description() const = 0;
+
+  /** \details
+    Returns the global scale factor to be applied to non-ISO linetypes for this PlotStyleTable object.
+  */
+  virtual double    scaleFactor() const = 0;
+
+  /** \details
+    Returns true if and only if Custom Lineweight Units are to be displayed for this PlotStyleTable object.
+  */
+  virtual bool      isDisplayCustomLineweightUnits() const = 0;
+
+  /** \details
+    Returns the lineweight for the specified entry in this PlotStyleTable object.
+    \param index [in]  PlotStyle index.
+  */
+  virtual double    getLineweightAt(OdUInt32 index) const = 0;
+
+  /** \details
+    Returns the specified PlotStyle in this PlotStyleTable object.
+    \param name [in]  Plot Style name.
+  */
+  virtual OdPsPlotStylePtr plotStyleAt(const OdString& name) const = 0;
+
+  /** \param index [in]  PlotStyle index.
+  */
+  virtual OdPsPlotStylePtr plotStyleAt(int index) const = 0;
+
+  /** \details
+    Returns the logical length of this PlotStyle
+  */
+  virtual unsigned int plotStyleSize() const = 0;
+
+  virtual unsigned int lineweightSize() const = 0;
+
+  virtual bool isAciTableAvailable() const = 0;
+
+  virtual OdPsPlotStylePtr addNewPlotStyle(const OdString& styleName) = 0;
+
+  virtual OdPsPlotStylePtr delPlotStyle(OdPsPlotStylePtr pPsPtr) = 0;
+
+  virtual void setDescription(const OdString& desc) = 0;
+
+  virtual void setScaleFactor(double scFac) = 0;
+
+  virtual void setApplyScaleFactor(bool flag) = 0;
+
+  virtual void setDisplayCustomLineweightUnits(bool flag) = 0;
+
+  virtual void setLineweightAt(double value, OdUInt32 index) = 0;
+
+  virtual void setLineweights(const OdGeDoubleArray& lineweights) = 0;
+
+  // Methods added in 2.7.0
+
+  virtual void setAciTableAvailable(bool flag) = 0;
+
+  virtual void setPlotStylesIndexed(const OdPsPlotStylesArray plotStylesIndexed) = 0;
+
+  virtual void setPlotStyles(const OdPsPlotStylesMap plotStyles) = 0;
+
+  virtual void addPlotStyle(OdPsPlotStyle* pPs) = 0;
+
+  virtual void setOrdering(const OdStringArray& order) = 0;
+
+  virtual OdPsPlotStylesMap plotStyles() const = 0;
+
+  virtual OdPsPlotStylesArray plotStylesIndexed() const = 0;
+};
+/** \details
+    This template class is a specialization of the OdPsPlotStyleTable class for OdAveScene object pointers.
+*/
+typedef OdSmartPtr<OdPsPlotStyleTable> OdPsPlotStyleTablePtr;
+
+/** \details
+    This class is the base class for classes that provide platform-dependent loading of PlotStyle (CTB/STB) files
+    for Teigha.
+    Library: PlotStyleSvcs
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdPsPlotStyleServices : public OdRxModule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdPsPlotStyleServices);
+
+  /** \details
+    Loads a plot style table.
+
+    \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+    \remarks
+    Returns a SmartPointer to the newly loaded PlotStyleTable object.   
+  */
+  virtual OdPsPlotStyleTablePtr createPlotStyleTable() = 0;
+  virtual OdPsPlotStyleTablePtr loadPlotStyleTable(OdStreamBuf* pStreamBuf) = 0;
+  virtual void                  savePlotStyleTable(OdStreamBuf* pBuf, OdPsPlotStyleTablePtr pPSTab) = 0;
+
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdPsPlotStyleServices object pointers.
+*/
+typedef OdSmartPtr<OdPsPlotStyleServices> OdPsPlotStyleServicesPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_RX_PLOT_STYLE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuasiVarDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuasiVarDefs.h
new file mode 100755
index 0000000..27f8745
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuasiVarDefs.h
@@ -0,0 +1,231 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef QVAR_DEF_RO
+#define DOUNDEF_QVAR_DEF_RO
+#define QVAR_DEF_RO  QVAR_DEF /*!DOM*/
+#endif
+
+#ifndef QVAR_DEF_RO
+#define DOUNDEF_QVAR_DEF_RO
+#define QVAR_DEF_RO  QVAR_DEF /*!DOM*/
+#endif
+
+
+#ifndef ODTDIST
+#define ODTDIST  double /*!DOM*/
+#define DOUNDEF_ODTDIST
+#endif
+
+#ifndef ODTORIENT
+#define ODTORIENT  double /*!DOM*/
+#define DOUNDEF_ODTORIENT
+#endif
+
+#ifndef ODTANGLE
+#define ODTANGLE double /*!DOM*/
+#define DOUNDEF_ODTANGLE
+#endif
+
+#ifndef ODTLAYOUTID
+#define ODTLAYOUTID  OdDbObjectId /*!DOM*/
+#define DOUNDEF_ODTLAYOUTID
+#endif
+
+#ifndef ODTTEXTSTYLEID
+#define ODTTEXTSTYLEID  OdDbObjectId /*!DOM*/
+#define DOUNDEF_ODTTEXTSTYLEID
+#endif
+
+#ifndef ODTBOOL
+#define ODTBOOL  bool /*!DOM*/
+#define DOUNDEF_ODTBOOL
+#endif
+
+/*
+#ifdef DATE
+#define SAVED_DATE_DEFINITION
+#undef DATE
+#endif
+*/
+
+//         Type                   Name
+
+QVAR_DEF_RO(ODTDIST,              BACKZ,            ValidateNone()    )
+QVAR_DEF   (ODTLAYOUTID,          CTAB,             ValidateLayout()  )
+QVAR_DEF   (OdString,             CPLOTSTYLE,       ValidateNone()    )
+QVAR_DEF   (OdInt16,              CVPORT,           ValidateNone()    )
+QVAR_DEF_RO(OdString,             DWGNAME,          ValidateNone()    )
+QVAR_DEF_RO(OdString,             DWGPREFIX,        ValidateNone()    )
+QVAR_DEF_RO(ODTBOOL,              DWGTITLED,        ValidateNone()    )
+QVAR_DEF   (ODTDIST,              ELEVATION,        ValidateNone()    )
+QVAR_DEF_RO(OdGePoint3d,          EXTMAX,           ValidateNone()    )
+QVAR_DEF_RO(OdGePoint3d,          EXTMIN,           ValidateNone()    )
+QVAR_DEF_RO(ODTDIST,              FRONTZ,           ValidateNone()    )
+QVAR_DEF   (ODTBOOL,              GRIDMODE,         ValidateBOOL()    )
+QVAR_DEF   (OdGePoint2d,          GRIDUNIT,         ValidateNone()    )
+QVAR_DEF   (OdGePoint3d,          INSBASE,          ValidateNone()    )
+QVAR_DEF_RO(ODTDIST,              LENSLENGTH,       ValidateNone()    )
+QVAR_DEF   (ODTBOOL,              LIMCHECK,         ValidateBOOL()    )
+QVAR_DEF   (OdGePoint2d,          LIMMAX,           ValidateNone()    )
+QVAR_DEF   (OdGePoint2d,          LIMMIN,           ValidateNone()    )
+QVAR_DEF   (ODTANGLE,             SNAPANG,          ValidateNone()    )
+QVAR_DEF   (OdGePoint2d,          SNAPBASE,         ValidateNone()    )
+QVAR_DEF   (OdInt16,              SNAPISOPAIR,      ValidateNone()    )
+QVAR_DEF   (ODTBOOL,              SNAPMODE,         ValidateBOOL()    )
+QVAR_DEF   (ODTBOOL,              SNAPSTYL,         ValidateBOOL()    )
+QVAR_DEF   (OdGePoint2d,          SNAPUNIT,         ValidateNone()    )
+QVAR_DEF_RO(OdCodePageId,         SYSCODEPAGE,      ValidateNone()    )
+QVAR_DEF_RO(OdGePoint3d,          TARGET,           ValidateNone()    )
+QVAR_DEF   (ODTBOOL,              UCSFOLLOW,        ValidateBOOL()    )
+QVAR_DEF   (OdInt16,              UCSICON,          ValidateNone()    )
+QVAR_DEF   (ODTBOOL,              UCSVP,            ValidateBOOL()    )
+QVAR_DEF_RO(ODTUCSNAME,           UCSNAME,          ValidateNone()    )
+QVAR_DEF_RO(OdGePoint3d,          UCSORG,           ValidateNone()    )
+QVAR_DEF_RO(OdGeVector3d,         UCSXDIR,          ValidateNone()    )
+QVAR_DEF_RO(OdGeVector3d,         UCSYDIR,          ValidateNone()    )
+QVAR_DEF_RO(OdGePoint3d,          VIEWCTR,          ValidateNone()    )
+QVAR_DEF_RO(OdGeVector3d,         VIEWDIR,          ValidateNone()    )
+QVAR_DEF_RO(OdInt16,              VIEWMODE,         ValidateNone()    )
+QVAR_DEF_RO(ODTDIST,              VIEWSIZE,         ValidateNone()    )
+QVAR_DEF_RO(ODTORIENT,            VIEWTWIST,        ValidateNone()    )
+QVAR_DEF_RO(OdInt16,              WORLDUCS,         ValidateNone()    )
+QVAR_DEF_RO(OdString,             LOGINNAME,        ValidateNone()    )
+QVAR_DEF_RO(OdDbDate,             DATE,             ValidateNone()    )
+QVAR_DEF_RO(double,               CDATE,            ValidateNone()    )
+
+//-----------------------------------------
+// Variables added in AC 2008
+//-----------------------------------------
+QVAR_DEF_RO(double,               CANNOSCALEVALUE,  ValidateNone()    )
+QVAR_DEF   (ODTBOOL,              ANNOALLVISIBLE,   ValidateBOOL()    )
+QVAR_DEF_RO(ODTBOOL,              DIMANNO,          ValidateNone()    )
+
+/* TODO:
+ GRIDMAJOR
+*/
+
+QVAR_DEF   (ODTBOOL,              PERSPECTIVE,      ValidateNone()    )
+QVAR_DEF   (OdInt16,              DIMUNIT,          ValidateNone()    )
+
+//-----------------------------------------
+// Variables added in AC 2010 
+//-----------------------------------------
+
+/** * VARDOCS:
+  <properties>
+    <remarks>
+      "\n    IMAGEFRAME Controls whether image frames are displayed and plotted"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Invisible"
+      "\n    1       Is displayed and plotted"
+      "\n    2       Is displayed but not plotted"
+    </remarks>
+  </properties>
+*/
+QVAR_DEF   (OdInt16,              IMAGEFRAME,          ValidateNone()    )
+QVAR_DEF   (OdInt16,              FRAME,               ValidateNone()    )
+QVAR_DEF   (OdInt16,              PDFFRAME,            ValidateNone()    )
+QVAR_DEF   (OdInt16,              XCLIPFRAME,          ValidateNone()    )
+QVAR_DEF   (OdInt8,               DWFFRAME,            ValidateNone()    )
+QVAR_DEF   (OdInt8,               DGNFRAME,            ValidateNone()    )
+QVAR_DEF   (OdInt8,               OLEFRAME,            ValidateNone()    )
+QVAR_DEF   (OdInt16,              WIPEOUTFRAME,        ValidateNone()    )
+QVAR_DEF   (OdInt16,              POINTCLOUDCLIPFRAME, ValidateNone()    )
+
+QVAR_DEF   (ODTTEXTSTYLEID,       TEXTSTYLE,           ValidateTextStyle())
+QVAR_DEF   (double,               TEXTSIZE,            ValidateNone()    )
+
+QVAR_DEF   (OdInt16,              GRIDDISPLAY,         ValidateNone()    )
+QVAR_DEF   (OdInt16,              GRIDMAJOR,           ValidateNone()    )
+
+QVAR_DEF   (OdInt16,              VSBACKGROUNDS,       ValidateNone()    )
+QVAR_DEF   (OdString,             VSEDGECOLOR,         ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSEDGEJITTER,        ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSEDGELEX,           ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSEDGEOVERHANG,      ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSEDGES,             ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSEDGESMOOTH,        ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSFACECOLORMODE,     ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSFACEHIGHLIGHT,     ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSFACEOPACITY,       ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSFACESTYLE,         ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSHALOGAP,           ValidateNone()    )
+QVAR_DEF   (OdString,             VSINTERSECTIONCOLOR, ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSINTERSECTIONEDGES, ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSINTERSECTIONLTYPE, ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSISOONTOP,          ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSLIGHTINGQUALITY,   ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSMATERIALMODE,      ValidateNone()    )
+QVAR_DEF   (OdString,             VSMONOCOLOR,         ValidateNone()    )
+QVAR_DEF   (OdString,             VSOBSCUREDCOLOR,     ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSOBSCUREDEDGES,     ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSOBSCUREDLTYPE,     ValidateNone()    )
+QVAR_DEF   (OdString,             VSOCCLUDEDCOLOR,     ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSOCCLUDEDEDGES,     ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSOCCLUDEDLTYPE,     ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSSHADOWS,           ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSSILHEDGES,         ValidateNone()    )
+QVAR_DEF   (OdInt16,              VSSILHWIDTH,         ValidateNone()    )
+
+QVAR_DEF   (OdInt16,              NAVVCUBEDISPLAY,     ValidateRange(0, 3))
+QVAR_DEF   (OdInt16,              DEFAULTLIGHTING,     ValidateRange(0, 1))
+
+#ifdef DOUNDEF_ODTDIST
+#undef ODTDIST
+#undef DOUNDEF_ODTDIST
+#endif
+
+#ifdef DOUNDEF_ODTORIENT
+#undef ODTORIENT
+#undef DOUNDEF_ODTORIENT
+#endif
+
+#ifdef DOUNDEF_ODTANGLE
+#undef ODTANGLE
+#undef DOUNDEF_ODTANGLE
+#endif
+
+#ifdef DOUNDEF_ODTLAYOUTID
+#undef ODTLAYOUTID
+#undef DOUNDEF_ODTLAYOUTID
+#endif
+
+#ifdef DOUNDEF_ODTTEXTSTYLEID
+#undef ODTTEXTSTYLEID
+#undef DOUNDEF_ODTTEXTSTYLEID
+#endif
+
+#ifdef DOUNDEF_QVAR_DEF_RO
+#undef QVAR_DEF_RO
+#undef DOUNDEF_QVAR_DEF_RO
+#endif
+
+#ifdef DOUNDEF_ODTBOOL
+#undef ODTBOOL
+#undef DOUNDEF_ODTBOOL
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuickHeapAllocator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuickHeapAllocator.h
new file mode 100755
index 0000000..18f606a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/QuickHeapAllocator.h
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OdQuickHeap_h_Included_
+#define _OdQuickHeap_h_Included_
+
+#include "RootExport.h"
+#include <stdlib.h> // size_t
+
+/** \details
+  <group !!RECORDS_TD_APIRef>
+*/
+      struct FIRSTDLL_EXPORT OdQuickHeap
+{
+  static void* Alloc( size_t );
+  static void* Realloc( void*,size_t );
+  static void Free( void* );
+};
+
+#endif // _OdQuickHeap_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RText.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RText.h
new file mode 100755
index 0000000..274fea0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RText.h
@@ -0,0 +1,175 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef OD_RTEXT_H
+#define OD_RTEXT_H
+
+#include "TD_PackPush.h"
+
+#include "DbEntity.h"
+class OdDbEntityImpl;
+
+/** \details
+    This class represents Reactive text (RText) entities in an OdDbDatabase instance.
+    Library: TD_Db
+    
+    \remarks
+    RText entities can display either the contents of an external text file or the evaluation of a DIESEL expression. 
+
+    <group Other_Classes>
+*/
+class TOOLKIT_EXPORT RText : public OdDbEntity
+{
+public:
+  ODRX_DECLARE_MEMBERS(RText);
+
+  /** \details
+    Returns the WCS normal to the plane of this RText entity.
+  */
+  OdGeVector3d normal() const;
+  
+  /** \details
+    Sets the WCS normal to the plane of this RText entity.
+    \param normal [in]  Normal.
+  */
+  void         setNormal(const OdGeVector3d &normal);
+
+  /** \details
+    Returns the WCS insertion point of this RText entity.
+  */
+  OdGePoint3d getPoint() const;
+
+  /** \details
+    Sets the WCS insertion point of this RText entity.
+
+    \param point [in]  Insertion point.
+  */
+  void        setPoint(const OdGePoint3d &point);
+
+  /** \details
+    Returns the rotation angle of this RText entity.
+    \note
+    All angles are expressed in radians.
+  */
+  double getRotAngle() const;
+  /** \details
+    Sets the rotation angle of this RText entity.
+    \param rotAngle [in]  Rotation angle.
+    \note
+    All angles are expressed in radians.
+  */
+  void   setRotAngle(double rotAngle);
+
+  /** \details
+    Returns the height of this RText entity.
+  */
+  double getHeight() const;
+  /** \details
+    Sets the height of this RText entity.
+    \param height [in]  Height.
+  */
+  void   setHeight(double height);
+
+  /** \details
+    Returns true if and only if the RText entity is to be treated an as DIESEL expression.
+  */
+  bool isStringExpression() const;
+  /** \details
+    Controls the treatment of this RText entity as an DIESEL expression.
+    \param isExpression [in]  Controls treatment as a DIESAL expression.
+  */
+  void setToExpression(bool isExpression);
+
+  /** \details
+    Returns true if and only if MText inline sequences are evaluated for this RText entity.
+  */
+  bool enabledMTextSequences() const;
+  /** \details
+    Controls the evaluation of MText inline sequences for this RText entity.
+    \param enable [in]  Enables MText sequences.
+  */
+  void enableMTextSequences(bool enable);
+  /** \details
+    Returns a copy of the string contents of this RText entity.
+    \remarks
+    If !isStringExpression(), the string contents specify the name of the file to be displayed.
+  */
+  OdString getStringContents() const;
+  /** \details
+    Sets the string contents of this RText entity.
+    \param stringContents [in]  String contents.
+    \remarks
+    If !isStringExpression(), the string contents specify the name of the file to be displayed.
+  */
+  void     setStringContents(const OdString &stringContents);
+
+  /** \details
+    Returns the object ID of the TextStyle of this RText entity.
+    
+    \remarks
+    If 
+  */
+  OdDbObjectId textStyleId() const;
+  /** \details
+    Returns the name of the TextStyle of this RText entity.
+  */
+  OdString textStyleName() const;
+  /** \details
+    Sets the TextStyle of this RText entity.
+    \param textStyleId [in]  Object ID of TextStyle.
+    \param name [in]  Name of TextStyle.
+  */
+  void setTextStyle(OdDbObjectId textStyleId);
+  void setTextStyle(const OdString& name);
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual bool subWorldDraw(OdGiWorldDraw* pWd) const;
+
+  virtual OdResult subTransformBy(const OdGeMatrix3d& xfm);
+
+  virtual OdResult subGetTransformedCopy(const OdGeMatrix3d& mat, OdDbEntityPtr& pCopy) const;
+
+  void subClose();
+
+protected:
+  RText();
+  RText(OdDbEntityImpl* pImpl);
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for RText object pointers.
+*/
+typedef OdSmartPtr<RText> OdRTextPtr;
+
+#include "TD_PackPop.h"
+
+#endif  // OD_RTEXT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RawByteData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RawByteData.h
new file mode 100755
index 0000000..111d343
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RawByteData.h
@@ -0,0 +1,73 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODRAWBYTEDATA_INCLUDED_
+#define _ODRAWBYTEDATA_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OleStorage.h"
+
+/** \details
+
+    <group Other_Classes> 
+*/
+class OdRawByteData : public OdByteData
+{
+  const OdUInt8* m_pData;
+  OdUInt32       m_nDataLeft;
+protected:
+  OdRawByteData()
+    : m_pData(0)
+    , m_nDataLeft(0)
+  {
+  }
+public:
+  void init(const OdUInt8* pData, OdUInt32 length)
+  {
+    m_pData = pData;
+    m_nDataLeft = length;
+  }
+
+  OdUInt32 bytesLeft() const
+  {
+    return m_nDataLeft;
+  }
+
+  void read(OdUInt32 nBytes, void* buffer)
+  {
+    if(m_nDataLeft >= nBytes)
+    {
+      m_nDataLeft -= nBytes;
+      ::memcpy(buffer, m_pData, nBytes);
+      m_pData += nBytes;
+    }
+    else
+      throw OdError(eEndOfFile);
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODRAWBYTEDATA_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RcsFileServices/RxRcsFileServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RcsFileServices/RxRcsFileServices.h
new file mode 100755
index 0000000..eceb42a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RcsFileServices/RxRcsFileServices.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// RxRcsFileServices.h - interface of module that handles .rcs files
+
+#ifndef __OD_RCSFILESERVICES_MODULE__
+#define __OD_RCSFILESERVICES_MODULE__
+
+#include "RxModule.h"
+#include "RootExport.h"
+
+#include "TD_PackPush.h"
+#include "SharedPtr.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GePoint3dArray.h"
+#include "CmEntityColorArray.h"
+#include "Ge/GeVector3d.h"
+#include "Ge/GeMatrix3d.h"
+#include "Ge/GeExtents3d.h"
+
+/** Description:
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRcsPointDataIterator
+{
+public:
+  virtual void start() = 0;  
+  virtual bool done() const = 0;
+
+  virtual OdUInt64 getPoints(OdGePoint3dArray& points, OdCmEntityColorArray& colorArray, 
+    OdUInt64 requiredQty) = 0;
+};
+
+typedef OdSharedPtr<OdRcsPointDataIterator> OdRcsPointDataIteratorPtr;
+
+/** Description:
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRcsVoxel
+{
+public:
+  virtual OdRcsPointDataIteratorPtr newPointDataIterator() const = 0;
+  virtual OdGeExtents3d getBox1() const = 0;
+};
+
+typedef OdSharedPtr<OdRcsVoxel> OdRcsVoxelPtr;
+
+/** Description:
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRcsVoxelDataIterator
+{
+public:
+  virtual OdRcsVoxelPtr getVoxel() = 0;
+
+  virtual void start() = 0;  
+  virtual bool done() const = 0;  
+};
+
+typedef OdSharedPtr<OdRcsVoxelDataIterator> OdRcsVoxelDataIteratorPtr;
+
+/** Description:
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRcsFileReader
+{
+public:  
+  virtual OdRcsVoxelDataIteratorPtr newVoxelDataIterator() const = 0;
+
+  virtual OdGeVector3d getTranslation() const = 0;
+  virtual OdGeVector3d getRotation() const = 0;
+  virtual OdGeVector3d getScale() const = 0;
+
+  virtual OdGeMatrix3d getTransformMatrix() const = 0;
+
+  virtual bool hasRGB() const = 0;
+  virtual bool hasNormals() const = 0;
+  virtual bool hasIntensity() const = 0;
+  virtual OdString getScanIdString() const = 0;
+};
+
+typedef OdSharedPtr<OdRcsFileReader> OdRcsFileReaderPtr;
+
+/** Description:
+  This class is the base class for classes that provide loading point cloud data from .rcs files for Teigha
+  Library:  
+  {group OdRx_Classes} 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRxRcsFileServices : public OdRxModule
+{
+public:
+  virtual OdRcsFileReaderPtr getRcsFileReader(const OdString& filePath) const = 0;
+};
+
+typedef OdSmartPtr<OdRxRcsFileServices> OdRxRcsFileServicesPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_RCSFILESERVICES_MODULE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RefCountImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RefCountImpl.h
new file mode 100755
index 0000000..ed81b78
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RefCountImpl.h
@@ -0,0 +1,103 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#if !defined(_ODREFCOUNTIMPL_INCLUDED_)
+#define _ODREFCOUNTIMPL_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+
+/** \details
+    Template class that provides the reference counting functionality needed
+    to instantiate objects that are descended from OdRxObject.
+
+    <group OdRx_Classes>
+*/
+template<class T, class TInterface = T>
+class OdRefCountImpl : public T
+{
+  /** \details
+      Allows to create OdRefCountImpl<T> instances inside this class only.
+  */
+  OdUInt32 m_nRefCounter;
+
+  /** \details
+      Assignment operator prohibited.
+  */
+  OdRefCountImpl& operator = (const OdRefCountImpl&);
+
+  /** \details
+      Allows to create OdRefCountImpl<T> instances inside this class only.
+  */
+  ODRX_HEAP_OPERATORS();
+
+  /** \details
+      Constructor.  Sets the reference count to one.
+  */
+  OdRefCountImpl() : m_nRefCounter(1) {}
+public:
+
+  /** \details
+      Increments the reference count.
+  */
+  void addRef()
+  {
+    ++m_nRefCounter;
+  }
+
+  /** \details
+      Decrements the reference count, and deletes this object if the reference count
+      reaches zero.
+  */
+  void release()
+  {
+		ODA_ASSERT((m_nRefCounter > 0));
+		if (!(--m_nRefCounter))
+		{
+      T::onFinalRelease();
+      delete this;
+		}
+  }
+
+  long numRefs() const { return m_nRefCounter; }
+
+  /** \details
+      Creates an instance of OdRefCountImpl<T, TInterface>
+      and returns SmartPointer to it.
+  */
+  static OdSmartPtr<TInterface> createObject()
+  {
+    return OdSmartPtr<TInterface>(static_cast<TInterface*>(new OdRefCountImpl<T, TInterface>), kOdRxObjAttach);
+  }
+};
+
+#define ODREFCOUNTIMPL_CONSTR(CLASS, pRes) pRes = OdRefCountImpl<CLASS>::createObject()
+
+#include "TD_PackPop.h"
+
+#endif // !defined(_ODREFCOUNTIMPL_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/RegExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/RegExport.h
new file mode 100755
index 0000000..39cc0fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/RegExport.h
@@ -0,0 +1,45 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+//  RegExport.h
+
+#ifndef _REGEXPORT_DEFINED
+#define _REGEXPORT_DEFINED
+
+
+#include "OdPlatformSettings.h"
+
+#ifdef TD_REG_DLL_EXPORTS
+  #define TDREG_API         OD_TOOLKIT_EXPORT
+  #define TDREG_API_STATIC  OD_STATIC_EXPORT
+#else
+  #define TDREG_API         OD_TOOLKIT_IMPORT
+  #define TDREG_API_STATIC  OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif // _REGEXPORT_DEFINED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/Registrar.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/Registrar.h
new file mode 100755
index 0000000..e02a85a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Reg/Registrar.h
@@ -0,0 +1,93 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+// Registrar.h: interface for the OdAxTypeLibRegistrar class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_REGISTRAR_H__233580DF_A612_4625_A3AA_2336FCE65460__INCLUDED_)
+#define AFX_REGISTRAR_H__233580DF_A612_4625_A3AA_2336FCE65460__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "TD_PackPush.h"
+
+#include <atlbase.h>
+#include <comdef.h>
+#include "OdString.h"
+#include "RegExport.h"
+
+/** <group Other_Classes> 
+*/
+class TDREG_API OdAxTypeLibRegistrar  
+{
+  ITypeLibPtr m_pLib;
+  TLIBATTR    m_tlbAttr;
+  OdString    m_sDLLPath;
+  OdString    m_sEXEPath;
+  OdString    m_sTlbGUID;
+  OdString    m_sNameSpace;
+  OdString    m_sCurVer;
+  OdString    m_sCurVerHex;
+  OdString    m_sCurVerUpdate;  // To update Version-Independent ProgID values
+  int         m_nToolBoxBitmap;
+  DWORD       m_nMiscStatus;
+  
+  UINT openTypeLib(const OdString& sDLLPath);
+
+  void regTypeLib();
+  void unregTypeLib();
+	void registerType(ITypeInfo2* pType);
+	void registerCoClass(ITypeInfo2* pType);
+	void unregisterType(ITypeInfo2* pType, OdString ver);
+	void unregisterCoClass(ITypeInfo2* pType, OdString ver);
+  void registerVersionIndependentProgid( 
+    LPCTSTR vi_progid, LPCTSTR name, LPCTSTR guid, LPCTSTR progid ) const;
+  bool isVersionHigher( int major, int minor ) const;
+  // determine the youngest tlb left (for CurVer replacement)
+  OdString getMaxVersionLeft();
+  int majorVer() const { return m_tlbAttr.wMajorVerNum; }
+  int minorVer() const { return m_tlbAttr.wMinorVerNum; }
+  const OdString& decimalVerStr() const { return m_sCurVer; }
+  const OdString& hexVerStr() const { return m_sCurVerHex; }
+public:
+	OdAxTypeLibRegistrar();
+	virtual ~OdAxTypeLibRegistrar();
+
+  void regTypeLib(const OdString& sDLLPath, int toolBoxBitmap = 1, DWORD nMiscStatus = OLEMISC_RECOMPOSEONRESIZE,
+                  const OdString& sEXEPath = OdString::kEmpty);
+  
+  void unregTypeLib(const OdString& sDLLPath);
+};
+extern "C"
+{
+  TDREG_API HRESULT odAxRegisterTypeLib(const OdString& sPath, int toolBoxBitmap = 1, DWORD nMiscStatus = OLEMISC_RECOMPOSEONRESIZE );
+  TDREG_API HRESULT odAxUnregisterTypeLib(const OdString& sPath);
+};
+
+#include "TD_PackPop.h"
+
+#endif // !defined(AFX_REGISTRAR_H__233580DF_A612_4625_A3AA_2336FCE65460__INCLUDED_)
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RemoteGeomProxy.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RemoteGeomProxy.h
new file mode 100755
index 0000000..403a991
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RemoteGeomProxy.h
@@ -0,0 +1,246 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODREMOTEGEOMPROXY_INCLUDED_
+#define _ODREMOTEGEOMPROXY_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "Gi/GiWorldDraw.h"
+#include "DbDatabase.h"
+#include "SmartPtr.h"
+#include "Ge/GeCircArc2d.h"
+#include "UInt8Array.h"
+
+TOOLKIT_EXPORT OdSmartPtr<OdGiWorldDraw> oddbBeginProxyGraphics( OdDbDatabase* pDbCtx );
+TOOLKIT_EXPORT void oddbEndProxyGraphics( OdGiWorldDraw* pWdSaver, OdUInt8Array& graphics );
+
+/** \details
+    This class is used for debugging purposes inside ODA libraries.
+    It can be used in client code also to draw some geometry to the remote viewer.
+    Remote Geometry Viewer functionality is implemented as part of OdaMfcApp example
+    To run viewer run OdaMfcApp and press Ctrl+Alt+R.
+
+    <group Other_Classes>
+*/
+class OdRemoteGeomProxy {
+protected:
+  OdDbDatabasePtr           m_pDb;
+  OdSmartPtr<OdGiWorldDraw> m_pWd;
+public:
+
+  // For the internal use.
+  enum Opcode {
+    kGraphics,
+    kStringToExecute
+  };
+
+  // Constructor.
+  OdRemoteGeomProxy();
+  ~OdRemoteGeomProxy();
+
+  // Initialize reference database that is used for some operations (e.g. font rendering).
+  // If you certain that such operations would not be executed you can omit it.
+  void setDatabase(OdDbDatabase* pDb);
+
+  // Initializes collecting geometry to send.
+  void begin();
+
+  // Returns OdGiWorldDraw object to output geometry to
+  OdGiWorldDraw& wDraw();
+
+  // Returns OdGiWorldGeometry object to output geometry to.
+  // Shortcut for wDraw().geometry() expression.
+  OdGiWorldGeometry& wGeom();
+
+  // Returns OdGiSubEntityTraits object to output geometry to.
+  // Shortcut for wDraw().subEntityTraits() expression.
+  OdGiSubEntityTraits& traits();
+
+  // Sends geometry collected since last call of begin() method to
+  // Remote Geometry Viewer over the named pipe.
+  void end();
+
+  // Sends a string for execution to Remote Geometry Viewer.
+  // That string will be send to execution to RX command line engine.
+  // See OdEdCommandStack for detailes.
+  void sendStringToExecute( const OdString& s );
+};
+
+static const OdString g_strGeomBlockBegin = OD_T("rblock_begin");
+static const OdString g_strGeomBlockEnd = OD_T("rblock_end");
+
+/** \details
+
+    <group Other_Classes>
+*/
+class OdRemoteGeomProxyAutoBlock
+{
+  OdRemoteGeomProxy* m_pProxy;
+
+public:
+  OdRemoteGeomProxyAutoBlock(OdRemoteGeomProxy& proxy) : m_pProxy(&proxy)
+  {
+    m_pProxy->sendStringToExecute(g_strGeomBlockBegin);
+  }
+
+  ~OdRemoteGeomProxyAutoBlock()
+  {
+    m_pProxy->sendStringToExecute(g_strGeomBlockEnd);
+  }
+
+};
+
+inline
+OdRemoteGeomProxy::OdRemoteGeomProxy()
+{  
+}
+
+inline
+OdRemoteGeomProxy::~OdRemoteGeomProxy()
+{  
+}
+
+inline void
+OdRemoteGeomProxy::setDatabase(OdDbDatabase* pDb) {
+  m_pDb = pDb;
+}
+
+inline void OdRemoteGeomProxy::begin() {
+  m_pWd = ::oddbBeginProxyGraphics( m_pDb );
+}
+
+inline OdGiWorldDraw&
+OdRemoteGeomProxy::wDraw() {
+  return *m_pWd;
+}
+
+inline OdGiWorldGeometry&
+OdRemoteGeomProxy::wGeom() {
+  return m_pWd->geometry();
+}
+
+inline OdGiSubEntityTraits&
+OdRemoteGeomProxy::traits() {
+  return m_pWd->subEntityTraits();
+}
+
+inline void
+OdRemoteGeomProxy::end() 
+{
+#if defined(_WIN32) && !defined(_WINRT)
+
+  if( m_pWd.get() )
+  { 
+    HANDLE hBufferWritten = ::OpenEvent(EVENT_MODIFY_STATE | SYNCHRONIZE, FALSE, L"OdaRemoteGeometryBufferWrittenEvent");
+    HANDLE hBufferProcessed = ::OpenEvent(EVENT_MODIFY_STATE | SYNCHRONIZE, FALSE, L"OdaRemoteGeometryBufferProcessedEvent");
+
+    if(hBufferWritten != NULL && hBufferProcessed != NULL)
+    {
+      ::WaitForSingleObject(hBufferProcessed, INFINITE);      
+      //::ResetEvent(hBufferProcessed);
+
+      HANDLE hIPCFile = ::OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, L"OdaRemoteGeometryViewerIPCBuffer");
+      if(hIPCFile != NULL)
+      {
+        void* pBuffer = ::MapViewOfFile(hIPCFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
+        if(pBuffer != NULL)
+        {
+          OdInt8* pIpcFile = reinterpret_cast<OdInt8*>(pBuffer);
+
+          OdUInt8Array graphics;
+          ::oddbEndProxyGraphics( m_pWd, graphics );
+
+          OdUInt32 n = kGraphics;        
+          memcpy(pIpcFile, &n, sizeof(n)); 
+          pIpcFile += sizeof(n);
+
+          n = graphics.size();
+          memcpy(pIpcFile, &n, sizeof(n)); 
+          pIpcFile += sizeof(n);
+
+          memcpy(pIpcFile, graphics.getPtr(), graphics.size());
+
+          ::UnmapViewOfFile(pBuffer);
+        }
+        ::CloseHandle(hIPCFile);        
+      }
+
+      ::SetEvent(hBufferWritten);
+    }
+    ::CloseHandle(hBufferWritten);
+    ::CloseHandle(hBufferProcessed);
+    m_pWd.release();
+  }
+
+#endif //_WIN32
+}
+
+inline void
+OdRemoteGeomProxy::sendStringToExecute( const OdString& s ) 
+{
+#if defined(_WIN32) && !defined(_WINRT)
+
+  HANDLE hBufferWritten = ::OpenEvent(EVENT_MODIFY_STATE | SYNCHRONIZE, FALSE, L"OdaRemoteGeometryBufferWrittenEvent");
+  HANDLE hBufferProcessed = ::OpenEvent(EVENT_MODIFY_STATE | SYNCHRONIZE, FALSE, L"OdaRemoteGeometryBufferProcessedEvent");
+
+  if(hBufferWritten != NULL && hBufferProcessed != NULL)
+  {
+    ::WaitForSingleObject(hBufferProcessed, INFINITE);
+
+    HANDLE hIPCFile = ::OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, L"OdaRemoteGeometryViewerIPCBuffer");
+    if(hIPCFile != NULL)
+    {
+      void* pBuffer = ::MapViewOfFile(hIPCFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
+      if(pBuffer != NULL)
+      {
+        OdInt8* pIpcFile = reinterpret_cast<OdInt8*>(pBuffer);
+
+        OdUInt32 n = kStringToExecute;        
+        memcpy(pIpcFile, &n, sizeof(n)); 
+        pIpcFile += sizeof(n);
+
+        n = (s.getLength() + 1) * 2;
+        memcpy(pIpcFile, &n, sizeof(n)); 
+        
+        pIpcFile += sizeof(n);
+        memcpy(pIpcFile, s.c_str(), n);
+
+        ::UnmapViewOfFile(pBuffer);
+      }
+      ::CloseHandle(hIPCFile);        
+    }
+
+    ::SetEvent(hBufferWritten);
+  }
+  
+  ::CloseHandle(hBufferWritten);
+  ::CloseHandle(hBufferProcessed);
+
+#endif //_WIN32
+}
+
+#include "TD_PackPop.h"
+
+#endif //_ODREMOTEGEOMPROXY_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ResBuf.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ResBuf.h
new file mode 100755
index 0000000..38a8781
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ResBuf.h
@@ -0,0 +1,1427 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#if !defined(_ODRESBUF_H___INCLUDED_)
+#define _ODRESBUF_H___INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "OdString.h"
+#include "DbHandle.h"
+#include "OdError.h"
+
+class OdBinaryData;
+class OdGePoint2d;
+class OdGePoint3d;
+class OdGeVector2d;
+class OdGeVector3d;
+class OdDbObjectId;
+class OdDbDatabase;
+class OdCmColor;
+class OdResBuf;
+class OdDbSelectionSet;
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdDbSelectionSet object pointers.
+*/
+typedef OdSmartPtr<OdDbSelectionSet> OdDbSelectionSetPtr;
+
+
+/** \details
+  <group Error_Classes>
+
+  This class implements the error object which indicates the result of an operation with the 
+  ResBuf object when it modifies the tagged data. An instance stores the eInvalidResBuf code.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_rb.html, Working with Tagged Data>
+
+  OdResBuf class
+*/
+class TOOLKIT_EXPORT OdError_InvalidResBuf : public OdError
+{
+public:
+  OdError_InvalidResBuf() : OdError(eInvalidResBuf){}
+};
+
+/** \details
+The typified smart pointer for the ResBuf object (tagged data). This template 
+class is specialization of the OdSmartPtr class for the OdResBuf class.
+
+\sa
+<link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdResBuf> OdResBufPtr;
+
+/** \details
+  <group Other_Classes>
+
+  This class implements ResBuf object which represents the structure for storing and passing 
+  the tagged data of all basic data types between various objects using different technologies.
+
+  \remarks
+  Each ResBuf object contains three data members:
+  * ResType: An integer which specifies the type of data stored in the ResBuf instance.
+  * ResVal:  A container for the data stored in the ResBuf instance.
+  * RbNext:  A smart pointer to the ResBuf instance to be attached in a linked list.
+
+  \sa
+  TD_Db
+
+  \sa
+  <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+  <link db_rb_sample_sequence.html, Example of Working with the Sequence of Tagged Data>
+
+  \sa
+  <link db_rb.html, Working with Tagged Data>
+
+  <link db_xdata.html, Working with Extended Data>
+
+  <link db_sysvar.html, Working with System Variables>
+*/
+class TOOLKIT_EXPORT OdResBuf : public OdRxObject
+{
+public:
+
+  ODRX_DECLARE_MEMBERS(OdResBuf);
+
+  /** \details
+    Destroys an instance of the ResBuf object.
+  */
+  ~OdResBuf();
+
+  /** \details
+    Copies the contents of the specified ResBuf object into this ResBuf object.
+
+    \param pRb [in]  Pointer to the specified source ResBuf object to be copied.
+
+    \remarks
+    This method generates the eInvalidGroupCode exeption when the data types of both 
+    ResBuf object are diffenrent or specified ResBuf value is invalid.
+
+    \sa
+    <link db_rb.html, Working with Tagged Data>
+  */
+  void copyFrom( const OdRxObject* pRb );
+
+
+  /** \details
+    Compares the specified ResBuf object with this ResBuf object whether object are equal. 
+
+    \param Rb [in]  Reference to the specified ResBuf object to be compared.
+
+    \remarks
+    Rreturns True when group codes and data values are equal, or False when group codes 
+    are different or data values are different.
+
+    \sa
+    <link db_rb.html, Working with Tagged Data>
+  */
+  bool operator==( const OdResBuf& Rb ) const;
+
+
+  /** \details
+    Compares the specified ResBuf object with this ResBuf object whether object are not equal. 
+
+    \param Rb [in]  Reference to the specified ResBuf object to be compared.
+
+    \remarks
+    Returns True when group codes are different or data values are different, or False when 
+    group codes and data values are equal.
+
+    \sa
+    <link db_rb.html, Working with Tagged Data>
+  */
+  bool operator!=( const OdResBuf& Rb ) const;
+
+
+  /** \details
+    Defines the group codes for ResBuf instances.
+  */
+  enum ValueType
+  {
+    kRtNone                     = 5000,
+    kRtDouble                   = 5001,
+    kRtPoint2d                  = 5002,
+    kRtInt16                    = 5003,
+    kRtAngle                    = 5004,
+    kRtString                   = 5005,
+
+    kRtEntName                  = 5006, // setObjectId()/getEntName()/getObjectId(0)
+    kRtPickSet                  = 5007,
+
+    kRtOrient                   = 5008,
+
+    kRtPoint3d                  = 5009,
+    kRtInt32                    = 5010,
+    kRtColor                    = 5011,
+
+    kRtVoid                     = 5014,
+    kRtListBeg                  = 5016, // list begin
+    kRtListEnd                  = 5017, // list end
+    kRtDote                     = 5018, // dot
+    kRtNil                      = 5019, // nil
+
+
+
+    kRtDXF0                     = 5020,
+    kRtT                        = 5021,
+    kRtResBuf                   = 5023,
+//  kRtModeless                 = 5027,
+
+    kRtBool                     =  290,
+    kRtInt8                     =  280,
+    kRtVector2d                 = kRtPoint2d,
+    kRtVector3d                 = kRtPoint3d,
+    kRtBinaryChunk              =  310,
+    kRtHandle                   =  320,
+    kRtObjectId                 =  330,
+    kRtSoftPointerId            =  330,
+    kRtHardPointerId            =  340,
+    kRtSoftOwnershipId          =  350,
+    kRtHardOwnershipId          =  360,
+
+    kDxfInvalid                 = -9999,
+
+    kDxfXDictionary             = -6,
+    kDxfPReactors               = -5,
+    kDxfOperator                = -4,
+    kDxfXDataStart              = -3,
+    kDxfHeaderId                = -2,
+    kDxfFirstEntId              = -2,
+    kDxfEnd                     = -1,
+    kDxfStart                   = 0,
+    kDxfText                    = 1,
+    kDxfXRefPath                = 1,
+    kDxfShapeName               = 2,
+    kDxfBlockName               = 2,
+    kDxfAttributeTag            = 2,
+    kDxfSymbolTableName         = 2,
+    kDxfMstyleName              = 2,
+    kDxfSymTableRecName         = 2,
+    kDxfAttributePrompt         = 3,
+    kDxfDimStyleName            = 3,
+    kDxfLinetypeProse           = 3,
+    kDxfTextFontFile            = 3,
+    kDxfDescription             = 3,
+    kDxfDimPostStr              = 3,
+    kDxfTextBigFontFile         = 4,
+    kDxfDimAPostStr             = 4,
+    kDxfCLShapeName             = 4,
+    kDxfSymTableRecComments     = 4,
+    kDxfHandle                  = 5,
+    kDxfDimBlk                  = 5,
+    kDxfDimBlk1                 = 6,
+    kDxfLinetypeName            = 6,
+    kDxfDimBlk2                 = 7,
+    kDxfTextStyleName           = 7,
+    kDxfLayerName               = 8,
+    kDxfCLShapeText             = 9,
+    kDxfXCoord                 = 10,
+    kDxfYCoord                 = 20,
+    kDxfZCoord                 = 30,
+    kDxfElevation              = 38,
+    kDxfThickness              = 39,
+    kDxfReal                   = 40,
+    kDxfViewportHeight         = 40,
+    kDxfTxtSize                = 40,
+    kDxfTxtStyleXScale         = 41,
+    kDxfViewWidth              = 41,
+    kDxfViewportAspect         = 41,
+    kDxfTxtStylePSize          = 42,
+    kDxfViewLensLength         = 42,
+    kDxfViewFrontClip          = 43,
+    kDxfViewBackClip           = 44,
+    kDxfShapeXOffset           = 44,
+    kDxfShapeYOffset           = 45,
+    kDxfViewHeight             = 45,
+    kDxfShapeScale             = 46,
+    kDxfPixelScale             = 47,
+    kDxfLinetypeScale          = 48,
+    kDxfDashLength             = 49,
+    kDxfMlineOffset            = 49,
+    kDxfLinetypeElement        = 49,
+    kDxfAngle                  = 50,
+    kDxfViewportSnapAngle      = 50,
+    kDxfViewportTwist          = 51,
+    kDxfVisibility             = 60,
+    kDxfLayerLinetype          = 61,
+    kDxfColor                  = 62,
+    kDxfHasSubentities         = 66,
+    kDxfViewportVisibility     = 67,
+    kDxfViewportActive         = 68,
+    kDxfViewportNumber         = 69,
+    kDxfInt16                  = 70,
+    kDxfViewMode               = 71,
+    kDxfCircleSides            = 72,
+    kDxfViewportZoom           = 73,
+    kDxfViewportIcon           = 74,
+    kDxfViewportSnap           = 75,
+    kDxfViewportGrid           = 76,
+    kDxfViewportSnapStyle      = 77,
+    kDxfViewportSnapPair       = 78,
+    kDxfRegAppFlags            = 71,
+    kDxfTxtStyleFlags          = 71,
+    kDxfLinetypeAlign          = 72,
+    kDxfLinetypePDC            = 73,
+    kDxfInt32                  = 90,
+    kDxfSubclass               = 100,
+    kDxfEmbeddedObjectStart    = 101,
+    kDxfControlString          = 102,
+    kDxfDimVarHandle           = 105,
+    kDxfUCSOrg                 = 110,
+    kDxfUCSOriX                = 111,
+    kDxfUCSOriY                = 112,
+    kDxfXReal                  = 140,
+    // 64-bit integers can only be used with version R24 and higher
+    kDxfInt64                  = 160,
+
+    kDxfXInt16                 = 170,
+    kDxfNormalX                = 210,
+    kDxfNormalY                = 220,
+    kDxfNormalZ                = 230,
+    kDxfXXInt16                = 270,
+    kDxfInt8                   = 280,
+    kDxfRenderMode             = 281,
+    kDxfBool                   = 290,
+    kDxfXTextString            = 300,
+    kDxfBinaryChunk            = 310,
+    kDxfArbHandle              = 320,
+    kDxfSoftPointerId          = 330,
+    kDxfHardPointerId          = 340,
+    kDxfSoftOwnershipId        = 350,
+    kDxfHardOwnershipId        = 360,  
+    kDxfLineWeight             = 370,
+    kDxfPlotStyleNameType      = 380,
+    kDxfPlotStyleNameId        = 390,
+    kDxfXXXInt16               = 400,
+    kDxfLayoutName             = 410,
+    kDxfComment                = 999,
+    kDxfXdAsciiString          = 1000,
+    kDxfRegAppName             = 1001,
+    kDxfXdControlString        = 1002,
+    kDxfXdLayerName            = 1003,
+    kDxfXdBinaryChunk          = 1004,
+    kDxfXdHandle               = 1005,
+    kDxfXdXCoord               = 1010,
+    kDxfXdYCoord               = 1020,
+    kDxfXdZCoord               = 1030,
+    kDxfXdWorldXCoord          = 1011,
+    kDxfXdWorldYCoord          = 1021,
+    kDxfXdWorldZCoord          = 1031,
+    kDxfXdWorldXDisp           = 1012,
+    kDxfXdWorldYDisp           = 1022,
+    kDxfXdWorldZDisp           = 1032,
+    kDxfXdWorldXDir            = 1013,
+    kDxfXdWorldYDir            = 1023,
+    kDxfXdWorldZDir            = 1033,
+    kDxfXdReal                 = 1040,
+    kDxfXdDist                 = 1041,
+    kDxfXdScale                = 1042,
+    kDxfXdInteger16            = 1070,
+    kDxfXdInteger32            = 1071
+  };
+
+
+  /** \details
+    Returns the group code as an Integer value which indicates the data type stored in
+    the ResBuf object.
+    
+    \remarks
+    Use the OdDxfCode::_getType() static method to determine the type of data associated 
+    with the returned group code.
+    
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_type.html, Getting and Setting Tagged Data>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::ValueType enumerator
+
+    OdResBuf::setRestype() method
+  */
+  int restype() const;
+
+  
+  /** \details
+    Sets the group code for the ResBuf object.
+    
+    \param resType [in]  Group code as an Integer value.
+        
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_type.html, Getting and Setting Tagged Data>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::ValueType enumerator
+
+    OdResBuf::restype() method
+  */
+  void setRestype( int resType );
+
+
+  /** \details
+    Returns a smart pointer to the next ResBuf object in the sequence of tagged data.
+
+    \sa
+    <link db_rb_sample_sequence.html, Example of Working with the Sequence of Tagged Data>
+
+    \sa
+    <link db_rb_sequence.html, Sequence of Tagged Data>
+
+    OdResBuf::last(), OdResBuf::setNext() methods
+  */
+  OdResBufPtr next() const;
+
+
+  /** \details
+    Returns a smart pointer to the last ResBuf object in the sequence of tagged data.
+
+    \sa
+    <link db_rb_sample_sequence.html, Example of Working with the Sequence of Tagged Data>
+
+    \sa
+    <link db_rb_sequence.html, Sequence of Tagged Data>
+
+    OdResBuf::next(), OdResBuf::setNext() methods
+  */
+  OdResBufPtr last() const;
+
+
+  /** \details
+    Inserts the specified ResBuf object before the next ResBuf object in the sequence of 
+    tagged data after the current ResBuf object that calls this method.
+    
+    \param pRb [in]  Pointer to the existing ResBuf instance to be inserted.
+    
+    \remarks
+    Returns a smart pointer to the ResBuf object before which it was inserted.
+
+    \sa
+    <link db_rb_sample_sequence.html, Example of Working with the Sequence of Tagged Data>
+
+    \sa
+    <link db_rb_sequence.html, Sequence of Tagged Data>
+
+    OdResBuf::next(), OdResBuf::last(), OdResBuf::setNext() methods
+  */
+  OdResBufPtr insert( OdResBuf* pRb );
+
+
+  /** \details
+    Sets the specified ResBuf object as the next ResBuf Object in the sequence of 
+    tagged data after the current ResBuf object that calls this method.
+    
+    \param pRb [in]  Pointer to the existing ResBuf instance to be set.
+
+    \remarks
+    Returns a smart pointer to the ResBuf object before which it was set.
+
+    \sa
+    <link db_rb_sample_sequence.html, Example of Working with the Sequence of Tagged Data>
+
+    \sa
+    <link db_rb_sequence.html, Sequence of Tagged Data>
+
+    OdResBuf::next(), OdResBuf::last(), OdResBuf::insert() methods
+  */
+  OdResBufPtr setNext( OdResBuf* pRb );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as a String value.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the String type or Name type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_string.html, Getting and Setting Strings>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setString(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  OdString getString() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified String value only if
+    the stored group code has a String type.
+      
+    \param sValue [in]  String value to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the String type or Name type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_string.html, Getting and Setting Strings>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getString(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setString( const OdString& sValue );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as a Boolean value.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Bool type. If the stored value is an Integer type, this method 
+    casts it to a Boolean type and returns True when the value is non zero, or False when the
+    value is zero. 
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setBool(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  bool getBool() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified Boolean value only if
+    the stored group code has a Boolean type.
+      
+    \param bValue [in]  Boolean value to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Bool type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getBool(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setBool( bool bValue );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as 8-bit Integer value.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer8 or Integer16 type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setInt8(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  OdInt8 getInt8() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified 8-bit Integer value only if
+    the stored group code has an Integer type.
+      
+    \param iValue [in]  8-bit Integer value to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer8 type. Use the ((OdInt8)value) instruction to convert  
+    the passed value.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getInt8(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setInt8( OdInt8 iValue );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as 16-bit Integer value.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer8 or Integer16 type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setInt16(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  OdInt16 getInt16() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified 16-bit Integer value only if
+    the stored group code has an Integer type.
+      
+    \param iValue [in]  16-bit Integer value to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer16 type. Use the ((OdInt16)value) instruction to convert  
+    the passed value.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getInt16(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setInt16( OdInt16 iValue );
+
+
+
+  /** \details
+    Returns the data content of the ResBuf object as 32-bit Integer value.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer8, Integer16, or Integer32 type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setInt32(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  OdInt32 getInt32() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified 32-bit Integer value only if
+    the stored group code has an Integer type.
+      
+    \param iValue [in]  32-bit Integer value to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer32 type. Use the ((OdInt32)value) instruction to convert  
+    the passed value.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getInt32(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setInt32( OdInt32 iValue );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as 64-bit Integer value.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer8, Integer16, Integer32, or Integer64 type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setInt64(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  OdInt64 getInt64() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified 64-bit Integer value only if
+    the stored group code has an Integer type.
+      
+    \param iValue [in]  64-bit Integer value to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Integer64 type. Use the ((OdInt64)value) instruction to convert  
+    the passed value.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getInt64(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setInt64( OdInt64 iValue );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as a double-precision floating-point value.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Double or Angle type. The returned value can be 
+    converted to an Integer value truncating the fractional part.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setDouble(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  double getDouble() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified double-precision 
+    floating-point value only if the stored group code has a Double or Angle type.
+      
+    \param realValue [in]  Double value to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Double or Angle type. Use the ((double)value) 
+    instruction to convert the passed value.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_typical.html, Getting and Setting Typical Data (integer, double, boolean)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getDouble(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setDouble( double realValue );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as two-dimesional point instance.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. When the ResBuf object stores three-dimensional
+    point or vector, this method converts it to the two-dimesional point truncating Z-coordinate.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setPoint2d(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  const OdGePoint2d& getPoint2d() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified two-dimesional point instance 
+    only if the stored group code has a Point type.
+      
+    \param gePoint [in]  Two-dimesional point instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. The passed value must be the OdGePoint2d instance.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getPoint2d(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setPoint2d( const OdGePoint2d& gePoint );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as three-dimesional point instance.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. When the ResBuf object stores two-dimensional
+    point or vector, this method converts it to the three-dimesional point adding zero Z-coordinate.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setPoint3d(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  const OdGePoint3d& getPoint3d() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified three-dimesional point  
+    instance only if the stored group code has a Point type.
+      
+    \param gePoint [in]  Three-dimesional point instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. The passed value must be the OdGePoint3d instance.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getPoint3d(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setPoint3d( const OdGePoint3d& gePoint );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as two-dimesional vector instance.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. When the ResBuf object stores three-dimensional
+    point or vector, this method converts it to the two-dimesional vector truncating Z-coordinate.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setVector2d(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  const OdGeVector2d& getVector2d() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified two-dimesional vector  
+    instance only if the stored group code has a Point type.
+      
+    \param geVector [in]  Two-dimesional vector instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. The passed value must be the OdGeVector2d instance.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getVector2d(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setVector2d( const OdGeVector2d& geVector );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as three-dimesional vector instance.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. When the ResBuf object stores two-dimensional
+    point or vector, this method converts it to the three-dimesional vector adding zero Z-coordinate.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setVector3d(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  const OdGeVector3d& getVector3d() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified three-dimesional vector  
+    instance only if the stored group code has a Point type.
+      
+    \param geVector [in]  Three-dimesional vector instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Point type. The passed value must be the OdGeVector3d instance.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_point.html, Getting and Setting Points and Vectors>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getVector3d(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+  */
+  void setVector3d(const OdGeVector3d& val);
+
+
+  /** \details
+    Returns the data content of the ResBuf object as a Binary chunk.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the BinaryChunk type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_other.html, Getting and Setting Specific Data (color, binary, resbuf)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setBinaryChunk(), OdResBuf::restype(), OdDxfCode::_getType() methods
+
+    OdBinaryData, OdUInt8 classes
+  */
+  const OdBinaryData& getBinaryChunk() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified binary chunk instance 
+    only if the stored group code has the BinaryChunk type.
+      
+    \param bChunk [in]  Binary chunk instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the BinaryChunk type. The passed value must be the OdBinaryChunk instance.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_other.html, Getting and Setting Specific Data (color, binary, resbuf)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getBinaryChunk(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+
+    OdBinaryData, OdUInt8 classes
+  */
+  void setBinaryChunk( const OdBinaryData& bChunk );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as a Color instance.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored group code is not set 
+    to kRtColor. The OdDxfCode::_getType() method returns Unknown type for it.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_other.html, Getting and Setting Specific Data (color, binary, resbuf)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    <link cm.html, Colors and Transparencies>
+
+    OdResBuf::setColor(), OdResBuf::restype() methods
+  */
+  const OdCmColor& getColor() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified Color instance 
+    only if the group code is set to OdResBuf::kRtColor.
+      
+    \param cmColor [in]  Color instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored group code is not set 
+    to kRtColor. The passed value must be the OdCmColor instance. The OdDxfCode::_getType() 
+    method returns Unknown type for it.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_other.html, Getting and Setting Specific Data (color, binary, resbuf)>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    <link cm.html, Colors and Transparencies>
+
+    OdResBuf::getColor(), OdResBuf::setRestype() methods
+  */
+  void setColor( const OdCmColor& cmColor );
+
+
+  /** \details
+    Returns a pointer to the ResBuf instance nested in the data content of the ResBuf object.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored group code is not set 
+    to kRtResBuf. The OdDxfCode::_getType() method returns Unknown type for it.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_other.html, Getting and Setting Specific Data (color, binary, resbuf)>
+
+    OdResBuf::setResBuf(), OdResBuf::restype() methods
+  */
+  OdResBufPtr getResBuf() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified ResBuf instance 
+    only if the group code is set to OdResBuf::kRtResBuf.
+      
+    \param pResBuf [in]  Pointer to the existing ResBuf instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored group code is not set 
+    to kRtResBuf. The OdDxfCode::_getType() method returns Unknown type for it.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_other.html, Getting and Setting Specific Data (color, binary, resbuf)>
+
+    OdResBuf::getResBuf(), OdResBuf::setRestype() methods
+  */
+  void setResBuf( const OdResBuf* pResBuf );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as an OdDbHandle instance.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Handle type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_object.html, Getting and Setting Objects>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setHandle(), OdResBuf::restype(), OdDxfCode::_getType() methods
+
+    OdDbHandle, OdUInt64 classes
+  */
+  OdDbHandle getHandle() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified Handle instance 
+    only if the stored group code has the Handle type.
+      
+    \param vHandle [in]  Handle instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the Handle type. The passed value must be an instance of the OdDbHandle 
+    class or OdUInt64 class to be converted to Handle type.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_object.html, Getting and Setting Objects>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getHandle(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+
+    OdDbHandle, OdUInt64 classes
+  */
+  void setHandle( const OdDbHandle& vHandle );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as an OdDbObjectId instance.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the ObjectId type. Only group codes kRtEntName and 
+    kDxfEnd store the object ID, other group codes associated with ObjectId,
+    SoftPointerId, HardPointerId, SoftOwnershipId, HardOwnershipId types store the handle.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_object.html, Getting and Setting Objects>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::setObjectId(), OdResBuf::restype(), OdDxfCode::_getType() methods
+
+    OdDbObjectId, OdDbHandle classes
+  */
+  const OdDbObjectId& getEntName() const;
+
+
+  /** \details
+    Sets the data content of the ResBuf object using the specified object ID instance 
+    only if the stored group code has the ObjectId, SoftPointerId, 
+    HardPointerId, SoftOwnershipId, or HardOwnershipId type.
+      
+    \param idObject [in]  Object ID instance to be set.
+
+    \remarks
+    This method generates the OdError_InvalidResBuf exeption when the stored data type does not 
+    correspond to the ObjectId type. The passed value must be the OdDbObjectId instance.
+    Only group codes kRtEntName and kDxfEnd store the object ID, other group 
+    codes store the handle.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_object.html, Getting and Setting Objects>
+
+    <link db_rb_verify.html, Determining the Data Type by Group Code>
+
+    OdResBuf::getEntName(), OdResBuf::setRestype(), OdDxfCode::_getType() methods
+
+    OdDbObjectId, OdDbHandle classes
+  */
+  void setObjectId( const OdDbObjectId& idObject );
+
+
+  /** \details
+    Returns the data content of the ResBuf object as an OdDbObjectId instance using the 
+    specified database instance.
+    
+    \param pDb [in]  Pointer to the database object.
+
+    \sa
+    <link db_rb_sample_codes.html, Example of Entering and Displaying Tagged Data>
+
+    \sa
+    <link db_rb_data_object.html, Getting and Setting Objects>
+
+    OdResBuf::setObjectId(), OdResBuf::restype(), OdDxfCode::_getType() methods
+  */
+  OdDbObjectId getObjectId( const OdDbDatabase* pDb ) const;
+
+
+  /** \details
+    Returns the ResVal in this ResBuf object.
+  */
+  OdDbSelectionSetPtr getPickSet() const;
+
+  /** \details
+    Sets the ResVal in this ResBuf object.
+      
+    \param pSSet [in]  selection set.
+
+    \remarks
+    OdError_InvalidResBuf if ResType does not correspond to the type of ResVal.
+  */
+  void setPickSet(const OdDbSelectionSet* pSSet);
+
+
+  /** \details
+    Create an instance of the ResBuf object of the specified data type and initialized
+    the specified data value.
+    
+    \param resType [in]  Group code as an Integer value.
+    \param resVal  [in] Value of the corresponding type.    
+ 
+    \remarks
+    These method generate the OdError_InvalidResBuf exeption when the specified data value 
+    does not correspond to the specified data type.
+
+    \sa
+    <link db_rb_sequence.html, Sequence of Tagged Data>
+
+    \sa
+    <link db_rb_data_object.html, Getting and Setting Objects>
+  */
+  static OdResBufPtr newRb(int resType = OdResBuf::kRtNone);
+
+  static OdResBufPtr newRb(int resType, bool resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setBool(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdInt8 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt8(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdUInt8 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt8(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdInt16 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt16(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdUInt16 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt16(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdInt32 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt32(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdUInt32 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt32(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdInt64 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt64(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, OdUInt64 resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setInt64(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, double resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setDouble(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdGePoint2d& resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setPoint2d(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdGePoint3d& resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setPoint3d(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdGeVector2d& resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setVector2d(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdGeVector3d& resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setVector3d(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdString& resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setString(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdChar* resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setString(resVal);
+    return pRes;
+  }
+
+#if defined(OD_WINDOWS_DESKTOP) && defined(_MSC_VER)
+  static OdResBufPtr newRb(int resType, const __wchar_t* resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setString(resVal);
+    return pRes;
+  }
+#endif
+
+  static OdResBufPtr newRb(int resType, const OdCmColor& resVal)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setColor(resVal);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdDbObjectId& id)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setObjectId(id);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdDbSelectionSet* pSSet)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setPickSet(pSSet);
+    return pRes;
+  }
+
+  static OdResBufPtr newRb(int resType, const OdResBuf* pNestedRb)
+  {
+    OdResBufPtr pRes = newRb(resType);
+    pRes->setResBuf(pNestedRb);
+    return pRes;
+  }
+
+  /*!DOM*/ // is used to get assertion with needed call stack only
+  static void setAssertIndexByNewRb(int index);
+
+  /** \details
+    Defines the content of the ResBuf object.
+  */
+  union Data
+  {
+    bool    Bool;                     // Boolean content
+    OdInt16 Int16;                    // 8-bit or 16-bit Integer content
+    OdInt32 Int32;                    // 32-bit Integer or Color content
+    OdInt64 Int64;                    // 64-bit Integer or Handle content  
+    double  Double;                   // double-precision floating-point content
+    void*   Pointer;                  // pointer to an object
+    OdUInt8 Bytes[sizeof(OdInt64)];   // Content as an array of bytes
+  };
+
+protected:
+  /** \details
+    Builds an instance of the ResBuf object.
+    
+    \remarks
+    Use the newRb() static pseudo-constructor instead it.
+    See: <link db_rb_sequence.html, Sequence of Tagged Data>
+  */
+  OdResBuf();
+
+  int m_nCode;           // Group code that defines the data type
+  Data m_data;           // Value that defines the content
+  OdResBufPtr m_pNext;   // Smart pointer to another instance for attaching in a sequence
+};
+
+inline bool
+OdResBuf::operator!=( const OdResBuf& other ) const
+{
+  return !operator==( other );
+}
+
+#include "TD_PackPop.h"
+
+#endif //_ODRESBUF_H___INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RootExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RootExport.h
new file mode 100755
index 0000000..e4780c4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RootExport.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+/*  RootExport.h
+
+*/
+#ifndef _ROOTEXPORT_DEFINED
+#define _ROOTEXPORT_DEFINED
+
+#include "OdPlatformSettings.h"
+
+#ifdef ODAFIRST_DLL_EXPORTS
+  #define FIRSTDLL_EXPORT           OD_TOOLKIT_EXPORT
+  #define FIRSTDLL_EXPORT_STATIC    OD_STATIC_EXPORT
+#else
+  #define FIRSTDLL_EXPORT           OD_TOOLKIT_IMPORT
+  #define FIRSTDLL_EXPORT_STATIC    OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  // _ROOTEXPORT_DEFINED
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Rp/RasterProcessor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Rp/RasterProcessor.h
new file mode 100755
index 0000000..bd17974
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Rp/RasterProcessor.h
@@ -0,0 +1,120 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_ODRASTERPROCESSOR_H_
+#define _OD_ODRASTERPROCESSOR_H_
+
+#include "RxObject.h"
+#include "RxModule.h"
+#include "Gi/GiRasterImage.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the Raster Converter Protocol Extension class.
+    Library: RasterProcessor
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdRasterConvertPE : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRasterConvertPE);
+
+  /** \details
+    This function applies the specified raster conversions to the specified RasterImage object.
+
+    \remarks
+    These conversions include filtering, flips, resampling, resizing, rotations, and trimming.
+    
+    \param pOrig [in]  Pointer to the original image.
+    \param convertPaletteToRGB [in]  Convert palette to RGB.
+    \param brightness [in]  Brightness. [0.0 .. 100.0].
+    \param contrast [in]  Contrast. [0.0 .. 100.0].
+    \param fade [in]  Fade. [0.0 .. 100.0].
+    \param backgroundColor [in]  Background color.
+    \param flipX [in]  Flip along the X-axis.
+    \param flipY [in]  Flip along the Y-axis.
+    \param rotate90 [in]  Rotate 90� CCW.
+    \param pDestDesc [in]  Pointer to the destination image description..
+    \param transparency [in]  Make transparent.
+    
+  */
+  virtual OdGiRasterImagePtr convertImage(
+    const OdGiRasterImage* pOrig,
+    bool convertPaletteToRGB,
+    double brightness = 50.0, double contrast = 50.0, double fade = 0.0, ODCOLORREF backgroundColor = 0,
+    bool flipX = false, bool flipY = false, bool rotate90 = false,
+    const OdGiRasterImage* pDestDesc = 0,
+    bool transparency = false) = 0;
+
+  /** \details
+    Brightness, contrast, fade adjustments behaviour.
+
+    \remarks
+    kDwgBehaviour is default state for adjustments behaviour.
+  */
+  enum AdjustmentsBehaviour
+  {
+    kDwgBehaviour = 0,
+    kDgnBehaviour = 1
+  };
+
+  /** \details
+    Setup adjustments behaviour for next convertImage calls.
+
+    \param newBehaviour [in]  new adjustments behaviour state.
+  */
+  virtual void setAdjustmentsBehaviour(AdjustmentsBehaviour newBehaviour) = 0;
+
+  /** \details
+    Returns current adjustments behaviour state.
+  */
+  virtual AdjustmentsBehaviour adjustmentsBehaviour() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdRasterConvertPE object pointers.
+*/
+typedef OdSmartPtr<OdRasterConvertPE> OdRasterConvertPEPtr;
+
+/** \details
+    This class is the base class for classes that provide platform-dependent raster processing services for Teigha.
+
+    Library: RasterProcessor
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdRasterProcessingServices : public OdRxModule
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRasterProcessingServices);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdRasterProcessingServices object pointers.
+*/
+typedef OdSmartPtr<OdRasterProcessingServices> OdRasterProcessingServicesPtr;
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _OD_ODRASTERPROCESSOR_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDLinkerReactor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDLinkerReactor.h
new file mode 100755
index 0000000..f1a23b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDLinkerReactor.h
@@ -0,0 +1,104 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// RxDLinkerReactor.h: interface for the OdRxDLinkerReactor class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(_ODRXDLINKERREACTOR_H_INCLUDED_)
+#define _ODRXDLINKERREACTOR_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdRxDLinker events.
+    
+    \remarks
+    Events consist of the loading and unloading of OdRxModules.
+    
+    \note
+    The default implementations of all methods in this class do nothing.
+
+    \sa
+    TD_Root
+
+    <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxDLinkerReactor : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxDLinkerReactor);
+
+  /** \details
+    Notification function called whenever an OdRxModule (TX application) will be loaded.
+    \param moduleName [in]  Module name.
+    \note
+    This function is called before the operation. 
+  */
+  virtual void rxAppWillBeLoaded(const OdString& moduleName);
+  /** \details
+    Notification function called whenever an OdRxModule (TX application) has been loaded.
+    \param pModule [in]  Pointer to the OdRxModule.
+    \note
+    This function is called after the operation. 
+  */
+  virtual void rxAppLoaded(OdRxModule* pModule);
+  /** \details
+    Notification function called whenever the loading of an OdRxModule (TX application) has been aborted.
+    \param moduleName [in]  Module name.
+    \note
+    This function is after before the operation. 
+  */
+  virtual void rxAppLoadAborted(const OdString& moduleName);
+
+  /** \details
+    Notification function called whenever an OdRxModule (TX application) is about to be unloaded.
+    \param pModule [in]  Pointer to the OdRxModule.
+    \note
+    This function is called before the operation. 
+  */
+  virtual void rxAppWillBeUnloaded(OdRxModule* pModule);
+  /** \details
+    Notification function called whenever an OdRxModule (TX application) has been unloaded.
+    \param moduleName [in]  Module name.
+    \note
+    This function is called after the operation. 
+  */
+  virtual void rxAppUnloaded(const OdString& moduleName);
+  /** \details
+    Notification function called whenever the unloading of an OdRxModule (TX application) has been aborted.
+    \param moduleName [in]  Module name.
+    \note
+    This function is after before the operation. 
+  */
+  virtual void rxAppUnloadAborted(OdRxModule* pModule);
+};
+
+#include "TD_PackPop.h"
+
+#endif // !defined(_ODRXDLINKERREACTOR_H_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDefs.h
new file mode 100755
index 0000000..a2b608c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDefs.h
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// ODA typedefs
+#ifndef _RX_DEFS_
+#define _RX_DEFS_
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdRx
+{
+  enum DictIterType
+  {
+    kDictSorted = 0,
+    kDictCollated,
+    kDictReversed
+  };
+}
+
+#endif // _RX_DEFS_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDictionary.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDictionary.h
new file mode 100755
index 0000000..bd78b90
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDictionary.h
@@ -0,0 +1,367 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _RXDICTIONARY_INC_
+#define _RXDICTIONARY_INC_
+
+
+#include "RxObject.h"
+#include "RxIterator.h"
+#include "RxDefs.h"
+#include "RxNames.h"
+
+class OdString;
+
+#include "TD_PackPush.h"
+
+/** \details
+    <group OdRx_Classes>
+
+    This class implements Iterator objects that traverse entries in OdRxDictionary objects in an OdDbDatabase instance.
+    
+    Library: TD_Db
+    
+    \remarks
+    An OdRxDictionaryIterator maintains a "current position" within the entries
+    of the associated dictionary, and can provide access to the key value and object at the
+    current position.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link iterator_overview.html, Overview of Classes that Implement an Iterator>
+
+    <link dictionary_iterating.html, Iterating through Items of a Dictionary>
+*/
+class FIRSTDLL_EXPORT OdRxDictionaryIterator : public OdRxIterator
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxDictionaryIterator);
+
+  /** \details
+     Returns the keyword associated with the item of the dictionary on which the iterator refers
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+  */
+  virtual OdString getKey() const = 0;
+
+  /** \details
+    Returns the ID of the item in the dictionary on which the iterator refers
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+  */
+  virtual OdUInt32 id() const = 0;
+};
+
+/** \details
+  The typified smart pointer for the /dictionary iterator/. It is the template class created by the OdSmartPtr class.
+*/
+typedef OdSmartPtr<OdRxDictionaryIterator> OdRxDictionaryIteratorPtr;
+
+
+/** \details
+    <group OdRx_Classes> 
+    This class implements the Dictionary object.
+    
+    \remarks
+    * Each instance of OdRxbDictionary is a single container object, in which items are searched, added, modified, and deleted.  
+    * Each /dictionary item/ is associated with an unique textual string named keyword and 32-Bit ID with an unique OdDbObject.
+    * Anonymous names are signified by specifying a name starting with an asterisk; e.g., *U. 
+       A unique name (also starting with an asterisk) will be constructed for the entry.
+    * Entry names honor the rules of Symbol names
+        * Names may be any length.
+        * Names are case-insensitve
+        * Names may not contain any of the following characters: | * \ : ; < > ? " , equals
+
+    \sa
+    OdRxDictionaryIterator
+    
+    Library: TD_Db
+    
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary.html, Working with Dictionaries>
+*/
+class FIRSTDLL_EXPORT OdRxDictionary : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxDictionary);
+  
+  /** \details
+    Allocates storage for the specified number of items in this /dictionary object/.
+
+    \param minSize [in]  Minimum number of items for allocating. 
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual void reserve(
+    OdUInt32 minSize);
+
+  /** \details
+    Returns the /non-typified smart pointer/ to the instance that is associated with the /dictionary item/ 
+    specified by the keyword or ID.
+
+    \param key [in]  Item keyword as a string value.
+    \param id [in]  Item ID as an integer value.
+
+    \remarks
+    Returns a Null if the specified item is not found.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual OdRxObjectPtr getAt(
+    const OdString& key) const = 0;
+  virtual OdRxObjectPtr getAt(
+    OdUInt32 id) const = 0;
+
+  /** \details
+    Puts the instance specified by the /smart pointer/ into the /dictionary object/ and associates it with the specified keyword.
+    
+    \param key [in]  Keyword as a string value.
+    \param id [in]  ID as an integer value.
+    \param pObject [in]  Pointer to the instance to be put.
+    \param pRetId [in]  Pointer to an OdUInt32 to receive the Entry ID of the entry.
+    
+    \remarks
+    Returns a /smart pointer/ to the object at this entry prior to the call.
+    Keyword and smart pointer must not be Null, and id > 0.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual OdRxObjectPtr putAt(
+    const OdString& key, 
+    OdRxObject* pObject, 
+    OdUInt32* pRetId = 0) = 0;
+  virtual OdRxObjectPtr putAt(
+    OdUInt32 id, 
+    OdRxObject* pObject) = 0;
+  
+  /** \details
+    Sets the keyword for the item specified by ID for the /dictionary object/.
+    
+    \param id [in]   ID as an integer value.
+    \param newKey [in]  New keyword as a string value.
+    
+    \remarks
+    Returns true if and only if successful.    
+ 
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual bool resetKey(
+    OdUInt32 id, 
+    const OdString& newKey) = 0;
+
+  /** \details
+    Removes the item specified by keyword or ID from the /dictionary object/.
+    
+    \param key [in]  Keyword as a string value.
+    \param id [in]  ID as an integer value.
+    
+    \remarks
+    This method does not delete the instance associated with the removed item 
+    and returns a /smart pointer/ to the instance referenced by the item.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual OdRxObjectPtr remove(
+    const OdString& key) = 0;
+  virtual OdRxObjectPtr remove(
+    OdUInt32 id) = 0;
+
+
+  /** \details
+    Returns true if and only if the /dictionary object/ contains the item with the specified keyword or ID.
+
+    \param key [in]  Keyword as a string value.
+    \param id [in]  ID as an integer value.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual bool has(
+    const OdString& key) const = 0;
+  virtual bool has(
+    OdUInt32 id) const = 0;
+
+
+  /** \details
+    Returns the ID of the item specified by the keyword in the /dictionary object/.
+
+    \param key [in]  Keyword as a string value.
+    
+    \remarks
+    Returns (-1) if the keyword is not found in the dictionary.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual OdUInt32 idAt(
+    const OdString& key) const = 0;
+
+  /** \details
+    Returns the keyword of the item specified by the ID in the /dictionary object/.
+
+    \param id [in]  Entry ID.
+    
+    \remarks
+    Returns an empty string if ID is not found in the dictionary.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+   virtual OdString keyAt(
+    OdUInt32 id) const = 0;
+
+  /** \details
+    Returns the number of items in the /dictionary object/.
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual OdUInt32 numEntries() const = 0;
+
+  /** \details
+    Returns a new interator that can be used to traverse through items of the /dictionary object/.
+
+    \param iterType [in]  Type of iterator.
+
+    \remarks
+    The iterator type can be one of the following:
+
+    <table>
+    Name                      Description
+    OdRx::kDictCollated       Traverses the entries in the order they were added to the dictionary.
+    OdRx::kDictSorted         Traverses the entries in alphabetical order by key value.
+    </table>
+
+    \sa
+    <link dictionary_sample.html, Example of Working with a Dictionary>
+
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+
+    <link dictionary_iterating.html, Iterating through Items of a Dictionary>
+
+    <link iterator_concept.html, Concept of Iterators>
+  */
+  virtual OdRxDictionaryIteratorPtr newIterator(
+    OdRx::DictIterType iterType = OdRx::kDictCollated) = 0;
+
+  /** \details
+    Returns true if and only if keywords of the /dictionary object/ are case-sensitive, 
+    or false if keywords are case-insensitive.
+    
+    \sa
+    <link dictionary_functionality.html, Functionality of Dictionaries>
+  */
+  virtual bool isCaseSensitive() const = 0;
+};
+
+/** \details
+  The /typified smart pointer/ for the /dictionary object/. This template class is a specialization 
+   of the OdSmartPtr class for OdRxDictionary object.
+*/
+typedef OdSmartPtr<OdRxDictionary> OdRxDictionaryPtr;
+
+
+/** \details
+   Returns the /raw pointer/ to the <link dictionaty_root_runtime.html, Root Run-Time Dictionary>.
+*/
+FIRSTDLL_EXPORT OdRxDictionary* odrxSysRegistry();
+
+
+/** \details
+   Returns the /smart pointer/ to the <link rtti_class_dictionary.html, Dictionary of Registered Classes>.
+
+    \sa
+    <link rtti_concept.html, Concept of RTTI Technology>
+
+    <link rtti_class_registering.html, Registering and Unregistering of Classes>
+*/
+FIRSTDLL_EXPORT OdRxDictionaryPtr odrxClassDictionary();
+
+
+/** \details
+   Returns the /smart pointer/ to the /Dictionary of Registered Services/.
+*/
+FIRSTDLL_EXPORT OdRxDictionaryPtr odrxServiceDictionary();
+
+
+/** \details
+   Creates a new /dictionary object/ that can be modified only from a /single thread/ and
+   returns the /smart pointer/ to it.
+*/
+FIRSTDLL_EXPORT OdRxDictionaryPtr odrxCreateRxDictionary();
+
+
+/** \details
+   Creates a new /dictionary object/ that can be modified from /multiple threads/ and
+   returns the /smart pointer/ to it.
+*/
+FIRSTDLL_EXPORT OdRxDictionaryPtr odrxCreateSyncRxDictionary();
+
+
+#include "TD_PackPop.h"
+
+#endif // _RXDICTIONARY_INC_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDispatchImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDispatchImpl.h
new file mode 100755
index 0000000..a92e7cf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDispatchImpl.h
@@ -0,0 +1,336 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef __PROPERTIES_H_INCLUDED_
+#define __PROPERTIES_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxDictionary.h"
+#include "RxObjectImpl.h"
+#include "OdString.h"
+
+
+#ifdef _MSC_VER
+#pragma warning ( disable : 4702 ) // unreachable code
+#endif
+/** \details
+
+    <group OdRx_Classes> 
+*/
+class OdRxPropDesc : public OdRxObject
+{
+public:
+  virtual OdString name() const = 0;
+  virtual OdRxObjectPtr prop_get(const void* pThis) const = 0;
+  virtual void prop_put(void* pThis, OdRxObject* pVal) = 0;
+};
+
+/** \details
+
+    <group OdRx_Classes> 
+*/
+template <class TBase = OdRxDictionary>
+class OdRxDispatchImpl : public TBase
+{
+  typedef OdRxPropDesc PropDesc;
+protected:
+  class Iterator : public OdRxObjectImpl<OdRxDictionaryIterator>
+  {
+    OdRxDictionaryPtr         m_pOwner;
+    OdRxDictionaryIteratorPtr m_pDescIter;
+  public:
+    Iterator(OdRxDictionary* pOwner, OdRxDictionaryIterator* pDescIter)
+      : m_pOwner(pOwner), m_pDescIter(pDescIter) {}
+
+    static OdRxDictionaryIteratorPtr createObject(OdRxDictionary* pOwner, OdRxDictionaryIterator* pDescIter)
+    {
+      return OdRxDictionaryIteratorPtr((OdRxDictionaryIterator*)new Iterator(pOwner, pDescIter), kOdRxObjAttach);
+    }
+    OdString getKey() const { return m_pOwner->keyAt(id()); }
+    OdUInt32 id() const { return m_pDescIter->id(); }
+    bool done() const { return m_pDescIter->done(); }
+    bool next() { return m_pDescIter->next(); }
+    OdRxObjectPtr object() const { return m_pOwner->getAt(id()); }
+  };
+  virtual OdRxDictionary* propertiesInfo() const = 0;
+  inline PropDesc* descAt(OdUInt32 id) const
+  { return (PropDesc*)propertiesInfo()->getAt(id).get(); }
+public:
+  OdRxObjectPtr getAt(const OdString& key) const
+  { return OdRxDispatchImpl::getAt(idAt(key)); }
+
+  OdRxObjectPtr putAt(const OdString& key, OdRxObject* pObject, OdUInt32* = 0)
+  { return OdRxDispatchImpl::putAt(idAt(key), pObject); }
+
+  OdRxObjectPtr getAt(OdUInt32 id) const
+  { return descAt(id)->prop_get((TBase*)this); }
+
+  OdRxObjectPtr putAt(OdUInt32 id, OdRxObject* pObject)
+  {
+    if(id < numEntries())
+    {
+      PropDesc* pDesc = descAt(id);
+      OdRxObjectPtr pRes = pDesc->prop_get((TBase*)this);
+      pDesc->prop_put((TBase*)this, pObject);
+      return pRes;
+    }
+    throw OdError(eInvalidInput);
+  }
+
+  bool has(const OdString& entryName) const { return propertiesInfo()->has(entryName); }
+  bool has(OdUInt32 id) const { return propertiesInfo()->has(id); }
+  OdUInt32 idAt(const OdString& key) const { return propertiesInfo()->idAt(key); }
+  OdString keyAt(OdUInt32 id) const { return propertiesInfo()->keyAt(id); }
+  OdUInt32 numEntries() const { return propertiesInfo()->numEntries(); }
+  bool isCaseSensitive() const { return propertiesInfo()->isCaseSensitive(); }
+
+  OdRxDictionaryIteratorPtr newIterator(OdRx::DictIterType type = OdRx::kDictCollated)
+  {
+    return Iterator::createObject(this, propertiesInfo()->newIterator(type));
+  }
+
+  // not used
+  bool atKeyAndIdPut(const OdString& , OdUInt32 , OdRxObject* ) { 
+          throw OdError(eNotApplicable); 
+          return false; 
+  }
+
+  bool resetKey(OdUInt32 , const OdString& ) { 
+          throw OdError(eNotApplicable); 
+          return false; 
+  }
+  OdRxObjectPtr remove(const OdString& ) { 
+          throw OdError(eNotApplicable); 
+          return OdRxObjectPtr(); 
+  }
+  OdRxObjectPtr remove(OdUInt32 ) { 
+          throw OdError(eNotApplicable); 
+          return OdRxObjectPtr(); 
+  }
+};
+
+#define ODRX_DECLARE_DYNAMIC_PROPERTY_MAP(CLASS) \
+  virtual void generatePropMap(OdRxDictionary*) const;\
+  virtual OdRxDictionary* propertiesInfo() const
+
+#define ODRX_BEGIN_DYNAMIC_PROPERTY_MAP(CLASS) \
+void CLASS::generatePropMap(OdRxDictionary* pInfo) const {
+
+#define ODRX_END_DYNAMIC_PROPERTY_MAP(CLASS) }\
+OdRxDictionary* CLASS::propertiesInfo() const\
+{\
+  static OdRxDictionaryPtr pInfo;\
+  if(pInfo.isNull())\
+  {\
+    pInfo = ::odrxCreateRxDictionary();\
+    generatePropMap(pInfo);\
+  }\
+  return pInfo.get();\
+}
+
+#define ODRX_INHERIT_PROPERTIES(BASE_CLASS) \
+  BASE_CLASS::generatePropMap(pInfo);
+
+
+#define ODRX_DECLARE_PROPERTY(PropName) \
+  class _##PropName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
+  {\
+  public:\
+    static OdRxObjectPtr createObject();\
+    static inline  OdString _name();\
+    OdString name() const;\
+    OdRxObjectPtr prop_get(const void* pThis) const;\
+    void prop_put(void* pThis, OdRxObject* pVal);\
+  };
+
+#define ODRX_DECLARE_PROPERTY2(PropName, SrcFileName) \
+  class _##PropName##_##SrcFileName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
+  {\
+  public:\
+    static OdRxObjectPtr createObject();\
+    static inline  OdString _name();\
+    OdString name() const;\
+    OdRxObjectPtr prop_get(const void* pThis) const;\
+    void prop_put(void* pThis, OdRxObject* pVal);\
+  };
+
+#define ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, getMethodName, putMethodName, accessFn) \
+  OdRxObjectPtr _##PropName##_PropDesc::createObject()\
+  {\
+    return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
+  }\
+  inline OdString _##PropName##_PropDesc::_name()\
+  {\
+    static OdString sName(OD_T(#PropName));\
+    return sName;\
+  }\
+  OdString _##PropName##_PropDesc::name() const \
+  {\
+    return _name();\
+  }\
+  OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
+  {\
+    return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
+  }\
+  void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
+  {\
+    (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
+  }
+
+#define ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, accessFn) \
+  OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
+  {\
+    return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
+  }\
+  inline OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
+  {\
+    static OdString sName(OD_T(#PropName));\
+    return sName;\
+  }\
+  OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
+  {\
+    return _name();\
+  }\
+  OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
+  {\
+    return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
+  }\
+  void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
+  {\
+    (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
+  }
+
+#define ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, accessFn) \
+  OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
+  {\
+    return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
+  }\
+  inline OdString ClassPrefix _##PropName##_PropDesc::_name()\
+  {\
+    static OdString sName(OD_T(#PropName));\
+    return sName;\
+  }\
+  OdString ClassPrefix _##PropName##_PropDesc::name() const \
+  {\
+    return _name();\
+  }\
+  OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
+  {\
+    return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
+  }\
+  void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
+  {\
+    (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
+  }
+
+#define ODRX_GENERATE_PROPERTY(PropName) \
+  pInfo->putAt(_##PropName##_PropDesc::_name(), _##PropName##_PropDesc::createObject());
+
+#define ODRX_GENERATE_PROPERTY2(PropName, SrcFileName) \
+  pInfo->putAt(_##PropName##_##SrcFileName##_PropDesc::_name(), _##PropName##_##SrcFileName##_PropDesc::createObject());
+
+#define ODRX_DEFINE_PROPERTY(PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
+
+#define ODRX_DEFINE_PROPERTY2(PropName, SrcFileName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, get_##PropName, put_##PropName, accessFn)
+
+#define ODRX_DEFINE_PROPERTY_PREFIX(ClassPrefix, PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
+
+
+
+#define ODRX_DEFINE_PROPERTY_OBJECT(PropName, PropHolder, getMethodName, putMethodName, ObjType) \
+  OdRxObjectPtr _##PropName##_PropDesc::createObject()\
+  {\
+    return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
+  }\
+  OdString _##PropName##_PropDesc::_name()\
+  {\
+    static OdString sName(OD_T(#PropName));\
+    return sName;\
+  }\
+  OdString _##PropName##_PropDesc::name() const \
+  {\
+    return _name();\
+  }\
+  OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
+  {\
+    return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
+  }\
+  void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
+  {\
+    static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
+  }
+
+#define ODRX_DEFINE_PROPERTY_OBJECT2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, ObjType) \
+  OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
+  {\
+    return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
+  }\
+  OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
+  {\
+    static OdString sName(OD_T(#PropName));\
+    return sName;\
+  }\
+  OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
+  {\
+    return _name();\
+  }\
+  OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
+  {\
+    return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
+  }\
+  void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
+  {\
+    static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
+  }
+
+#define ODRX_DEFINE_PROPERTY_OBJECT_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, ObjType) \
+  OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
+  {\
+    return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
+  }\
+  OdString ClassPrefix _##PropName##_PropDesc::_name()\
+  {\
+    static OdString sName(OD_T(#PropName));\
+    return sName;\
+  }\
+  OdString ClassPrefix _##PropName##_PropDesc::name() const \
+  {\
+    return _name();\
+  }\
+  OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
+  {\
+    return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
+  }\
+  void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
+  {\
+    static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
+  }
+
+#include "TD_PackPop.h"
+
+#endif // __PROPERTIES_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDynamicModule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDynamicModule.h
new file mode 100755
index 0000000..0dd4be0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxDynamicModule.h
@@ -0,0 +1,698 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_RXDYNAMICMODULE_H_
+#define _OD_RXDYNAMICMODULE_H_
+
+#include "RxModule.h"
+#include "TDVersion.h"
+#include "OdString.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  <group OdRx_Classes> 
+
+  This template class provides the implementation of static rx-modules in multi-threaded (MT) mode.
+
+  \sa
+  OdRxModule, OdRefCounter classes
+*/
+template<class T, class TInterface = T>
+class OdRxStaticModule : public T
+{
+  ODRX_HEAP_OPERATORS();
+
+  OdRefCounter m_nLockCount;
+  OdString     m_sName;
+
+  OdRxStaticModule(const OdString& sName)
+    : m_nLockCount(0)
+    , m_sName(sName)
+  { }
+  void addRef() 
+  { 
+    ++m_nLockCount; 
+  }
+  void release() 
+  { 
+    ODA_ASSERT(m_nLockCount); 
+    --m_nLockCount; 
+  }
+  long numRefs() const { return m_nLockCount; }
+public:
+  /** \details
+    Returns the system data for the existing static rx-module instance.
+
+    \remarks
+    The default implementation does nothing and returns a null pointer.
+  */
+  void* sysData() { return 0; }
+  
+  /** \details
+    Creates a new static rx-module instance with the specified /module name/ and 
+    returns a raw pointer to it.
+
+    \param name [in]  /Module name/ as a non-empty string value.
+  */
+  static OdRxModule* createModule(const OdString& name)
+  {
+    return new OdRxStaticModule(name);
+  }
+
+  /** \details
+    Deletes this static rx-module object.
+  */
+  void deleteModule() { delete this; }
+
+  /** \details
+    Returns the /module name/ for the static rx-module instance.
+  */
+  OdString moduleName() const { return m_sName; }
+};
+
+typedef OdRxModule* (*StaticModuleEntryPoint)(const OdString& szModuleName);
+
+#define ODRX_STATIC_MODULE_ENTRY_POINT(_UserModuleClass) odrxCreateModuleObject_For_##_UserModuleClass
+
+/** \details
+    This macro is used to create an entry point function for a custom application which 
+    are linked in statically to a Teigha client application.
+*/
+#define ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(_UserModuleClass) \
+OdRxModule* ODRX_STATIC_MODULE_ENTRY_POINT(_UserModuleClass)(const OdString& szModuleName)
+
+/** \details
+  <group !!RECORDS_TD_APIRef>
+*/
+      struct STATIC_MODULE_DESC
+{
+  const wchar_t*           szAppName;
+  StaticModuleEntryPoint  entryPoint;
+};
+
+/** \details
+  Defines the start of the static module map, which contains entries for all custom Teigha modules 
+  that are linked in statically to a Teigha client application.
+*/
+#define ODRX_BEGIN_STATIC_MODULE_MAP() \
+STATIC_MODULE_DESC g_ODRX_STATIC_MODULE_MAP[] = {
+
+/** \details
+  Defines the entry in the static module map, which contains entries for all custom Teigha modules 
+  that are linked in statically to a Teigha client application.
+
+  \param AppName [in]  Registered application name, that can be later passed to 
+              OdRxDynamicLinker::loadModule to load the static application.
+  \param ModuleClassName [in] Name of the C++ class derived from OdRxModule, that 
+                      implements support for this module.
+*/
+#define ODRX_DEFINE_STATIC_APPLICATION(AppName, ModuleClassName) \
+{ AppName, ODRX_STATIC_MODULE_ENTRY_POINT(ModuleClassName) },
+
+/** \details
+*/
+#define ODRX_DEFINE_STATIC_APPMODULE(moduleName, ModuleClassName) \
+ODRX_DEFINE_STATIC_APPLICATION(moduleName, ModuleClassName)
+
+/** \details
+  Defines the end of the static module map, which contains entries for all custom Teigha modules 
+  that are linked in statically to a Teigha client application.
+*/
+#define ODRX_END_STATIC_MODULE_MAP() \
+{ 0, 0 } };
+
+FIRSTDLL_EXPORT void odrxInitStaticModuleMap(STATIC_MODULE_DESC* pMap);
+
+#define ODRX_INIT_STATIC_MODULE_MAP() odrxInitStaticModuleMap(g_ODRX_STATIC_MODULE_MAP)
+
+#define ODRX_DEFINE_STATIC_MODULE(_UserModuleClass)\
+ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(_UserModuleClass)\
+{\
+  return OdRxStaticModule<_UserModuleClass >::createModule(szModuleName);\
+}
+
+/** \details
+  <group OdRx_Classes> 
+
+  This template class provides the implementation of pseudo static rx-modules in multi-threaded (MT) mode.
+
+  \remarks
+  For internal use only
+
+  \sa
+  OdRxModule, OdRefCounter classes
+*/
+template<class T, class TInterface = T>
+class OdRxPseudoStaticModule : public T
+{
+  ODRX_HEAP_OPERATORS();
+
+  OdRefCounter m_nLockCount;
+  OdString     m_sName;
+
+  OdRxPseudoStaticModule(const OdString& sName)
+    : m_nLockCount(0)
+    , m_sName(sName)
+  { }
+  void addRef() 
+  { 
+    ++m_nLockCount; 
+  }
+  void release() 
+  { 
+    ODA_ASSERT(m_nLockCount); 
+    --m_nLockCount; 
+    if (m_nLockCount == 0){
+      delete this;
+    }
+  }
+  long numRefs() const { return m_nLockCount; }
+public:
+  /** \details
+    Returns the system data for the existing pseudo static rx-module instance.
+
+    \remarks
+    The default implementation does nothing and returns a null pointer.
+  */
+  void* sysData() { return 0; }
+
+  /** \details
+    Creates a new pseudo static rx-module instance with the specified /module name/ and
+    returns a raw pointer to it.
+
+    \param name [in]  /Module name/ as non-empty string value.
+  */
+  static OdRxModule* createModule(const OdString& name)
+  {
+    return new OdRxPseudoStaticModule(name);
+  }
+
+  /** \details
+    Deletes this pseudo static rx-module object.
+  */
+  void deleteModule() { delete this; }
+
+  /** \details
+    Returns the /module name/ for the pseudo static rx-module instance.
+  */
+  OdString moduleName() const { return m_sName; }
+};
+
+// For internal use only
+#define ODRX_DEFINE_PSEUDO_STATIC_MODULE(_UserModuleClass)\
+  ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(_UserModuleClass)\
+{\
+  return OdRxPseudoStaticModule<_UserModuleClass >::createModule(szModuleName);\
+}
+
+#if defined(_TOOLKIT_IN_DLL_) && !defined(__MWERKS__) ////////////////////////////////////////////////////////////////////////////////
+
+//IR.111706. MacOS X dynamic library loading.
+#if defined(__GNUC__) && defined(__APPLE__) // GNU compiler MacOS X
+
+#define ODRX_STATIC_MODULE_PATH "{5CEAD1EF-4D33-48fe-99E4-E09176BCF088}/"
+
+#define ODRX_STATIC_APP_MODULE_NAME(AppName) (OdString(ODRX_STATIC_MODULE_PATH) + AppName + DEFAULT_MODULE_EXTENSION_DOT_W)
+
+void deleteModuleObject();
+
+/** \details
+  <group OdRx_Classes> 
+
+  This template class provides the implementation of Mac rx-modules in multi-threaded (MT) mode.
+
+  \sa
+  OdRxModule, OdRefCounter classes
+*/
+template<class T, class TInterface = T>
+class OdRxMacModule : public T
+{
+  OdRefCounter   m_nLockCount;
+  void          *m_hModule;
+  const OdString m_name;
+
+  OdRxMacModule(void *hModule, const OdString name)
+    : m_nLockCount(0)
+    , m_hModule(hModule)
+    , m_name(name)
+  {}
+  void addRef() 
+  { 
+    ++m_nLockCount; 
+  }
+  void release() 
+  { 
+    ODA_ASSERT(m_nLockCount); 
+    --m_nLockCount; 
+  }
+  long numRefs() const { return m_nLockCount; }
+  ODRX_HEAP_OPERATORS();
+public:
+  /** \details
+    Returns the system data for the existing Mac rx-module instance.
+  */
+  void* sysData() { return m_hModule; }
+
+  /** \details
+    Creates a new Mac rx-module instance with the specified /module name/ and
+    returns a raw pointer to it.
+
+    \param hModule [in]  Module handle.
+    \param name [in]  /Module name/ as non-empty string value.
+  */
+  static OdRxMacModule* createModule(void *hModule, const OdString name) 
+  { 
+    return new OdRxMacModule(hModule, name); 
+  }
+
+  /** \details
+    Deletes this Mac rx-module object.
+  */
+  void deleteModule()
+  {
+    deleteModuleObject();
+    delete this;
+  }
+
+  /** \details
+    Returns the /module name/ for the Mac rx-module instance.
+  */
+  OdString moduleName() const
+  {
+    return m_name;
+  }
+};
+
+/** \details
+  Creates the entry point function for a Teigha custom application.
+*/
+#define ODRX_DEFINE_DYNAMIC_MODULE(_UserModuleClass)\
+  static OdRxModule* g_pSingletonModule = 0;\
+  extern "C" { \
+  __attribute__ ((visibility("default"))) \
+  OdRxModule* odrxCreateModuleObject(void *hModule, OdChar *name)\
+{\
+  if(!g_pSingletonModule)\
+{\
+  g_pSingletonModule = OdRxMacModule<_UserModuleClass >::createModule(hModule, name);\
+  hModule = NULL;\
+}\
+  return g_pSingletonModule;\
+}\
+  void odrxGetAPIVersion(int& nMajorVersion, int& nMinorVersion,\
+  int& nMajorBuildVersion, int& nMinorBuildVersion)\
+{\
+  nMajorVersion       = TD_MAJOR_VERSION;\
+  nMinorVersion       = TD_MINOR_VERSION;\
+  nMajorBuildVersion  = TD_MAJOR_BUILD;\
+  nMinorBuildVersion  = TD_MINOR_BUILD;\
+}\
+}\
+  void deleteModuleObject()\
+{\
+  g_pSingletonModule = NULL;\
+}
+
+#elif defined(__GNUC__)
+
+#define ODRX_STATIC_MODULE_PATH "{5CEAD1EF-4D33-48fe-99E4-E09176BCF088}/"
+
+#define ODRX_STATIC_APP_MODULE_NAME(AppName) (OdString(ODRX_STATIC_MODULE_PATH) + AppName + DEFAULT_MODULE_EXTENSION_DOT_W)
+
+void deleteModuleObject();
+
+/** \details
+  <group OdRx_Classes> 
+
+  This template class provides the implementation of Unix rx-modules in multi-threaded (MT) mode.
+
+  \sa
+  OdRxModule, OdRefCounter classes
+*/
+template<class T, class TInterface = T>
+class OdRxUnixModule : public T
+{
+  OdRefCounter   m_nLockCount;
+  void          *m_hModule;
+  const OdString m_name;
+protected:
+  OdRxUnixModule(void *hModule, const OdString name)
+    : m_nLockCount(0)
+    , m_hModule(hModule)
+    , m_name(name)
+  {}
+private:
+  void addRef() 
+  { 
+    ++m_nLockCount; 
+  }
+  void release() 
+  { 
+    ODA_ASSERT(m_nLockCount); 
+    --m_nLockCount; 
+  }
+  long numRefs() const { return m_nLockCount; }
+  ODRX_HEAP_OPERATORS();
+public:
+  /** \details
+    Returns the system data for the existing Unix rx-module instance.
+  */
+  void* sysData() { return m_hModule; }
+  
+  /** \details
+    Creates a new Unix rx-module instance with the specified /module name/ and 
+    returns a raw pointer to it.
+
+    \param hModule [in]  Module handle.
+    \param name [in]  /Module name/ as non-empty string value.
+  */
+  static OdRxUnixModule* createModule(void *hModule, const OdString name) 
+  { 
+    return new OdRxUnixModule(hModule, name); 
+  }
+
+  /** \details
+    Deletes this Unix rx-module object.
+  */
+  void deleteModule()
+  {
+    deleteModuleObject();
+    delete this;
+  }
+
+  /** \details
+    Returns the /module name/ for the Unix rx-module instance.
+  */
+  OdString moduleName() const
+  {
+    return m_name;
+  }
+};
+
+/** \details
+  Creates the entry point function for a Teigha custom application.
+*/
+
+#define ODRX_DEFINE_DYNAMIC_MODULE(_UserModuleClass)\
+  static OdRxModule* g_pSingletonModule = 0;\
+\
+class OdRxUnixModule##_UserModuleClass : public OdRxUnixModule<_UserModuleClass>\
+{\
+  ODRX_HEAP_OPERATORS();\
+  OdRxUnixModule##_UserModuleClass(void *hModule, const OdString name)\
+    : OdRxUnixModule<_UserModuleClass>(hModule, name)\
+  {\
+  }\
+public:\
+  static _UserModuleClass* createModule(void *hModule, const OdString name) \
+  { \
+    return new OdRxUnixModule##_UserModuleClass(hModule, name);\
+  }\
+\
+  virtual void deleteModule()\
+  {\
+    g_pSingletonModule = 0;\
+    delete this;\
+  }\
+};\
+\
+  extern "C" { \
+  __attribute__ ((visibility("default"))) \
+  OdRxModule* odrxCreateModuleObject(void *hModule, OdChar *name)\
+{\
+  if(!g_pSingletonModule)\
+{\
+  g_pSingletonModule = OdRxUnixModule##_UserModuleClass::createModule(hModule, name);\
+  hModule = NULL;\
+}\
+  return g_pSingletonModule;\
+}\
+  __attribute__ ((visibility("default"))) \
+  void odrxGetAPIVersion(int& nMajorVersion, int& nMinorVersion,\
+  int& nMajorBuildVersion, int& nMinorBuildVersion)\
+{\
+  nMajorVersion       = TD_MAJOR_VERSION;\
+  nMinorVersion       = TD_MINOR_VERSION;\
+  nMajorBuildVersion  = TD_MAJOR_BUILD;\
+  nMinorBuildVersion  = TD_MINOR_BUILD;\
+}\
+}\
+  void deleteModuleObject()\
+{\
+  g_pSingletonModule = NULL;\
+}\
+
+#else //defined(__GNUC__)
+
+#define ODRX_STATIC_MODULE_PATH "{5CEAD1EF-4D33-48fe-99E4-E09176BCF088}/"
+
+#define ODRX_STATIC_APP_MODULE_NAME(AppName) (OdString(ODRX_STATIC_MODULE_PATH) + AppName + DEFAULT_MODULE_EXTENSION_DOT_W)
+
+#ifdef __BORLANDC__
+
+
+/** \details
+  <group OdRx_Classes> 
+
+  This template class provides the implementation of Win32 rx-modules in multi-threaded (MT) mode.
+
+  \sa
+  OdRxModule, OdRefCounter classes
+*/
+template<class T, class TInterface = T>
+class OdRxWin32Module : public T
+{
+  OdRefCounter   m_nLockCount;
+  HMODULE        m_hModule;
+  const OdString m_sModuleName;
+  OdRxWin32Module() : m_nLockCount(0) { }
+  void addRef()
+  {
+	++m_nLockCount;
+  }
+  void release()
+  {
+	ODA_ASSERT(m_nLockCount);
+	--m_nLockCount;
+  }
+  long numRefs() const { return m_nLockCount; }
+  OdRxWin32Module(HMODULE hModule , const OdString name )
+	: m_nLockCount(0)
+	, m_hModule(hModule)
+	, m_sModuleName(name)
+  {}
+  ODRX_HEAP_OPERATORS();
+public:
+  /** \details
+    Returns the system data for the existing Win32 rx-module instance.
+  */
+  void* sysData() { return reinterpret_cast<void*>(m_hModule); }
+
+  /** \details
+    Creates a new Win32 rx-module instance with the specified /module name/ and 
+    returns a raw pointer to it.
+
+    \param hModule [in]  Module handle.
+    \param name [in]  /Module name/ as non-empty string value.
+  */
+  static OdRxWin32Module* createModule(HMODULE hModule, const OdString name ) { return new OdRxWin32Module(hModule,name); }
+
+  /** \details
+    Deletes this Win32 rx-module object.
+  */
+  void deleteModule()
+  {
+     g_pSingletonModule = 0;
+     delete this;
+  }
+
+  /** \details
+    Returns the /module name/ for the Win32 rx-module instance.
+  */
+  OdString moduleName() const
+  {
+     return m_sModuleName;
+  }
+};
+
+/** \details
+  Creates the entry point function for a Teigha custom application.
+*/
+#define ODRX_DEFINE_DYNAMIC_MODULE(_UserModuleClass)\
+static OdRxModule* g_pSingletonModule = 0;\
+  extern "C" {\
+__declspec(dllexport) OdRxModule* odrxCreateModuleObject(HMODULE& hModule, const OdChar *name)\
+{\
+  if(!g_pSingletonModule)\
+  {\
+    g_pSingletonModule = OdRxWin32Module<_UserModuleClass >::createModule(hModule, name);\
+    hModule = 0;\
+  }\
+  return g_pSingletonModule;\
+}\
+__declspec(dllexport) void odrxGetAPIVersion(int& nMajorVersion, int& nMinorVersion,\
+                                             int& nMajorBuildVersion, int& nMinorBuildVersion)\
+{\
+  nMajorVersion       = TD_MAJOR_VERSION;\
+  nMinorVersion       = TD_MINOR_VERSION;\
+  nMajorBuildVersion  = TD_MAJOR_BUILD;\
+  nMinorBuildVersion  = TD_MINOR_BUILD;\
+}\
+}\
+
+#else //__BORLANDC__
+
+/** \details
+  <group OdRx_Classes> 
+
+  This template class provides the implementation of Win32 rx-modules in multi-threaded (MT) mode.
+
+  \sa
+  OdRxModule, OdRefCounter classes
+*/
+template<class T, class TInterface = T>
+class OdRxWin32Module : public T
+{
+  OdRefCounter m_nLockCount;
+  HMODULE      m_hModule;
+  OdRxWin32Module() : m_nLockCount(0) { }
+  void addRef()
+  {
+	++m_nLockCount;
+  }
+  void release()
+  {
+	ODA_ASSERT(m_nLockCount);
+	--m_nLockCount;
+  }
+  long numRefs() const { return m_nLockCount; }
+  OdRxWin32Module(HMODULE hModule )
+	: m_nLockCount(0)
+	, m_hModule(hModule)
+  {}
+  ODRX_HEAP_OPERATORS();
+public:
+  /** \details
+    Returns the system data for the existing Win32 rx-module instance.
+  */
+  void* sysData() { return reinterpret_cast<void*>(m_hModule); }
+
+  /** \details
+    Creates a new Win32 rx-module instance with the specified /module name/ and 
+    returns a raw pointer to it.
+
+    \param hModule [in]  Module handle.
+    \param name [in]  /Module name/ as non-empty string value.
+  */
+  static OdRxWin32Module* createModule(HMODULE hModule) { return new OdRxWin32Module(hModule); }
+
+  /** \details
+    Deletes this Win32 rx-module object.
+  */
+  void deleteModule()
+  {
+     g_pSingletonModule = 0;
+     delete this;
+  }
+
+  /** \details
+    Returns the /module name/ for the Win32 rx-module instance.
+  */
+  OdString moduleName() const
+  {
+     wchar_t buffer[_MAX_PATH];
+     ::GetModuleFileNameW(m_hModule, buffer, _MAX_PATH );
+     return buffer;
+  }
+};
+
+
+/** \details
+  Creates the entry point function for a Teigha custom application.
+*/
+#define ODRX_DEFINE_DYNAMIC_MODULE(_UserModuleClass)\
+static OdRxModule* g_pSingletonModule = 0;\
+  extern "C" {\
+__declspec(dllexport) OdRxModule* odrxCreateModuleObject(HMODULE& hModule)\
+{\
+  if(!g_pSingletonModule)\
+  {\
+    g_pSingletonModule = OdRxWin32Module<_UserModuleClass >::createModule(hModule);\
+    hModule = 0;\
+  }\
+  return g_pSingletonModule;\
+}\
+__declspec(dllexport) void odrxGetAPIVersion(int& nMajorVersion, int& nMinorVersion,\
+                                             int& nMajorBuildVersion, int& nMinorBuildVersion)\
+{\
+  nMajorVersion       = TD_MAJOR_VERSION;\
+  nMinorVersion       = TD_MINOR_VERSION;\
+  nMajorBuildVersion  = TD_MAJOR_BUILD;\
+  nMinorBuildVersion  = TD_MINOR_BUILD;\
+}\
+}\
+
+#endif //__BORLANDC__
+
+
+
+#endif //defined(__GNUC__) && defined(__APPLE__)
+
+#else //#ifdef _TOOLKIT_IN_DLL_ ////////////////////////////////////////////////////////////////////////////////
+
+#define ODRX_STATIC_MODULE_PATH ""
+
+#define ODRX_STATIC_APP_MODULE_NAME(AppName) AppName
+
+#define ODRX_DEFINE_DYNAMIC_MODULE(_UserModuleClass) ODRX_DEFINE_STATIC_MODULE(_UserModuleClass)
+
+
+#endif //#ifdef _TOOLKIT_IN_DLL_ ////////////////////////////////////////////////////////////////////////////////
+
+
+
+#if defined(_TOOLKIT_IN_DLL_) && defined(_MSC_VER)
+
+/** \details
+  Speeds up DLL loading on Windows. Refer to Win SDK documentation on DllMain() for more details.
+*/
+#define DISABLE_THREAD_LIBRARY_CALLS()\
+extern "C" int APIENTRY DllMain(HINSTANCE h, DWORD reason, LPVOID ) {\
+  if(reason==DLL_PROCESS_ATTACH)\
+    DisableThreadLibraryCalls((HMODULE)h);\
+  return TRUE;\
+}
+
+#else
+
+#define DISABLE_THREAD_LIBRARY_CALLS()
+
+#endif //#if defined(_TOOLKIT_IN_DLL_) && defined(_MSC_VER)
+
+
+#include "TD_PackPop.h"
+
+#endif // _OD_RXDYNAMICMODULE_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxEvent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxEvent.h
new file mode 100755
index 0000000..f6b370f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxEvent.h
@@ -0,0 +1,628 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef   _ODRX_EVENT_H__
+#define   _ODRX_EVENT_H__
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+
+#define ODRX_EVENT_OBJ OD_T("OdRxEvent")
+
+class OdDbDatabase;
+class OdGeMatrix3d;
+class OdDbIdMapping;
+class OdGePoint3d;
+class OdDbObjectId;
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdRxEvent (application level) events.
+    
+    \note
+    The default implementations of all methods in this class do nothing but return.
+
+    \sa
+    TD_Db
+  
+    <group OdRx_Classes> 
+*/
+class TOOLKIT_EXPORT OdRxEventReactor : public OdRxObject 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdRxEventReactor);
+  
+  /** \details
+    Notification function called whenever a .dwg file is being read.
+    
+    \param pDb [in]  Pointer to the database being created.
+    \param filename [in]  Name of the .dwg file.
+    
+    \remarks
+    This function is called during the operation.
+    
+    \sa
+    * databaseConstructed
+    * initialDwgFileOpenComplete
+  */
+  virtual void dwgFileOpened(
+    OdDbDatabase* pDb, 
+    const OdString& filename);
+    
+  /** \details
+    Notification function called whenever a .dwg file has been read.
+    
+    \param pDb [in]  Pointer to the database being created.
+    
+    \remarks
+    This function is called after the read operation, but before the database is constructed.
+    
+    \sa
+    * databaseConstructed
+    * dwgFileOpened
+  */
+  virtual void initialDwgFileOpenComplete(
+    OdDbDatabase* pDb);
+    
+  /** \details
+    Notification function called whenever a database has been constructed from a file.
+    
+    \param pDb [in]  Pointer to the database constructed.
+    
+    \remarks
+    This function is called after the operation.
+    
+    \sa
+    * dwgFileOpened
+    * initialDwgFileOpenComplete
+  */
+  virtual void databaseConstructed(
+    OdDbDatabase* pDb);
+
+  /** \details
+    Notification function called whenever a database is about to be deleted from memory.  
+
+    \param pDb [in]  Pointer to the database to be destroyed.
+    
+    \remarks
+    This function is called before the operation.
+  */
+  virtual void databaseToBeDestroyed(
+    OdDbDatabase* pDb);
+  
+  /** \details
+    Notification function called whenever a database is about to be saved to a .dwg file.
+    
+    \param pDb [in]  Pointer to the database to be saved.
+    \param intendedName [in]  Intended name of the .dwg file.
+    
+    \remarks
+    This function is called before the operation, and before the user 
+    has had a chance to modify the filename. The file may not have the intendedName.
+    
+    \sa
+    * abortSave
+    * saveComplete
+  */
+  virtual void beginSave(
+    OdDbDatabase* pDb, 
+    const OdString& intendedName);
+
+  /** \details
+    Notification function called whenever a database has been saved 
+    to a .dwg file.
+    
+    \param pDb [in]  Pointer to the database saved.
+    \param actualName [in]  Actual name of the .dwg file.
+    
+    \remarks
+    This function is called after the operation, but before the database is constructed.
+    
+    \sa
+    * abortSave
+    * beginSave
+  */
+  virtual void saveComplete(
+    OdDbDatabase* pDb, 
+    const OdString& actualName);
+    
+  /** \details
+    Notification function called whenever the save of a database has failed.
+    
+    \param pDb [in]  Pointer to the database being saved.
+    
+    \remarks
+    This function is called after the operation.
+
+    \sa
+    * beginSave
+    * saveComplete
+  */
+  virtual void abortSave(
+    OdDbDatabase* pDb);
+  
+  // DXF In/Out Events.
+
+  /** \details
+    Notification function called whenever a database is about to be modified by a DXF input operation.
+    
+    \param pDb [in]  Pointer to the database to be modified.
+    
+    \remarks
+    This function is called before the operation.
+    
+    \sa
+    * abortDxfIn
+    * dxfInComplete
+  */
+  virtual void beginDxfIn(
+    OdDbDatabase* pDb);
+    
+  /** \details
+    Notification function called whenever the DXF input to a database has failed.
+    
+    \param pDb [in]  Pointer to the database being modified.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * beginDxfIn
+    * dxfInComplete
+  */
+  virtual void abortDxfIn(
+    OdDbDatabase* pDb);
+ 
+  /** \details
+    Notification function called whenever a database has been modified by a DXF input operation.
+    
+    \param pDb [in]  Pointer to the database modified.
+    
+    \remarks
+    This function is called after the operation.
+    
+    \sa
+    * abortDxfIn
+    * beginDxfIn
+  */
+   virtual void dxfInComplete(
+    OdDbDatabase* pDb);
+
+
+  /** \details
+    Notification function called whenever a database is about to be saved to a DXF file.
+    
+    \param pDb [in]  Pointer to the database to be saved.
+    
+    \remarks
+    This function is called before the operation
+    
+    \sa
+    * abortDxfOut
+    * dxfOutComplete
+  */
+  virtual void beginDxfOut(
+    OdDbDatabase* pDb);
+    
+    
+  /** \details
+    Notification function called whenever the DXF output from a database has failed.
+    
+    \param pDb [in]  Pointer to the database being saved.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    beginDxfOut
+    dxfOutComplete
+  */
+  virtual void abortDxfOut(
+    OdDbDatabase* pDb);
+    
+    
+  /** \details
+    Notification function called whenever a database has be saved to a DXF file.
+       
+    \param pDb [in]  Pointer to the database saved.
+    
+    \remarks
+    This function is called after the operation.
+    
+    \sa
+    * abortDxfOut
+    * beginDxfOut
+  */
+  virtual void dxfOutComplete(
+    OdDbDatabase* pDb);
+  
+  // Insert Events.
+  
+  /** \details
+    Notification function called whenever one database is about to be inserted into another.
+    
+    \param pToDb [in]  Destination database.
+    \param pFromDb [in]  Source database.
+    \param blockName [in]  Name of the block.
+    \param xfm [in]  Transformation matrix.
+    
+    \remarks
+    This function is called before the operation.
+    
+    \remarks
+    If blockName is specified, pFromDb was inserted into pToDb as a OdDbBlockTableRecord.
+    
+    If xfm is specified, pFromDb was inserted into pToDb as entities.
+    
+    \sa
+    * abortInsert
+    * endInsert
+    * otherInsert
+  */
+  virtual void beginInsert(
+    OdDbDatabase* pToDb, 
+    const OdString& blockName, 
+    OdDbDatabase* pFromDb);
+  virtual void beginInsert(
+    OdDbDatabase* pToDb, 
+    const OdGeMatrix3d& xfm, 
+    OdDbDatabase* pFromDb);
+    
+  /** \details
+    Notification function called whenever one database has been inserted into another.
+    
+    \param pToDb [in]  Destination database.
+    \param pFromDb [in]  Source database.
+    \param idMap [in]  ID Map source -> destination.
+    
+    \remarks
+    This function is called after the operation, and is sent just before 
+    beginDeepCloneXlation. It is called before any Object IDs are translated.
+    
+    \note
+    Object IDs of cloned objects do not point at the cloned objects, and
+    must therefore not not be used at this point for any operations on
+    those objects.
+    
+    \sa
+    * abortInsert
+    * beginInsert
+    * endInsert
+  */
+  virtual void otherInsert(
+    OdDbDatabase* pToDb, 
+    OdDbIdMapping& idMap, 
+    OdDbDatabase* pFromDb);
+    
+  /** \details
+    Notification function called whenever the insertion of a database has failed.
+    
+    \param pToDb [in]  Destination database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * beginInsert
+    * endInsert
+    * otherInsert
+  */
+  virtual void abortInsert(
+    OdDbDatabase* pToDb);
+    
+  /** \details
+    Notification function called whenever the insertion of a database has succeeded.
+    
+    \param pToDb [in]  Destination database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * abortInsert
+    * beginInsert
+    * otherInsert
+  */
+  virtual void endInsert(
+    OdDbDatabase* pToDb);
+  
+  // Wblock Events.
+
+  /** \details
+    Notification function called while one database is about to be wblocked to another.
+    
+    \param pFromDb [in]  Source database.
+  */
+  virtual void wblockNotice(
+    OdDbDatabase* pFromDb);
+  
+  /** \details
+    Notification function called while one database is being wblocked to another.
+    
+    \param pToDb [in]  Destination database.
+    \param pFromDb [in]  Source database.
+    \param insertionPoint [in]  INSBASE of pToDb.
+    \param blockId [in]  Object ID of OdDbBlockTableRecord being wblocked.
+    
+    \remarks
+    This function is called during the operation.
+    
+    If insertionPoint is specified, the wblock operation is being performed on a set
+    of entities in pFromDb.
+    
+    If blockId is specified, the wblock operation is being performed on a 
+    BlockTableRecord in pFromDb.
+    
+    If neither insertionPoint nor blockId is specified, the entire pFromDb database is
+    wblocked to pToDb.  
+    
+    \sa
+    * abortWblock
+    * beginWblockObjects
+    * endWblock
+    * otherWblock
+    * wblockNotice
+  */
+  virtual void beginWblock(
+    OdDbDatabase* pToDb, 
+    OdDbDatabase* pFromDb, 
+    const OdGePoint3d& insertionPoint);
+  virtual void beginWblock(
+    OdDbDatabase* pToDb, 
+    OdDbDatabase* pFromDb, 
+    OdDbObjectId blockId);
+  virtual void beginWblock(
+    OdDbDatabase* pToDb, 
+    OdDbDatabase* pFromDb);
+
+     
+  /** \details
+    Notification function called whenever one database is being wblocked to another.
+    
+    \param pToDb [in]  Destination database.
+    \param pFromDb [in]  Source database.
+    \param idMap [in]  ID Map source -> destination.
+    
+    \remarks
+    idMap contains mapping of the original objects in pFromDb to the objects created in pToDb.
+
+    This function is called after the operation, and is sent just before 
+    beginDeepCloneXlation.
+    
+    \sa
+    * abortWblock
+    * beginWblock
+    * beginWblockObjects
+    * endWblock
+    * wblockNotice
+  */
+  virtual void otherWblock(
+    OdDbDatabase* pToDb, 
+    OdDbIdMapping& idMap, 
+    OdDbDatabase* pFromDb);
+    
+  /** \details
+    Notification function called whenever the wblock of a database has failed.
+    
+    \param pToDb [in]  Destination database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    beginWblock
+    beginWblockObjects
+    endWblock
+    otherWblock
+    wblockNotice
+  */
+  virtual void abortWblock(
+    OdDbDatabase* pToDb);
+    
+  /** \details
+    Notification function called whenever the wblock of a database has succeded.
+    
+    \param pToDb [in]  Destination database.
+    
+    \remarks
+    This function is called after the operation.
+        
+    \sa
+    * abortWblock
+    * beginWblock
+    * beginWblockObjects
+    * otherWblock
+    * wblockNotice
+  */
+  virtual void endWblock(
+    OdDbDatabase* pToDb);
+    
+  /** \details
+    Notification function called whenever one database is being wblocked to another.
+    
+    \param pFromDb [in]  Source database.
+    \param idMap [in]  ID Map source -> destination.
+    
+    \remarks
+    idMap contains mapping of the original objects in pFromDb to the objects created in pToDb.
+
+    This notification function gives wblockCloneObjects a method
+    of being notified before each pFrom database before the actual cloning begins.
+    
+    \sa
+    * abortWblock
+    * beginWblock
+    * endWblock
+    * otherWblock
+    * wblockNotice
+  */
+  virtual void beginWblockObjects(
+    OdDbDatabase* pFromDb, 
+    OdDbIdMapping& idMap);
+  
+  // Deep Clone Events.
+  
+  /** \details
+    Notification function called whenever a subDeepClone operation is about to be started on a database.
+    
+    \param pToDb [in]  Destination database.
+    \param idMap [in]  ID Map source -> destination.
+    
+    \remarks
+    idMap will always be empty.
+
+    \sa
+    * abortDeepClone
+    * beginDeepCloneXlation
+    * endDeepClone
+  */
+  virtual void beginDeepClone(
+    OdDbDatabase* pToDb, 
+    OdDbIdMapping& idMap);
+
+  /** \details
+    Notification function called whenever a the translation stage of a subDeepClone 
+    operation is about to be started on a database.
+    
+    \param idMap [in]  ID Map source -> destination.
+    
+    \remarks
+    This function is called after all objects, and their owned objects, have been cloned.
+    It is called before any Object IDs are translated 
+    
+    \note
+    Object IDs of cloned objects do not point at the cloned objects, and
+    must therefore not not be used at this point for any operations on
+    those objects.
+    
+    \sa
+    * abortDeepClone
+    * beginDeepClone
+    * endDeepClone
+  */
+  virtual void beginDeepCloneXlation(
+    OdDbIdMapping& idMap);
+
+  /** \details
+    Notification function called whenever a subDeepClone operation has failed.
+    
+    \param idMap [in]  ID Map source -> destination.
+    
+    \remarks
+    This function is called after the operation.
+   
+    \note
+    The objects involved in the subDeepClone operation are in an indeterminate state 
+    and must be cleaned up.
+   
+    \sa
+    * beginDeepClone
+    * beginDeepCloneXlation
+    * endDeepClone
+  */
+  virtual void abortDeepClone(
+    OdDbIdMapping& idMap);
+
+  /** \details
+    Notification function called whenever a subDeepClone operation has succeeded.
+    
+    \param idMap [in]  ID Map source -> destination.
+    
+    \remarks
+    This function is called after the operation.
+   
+    \sa
+    * abortDeepClone
+    * beginDeepClone
+    * beginDeepCloneXlation
+  */
+  virtual void endDeepClone(
+    OdDbIdMapping& idMap);
+  
+  // Partial Open Events.
+  
+  /** \details
+    Notification function called before an attempt is made to partially open an OdDbDatabase.
+
+    \param pDb [in]  Pointer to the database.
+    
+    \remarks
+    To 
+    veto the partial open, an application should override partialOpenNotice, and from it call
+    
+                pDb->disablePartialOpen()
+    
+  */
+  virtual void partialOpenNotice(
+    OdDbDatabase* pDb);
+  
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdRxEventReactor object pointers.
+*/
+typedef OdSmartPtr<OdRxEventReactor> OdRxEventReactorPtr;
+
+/** \details
+    This class manages OdRxEventReactor instances.
+    
+    \sa
+    TD_Db
+    <group OdRx_Classes> 
+*/
+class TOOLKIT_EXPORT OdRxEvent : public OdRxObject 
+{ 
+public:
+  ODRX_DECLARE_MEMBERS(OdRxEvent);
+  
+  /** \details
+    Adds the specified event reactor to the host application's event reactor list.
+    \param pReactor [in]  Pointer to the event reactor.
+  */
+  virtual void addReactor(
+    OdRxEventReactor* pReactor) = 0;
+
+  /** \details
+    Removes the specified event reactor from the host application's event reactor list.
+    \param pReactor [in]  Pointer to the event reactor.
+  */
+  virtual void removeReactor(
+    OdRxEventReactor* pReactor) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdRxEvent object pointers.
+*/
+typedef OdSmartPtr<OdRxEvent> OdRxEventPtr;
+
+
+TOOLKIT_EXPORT OdRxEventPtr odrxEvent();
+
+#include "TD_PackPop.h"
+
+#endif //_ODRX_EVENT_H__
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxInit.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxInit.h
new file mode 100755
index 0000000..80da658
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxInit.h
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _RxInit_h_Included_
+#define _RxInit_h_Included_
+
+class OdRxSystemServices;
+
+
+FIRSTDLL_EXPORT bool odrxInitialize(OdRxSystemServices* pSysSvcs);
+
+FIRSTDLL_EXPORT void odrxUninitialize();
+
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxIterator.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxIterator.h
new file mode 100755
index 0000000..bcc316e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxIterator.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODRXITERATOR_H_
+#define _ODRXITERATOR_H_
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  <group OdRx_Classes> 
+
+  This class is the abstract base class for OdDbDictionaryIterator and OdRxDictionaryIterator objects.
+
+  \sa
+  TD_Db
+  
+   \sa
+   <link iterator_overview.html, Overview of Classes that Implement an Iterator>
+*/
+class FIRSTDLL_EXPORT OdRxIterator : public OdRxObject
+{
+public:
+
+  OdRxIterator() {}
+
+  ODRX_DECLARE_MEMBERS(OdRxIterator);
+  
+  /** \details
+    Returns true if and only if the traversal by this /iterator object/ is completed.
+  */
+    virtual bool done() const = 0;
+
+  /** \details
+    Sets the /iterator object/ to the next element of the container.
+
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+  virtual bool next() = 0;
+
+  /** \details
+    Returns the /non-typified smart pointer/ to the object on which the /iterator object/ refers. 
+  */
+  virtual OdRxObjectPtr object() const = 0;
+};
+
+/** \details
+  The typified smart pointer for the OdRxIterator object.
+*/
+typedef OdSmartPtr<OdRxIterator> OdRxIteratorPtr;
+
+#include "TD_PackPop.h"
+
+#endif // _ODRXITERATOR_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModule.h
new file mode 100755
index 0000000..7a7cb08
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModule.h
@@ -0,0 +1,113 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_RXMODULE_H_
+#define _OD_RXMODULE_H_
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+  <group OdRx_Classes>
+
+  This class provides the base implementation of custom Teigha applications (TX modules).
+
+  Library: TD_Db
+
+  \sa
+  <link CustomApplications.html, Creating Custom Applications>
+
+  OdRxStaticModule, OdRxPseudoStaticModule, OdRxMacModule, OdRxUnixModule, OdRxWin32Module classes
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRxModule : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxModule);
+
+  /** \details
+    Declares the method returning the system data for the rx-module instance.
+
+    \remarks
+    It is the pure virtual method that does not have an implementation. You must redefine it in the derived class.
+  */
+  virtual void* sysData() = 0;
+
+  /** \details
+    Declares the method deleting (unloading) the rx-module.
+
+    \remarks
+    It is the pure virtual method that does not have an implementation. You must redefine it in the derived class.
+  */
+  virtual void deleteModule() = 0;
+
+  /** \details
+    Declares the notification method being called at the start of the client application.
+      
+    \remarks
+    It is the pure virtual method that does not have an implementation. You must redefine it in the 
+    derived class. Overrides of this module should register any custom objects or commands defined
+    in the module.
+
+    \sa
+    <link CustomApplications.html, Creating Custom Applications>
+  */
+  virtual void initApp() = 0;
+
+  /** \details
+    Declares the notification method being called at the end of the client application.
+
+    \remarks
+    It is the pure virtual method that does not have an implementation. You must redefine it in the 
+    derived class. Overrides of this module should unregister any custom objects or commands defined
+    in the module.
+
+    \sa
+    <link CustomApplications.html, Creating Custom Applications>
+  */
+  virtual void uninitApp() = 0;
+
+  /** \details
+    Declares the method returning the /module name/ for the rx-module instance.
+
+    \remarks
+    It is the pure virtual method that does not have an implementation. You must redefine it in the derived class.
+  */
+  virtual OdString moduleName() const = 0;
+};
+
+/** \details
+  The typified smart pointer for the rx-module object (TX module). This  
+  template class is specialization of the OdSmartPtr class for the OdRxModule class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdRxModule> OdRxModulePtr;
+
+
+#include "TD_PackPop.h"
+
+#endif // _OD_RXMODULE_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleDefs.h
new file mode 100755
index 0000000..39e2bdf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleDefs.h
@@ -0,0 +1,44 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_RXMODULEDEFS_H_
+#define _OD_RXMODULEDEFS_H_
+
+#ifdef _TOOLKIT_IN_DLL_ ///////////////////////////////////////////////////////
+
+#define ODRX_DECLARE_MODULE() \
+  virtual void* moduleHandle() = 0;\
+  virtual void setModuleHandle(void* handle) = 0;\
+  virtual void onFinalRelease() {}\
+  virtual OdString moduleFileName() const = 0;
+
+#else //#ifdef _TOOLKIT_IN_DLL_ ///////////////////////////////////////////////
+
+#define ODRX_DECLARE_MODULE() \
+  virtual void onFinalRelease() {}
+
+#endif //#ifdef _TOOLKIT_IN_DLL_ //////////////////////////////////////////////
+
+#endif // _OD_RXMODULEDEFS_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleSoftReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleSoftReference.h
new file mode 100755
index 0000000..ea1fd3c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxModuleSoftReference.h
@@ -0,0 +1,102 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODRXMODULESOFTREFERENCE_H_
+#define _ODRXMODULESOFTREFERENCE_H_
+
+#include "DynamicLinker.h"
+#include "RxDLinkerReactor.h"
+#include "StaticRxObject.h"
+
+#include "TD_PackPush.h"
+
+
+/** \details
+  <group OdRx_Classes>
+
+  This template class represents client's atomic portion of code to execute via asynchronous call.
+
+  Library: TD_Db
+
+  \sa
+  OdRxModule, OdRxDLinkerReactor classes
+*/
+template <class TModule = OdRxModule>
+class OdRxModuleSoftReference : protected OdStaticRxObject<OdRxDLinkerReactor> {
+  TModule* m_pModule;
+protected:
+  /*!DOM*/
+  void rxAppWillBeUnloaded( OdRxModule* pModule ) {
+    if( pModule==m_pModule ) {
+      clear();
+    }
+  }
+public:
+  /** \details
+    Builds an instance of this object.
+  */
+  OdRxModuleSoftReference() : m_pModule(0) {}
+
+  /** \details
+    Destroy an instance of this object.
+  */
+  ~OdRxModuleSoftReference() { clear(); }
+
+  /** \details
+    Returns a smart pointer to the rx-module instance with the specified name.
+
+    \param appName [in]  Name as a non-empty string value.
+  */
+  OdSmartPtr<TModule> getModule( const OdString& appName ) {
+    OdSmartPtr<TModule> pRes = m_pModule;
+    if( pRes.isNull() ) {
+      pRes = ::odrxDynamicLinker()->loadApp( appName );
+      ::odrxDynamicLinker()->addReactor( this );
+      m_pModule = pRes.get();
+    }
+    return pRes;
+  }
+
+  /** \details
+    Returns a raw pointer to the rx-module instance.
+  */
+  TModule* getRef() {
+    return m_pModule;
+  }
+
+  /** \details
+    Unload this module.
+  */
+  void clear() {
+    if( m_pModule ) {
+      m_pModule = 0;
+      ::odrxDynamicLinker()->removeReactor( this );
+    }
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODRXMODULESOFTREFERENCE_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxMultiCast.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxMultiCast.h
new file mode 100755
index 0000000..0cc86e8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxMultiCast.h
@@ -0,0 +1,358 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODRXMULTICAST_H_
+#define _ODRXMULTICAST_H_
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+
+/** details 
+  Provides ability to cast RxObject into set of classes as one step.
+
+   - Basic (investigate entire classes structure and set all pointers)
+   odrxMultiCast - Check all classes include protocol extensions
+   odrxMultiCastObject - Check all classes without protocol extensions check
+   odrxMultiCastX - Check all protocol extensions only
+   - Single shot (investigate classes structure until any first doesn't found and stop check)
+   odrxMultiCastFwd - scan forward (from OdRxObject class) with protocol extensions with second priority
+   odrxMultiCastFwdXPrior - scan forward (from OdRxObject class) with protocol extensions with first priority
+   odrxMultiCastFwdObject - scan forward (from OdRxObject class) without protocol extensions check
+   odrxMultiCastFwdX - scan forward (from OdRxObject class) protocol extensions only
+   odrxMultiCastBk - scan backward (from last inherited class) with protocol extensions with second priority
+   odrxMultiCastBkXPrior - scan backward (from last inherited class) with protocol extensions with first priority
+   odrxMultiCastBkObject - scan backward (from last inherited class) without protocol extensions check
+   odrxMultiCastBkX - scan backward (from last inherited class) protocol extensions only
+
+   \param pObject [in] - object for which check will be processed
+   \param pPointers [out] - array of pointers which will be set to found classes (use static_cast or c-style cast to convert pointers)
+   \param pClasses [in] - array of classes into which object cast must be processed
+   \param nClasses [in] - count of classes in pClasses and pointer in pPointers arrays
+*/
+
+inline // Returns count of available casts, pPointers must be non-zero
+OdUInt32 odrxMultiCast(const OdRxObject *pObject, OdRxObjectPtr *pPointers, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  OdUInt32 nCasts = 0;
+  if (!pObject || !pPointers || !pClasses || !nClasses)
+    return nCasts;
+  OdRxClass *pClass = pObject->isA();
+  while (pClass)
+  {
+    for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+    {
+      if (pPointers[nClass].isNull())
+      {
+        if (pClass == pClasses[nClass])
+        {
+          pPointers[nClass] = pObject;
+          nCasts++;
+          if (nCasts == nClasses)
+            return nCasts;
+        }
+        else
+        {
+          pPointers[nClass] = pClass->getX(pClasses[nClass]);
+          if (!pPointers[nClass].isNull())
+          {
+            nCasts++;
+            if (nCasts == nClasses)
+              return nCasts;
+          }
+        }
+      }
+    }
+    pClass = pClass->myParent();
+  }
+  return nCasts;
+}
+
+inline // If pCasts null returns bit mask, elsewhere count of casts
+OdUInt32 odrxMultiCastObject(const OdRxObject *pObject, bool *pCasts, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  OdUInt32 nCasts = 0, nBits = 0;
+  if (!pObject || !pClasses || !nClasses)
+    return nCasts;
+  OdRxClass *pClass = pObject->isA();
+  while (pClass)
+  {
+    for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+    {
+      if ((pCasts) ? !pCasts[nClass] : ((nBits & (1 << nClass)) == 0))
+      {
+        if (pClass == pClasses[nClass])
+        {
+          if (pCasts)
+            pCasts[nClass] = true;
+          else
+            nBits |= 1 << nClass;
+          nCasts++;
+          if (nCasts == nClasses)
+            return nCasts;
+        }
+      }
+    }
+    pClass = pClass->myParent();
+  }
+  return (pCasts) ? nCasts : nBits;
+}
+
+inline // Returns count of available casts, pPointers must be non-zero
+OdUInt32 odrxMultiCastX(const OdRxObject *pObject, OdRxObjectPtr *pPointers, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  OdUInt32 nCasts = 0;
+  if (!pObject || !pPointers || !pClasses || !nClasses)
+    return nCasts;
+  OdRxClass *pClass = pObject->isA();
+  while (pClass)
+  {
+    for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+    {
+      if (pPointers[nClass].isNull())
+      {
+        pPointers[nClass] = pClass->getX(pClasses[nClass]);
+        if (!pPointers[nClass].isNull())
+        {
+          nCasts++;
+          if (nCasts == nClasses)
+            return nCasts;
+        }
+      }
+    }
+    pClass = pClass->myParent();
+  }
+  return nCasts;
+}
+
+inline
+OdUInt32 odrxMultiCastFwd_(OdRxClass *pClass, const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  OdRxClass *pParent = pClass->myParent();
+  if (pParent)
+  {
+    OdUInt32 nIndex = odrxMultiCastFwd_(pParent, pObject, pPointer, pClasses, nClasses);
+    if (nIndex < nClasses)
+      return nIndex;
+  }
+  for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+  {
+    if (pClass == pClasses[nClass])
+    {
+      pPointer = pObject;
+      return nClass;
+    }
+    else
+    {
+      pPointer = pClass->getX(pClasses[nClass]);
+      if (!pPointer.isNull())
+        return nClass;
+    }
+  }
+  return nClasses;
+}
+inline
+OdUInt32 odrxMultiCastFwd(const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  return odrxMultiCastFwd_(pClass, pObject, pPointer, pClasses, nClasses);
+}
+
+inline
+OdUInt32 odrxMultiCastFwdXPrior_(OdRxClass *pClass, const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  OdRxClass *pParent = pClass->myParent();
+  if (pParent)
+  {
+    OdUInt32 nIndex = odrxMultiCastFwdXPrior_(pParent, pObject, pPointer, pClasses, nClasses);
+    if (nIndex < nClasses)
+      return nIndex;
+  }
+  for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+  {
+    pPointer = pClass->getX(pClasses[nClass]);
+    if (!pPointer.isNull())
+      return nClass;
+    if (pClass == pClasses[nClass])
+    {
+      pPointer = pObject;
+      return nClass;
+    }
+  }
+  return nClasses;
+}
+inline
+OdUInt32 odrxMultiCastFwdXPrior(const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  return odrxMultiCastFwdXPrior_(pClass, pObject, pPointer, pClasses, nClasses);
+}
+
+inline
+OdUInt32 odrxMultiCastFwdObject_(OdRxClass *pClass, const OdRxObject *pObject, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  OdRxClass *pParent = pClass->myParent();
+  if (pParent)
+  {
+    OdUInt32 nIndex = odrxMultiCastFwdObject_(pParent, pObject, pClasses, nClasses);
+    if (nIndex < nClasses)
+      return nIndex;
+  }
+  for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+  {
+    if (pClass == pClasses[nClass])
+      return nClass;
+  }
+  return nClasses;
+}
+inline
+OdUInt32 odrxMultiCastFwdObject(const OdRxObject *pObject, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  return odrxMultiCastFwdObject_(pClass, pObject, pClasses, nClasses);
+}
+
+inline
+OdUInt32 odrxMultiCastFwdX_(OdRxClass *pClass, const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  OdRxClass *pParent = pClass->myParent();
+  if (pParent)
+  {
+    OdUInt32 nIndex = odrxMultiCastFwdX_(pParent, pObject, pPointer, pClasses, nClasses);
+    if (nIndex < nClasses)
+      return nIndex;
+  }
+  for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+  {
+    pPointer = pClass->getX(pClasses[nClass]);
+    if (!pPointer.isNull())
+      return nClass;
+  }
+  return nClasses;
+}
+inline
+OdUInt32 odrxMultiCastFwdX(const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  return odrxMultiCastFwdX_(pClass, pObject, pPointer, pClasses, nClasses);
+}
+
+inline
+OdUInt32 odrxMultiCastBk(const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  while (pClass)
+  {
+    for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+    {
+      if (pClass == pClasses[nClass])
+      {
+        pPointer = pObject;
+        return nClass;
+      }
+      else
+      {
+        pPointer = pClass->getX(pClasses[nClass]);
+        if (!pPointer.isNull())
+          return nClass;
+      }
+    }
+    pClass = pClass->myParent();
+  }
+  return nClasses;
+}
+
+inline
+OdUInt32 odrxMultiCastBkXPrior(const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  while (pClass)
+  {
+    for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+    {
+      pPointer = pClass->getX(pClasses[nClass]);
+      if (!pPointer.isNull())
+        return nClass;
+      if (pClass == pClasses[nClass])
+      {
+        pPointer = pObject;
+        return nClass;
+      }
+    }
+    pClass = pClass->myParent();
+  }
+  return nClasses;
+}
+
+inline
+OdUInt32 odrxMultiCastBkObject(const OdRxObject *pObject, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  while (pClass)
+  {
+    for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+    {
+      if (pClass == pClasses[nClass])
+        return nClass;
+    }
+    pClass = pClass->myParent();
+  }
+  return nClasses;
+}
+
+inline
+OdUInt32 odrxMultiCastBkX(const OdRxObject *pObject, OdRxObjectPtr &pPointer, const OdRxClass **pClasses, OdUInt32 nClasses)
+{
+  if (!pObject || !pClasses || !nClasses)
+    return nClasses;
+  OdRxClass *pClass = pObject->isA();
+  while (pClass)
+  {
+    for (OdUInt32 nClass = 0; nClass < nClasses; nClass++)
+    {
+      pPointer = pClass->getX(pClasses[nClass]);
+      if (!pPointer.isNull())
+        return nClass;
+    }
+    pClass = pClass->myParent();
+  }
+  return nClasses;
+}
+
+#include "TD_PackPop.h"
+
+#endif // _ODRXMULTICAST_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxNames.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxNames.h
new file mode 100755
index 0000000..63cb725
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxNames.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef   _RXNAMES_H
+#define   _RXNAMES_H
+
+//#define ODRX_SYS_INIT_MOD_FILE        L"teigha.rx"  // seems not used
+#define ODRX_CLASS_DICTIONARY         L"ClassDictionary"
+#define ODRX_DYNAMIC_LINKER           L"DynamicLinker"
+#define ODRX_SERVICE_DICTIONARY       L"ServiceDictionary"
+#define ODRX_KERNEL_SERVICES          L"KernelServices"
+#define ODRX_PROTOCOL_REACTOR_MANAGER L"ProtocolReactorManager"
+
+#endif // _RXNAMES_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObject.h
new file mode 100755
index 0000000..36f3f38
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObject.h
@@ -0,0 +1,1157 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODRXOBJECT_INCLUDED_
+#define _ODRXOBJECT_INCLUDED_ /* { Secret } *// 
+
+#include "TD_PackPush.h"
+#include "RootExport.h"
+#include "OdHeap.h"
+#include "OdArrayPreDef.h"
+#include "OdString.h"
+#include "BaseObjectPtr.h"
+
+class OdRxClass;
+class OdRxModule;
+
+/** \details
+    Callback function providing ability for custom class to alter its application name
+    depending on file format version drawing is saved to.
+    
+    \remarks
+    Effects only application name saved to file.
+*/
+typedef void (*AppNameChangeFuncPtr)(const OdRxClass* classObj, OdString& newAppName, int saveVer);
+
+/** \details
+    Suppresses the incrementing of the reference counter.
+    
+    \remarks
+    The option is used for creating of smart pointers that refer to the classes derived from OdRxObject.
+    The option can be specified as an argument for the constructor of the OdSmartPtr class or OdRxObjectPtr class.
+
+    \sa
+    <link smart_pointers_definition.html, Implementing Smart Pointers> 
+*/
+enum OdRxObjMod { kOdRxObjAttach };
+
+#define ODRX_DECLARE_MEMBERS_GENERIC(ClassType, ClassName)\
+public:                                                                                              \
+                                                                                                     \
+  /** Casts the specified pointer to an ClassName SmartPointer. **/                      \
+  static OdSmartPtr<ClassName> cast(const OdRxObject* pObj)                                          \
+  {                                                                                                  \
+    if (pObj)                                                                                        \
+      return OdSmartPtr<ClassName>(((ClassName*)pObj->queryX(ClassName::desc())), kOdRxObjAttach);   \
+    return (ClassName*)0;                                                                            \
+  }                                                                                                  \
+                                                                                                     \
+  static ClassType* g_pDesc;                                                                         \
+                                                                                                     \
+  /** Returns the static ClassType description object associated with this object. **/  \
+  /** This function is for use only when the class type of this object is known.          **/  \
+  /** If the class type of this object is unknown, use instead isA().                           **/  \
+  static ClassType* desc();                                                                   \
+                                                                                                     \
+  /** Returns the ClassType description instance associated with this object.      **/  \
+  /** This function is for use only when the class type of this object is unknown.        **/  \
+  /** If the class type of this object is known, use instead desc().                            **/  \
+  virtual ClassType* isA() const;                                                                    \
+                                                                                                     \
+  /** Returns the Protocol Extension object for this object.        **/                 \
+  /** Return null if there is no Protocol Extension object is found.    **/                 \
+  virtual OdRxObject* queryX(const OdRxClass* protocolClass) const;                                  \
+                                                                                                     \
+  /** Creates a new instance of this object type.                   **/                 \
+  /** Returns a SmartPointer to the new instance.                       **/                 \
+  static OdRxObjectPtr pseudoConstructor();                                                          \
+                                                                                                     \
+  /** Creates a new instance of this object type.                   **/                 \
+  /** Returns a SmartPointer to the new instance.                       **/                 \
+   static OdSmartPtr<ClassName> createObject()                                                       \
+  { if (!desc()) throw OdError(eNotInitializedYet); return desc()->create(); }                       \
+                                                                                                     \
+  /** Registers ClassName with Teigha.                           **/                 \
+  static void rxInit();                                                                              \
+  static void rxInit(AppNameChangeFuncPtr appNameChangeFunc);                                        \
+                                                                                                     \
+/* Unregisters ClassName with Teigha.                          **/                 \
+  static void rxUninit()
+
+
+/** \details
+    Declares the RunTime Type Identification methods required by OdRxObject objects.
+    
+    \remarks
+    Any class derived from OdRxObject should include this macro in its class declarations,
+    passing its own name.
+
+    \sa
+    <link rtti_class_implementing.html, Implementing RTTI Methods for the Derived Class> 
+*/
+#define ODRX_DECLARE_MEMBERS(ClassName)\
+    ODRX_DECLARE_MEMBERS_GENERIC(OdRxClass, ClassName)
+  
+/** \details
+    Defines the /empty constructor/ and casts a null pointer for the specified class.
+
+    \sa
+    <link rtti_pseudoconstructor.html, Understanding Pseudo-Constructors> 
+*/
+#define EMPTY_CONSTR(ClassName)(ClassName*)0
+
+/** \details
+    Defines the /pseudo-constructor/ for the specified class that creates a new instance, creates a smart pointer to it,
+    does not increment its reference counter, and returns a smart pointer to the instance.
+    
+    \remarks
+    The reference counter of a new instance is set to a default value.
+
+    \sa
+    <link rtti_pseudoconstructor.html, Understanding Pseudo-Constructors> 
+*/
+#define NEWOBJ_CONSTR(ClassName) OdSmartPtr<ClassName>(new ClassName, kOdRxObjAttach)
+
+#define ODRX_DEFINE_RTTI_MEMBERS_GENERIC(ClassType, ClassName, ParentClass) \
+                                                                            \
+  ClassType* ClassName::g_pDesc = 0;                                        \
+  ClassType* ClassName::desc() { return g_pDesc; }                          \
+  ClassType* ClassName::isA() const { return g_pDesc; }                     \
+                                                                            \
+  OdRxObject* ClassName::queryX(const OdRxClass* pClass) const {            \
+    return ::odQueryXImpl<ClassName, ParentClass>(this, pClass);            \
+  }
+
+/** \details
+    Defines Runtime Type Identification functions for OdRxObject objects.
+
+    \sa
+    <link rtti_class_implementing.html, Implementing RTTI Methods for the Derived Class> 
+*/
+#define ODRX_DEFINE_RTTI_MEMBERS(ClassName, ParentClass) \
+  ODRX_DEFINE_RTTI_MEMBERS_GENERIC(OdRxClass, ClassName, ParentClass)
+
+#define ODRX_DEFINE_INIT_MEMBERS_GENERIC(ClassName, CREATE_CLASS_INSTANCE, CREATE_CLASS_INSTANCE2)   \
+                                                                                                     \
+/* Registers this class with Teigha.                                         */                      \
+void ClassName::rxInit()                                                                             \
+{                                                                                                    \
+  if (!ClassName::g_pDesc) {                                                                         \
+    ClassName::g_pDesc = CREATE_CLASS_INSTANCE;                                                      \
+  } else {                                                                                           \
+    ODA_ASSERT(("Class ["#ClassName"] is already initialized.",0));                                  \
+    throw OdError(eExtendedError);                                                                   \
+  }                                                                                                  \
+}                                                                                                    \
+void ClassName::rxInit(AppNameChangeFuncPtr pAppNameChangeCallback)                                  \
+{                                                                                                    \
+  if (!ClassName::g_pDesc) {                                                                         \
+    ClassName::g_pDesc = CREATE_CLASS_INSTANCE2;                                                     \
+  } else {                                                                                           \
+    ODA_ASSERT(("Class ["#ClassName"] is already initialized.",0));                                  \
+    throw OdError(eExtendedError);                                                                   \
+  }                                                                                                  \
+}                                                                                                    \
+                                                                                                     \
+/* Unregisters this class with Teigha.                                       */                      \
+void ClassName::rxUninit()                                                                           \
+{                                                                                                    \
+  if (ClassName::g_pDesc) {                                                                          \
+    ::deleteOdRxClass(ClassName::g_pDesc);                                                           \
+    ClassName::g_pDesc = 0;                                                                          \
+  } else {                                                                                           \
+    ODA_ASSERT(("Class ["#ClassName"] is not initialized yet.",0));                                  \
+    throw OdError(eNotInitializedYet);                                                               \
+  }                                                                                                  \
+}
+
+/** \details
+   Defines the registering and unregistering functions.
+
+   \sa
+   <link rtti_class_implementing.html, Implementing RTTI Methods for the Derived Class> 
+
+   <link rtti_class_registering.html, Registering and Unregistering Classes in a Program> 
+*/
+#define ODRX_DEFINE_INIT_MEMBERS(ClassName, ParentClass, pseudoConsFn, DwgVer,                \
+                                 MaintVer, nProxyFlags, szDWGClassName,                       \
+                                 szDxfName, szAppName, nCustomFlags)                          \
+  ODRX_DEFINE_INIT_MEMBERS_GENERIC(                                                           \
+      ClassName,                                                                              \
+      (::newOdRxClass(szDWGClassName, ParentClass::desc(), pseudoConsFn, DwgVer,              \
+        MaintVer, nProxyFlags, szDxfName, szAppName, NULL, nCustomFlags)),                    \
+      (::newOdRxClass(szDWGClassName, ParentClass::desc(), pseudoConsFn, DwgVer,              \
+        MaintVer, nProxyFlags, szDxfName, szAppName, pAppNameChangeCallback, nCustomFlags)))
+
+
+/** \details
+    Defines a /pseudo-constructor/ for the specified /class name/.
+
+    \sa
+    <link rtti_pseudoconstructor.html, Understanding Pseudo-Constructors> 
+*/
+#define ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)                                            \
+                                                                                                     \
+OdRxObjectPtr ClassName::pseudoConstructor() { return OdRxObjectPtr(DOCREATE(ClassName)); }
+
+/** \details
+    Defines Runtime Type Identification and initialization functions for OdRxObject objects.
+
+    \sa
+    <link rtti_class_implementing.html, Implementing RTTI Methods for the Derived Class> 
+*/
+#define ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,pseudoConsFn,DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags) \
+                                                                                                     \
+ODRX_DEFINE_RTTI_MEMBERS(ClassName,ParentClass)                                                      \
+                                                                                                     \
+ODRX_DEFINE_INIT_MEMBERS(ClassName,ParentClass,pseudoConsFn,                                         \
+    DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags)
+    
+#define ODRX_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE,DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName)\
+                                                                                                     \
+ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor,                             \
+  DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,0)                                  \
+                                                                                                     \
+ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)
+
+#define ODRX_DEFINE_MEMBERS_EX(ClassName,ParentClass,DOCREATE,DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags)\
+                                                                                                     \
+ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor,                             \
+  DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags)                       \
+                                                                                                     \
+ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)
+
+
+#define ODRX_NO_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,szClassName)                       \
+                                                                                                     \
+ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,0,0,0,0,szClassName,OdString::kEmpty,OdString::kEmpty,0)                          \
+                                                                                                     \
+ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,EMPTY_CONSTR)
+
+
+
+#define ODRX_NO_CONS_DEFINE_MEMBERS(ClassName,ParentClass)                                           \
+                                                                                                     \
+ODRX_NO_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,OD_T(#ClassName))
+
+
+
+#define ODRX_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,szClassName,DOCREATE)                 \
+                                                                                                     \
+ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor,0,0,0,szClassName,OdString::kEmpty,OdString::kEmpty,0) \
+                                                                                                     \
+ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)
+
+
+
+#define ODRX_CONS_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE)                                     \
+                                                                                                     \
+ODRX_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,OD_T(#ClassName),DOCREATE)
+
+
+
+#define ODRX_DXF_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE,DwgVer,MaintVer, nProxyFlags,DxfName,AppName)    \
+                                                                                                                \
+ODRX_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE,                                                             \
+    DwgVer,MaintVer,nProxyFlags,OD_T(#ClassName),OD_T(#DxfName),OD_T(#AppName))
+
+
+
+#define ODRX_DXF_CONS_DEFINE_MEMBERS(ClassName,ParentClass,DwgVer,MaintVer,nProxyFlags,DxfName,AppName)    \
+                                                                                                           \
+ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor,                                   \
+    DwgVer,MaintVer,nProxyFlags,OD_T(#ClassName),OD_T(#DxfName),OD_T(#AppName),0)                          \
+                                                                                                           \
+ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,NEWOBJ_CONSTR)
+
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdRx
+{
+  enum Ordering
+  {
+    kLessThan     =-1, // This object < Specified Object
+    kEqual        = 0, // This object == Specified Object
+    kGreaterThan  = 1, // This object > Specified Object
+    kNotOrderable = 2  // These objects cannot be ordered.
+  };
+
+  enum MTSupport
+  {
+    kMTRender         = 0x01, // worldDraw() or viewportDraw() calls from different threads are allowed
+                              // for highest level (MS or PS), elsewhere they should always happen
+                              // in one dedicated thread.
+    kMTRenderInBlock  = 0x02, // Calls to worldDraw() or viewportDraw() methods from different threads are allowed
+                              // if the drawable is located inside a block (compound object).
+    kMTRenderNested   = 0x04, // worldDraw() or viewportDraw() from different threads are allowed for
+                              // nested drawables of this compound object.
+    kMTRenderReserved = 0x08, // Reserved for future use.
+    kMTRenderMask     = 0x0f, // Combination of all MTRender-dependent flags.
+    kMTLoading        = 0x80, // Multithread loading is supported for this object.
+    kHistoryAware     = 0x100 // The information written by the object to the undo filer can be saved in the history file (is valid between sessions)
+  };
+}
+
+/** \details
+    <group OdRx_Classes> 
+
+    This class provides the non-typified implementation of smart pointers for instances of classes derived from the OdRxObject class.
+
+    \sa
+    TD_Db
+    
+    \remarks
+    SmartPointers relieve the programmer of having to determine when objects are no longer needed, or having to delete
+    them at that time.
+
+    Each object referenced by a SmartPointer (henceforth 'referenced object') 
+    maintains a reference count; i.e., how many SmartPointers are referencing it.     
+    When the reference counter reaches zero, the referenced object is deleted.
+
+     \sa
+    <link smart_pointers_example_refexchange.html, Example of Assigning Smart Pointers>
+
+    <link smart_pointers_example_nontypified.html, Example of a Non-Typified Smart Pointer>
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes>
+
+    The OdSmartPtr class
+*/
+class OdRxObjectPtr : public OdBaseObjectPtr
+{
+  /** \details
+    Increments the reference counter of the referenced object.
+  */
+  inline void internalAddRef();
+
+  /** \details
+    Assigns the pointer of the specifed object to the smart pointer.  
+      
+    \remarks
+    The reference counter of the specified object is incremented.
+
+    If this SmartPointer is currently referencing another object, that object 
+    is released prior to the assignment.  
+
+    \param pObject [in]  Pointer to the specified object to be assigned.
+  */
+  void assign(
+    const OdRxObject* pObject)
+  {
+    if (m_pObject != pObject)  // To prevent reference counter dec/inc which
+    {                          // may cause object destruction or subClose
+      release();
+      m_pObject = (OdRxObject*)pObject;
+      internalAddRef();
+    }
+  }
+
+public:
+
+  /** \details
+    Constructors for the non-typified smart pointer.
+
+    \param pSource [in]  Pointer to the specified object to be assigned for the new SmartPointer object.
+
+    \remarks
+    If pSourceis specified, the smart pointer is set to the address of the specified object. If pSource is not specified, the smart pointer is set to a NULL.
+    
+    \remarks
+    If OdRxObjMod is specified, the reference counter of the specified object 
+    is *not* incremented. 
+  */
+  OdRxObjectPtr() : OdBaseObjectPtr() { }
+  OdRxObjectPtr(
+    const OdRxObject* pSource, 
+    OdRxObjMod)
+    : OdBaseObjectPtr(pSource)
+  {
+  }
+
+  OdRxObjectPtr(
+    const OdRxObject* pSource)
+    : OdBaseObjectPtr(pSource)
+  {
+    internalAddRef();
+  }
+
+  OdRxObjectPtr(
+    const OdRxObjectPtr& pSource)
+    : OdBaseObjectPtr(pSource.get())
+  {
+    internalAddRef();
+  }
+
+  OdRxObjectPtr(
+    const OdBaseObjectPtr& pSource)
+    : OdBaseObjectPtr(pSource.get())
+  {
+    internalAddRef();
+  }
+
+  /** \details
+    Assigns the pointer of the specifed object to the smart pointer without incrementing its reference counter.  
+      
+    \param pObject [in]  Pointer to the specified object to be assigned.
+
+    \remarks
+    The reference count of the specified object is not incremented.
+
+    If this SmartPointer is currently referencing another object, that object 
+    is released prior to the assignment.
+
+    \sa
+    <link smart_pointers_example_nontypified.html, Example of a Non-Typified Smart Pointer> 
+  */
+  void attach(
+    const OdRxObject* pObject) { release(); m_pObject = (OdRxObject*)pObject; }
+
+  /** \details
+    Destructor for the non-typified smart pointer.
+
+    \remarks
+    Decrements the reference counter of the referenced object. When the reference count reaches zero, the referenced object is deleted.
+  */
+  ~OdRxObjectPtr()
+  { 
+    release(); 
+  }
+
+  /** \details
+    Releases the smart pointer reference to the referenced object. 
+    
+    \remarks
+    Decrements the reference counter of the referenced object.  When the reference count reaches zero, 
+    the referenced object is deleted. Smart pointer is set to a NULL.
+
+    \sa
+    <link smart_pointers_example_nontypified.html, Example of a Non-Typified Smart Pointer> 
+  */
+  inline void release();
+
+  /** \details
+    Releases the smart pointer reference to the referenced object without decrementing of the reference counter. 
+      
+    \remarks
+    Returns the raw pointer to the referenced object. The reference counter is not modified 
+    for the referenced object. Smart pointer is set to a NULL.
+
+    \sa
+    <link smart_pointers_example_nontypified.html, Example of a Non-Typified Smart Pointer>
+  */
+  OdRxObject* detach()
+  {
+    OdRxObject* res = m_pObject;
+    m_pObject = 0;
+    return res;
+  }
+
+  /** \remarks
+    The assignment operator increments the reference counter of the referenced object and saves its address in the smart pointer.
+     If the smart pointer is currently referencing to another object, that assignment operator releases the referenced object prior 
+     to the assignment.  
+
+    \sa
+   <link smart_pointers_example_nontypified.html, Example of a Non-Typified Smart Pointer>
+  */
+  OdRxObjectPtr& operator = (
+    const OdRxObjectPtr& source)
+  { assign(source); return *this; }
+
+  OdRxObjectPtr& operator = (
+    const OdRxObject* source)
+  { assign(source); return *this; }
+
+  OdRxObjectPtr& operator = (
+    const OdBaseObjectPtr& source)
+  { assign(source.get()); return *this; }
+
+  /** \details
+    Returns the raw pointer to the referenced object.
+
+    \remarks
+    The smart pointer maintains its reference to the referenced object.
+    The reference counter of the referenced object is not changed.
+ 
+    \sa
+    <link smart_pointers_example_nontypified.html, Example of a Non-Typified Smart Pointer> 
+  */
+  OdRxObject* get() { return m_pObject; }
+  const OdRxObject* get() const { return m_pObject; }
+
+  /** \details
+    Returns the raw pointer to the referenced object.
+      
+    \remarks
+    The reference counter of the referenced object is not changed.
+
+    \sa
+    <link smart_pointers_example_nontypified.html, Example of a Non-Typified Smart Pointer> 
+  */
+  OdRxObject* operator ->() { return m_pObject; }
+  const OdRxObject* operator ->() const { return m_pObject; }
+
+#ifdef ODA_GCC_2_95
+  /** \details
+    Returns the raw pointer to the referenced object.
+    
+    \remarks
+    The class maintains the reference to the referenced object.
+    The reference counter of the referenced object is not changed.
+
+    This non-standard form is used to eliminate a large number of compiler
+    warnings produced by GCC 2.95.X (GCC 3.X no longer produces these warnings).
+  */
+  operator OdRxObject*() const { return m_pObject; }
+#else
+  /** \details
+    Returns the raw pointer of the referenced object.
+    
+    \remarks
+    The reference counter of the referenced object is not changed.
+  */
+  operator OdRxObject*() { return m_pObject; }
+
+  operator const OdRxObject*() const { return m_pObject; }
+#endif
+
+  bool operator==(
+    const OdRxObject* pObject) const { return (m_pObject==pObject); }
+
+  bool operator!=(
+    const OdRxObject* pObject) const { return (m_pObject!=pObject); }
+};
+
+
+/** \details
+   <group OdRx_Classes> 
+
+   This class is the base class for all OdRxObject objects that 
+   require Runtime Type Identification.
+
+   \sa
+   <link smart_pointers_overview.html, Overview of Smart Pointer Classes>
+
+   <link rtti.html, RTTI Technology>
+
+   <link rx_object_compare.html, Comparing Rx-Objects>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRxObject
+{
+
+  /** \details
+      Constructor for this class that assigns another Rx-object.
+  */
+  OdRxObject(const OdRxObject&);
+
+  /** \details
+      Assignment operator prohibited.
+  */
+  OdRxObject& operator = (const OdRxObject&);
+
+protected:
+  /** \details
+      Protects derived OdRxObject objects from direct use of new and delete operators. 
+  */
+  ODRX_HEAP_OPERATORS();
+
+public:
+  /** \details
+      Default constructor for this class.
+  */
+  OdRxObject() { }
+
+  /** \details
+      The virtual destructor for this class.
+  */
+  virtual ~OdRxObject();
+
+  /** \details
+    Checks whether the object belongs to the specified class and returns a pointer to 
+    this object if this object can be converted to the specified class.
+
+    \param pClass [in]  /Raw pointer/ to the /class describing instance/ to which the object must be converted.
+      
+    \remarks
+    If the object cannot be converted, the method returns a Null.
+    The program must /release/ this object, if the returned pointer is not Null.
+
+    \sa
+    <link rtti_sample_belonging.html, Example of Belonging to an Instance of a Class>
+
+    \sa
+    <link rtti_class_belonging.html, Belonging to an Instance of a Class>
+  */
+  virtual OdRxObject* queryX(
+    const OdRxClass* pClass) const;
+
+  /** \details
+   Checks whether the object belongs to the specified class and returns a pointer to 
+   this object if this object can be converted to the specified class, or throws an exception if it cannot.
+
+    \param pClass [in]  /Raw pointer/ to the /class describing instance/ to which the object must be converted.
+
+    \remarks
+    This method generates the eNotThatKindOfClass exception when the object can be not converted to the specified class.
+    This method generates the eInvalidInput exception when the argument pClass is Null. This method uses the queryX() method.
+
+    \sa
+    <link rtti_sample_belonging.html, Example of Belonging to an Instance of a Class>
+
+    \sa
+    <link rtti_class_belonging.html, Belonging to an Instance of a Class>
+  */
+  virtual OdRxObject* x(
+    const OdRxClass* pClass) const;
+
+  /** \details
+    Casts the specified /raw pointer/ to the /smart pointer/.
+
+    \param pointer [in]  /Raw pointer/ to be cast.
+  */
+  static OdRxObjectPtr cast(
+    const OdRxObject* pointer)
+  {
+    OdRxObjectPtr pRes;
+    if (pointer)
+      pRes.attach(pointer->queryX(desc()));
+    return pRes;
+  }
+
+  /** \details
+    Returns the /raw pointer/ to the /class describing instance/ statically associated with this object
+    as the OdRxClass object.
+
+    \remarks
+    This function is for use only when the class type of this object is known. 
+    If the class type of this object is unknown, use isA() method instead.
+
+    \sa
+    <link rtti_sample_identifying.html, Example of Identifying Classes>
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+  */
+  static OdRxClass* desc();
+
+
+  /** \details
+    Returns the /raw pointer/ to the /class describing instance/ dynamically associated with this object
+    as the OdRxClass object.
+ 
+    \remarks
+    This function is for use only when the class type of this object is unknown. 
+    If the class type of this object is known, use desc() method instead.
+
+    \sa
+    <link rtti_sample_identifying.html, Example of Identifying Classes>
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+  */
+    virtual OdRxClass* isA() const;
+
+  /** \details
+    Declares the method incrementing the reference counter in objects derived from this class.
+
+    \remarks
+    It is the pure virtual method that does not have an implementation. You must redefine it in the derived class.
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes>
+  */
+  virtual void addRef() = 0;
+
+  /** \details
+    Declares the method decrementing the reference counter in objects derived from this class.
+    
+    \remarks
+    It is the pure virtual method that does not have an implementation. You must redefine it in the derived class.
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes>
+  */
+  virtual void release() = 0;
+
+  /** \details
+    Returns the value of the reference counter, that is, the number of references to an instance of this class.
+
+    \remarks
+    This method has the default implementation that returns 1. You shloud redefine it in the derived class.
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes>
+  */
+  virtual long numRefs() const;
+
+   /** \details
+    Checks whether the object belongs to the specified class and
+    returns true if and only if this object is an instance of the specified class or
+    a subclass of the specified class.
+
+     \param pClass [in]  /Raw pointer/ to the /class describing instance/ to be checked.
+
+     \sa
+     <link rtti_sample_belonging.html, Example of Belonging to an Instance of a Class>
+
+     \sa
+     <link rtti_class_belonging.html, Belonging to an Instance of a Class>
+   */
+  bool isKindOf(
+    const OdRxClass* pClass) const
+  {
+    OdRxObjectPtr pRes;
+    pRes.attach(queryX(pClass));
+    return (!pRes.isNull());
+  }
+
+  /** \details
+    Creates a *clone* of this object, and returns a pointer to the *clone*.
+  */
+  virtual OdRxObjectPtr clone() const;
+  
+  /** details
+    Copies the contents of the specified object into this object.
+    
+    \param pSource [in] Pointer to the source object.
+    
+    \remarks
+    The default implementation of this function does nothing but throw an eNotApplicable exception. 
+    
+    Throws:
+    eNotApplicable Exception 
+    
+   
+ */
+  virtual void copyFrom(
+    const OdRxObject* pSource);
+
+  /** \details
+    Compares another object to this one in a some meaning. 
+
+    \param pOther [in]  /Raw pointer/ to the object to be compared.
+    
+    \remarks
+    This method returns one of the following:
+
+    <table>
+    Name             Value    Description  
+    _kLessThan_     -1       This object < Other Object.  
+    _kEqual_              0       This object = Other Object.  
+    _kGreaterThan_     1       This object > Other Object.  
+    _kNotOrderable_     2       This class is not orderable.  
+    </table>
+
+
+    \remarks
+    The default implementation of this method returns _kNotOrderable_.
+
+    \sa
+    <link rx_object_compare_moreless.html, Comparing the Value of Rx Objects>
+
+    \sa
+    <link rx_object_compare.html, Comparing Rx-Objects>
+  */
+  virtual OdRx::Ordering comparedTo(
+    const OdRxObject* pOther) const;
+
+  /** \details
+    Returns true if and only if the specified object is equal to this one in a some meaning.
+
+    \param pOther [in]  /Raw pointer/ to the object to be compared.
+
+    \sa
+    <link rx_object_compare_equivalence.html, Comparing the Equivalence of Rx Objects>
+
+    \sa
+    <link rx_object_compare.html, Comparing Rx-Objects>
+  */
+  virtual bool isEqualTo(
+    const OdRxObject* pOther) const;
+};
+
+
+
+void OdRxObjectPtr::internalAddRef()
+{
+  if(m_pObject) { m_pObject->addRef(); }
+}
+void OdRxObjectPtr::release()
+{
+  if (m_pObject)
+  {
+    m_pObject->release();
+    m_pObject = NULL;
+  }
+}
+
+#include "SmartPtr.h"
+
+/** \details
+    Defines OdPseudoConstructorType as a function pointer type.
+    
+    \remarks
+    Functions pointed to by OdPseudoConstructorType 
+    take no arguments and construct instances of
+    classes derived from OdRxObject;
+    hence the name PseudoConstructorType.
+*/
+typedef OdRxObjectPtr (*OdPseudoConstructorType)();
+
+/** \details
+  <group OdRx_Classes> 
+  Contains runtime information about a Rx-Object.  
+    
+  \remarks
+  A pointer to an OdRxClass instance can be obtained for an OdRxObject class by calling 
+  the OdRxObject::desc() function.
+
+  \sa
+  <link rtti.html, RTTI Technology>
+
+  <link rtti_class_describing.html, Implementing the Class Describing Structure>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRxClass : public OdRxObject
+{
+protected:
+  OdRxClass();
+public:
+  ODRX_DECLARE_MEMBERS(OdRxClass);
+ 
+  /** \details
+    Creates the Protocol Extension for the specified OdRxClass.
+
+    \param pProtocolClass [in]  Pointer to the Protocol Extension class.
+    \param pProtocolObject [in]  Pointer to the Protocol Extension Object.
+
+    \remarks
+    Returns a SmartPointer to the Protocol Extension.
+
+    \note
+    The default implementation of  this object does nothing but return a
+    null pointer, and asserts in debug mode. It will be
+    fully implemented in a future *release*.
+  */
+  virtual OdRxObjectPtr addX(
+    OdRxClass* pProtocolClass, 
+    OdRxObject* pProtocolObject);
+
+  /** \details
+    Returns the Protocol Extension for the specified
+    Protocol extension class.
+
+    \param pProtocolClass [in]  Pointer to the Protocol Extension class.
+
+    \remarks
+    Returns a SmartPointer to the Protocol Extension.
+
+    \note
+    The default implementation of this object does nothing but
+    assert in debug mode, and return a null pointer.
+    It will be fully implemented in a future *release*.
+  */
+  virtual OdRxObjectPtr getX(
+    const OdRxClass* pProtocolClass);
+
+  /** \details
+    Deletes the Protocol Extension for the specified Protocol Extension class.
+
+    \remarks
+    Returns the Protocol Extension Object.
+
+    \param pProtocolClass [in]  Pointer to the Protocol Extension class.
+
+    \note
+    As currently implemented, this function does nothing but
+    assert in debug mode, and return a null pointer.
+    It will be fully implemented in a future *release*.
+  */
+  virtual OdRxObjectPtr delX(
+    OdRxClass* pProtocolClass);
+  
+  /** \details
+    Creates a new instance of the class associated with the /class describing instance/
+    using the /pseudo-constructor/ of the class.
+
+    \remarks
+    Returns a /smart pointer/ to the newly created instance.
+
+    \sa
+    <link rtti_class_constructors.html, Functionality of Pseudo-Constructors>
+
+    \sa
+    <link rtti_pseudoconstructor.html, Understanding Pseudo-Constructors>
+  */
+  virtual OdRxObjectPtr create() const = 0;
+
+  /** \details
+    Returns the /application class name/ for the /class describing instance/ represented by this 
+    OdRxClass object. Custom class can alter its application name depending on file format version 
+    it's being saved to.
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual const OdString appName() const = 0;
+
+  /** \details
+    Returns a pointer to the callback function which is called when a drawing is to be saved and 
+    the logical /application class name/ represented by the /class description instance/ to be written 
+    out to file for the custom class, or NULL, if the callback function is not assigned.
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual AppNameChangeFuncPtr appNameCallbackPtr() const = 0;
+
+  /** \details
+    Returns the /DXF class name/ for the /class describing instance/ represented by this OdRxClass object.
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual const OdString dxfName() const = 0;
+
+  /** \details
+    Returns the /class name/ for the /class describing instance/ represented by this OdRxClass object.
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual const OdString name() const = 0;
+
+  /** \details
+    Returns the .dwg file version and maintenance version for the /class describing instance/ 
+    represented by this OdRxClass object.
+
+    \param pMaintReleaseVer [in]  /Raw pointer/ to the variable in which the maintenance version number
+    must be saved. This variable must have the OdDb::MaintReleaseVer type.
+
+    \remarks
+    The .dwg file version number is returned value of the method that must have the OdDb::DwgVersion type.
+    This method returns the /maintenance release version/ if and only if its argument is not Null. 
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual OdDb::DwgVersion getClassVersion(
+    OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const = 0;
+
+  /** \details
+    Returns the /proxy flags/ for the /class describing instance/ represented by this OdRxClass object.
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual OdUInt32 proxyFlags() const = 0;
+  
+  /** \details
+   Checks whether the /class/ defined by this /class describing instance/ belongs to or
+   derived from the specified class. The method returns true if and only if this object is
+   an instance of the specified class or a subclass of the specified class.
+
+    \param pClass [in]  /Raw pointer/ to the /class describing instance/ to be checked. 
+
+    \sa
+    <link rtti_sample_belonging.html, Example of Belonging to an Instance of a Class> 
+
+    \sa
+    <link rtti_class_belonging.html, Belonging to an Instance of a Class> 
+  */
+  virtual bool isDerivedFrom(
+    const OdRxClass* pClass) const;
+
+  /** \details
+    Returns the /raw pointer/ to the /class describing instance/ which describes 
+    the parent class for this class as the OdRxClass object.
+
+   \sa
+   <link rtti_class_functionality.html, Functionality of RTTI>
+
+   \sa
+   <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual OdRxClass* myParent() const = 0;
+
+  /** \details
+    Returns the OdRxModule object in which the class is resided.
+
+    \note
+    The default implementation of this function returns a Null pointer. 
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual OdRxModule* module() const = 0;
+
+  /** \details
+    Returns the /raw pointer/ to the function that is the /pseudo-constructor/ for this class.
+
+    \sa
+    <link rtti_class_constructors.html, Functionality of Pseudo-Constructors>
+
+    \sa
+    <link rtti_pseudoconstructor.html, Understanding Pseudo-Constructors>
+  */
+  virtual OdPseudoConstructorType constructor();
+
+  /** \details
+    Sets the user-defined function as the /pseudo-constructor/ for this class.
+
+    \param pseudoConstr [in]  /Raw pointer/ to the user-defined function that does not have arguments
+    and returns the /smart pointer/ to a new instance of this class.
+
+    \sa
+    <link rtti_class_constructors.html, Functionality of Pseudo-Constructors>
+
+    \sa
+    <link rtti_pseudoconstructor.html, Understanding Pseudo-Constructors>
+  */
+  virtual void setConstructor(
+    OdPseudoConstructorType psuedoConstr) = 0;
+
+  /** \details
+    Returns the /custom flags/ for the /class describing instance/ represented by this OdRxClass object.
+
+    \sa
+    <link rtti_class_functionality.html, Functionality of RTTI>
+
+    \sa
+    <link rtti_class_describing.html, Implementing the Class Describing Structure>
+  */
+  virtual OdUInt32 customFlags() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdRxClass object pointers.
+
+    \sa
+    <link rtti_class_belonging.html, Belonging to an Instance of a Class>
+*/
+typedef OdSmartPtr<OdRxClass> OdRxClassPtr;
+
+template <class Class, class Parent>
+OdRxObject* odQueryXImpl(const Class* pThis, const OdRxClass* pClass)
+{
+  ODA_ASSERT(pClass!=0); // if you get here, most likely requested class is not registred
+  OdRxObject* pObj = 0;
+  if(pClass == Class::desc())
+  {
+    pObj = (OdRxObject*)pThis;
+    pObj->addRef();
+  }
+  else
+  {
+    pObj = Class::desc()->getX(pClass).detach();
+    if(!pObj)
+      pObj = pThis->Parent::queryX(pClass);
+  }
+  return pObj;
+}
+
+/** \details
+    This external function creates a new instance of the class specified by the argument as a string
+    and returns a /non-typified smart pointer/ to it.
+
+    \param sClassName [in]  /Custom class name/ as a string.
+*/
+FIRSTDLL_EXPORT OdRxObjectPtr odrxCreateObject(
+    const OdString& sClassName);
+
+/** \details
+    This external function creates a new /class description instance/ with specified parameters and 
+    returns a /raw pointer/ to it.
+
+    \param sClassName [in]  /Custom class name/ as a string.
+    \param pBaseClass [in]  A pointer to an existing /class description instance/ which is the parent class.
+    \param pConstr [in]  A pointer to the pseudo-constructor function.
+    \param DwgVer [in]  dwg-version number.
+    \param MaintVer [in]  Maintain version number.
+    \param nProxyFlags [in]  Mask of the proxy flags.
+    \param sDxfName [in]  dxf-class name.
+    \param sAppName [in]  Application class name.
+    \param fNameChangeFunc [in]  A pointer to the callback function which is called when the registered object is to be saved.
+    \param nCustomFlags [in]  Mask of the custom flags.
+
+    \sa
+    <link rtti_class_registering.html, Registering and Unregistering Classes in a Program>
+*/
+FIRSTDLL_EXPORT OdRxClass* newOdRxClass(
+    const OdString& sClassName,
+    OdRxClass* pBaseClass,
+    OdPseudoConstructorType pConstr = 0,
+    int DwgVer = 0,
+    int MaintVer = 0,
+    int nProxyFlags = 0,
+    const OdString& sDxfName = OdString::kEmpty,
+    const OdString& sAppName = OdString::kEmpty,
+    AppNameChangeFuncPtr fNameChangeFunc = NULL,
+    int nCustomFlags = 0
+  );
+
+/** \details
+    This external function deletes a class description instance.
+
+    \param pClass [in]  /Raw pointer/ to an existing class description instance.
+*/
+FIRSTDLL_EXPORT void deleteOdRxClass(
+  OdRxClass* pClass);
+
+/** \details
+    This template class is a specialization of the OdArray class template for OdRx object pointers.
+*/
+typedef OdArray<OdRxObjectPtr> OdRxObjectPtrArray;
+
+/** \details
+    This registration allows you to catch the invoking of each RxObject destructor.
+*/
+typedef void (*ODRXOBJECT_CALLBACK)(const OdRxObject*);
+FIRSTDLL_EXPORT void odrxRegisterDestructorCallback(const ODRXOBJECT_CALLBACK callbackFunc);
+FIRSTDLL_EXPORT void odrxUnregisterDestructorCallback();
+
+#include "TD_PackPop.h"
+
+#endif //_ODRXOBJECT_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObjectImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObjectImpl.h
new file mode 100755
index 0000000..33687e3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxObjectImpl.h
@@ -0,0 +1,127 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#if !defined(OdRxObjectImpl_INCLUDED_)
+#define OdRxObjectImpl_INCLUDED_
+
+#include "OdaCommon.h"
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "OdMutex.h"
+
+/** \details
+    <group OdRx_Classes> 
+
+    The template class provides the <link smart_pointers_definition_standard.html, standard implementation of the counting references> 
+    for instances of objects derived from the OdRxObject class.
+
+    \sa
+    TD_Db
+
+    \sa
+    <link smart_pointers_example_count_standard.html, Example of Counting References>
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes> 
+
+    The OdStaticRxObject class
+*/
+template<class T, class TInterface = T>
+class OdRxObjectImpl : public T
+{
+  /** \details
+      Allows to create OdRxObjectImpl<T> instances inside this class only.
+  */
+  OdRefCounter m_nRefCounter;
+
+  /** \details
+      Assignment operator prohibited.
+  */
+  OdRxObjectImpl& operator = (const OdRxObjectImpl&);
+
+protected:
+  ODRX_HEAP_OPERATORS();
+
+public:
+  /** \details
+      Constructor sets the reference counter to one.
+  */
+  OdRxObjectImpl() 
+  { 
+    m_nRefCounter = 1; 
+  }
+
+  /** \details
+      Increments the reference counter.
+  */
+  void addRef()
+  {
+    ++m_nRefCounter;
+  }
+
+  /** \details
+      Decrements the reference counter, checks the reference counter, and destroys the instance 
+      when the reference counter reaches zero.
+  */
+  void release()
+  {
+		ODA_ASSERT((m_nRefCounter > 0));
+		if (!(--m_nRefCounter))
+		{
+      delete this;
+		}
+  }
+
+  /** \details
+      Returns the number of references to an instance of this class.
+  */
+  long numRefs() const { return m_nRefCounter; }
+
+  /** \details
+      It is the pseudo-constructor that creates an instance of this class  and returns the typified smart pointer to it.
+  */
+  static OdSmartPtr<TInterface> createObject()
+  {
+    return OdSmartPtr<TInterface>(static_cast<TInterface*>(new OdRxObjectImpl<T, TInterface>), kOdRxObjAttach);
+  }
+};
+
+
+/** \details
+    Defines the pseudo-constructor for the specified class that is equivalent the pseudo-constructor of the wrapper class using the standard implementation.
+*/
+#define RXIMPL_CONSTR(ClassName) OdRxObjectImpl<ClassName>::createObject()
+
+/** \details
+    Defines a pseudo-constructor for the specified class.
+*/
+#define ABSTRACTIMPL_CONSTR(CLASS) OdRxObjectImpl<CLASS##Impl>::createObject()
+
+#include "TD_PackPop.h"
+
+#endif // !defined(OdRxObjectImpl_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxOverrule.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxOverrule.h
new file mode 100755
index 0000000..3c0b7b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxOverrule.h
@@ -0,0 +1,111 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _RXOVERRULE_H
+#define _RXOVERRULE_H
+
+#include "RxObject.h"
+
+#include "TD_PackPush.h"
+class OdRxOverruleIterator;
+
+/** \details
+  This class is an abstract base class for implementation of overrules. An overrule can be registered or unregistered,
+  and overrules can be globally activated or deactivated. Overrules are internally managed by pairs of classes 
+  named as "target" and "overrule." The "target" is the class to which the overrule applies. Classes can have multiple 
+  overrules registered. 
+
+  Library: TD_Db
+  <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxOverrule : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxOverrule);
+
+  /** \details
+    Destructor deletes an instance of this class.
+  */
+  virtual ~OdRxOverrule();
+
+  /** \details
+    Determines whether the overrule is applicable and returns True if the overrule can be applied,
+    or False, otherwise. It is a pure virtual method that must be implemented in the derived class.
+
+    \param pOverruledSubject [in]  A raw pointer to an object to be overruled.
+  */
+  virtual bool isApplicable(const OdRxObject* pOverruledSubject) const = 0;
+
+  /** \details
+    Registers an object for a given class to be overruled.
+    This method returns eOk if successful.
+
+    \param pClass [in]  A raw pointer to the class description object to which the overrule applies.
+    \param pOverrule [in]  A raw pointer to an object to be overruled.
+    \param bAddAtLast [in]  Determines whether the pair should be added in the end of the overrule collection.
+  */
+  static OdResult addOverrule(OdRxClass* pClass, OdRxOverrule* pOverrule, bool bAddAtLast = false);
+
+  /** \details
+    Unregisters an object for the given class.
+    This method returns eOk if successful.
+
+    \param pClass [in]  A raw pointer to the class description object to which the overrule applies.
+    \param pOverrule [in]  A raw pointer to an object to be overruled.
+  */
+  static OdResult removeOverrule(OdRxClass* pClass, OdRxOverrule* pOverrule);
+
+  /** \details
+    Enables or disables the overruling mechanism.
+
+    \param bIsOverruling [in]  Determines whether the overruling mechanism is enabled (true) or disabled (false).
+  */
+  static void setIsOverruling(bool bIsOverruling);
+
+  /** \details
+    Checks whether the overruling mechanism is enabled (true) or disabled (false).
+  */
+  static bool isOverruling()
+  {
+    return s_bIsOverruling;
+  }
+
+  /** \details
+    Checks whether the specified overrule handles a given object and returns True if the object 
+    is to be handled by overrule, or False, otherwise.
+
+    \param pOverruleClass [in]  A raw pointer to the class description object to which the overrule applies.
+    \param pSubject [in]  A raw pointer to an object to be overruled.
+  */
+  static bool hasOverrule(const OdRxObject* pSubject, OdRxClass* pOverruleClass);
+private:
+  /*!DOM*/
+  OdRxOverruleIterator* m_pIter;
+  /*!DOM*/
+  FIRSTDLL_EXPORT_STATIC static bool s_bIsOverruling;
+  /*!DOM*/
+  friend class OdRxOverruleInternals;
+};
+
+#include "TD_PackPop.h"
+#endif  // _RXOVERRULE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxProtocolReactor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxProtocolReactor.h
new file mode 100755
index 0000000..d464bfc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxProtocolReactor.h
@@ -0,0 +1,281 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _RxProtocolReactor_h_Included_
+#define _RxProtocolReactor_h_Included_
+
+#include "RxObject.h"
+#include "RxDictionary.h"
+
+class OdRxProtocolReactor;
+class OdRxProtocolReactorIterator;
+class OdRxProtocolReactorList;
+class OdRxProtocolReactorListIterator;
+class OdRxProtocolReactorManager;
+class OdRxProtocolReactorManagerFactory;
+
+
+/** \details
+    This class is the base class for all protocol reactors.
+
+    \remarks
+    All protocol reactor classes must derive from this base class.
+
+    Library: TD_Root
+    <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxProtocolReactor : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxProtocolReactor);
+};
+
+
+/** \details
+    This class implements Iterators for OdRxProtocolReactor objects in OdRxProtocolReactorList instances.
+
+    \remarks
+    Instances are returned by OdRxProtocolReactorList::newIterator().
+
+    Library: TD_Root
+    <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxProtocolReactorIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxProtocolReactorIterator);
+
+  /** \details
+    Returns the reactor class type returned by this Iterator object.
+  */
+  virtual OdRxClass* reactorClass () const = 0;
+
+
+  /** \details
+    Sets this Iterator object to reference the Reactor object that it would normally return first.
+
+    \remarks
+    Allows multiple traversals of the Iterator list.
+  */
+    virtual void start() = 0; 
+
+  /** \details
+    Sets this Iterator object to reference the Reactor object following the current Reactor object.
+    
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+    virtual bool next () = 0;
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done () const = 0;
+
+  /** \details
+    Returns the Reactor object referenced by this Iterator object.
+  */
+  virtual OdRxProtocolReactor* object () const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxProtocolReactorManager object pointers.
+*/
+typedef OdSmartPtr<OdRxProtocolReactorIterator> OdRxProtocolReactorIteratorPtr;
+
+
+/** \details
+  This class is a collection of OdRxProtocolReactor objects.  
+  Library: TD_Root
+  <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxProtocolReactorList : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxProtocolReactorList);
+
+  /** \details
+    Returns the reactor class type returned the Iterator object.
+  */
+  virtual OdRxClass* reactorClass() const = 0;
+
+  /** \details
+    Adds the specified reactor to this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  virtual bool addReactor(OdRxProtocolReactor* pReactor) = 0;
+
+  /** \details
+    Removes the specified reactor from this object's reactor list.
+
+    \param pReactor [in]  Pointer to the reactor object.
+  */
+  virtual void removeReactor(OdRxProtocolReactor* pReactor) = 0;
+
+  
+  /** \details
+    Creates an Iterator object that provides access to the objects in this List object.
+    
+    \remarks
+    Returns a SmartPointer to the Iterator object.
+  */
+  virtual OdRxProtocolReactorIteratorPtr newIterator () const = 0;
+};
+
+/** \details
+This template class is a specialization of the OdSmartPtr class for OdRxProtocolReactorList object pointers.
+*/
+typedef OdSmartPtr<OdRxProtocolReactorList> OdRxProtocolReactorListPtr;
+
+
+/** \details
+    This class implements iterators for OdRxProtocolReactorList objects in OdRxProtocolReactorManager instances.
+    \remarks
+    Instances are returned by OdRxProtocolReactorManager::newIterator().
+
+    Library: TD_Root
+    <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxProtocolReactorListIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxProtocolReactorListIterator);
+
+  /** \details
+    Sets this Iterator object to reference the Reactor object that it would normally return first.
+
+    \remarks
+    Allows multiple traversals of the Iterator list.
+  */
+    virtual void start() = 0; 
+
+  /** \details
+    Sets this Iterator object to reference the Reactor object following the current Reactor object.
+    
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+    virtual bool next () = 0;
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done () const = 0;
+
+  /** \details
+    Returns the OdRxProtocolReactorList object referenced by this Iterator object.
+  */
+  virtual OdRxProtocolReactorList* object () const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxProtocolReactorListIterator object pointers.
+*/
+typedef OdSmartPtr<OdRxProtocolReactorListIterator> OdRxProtocolReactorListIteratorPtr;
+
+
+/** \details
+  This class is a container class for OdRxProtocolReactorList objects.
+  Library: TD_Root
+  <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxProtocolReactorManager: public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxProtocolReactorManager);
+
+  
+  /** \details
+    Returns a pointer for the ProtocolReactorList for the specified reactor class.
+    
+    \param pReactorClass [in]  Reactor class.
+    \remarks
+    The ProtocolReactorList is created as necessary.
+  */
+  virtual OdRxProtocolReactorList* createReactorList (
+    OdRxClass* pReactorClass) = 0;
+
+
+  /** \details
+    Creates an Iterator object that provides access to the OdRxProtocolReactorList objects in this Manager object.
+    
+    \remarks
+    Returns a SmartPointer to the Iterator object.
+  */
+  virtual OdRxProtocolReactorListIteratorPtr newIterator () const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxProtocolReactorManager object pointers.
+*/
+typedef OdSmartPtr<OdRxProtocolReactorManager> OdRxProtocolReactorManagerPtr;
+
+
+/** \details
+    This factory class obtains the single OdRxProtocolReactorManager instance associated
+    with a specified OdRxClass.
+     
+    Library: TD_Root
+    <group OdRx_Classes> 
+*/
+class FIRSTDLL_EXPORT OdRxProtocolReactorManagerFactory : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdRxProtocolReactorManagerFactory);
+
+  /** \details
+    Returns the single OdRxProtocolReactorManager instance associated
+    with the specified OdRxClass.
+    
+    \param pRxClass [in]  Pointer to the RcClass object.
+    \remarks
+    The OdRxProtocolReactorManager is created as necessary.
+  */
+    virtual OdRxProtocolReactorManager* createReactorManager (
+    OdRxClass* pRxClass) const = 0;
+};
+
+/** \details
+  Returns the global OdRxProtocolReactorManagerFactory instance. 
+*/
+#define odrxProtocolReactors \
+  OdRxProtocolReactorManagerFactory::cast(odrxServiceDictionary()-> \
+  at(ODRX_PROTOCOL_REACTOR_MANAGER))
+
+/** \details
+  Returns the OdRxProtocolReactorManager associated with the 
+  specified odrxClass.
+*/
+#define ODRX_PROTOCOL_REACTOR_MANAGER_AT(odrxClass) \
+  odrxProtocolReactors->createReactorManager(odrxClass)
+
+/** \details
+  Returns the OdRxProtocolReactorList associated with the 
+  specified odrxClass.  The returned list contains zero or more 
+  reactorClass instances.
+*/
+#define ODRX_PROTOCOL_REACTOR_LIST_AT(odrxClass, reactorClass) \
+  ODRX_PROTOCOL_REACTOR_MANAGER_AT(odrxClass)->createReactorList(reactorClass)
+
+#endif // _RxProtocolReactor_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxRasterServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxRasterServices.h
new file mode 100755
index 0000000..ff985cc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxRasterServices.h
@@ -0,0 +1,246 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+// RasterModule.h - interface of module, performing different operations on raster images
+
+#ifndef __OD_RASTER_MODULE__
+#define __OD_RASTER_MODULE__
+
+#include "RxModule.h"
+#include "DbRootExport.h"
+#include "UInt32Array.h"
+#include "TDVersion.h"
+
+class OdGiRasterImage;
+typedef OdSmartPtr<OdGiRasterImage> OdGiRasterImagePtr;
+
+#include "TD_PackPush.h"
+
+#ifndef OD_FOURCC
+#ifndef ODA_BIGENDIAN
+#define OD_FOURCC(a, b, c, d) (((OdUInt32)(d) << 24) | ((OdUInt32)(c) << 16) | ((OdUInt32)(b) << 8) | ((OdUInt32)(a)))
+#else
+#define OD_FOURCC(a, b, c, d) (((OdUInt32)(a) << 24) | ((OdUInt32)(b) << 16) | ((OdUInt32)(c) << 8) | ((OdUInt32)(d)))
+#endif
+#endif // OD_FOURCC
+
+/** \details
+    This class is the base class for classes that provide platform-dependent loading and saving
+    of Raster Image files for Teigha.
+    Library: TD_Db
+    <group OdRx_Classes> 
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdRxRasterServices : public OdRxModule
+{
+public:
+  // Predefined image types
+  enum ImageType
+  {
+    kUnknown  = -1,
+    kBMP      = OD_FOURCC('B', 'M', 'P', ' '),
+    kICO      = OD_FOURCC('I', 'C', 'O', ' '),
+    kJPEG     = OD_FOURCC('J', 'P', 'E', 'G'),
+    kJNG      = OD_FOURCC('J', 'N', 'G', ' '),
+    kKOALA    = OD_FOURCC('K', 'O', 'A', 'L'),
+    kLBM      = OD_FOURCC('L', 'B', 'M', ' '),
+    kIFF      = kLBM,
+    kMNG      = OD_FOURCC('M', 'N', 'G', ' '),
+    kPBM      = OD_FOURCC('P', 'B', 'M', ' '),
+    kPBMRAW   = OD_FOURCC('P', 'B', 'M', 'R'),
+    kPCD      = OD_FOURCC('P', 'C', 'D', ' '),
+    kPCX      = OD_FOURCC('P', 'C', 'X', ' '),
+    kPGM      = OD_FOURCC('P', 'G', 'M', ' '),
+    kPGMRAW   = OD_FOURCC('P', 'G', 'M', 'R'),
+    kPNG      = OD_FOURCC('P', 'N', 'G', ' '),
+    kPPM      = OD_FOURCC('P', 'P', 'M', ' '),
+    kPPMRAW   = OD_FOURCC('P', 'P', 'M', 'R'),
+    kRAS      = OD_FOURCC('R', 'A', 'S', ' '),
+    kTARGA    = OD_FOURCC('T', 'G', 'A', ' '),
+    kTIFF     = OD_FOURCC('T', 'I', 'F', 'F'),
+    kWBMP     = OD_FOURCC('W', 'B', 'M', 'P'),
+    kPSD      = OD_FOURCC('P', 'S', 'D', ' '),
+    kCUT      = OD_FOURCC('C', 'U', 'T', ' '),
+    kXBM      = OD_FOURCC('X', 'B', 'M', ' '),
+    kXPM      = OD_FOURCC('X', 'P', 'M', ' '),
+    kDDS      = OD_FOURCC('D', 'D', 'S', ' '),
+    kGIF      = OD_FOURCC('G', 'I', 'F', ' '),
+    kHDR      = OD_FOURCC('H', 'D', 'R', ' '),
+    kFAXG3    = OD_FOURCC('F', 'X', 'G', '3'),
+    kSGI      = OD_FOURCC('S', 'G', 'I', ' '),
+    kEXR      = OD_FOURCC('E', 'X', 'R', ' '),
+    kJ2K      = OD_FOURCC('J', '2', 'K', ' '),
+    kJP2      = OD_FOURCC('J', 'P', '2', ' '),
+    kPFM      = OD_FOURCC('P', 'F', 'M', ' '),
+    kPICT     = OD_FOURCC('P', 'I', 'C', 'T'),
+    kRAW      = OD_FOURCC('R', 'A', 'W', ' ')
+  }; 
+
+  // Loading flags
+  enum LoadFlags
+  {
+    // Specify loading format explicitly
+    kLoadFmt        = OD_FOURCC('F', 'M', 'T', ' '),
+    // Avoids post-reorientation of TIFF format images
+    kNoTIFFRotation = OD_FOURCC('N', 'T', 'F', 'R')
+  };
+
+  // Saving flags
+  enum SaveFlags
+  {
+    // Specify palette index of transparent color (-1 - by default)
+    kTransparentColor = OD_FOURCC('T', 'C', 'L', 'R'),
+
+    // Jpeg compression quality (default depends from implementation)
+    kJpegQuality = OD_FOURCC('J', 'Q', 'T', 'Y'),
+
+    // Tiff compression format (no compression by default)
+    kTiffCompression = OD_FOURCC('T', 'C', 'M', 'P'),
+    kTiffCompressionDeflate = OD_FOURCC('Z', 'I', 'P', ' '),
+    kTiffCompressionLzw = OD_FOURCC('L', 'Z', 'W', ' '),
+    kTiffCompressionJpeg = OD_FOURCC('J', 'P', 'E', 'G'),
+    kTiffCompressionCCITTFax3 = OD_FOURCC('F', 'A', 'X', '3'),
+    kTiffCompressionCCITTFax4 = OD_FOURCC('F', 'A', 'X', '4'),
+    kTiffCompressionEmbedded = OD_FOURCC('E', 'M', 'B', 'D'), // ODA extension for IbEnabler, actually it is CCITFax4 compression
+
+    //dithering flag
+    kDithering = OD_FOURCC('D', 'I', 'T', 'H'),
+    kDitheringFS = OD_FOURCC('D', 'T', 'F', 'S'), // Floyd & Steinberg error diffusion
+    kDitheringBayer4x4 = OD_FOURCC('B', 'Y', 'R', '4'), // Bayer ordered dispersed dot dithering (order 2 dithering matrix)
+    kDitheringBayer8x8 = OD_FOURCC('B', 'Y', 'R', '8'), // Bayer ordered dispersed dot dithering (order 3 dithering matrix)
+    kDitheringBayer16x16 = OD_FOURCC('B', 'R', '1', '6'), // Bayer ordered dispersed dot dithering (order 4 dithering matrix)
+    kDitheringCluster6x6 = OD_FOURCC('C', 'L', 'R', '6'), // Ordered clustered dot dithering (order 3 - 6x6 matrix)
+    kDitheringCluster8x8 = OD_FOURCC('C', 'L', 'R', '8'), // Ordered clustered dot dithering (order 4 - 8x8 matrix)
+    kDitheringCluster16x16 = OD_FOURCC('C', 'L', '1', '6'), // Ordered clustered dot dithering (order 8 - 16x16 matrix)
+
+    //rescale flags
+    kRescale = OD_FOURCC('R', 'S', 'C', 'L'),
+    kRescaleBox = OD_FOURCC('B', 'O', 'X', ' '),             // Box, pulse, Fourier window, 1st order (constant) b-spline
+    kRescaleBicubic = OD_FOURCC('B', 'C', 'B', 'C'),         // Mitchell & Netravali's two-param cubic filter
+    kRescaleBilinear = OD_FOURCC('B', 'L', 'N', 'R'),        // Bilinear filter
+    kRescaleBspline = OD_FOURCC('B', 'S', 'P', 'L'),         // 4th order (cubic) b-spline
+    kRescaleCatmullrom = OD_FOURCC('C', 'T', 'M', 'L'),      // Catmull-Rom spline, Overhauser spline
+    kRescaleLanczos3 = OD_FOURCC('L', 'N', 'C', 'Z'),        // Lanczos3 filter
+    kRescaleWidth = OD_FOURCC('W', 'D', 'T', 'H'),
+    kRescaleHeight = OD_FOURCC('H', 'G', 'H', 'T')
+    //Note: rescaling converts bitional images to 8-bit images, so to keep the image bitional after rescale, the dithering flags must be in flag chain.
+
+  };
+
+  ODRX_DECLARE_MEMBERS(OdRxRasterServices);
+
+  /** \details
+      Loads the specified Raster Image file.
+      \param filename [in]  Filename of the Raster Image file to be read.
+      \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+      \param pFlagsChain [in]  Optional zero-terminated loading flag pairs array.
+
+      \remarks
+      The returned pointer is expected to be passed to OdGiViewportGeometry::rasterImageDc().
+  */
+  virtual OdGiRasterImagePtr loadRasterImage(const OdString &filename, const OdUInt32 *pFlagsChain = NULL) = 0;
+  virtual OdGiRasterImagePtr loadRasterImage(OdStreamBuf *pStreamBuf, const OdUInt32 *pFlagsChain = NULL) = 0;
+
+  /** \details
+      Create raster image using user-defined image implementation.
+      \param pImp [in]  User-defined raster image implementation.
+
+      \remarks
+      For default implementation always return null.
+  */
+  virtual OdGiRasterImagePtr createRasterImage(void *pImp);
+
+  /** \details
+      Saves specified Raster Image to the specified file.
+      \param rasterImage [in]  Raster image to be saved.
+      \param filename [in]  Filename of the Raster Image file to be written.
+      \param type [in]  Image format type to be written.
+      \param pFlagsChain [in]  Optional zero-terminated saving flag pairs array.
+  */
+  virtual bool saveRasterImage(const OdGiRasterImage* rasterImage, const OdString& filename,
+                               const OdUInt32 *pFlagsChain = NULL) = 0;
+  virtual bool saveRasterImage(const OdGiRasterImage* rasterImage, const OdString& filename,
+                               OdUInt32 type, const OdUInt32 *pFlagsChain = NULL) = 0;
+
+  /** \details
+      Try to convert raster image (RGB) to JPEG or other type.
+      \param pRaster [in]  Raster image to be converted.
+      \param type [in]  Image format type to be converted.
+      \param pStreamBuf [in]  Pointer to the StreamBuf object to which the data are to be stored.
+      \param pFlagsChain [in]  Optional zero-terminated saving flag pairs array.
+  */
+  virtual bool convertRasterImage(const OdGiRasterImage* pRaster, OdUInt32 type,
+                                  OdStreamBuf* pStreamBuf, const OdUInt32 *pFlagsChain = NULL) = 0;
+
+  /** \details
+      Try to convert raster image to other type.
+      \param pSrcStream [in]  Pointer to the StreamBuf object from which the data are to be converted.
+      \param pDstStream [in]  Pointer to the StreamBuf object to which the data are to be converted.
+      \param type [in]  Image format type to be converted.
+      \param pFlagsChainSrc [in]  Optional zero-terminated loading flag pairs array.
+      \param pFlagsChainDst [in]  Optional zero-terminated saving flag pairs array.
+  */
+  virtual bool convertRasterImage(OdStreamBuf* pSrcStream, OdStreamBuf* pDstStream, OdUInt32 type,
+                                  const OdUInt32 *pFlagsChainSrc = NULL, const OdUInt32 *pFlagsChainDst = NULL) = 0;
+
+  /** \details
+      Returns array of supported image format types.
+  */
+  virtual OdUInt32Array getRasterImageTypes() const = 0;
+
+  /** \details
+      Checks does image format type is supported.
+      \param type [in]  Image format type to be checked.
+  */
+  virtual bool isRasterImageTypeSupported(OdUInt32 type) const;
+
+  /** \details
+      Get file extension and filter name by type.
+      \param type [in]  Image format type to be formatted.
+      \param psFilterName [out]  Output filter name (can be Null).
+  */
+  virtual OdString mapTypeToExtension(OdUInt32 type, OdString* psFilterName) const = 0;
+
+  /** \details
+      Get image format type by file extension.
+      \param extension [in]  File extension.
+  */
+  virtual OdUInt32 mapExtensionToType(const OdString& extension) const = 0;
+
+  /** \details
+      Try to detect image format type from input stream.
+      \param filename [in]  Filename of the Raster Image file to be checked.
+      \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be checked.
+  */
+  virtual OdUInt32 getImageFormat(const OdString &filename) const = 0;
+  virtual OdUInt32 getImageFormat(OdStreamBuf* pStreamBuf) const = 0;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxRasterServices object pointers.
+*/
+typedef OdSmartPtr<OdRxRasterServices> OdRxRasterServicesPtr;
+
+#include "TD_PackPop.h"
+
+#endif // __OD_RASTER_MODULE__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSysRegistry.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSysRegistry.h
new file mode 100755
index 0000000..d8ecdb4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSysRegistry.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODRXSYSREGISTRY_H_INC_
+#define _ODRXSYSREGISTRY_H_INC_
+
+
+#include "RxDictionary.h"
+
+FIRSTDLL_EXPORT OdRxDictionary* odrxSysRegistry();
+
+#endif //#ifndef _ODRXSYSREGISTRY_H_INC_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSystemServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSystemServices.h
new file mode 100755
index 0000000..5ae4342
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxSystemServices.h
@@ -0,0 +1,387 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _ODRXSYSTEMSERVICES_INCLUDED_
+#define _ODRXSYSTEMSERVICES_INCLUDED_
+
+#include <stdarg.h>
+
+#include "RxObject.h"
+#include "OdStreamBuf.h"
+#include "OdCodePage.h"
+#if defined(_DEBUG) && defined(_WIN32)
+#define STL_USING_VECTOR
+#include "OdaSTL.h"
+#endif
+
+class OdTimeStamp;
+class OdRxModule;
+class OdRxDictionary;
+typedef OdSmartPtr<OdRxDictionary> OdRxDictionaryPtr;
+
+#include "TD_PackPush.h"
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace Oda
+{
+  ///////////////// FILE SYSTEM SERVICES //////////////////
+
+
+  enum FileAccessMode   // Access
+  {
+    kFileRead     = (long)
+                    0x80000000,   // Read access. Use kFileRead | kFileWrite for read/write access.
+    kFileWrite    = 0x40000000,   // Write access. Use kFileRead | kFileWrite for read/write access.
+    kFileTmp      = 0x20000000,   // hint to use FILE_ATTRIBUTE_TEMPORARY  for 'FlagsAndAttributes'
+    kFileDelete   = 0x10000000    // hint to use FILE_FLAG_DELETE_ON_CLOSE for 'FlagsAndAttributes'
+  };
+
+  enum FileShareMode
+  {
+    kShareDenyReadWrite = 0x10, // deny read/write mode
+    kShareDenyWrite     = 0x20, // deny write mode
+    kShareDenyRead      = 0x30, // deny read mode
+    kShareDenyNo        = 0x40  // deny none mode
+  };
+
+
+  enum FileCreationDisposition
+  {
+    kCreateNew        = 1,  // Creates a new file; fails if the specified file already exists.
+    kCreateAlways     = 2,  // Creates a new file; overwrites any existing file.
+    kOpenExisting     = 3,  // Opens the file; fails if the file does not exist.
+    kOpenAlways       = 4,  // Opens the file; creates the file if it does not exist.
+    kTruncateExisting = 5   // Truncates the file; fails if the file does not exist. The file must be open at least kFileWrite.
+  };
+}
+
+/** \details
+    This class implements OdError objects with access to the Result codes and filenames
+    of the objects related to the errors.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError_FileException : public OdError
+{
+public:
+  /** \param code [in]  Result code.
+    \param filename [in]  Filename.
+  */
+  OdError_FileException(OdResult code, const OdString& filename);
+  /** \details
+    Returns the filename of this Error object.
+  */
+  OdString getFileName() const;
+};
+
+/** \details
+    This class implements FileException object with a Result code of eFileNotFound,
+    and the filename of the object related to the error.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError_FileNotFound : public OdError_FileException
+{
+public:
+  /** \param filename [in]  Filename.
+  */
+  OdError_FileNotFound(const OdString& filename);
+};
+
+/** \details
+    This class implements FileException object with a Result code of eFileException,
+    and the filename of the object related to the error.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError_CantOpenFile : public OdError_FileException
+{
+public:
+  /** \param filename [in]  Filename.
+  */
+  OdError_CantOpenFile(const OdString& filename);
+};
+
+/** \details
+    This class implements FileException object with a Result code of eFileWriteError,
+    and the filename of the object related to the error.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError_FileWriteError : public OdError_FileException
+{
+public:
+  /** \param filename [in]  Filename.
+  */
+  OdError_FileWriteError(const OdString& filename);
+};
+
+/** \details
+    This class implements OdError objects with Result codes of eInvalidIndex.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError_InvalidIndex : public OdError
+{
+public:
+  OdError_InvalidIndex();
+};
+
+/** \details
+    This class implements OdError objects with Result codes of eInvalidKey.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError_InvalidKey: public OdError
+{
+public:
+  OdError_InvalidKey();
+};
+
+
+/** \details
+    This class is the base class for classes that provide platform-dependent file operations for
+    Teigha.
+    
+    Library: TD_Root
+    
+    <group OdRx_Classes>
+*/
+class FIRSTDLL_EXPORT OdRxSystemServices : public OdRxObject
+{
+public:
+
+  OdRxSystemServices()
+  {
+#if defined _WIN32_WCE
+    srand(GetTickCount());
+#else
+    Od_srand((unsigned int) time(0));
+#endif
+  }
+  ///////////////// FILE SYSTEM SERVICES //////////////////
+
+  /** \details
+    Creates and/or opens the specified file.
+    \param filename [in]  Filename.
+    \param accessMode [in]  Access mode.
+    \param shareMode [in]  Share mode.
+    \param creationDisposition [in]  Creation disposition.
+    
+    \remarks
+    Returns a SmartPointer to an OdStreamBuf object for the file. 
+    
+    accessMode must be a combination of one or more of the following:
+    
+    <table>
+    Name                Value          Description
+    Oda::kFileRead      0x80000000     Read access.
+    Oda::kFileWrite     0x40000000     Write access.
+    </table>
+    
+    shareMode must be one of the following:
+    
+    <table>
+    Name                         Value       Description
+    Oda::kShareDenyReadWrite     0x10        deny read/write mode
+    Oda::kShareDenyWrite         0x20        deny write mode
+    Oda::kShareDenyRead          0x30        deny read mode
+    Oda::kShareDenyNo            0x40        deny none mode
+    </table>
+
+    Creation disposition must be one of the following:
+    
+    <table>
+    Name                         Value     Description
+    Oda::kCreateNew              1         Creates a new file; fails if the specified file already exists.
+    Oda::kCreateAlways           2         Creates a new file; overwrites any existing file.
+    Oda::kOpenExisting           3         Opens the file; fails if the file does not exist.
+    Oda::kOpenAlways             4         Opens the file; creates the file if it does not exist.
+    Oda::kTruncateExisting       5         Truncates the file; fails if the file does not exist. The file must be open at least Oda::kFileWrite.
+    </table>
+  */
+  virtual OdStreamBufPtr createFile(
+    const OdString& filename,                    
+    Oda::FileAccessMode accessMode = Oda::kFileRead,
+    Oda::FileShareMode  shareMode = Oda::kShareDenyNo,                          
+    Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting) = 0;
+
+  /** \details
+    Returns true if and only if the specified file can be accessed in the specified mode.
+
+    \param filename [in]  Filename.
+    \param accessMode [in]  Access mode.
+    
+    \remarks
+    accessMode must be a combination of one or more of the following:
+    
+    <table>
+    Name                Value          Description
+    ..                  0              File exists.
+    Oda::kFileRead      0x80000000     Read access.
+    Oda::kFileWrite     0x40000000     Write access.
+    </table>
+
+  */
+  virtual bool accessFile(const OdString& filename, int accessMode) = 0;
+
+  /** \details
+    Returns the creation time of the specified file.
+    \param filename [in]  Filename.
+    
+    \remarks
+    On most platforms, this function will be implemented with the stat function (stat::st_ctime).
+  */
+  virtual OdInt64 getFileCTime(const OdString& filename) = 0;
+
+  /** \details
+    Returns the modification time of the specified file.
+    \param filename [in]  Filename.
+    
+    \remarks
+    On most platforms, this function will be implemented with the stat function (stat::st_mtime).
+  */
+  virtual OdInt64 getFileMTime(const OdString& filename) = 0;
+
+  /** \details
+    Returns the size of the specified file.
+    \param filename [in]  Filename.
+    
+    \remarks
+    On most platforms, this function will be implemented with the stat function (stat::st_size).
+  */
+  virtual OdInt64 getFileSize(const OdString& filename) = 0;
+
+
+  /** \details
+    Returns a message string formatted using a vsprintf-style format string and argument list.
+    \param formatID [in]  String resource identifier containing the format string. 
+    \param argList [in]  Argument list.   
+  */
+  virtual OdString formatMessage(unsigned int formatId, va_list* argList= 0) = 0;
+
+  /** \details
+    Assigns a value to this String object using a printf-style format string and arguments.
+    \param formatID [in]  String resource identifier containing the format string. 
+    \remarks
+    Returns a reference to this String Object.
+  */
+  virtual OdString formatMsg(unsigned int formatId, ...);
+
+  /** \details
+    Returns the system code page.
+  */
+  virtual OdCodePageId systemCodePage() const = 0;
+  
+  /** \details
+    Returns a newly generated Globally Unique IDentifier (GUID) for this SystemServices object.
+  */
+  virtual OdString createGuid();
+
+  /** \details
+    Loads the specified physical (platform-dependent) module.
+    
+    \remarks
+    Appends the appropriate version suffix onto the supplied module name.
+    Returns the abstract (platform independent) module object,    
+    which represents module functionality in Teigha.
+
+    \param moduleFileName [in]  Module filename to load.
+    \param silent [in]  If true, no load status message will be printed.
+  */
+  virtual OdRxModule* loadModule(const OdString& moduleFileName, bool silent);
+
+  /** \details
+    Unloads the specified physical (platform-dependent) module.
+
+    \param pModuleObj [in]  Pointer to the module object to be unloaded.
+  */
+  virtual void unloadModule(OdRxModule* pModuleObj);
+
+  /** \details
+    Returns the filename associated with the specified application name.
+
+    \param applicationName [in]  TX application name.
+  */
+  virtual OdString findModule(const OdString& applicationName);
+
+  /** \details
+    Displays in some manner the specified warning message.
+    
+    \param warnVisGroup [in]  Group of warning message visibility (always visible if it is an empty)
+    \param message [in]  Warning message.
+  */
+  virtual void warning(const OdString& message);
+  virtual void warning(const char* warnVisGroup, const OdString& message);
+
+  /** \details
+    Loads the specified physical (platform-dependent) module.
+
+    \remarks
+    Returns the abstract (platform independent) module object,    
+    which represents module functionality in Teigha.
+
+    \param moduleFileName [in]  Module filename to load.
+    \param silent [in]  If true, no load status message will be printed.
+  */
+  static OdRxModule* loadModuleLib(const OdString& moduleFileName, bool silent);
+
+  /** \details
+  Inits/Uninits the modeler library (platform-dependent) module.
+
+  \remarks
+  Should return eOk, if (un)initialization is implemented inside (un)initModelerLibrary.
+  Or eNotImplemented if default module (un)initialization required.
+
+  \note
+   Used for custom initialization/uninitialization of Spatial ACIS library.
+  */
+  virtual OdResult initModelerLibrary(OdRxDictionary *pDict);
+  virtual OdResult uninitModelerLibrary(OdRxDictionary *pDict);
+
+#if defined(_DEBUG) && defined(_WIN32)
+  static void dontFreeLibrary(std::vector<HMODULE>* notFreedDlls) { s_notFreedDlls = notFreedDlls; }
+private:
+  FIRSTDLL_EXPORT_STATIC static std::vector<HMODULE>* s_notFreedDlls;
+#endif
+};
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxSystemServices object pointers.
+*/
+typedef OdSmartPtr<OdRxSystemServices> OdRxSystemServicesPtr;
+
+FIRSTDLL_EXPORT OdRxSystemServices* odrxSystemServices();
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _ODRXSYSTEMSERVICES_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxThreadPoolService.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxThreadPoolService.h
new file mode 100755
index 0000000..8f30c85
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxThreadPoolService.h
@@ -0,0 +1,820 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODRXTHREADPOOLSERVICE_INCLUDED_
+#define _ODRXTHREADPOOLSERVICE_INCLUDED_ /* { Secret } **/
+
+#include "TD_PackPush.h"
+
+#include "RxModule.h"
+#include "ThreadsCounter.h"
+#include "OdArray.h"
+#include "StaticRxObject.h"
+
+#include <algorithm>
+
+class OdRxThreadPoolService;
+
+typedef ptrdiff_t OdApcParamType;
+
+typedef void (*OdApcEntryPointVoidParam)( OdApcParamType parameter );
+
+typedef void (*OdApcEntryPointRxObjParam)( OdRxObject* parameter );
+
+/** \details
+    This interface represents APC thread object.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class ODRX_ABSTRACT OdApcThread : public OdRxObject {
+public:
+  /** \details
+      Execute atomic portion of code encapsulated as OdApcEntryPointVoidParam and returns immediately.
+      \param ep [in]  Function pointer to execute.
+      \param parameter [in]  Argument which will be passed into executed function.
+  */
+  virtual void asyncProcCall( OdApcEntryPointVoidParam ep, OdApcParamType parameter ) = 0;
+
+  /** \details
+      Execute atomic portion of code encapsulated as OdApcEntryPointRxObjParam and returns immediately.
+      \param ep [in]  Function pointer to execute.
+      \param parameter [in]  Argument which will be passed into executed function.
+  */
+  virtual void asyncProcCall( OdApcEntryPointRxObjParam ep, OdRxObject* parameter ) = 0;
+
+  /** \details
+      Waits for completion of function execution in the current thread.
+  */
+  virtual void wait() = 0;
+
+  /** \details
+      Returns thread's unique system identifier.
+  */
+  virtual unsigned int getId() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdApcThread object pointers.
+*/
+typedef OdSmartPtr<OdApcThread> OdApcThreadPtr;
+
+
+/** \details
+    This interface represents client's atomic portion of code to execute via asynchronous call.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class ODRX_ABSTRACT OdApcAtom : public OdRxObject {
+public:
+  /** \details
+      Entry point for parallel thread.
+  */
+  virtual void apcEntryPoint( OdRxObject* pMessage ) {}
+
+  /** \details
+      Entry point for parallel thread.
+  */
+  virtual void apcEntryPoint( OdApcParamType pMessage ) {}
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdRxApcQueue object pointers.
+*/
+typedef OdSmartPtr<OdApcAtom> OdApcAtomPtr;
+
+
+/** \details
+    This interface represents APC object pool.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class OdApcObjectPool : public OdRxObject {
+public:
+  /** \details
+      Reserve specified number of objects in object pool.
+  */
+  virtual void reserve( OdUInt32 n ) = 0;
+
+  /** \details
+      Take object from object pool.
+  */
+  virtual OdRxObjectPtr take() = 0;
+
+  /** \details
+      Put object into object pool.
+  */
+  virtual void put( OdRxObject* pObj ) = 0;
+};
+
+typedef OdSmartPtr<OdApcObjectPool> OdApcObjectPoolPtr;
+
+
+class OdApcObjectPool;
+
+/** \details
+    This interface represents APC framework queue.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class ODRX_ABSTRACT OdApcQueue : public OdRxObject {
+public:
+  /** \details
+      Returns reference to the threading framework.
+  */
+  virtual OdRxThreadPoolService& framework() = 0;
+
+  /** \details
+      Sets reference to helper atom pool object, where every atom object is being put after APC call is returned.
+  */
+  virtual void setAtomPoolRef( OdApcObjectPool* pAtomPool ) = 0;
+
+  /** \details
+      Adds atomic portion of code encapsulated in OdRxAtom to queue and returns immediately.
+  */
+  virtual void addEntryPoint( OdApcAtom* pRecipient, OdRxObject* pMessage = 0 ) = 0;
+
+  /** \details
+      Adds atomic portion of code encapsulated in OdRxAtom to queue and returns immediately.
+  */
+  virtual void addEntryPoint( OdApcAtom* pRecipient, OdApcParamType pMessage ) = 0;
+
+  /** \details
+      Waits until all OdApcAtom objects in main and synchronized queues are processed.
+      \remarks
+      Calling thread also utilized to process queued asynchronous calls.
+  */
+  virtual void wait() = 0;
+
+  /** \details
+      Execute action in the main thread (doesn't depend on multithread queues count).
+      \param mtFunc [in]  Function to execute in the main thread.
+      \param pArg [in]  Function argument to execute in the main thread.
+      \remarks
+      Simply redirects call into threading framework.
+  */
+  virtual void executeMainThreadAction( MainThreadFunc mtFunc, void *pArg ) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdApcQueue object pointers.
+*/
+typedef OdSmartPtr<OdApcQueue> OdApcQueuePtr;
+
+
+/** \details
+    This interface represents APC framework gateway.
+    It provides functionality used for protecting data that
+    usually is being accessed by many reading threads and few writing threads.
+    It allows access to protecting data simultaneously by reading threads
+    until no thread gains write access.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class OdApcDataReadWriteDispatcher : public OdRxObject {
+public:
+  /** \details
+      A calling thread waits until area is unlocked and enters it to read only.
+  */
+  virtual void enter() = 0;
+
+  /** \details
+      A calling thread leaves protected area.
+  */
+  virtual void leave() = 0;
+
+  /** \details
+      1. Locks the entrance.
+      2. Waits until all threads exit read state.
+      3. Returns.
+      \remarks
+      IMPORTANT: If calling thread calls enter() without leave(), it should call lockFromInside() to be not deadlocked.
+  */
+  virtual void lock() = 0;
+
+  /** \details
+      Unlocks the entrance.
+  */
+  virtual void unlock() = 0;
+
+  /** \details
+      Locks the entrance while being in read state.
+      \remarks
+      To unlock protected area, the calling thread may either call unlock() or unlockFromInside() to stay in read state.
+  */
+  virtual void lockFromInside() = 0;
+
+  /** \details
+      Unlocks the entrance while staying in read state.
+  */
+  virtual void unlockFromInside() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdApcDataReadWriteDispatcher object pointers.
+*/
+typedef OdSmartPtr<OdApcDataReadWriteDispatcher> OdApcDataReadWriteDispatcherPtr;
+
+
+/** \details
+    This interface represents APC framework event.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class ODRX_ABSTRACT OdApcEvent : public OdRxObject {
+public:
+  /** \details
+      Sets the event object to the signaled state.
+  */
+  virtual void set() = 0;
+
+  /** \details
+      Sets the event object to the nonsignaled state.
+  */
+  virtual void reset() = 0;
+
+  /** \details
+      Waits until event object doesn't set to the signaled state.
+  */
+  virtual void wait() = 0;
+
+  /** \details
+      Waits until event object doesn't set to the signaled state and sets it to the nonsignaled state.
+  */
+  virtual void waitAndReset() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdApcEvent object pointers.
+*/
+typedef OdSmartPtr<OdApcEvent> OdApcEventPtr;
+
+
+/** \details
+    This interface represents APC framework check point.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class ODRX_ABSTRACT OdApcGateway : public OdRxObject {
+public:
+  /** \details
+      Controlled thread locks while passing through check point.
+      When specified number of controlled threads enters sync point, event is triggered.
+      See OdApcSyncPoint::wait().
+  */
+  virtual void lockByMain( OdUInt32 numThreads ) = 0;
+
+  /** \details
+      Controlled thread waits until number of threads specified by last call to lock() enters sync point.
+  */
+  virtual void waitByMain() = 0;
+
+  /** \details
+      Controlled thread unlocks while passing through sync point.
+  */
+  virtual void unlockByMain() = 0;
+
+  ///////////////////////////////////////////////////////////////////////////////
+  /** \details
+      Controlled thread enters sync point by calling this method.
+      Controlled thread is blocked inside this method until controlling thread calls unlock().
+  */
+  virtual void passBySecondary() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdApcGateway object pointers.
+*/
+typedef OdSmartPtr<OdApcGateway> OdApcGatewayPtr;
+
+/** \details
+    This interface represents APC framework looped gateway point.
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class ODRX_ABSTRACT OdApcLoopedGateway : public OdRxObject {
+public:
+
+  /** \details
+  */
+  virtual void init( OdUInt32 numThreads ) = 0;
+
+  /** \details
+      Controlled thread unlocks while passing through sync point.
+  */
+  virtual void passByMain() = 0;
+
+  /** \details
+      Controlled thread locks while passing through check point.
+      When specified number of controlled threads enters sync point, event is triggered.
+      See OdApcSyncPoint::wait().
+  */
+  virtual void waitByMain() = 0;
+
+  /** \details
+      Controlled thread waits until number of threads specified by last call to lock() enters sync point.
+  */
+  virtual void passByMainNoWait() = 0;
+
+  ///////////////////////////////////////////////////////////////////////////////
+  /** \details
+      Controlled thread enters sync point by calling this method.
+      Controlled thread is blocked inside this method until controlling thread calls unlock().
+  */
+  virtual void passBySecondary() = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class template for OdApcLoopedGateway object pointers.
+*/
+typedef OdSmartPtr<OdApcLoopedGateway> OdApcLoopedGatewayPtr;
+
+
+/** \details
+    Represents set of flags for new APC MtQueue construction.
+    Library: TD_Db
+    <group OdRx_Classes>
+*/
+enum OdApcMtQueueFlags
+{
+  kMtQueueNoFlags         = 0,        // Empty MtQueue flags.
+
+  kMtQueueForceNewThreads = (1 << 0), // Spawn new threads and add them to the pool if there are not enough free threads.
+  kMtQueueAllowExecByMain = (1 << 1), // Allow to use main thread for execution if there are no free threads.
+  kMtQueueForceTopLevel   = (1 << 2), // Make MtQueue top level even if other registered threads already run.
+
+  kMtQueueLastFlag        = kMtQueueForceTopLevel
+};
+
+
+/** \details
+    Library: TD_Db
+    <group OdRx_Classes>
+*/
+class FIRSTDLL_EXPORT ODRX_ABSTRACT OdRxThreadPoolService : public OdRxModule {
+public:
+  ODRX_DECLARE_MEMBERS(OdRxThreadPoolService);
+
+  /** \details
+      Returns number of logical CPUs installed on this machine.
+  */
+  virtual int numCPUs() const = 0;
+
+  /** \details
+      Returns number of physical CPU cores installed on this machine.
+  */
+  virtual int numPhysicalCores() const = 0;
+
+  /** \details
+      Returns number of all threads in the pool.
+  */
+  virtual int numThreads() const = 0;
+
+  /** \details
+      Returns number of currently available free threads in the pool.
+      \remarks
+      (numThreads() - numFreeThreads()) - count of currently running threads.
+  */
+  virtual int numFreeThreads() const = 0;
+
+  /** \details
+      Creates APC thread object.
+  */
+  virtual OdApcThreadPtr newThread() = 0;
+
+  /** \details
+      Creates synchronized (single thread) queue.
+      \remarks
+      Returned queue is processed by one thread at one moment.
+  */
+  virtual OdApcQueuePtr newSTQueue() = 0;
+
+  /** \details
+      Creates mutiple thread processing queue.
+      \param nThreadAttributes [in]  Set of the attributes for the threads to run.
+      \param numThreads [in]  Number of threads for this queue.
+      \param nFlags [in]  Set of flags for new MtQueue construction.
+      \remarks
+      If numThreads argument is zero, then the queue uses all available free threads.
+  */
+  virtual OdApcQueuePtr newMTQueue( unsigned nThreadAttributes = ThreadsCounter::kNoAttributes,
+                                    int numThreads = 0, OdUInt32 nFlags = kMtQueueNoFlags ) = 0;
+
+  /** \details
+      Creates APC object pool object.
+  */
+  virtual OdApcObjectPoolPtr newObjectPool() = 0;
+
+  /** \details
+      Creates APC event object.
+  */
+  virtual OdApcEventPtr newEvent() = 0;
+
+  /** \details
+      Creates APC gateway object.
+  */
+  virtual OdApcGatewayPtr newGateway() = 0;
+
+  /** \details
+      Creates APC sync point object.
+  */
+  virtual OdApcLoopedGatewayPtr newLoopedGateway() = 0;
+
+  /** \details
+      Execute action in the main thread (doesn't depend on multithread queues count).
+      \param mtFunc [in]  Function to execute in the main thread.
+      \param pArg [in]  Function argument to execute in the main thread.
+  */
+  virtual void executeMainThreadAction( MainThreadFunc mtFunc, void *pArg ) = 0;
+
+  /* Support for external threads manager */
+
+  /** \details
+      Register externally executed threads.
+      \param nThreads [in]  Count of threads in aThreads array.
+      \param aThreads [in]  Thread ID's array.
+      \param nThreadAttributes [in]  Set of attributes for running threads.
+      \remarks
+      If application starts own threads, uses system threads, or executes threads accessed by newThread()
+      without using Mt queue. it must register ID's of these threads to enable library Mt mode, initialization
+      of local heaps, etc.
+  */
+  virtual void registerExternalThreads( unsigned nThreads, const unsigned* aThreads, unsigned nThreadAttribs = ThreadsCounter::kNoAttributes ) = 0;
+  /** \details
+      Unregister externally executed threads.
+      \param nThreads [in]  Count of threads in aThreads array.
+      \param aThreads [in]  Thread ID's array.
+      \remarks
+      If application starts own threads, uses system threads, or executes threads accessed by newThread()
+      without using Mt queue, it must register ID's of these threads to enable library Mt mode, initialization
+      of local heaps and etc.
+  */
+  virtual void unregisterExternalThreads( unsigned nThreads, const unsigned* aThreads ) = 0;
+  /** \details
+      Inform Teigha that external thread started.
+  */
+  virtual void externalThreadStart() = 0;
+  /** \details
+      Inform Teigha that external thread stopped.
+  */
+  virtual void externalThreadStop() = 0;
+  /** \details
+      Setup function for provide execution in the external main thread.
+      \param execFunc [in]  Main thread execution function.
+  */
+  virtual void setExternalMainThreadFunc( ExecuteMainThreadFunc execFunc ) = 0;
+  /** \details
+      Returns current function for execution in the external main thread.
+  */
+  virtual ExecuteMainThreadFunc getExternalMainThreadFunc() const = 0;
+};
+
+typedef OdSmartPtr<OdRxThreadPoolService> OdRxThreadPoolServicePtr;
+
+
+/** \details
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class OdApcQueueHelper : public OdSmartPtr<OdApcQueue> {
+public:
+  OdApcQueueHelper( ) {}
+  OdApcQueueHelper( const OdApcQueue* pObject, OdRxObjMod m ) : OdSmartPtr<OdApcQueue>( pObject, m ) {}
+  OdApcQueueHelper( const OdApcQueue* pObject ) : OdSmartPtr<OdApcQueue>( pObject ) {}
+  OdApcQueueHelper( const OdRxObject* pObject ) : OdSmartPtr<OdApcQueue>( pObject ) {}
+  OdApcQueueHelper( OdRxObject* pObject, OdRxObjMod m ) : OdSmartPtr<OdApcQueue>( pObject, m ) {}
+  OdApcQueueHelper( const OdSmartPtr<OdApcQueue>& pObject ) : OdSmartPtr<OdApcQueue>( pObject ) {}
+  OdApcQueueHelper( const OdRxObjectPtr& pObject ) : OdSmartPtr<OdApcQueue>( pObject ) {}
+  OdApcQueueHelper( const OdBaseObjectPtr& pObject ) : OdSmartPtr<OdApcQueue>( pObject ) {}
+
+  using OdSmartPtr<OdApcQueue>::operator =;
+
+  void initST( OdRxThreadPoolService* pThreadPool ) {
+    *this = pThreadPool ? pThreadPool->newSTQueue().get() : 0;
+  }
+
+  void initMT( OdRxThreadPoolService* pThreadPool ) {
+    *this = pThreadPool ? pThreadPool->newMTQueue().get() : 0;
+  }
+
+  void call( OdApcAtom* pAction, OdRxObject* pParam = 0 ) {
+    if( m_pObject ) {
+      get()->addEntryPoint( pAction, pParam );
+    }
+    else {
+      pAction->apcEntryPoint( pParam );
+    }
+  }
+
+  void call( OdApcAtom* pAction, OdApcParamType param ) {
+    if( m_pObject ) {
+      get()->addEntryPoint( pAction, param );
+    }
+    else {
+      pAction->apcEntryPoint( param );
+    }
+  }
+
+  void setAtomPoolRef( OdApcObjectPool* pAtomPool ) {
+    if( m_pObject ) {
+      get()->setAtomPoolRef( pAtomPool );
+    }
+  }
+
+  void wait() {
+    if( m_pObject ) {
+      get()->wait();
+    }
+  }
+};
+
+
+/** \details
+    Library: TD_Db
+    <group OdApc_Classes>
+class OdApcDataReadWriteDispatcherHelper : public OdSmartPtr<OdApcDataReadWriteDispatcher> {
+public:
+  OdApcDataReadWriteDispatcherHelper( ) {}
+  OdApcDataReadWriteDispatcherHelper( const OdApcDataReadWriteDispatcher* pObject, OdRxObjMod m ) : OdSmartPtr<OdApcDataReadWriteDispatcher>( pObject, m ) {}
+  OdApcDataReadWriteDispatcherHelper( const OdApcDataReadWriteDispatcher* pObject ) : OdSmartPtr<OdApcDataReadWriteDispatcher>( pObject ) {}
+  OdApcDataReadWriteDispatcherHelper( const OdRxObject* pObject ) : OdSmartPtr<OdApcDataReadWriteDispatcher>( pObject ) {}
+  OdApcDataReadWriteDispatcherHelper( OdRxObject* pObject, OdRxObjMod m ) : OdSmartPtr<OdApcDataReadWriteDispatcher>( pObject, m ) {}
+  OdApcDataReadWriteDispatcherHelper( const OdSmartPtr<OdApcDataReadWriteDispatcher>& pObject ) : OdSmartPtr<OdApcDataReadWriteDispatcher>( pObject ) {}
+  OdApcDataReadWriteDispatcherHelper( const OdRxObjectPtr& pObject ) : OdSmartPtr<OdApcDataReadWriteDispatcher>( pObject ) {}
+  OdApcDataReadWriteDispatcherHelper( const OdBaseObjectPtr& pObject ) : OdSmartPtr<OdApcDataReadWriteDispatcher>( pObject ) {}
+
+  using OdSmartPtr<OdApcDataReadWriteDispatcher>::operator =;
+
+  void init( OdRxThreadPoolService* pThreadPool ) {
+    *this = pThreadPool ? pThreadPool->newDataReadWriteDispatcher().get() : 0;
+  }
+
+  void enter() {
+    if( m_pObject ) {
+      get()->enter();
+    }
+  }
+
+  void leave() {
+    if( m_pObject ) {
+      get()->leave();
+    }
+  }
+
+  void lock() {
+    if( m_pObject ) {
+      get()->lock();
+    }
+  }
+
+  void unlock() {
+    if( m_pObject ) {
+      get()->unlock();
+    }
+  }
+
+  void lockFromInside() {
+    if( m_pObject ) {
+      get()->lockFromInside();
+    }
+  }
+
+  void unlockFromInside() {
+    if( m_pObject ) {
+      get()->unlockFromInside();
+    }
+  }
+};
+
+class OdReadWriteDispatcherAutoPass {
+public:
+  OdReadWriteDispatcherAutoPass( OdApcDataReadWriteDispatcherHelper& lock ) : m_lock( lock ) { m_lock.enter(); }
+  ~OdReadWriteDispatcherAutoPass() { m_lock.leave(); }
+private:
+  OdApcDataReadWriteDispatcherHelper& m_lock;
+};
+
+class OdReadWriteDispatcherAutoLock {
+public:
+  OdReadWriteDispatcherAutoLock( OdApcDataReadWriteDispatcherHelper& lock ) : m_lock( lock ) { m_lock.lock(); }
+  ~OdReadWriteDispatcherAutoLock() { m_lock.unlock(); }
+private:
+  OdApcDataReadWriteDispatcherHelper& m_lock;
+};
+
+class OdReadWriteDispatcherAutoLockFromInside {
+public:
+  OdReadWriteDispatcherAutoLockFromInside( OdApcDataReadWriteDispatcherHelper& lock ) : m_lock( lock ) { m_lock.lockFromInside(); }
+  ~OdReadWriteDispatcherAutoLockFromInside() { m_lock.unlockFromInside(); }
+private:
+  OdApcDataReadWriteDispatcherHelper& m_lock;
+};
+*/
+
+
+/** \details
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class OdApcQueueHelperArray : public OdArray<OdApcQueueHelper> {
+public:
+  void initST( int n, OdRxThreadPoolService* pTP ) {
+    resize( n );
+    if ( pTP ) {
+      for( int i=0; i<n; ++i ) {
+        setAt( i, pTP->newSTQueue() );
+      }
+    }
+  }
+  void wait() {
+    size_type n = size();
+    for( size_type i=0; i<n; ++i ) {
+      at( i ).wait();
+    }
+  }
+};
+
+
+/** \details
+    Library: TD_Db
+    <group OdApc_Classes>
+*/
+class ODRX_ABSTRACT OdAsyncForEachBase : public OdApcAtom {
+  void* sync_next( OdMutex* mutex, OdUInt32 threadIndex, OdUInt32& itemIndex ) {
+    OdMutexAutoLock lock( *mutex );
+    return next( threadIndex, itemIndex );
+  }
+protected:
+  virtual OdMutex* mutexForNext() = 0;
+
+  virtual void* next( OdUInt32 threadIndex, OdUInt32& itemIndex ) = 0;
+
+  virtual void doAction( OdUInt32 threadIndex, OdUInt32 itemIndex, void* pItem ) = 0;
+
+  virtual void apcEntryPoint( OdApcParamType threadIndex ) {
+    OdMutex* mutex = mutexForNext();
+    OdUInt32 itemIndex;
+    while( void* pItem = sync_next( mutex, (OdUInt32)threadIndex, itemIndex ) ) {
+      doAction( (OdUInt32)threadIndex, itemIndex, pItem );
+    }
+  }
+public:
+  void for_each( OdApcQueue* pQueue, OdUInt32 nThreads = 0 ) {
+    if ( pQueue!=0 ) {
+      OdUInt32 n = nThreads==0 ? pQueue->framework().numCPUs() : nThreads;
+      if( n > 1 ) {
+        while( --n ) {
+          pQueue->addEntryPoint( this, (OdApcParamType)n );
+        }
+        apcEntryPoint( (OdApcParamType)n );
+        pQueue->wait();
+        return;
+      }
+    }
+    apcEntryPoint( 0 );
+  }
+};
+
+/** <group OdApc_Classes>
+*/
+template< class It, class Fn >
+class OdAsyncForEach : public OdStaticRxObject<OdApcAtom> {
+  OdMutex                 m_mutex;
+  It                      m_cur, m_last;
+  Fn                      m_fn;
+
+  bool next( It& cur ) {
+    OdMutexAutoLock lock( m_mutex );
+    if ( m_cur < m_last ) {
+      cur = m_cur;
+      ++m_cur;
+      return true;
+    }
+    return false;
+  }
+
+  void apcEntryPoint( OdRxObject* ) {
+    It cur;
+    if( next( cur ) ) {
+      do {
+        m_fn( *cur );
+      }
+      while( next( cur ) );
+    }
+  }
+public:
+  void for_each( OdApcQueue* pQueue, It first, It last, Fn fn ) {
+    unsigned long n = last-first;
+    if( pQueue && n>1 ) {
+      m_cur = first;
+      m_last = last;
+      m_fn = fn;
+
+      unsigned long numCPUs = pQueue->framework().numCPUs();
+      n = ( n < numCPUs ) ? n : numCPUs;
+      while( n-- ) {
+        pQueue->addEntryPoint( this );
+      }
+      pQueue->wait();
+    }
+    else {
+      std::for_each( first, last, fn );
+    }
+  }
+
+};
+
+template< class It, class Fn >
+void od_async_for_each( OdApcQueue* pQueue, It first, It last, Fn fn ) {
+  ODA_ASSERT_ONCE( first <= last );
+  if( first < last ) {
+    OdAsyncForEach< It, Fn >().for_each( pQueue, first, last, fn );
+  }
+}
+/** <group !!RECORDS_TD_APIRef>
+*/
+template< class TObject >
+struct OdApcObjectPoolHelperDummyInitFn {
+  void operator () ( TObject& ) const {
+    // does nothing
+  }
+};
+
+/** <group OdApc_Classes>
+*/
+template< class TObject, class TInitFn = OdApcObjectPoolHelperDummyInitFn<TObject> >
+class OdApcObjectPoolHelper : public OdApcObjectPoolPtr {
+  TObject* m_pEntries;
+  OdUInt32 m_nCount;
+public:
+  OdApcObjectPoolHelper() : m_pEntries( NULL ), m_nCount(0) {}
+  ~OdApcObjectPoolHelper() { release(); ::delete [] m_pEntries; m_pEntries = NULL; m_nCount=0; }
+  void init( OdRxThreadPoolService* pTP, int n = 0, const TInitFn* pInitFn = 0 ) {
+    if ( pTP ) {
+      if( n==0 ) {
+        n = pTP->numCPUs();
+      }
+      m_nCount = n;
+      m_pEntries = ::new TObject[n];
+      (*(OdApcObjectPoolPtr*)this) = pTP->newObjectPool();
+      while( --n ) {
+        TObject& obj = m_pEntries[ n ];
+        if( pInitFn ) {
+          (*pInitFn)( obj );
+        }
+        get()->put( &obj );
+      }
+    }
+    else {
+      m_nCount = 1;
+      m_pEntries = ::new TObject[1];
+      if( pInitFn ) {
+        (*pInitFn)( *m_pEntries );
+      }
+    }
+  }
+
+  TObject* take() {
+    if( m_pObject ) {
+      return static_cast<TObject*>( get()->take().get() );
+    }
+    return m_pEntries;
+  }
+
+  OdUInt32 size() const {
+    return m_nCount;
+  }
+
+  TObject& at( OdUInt32 i ) const {
+    if( i < m_nCount ) {
+      return m_pEntries[i];
+    }
+    throw OdError_InvalidIndex();
+  }
+
+  operator OdApcObjectPool* () { return get(); }
+  operator const OdApcObjectPool* () const { return get(); }
+};
+
+#include "TD_PackPop.h"
+
+#endif //_ODRXTHREADPOOLSERVICE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariant.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariant.h
new file mode 100755
index 0000000..5f56553
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariant.h
@@ -0,0 +1,1157 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#if !defined(_ODVARIANT_H_INCLUDED_)
+#define _ODVARIANT_H_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "OdPlatformSettings.h"
+#include "RxObject.h"
+
+#include "StringArray.h"
+#include "BoolArray.h"
+#include "Int8Array.h"
+#include "Int16Array.h"
+#include "Int32Array.h"
+#include "Int64Array.h"
+#include "UInt8Array.h"
+#include "UInt16Array.h"
+#include "UInt32Array.h"
+#include "UInt64Array.h"
+#include "DoubleArray.h"
+#include "OdString.h"
+#include "OdAnsiString.h"
+
+/** \details
+    This class implements OdError objects with Result codes of eInvalidVariantType.
+    
+    Library: TD_Root
+    <group Error_Classes> 
+*/
+class FIRSTDLL_EXPORT OdError_InvalidVariantType : public OdError
+{
+public:
+  OdError_InvalidVariantType();
+};
+
+const int nOdVariantDataSize = 8;
+
+/** \details
+    This class implements Variant objects within Teigha.
+    Library: TD_Root
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdVariant
+{
+protected:
+  int m_type;
+  union   // Union is required to have proper data alignment which is important
+  {       // for some platforms
+    OdUInt8 uint8[nOdVariantDataSize];
+    double  dbl;
+    void* ptr;
+  } m_uData;
+  void* data() const {return (void*)m_uData.uint8;}
+
+  virtual void setVarType(int newType, int& type, void* data);
+public:
+  struct TypeFactory
+  {
+    virtual void construct(void* pData) const = 0;
+    virtual void destroy(void* pData) const = 0;
+  };
+  static const TypeFactory* typeFactory(int type);
+public:
+  typedef enum
+  {
+    kVoid         = 0x0000,
+    kString       = 0x0001,
+    kBool         = 0x0002,
+    kInt8         = 0x0003,
+    kUInt8        = 0x0003,
+    kInt16        = 0x0004,
+    kUInt16       = 0x0004,
+    kInt32        = 0x0005,
+    kUInt32       = 0x0005,
+    kInt64        = 0x0006,
+    kUInt64       = 0x0006,
+    kDouble       = 0x0007,
+    kWString      = 0x0008,
+    kAnsiString   = 0x0008,
+    kRxObjectPtr  = 0x0009,
+    kNextType     = 0x000A,
+    kByRef        = 0x0040,
+    kArray        = 0x0080
+  } Type;
+
+  OdVariant();
+  OdVariant(const OdVariant& val);
+  OdVariant& operator =(const OdVariant& val);
+  virtual ~OdVariant();
+
+  /** \details
+    Returns the type of this Variant object, including ByRef and Array flags.
+  */
+  int  varType() const { return m_type; }
+  /** \details
+    Returns the type of this Variant object, excluding ByRef and Array flags.
+  */
+  Type type()    const { return Type(m_type & (0x3F)); }
+  /** \details
+    Returns true if and only if this Variant object is an Array.
+  */
+  bool isArray() const { return (m_type & kArray)!=0; }
+  /** \details
+    Returns true if and only if this Variant object is ByRef (read/write).
+  */
+  bool isByRef() const { return (m_type & kByRef)!=0; }
+
+  OdVariant(const OdString& val);
+  OdVariant(const OdAnsiString& val);
+  OdVariant(const OdRxObjectPtr& val);
+  OdVariant(bool val);
+  OdVariant(OdInt8 val);
+  OdVariant(OdUInt8 val);
+  OdVariant(OdInt16 val);
+  OdVariant(OdUInt16 val);
+  OdVariant(OdInt32 val);
+  OdVariant(OdUInt32 val);
+  OdVariant(OdInt64 val);
+  OdVariant(OdUInt64 val);
+  OdVariant(double val);
+#ifdef OD_INTPTR_UNIQUE
+  OdVariant(OdIntPtr val);
+#endif
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdString object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdString& getString() const;
+
+  /** \details
+  Returns a reference to the value of this Variant object as an OdAnsiString object.
+  \note
+  No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdAnsiString& getAnsiString() const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdRxObjectPtr object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdRxObjectPtr& getRxObjectPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a bool object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  bool getBool()   const;
+
+  /** \details
+    Returns the value of this Variant object as an OdInt8 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt8 getInt8()   const;
+
+  /** \details
+    Returns the value of this Variant object as an OdUInt8 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt8 getUInt8()  const;
+
+  /** \details
+    Returns the value of this Variant object as an OdInt16 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt16 getInt16()  const;
+
+  /** \details
+    Returns the value of this Variant object as an OdUInt16 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt16 getUInt16() const;
+
+  /** \details
+    Returns the value of this Variant object as an OdInt32 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt32 getInt32()  const;
+
+  /** \details
+    Returns the value of this Variant object as an OdUInt32 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt32 getUInt32() const;
+
+  /** \details
+    Returns the value of this Variant object as an OdInt64 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt64 getInt64()  const;
+
+  /** \details
+    Returns the value of this Variant object as an OdUInt64 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt64 getUInt64() const;
+
+  /** \details
+    Returns the value of this Variant object as an OdIntPtr object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdIntPtr getIntPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as an double object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  double getDouble() const;
+
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdString object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdString* getStringPtr() const;
+
+  /** \details
+  Returns the value of this Variant object as a pointer to an OdAnsiString object.
+  \note
+  No check is made to determine that this Variant object is of the specified type.
+  */
+  OdAnsiString* getAnsiStringPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdRxObjectPtr object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdRxObjectPtr* getRxObjectPtrPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to a bool object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  bool* getBoolPtr()   const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt8 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt8* getInt8Ptr()   const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt8 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt8* getUInt8Ptr()  const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt16 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt16* getInt16Ptr()  const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt16 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt16* getUInt16Ptr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt32 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt32* getInt32Ptr()  const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt32 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt32* getUInt32Ptr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt64 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt64* getInt64Ptr()  const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt64 object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt64* getUInt64Ptr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an double object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  double* getDoublePtr() const;
+
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdStringArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdStringArray& getStringArray() const;
+
+  /** \details
+  Returns a reference to the value of this Variant object as an OdAnsiStringArray object.
+  \note
+  No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdAnsiStringArray& getAnsiStringArray() const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdRxObjectPtrArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdRxObjectPtrArray& getRxObjectPtrArray() const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdBoolArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdBoolArray& getBoolArray  () const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdInt8Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdInt8Array& getInt8Array  () const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdUInt8Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdUInt8Array& getUInt8Array () const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdInt16Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdInt16Array& getInt16Array () const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdUInt16Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdUInt16Array& getUInt16Array() const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdInt32Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdInt32Array& getInt32Array () const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdUInt32Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdUInt32Array& getUInt32Array() const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdInt64Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdInt64Array& getInt64Array () const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdUInt64Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdUInt64Array& getUInt64Array() const;
+
+  /** \details
+    Returns a reference to the value of this Variant object as an OdDoubleArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  const OdDoubleArray& getDoubleArray() const;
+
+  /** \details
+    Sets the type of this Variant object to OdStringArray.
+  */
+  OdStringArray& asStringArray();
+
+  /** \details
+  Sets the type of this Variant object to OdAnsiStringArray.
+
+  \remarks
+  Returns a reference to this Variant object.
+  */
+  OdAnsiStringArray& asAnsiStringArray();
+
+  /** \details
+    Sets the type of this Variant object to OdRxObjectPtrArray.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdRxObjectPtrArray& asRxObjectPtrArray();
+  
+  /** \details
+    Sets the type of this Variant object to OdBoolArray.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdBoolArray&   asBoolArray  ();
+  
+  /** \details
+    Sets the type of this Variant object to OdInt8Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdInt8Array&   asInt8Array  ();
+  
+  /** \details
+    Sets the type of this Variant object to OdUInt8Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdUInt8Array&  asUInt8Array ();
+  
+  /** \details
+    Sets the type of this Variant object to OdInt16Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdInt16Array&  asInt16Array ();
+  
+  /** \details
+    Sets the type of this Variant object to OdUInt16Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdUInt16Array& asUInt16Array();
+  
+  /** \details
+    Sets the type of this Variant object to OdInt32Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdInt32Array&  asInt32Array ();
+  
+  /** \details
+    Sets the type of this Variant object to OdUInt32Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdUInt32Array& asUInt32Array();
+  
+  /** \details
+    Sets the type of this Variant object to OdInt64Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdInt64Array&  asInt64Array ();
+  
+  /** \details
+    Sets the type of this Variant object to OdUInt64Array.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdUInt64Array& asUInt64Array();
+  
+  /** \details
+    Sets the type of this Variant object to OdDoubleArray.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdDoubleArray& asDoubleArray();
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdStringArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdStringArray* getStringArrayPtr() const;
+
+  /** \details
+  Returns the value of this Variant object as a pointer to an OdAnsiStringArray object.
+  \note
+  No check is made to determine that this Variant object is of the specified type.
+  */
+  OdAnsiStringArray* getAnsiStringArrayPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdRxObjectPtrArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdRxObjectPtrArray* getRxObjectPtrArrayPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdBoolArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdBoolArray* getBoolArrayPtr  () const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt8Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt8Array* getInt8ArrayPtr  () const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt8Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt8Array* getUInt8ArrayPtr () const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt16Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt16Array* getInt16ArrayPtr () const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt16Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt16Array* getUInt16ArrayPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt32Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt32Array* getInt32ArrayPtr () const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt32Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt32Array* getUInt32ArrayPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdInt64Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdInt64Array* getInt64ArrayPtr () const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdUInt64Array object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdUInt64Array* getUInt64ArrayPtr() const;
+
+  /** \details
+    Returns the value of this Variant object as a pointer to an OdDoubleArray object.
+    \note
+    No check is made to determine that this Variant object is of the specified type.
+  */
+  OdDoubleArray* getDoubleArrayPtr() const;
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+  */
+  OdVariant& setString(const OdString& val);
+
+  /** \details
+  Sets the value of this Variant object.
+
+  \param val [in]  Value.
+
+  \remarks
+  Returns a reference to this Variant object.
+  */
+  OdVariant& setAnsiString(const OdAnsiString& val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setRxObjectPtr( const OdRxObjectPtr& val );
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setBool  (bool val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt8  (OdInt8 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt8 (OdUInt8 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt16 (OdInt16 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt16(OdUInt16 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt32 (OdInt32 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt32(OdUInt32 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt64 (OdInt64 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt64(OdUInt64 val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setIntPtr (OdIntPtr val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setDouble(double val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setStringPtr(OdString* val);
+
+  /** \details
+  Sets the value of this Variant object.
+
+  \param val [in]  Value.
+
+  \remarks
+  Returns a reference to this Variant object.
+  */
+  OdVariant& setAnsiStringPtr(OdAnsiString* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setRxObjectPtrPtr(OdRxObjectPtr* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setBoolPtr  (bool* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt8Ptr  (OdInt8* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt8Ptr (OdUInt8* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt16Ptr (OdInt16* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt16Ptr(OdUInt16* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt32Ptr (OdInt32* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt32Ptr(OdUInt32* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt64Ptr (OdInt64* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt64Ptr(OdUInt64* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setDoublePtr(double* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setStringArray(const OdStringArray& val);
+
+  /** \details
+  Sets the value of this Variant object.
+
+  \param val [in]  Value.
+
+  \remarks
+  Returns a reference to this Variant object.
+  */
+  OdVariant& setAnsiStringArray(const OdAnsiStringArray& val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setRxObjectPtrArray(const OdRxObjectPtrArray& val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setBoolArray  (const OdBoolArray&   val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt8Array  (const OdInt8Array&   val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt8Array (const OdUInt8Array&  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt16Array (const OdInt16Array&  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt16Array(const OdUInt16Array& val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt32Array (const OdInt32Array&  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt32Array(const OdUInt32Array& val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt64Array (const OdInt64Array&  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt64Array(const OdUInt64Array& val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setDoubleArray(const OdDoubleArray& val);
+
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setStringArrayPtr(OdStringArray* val);
+
+  /** \details
+  Sets the value of this Variant object.
+
+  \param val [in]  Value.
+
+  \remarks
+  Returns a reference to this Variant object.
+  */
+  OdVariant& setAnsiStringArrayPtr(OdAnsiStringArray* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setRxObjectPtrArrayPtr(OdRxObjectPtrArray* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setBoolArrayPtr  (OdBoolArray*   val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt8ArrayPtr  (OdInt8Array*   val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt8ArrayPtr (OdUInt8Array*  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt16ArrayPtr (OdInt16Array*  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt16ArrayPtr(OdUInt16Array* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt32ArrayPtr (OdInt32Array*  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt32ArrayPtr(OdUInt32Array* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setInt64ArrayPtr (OdInt64Array*  val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setUInt64ArrayPtr(OdUInt64Array* val);
+
+  /** \details
+    Sets the value of this Variant object.
+    
+    \param val [in]  Value.
+    
+    \remarks
+    Returns a reference to this Variant object.
+  */
+  OdVariant& setDoubleArrayPtr(OdDoubleArray* val);
+};
+
+
+
+#include "TD_PackPop.h"
+
+#endif //_ODVARIANT_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariantValue.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariantValue.h
new file mode 100755
index 0000000..7e8e2a3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/RxVariantValue.h
@@ -0,0 +1,135 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _VARIANTVALUE_H_INCLUDED_
+#define _VARIANTVALUE_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "RxVariant.h"
+#include "RxObjectImpl.h"
+
+class OdRxVariant;
+typedef OdSmartPtr<OdRxVariant> OdRxVariantPtr;
+
+/** \details
+    This class implements Variant objects in an OdRx context. 
+    
+    \remarks
+    These objects are used to store data for OdRxVariantValue objects.
+    Library: TD_Db
+    <group OdRx_Classes> 
+*/
+class OdRxVariant : public OdRxObject, public OdVariant { };
+
+/** \details
+    This class implements Variant Value objects in an OdRx context. 
+   
+    Library: TD_Db
+    <group OdRx_Classes> 
+*/
+class OdRxVariantValue : public OdSmartPtr<OdRxVariant>
+{
+public:
+  /** \details
+    Assigns the specified OdRxVariant object to this RxVariantValue object.
+    \param pVariant [in]  Pointer to the Variant object.
+  */
+  void assign(const OdRxVariant* pVariant) { OdSmartPtr<OdRxVariant>::operator=(pVariant); }
+
+  /** \remarks
+    Constructors with pointer arguments assign the referenced objects to the new RxVariantValue object. 
+    
+    Constructors with value arguments create a new RxVariant object with the specified value,
+    and assign them the new RxVariantValue object.
+  */
+  OdRxVariantValue(const OdRxObject* pObject) : OdSmartPtr<OdRxVariant>(pObject) {}
+
+  OdRxVariantValue(const OdRxVariant* pVariant) : OdSmartPtr<OdRxVariant>(pVariant) {}
+
+#define ODRXVARVAL_CONSTR(type, setter) \
+  OdRxVariantValue(type value) \
+  { \
+    assign(OdRxObjectImpl<OdRxVariant>::createObject()); \
+    get()->setter(value); \
+  }
+  ODRXVARVAL_CONSTR(bool           , setBool)
+  ODRXVARVAL_CONSTR(OdUInt8        , setUInt8)
+  ODRXVARVAL_CONSTR(OdInt8         , setInt8)
+  ODRXVARVAL_CONSTR(OdUInt16       , setUInt16)
+  ODRXVARVAL_CONSTR(OdInt16        , setInt16)
+  ODRXVARVAL_CONSTR(OdUInt32       , setUInt32)
+  ODRXVARVAL_CONSTR(OdInt32        , setInt32)
+  ODRXVARVAL_CONSTR(OdUInt64       , setUInt64)
+  ODRXVARVAL_CONSTR(OdInt64        , setInt64)
+#ifdef OD_INTPTR_UNIQUE
+  ODRXVARVAL_CONSTR(OdIntPtr       , setIntPtr)
+#endif
+  ODRXVARVAL_CONSTR(double         , setDouble)
+  ODRXVARVAL_CONSTR(const OdString&, setString)
+  ODRXVARVAL_CONSTR(const OdAnsiString&, setAnsiString)
+  ODRXVARVAL_CONSTR(const OdStringArray&, setStringArray)
+  ODRXVARVAL_CONSTR(const OdRxObjectPtrArray&, setRxObjectPtrArray)
+  ODRXVARVAL_CONSTR(const OdDoubleArray&, setDoubleArray)
+#undef ODRXVARVAL_CONSTR
+
+  /** \remarks
+    Cast operators return the value of the OdRxVariant object referenced 
+    by this OdRxVariantValue object.
+  */
+#define ODRXVARVAL_IMPLICIT(type, getter) \
+  operator type() const \
+  { \
+    return get()->getter(); \
+  } \
+  operator type() \
+  { \
+    return get()->getter(); \
+  }
+  // #7196 : override OdSmartPtr<T>::operator bool() private member.
+  // #7196 : some compilers (MSVC) require non-const for all types if bool() member available.
+  ODRXVARVAL_IMPLICIT(bool    , getBool)
+  ODRXVARVAL_IMPLICIT(OdUInt8 , getUInt8)
+  ODRXVARVAL_IMPLICIT(OdUInt16, getUInt16)
+  ODRXVARVAL_IMPLICIT(OdUInt32, getUInt32)
+  ODRXVARVAL_IMPLICIT(OdUInt64, getUInt64)
+  ODRXVARVAL_IMPLICIT(OdInt8  , getInt8)
+  ODRXVARVAL_IMPLICIT(OdInt16 , getInt16)
+  ODRXVARVAL_IMPLICIT(OdInt32 , getInt32)
+  ODRXVARVAL_IMPLICIT(OdInt64 , getInt64)
+#ifdef OD_INTPTR_UNIQUE
+  ODRXVARVAL_IMPLICIT(OdIntPtr, getIntPtr)
+#endif
+  ODRXVARVAL_IMPLICIT(double  , getDouble)
+  ODRXVARVAL_IMPLICIT(OdString, getString)
+  ODRXVARVAL_IMPLICIT(OdAnsiString, getAnsiString)
+  ODRXVARVAL_IMPLICIT(OdStringArray, getStringArray)
+  ODRXVARVAL_IMPLICIT(OdRxObjectPtrArray, getRxObjectPtrArray)
+  ODRXVARVAL_IMPLICIT(OdDoubleArray, getDoubleArray)
+#undef ODRXVARVAL_IMPLICIT
+};
+
+#include "TD_PackPop.h"
+
+#endif //_VARIANTVALUE_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SSet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SSet.h
new file mode 100755
index 0000000..011363d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SSet.h
@@ -0,0 +1,251 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _SSET_H_
+#define _SSET_H_
+
+#include "OdPlatform.h"
+#include "DbExport.h"
+
+#include "Ge/GePoint3d.h"
+#include "DbBaseSubentId.h"
+
+/** \details
+    This class is the abstract base class for all selection methods.
+
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdDbSelectionMethod : public OdRxObject
+{
+protected:
+  OdDbSelectionMethod();
+public:
+  ODRX_DECLARE_MEMBERS(OdDbSelectionMethod);
+};
+
+typedef OdSmartPtr<OdDbSelectionMethod> OdDbSelectionMethodPtr;
+
+class OdGiViewport;
+
+/** \details
+
+    <group OdDb_Classes>
+*/
+class FIRSTDLL_EXPORT OdDbVisualSelection : public OdDbSelectionMethod
+{
+protected:
+  OdDbVisualSelection();
+public:
+  ODRX_DECLARE_MEMBERS(OdDbVisualSelection);
+
+  enum Mode
+  {
+    kPoint        = 0,
+    kBox          = 1,
+    kWindow       = 2,
+    kCrossing     = 3,
+    kFence        = 4,
+    kWPoly        = 5,
+    kCPoly        = 6
+  };
+  
+  enum SubentSelectionMode
+  {
+    kDisableSubents = 0,
+    kEnableSubents = 1
+  };
+
+  virtual OdDbStub* viewport() const = 0;
+  virtual OdGePoint3dArray points() const = 0;
+  virtual Mode mode() const = 0;
+};
+
+typedef OdSmartPtr<OdDbVisualSelection> OdDbVisualSelectionPtr;
+
+
+/** \details
+  This class implements iterators for OdSelectionSet objects.
+
+  \remarks
+
+  Instances are returned by OdSelectionSet::newIterator().
+
+  <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdSelectionSetIterator : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdSelectionSetIterator);
+  
+  virtual OdDbSelectionMethodPtr method() const = 0;
+
+  /** \details
+    Returns true if and only if the traversal by this Iterator object is complete.
+  */
+    virtual bool done() const = 0;
+
+  /** \details
+    Sets this Iterator object to reference the entry following the current entry.
+
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+  virtual bool next() = 0;
+
+  /** \details
+    Returns the number of subentities selected inside the current entity.
+    (analogous to acedSSSubentLength)
+
+    \remarks
+    Returns true if and only if not at the end of the list.
+  */
+  virtual OdUInt32 subentCount() = 0;
+
+  /** \details
+    Returns the given subentity path inside the current entity.
+    (analogous to acedSSSubentName)
+    \param i [in]  index of the subentity.
+    \param path [out]  Path to the subentity.
+
+    \remarks
+    Returns true if and only if "i" is valid index in the subentities array.
+  */
+  virtual bool getSubentity(OdUInt32 i, OdDbBaseFullSubentPath& path) = 0;
+
+  /** \details
+      Returns the GiDrawable ID at the current position specified by
+      this Iterator object.
+  */
+  virtual OdDbStub* id() const = 0;
+
+protected:
+  OdSelectionSetIterator();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdSelectionSetIterator object pointers.
+*/
+typedef OdSmartPtr<OdSelectionSetIterator>  OdSelectionSetIteratorPtr;
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdSelectionSet object pointers.
+*/
+typedef OdSmartPtr<class OdSelectionSet>  OdSelectionSetPtr;
+
+/** \details
+    This class represents Selection Sets in an Teigha application.
+
+    \remarks
+    Only entities from an OdDbDatabase object's ModelSpace or PaperSpace may be
+    added to a Selection Set.
+
+    <group OdDb_Classes>
+*/
+class ODRX_ABSTRACT FIRSTDLL_EXPORT OdSelectionSet : public OdRxObject
+{
+protected:
+  OdSelectionSet();
+public:
+  ODRX_DECLARE_MEMBERS(OdSelectionSet);
+
+  virtual const OdRxObject* baseDatabase() const = 0;
+
+  /** \details
+    Returns an Iterator object that provides access to the entities in this Selection Set.
+  */
+  virtual OdSelectionSetIteratorPtr newIterator() const = 0;
+
+  // operations on the selection set 
+
+  /** \details
+    Returns the number of entities in this group.
+  */
+  virtual OdUInt32 numEntities() const = 0;
+
+  /** \details
+    Appends the specified entity to this SelectionSet object.  
+
+    \param entityId [in]  Object ID of the OdDbEntity. 
+    \param method [in] Selection method to associate with object
+  */
+  virtual void append(OdDbStub* entityId, OdDbSelectionMethod* pMethod = 0) = 0;
+
+  /** \details
+    Appends the specified subentity to this SelectionSet object.  
+
+    \param subent [in]  Subentity path to append. 
+  */
+  virtual void append(const OdDbBaseFullSubentPath& subent, OdDbSelectionMethod* pMethod = 0) = 0;
+
+  /** \details
+    Appends the specified entity to this SelectionSet object.  
+
+    \param pSSet [in]  Other selection set to copy entities from. 
+  */
+  virtual void append(const OdSelectionSet* pSSet) = 0;
+
+  /** \details
+    Removes the specified entity from this SelectionSet object.  
+
+    \param entityId [in]  Object ID of the OdDbEntity. 
+  */
+  virtual void remove(OdDbStub* entityId) = 0;
+
+  /** \details
+    Removes the specified subentity from this SelectionSet object.  
+
+    \param subent [in]  Subentity path  to remove. 
+  */
+  virtual void remove(const OdDbBaseFullSubentPath& subent) = 0;
+
+  /** \details
+    Removes the specified entity from this SelectionSet object.  
+
+    \param pSSet [in]  Object ID of the OdDbEntity. 
+  */
+  virtual void remove(const OdSelectionSet* pSSet) = 0;
+
+  /** \details
+    Returns true if and only if the specified entity is a member
+    of this SelectionSet object.
+    \param entityId [in]  Object ID of the OdDbEntity. 
+  */
+  virtual bool isMember(OdDbStub* entityId) const = 0;
+
+  /** \details
+    Returns true if and only if the specified subentity is a member
+    of this SelectionSet object.
+    \param entityId [in]  Subentity path. 
+  */
+  virtual bool isMember(const OdDbBaseFullSubentPath& subent) const = 0;
+
+  virtual OdDbSelectionMethodPtr method(OdDbStub* entityId) const = 0;
+
+  /** \details
+    Removes all members of this SelectionSet object.
+  */
+  virtual void clear() = 0;
+};
+
+#endif //_SSET_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SaveState.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SaveState.h
new file mode 100755
index 0000000..bc0ee9c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SaveState.h
@@ -0,0 +1,122 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODSAVESTATE_INCLUDED_
+#define _ODSAVESTATE_INCLUDED_
+
+#include "TD_PackPush.h"
+
+/** \details
+    This template class implements SaveState objects which save and restore variables.
+    
+    \remarks
+    Variables are saved locally on construction of OdSaveState objects.
+    Variables are restored when OdSaveState objects go out of scope.
+  
+    <group Other_Classes>
+*/
+template <class T>
+class OdSaveState
+{
+  T&  m_val;        // Variable
+  T   m_oldValue;   // Old value
+public:
+  /** \param variable [in]  Variable to save.
+  */
+  OdSaveState( T& variable )
+    : m_val( variable )
+  {
+    m_oldValue = m_val;
+  }
+  /** \param newValue [in]  New value for variable.
+  */
+  OdSaveState( T& variable, const T& newValue )
+    : m_val( variable )
+  {
+    m_oldValue = m_val;
+    m_val = newValue;
+  }
+  ~OdSaveState()
+  {
+    m_val = m_oldValue;
+  }
+  /** \details
+    Returns the saved value of the variable.
+  */
+  operator const T&() const
+  {
+    return m_oldValue;
+  }
+};
+
+#ifdef __hpux
+#define OdSaveStateFlagDef(type, flag, name, flags) \
+  const type _##name##Flag = flag; \
+  OdSaveStateFlagImpl<type, _##name##Flag> name(flags)
+#define OdSaveStateFlag(type, flag, name, flags, newVal) \
+  const type _##name##Flag = flag; \
+  OdSaveStateFlagImpl<type, _##name##Flag> name(flags, newVal)
+#else
+#define OdSaveStateFlagDef(type, flag, name, flags) \
+  OdSaveStateFlagImpl<type, flag> name(flags)
+#define OdSaveStateFlag(type, flag, name, flags, newVal) \
+  OdSaveStateFlagImpl<type, flag> name(flags, newVal)
+#endif
+
+/** \details
+            
+    <group Other_Classes> 
+*/
+template <class T, T flag>
+class OdSaveStateFlagImpl
+{
+  T&   m_val;       // Variable
+  bool m_oldValue;  // Old flag value
+public:
+  /** \param variable [in]  Variable to save.
+  */
+  OdSaveStateFlagImpl(T& variable): m_val( variable )
+  {
+    m_oldValue = GETBIT(m_val, flag);
+  }
+  OdSaveStateFlagImpl(T& variable, bool bNewValue): m_val( variable )
+  {
+    m_oldValue = GETBIT(m_val, flag);
+    SETBIT(m_val, flag, bNewValue);
+  }
+  ~OdSaveStateFlagImpl()
+  {
+    SETBIT(m_val, flag, m_oldValue);
+  }
+  /** \details
+    Returns the saved value of the flag.
+  */
+  operator bool() const
+  {
+    return m_oldValue;
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODSAVESTATE_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbAssocPersSubentManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbAssocPersSubentManager.h
new file mode 100755
index 0000000..73f55b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbAssocPersSubentManager.h
@@ -0,0 +1,115 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef DBASSOCPERSSUBENTMANAGER_INCLUDED_
+#define DBASSOCPERSSUBENTMANAGER_INCLUDED_ /*!DOM*/
+
+#include "TD_PackPush.h"
+#include "DbObject.h"
+#include "ShHistory/DbManagerSubentData.h"
+#include "TD_3DSolidHistoryDef.h"
+
+
+using namespace OdDbHistoryInternal;
+/** \details
+  This class represents the persistent subentity manager.
+
+  Library: Source code provided.
+  <group Contraint_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbAssocPersSubentManager : public OdDbObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbAssocPersSubentManager);
+  /** \details
+    Constructor creates an instance of this class.
+  */
+  OdDbAssocPersSubentManager();
+
+  /** \details
+    Destructor destroys an instance of this class.
+  */
+  virtual ~OdDbAssocPersSubentManager();
+
+  /** \details
+    Writes the .dwg file data of this object. 
+
+    \param pFiler [in]  Pointer to the filer to which data are written.
+  */
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+
+  /** \details
+    Reads the .dwg file data of this object. 
+
+    \param pFiler [in]  Filer object from which data are read.
+    
+    \remarks
+    Returns the filer status.
+  */
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+
+  /** \details
+    Writes the .dxf file data of this object. 
+
+    \param pFiler [in]  Pointer to the filer to which data are written.
+  */
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  /** \details
+    Reads the .dxf file data of this object. 
+
+    \param pFiler [in]  Filer object from which data are read.
+    
+    \remarks
+    Returns the filer status.
+  */
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+
+  //test method
+  OdResult parseSubentData(SubentDataArray& pData);
+  //test method
+  OdUInt32 lastStepId();  
+
+  static OdDbObjectId getInstanceFromDatabase(OdDbDatabase const * pDatabase);
+  static OdDbObjectId createIfItDoesNotExist(OdDbDatabase* pDatabase);
+
+  //OdUInt32 getStepIdForObject(class OdDbObject* pObj/*, bool, bool*/);
+
+  OdUInt32 createNewStep(); 
+
+ // virtual OdDbObjectPtr decomposeForSave(OdDb::DwgVersion ver, OdDbObjectId& replaceId, bool& exchangeXData);
+};
+
+
+/** \details
+  The typified smart pointer for the manager object. This template class 
+  is specialization of the OdSmartPtr class for the OdDbAssocPersSubentManager class.
+
+  \sa
+  <link smart_pointers.html, Working with Smart Pointers>
+*/
+typedef OdSmartPtr<OdDbAssocPersSubentManager> OdDbAssocPersSubentManagerPtr;
+
+#include "TD_PackPop.h"
+
+#endif //DBASSOCPERSSUBENTMANAGER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbManagerSubentData.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbManagerSubentData.h
new file mode 100755
index 0000000..04be10d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbManagerSubentData.h
@@ -0,0 +1,248 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _DBMANAGERSUBENTDATA_INCLUDED_
+#define _DBMANAGERSUBENTDATA_INCLUDED_
+
+#include <OdaCommon.h>
+#include "UInt32Array.h"
+#include "DoubleArray.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+enum SubentType
+{ 
+  kUnknown    = 0,
+  kFace       = 3,
+  kEdge       = 4,
+  kFilletPart = 5,
+  kFillet     = 6
+};
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class SubentDataBase
+{
+public:
+  SubentDataBase() {};
+  virtual ~SubentDataBase() {};
+  virtual OdResult init(const OdUInt32Array& arr) = 0;
+};
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+namespace OdDbHistoryInternal
+{
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class PerSubentData
+{
+  //The number ids in second part.
+  //Usually it is 1 and sec number contain sec number in persubent attribute.
+  //There are another case.
+  //For example 5(m_lNumbIds) 1000000000 1001 1000000000 1002 1000000000 1003 1000000000 1004 1000000000 1
+  OdUInt32Array m_lEntTplIdArr;
+
+public:
+  PerSubentData()
+  {}
+
+  void set(const OdUInt32* pStart, OdUInt32& iShiftArr)
+  {
+    OdUInt32 iNumbIds  = *(pStart + iShiftArr++);
+    if(iNumbIds > 0)
+    {
+      iNumbIds = iNumbIds*2;
+      m_lEntTplIdArr.resize(iNumbIds);
+      for (OdUInt32 i = 0; i < iNumbIds; ++i)
+      {
+        m_lEntTplIdArr.setAt(i, *(pStart + iShiftArr++));
+      }
+    }
+  }
+
+  OdUInt32Array& SubentDataArr() { return m_lEntTplIdArr; }
+};
+typedef OdArray<PerSubentData> PerSubentDataArray;
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+struct SubentRWData
+{
+  OdUInt32      m_iType;
+  OdUInt32      m_iMark; //0
+  OdUInt32Array m_arrIdFirst;
+  OdUInt32Array m_arrIdSec;
+  OdDoubleArray m_arrDouble;
+};
+typedef OdArray<SubentRWData> SubentRWDataArray;
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class EdgeData : public SubentDataBase
+{
+  OdUInt32 m_iStIndex;
+  PerSubentData m_mainSubEntity; //The subentity which was used in operation. (For example set color)
+  PerSubentDataArray m_arrFaces;
+  OdUInt32 m_ivtxIndex1, m_ivtxIndex2;  
+  PerSubentData m_vtxSubEntity1, m_vtxSubEntity2; //Vertices of the edge.
+  PerSubentDataArray m_arrFacesVtx1, m_arrFacesVtx2;//Arrays of faces which includes the vertex.
+  OdUInt32Array m_arrFPart1, m_arrFPart2;
+public:
+  EdgeData() : m_ivtxIndex1(0), m_ivtxIndex2(0), m_iStIndex(0) {};
+  virtual ~EdgeData() {};
+  virtual OdResult init(const OdUInt32Array& arr);
+};
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class FaceData : public SubentDataBase
+{
+  PerSubentData m_mainSubEntity; //The subentity which was used in operation. (For example set color)
+  PerSubentDataArray m_arrPerSubData;
+  OdUInt32Array m_arrLastPart;
+public:
+  FaceData() {};
+  virtual ~FaceData() {};
+  virtual OdResult init(const OdUInt32Array& arr);
+  OdUInt32& getNFaces();
+};
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class FilletSubentData
+{
+  SubentType m_SubentType;
+
+  OdUInt32 m_iFSize;// The size for first block ???
+  SubentDataBase* m_pSubData;
+public:
+  FilletSubentData() {};
+  virtual ~FilletSubentData() 
+  {
+    if (m_pSubData)
+      delete m_pSubData;
+  };
+  SubentType& getSubentType() {return m_SubentType;};
+  OdResult parseSubData(const OdUInt32Array& arr, OdUInt32& iShiftArr);
+;};
+typedef OdArray<FilletSubentData> FilletSubentDataArray;
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class FilletData : public SubentDataBase
+{
+  FilletSubentDataArray m_dataArr;
+public:
+  FilletData() {};
+  virtual ~FilletData() {};
+  virtual OdResult init(const OdUInt32Array& arr);
+};
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class FilletInternalData : public SubentDataBase
+{
+  PerSubentData m_mainSubEntity; //The subentity which was used in operation. (For example set color)
+  PerSubentDataArray m_arrPerSubData;
+  OdUInt32Array m_arrLastPart;
+public:
+  FilletInternalData() {};
+  virtual ~FilletInternalData() {};
+  virtual OdResult init(const OdUInt32Array& arr);
+};
+
+};
+
+/** \details
+
+\sa
+TD_Db
+<group OdDbSh_Classes> 
+*/
+struct SubentData
+{
+  SubentType m_SubentType; // 3 - face, 4 - edge, 6 - chamfer, fillet.
+  //First elemet is history element id. (SubentColor, SubEntMaterial, Fillet, chamfer)
+  //Array indexes of entities in composite entity. (First number in persubent attribute.)
+  //In case face. Array faces and after it array edges.
+  OdUInt32Array m_arrMgrEntityId;
+  SubentDataBase* m_pSubData;
+
+  SubentData() : m_SubentType(kUnknown), m_pSubData(0)
+  {}
+  ~SubentData() 
+  {
+    if (m_pSubData)
+    {
+      delete m_pSubData;
+      m_pSubData   = NULL;
+      m_SubentType = kUnknown;
+    }
+  };
+};
+typedef OdArray<SubentData> SubentDataArray;
+
+#endif //_DBMANAGERSUBENTDATA_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBoolean.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBoolean.h
new file mode 100755
index 0000000..14f1740
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBoolean.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHBOOLEAN_H
+#define ODDB_DBSHBOOLEAN_H
+
+#include "TD_PackPush.h"
+
+#include "DbShHistoryNode.h"
+#include "ModelerDefs.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShBoolean : public OdDbShHistoryNode
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShBoolean);
+  OdDbShBoolean();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdDb::BoolOperType operation() const;
+  OdResult setOperation(OdDb::BoolOperType boolType);
+
+  OdResult connectOperands(OdInt32 op1, OdInt32 op2);
+  OdInt32 getOperand1();
+  OdInt32 getOperand2();
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShBoolean object pointers.
+*/
+typedef OdSmartPtr<OdDbShBoolean> OdDbShBooleanPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBox.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBox.h
new file mode 100755
index 0000000..6188700
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBox.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHBOX_H
+#define ODDB_DBSHBOX_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShBox : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShBox);
+  OdDbShBox();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  double length() const;
+  double width() const;
+  double height() const;
+  OdResult setLength(double dLenght);
+  OdResult setWidth(double dWidth);
+  OdResult setHeight(double dHeight);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShBox object pointers.
+*/
+typedef OdSmartPtr<OdDbShBox> OdDbShBoxPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBrep.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBrep.h
new file mode 100755
index 0000000..a7201f7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShBrep.h
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHBREP_H
+#define ODDB_DBSHBREP_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShBrep : public OdDbShPrimitive
+
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShBrep);
+  OdDbShBrep();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdResult setBody(void* pBody);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShBrep object pointers.
+*/
+typedef OdSmartPtr<OdDbShBrep> OdDbShBrepPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShChamfer.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShChamfer.h
new file mode 100755
index 0000000..e077102
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShChamfer.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHCHAMFER_H
+#define ODDB_DBSHCHAMFER_H
+
+#include "TD_PackPush.h"
+
+#include "DbShHistoryNode.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShChamfer : public OdDbShHistoryNode
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShChamfer);
+  OdDbShChamfer();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  int numEdges();
+  OdResult setBaseDistance(double dDist);
+  double getBaseDistance();
+  double getOtherDistance();
+  OdResult setOtherDistance(double dDist);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShChamfer object pointers.
+*/
+typedef OdSmartPtr<OdDbShChamfer> OdDbShChamferPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShCylinder.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShCylinder.h
new file mode 100755
index 0000000..bd4b2a0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShCylinder.h
@@ -0,0 +1,97 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHCYLINDER_H
+#define ODDB_DBSHCYLINDER_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShCylinder : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShCylinder);
+  OdDbShCylinder();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual double height() const;
+  virtual double xRadius() const;
+  virtual double yRadius() const;
+  virtual double majorRadius() const;
+  virtual double minorRadius() const;
+  virtual OdResult setHeight(double dHeight);
+  virtual OdResult setXRadius(double dXRadius);
+  virtual OdResult setYRadius(double dXRadius);
+  virtual OdResult setMajorRadius(double dMajorRadius);
+  virtual OdResult setMinorRadius(double dMinorRadius);
+  virtual bool isCylindrical() const;
+  virtual bool isElliptical() const;
+};
+
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShCone : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShCone);
+  OdDbShCone();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual double baseRadius() const;
+  virtual double topMinorRadius() const;
+  virtual double topMajorRadius() const;
+  virtual double topXRadius() const;
+  virtual OdResult setBaseRadius(double dHeight);
+  virtual OdResult setTopMinorRadius(double dMinorRadius);
+  virtual OdResult setTopMajorRadius(double dMajorRadius);
+  virtual OdResult setTopXRadius(double dTopMinorRad);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShCylinder object pointers.
+*/
+typedef OdSmartPtr<OdDbShCylinder> OdDbShCylinderPtr;
+typedef OdSmartPtr<OdDbShCone> OdDbShConePtr;
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShExtrusion.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShExtrusion.h
new file mode 100755
index 0000000..8709084
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShExtrusion.h
@@ -0,0 +1,75 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHEXTRUSION_H
+#define ODDB_DBSHEXTRUSION_H
+
+#include "TD_PackPush.h"
+
+#include "DbShPrimitive.h"
+#include "DbSweepOptions.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShExtrusion : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShExtrusion);
+  OdDbShExtrusion();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdGeVector3d direction() const;
+  OdResult setDirection(OdGeVector3d const & vecDir);
+  OdResult getSweepOptions(OdDbSweepOptions& sweepOptions) const;
+  OdResult setSweepOptions(OdDbSweepOptions const &);
+  OdResult setExtrude(OdGeVector3d const & vec, OdDbSweepOptions const & opt);
+  double height() const;
+  OdResult setHeight(double dHeight);
+
+  OdDbEntityPtr sweepEntity() const;
+  OdDbEntityPtr pathEntity() const;
+  OdResult setPathEntity(OdDbEntity* pPathEnt);
+  OdResult setSweepEntity(OdDbEntity* pSweepEnt);
+  
+  /*OdResult setTaperAngle(double dtaperAng);
+  double taperAngle();*/
+  OdResult getPathLength(double& dLen)const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShExtrusion object pointers.
+*/
+typedef OdSmartPtr<OdDbShExtrusion> OdDbShExtrusionPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShFillet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShFillet.h
new file mode 100755
index 0000000..0fdbe14
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShFillet.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHFILLET_H
+#define ODDB_DBSHFILLET_H
+
+#include "TD_PackPush.h"
+
+#include "DbShHistoryNode.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShFillet : public OdDbShHistoryNode
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShFillet);
+  OdDbShFillet();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  int numEdges();
+  OdGeDoubleArray& getStartSetbacks();
+  OdGeDoubleArray& getEndSetbacks();
+  OdGeDoubleArray& getRadiuses();
+  OdResult setStartSetbacks(const OdGeDoubleArray& arr);
+  OdResult setEndSetbacks(const OdGeDoubleArray& arr);
+  OdResult setRadiuses(const OdGeDoubleArray& arr);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShFillet object pointers.
+*/
+typedef OdSmartPtr<OdDbShFillet> OdDbShFilletPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistory.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistory.h
new file mode 100755
index 0000000..6e439ef
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistory.h
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHHISTORY_H
+#define ODDB_DBSHHISTORY_H
+
+#include "TD_PackPush.h"
+
+#include <DbObject.h>
+#include "TD_3DSolidHistoryDef.h"
+#include "DbLoftOptions.h"
+#include "DbRevolveOptions.h"
+#include "DbSweepOptions.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShHistory : public OdDbObject
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShHistory);
+
+  //OdDbShHistory(OdDbShHistory const &)
+  OdDbShHistory();
+  virtual ~OdDbShHistory();
+
+  virtual OdResult dwgInFields( OdDbDwgFiler* pFiler );  
+  virtual void dwgOutFields( OdDbDwgFiler* pFiler ) const;  
+  virtual OdResult dxfInFields( OdDbDxfFiler* pFiler );  
+  virtual void dxfOutFields( OdDbDxfFiler* pFiler ) const;
+
+  virtual OdResult setShowHistory( bool bShowhistory );
+  virtual bool showHistory() const;
+  virtual int numNodes() const;
+
+  virtual OdResult setRecordHistory( bool bRecordHistory );
+  virtual bool recordHistory() const;
+
+  virtual void clearHistory();
+  virtual OdResult purgeGraph();
+  virtual OdResult getGraph( OdDbObjectId & );
+
+  virtual OdResult createBox( double dXLen, double dYLen, double dZLen/*, BODY*&*/);
+  //virtual OdResult createBrep(OdCmColor const &, OdDbObjectId,void *)
+  virtual OdResult createFrustum( double dHeight, double dXRadius, double dYRadius, double dTopXRadius/*, BODY*&*/);
+  virtual OdResult createSphere( double dRadius/*, BODY * &*/);
+  virtual OdResult createTorus( double dMajorRadius, double dMinorRadius/*, BODY * &*/);
+  virtual OdResult createWedge( double dXLen, double dYLen, double dZLen/*, BODY * &*/);
+  virtual OdResult createPyramid( double dHeight, int iSides, double dRadius, double dTopRadius/*, BODY * &*/);
+
+  virtual OdResult setSubentColor( const OdDbSubentId &subentId, const OdCmColor &color );
+  virtual OdResult setSubentMaterial( const OdDbSubentId &subentId, OdDbObjectId matId );
+
+  virtual OdResult createLoftedSolid(OdDbEntityPtrArray& crossSections, OdDbEntityPtrArray& guideCurves, OdDbEntity* pPathCurve, OdDbLoftOptions& loftOpt/*, BODY*&*/);
+  virtual OdResult createRevolvedSolid(OdDbEntity* pRevolveCurve, const OdGePoint3d& axisPoint, const OdGeVector3d& axisDir, double dAngleOfRevolution, double dStartAngle, OdDbRevolveOptions& revolveOpt/*, BODY*&*/);
+  virtual OdResult createSweptSolid(OdDbEntity* pSweepCurve, OdDbEntity* pPathCurve, const OdGeVector3d& directioVector, OdDbSweepOptions& sweepOpt/*, BODY * &*/);
+  //OdDbShBrep
+  virtual OdResult booleanOper( OdDbShHistory* pSecondEll, OdDb::BoolOperType operation );
+
+  virtual OdResult postInDatabase(OdDbObjectId& objId, OdDbDatabase* pDatabase);
+  virtual OdResult subTransformBy( const OdGeMatrix3d& xform );
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShHistory object pointers.
+*/
+typedef OdSmartPtr<OdDbShHistory> OdDbShHistoryPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistoryNode.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistoryNode.h
new file mode 100755
index 0000000..fc0b9a0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShHistoryNode.h
@@ -0,0 +1,75 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHHISTORYNODE_H
+#define ODDB_DBSHHISTORYNODE_H
+
+#include "TD_PackPush.h"
+#include "DbEvalGraph.h"
+#include "TD_3DSolidHistoryDef.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShHistoryNode : public OdDbEvalConnectable 
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShHistoryNode);
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  virtual OdCmColor color() const;
+  virtual void setColor(OdCmColor const &);
+
+  virtual OdDbObjectId nodeMaterialId() const;
+  virtual void setNodeMaterialId(OdDbObjectId id);
+
+  virtual unsigned int stepId() const;
+  virtual void setStepId(unsigned int stepId);
+
+  virtual OdGeMatrix3d transform() const;
+  OdResult transformBy(const OdGeMatrix3d& xform);
+
+  OdResult postInDatabase(OdDbObjectId& objId, OdDbDatabase* pDatabase);
+};
+
+//OdDbShPrimitive - use for drawing.??
+
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShHistoryNode object pointers.
+*/
+typedef OdSmartPtr<OdDbShHistoryNode> OdDbShHistoryNodePtr;
+
+typedef OdArray<OdDbShHistoryNodePtr> OdDbShHistoryNodePtrArray;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShLoft.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShLoft.h
new file mode 100755
index 0000000..42fe878
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShLoft.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHLOFT_H
+#define ODDB_DBSHLOFT_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+#include "DbLoftOptions.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShLoft : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShLoft);
+  OdDbShLoft();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdResult getLoftOptions(OdDbLoftOptions& loftOpt);
+  OdResult setLoftOptions(const OdDbLoftOptions& loftOpt);
+
+  int numCrossSections();
+  int numGuideCurves();
+  OdDbEntityPtr getCrossSection(int iNum);
+  OdDbEntityPtr getGuideCurve(int iNum);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShLoft object pointers.
+*/
+typedef OdSmartPtr<OdDbShLoft> OdDbShLoftPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShModelerHistoryImpl.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShModelerHistoryImpl.h
new file mode 100755
index 0000000..da6fea6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShModelerHistoryImpl.h
@@ -0,0 +1,84 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHMODELERHISTORY_H
+#define ODDB_DBSHMODELERHISTORY_H
+
+#include "TD_PackPush.h"
+
+#include <DbObject.h>
+#include "ModelerHistory.h"
+#include "../Entities/Db3dSolidImpl.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class OdDbShModelerHistoryImpl : public OdDbShModelerHistory
+{
+protected:
+  OdDbShModelerHistoryImpl();
+  virtual ~OdDbShModelerHistoryImpl();
+
+  inline void historyObject(OdDb3dSolidImpl* p3dSolidImpl);
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShModelerHistoryImpl);
+
+  virtual OdDbObjectId createShHistory( OdDb3dSolid const* pSolid, OdDbObjectPtr& pHistObj );
+  virtual void getHistoryVariables( const OdDbObjectPtr& pHistObj, bool& bShowHistory, bool& bRecordHistory );
+  virtual void setShowHistory( OdDbObjectPtr& pHistObj, bool bShowHistory );
+  virtual void setRecordHistory( OdDbObjectPtr& pHistObj, bool bRecordHistory );
+  virtual void clearHistory( OdDbObjectPtr& pHistObj );
+
+  virtual OdResult createBox( OdDb3dSolid* pSolid, double dXLen, double dYLen, double dZLen/*, BODY*&*/);
+  //virtual OdResult createBrep(OdCmColor const &, OdDbObjectId,void *)
+  virtual OdResult createFrustum( OdDb3dSolid* pSolid, double dHeight, double dXRadius, double dYRadius, double dTopXRadius/*, BODY*&*/);
+  virtual OdResult createSphere( OdDb3dSolid* pSolid, double dRadius/*, BODY * &*/);
+  virtual OdResult createTorus( OdDb3dSolid* pSolid, double dMajorRadius, double dMinorRadius/*, BODY * &*/);
+  virtual OdResult createWedge( OdDb3dSolid* pSolid, double dXLen, double dYLen, double dZLen/*, BODY * &*/);
+  virtual OdResult createPyramid( OdDb3dSolid* pSolid, double dHeight, int iSides, double dRadius, double dTopRadius/*, BODY * &*/);
+
+  virtual OdResult setSubentColor( OdDb3dSolid* pSolid, const OdDbSubentId &subentId, const OdCmColor &color );
+  virtual OdResult setSubentMaterial( OdDb3dSolid* pSolid, const OdDbSubentId &subentId, OdDbObjectId matId );
+
+  virtual OdResult createLoftedSolid( OdDb3dSolid* pSolid, OdDbEntityPtrArray& crossSections, OdDbEntityPtrArray& guideCurves, OdDbEntity* pPathCurve, OdDbLoftOptions& loftOpt );
+  virtual OdResult createRevolvedSolid( OdDb3dSolid* pSolid, OdDbEntity* pRevolveCurve, const OdGePoint3d& axisPoint, const OdGeVector3d& axisDir, double dAngleOfRevolution, double dStartAngle, OdDbRevolveOptions& revolveOpt );
+  virtual OdResult createSweptSolid( OdDb3dSolid* pSolid, OdDbEntity* pSweepCurve, OdDbEntity* pPathCurve, const OdGeVector3d& directioVector, OdDbSweepOptions& sweepOpt );
+
+  virtual OdResult booleanOper( OdDb3dSolid* pSolid, OdDb3dSolid* pSecondEll,OdDb::BoolOperType operation);
+
+  virtual OdResult postInDatabase( OdDbObjectId objSolidId );
+  virtual OdResult subTransformBy( OdDb3dSolid* pSolid, const OdGeMatrix3d& xform );
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShHistory object pointers.
+*/
+//typedef OdSmartPtr<OdDbShModelerHistoryImpl>OdDbShModelerHistoryImplPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPrimitive.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPrimitive.h
new file mode 100755
index 0000000..42a6a81
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPrimitive.h
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHPRIMITIVE_H
+#define ODDB_DBSHPRIMITIVE_H
+
+#include "TD_PackPush.h"
+
+#include "DbShHistoryNode.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShPrimitive : public OdDbShHistoryNode
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShPrimitive);
+  OdDbShPrimitive();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShPrimitive object pointers.
+*/
+typedef OdSmartPtr<OdDbShPrimitive> OdDbShPrimitivePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPyramid.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPyramid.h
new file mode 100755
index 0000000..65a1ab8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShPyramid.h
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBPYRAMID_H
+#define ODDB_DBPYRAMID_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShPyramid : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShPyramid);
+  OdDbShPyramid();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  double height() const;
+  double radius() const;
+  int sides() const;
+  double topRadius() const;
+  OdResult setSides(int iSides);
+  OdResult setHeight(double dHeight);
+  OdResult setTopRadius(double dTopRadius);
+  OdResult setRadius(double dRadius);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShPyramid object pointers.
+*/
+typedef OdSmartPtr<OdDbShPyramid> OdDbShPyramidPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShRevolve.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShRevolve.h
new file mode 100755
index 0000000..916024d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShRevolve.h
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHREVOLVE_H
+#define ODDB_DBSHREVOLVE_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+#include "DbRevolveOptions.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShRevolve : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShRevolve);
+  OdDbShRevolve();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdGePoint3d axisPoint() const;
+  OdGeVector3d direction() const;
+  OdResult getRevolveOptions(OdDbRevolveOptions & revOpt) const;
+  double revolveAngle() const;
+  OdResult setAxisPoint(OdGePoint3d const & pt);
+  OdResult setDirection(OdGeVector3d const & pdir);
+  OdResult setRevolve(OdGePoint3d const& pt, OdGeVector3d const& pdir, double dRevAng, OdDbRevolveOptions const & revOpt);
+  OdResult setRevolveAngle(double val);
+  OdResult setRevolveOptions(OdDbRevolveOptions const & revOpt);
+  OdResult setStartAngle(double);
+  double startAngle() const;
+  OdDbEntityPtr sweepEntity() const;
+  OdResult setSweepEntity(OdDbEntity* pSweepEnt);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShRevolve object pointers.
+*/
+typedef OdSmartPtr<OdDbShRevolve> OdDbShRevolvePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSphere.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSphere.h
new file mode 100755
index 0000000..43a294c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSphere.h
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSPHERE_H
+#define ODDB_DBSPHERE_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShSphere : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShSphere);
+  OdDbShSphere();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  double radius() const;
+  OdResult setRadius(double dRadius);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShSphere object pointers.
+*/
+typedef OdSmartPtr<OdDbShSphere> OdDbShSpherePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentColor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentColor.h
new file mode 100755
index 0000000..831f5c1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentColor.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHSUBENTCOLOR_H
+#define ODDB_DBSHSUBENTCOLOR_H
+
+#include "TD_PackPush.h"
+
+#include "DbShHistoryNode.h"
+
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShSubentColor : public OdDbShHistoryNode
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShSubentColor);
+  OdDbShSubentColor();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdCmColor colorValue() const;
+  void setColorValue(OdCmColor const & clr);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShSubentColor object pointers.
+*/
+typedef OdSmartPtr<OdDbShSubentColor> OdDbShSubentColorPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentMaterial.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentMaterial.h
new file mode 100755
index 0000000..42d1d9d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSubentMaterial.h
@@ -0,0 +1,60 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHSUBENTMATERIAL_H
+#define ODDB_DBSHSUBENTMATERIAL_H
+
+#include "TD_PackPush.h"
+
+#include "DbShHistoryNode.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShSubentMaterial : public OdDbShHistoryNode
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShSubentMaterial);
+  OdDbShSubentMaterial();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdDbObjectId materialId() const;
+  OdResult setMaterial(OdDbObjectId objId);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShSubentMaterial object pointers.
+*/
+typedef OdSmartPtr<OdDbShSubentMaterial> OdDbShSubentMaterialPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSweep.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSweep.h
new file mode 100755
index 0000000..1576c5c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShSweep.h
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBSHSWEEP_H
+#define ODDB_DBSHSWEEP_H
+
+#include "TD_PackPush.h"
+
+#include "DbShPrimitive.h"
+#include "DbSweepOptions.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShSweep : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShSweep);
+  OdDbShSweep();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  OdGeVector3d direction() const;
+  OdResult setDirection(OdGeVector3d const & v);
+  OdResult getSweepOptions(OdDbSweepOptions& sweepOptions) const;  
+  OdResult setSweepOptions(OdDbSweepOptions const & opt);
+
+  OdDbEntityPtr sweepEntity() const;
+  OdDbEntityPtr pathEntity() const;
+
+  OdResult getPathLength(double& dLen)const;
+  OdResult setPathEntity(OdDbEntity* pPathEnt);
+  OdResult setSweepEntity(OdDbEntity* pSweepEnt);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShSweep object pointers.
+*/
+typedef OdSmartPtr<OdDbShSweep> OdDbShSweepPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShTorus.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShTorus.h
new file mode 100755
index 0000000..3fb0749
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShTorus.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBTORUS_H
+#define ODDB_DBTORUS_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShTorus : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShTorus);
+  OdDbShTorus();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  double majorRadius() const;
+  double minorRadius() const;
+  OdResult setMajorRadius(double dMajorRadius);
+  OdResult setMinorRadius(double dMinorRadius);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShTorus object pointers.
+*/
+typedef OdSmartPtr<OdDbShTorus> OdDbShTorusPtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShWedge.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShWedge.h
new file mode 100755
index 0000000..fc923d7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/DbShWedge.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODDB_DBWEDGE_H
+#define ODDB_DBWEDGE_H
+
+#include "TD_PackPush.h"
+#include "DbShPrimitive.h"
+
+/** \details
+
+    \sa
+    TD_Db
+    <group OdDbSh_Classes> 
+*/
+class DB3DSOLIDHISTORY_EXPORT OdDbShWedge : public OdDbShPrimitive
+{
+public:
+  ODDB_DECLARE_MEMBERS(OdDbShWedge);
+  OdDbShWedge();
+
+  virtual OdResult dwgInFields(OdDbDwgFiler* pFiler);  
+  virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;  
+  virtual OdResult dxfInFields(OdDbDxfFiler* pFiler);  
+  virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+
+  double length() const;
+  double width() const;
+  double height() const;
+  OdResult setLength(double dLenght);
+  OdResult setWidth(double dWidth);
+  OdResult setHeight(double dHeight);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbShWedge object pointers.
+*/
+typedef OdSmartPtr<OdDbShWedge> OdDbShWedgePtr;
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/TD_3DSolidHistoryDef.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/TD_3DSolidHistoryDef.h
new file mode 100755
index 0000000..02808da
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ShHistory/TD_3DSolidHistoryDef.h
@@ -0,0 +1,40 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#ifndef _3DSOLIDHISTORY_EXPORT_DEF_INCLUDED_
+#define _3DSOLIDHISTORY_EXPORT_DEF_INCLUDED_
+
+#include "OdPlatformSettings.h"
+
+#ifdef DB3DSOLIDHISTORY_EXPORTS
+#define DB3DSOLIDHISTORY_EXPORT        OD_TOOLKIT_EXPORT
+#define DB3DSOLIDHISTORY_EXPORT_STATIC OD_STATIC_EXPORT
+#else                           
+#define DB3DSOLIDHISTORY_EXPORT        OD_TOOLKIT_IMPORT
+#define DB3DSOLIDHISTORY_EXPORT_STATIC OD_STATIC_IMPORT
+#endif
+
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif // _3DSOLIDHISTORY_EXPORT_DEF_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SharedPtr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SharedPtr.h
new file mode 100755
index 0000000..8b34ed6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SharedPtr.h
@@ -0,0 +1,184 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _SharedPtr_h_Included
+#define _SharedPtr_h_Included
+
+#include "TD_PackPush.h"
+
+#include "OdaCommon.h"
+#include "OdAlloc.h"
+
+/** \details
+    This template class implements SharedPointers for instances not derived from OdRxObject.
+
+    \remarks
+    SharedPointers relieve the programmer
+    of having to determine when objects are no longer needed, or having to delete them
+    them at that time.
+
+    Each object referenced by a SharedPointer (henceforth 'referenced object') 
+    has associated with it a reference count; i.e., how many SharedPointers are referencing it.
+    When the reference count reaches zero, the referenced object is deleted.
+
+    Library: TD_Root
+    <group Other_Classes> 
+*/
+template <class T> class OdSharedPtr
+{
+public:
+
+  OdSharedPtr() : _reference(0), _refCount(0) {}
+  
+  OdSharedPtr(T* pObject) : _refCount(0)
+  { 
+    if ((_reference = pObject) != 0)
+    {
+      _refCount = (int*)::odrxAlloc(sizeof(int*));
+      *_refCount = 1;
+    }
+  }
+  
+  /** \remarks
+    The another OdSharedPtr object is supplied, its reference count, if present, is incremented.
+  */
+  OdSharedPtr(const OdSharedPtr& other) 
+  {
+    _reference = other._reference;
+    _refCount = other._refCount;
+    if (_refCount)
+    {
+      ++*_refCount;
+    }
+  }
+
+  /** \remarks
+    Decrements the reference count of the object referenced by this
+    SharedPointer object.
+
+    When the reference count reaches zero, the referenced object is deleted.
+  */
+  ~OdSharedPtr()
+  {
+    if (_refCount && !--*_refCount)
+    {
+      delete _reference;
+      odrxFree(_refCount);
+    }
+  }
+
+  OdSharedPtr& operator=(const OdSharedPtr &other)
+  {
+    if (_reference != other._reference)
+    {
+      if (_refCount && !--*_refCount)
+      {
+        odrxFree(_refCount);
+        delete _reference;
+      }
+
+      _reference = other._reference;
+      _refCount = other._refCount;
+      if (_refCount)
+      {
+        ++*_refCount;
+      }
+    }
+#ifdef _DEBUG
+    else if (_reference != 0)
+    {
+      // there can't be independent shared pointers on the same object
+      ODA_ASSERT_ONCE(_refCount == other._refCount);
+      // if the counters are the same - do nothing (the assignment is no-op)
+    }
+#endif // _DEBUG
+    return *this;
+  }
+
+  T* operator->() { return _reference; }
+
+  /** \details
+      Returns the object referenced by this SharedPointer.  
+      
+      \remarks
+      This SharedPointer object maintains its reference to the object, and the object's
+      reference count is not modified.
+  */
+  T* get() { return _reference; }
+  const T* get() const { return _reference; }
+  
+  operator T*() { return _reference; }
+  operator const T*() const { return _reference; }
+  
+  /** \details
+    Returns the object referenced by this SharedPointer.
+      
+    \remarks
+    The reference count of the referenced object is unchanged.
+  */
+  const T* operator->() const { return _reference; }
+  
+  T& operator*(){ return *_reference; }
+  
+  const T& operator*() const { return *_reference; }
+
+  /** \details
+    Returns true if and only if this SharedPointer contains a null reference.
+  */
+  bool isNull() const {return _reference == 0;}
+
+  /** \details
+    Detaches referenced object from the pointer.
+    Warning: this method may be used only if reference count is 1 
+      (i.e. when this pointer is the single owner of the referenced object)
+  */
+  T* detach()
+  {
+    if (!_refCount)
+      return 0;
+    if (*_refCount > 1)
+    {
+      ODA_FAIL();
+    }
+    odrxFree(_refCount);
+    _refCount = 0;
+    T* ret = _reference;
+    _reference = 0;
+    return ret;
+  }
+  /** \details
+    Returns the number of references to the object.
+  */
+  int refCount() const
+  {
+    return _refCount ? *_refCount : 0;
+  }
+private: 
+  T* _reference;
+  int* _refCount;
+};
+
+#include "TD_PackPop.h"
+
+#endif // _SharedPtr_h_Included
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/BBox.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/BBox.h
new file mode 100755
index 0000000..79f0cac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/BBox.h
@@ -0,0 +1,187 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _SpBBox_h_Included_
+#define _SpBBox_h_Included_
+
+#include "Si/SiSpatialIndex.h"
+#include "Ge/GeBoundBlock3d.h"
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdSi
+{
+  /** \details
+      This class implements 3D Spatial Index bounding volumes.
+
+      Library: SpatialIndex
+  */
+  class BBox : public OdGeBoundBlock3d, public OdSiShape
+  {
+  public:
+    enum ExtentsType
+    {
+      k2dExtents  = 0,
+      k3dExtents  = 1
+    };
+
+    /** \details
+      Explodes the specified extents box or bounding block into an array of points.
+      \param extents [in]  Any 3D extents or BoundBlock object.
+      
+      \param points [out] Receives the array[8] of points.
+      
+      \returns
+      Returns the ExtentsType of the specified exents.
+      
+      \remarks
+      explodeExtent() returns one of the following:
+      
+      <table>
+      Name          Value
+      k2dExtents    0
+      k3dExtents    1
+      </table>
+      
+      The points array will start at extents.minPoint, and proceed clockwise about the 
+      extents. It will then repeat this sequence at the top of the extents.
+    */
+    static ExtentsType explodeExtent(OdGePoint3d* points, const OdGeExtents3d& extents)
+    {
+       points[0] =    extents.minPoint();
+       points[1].set( extents.minPoint().x, extents.maxPoint().y, extents.minPoint().z );
+       points[2].set( extents.maxPoint().x, extents.maxPoint().y, extents.minPoint().z );
+       points[3].set( extents.maxPoint().x, extents.minPoint().y, extents.minPoint().z );
+
+       if(points->z == extents.maxPoint().z)
+         return k2dExtents;
+
+       points[4].set( extents.minPoint().x, extents.minPoint().y, extents.maxPoint().z );
+       points[5].set( extents.minPoint().x, extents.maxPoint().y, extents.maxPoint().z );
+       points[6] =    extents.maxPoint();
+       points[7].set( extents.maxPoint().x, extents.minPoint().y, extents.maxPoint().z );
+
+       return k3dExtents;
+    }
+
+    static ExtentsType explodeExtent(OdGePoint3d* points, const OdGeBoundBlock3d& extents)
+    {
+      OdGeVector3d side1, side2, side3;
+      extents.get(points[0], side1, side2, side3);
+
+      points[1] = points[0] + side1;
+      points[2] = points[0] + side1 + side2;
+      points[3] = points[0] + side2;
+      
+      if(OdZero(side3.length()))
+        return k2dExtents;
+      
+      points[4] = points[0] + side3;
+      points[5] = points[1] + side3;
+      points[6] = points[2] + side3;
+      points[7] = points[3] + side3;
+      
+      return k3dExtents;
+    }
+
+    virtual bool contains( const OdGeExtents3d& extents, bool planar = false, const OdGeTol& tol = OdGeContext::gTol ) const
+    {
+      ODA_ASSERT( planar == false );
+      
+      if ( !OdGeBoundBlock3d::contains( extents.minPoint(), tol ) )
+        return false;
+      if ( !OdGeBoundBlock3d::contains( extents.maxPoint(), tol ) )
+        return false;
+      if ( !OdGeBoundBlock3d::contains( OdGePoint3d( extents.minPoint().x, 
+        extents.maxPoint().y, extents.minPoint().z ), tol ) )
+        return false;
+      if ( !OdGeBoundBlock3d::contains( OdGePoint3d( extents.maxPoint().x, 
+        extents.minPoint().y, extents.minPoint().z ), tol ) )
+        return false;
+      if(OdEqual(extents.maxPoint().z, extents.minPoint().z, tol.equalPoint()))
+        return true;
+      if ( !OdGeBoundBlock3d::contains( OdGePoint3d( extents.minPoint().x, 
+        extents.maxPoint().y, extents.maxPoint().z ), tol ) )
+        return false;
+      if ( !OdGeBoundBlock3d::contains( OdGePoint3d( extents.maxPoint().x, 
+        extents.minPoint().y, extents.maxPoint().z ), tol ) )
+        return false;
+
+      return true;
+    }
+    
+    virtual bool intersects( const OdGeExtents3d& extents, bool planar = false, const OdGeTol& tol = OdGeContext::gTol) const
+    {
+      ODA_ASSERT( planar == false );
+      if (isBox())
+      {
+        OdGePoint3d minPt, maxPt;
+        getMinMaxPoints(minPt, maxPt);
+        return !OdGeExtents3d(minPt, maxPt).isDisjoint(extents, tol);
+      }
+      else
+        return !OdGeBoundBlock3d( extents.minPoint(), extents.maxPoint() ).isDisjoint( *this, tol );
+    }
+
+    virtual OdSiShape* clone() const
+    {
+      return new BBox(*this);
+    }
+
+    virtual void transform(const OdGeMatrix3d& mtx)
+    {
+      setToBox(false);
+      transformBy(mtx);
+      setToBoxOrtho();
+    }
+
+  /** \param p1 [in]  First point of a coordinate-aligned block.
+    \param p2 [in]  Second point of a coordinate-aligned block.
+    \param base [in]  Base of parallelepiped bounding block.
+    \param side1 [in]  First side of parallelepiped bounding block.
+    \param side2 [in]  Second side of parallelepiped bounding block.
+    \param side3 [in]  Third side of parallelepiped bounding block.
+    \param source [in]  Object to be cloned.
+
+    \remarks
+    The default constructor constructs a parallelepiped reduced to the coordinate origin.
+    
+    A parallelepiped is a parallelogram extruded in an arbitrary direction. 
+  */
+    BBox() {}
+    BBox( const BBox& source ) : OdGeBoundBlock3d( source ) {}
+    BBox( const OdGePoint3d& base, const OdGeVector3d& side1,
+      const OdGeVector3d& side2, const OdGeVector3d& side3 ) 
+      : OdGeBoundBlock3d( base, side1, side2, side3 )
+    {
+      setToBoxOrtho(side1, side2, side3);
+    }
+    BBox( const OdGePoint3d& p1, const OdGePoint3d& p2 )
+      : OdGeBoundBlock3d( p1, p2 ){}
+  };
+}
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiExtents.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiExtents.h
new file mode 100755
index 0000000..3967840
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiExtents.h
@@ -0,0 +1,157 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _SpExtents_h_Included_
+#define _SpExtents_h_Included_
+
+#if _MSC_VER >= 1000
+#pragma once
+#endif
+
+#include "Si/SiSpatialIndex.h"
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdSi
+{
+
+  /** \details
+      This class implements 3D Spatial Index Extents objects.
+
+      Library: SpatialIndex
+  */
+  class ODSI_API Extent3d : public OdGeExtents3d, public OdSiShape
+  {
+  public:
+    virtual bool contains( const OdGeExtents3d& extents, bool planar = false, const OdGeTol& tol = OdGeContext::gTol) const
+    {
+      if ( planar ) 
+      {
+        ODA_ASSERT ( extents.minPoint().z == 0 && extents.maxPoint().z == 0 );
+      }
+      return OdGeExtents3d::contains( extents, tol );
+    }
+
+    virtual bool intersects( const OdGeExtents3d& extents, bool planar = false, const OdGeTol& tol = OdGeContext::gTol) const
+    {
+      if ( planar == false )
+        return !isDisjoint( extents, tol );
+      else
+      {
+        return !( extents.minPoint().x > (maxPoint().x + tol.equalPoint())
+          || extents.minPoint().y > (maxPoint().y + tol.equalPoint())
+          || minPoint().x > (extents.maxPoint().x + tol.equalPoint()) 
+          || minPoint().y > (extents.maxPoint().y + tol.equalPoint()));
+      }
+    }
+
+    enum IntersectResult 
+    { 
+      left    = 0,     // Coordinate is to the *left* of the *extents*.
+      upon    = 1,     // Coordinate is *upon* the *extents*.
+      right   = 2      // Coordinate is to the *right* of the *extents*.
+    };
+    
+    /** \details
+      Returns the intersection with this Extents object.
+
+      \param dimension [in]  X, Y, or Z.
+      \param coordinate [in]  Coordinate to test.
+      \param extents [in]  Any 3D extents box.
+      \param planar [in]  If and only if true, a planar computation is made. 
+      
+      \remarks
+      intersects() returns one of the following.
+      
+      <table>
+      Name    Value    Description
+      true    ..       The specified extents intersect this Extents object.
+      false   ..       The specified extents do not intersect this Extents object.
+      left    0        coordinate is to the left of this Extents object.
+      upon    1        coordinate is upon this Extents object.
+      right   2        coordinate is to the right of this Extents object.
+      </table>
+    */
+#ifndef SWIG
+    IntersectResult intersects( double coordinate, int dimension, double tol = OdGeContext::gTol.equalPoint() ) const
+    {
+      if ( m_min[dimension] > (coordinate + tol) ) return right;
+      if ( m_max[dimension] < (coordinate - tol) ) return left;
+      return upon;
+    }
+#endif
+    /** \details
+      Halves the specified dimension of this Extents object.
+      \param dimension [in]  X, Y, or Z.
+      \param moveRight [in]  True to move the right -hand edge, false for the left -hand.
+    */
+    void makeHalf( int dimension, bool moveRight )
+    {
+      if ( moveRight )
+        m_max[dimension] = ( m_min[dimension] + m_max[dimension]) / 2;
+      else 
+        m_min[dimension] = ( m_min[dimension] + m_max[dimension]) / 2;
+    }
+
+    /** \details
+      Doubles the specified dimension of this Extents object.
+      \param dimension [in]  X, Y, or Z.
+      \param moveRight [in]  True to move the right -hand edge, false for the left -hand.
+    */
+    void makeDouble( int dimension, bool moveRight )
+    {
+      if ( moveRight )
+        m_max[dimension] += ( m_max[dimension] - m_min[dimension] );
+      else 
+        m_min[dimension] -= ( m_max[dimension] - m_min[dimension] );
+    }
+    /** \details
+      Expands this Extents object to a square or cube of its largest dimension.
+      \param planar [in]  True for 2D extents, false for 3D.
+    */
+    void makeCube( bool planar )
+    {
+      if ( m_min.isEqualTo( m_max ) ) return;
+      double ext = odmax( m_max.x - m_min.x, m_max.y - m_min.y );
+      if ( !planar ) ext = odmax( m_max.z - m_min.z, ext );
+      m_max.x = m_min.x + ext;
+      m_max.y = m_min.y + ext;
+      if ( !planar ) m_max.z = m_min.z + ext;
+    }
+    
+    Extent3d() {}
+    /** \param min [in]  Minimum point.
+      \param max [in]  Maximum point.
+    */
+    Extent3d( const OdGePoint3d& min, const OdGePoint3d& max )
+      : OdGeExtents3d( min, max ) {}
+    Extent3d( const OdGeExtents3d& source ) : OdGeExtents3d( source ) {}
+    Extent3d( const OdGeExtents2d& source ) 
+      : OdGeExtents3d( OdGePoint3d( source.minPoint().x, source.minPoint().y, 0 ), 
+      OdGePoint3d( source.maxPoint().x, source.maxPoint().y, 0 )) {}
+  };
+}
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiShapePlane.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiShapePlane.h
new file mode 100755
index 0000000..151809a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiShapePlane.h
@@ -0,0 +1,128 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _SiShapePlane_h_Included_
+#define _SiShapePlane_h_Included_
+
+#include "Ge/GePlane.h"
+#include "Ge/GeExtents3d.h"
+#include "Si/SiSpatialIndex.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents plane implementation for OdSiShape interface.
+
+    Library: SpatialIndex
+    <group OdSi_Classes>
+*/
+struct OdSiShapePlane : public OdSiShape {
+  OdGePoint3d m_pointOnPlane;
+  OdGeVector3d m_planeNormal;
+
+  OdSiShapePlane( const OdGePoint3d& pointOnPlane, const OdGeVector3d& planeNormal ) {
+    m_pointOnPlane = pointOnPlane;
+    m_planeNormal = planeNormal;
+  }
+  OdSiShapePlane( const OdGePlane& plane ) {
+    m_pointOnPlane = plane.pointOnPlane();
+    m_planeNormal = plane.normal();
+  }
+  inline double signedDistanceTo( const OdGePoint3d& pt ) const {
+    return m_planeNormal.dotProduct( pt - m_pointOnPlane );
+  }
+  bool contains( const OdGeExtents3d& , bool , const OdGeTol&  ) const {
+    return false;
+  }
+  bool intersects( const OdGeExtents3d& extents, bool planar, const OdGeTol& tol ) const {
+    const OdGePoint3d& minPt = extents.minPoint();
+    double e = tol.equalPoint();
+    if( OdLess( signedDistanceTo( minPt ), 0.0, e ) ) {
+      const OdGePoint3d& maxPt = extents.maxPoint();
+      if( !OdLess( signedDistanceTo( maxPt ), 0.0, e ) ) {
+        return true;
+      }
+      OdGePoint3d pt( minPt.x, minPt.y, maxPt.z );
+      if( !OdLess( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( minPt.x, maxPt.y, minPt.z );
+      if( !OdLess( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( maxPt.x, minPt.y, minPt.z );
+      if( !OdLess( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( maxPt.x, maxPt.y, minPt.z );
+      if( !OdLess( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( maxPt.x, minPt.y, maxPt.z );
+      if( !OdLess( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( minPt.x, maxPt.y, maxPt.z );
+      if( !OdLess( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      return false;
+    }
+    else if( OdGreater( signedDistanceTo( minPt ), 0.0, e ) ) {
+      const OdGePoint3d& maxPt = extents.maxPoint();
+      if( !OdGreater( signedDistanceTo( maxPt ), 0.0, e ) ) {
+        return true;
+      }
+      OdGePoint3d pt( minPt.x, minPt.y, maxPt.z );
+      if( !OdGreater( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( minPt.x, maxPt.y, minPt.z );
+      if( !OdGreater( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( maxPt.x, minPt.y, minPt.z );
+      if( !OdGreater( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( maxPt.x, maxPt.y, minPt.z );
+      if( !OdGreater( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( maxPt.x, minPt.y, maxPt.z );
+      if( !OdGreater( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      pt.set( minPt.x, maxPt.y, maxPt.z );
+      if( !OdGreater( signedDistanceTo( pt ), 0.0, e ) ) {
+        return true;
+      }
+      return false;
+    }
+    return true; // point on plane
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiSpatialIndex.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiSpatialIndex.h
new file mode 100755
index 0000000..7544eb9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Si/SiSpatialIndex.h
@@ -0,0 +1,221 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _SpatialIndex_h_Included_
+#define _SpatialIndex_h_Included_
+
+#include "OdPlatformSettings.h"
+
+#ifdef SPATIALINDEX_DLL_EXPORTS
+  #define ODSI_API          OD_TOOLKIT_EXPORT
+  #define ODSI_API_STATIC   OD_STATIC_EXPORT
+#else
+  #define ODSI_API          OD_TOOLKIT_IMPORT
+  #define ODSI_API_STATIC   OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "RxObject.h"
+#include "Ge/GeExtents3d.h"
+#include "Ge/GeExtents2d.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class represents Spatial Index Shape objects.
+    Library: SpatialIndex
+    <group OdSi_Classes>
+*/
+struct ODSI_API OdSiShape
+{
+  /** \details
+    Returns true if and only if this Shape object contains the specfied extents.
+
+    \param extents [in]  Any 3D extents box.
+    \param planar [in]  If and only if true, a planar computation is made.
+  */
+  virtual bool contains( const OdGeExtents3d& extents, bool planar, const OdGeTol& tol = OdGeContext::gTol ) const = 0;
+  /** \details
+    Returns true if and only if this Shape object intersects the specfied extents.
+
+    \param extents [in]  Any 3D extents box.
+    \param planar [in]  If and only if true, a planar computation is made.
+  */
+  virtual bool intersects( const OdGeExtents3d& extents, bool planar, const OdGeTol& tol = OdGeContext::gTol ) const = 0;
+
+  virtual ~OdSiShape() {};
+  virtual OdSiShape* clone() const { return 0; }
+  virtual void transform(const OdGeMatrix3d&) {};
+
+  ODSI_API_STATIC static const OdSiShape& kOverallSpace;
+  ODSI_API_STATIC static const OdSiShape& kNoSpace;
+};
+/** \details
+    This class represents Spatial Index Entity objects.
+    Library: SpatialIndex
+
+    <group OdSi_Classes>
+*/
+struct OdSiEntity
+{
+  /** \details
+    Returns the extents of this Entity object.
+
+    \param extents [out]  Receives the extents.
+    \remarks
+    Returns true if and only if this Entity object has extents.
+  */
+  virtual bool extents(OdGeExtents3d& extents) const = 0;
+};
+
+/** \details
+    This class represents Spatial Index Visitor Objects
+    Library: SpatialIndex
+    <group OdSi_Classes>
+*/
+struct OdSiVisitor
+{
+  /** 
+    \param entity [in] Pointer to any OdSiEntity object.
+    completelyInside [in] unknown.
+  */
+  virtual void visit( OdSiEntity* entity, bool completelyInside ) = 0;
+};
+
+class ODSI_API OdSiSpatialIndex;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdSiSpatialIndex object pointers.
+*/
+typedef OdSmartPtr<OdSiSpatialIndex> OdSiSpatialIndexPtr;
+
+/** \details
+    This class represents SpatialIndex objects.
+    Library: SpatialIndex
+    <group OdSi_Classes>
+*/
+class ODSI_API OdSiSpatialIndex : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdSiSpatialIndex);
+
+  /** \details
+    Spatial Index creation flags.
+  */
+  enum CreationFlags
+  {
+    kSiNoFlags       = 0,
+
+    kSiPlanar        = (1 << 0), // Create 2D Spatial Index.
+    kSiModifyMtAware = (1 << 1), // Protect insert/remove/clear by mutex object.
+    kSiAccessMtAware = (1 << 2), // Protect query/extents/tolerance by mutex object.
+
+    kSiFullMtAware   = (kSiModifyMtAware | kSiAccessMtAware)
+  };
+
+  /** \details
+    Creates a SpatialIndex object with the specified parameters.
+    \param flags [in]  Specifies set of flags for Spatial Index creation.
+    \param maxDepth [in]  Maximum depth of the Spatial Index.
+    \param maxCount [in]  Maximum number of nodes in the SpatialIndex.
+    \param eps [in]  Relative tolerance (equalVector).
+
+    \remarks
+    Returns a SmartPointer to the new SpatialIndex object.
+
+    maxDepth specifies the maximum number of times the tree-structured SpatialIndex can branch.
+  */
+  static OdSiSpatialIndexPtr createObject( OdUInt32 flags, unsigned int initialNumEntity, unsigned int maxDepth = 30, unsigned int maxCount = 20, double eps = 1e-10 );
+
+  /** \details
+    Inserts the specified SiEntity object into the this SpatialIndex object.
+    \param entity [in]  Pointer to the OdSiEntity to insert.
+  */
+  virtual void insert( OdSiEntity* entity ) = 0;
+  /** \details
+    Removes the specified SiEntity object into the this SpatialIndex object.
+    \param entity [in]  Pointer to the OdSiEntity to remove.
+    \remarks
+    Returns true if and only if the specified entity was in this SpatialIndex object.
+  */
+  virtual bool remove( OdSiEntity* entity ) = 0;
+
+  /** \details
+    \param shape [in]  Any OdSiShape object.
+    \param visitor [in]  Any OdSiVisitor object.
+  */
+  virtual void query( const OdSiShape& shape, OdSiVisitor& visitor ) const = 0;
+  /** \details
+    Clears this SpatialIndex object.
+  */
+  virtual void clear() = 0;
+  /** \details
+    Sets the maximum depth of this SpatialIndex object.
+    \param maxDepth [in]  Maximum depth.
+    \remarks
+    maxDepth specifies the maximum number of times the tree-structured SpatialIndex can branch.
+  */
+  virtual void setMaxTreeDepth( unsigned char maxDepth ) = 0;
+  /** \details
+    Sets the maxiumum number of nodes in this SpatialIndex object.
+    \param maxCount [in]  Maximum number of nodes.
+  */
+  virtual void setMaxNodeSize( unsigned char maxCount ) = 0;
+  /** \details
+    Returns the extents of this SpatialIndex object.
+
+    \param extents [out]  Receives the extents.
+    \remarks
+    Returns true if and only if this SpatialIndex object has extents.
+  */
+  virtual bool extents(OdGeExtents3d& extents) const = 0;
+
+  /** \details
+    Returns the maximum depth of this SpatialIndex object.
+    \remarks
+    maxDepth specifies the maximum number of times the tree-structured SpatialIndex can branch.
+  */
+  virtual unsigned maxTreeDepth() const = 0;
+
+  /** \details
+    Returns the maxiumum number of nodes in this SpatialIndex object.
+  */
+  virtual unsigned maxNodeSize() const = 0;
+
+  /** \details
+    Returns the tolerance of this SpatialIndex object.
+
+    \remarks
+    Returns tolerance where equalPoint value is scaled by extents of SpatialIndex.
+  */
+  virtual const OdGeTol& tolerance() const = 0;
+};
+
+namespace OdSi
+{
+bool ODSI_API properExtents(const OdGeExtents3d& ext);
+}
+
+#include "TD_PackPop.h"
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SlotManager.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SlotManager.h
new file mode 100755
index 0000000..ee6c099
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SlotManager.h
@@ -0,0 +1,237 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+// SlotManager.h: interface for the OdSlotManager class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef _SLOTMANAGER_H_INCLUDED_
+#define _SLOTMANAGER_H_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "IntArray.h"
+
+
+typedef unsigned int OdSlotId;
+#define kOdNullSlotId OdSlotId(-1)
+
+
+/** \details
+    This class manages OdSlot objects. 
+    
+    <group Other_Classes>
+*/
+class OdSlotManager  
+{
+  OdIntArray  m_freeSlots;
+  unsigned int  m_numSlots;
+public:
+  OdSlotManager() : m_numSlots(0) {}
+  /** \details
+    Adds a Slot to this Slots object.
+
+    \remarks
+    Returns the Slot ID of a new slot.
+  */
+  inline OdSlotId newSlot()
+  {
+    int res;
+    if(m_freeSlots.isEmpty())
+    {
+      res = m_numSlots++;
+    }
+    else
+    {
+      res = m_freeSlots.last();
+      m_freeSlots.removeLast();
+    }
+    return res;
+  }
+
+  /** \details
+    Frees the specified Slot of this Slots object.
+    \param slotId [in]  Slot ID.
+  */
+  inline void freeSlot(OdSlotId slotId)
+  {
+    if(slotId+1==m_numSlots)
+    {
+      --m_numSlots;
+    }
+    else
+    {
+      m_freeSlots.append(slotId);
+    }
+  }
+
+  /** \details
+    Returns true if and and only the specified Slot exists in this Slots object.
+    \param slotId [in]  Slot ID.
+  */
+  inline bool contains(OdSlotId slotId) const
+  {
+    return (slotId < m_numSlots && !m_freeSlots.contains(slotId, 0));
+  }
+
+  /** \details
+    Returns count of allocated slots.
+  */
+  inline unsigned int numSlots() const
+  {
+    return m_numSlots;
+  }
+};
+
+/** \details
+    This template class implements a collection of Slots.
+    
+    \remarks
+    Unlike Array elements, Slots may be empty, filled, or freed. New Slots
+    are either allocated from the list of freed Slots, or added to the
+    end of the underlying Array.
+    
+    <group Other_Classes>
+*/
+template <class TVal, class TAlloc = OdObjectsAllocator<TVal> >
+class OdSlots : public OdArray<TVal, TAlloc>
+{
+  void ensureSpace(OdSlotId slotId)
+  {
+    if(slotId >= this->size())
+    {
+      this->resize(slotId+1);
+    }
+  }
+public:
+  typedef typename OdArray<TVal, TAlloc>::size_type size_type;
+
+  OdSlots() {}
+
+  /** \param physicalLength [in]  Initial physical length.
+    \param growLength [in]  Initial grow length.
+  */
+  OdSlots(size_type physicalLength, int growLength = 8)
+    : OdArray<TVal, TAlloc>(physicalLength, growLength) {}
+
+  /** \details
+    Returns the value of an empty Slot in this Slots object.
+  */
+  static const TVal* emptySlotValue() { static const TVal def = TVal(); return &def; }
+
+  /** \remarks
+    Returns emptySlotValue() if you access an empty Slot in this Slots object.
+  */
+  const TVal& operator[](OdSlotId slotId) const
+  {
+    return (slotId < this->size() ? this->getPtr()[slotId] : *emptySlotValue());
+  }
+  TVal& operator[](OdSlotId slotId)
+  {
+    ensureSpace(slotId);
+    return this->asArrayPtr()[slotId];
+  }
+  /** \details
+    Returns the value at the specified Slot in this Slots object.
+
+    \param slotId [in]  Slot ID.
+    
+    \remarks
+    Returns emptySlotValue() if you access an empty Slot.
+  */
+  const TVal& getAt(OdSlotId slotId) const
+  {
+    return (slotId < this->size() ? this->getPtr()[slotId] : *emptySlotValue());
+  }
+  /** \details
+    Sets the value at the specified Slot ID in this Slots object.
+
+    \param slotId [in]  Slot ID.
+    \param value [in]  Value.
+  */
+  void setAt(OdSlotId slotId, const TVal& value)
+  {
+    ensureSpace(slotId);
+    this->asArrayPtr()[slotId] = value;
+  }
+};
+
+
+/** \details
+    This template class implements Managed collections of Slots. 
+    <group Other_Classes>
+*/
+template <class TVal, class TAlloc = OdObjectsAllocator<TVal> >
+class OdManagedSlots
+  : public OdSlots<TVal, TAlloc>
+  , public OdSlotManager
+{
+public:
+  typedef typename OdSlots<TVal, TAlloc>::size_type size_type;
+
+  OdManagedSlots() {}
+
+  /** \param physicalLength [in]  Initial physical length.
+    \param growLength [in]  Initial grow length.
+  */
+  OdManagedSlots(size_type physicalLength, int growLength = 8)
+    : OdSlots<TVal, TAlloc>(physicalLength, growLength) {}
+
+#ifdef _DEBUG
+  /** \remarks
+    #ifdef _DEBUG, asserts OdSlotManager::contains(slotId) 
+  */
+  const TVal& operator[](OdSlotId slotId) const
+  {
+    ODA_ASSERT(OdSlotManager::contains(slotId)); // invalid slotId
+    return OdSlots<TVal, TAlloc>::operator[](slotId);
+  }
+  TVal& operator[](OdSlotId slotId)
+  {
+    ODA_ASSERT(OdSlotManager::contains(slotId)); // invalid slotId
+    return OdSlots<TVal, TAlloc>::operator[](slotId);
+  }
+
+  /** \remarks
+    #ifdef _DEBUG, asserts OdSlotManager::contains(slotId) 
+  */
+  const TVal& getAt(OdSlotId slotId) const
+  {
+    ODA_ASSERT(OdSlotManager::contains(slotId)); // invalid slotId
+    return OdSlots<TVal, TAlloc>::getAt(slotId);
+  }
+  /** \remarks
+    #ifdef _DEBUG, asserts OdSlotManager::contains(slotId) 
+  */
+  void setAt(OdSlotId slotId, const TVal& value)
+  {
+    ODA_ASSERT(OdSlotManager::contains(slotId)); // invalid slotId
+    OdSlots<TVal, TAlloc>::setAt(slotId, value);
+  }
+#endif //_DEBUG
+};
+
+#include "TD_PackPop.h"
+
+#endif // #ifndef _SLOTMANAGER_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCalloutBlocks.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCalloutBlocks.h
new file mode 100755
index 0000000..faf9c44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCalloutBlocks.h
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmCalloutBlocks_h_Included_
+#define _SmCalloutBlocks_h_Included_
+
+#include "Sm/SmComponent.h"
+#include "Sm/SmNamedDbObjectReference.h"
+#include "Sm/SmEnum.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  typedef OdSmEnum<OdSmDbBlockRecordReference>OdSmEnumDbBlockRecordReference;
+  typedef OdSmartPtr<OdSmEnumDbBlockRecordReference> OdSmEnumDbBlockRecordReferencePtr;
+
+/** \details
+
+     
+*/
+  struct SMDLL_EXPORT OdSmCalloutBlocks : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmCalloutBlocks);
+    virtual void add( OdSmDbBlockRecordReference* pBlkRef ) = 0;
+    virtual void remove( OdSmDbBlockRecordReference* pBlkRef ) = 0;
+    virtual OdSmEnumDbBlockRecordReferencePtr getEnumerator() const = 0;
+  };
+  typedef OdSmartPtr<OdSmCalloutBlocks> OdSmCalloutBlocksPtr;
+}
+
+#endif //_SmCalloutBlocks_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmComponent.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmComponent.h
new file mode 100755
index 0000000..3548c57
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmComponent.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmComponent_h_Included_
+#define _SmComponent_h_Included_
+
+#include "Sm/SmPersist.h"
+#include "Sm/SmCustomProperty.h"
+#define STL_USING_STRING
+#include "OdaSTL.h"
+#include "Sm/SmEnum.h"
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmComponent : OdSmPersist
+  {
+    ODRX_DECLARE_MEMBERS(OdSmComponent);
+    virtual OdString getName() const = 0;
+    virtual void setName( const OdString& name ) = 0;
+    virtual OdString getDesc() const = 0;
+    virtual void setDesc( const OdString& desc ) = 0;
+    virtual OdSmCustomPropertyBag* customProperties()= 0;
+    virtual const OdSmCustomPropertyBag* customProperties() const = 0;
+  };
+  typedef OdSmartPtr<OdSmComponent> OdSmComponentPtr;
+  typedef OdSmEnum<OdSmComponent> OdSmEnumComponent;
+  typedef OdSmartPtr<OdSmEnumComponent> OdSmEnumComponentPtr;
+}
+
+#endif // _SmComponent_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCustomProperty.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCustomProperty.h
new file mode 100755
index 0000000..a2617a4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmCustomProperty.h
@@ -0,0 +1,91 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmCustomProperty_h_Included_
+#define _SmCustomProperty_h_Included_
+
+#include "Sm/SmPersist.h"
+#define STL_USING_STRING
+#include "OdaSTL.h"
+#include <RxObject.h>
+#include <RxVariant.h>
+#include "Sm/SmExport.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  enum PropertyFlags
+  {
+    EMPTY = 0,
+    CUSTOM_SHEETSET_PROP = 1,
+    CUSTOM_SHEET_PROP = 2,
+    IS_CHILD = 4
+  };
+  
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmCustomPropertyValue : public OdSmPersist
+  {
+    ODRX_DECLARE_MEMBERS( OdSmCustomPropertyValue );
+    virtual OdVariant getValue() const = 0;
+    virtual void setValue ( const OdVariant& value ) = 0;
+    virtual PropertyFlags getFlags() const = 0;
+    virtual void setFlags( PropertyFlags value ) = 0;
+  };
+  typedef OdSmartPtr<OdSmCustomPropertyValue> OdSmCustomPropertyValuePtr;
+  
+  /** \details
+
+       
+  */
+  struct OdSmEnumCustomPropertyValue : public OdRxObject
+  {
+    virtual bool next( OdString& propname, const OdSmCustomPropertyValue*& ppValue ) = 0;
+    virtual void reset() = 0;
+  };
+  typedef OdSmartPtr<OdSmEnumCustomPropertyValue> OdSmEnumCustomPropertyValuePtr;
+  
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmCustomPropertyBag : OdSmPersist
+  {
+    ODRX_DECLARE_MEMBERS(OdSmCustomPropertyBag);
+    virtual const OdSmCustomPropertyValue* getProperty( const OdString& name ) const = 0;
+    virtual void setProperty(const OdString& name, OdSmCustomPropertyValue* value ) = 0;
+    virtual OdSmEnumCustomPropertyValuePtr getPropertyEnumerator() const = 0;
+    virtual bool removeProperty(const OdString& name) = 0;
+  };
+  typedef OdSmartPtr<OdSmCustomPropertyBag> OdSmCustomPropertyBagPtr;
+}
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDatabase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDatabase.h
new file mode 100755
index 0000000..8a876cd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDatabase.h
@@ -0,0 +1,81 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmDatabase_h_Included
+#define _SmDatabase_h_Included
+
+#include "Sm/SmComponent.h"
+#include "Sm/SmCustomProperty.h"
+#include "Sm/SmEvents.h"
+#include "Sm/SmSheetSet.h"
+#include "Sm/SmEnum.h"
+#include "Sm/SmPersist.h"
+#include "Sm/SmObjectId.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  typedef OdSmEnum<OdSmPersist> OdSmEnumPersist;
+  typedef OdSmartPtr<OdSmEnumPersist> OdSmEnumPersistPtr;
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmDatabase : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS( OdSmDatabase );
+    virtual void loadFromFile( const OdString& filename ) = 0;
+    virtual void loadFromStream(OdStreamBuf* file) = 0;
+    virtual void save(OdStreamBuf* file = 0) = 0;
+    virtual OdString fileName() const = 0;
+    virtual void setFileName ( const OdString& newVal ) = 0;
+    virtual OdString templateDstFileName() const = 0;
+    virtual OdSmSheetSet* sheetSet() = 0;
+    virtual const OdSmSheetSet* sheetSet() const = 0;
+    virtual OdSmEnumPersistPtr enumerator() const = 0;
+    virtual long subscribe( OdSmEvents * eventHandler ) = 0;
+    virtual void unSubscribe( long cookie ) = 0;
+    virtual void notifyRegisteredEventHandlers( OdSmEvent event, OdSmPersist * comp ) const = 0;
+    virtual OdSmPersist* findObject( const OdString& hand ) const = 0;
+    virtual void findAcDbObjectReferences(const OdString& filename, const OdString& dbHandle, std::vector<OdSmPersist*>& ppObjects ) = 0;
+    virtual void updateInMemoryDwgHints() = 0;
+    virtual bool isTemporary() const = 0;
+    virtual void setIsTemporary() = 0;
+    virtual OdSmObjectIdPtr registerNewObject(const OdString& hand, OdSmPersist* pObject ) = 0;
+    virtual OdString version() const = 0;
+    virtual OdInt32 getRevision() const = 0;
+    virtual OdString getFingerPrint() const = 0;
+  };
+
+  typedef OdSmartPtr<OdSmDatabase> OdSmDatabasePtr;
+}
+
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDbObjectReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDbObjectReference.h
new file mode 100755
index 0000000..53c2743
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmDbObjectReference.h
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmDbObjectReference_h_Included_
+#define _SmDbObjectReference_h_Included_
+
+#include "Sm/SmFileReference.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmDbObjectReference : OdSmFileReference
+  {
+    ODRX_DECLARE_MEMBERS( OdSmDbObjectReference );
+    virtual void setDbHandle(const OdString& ) = 0;
+    virtual OdString getDbHandle() const = 0;
+  };
+  typedef OdSmartPtr<OdSmDbObjectReference> OdSmDbObjectReferencePtr;
+}
+
+#endif //_SmDbObjectReference_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEnum.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEnum.h
new file mode 100755
index 0000000..d3eb189
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEnum.h
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmEnum_h_Included_
+#define _SmEnum_h_Included_
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  template <class T> struct OdSmEnum : public OdRxObject
+  {
+    virtual T* next() = 0;
+    virtual void reset() = 0;
+  };
+}
+
+#endif //_SmEnum_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEvents.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEvents.h
new file mode 100755
index 0000000..9081c64
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmEvents.h
@@ -0,0 +1,80 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmEvents_h_Included_
+#define _SmEvents_h_Included_
+
+#include "Sm/SmPersist.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  enum OdSmEvent
+  {
+    SHEET_ADDED = 0,
+    SHEET_DELETED = 1,
+    SHEET_SUBSET_CREATED = 2,
+    SHEET_SUBSET_DELETED = 3,
+    SHEET_SELECTION_SET_CREATED = 4,
+    SHEET_SELECTION_SET_DELETED = 5,
+    SHEET_VIEW_CREATED = 6,
+    SHEET_VIEW_DELETED = 7,
+    SHEET_VIEW_CATEGORY_CREATED = 8,
+    SHEET_VIEW_CATEGORY_DELETED = 9,
+    MODEL_RESOURCE_ADDED = 10,
+    MODEL_RESOURCE_DELETED = 11,
+    CALLOUT_BLOCK_ADDED = 12,
+    CALLOUT_BLOCK_DELETED = 13,
+    SHEETS_RENUMBERED = 14,
+    ACSM_DATABASE_CREATED = 15,
+    ACSM_DATABASE_OPENED = 16,
+    ACSM_DATABASE_IS_CLOSING = 17,
+    ACSM_DATABASE_WATCH_ERROR = 18,
+    ACSM_DATABASE_LOCKED = 19,
+    ACSM_DATABASE_UNLOCKED = 20,
+    ACSM_DATABASE_CHANGED = 21,
+    ACSM_DATABASE_INITNEW_BEGIN = 22,
+    ACSM_DATABASE_INITNEW_FAILED = 23,
+    ACSM_DATABASE_INITNEW_COMPLETE = 24,
+    ACSM_DATABASE_LOAD_BEGIN = 25,
+    ACSM_DATABASE_LOAD_FAILED = 26,
+    ACSM_DATABASE_LOAD_COMPLETE = 27
+  };
+
+  /** \details
+
+       
+  */
+  struct OdSmEvents : public OdRxObject
+  {
+    virtual void onChanged( OdSmEvent event, OdSmPersist * comp ) = 0;
+  };
+}
+
+#endif //_SmEvents_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmExport.h
new file mode 100755
index 0000000..0a6669c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmExport.h
@@ -0,0 +1,41 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _SmExport_h_Included_
+#define _SmExport_h_Included_
+
+
+#include "OdPlatformSettings.h"
+
+#ifdef SM_DLL_EXPORTS
+  #define SMDLL_EXPORT          OD_TOOLKIT_EXPORT
+  #define SMDLL_EXPORT_STATIC   OD_STATIC_EXPORT
+#else
+  #define SMDLL_EXPORT          OD_TOOLKIT_IMPORT
+  #define SMDLL_EXPORT_STATIC   OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif //_SmExport_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFileReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFileReference.h
new file mode 100755
index 0000000..1d2c8d6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFileReference.h
@@ -0,0 +1,52 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmFileReference_h_Included_
+#define _SmFileReference_h_Included_
+
+#include "Sm/SmPersist.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmFileReference : OdSmPersist
+  {
+    ODRX_DECLARE_MEMBERS(OdSmFileReference);
+    virtual void setFileName(const OdString& pValue ) = 0;
+    virtual OdString getFileName() const = 0;
+    virtual OdString resolveFileName() = 0;
+  };
+  typedef OdSmartPtr<OdSmFileReference> OdSmFileReferencePtr;
+}
+
+#endif //_SmFileReference_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFiler.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFiler.h
new file mode 100755
index 0000000..9f7f81d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmFiler.h
@@ -0,0 +1,89 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmFiler_h_Included_
+#define _SmFiler_h_Included_
+
+#include "RxObject.h"
+#define STL_USING_STRING
+#include "OdaSTL.h"
+#include "Sm/SmObjectId.h"
+#include <OdString.h>
+#include <RxVariant.h>
+#include <OdStreamBuf.h>
+
+#ifndef GUID_DEFINED
+struct GUID;
+#endif
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  struct OdSmDatabase;
+  struct OdSmObjectReference;
+
+  /** \details
+
+       
+  */
+  struct OdSmFiler : public OdRxObject 
+  {
+    virtual bool init( OdStreamBuf* file, OdSmDatabase *pDb, bool bForWrite ) = 0;
+    virtual void close() = 0;
+    virtual OdSmDatabase* getDatabase() = 0;
+    // virtual void PushCurrentWriteObject( OdSmPersist * pObj ) = 0;
+    // virtual void PopCurrentWriteObject(long bSuccess ) = 0;
+    virtual void pushCurrentReadObject( const OdSmPersist * pObj ) = 0;
+    virtual void popCurrentReadObject( bool bSuccess ) = 0;
+    virtual const OdSmPersist* getCurrentObject() const = 0;
+    // virtual void GetCurrentObjectHeaderInfo( /*[out]*/ SAFEARRAY * * names, /*[out]*/ SAFEARRAY * * values ) = 0;
+    // virtual long GetRevisionNumber() = 0;
+    virtual OdSmPersist* readObject() = 0;
+    virtual bool readProperty( OdString& ppPropname, OdVariant& pVal ) = 0;
+    virtual bool readRawData( OdStreamBuf* pStreamBuf ) = 0;
+    virtual bool readReference( OdSmObjectReference* ) = 0;
+
+    virtual void writeObject( const OdSmPersist* pObj ) = 0;
+    virtual void writeProperty(const OdString& pPropname, const OdVariant& pVal ) = 0;
+    virtual void writeRawData( OdStreamBuf* pStreamBuf ) = 0;
+    virtual bool readGuid( GUID& ) = 0;
+    virtual bool readInt( long& ) = 0;
+    virtual bool readDouble( double& ) = 0;
+    virtual bool readString( OdString& ) = 0;
+    // virtual void ReadBytes( /*[out]*/ unsigned char * * p, /*[in,out]*/ long * count ) = 0;
+    virtual void writeGuid( const GUID& id ) = 0;
+    virtual void writeInt( long pInt ) = 0;
+    virtual void writeDouble( double pDbl ) = 0;
+    virtual void writeString(const OdString& s ) = 0;
+    // virtual void WriteBytes( unsigned char * p, long count ) = 0;
+    virtual void writeReference( const OdSmObjectReference* ) = 0;
+  };
+}
+
+#endif //_SmFiler_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmNamedDbObjectReference.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmNamedDbObjectReference.h
new file mode 100755
index 0000000..a9c91ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmNamedDbObjectReference.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmNamedDbObjectReference_h_Included_
+#define _SmNamedDbObjectReference_h_Included_
+
+#include "Sm/SmDbObjectReference.h"
+#include <OdString.h>
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmNamedDbObjectReference : OdSmDbObjectReference
+  {
+    ODRX_DECLARE_MEMBERS(OdSmNamedDbObjectReference);
+    virtual void setName(const OdString& name ) = 0;
+    virtual OdString getName() const = 0;
+    // owner currently is not saved to file, because these methods are not 
+    // implemented in "acsmcomponents16.dll" library, and correct tag name for OwnerDbHandle is unknown
+    virtual void setOwnerDbHandle(const OdString& handle ) = 0;
+    virtual OdString getOwnerDbHandle() const = 0;
+  };
+  
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmDbBlockRecordReference : OdSmNamedDbObjectReference 
+  {
+    ODRX_DECLARE_MEMBERS(OdSmDbBlockRecordReference);
+  };
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmDbViewReference : OdSmNamedDbObjectReference 
+  {
+    ODRX_DECLARE_MEMBERS(OdSmDbViewReference);
+  };
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmDbLayoutReference : OdSmNamedDbObjectReference 
+  {
+    ODRX_DECLARE_MEMBERS(OdSmDbLayoutReference);
+  };
+  
+  typedef OdSmartPtr<OdSmNamedDbObjectReference> OdSmNamedDbObjectReferencePtr;
+  typedef OdSmartPtr<OdSmDbBlockRecordReference>OdSmDbBlockRecordReferencePtr;
+  typedef OdSmartPtr<OdSmDbViewReference>OdSmDbViewReferencePtr;
+  typedef OdSmartPtr<OdSmDbLayoutReference>OdSmDbLayoutReferencePtr;
+}
+
+#endif //_SmNamedDbObjectReference_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmObjectId.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmObjectId.h
new file mode 100755
index 0000000..aed7906
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmObjectId.h
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmObjectId_h_Included_
+#define _SmObjectId_h_Included_
+
+#include <RxObject.h>
+#include <OdString.h>
+#include "Sm/SmPersist.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  struct OdSmDatabase;
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmObjectId : public OdRxObject 
+  {
+    ODRX_DECLARE_MEMBERS(OdSmObjectId);
+    virtual OdString getHandle() const = 0;
+    virtual const OdSmDatabase* getDatabase() const = 0;
+    virtual const OdSmPersist* getOwner() const = 0;
+    virtual bool isEqual( OdSmObjectId* pId ) const = 0;
+    virtual bool isValid() const = 0;
+  };
+  typedef OdSmartPtr<OdSmObjectId> OdSmObjectIdPtr;
+}
+
+#endif //_SmObjectId_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersist.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersist.h
new file mode 100755
index 0000000..8214255
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersist.h
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmPersist_h_Included_
+#define _SmPersist_h_Included_
+
+#include <RxObject.h>
+#define STL_USING_STRING
+#define STL_USING_VECTOR
+#include <OdaSTL.h>
+#include <OdString.h>
+#include "Sm/SmExport.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  struct OdSmFiler;
+  struct OdSmDatabase;
+  struct OdSmObjectId;
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmPersist : public OdRxObject
+  {
+    ODRX_DECLARE_MEMBERS(OdSmPersist);
+    virtual OdString clsid() const = 0;
+    virtual bool isDirty() const = 0;
+    virtual bool load ( OdSmFiler * pFiler ) = 0;
+    virtual void save ( OdSmFiler * pFiler ) const = 0;
+    virtual OdString typeName() const = 0;
+    virtual void initNew( const OdSmPersist* pOwner, const OdString& handle = OdString::kEmpty ) = 0;
+    virtual const OdSmPersist* owner() const = 0;
+    virtual void setOwner( const OdSmPersist * pOwner ) = 0;
+    virtual const OdSmDatabase* database() const = 0;
+    virtual const OdSmObjectId* objectId() const = 0;
+    virtual void clear() = 0;
+    virtual void directlyOwnedObjects( std::vector<OdSmPersist*>& ) const = 0;
+  };
+  
+  typedef OdSmartPtr<OdSmPersist> OdSmPersistPtr;
+}
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersistProxy.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersistProxy.h
new file mode 100755
index 0000000..5493594
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPersistProxy.h
@@ -0,0 +1,52 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmPersistProxy_h_Included_
+#define _SmPersistProxy_h_Included_
+
+#include <OdStreamBuf.h>
+#include "Sm/SmPersist.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct OdSmPersistProxy : OdSmPersist
+  {
+    ODRX_DECLARE_MEMBERS(OdSmPersistProxy);
+    virtual void setClassID(const OdString& classID ) = 0;
+    virtual void setTypeName(const OdString& value ) = 0;
+    virtual OdStreamBufPtr getRawData() const = 0;
+  };
+  typedef OdSmartPtr<OdSmPersistProxy> OdSmPersistProxyPtr;
+}
+#endif //_SmPersistProxy_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocation.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocation.h
new file mode 100755
index 0000000..dce366b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocation.h
@@ -0,0 +1,63 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmProjectPointLocation_h_Included_
+#define _SmProjectPointLocation_h_Included_
+
+#include "Sm/SmPersist.h"
+#include "OdString.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmProjectPointLocation : OdSmPersist
+  {
+    ODRX_DECLARE_MEMBERS(OdSmProjectPointLocation);
+    virtual OdString getName() const = 0;
+    virtual void setName(const OdString& name ) = 0;
+    virtual OdString getURL() const = 0;
+    virtual void setURL(const OdString& url ) = 0;
+    virtual OdString getFolder() const = 0;
+    virtual void setFolder(const OdString& folder ) = 0;
+    virtual OdString getUsername() const = 0;
+    virtual void setUsername(const OdString& username ) = 0;
+    virtual OdString getPassword() const = 0;
+    virtual void setPassword(const OdString& password ) = 0;
+    virtual long getResourceType() const = 0;
+    virtual void setResourceType(long value) = 0;
+
+  };
+  typedef OdSmartPtr<OdSmProjectPointLocation> OdSmProjectPointLocationPtr;
+}
+
+#endif //_SmProjectPointLocation_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocations.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocations.h
new file mode 100755
index 0000000..3b232e5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmProjectPointLocations.h
@@ -0,0 +1,59 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmProjectPointLocations_h_Included_
+#define _SmProjectPointLocations_h_Included_
+
+#include "Sm/SmProjectPointLocation.h"
+#include "Sm/SmEnum.h"
+#include "Sm/SmComponent.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  typedef OdSmEnum<OdSmProjectPointLocation> OdSmEnumProjectPointLocation;
+  typedef OdSmartPtr<OdSmEnumProjectPointLocation> OdSmEnumProjectPointLocationPtr;
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmProjectPointLocations : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmProjectPointLocations);
+    virtual const OdSmProjectPointLocation* getLocation(const OdString& locationName ) const = 0;
+    virtual void removeLocation( OdSmProjectPointLocation* location ) = 0;
+    virtual OdSmProjectPointLocation* addNewLocation(const OdString& name, const OdString& url, 
+      const OdString& folder, const OdString& username, const OdString& password ) = 0;
+    virtual OdSmEnumProjectPointLocationPtr getEnumerator() const = 0;
+  };
+  typedef OdSmartPtr<OdSmProjectPointLocations> OdSmProjectPointLocationsPtr;
+}
+
+#endif //_SmProjectPointLocations_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPublishOptions.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPublishOptions.h
new file mode 100755
index 0000000..0961a12
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmPublishOptions.h
@@ -0,0 +1,74 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmPublishOptions_h_Included_
+#define _SmPublishOptions_h_Included_
+
+#include "Sm/SmPersist.h"
+#include "Sm/SmFileReference.h"
+#include "Sm/SmCustomProperty.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmPublishOptions : OdSmPersist
+  {
+    ODRX_DECLARE_MEMBERS(OdSmPublishOptions);
+    virtual const OdSmFileReference* getDefaultOutputdir() const = 0;
+    virtual void setDefaultOutputdir( OdSmFileReference* pValue ) = 0;
+    virtual bool getDwfType() const = 0;
+    virtual void setDwfType( bool value ) = 0;
+    virtual bool getPromptForName() const = 0;
+    virtual void setPromptForName( bool value ) = 0;
+    virtual bool getUsePassword() const = 0;
+    virtual void setUsePassword( bool value ) = 0;
+    virtual bool getPromptForPassword() const = 0;
+    virtual void setPromptForPassword( bool value ) = 0;
+    virtual bool getLayerInfo() const = 0;
+    virtual void setLayerInfo( bool value ) = 0;
+    virtual const OdSmCustomPropertyBag* getUnrecognizedData() const = 0;
+    virtual void setUnrecognizedData( OdSmCustomPropertyBag * bag ) = 0;
+    virtual const OdSmCustomPropertyBag* getUnrecognizedSections() const = 0;
+    virtual void setUnrecognizedSections( OdSmCustomPropertyBag* sectionArray ) = 0;
+    // Retrieves the boolean flag that indicates if the application should include SheetSet Data.
+    virtual bool getIncludeSheetSetData() const = 0;
+    //Sets/Modifies the boolean flag that indicates if the application should include SheetSet Data property.
+    virtual void setIncludeSheetSetData(bool value) = 0;
+    // Retrieves the boolean flag that indicates if the application should include Sheet Data.
+    virtual bool getIncludeSheetData() const = 0;
+    //Sets/Modifies the boolean flag that indicates if the application should include Sheet Data.
+    virtual void setIncludeSheetData(bool value) = 0;
+  };
+  typedef OdSmartPtr<OdSmPublishOptions> OdSmPublishOptionsPtr;
+}
+#endif //_SmPublishOptions_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmResources.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmResources.h
new file mode 100755
index 0000000..ab9a562
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmResources.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmResources_h_Included_
+#define _SmResources_h_Included_
+
+#include "Sm/SmFileReference.h"
+#include "Sm/SmComponent.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  typedef OdSmEnum<OdSmFileReference>OdSmEnumFileReference;
+  typedef OdSmartPtr<OdSmEnumFileReference>OdSmEnumFileReferencePtr;
+  
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmResources : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmResources);
+    virtual void add( OdSmFileReference* pResource ) = 0;
+    virtual void remove( OdSmFileReference* pResource ) = 0;
+    virtual OdSmEnumFileReferencePtr getEnumerator() const = 0;
+  };
+
+  typedef OdSmartPtr<OdSmResources> OdSmResourcesPtr;
+}
+#endif //_SmResources_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheet.h
new file mode 100755
index 0000000..d723a03
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheet.h
@@ -0,0 +1,87 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSheet_h_Included_
+#define _SmSheet_h_Included_
+
+#include "Sm/SmComponent.h"
+#include "Sm/SmNamedDbObjectReference.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  struct OdSmSheetViews;
+
+  /** \details
+    Sheet component
+  */
+  struct SMDLL_EXPORT OdSmSheet : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmSheet);
+    // Retrieves the number property of the sheet
+    virtual OdString getNumber() = 0;
+    // Sets/Modifies the number property of the sheet
+    virtual void setNumber(const OdString&) = 0;
+    // Retrieves the title property of the sheet
+    virtual OdString getTitle() = 0;
+    // Sets/Modifies the number property of the sheet
+    virtual void setTitle (const OdString&) = 0;
+    // Returns the OdSmDbLayoutReference which references the OdDbLayout that is associated with this sheet component.
+    virtual OdSmDbLayoutReference* getLayout() = 0;
+    // Sets the OdSmDbLayoutReference which references the OdDbLayout that is associated with this sheet component.
+    virtual void setLayout( OdSmDbLayoutReference* pLayoutRef ) = 0;
+    // Returns a boolean flag that signifies if this sheet should be skipped during plot/publish.
+    virtual bool getDoNotPlot() = 0;
+    // Sets a boolean flag that signifies if this sheet should be skipped during plot/publish.
+    virtual void setDoNotPlot( bool doNotPlot ) = 0;
+    virtual OdSmSheetViews* getSheetViews() = 0;
+    
+    // New properties added in 1.1
+    
+    // Retrieves the Revision Number this sheet is associated with.
+    virtual OdString getRevisionNumber() const = 0;
+    // Set the Revision Number this sheet is associated with.
+    virtual void setRevisionNumber(const OdString& newVal) = 0;
+    // Retrieves the Revision Date property.
+    virtual OdString getRevisionDate() const = 0;
+    // Set the Revision Date property.
+    virtual void setRevisionDate(const OdString& newVal) = 0;
+    // Retrieves the Issue Purpose property.
+    virtual OdString getIssuePurpose() const = 0;
+    // Set the Issue Purpose property.
+    virtual void setIssuePurpose(const OdString& newVal) = 0;
+    // Retrieves the Category property.
+    virtual OdString getCategory() const = 0;
+    // Set the Category property.
+    virtual void setCategory(const OdString& newVal) = 0;
+  };
+  typedef OdSmartPtr<OdSmSheet> OdSmSheetPtr;
+}
+
+#endif //_SmSheet_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSet.h
new file mode 100755
index 0000000..ba2e5bc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSet.h
@@ -0,0 +1,55 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSheetSelSet_h_Included_
+#define _SmSheetSelSet_h_Included_
+
+#include "Sm/SmComponent.h"
+#include "Sm/SmEnum.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmSheetSelSet : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmSheetSelSet);
+    virtual void add( OdSmComponent* comp ) = 0;
+    virtual void remove( OdSmComponent* comp ) = 0;
+    virtual OdSmEnumComponentPtr getEnumerator() const = 0;
+  };
+  typedef OdSmartPtr<OdSmSheetSelSet>OdSmSheetSelSetPtr;
+  typedef OdSmEnum<OdSmSheetSelSet> OdSmEnumSheetSelSet;
+  typedef OdSmartPtr<OdSmEnumSheetSelSet> OdSmEnumSheetSelSetPtr;
+}
+
+#endif //_SmSheetSelSet_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSets.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSets.h
new file mode 100755
index 0000000..569d76d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSelSets.h
@@ -0,0 +1,51 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSheetSelSets_h_Included_
+#define _SmSheetSelSets_h_Included_
+
+#include "Sm/SmSheetSelSet.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmSheetSelSets : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmSheetSelSets);
+    virtual OdSmSheetSelSet* add(const OdString& name, const OdString& desc ) = 0;
+    virtual void remove( OdSmSheetSelSet* selset ) = 0;
+    virtual OdSmEnumSheetSelSetPtr getEnumerator() const = 0;
+  };
+  typedef OdSmartPtr<OdSmSheetSelSets>OdSmSheetSelSetsPtr;
+}
+#endif //_SmSheetSelSets_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSet.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSet.h
new file mode 100755
index 0000000..4c2e683
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSet.h
@@ -0,0 +1,110 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSheetSet_h_Included_
+#define _SmSheetSet_h_Included_
+
+#include "Sm/SmSubset.h"
+#include "Sm/SmProjectPointLocations.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  struct OdSmSheetSelSets;
+  struct OdSmResources;
+  struct OdSmCalloutBlocks;
+  struct OdSmViewCategories;
+  struct OdSmPublishOptions;
+  
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmSheetSet : OdSmSubset
+  {
+    ODRX_DECLARE_MEMBERS(OdSmSheetSet);
+    // Retrieves the template containing alternative page setups
+    virtual const OdSmFileReference* getAltPageSetups() const = 0;
+    //
+    virtual void setAltPageSetups ( OdSmFileReference * pDwtRef ) = 0;
+    // Retrieves the default page setup within the template containing alternative page setups
+    virtual const OdSmNamedDbObjectReference* getDefAltPageSetup() const = 0;
+    //
+    virtual void setDefAltPageSetup ( OdSmNamedDbObjectReference * pAltPageSetup ) = 0;
+    //
+    virtual bool getPromptForDwgName() const = 0;
+    virtual void setPromptForDwgName( bool askForName ) = 0;
+    // Returns a collection of the sheet selection sets associated with the sheet set.
+    virtual OdSmSheetSelSets* getSheetSelSets() = 0;
+    virtual const OdSmSheetSelSets* getSheetSelSets() const = 0;
+    // Returns a collection of the resources associated with the sheet set
+    virtual OdSmResources* getResources() = 0;
+    virtual const OdSmResources* getResources() const = 0;
+    // Returns a collection of callout block references that are associated with the sheet 
+    virtual OdSmCalloutBlocks* getCalloutBlocks() = 0;
+    virtual const OdSmCalloutBlocks* getCalloutBlocks() const = 0;
+    // reserved
+    virtual OdSmViewCategories* getViewCategories() = 0;
+    virtual const OdSmViewCategories* getViewCategories() const = 0;
+    // Returns the label block definition for the sheet set. 
+    virtual const OdSmDbBlockRecordReference* getDefLabelBlk() const = 0;
+    // sets the label block definition for the sheet set. 
+    virtual void setDefLabelBlk ( OdSmDbBlockRecordReference* pLabelBlkRef ) = 0;
+    // Returns the collection of the publish options contained in this sheet set.
+    virtual OdSmPublishOptions* getPublishOptions() = 0;
+    virtual const OdSmPublishOptions* getPublishOptions() const = 0;
+    //
+    virtual long subscribe( OdSmEvents * eventHandler ) = 0;
+    virtual void unSubscribe( long cookie ) = 0;
+    // internal
+    virtual void updateSheetCustomProps() = 0;
+
+    // New properties available in 1.1 version (AcSmComponents16)
+
+    // Retrieves the Project Number this sheet set is associated with.
+    virtual OdString getProjectNumber() const = 0;
+    // "Set the Project Number this sheet set is associated with."
+    virtual void setProjectNumber(const OdString& newVal) = 0;
+    // "Retrieves the Project Name this sheet set is associated with."
+    virtual OdString getProjectName() const = 0;
+    // "Set the Project Name this sheet set is associated with."
+    virtual void setProjectName(const OdString& newVal) = 0;
+    // "Retrieves the Project Phase property."
+    virtual OdString getProjectPhase() const = 0;
+    // "Set the Project Phase property."
+    virtual void setProjectPhase(const OdString& newVal) = 0;
+    // "Retrieves the Project Milestone property."
+    virtual OdString getProjectMilestone() const = 0;
+    // "Set the Project Milestone property."
+    virtual void setProjectMilestone(const OdString& newVal) = 0;
+  };
+  typedef OdSmartPtr<OdSmSheetSet> OdSmSheetSetPtr;
+}
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSetMgr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSetMgr.h
new file mode 100755
index 0000000..f3fc97f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetSetMgr.h
@@ -0,0 +1,68 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSheetSetMgr_h_Included_
+#define _SmSheetSetMgr_h_Included_
+
+#include <RxObject.h>
+#include <OdString.h>
+#include "Sm/SmEvents.h"
+#include "Sm/SmExport.h"
+#include "Sm/SmSheetSet.h"
+#include "Sm/SmSheet.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  typedef OdSmEnum<OdSmDatabase> OdSmEnumDatabase;
+  typedef OdSmartPtr<OdSmEnumDatabase>OdSmEnumDatabasePtr;
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmSheetSetMgr : public OdRxObject
+  {
+    ODRX_DECLARE_MEMBERS( OdSmSheetSetMgr );
+    virtual OdSmDatabase* createDatabase( const OdString& filename, const OdString& templatefilename, bool bAlwaysCreate = true ) = 0;
+    virtual OdSmDatabase* openDatabase( const OdString& filename, bool bFailIfAlreadyOpen = false, OdStreamBuf* file = 0 ) = 0;
+    virtual OdSmDatabase* findOpenDatabase( const OdString& filename ) = 0;
+    virtual void closeAll() = 0;
+    virtual void close( OdSmDatabase* db ) = 0;
+    virtual long subscribe( OdSmEvents * eventHandler ) = 0;
+    virtual void unSubscribe( long cookie ) = 0;
+    virtual OdSmSheetSet* getParentSheetSet( const OdString& dwg, const OdString& layout ) = 0;
+    virtual OdSmSheet* getSheetFromLayout( const OdString& filename, const OdString& handle ) = 0;
+    virtual OdSmEnumDatabasePtr getDatabaseEnumerator() const = 0;
+  };
+  
+  typedef OdSmartPtr<OdSmSheetSetMgr> OdSmSheetSetMgrPtr;
+}
+
+#endif //_SmSheetSetMgr_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetView.h
new file mode 100755
index 0000000..942dbec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetView.h
@@ -0,0 +1,62 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSheetView_h_Included_
+#define _SmSheetView_h_Included_
+
+#include "Sm/SmComponent.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  struct OdSmViewCategory;
+  struct OdSmDbViewReference;
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmSheetView : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmSheetView);
+    virtual const OdSmDbViewReference* getNamedView() const = 0;
+    virtual void setNamedView( OdSmDbViewReference* pViewRef ) = 0;
+    virtual OdSmViewCategory* getCategory() const = 0;
+    virtual void setCategory(  OdSmViewCategory* pViewCat ) = 0;
+    virtual OdString getNumber() const = 0;
+    virtual void setNumber( const OdString& num ) = 0;
+    virtual OdString getTitle() const = 0;
+    virtual void setTitle( const OdString& title ) = 0;
+  };
+  typedef OdSmEnum<OdSmSheetView> OdSmEnumSheetView;
+  typedef OdSmartPtr<OdSmEnumSheetView> OdSmEnumSheetViewPtr;
+  typedef OdSmartPtr<OdSmSheetView> OdSmSheetViewPtr;
+}
+
+#endif //_SmSheetView_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetViews.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetViews.h
new file mode 100755
index 0000000..ec79ff9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSheetViews.h
@@ -0,0 +1,57 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSheetViews_h_Included_
+#define _SmSheetViews_h_Included_
+
+#include "Sm/SmComponent.h"
+#include "Sm/SmSheetView.h"
+#include "Sm/SmCustomProperty.h"
+#include "Sm/SmEnum.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmSheetViews : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmSheetViews);
+    virtual OdSmEnumSheetViewPtr getEnumerator() = 0;
+    virtual void clear() = 0;
+    virtual void addView( OdSmSheetView* view ) = 0;
+    virtual void removeView( OdSmSheetView* view ) = 0;
+  };
+  
+  typedef OdSmartPtr<OdSmSheetViews> OdSmSheetViewsPtr;
+}
+
+#endif //_SmSheetViews_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSubset.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSubset.h
new file mode 100755
index 0000000..3816882
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmSubset.h
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmSubset_h_Included_
+#define _SmSubset_h_Included_
+
+#include "Sm/SmComponent.h"
+#include <OdString.h>
+#include "Sm/SmEvents.h"
+#include "Sm/SmFileReference.h"
+#include "Sm/SmNamedDbObjectReference.h"
+#include "Sm/SmSheet.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  struct SMDLL_EXPORT OdSmSubset;
+  typedef OdSmartPtr<OdSmSubset> OdSmSubsetPtr;
+
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmSubset : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmSubset);
+    // Returns the OdSmFileReference that points to the location in the file system where new sheets are created. 
+    virtual const OdSmFileReference* getNewSheetLocation() const = 0;
+    // sets the OdSmFileReference that points to the location in the file system where new sheets are created
+    virtual void setNewSheetLocation ( OdSmFileReference* pFileRef ) = 0;
+    // Returns the OdSmNamedAcDbObjectReference that points to the layout used as a template for new sheets. 
+    virtual const OdSmDbLayoutReference* getDefDwtLayout() const = 0;
+    // sets the OdSmDbLayoutReference that points to the layout used as a template for new sheets.
+    virtual void setDefDwtLayout ( OdSmDbLayoutReference* pLayoutRef ) = 0;
+    // Returns a Boolean flag indicating if the application should prompt for a DWT file.
+    virtual bool getPromptForDwt() const = 0;
+    // sets a Boolean flag indicating if the application should prompt for a DWT file.
+    virtual void setPromptForDwt( bool askForDwt ) = 0;
+    // Returns a Boolean flag indicating an override for the subset's sheets DoNotPlot option.
+    virtual bool getOverrideSheetPublish() const = 0;
+    // sets a Boolean flag indicating an override for the subset's sheets DoNotPlot option.
+    virtual void setOverrideSheetPublish( bool override ) = 0;
+    // Returns an enumerator of all components in this subset
+    virtual OdSmEnumComponentPtr getSheetEnumerator() const = 0;
+    // Adds a new sheet component without adding it to the subset.
+    // To add the new sheet component to the subset, use the InsertComponent method
+    virtual OdSmSheetPtr addNewSheet( const OdString& name, const OdString& desc ) = 0;
+    // Inserts a sheet at the position specified.
+    virtual void insertComponent ( OdSmComponent* newSheet, OdSmComponent* beforeComp = 0) = 0;
+    // Inserts a sheet at the position specified
+    virtual void insertComponentAfter( OdSmComponent* newSheet, OdSmComponent* afterComp = 0 ) = 0;
+    // Adds a new sheet component that references the layout of OdSmDbLayoutReference. 
+    // The new component is not added to the subset.
+    // To add the new sheet component to the subset, use the InsertComponent method
+    virtual OdSmSheetPtr importSheet( OdSmDbLayoutReference* pLayoutRef ) = 0;
+    // Removes the specified sheet component from the subset.
+    virtual void removeSheet( OdSmSheet * sheet ) = 0;
+    // Adds a new subset component without adding it to the current subset.
+    virtual OdSmSubsetPtr createSubset( const OdString& name, const OdString& desc ) = 0;
+    // Removes the specified subset component from the collection
+    virtual void removeSubset( OdSmSubset * subset ) = 0;
+    // Forces a notification to all registered notification handlers
+    virtual void notifyRegisteredEventHandlers( OdSmEvent event, OdSmPersist * comp ) = 0;
+    // Updates the hints in the open drawings referenced in the subset
+    virtual void updateInMemoryDwgHints ( ) = 0;
+  };
+}
+
+#endif //_SmSubset_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategories.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategories.h
new file mode 100755
index 0000000..a9f718a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategories.h
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmViewCategories_h_Included_
+#define _SmViewCategories_h_Included_
+
+#include "Sm/SmComponent.h"
+#include "Sm/SmViewCategory.h"
+#include "Sm/SmEnum.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  typedef OdSmEnum<OdSmViewCategory>OdSmEnumViewCategory;
+  typedef OdSmartPtr<OdSmEnumViewCategory> OdSmEnumViewCategoryPtr;
+  
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmViewCategories : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmViewCategories);
+    virtual OdSmEnumViewCategoryPtr getEnumerator() const = 0;
+    virtual OdSmViewCategory* createViewCategory( const OdString& name, const OdString& desc, const OdString& id ) = 0;
+    virtual void removeViewCategory( OdSmViewCategory * viewCat ) = 0;
+    virtual OdSmViewCategory* getDefaultViewCategory() = 0;
+  };
+  typedef OdSmartPtr<OdSmViewCategories> OdSmViewCategoriesPtr;
+}
+
+#endif //_SmViewCategories_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategory.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategory.h
new file mode 100755
index 0000000..492a9fe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Sm/SmViewCategory.h
@@ -0,0 +1,52 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SmViewCategory_h_Included_
+#define _SmViewCategory_h_Included_
+
+#include "Sm/SmSheetView.h"
+#include "Sm/SmCalloutBlocks.h"
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace dst
+{
+  /** \details
+
+       
+  */
+  struct SMDLL_EXPORT OdSmViewCategory : OdSmComponent
+  {
+    ODRX_DECLARE_MEMBERS(OdSmViewCategory);
+    virtual OdSmEnumSheetViewPtr getSheetViewEnumerator() const = 0;
+    virtual OdSmCalloutBlocks* getCalloutBlocks() = 0;
+    virtual const OdSmCalloutBlocks* getCalloutBlocks() const = 0;
+  };
+  typedef OdSmartPtr<OdSmViewCategory> OdSmViewCategoryPtr;
+}
+#endif //_SmViewCategory_h_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartClsIdPtr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartClsIdPtr.h
new file mode 100755
index 0000000..19d4479
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartClsIdPtr.h
@@ -0,0 +1,314 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODSMARTCLSIDPTR_INCLUDED_
+#define _ODSMARTCLSIDPTR_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "SmartPtr.h"
+
+class OdRxObject;
+
+#define ODRX_DEFINE_CLSID_RETRIEVER(Class) \
+class OdRxClsIdHolderFor_##Class\
+{\
+public:\
+  static inline const OdRxClass* classId()\
+  {\
+    OdRxClass* pClass = static_cast<OdRxClass*>(::odrxClassDictionary()->getAt(OD_T(#Class)).get());\
+    if(!pClass)\
+      throw OdError(eNotInitializedYet);\
+    return pClass;\
+  }\
+}
+
+#define ODRX_DEFINE_CLSID_SMARTPTR(Class) \
+ODRX_DEFINE_CLSID_RETRIEVER(Class);\
+typedef OdClsIdSmartPtr<OdRxClsIdHolderFor_##Class, Class> Class##ClsIdPtr
+
+
+/** \details
+    This template class implements SmartPointers for Class ID objects.
+    This class is the Teigha ClassIdSmartPointer template class.
+
+    <group Other_Classes>
+*/
+template <class ClsIdRetriever, class T> class OdClsIdSmartPtr : public OdBaseObjectPtr
+{
+  /** \details
+      Increments the reference count for the object referenced by this SmartPointer object.
+  */
+  inline void internalAddRef() { if(m_pObject) { static_cast<T*>(m_pObject)->addRef(); } }
+  
+  /** \details
+    Assigns the specified object to this SmartPointer object.  
+      
+    \remarks
+    The reference count of the specified object is incremented.
+
+    If this SmartPointer is currently referencing another object, that object 
+    is released prior to the assignment.  
+
+    \param pObject [in]  Pointer to the object to be assigned.
+  */
+  inline void assign(const T* pObject)
+  {
+    release();
+    m_pObject = (OdRxObject*)pObject;
+    internalAddRef();
+  }
+  
+  /** \details
+    Performs a "safe" assignment of the specified object to this SmartPointer object. 
+      
+    \param pObject [in]  Pointer to the object to be assigned.
+
+    Throws:
+    eNotThatKindOfClass if not successful. 
+  */
+  inline void internalQueryX(const OdRxObject* pObject)
+  {
+    if(pObject)
+    {
+      OdRxObject* pX = pObject->queryX(ClsIdRetriever::classId());
+      if(pX)
+        m_pObject = pX;
+      else
+        throw OdError(eNotThatKindOfClass);
+    }
+  }
+  
+  inline void assign(const OdRxObject* pObject)
+  {
+    release();
+    internalQueryX(pObject);
+  }
+  
+  // Note: Using of SmartPtr<T> as bool expression produce ambiguous call with some compilers.
+  // Use isNull() method instead.
+
+  /** \details
+      Declared private to prevent use. 
+  */
+  bool operator !() const { ODA_FAIL(); return false; }
+  
+  /** \details
+      Declared private to prevent use. 
+  */
+  operator bool() const { ODA_FAIL(); return false; }
+
+  /** \details
+      Declared private to prevent use. 
+  */
+  operator bool() { ODA_FAIL(); return false; }
+  
+public:
+  /** \details
+    \param pObject [in]  Pointer to the object to be assigned to the new SmartPointer object.
+
+    \remarks
+    If pObject is specified, the specified object is assigned to this SmartPointer object.
+    
+    \remarks
+    If OdRxObjMod or const OdBaseObjectPtr& are specified, the reference count of the referenced object 
+    is not incremented. 
+  */
+  inline OdClsIdSmartPtr() { }
+  
+  inline OdClsIdSmartPtr(const T* pObject, OdRxObjMod) {m_pObject = (OdRxObject*)pObject; }
+  
+  inline OdClsIdSmartPtr(const T* pObject) {m_pObject = (OdRxObject*)pObject; internalAddRef(); }
+  
+  inline OdClsIdSmartPtr(const OdRxObject* pObject) { internalQueryX(pObject); }
+  
+  /** \details
+    Returns the OdRxClass of the object referenced by this SmartPointer object.
+  */
+  static inline const OdRxClass* classId()
+  {
+    return ClsIdRetriever::classId();
+  }
+
+  inline OdClsIdSmartPtr(OdRxObject* pObject, OdRxObjMod)
+  {
+    internalQueryX(pObject);
+    if(pObject)
+      pObject->release();
+  }
+  
+  inline OdClsIdSmartPtr(const OdClsIdSmartPtr& pObject)
+  {
+    m_pObject = const_cast<T*>(static_cast<const T*>(pObject.get()));
+    internalAddRef();
+  }
+
+  inline OdClsIdSmartPtr(const OdRxObjectPtr& pObject) { internalQueryX(pObject.get()); }
+  
+  inline OdClsIdSmartPtr(const OdBaseObjectPtr& pObject) { internalQueryX(pObject.get()); }
+
+  static inline OdClsIdSmartPtr cast(const OdRxObject* pObject)
+  {
+    OdClsIdSmartPtr pRes;
+    if (pObject)
+      pRes.attach(static_cast<T*>(pObject->queryX(ClsIdRetriever::classId())));
+    return pRes;
+  }
+  
+  /** \details
+    Assigns the specified object to this SmartPointer object.  
+      
+    \param pObject [in]  Pointer to the object to be assigned.
+
+    \remarks
+    The reference count of the specified object is not incremented.
+
+    If this SmartPointer is currently referencing another object, that object 
+    is released prior to the assignment.
+  */
+  inline void attach(const T* pObject) { release(); m_pObject = const_cast<T*>(pObject); }
+  
+  inline void attach(OdRxObject* pObject)
+  {
+    release();
+    internalQueryX(pObject);
+    if(pObject)
+      pObject->release();
+  }
+  
+  /** \remarks
+    Decrements the reference count of the object referenced by this
+    SmartPointer object.
+
+    When the reference count reaches zero, the referenced object is deleted.
+  */
+  inline ~OdClsIdSmartPtr() { release(); }
+  
+  /** \details
+    Releases this SmartPointer's reference to the referenced object.
+    
+    \remarks
+    Decrements the reference count of the referenced object. 
+    
+    When the reference count reaches zero, the referenced object is deleted.
+  */
+  inline void release()
+  {
+    if (m_pObject)
+    {
+      static_cast<T*>(m_pObject)->release();
+      m_pObject = 0;
+    }
+  }
+  
+  /** \details
+    Releases this SmartPointer's reference to the referenced object.
+      
+    \remarks
+    Returns the object referenced by this SmartPointer object.
+    
+    The referenced object's reference count is not modified.
+  */
+  inline T* detach()
+  {
+    T* res = static_cast<T*>(m_pObject);
+    m_pObject = 0;
+    return res;
+  }
+  
+  inline OdClsIdSmartPtr& operator = (const OdClsIdSmartPtr& pObject)
+  { assign(pObject); return *this; }
+    
+  inline OdClsIdSmartPtr& operator = (const OdBaseObjectPtr& pObject)
+  { assign(pObject.get()); return *this; }
+  
+  inline OdClsIdSmartPtr& operator = (const T* pObject)
+  { assign(pObject); return *this; }
+  
+  /** \details
+    Returns the object referenced by this SmartPointer object.  
+
+    \remarks
+    This SmartPointer maintains its reference to the referenced object.
+    
+    The reference count of the referenced object is unchanged.
+  */
+  inline const T* get() const { return const_cast<T*>(static_cast<const T*>(m_pObject)); }
+  
+  inline T* get() { return static_cast<T*>(m_pObject); }
+  
+  /** \details
+    Returns the object referenced by this SmartPointer object.
+      
+    \remarks
+    The reference count of the referenced object is unchanged.
+  */
+  inline T* operator ->() { return static_cast<T*>(m_pObject); }
+  
+  inline const T* operator ->() const { return const_cast<T*>(static_cast<const T*>(m_pObject)); }
+  
+#ifdef ODA_GCC_2_95
+  /** \details
+    Returns the object referenced by this SmartPointer object.
+    
+    \remarks
+    This SmartPointer maintains its reference to the referenced object.
+    
+    The reference count of the referenced object is unchanged.
+  */
+  inline operator T*() const { return static_cast<T*>(m_pObject); }
+  
+#else
+  /** \details
+    Returns the object referenced by this SmartPointer object.
+      
+    \remarks
+    This SmartPointer maintains its reference to the referenced object.
+
+    The reference count of the referenced object is unchanged.
+  */
+  inline operator T*() { return static_cast<T*>(m_pObject); }
+  
+  /** \details
+    Returns the object referenced by this SmartPointer object.
+      
+    \remarks
+    The reference count of the referenced object is unchanged.
+  */
+  inline operator const T*() const { return static_cast<const T*>(m_pObject); }
+#endif
+    
+  inline bool operator==(const void* p) const { return (m_pObject==p); }
+
+  inline bool operator==(const OdClsIdSmartPtr& ptr) const { return operator==((void*)ptr.get()); }
+  
+  inline bool operator!=(const void* p) const { return (m_pObject!=p); }
+
+  inline bool operator!=(const OdClsIdSmartPtr& ptr) const { return operator!=((void*)ptr.get()); }
+};
+
+#include "TD_PackPop.h"
+
+#endif //_ODSMARTCLSIDPTR_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartPtr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartPtr.h
new file mode 100755
index 0000000..422d3ec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SmartPtr.h
@@ -0,0 +1,395 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODASMARTPOINTER_INCLUDED_
+#define _ODASMARTPOINTER_INCLUDED_
+
+#include "TD_PackPush.h"
+#include "Error_NotThatKindOfClass.h"
+#include "BaseObjectPtr.h"
+
+/** \details
+    <group Other_Classes>
+
+    This template class provides the typified implementation of smart pointers for instances of classes derived from the OdRxObject class.
+
+    \remarks
+    SmartPointers relieve the programmer of having to determine when objects are no longer needed, or having to delete them
+    them at that time.
+
+    Each object referenced by a SmartPointer (henceforth 'referenced object') 
+    maintains a reference count; i.e., how many SmartPointers are referencing it.
+    When the reference count reaches zero, the referenced object is deleted.
+
+    \sa
+    TD_Db
+
+    \sa
+    <link smart_pointers_example_refexchange.html, Example of Assigning Smart Pointers>
+
+    <link smart_pointers_example_typified.html, Example of a Typified Smart Pointer>
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes> 
+
+    The OdRxObjectPtr class
+*/
+template <class T> class OdSmartPtr : public OdBaseObjectPtr
+{
+protected:
+  /** \details
+    Increments the reference counter of the referenced object.
+  */
+  void internalAddRef()
+  {
+    if(m_pObject)
+      m_pObject->addRef();
+  }
+  
+  /** \details
+    Assigns the pointer of specified object to the smart pointer.  
+      
+    \remarks
+    The reference counter of the specified object is incremented.
+
+    If this SmartPointer is currently referencing another object, that object 
+    is released prior to the assignment.  
+
+    \param pObject [in]  Pointer to the specified object to be assigned.
+  */
+  void assign(const T* pObject)
+  {
+    if (m_pObject != pObject) // Prevent deleting object if nRefs=1
+    {
+      release();
+      m_pObject = const_cast<T*>(pObject);
+      internalAddRef();
+    }
+  }
+  
+  /** \details
+    Performs a "safe" assignment of the specified object to this SmartPointer object. 
+      
+    \param pObject [in]  Pointer to the object to be assigned.
+
+    Throws:
+    eNotThatKindOfClass if not successful. 
+  */
+  void internalQueryX(const OdRxObject* pObject)
+  {
+    if(pObject)
+    {
+      OdRxObject* pX = pObject->queryX(T::desc());
+      if(pX)
+        m_pObject = pX;
+      else
+        throw OdError_NotThatKindOfClass(pObject->isA(), T::desc());
+    }
+  }
+  
+  void assign(const OdRxObject* pObject)
+  {
+    release();
+    internalQueryX(pObject);
+  }
+  
+  // Note: Using of SmartPtr<T> as bool expression produce ambiguous call with some compilers.
+  // Use isNull() method instead.
+
+  /** \details
+    Declared private to prevent use.
+    \note
+    Use of SmartPtr<T> as a bool expression produces ambiguous calls with some compilers. Use isNull() instead. 
+  */
+  bool operator !() const { ODA_FAIL(); return false; }
+  
+  /** \details
+    Declared private to prevent use.
+    \note
+    Use of SmartPtr<T> as a bool expression produces ambiguous calls with some compilers. Use isNull() instead. 
+  */
+  operator bool() const { ODA_FAIL(); return false; }
+
+  /** \details
+    Declared private to prevent use.
+    \note
+    Use of SmartPtr<T> as a bool expression produces ambiguous calls with some compilers. Use isNull() instead. 
+  */
+  operator bool() { ODA_FAIL(); return false; }
+  
+public:
+  /** \details
+    Constructors for the typified smart pointer.
+
+    \param pObject [in]  Pointer to the object to be assigned to the new SmartPointer object.
+
+    \remarks
+    If pObject is specified, the smart pointer is set to the address of the specified object. If pObject is not specified, the smart pointer is set to a NULL.
+    
+    \remarks
+    If OdRxObjMod or const OdBaseObjectPtr& are specified, the reference counter of the specified object 
+    is not incremented. 
+  */
+  OdSmartPtr()
+    : OdBaseObjectPtr()
+  {
+  }
+
+  OdSmartPtr(const T* pObject, OdRxObjMod)
+    : OdBaseObjectPtr(pObject)
+  {
+  }
+  
+  OdSmartPtr(const T* pObject)
+    : OdBaseObjectPtr(pObject)
+  {
+    internalAddRef();
+  }
+  
+  OdSmartPtr(const OdRxObject* pObject)
+    : OdBaseObjectPtr()
+  {
+    internalQueryX(pObject);
+  }
+
+  OdSmartPtr(OdRxObject* pObject, OdRxObjMod)
+    : OdBaseObjectPtr()
+  {
+    internalQueryX(pObject);
+    if(pObject)
+      pObject->release();
+  }
+  
+  OdSmartPtr(const OdSmartPtr& pObject)
+    : OdBaseObjectPtr(pObject.get())
+  {
+    internalAddRef();
+  }
+
+  OdSmartPtr(const OdRxObjectPtr& pObject)
+    : OdBaseObjectPtr()
+  {
+    internalQueryX(pObject.get());
+  }
+
+  OdSmartPtr(const OdBaseObjectPtr& pObject)
+    : OdBaseObjectPtr()
+  {
+    internalQueryX(pObject.get());
+  }
+
+  /** \details
+    Assigns the pointer of the specifed object to the smart pointer without incrementing its reference counter.  
+      
+    \param pObject [in]  Pointer to the specifed object to be assigned.
+
+    \remarks
+    The reference counter of the specified object is not incremented.
+
+    If the smart pointer is currently referencing to another object, that object 
+    is released prior to the assignment.
+
+    \sa
+    <link smart_pointers_example_typified.html, Example of a Typified Smart Pointer>
+  */
+  void attach(const T* pObject)
+  {
+    release();
+    m_pObject = const_cast<T*>(pObject);
+  }
+  
+  void attach(OdRxObject* pObject)
+  {
+    release();
+    internalQueryX(pObject);
+    if(pObject)
+      pObject->release();
+  }
+  
+  /** \details
+    Destructor for the typified smart pointer.
+ 
+    \remarks
+    Decrements the reference counter of the referenced object. When the reference count reaches zero, the referenced object is deleted.
+  */
+  ~OdSmartPtr()
+  {
+    release();
+  }
+  
+  /** \details
+    Releases the smart pointer reference to the referenced object. 
+    
+    \remarks
+    Decrements the reference counter of the referenced object.  When the reference count reaches zero, 
+    the referenced object is deleted. Smart pointer is set to a NULL.
+
+    \sa
+    <link smart_pointers_example_typified.html, Example of a Typified Smart Pointer>
+  */
+  void release()
+  {
+    if (m_pObject)
+    {
+      m_pObject->release();
+      m_pObject = 0;
+    }
+  }
+  
+  /** \details
+    Releases the smart pointer reference to the referenced object without decrementing of the reference counter. 
+      
+    \remarks
+    Returns the raw pointer to the referenced object. The reference counter is not modified 
+    for the referenced object. Smart pointer is set to a NULL.
+ 
+    \sa
+    <link smart_pointers_example_typified.html, Example of a Typified Smart Pointer>
+  */
+  T* detach()
+  {
+    T* pRes = static_cast<T*>(m_pObject);
+    m_pObject = 0;
+    return pRes;
+  }
+  
+  /** \remarks
+    The assignment operator increments the reference counter of the referenced object and saves its address in the smart pointer.
+     If the smart pointer is currently referencing to another object, that assignment operator releases the referenced object prior 
+     to the assignment.  
+
+    \sa
+    <link smart_pointers_example_typified.html, Example of a Typified Smart Pointer>
+  */
+  OdSmartPtr& operator = (const OdSmartPtr& pObject)
+  {
+    assign(pObject);
+    return *this;
+  }
+    
+  OdSmartPtr& operator = (const OdBaseObjectPtr& pObject)
+  {
+    assign(pObject.get());
+    return *this;
+  }
+  
+  OdSmartPtr& operator = (const T* pObject)
+  {
+    assign(pObject);
+    return *this;
+  }
+
+  /** \details
+    Returns the raw pointer to the referenced object.
+
+    \remarks
+    The smart pointer maintains its reference to the referenced object. 
+    The reference counter of the referenced object is not changed.
+ 
+    \sa
+    <link smart_pointers_example_typified.html, Example of a Typified Smart Pointer>
+  */
+  const T* get() const
+  {
+    return static_cast<const T*>(m_pObject);
+  }
+  
+  T* get()
+  {
+    return static_cast<T*>(m_pObject);
+  }
+  
+  /** \details
+    Returns the raw pointer to the referenced object.
+      
+    \remarks
+    The reference counter of the referenced object is not changed.
+  */
+  T* operator ->()
+  {
+    return static_cast<T*>(m_pObject);
+  }
+  
+  const T* operator ->() const
+  {
+    return static_cast<const T*>(m_pObject);
+  }
+  
+#ifdef ODA_GCC_2_95
+  /** \details
+    Returns the raw pointrer to the referenced object.
+    
+    \remarks
+    The class maintains the reference to the referenced object.
+    The reference counter of the referenced object is not changed.
+  */
+  operator T*() const
+  {
+    return const_cast<T*>(static_cast<const T*>(m_pObject));
+  }
+  
+#else
+  /** \details
+    Returns the raw pointer the  referenced object.
+    
+    \remarks
+    This SmartPointer maintains its reference to the referenced object.
+    
+    The reference counter of the referenced object is not changed.
+  */
+  operator T*()
+  {
+    return static_cast<T*>(m_pObject);
+  }
+  
+  operator const T*() const
+  {
+    return static_cast<const T*>(m_pObject);
+  }
+
+#endif
+    
+  bool operator==(const void* pObject) const
+  {
+    return (m_pObject==pObject);
+  }
+
+  bool operator==(const OdSmartPtr& pObject) const
+  {
+    return operator==((void*)pObject.get());
+  }
+  
+  bool operator!=(const void* pObject) const
+  {
+    return (m_pObject!=pObject);
+  }
+
+  bool operator!=(const OdSmartPtr& pObject) const
+  {
+    return operator!=((void*)pObject.get());
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _ODASMARTPOINTER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModeler.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModeler.h
new file mode 100755
index 0000000..7e7bf3b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModeler.h
@@ -0,0 +1,64 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODSPAMODELER_INCLUDED_
+#define _ODSPAMODELER_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "SpaModelerExport.h"
+#include "RxDynamicModule.h"
+#include "Ed/EdCommandStack.h"
+
+class SPAParameters;
+
+/** \details
+    Library: ModelerGeometry
+    <group Other_Classes>
+*/
+class SPAMODELER_EXPORT SpaModeler : public OdRxModule
+{
+  bool                    m_bLocalInit;
+protected:
+  void initApp();
+  void uninitApp();
+
+  SpaModeler();
+public:
+  virtual OdResult setSPAParameters(const SPAParameters &pParameters);
+  virtual void getSPAParameters(SPAParameters &pParameters);
+
+  virtual void setSPAtolerances(const double &resabs, const double &resfit);
+  virtual void getSPAtolerances(double &resabs, double &resfit) const;
+  virtual double getSPAresnor() const;
+};
+
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdRxProtocolReactorManager object pointers.
+*/
+
+typedef OdSmartPtr<SpaModeler> SpaModelerPtr;
+
+#include "TD_PackPop.h"
+
+#endif //_ODSPAMODELER_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModelerExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModelerExport.h
new file mode 100755
index 0000000..cda5c89
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaModelerExport.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+/*  SpaModelGeomExport.h
+
+*/
+#ifndef _SPAMG_EXPORT_DEFINED
+#define _SPAMG_EXPORT_DEFINED
+
+
+#include "OdPlatformSettings.h"
+
+#ifdef SPAMODELER_DLL_EXPORTS
+#define SPAMODELER_EXPORT          OD_TOOLKIT_EXPORT
+#define SPAMODELER_EXPORT_STATIC   OD_STATIC_EXPORT
+#else
+#define SPAMODELER_EXPORT          OD_TOOLKIT_IMPORT
+#define SPAMODELER_EXPORT_STATIC   OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _SPAMG_EXPORT_DEFINED */
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaParameters.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaParameters.h
new file mode 100755
index 0000000..80449aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SpaModeler/SpaParameters.h
@@ -0,0 +1,109 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _SPAPARAMETERS_H_
+#define _SPAPARAMETERS_H_
+
+#include "TD_PackPush.h"
+
+#include "OdHeap.h"
+
+/** \details
+    This container class holds ACIS triangulation (rendering) parameters. 
+    <group Other_Classes>
+*/
+class SPAParameters
+{
+public:
+  
+  enum SPA_ADJUST
+  {
+    SPA_ADJUST_NONE,
+    SPA_ADJUST_NON_GRID,
+    SPA_ADJUST_ALL
+  } adjust_mode;
+
+  enum SPA_GRID
+  {
+    SPA_GRID_NONE,		// No grids at all.
+    SPA_GRID_INTERIOR,	// Grids in interior.
+    SPA_GRID_TO_EDGES,	// Allow grid to divide model edges.
+    SPA_GRID_ONE_DIR		// Grid only in one direction, u or v
+  } grid_mode;
+
+  enum SPA_TRIANG_MODE {
+    SPA_TRIANG_NONE,
+    SPA_TRIANG_ALL,
+    SPA_TRIANG_FRINGE_1,
+    SPA_TRIANG_FRINGE_2,
+    SPA_TRIANG_FRINGE_3,
+    SPA_TRIANG_FRINGE_4
+  } triang_mode;
+
+  double surface_tol;
+  double normal_tol;
+  double max_edge_length;
+  double grid_aspect_ratio;
+  int max_grid_lines;
+  int min_u_grid_lines;
+  int min_v_grid_lines;
+  bool bUseFacetRES;
+
+
+  SPAParameters()
+    : adjust_mode(SPA_ADJUST_NONE)
+  , surface_tol(-1)     // use bounding box diagonal
+  , normal_tol(15.0)
+  , max_edge_length(0.) // ignored
+  , grid_aspect_ratio(0.) // ignored
+  , grid_mode(SPA_GRID_INTERIOR)
+  , triang_mode(SPA_TRIANG_ALL)
+  , max_grid_lines(512)
+  , min_u_grid_lines(0)
+  , min_v_grid_lines(0)
+  , bUseFacetRES(false)
+  {
+  }
+
+  /** \note
+    bUseFacetRES is NOT part of the comparison.
+  */
+  bool operator ==(const SPAParameters other) const 
+  {
+    return other.adjust_mode == adjust_mode &&
+      other.surface_tol == surface_tol &&
+      other.normal_tol == normal_tol &&
+      other.max_edge_length == max_edge_length &&
+      other.grid_aspect_ratio == grid_aspect_ratio &&
+      other.grid_mode == grid_mode &&
+      other.triang_mode == triang_mode &&
+      other.max_grid_lines == max_grid_lines &&
+      other.min_u_grid_lines == min_u_grid_lines &&
+      other.min_v_grid_lines == min_v_grid_lines;
+    // bUseFacetRES skipped
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _SPAPARAMETERS_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StaticRxObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StaticRxObject.h
new file mode 100755
index 0000000..8a6b54b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StaticRxObject.h
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+// StaticRxObject.h
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(ODSTATICRXOBJECT_INCLUDED_)
+#define ODSTATICRXOBJECT_INCLUDED_
+
+/** \details
+    <group OdRx_Classes>
+
+    This template class provides the <link smart_pointers_definition_empty.html, empty implementation of counting references>  
+    for instances of classes derived from the OdRxObject class.
+
+    \sa
+    TD_Db
+
+    \remarks
+    When you use this template class, the numRefs method is inherited from the OdRxObject class in the default definition.
+    The numRefs method returns 1 by default.
+
+    \sa
+    <link smart_pointers_example_count_empty.html, Example of Counting References>
+
+    \sa
+    <link smart_pointers_overview.html, Overview of Smart Pointer Classes> 
+
+    The OdRxObjectImpl class
+*/
+template<class T>
+class OdStaticRxObject : public T
+{
+public:
+  /** \details
+    Simulates the incrementing of the reference counter non-changing it.
+  */
+  void addRef() { }
+  /** \details
+    Simulates the decrementing of the reference counter non-changing it.
+  */
+  void release() { }
+};
+
+#endif // !defined(ODSTATICRXOBJECT_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StdStrings.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StdStrings.h
new file mode 100755
index 0000000..94177e0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StdStrings.h
@@ -0,0 +1,86 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// Standard string definitions
+
+AC_STRING(regAppAcadName,             "ACAD")
+AC_STRING(modelSpaceStr,              "*Model_Space")
+AC_STRING(modelSpaceStr_R12,          "$MODEL_SPACE")
+AC_STRING(paperSpaceStr,              "*Paper_Space")
+AC_STRING(paperSpaceStr_R12,          "$PAPER_SPACE")
+AC_STRING(layerDefpointsNameStr,      "Defpoints")
+AC_STRING(layerZeroNameStr,           "0")
+AC_STRING(layerConstraintsNameStr,    "*ADSK_CONSTRAINTS")
+AC_STRING(layerSystemLightsNameStr,   "*ADSK_SYSTEM_LIGHTS")
+AC_STRING(byBlockNameStr,             "ByBlock")
+AC_STRING(byLayerNameStr,             "ByLayer")
+AC_STRING(linetypeContinuousNameStr,  "Continuous")
+AC_STRING(standardStr,                "Standard")
+AC_STRING(standardImperialDictStr,    "Imperial24")
+AC_STRING(standardMetricDictStr,      "Metric50")
+AC_STRING(metricDimStandardStr,       "ISO-25")
+AC_STRING(viewportActiveNameStr,      "*Active")
+AC_STRING(plotStyleNormalNameStr,     "Normal")
+AC_STRING(materialGlobalNameStr,      "Global")
+AC_STRING(ACAD_BACKGROUND,            "ACAD_BACKGROUND")
+AC_STRING(ACAD_GROUP,                 "ACAD_GROUP")
+AC_STRING(ACAD_PLOTSTYLENAME,         "ACAD_PLOTSTYLENAME")
+AC_STRING(ACAD_LAYOUT,                "ACAD_LAYOUT")    
+AC_STRING(ACAD_MLINESTYLE,            "ACAD_MLINESTYLE")
+AC_STRING(ACAD_PLOTSETTINGS,          "ACAD_PLOTSETTINGS")
+AC_STRING(ACAD_COLOR_DICT,            "ACAD_COLOR")
+AC_STRING(ACAD_MATERIAL_DICT,         "ACAD_MATERIAL")
+AC_STRING(ACAD_TABLESTYLE_DICT,       "ACAD_TABLESTYLE")
+AC_STRING(ACAD_MLEADERSTYLE,          "ACAD_MLEADERSTYLE")
+AC_STRING(ACAD_VISUALSTYLE,           "ACAD_VISUALSTYLE")
+AC_STRING(ACAD_DETAILVIEWSTYLE_DICT,  "ACAD_DETAILVIEWSTYLE") // AC27 support
+AC_STRING(ACAD_SECTIONVIEWSTYLE_DICT, "ACAD_SECTIONVIEWSTYLE") // AC27 support
+AC_STRING(ACAD_SECTION_MANAGER,       "ACAD_SECTION_MANAGER")
+AC_STRING(ACAD_SCALELIST,             "ACAD_SCALELIST")
+AC_STRING(ACAD_RENDER_SETTINGS,       "ACAD_RENDER_SETTINGS")
+AC_STRING(ACAD_RENDER_PLOT_SETTINGS,  "ACAD_RENDER_PLOT_SETTINGS")
+AC_STRING(ACAD_RENDER_GLOBAL,         "ACAD_RENDER_GLOBAL")
+AC_STRING(ACAD_RENDER_ENVIRONMENT,    "ACAD_RENDER_ENVIRONMENT")
+AC_STRING(ACAD_RENDER_ACTIVE_SETTINGS,"ACAD_RENDER_ACTIVE_SETTINGS")
+AC_STRING(ACAD_RENDER_ENTRIES,        "ACAD_RENDER_ENTRIES")
+AC_STRING(ACAD_RENDER_RAPIDRT_SETTINGS, "ACAD_RENDER_RAPIDRT_SETTINGS")
+AC_STRING(ACAD_RENDER_ACTIVE_RAPIDRT_SETTINGS, "ACAD_RENDER_ACTIVE_RAPIDRT_SETTINGS")
+AC_STRING(ACAD_VBA,                   "ACAD_VBA")
+AC_STRING(ACAD_IMAGE_DICT,            "ACAD_IMAGE_DICT")
+AC_STRING(ACAD_WIPEOUT_VARS,          "ACAD_WIPEOUT_VARS")
+AC_STRING(ACAD_IMAGE_VARS,            "ACAD_IMAGE_VARS")
+AC_STRING(ACAD_MATERIAL_MAPPER,       "ACAD_MATERIAL_MAPPER")
+AC_STRING(ACAD_MATERIAL_MAPPER_2,     "ACAD_MATERIAL_MAPPER_2")
+AC_STRING(ODDB_ANNOTATIONSCALES_COLLECTION, "ACDB_ANNOTATIONSCALES")
+AC_STRING(ODDB_ANNOTATIONSCALE_VIEW_COLLECTION, "ACDB_ANNOTATIONSCALE_VIEW_COLLECTION")
+AC_STRING(ACAD_NAMEDPATH,             "ACAD_NAMEDPATH")
+AC_STRING(ACAD_MOTION,                "ACAD_MOTION")
+AC_STRING(ACDB_RECOMPOSE_DATA,        "ACDB_RECOMPOSE_DATA")
+AC_STRING(ACDBBLOCKREPBTAG,           "AcDbBlockRepBTag")
+AC_STRING(ACAD_POINTCLOUD_DICT,       "ACAD_POINTCLOUD_DICT")
+AC_STRING(ACAD_PERSUBENTMGR,          "ACAD_PERSUBENTMGR")
+AC_STRING(ACAD_ASSOCPERSSUBENTMANAGER,"ACAD_ASSOCPERSSUBENTMANAGER")
+AC_STRING(ACDBCONTEXTDATAMANAGER,     "AcDbContextDataManager")
+AC_STRING(ADSK_XREC_LAYOUTTHUMBNAIL,  "ADSK_XREC_LAYOUTTHUMBNAIL")
+AC_STRING(ACAD_LAYOUTSELFREF,         "ACAD_LAYOUTSELFREF")
+AC_STRING(ACAD_POINTCLOUD_EX_DICT,    "ACAD_POINTCLOUD_EX_DICT")
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StringArray.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StringArray.h
new file mode 100755
index 0000000..276238e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/StringArray.h
@@ -0,0 +1,35 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODSTRINGARRAY_INCLUDED
+#define ODSTRINGARRAY_INCLUDED
+
+#include "OdArray.h"
+#include "OdString.h"
+typedef OdArray<OdString> OdStringArray;
+
+#endif // ODSTRINGARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarDefs.h
new file mode 100755
index 0000000..0a38349
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarDefs.h
@@ -0,0 +1,3981 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance").
+// All rights reserved.
+//
+// This software and its documentation and related materials are owned by
+// the Alliance. The software may only be incorporated into application
+// programs owned by members of the Alliance, subject to a signed
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable
+// trade secrets of the Alliance and its suppliers. The software is also
+// protected by copyright law and international treaty provisions. Application
+// programs incorporating this software must include the following statement
+// with their copyright notices:
+//
+//   This application incorporates Teigha(R) software pursuant to a license
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance.
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+/*********************************************************
+//  Macros description:
+/*********************************************************
+VAR_DEF(type, VarName,...)
+Variable support is generated in OdDbDatabase::getVarName/setVarName()
+and OdDbDatabase::get/setSysVar()
+
+RO_VAR_DEF(type, VarName,...)
+Read-only
+Variable support is generated in OdDbDatabase::getVarName()
+and OdDbDatabase::getSysVar()
+
+VAR_DEF_H(type, VarName,...)
+Variable support is generated in OdDbDatabase::getVarName/setVarName() only.
+If get/setSysVar() is available see QuasiVarDefs.h
+Note: Such variables may work differently in OdDbDatabase::get/setXXX()and get/setSysVar()
+For example:
+There are get/set OdDbDatabase methods for both EXTMIN(MS) and PEXTMIN(PS) but get/setSysVar()
+is for EXTMIN only. It works with extents of current space.
+
+RO_VAR_DEF_H(type, VarName,...)
+The same as VAR_DEF_H but only OdDbDatabase::getVarName() is generated.
+
+VAR_DEF_2
+Similar to VAR_DEF but some special processing in set methods is required
+and OdDbDatabase::setVarName() method is implemented manually.
+Example - OdDbDatabase::setTEXTSTYLE() also changes TEXTSIZE.
+And OdDbDatabase::setTEXTSIZE() changes prior size in current Text Style
+
+DICR15VAR
+DICR21VAR
+DICR24VAR
+DICR27VAR
+Similar to VAR_DEF. Difference is that in some file versions these variables
+present in Database header and in minor file versions they are round-tripped
+via Variables Dictionary
+
+
+MLEADERSTYLE_VAR_DEF
+ANNO_VAR_DEF
+A special cases of DICR21VAR, used to differentiate CANNOSCALE and CMLEADERSCALE from other usual system variables in some cases.
+By default is equal to DICR21VAR.
+
+
+REGVAR_DEF(type, VarName,...)
+Variable support is generated in OdDbHostAppServices (getVarName/setVarName)
+and OdDbDatabase::get/setSysVar()
+
+*/
+
+
+#ifndef RO_VAR_DEF
+#define RO_VAR_DEF  VAR_DEF /* {Secret} */
+#define DOUNDEF_RO_VAR_DEF
+#endif
+
+#ifndef RO_VAR_DEF_H
+#define RO_VAR_DEF_H  RO_VAR_DEF /* {Secret} */
+#define DOUNDEF_RO_VAR_DEF_H
+#endif
+
+#ifndef VAR_DEF_H
+#define VAR_DEF_H  VAR_DEF /* {Secret} */
+#define DOUNDEF_VAR_DEF_H
+#endif
+
+#ifndef DICR15VAR
+#define DOUNDEF_DICR15VAR
+#define DICR15VAR  VAR_DEF /* {Secret} */
+#endif
+
+#ifndef DICR21VAR
+#define DOUNDEF_DICR21VAR
+#define DICR21VAR  VAR_DEF /* {Secret} */
+#define DOUNDEF_DICR21VAR_H
+#define DICR21VAR_H VAR_DEF_H /* {Secret} */
+#else
+#define DOUNDEF_DICR21VAR_H
+#define DICR21VAR_H DICR21VAR /* {Secret} */
+#endif
+
+#ifndef DICR24VAR
+#define DOUNDEF_DICR24VAR
+#define DICR24VAR  DICR21VAR /* {Secret} */
+#define DOUNDEF_DICR24VAR_H
+#define DICR24VAR_H DICR21VAR_H /* {Secret} */
+#else
+#define DOUNDEF_DICR24VAR_H
+#define DICR24VAR_H DICR24VAR /* {Secret} */
+#endif
+
+#ifndef DICR27VAR
+#define DOUNDEF_DICR27VAR
+#define DICR27VAR DICR21VAR /* {Secret} */
+#define DOUNDEF_DICR27VAR_H
+#define DICR27VAR_H DICR21VAR_H /* {Secret} */
+#else
+#define DOUNDEF_DICR27VAR_H
+#define DICR27VAR_H DICR27VAR /* {Secret} */
+#endif
+
+#ifndef ANNO_VAR_DEF
+#define DOUNDEF_ANNO_VAR_DEF
+#define ANNO_VAR_DEF DICR21VAR  /* {Secret} */
+#endif
+
+#ifndef MLEADERSTYLE_VAR_DEF
+#define DOUNDEF_MLEADERSTYLE_VAR_DEF
+#define MLEADERSTYLE_VAR_DEF DICR21VAR  /* {Secret} */
+#endif
+
+#ifndef VAR_DEF_2
+#define DOUNDEF_VAR_DEF_2
+#define VAR_DEF_2  VAR_DEF /* {Secret} */
+#endif
+
+#ifndef ODTBOOL
+#define ODTBOOL                 bool                    /* {Secret} */
+#endif
+
+#ifndef ODTDIST
+#define ODTDIST                 double                  /* {Secret} */
+#endif
+
+#ifndef ODTORIENT
+#define ODTORIENT               double                  /* {Secret} */
+#endif
+
+#ifndef ODTUNITLESS4
+#define ODTUNITLESS4            double                  /* {Secret} */
+#endif
+
+#ifndef ODTUNITLESS8
+#define ODTUNITLESS8            double                  /* {Secret} */
+#endif
+
+#ifndef ODTDB_MEASUREMENTVALUE
+#define ODTDB_MEASUREMENTVALUE  OdDb::MeasurementValue  /* {Secret} */
+#endif
+
+#ifndef ODTDB_LINEWEIGHT
+#define ODTDB_LINEWEIGHT        OdDb::LineWeight        /* {Secret} */
+#endif
+
+#ifndef ODTDB_JOINSTYLE
+#define ODTDB_JOINSTYLE         OdDb::JoinStyle         /* {Secret} */
+#endif
+
+#ifndef ODTDB_UNITSVALUE
+#define ODTDB_UNITSVALUE        OdDb::UnitsValue        /* {Secret} */
+#endif
+
+#ifndef ODTDB_PROXYIMAGE
+#define ODTDB_PROXYIMAGE        OdDb::ProxyImage        /* {Secret} */
+#endif
+
+#ifndef ODTDB_MEASUREMENTVALUE
+#define ODTDB_MEASUREMENTVALUE  OdDb::MeasurementValue  /* {Secret} */
+#endif
+
+#ifndef ODTDB_ENDCAPS
+#define ODTDB_ENDCAPS           OdDb::EndCaps           /* {Secret} */
+#endif
+
+#ifndef ODTDB_JOINSTYLE
+#define ODTDB_JOINSTYLE         OdDb::JoinStyle         /* {Secret} */
+#endif
+
+#ifndef ODTDB_PLOTSTYLENAMETYPE
+#define ODTDB_PLOTSTYLENAMETYPE OdDb::PlotStyleNameType /* {Secret} */
+#endif
+
+#ifndef ODDBOBJECTID
+#define ODDBOBJECTID            OdDbObjectId            /* {Secret} */
+#endif
+
+#ifndef ODDBHARDPOINTERID
+#define ODDBHARDPOINTERID       ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTTEXTSTYLEID
+#define ODTTEXTSTYLEID          ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTLAYERID
+#define ODTLAYERID              ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTLAYERIDDEF
+#define ODTLAYERIDDEF           ODTLAYERID              /* {Secret} */
+#endif
+
+#ifndef ODTLINETYPEID
+#define ODTLINETYPEID           ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTDIMSTYLEID
+#define ODTDIMSTYLEID           ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTUCSID
+#define ODTUCSID                ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTMLSTYLEID
+#define ODTMLSTYLEID            ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTDB_TIMEZONE
+#define ODTDB_TIMEZONE          OdDb::TimeZone         /* {Secret} */
+#endif
+
+#ifndef ODTDB_SHADOWFLAGS
+#define ODTDB_SHADOWFLAGS       OdGiSubEntityTraits::ShadowFlags      /* {Secret} */
+#endif
+
+#ifndef ODVISTYLEID
+#define ODVISTYLEID             ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTMATERIALID
+#define ODTMATERIALID           ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTDB_LOFTPARAMTYPE
+#define ODTDB_LOFTPARAMTYPE     OdDb::LoftParamType      /* {Secret} */
+#endif
+
+#ifndef ODTDB_LOFTNORMALSTYPE
+#define ODTDB_LOFTNORMALSTYPE   OdDb::LoftNormalsType      /* {Secret} */
+#endif
+
+#ifndef ODTTABLESTYLEID
+#define ODTTABLESTYLEID         ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTMLEADERSTYLEID
+#define ODTMLEADERSTYLEID       ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTVIEWDETAILSTYLEID
+#define ODTVIEWDETAILSTYLEID    ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODTVIEWSECTIONSTYLEID
+#define ODTVIEWSECTIONSTYLEID   ODDBOBJECTID            /* {Secret} */
+#endif
+
+#ifndef ODANNOSCALE
+#define ODANNOSCALE             OdDbAnnotationScalePtr /* {Secret} */
+#endif
+
+#ifndef ODTTRANSPARENCYDEF
+#define ODTTRANSPARENCYDEF OdCmTransparency
+#endif
+
+#ifndef VAR_DEF
+/* {Secret} */
+#define VAR_DEF(a,b,c,d,r1,r2)
+/* {Secret} */
+#define DOUNDEF_VAR_DEF
+#endif
+
+
+#define SVARS_FUNC_MODIFIER virtual
+
+//         Type                    Name          Default                         Metric default                    Reserve1                    Reserve2
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ANGBASE specifies the direction of angle 0 with respect to the UCS."
+    </remarks>
+    <notes>
+      "\n   All angles are expressed in radians."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   ODTORIENT,              ANGBASE,      (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ANGDIR controls the direction of positive angles with respect to the UCS.
+      "\n"
+      "\n    @table"
+      "\n    Value       Positive Angles"
+      "\n    false       Counterclockwise"
+      "\n    true        Clockwise
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                ANGDIR,       (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INSBASE specifies the WCS insertion base point of model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            INSBASE,      (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    EXTMIN specifies the lower-left corner of the extents of model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            EXTMIN,       (1.E+20, 1.E+20, 1.E+20),       (1.E+20, 1.E+20, 1.E+20),         (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    EXTMAX specifies the upper-right corner of the extents of model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            EXTMAX,       (-1.E+20, -1.E+20, -1.E+20),    (-1.E+20, -1.E+20, -1.E+20),      (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LIMMIN specifies the lower-left corner of the grid limits for model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint2d,            LIMMIN,       (0.0, 0.0),                     (0.0, 0.0),                       (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LIMMAX specifies the upper-right corner of the grid limits for model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint2d,            LIMMAX,       (12.0, 9.0),                    (420.0, 297.0),                   (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ORTHOMODE controls the constraint of cursor movement to the perpendicular."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not constrained"
+      "\n    true     Constrained"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                ORTHOMODE,    (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    REGENMODE controls automatic regeneration."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                REGENMODE,    (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FILLMODE controls the rendering of Hatches, 2D Solids, and wide Polylines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                FILLMODE,     (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    QTEXT controls the display of text.
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Text is displayed"
+      "\n    true     Bounding box is displayed"
+
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                QTEXTMODE,    (false),                        (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MIRRTEXT controls the mirroring of Text with the MIRROR command."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not mirrored"
+      "\n    true     Mirrored"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                MIRRTEXT,     (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LTSCALE specifies the global linetype scale factor."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTUNITLESS4,           LTSCALE,      (1.0),                          (1.0),                            (),                         ValidatePositiveNonZero())
+/*** VARDOCS:
+<properties>
+    <remarks>
+      "\n    ATTMODE controls the display of attributes."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        All attributes are invisible."
+      "\n    1        Visible attributes are visible, and invisible, invisible."
+      "\n    2        All attributes are visible."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                ATTMODE,      (1),                            (1),                              (),                         ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TEXTSIZE specifies the default size for new text entities in the current text style."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_2(   ODTDIST,                TEXTSIZE,     (0.2),                          (2.5),                            (),                         ValidateGr(0.))
+
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TRACEWID is default width for new trace entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                TRACEWID,     (0.05),                         (1.0),                            (),                         ValidateEqGr(0.))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TEXTSTYLE specifies the default style for new text entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_2(   ODTTEXTSTYLEID,         TEXTSTYLE,    (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateTextStyle())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CLAYER specifies the default layer for new entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTLAYERID,             CLAYER,       (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateLayer())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CELTYPE specifies the default linetype for new entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTLINETYPEID,          CELTYPE,      (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateLinetype())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CECOLOR specifies the default color for new entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdCmColor,              CECOLOR,      (OdCmEntityColor::kByLayer),    (OdCmEntityColor::kByLayer),      (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CELTSCALE specifies the default linetype scale for new entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTUNITLESS4,           CELTSCALE,    (1.0),                          (1.0),                            (),                         ValidateGr(0.))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CHAMFERA specifies the default first chamfer distance."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                CHAMFERA,     (0.0),                           (0.0),                           (),                         ValidateEqGr(0.))
+/*** VARDOCS:
+<properties>
+  <remarks>
+      "\n    CHAMFERB specifies the default second chamfer distance."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                CHAMFERB,     (0.0),                           (0.0),                           (),                         ValidateEqGr(0.))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CHAMFERC specifies the default chamfer length."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                CHAMFERC,     (0.0),                           (0.0),                           (),                         ValidateEqGr(0.))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CHAMFERD specifies the default chamfer angle."
+    </remarks>
+    <note>
+      "\n    All angles are expressed in radians."
+    </note>
+  </properties>
+*/
+VAR_DEF(   ODTORIENT,              CHAMFERD,     (0.0),                          (0.0),                            (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DISPSILH controls the display of silhouette curve edges and meshes."
+      "\n"
+      "\n    @table"
+      "\n    Value    Curve Edges       Meshes"
+      "\n    false    Not displayed     Displayed"
+      "\n    true     Displayed         Not displayed"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                DISPSILH,     (false),                        (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSTYLE specifies the default dimension style for new entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIMSTYLEID,          DIMSTYLE,     (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateDimStyle())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMASO controls the creation of dimension objects."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Creates exploded dimensions (lines, arrowheads, text as separate entities."
+      "\n    true    Creates single dimension entity."
+    </remarks>
+    <notes>
+      "\n    DIMASO is depreciated, but is included for compatibility purposes."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                   DIMASO,       (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMSHO controls the updating of associative dimension objects while dragging.
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Disabled"
+      "\n    true    Enabled"
+    </remarks>
+    <notes>
+      "\n    DIMSHO is depreciated, but is included for compatibility purposes."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   bool,                   DIMSHO,       (true),                         (true),                           (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LUNITS controls the display of linear units."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    1         Scientific"
+      "\n    2         Decimal"
+      "\n    3         Engineering"
+      "\n    4         Architectural"
+      "\n    5         Fractional"
+    </remarks>
+    <notes>
+      "\n    LUNITS does not control the formatting of dimension text."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                LUNITS,       (2),                            (2),                              (),                         ValidateRange(1,5))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LUPREC specifies the number of decimal places in the display of linear units."
+    </remarks>
+    <notes>
+      "\n    LUPREC does not control the formatting of dimension text."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                LUPREC,       (4),                            (4),                              (),                         ValidateRange(0,8))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SKETCHINC specifies the recording increment for the SKETCH command."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                SKETCHINC,    (0.1),                          (1.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FILLETRAD specifies the default fillet radius."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                FILLETRAD,    (0.5),                          (10.0),                           (),                         ValidateEqGr(0.))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    AUNITS controls the display of angular units."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    0         Degrees"
+      "\n    1         Degrees-Minutes-Seconds"
+      "\n    2         Gradians"
+      "\n    3         Radians"
+      "\n    4         Surveyor Units"
+    </remarks>
+    <notes>
+      "\n    AUNITS does not control the formatting of dimension text."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                AUNITS,       (0),                            (0),                              (),                         ValidateRange(0,4))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    AUPREC specifies the number of decimal places in the display of angular units."
+    </remarks>
+    <notes>
+      "\n    AUPREC does not control the formatting of display of dimension text."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                AUPREC,       (0),                            (0),                              (),                         ValidateRange(0,8))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MENUNAME returns the path and filename of the customization file."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdString,               MENUNAME,     (OD_T(".")),                          (OD_T(".")),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ELEVATION specifies the default elevation for new entities in model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODTDIST,                ELEVATION,    (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PELEVATION specifies the default elevation for new entities in the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODTDIST,                PELEVATION,   (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    THICKNESS specifies the default 3D thickness for new entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                THICKNESS,    (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LIMCHECK controls the specification of objects in model space by points outside the grid limits of"
+      " model space.
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    false     Points outside limits allowed"
+      "\n    true      Points outside limits disallowed"
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODTBOOL,                   LIMCHECK,     (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SKPOLY controls the generation of polylines during the SKETCH command."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Generates Lines."
+      "\n    true    Generates Polylines."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                SKPOLY,       (false),                        (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TDUCREATE represents the time and date, in Universal Time, that the *database* was created."
+    </remarks>
+    <see_also>
+      "\n    odDbSetTDUCREATE"
+    </see_also>
+  </properties>
+*/
+RO_VAR_DEF(OdDbDate,               TDUCREATE,    (OdDbDate::kInitZero),          (OdDbDate::kInitZero),            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TDUUPDATE represents the time and date, in Universal Time, that the *database* was last saved."
+    </remarks>
+    <see_also>
+      "\n    odDbSetTDUUPDATE"
+    </see_also>
+  </properties>
+*/
+RO_VAR_DEF(OdDbDate,               TDUUPDATE,    (OdDbDate::kInitZero),          (OdDbDate::kInitZero),            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TDINDWG represents the total editing time of the database."
+    </remarks>
+    <see_also>
+      "\n    odDbSetTDINDWG"
+    </see_also>
+  </properties>
+*/
+RO_VAR_DEF(OdDbDate,               TDINDWG,      (OdDbDate::kInitZero),          (OdDbDate::kInitZero),            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TDUSRTIMER represents the user-elapsed timer."
+    </remarks>
+    <see_also>
+      "\n    odDbSetTDUSRTIMER"
+    <see_also>
+  </properties>
+*/
+RO_VAR_DEF(OdDbDate,               TDUSRTIMER,   (OdDbDate::kInitZero),          (OdDbDate::kInitZero),            (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    USRTIMER controls the user elapsed timer."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    false     Disabled"
+      "\n    true      Enabled"
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODTBOOL,                USRTIMER,     (true),                         (true),                           (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PDMODE specifies the display of Point entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                PDMODE,       (0),                            (0),                              (),                         ValidatePDMODE())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PDSIZE specifies the display size of point entities."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    < 0       Fraction of viewport size in drawing units."
+      "\n    0         5% of viewport size in drawing units."
+      "\n    > 0       Size in drawing units."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                PDSIZE,       (0.0),                          (0.0),                            (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLINEWID specifies the default width for new Polyline entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                PLINEWID,     (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SPLFRAME controls the display of control polygons for Splines and spline-fit Polylines."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    false     Disabled"
+      "\n    true      Enabled"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                SPLFRAME,     (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SPLINETYPE specifies the type of spline generated by the PEDIT/Spline command."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    5         Quadratic B-spline."
+      "\n    6         Cubic B-spline."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SPLINETYPE,   (6),                            (6),                              (),                         ValidateRange(5,6))
+
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SPLINESEGS specifies the number of segments generated by the PEDIT/Spline command."
+      "\n"
+      "\n    Negative values produce arc segments, while positive values generate line segments."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SPLINESEGS,   (8),                            (8),                              (),                         ValidateNonZero())
+/*** VARDOCS:
+  <properties>
+      <remarks>
+        "\n    SURFTAB1 specifies the number of tabulations generated in the M direction by the"
+        " EDGESURF, REVSURF, RULESURF, and TABSURF commands."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SURFTAB1,     (6),                            (6),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SURFTAB2 specifies the number of tabulations generated in the N direction by the EDGESURF and REVSURF commands."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SURFTAB2,     (6),                            (6),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SURFTYPE specifies the type of surface fitting for the PEDIT/Smooth command."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    5         Quadratic B-spline surface."
+      "\n    6         Cubic B-spline surface"
+      "\n    8         Bezier surface."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SURFTYPE,     (6),                            (6),                              (),                         ValidateRange(5,8))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SURFU specifies the surface density in the M direction for the PEDIT/Smooth command."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SURFU,        (6),                            (6),                              (),                         ValidateRange(0,200))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SURFV specifies the surface density in the N direction for the PEDIT/Smooth command."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SURFV,        (6),                            (6),                              (),                         ValidateRange(0,200))
+
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERI1 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                USERI1,       (0),                            (0),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERI2 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                USERI2,       (0),                            (0),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERI3 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                USERI3,       (0),                            (0),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERI4 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                USERI4,       (0),                            (0),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERI5 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                USERI5,       (0),                            (0),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERR1 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                USERR1,       (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERR2 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                USERR2,       (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERR3 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                USERR3,       (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERR4 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                USERR4,       (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <notes>
+      "\n    USERR5 is 'reserved for user applications.'"
+    </notes>
+  </properties>
+*/
+VAR_DEF(   ODTDIST,                USERR5,       (0.0),                          (0.0),                            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    WORLDVIEW controls the switching of the UCS to the WCS for the duration of the"
+      "3DORBIT, DVIEW and VPOINT commands."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    UCS is unchanged."
+      "\n    true     UCS switches to WCS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                WORLDVIEW,    (true),                         (true),                           (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SHADEDGE specifies the rendering of faces and edges with the SHADE command."
+      "\n"
+      "\n    @table"
+      "\n    Value    Faces           Edges"
+      "\n    0        Shaded          Not highlighted"
+      "\n    1        Shaded          Background color"
+      "\n    2        Not filled      Object Color"
+      "\n    3        Object color    Background Color"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SHADEDGE,     (3),                            (3),                              (),                         ValidateRange(0,3))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SHADEDIF specifies the percentage of diffuse reflective light (vs. ambient light)"
+      " when (SHADEDGE == 0) || (SHADEDGE == 1)."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                SHADEDIF,     (70),                           (70),                             (),                         ValidateRange(0,100))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TILEMODE controls the active tab."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    false     A Layout tab is active."
+      "\n    true      The Model tab is active."
+      </remarks>
+    <notes>
+      "\n    The last active Layout tab will be activated when TILEMODE is changed from true to false."
+    </notes>
+  </properties>
+*/
+VAR_DEF_2( ODTBOOL,                TILEMODE,     (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MAXACTVP specifies the maximum of active viewports in a layout."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                MAXACTVP,     (64),                           (64),                             (),                         ValidateRange(2,64))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PINSBASE specifies the WCS insertion base point of the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PINSBASE,     (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLIMCHECK controls the specification of objects in paper space by points outside the grid limits of"
+      " the current paper space.
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    false     Points outside limits allowed"
+      "\n    true      Points outside limits disallowed"
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODTBOOL,                PLIMCHECK,    (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PEXTMIN specifies the lower-left corner of the extents of the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PEXTMIN,      (1.E+20, 1.E+20, 1.E+20),       (1.E+20, 1.E+20, 1.E+20),         (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PEXTMAX specifies the upper-right corner of the extents of the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PEXTMAX,      (-1.E+20, -1.E+20, -1.E+20),    (-1.E+20, -1.E+20, -1.E+20),      (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLIMMIN specifies the lower-left corner of the grid limits for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint2d,            PLIMMIN,      (0.0, 0.0),                     (0.0, 0.0),                       (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLIMMAX specifies the upper-right corner of the grid limits for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint2d,            PLIMMAX,      (12.0, 9.0),                    (420.0, 297.0),                   (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSNAME specifies the current UCS for the current viewport of model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODDBHARDPOINTERID,      UCSNAME,      (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateUcsRec())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSNAME specifies the current UCS for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODDBHARDPOINTERID,      PUCSNAME,     (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateUcsRec())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UNITMODE specifies the unit display format for Architectural Units and Surveyor's Units."
+      "\n"
+      "\n    @table"
+      "\n    Value    Architectural Units      Surveyor's Units"
+      "\n    0        12'-5 1/4\"               N 48d0'0\" E"
+      "\n    1        12'5-1/4\"                N48d0'0\"E"
+      "\n"
+      "\n    When UNITMODE = 1, the displayed units are in a format suitable for input."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                UNITMODE,     (0),                            (0),                              (),                         ValidateRange(0,1))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VISRETAIN specifies the precedence of layer settings for externally referenced databases."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Settings are saved in the external reference."
+      "\n    true     Settings are saved in the current *database*."
+      "\n"
+      "\n    Layer settings include color, linetype, lineweight, plot styles, on/off and freeze/thaw"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                VISRETAIN,    (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLINEGEN controls the generation of linetypes for Polylines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Each segment starts and ends in a dash."
+      "\n    true     Linetype generation is continuous, ignoring the vertices."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                PLINEGEN,     (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PSLTSCALE controls the generation of linetypes for Polylines in paper space."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Dash lengths in model space are based on model space drawing units."
+      "\n    true     Dash lengths in model space are based on paper space drawing units."
+      "\n"
+      "\n    When PSLTSCALE is true, linetypes in viewports will appear the same size as those in paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                PSLTSCALE,    (true),                         (true),                           (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TREEDEPTH specifies depth of the spatial index."
+      "\n"
+      "\n"   Spatial indexing, along with layer indexing, is used to maximize performance"
+      " of demand loading and entity selection."
+      "\n"
+      "\n    @table"
+      "\n    Value         Description"
+      "\n    < 0           2D indexing. An integer in the form -MMMPP specifies the depths for model space (MMM) and paper space (PP)"
+      "\n    0             Disables spatial indexing."
+      "\n    > 0           3D indexing. An integer in the form MMMPP specifies the depths for model space (MMM) and paper space (PP)."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                TREEDEPTH,    (3020),                         (3020),                           (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CMLSTYLE specifies the default style for new multiline entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTMLSTYLEID,           CMLSTYLE,     (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateMLStyle())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CMLJUST specifies the default justification for new multiline entities."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Top"
+      "\n    1        Middle"
+      "\n    2        Bottom"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                CMLJUST,      (0),                            (0),                              (),                         ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CMLSCALE specifies the default width scale for new multiline entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTUNITLESS4,           CMLSCALE,     (1.0),                          (20.0),                           (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PROXYGRAPHICS controls the saving of proxy images with the *database*."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        No proxy images."
+      "\n    1        Proxy images saved with *database*."
+    </remarks>
+    <notes>
+      "\n    PROXYGRAPHICS is called SAVEIMAGES in R13."
+    </notes>
+  </properties>
+*/
+VAR_DEF(   OdInt16,                PROXYGRAPHICS,(1),                            (1),                              (),                         ValidateRange(0,1))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MEASUREMENT controls the use of metric vs. imperial linetype and hatch pattern files."
+      "\n"
+      "\n    @table"
+      "\n    Name             Value    Registry Settings Used       Default Settings"
+      "\n    OdDb::kEnglish   0        ANSILinetype & ANSIHatch     acad.lin & acad.pat"
+      "\n    OdDb::kMetric    1        ISOLinetype & ISOHatch.      acadiso.lin & acadiso.pat"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDB_MEASUREMENTVALUE, MEASUREMENT,  (OdDb::kEnglish),               (OdDb::kMetric),                  (),                         ValidateRange(OdDb::kEnglish,OdDb::kMetric))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CELWEIGHT specifies the default lineweight for new entities."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDB_LINEWEIGHT,       CELWEIGHT,    (OdDb::kLnWtByLayer),           (OdDb::kLnWtByLayer),             (),                         ValidateLineWeight())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ENDCAPS specifies the lineweight endcaps for new entities."
+      "\n"
+      "\n    @table"
+      "\n    Name                   Value   Description"
+      "\n    OdDb::kEndCapNone      0       None"
+      "\n    OdDb::kEndCapRound     1       Round"
+      "\n    OdDb::kEndCapAngle     2       Angle"
+      "\n    OdDb::kEndCapSquare    3       Square"
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODTDB_ENDCAPS,          ENDCAPS,      (OdDb::kEndCapNone),            (OdDb::kEndCapNone),              (),                         ValidateRange(OdDb::kEndCapNone, OdDb::kEndCapSquare))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    JOINSTYLE specifies the lineweight join style for new entities."
+      "\n"
+      "\n    @table"
+      "\n    Name                   Value   Description"
+      "\n    OdDb::kJnStylNone      0       None"
+      "\n    OdDb::kJnStylRound     1       Round"
+      "\n    OdDb::kJnStylAngle     2       Angle"
+      "\n    OdDb::kJnStylFlat      3       Flat"
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( ODTDB_JOINSTYLE,        JOINSTYLE,    (OdDb::kJnStylNone),            (OdDb::kJnStylNone),              (),                         ValidateRange(OdDb::kJnStylNone,OdDb::kJnStylFlat))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LWDISPLAY controls the display of lineweights."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not displayed."
+      "\n    true     Displayed."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   bool,                   LWDISPLAY,    (false),                        (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INSUNITS specifies the drawing units used in the automatic scaling of blocks,"
+      " Xrefs, and images inserted into or attached to this *database*."
+      "\n"
+      "\n    @table"
+      "\n    Name                       Value        Description"
+      "\n    OdDb::kUnitsUndefined      0            Undefined"
+      "\n    OdDb::kUnitsInches         1            Inches"
+      "\n    OdDb::kUnitsFeet           2            Feet"
+      "\n    OdDb::kUnitsMiles          3            Miles"
+      "\n    OdDb::kUnitsMillimeters    4            Millimeters"
+      "\n    OdDb::kUnitsCentimeters    5            Centimeters"
+      "\n    OdDb::kUnitsMeters         6            Meters"
+      "\n    OdDb::kUnitsKilometers     7            Kilometers"
+      "\n    OdDb::kUnitsMicroinches    8            Microinches"
+      "\n    OdDb::kUnitsMils           9            Mils"
+      "\n    OdDb::kUnitsYards          10           Yards"
+      "\n    OdDb::kUnitsAngstroms      11           Angstroms"
+      "\n    OdDb::kUnitsNanometers     12           Nanometers"
+      "\n    OdDb::kUnitsMicrons        13           Microns"
+      "\n    OdDb::kUnitsDecimeters     14           Decimeters"
+      "\n    OdDb::kUnitsDekameters     15           Dekameters"
+      "\n    OdDb::kUnitsHectometers    16           Hectometers"
+      "\n    OdDb::kUnitsGigameters     17           Gigameters"
+      "\n    OdDb::kUnitsAstronomical   18           Astronomical"
+      "\n    OdDb::kUnitsLightYears     19           LightYears"
+      "\n    OdDb::kUnitsParsecs        20           Parsecs"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTDB_UNITSVALUE,       INSUNITS,     (OdDb::kUnitsInches),           (OdDb::kUnitsMillimeters),        (),                         ValidateRange(OdDb::kUnitsUndefined,OdDb::kUnitsMax))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TSTACKALIGN controls the alignment of stacked text."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Bottom"
+      "\n    1       Center"
+      "\n    2       Top"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdUInt16,               TSTACKALIGN,  (1),                            (1),                              (),                         ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TSTACKSIZE specifies the size of stacked text as a percentage of the current text height."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdUInt16,               TSTACKSIZE,   (70),                           (70),                             (),                         ValidateRange(25,125))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HYPERLINKBASE specifies the base path for relative hyperlinks in this *database*."
+      "\n"
+      "\n    If HYPERLINKBASE is an empty string, the *database* path is used."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdString,               HYPERLINKBASE,(OD_T("")),                           (OD_T("")),                             (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    STYLESHEET specifies the *name* of the style sheet for the active layout."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdString,               STYLESHEET,   (OD_T("")),                           (OD_T("")),                             (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    XEDIT controls if this *database*, when an Xref, can be edited in-place."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Not edited in-place."
+      "\n    true    Edited in-place."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                XEDIT,        (true),                         (true),                           (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CEPSNTYPE specifies the plot style name type for new entities."
+      "\n"
+      "\n    @table"
+      "\n    Name                                Value"
+      "\n    OdDb::kPlotStyleNameByLayer         0"
+      "\n    OdDb::kPlotStyleNameByBlock         1"
+      "\n    OdDb::kPlotStyleNameIsDictDefault   2"
+      "\n    OdDb::kPlotStyleNameById            3"
+  </properties>
+*/
+VAR_DEF_H( ODTDB_PLOTSTYLENAMETYPE, CEPSNTYPE,    (OdDb::kPlotStyleNameByLayer),  (OdDb::kPlotStyleNameByLayer),    (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CEPSNID specifies the plot style for new entities when CEPSNTYPE == OdDb::kPlotStyleNameById"
+  </properties>
+*/
+VAR_DEF_H( ODDBHARDPOINTERID,      CEPSNID,      (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidatePSName())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PSTYLEMODE specifies if this *database* is in a color-dependent or named plot style mode."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Named plot style mode."
+      "\n    true    Color-dependent plot style mode."
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF(ODTBOOL,                PSTYLEMODE,   (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FINGERPRINTGUID uniquely identifies a *database*."
+      "\n"
+      "\n    FINGERPRINTGUID is set when the *database* is created."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdString,               FINGERPRINTGUID,(odInitFINGERPRINTGUID()),    (odInitFINGERPRINTGUID()),        (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VERSIONGUID uniquely identifies a specific version of a *database*."
+      "\n"
+      "\n    VERSIONGUID is updated each time the *database* is saved.
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdString,               VERSIONGUID,  (odInitVERSIONGUID()),          (odInitVERSIONGUID()),            (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    EXTNAMES specifies if symbol tables follow the R14- or R2000+ naming conventions."
+      "\n"
+      "\n    @table"
+      "\n    Value   Version    Length            Character Set"
+      "\n    false   R14-       31 characters     [A-Z], [0-9], $, _, -"
+      "\n    true    R2000+     255 characters    All except \, /, :, *, ?, \", <, >, |"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                EXTNAMES,     (true),                         (true),                           (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PSVPSCALE specifies the view scale (PS/MS) for new viewports."
+      "\n"
+      "\n    A scale of 0.0 specifies Scaled to Fit.
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTUNITLESS8,           PSVPSCALE,    (0.0),                          (0.0),                            (),                         ValidateEqGr(0.))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    OLESTARTUP specifies if the OLE source applications load when plotting."
+      " This may improve the plot quality."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Not loaded."
+      "\n    true    Loaded."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                OLESTARTUP,   (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PELLIPSE specifies if polylines or ellipses are to be generated by the ELLIPSE command."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Ellipses."
+      "\n    true    Polylines"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                PELLIPSE,     (false),                        (false),                          (),                         ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ISOLINES specifies the number of isolines displayed per surface on 3D solids."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdUInt16,               ISOLINES,     (4),                            (4),                              (),                         ValidateRange(0,2047))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TEXTQLTY specifies the rendering quality of TrueType fonts while plotting."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdUInt16,               TEXTQLTY,     (50),                           (50),                             (),                         ValidateRange(0,100))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FACETRES specifies the quality of hidden, shaded, and rendered objects."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTUNITLESS4,           FACETRES,     (.5),                           (.5),                             (),                         ValidateRange(0.01,10.0))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORG specifies the WCS origin of the current UCS for the current viewport in model space."
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF_H(OdGePoint3d,          UCSORG,       (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+// READ ONLY IN R2000
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSXDIR specifies the WCS x-direction of the current UCS for the current viewport in model space."
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF_H(OdGeVector3d,         UCSXDIR,      (1.0, 0.0, 0.0),                (1.0, 0.0, 0.0),                  (),                         ValidateNone())
+
+ // READ ONLY IN R2000
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSYDIR specifies the WCS y-direction of the current UCS for the current viewport in model space."
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF_H(OdGeVector3d,         UCSYDIR,      (0.0, 1.0, 0.0),                (0.0, 1.0, 0.0),                  (),                         ValidateNone())
+
+// READ ONLY IN R2000
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSBASE specifies the UCS that defines the"
+      " orthographic UCS base for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTUCSID,               PUCSBASE,     (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateUcsRec())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORG specifies the WCS origin of the current UCS of the current paper space."
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF_H(OdGePoint3d,          PUCSORG,      (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSXDIR specifies the WCS x-direction of the current UCS of the current paper space."
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF_H(OdGeVector3d,         PUCSXDIR,     (1.0, 0.0, 0.0),                (1.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSYDIR specifies the WCS y-direction of the current UCS of the current paper space."
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF_H(OdGeVector3d,         PUCSYDIR,     (0.0, 1.0, 0.0),                (0.0, 1.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORTHOVIEW specifies the orthographic UCS with respect to the base UCS for the current paper space."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Non-orthographic"
+      "\n    1       Top"
+      "\n    2       Bottom"
+      "\n    3       Front"
+      "\n    4       Back"
+      "\n    5       Left"
+      "\n    6       Right"
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdInt16,                PUCSORTHOVIEW,(0),                            (0),                              (),                         ValidateRange(0,6))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORGTOP specifies the WCS origin of the top-orthographic"
+      " UCS with respect to the base UCS for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PUCSORGTOP,   (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORGBOTTOM specifies the WCS origin of the bottom-orthographic"
+      " UCS with respect to the base UCS for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PUCSORGBOTTOM,(0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORGLEFT specifies the WCS origin of the left-orthographic"
+      " UCS with respect to the base UCS for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PUCSORGLEFT,  (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORGRIGHT specifies the WCS origin of the right-orthographic"
+      " UCS with respect to the base UCS for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PUCSORGRIGHT, (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORGFRONT specifies the WCS origin of the front-orthographic"
+      " UCS with respect to the base UCS for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PUCSORGFRONT, (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PUCSORGBACK specifies the WCS origin of the back-orthographic"
+      " UCS with respect to the base UCS for the current paper space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            PUCSORGBACK,  (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSBASE specifies the UCS that defines the orthographic UCS for model space."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTUCSID,               UCSBASE,      (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateUcsRec())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORTHOVIEW specifies the model space orthographic UCS with respect to the base UCS."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Non-orthographic"
+      "\n    1       Top"
+      "\n    2       Bottom"
+      "\n    3       Front"
+      "\n    4       Back"
+      "\n    5       Left"
+      "\n    6       Right"
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdInt16,                UCSORTHOVIEW, (0),                            (0),                              (),                         ValidateRange(0,6))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORGTOP specifies the WCS origin of the model space top-orthographic UCS with respect to the base model space UCS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            UCSORGTOP,    (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORGBOTTOM specifies the WCS origin of the model space bottom-orthographic UCS with respect to the base model space UCS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            UCSORGBOTTOM, (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORGLEFT specifies the WCS origin of the model space left-orthographic UCS with respect to the base model space UCS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            UCSORGLEFT,   (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORGRIGHT specifies the WCS origin of the model space right-orthographic UCS with respect to the base model space UCS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            UCSORGRIGHT,  (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORGFRONT specifies the WCS origin of the model space front-orthographic UCS with respect to the base model space UCS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            UCSORGFRONT,  (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSORGBACK specifies the WCS origin of the model space back-orthographic UCS with respect to the base model space UCS."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H( OdGePoint3d,            UCSORGBACK,   (0.0, 0.0, 0.0),                (0.0, 0.0, 0.0),                  (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DWGCODEPAGE specifies the system code page when the database was created."
+      "\n"
+      "\n    @table"
+      "\n    Name            Value    Description"
+      "\n    CP_UNDEFINED    0        undefined"
+      "\n    CP_ASCII        1        ascii"
+      "\n    CP_8859_1       2        iso8859-1"
+      "\n    CP_8859_2       3        iso8859-2"
+      "\n    CP_8859_3       4        iso8859-3"
+      "\n    CP_8859_4       5        iso8859-4"
+      "\n    CP_8859_5       6        iso8859-5"
+      "\n    CP_8859_6       7        iso8859-6"
+      "\n    CP_8859_7       8        iso8859-7"
+      "\n    CP_8859_8       9        iso8859-8"
+      "\n    CP_8859_9       10       iso8859-9"
+      "\n    CP_DOS437       11       dos437"
+      "\n    CP_DOS850       12       dos850"
+      "\n    CP_DOS852       13       dos852"
+      "\n    CP_DOS855       14       dos855"
+      "\n    CP_DOS857       15       dos857"
+      "\n    CP_DOS860       16       dos860"
+      "\n    CP_DOS861       17       dos861"
+      "\n    CP_DOS863       18       dos863"
+      "\n    CP_DOS864       19       dos864"
+      "\n    CP_DOS865       20       dos865"
+      "\n    CP_DOS869       21       dos869"
+      "\n    CP_DOS932       22       dos932"
+      "\n    CP_MACINTOSH    23       mac-roman"
+      "\n    CP_BIG5         24       big5"
+      "\n    CP_KSC5601      25       ksc5601"
+      "\n    CP_JOHAB        26       johab"
+      "\n    CP_DOS866       27       dos866"
+      "\n    CP_ANSI_1250    28       ansi 1250"
+      "\n    CP_ANSI_1251    29       ansi 1251"
+      "\n    CP_ANSI_1252    30       ansi 1252"
+      "\n    CP_GB2312       31       gb2312"
+      "\n    CP_ANSI_1253    32       ansi 1253"
+      "\n    CP_ANSI_1254    33       ansi 1254"
+      "\n    CP_ANSI_1255    34       ansi 1255"
+      "\n    CP_ANSI_1256    35       ansi 1256"
+      "\n    CP_ANSI_1257    36       ansi 1257"
+      "\n    CP_ANSI_874     37       ansi 874"
+      "\n    CP_ANSI_932     38       ansi 932"
+      "\n    CP_ANSI_936     39       ansi 936"
+      "\n    CP_ANSI_949     40       ansi 949"
+      "\n    CP_ANSI_950     41       ansi 950"
+      "\n    CP_ANSI_1361    42       ansi 1361"
+      "\n    CP_ANSI_1200    43       ansi 1200"
+      "\n    CP_ANSI_1258    44       ansi 1258"
+
+    </remarks>
+  </properties>
+*/
+RO_VAR_DEF(OdCodePageId,           DWGCODEPAGE,  (CP_ANSI_1252),                 (CP_ANSI_1252),                   (),                         ValidateNone())
+
+// New in Red Deer
+
+DICR21VAR( ODTTABLESTYLEID,        CTABLESTYLE,         (OdDbObjectId::kNull),    (OdDbObjectId::kNull),            (),                         ValidateTableStyle())
+
+// New in AC2008
+
+/*** VARDOCS:
+<properties>
+<remarks>
+"\n    CMLEADERSTYLE specifies the active multileader style, which will be assigned to the new multileaders in setDatabaseDefaults()"
+</remarks>
+</properties>
+*/
+MLEADERSTYLE_VAR_DEF( ODTMLEADERSTYLEID, CMLEADERSTYLE, (OdDbObjectId::kNull),    (OdDbObjectId::kNull),            (),                         ValidateMLeaderStyle())
+
+/*** VARDOCS:
+<properties>
+<remarks>
+"\n    CANNOSCALE specifies the current annotation scale."
+"\n    Unlike OdDbDatabase::cannoscale(), CANNOSCALE depends on the active viewport if the current layout is not model space."
+</remarks>
+</properties>
+*/
+ANNO_VAR_DEF( ODANNOSCALE,         CANNOSCALE,          (ODANNOSCALE()),          (ODANNOSCALE()),                  (),                         ValidateNone())
+
+DICR21VAR( ODTBOOL,                ANNOALLVISIBLE,      (true),                   (true),                           (),                         ValidateBOOL())
+
+DICR21VAR(OdInt8,                  ANNOTATIVEDWG,       (0),                      (0),                              (),                         ValidateANNOTATIVEDWG())
+
+DICR21VAR( ODTBOOL,                MSLTSCALE,           (true),                   (true),                           (),                         ValidateBOOL())
+
+
+DICR21VAR( OdInt16,                LAYEREVAL,            (1),                     (1),                           (),                             ValidateRange(0,2))
+DICR21VAR( OdInt16,                LAYERNOTIFY,          (15),                    (15),                           (),                            ValidateRange(-63,63))
+DICR21VAR( OdInt16,                LIGHTINGUNITS,        (2),                     (2),                           (),                             ValidateRange(0,2)) // Default value since ACAD 2009 is 2 if drawing was created from scratch. But default acad template contains 0 value.
+DICR21VAR( OdInt16,                LIGHTSINBLOCKS,       (1),                     (1),                           (),                             ValidateRange(0,1))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DBCSTATE controls the display of the dbConnect Manager,"
+      " whether or not the dbConnect Manager is active."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Not displayed"
+      "\n    1       Displayed"
+    </remarks>
+  </properties>
+*/
+DICR15VAR(  OdInt16,               DBCSTATE,            (0),                     (0),                              (),                         ValidateRange(0,1))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INTERSECTIONCOLOR specifies the ACI color index of intersection polylines."
+      "\n"
+      "\n    Intersection polylines are displayed at the intersections of 3D surfaces"
+      " if and only if INTERSECTIONDISPLAY == true.
+      "\n"
+      "\n    @table"
+      "\n    Name              Value   Description"
+      "\n    kACIbyBlock       0       ByBlock."
+      "\n    kACIforeground    7       Foreground color."
+      "\n    kACIbyLayer       256     ByLayer."
+      "\n    kACIRed           1       Red."
+      "\n    kACIYellow        2       Yellow."
+      "\n    kACIGreen         3       Green."
+      "\n    kACICyan          4       Cyan."
+      "\n    kACIBlue          5       Blue."
+      "\n    kACIMagenta       6       Magenta."
+      "\n    ..                8-255   Defined by display device."
+      "\n    kACInone          257     No color."
+
+    </remarks>
+  </properties>
+*/
+DICR15VAR(  OdInt16,               INTERSECTIONCOLOR,   (257),                   (257),                            (),                         ValidateRange(0,257))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INTERSECTIONDISPLAY controls the display of intersection polylines."
+      "\n"
+      "\n    Intersection polylines are displayed at the intersections of 3D surfaces."
+      "\n"
+      "\n    @table"
+      "\n    Value     Description"
+      "\n    false     Not displayed"
+      "\n    true      Displayed"
+    </remarks>
+  </properties>
+*/
+DICR15VAR(  bool,                  INTERSECTIONDISPLAY, (false),                 (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HALOGAP specifies the gap to be displayed where one 3D object hides another."
+      "\n"
+      "\n    HALOGAP is zoom independent, and is specified as a percentage of one drawing unit."
+    </remarks>
+  </properties>
+*/
+DICR15VAR(  OdInt16,               HALOGAP,             (0),                     (0),                              (),                         ValidateNone())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    OBSCUREDCOLOR specifies the ACI color index of obscured lines."
+      "\n"
+      "\n    @table"
+      "\n    Name              Value   Description"
+      "\n    kACIbyBlock       0       ByBlock."
+      "\n    kACIforeground    7       Foreground color."
+      "\n    kACIbyLayer       256     ByLayer."
+      "\n    kACIRed           1       Red."
+      "\n    kACIYellow        2       Yellow."
+      "\n    kACIGreen         3       Green."
+      "\n    kACICyan          4       Cyan."
+      "\n    kACIBlue          5       Blue."
+      "\n    kACIMagenta       6       Magenta."
+      "\n    ..                8-255   Defined by display device."
+      "\n    kACInone          257     No color."
+    </remarks>
+  </properties>
+*/
+DICR15VAR(  OdInt16,               OBSCUREDCOLOR,       (257),                   (257),                            (),                          ValidateRange(0,257))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    OBSCUREDLTYPE specifies the display and linetype of obscured lines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Off"
+      "\n    1        Solid"
+      "\n    2        Dashed"
+      "\n    3        Dotted"
+      "\n    4        Short Dash"
+      "\n    5        Medium Dash"
+      "\n    6        Long Dash"
+      "\n    7        Double Short Dash"
+      "\n    8        Double Medium Dash"
+      "\n    9        Double Long Dash"
+      "\n    10       Medium Long Dash"
+      "\n    11       Sparse Dot"
+    </remarks>
+  </properties>
+*/
+DICR15VAR(  OdInt16,               OBSCUREDLTYPE,       (0),                     (0),                              (),                         ValidateRange(0,11))
+
+// these was dictvardefs in old versions
+
+
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INDEXCTL specifies the creation of layer and spatial indices in the *database*."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       None created."
+      "\n    1       Layer index created."
+      "\n    2       Spatial Index created."
+      "\n    3       Both created."
+    </remarks>
+  </properties>
+*/
+DICR15VAR(  OdInt16,               INDEXCTL,            (0),                     (0),                              (),                         ValidateRange(0,3))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PROJECTNAME specifies the project name associated with the *database*."
+    </remarks>
+  </properties>
+*/
+DICR15VAR( OdString,               PROJECTNAME,         (OdString::kEmpty),      (OdString::kEmpty),               (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SORTENTS controls the object sort order."
+      "\n"
+      "\n"   SORTENTS will be a combination of the following:"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       No sorting"
+      "\n    1       Object selection sorting"
+      "\n    2       Object snap sorting"
+      "\n    4       Clear all checkboxes"
+      "\n    8       MSLIDE command sorting"
+      "\n    16      REGEN command sorting"
+      "\n    32      Plotting sorting"
+      "\n    64      Clear all checkboxes"
+    </remarks>
+    <notes>
+      "\n    The SORTENTS system variable has been depreciated."
+    </notes>
+    <see_also>
+     "\n    DRAWORDERCTL"
+    </see_also>
+  </properties>
+*/
+DICR15VAR( OdInt16,                SORTENTS,            (127),                   (127),                            (),                         ValidateRange(0,127))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMASSOC controls the associativity of new dimension entities."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Creates exploded dimensions."
+      "\n    1       Creates un-associative dimension entities."
+      "\n    2       Creates associative dimension entities."
+    </remarks>
+  </properties>
+*/
+DICR15VAR( OdInt16,                DIMASSOC,            (2),                     (2),                              (),                         ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HIDETEXT controls the participation of Text and MText entities in HIDE commands."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Don't hide and are not hidden."
+      "\n    true     Hide and are hidden"
+    </remarks>
+  </properties>
+*/
+DICR15VAR( bool,                   HIDETEXT,            (true),                  (true),                           (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DRAWORDERCTL controls the display update and inheritance of"
+      " draworder when using certain editing commands."
+      "\n"
+      "\n    The following commands are affected by DRAWORDERCTL, BREAK, EXPLODE, FILLET, "
+      " HATCH, HATCHEDIT, JOIN, OFFSET, PEDIT, and TRIM."
+      "\n"
+      "\n    With Draworder Inheritance on, entities created with these commands assume"
+      " the draw order of the original objects."
+      "\n"
+      "\n    With Draworder Inheritance off,"
+      " they assume the default draworder (top)."
+      "\n"
+      "\n   With Display update on, entities created with the aforementioned editing"
+      " commands are displayed correctly according to their Draworder."
+      "\n"
+      "\n With Display Update"
+      " off, they are displayed on top, until the next regeneration."
+      "\n"
+      "\n    @table"
+      "\n    Value   Draworder Inheritance   Display Update"
+      "\n    0       Off                     Off"
+      "\n    1       Off                     On"
+      "\n    2       On                      Off"
+      "\n    3       On                      On"
+    </remarks>
+  </properties>
+*/
+DICR21VAR( OdInt8,                   DRAWORDERCTL,        (3),                     (3),                              (),                    ValidateRange(0,3))
+
+// 2006 support
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HPINHERIT specifies the hatch origin when hatch properties"
+      " are inherited with the HATCH and HATCHEDIT commands."
+      "\n"
+      "\n    @table"
+      "\n    Value   Hatch Origin"
+      "\n    false   From HPORIGIN"
+      "\n    true    From Source"
+    </remarks>
+  </properties>
+*/
+DICR21VAR(   ODTBOOL,                HPINHERIT,           (false),                 (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HPORIGIN specifies the hatch origin for new hatch entities relative to the current UCS."
+    </remarks>
+  </properties>
+*/
+DICR21VAR(   OdGePoint2d,            HPORIGIN,            (OdGePoint2d::kOrigin),  (OdGePoint2d::kOrigin),           (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FIELDEVAL specifies when fields are updated. "
+      "\n"
+      "\n    FIELDEVAL will be a combination of one or more of the following values:"
+      "\n"
+      "\n    @table"
+      "\n    Name                              Value    Description"
+      "\n    OdDbField::kDisable               0        Disable evaluation of field."
+      "\n    OdDbField::kOnOpen                0x01     Evaluate on *database* open."
+      "\n    OdDbField::kOnSave                0x02     Evaluate on *database* save."
+      "\n    OdDbField::kOnPlot                0x04     Evaluate on *database* plot."
+      "\n    OdDbField::kOnEtransmit           0x08     Evaluate on *database* Etransmit."
+      "\n    OdDbField::kOnRegen               0x10     Evaluate on *database* regen."
+      "\n    OdDbField::kOnDemand              0x20     Evaluate on demand."
+      "\n    OdDbField::kAutomatic             0x3F     Evaluate automatically."
+    </remarks>
+  </properties>
+*/
+DICR21VAR(   OdInt16,                FIELDEVAL,           (31),                     (31),                             (),                         ValidateRange(0,31))
+
+DICR21VAR(   double,                 MSOLESCALE,          (1.0),                    (1.0),                            (),                         ValidateEqGr(0.))
+
+DICR21VAR(   OdInt16,                UPDATETHUMBNAIL,     (15),                     (15),                             (),                         ValidateRange(0,31))
+
+//-----------------------------------------
+// Variables added in AC 2007
+//-----------------------------------------
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SOLIDHIST controls the default Show History property setting for all solids."
+      "\n"
+      "\n    When enabled, a history of the solids comprising a composite solid is retained."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Disabled."
+      "\n    1        Enabled."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt8,                  SOLIDHIST,            (0),                    (0),                             (),                         ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SHOWHIST controls the History display for solids in a drawing."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Hides all history."
+      "\n    1        Uses the individual solid Show History properties."
+      "\n    2        Displays all history.
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   OdInt8,                  SHOWHIST,            (1),                    (1),                             (),                         ValidateRange(0,2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PSOLWIDTH specifies the default width for swept solids."
+    </remarks>
+  </properties>
+*/
+DICR15VAR( ODTDIST,                 PSOLWIDTH,         (0.25),                  (5.0),                             (),                         ValidateRange(DBL_MIN,DBL_MAX))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOFTPARAM controls the shape of lofted solids and surfaces."
+      "\n"
+      "\n    LOFTPARAM will be a combination of one or more of the following:"
+      "\n"
+      "\n    @table"
+      "\n    Name                 Value       Description"
+      "\n    kLoftNoParam         0x00        No parameters.
+      "\n    kLoftNoTwist         0x01        No twist between cross sections."
+      "\n    kLoftAlignDirection  0x02        Align directions of cross sections."
+      "\n    kLoftSimplify        0x04        Create simple solids and surfaces."
+      "\n    kLoftClose           0x08        Close between the starting and ending cross sections."
+      "\n    kLoftDefault         0x07        kLoftNoTwist | kLoftAlignDirection | kLoftSimplify "
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  ODTDB_LOFTPARAMTYPE,                LOFTPARAM,            (OdDb::kLoftDefault),                    (OdDb::kLoftDefault),     (),   ValidateRange(OdDb::kLoftNoParam,ODTDB_LOFTPARAMTYPE(OdDb::kLoftNoTwist|OdDb::kLoftAlignDirection|OdDb::kLoftSimplify|OdDb::kLoftClose)))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOFTNORMALS controls the normals of lofted objects as they pass through cross sections."
+      "\n"
+      "\n    It is ignored when a path or guide curve is specified."
+      "\n"
+      "\n    @table"
+      "\n    Name                   Value    Description"
+      "\n    kLoftRuled             0        Ruled surface."
+      "\n    kLoftSmooth            1        Smooth surface."
+      "\n    kLoftFirstNormal       2        Surface is normal to the first cross section."
+      "\n    kLoftLastNormal        3        Surface is normal to the last cross section."
+      "\n    kLoftEndsNormal        4        Surface is normal to the first and last cross sections."
+      "\n    kLoftAllNormal         5        Surface is normal to all cross sections."
+      "\n    kLoftUseDraftAngles    6        Surface uses draft angle and magnitude."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTDB_LOFTNORMALSTYPE,             LOFTNORMALS,            (OdDb::kLoftSmooth),                    (OdDb::kLoftSmooth),     (),         ValidateRange(OdDb::kLoftRuled,OdDb::kLoftUseDraftAngles))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOFTANG1 specifies the draft angle through the first cross section in a loft operation."
+      "\n"
+      "\n    0 is measured in the plane of the curve, outward from the curve."
+      "\n    Positive angles are measured toward the next cross section."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  ODTORIENT,                   LOFTANG1,           (OdaPI2),                   (OdaPI2),                             (),                         ValidateRange(0, Oda2PI))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOFTANG1 specifies the draft angle through the first cross section in a loft operation."
+      "\n"
+      "\n    0 is measured in the plane of the curve, outward from the curve."
+      "\n    Positive angles are measured toward the next previous cross section."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  ODTORIENT,                   LOFTANG2,           (OdaPI2),                   (OdaPI2),                             (),                         ValidateRange(0, Oda2PI))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOFTMAG1 specifies the draft angle magnitude through the first cross section"
+      "\n    of a lofted solid."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  ODTUNITLESS8,                LOFTMAG1,            (0.),                    (0.),                             (),                         ValidateRange(0.,1.e100))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOFTMAG2 specifies the draft angle magnitude through the first cross section"
+      "\n    of a lofted solid."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  ODTUNITLESS8,                LOFTMAG2,            (0.),                    (0.),                             (),                         ValidateRange(0., 1.e100))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LATITUDE specifies the drawing model latitude in decimal degrees."
+      "\n"
+      "\n    The default is determined by the country code in the operating system."
+    </remarks>
+    <notes>
+      "\n     All angles are expressed in degrees."
+      "\n"
+      "\n     North latitudes are positive."
+    </notes>
+  </properties>
+*/
+VAR_DEF(  ODTORIENT,                    LATITUDE,            (37.7950),               (37.7950),                             (),                         ValidateRange(-90., 90.))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LONGITUDE specifies the drawing model longitude in decimal degrees."
+      "\n"
+      "\n    The default is determined by the country code in the operating system."
+    </remarks>
+    <notes>
+      "\n     All angles are expressed in degrees."
+      "\n"
+      "\n     West longitudes are positive"
+    </notes>
+  </properties>
+*/
+VAR_DEF(  ODTORIENT,                    LONGITUDE,           (-122.3940),             (-122.3940),                             (),                         ValidateRange(-180., 180.))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    NORTHDIRECTION specifies the angle of the Sun from North."
+    </remarks>
+    <notes>
+      "\n     All angles are expressed in degrees."
+      "\n"
+      "\n     This angle is in the context of the WCS."
+    </notes>
+  </properties>
+*/
+VAR_DEF(  ODTORIENT,                    NORTHDIRECTION,       (0.),                    (0.),                             (),                          ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TIMEZONE sets the time zone for sun studies in the drawing."
+      "\n"
+      "\n"   TIMEZONE represents hours and minutes away from Greenwich Mean Time."
+      "\n    Setting a geographic location sets TIMEZONE."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTDB_TIMEZONE,             TIMEZONE, (OdDb::kPacific),      (OdDb::kPacific),                            (),                            ValidateRange(OdDb::kInternationalDateLine,OdDb::kTonga))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LIGHTGLYPHDISPLAY controls the display of light glyphs."
+      "\n"
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Not displayed."
+      "\n    1        Displayed."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  OdInt8,          LIGHTGLYPHDISPLAY,            (1),                    (1),                             (),                              ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TILEMODELIGHTSYNCH controls the synchronization of lighting in all model space viewports."
+      "\n"
+      "\n    This system variable has no effect on layout viewports."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Not synchronized."
+      "\n    1        Synchronized"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  OdInt8,          TILEMODELIGHTSYNCH,            (1),                    (1),                             (),                              ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INTERFERECOLOR specifies the color of interference objects."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  OdCmColor,       INTERFERECOLOR, (OdCmEntityColor::kByLayer), (OdCmEntityColor::kByLayer),               (),                              ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INTERFEREOBJVS specifies the interference object visual style."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODVISTYLEID,    INTERFEREOBJVS,       (OdDbObjectId::kNull),       (OdDbObjectId::kNull),              (),                               ValidateVisualStyle())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    INTERFEREVPVS specifies the interference checking visual style for the viewport."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODVISTYLEID,       INTERFEREVPVS,  (OdDbObjectId::kNull),          (OdDbObjectId::kNull),              (),                                ValidateVisualStyle())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DRAGVS specifies the drag visual style."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODVISTYLEID,               DRAGVS,  (OdDbObjectId::kNull),          (OdDbObjectId::kNull),              (),                                ValidateVisualStyle())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n     CSHADOW controls shadows for 3D objects."
+      "\n"
+      "\n    @table"
+      "\n    Name                       Value    Description"
+      "\n    kShadowsCastAndReceive     0x00     Shadows cast and received."
+      "\n    kShadowsDoesNotReceive     0x01     Shadows cast, but not received."
+      "\n    kShadowsDoesNotCast        0x02     Shadows received but not cast."
+      "\n    kShadowsIgnore             0x03      Shadows neither cast nor received."
+    </remarks>
+    <notes>
+      "\n     It order be displayed, shadows must be turned enabled in the visual style that is applied"
+      "\n     to the viewport."
+    </notes>
+  </properties>
+*/
+VAR_DEF(ODTDB_SHADOWFLAGS,         CSHADOW,    (OdGiSubEntityTraits::kShadowsCastAndReceive), (OdGiSubEntityTraits::kShadowsCastAndReceive),    (),                                ValidateRange(OdGiSubEntityTraits::kShadowsCastAndReceive,OdGiSubEntityTraits::kShadowsIgnore))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SHADOWPLANELOCATION specifies the location, on the current Z-axis, of an invisible ground plane"
+      "\n    used to display shadows."
+      "\n"
+      "\n    The shadow plane casts and receives shadows."
+    </remarks>
+  </properties>
+*/
+VAR_DEF(  ODTDIST,         SHADOWPLANELOCATION,           (0.),                    (0.),                             (),                               ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CAMERADISPLAY controls the display of camera glyphs."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Not displayed."
+      "\n    true     Displayed."
+    </remarks>
+  </properties>
+*/
+
+VAR_DEF( ODTBOOL,                CAMERADISPLAY,           (false),                 (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LENSLENGTH specifies the length, in millimeters, of the lens used in perspective viewing."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTDIST,               LENSLENGTH,           (50.),                     (50.),                             (),                           ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CAMERAHEIGHT specifies the default height, in drawing units, for new camera objects."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTDIST,               CAMERAHEIGHT,           (0.),                    (0.),                             (),                           ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    STEPSPERSEC specifies the number of steps taken per second "
+      "\n    in walk or fly mode."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTDIST,               STEPSPERSEC,           (2.),                    (2.),                             (),                           ValidateRange(1,30))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    STEPSIZE specifies the size of each step, in drawing units, in walk or fly mode."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTDIST,               STEPSIZE,           (6.),                    (6.),                             (),                           ValidateRange(1e-6,1e+6))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    3DDWFPREC specifies the 3D DWF publishing precision."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTDIST,               3DDWFPREC,           (2.),                    (2.),                             (),                           ValidateRange(1,6))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PSOLHEIGHT specifies the default height, in drawing units,"
+      "\n    used by the POLYSOLID command, for swept solid objects."
+    </remarks>
+  </properties>
+*/
+DICR15VAR( ODTDIST,             PSOLHEIGHT,          (4.),                    (80.),                            (),                     ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CMATERIAL specifies the material of new objects."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( ODTMATERIALID,         CMATERIAL,      (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                     ValidateMaterial())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DWFFRAME controls the visibility and plotting of the DWF underlay frame."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Not visible and not plotted."
+      "\n    1        Visible and plotted."
+      "\n    2        Visible but not plotted."
+    </remarks>
+  </properties>
+*/
+DICR21VAR_H(  OdInt8,          DWFFRAME,            (2),                    (2),                             (),                              ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DGNFRAME controls the visibility and plotting of the DGN frame."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Not visible and not plotted."
+      "\n    1        Visible and plotted."
+      "\n    2        Visible but not plotted."
+    </remarks>
+  </properties>
+*/
+VAR_DEF_H(  OdInt8,          DGNFRAME,            (2),                    (2),                             (),                              ValidateRange(0,2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    REALWORLDSCALE controls the rendering of materials with units set to real-world scale."
+      "\n"
+      "\n     @table"
+      "\n     Value    Description"
+      "\n     false    Not rendered."
+      "\n     true     Rendered."
+    </remarks>
+  </properties>
+*/
+VAR_DEF( bool,          REALWORLDSCALE,            (true),                    (true),                             (),                              ValidateBOOL())
+
+//-----------------------------------------
+// Variables added in AC 2008
+//-----------------------------------------
+DICR21VAR( OdInt16,     DXEVAL,     (12),                     (12),                          (),                         ValidateRange(0,511))
+
+//-----------------------------------------
+// Variables added in AC 2009
+//-----------------------------------------
+DICR21VAR( OdInt16,        GEOLATLONGFORMAT,        (1),                     (1),                          (),                         ValidateRange(0,1))
+DICR21VAR( OdInt16,        GEOMARKERVISIBILITY,     (1),                     (1),                          (),                         ValidateRange(0,1))
+
+DICR21VAR( OdInt16,                PREVIEWTYPE,     (0),                     (0),                          (),                         ValidateRange(0,1))
+
+//-----------------------------------------
+// Variables added in AC 2010
+//-----------------------------------------
+
+// DIMTXTDIRECTION - defined in DimVarDefs.h
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    EXPORTMODELSPACE specifies what part of the drawing to export to a DWF, DWFx, or PDF file from Model space"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Display"
+      "\n    1       Extents"
+      "\n    2       Window"
+    </remarks>
+  </properties>
+*/
+DICR24VAR( OdInt16,    EXPORTMODELSPACE,             (0),                 (0),                          (),                         ValidateRange(0,2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    EXPORTPAPERSPACE specifies what part of the drawing to export to a DWF, DWFx, or PDF file from paper space"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Current Layout"
+      "\n    1       All Layouts"
+    </remarks>
+  </properties>
+*/
+DICR24VAR( OdInt16,    EXPORTPAPERSPACE,             (0),                 (0),                          (),                         ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    EXPORTPAGESETUP specifies whether to export to a DWF, DWFx, or PDF file with the current page setup"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Default"
+      "\n    1       Override"
+    </remarks>
+  </properties>
+*/
+DICR24VAR( OdInt16,     EXPORTPAGESETUP,             (0),                 (0),                          (),                         ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FRAME controls the visibility of frames for external references, images and underlays. It overrides the individual IMAGEFRAME, DWFFRAME, PDFFRAME, DGNFRAME, and XCLIPFRAME settings"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Invisible"
+      "\n    1       Is displayed and plotted"
+      "\n    2       Is displayed but not plotted"
+      "\n    3       The individual setting varies for different underlays, external references and images"
+    </remarks>
+  </properties>
+*/
+DICR24VAR_H( OdInt16,               FRAME,             (3),                 (3),                          (),                         ValidateRange(0,3))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PDFFRAME controls the visibility of PDF underlay frames."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Invisible"
+      "\n    1       Is displayed and plotted"
+      "\n    2       Is displayed but not plotted"
+    </remarks>
+  </properties>
+*/
+/* This variable was bool in previous version */
+DICR24VAR_H( OdInt16,               PDFFRAME,          (1),                 (1),                          (),                         ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    XCLIPFRAME controls the visibility of Xref clip boundaries."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Invisible"
+      "\n    1       Is displayed and plotted"
+      "\n    2       Is displayed but not plotted"
+    </remarks>
+  </properties>
+*/
+/* This variable was bool (with initial value "false") in previous version */
+DICR24VAR_H( OdInt16,               XCLIPFRAME,          (2),                 (2),                          (),                         ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MESHTYPE Controls the type of mesh that is created by REVSURF, TABSURF, RULESURF and EDGESURF"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Creates legacy polygon or polyface mesh when you use REVSURF, TABSURF, RULESURF, or EDGESURF"
+      "\n    1       Creates full-featured mesh objects when you use REVSURF, TABSURF, RULESURF, or EDGESURF (recommended)"
+    </remarks>
+  </properties>
+*/
+DICR24VAR( OdInt16,               MESHTYPE,          (1),                 (1),                          (),                         ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SKYSTATUS Determines if the sky illumination is computed at render time"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Sky off"
+      "\n    1       Sky background"
+      "\n    2       Sky background and illumination"
+    </remarks>
+  </properties>
+*/
+DICR24VAR( OdInt16,               SKYSTATUS,         (0),                 (0),                          (),                         ValidateRange(0,2))
+
+//-----------------------------------------
+// Variables added in AC 2011
+//-----------------------------------------
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HPLAYER specifies the default layer for new Hatch entities."
+    </remarks>
+  </properties>
+*/
+DICR27VAR(OdString, HPLAYER,    (OdString(OD_T("."))),    (OdString(OD_T("."))),            (), ValidateNone())
+
+DICR27VAR(OdInt16,                 MIRRHATCH,     (0),                            (0),                          (),                         ValidateRange(0,1))
+
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HPTRANSPARENCY variable sets the transparency assigned to new Hatch entities"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    ErrorValue  Use CETRANSPARENCY for Hatch
+      "\n    ByLayer     Transparency value by layer."
+      "\n    ByBlock     Transparency value by block."
+      "\n    0       No transparency."
+      "\n    1-90    Transparency value is a percentage (max. 90%)."
+    </remarks>
+  </properties>
+*/
+DICR27VAR(ODTTRANSPARENCYDEF, HPTRANSPARENCY, ((const OdCmTransparency&) OdCmTransparency(OdCmTransparency::kErrorValue)), ((const OdCmTransparency&) OdCmTransparency(OdCmTransparency::kErrorValue)), (), ValidateNone())
+
+
+//-----------------------------------------
+// Variables added in AC 2013
+//-----------------------------------------
+RO_VAR_DEF(   OdInt64,          REQUIREDVERSIONS,       (0),                 (0),                           (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CETRANSPARENCY variable sets the transparency assigned to new entities"
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    ByLayer Transparency value by layer."
+      "\n    ByBlock Transparency value by block."
+      "\n    0       No transparency."
+      "\n    1-90    Transparency value is a percentage (max. 90%)."
+    </remarks>
+  </properties>
+*/
+DICR27VAR(OdCmTransparency, CETRANSPARENCY, ((const OdCmTransparency&) OdCmTransparency()), ((const OdCmTransparency&) OdCmTransparency()), (), ValidateTransparency())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CVIEWDETAILSTYLE variable sets the current detail view style."
+      "\n"
+      "\n    @table"
+      "\n    Value      Description"
+      "\n    Imperial24 Detail view style used for imperial drawings."
+      "\n    Metric50   Detail view style used for metric drawings."
+    </remarks>
+  </properties>
+*/
+DICR27VAR(ODTVIEWDETAILSTYLEID, CVIEWDETAILSTYLE, (OdDbObjectId::kNull), (OdDbObjectId::kNull), (), ValidateViewDetailStyle())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    CVIEWSECTIONSTYLE variable sets the current section view style."
+      "\n"
+      "\n    @table"
+      "\n    Value      Description"
+      "\n    Imperial24 Section view style used for imperial drawings."
+      "\n    Metric50   Section view style used for metric drawings."
+    </remarks>
+  </properties>
+*/
+DICR27VAR(ODTVIEWSECTIONSTYLEID, CVIEWSECTIONSTYLE, (OdDbObjectId::kNull), (OdDbObjectId::kNull), (), ValidateViewSectionStyle())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    WIPEOUTFRAME controls the visibility of wipeout object frames."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Invisible"
+      "\n    1       Is displayed and plotted"
+      "\n    2       Is displayed but not plotted"
+    </remarks>
+  </properties>
+*/
+DICR27VAR( OdInt16,              WIPEOUTFRAME,          (1),                 (1),                          (),                         ValidateRange(0,2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    POINTCLOUDCLIPFRAME controls the visibility of point cloud object clipping boundary."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Invisible"
+      "\n    1       Is displayed and plotted"
+      "\n    2       Is displayed but not plotted"
+    </remarks>
+  </properties>
+*/
+DICR27VAR( OdInt16,              POINTCLOUDCLIPFRAME,   (2),                 (2),                          (),                         ValidateRange(0,2))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MLEADERSCALE controls the overall scale factor applied to multileaders."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0.0      "
+      "\n    >0       "
+    </remarks>
+  </properties>
+*/
+DICR27VAR( double,               MLEADERSCALE,          (1.0),               (1.0),                        (),                         ValidateMeaderScale())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DYNCONSTRAINTDISPLAY controls visibility of dynamic constraints."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Hide"
+      "\n    true     Display"
+    </remarks>
+  </properties>
+*/
+VAR_DEF(   ODTBOOL,                DYNCONSTRAINTDISPLAY,    (false),                        (false),                          (),                         ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VIEWUPDATEAUTO controls automatic update of drawing views."
+      "\n"
+      "\n    @table"
+      "\n    Value"
+      "\n    0       Drawing views are not updated automatically when the source model changes."
+      "\n    1       Drawing views are automatically updated when the source model changes."
+    </remarks>
+  </properties>
+*/
+DICR27VAR(OdInt16,                VIEWUPDATEAUTO,            (1),                     (1),                              (),                         ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSACURVATUREHIGH controls the value at which a surface displays as green during curvature analysis."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(ODTDIST,                VSACURVATUREHIGH,          (1.),                    (1.),                             (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSACURVATURELOW controls the value at which a surface displays as blue during curvature analysis."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(ODTDIST,                VSACURVATURELOW,           (-1.),                   (-1.),                            (),                         ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSACURVATURETYPE controls the type of curvature analysis."
+      "\n"
+      "\n    @table"
+      "\n    Value"
+      "\n    0       Gaussian curvature type."
+      "\n    1       Mean curvature type."
+      "\n    2       Maximum curvature type."
+      "\n    3       Minimum curvature type."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(OdInt16,                VSACURVATURETYPE,          (0),                     (0),                              (),                         ValidateRange(0,3))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSADRAFTANGLEHIGH controls the value at which a model displays as green during draft analysis."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    -90.0   Opposite to the construction plane."
+      "\n    0.0     Perpendicular to the construction plane."
+      "\n    90.0    Parallel to the construction plane."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(ODTDIST,                VSADRAFTANGLEHIGH,         (3.),                    (3.),                             (),                         ValidateDouble(-90.,90.))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSADRAFTANGLELOW controls the value at which a model displays as blue during draft analysis."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    -90.0   Opposite to the construction plane."
+      "\n    0.0     Perpendicular to the construction plane."
+      "\n    90.0    Parallel to the construction plane."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(ODTDIST,                VSADRAFTANGLELOW,          (-3.),                   (-3.),                            (),                         ValidateDouble(-90.,90.))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSAZEBRACOLOR1 controls the first color for zebra analysis."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(OdString,               VSAZEBRACOLOR1,            (OdString(OD_T("RGB:255,255,255"))),(OdString(OD_T("RGB:255,255,255"))),(),            ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSAZEBRACOLOR2 controls the second color for zebra analysis."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(OdString,               VSAZEBRACOLOR2,            (OdString(OD_T("RGB:0,0,0"))),(OdString(OD_T("RGB:0,0,0"))),(),                        ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSAZEBRADIRECTION controls the angle for zebra analysis."
+      "\n"
+      "\n    @table"
+      "\n    Value"
+      "\n    0       Horizontal."
+      "\n    90      Vertical."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(OdInt16,                VSAZEBRADIRECTION,         (90),                    (90),                             (),                         ValidateRange(0,90))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSAZEBRASIZE controls the width for zebra analysis."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(OdInt16,                VSAZEBRASIZE,              (45),                    (45),                             (),                         ValidateRange(-32768,32767))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VSAZEBRATYPE controls type of zebra analysis."
+      "\n"
+      "\n    @table"
+      "\n    Value"
+      "\n    0       Chrome ball type."
+      "\n    1       Cylinder type."
+    </remarks>
+  </properties>
+*/
+DICR24VAR(OdInt16,                VSAZEBRATYPE,              (1),                     (1),                              (),                         ValidateRange(0,1))
+
+
+//-----------------------------------------
+// Variables added in AC 2014
+//-----------------------------------------
+DICR27VAR(double,         GEOMARKPOSITIONSIZE,      (1.),         (1.),           (),             ValidateEqGr(0.))
+
+//-----------------------------------------
+// Variables added in AC 2015
+//-----------------------------------------
+DICR27VAR(OdInt16,        POINTCLOUDPOINTSIZE,      (2),          (2),            (),             ValidateRange(1,10))
+
+
+
+//-----------------------------------------
+// Variables added in AC 2016
+//-----------------------------------------
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DIMLAYER specifies the default layer for new dimention entities."
+    </remarks>
+  </properties>
+*/
+DICR27VAR(ODTLAYERIDDEF,           DIMLAYER,       (OdDbObjectId::kNull),          (OdDbObjectId::kNull),            (),                         ValidateLayer(true))
+
+DICR27VAR(ODTDIST,         SECTIONOFFSETINC,       (6.),          (6.),            (),    ValidateNone())
+DICR27VAR(ODTDIST,         SECTIONTHICKNESSINC,    (1.),          (1.),            (),    ValidateNone())
+DICR27VAR(OdInt16,         XREFOVERRIDE,           (0),           (0),             (),    ValidateRange(0, 1))
+
+
+//-----------------------------------------
+// Variables added in AC 2017
+//-----------------------------------------
+
+DICR27VAR(OdString, CENTERCROSSGAP, (OdString(OD_T("0.05x"))),(OdString(OD_T("0.05x"))),(), ValidateNone())
+DICR27VAR(OdString, CENTERCROSSSIZE,(OdString(OD_T("0.1x"))), (OdString(OD_T("0.1x"))), (), ValidateNone())
+DICR27VAR(double,   CENTEREXE,      (0.12),                   (3.5),(),                     ValidateNone())
+DICR27VAR(OdString, CENTERLAYER,    (OdString(OD_T("."))),    (OdString(OD_T("."))),    (), ValidateNone())
+DICR27VAR(double,   CENTERLTSCALE,  (1.0),                    (1.0),                    (), ValidatePositiveNonZero())
+DICR27VAR(OdString, CENTERLTYPE,    (OdString(OD_T("CENTER2"))),  (OdString(OD_T("CENTER2"))),    (), ValidateNone())
+DICR27VAR(OdString, CENTERLTYPEFILE,(OdString(OD_T("acad.lin"))), (OdString(OD_T("acadiso.lin"))),(), ValidateNone())
+DICR27VAR(ODTBOOL,  CENTERMARKEXE,  (true),                   (true),                   (), ValidateBOOL())
+
+
+#undef SVARS_FUNC_MODIFIER
+#define SVARS_FUNC_MODIFIER
+
+///////////////////////////////////////////////////////////////////////
+// New Database variables section
+// To not break binary compatibility for new variables
+// non-virtual functions are generated
+
+// Add new Database variables here
+
+
+
+#ifdef DOUNDEF_VAR_DEF
+#undef VAR_DEF
+#undef DOUNDEF_VAR_DEF
+#endif
+
+#ifdef DOUNDEF_RO_VAR_DEF
+#undef RO_VAR_DEF
+#undef DOUNDEF_RO_VAR_DEF
+#endif
+
+#ifdef DOUNDEF_VAR_DEF_H
+#undef VAR_DEF_H
+#undef DOUNDEF_VAR_DEF_H
+#endif
+
+#ifdef DOUNDEF_RO_VAR_DEF_H
+#undef RO_VAR_DEF_H
+#undef DOUNDEF_RO_VAR_DEF_H
+#endif
+
+#ifdef DOUNDEF_DICR15VAR
+#undef DICR15VAR
+#undef DOUNDEF_DICR15VAR
+#endif
+
+#ifdef DOUNDEF_DICR21VAR_H
+#undef DICR21VAR_H
+#undef DOUNDEF_DICR21VAR_H
+#endif
+
+#ifdef DOUNDEF_DICR21VAR
+#undef DICR21VAR
+#undef DOUNDEF_DICR21VAR
+#endif
+
+#ifdef DOUNDEF_DICR24VAR_H
+#undef DICR24VAR_H
+#undef DOUNDEF_DICR24VAR_H
+#endif
+
+#ifdef DOUNDEF_DICR24VAR
+#undef DICR24VAR
+#undef DOUNDEF_DICR24VAR
+#endif
+
+#ifdef DOUNDEF_DICR27VAR_H
+#undef DICR27VAR_H
+#undef DOUNDEF_DICR27VAR_H
+#endif
+
+#ifdef DOUNDEF_DICR27VAR
+#undef DICR27VAR
+#undef DOUNDEF_DICR27VAR
+#endif
+
+#ifdef DOUNDEF_VAR_DEF_2
+#undef VAR_DEF_2
+#undef DOUNDEF_VAR_DEF_2
+#endif
+
+#ifdef DOUNDEF_ANNO_VAR_DEF
+#undef ANNO_VAR_DEF
+#undef DOUNDEF_ANNO_VAR_DEF
+#endif
+
+#ifdef DOUNDEF_MLEADERSTYLE_VAR_DEF
+#undef MLEADERSTYLE_VAR_DEF
+#undef DOUNDEF_MLEADERSTYLE_VAR_DEF
+#endif
+
+#undef SVARS_FUNC_MODIFIER
+
+
+#ifdef REGVAR_DEF
+
+#define SVARS_FUNC_MODIFIER virtual
+
+#define ODTDB_PROXYIMAGE OdDb::ProxyImage /* {Secret} */
+
+/*** VARDOCS:
+<properties>
+<remarks>
+"\n    PLOTTRANSPARENCYOVERRIDE Controls whether object transparency is plotted."
+"\n"
+"\n    @table"
+"\n    Value   Description"
+"\n    0       Does not plot object transparency"
+"\n    1       Uses the setting specified in the Page Setup or the Plot dialog boxes"
+"\n    2       Plots object transparency"
+</remarks>
+</properties>
+*/
+REGVAR_DEF(OdUInt16,          PLOTTRANSPARENCYOVERRIDE,   (1),   (),      ValidateRange(0, 2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ATTREQ controls the requesting of attribute values during the INSERT command."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Attributes assume their defaults."
+      "\n    true    Attributes are requested."
+    </remarks>
+    <see_also>
+      "setATTDIA getATTDIA"
+    </see_also>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             ATTREQ,         (true),               (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    ATTDIA specifies if attribute values are requested via a dialog box during the INSERT command."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Attributes are requested via the command prompt."
+      "\n    true    Attributes are requested via a dialog box."
+    </remarks>
+    <notes>
+      Attributes are requested if and only if ATTREQ = true;
+    </notes>
+    <see_also>
+      "setATTREQ getATTREQ"
+    </see_also>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             ATTDIA,         (false),              (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    BLIPMODE controls the display of marker blips."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Not displayed."
+      "\n    true    Displayed."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             BLIPMODE,       (false),              (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DELOBJ controls the deletion of objects used to create solid objects and regions."
+      "\n"
+      "\n    Commands affected are REGION, EXTRUDE, and REVOLVE."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Objects are not deleted."
+      "\n    true    Objects are deleted."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             DELOBJ,         (true),               (),       ValidateBOOL())
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FILEDIA controls the display of file navigation dialog boxes."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    false   Command prompt input."
+      "\n    true    Dialog boxes displayed."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             FILEDIA,        (true),               (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    COORDS controls the display of coordinate information in the status bar."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Absolute coordinates updated when points are picked."
+      "\n    1       Absolute coordinates updated continuously."
+      "\n    2       Absolute coordinates updated continuously, with polar coordinates displayed when appropriate."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             COORDS,         (1),                  (),       ValidateRange(0,3))
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DRAGMODE controls the display of dragged objects. This includes both objects being moved from"
+      "\n    place to place, as well as objects being created; e.g., Circles."
+      "\n"
+      "\n    @table"
+      "\n    Value   Mode    Description"
+      "\n    0       Off     Off"
+      "\n    1       On      Displays dragged objects if and only if \"drag\" is entered at the command line while dragging."
+      "\n    2       Auto    Always displays dragged objects"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             DRAGMODE,       (2),                  (),       ValidateRange(0,2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    OSMODE specifies the running object snaps. OSMODE will be a combination of one or more of the following:"
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0x00     NONe"
+      "\n    0x01     ENDpoint"
+      "\n    0x02     MIDpoint"
+      "\n    0x04     CENter"
+      "\n    0x08     NODe"
+      "\n    0x10     QUAdrant"
+      "\n    0x20     INTersection"
+      "\n    0x40     INSertion"
+      "\n    0x80     PERpendicular"
+      "\n    0x100    TANgent"
+      "\n    0x200    NEArest"
+      "\n    0x400    Clears all object snaps"
+      "\n    0x800    APParent intersection"
+      "\n    0x1000   EXTension"
+      "\n    0x2000   PARallel"
+      "\n    0x4000   Disable all"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             OSMODE,         (37),                 (),       ValidateRange(0,32767))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PICKFIRST controls noun-verb object selection."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             PICKFIRST,      (1),                  (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PICKBOX specifies the object selection target height, in pixels."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             PICKBOX,        (3),                  (),       ValidateRange(0,50))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PICKADD controls subsequent selections behaviour."
+      "\n"
+      "\n    @table"
+      "\n    Value    State    Description"
+      "\n    0        Off      Remove previously selected entities, add more entities to selection if SHIFT key pressed"
+      "\n    1        On       Add new entities to previously selected, remove entities from selection if SHIFT key pressed"
+      "\n    2        On       Add new entities to previously selected, remove entities from selection if SHIFT key pressed. Keep entities selected after SELECT command"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             PICKADD,        (2),                  (),       ValidateRange(0,2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PICKSTYLE controls group and associative hatch selection."
+      "\n"
+      "\n    @table"
+      "\n    Value    Group      Associative Hatch"
+      "\n    0        Disabled   Disabled"
+      "\n    1        Enabled    Disabled"
+      "\n    2        Disabled   Enabled"
+      "\n    3        Enabled    Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             PICKSTYLE,      (1),                  (),       ValidateRange(0,3))
+
+// Range (0.1 - 1.0) lineweight setting slider
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LWDISPSCALE emulates the lineweight setting slider."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTUNITLESS4,        LWDISPSCALE,    (0.55),               (),       ValidateRange(0.1, 1.))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LWDEFAULT specifies the actual value used to display entities having \"default\" lineweight."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTDB_LINEWEIGHT,    LWDEFAULT,      (OdDb::kLnWt025),     (),       ValidateLineWeight())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FONTALT specifies the filename of the font file to be used when the font specified"
+      " by a text style cannot be found."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdString,            FONTALT,        (OD_T("simplex.shx")),      (),       ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLINETYPE controls polyline creation and conversion from OdDb2dPolyline to OdDbPolyline when a database file is opened."
+      "\n"
+      "\n    @table"
+      "\n    Value    Conversions    New Polylines"
+      "\n    0        Disabled       OdDb2dPolyline"
+      "\n    1        Disabled       OdDbPolyline"
+      "\n    2        Enabled        OdDbPolyline"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             PLINETYPE,      (2),                  (),       ValidateRange(0,2))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PROXYSHOW controls the display of proxy graphics."
+      "\n"
+      "\n    @table"
+      "\n    Name                      Value   Description"
+      "\n    OdDb::kProxyNotShow       0       Proxy graphics are not displayed."
+      "\n    OdDb::kProxyShow          1       Proxy graphics are displayed."
+      "\n    OdDb::kProxyBoundingBox   2       Proxy bounding boxes are displayed."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTDB_PROXYIMAGE,    PROXYSHOW,      (OdDb::kProxyShow),   (),       ValidateRange(OdDb::kProxyNotShow, OdDb::kProxyBoundingBox))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    TEXTFILL controls the filling of TrueType fonts."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             TEXTFILL,       (true),               (),       ValidateBOOL())
+
+
+// New in Red Deer (2004)
+
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    "
+    </remarks>
+  </properties>GRIPHOVER specifies the ACI color index of unselected grips when the cursor hovers over them.
+*/
+REGVAR_DEF(OdInt16,             GRIPHOVER,      (3),                  (),       ValidateRange(1,255))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    GRIPOBJLIMIT specifies the number of selected objects beyond which grips are suppressed."
+      " for a selection set."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPOBJLIMIT,   (100),                (),       ValidateRange(0,32767))
+
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    GRIPTIPS controls the display of grip tips for custom objects."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Disabled"
+      "\n    1        Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPTIPS,       (1),                  (),       ValidateRange(0,1))
+
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    HPASSOC controls the associativity of new hatch patterns and gradient fills."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Not associative"
+      "\n    1        Associative"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             HPASSOC,        (1),                  (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOCALROOTPREFIX specifies the complete path to the local customization files."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdString,            LOCALROOTPREFIX,(OD_T("")),                 (),       ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    LOGFILEMODE controls the output of the text window to a log file."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Not written"
+      "\n    1        Written"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             LOGFILEMODE,    (0),                  (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MAXHATCHDENSITY specifies the maximum number of lines in a Hatch entity."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdUInt32,            MAXHATCHDENSITY,(1000000),            (),       ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    FIELDDISPLAY controls the display of field backgrounds in text."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        No background"
+      "\n    1        Gray background"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             FIELDDISPLAY,   (1),                  (),       ValidateRange(0,1))
+
+REGVAR_DEF(OdInt8,              AcisProxyMode,(1),              (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    UCSVIEW controls the saving of the current UCS with a named view."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Not saved"
+      "\n    1        Saved"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             UCSVIEW,        (1),                  (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    GRIPBLOCK Controls how grips are displayed on a block after you select it. If this option is selected, all grips are displayed for each object in the block. If this option is cleared, one grip is displayed at the insertion point of the block."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Assigns a grip only to the insertion point of the block"
+      "\n    true     Assigns grips to objects within the block"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPBLOCK,      (0),                  (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n   Controls the color of nonselected grips"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPCOLOR,      (160),                (),       ValidateRange(1,255))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n   Controls the color of custom grips for dynamic blocks"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPDYNCOLOR,   (140),                (),       ValidateRange(1,255))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n   Controls the color of custom grips for dynamic blocks"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPHOT,        (1),                  (),       ValidateRange(1,255))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n   Controls the use of selection set grips."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPS,          (1),                  (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n   Sets the size of the grip box in pixels."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             GRIPSIZE,       (5),                  (),       ValidateRange(1,255))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+    "\n   Controls whether the drawing is saved with visual fidelity."
+    "\n"
+    "\n    @table"
+    "\n    Value    Description"
+    "\n    0        Saved without visual fidelity"
+    "\n    1        Saved with visual fidelity"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             SAVEFIDELITY,   (1),                  (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DWFOSNAP controls whether object snapping is active for geometry in DWF underlays
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             DWFOSNAP,      (1),                  (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DGNOSNAP controls whether object snapping is active for geometry in DGN underlays
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             DGNOSNAP,      (1),                  (),       ValidateBOOL())
+
+REGVAR_DEF(OdUInt8,             OLEQUALITY,    (3),                  (),       ValidateRange(0, 3))
+
+REGVAR_DEF(OdInt8,              OLEHIDE,       (0),                  (),       ValidateRange(0, 3))
+
+//-------------------------
+// Introduced in R13
+//-------------------------
+REGVAR_DEF(OdInt16,             ISAVEPERCENT,   (50),                  (),       ValidateRange(0, 100))
+
+
+//-------------------------
+// Introduced in R14
+//-------------------------
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DEMANDLOAD controls demand loading of .tx modules"
+      "\n"
+      "\n    @table"
+      "\n    Value       Description"
+      "\n    bit 1 on    demand loading of .tx modules is enabled in case file containing custom objects is being open"
+    </remarks>
+  </properties>
+*/
+
+REGVAR_DEF(OdInt16,             DEMANDLOAD,     (3),                    (),      ValidateRange(0, 3))
+
+//-----------------------------------------
+// Variables added in AC 2008
+//-----------------------------------------
+
+REGVAR_DEF(OdInt16,            LAYLOCKFADECTL,      (50),               (),       ValidateRange(-90, 90))
+
+//-----------------------------------------
+// Variables added in AC 2009
+//-----------------------------------------
+
+REGVAR_DEF(OdInt16,            THUMBSIZE,      (3),                  (),       ValidateRange(0,8))
+
+REGVAR_DEF(OdInt16,         PUBLISHHATCH,      (1),                  (),       ValidateRange(0,1))
+
+REGVAR_DEF(OdInt16,          OPENPARTIAL,      (1),                  (),       ValidateRange(0,1))
+
+REGVAR_DEF(double,          DGNIMPORTMAX,    (0.0),                  (),       ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLINECONVERTMODE specifies the fit method used when converting splines to polylines."
+      "\n"
+      "\n    @table"
+      "\n    Value    Polyline's segments type"
+      "\n    0        Polylines are created with linear segments"
+      "\n    1        Polylines are created with arc segments"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             PLINECONVERTMODE,      (0),                  (),       ValidateRange(0,1))
+
+
+
+//-----------------------------------------
+// Variables added in AC 2010
+//-----------------------------------------
+
+/*** VARDOCS:
+<properties>
+<remarks>
+"\n    PDFOSNAP controls whether object snapping is active for geometry in PDF underlays
+"\n"
+"\n    @table"
+"\n    Value    Description"
+"\n    false    Disabled"
+"\n    true     Enabled"
+</remarks>
+</properties>
+*/
+REGVAR_DEF(ODTBOOL,             PDFOSNAP,      (1),                  (),       ValidateBOOL())
+
+REGVAR_DEF(OdInt16,             XFADECTL,     (50),                  (),       ValidateRange(0,90))
+
+REGVAR_DEF(OdInt16,             XDWGFADECTL,    (50),                  (),       ValidateRange(-90, 90))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PARAMETERCOPYMODE controls copying of constraints and related parameters when entities are copied."
+      "\n"
+      "\n    @table"
+      "\n    Value   Description"
+      "\n    0       Do not copy constraints."
+      "\n    1       Replace all expressions with constants."
+      "\n    2       Use existing parameters, if parameter is missing replace it with constant."
+      "\n    3       Use existing parameters, create new parameter if it is missing."
+      "\n    4       Use existing parameters, create new parameter if it is missing or has different value."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             PARAMETERCOPYMODE,     (1),                  (),       ValidateRange(0,4))
+
+
+//-----------------------------------------
+// Variables added in AC 2011
+//-----------------------------------------
+REGVAR_DEF(OdInt16,   OBJECTISOLATIONMODE,          (0),                  (),        ValidateRange(0,1))
+
+//-----------------------------------------
+// Variables added in AC 2012
+//-----------------------------------------
+REGVAR_DEF(OdInt16,   ARRAYTYPE          ,          (0),                  (),        ValidateRange(0,2))
+
+REGVAR_DEF(OdInt16,   POINTCLOUDAUTOUPDATE,   (1),                  (),        ValidateRange(0,1))
+REGVAR_DEF(OdInt16,   POINTCLOUDDENSITY,      (15),                 (),        ValidateRange(1,100))
+REGVAR_DEF(OdInt16,   POINTCLOUDLOCK,         (0),                  (),        ValidateRange(0,1))
+REGVAR_DEF(OdInt16,   POINTCLOUDRTDENSITY,    (5),                  (),        ValidateRange(1,100))
+
+//-----------------------------------------
+// Variables added in AC 2013
+//-----------------------------------------
+REGVAR_DEF(OdInt16,   ARRAYASSOCIATIVITY,           (1),                  (),        ValidateRange(0,1))
+
+REGVAR_DEF(OdInt16,   POINTCLOUDBOUNDARY,     (1),                  (),        ValidateRange(0,1))
+REGVAR_DEF(OdUInt32,  POINTCLOUDPOINTMAX,     (1500000),            (),        ValidateNone())
+
+//-----------------------------------------
+// Variables added in AC 2014
+//-----------------------------------------
+
+REGVAR_DEF(OdInt16,   TEXTALIGNMODEMODE,     (9),                  (),        ValidateRange(0,11))
+
+
+//-----------------------------------------
+// Variables added in AC 2015
+//-----------------------------------------
+
+/*** VARDOCS:
+<properties>
+<remarks>
+"\n    LINESMOOTHING controls the lines anti-aliasing.
+"\n"
+"\n    @table"
+"\n    Value    Description"
+"\n    0        Disabled"
+"\n    1        Enabled"
+</remarks>
+</properties>
+*/
+REGVAR_DEF(OdInt16,   LINESMOOTHING,          (0),                  (),        ValidateRange(0,1))
+
+
+REGVAR_DEF(OdInt16,   HPLINETYPE,             (0),                  (),        ValidateRange(0,1))
+
+REGVAR_DEF(OdInt32,        POINTCLOUDPOINTMAXLEGACY,      (1500000),            (),             ValidateRange(1500000,10000000))
+REGVAR_DEF(OdInt16,        POINTCLOUDLOD,                      (10),            (),             ValidateRange(1,10))
+
+//-----------------------------------------
+// Variables added in AC 2016
+//-----------------------------------------
+
+REGVAR_DEF(OdInt16,   REVCLOUDCREATEMODE,     (1),                  (),        ValidateRange(0,2))
+REGVAR_DEF(OdInt16,   REVCLOUDGRIPS,          (1),                  (),        ValidateRange(0,1))
+
+
+//-----------------------------------------
+// Variables added in AC 2017
+//-----------------------------------------
+REGVAR_DEF(ODTBOOL,   LTGAPSELECTION,     (0),                  (),        ValidateBOOL())
+
+
+
+///////////////////////////////////////////
+// Teigha-specific system variables
+///////////////////////////////////////////
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    SAVEROUNDTRIP controls the saving of information in a *database* file"
+      " to allow round-tripping of object types not supported in the save file format."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(bool,                SAVEROUNDTRIP,  (true),               (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    R12SaveDeviation controls the deviation for saving ellipses and splines to R12."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTDIST,             R12SaveDeviation,(0.),                (),       ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    R12SaveAccuracy controls the number of segments between spline control"
+      " segments or on 90� elliptical arcs for saving ellipses and splines to R12."
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             R12SaveAccuracy,(8),                  (),       ValidateNone())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    AcisSaveAsMode controls the exploding mode of ACIS entities (3DSolids, Bodies, Regions)
+      " while saving to R12, exploding geometry."
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Save meshes"
+      "\n    1        Save edges only"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,             AcisSaveAsMode,(0),                (),       ValidateRange(0,1))
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    AcisProxyMode controls saving to proxy's graphics metafile mode of ACIS entities (3DSolids, Bodies, Regions)."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    0        Save meshes"
+      "\n    1        Save edges only"
+    </remarks>
+  </properties>
+*/
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PLINECACHE controls creation the cache of vertexes for OdDb2dPolyline when a database file is opened."
+      "\n"
+      "\n    @table"
+      "\n    Value    Cache"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(ODTBOOL,             PLINECACHE,      (false),                  (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DxfTextAdjustAlignment controls if adjustAlignment() is called"
+      " at the end of loading OdDbText from DXF file."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(bool,                DxfTextAdjustAlignment,  (false),               (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    DimBlocksRecomputing controls if Dimension Blocks are recomputed"
+      " if Dimension entity is modified."
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled - RecomputeDimBlocks module is required"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(bool,                RecomputeDimBlocksRequired,  (true),               (),       ValidateBOOL())
+
+/*** VARDOCS:
+<properties>
+<remarks>
+"\n    AllowSavingEmptyAcisObjects controls how to resolve situation if ACIS data cannot be converted to other version."
+"It may happen in case if no modeler module loaded, so conversion engine is unavailable.
+"\n"
+"\n    @table"
+"\n    Value    Description"
+"\n    false    Disabled - exception will be thrown to prevent data loses."
+"\n    true     Enabled - empty entity will be saved."
+</remarks>
+</properties>
+*/
+REGVAR_DEF(bool,                AllowSavingEmptyAcisObjects,  (false),               (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    RestoreHatchFromBlkRef controls if an attempt is made to restore "
+      " Hatch entity from round-trip XData of Block Reference to anonymous block "
+      " representing Hatch in R12 files"
+      "\n"
+      "\n    @table"
+      "\n    Value    Description"
+      "\n    false    Disabled"
+      "\n    true     Enabled"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(bool,                RestoreHatchFromBlkRef,  (true),               (),       ValidateBOOL())
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    MtMode controls if multi-threading is used (bit-coded)"
+      "\n"
+      "\n    @table"
+      "\n    Value       Description"
+      "\n    bit 1 on    multi-threaded file loading is used"
+      "\n    bit 2 on    multi-threaded regeneration is used"
+    </remarks>
+  </properties>
+*/
+REGVAR_DEF(OdInt16,              MtMode,  (1),               (),       ValidateNone())
+
+#undef ODTDB_PROXYIMAGE
+
+
+#undef SVARS_FUNC_MODIFIER
+#define SVARS_FUNC_MODIFIER
+///////////////////////////////////////////////////////////////////////
+// New AppServices variables section
+// To not break binary compatibility for new variables
+// non-virtual functions are generated
+
+// Add new REGVARs here
+
+
+// Teigha-specific
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    VerticalApplicationsMode controls behavior of vertical applications"
+      "\n"   Bit-coded
+      "\n    If bit set application creates its default objects in every drawing
+      "\n    If not application does not create its default objects
+      "\n    (enabler behavior)
+      "\n    It also affects hatch rendering: empty stroke hatch is rendered as solid fill for Architecture"
+      "\n    @table"
+      "\n    Value       Description"
+      "\n    bit 1     Teigha Architecture
+      "\n    bit 2     Teigha Civil
+      "\n    bit 4     Teigha Mechanical
+    </remarks>
+  </properties>
+*/
+
+/*** VARDOCS:
+  <properties>
+    <remarks>
+      "\n    PersistentUndoMode (experimental) enables saving editing history in a file"
+    </remarks>
+  </properties>
+*/
+
+REGVAR_DEF(OdUInt32,             VerticalApplicationsMode,     (0xFFFFFFFF),                    (),      ValidateNone())
+
+REGVAR_DEF(bool,                 PersistentUndoMode,           (false),                         (),      ValidateBOOL())
+
+#undef SVARS_FUNC_MODIFIER
+
+
+#endif //#ifdef REGVAR_DEF
+
+
+#undef ODTBOOL
+#undef ODTDIST
+#undef ODTORIENT
+#undef ODTUNITLESS4
+#undef ODTUNITLESS8
+#undef ODTDB_MEASUREMENTVALUE
+#undef ODTDB_LINEWEIGHT
+#undef ODTDB_JOINSTYLE
+#undef ODTDB_UNITSVALUE
+#undef ODTDB_PROXYIMAGE
+#undef ODTDB_MEASUREMENTVALUE
+#undef ODTTEXTSTYLEID
+#undef ODTLAYERID
+#undef ODTLAYERIDDEF
+#undef ODTLINETYPEID
+#undef ODTDIMSTYLEID
+#undef ODTUCSID
+#undef ODTMLSTYLEID
+#undef ODTDB_ENDCAPS
+#undef ODTDB_JOINSTYLE
+#undef ODTDB_PLOTSTYLENAMETYPE
+#undef ODTDB_TIMEZONE
+#undef ODTMATERIALID
+#undef ODVISTYLEID
+#undef ODTTABLESTYLEID
+#undef ODTMLEADERSTYLEID
+#undef ODTVIEWDETAILSTYLEID
+#undef ODTVIEWSECTIONSTYLEID
+#undef ODANNOSCALE
+#undef ODDBHARDPOINTERID
+#undef ODDBOBJECTID
+#undef ODTTRANSPARENCY
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarInfo.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarInfo.h
new file mode 100755
index 0000000..bb6f78e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/SysVarInfo.h
@@ -0,0 +1,83 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _ODSYSVARINFO_H_
+#define _ODSYSVARINFO_H_
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+
+class OdDbDatabase;
+class OdDbCommandContext;
+
+
+/** 
+    <group Other_Classes>
+*/
+class OdSysVarInfo : public OdRxObject
+{
+protected:
+  OdSysVarInfo()
+    : m_getFn(0)
+    , m_setFn(0)
+    , m_mapTypeFn(0)
+  {}
+public:
+  typedef OdResBufPtr (*GetFn)(const OdDbDatabase* pDb);
+  typedef void (*SetFn)(OdDbDatabase* pDb, const OdResBuf* pRbValue);
+
+  enum
+  {
+    kToAcadType = 0,
+    kToDDType   = 1
+  };
+  typedef void (*MapTypeFn)(OdDbDatabase* pDb, OdResBuf* pVal, int opt);
+
+  GetFn       m_getFn;
+  SetFn       m_setFn;
+
+  MapTypeFn   m_mapTypeFn;
+};
+
+/** 
+    <group Other_Classes>
+*/
+class OdSetVarInfo : public OdRxObject
+{
+protected:
+  OdSetVarInfo()
+    : m_formatFn(0)
+    , m_promptFn(0)
+  {}
+public:
+  typedef OdString (*FormatFn)(OdDbDatabase* pDbCmdCtx, const OdResBuf* pRbValue);
+  typedef void (*PromptFn)(OdDbCommandContext* pDbCmdCtx, const OdString& varName, OdResBuf* pVal);
+
+  FormatFn  m_formatFn;
+  PromptFn  m_promptFn;
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _ODSYSVARINFO_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDTypeLibReg.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDTypeLibReg.h
new file mode 100755
index 0000000..b5f8cc4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDTypeLibReg.h
@@ -0,0 +1,36 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _DDTYPELIBREG_INCLUDED_
+#define _DDTYPELIBREG_INCLUDED_
+
+#include <atlbase.h>
+#include <comdef.h>
+#include "OdString.h"
+
+
+long  FIRSTDLL_EXPORT ddTypeLibReg(REFGUID libGuid, LPCTSTR szTLibPathName, LPCTSTR szModuleName);
+long FIRSTDLL_EXPORT ddTypeLibUnreg(REFGUID libGuid);
+
+#endif //#ifndef _DDTYPELIBREG_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDVersion.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDVersion.h
new file mode 100755
index 0000000..c26317b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TDVersion.h
@@ -0,0 +1,158 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance").
+// All rights reserved.
+//
+// This software and its documentation and related materials are owned by
+// the Alliance. The software may only be incorporated into application
+// programs owned by members of the Alliance, subject to a signed
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable
+// trade secrets of the Alliance and its suppliers. The software is also
+// protected by copyright law and international treaty provisions. Application
+// programs incorporating this software must include the following statement
+// with their copyright notices:
+//
+//   This application incorporates Teigha(R) software pursuant to a license
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance.
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef TD_VERSION_DEFINED
+#define TD_VERSION_DEFINED
+
+#define TD_COMPANY_NAME_S   "Open Design Alliance"
+#define TD_COMPANY_NAME_W  L"Open Design Alliance"
+
+// The string below need to be defined in quotes else compiler complains in illegal characters
+#define TD_COPYRIGHT_START_S            "Copyright\xA9 "
+#define TD_COPYRIGHT_START_YEAR_S       "2002"
+#define TD_COPYRIGHT_END_S              "-2016, Open Design Alliance"
+#define TD_COPYRIGHT_START_W           L"Copyright \x00A9 "
+#define TD_COPYRIGHT_START_YEAR_W      L"2002"
+#define TD_COPYRIGHT_END_W             L"-2016, Open Design Alliance"
+#define TDNET_C_COPYRIGHT_START_YEAR_W TD_COPYRIGHT_START_YEAR_W
+#define TDNET_COPYRIGHT_START_YEAR_W   TD_COPYRIGHT_START_YEAR_W
+
+#define TD_COPYRIGHT_S       TD_COPYRIGHT_START_S TD_COPYRIGHT_START_YEAR_S TD_COPYRIGHT_END_S
+#define TD_COPYRIGHT_W       TD_COPYRIGHT_START_W TD_COPYRIGHT_START_YEAR_W TD_COPYRIGHT_END_W
+
+#define TD_PRODUCT_NAME_START_S          "Teigha\xAE"
+#define TD_PRODUCT_NAME_ADDITION_S       ""
+#define TDX_PRODUCT_NAME_ADDITION_S      "X"
+#define TD_PRODUCT_NAME_END_S            ""//" for .dwg files"
+#define TD_PRODUCT_NAME_START_W         L"Teigha\x00AE"
+#define TD_PRODUCT_NAME_ADDITION_W      L""
+#define TDX_PRODUCT_NAME_ADDITION_W     L"X"
+#define TDNET_PRODUCT_NAME_ADDITION_W   L".NET"
+#define TDNET_C_PRODUCT_NAME_ADDITION_W L".NET Classic"
+#define TD_PRODUCT_NAME_END_W           L""//L" for .dwg files"
+
+#define TD_PRODUCT_NAME_S TD_PRODUCT_NAME_START_S TD_PRODUCT_NAME_END_S
+#define TD_PRODUCT_NAME_W TD_PRODUCT_NAME_START_W TD_PRODUCT_NAME_END_W
+
+#define DEFAULT_MODULE_EXTENSION_S             "tx"
+#define DEFAULT_MODULE_EXTENSION_DOT_S        ".tx"
+#define DEFAULT_MODULE_EXTENSION_W            L"tx"
+#define DEFAULT_MODULE_EXTENSION_DOT_W       L".tx"
+#define VECTORIZATION_MODULE_EXTENSION_S       "txv"
+#define VECTORIZATION_MODULE_EXTENSION_DOT_S  ".txv"
+#define VECTORIZATION_MODULE_EXTENSION_W      L"txv"
+#define VECTORIZATION_MODULE_EXTENSION_DOT_W L".txv"
+
+
+// Full Product version is:
+//   TD_MAJOR_VERSION.TD_MINOR_VERSION.TD_MAJOR_BUILD.TD_MINOR_BUILD
+// Example: 1.11.00.00 (initial 1.11 release).
+// OpenDesign maintenance updates to 1.11 will increase the major build number,
+// for example, 1.11.01.00, 1.11.02.00, etc.  Minor build number is reserved for
+// client builds.
+
+/* When Incrementing these be sure to make the appropriate changes
+ * to the Version string and build comments.
+ */
+#define TD_MAJOR_VERSION          4
+#define TD_MINOR_VERSION          2
+#define TD_MAJOR_BUILD            0
+#define TD_MINOR_BUILD            0
+
+// Numeric representation of the TD version to be used in preprocessor definitions
+// like #if (TD_VERSION > 30500) ...
+// (we never use minor build number, and it is not included in version.
+// If you are building your custom version of Teigha, you may define an alternative TD_VERSION_
+// or TD_VERSION_FULL, to distinguish between minor builds if necessary)
+#define TD_VERSION  (TD_MAJOR_BUILD + TD_MINOR_VERSION*100 + TD_MAJOR_VERSION*10000)
+
+#define TD_SHORT_STRING_VER_S   "4.02"
+#define TD_SHORT_STRING_VER_W  L"4.02"
+
+#define TD_PRODUCT_VER_STR_S   "4.02.0.0"
+#define TD_PRODUCT_VER_STR_W  L"4.02.0.0"
+
+//Changed in VersionInfo to TD_PRODUCT_NAME_S " " TD_PRODUCT_VER_STR_S
+//That need for NET and ActiveX
+#define TD_BUILD_COMMENTS_S    "Teigha\xAE 4.02.0.0"
+#define TD_BUILD_COMMENTS_W   L"Teigha\x00AE 4.02.0.0"
+
+
+#define TD_TYPELIB_VER(MAJ,MIN) version(##MAJ##.##MIN##)
+
+#define TEIGHA_BUILD_NUMBER 23105
+#define TEIGHA_MAIN_SVN_REVISION 2960
+#define TEIGHA_CORE_SVN_REVISION 162012
+#define TEIGHA_DGN_SVN_REVISION 5106
+#define TEIGHA_ARCHITECTURE_SVN_REVISION 68476
+#define TEIGHA_CIVIL_SVN_REVISION 68403
+#define TEIGHA_NET_SVN_REVISION 1161
+#define TEIGHA_JAVA_SVN_REVISION 1151
+#define TEIGHA_MECHANICAL_SVN_REVISION 864
+#define TEIGHA_PRC_SVN_REVISION 1367
+#define TEIGHA_BIM_SVN_REVISION 3102
+#define TEIGHA_CLOUD_SVN_REVISION 2785
+
+#if defined(_TOOLKIT_IN_DLL_) && defined(_MSC_VER) // second condition for RC
+#define TD_STRINGIZE2( s )      L##s
+#define TD_STRINGIZE( s )       TD_STRINGIZE2( s )
+
+#if _MSC_VER == 1200
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_6"
+#elif _MSC_VER == 1310
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_7"
+#elif _MSC_VER == 1400
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_8"
+#elif _MSC_VER == 1500
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_9"
+#elif _MSC_VER == 1600
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_10"
+#elif _MSC_VER == 1700
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_11"
+#elif _MSC_VER == 1800
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_12"
+#elif _MSC_VER == 1900
+#define TD_DLL_VERSION_SUFFIX_STR L"_" TD_STRINGIZE(TD_SHORT_STRING_VER_S) L"_14"
+#else
+#error "Unsupported compiler for suffixed version"
+#endif
+#endif
+
+
+#if defined(_TOOLKIT_IN_DLL_) && defined(__BORLANDC__)
+#define TD_STRINGIZE2( s )      L""##s
+#define TD_STRINGIZE( s )       TD_STRINGIZE2( s )
+
+#if __BORLANDC__ >= 0x0580 && __BORLANDC__ <= 0x0589
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_b6"
+#elif __BORLANDC__ >= 0x0610 && __BORLANDC__ <= 0x0619
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_b9"
+#elif __BORLANDC__ >= 0x0620 && __BORLANDC__ <= 0x0629
+#define TD_DLL_VERSION_SUFFIX_STR L"_"##TD_STRINGIZE(TD_SHORT_STRING_VER_S)##L"_b10"
+#else
+#error "Unsupported compiler for suffixed version"
+#endif
+#endif
+
+#endif  // ODA_VERSION_DEFINED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_GL.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_GL.h
new file mode 100755
index 0000000..17eeb35
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_GL.h
@@ -0,0 +1,124 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#include "OdPlatform.h"
+
+// iOS
+#if defined(__APPLE__) && (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) || TARGET_IPHONE_SIMULATOR)
+
+#ifndef TD_OPENGL_ES
+#define TD_OPENGL_ES
+#endif
+
+#endif
+
+// Android
+#if defined(ANDROID)
+
+#ifndef TD_OPENGL_ES
+#define TD_OPENGL_ES
+#endif
+
+#endif
+
+//
+#if !defined(TD_OPENGL_ES)
+
+#if defined(__APPLE__) /////////////////////////////////// MAC
+
+#include <OpenGL/gl.h>
+#ifdef TD_USING_GLU
+#include <OpenGL/glu.h>
+#endif
+
+#ifdef TD_USING_GLUT
+#include <GLUT/glut.h>
+#endif
+
+#define TD_STD_CALL 
+
+#elif defined sgi  ///////////////////////////////// SGI
+
+#include <GL/gl.h>
+#ifdef TD_USING_GLU
+#include <GL/glu.h>
+#endif
+
+#ifdef TD_USING_GLUT
+#include <GL/glut.h>
+#endif
+
+#define TD_STD_CALL 
+
+#elif defined(__linux__) || defined(EMCC) ///////////////////////////////// Linux OR EMCC
+
+#include <GL/gl.h>
+#ifdef TD_USING_GLU
+#include <GL/glu.h>
+#endif
+
+#ifdef TD_USING_GLUT
+#include <GL/glut.h>
+#endif
+
+#define TD_STD_CALL 
+
+#else                  ////////////////////////////////// Windows
+
+#include <gl/gl.h>
+#ifdef TD_USING_GLU
+#include <gl/glu.h>
+#endif
+
+#ifdef TD_USING_GLUT
+#include <GL/glut.h>
+#endif
+
+#define TD_STD_CALL __stdcall
+
+#endif                 ////////////////////////////////// END
+
+#else // OpenGL ES
+
+#ifndef ANDROID
+// for iOS
+#include <OpenGLES/ES1/gl.h>
+#include <OpenGLES/ES1/glext.h>
+#else
+// for Android
+#include <GLES/gl.h>
+#include <GLES/glext.h>
+// debug log
+// #include "../Extensions/ExRender/Android/gl_debug_driver.h"
+#endif
+
+#ifdef TD_USING_GLU
+#error OpenGL ES platform does not support glu
+#endif
+#ifdef TD_USING_GLUT
+#error OpenGL ES platform does not support glut
+#endif
+
+#define TD_STD_CALL 
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPop.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPop.h
new file mode 100755
index 0000000..fd28068
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPop.h
@@ -0,0 +1,31 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifdef _MSC_VER
+#pragma warning (pop)
+#pragma pack(pop)
+
+#elif defined(TD_CLIENT_PACKING_VALUE)
+#pragma pack TD_CLIENT_PACKING_VALUE   
+// Reset packing to client-specified value
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPush.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPush.h
new file mode 100755
index 0000000..1554a49
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TD_PackPush.h
@@ -0,0 +1,32 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifdef _MSC_VER
+#pragma warning (push)
+#pragma pack(push, 8)
+
+#elif defined(TD_CLIENT_PACKING_VALUE)
+// TD_DEFAULT_ALIGNMENT is the platform specific default alignment value
+// defined in OdPlatform.h 
+#pragma pack TD_DEFAULT_ALIGNMENT 
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TPtr.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TPtr.h
new file mode 100755
index 0000000..041f8d4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TPtr.h
@@ -0,0 +1,157 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __TPTR_H__
+#define __TPTR_H__
+
+/** \details
+  <group Other_Classes> 
+*/
+template <typename TObj>
+class TObjRelease
+{
+  public:
+    static void addRef(TObj* pObj)  { if (pObj) pObj->addRef(); }
+    static void release(TObj* pObj) { if (pObj) pObj->release(); }
+};
+
+/** \details
+  <group Other_Classes> 
+*/
+template <typename TObj>
+class TObjDelete
+{
+  public:
+    static void addRef(TObj* pObj) {}
+    static void release(TObj* pObj) { delete pObj; }
+};
+
+/** \details
+  <group Other_Classes> 
+*/
+template <typename TObj>
+class TObjDeleteArray
+{
+  public:
+    static void addRef(TObj* pObj) {}
+    static void release(TObj* pObj) { delete []pObj; }
+};
+
+/** \details
+  <group Other_Classes> 
+*/
+//template <typename TObj>
+//class TObjFree
+//{
+//  public:
+//    static void addRef(TObj* pObj) {}
+//    static void release(TObj* pObj) { ::odrxFree(pObj); }
+//};
+
+/** \details
+  <group Other_Classes> 
+*/
+template <typename TObj, typename THelper = TObjRelease<TObj> >
+class TPtr
+{
+  protected:
+    TObj *m_obj;
+
+    TPtr &replace(TObj* pObj)
+    {
+      THelper::addRef(pObj);
+      THelper::release(m_obj);
+      m_obj = pObj;
+      return *this;
+    }
+
+  public:
+    TPtr() : m_obj (NULL) {}
+    TPtr(const TPtr& ref) : m_obj (ref.m_obj)
+    {
+      THelper::addRef(m_obj);
+    }
+    TPtr(const TObj* pObj, bool bAttach = false) : m_obj(const_cast<TObj*>(pObj))
+    {
+      if (!bAttach)
+        THelper::addRef(m_obj);
+    }
+    ~TPtr()
+    {
+      THelper::release(m_obj);
+    }
+    TPtr &operator =(TObj *pObj)
+    {
+      return replace (pObj);
+    }
+    TPtr &operator =(const TPtr& ref)
+    {
+      return replace (ref.m_obj);
+    }
+    const TObj* get() const
+    {
+      return m_obj;
+    }
+    TObj* get()
+    {
+      return m_obj;
+    }
+    TObj* operator ->()
+    {
+      ODA_ASSERT(m_obj);
+      return m_obj;
+    }
+    const TObj* operator ->() const
+    {
+      ODA_ASSERT(m_obj);
+      return m_obj;
+    }
+    operator TObj *()
+    {
+      return m_obj;
+    }
+    operator const TObj *() const
+    {
+      return m_obj;
+    }
+    TObj** getPtr()
+    {
+      THelper::release(m_obj);
+      m_obj = NULL;
+      return &m_obj; // return reference to NULL pointer
+    }
+    TObj *detach ()
+    {
+      TObj *pObj = m_obj;
+      m_obj = NULL;
+      return pObj;
+    }
+    TObj* attach(TObj* obj)
+    {
+      THelper::release(m_obj);
+      m_obj = obj;
+      return m_obj;
+    }
+};
+
+#endif // __TPTR_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tables.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tables.h
new file mode 100755
index 0000000..2d5cdaa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tables.h
@@ -0,0 +1,50 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ALLTABLESINCLUDE
+#define ALLTABLESINCLUDE
+
+#include "DbSymbolTable.h"
+#include "DbLayerTableRecord.h"
+#include "DbLayerTable.h"
+#include "DbRegAppTableRecord.h"
+#include "DbRegAppTable.h"
+#include "DbUCSTableRecord.h"
+#include "DbUCSTable.h"
+#include "DbLinetypeTableRecord.h"
+#include "DbLinetypeTable.h"
+#include "DbViewportTableRecord.h"
+#include "DbViewportTable.h"
+#include "DbViewTableRecord.h"
+#include "DbViewTable.h"
+#include "DbDimStyleTableRecord.h"
+#include "DbDimStyleTable.h"
+#include "DbTextStyleTableRecord.h"
+#include "DbTextStyleTable.h"
+#include "DbBlockTableRecord.h"
+#include "DbBlockTable.h"
+
+#endif //ALLTABLESINCLUDE
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TextDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TextDefs.h
new file mode 100755
index 0000000..4ab4de4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/TextDefs.h
@@ -0,0 +1,53 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_TEXT_DEFS__
+#define __OD_TEXT_DEFS__
+
+/** \details
+  
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum TextHorzMode
+  {
+    kTextLeft   = 0,
+    kTextCenter = 1,
+    kTextRight  = 2,
+    kTextAlign  = 3,
+    kTextMid    = 4,
+    kTextFit    = 5
+  };
+
+  enum TextVertMode
+  {
+    kTextBase    = 0,
+    kTextBottom  = 1,
+    kTextVertMid = 2,
+    kTextTop     = 3
+  };
+}
+
+#endif // __OD_TEXT_DEFS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/ErrorDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/ErrorDefs.h
new file mode 100755
index 0000000..2f71694
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/ErrorDefs.h
@@ -0,0 +1,99 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////
+// Error codes definition container
+
+//        Code                Message string
+TF_ERROR_DEF( eOk,                OD_T("No error"))
+TF_ERROR_DEF( eNotImplementedYet, OD_T("Not implemented yet"))
+TF_ERROR_DEF( eNotApplicable,     OD_T("Not applicable"))
+TF_ERROR_DEF( eInvalidInput,      OD_T("Invalid input"))
+TF_ERROR_DEF( eInvalidFiler,      OD_T("Invalid filer"))
+TF_ERROR_DEF( eAmbiguousInput,    OD_T("Ambiguous input"))
+TF_ERROR_DEF( eAmbiguousOutput,   OD_T("Ambiguous output"))
+TF_ERROR_DEF( eOutOfMemory,       OD_T("Out of memory"))
+TF_ERROR_DEF( eNoInterface,       OD_T("No interface"))
+TF_ERROR_DEF( eBufferTooSmall,    OD_T("Buffer is too small"))
+TF_ERROR_DEF( eInvalidOpenState,  OD_T("Invalid open state"))
+TF_ERROR_DEF( eUnsupportedMethod, OD_T("Unsupported method"))
+TF_ERROR_DEF( eDuplicateHandle,   OD_T("Handle already exists"))
+TF_ERROR_DEF( eNullHandle,        OD_T("Null handle"))
+TF_ERROR_DEF( eBrokenHandle,      OD_T("Broken handle"))
+TF_ERROR_DEF( eUnknownHandle,     OD_T("Unknown handle"))
+TF_ERROR_DEF( eHandleInUse,       OD_T("Handle in use"))
+TF_ERROR_DEF( eNullObjectPointer, OD_T("Null object pointer"))
+TF_ERROR_DEF( eNullObjectId,      OD_T("Null object Id"))
+TF_ERROR_DEF( eNullBlockName,     OD_T("Null Block name"))
+TF_ERROR_DEF( eContainerNotEmpty, OD_T("Container is not empty"))
+TF_ERROR_DEF( eNullEntityPointer, OD_T("Null entity pointer"))
+TF_ERROR_DEF( eIllegalEntityType, OD_T("Illegal entity type"))
+TF_ERROR_DEF( eKeyNotFound,       OD_T("Key not found"))
+TF_ERROR_DEF( eDuplicateKey,      OD_T("Duplicate key"))
+TF_ERROR_DEF( eInvalidIndex,      OD_T("Invalid index"))
+TF_ERROR_DEF( eCharacterNotFound, OD_T("Character not found"))
+TF_ERROR_DEF( eDuplicateIndex,    OD_T("Duplicate index"))
+TF_ERROR_DEF( eAlreadyInDb,       OD_T("Already in Database"))
+TF_ERROR_DEF( eOutOfDisk,         OD_T("Out of disk"))
+TF_ERROR_DEF( eDeletedEntry,      OD_T("Deleted entry"))
+TF_ERROR_DEF( eInvalidExtents,    OD_T("Invalid extents"))
+TF_ERROR_DEF( eInvalidKey,        OD_T("Invalid key"))
+TF_ERROR_DEF( eWrongObjectType,   OD_T("Wrong object type"))
+TF_ERROR_DEF( eWrongDatabase,     OD_T("Wrong Database"))
+TF_ERROR_DEF( eEndOfObject,       OD_T("End of oject"))
+TF_ERROR_DEF( eEndOfFile,         OD_T("Unexpected end of file"))
+TF_ERROR_DEF( eCantOpenFile,      OD_T("Can't open file"))
+TF_ERROR_DEF( eFileExists,        OD_T("File exists"))
+TF_ERROR_DEF( eFileCloseError,    OD_T("File close error"))
+TF_ERROR_DEF( eFileWriteError,    OD_T("File write error"))
+TF_ERROR_DEF( eFileAccessErr,     OD_T("File access error"))
+TF_ERROR_DEF( eFileSystemErr,     OD_T("File system error"))
+TF_ERROR_DEF( eFileInternalErr,   OD_T("File internal error"))
+TF_ERROR_DEF( eUnknownFileType,   OD_T("Unknown file type"))
+TF_ERROR_DEF( eFilerError,        OD_T("Filer error"))
+TF_ERROR_DEF( eFileNotFound,      OD_T("File not found"))
+TF_ERROR_DEF( eNoInputFiler,      OD_T("No input filer"))
+TF_ERROR_DEF( eWasErased,         OD_T("Object was erased"))
+TF_ERROR_DEF( ePermanentlyErased, OD_T("Object was permanently erased"))
+TF_ERROR_DEF( eAtMaxReaders,      OD_T("At max readers"))
+TF_ERROR_DEF( eIsWriteProtected,  OD_T("Is write protected"))
+TF_ERROR_DEF( eNotAnEntity,       OD_T("An object in entitiesToMove is not an entity"))
+TF_ERROR_DEF( eIteratorDone,      OD_T("Iterator done"))
+TF_ERROR_DEF( eNullIterator,      OD_T("Null iterator"))
+TF_ERROR_DEF( eOutOfRange,        OD_T("Out of range"))
+TF_ERROR_DEF( eStringTooLong,     OD_T("String too long"))
+TF_ERROR_DEF( eRecoveryFailed,    OD_T("Recovery failed"))
+TF_ERROR_DEF( eInvalidFix,        OD_T("Invalid fix"))
+TF_ERROR_DEF( eOutOfPagerMemory,  OD_T("Out of pager memory"))
+TF_ERROR_DEF( eHandleExists,      OD_T("Handle exists"))
+TF_ERROR_DEF( eNullPtr,           OD_T("Null Ptr"))
+TF_ERROR_DEF( eLoadFailed,        OD_T("Load failed"))
+TF_ERROR_DEF( eInvalidTypeInfo,   OD_T("Invalid type info"))
+TF_ERROR_DEF( eInvalidPropertyInfo,   OD_T("Invalid property info"))
+TF_ERROR_DEF( ePropertyNotSetYet, OD_T("Property not set yet"))
+TF_ERROR_DEF( eNotOpenForRead,    OD_T("Not opened for read"))
+TF_ERROR_DEF( eNotOpenForWrite,   OD_T("Not opened for write"))
+TF_ERROR_DEF( eNotThatKindOfClass, OD_T("Not that kind of class"))
+TF_ERROR_DEF( eObjectImproperlyRead, OD_T("Object improperly read"))
+#define eNotImplemented eNotImplementedYet
+#define eCannotBeErased eCannotBeErasedByCaller
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/GeVariant.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/GeVariant.h
new file mode 100755
index 0000000..9784e25
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/GeVariant.h
@@ -0,0 +1,166 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __GE_VARIANT_H__
+#define __GE_VARIANT_H__
+
+#include "Tf/TfExport.h"
+
+#include "Ge/GeCurveBoundary.h"
+#include "Ge/GeEntity2d.h"
+#include "Ge/GeEntity3d.h"
+#include "Ge/GeExtents2d.h"
+#include "Ge/GeExtents3d.h"
+#include "Ge/GeInterval.h"
+#include "Ge/GeKnotVector.h"
+#include "Ge/GeMatrix2d.h"
+#include "Ge/GeMatrix3d.h"
+#include "Ge/GePoint2d.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeQuaternion.h"
+#include "Ge/GeScale2d.h"
+#include "Ge/GeScale3d.h"
+#include "Ge/GeVector2d.h"
+#include "Ge/GeVector3d.h"
+
+/** \details
+  Library: TD_Ge
+  <group OdGe_Classes>
+*/
+class TFCORE_EXPORT OdGeVariant {
+public:
+  typedef enum {
+    kEmpty,
+    kGeCurveBoundary,
+    kGeEntity2d,
+    kGeEntity3d,
+    kGeExtents2d,
+    kGeExtents3d,
+    kGeInterval,
+    kGeKnotVector,
+    kGeMatrix2d,
+    kGeMatrix3d,
+    kGePoint2d,
+    kGePoint3d,
+    kGeQuaternion,
+    kGeScale2d,
+    kGeScale3d,
+    kGeVector2d,
+    kGeVector3d
+  } Type;
+
+private:
+  int m_type;
+  void* m_data;
+
+  virtual void setVarType(int newType, int& type, void*& data);
+public:
+  struct TypeFactory {
+    virtual void construct(void*& data) const = 0;
+    virtual void destroy(void*& data) const = 0;
+  };
+  static const TypeFactory* typeFactory(int type);
+
+  void makeEmpty();
+
+  virtual ~OdGeVariant();
+
+  /** \details
+    Returns the type of this GeVariant object.
+  */
+  int  varType() const { return m_type; }
+  /** \details
+    Returns the type of this GeVariant object.
+  */
+  Type type()    const { return Type(m_type); }
+
+  OdGeVariant();
+  OdGeVariant(const OdGeVariant&);
+  OdGeVariant(const OdGeCurveBoundary& value);
+  OdGeVariant(const OdGeEntity2d& value);
+  OdGeVariant(const OdGeEntity3d& value);
+  OdGeVariant(const OdGeExtents2d& value);
+  OdGeVariant(const OdGeExtents3d& value);
+  OdGeVariant(const OdGeInterval& value);
+  OdGeVariant(const OdGeKnotVector& value);
+  OdGeVariant(const OdGeMatrix2d& value);
+  OdGeVariant(const OdGeMatrix3d& value);
+  OdGeVariant(const OdGePoint2d& value);
+  OdGeVariant(const OdGePoint3d& value);
+  OdGeVariant(const OdGeQuaternion& value);
+  OdGeVariant(const OdGeScale2d& value);
+  OdGeVariant(const OdGeScale3d& value);
+  OdGeVariant(const OdGeVector2d& value);
+  OdGeVariant(const OdGeVector3d& value);
+  
+  OdGeVariant& operator =(const OdGeVariant&);
+  operator OdGeCurveBoundary() const;
+  operator OdGeExtents2d() const;
+  operator OdGeExtents3d() const;
+  operator OdGeInterval() const;
+  operator OdGeKnotVector() const;
+  operator OdGeMatrix2d() const;
+  operator OdGeMatrix3d() const;
+  operator OdGePoint2d() const;
+  operator OdGePoint3d() const;
+  operator OdGeQuaternion() const;
+  operator OdGeScale3d() const;
+  operator OdGeVector2d() const;
+  operator OdGeVector3d() const;
+  
+  void setGeCurveBoundary(const OdGeCurveBoundary& value);
+  void setGeEntity2d(const OdGeEntity2d& value);
+  void setGeEntity3d(const OdGeEntity3d& value);
+  void setGeExtents2d(const OdGeExtents2d& value);
+  void setGeExtents3d(const OdGeExtents3d& value);
+  void setGeInterval(const OdGeInterval& value);
+  void setGeKnotVector(const OdGeKnotVector& value);
+  void setGeMatrix2d(const OdGeMatrix2d& value);
+  void setGeMatrix3d(const OdGeMatrix3d& value);
+  void setGePoint2d(const OdGePoint2d& value);
+  void setGePoint3d(const OdGePoint3d& value);
+  void setGeQuaternion(const OdGeQuaternion& value);
+  void setGeScale2d(const OdGeScale2d& value);
+  void setGeScale3d(const OdGeScale3d& value);
+  void setGeVector2d(const OdGeVector2d& value);
+  void setGeVector3d(const OdGeVector3d& value);
+  
+  const OdGeCurveBoundary& getGeCurveBoundary() const;
+  const OdGeEntity2d& getGeEntity2d() const;
+  const OdGeEntity3d& getGeEntity3d() const;
+  const OdGeExtents2d& getGeExtents2d() const;
+  const OdGeExtents3d& getGeExtents3d() const;
+  const OdGeInterval& getGeInterval() const;
+  const OdGeKnotVector& getGeKnotVector() const;
+  const OdGeMatrix2d& getGeMatrix2d() const;
+  const OdGeMatrix3d& getGeMatrix3d() const;
+  const OdGePoint2d& getGePoint2d() const;
+  const OdGePoint3d& getGePoint3d() const;
+  const OdGeQuaternion& getGeQuaternion() const;
+  const OdGeScale2d& getGeScale2d() const;
+  const OdGeScale3d& getGeScale3d() const;
+  const OdGeVector2d& getGeVector2d() const;
+  const OdGeVector3d& getGeVector3d() const;
+};
+  
+#endif // __GE_VARIANT_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/Tf.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/Tf.h
new file mode 100755
index 0000000..f52cd03
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/Tf.h
@@ -0,0 +1,332 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _OD_TF_Included_
+#define _OD_TF_Included_
+
+#include "DbHandle.h"
+#include "DbObjectId.h"
+#include "DbDatabase.h"
+#include "Ge/GePoint2d.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeScale3d.h"
+
+#include "TD_PackPush.h"
+
+#ifdef TF_DLL_EXPORTS
+#define TFDLL_EXPORT           OD_TOOLKIT_EXPORT
+#define TFDLL_EXPORT_STATIC    OD_STATIC_EXPORT
+#else
+#define TFDLL_EXPORT           OD_TOOLKIT_IMPORT
+#define TFDLL_EXPORT_STATIC    OD_STATIC_IMPORT
+#endif
+
+struct OdTfFiler
+{
+  virtual OdRxObject* database() const = 0;
+
+  virtual void seek(OdInt64 offset, OdDb::FilerSeekType seekType) = 0;
+
+  /** Description:
+    Returns the current I/O pointer position of this Filer object.
+  */
+  virtual OdUInt64 tell() const = 0;
+
+  /** Description:
+    Returns the bool *value* of the current item of this Filer object.
+  */
+  virtual bool rdBool() = 0;
+
+  /** Description:
+    Returns the *string* *value* of the current item of this Filer object.
+    Arguments:
+  */
+  virtual OdString rdString() = 0;
+  
+  /** Description:
+    Returns the specified number of *bytes* from this Filer object.
+    Arguments:
+    buffer (O) Receives the bytes.
+    numBytes (I) Number of *bytes*.
+  */
+  virtual void rdBytes(
+    void* buffer, 
+    OdUInt32 numBytes) = 0;
+
+  /** Description:
+    Returns the Int8 *value* of the current item of this Filer object.
+  */
+  virtual OdInt8 rdInt8() = 0;
+  
+  /** Description:
+    Returns the UInt8 *value* of the current item of this Filer object.
+  */
+  virtual OdUInt8 rdUInt8() = 0;
+
+  /** Description:
+    Returns the Int16 *value* of the current item of this Filer object.
+  */
+  virtual OdInt16 rdInt16() = 0;
+
+  /** Description:
+    Returns the Int32 *value* of the current item of this Filer object.
+  */
+  virtual OdInt32 rdInt32() = 0;
+
+  /** Description:
+    Returns the Int64 *value* of the current item of this Filer object.
+  */
+  virtual OdInt64 rdInt64() = 0;
+
+  /** Description:
+    Returns the double *value* of the current item of this Filer object.
+  */
+  virtual double rdDouble() = 0;
+
+  /** Description:
+    Returns the *handle* *value* of the current item of this Filer object.
+  */
+  virtual OdDbHandle rdDbHandle() = 0;
+
+  /** Description:
+    Returns the SoftOwnershipId *value* of the current item of this Filer object.
+  */
+  virtual OdDbStub* rdSoftOwnershipId() = 0;
+
+  /** Description:
+    Returns the HardOwnershipId *value* of the current item of this Filer object.
+  */
+  virtual OdDbStub* rdHardOwnershipId() = 0;
+
+  /** Description:
+    Returns the HardPointerId *value* of the current item of this Filer object.
+  */
+  virtual OdDbStub* rdHardPointerId() = 0;
+
+  /** Description:
+    Returns the SoftPointerId *value* of the current item of this Filer object.
+  */
+  virtual OdDbStub* rdSoftPointerId() = 0;
+
+  /** Description:
+    Returns the 2D *point* *value* of the current item of this Filer object.
+  */
+  virtual OdGePoint2d rdPoint2d() = 0;
+    
+  /** Description:
+    Returns the 3D *point* *value* of the current item of this Filer object.
+  */
+  virtual OdGePoint3d rdPoint3d() = 0;
+
+  /** Description:
+    Returns the 2D *vector* *value* of the current item of this Filer object.
+  */
+  virtual OdGeVector2d rdVector2d() = 0;
+
+  /** Description:
+    Returns the 3D vector *value* of the current item of this Filer object.
+  */
+  virtual OdGeVector3d rdVector3d() = 0;
+  
+  /** Description:
+    Returns the *scale* *value* of the current item of this Filer object.
+  */
+  virtual OdGeScale3d rdScale3d() = 0;
+
+  /** Description:
+    Writes the specified bool *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrBool(
+    bool value) = 0;
+
+  /** Description:
+    Writes the specified *string* *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrString(
+    const OdString &value) = 0;
+    
+  /** Description:
+    Writes the specified number of *bytes* to this Filer object.
+    Arguments:
+    buffer (I) array of *bytes*.
+    numBytes (I) Number of *bytes*.
+  */
+  virtual void wrBytes(
+    const void* buffer, 
+    OdUInt32 numBytes) = 0;
+
+  /** Description:
+    Writes the specified Int8 *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrInt8(
+    OdInt8 value) = 0;
+    
+  /** Description:
+    Writes the specified UInt8 *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrUInt8(
+    OdUInt8 value) = 0;
+
+  /** Description:
+    Writes the specified Int16 *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrInt16(
+    OdInt16 value) = 0;
+    
+  /** Description:
+    Writes the specified Int32 *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrInt32(
+    OdInt32 value) = 0;
+
+  /** Description:
+    Writes the specified Int64 *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrInt64(
+    OdInt64 value) = 0;
+
+   
+  /** Description:
+    Writes the specified double *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrDouble(double value) = 0;
+
+  /** Description:
+    Writes the specified *handle* *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrDbHandle(
+    const OdDbHandle& value) = 0;
+
+  /** Description:
+    Writes the specified SoftOwnershipId *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrSoftOwnershipId(
+    OdDbStub* value) = 0;
+    
+  /** Description:
+    Writes the specified HardOwnershipId *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrHardOwnershipId(
+    OdDbStub* value) = 0;
+
+  /** Description:
+    Writes the specified SoftPointerId *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrSoftPointerId(
+    OdDbStub* value) = 0;
+
+  /** Description:
+    Writes the specified HardPointerId *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrHardPointerId(
+    OdDbStub* value) = 0;
+
+  /** Description:
+    Writes the specified 2D *point* *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrPoint2d(
+    const OdGePoint2d& value) = 0;
+
+  /** Description:
+    Writes the specified 3D *point* *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrPoint3d(
+    const OdGePoint3d& value) = 0;
+  
+  /** Description:
+    Writes the specified 2D *vector* *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrVector2d(
+    const OdGeVector2d& value) = 0;
+  
+  /** Description:
+    Writes the specified 3D *vector* *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrVector3d(
+    const OdGeVector3d& value) = 0;
+  
+  /** Description:
+    Writes the specified 3D *scale* *value* to this Filer object.
+    Arguments:
+    value (I) Value.
+  */  
+  virtual void wrScale3d(
+    const OdGeScale3d& value) = 0;
+
+  virtual void wrSubobject(int id, const char* name) = 0;
+  virtual const char* rdSubobject(int& id) = 0;
+  virtual void wrDateTime(OdTimeStamp) = 0;
+  virtual void rdDateTime(OdTimeStamp&) = 0;
+};
+
+
+struct TFDLL_EXPORT OdTfObjectPE : OdRxObject
+{
+  ODRX_DECLARE_MEMBERS(OdTfObjectPE);
+  virtual int schemaVersion(OdRxObject*) = 0;
+  virtual OdString schema(OdRxObject*) = 0;
+  virtual bool in(OdRxObject*, OdTfFiler*) = 0;
+  virtual void out(OdRxObject*, OdTfFiler*) = 0;
+};
+
+typedef OdSmartPtr<OdTfObjectPE> OdTfObjectPEPtr;
+
+
+#include "TD_PackPop.h"
+
+#endif // _OD_TF_Included_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfDatabase.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfDatabase.h
new file mode 100755
index 0000000..d9b4b8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfDatabase.h
@@ -0,0 +1,54 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __TF_DATABASE_H__
+#define __TF_DATABASE_H__
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "TfObject.h"
+#include "DbHandle.h"
+
+/** \details
+    Library: Od_Tf
+    <group OdTf_Classes>
+*/
+class TFCORE_EXPORT OdTfDatabase : public OdTfObject {
+  ODTF_DECLARE_MEMBERS(OdTfDatabase);
+
+  /** \details
+    Notification function called immediately before an element is closed.
+
+    \param elementId [in]  Element ID of the element that is being closed.
+
+    \remarks
+    The default implementation of this function does nothing. This function can be
+    overridden in custom classes.
+  */
+  virtual OdDbHandle getHandle(OdDbStub* elementId) const = 0;
+
+};
+
+
+#endif // __TF_DATABASE_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfExport.h
new file mode 100755
index 0000000..e05709f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfExport.h
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _TFCOREEXPORT_DEFINED
+#define _TFCOREEXPORT_DEFINED
+
+#include "OdPlatformSettings.h"
+
+#ifdef TFCORE_DLL_EXPORTS
+  #define TFCORE_EXPORT           OD_TOOLKIT_EXPORT
+  #define TFCORE_EXPORT_STATIC    OD_STATIC_EXPORT
+#else
+  #define TFCORE_EXPORT           OD_TOOLKIT_IMPORT
+  #define TFCORE_EXPORT_STATIC    OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  // _TFCOREEXPORT_DEFINED
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObject.h
new file mode 100755
index 0000000..38af8cd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObject.h
@@ -0,0 +1,369 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __TF_OBJECT_H__
+#define __TF_OBJECT_H__
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "RxIterator.h"
+#include "TfVariant.h"
+#include "TfResult.h"
+#include "TfObjectReactor.h"
+#include "DbStubPtrArray.h"
+#include "Gi/GiDrawable.h"
+
+#define ODTF_CREATE_ATTRIBUTE(Name, value) \
+  reuslt.push_back(::newOdTfAttribute(OD_T(#Name), pObject, value));
+
+#define ODTF_DEFINE_ATTRIBUTES_CONSTRUCTOR(Name, ATTRIBUTES_LIST) \
+  static OdArray<OdTfAttribute*> Name##AttributesConstructor(     \
+      OdRxObject* pObject) {                                      \
+    OdArray<OdTfAttribute*> result;                               \
+    ATTRIBUTES_LIST(ODTF_CREATE_ATTRIBUTE)                        \
+    return result;                                                \
+  }
+
+#define ODTF_CREATE_PROPERTY_NO_ATTRS(PropertyName, type, gettterFn, setterFn, \
+                                      defaultItemFn)                           \
+  result.push_back(::newOdTfProperty(                                          \
+      OD_T(#PropertyName), pClass, static_cast<OdTfVariant::Type>(type), NULL, \
+      defaultItemFn, gettterFn, setterFn));
+
+#define ODTF_DEFINE_PROPERTIES_CONSTRUCTOR(ClassName, PROPERTIES_LIST) \
+  static OdArray<OdTfProperty*> ClassName##propertiesConstructor(      \
+      OdTfClass* pClass) {                                             \
+    OdArray<OdTfProperty*> result;                                     \
+    PROPERTIES_LIST(ODTF_CREATE_PROPERTY_NO_ATTRS);                    \
+    return result;                                                     \
+  }
+
+#define ODTF_DECLARE_MEMBERS(ClassName)\
+    ODRX_DECLARE_MEMBERS_GENERIC(OdTfClass, ClassName)
+
+#define ODTF_DEFINE_RTTI_MEMBERS(ClassName, ParentClass) \
+  ODRX_DEFINE_RTTI_MEMBERS_GENERIC(OdTfClass, ClassName, ParentClass)
+
+#define ODTF_DEFINE_INIT_MEMBERS(ClassName, ParentClass, attrsConsFn,      \
+                                 propsConsFn, pseudoConsFn, szClassName)   \
+  ODRX_DEFINE_INIT_MEMBERS_GENERIC(                                        \
+      ClassName, (::newOdTfClass(szClassName, ParentClass::desc(),         \
+                                 attrsConsFn, propsConsFn, pseudoConsFn)), \
+      (::newOdTfClass(szClassName, ParentClass::desc(), attrsConsFn,       \
+                      propsConsFn, pseudoConsFn)))
+
+#define ODTF_DEFINE_MEMBERS2(ClassName, ParentClass, attrsConsFn, propsConsFn, \
+                             pseudoConsFn, szClassName)                        \
+                                                                               \
+  ODTF_DEFINE_RTTI_MEMBERS(ClassName, ParentClass)                             \
+  ODTF_DEFINE_INIT_MEMBERS(ClassName, ParentClass, attrsConsFn, propsConsFn,   \
+                           pseudoConsFn, szClassName)
+
+#define ODTF_NO_CONS_NO_ATTRS_NO_PROPS_DEFINE_MEMBERS(ClassName, ParentClass) \
+                                                                              \
+  ODTF_DEFINE_MEMBERS2(ClassName, ParentClass, NULL, NULL, NULL,              \
+                       OD_T(#ClassName))                                      \
+                                                                              \
+  ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName, EMPTY_CONSTR)
+
+#define ODTF_CONS_NO_ATTRS_PROPS_DEFINE_MEMBERS(ClassName, ParentClass,    \
+                                                PROPERTIES_LIST, DOCREATE) \
+  ODTF_DEFINE_PROPERTIES_CONSTRUCTOR(ClassName, PROPERTIES_LIST)           \
+  ODTF_DEFINE_MEMBERS2(ClassName, ParentClass, NULL,                       \
+                       ClassName##propertiesConstructor,                   \
+                       ClassName::pseudoConstructor, OD_T(#ClassName))     \
+                                                                           \
+  ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName, DOCREATE)
+
+class OdTfClass;
+class OdTfProperty;
+class OdTfAttribute;
+
+class ODRX_ABSTRACT TFCORE_EXPORT OdTfAttributesContainer : public OdRxObject {
+  ODRX_DECLARE_MEMBERS(OdTfAttributesContainer);
+public:
+  virtual OdRxObject* owner() const = 0;
+  virtual const OdTfAttribute* find(const OdString& name) const = 0;
+};
+typedef OdSmartPtr<OdTfAttributesContainer> OdTfAttributesContainerPtr;
+
+
+class ODRX_ABSTRACT TFCORE_EXPORT OdTfPropertiesContainer : public OdRxObject {
+  ODRX_DECLARE_MEMBERS(OdTfPropertiesContainer);
+public:
+  typedef OdInt32 size_type;
+
+  virtual OdTfClass* owner() const = 0;
+  virtual size_type size() const = 0;
+  virtual bool contains(const OdTfProperty* pProp) const = 0;
+  virtual const OdTfProperty* find(size_type index) const = 0;
+  virtual const OdTfProperty* find(const OdString& name) const = 0;
+  virtual const OdTfProperty* find(const OdString& name,
+                                   const OdTfVariant::Type type) const = 0;
+  virtual size_type index(const OdTfProperty* pProp) const = 0;
+  virtual bool unique(const OdString& name) const = 0;
+  virtual bool unique(const OdString& name,
+                      const OdTfVariant::Type type) const = 0;
+  virtual OdRxIteratorPtr iterator() const = 0;
+};
+typedef OdSmartPtr<OdTfPropertiesContainer> OdTfPropertiesContainerPtr;
+
+/** \details
+    Library: Od_Tf
+    <group OdTf_Classes>
+*/
+class ODRX_ABSTRACT TFCORE_EXPORT OdTfClass : public OdRxClass {
+  ODRX_DECLARE_MEMBERS(OdTfClass);
+public:
+  virtual const OdTfAttributesContainerPtr attributes() const = 0;
+  virtual const OdTfPropertiesContainerPtr properties() const = 0;
+  virtual const OdTfPropertiesContainerPtr allProperties() const = 0;
+  virtual OdTfClass* tfParent() const = 0;
+};
+typedef OdSmartPtr<OdTfClass> OdTfClassPtr;
+
+/** \details
+    Library: Od_Tf
+    <group OdTf_Classes>
+*/
+class ODRX_ABSTRACT TFCORE_EXPORT OdTfProperty : public OdRxObject {
+  ODRX_DECLARE_MEMBERS(OdTfProperty);
+public:
+  virtual OdTfClass* owner() const = 0;
+  virtual OdTfVariant::Type type() const = 0;
+  virtual OdString name() const = 0;
+  virtual OdTfAttributesContainerPtr attributes() const = 0;
+  /*
+    Returns default value, that should be used for this property instead of 
+    OdTfVariant::kEmpty.
+    For single property it returns value, that should be used in place of whole
+    property.
+    For array property it returns value, to replace empty items.
+  */
+  virtual OdTfVariant defaultItemValue() const = 0;
+  virtual OdTf::ErrorStatus getValue(const OdTfObject* pObject,
+                                     OdTfVariant& value) const = 0;
+  virtual OdTf::ErrorStatus setValue(OdTfObject* pObject,
+                                     const OdTfVariant& value) const = 0;
+};
+typedef OdSmartPtr<OdTfProperty> OdTfPropertyPtr;
+
+/** \details
+    Library: Od_Tf
+    <group OdTf_Classes>
+*/
+class ODRX_ABSTRACT TFCORE_EXPORT OdTfAttribute : public OdRxObject {
+  ODRX_DECLARE_MEMBERS(OdTfAttribute);
+public:
+  virtual OdRxObject* owner() const = 0;
+  virtual OdString name() const = 0;
+  virtual OdTfVariant value() const = 0;
+};
+typedef OdSmartPtr<OdTfAttribute> OdTfAttributePtr;
+
+
+/** \details
+    Library: Od_Tf
+    <group OdTf_Classes>
+*/
+class TFCORE_EXPORT OdTfObject : public OdGiDrawable {
+  ODTF_DECLARE_MEMBERS(OdTfObject);
+
+public:
+  typedef OdTfPropertiesContainer::size_type PropertyIndexType;
+  typedef OdTfVariantArray::size_type ItemIndexType;
+
+  /** \details
+    Gets the object's owner
+  */
+  virtual const OdTfObject* getOwner() const = 0;
+
+  virtual OdTf::ErrorStatus getProperty(
+      const OdTfProperty* pPI, OdTfVariant& value,
+      const ItemIndexType arrayIndex = -1) const = 0;
+
+  virtual OdTf::ErrorStatus setProperty(
+      const OdTfProperty* pPI, const OdTfVariant& value,
+      const ItemIndexType arrayIndex = -1) = 0;
+
+  /** \details
+    Gets the specified property value.
+
+    \param name [in]  Property name.
+    \param value [out]  Property value.
+    \param arrayIndex [in]  if a property is of an array type, get the value at
+    the given index.
+  */
+  virtual OdTf::ErrorStatus getProperty(
+      const OdString& name, OdTfVariant& value,
+      const ItemIndexType arrayIndex = -1,
+      const OdTfClass* pClass = NULL) const = 0;
+  /** \details
+    Sets the specified property value.
+
+    \param name [in]  Property name.
+    \param value [in]  New property value.
+    \param arrayIndex [in]  if a property is of an array type, set the value at
+    the given index
+  */
+  virtual OdTf::ErrorStatus setProperty(const OdString& name,
+                                        const OdTfVariant& value,
+                                        const ItemIndexType arrayIndex = -1,
+                                        const OdTfClass* pClass = NULL) = 0;
+  /** \details
+    Gets the specified property value.
+
+    \param propertyIndex [in]  Index of a property in a class field array.
+    \param value [out]  Property value.
+    \param arrayIndex [in]  if a property is of an array type, get the value at
+    the given index.
+  */
+  virtual OdTf::ErrorStatus getProperty(
+      const PropertyIndexType propertyIndex, OdTfVariant& value,
+      const ItemIndexType arrayIndex = -1) const = 0;
+  /** \details
+    Sets the specified property value.
+
+    \param propertyIndex [in]  Index of a property in a class field array.
+    \param value [in]  New property value.
+    \param arrayIndex [in]  if a property is of an array type, set the value at
+    the given index
+  */
+  virtual OdTf::ErrorStatus setProperty(
+      const PropertyIndexType propertyIndex, const OdTfVariant& value,
+      const ItemIndexType arrayIndex = -1) = 0;
+
+  /** \details
+    Adds the specified transient reactor to this element's reactor list.
+
+    \param pReactor [in]  Pointer to the transient reactor object.
+
+    \remarks
+    An element must be open either OdBm::kForRead or OdBm::kForWrite in order to
+    add a transient reactor.
+  */
+  virtual void addReactor(OdTfObjectReactor* pReactor) = 0;
+
+  /** \details
+    Removes the specified transient reactor from this element's reactor list.
+
+    \param pReactor [in]  Pointer to the transient reactor object.
+
+    \remarks
+    An element must be open either OdBm::kForRead or OdBm::kForWrite in order to
+    remove a transient reactor.
+  */
+  virtual void removeReactor(OdTfObjectReactor* pReactor) = 0;
+
+  /** \details
+    Adds the specified persistent reactor to this element's reactor list.
+
+    \param elmId [in]  Element ID of the persistent reactor.
+
+    \remarks
+    An element must be open OdBm::kForWrite in order to add a persistent
+    reactor.
+
+    If the persistent reactor does not have an owner,
+    it isn't saved with the drawing.
+  */
+  virtual void addPersistentReactor(OdTfPersistentReactor*) = 0;
+
+  /** \details
+    Removes the specified persistent reactor from this element's reactor list.
+
+    \param elmId [in]  Element ID of the persistent reactor.
+
+    \remarks
+    An element must be open OdBm::kForWrite in order to remove one of its
+    persistent reactors.
+  */
+  virtual void removePersistentReactor(OdTfPersistentReactor*) = 0;
+
+  /** \details
+    This method returns true if elmId is the Element ID of a reactor attached to
+    this element. Otherwise, it returns false.
+
+    \param elmId [in]  Element ID of the persistent reactor.
+  */
+  virtual bool hasPersistentReactor(OdTfPersistentReactor*) const = 0;
+
+  /** \details
+    Returns this element's persistent reactors.
+
+    \param elmIds [out]  Receives Element IDs of this element's persistent
+    reactors.
+  */
+  virtual void getPersistentReactors(OdTfPersistentReactorArray& elmIds) = 0;
+
+  /** \details
+    Returns this element's transient reactors.
+
+    \param reactors [out]  Receives this element's transient reactors.
+  */
+  virtual void getTransientReactors(OdTfObjectReactorArray& reactors) = 0;
+};
+typedef OdSmartPtr<OdTfObject> OdTfObjectPtr;
+
+typedef OdArray<OdTfProperty*>(*OdTfPropertiesConstructorType)(OdTfClass*);
+typedef OdArray<OdTfAttribute*>(*OdTfAttributesConstructorType)(OdRxObject*);
+typedef OdTf::ErrorStatus (*OdTfPropertyGetterType)(const OdTfObject*,
+                                                    OdTfVariant&);
+typedef OdTf::ErrorStatus (*OdTfPropertySetterType)(OdTfObject*,
+                                                    const OdTfVariant&);
+typedef OdTfVariant (*OdTfVariantConstructorType)();
+
+TFCORE_EXPORT OdTfClass* newOdTfClass(
+    const OdString& name, OdRxClass* pBaseClass,
+    OdTfAttributesConstructorType pAttrsConstr,
+    OdTfPropertiesConstructorType pPropsConstr, OdPseudoConstructorType pConstr,
+    bool bRegister = true);
+
+TFCORE_EXPORT OdTfClass* createOdTfClass();
+
+TFCORE_EXPORT OdTfClass* initOdTfClass(
+    OdTfClass* pClass, const OdString& name, OdRxClass* pBaseClass,
+    const OdArray<OdTfAttribute*>& attributes,
+    const OdArray<OdTfProperty*>& properties, OdPseudoConstructorType pConstr,
+    bool bRegister = true);
+
+TFCORE_EXPORT OdTfProperty* newOdTfProperty(
+    const OdString& name, OdTfClass* pOwner, OdTfVariant::Type type,
+    OdTfAttributesConstructorType pAttrsConstr,
+    OdTfVariantConstructorType pDefaultValueConstructor,
+    OdTfPropertyGetterType pGetter, OdTfPropertySetterType pSetter);
+
+TFCORE_EXPORT OdTfProperty* createOdTfProperty();
+
+TFCORE_EXPORT OdTfProperty* initOdTfProperty(
+    OdTfProperty* pProp, const OdString& name, OdTfClass* pOwner,
+    OdTfVariant::Type type, const OdArray<OdTfAttribute*>& attributes,
+    OdTfVariantConstructorType pDefaultValueConstructor,
+    OdTfPropertyGetterType pGetter, OdTfPropertySetterType pSetter);
+
+TFCORE_EXPORT OdTfAttribute* newOdTfAttribute(const OdString& name,
+                                              OdRxObject* pOwner,
+                                              const OdTfVariant& value);
+
+#endif  // __TF_OBJECT_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObjectReactor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObjectReactor.h
new file mode 100755
index 0000000..4625963
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfObjectReactor.h
@@ -0,0 +1,306 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __TF_OBJECTREACTOR_H__
+#define __TF_OBJECTREACTOR_H__
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "TfExport.h"
+
+class OdTfObject;
+class OdDbStub;
+
+/** \details
+    This class is the base class for custom classes that receive notification
+    of OdTfObject events.
+
+    \note
+    The default implementations of all methods in this class do nothing but
+   return.
+
+    Library: Od_Tf
+
+    <group OdTf_Classes>
+*/
+class ODRX_ABSTRACT TFCORE_EXPORT OdTfObjectReactor : public OdRxObject {
+  ODRX_DECLARE_MEMBERS(OdTfObjectReactor);
+public:
+  /** \details
+    Notification function called whenever the notifying element has had its
+    clone() member function called.
+
+    \param pElement [in]  Pointer to the notifying element.
+    \param pNewElement [in]  Pointer to the element resulting from the copy.
+
+    \remarks
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void copied(const OdTfObject* pElement,
+                      const OdTfObject* pNewElement) = 0;
+
+  /** \details
+    Notification function called whenever an element has been erased or
+    unerased.
+
+    \param pElement [in]  Pointer to the element that was erased/unerased.
+    \param erasing [in]  True if and only if this element is being erased.
+
+    \remarks
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void erased(const OdTfObject* pElement, bool erasing = true) = 0;
+
+  /** \details
+    Notification function called just before an element is deleted from memory.
+
+    \param pElement [in]  Pointer to the element that is being deleted.
+
+    \remarks
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void goodbye(const OdTfObject* pElement) = 0;
+
+  /** \details
+    Notification function called whenever an element is opened for modify
+    OdDg::kForWrite.
+
+    \param pElement [in]  Pointer to the element that is being opened.
+
+    \remarks
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void openedForModify(const OdTfObject* pElement) = 0;
+
+  /** \details
+      Notification function called whenever an element is opened
+     OdDg::kForWrite, a function
+      has been called that could modify the contents of this element, and this
+     element is now being
+      closed.
+
+      \param pElement [in]  Pointer to the element that is being closed after
+     being modified.
+
+      \remarks
+      The default implementation of this function does nothing. This function
+     can be
+      overridden in custom classes.
+  */
+  virtual void modified(const OdTfObject* pElement) = 0;
+
+  /** \details
+    Notification function called whenever an element derived from
+    OdDgGraphicsElement is modified.
+
+    \param pElement [in]  Pointer to the modified element.
+
+    \remarks
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+
+    This function is called whenever the following has occurred.
+
+    1)  The calling element is opened OdDg::kForWrite.
+
+    2)  One of its member functions either
+
+        a Calls its assertWriteEnabled with recordModified == true.
+
+        b Calls its recordGraphicsModified(true).
+
+    3) The calling element is being closed.
+
+    This function is called whenever the element as been modified. It
+    therefore
+    indicates only that the graphics for it may have changed.
+  */
+  virtual void modifiedGraphics(const OdTfObject* pElement) = 0;
+
+  /** \details
+    Notification function called whenever the attribute linkages has been
+    written
+    to the notifying element.
+
+    \param pElement [in]  Pointer to the notifying element.
+
+    \remarks
+    Notification is made upon pElement->close().
+
+    The notifying element is open OdDg::kForRead.
+
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void modifiedLinkages(const OdTfObject* pElement) = 0;
+
+  /** \details
+    Notification function called whenever a method of the
+    specified subelement has called assertWriteEnabled()
+
+    \param pElement [in]  Pointer to the notifying element.
+    \param pSubElm [in]  A pointer to the subelement owned by pElement.
+
+    \remarks
+    Notification is made upon pElement->close().
+  */
+  virtual void subElementModified(const OdTfObject* pElement,
+                                  const OdTfObject* pSubElm) = 0;
+
+  /** \details
+    Notification function called whenever the notifying
+    element is in the midst an Undo operation that
+    is undoing modifications.
+
+    \param pElement [in]  Pointer to the notifying element.
+
+    \remarks
+    The notifying element is open OdDg::kForRead.
+
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void modifyUndone(const OdTfObject* pElement) = 0;
+
+  /** \details
+    Notification function called whenever the Undo process
+    processes the appending of the notifying element to the database.
+
+    \param pElement [in]  Pointer to the notifying element.
+
+    \remarks
+    The notifying element is marked as erased. It is not removed the
+    database, and can be unerased,
+    even 'before' it was created.
+
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void unappended(const OdTfObject* pElement) = 0;
+
+  /** \details
+    Notification function called whenever a Redo process
+    processes the reappending of the notifying element to the database.
+
+    \param pElement [in]  Pointer to the notifying element.
+
+    \remarks
+
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void reappended(const OdTfObject* pElement) = 0;
+
+  /** \details
+    Notification function called immediately before an element is closed.
+
+    \param elementId [in]  Element ID of the element that is being closed.
+
+    \remarks
+    The default implementation of this function does nothing. This function can
+    be
+    overridden in custom classes.
+  */
+  virtual void closed(OdDbStub* elementId) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for
+   OdTfObjectReactor object pointers.
+*/
+typedef OdSmartPtr<OdTfObjectReactor> OdTfObjectReactorPtr;
+
+/** \details
+    This template class is a specialization of the OdArray class for
+   OdTfObjectReactor object SmartPointers.
+*/
+typedef OdArray<OdTfObjectReactor*> OdTfObjectReactorArray;
+
+/** <group OdTf_Classes>
+*/
+class ODRX_ABSTRACT TFCORE_EXPORT OdTfPersistentReactor : public OdTfObjectReactor {
+  ODRX_DECLARE_MEMBERS(OdTfPersistentReactor);
+public:
+  /** \details
+    Allows a subelement of a complex element to notify its root element that it
+    has been changed.
+
+    \param pSubElm [in]  Pointer to the modified subelement.
+
+    \remarks
+    Here's how it's supposed to work:
+
+    1)  The subelement class's close() calls its triggers a "modified"
+    notification which
+        calls its xmitPropagateModify().
+    2)  The subelement class calls the its parent's recvPropagateModify() its
+    element's pointer.
+    3)  The owner's class's recvPropagateModify() sends a "modified"
+    notification to the top of its class.
+
+    The default implementation of this function does nothing. This function can
+    be overridden in custom classes.
+  */
+  virtual void recvPropagateModify(const OdTfObject* pSubElm) = 0;
+
+  /** \details
+    Allows a subelement of a complex element to notify its root element that it
+    has been changed.
+
+    \remarks
+    The default implementation of this function inform the database
+    in which the owner resides has been modified; triggering reactors
+    attached to it. This function can be overridden in custom classes.
+  */
+  virtual void xmitPropagateModify() const = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for
+   OdTfPersistentReactor object pointers.
+*/
+typedef OdSmartPtr<OdTfPersistentReactor> OdTfPersistentReactorPtr;
+
+/** \details
+    This template class is a specialization of the OdArray class for
+   OdTfPersistentReactor object SmartPointers.
+*/
+typedef OdArray<OdTfPersistentReactor*> OdTfPersistentReactorArray;
+
+#include "TD_PackPop.h"
+
+#endif // __TF_OBJECTREACTOR_H__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfResult.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfResult.h
new file mode 100755
index 0000000..b527341
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfResult.h
@@ -0,0 +1,44 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _TF_RESULT_H_INCLUDED_
+#define _TF_RESULT_H_INCLUDED_
+
+#define TF_ERROR_DEF(code, string)  code,
+
+/** \details
+    Library: Od_Tf
+    <group OdTf_Classes>
+*/
+namespace OdTf {
+  /*!DOM*/
+  enum ErrorStatus
+  {
+  #include "ErrorDefs.h"
+    eDummyLastError
+  };
+}
+#undef TF_ERROR_DEF
+
+
+#endif //_TF_RESULT_H_INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfVariant.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfVariant.h
new file mode 100755
index 0000000..8370ddf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Tf/TfVariant.h
@@ -0,0 +1,118 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __TF_VARIANT_H__
+#define __TF_VARIANT_H__
+
+#include "RxVariant.h"
+#include "Tf/TfExport.h"
+#include "Tf/GeVariant.h"
+#include "OdGUID.h"
+
+class OdDbStub;
+
+class OdTfVariant;
+typedef OdArray<OdTfVariant> OdTfVariantArray;
+typedef OdArray<OdTfVariant> OdTfVariantTuple;
+
+/** \details
+    Library: Od_Tf
+    <group OdTf_Classes>
+*/
+class TFCORE_EXPORT OdTfVariant : public OdVariant {
+public:
+  static const OdVariant::TypeFactory* typeFactory(int type);
+  typedef enum {
+    kGUID = OdVariant::kNextType,
+    kEmpty,
+    kGeVariant,
+    kDbStubPtr,
+    kRxObjectWeakPtr,
+    kTuple,
+    kNextType
+  } Type;
+
+  static Type kVariantArray(OdUInt16, OdUInt32);
+  static Type kVariantArray(OdUInt16, OdTfVariant::Type);
+  static Type kVariantArray(OdUInt32);
+  static Type kVariantArray(OdTfVariant::Type);
+
+  static Type getItemType(OdTfVariant::Type type);
+  static OdUInt16 getDimsCount(OdTfVariant::Type type);
+  static OdTfVariant empty();
+
+  bool isEmpty() const;
+  bool isVariantArray() const;
+
+  OdTfVariant();
+  OdTfVariant(const OdVariant& val);
+  OdTfVariant(const OdTfVariant& val);
+  OdTfVariant(const OdGUID& val);
+  OdTfVariant(const OdGeVariant& val);
+  OdTfVariant(const OdTfVariantTuple&);
+  OdTfVariant(OdTfVariant::Type type, const OdTfVariantArray& val);
+  OdTfVariant(OdDbStub* const);
+
+  OdTfVariant& operator =(const OdTfVariant& val);
+
+  virtual ~OdTfVariant();
+  const OdGUID& getGUID() const;
+  const OdTfVariantArray& getVariantArray() const;
+  const OdGeVariant& getGeVariant() const;
+  OdDbStub* getDbStubPtr() const;
+  OdRxObject* getRxObjectWeakPtr() const;
+  const OdTfVariantTuple& getVariantTuple() const;
+
+  OdGeVariant& asGeVariant();
+  OdTfVariantArray& asVariantArray();
+  OdTfVariantTuple& asVariantTuple();
+
+  OdTfVariant& setGUID(const OdGUID&);
+  OdTfVariant& setVariantArray(OdTfVariant::Type type, const OdTfVariantArray&);
+  OdTfVariant& setVariantTuple(const OdTfVariantTuple&);
+  OdTfVariant& setGeVariant(const OdGeVariant& value);
+  OdTfVariant& setDbStubPtr(OdDbStub* const);
+  OdTfVariant& setRxObjectWeakPtr(OdRxObject* const);
+
+protected:
+  void setVarType(int newType, int& type, void* data);
+  void makeEmpty();
+};
+
+inline bool operator==(OdTfVariant::Type lhs, OdVariant::Type rhs) {
+  return lhs == static_cast<OdTfVariant::Type>(rhs);
+}
+
+inline bool operator!=(OdTfVariant::Type lhs, OdVariant::Type rhs) {
+  return !(lhs == rhs);
+}
+
+inline bool operator==(OdVariant::Type lhs, OdTfVariant::Type rhs) {
+  return rhs == lhs;
+}
+
+inline bool operator!=(OdVariant::Type lhs, OdTfVariant::Type rhs) {
+  return rhs != lhs;
+}
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThreadsCounter.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThreadsCounter.h
new file mode 100755
index 0000000..39b4842
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThreadsCounter.h
@@ -0,0 +1,285 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _THREADS_COUNTER_H_
+#define _THREADS_COUNTER_H_
+
+#include "TD_PackPush.h"
+#include "OdMutex.h"
+
+/** \details
+    This class implements pointer to a Mutex in a Teigha context,
+    which is initialized on demand.
+
+    Library: Root
+    <group Other_Classes>
+*/
+class FIRSTDLL_EXPORT OdMutexPtr
+{
+public:
+  OdMutexPtr(): m_ptr(0){}
+  ~OdMutexPtr();
+  OdMutex* get() { if(!m_ptr) create(); return m_ptr; }
+  void clear();
+private:
+  void create();
+
+private:
+  static OdMutex s_mt;
+  OdMutex* m_ptr;
+};
+
+/** \details
+    This class implements AutoLock object for OdMutex*.
+    
+    \remarks
+    Mutex objects are used to synchronize between threads and across processes.
+    
+    MutexAutoLock objects automatically lock the specified OdMutex object
+    when constructed and unlock it when destroyed.
+    
+    Library: Root
+    <group Other_Classes>
+*/
+class OdMutexPtrAutoLock
+{
+public:
+  /** \param mutex [in]  Mutex to be Autolocked.
+  */
+  OdMutexPtrAutoLock(OdMutex* mutex) : m_mutex(mutex), m_bEnable(false)
+  {
+    lock();
+  }
+
+  ~OdMutexPtrAutoLock()
+  {
+    unlock();
+  }
+
+  void lock() { set(true); }
+  void unlock() { set(false); }
+
+protected:
+  OdMutexPtrAutoLock(): m_mutex(NULL), m_bEnable(false){}
+  void set(bool bEnable)
+  {
+    if(m_mutex && (m_bEnable != bEnable))
+    {
+      m_bEnable = bEnable;
+      if(bEnable)
+        m_mutex->lock();
+      else
+        m_mutex->unlock();
+    }
+  }
+protected:
+  OdMutex* m_mutex;
+private:
+  bool m_bEnable;
+};
+
+/** \details
+        
+    Library: Root
+
+    <group Other_Classes> 
+*/
+class ThreadsCounterReactor
+{
+  public:
+    ThreadsCounterReactor() { }
+    virtual ~ThreadsCounterReactor() { }
+
+    /** \details
+      Called from initial thread to increase execution threads count.
+      \param nThreads [in]  Count of threads in aThreads array.
+      \param aThreads [in]  Thread ID's array.
+      \param nThreadAttributes [in]  Set of attributes for running threads.
+    */
+    virtual void increase(unsigned /*nThreads*/, const unsigned* /*aThreads*/, unsigned /*nThreadAttributes*/) { }
+    /** \details
+      Called from initial thread to decrease execution threads count.
+      \param nThreads [in]  Count of threads in aThreads array.
+      \param aThreads [in]  Thread ID's array.
+      \param nThreadAttributes [in]  Set of attributes for running threads.
+    */
+    virtual void decrease(unsigned /*nThreads*/, const unsigned* /*aThreads*/, unsigned /*nThreadAttributes*/) { }
+
+    /** \details
+      Called from running thread immediately before any operations processing.
+      \param nThreadId [in]  Running Thread ID.
+      \param nThreadAttributes [in]  Set of attributes for running thread.
+    */
+    virtual void startThread(unsigned /*nThreadId*/, unsigned /*nThreadAttributes*/) { }
+    /** \details
+      Called from running thread immediately after thread operations processed.
+      \param nThreadId [in]  Running Thread ID.
+      \param nThreadAttributes [in]  Set of attributes for running thread.
+    */
+    virtual void stopThread(unsigned /*nThreadId*/, unsigned /*nThreadAttributes*/) { }
+};
+
+// Function for execute in the main thread
+typedef void (*MainThreadFunc)(void*);
+// Function for initiate execution in the main thread by external process
+typedef void (*ExecuteMainThreadFunc)(MainThreadFunc, void*);
+
+class OdRxThreadPoolService;
+
+/** \details
+        
+    Library: Root
+
+    <group Other_Classes> 
+*/
+class FIRSTDLL_EXPORT ThreadsCounter
+{
+public:
+  enum ThreadAttributes
+  {
+    kNoAttributes = 0, // Simple Mt-process which doesn't require any special initializations
+
+    kMtLoadingAttributes = (1 << 0), // Actual for both MtLoading and loading of DB's in multiple threads
+    kMtRegenAttributes   = (1 << 1), // Multithread regeneration
+    kStRegenAttributes   = (1 << 2), // Regeneration w/o cache (local heaps not required)
+    kMtDisplayAttributes = (1 << 3), // Multithread display
+    kMtModelerAttributes = (1 << 4), // Modeling operations in parallel threads
+    kAllAttributes       = 0xFFFFFFFF // Applicable for Mt functionality tests
+  };
+protected:
+  ThreadsCounter()
+    : m_count(1)
+    , m_mainThreadFunc(NULL)
+    , m_threadPool(NULL) { }
+  ~ThreadsCounter() { }
+public:
+  /** \details
+      Returns true if ThreadsCounter has registered threads and Teigha works in multithreading mode.
+  */
+  operator bool() const { return m_count > 1; }
+
+  /** \details
+      Adds reactor into threads counter reactors chain.
+      \param pReactor [in]  Function to add into reactors chain.
+      \remarks
+      Returns true if reactor added; returns false if reactor already available in chain.
+  */
+  bool addReactor(ThreadsCounterReactor *pReactor);
+  /** \details
+      Removes reactor from threads counter reactors chain.
+      \param pReactor [in]  Reactor to remove from reactors chain.
+      \remarks
+      Returns true if reactor removed; returns false if reactor isn't available in chain.
+  */
+  bool removeReactor(ThreadsCounterReactor *pReactor);
+  /** \details
+      Checks whether reactor is available in threads counter reactors chain.
+      \param pReactor [in]  Reactor to check.
+  */
+  bool hasReactor(ThreadsCounterReactor *pReactor) const;
+  /** \details
+      Returns count of reactors in threads counter reactors chain.
+  */
+  int nReactors() const;
+
+  /* Following methods are intended for internal usage by Teigha libraries and not recommended for usage outside. */
+
+  /** \details
+      Save pointer for current OdRxThreadPoolService.
+      \param pServices [in]  OdRxThreadPoolService pointer.
+  */
+  void setThreadPoolService(OdRxThreadPoolService *pService) { m_threadPool = pService; }
+  /** \details
+      Returns pointer for current OdRxThreadPoolService.
+  */
+  OdRxThreadPoolService *getThreadPoolService() { return m_threadPool; }
+
+  /** \details
+      Increase execution threads count.
+      \param nThreads [in]  Count of threads in aThreads array.
+      \param aThreads [in]  Thread ID's array.
+      \param nThreadAttributes [in]  Set of attributes for running threads.
+  */
+  void increase(unsigned nThreads, const unsigned* aThreads, unsigned nThreadAttributes = ThreadsCounter::kNoAttributes)
+  { ++m_count; increaseProc(nThreads, aThreads, nThreadAttributes); }
+  /** \details
+      Decrease execution threads count.
+      \param nThreads [in]  Count of threads in aThreads array.
+      \param aThreads [in]  Thread ID's array.
+  */
+  void decrease(unsigned nThreads, const unsigned* aThreads)
+  { --m_count; decreaseProc(nThreads, aThreads); }
+
+  /** \details
+      Called when execution thread started.
+  */
+  void startThread() { startThreadProc(); }
+  /** \details
+      Called when execution thread stopped.
+  */
+  void stopThread() { stopThreadProc(); }
+
+  /** \details
+      Returns true if increase called for specified thread. Optionally returns thread attributes.
+      \param nThreadId [in]  Requested thread ID.
+      \param pThreadAttributes [out]  If set takes requested thread attributes.
+  */
+  bool hasThread(unsigned nThreadId, unsigned *pThreadAttributes)
+  { return hasThreadProc(nThreadId, pThreadAttributes); }
+
+  /** \details
+      Setup function for execution in the external main thread.
+      \param func [in]  Function for execution in the main thread.
+  */
+  void setMainThreadFunc(ExecuteMainThreadFunc func) { m_mainThreadFunc = func; }
+  /** \details
+      Returns function for execution in the external main thread.
+  */
+  ExecuteMainThreadFunc getMainThreadFunc() { return m_mainThreadFunc; }
+
+protected:
+  void increaseProc(unsigned nThreads, const unsigned* aThreads, unsigned nThreadAttributes);
+  void decreaseProc(unsigned nThreads, const unsigned* aThreads);
+  void startThreadProc();
+  void stopThreadProc();
+  bool hasThreadProc(unsigned nThreadId, unsigned *pThreadAttributes);
+
+protected:
+  OdRefCounter           m_count;
+  ExecuteMainThreadFunc  m_mainThreadFunc;
+  OdRxThreadPoolService *m_threadPool;
+};
+
+FIRSTDLL_EXPORT ThreadsCounter&   odThreadsCounter();
+
+FIRSTDLL_EXPORT bool              odExecuteMainThreadAction(MainThreadFunc mtFunc, void *pArg, bool bExecST = true);
+
+FIRSTDLL_EXPORT unsigned          odGetCurrentThreadId();
+FIRSTDLL_EXPORT void              odThreadYield();
+
+#define TD_AUTOLOCK_P(Mutex)      OdMutexPtrAutoLock autoLock(Mutex);
+#define TD_AUTOLOCK_P_DEF(Mutex)  OdMutexPtrAutoLock autoLock(odThreadsCounter() ? Mutex.get() : NULL);
+
+#include "TD_PackPop.h"
+
+#endif //_THREADS_COUNTER_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThumbnailImage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThumbnailImage.h
new file mode 100755
index 0000000..d786e81
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ThumbnailImage.h
@@ -0,0 +1,121 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+#if !defined(_ODTHUMBNAILIMAGE_INCLUDED_)
+#define _ODTHUMBNAILIMAGE_INCLUDED_
+
+#include "TD_PackPush.h"
+
+#include "OdBinaryData.h"
+
+class OdDbRasterImage;
+typedef OdSmartPtr<OdDbRasterImage> OdDbRasterImagePtr;
+
+/** \details
+    This class is a data container class for .dwg file Preview Bitmaps.
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class DBROOT_EXPORT OdThumbnailImage
+{
+public:  
+  OdBinaryData header,
+               bmp, // DIB (device independent bitmap)
+               wmf,
+               png;
+  /** \details
+    Returns true if and only if the header data is populated
+    for this ThumbnailImage object.
+  */
+	bool hasHeader() const { return !header.empty(); }
+  /** \details
+    Returns true if and only if the bmp data is populated
+    for this ThumbnailImage object.
+  */
+	bool hasBmp() const { return !bmp.empty(); }
+  /** \details
+    Returns true if and only if the wmf data is populated
+    for this ThumbnailImage object.
+  */
+	bool hasWmf() const { return !wmf.empty(); }
+  /** \details
+    Returns true if and only if the png data is populated
+    for this ThumbnailImage object.
+  */
+	bool hasPng() const { return !png.empty(); }
+
+  /** \details
+    Returns the number of entries populated for this ThumbnailImage object.
+    
+    \remarks
+    Returns ((hasHeader()?1:0)+(hasBmp()?1:0)+(hasWmf()?1:0)+(hasPng()?1:0))
+  */
+	int getNumEntries() const
+  {
+    return (  (hasHeader() ? 1 : 0) 
+            + (hasBmp() ? 1 : 0)
+            + (hasWmf() ? 1 : 0)
+            + (hasPng() ? 1 : 0));
+  }
+
+  /** \details
+    Converts the png data to bmp data for this ThumbnailImage object.
+  */
+  bool convPngToBmp();
+
+  /** \details
+    Converts the bmp data to png data for this ThumbnailImage object.
+  */
+  bool convBmpToPng();
+
+  /** \details
+    Sets PNG, BMP or DIB data for this ThumbnailImage object.
+  */
+  void setImageData( const void* pData, OdUInt32 dataLengt);
+
+  /** \details
+    Gets PNG, BMP or DIB data for this ThumbnailImage object.
+  */
+  const void* getImageData(OdUInt32& dataLengt);
+
+  /** \details
+    Sets data from image for this ThumbnailImage object.
+  */
+  bool setRasterImage (
+    const OdGiRasterImage* image);
+
+  /** \details
+    Gets raster image from data for this ThumbnailImage object.
+  */
+  OdGiRasterImagePtr getRasterImage ();
+
+};
+
+#include "TD_PackPop.h"
+
+#endif // !defined(_ODTHUMBNAILIMAGE_INCLUDED_)
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt16Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt16Array.h
new file mode 100755
index 0000000..8f7d6d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt16Array.h
@@ -0,0 +1,37 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODUINT16ARRAY_INCLUDED
+#define ODUINT16ARRAY_INCLUDED
+
+#include "OdArray.h"
+/** \details
+    This template class is a specialization of the OdArray class for OdUInt16 objects.
+*/
+typedef OdArray<OdUInt16, OdMemoryAllocator<OdUInt16> > OdUInt16Array;
+
+#endif // ODUINT16ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt32Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt32Array.h
new file mode 100755
index 0000000..f733944
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt32Array.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODUINT32ARRAY_INCLUDED
+#define ODUINT32ARRAY_INCLUDED
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdUInt32 objects.
+*/
+typedef OdArray<OdUInt32, OdMemoryAllocator<OdUInt32> > OdUInt32Array;
+
+#endif // ODUINT32ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt64Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt64Array.h
new file mode 100755
index 0000000..d4934c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt64Array.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODUINT64ARRAY_INCLUDED
+#define ODUINT64ARRAY_INCLUDED
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdUInt64 objects.
+*/
+typedef OdArray<OdUInt64, OdMemoryAllocator<OdUInt64> > OdUInt64Array;
+
+#endif // ODUINT64ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt8Array.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt8Array.h
new file mode 100755
index 0000000..a706208
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/UInt8Array.h
@@ -0,0 +1,38 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef ODUINT8ARRAY_INCLUDED
+#define ODUINT8ARRAY_INCLUDED
+
+#include "OdArray.h"
+
+/** \details
+    This template class is a specialization of the OdArray class for OdUInt8 objects.
+*/
+typedef OdArray<OdUInt8, OdMemoryAllocator<OdUInt8> > OdUInt8Array;
+
+#endif // ODUINT8ARRAY_INCLUDED
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/VLObject.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/VLObject.h
new file mode 100755
index 0000000..cfb8ea1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/VLObject.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef OD_VLOBJECT_H
+#define OD_VLOBJECT_H
+
+#include "TD_PackPush.h"
+
+#include "DbObject.h"
+#include "OdValue.h"
+
+/** \details
+
+    Library: TD_Db
+
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdVLObject : public OdDbObject
+{
+public:
+    ODDB_DECLARE_MEMBERS(OdVLObject);
+
+    OdVLObject();
+
+    OdAnsiString getData() const;
+    void setData(const OdAnsiString& data);
+
+    OdArray<OdValue> getValues() const;
+    void setValues(const OdArray<OdValue>& values);
+
+    virtual OdResult dwgInFields (OdDbDwgFiler* pFiler);
+    virtual void dwgOutFields(OdDbDwgFiler* pFiler) const;
+    virtual OdResult dxfInFields (OdDbDxfFiler* pFiler);
+    virtual void dxfOutFields(OdDbDxfFiler* pFiler) const;
+};
+   
+typedef OdSmartPtr<OdVLObject> OdVLObjectPtr;
+
+#include "TD_PackPop.h"
+
+#endif // OD_VLOBJECT_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveDefs.h
new file mode 100755
index 0000000..0fcbb63
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveDefs.h
@@ -0,0 +1,300 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_AVEDEFS_H
+#define OD_AVEDEFS_H
+
+#include "Ve/AveExport.h"
+#include "OdString.h"
+#include "RxIterator.h"
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdAve
+{
+  enum MaterialType
+  {
+    kStandard     = 0,
+    kGranite      = 1,
+    kMarble       = 2,
+    kWood         = 3
+  };
+
+  enum MaterialAttrib
+  {
+    kAmbient        = 0x1,  
+    kDiffuse        = 0x2,  
+    kSpecular       = 0x4,  
+    kTransparency   = 0x8,  
+    kRoughness      = 0x20, 
+    kBumpMap        = 0x40, 
+    kReflectionProp = 0x100,
+    kRefraction     = 0x200
+  };
+
+  enum RenderType
+  {
+    kRndSimple      = 30,
+    kRndPhotoReal   = 50,
+    kRndRaytrace    = 60
+  };
+
+  enum RenderDestination
+  {
+    kDestViewport   = 20,
+    kDestWindow     = 30,
+    kDestFile       = 40
+  };
+
+  enum RenderQuality
+  {
+    kGouraud        = 0,
+    kPhong          = 1
+  };
+
+  enum AntiAliasing
+  {
+    kAntiAliasNone      = 1,
+    kAntiAliasMinimal   = 2,
+    kAntiAliasLow       = 3,
+    kAntiAliasMedium    = 4,
+    kAntiAliasHigh      = 5
+  };
+
+  enum TextureMapSampling
+  {
+    kTMapSampPoint    = 1,
+    kTMapSampLinear   = 2,
+    kTMapSampMipMap   = 3
+  };
+
+  enum BackgroundType
+  {
+    kBackgroundSolid      = 0,
+    kBackgroundGradient   = 1,
+    kBackgroundImage      = 2,
+    kBackgroundMerge      = 3
+  };
+
+  enum OptionType
+  {
+    kRndPref              = 0,
+    kRndFullOpt           = 1,
+    kRndQuickOpt          = 2,
+    kRndScanlOpt          = 3,
+    kRndRaytrOpt          = 4, 
+    kRndRFileOpt          = 5,
+    kRndFogOpt            = 6,
+    kRndBGOpt             = 7,  
+    kRndOptAmount         = 8
+  };
+
+  enum ProjectionMethod
+  {
+    kPlanar               = 1,
+    kBox                  = 2,
+    kCylinder             = 3,
+    kSphere               = 4
+  };
+
+  enum TileMethod
+  {
+    kTmDefault    = 0, // Tiling as set for the material.
+    kTmTile       = 1, // Tiled.
+    kTmCrop       = 2, // Cropped.
+    kTmClamp      = 3  // Clamped.
+  };
+
+  enum SetuvType
+  {
+    kSetuvPlanar      = 1,
+    kSetuvCylindrical = 2,
+    kSetuvSpherical   = 3,
+    kSetuvSolid       = 6
+  };
+}
+
+/** \details
+    This class is the base class for AVE Bitmap objects.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveBitmap
+{
+public:
+  virtual ~OdAveBitmap() {}
+
+  /** \details
+    Returns the blend factor for this Bitmap object.
+
+    \remarks
+    Returns a value in the range [0.0 .. 1.0]
+
+    A blend factor of 0.0 makes the Bitmap invisible. A blend factor of 1.0 makes it opaque.
+    In between, the Bitmap is transparent.
+  */
+  virtual double blendFactor() = 0;
+  
+  /** \details
+    Sets the source filename of this Bitmap object.
+
+    \param filename [out] Receives the filename.
+  */
+  virtual void source(OdString& filename) = 0;
+  
+  /** \details
+    Returns the scale of this Bitmap object in the U-direction.
+    
+    \remarks
+    This is the number of repetitions of this Bitmap object in the specified direction.
+  */
+  virtual double scaleU() = 0;
+  /** \details
+    Returns the scale of this Bitmap object in the V-direction.
+    
+    \remarks
+    This is the number of repetitions of this Bitmap object in the specified direction.
+  */
+  virtual double scaleV() = 0;
+  /** \details
+    Returns the offset of this Bitmap object in the U-direction.
+    \remarks
+    Returns a value in the range [-1.0 .. 1.0].
+  */
+  virtual double offsetU() = 0;
+  /** \details
+    Returns the offset of this Bitmap object in the V-direction.
+    \remarks
+    Returns a value in the range [-1.0 .. 1.0].
+  */
+  virtual double offsetV() = 0;
+  /** \details
+    Returns the tile method of this Bitmap object.
+    \remarks
+    Returns one of the following:
+    
+    <table>
+    Name          Value   Description
+    kTmDefault    0       Tiling as set for the material.
+    kTmTile       1       Tiled.
+    kTmCrop       2       Cropped.
+    kTmClamp      3       Clamped.
+    </table>
+  */
+  virtual OdAve::TileMethod tileMethod() = 0;
+  /** \details
+    Returns true if and only if this Bitmap object uses Auto Axis.
+    \remarks
+    AutoAxis automatically maps materials to surfaces 
+    whose normals are the X, Y, and Z axes.
+    
+    If AutoAxis is not used, only surfaces whose normal is the Z axis are mapped.
+  */
+  virtual bool useAutoAxis() = 0;
+  /** \details
+    Returns true if and only if this Bitmap object is automatically scaled
+    to the object to which this bitmap is attached.
+  */
+  virtual bool fitToObject() = 0;
+
+  /** \details
+    Sets the blend factor for this Bitmap object.
+    \param blendFactor [in]  Blend factor. [0.0 .. 1.0]
+    \remarks
+    A blend factor of 0.0 makes the Bitmap invisible. A blend factor of 1.0 makes it opaque.
+    In between, the Bitmap is transparent.
+  */
+  virtual void setBlendFactor(double blendFactor) = 0;
+  /** \details
+    Returns the source filename of this Bitmap object.
+
+    \remarks
+    \param filename [in] Filename.
+  */
+  virtual void setSource(const OdString& filename) = 0;
+  /** \details
+    Sets the scale of this Bitmap object in the U-direction.
+    \param scaleU [in]  Scale in U-direction.
+    \remarks
+    This is the number of repetitions of this Bitmap object in the specified direction.
+  */
+  virtual void setScaleU(double scaleU) = 0;
+  /** \details
+    Sets the scale of this Bitmap object in the V-direction.
+    \param scaleV [in]  Scale in V-direction.
+    \remarks
+    This is the number of repetitions of this Bitmap object in the specified direction.
+  */
+  virtual void setScaleV(double scaleV) = 0;
+  /** \details
+    Sets the offset of this Bitmap object in the U-direction.
+    \param offsetU [in]  Offset in U-direction. [-1.0 .. 1.0].
+  */
+  virtual void setOffsetU(double offsetU) = 0;
+  /** \details
+    Sets the offset of this Bitmap object in the V-direction.
+    \param offsetV [in]  Offset in V-direction. [-1.0 .. 1.0].
+  */
+  virtual void setOffsetV(double offsetV) = 0;
+  /** \details
+    Sets the tile method of this Bitmap object.
+    
+    \param tileMethod [in]  Tile method.
+    
+    \remarks
+    tileMethod must be one of the following:
+    
+    <table>
+    Name          Value   Description
+    kTmDefault    0       Tiling as set for the material.
+    kTmTile       1       Tiled.
+    kTmCrop       2       Cropped.
+    kTmClamp      3       Clamped.
+    </table>
+  */
+  virtual void setTileMethod(OdAve::TileMethod tileMethod) = 0;
+  /** \details
+    Controls the use of Auto Axis by this Bitmap object.
+    \param useAutoAxis [in]  Controls use of Auto Axis.
+    \remarks
+    AutoAxis automatically maps materials to surfaces 
+    whose normals are the X, Y, and Z axes.
+    
+    If AutoAxis is not used, only surfaces whose normal is the Z axis are mapped.
+  */
+  virtual void setUseAutoAxis(bool useAutoAxis) = 0;
+ 
+  /** \details
+    Controls the automatically scaling of this Bitmap object to the object to which
+    it is attached.
+    \param fitToObject [in]  Controls automatic scaling.
+  */
+  virtual void setFitToObject(bool fitToObject) = 0;
+};
+
+#endif // OD_AVEDEFS_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveExport.h
new file mode 100755
index 0000000..78322d0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveExport.h
@@ -0,0 +1,43 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _AVE_EXPORT_DEFINED
+#define _AVE_EXPORT_DEFINED
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "OdPlatformSettings.h"
+
+#ifdef AVE_EXPORTS
+  #define AVE_EXPORT        OD_TOOLKIT_EXPORT
+  #define AVE_EXPORT_STATIC OD_STATIC_EXPORT
+#else                       
+  #define AVE_EXPORT        OD_TOOLKIT_IMPORT
+  #define AVE_EXPORT_STATIC OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _AVE_EXPORT_DEFINED */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveLight.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveLight.h
new file mode 100755
index 0000000..0845f85
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveLight.h
@@ -0,0 +1,378 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_AVELIGHT_H
+#define OD_AVELIGHT_H
+
+#include "TD_PackPush.h"
+
+#include "RxObject.h"
+#include "DbObjectId.h"
+#include "IdArrays.h"
+#include "Ve/AveDefs.h"
+#include "Gs/GsLight.h"
+
+class OdGePoint3d;
+class OdGeVector3d;
+
+class OdAveLightImpl;
+class OdAveLight;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdAveLight object pointers.
+*/
+typedef OdSmartPtr<OdAveLight> OdAveLightPtr;
+
+
+/** \details
+    This class represents AVE Light properties.
+
+    \remarks
+    AVE Light properties may be attached to OdDbBlockReference objects.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveLight : public OdGsLight
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdAveLight);
+
+  /** \details
+    Creates a Light object from the specified OdDbBlockReference.
+    
+    \param blockRefId [in]  Object ID of the block reference.
+    
+    \remarks
+    The new Light object is associated with the specified block reference.
+     
+    Returns a SmartPointer to the new Light object.
+  */
+  static OdAveLightPtr getLight(const OdDbObjectId& blockRefId);
+  /** \details
+    Returns the Light name from the specified OdDbBlockReference.
+    
+    \param blockRefId [in]  Object ID of the block reference.
+  */
+  static OdString getLightName(const OdDbObjectId& blockRefId);
+
+  /** \details
+    Saves the Light properties to the OdDbBlockReference to which this Light object is associated.
+
+    \param pDb [in]  Pointer to the database.
+      
+    \remarks
+    If pDb is null, the database containing this Light object is used.
+  */
+  OdResult writeLight(OdDbDatabase* pDb = 0, const OdDbHandle& holderHandle = 0, const OdDbObjectId& ownerId = OdDbObjectId::kNull);
+
+  /** \details
+    Returns the type of this Light object.
+    \remarks
+    type() returns one of the following:
+    
+    <table>
+    Name                        Value
+    OdGsLight::kPointLight      0
+    OdGsLight::kDistantLight    1
+    OdGsLight::kSpotlight       2
+    </table>
+
+  */
+  OdGsLight::LightType type() const;
+  /** \details
+    Sets the type of this Light object.
+    \param type [in]  Light type.
+    \remarks
+    type must be one of the following:
+    
+    <table>
+    Name                        Value
+    OdGsLight::kPointLight      0
+    OdGsLight::kDistantLight    1
+    OdGsLight::kSpotlight       2
+    </table>
+  */
+  void setType(OdGsLight::LightType type);
+
+  /** \details
+    Returns the name of this Light object.
+    
+  */
+  OdString name() const;
+  
+  /** \details
+    Sets the name of this Light object.
+    \param name [in] Name.
+    \remarks
+    Names are truncated to 8 characters.
+  */
+  void setName(const OdString& name);
+
+  /** \details
+    Returns the intensity of this Light object.
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+  */
+  double intensity() const;
+  /** \details
+    Sets the intensity of this Light object.
+    \param intensity [in] Intensity. [0.0 .. 1.0]
+  */
+  void setIntensity(double intensity);
+
+  /** \details
+    Returns the color of this Light object.
+    
+    \remarks
+    color() returns a 24-bit RGB color.
+  */
+  OdUInt32 color() const;
+  
+  /** \details
+    Sets the color of this Light object.
+    
+    \param color [in]  24-bit RGB color.
+  */
+  void setColor(OdUInt32 color);
+
+  /** \details
+    Returns the WCS position of this Light object. 
+  */
+  OdGePoint3d position() const;
+  
+  /** \details
+    Returns the WCS target of this Light object. 
+  */
+  OdGePoint3d target() const;
+
+  /** \details
+    Returns the WCS direction of this Light object. 
+  */
+  OdGeVector3d direction() const;
+  
+  /** \details
+    Sets the WCS position of this Light object.
+    
+    \param position [in]  Position. 
+  */
+  void setPosition(const OdGePoint3d& position);
+ 
+  /** \details
+    Sets the WCS target of this Light object.
+    
+    \param target [in]  Target. 
+  */
+  void setTarget(const OdGePoint3d& target);
+  /** \details
+    Sets the WCS direction of this Light object.
+    
+    \param fromPoint [in]  From point.
+    \param toPoint [in]  To point. 
+  */
+  void setDirection(const OdGePoint3d& fromPoint, const OdGePoint3d& toPoint);
+
+  /** \details
+    Returns the attenuation of this Light object. 
+    
+    \remarks
+    attenuation() returns one of the following:
+    
+    <table>
+    Name                             Value      
+    OdGsLight::kAttenNone            0          
+    OdGsLight::kAttenInverseLinear   1          
+    OdGsLight::kAttenInverseSquare   2
+    </table>
+  */
+  OdGsLight::LightAttenuation attenuation() const;
+  
+  /** \details
+    Sets the attenuation of this Light object. 
+    
+    \param attenuation [in]  Attenuation.
+    \remarks
+    attenuation must be one of the following:
+    
+    <table>
+    Name                             Value      
+    OdGsLight::kAttenNone            0          
+    OdGsLight::kAttenInverseLinear   1
+    OdGsLight::kAttenInverseSquare   2
+    </table>
+  */
+  void setAttenuation(OdGsLight::LightAttenuation attenuation);
+
+  /** \details
+      Specifies the cone angles for spotlight (OdAve::kSpotLight).
+      Inner cone defines the brightest cone of light(hotspot, beam angle).
+      Outer cone defines the full cone of light(falloff, field angle).
+      These values can range from 0 to 80 degrees.
+  */
+  
+  /** \details
+    Returns the inner cone angle for this kSpotLight Light object.
+    
+    \remarks
+    The inner cone angle is one-half the beam angle, which defines the hotspot 
+    or brightest cone of light    
+
+    innerConeAngle() has a range of [0..80].
+    
+    \note
+    All angles are expressed in degrees.
+  */
+  double innerConeAngle() const;
+  /** \details
+    Returns the outer cone angle for this kSpotLight Light object.
+    
+    \remarks
+    The outer cone angle is one-half the field angle, which defines the 
+    falloff or full cone of light.
+    
+    outerConeAngle() has a range of [0..80].
+    
+    \note
+    All angles are expressed in degrees.
+  */
+  double outerConeAngle() const;
+  
+  /** \details
+    Sets the cone angles for this kSpotLight Light object.
+ 
+    \param innerConeAngle [in]  Inner cone angle. [0..80]
+    \param outerConeAngle [in]  Outer cone angle. [0..80]
+    \remarks
+    The inner cone angle is one-half the beam angle, which defines the hotspot or brightest cone of light    
+ 
+    The outer cone angle is one-half the field angle, which defines the falloff or full cone of light.
+
+    \note
+    All angles are expressed in degrees.
+  */
+  void setConeAngle(double innerConeAngle, double outerConeAngle);
+
+  /** \details
+    Returns true if and only if shadows are enabled for this Light object.
+  */
+  bool isShadowOn() const;
+  /** \details
+    Controls shadows for this Light object.
+    \param shadowOn [in]  Controls shadows.
+  */
+  void setShadowOn(bool shadowOn);
+
+  /** \details
+    Returns true if and only if volumetric/raytraced shadows are 
+    enabled for this Light object.
+  */
+  bool isShadowVolumes() const;
+  /** \details
+    Controls volumetric/raytraced shadows for this Light object.
+    \param shadowVolumes [in]  Controls shadows.
+  */
+  void setShadowVolumes(bool);
+
+  /** \details
+    Accesses the size of the shadow map for this Light object.
+    \param MapSize [in]  Shadow map size. [64..4096]
+    \remarks
+    The shadow map size is the size, in pixels, of one edge of the shadow map.
+    
+    \remarks
+    shadowMapSize() has a domain and a range of [64..4096].     
+    
+    The smaller the size, the faster but less accurate the rendering.
+  */
+  OdInt16 shadowMapSize() const;
+
+  void shadowMapSize(OdInt16 mapSize);
+
+  /** \details
+    Returns the softness (fuzziness) of shadow-mapped shadows for this Light object.
+    
+    \remarks
+    shadowSoftness() has a range of [1..10].
+    
+    Shadow softness represents the number of shadow-edge pixels 
+    blended into the image.
+  */
+  double shadowSoftness() const;
+  /** \details
+    Sets the softness (fuzziness) of shadow-mapped shadows for this Light object.
+    
+    \param shadowSoftness [in]  Shadow softness. [1..10]
+    
+    \remarks
+    Shadow softness represents the number of shadow-edge pixels 
+    blended into the image.
+    
+    Values in the range [2..4] typically give the best results.
+  */
+  void setShadowSoftness(double shadowSoftness);
+
+  /** \details
+    Returns the shadow bounding objects for this Light object.
+    \param objectIds [out]  Receives the array of Object IDs. 
+    
+  */
+  void shadowBoundingObjects(OdDbObjectIdArray& objectIds) const;
+  /** \details
+    Sets the shadow bounding objects for this Light object.
+    \param objectIds [in]  Array of Object IDs. 
+  */
+  void setShadowBoundingObjects(const OdDbObjectIdArray& objectIds);
+  /** \details
+    Adds the specified OdDbDatabase object to the shadow bounding objects for this Light object.
+    \param objectId [in]  Object ID to add. 
+  */
+  void addShadowBoundingObject(const OdDbObjectId& objectId);
+
+  /** \details
+    Returns the Object ID of the OdDbBlockReference associated with this Light object.
+  */
+  OdDbObjectId holderId() const;
+
+protected:
+  /** \details
+      Constructors
+  */
+  OdAveLight();
+  OdAveLight(OdAveLightImpl* pImpl);
+  
+  OdAveLightImpl* m_pImpl;
+};
+
+/** \details
+  Returns an Iterator object that can be 
+  used to traverse the OdAveLight objects in the specified database.
+  
+  \param pDb [in]  Pointer to the database.
+*/
+AVE_EXPORT OdRxIteratorPtr oddbGetLights(OdDbDatabase* pDb);
+
+#include "TD_PackPop.h"
+
+#endif // OD_AVELIGHT_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMapping.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMapping.h
new file mode 100755
index 0000000..729fdba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMapping.h
@@ -0,0 +1,77 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_AVEMAPPING_H
+#define OD_AVEMAPPING_H
+
+#include "TD_PackPush.h"
+
+#include "Ve/AveDefs.h"
+#include "Ge/GePoint3d.h"
+#include "Ge/GeMatrix3d.h"
+
+/** \details
+    This class represents AVE mapping settings.
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveMapping
+{
+public:
+  OdAveMapping();
+  /** \details
+    Populates this Mapping object with the mapping settings from the specified object.
+    \param objectId [in]  Object ID of the source object.
+    \remarks
+    Returns true if and only if there were mapping settings for the specified object.
+  */
+  bool getMapping(const OdDbObjectId& objectId);
+  /** \details
+    Writes the mapping settings from this Mapping object 
+    to the specified object. 
+    \param objectId [in]  Object ID of the destination object.
+  */
+  void setMapping(const OdDbObjectId& objectId);
+
+  /** \details
+    Removes the mapping settings from the specified object. 
+    \param objectId [in]  Object ID of object to be cleared.
+  */
+  static void clearMapping(const OdDbObjectId& objectId);
+
+  OdAve::SetuvType  m_MappingType;  // Description: kSetuvPlanar=1, kSetuvCylindrical=2, kSetuvSpherical=3, kSetuvSolid=6
+  OdGePoint3d       m_Pt1;          // Description: Lower-left corner of mapping plane.
+  OdGePoint3d       m_Pt2;          // Description: Lower-right corner of mapping plane.
+  OdGePoint3d       m_Pt3;          // Description: Upper left corner of mapping plane.
+  OdGePoint3d       m_Pt4;          // Description: Upper-right corner of mapping plane.
+  OdAve::TileMethod m_Tile;         // Description: kTmDefault=0, kTmTile=1, kTmClamp=2
+  OdGePoint3d       m_Scale;        // Description: Mapping scale.
+  OdGePoint3d       m_Offset;       // Description: Mapping offset.
+  OdGeMatrix3d      m_Transform;    // Description: Transformation matrix from UCS to mapping plane.
+};
+
+#include "TD_PackPop.h"
+
+#endif // OD_AVEMAPPING_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMaterial.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMaterial.h
new file mode 100755
index 0000000..2d80614
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveMaterial.h
@@ -0,0 +1,992 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_AVEMATERIAL_H
+#define OD_AVEMATERIAL_H
+
+#include "TD_PackPush.h"
+
+#include "Ve/AveDefs.h"
+#include "RxObject.h"
+#include "DbEntity.h"
+#include "IdArrays.h"
+
+class OdDbObjectId;
+class OdDbDatabase;
+class OdAveMaterialImpl;
+class OdAveMaterial;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdAveMaterial object pointers.
+*/
+typedef OdSmartPtr<OdAveMaterial> OdAveMaterialPtr;
+
+/** \details
+    This class represents AVE Material properties for shaded entities.
+
+    \remarks
+    AVE Material properties may be attached to OdDbEntity and
+    OdDbLayerTableRecord objects, and to color indicies (ACIs).
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveMaterial : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdAveMaterial);
+
+  /** \details
+    Creates a Material object from the specified OdDbBlockReference.
+    
+    \param blockRefId [in]  Object ID of the block reference.
+    
+    \remarks
+    The new Material object is attached to the specified block reference.
+     
+    Returns a SmartPointer to the new Material object.
+  */
+  static OdAveMaterialPtr getMaterial(const OdDbObjectId& blockRefId);
+
+  /** \details
+    Returns the Material name from the specified OdDbBlockReference.
+    
+    \param blockRefId [in]  Object ID of the block reference.
+  */
+  static OdString getMaterialName(const OdDbObjectId& blockRefId);
+
+  /** \details
+    Saves the Material properties to the OdDbBlockReference to which this Material object is associated.
+
+    \param pDb [in]  Pointer to the database.
+      
+    \remarks
+    If pDb is null, the database containing this Material object is used.
+  */
+  OdResult writeMaterial(OdDbDatabase* pDb = NULL, const OdDbHandle& holderHandle = 0);
+
+  /** \details
+    Attaches this Material object to the specified OdDbEntity.
+    \param entityId [in]  Object ID of the entity.
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool attachToObject(OdDbObjectId entityId);
+
+  /** \details
+    Attaches this Material object to the specified OdDbLayerTableRecord.
+    \param layerId [in]  Object ID of the layer table record.
+    \remarks
+    Returns true if and only if successful.
+  */
+  bool attachToLayer(OdDbObjectId layerId);
+
+  /** \details
+    Attaches this Material object to the specified color index (ACI).
+
+    \param colorIndex [in]  Color index. [1..255]
+    
+    \remarks
+    Returns true if and only if successful.
+
+    \remarks
+    The attachment is made in the database of the holder of this Material Object.
+    \sa
+    OdCmEntityColor
+  */
+  bool attachToACI(OdUInt16 colorIndex);
+  
+  /** \details
+    Detaches this Material object from the specified OdDbEntity.
+    \param entityId [in]  Object ID of the entity.
+  */
+  static void detachFromObject(OdDbObjectId entityId);
+
+  /** \details
+    Detaches this Material object from the specified OdDbLayerTableRecord.
+    \param layerId [in]  Object ID of the layer table record.
+  */
+  static void detachFromLayer(OdDbObjectId layerId);
+
+  /** \details
+    Detaches this Material object from the specified color index (ACI) for the specified database.
+
+    \param colorIndex [in]  Color index. [1..255]
+    \param pDb [in]  Pointer to the database for the ACI.
+      
+    \remarks
+    \sa
+    OdCmEntityColor
+  */
+  static void detachFromACI(OdDbDatabase* pDb, OdUInt16 colorIndex);
+  
+  /** \details
+    Returns the object ID of the OdDbBlockReference associated with the material to which 
+    the specified OdDbEntity, OeDbLayerTableRecord or color index (ACI)is attached.
+
+    \param sourceId [in]  Object ID of the entity or layer table record.
+    \param colorIndex [in]  Color index. [1..255]
+    \param blockRefId [out]  Object ID of OdDbBlockReference associated with the material.
+    \param pDb [in]  Pointer to the database of the ACI.
+    \remarks
+    Returns true if and only if a material is attached.
+  */
+  static bool getAttachedMaterial(const OdDbObjectId& sourceId, OdDbObjectId& blockRefId);
+  static bool getAttachedMaterial(OdDbDatabase* pDb, OdUInt16 colorIndex, OdDbObjectId& blockRefId);
+
+  /** \details
+    Returns the ACI Material Map for the specified OdDbDatabase. 
+
+    \param blockRefIds [out]  Receives an array[255] of block reference object IDs.
+    \param pDb [in]  Pointer to the database for the ACI.
+    
+    \note
+    The Object ID for ACI==n is in blockRefIds[n-1],
+    
+    \remarks
+    Returns an empty array if not successful.
+    
+    blockRefIds are the object IDs of the OdDbBlockReferences associated with the materials.
+  */
+  static void getAciMaterialMap(OdDbDatabase* pDb, OdDbObjectIdArray& blockRefIds);
+
+  /** \details
+    Returns the type of this Material object.
+    \remarks
+    type() returns one of the following:
+    
+    <table>
+    Name          Value
+    kStandard     0
+    kGranite      1
+    kMarble       2
+    kWood         3
+    </table>
+
+  */
+  virtual OdAve::MaterialType type();
+
+  /** \details
+    Returns true if and only if any of the specified Material attributes
+    are used in this Material object.
+    \param attributes [in]  Material attributes.
+    \remarks
+    attributes must be a combination of one or more of the following:
+
+    <table>
+    Name              Value
+    kAmbient          0x1  
+    kDiffuse          0x2  
+    kSpecular         0x4  
+    kTransparency     0x8  
+    kRoughness        0x20 
+    kBumpMap          0x40 
+    kReflectionProp   0x100
+    kRefraction       0x200
+    </table>
+    
+  */
+  bool isAttribUsed(OdAve::MaterialAttrib attributes);
+
+  /** \details
+    Returns the name of this Material object.
+    
+  */
+  OdString name() const;
+  /** \details
+    Returns the description of this Material object.
+  */
+  OdString description() const;
+
+  /** \details
+    Sets the name of this Material object.
+    \param name [in]  Name.
+    
+    \remarks
+    Names are truncated to 16 characters.
+  */
+  void setName(const OdString& name);
+
+  /** \details
+    Sets the description of this Material object.
+    \param description [in]  Description.
+  */
+  void setDescription(const OdString& description);
+
+  /** \details
+    Returns the ambient (shadow) factor of this Material object.
+    
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+
+  */
+  double ambientFactor() const;
+
+  /** \details
+    Returns the ambient (shadow) color of this Material object.
+    
+    \remarks
+    ambientColor() returns a 24-bit RGB color.
+
+  */
+  OdUInt32 ambientColor() const;
+  /** \details
+    Returns true if and only if the ambient (shadow) color for this Material object
+    is the current entity color, CECOLOR.
+  */
+  bool ambientColorCurrent() const;
+
+  /** \details
+    Returns true if and only if the ambient lock flag has been set for this Material object.
+  */
+  bool ambientLock() const;
+
+  /** \details
+    Sets the ambient (shadow) factor of this Material object.
+    
+    \param ambientFactor [in]  Ambient factor. [0.0 .. 1.0]
+  */
+  void setAmbientFactor(double ambientFactor);
+
+  /** \details
+    Sets the ambient (shadow) color of this Material object.
+    
+    \param ambientColor [in]  24-bit RGB color.
+  */
+  void setAmbientColor(OdUInt32 ambientColor);
+  /** \details
+    Controls the use of the current entity color, CECOLOR,
+    as the ambient (shadow) color of this Material object.
+    \param currentColor [in]  Controls the use of CECOLOR.
+  */
+  void setAmbientColorCurrent(bool currentColor);
+  /** \details
+    Controls the ambient lock flag of this Material object.
+    \param ambientLock [in]  Controls ambient lock.
+  */
+  void setAmbientLock(bool ambientLock);
+
+ 
+  /** \details
+    Returns the diffuse (main) factor of this Material object.
+    
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+
+  */
+  double diffuseFactor() const;
+
+  /** \details
+    Returns the diffuse (main) color of this Material object.
+    
+    \remarks
+    diffuseColor() returns a 24-bit RGB color.
+  */
+  OdUInt32 diffuseColor() const;
+  
+  /** \details
+    Returns true if and only if the diffuse (main) color for this Material object
+    is the current entity color, CECOLOR.
+
+  */
+  bool diffuseColorCurrent() const;
+  
+  
+  /** \details
+    Returns a reference to the diffuse (main) bitmap for this Material object.
+
+  */
+  OdAveBitmap& diffuseBitmap() const;
+
+  /** \details
+    Sets the diffuse (main) factor of this Material object.
+    
+
+    diffuseFactor () Diffuse factor. [0.0 .. 1.0]
+
+  */
+  void setDiffuseFactor(double diffuseFactor);
+  /** \details
+    Sets the diffuse (main) color of this Material object.
+    
+    \param diffuseColor [in]  24-bit RGB color.
+  */
+  void setDiffuseColor(OdUInt32 diffuseColor);
+
+  /** \details
+    Controls the use of the current entity color, CECOLOR,
+    as the diffuse (main) color of this Material object.
+    \param currentColor [in]  Controls the use of CECOLOR.
+
+  */
+  void setDiffuseColorCurrent(bool currentColor);
+
+  /** \details
+    Returns the specular (reflection) factor of this Material object.
+    
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+
+  */
+  double specularFactor() const;
+ 
+  /** \details
+    Returns the specular (reflection) color of this Material object.
+    
+    \remarks
+    specularColor() returns a 24-bit RGB color.
+
+  */
+  OdUInt32 specularColor() const;
+  /** \details
+    Returns true if and only if the specular (reflection) color for this Material object
+    is the current entity color, CECOLOR.
+
+  */
+  bool specularColorCurrent() const;
+  /** \details
+    Returns true if and only if specular reflections are to be mirrored for this Material object.
+
+  */
+  bool specularMirror() const;
+  
+  /** \details
+    Returns true if and only if the specular lock flag has been set for this Material object.
+
+  */
+  bool specularLock() const;
+  
+  /** \details
+    Returns a reference to, or a copy of, the specular (reflection) bitmap of this Material object.
+  */
+  OdAveBitmap& specularBitmap();
+  const OdAveBitmap& specularBitmap() const;
+
+
+  /** \details
+    Sets the specular (reflection) factor of this Material object.
+    
+    \param specularFactor [in]  Specular factor. [0.0 .. 1.0]
+
+  */
+  void setSpecularFactor(double specularFactor);
+  /** \details
+    Sets the specular (reflection) color of this Material object.
+    
+    \param specularColor [in]  24-bit RGB color.
+
+  */
+  void setSpecularColor(OdUInt32 specularColor);
+
+  /** \details
+    Controls the use of the current entity color, CECOLOR,
+    as the specular (reflection) color of this Material object.
+    \param currentColor [in]  Controls the use of CECOLOR.
+
+  */
+  void setSpecularColorCurrent(bool colorCurrrent);
+  /** \details
+    Controls the mirroring of specular reflections for this Material object.
+    \param mirror [in]  Controls mirroring.
+
+  */
+  void setSpecularMirror(bool mirror);
+
+  /** \details
+    Controls the specular lock flag of this Material object.
+    \param specularLock [in]  Controls specular lock
+
+    \remarks
+    The specular component is viewpoint dependent, and most apparent when the entity is highlighted.
+  */
+  void setSpecularLock(bool specularLock);
+
+  /** \details
+    Returns the roughness of this Material.
+    
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+    
+    Roughness controls the size of the material's reflective highlight.
+    The higher the level of roughness, the greater the highlight. 
+  */
+  double roughness() const;
+  /** \details
+    Sets the roughness of this Material object.
+    
+    \param roughness [in]  Roughness. [0.0 .. 1.0]
+    
+    \remarks
+    Roughness controls the size of the material's reflective highlight.
+    The higher the level of roughness, the greater the highlight. 
+  */
+  void setRoughness(double);
+
+  /** \details
+    Returns the transparency of this Material object.
+    
+    \remarks
+    <table>
+    Value      Renders
+    0.0        Opaque.
+    1.0        Totally transparent.
+    </table>
+    
+  */
+  double transparency() const;
+  /** \details
+    Returns a reference to the transparency bitmap of this Material object.
+  */
+  OdAveBitmap& transparencyBitmap() const;
+  /** \details
+    Returns the transparency of this Material object.
+    
+    \param transparency [in]  Transparency. [0.0 .. 1.0]
+    \remarks
+    Returns a value in the r1ange [0.0 .. 1.0].
+    
+    <table>
+    Value      Renders
+    0.0        Opaque.
+    1.0        Totally transparent.
+    </table>
+  */
+  void setTransparency(double transparency);
+
+  /** \details
+    Returns the refraction index of this Material object.
+    
+  */
+  double refraction() const;
+
+  /** \details
+    Sets the refraction index of this Material object.
+    
+    \param refraction [in]  Refraction.
+    
+  */
+  void setRefraction(double refraction) const;
+
+  /** \details
+    Returns a reference to, or a copy of, the bump bitmap of this Material object.
+    
+    \remarks
+    The bump bitmap may be used as an opacity map for this Material object.
+  */
+  OdAveBitmap& bumpMap();
+  const OdAveBitmap& bumpMap() const;
+
+  /** \details
+    Returns the Object ID of the OdDbBlockReference associated with this Material object.
+  */
+  OdDbObjectId holderId() const;
+
+  /** \details
+  Returns the handle of the DbMaterial to which has been converted AveMaterial in A2008.
+  */
+  OdString handleDbMaterial() const;
+
+  /** \details
+  Sets the DbMaterial handle of this material in A2008.
+  */
+  void setHandleDbMaterial(const OdString& sDesc);
+
+  ~OdAveMaterial();
+protected:
+  OdAveMaterial();
+  OdAveMaterial(OdAveMaterialImpl* pImpl);
+  
+  OdAveMaterialImpl* m_pImpl;
+  friend class OdAveMaterialImpl;
+};
+
+/** \details
+    This class represents AVE Granite Material properties for shaded entities.
+    
+    \remarks
+    AVE Granite Materials consist of a random distribution of four colors.
+    Library: TD_Ave
+
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveGraniteMaterial : public OdAveMaterial
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdAveGraniteMaterial);
+
+  /** \details
+    Defines the color index for each of the four colors
+    that are present in a Granite Material object.
+  */
+  enum GraniteColor
+  {
+    kFirst    = 0,
+    kSecond   = 1,
+    kThird    = 2,
+    kFourth   = 3
+  };
+
+  virtual OdAve::MaterialType type();
+
+  /** \details
+    Returns the color factor for the specified granite color of this Granite Material object.
+   
+    \param graniteColor [in]  Granite color.
+    
+    \remarks
+    Returns a value in the range [0.0 .. 1.0]. 
+    
+    There are four colors associated with a Granite Material object. 
+    The color factors determine the relative amounts of the four granite colors.
+    
+    graniteColor must be one of the following:
+    
+    <table>
+    Name      Value
+    kFirst    0
+    kSecond   1
+    kThird    2
+    kFourth   3
+    </table>
+    
+  */
+  double colorFactor(GraniteColor graniteColor);
+
+  /** \details
+    Returns the color for the specified granite color of this Granite Material object.
+   
+    \param graniteColor [in]  Granite color.
+    
+    \remarks
+    color() returns a 24-bit RGB color.
+    
+    graniteColor must be one of the following:
+    
+    <table>
+    Name      Value
+    kFirst    0
+    kSecond   1
+    kThird    2
+    kFourth   3
+    </table>
+  */
+  OdUInt32 color(GraniteColor graniteColor);
+
+  /** \details
+    Sets the color factor for the specified granite color of this Granite Material object.
+   
+    \param graniteColor [in]  Granite color.
+    \param colorFactor [in]  Color factor. [0.0 .. 1.0]
+    
+    \remarks
+    There are four colors associated with a Granite Material object. 
+    The color factors determine the relative amounts of the four granite colors.
+
+    graniteColor must be one of the following:
+    
+    <table>
+    Name      Value
+    kFirst    0
+    kSecond   1
+    kThird    2
+    kFourth   3
+    </table>
+    
+    There are four colors associated with a Granite Material object. 
+    To use less than four materials, make two or more of them the same,
+    or set one or more of them to 0.
+  */
+  void setColorFactor(GraniteColor graniteColor, double colorFactor);
+
+  /** \details
+    Sets the color for the specified granite color for this Granite Material object.
+   
+    \param graniteColor [in]  Granite color.
+    \param color [in]  24-bit RGB color.
+    
+    \remarks
+    graniteColor must be one of the following:
+    
+    <table>
+    Name      Value
+    kFirst    0
+    kSecond   1
+    kThird    2
+    kFourth   3
+    </table>
+    
+    There are four colors associated with a Granite Material object. 
+    To use less than four materials, make two or more of them the same,
+    or set one or more of them to 0.
+  */
+  void setColor(GraniteColor graniteColor, OdUInt32 color);
+
+  /** \details
+    Returns the sharpness of this Material object.
+
+    \remarks
+    Returns a value in the range [0.0 .. 1.0]
+
+    <table>
+    Value      Renders
+    0.0        Colors are melded.
+    1.0        Colors are discrete.
+    </table>
+  */
+  double sharpness();
+  /** \details
+    Sets the sharpness of this Granite Material object.
+
+    \param sharpness [in]  Sharpness. [0.0 .. 1.0]
+ 
+    \remarks
+    <table>
+    Value      Renders
+    0.0        Colors are melded.
+    1.0        Colors are discrete.
+    </table>
+  */
+  void setSharpness(double sharpness);
+
+  /** \details
+    Returns the scale of this Granite Material object.
+    
+    \remarks
+    The scale is with respect to the objects to which this Granite Material object
+    are attached. Larger values result in a coarser texture with more graininess.
+  */
+  double scale();
+  /** \details
+    Sets the scale of this Granite Material object.
+    
+    \param scale [in]  Scale.
+    
+    \remarks
+    The scale is with respect to the objects to which this Granite Material object
+    are attached. Larger values result in a coarser texture with more graininess.
+  */
+  void setScale(double scale);
+
+protected:
+  OdAveGraniteMaterial();
+  OdAveGraniteMaterial(OdAveMaterialImpl* pImpl);
+};
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdAveGraniteMaterial object pointers.
+*/
+typedef OdSmartPtr<OdAveGraniteMaterial> OdAveGraniteMaterialPtr;
+
+/** \details
+    This class represents AVE Marble Material properties for shaded entities.
+    
+    \remarks
+    AVE Marble Materials consist of a stone color and a vein color. 
+    Library: TD_Ave
+
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveMarbleMaterial : public OdAveMaterial
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdAveMarbleMaterial);
+
+  virtual OdAve::MaterialType type();
+
+  /** \details
+      Accesses the stone color for this Marble Material object.
+      
+      \remarks
+      stoneColor() returns a 24-bit RGB color.
+  */
+  OdUInt32 stoneColor();
+  /** \details
+      Accesses the vein color for this Marble Material object.
+      
+      \remarks
+      veinColor() returns a 24-bit RGB color.
+  */
+  OdUInt32 veinColor();
+  
+  /** \param color [in]  24-bit RGB color.
+  */
+  void stoneColor(OdUInt32 color);
+  /** \param color [in]  24-bit RGB color.
+  */
+  void veinColor(OdUInt32 color);
+
+  /** \details
+    Returns the vein turbulance of this Marble Material object. 
+    
+    \remarks
+    Higher values result in more swirling of the veins,
+    and take longer to render. Values in the range [1..10] are recommended.
+  */
+  OdUInt32 turbulence();
+  /** \details
+    Sets the vein turbulance of this Marble Material object. 
+    \param turbulence [in]  Turbulence.
+    \remarks
+    Higher values result in more swirling of the veins,
+    and take longer to render. Values in the range [1..10] are recommended.
+  */
+  void setTurbulence(OdUInt32 turbulence);
+
+  /** \details
+    Returns the sharpness of this Marble Material object.
+
+    \remarks
+    Returns a value in the range [0.0 .. 1.0]
+ 
+    <table>
+    Value      Renders
+    0.0        Colors are melded.
+    1.0        Colors are discrete.
+    </table>
+  */
+  double sharpness();
+  /** \details
+    Sets the sharpness of this Marble Material object.
+
+    \param sharpness [in]  Sharpness. [0.0 .. 1.0]
+ 
+    <table>
+    Value      Renders
+    0.0        Colors are melded.
+    1.0        Colors are discrete.
+    </table>
+  */
+  void setSharpness(double sharpness);
+
+
+  /** \details
+    Returns the scale of this Marble Material object.
+    
+    \remarks
+    The scale is with respect to the objects to which this Marble Material object
+    are attached. Smaller values result in less veins.
+  */
+  double scale();
+  
+  /** \details
+    Sets the scale of this Marble Material object.
+        
+    \param scale [in]  Scale.
+    
+    \remarks
+    The scale is with respect to the objects to which this Marble Material object
+    are attached. Smaller values result in less veins.
+  */
+  void setScale(double scale);
+
+protected:
+  OdAveMarbleMaterial();
+  OdAveMarbleMaterial(OdAveMaterialImpl* pImpl);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdAveMarbleMaterial object pointers.
+*/
+typedef OdSmartPtr<OdAveMarbleMaterial> OdAveMarbleMaterialPtr;
+
+/** \details
+    This class represents Wood Material properties for shaded entities.
+    \remarks
+    Wood materials consist of a bicolor woodgrain pattern.
+    
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveWoodMaterial : public OdAveMaterial
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdAveWoodMaterial);
+
+  virtual OdAve::MaterialType type();
+
+  /** \details
+    Returns the light color of this Material object.
+    \remarks
+    lightColor() returns a 24-bit RGB color.
+  */
+  OdUInt32 lightColor();
+  /** \details
+    Returns the dark color of this Wood Material object.
+    \remarks
+    darkColor() returns a 24-bit RGB color.
+  */
+  OdUInt32 darkColor();
+  /** \details
+    Sets the light color of this Wood Material object.
+    \param lightColor [in]  24-bit RGB color.
+  */
+  void setLightColor(OdUInt32 lightColor);
+  /** \details
+    Sets the dark color of this Wood Material object.
+    \param darkColor [in]  24-bit RGB color.
+  */
+  void setDarkColor(OdUInt32 darkColor);
+
+  /** \details
+    Returns the mixture of light vs. dark rings in this Wood Material object.
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+    
+    <table>
+    Value      Renders
+    0.0        Mostly dark.
+    1.0        Mostly light.
+    </table>
+    
+  */
+  double lightDark();
+  /** \details
+    Sets the mixture of light vs. dark rings in this Wood Material object.
+    \param lightDark [in]  Light/Dark mixture.  [0.0 .. 1.0]
+    
+    <table>
+    Value      Renders
+    0.0        Mostly dark.
+    1.0        Mostly light.
+    </table>
+  */
+  void setLightDark(double lightDark);
+
+  /** \details
+    Returns the ring density of this Wood Material object.
+    
+    \remarks
+    The ring density is with respect to the objects to which this Wood Material object
+    are attached. Smaller values result in a coarser texture with less rings.
+  */
+  double ringDensity();
+  /** \details
+    Sets the ring density of this Wood Material object.
+    \param ringDensity [in]  Ring Density. 
+    \remarks
+    The ring density is with respect to the objects to which this Wood Material object
+    are attached. Smaller values result in a coarser texture with less rings.
+  */
+  void setRingDensity(double ringDensity);
+
+  /** \details
+    Returns the ring width variation for this Wood Material object.
+    
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+
+    <table>
+    Value      Renders
+    0.0        Rings are uniform.
+    1.0        Rings have greatest variation.
+    </table>
+
+  */
+  double ringWidth();
+  /** \details
+    Sets the ring width parameter for this Wood Material object.
+    
+    \param ringWidth [in]  Ring width parameter. [0.0 .. 1.0]
+    \remarks
+
+    <table>
+    Value      Renders
+    0.0        Rings are uniform.
+    1.0        Rings have greatest variation.
+    </table>
+  */
+  void setRingWidth(double ringWidth);
+
+  /** \details
+    Returns the ring shape parameters for this Wood Material object.
+    
+    \remarks
+    Returns a value in the range [0.0 .. 1.0].
+
+    <table>
+    Value      Renders
+    0.0        Circular rings.
+    1.0        Most irregular rings.
+    </table>
+  */
+   double ringShape();
+  /** \details
+    Sets the ring shape parameters for this Wood Material object.
+    
+    \param ringShape [in]  Ring shape parameter. [0.0 .. 1.0]
+    \remarks
+    
+    <table>
+    Value      Renders
+    0.0        Circular rings.
+    1.0        Most irregular rings.F
+    </table>
+  */
+   void setRingShape(double ringShape) ;
+
+  /** \details
+    Returns the scale of this Wood Material object.
+    
+    \remarks
+    The scale is with respect to the objects to which this Wood Material object
+    are attached. Smaller values result in a finer texture with more rings.
+  */
+  double scale();
+  
+  /** \details
+    Sets the scale of this Wood Material object.
+        
+    \param scale [in]  Scale.
+    
+    \remarks
+    The scale is with respect to the objects to which this Wood Material object
+    are attached. Smaller values result in a finer texture with rings.
+  */
+  void setScale(double scale);
+
+protected:
+  OdAveWoodMaterial();
+  OdAveWoodMaterial(OdAveMaterialImpl* pImpl);
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdAveWoodMaterial object pointers.
+*/
+typedef OdSmartPtr<OdAveWoodMaterial> OdAveWoodMaterialPtr;
+
+/** \details
+  Returns an Iterator object that can be 
+  used to traverse the OdAveMaterial objects in the specified database or material library.
+  
+  \param pDb [in]  Pointer to the database.
+  \param pStreamBuf [in]  Pointer to the stream buffer.
+*/
+AVE_EXPORT OdRxIteratorPtr oddbGetMaterials(OdDbDatabase* pDb);
+
+AVE_EXPORT void oddbGetMaterialIds(OdDbDatabase* pDb, OdDbObjectIdArray& ids);
+
+AVE_EXPORT OdRxIteratorPtr oddbGetMaterials(OdStreamBuf* pStreamBuf);
+
+#include "TD_PackPop.h"
+
+#endif // OD_AVEMATERIAL_H
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveRender.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveRender.h
new file mode 100755
index 0000000..daba3ec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveRender.h
@@ -0,0 +1,232 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_AVERENDER_H
+#define OD_AVERENDER_H
+
+#include "TD_PackPush.h"
+
+#include "Ve/AveDefs.h"
+#include "DbObjectId.h"
+
+/** \details
+    This class represents AVE preferences.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAvePref
+{
+public:
+  OdAvePref();
+
+  OdAve::RenderType m_RenderType;             // Description: Render type.
+  OdAve::RenderDestination m_Destination;     // Description: Render destination.
+  OdString m_Scene;                           // Description: Scene name.
+  OdInt16 m_nSubSampling;                     // Description: Sub-Sampling (1 = Best, 8 = Fastest)
+  double m_dLightIconScale;                   // Description: Light icon scale.
+  double m_dSmoothingAngle;                   // Description: Smoothing angle (delta from coincident).
+  double m_dPreviewObjectSize;                // Description: Preview object size.
+  bool m_bSmoothShade;                        // Description: True to apply smooth shading.
+  bool m_bShadows;                            // Description: True to render shadows.
+  bool m_bApplyMaterials;                     // Description: True to apply materials.
+  bool m_bCropWindow;                         // Description: True to crop window.
+  bool m_bRenderCache;                        // Description: True to use render cache.
+  bool m_bQueryForSelections;                 // Description: True to query for selections.
+  bool m_bSkipRenderDlg;                      // Description: True to skip render dialog.
+  double   m_dLightIntensity;                 // Description: Ambient light intensity
+  OdUInt32 m_nLightColor;                     // Description: Ambient light color.
+  OdString m_NorthUcsName;                    // Description: North UCS name.
+  double   m_dNorthAngle;                     // Description: North angle.
+  double   m_dAmbientFactor;                  // Description: Default ambient factor.       
+  double   m_dDiffuseFactor;                  // Description: Default diffuse factor.
+  double   m_dSpecularFactor;                 // Description: Default specular factor.
+  double   m_dRoughness;                      // Description: Default roughness.
+  OdUInt32 m_nDiffuseColor;                   // Description: Default diffuse.
+  bool     m_bCurrentDiffuseColor;            // Description: True to use CECOLOR as diffuse color.
+};
+
+/** \details
+    This class represents the AVE Photo options.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveFullOpt
+{
+public:
+  OdAveFullOpt();
+
+  OdAve::RenderQuality m_RenderQuality;        // Description: Render quality. 
+  bool m_bDiscardBackFaces;                    // Description: True to discard back faces.
+  bool m_bNegativeNormal;                      // Description: True if back faces have negative normals.
+};
+
+/** \details
+    This class represents AVE scanline ("Render") options.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveScanlOpt
+{
+public:
+  OdAveScanlOpt();
+
+  OdAve::AntiAliasing m_AntiAliasing;                 // Description: Anti=Aliasing.
+  OdAve::TextureMapSampling m_TextureMapSampling;     // Description: Texture Map Sampling.
+  double m_dShadowDepthMinBias;                       // Description: Shadow depth minimum bias.
+  double m_dShadowDepthMaxBias;                       // Description: Shadow depth maximum bias.
+  double m_dAdaptSamplThreshold;                      // Description: Adaptive sampling threshold.
+  bool m_bAdaptSampl;                                 // Description: True to use adaptive sampling.
+  bool m_bDiscardBackFaces;                           // Description: True to discard back faces.
+  bool m_bNegativeNormal;                             // Description: True if back faces have negative normals.
+};
+/** \details
+    This class represents AVE raytrace options.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveRaytrOpt : public OdAveScanlOpt
+{
+public:
+  OdAveRaytrOpt();
+
+  OdInt16 m_nRayTreeMaxDepth;                         //  Ray tree depth.
+  double m_dRayTreeCutoffThreshold;                   //  Ray tree cutoff threshold.
+};
+/** \details
+    This class represents AVE render file options.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveRFileOpt
+{
+public:
+  OdAveRFileOpt();
+
+  OdInt16 m_nFileType;              // Description: File type: BMP=1, PCX=2, PostScript=3, TGA=4, TIFF=5
+  OdInt16 m_nX;                     // Description: Image width in pixels.
+  OdInt16 m_nY;                     // Description: Image height in pixels.
+  OdInt16 m_nAspectRatio;           // Description: Width/height pixel size.
+  OdInt16 m_nColorBits1;            // Description: Color Bits 1.
+  OdInt16 m_nColorBits2;            // Description: Color Bits 2.
+  bool m_bGrayscale;                // Description: True if grayscale.
+  bool m_bCompressed;               // Description: True if compresssed.
+  OdInt16 m_nOrientation;           // Description: True if Bottom to top
+  OdInt16 m_nInterlace;             // Description: Interlace
+  OdInt16 m_nPostScriptImgSize;     // Description: Image width in pixels for Postscript.
+};
+
+/** \details
+    This class represents AVE fog options.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveFogOpt{
+public:
+  OdAveFogOpt();
+
+  bool m_bFogEnabled;                 // Description:  True if fog is enabled.
+  bool m_bFogBackground;              // Description:  True to apply fog to background.
+  double m_dNearDistance;             // Description:  Where fog begins as percentage of distance to front clip plane.
+  double m_dFarDistance;              // Description:  Where fog ends as percentage of distance to front clip plane.
+  double m_dNearPercentage;           // Description:  Fog percentage at near distance.
+  double m_dFarPercentage;            // Description:  Fog percentage at far distance.
+  OdUInt32 m_Color;                   // Description:  Color of fog.
+};
+
+/** \details
+    This class represents AVE Background Options.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveBGOpt
+{
+public:
+  OdAveBGOpt();
+  ~OdAveBGOpt();
+
+  OdAve::BackgroundType m_BgType; // Description: Background type.
+  OdAveBitmap* m_pImage;          // Description: Pointer to background image.
+  bool m_bDefaultBackground;      // Description: True to use the default (editor) background.
+  OdUInt32 m_SolidColor;          // Description: Solid background color.
+  OdUInt32 m_GrColor1;            // Description: Gradient top color.
+  OdUInt32 m_GrColor2;            // Description: Gradient middle color.
+  OdUInt32 m_GrColor3;            // Description: Gradient bottom color.
+  double m_dGrHorizon;            // Description: Position of gradient horizon (0 = Bottom, 1 = Top).
+  double m_dGrHeight;             // Description: Gradient height (fraction of view).
+  double m_dGrRotation;           // Description: Gradient rotation.
+  bool m_bEnvBackground;          // Description: True to use envirionment background image. 
+  OdString m_EnvImageName;        // Description: Environment image filename.
+};
+
+/** \details
+    This class represents the AVE Render Options.
+    
+    Library: TD_Ave
+
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveRenderOption
+{
+public:
+  /** \details
+    Populates this RenderOption object with the render options from the
+    specified OdDbDatabase. 
+    \param pDb [in]  Pointer to the database.
+    \remarks
+    Returns true if and only if there were render options in the specified database.
+  */
+  bool getRenderOption(OdDbDatabase* pDb);
+  /** \details
+    Writes the render options from this RenderOption object 
+    to the specified OdDbDatabase. 
+    \param pDb [in]  Pointer to the database.
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  OdResult writeRenderOption(OdDbDatabase* pDb);
+
+  OdAvePref     m_Pref;        // Description: Render preferences.
+  OdAveFullOpt  m_FullOpt;     // Description: Photo options.
+  OdAveScanlOpt m_ScanlOpt;    // Description: Scanline options.
+  OdAveRaytrOpt m_RaytrOpt;    // Description: Raytrace options.
+  OdAveRFileOpt m_RFileOpt;    // Description: Render file options.
+  OdAveFogOpt   m_FogOpt;      // Description: Fog options.
+  OdAveBGOpt    m_BGOpt;       // Description: Background options.
+  
+private:
+  OdDbObjectId  m_ids[OdAve::kRndOptAmount];
+};
+
+
+#include "TD_PackPop.h"
+
+#endif // OD_AVERENDER_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveScene.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveScene.h
new file mode 100755
index 0000000..96c7621
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Ve/AveScene.h
@@ -0,0 +1,141 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef OD_AVESCENE_H
+#define OD_AVESCENE_H
+
+#include "TD_PackPush.h"
+
+#include "Ve/AveDefs.h"
+#include "RxObject.h"
+#include "DbObjectId.h"
+#include "DbEntity.h"
+
+class OdAveSceneImpl;
+class OdAveScene;
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdAveScene object pointers.
+*/
+typedef OdSmartPtr<OdAveScene> OdAveScenePtr;
+
+/** \details
+    This class represents AVE Scene properties.
+
+    \remarks
+    Each AVE Scenes consist of a view and zero or more lights.
+    
+    Library: TD_Ave
+    <group OdAve_Classes>
+*/
+class AVE_EXPORT OdAveScene : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdAveScene);
+
+  /** \details
+    Creates a Scene object from the specified OdDbBlockReference.
+    
+    \param blockRefId [in]  Object ID of the block reference.
+    
+    \remarks
+    The new Scene object is attached to the specified block reference.
+     
+    Returns a SmartPointer to the new Scene object.
+  */
+  static OdAveScenePtr getScene(const OdDbObjectId& blockRefId);
+  /** \details
+    Returns the Scene name from the specified OdDbBlockReference.
+    
+    \param blockRefId [in]  Object ID of the block reference.
+    \param name [out]  Receives the Scene name.
+  */
+  static void getSceneName(const OdDbObjectId& blockRefId, OdString& name);
+
+  /** \details
+    Saves the Scene properties to the OdDbBlockReference to which this Scene object is attached.
+
+    \param pDb [in]  Pointer to the database.
+      
+    \remarks
+    If pDb is null, the database containing this Light object is used.
+  */
+  OdResult writeScene(OdDbDatabase* pDb = 0);
+
+  /** \details
+    Returns the name of this Scene object.
+  */
+  OdString name() const;
+  /** \details
+    Sets the name of this Scene object.
+    \param name [in]  Name.
+    \remarks
+    Names are truncated to 8 characters.
+  */
+  void setName(const OdString& name);
+
+  /** \details
+    Returns the OdDbViewTableRecord associated with this Scene object.
+  */
+  OdDbObjectId view() const;
+  /** \details
+    Sets the OdDbViewTableRecord associated with this Scene object.
+    \param viewId [in]  Object ID of the View Table Record.
+  */
+  void setView(const OdDbObjectId& viewId);
+
+  /** \details
+    Returns the array of lights associated with this Scene object.
+    \param blockRefIds [out]  Receives the array of object IDs of the block references associated with the lights.
+  */
+  void lights(OdDbObjectIdArray& blockRefIds) const;
+  /** \details
+    Sets the array of lights associated with this Scene object.
+    \param blockRefIds [in]  Array of the object IDs of the block references associated with the lights.
+  */
+  void setLights(const OdDbObjectIdArray& blockRefIds);
+  /** \details
+    Adds the specified light to the array of lights associated with this Scene object.
+    \param blockRefId [in]  Object ID of the block reference associated with the light.
+  */
+  void addLight(const OdDbObjectId& blockRefId);
+
+protected:
+  OdAveScene();
+  OdAveScene(OdAveSceneImpl* pImpl);
+  
+  OdAveSceneImpl* m_pImpl;
+};
+
+/** \details
+  Returns an Iterator object that can be 
+  used to traverse the OdAveScene objects in the specified database.
+  
+  \param pDb [in]  Pointer to the database.
+*/
+AVE_EXPORT OdRxIteratorPtr oddbGetScenes(OdDbDatabase* pDb);
+
+#include "TD_PackPop.h"
+
+#endif // OD_AVESCENE_H
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ViewportDefs.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ViewportDefs.h
new file mode 100755
index 0000000..3246ce7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/ViewportDefs.h
@@ -0,0 +1,58 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef __OD_VIEWPORT_DEFS__
+#define __OD_VIEWPORT_DEFS__
+
+/** \details
+
+    <group TD_Namespaces>
+*/
+namespace OdDb
+{
+  enum OrthographicView
+  {
+    kNonOrthoView = 0,
+    kTopView      = 1,
+    kBottomView   = 2,
+    kFrontView    = 3,
+    kBackView     = 4,
+    kLeftView     = 5,
+    kRightView    = 6
+  };
+
+  enum RenderMode
+  {
+    k2DOptimized                 = 0,
+    kWireframe                   = 1,
+    kHiddenLine                  = 2,
+    kFlatShaded                  = 3,
+    kGouraudShaded               = 4,
+    kFlatShadedWithWireframe     = 5,
+    kGouraudShadedWithWireframe  = 6,
+    kMaxRenderMode
+  };
+}
+
+#endif // __OD_VIEWPORT_DEFS__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrExport.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrExport.h
new file mode 100755
index 0000000..9361b97
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrExport.h
@@ -0,0 +1,48 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+/*  wrExport.h
+
+*/
+#ifndef _WR_EXPORT_DEFINED
+#define _WR_EXPORT_DEFINED
+
+
+#include "OdPlatformSettings.h"
+
+#ifdef MODELER_EXPORTS
+  #define RENDER_EXPORT         OD_TOOLKIT_EXPORT
+  #define RENDER_EXPORT_STATIC  OD_STATIC_EXPORT
+#else
+  #define RENDER_EXPORT         OD_TOOLKIT_IMPORT
+  #define RENDER_EXPORT_STATIC  OD_STATIC_IMPORT
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+
+#endif  /* _WR_EXPORT_DEFINED */
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrTriangulationParams.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrTriangulationParams.h
new file mode 100755
index 0000000..6136992
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/Wr/wrTriangulationParams.h
@@ -0,0 +1,145 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _TRIANGULATIONPARAMS_H_
+#define _TRIANGULATIONPARAMS_H_
+
+#include "TD_PackPush.h"
+
+#include "OdHeap.h"
+
+/** \details
+    This container class holds ACIS triangulation (rendering) parameters. 
+    <group Other_Classes>
+\remarks
+    Default triangulation parameters:
+    
+    <table>
+    Parameter             Default
+    maxNumGridLines       10000  
+    maxFacetEdgeLength    0  
+    normalTolerance       15  
+    surfaceTolerance      0  
+    gridAspectRatio       0  
+    PointsPerEdge         0  
+    BetweenKnots          2  
+    bUseFacetRES          false  
+    </table>    
+*/
+class wrTriangulationParams
+{
+public:
+  /** \details 
+  Maximum number of grid lines.*/
+  OdUInt32 maxNumGridLines;
+  
+  /** \details
+    Maximum facet edge length.
+  */
+  double   maxFacetEdgeLength;
+  
+  /** \details 
+  NormalTolerance allows to specify the tessellation quality of circular surfaces (such as Cone, Torus, Sphere or Cylinder). 
+  It is measured in degrees. The value of this parameter determines the quantity of mesh cells (triangles) used to represent a circular surface (360/NormalTolerance). 
+  Default value is 15. It means, for an example, that surface will be tessellated with 24 mesh cells (triangles) in circular direction. 
+  */
+  double   normalTolerance;
+
+  /** \details
+    Distance tolerance for coincident faces.
+  */
+  double   surfaceTolerance;
+
+  /** \details
+    Grid aspect ratio.
+  */
+  double   gridAspectRatio;
+  
+  /** \details
+    Distance between knots. This parameter contains the number of additional points between knots; for NURB surfaces it contains number of additional isolines between knots. 
+  */
+  OdUInt16 BetweenKnots;
+  
+  /** \details
+    Points quantity per edge.
+  */
+  OdUInt32 PointsPerEdge; 
+  
+  /** \details
+    Use Facetres System variable.
+  */
+  bool     bUseFacetRES;
+  
+  /** \details
+    Fast mode is much more faster, but generates more errors.
+  */
+  bool     bFastMode;
+
+  /** \details
+    Default constructor. Sets the following default triangulation parameters:
+    <table>
+    Parameter             Default
+    maxNumGridLines       10000  
+    maxFacetEdgeLength    0  
+    normalTolerance       15  
+    surfaceTolerance      0  
+    gridAspectRatio       0  
+    PointsPerEdge         0  
+    BetweenKnots          2  
+    bUseFacetRES          false  
+    </table>
+  */
+  wrTriangulationParams()
+  : maxNumGridLines(10000)
+  , maxFacetEdgeLength(0)
+  , normalTolerance(15)
+  , surfaceTolerance(0)
+  , gridAspectRatio(0)
+  , BetweenKnots(2)
+  , PointsPerEdge(0)
+  , bUseFacetRES(false)
+  , bFastMode(false)
+  {
+  }
+
+  /** \details
+      Comparing operator for wrTriangulationParams class.
+      \param other [in] A wrTriangulationParams object to be compared with.
+      Note that bUseFacetRES property is NOT compared.
+  */
+  bool operator ==(const wrTriangulationParams other) const 
+  {
+    return other.maxNumGridLines == maxNumGridLines
+    && other.maxFacetEdgeLength == maxFacetEdgeLength
+    && other.normalTolerance == normalTolerance
+    && other.surfaceTolerance == surfaceTolerance
+    && other.gridAspectRatio == gridAspectRatio
+    && other.PointsPerEdge == PointsPerEdge
+    && other.BetweenKnots == BetweenKnots;
+    // bUseFacetRES, bFastMode skipped
+  }
+};
+
+#include "TD_PackPop.h"
+
+#endif // _TRIANGULATIONPARAMS_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/XRefMan.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/XRefMan.h
new file mode 100755
index 0000000..493198e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/XRefMan.h
@@ -0,0 +1,218 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef   _XREFMAN_H_
+#define   _XREFMAN_H_
+
+#include "RxObject.h"
+#include "SmartPtr.h"
+#include "DbLayerTableRecord.h"
+#include "DbBlockTableRecord.h"
+#include "DbLinetypeTableRecord.h"
+#include "DbTextStyleTableRecord.h"
+#include "DbSecurity.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class manages External References (Xrefs) in an OdDbDatabase object.
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXRefMan
+{
+public:
+  /** \details
+    Loads of specified Xref(s) if not currently loaded.
+    \param pHostDb [in]  Pointer to the host database.
+    \param xrefBlockname [in]  Xref block name to load.
+    
+    \remarks
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult load(OdDbDatabase* pHostDb, const OdString& xrefBlockname);
+
+  /** \param xrefBTRids [in]  Array of the object IDs of the Block Table Records of the Xrefs to load.
+  */
+  static OdResult load(OdDbObjectIdArray& xrefBTRids);
+
+  /** \param pBTR [in]  Pointer to the Block Table Record of the Xref to load.
+  */
+  static OdResult load(OdDbBlockTableRecord* pBTR);
+
+  /** \details
+    Loads of all Xrefs not currently loaded.
+    \param pHostDb [in]  Pointer to the host database.
+    \param verify [in]  Verify.
+    \remarks
+    If verify is true, this function attempts to load those Xrefs that
+    are not unloaded, not unresolved, and not resolved.
+
+    Returns eOk if successful, or an appropriate error code if not.
+  */
+  static OdResult loadAll(OdDbDatabase* pHostDb, bool verify = false);
+
+  /** \details
+    Unloads the specified Xref(s).
+    \param pBTR [in]  Pointer to the Block Table Record of the Xref to unload.
+  */
+  static void unload(OdDbBlockTableRecord* pBTR);
+
+  /** \param xrefBTRids [in]  Array of the object IDs of the Block Table Records of the Xrefs to nload.
+  */
+  static void unload(OdDbObjectIdArray& xrefBTRids);
+
+  /** \details
+    Unloads all loaded Xrefs.
+    \param pHostDb [in]  Pointer to the host database.
+  */
+  static void unloadAll(OdDbDatabase* pHostDb);
+
+  /** \details
+    Binds the specified Xref.
+    \param pBTR [in]  Pointer to the Block Table Record of the Xref to bind.
+    \param insertBind [in]  True for Xref Insert, false for Xref Bind.
+  */
+  static OdResult bind(OdDbBlockTableRecord* pBTR, bool insertBind = false);
+
+  /** \details
+    Detaches the specfied Xref.
+    \param pBTR [in]  Pointer to the Block Table Record of the Xref to detach.
+  */
+  static OdResult detach(OdDbBlockTableRecord* pBTR);
+
+  /** \details
+    Controls the reference type fo the specified Xref.
+    \param pBTR [in]  Pointer to the Block Table Record of the Xref to detach.
+    \param overlaid [in]  True for Xref Overlay, false for Xref Attach.
+  */
+  static void setOverlaid(OdDbBlockTableRecord* pBTR, bool  overlaid = true);
+
+};
+
+/** \details
+    This class is the Xref Manager Extenstion class.
+    
+    \remarks
+    This class creates and augments Xref blocks in OdDbDatabase instances. 
+    
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbXRefManExt
+{
+public:
+  /** \details
+    Creates an Xref block in the specified database.
+
+    \param pDb [in]  Pointer to the database.
+    \param pathName [in]  Path and filename for Xref block.
+    \param blockName [in]  Name of Xref block.
+    \param overlaid [in]  True for Xref Overlay, false for Xref Attach.
+    \param password [in]  Password for file.
+    \param handle [in]  Handle for Xref block.
+    
+    \remarks
+    Returns a SmartPointer to the newly added Block Table Record.
+  */
+  static OdDbBlockTableRecordPtr     
+    addNewXRefDefBlock(OdDbDatabase* pDb, const OdString& pathName, 
+                        const OdString& blockName, bool overlaid, 
+                        const OdPassword& password = OdPassword(),
+                        OdDbHandle handle = 0);
+
+  /** \details
+    Adds an Xref dependent layer to the specified Xref block.
+    
+    \param pXRefBlock [in]  Pointer to the Xref Block Table Record.
+    \param layerName [in]  Name of the layer.
+
+    \remarks
+    Returns a SmartPointer to the newly added Layer Table Record.
+  */
+  static OdDbLayerTableRecordPtr     
+    addNewXRefDependentLayer(const OdDbBlockTableRecord* pXRefBlock, const OdString& layerName);
+
+  /** \param xRefBlockId [in]  Object ID of the Xref Block Table Record.
+  */
+  static OdDbLayerTableRecordPtr addNewXRefDependentLayer(OdDbObjectId xRefBlockId, const OdString& layerName)
+  { return addNewXRefDependentLayer(OdDbBlockTableRecordPtr(xRefBlockId.safeOpenObject()), layerName); }
+
+  /** \details
+    Adds an Xref dependent linetype to the specified Xref block.
+    
+    \param pXRefBlock [in]  Pointer to the Xref Block Table Record.
+    \param linetypeName [in]  Name of the linetype.
+
+    \remarks
+    Returns a SmartPointer to the newly added Linetype Table Record.
+  */
+  static OdDbLinetypeTableRecordPtr     
+    addNewXRefDependentLinetype(const OdDbBlockTableRecord* pXRefBlock, const OdString& linetypeName);
+
+  /** \param xRefBlockId [in]  Object ID of the Xref Block Table Record.
+  */
+  static OdDbLinetypeTableRecordPtr
+    addNewXRefDependentLinetype(OdDbObjectId xRefBlockId, const OdString& linetypeName)
+  { return addNewXRefDependentLinetype(OdDbBlockTableRecordPtr(xRefBlockId.safeOpenObject()), linetypeName); }
+
+  /** \details
+    Adds an Xref dependent text style to the specified Xref block.
+    
+    \param pXRefBlock [in]  Pointer to the Xref Block Table Record.
+    \param textStyleName [in]  Name of the text style.
+
+    \remarks
+    Returns a SmartPointer to the newly added Text Style Table Record.
+  */
+  static OdDbTextStyleTableRecordPtr     
+    addNewXRefDependentTextStyle(const OdDbBlockTableRecord* pXRefBlock, const OdString& textStyleName);
+
+  /** \param xRefBlockId [in]  Object ID of the Xref Block Table Record.
+  */
+  static OdDbTextStyleTableRecordPtr
+    addNewXRefDependentTextStyle(OdDbObjectId xRefBlockId, const OdString& textStyleName)
+  { return addNewXRefDependentTextStyle(OdDbBlockTableRecordPtr(xRefBlockId.safeOpenObject()), textStyleName); }
+
+  /** \details
+    Adds nested XRef Id to parent block.
+  */
+  static void addNestedXRefId(OdDbBlockTableRecord* pXRefBlock, OdDbObjectId nestedBlockId);
+
+  /** \details
+    Gets nested XRef Ids.
+  */
+  static void getNestedXRefIds(OdDbBlockTableRecord* pXRefBlock, OdDbObjectIdArray& ids);
+
+  /** \details
+    Gets block Id for a table record.
+  */
+  static OdDbObjectId getSymbolTableRecordXrefBlockId(const OdDbSymbolTableRecord* pRec);
+};
+
+#include "TD_PackPop.h"
+
+#endif //_XREFMAN_H_
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/diagnostics.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/diagnostics.h
new file mode 100755
index 0000000..81eea2a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/diagnostics.h
@@ -0,0 +1,61 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef __DIAGNOSTICS__INCLUDED
+#define __DIAGNOSTICS__INCLUDED
+
+//DD:EXPORT_ON
+
+typedef void (*OdAssertFunc) (
+    const char* expresssion, 
+    const char* filename, 
+    int nLineNo);
+typedef bool (*OdCheckAssertGroupFunc) (
+    const char* group);
+
+typedef void (*OdTraceFunc)(
+  const OdChar* debugString);
+
+OdTraceFunc FIRSTDLL_EXPORT odSetTraceFunc(OdTraceFunc traceFunc);
+OdAssertFunc FIRSTDLL_EXPORT odSetAssertFunc(OdAssertFunc assertFunc);
+OdCheckAssertGroupFunc FIRSTDLL_EXPORT odSetCheckAssertGroupFunc(
+                                             OdCheckAssertGroupFunc checkFunc);
+
+void FIRSTDLL_EXPORT OdTrace(
+    const OdChar* lpszFormat, ...);
+#if defined(_MSC_VER) && _MSC_VER >= 1300
+void FIRSTDLL_EXPORT OdTrace(const __wchar_t* lpszFormat, ...);
+#endif
+void FIRSTDLL_EXPORT OdAssert(
+    const char* expresssion, 
+    const char* filename, 
+    int nLineNo);
+void FIRSTDLL_EXPORT OdAssert(
+    const char* group,
+    const char* expresssion, 
+    const char* fileName, 
+    int nLineNo);
+
+//DD:EXPORT_OFF
+
+#endif //__DIAGNOSTICS__INCLUDED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/include.dsp b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/include.dsp
new file mode 100755
index 0000000..5c37661
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/include.dsp
@@ -0,0 +1,1281 @@
+# Microsoft Developer Studio Project File - Name="include" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=include - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "include.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "include.mak" CFG="include - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "include - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "include - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "include - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W4 /GR /GX /O2 /D "NDEBUG" /D "WIN32" /D "_LIB" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF  "$(CFG)" == "include - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W4 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_LIB" /YX /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF 
+
+# Begin Target
+
+# Name "include - Win32 Release"
+# Name "include - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\AcisFile.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveLight.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveScene.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrep.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepComplexTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepFaceTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepShellTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepVertexTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrCoEdge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrComplex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrComplexShellTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEdge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEdgeCoEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEdgeLoopTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEntity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEnums.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEnumToString.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrFace.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrFaceLoopTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrLoop.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrLoopCoEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrLoopVertexTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrShell.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrShellFaceTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrVertexEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrVertexLoopTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\CAseDLPNTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ColorMapping.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db2dPolyline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db2dVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db2LineAngularDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3dPolyline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3dPolylineVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3dSolid.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3PointAngularDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAbstractViewTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAbstractViewTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAlignedDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbArc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbArcAlignedText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAttribute.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAttributeDefinition.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAudit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockBegin.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockEnd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockReference.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBody.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbCircle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbCurve.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDatabase.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDatabaseReactor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDiametricDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDictionary.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDictionaryVar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDictionaryWithDefault.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimAssoc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimStyleTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimStyleTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbEllipse.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbEntity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbExport.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFace.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFaceRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFcf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFiler.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFilter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFrame.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGeEdgesDwgIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGeEdgesDxfIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGraph.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGroup.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGsManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbHandle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbHatch.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbHostAppServices.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIdBuffer.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIdMapping.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIndex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIntArray.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerFilter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerIndex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayout.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayoutManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLeader.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLine.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLinetypeTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLinetypeTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMInsertBlock.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMlineStyle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbModelerGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjectId.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjectIterator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjectReactor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjPtrArray.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbOle2Frame.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbOleFrame.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbOrdinateDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPlaceHolder.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPlotSettings.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPlotSettingsValidator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPoint.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolyFaceMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolyFaceMeshVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolygonMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolygonMeshVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolyline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbProxyEntity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbProxyObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRadialDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRasterImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRasterImageDef.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRasterVariables.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRay.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRegAppTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRegAppTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRegion.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRotatedDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSecurity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSequenceEnd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbShape.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSolid.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSortentsTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSpatialFilter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSpatialIndex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSpline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSSet.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSymbolTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSymbolTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSymUtl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSystemServices.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTextStyleTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTextStyleTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTrace.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTransact.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbUCSTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbUCSTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Source\database\DbUndoFiler.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbVbaProject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewport.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewportTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewportTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbWipeout.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbWipeoutVariables.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbXline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbXRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbXrefGraph.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TD_PackPop.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TD_PackPush.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DebugStuff.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DimVarDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DynamicLinker.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Editor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\EditorImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ErrorDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FlatMemStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\Ge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeArrays.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeAugPolyline3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeBoundBlock2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeBoundBlock3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeBoundedPlane.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCircArc2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCircArc3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeClipBoundary2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCompositeCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCompositeCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCone.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCubicSplineCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCubicSplineCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveBoundary.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveCurveInt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveCurveInt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveSurfInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCylinder.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEllipArc2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEllipArc3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEntity2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEntity3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExport.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExtents2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExtents3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalBoundedSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeFileIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeFiler.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeGbl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeInterval.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeKnotVector.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLibVersion.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLine2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLine3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLinearEnt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLinearEnt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLineSeg2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLineSeg3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeMatrix2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeMatrix3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeNurbCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeNurbCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeNurbSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeOffsetCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeOffsetCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeOffsetSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePlanarEnt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePlane.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePoint2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePoint3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointEnt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointEnt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointOnCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointOnCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointOnSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePolyline2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePolyline3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePosition2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePosition3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeRay2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeRay3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeScale2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeScale3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSphere.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSplineEnt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSplineEnt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSurfSurfInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeTol.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeTorus.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeVector2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeVector3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\Gi.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiCommonDraw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiContextForDbDatabase.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiDrawable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiEnhancedMetafile.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiRasterImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiSmartDrawObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiTextStyle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiViewportGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiWorldDraw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiWorldGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\HatchPatternManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Int64.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\MessageDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Objects.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdaCommon.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdaDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdArray.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdaSTL.H
+# End Source File
+# Begin Source File
+
+SOURCE=.\odaxwrap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdBinaryData.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdCharMapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdList.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\odole.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdPlatform.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\OdPolyPolygon2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\OdPolyPolygon3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdStreamBuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdString.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdToolKit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\PtrAllocator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ResBuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxDictionary.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxEvent.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxIterator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxModule.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxObjectImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\SmartPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\SysVarDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ThumbnailImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Version.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odaxwrap.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odaxwrap.h
new file mode 100755
index 0000000..a21429a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odaxwrap.h
@@ -0,0 +1,167 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _ODAXWRAP_H_INCLUDED_
+#define _ODAXWRAP_H_INCLUDED_
+
+#if defined(_MSC_VER) && (_MSC_VER > 1310) && defined(_TOOLKIT_IN_DLL_)
+#include "TD_PackPush.h"
+
+#define _INC_MALLOC
+#include <comdef.h>
+
+#include "oaidl.h"
+#include "OdaX2.h"
+class OdDbObjectId;
+class OdGePoint3d;
+class OdGeVector3d;
+class OdGePoint2d;
+class OdGeVector2d;
+class OdDbHostAppServices;
+
+interface __declspec(uuid("C9E0781D-BA3D-4224-9FA4-58ECEA2BC559")) 
+IAcadBaseObject : public IUnknown
+{
+  // IAcadBaseObject methods
+  virtual HRESULT STDMETHODCALLTYPE SetObjectId(OdDbObjectId& objId, 
+    OdDbObjectId ownerId = OdDbObjectId::kNull, TCHAR* keyName = 0) = 0;
+  virtual HRESULT STDMETHODCALLTYPE GetObjectId(OdDbObjectId* objId) = 0;
+  virtual HRESULT STDMETHODCALLTYPE Clone(OdDbObjectId ownerId, LPUNKNOWN* pUnkClone) = 0;
+  virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID& clsid) = 0;
+  virtual HRESULT STDMETHODCALLTYPE NullObjectId() = 0;
+  virtual HRESULT STDMETHODCALLTYPE OnModified() = 0;
+};
+
+typedef IAcadBaseObject* LPACADBASEOBJECT;
+
+
+// Definition of interface: IRetrieveApplication
+interface __declspec(uuid("0E25DE83-2257-4b6d-B73B-33F1D21FFD8D"))
+IRetrieveHostAppServices : IUnknown
+{
+  virtual HRESULT STDMETHODCALLTYPE GetHostAppServices(OdDbHostAppServices** ppHostAppServices) = 0;
+};
+
+_COM_SMARTPTR_TYPEDEF(IRetrieveHostAppServices, __uuidof(IRetrieveHostAppServices));
+
+// Definition of interface: IRetrieveApplication
+interface __declspec(uuid("765B4640-664A-11cf-93F3-0800099EB3B7")) 
+IRetrieveApplication : public IUnknown
+{
+  // IRetrieveApplication methods
+  virtual HRESULT STDMETHODCALLTYPE SetApplicationObject(LPDISPATCH pAppDisp) = 0;
+  virtual HRESULT STDMETHODCALLTYPE GetApplicationObject(LPDISPATCH* pAppDisp) = 0;
+};
+
+typedef IRetrieveApplication* LPRETRIEVEAPPLICATION;
+
+// Definition of interface: IAcadBaseDatabase
+interface __declspec(uuid("CD3EB5B8-F3FC-48c2-84EE-954EFC4D4208")) 
+IAcadBaseDatabase : public IUnknown
+{
+  // IAcadBaseObject methods
+  virtual HRESULT STDMETHODCALLTYPE SetDatabase(OdDbDatabase*& pDb) = 0;
+  virtual HRESULT STDMETHODCALLTYPE GetDatabase(OdDbDatabase** pDb) = 0;
+  virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID& clsid) = 0;
+};
+
+typedef IAcadBaseDatabase* LPACADBASEDATABASE;
+
+
+_COM_SMARTPTR_TYPEDEF(IAcadBaseObject, __uuidof(IAcadBaseObject));
+_COM_SMARTPTR_TYPEDEF(IRetrieveApplication, __uuidof(IRetrieveApplication));
+_COM_SMARTPTR_TYPEDEF(IAcadBaseDatabase, __uuidof(IAcadBaseDatabase));
+
+
+// {4D07FC10-F931-11ce-B001-00AA006884E5}
+DEFINE_GUID(IID_ICategorizeProperties, 0x4d07fc10, 0xf931, 0x11ce, 0xb0, 0x1, 0x0, 0xaa, 0x0, 0x68, 0x84, 0xe5);
+
+// category ID: negative values are 'standard' categories,  positive are control-specific
+#define PROPCAT_Nil -1
+#define PROPCAT_Misc -2
+#define PROPCAT_Font -3
+#define PROPCAT_Position -4
+#define PROPCAT_Appearance -5
+#define PROPCAT_Behavior -6
+#define PROPCAT_Data -7
+#define PROPCAT_List -8
+#define PROPCAT_Text -9
+#define PROPCAT_Scale -10
+#define PROPCAT_DDE -11
+#define PROPCAT_General -12
+#define PROPCAT_Mass -13
+#define PROPCAT_Pattern -14
+#define PROPCAT_DataPoints -15
+#define PROPCAT_Mesh -16
+#define PROPCAT_ImageAdjust -17
+#define PROPCAT_ControlPoints -18
+#define PROPCAT_PrimaryUnits -19
+#define PROPCAT_AltUnits -20
+#define PROPCAT_Fit -21
+#define PROPCAT_LinesArrows -22
+#define PROPCAT_Tolerances -23
+#define PROPCAT_Geometry -24
+#define PROPCAT_Table -25
+#define PROPCAT_3dVisualization -26
+#define PROPCAT_UnderlayAdjust -27
+#define PROPCAT_SectionObject -28
+
+
+typedef int PROPCAT;
+
+#ifndef __OBJEXT_H
+interface __declspec(uuid("4D07FC10-F931-11ce-B001-00AA006884E5"))
+ICategorizeProperties : public IUnknown
+{
+  // Return a property category for the specified property.
+  virtual HRESULT STDMETHODCALLTYPE MapPropertyToCategory(
+    /*[in]*/ DISPID dispid, /*[out]*/ PROPCAT* ppropcat) = 0;
+
+  // Return the name associated with the specified category ID, as a BSTR.
+  virtual HRESULT STDMETHODCALLTYPE GetCategoryName(
+    /*[in]*/ PROPCAT propcat, /*[in]*/ LCID lcid, /*[out]*/BSTR* pbstrName) = 0;
+};
+
+typedef ICategorizeProperties FAR* LPCATEGORIZEPROPERTIES;
+#endif
+
+//
+// Utility functions
+//
+TOOLKIT_EXPORT IUnknown* OdOxGetIUnknownOfObject(OdDbObjectId objId, LPDISPATCH pApp);
+//TOOLKIT_EXPORT IUnknown* OdOxGetIUnknownOfObject(OdDbObject* pObj, LPDISPATCH pApp);
+TOOLKIT_EXPORT IUnknown* OdOxGetIUnknownOfDatabase(OdDbDatabase* pDb, LPDISPATCH pApp);
+
+
+#define FACILITY_ODA                  32
+
+#define OdHresultFromOdResult(res)    MAKE_HRESULT(res!=eOk ? 3 : 0, FACILITY_ODA, res)
+
+#include "TD_PackPop.h"
+#endif //_WIN32
+
+#endif // _ODAXWRAP_H_INCLUDED_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odole.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odole.h
new file mode 100755
index 0000000..cee8480
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/odole.h
@@ -0,0 +1,93 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+//   OdOle.h
+//
+
+#ifndef _ODOLEAUTO_H_
+#define _ODOLEAUTO_H_
+
+#include <wtypes.h>
+#include "DbDatabase.h"
+struct IUnknown;
+struct IDispatch;
+
+/** \details
+    This class maintains a link between an object and its respective COM wrapper.
+    Library: TD_Db
+    <group Other_Classes>
+*/
+class OdOxOleLinkManager
+{
+public:
+  /** \details
+    Returns the IUnknown of the COM wrapper for the specified database or database -resident object.
+    \param pObject [in]  Pointer to the object.
+    \remarks
+    Returns NULL if no wrapper is found.
+  */
+  virtual IUnknown* GetIUnknown(OdDbObject* pObject) = 0;
+
+  /** \details
+    Sets the link between the specified database or database -resident object and the specified COM wrapper.
+    \param pObject [in]  Pointer to the object.
+    \param pIUnknown [in]  Pointer to the COM wrapper.
+    \remarks
+    If pIUnknown is NULL, the link is removed.
+  */
+  virtual bool SetIUnknown(OdDbObject* pObject, IUnknown* pIUnknown = 0) = 0;
+
+  /** \param pDb [in]  Pointer to the database.
+  */
+  virtual IUnknown* GetIUnknown(OdDbDatabase * pDb) = 0;
+
+  /** \param pDb [in]  Pointer to the database.
+  */
+  virtual bool SetIUnknown(OdDbDatabase * pDb, IUnknown* pIUnknown = 0) = 0;
+
+  /** \details
+    Return the IDispatch of the document to which the specified database belongs.
+    \param pDb [in]  Pointer to the database.
+    \remarks
+    Returns NULL if the database does not belong to a document.
+  */
+  virtual IDispatch* GetDocIDispatch(OdDbDatabase * pDatabase) = 0;
+
+  /** \details
+    Sets the link between the specified database and the specified document to which it belongs..
+    \param pDb [in]  Pointer to the database.
+    \param pIDispatch [in]  Pointer to the IDispatch of the document..
+    \remarks
+    If IDispatch is NULL, the link is removed.
+  */
+  virtual bool SetDocIDispatch(OdDbDatabase * pDatabase, IDispatch* pIDispatch = 0) = 0;
+};
+
+TOOLKIT_EXPORT OdOxOleLinkManager* OdOxGetOleLinkManager(void);
+
+#endif // _ODOLEAUTO_H_
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/summinfo.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/summinfo.h
new file mode 100755
index 0000000..656e63d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Include/summinfo.h
@@ -0,0 +1,242 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+
+
+#ifndef _SUMMINFO_H_
+#define _SUMMINFO_H_
+
+#include "RxObject.h"
+#include "DbDatabase.h"
+#include "DbLibraryInfo.h"
+
+#include "TD_PackPush.h"
+
+/** \details
+    This class encapsulates a set of character strings containing 
+    additional information for an OdDbDatabase as Summary Information.
+
+    \remarks
+    In addition to the predefined fields, you add create any number of custom fields to the Summary Information.
+    Library: TD_Db
+    <group OdDb_Classes>
+*/
+class TOOLKIT_EXPORT OdDbDatabaseSummaryInfo : public OdRxObject
+{
+public:
+  ODRX_DECLARE_MEMBERS(OdDbDatabaseSummaryInfo);
+
+  OdDbDatabaseSummaryInfo();
+  
+  /** \details
+    Returns the value of the Title field of the Summary Information.
+  */
+  virtual OdString getTitle() const = 0;
+
+  /** \details
+    Sets the value of the Title field of the Summary Information.
+    \param title [in]  Title.
+  */
+  virtual void setTitle(
+    const OdString& title) = 0;
+  
+  /** \details
+    Returns the value of the Subject field of the Summary Information.
+  */
+  virtual OdString getSubject() const = 0;
+
+  /** \details
+    Sets the value of the Subject field of the Summary Information.
+    \param subject [in]  Subject.
+  */
+  virtual void setSubject(
+    const OdString& subject) = 0;
+  
+  /** \details
+    Returns the value of the Author field of the Summary Information.
+  */
+  virtual OdString getAuthor() const = 0;
+
+  /** \details
+    Sets the value of the Author field of the Summary Information.
+    \param author [in]  Author.
+  */
+  virtual void setAuthor(
+    const OdString& author) = 0;
+
+  /** \details
+    Returns the value of the Keywords field of the Summary Information.
+    
+    \remarks
+    Keywords are delimited by spaces.
+  */
+  virtual OdString getKeywords() const = 0;
+
+  /** \details
+    Sets the value of the Keywords field of the Summary Information.
+    \param keywords [in]  Keywords.
+    \remarks
+    Keywords are delimited by spaces.
+  */
+  virtual void setKeywords(
+    const OdString& keywords) = 0;
+
+  /** \details
+    Returns the value of the Comments field of the Summary Information.
+  */
+  virtual OdString getComments() const = 0;
+
+  /** \details
+    Sets the value of the Comments field of the Summary Information.
+    \param comments [in]  Comments.
+  */
+  virtual void setComments(
+    const OdString& comments) = 0;
+
+
+  /** \details
+    Returns the value of the LastSavedBy field of the Summary Information.
+  */
+  virtual OdString getLastSavedBy() const = 0;
+
+  /** \details
+    Sets the value of the LastSavedBy field of the Summary Information.
+    \param lastSavedBy [in]  Last Saved By.
+  */
+  virtual void setLastSavedBy(
+    const OdString& lastSavedBy) = 0;
+
+  /** \details
+    Returns the value of the RevisionNumber field of the Summary Information.
+    
+    \note
+    The RevisionNumber field is returned as a string.
+  */
+  virtual OdString getRevisionNumber() const = 0;
+
+  /** \details
+    Sets the value of the RevisionNumber field of the Summary Information.
+    \param revisionNumber [in]  Revision number.
+    \note
+    The RevisionNumber field is set as a string.
+  */
+  virtual void setRevisionNumber(
+    const OdString& revisionNumber) = 0;
+    
+  /** \details
+    Returns the value of the HyperlinkBase field of the Summary Information.
+  */
+  virtual OdString getHyperlinkBase() const = 0;
+
+  /** \details
+    Sets the value of the HyperlinkBase field of the Summary Information.
+    \param hyperlinkBase [in]  HyperlinkBase.
+  */
+  virtual void setHyperlinkBase(
+    const OdString& hyperlinkBase) = 0;
+  /** \details
+    Returns the number of custom fields in the Summary Information  
+  */
+  virtual int numCustomInfo() const = 0;
+  
+  /** \details
+    Appends a custom field to the Summary Information.
+    \param key [in]  Name of the custom field.
+    \param value [in]  Value of the custom field.
+
+  */
+  virtual void addCustomSummaryInfo(
+    const OdString& key, 
+    const OdString& value ) = 0;
+  
+  /** \details
+    Deletes the specified custom field from the Summary Information.
+    \param fieldIndex [in]  Field index [1..numCustomInfo()].
+    \param key [in]  Name of the field.
+  */
+  virtual void deleteCustomSummaryInfo(
+    int fieldIndex) = 0;
+  virtual bool deleteCustomSummaryInfo(
+    const OdString& key) = 0;
+    
+  /** \details
+    Returns the value of the specified custom field of the Summary Information.
+    \param fieldIndex [in]  Field index [1..numCustomInfo()].
+    \param key [out]  Receives the name.
+    \param value [out]  Receives the value.
+  */
+    virtual void getCustomSummaryInfo(
+    int fieldIndex, 
+    OdString& key, 
+    OdString& value) const = 0;
+  
+  /** \details
+    Sets the value of the specified custom field of the Summary Information.
+    \param fieldIndex [in]  Field index [1..numCustomInfo()].
+    \param key [in]  Name of the field.
+    \param value [in]  Value for the field.
+  */
+  virtual void setCustomSummaryInfo(
+    int fieldIndex, const OdString& key, 
+    const OdString& value) = 0;
+  
+  /** \param customInfoKey [in]  Name of the field to retrieve.
+  */
+  virtual bool getCustomSummaryInfo(
+    const OdString& customInfoKey, 
+    OdString& value ) const = 0;
+  
+  /** \param customInfoKey [in]  Name of the field to set.
+  */
+  virtual void setCustomSummaryInfo(
+    const OdString& customInfoKey, 
+    const OdString& value) = 0;
+  
+  /** \details
+    Returns the OdDbDatabase associated with this Summary Information.
+  */
+  virtual OdDbDatabase* database() const = 0; 
+  
+  /** \details
+    Sets the OdDbDatabase associated with this Summary Information.
+    \param pDb [in]  Pointer to the database.
+  */
+  virtual void setDatabase(
+    OdDbDatabase *pDb) = 0;
+};
+
+/** \details
+    This template class is a specialization of the OdSmartPtr class for OdDbDatabaseSummaryInfo object pointers.
+*/
+typedef OdSmartPtr<OdDbDatabaseSummaryInfo> OdDbDatabaseSummaryInfoPtr;
+
+
+TOOLKIT_EXPORT OdDbLibraryInfo*           oddbGetLibraryInfo(void);
+TOOLKIT_EXPORT OdDbDatabaseSummaryInfoPtr oddbGetSummaryInfo(OdDbDatabase* pDb);
+TOOLKIT_EXPORT void                       oddbPutSummaryInfo(const OdDbDatabaseSummaryInfo* pInfo);
+
+
+#include "TD_PackPop.h"
+
+#endif // _SUMMINFO_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Headers/Shape.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Headers/Shape.h
new file mode 100755
index 0000000..16ae8d9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Headers/Shape.h
@@ -0,0 +1,27 @@
+//
+//  Shape.h
+//  Shape
+//
+//  Created by leiyixu on 16/7/4.
+//  Copyright © 2016年 ODA. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+//! Project version number for Shape.
+FOUNDATION_EXPORT double ShapeVersionNumber;
+
+//! Project version string for Shape.
+FOUNDATION_EXPORT const unsigned char ShapeVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <Shape/PublicHeader.h>
+
+//#import <Shape/iOdaApplication.h>
+//#import <Shape/iOdaAppServices.h>
+//#import <Shape/iStrConv.h>
+//
+//#import <Shape/OdFileBuf.h>
+//#import <Shape/StdAfx.h>
+//#import <Shape/ExSystemServices.h>
+//#import <Shape/ExHostAppServices.h>
+//#import <Shape/ExGiRasterImage.h>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Info.plist b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Info.plist
new file mode 100755
index 0000000..ea9c84c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Info.plist
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Modules/module.modulemap b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Modules/module.modulemap
new file mode 100755
index 0000000..638c064
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Modules/module.modulemap
@@ -0,0 +1,6 @@
+framework module Shape {
+  umbrella header "Shape.h"
+
+  export *
+  module * { export * }
+}
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Shape b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Shape
new file mode 100755
index 0000000..2bb8506
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/Shape
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/_CodeSignature/CodeResources b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/_CodeSignature/CodeResources
new file mode 100755
index 0000000..61872a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/_CodeSignature/CodeResources
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>files</key>
+	<dict>
+		<key>Headers/Shape.h</key>
+		<data>
+		lyH2A3ReZRJWew7bHCthdoTDOo4=
+		</data>
+		<key>Info.plist</key>
+		<data>
+		+Dkrib0hYq3jlWr2kguIgJdKcv4=
+		</data>
+		<key>Modules/module.modulemap</key>
+		<data>
+		kOwBdEJ299VRrfBMyFTtEhHzCJY=
+		</data>
+		<key>include.dsp</key>
+		<data>
+		89885/UI2D7q+CqmJ24SYdlARGg=
+		</data>
+	</dict>
+	<key>files2</key>
+	<dict>
+		<key>Headers/Shape.h</key>
+		<data>
+		lyH2A3ReZRJWew7bHCthdoTDOo4=
+		</data>
+		<key>Modules/module.modulemap</key>
+		<data>
+		kOwBdEJ299VRrfBMyFTtEhHzCJY=
+		</data>
+		<key>include.dsp</key>
+		<data>
+		89885/UI2D7q+CqmJ24SYdlARGg=
+		</data>
+	</dict>
+	<key>rules</key>
+	<dict>
+		<key>^</key>
+		<true/>
+		<key>^.*\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>1000</real>
+		</dict>
+		<key>^.*\.lproj/locversion.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>1100</real>
+		</dict>
+		<key>^version.plist$</key>
+		<true/>
+	</dict>
+	<key>rules2</key>
+	<dict>
+		<key>.*\.dSYM($|/)</key>
+		<dict>
+			<key>weight</key>
+			<real>11</real>
+		</dict>
+		<key>^</key>
+		<dict>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^(.*/)?\.DS_Store$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>2000</real>
+		</dict>
+		<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
+		<dict>
+			<key>nested</key>
+			<true/>
+			<key>weight</key>
+			<real>10</real>
+		</dict>
+		<key>^.*</key>
+		<true/>
+		<key>^.*\.lproj/</key>
+		<dict>
+			<key>optional</key>
+			<true/>
+			<key>weight</key>
+			<real>1000</real>
+		</dict>
+		<key>^.*\.lproj/locversion.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>1100</real>
+		</dict>
+		<key>^Info\.plist$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^PkgInfo$</key>
+		<dict>
+			<key>omit</key>
+			<true/>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^[^/]+$</key>
+		<dict>
+			<key>nested</key>
+			<true/>
+			<key>weight</key>
+			<real>10</real>
+		</dict>
+		<key>^embedded\.provisionprofile$</key>
+		<dict>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+		<key>^version\.plist$</key>
+		<dict>
+			<key>weight</key>
+			<real>20</real>
+		</dict>
+	</dict>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/include.dsp b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/include.dsp
new file mode 100755
index 0000000..5c37661
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Shape.framework/include.dsp
@@ -0,0 +1,1281 @@
+# Microsoft Developer Studio Project File - Name="include" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=include - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "include.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "include.mak" CFG="include - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "include - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "include - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "include - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W4 /GR /GX /O2 /D "NDEBUG" /D "WIN32" /D "_LIB" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF  "$(CFG)" == "include - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir ""
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W4 /Gm /GR /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_LIB" /YX /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF 
+
+# Begin Target
+
+# Name "include - Win32 Release"
+# Name "include - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\AcisFile.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveLight.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ve\AveScene.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrep.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepComplexTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepFaceTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepShellTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrBrepVertexTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrCoEdge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrComplex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrComplexShellTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEdge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEdgeCoEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEdgeLoopTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEntity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEnums.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrEnumToString.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrFace.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrFaceLoopTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrLoop.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrLoopCoEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrLoopVertexTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrShell.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrShellFaceTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrVertexEdgeTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Br\BrVertexLoopTraverser.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\CAseDLPNTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ColorMapping.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db2dPolyline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db2dVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db2LineAngularDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3dPolyline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3dPolylineVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3dSolid.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Db3PointAngularDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAbstractViewTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAbstractViewTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAlignedDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbArc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbArcAlignedText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAttribute.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAttributeDefinition.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbAudit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockBegin.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockEnd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockReference.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBlockTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbBody.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbCircle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbCurve.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDatabase.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDatabaseReactor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDiametricDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDictionary.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDictionaryVar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDictionaryWithDefault.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimAssoc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimStyleTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbDimStyleTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbEllipse.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbEntity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbExport.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFace.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFaceRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFcf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFiler.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFilter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbFrame.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGeEdgesDwgIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGeEdgesDxfIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGraph.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGroup.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbGsManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbHandle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbHatch.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbHostAppServices.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIdBuffer.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIdMapping.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIndex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbIntArray.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerFilter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerIndex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayerTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayout.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLayoutManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLeader.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLine.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLinetypeTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbLinetypeTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMInsertBlock.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMlineStyle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbModelerGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbMText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjectId.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjectIterator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjectReactor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbObjPtrArray.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbOle2Frame.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbOleFrame.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbOrdinateDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPlaceHolder.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPlotSettings.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPlotSettingsValidator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPoint.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolyFaceMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolyFaceMeshVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolygonMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolygonMeshVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbPolyline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbProxyEntity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbProxyObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRadialDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRasterImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRasterImageDef.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRasterVariables.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRay.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRegAppTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRegAppTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRegion.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbRotatedDimension.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSecurity.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSequenceEnd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbShape.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSolid.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSortentsTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSpatialFilter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSpatialIndex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSpline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSSet.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSymbolTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSymbolTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSymUtl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbSystemServices.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTextStyleTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTextStyleTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTrace.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbTransact.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbUCSTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbUCSTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Source\database\DbUndoFiler.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbVbaProject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbVertex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewport.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewportTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewportTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewTable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbViewTableRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbWipeout.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbWipeoutVariables.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbXline.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbXRecord.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DbXrefGraph.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TD_PackPop.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TD_PackPush.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DebugStuff.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DimVarDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\DynamicLinker.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Editor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\EditorImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ErrorDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\FlatMemStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\Ge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeArrays.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeAugPolyline3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeBoundBlock2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeBoundBlock3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeBoundedPlane.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCircArc2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCircArc3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeClipBoundary2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCompositeCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCompositeCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCone.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCubicSplineCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCubicSplineCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveBoundary.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveCurveInt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveCurveInt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCurveSurfInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeCylinder.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEllipArc2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEllipArc3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEntity2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeEntity3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExport.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExtents2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExtents3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalBoundedSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeExternalSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeFileIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeFiler.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeGbl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeInterval.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeKnotVector.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLibVersion.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLine2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLine3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLinearEnt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLinearEnt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLineSeg2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeLineSeg3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeMatrix2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeMatrix3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeNurbCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeNurbCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeNurbSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeOffsetCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeOffsetCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeOffsetSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePlanarEnt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePlane.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePoint2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePoint3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointEnt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointEnt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointOnCurve2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointOnCurve3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePointOnSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePolyline2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePolyline3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePosition2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GePosition3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeRay2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeRay3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeScale2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeScale3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSphere.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSplineEnt2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSplineEnt3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeSurfSurfInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeTol.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeTorus.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeVector2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Ge\GeVector3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\Gi.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiCommonDraw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiContextForDbDatabase.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiDrawable.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiEnhancedMetafile.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiRasterImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiSmartDrawObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiTextStyle.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiViewportGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiWorldDraw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\GiWorldGeometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\HatchPatternManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Int64.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\MessageDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Objects.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdaCommon.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdaDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdArray.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdaSTL.H
+# End Source File
+# Begin Source File
+
+SOURCE=.\odaxwrap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdBinaryData.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdCharMapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdList.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\odole.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdPlatform.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\OdPolyPolygon2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Gi\OdPolyPolygon3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdStreamBuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdString.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\OdToolKit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\PtrAllocator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ResBuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RText.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxDictionary.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxEvent.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxIterator.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxModule.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RxObjectImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\SmartPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\SysVarDefs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ThumbnailImage.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Version.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExGiRasterImage.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExGiRasterImage.h
new file mode 100755
index 0000000..2bfb845
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExGiRasterImage.h
@@ -0,0 +1,441 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _OD_ODEXGIRASTERIMAGE_H_
+#define _OD_ODEXGIRASTERIMAGE_H_
+
+#include "TD_PackPush.h"
+
+#include "OdBinaryData.h"
+#include "Gi/GiRasterImage.h"
+#include "FlatMemStream.h"
+#include "OdPlatform.h"
+#include "RxRasterServices.h"
+#include "StaticRxObject.h"
+
+class OdExGiRasterImage;
+/** \details
+  This template class is a specialization of the OdSmartPtr class for OdExGiRasterImage object pointers.
+*/
+typedef OdSmartPtr<OdExGiRasterImage> OdExGiRasterImagePtr;
+/** \details
+    This class represents a raster image within the Teigha vectorization framework.
+    <group ExServices_Classes> 
+    Library: Source code provided. 
+*/
+class OdExGiRasterImage : public OdGiRasterImageParam
+{
+public:
+  OdRxObjectPtr clone() const
+  {
+    OdSmartPtr<OdExGiRasterImage> pRes = OdRxObjectImpl<OdExGiRasterImage>::createObject();
+    pRes->m_bits = m_bits;
+    pRes->m_palette = m_palette;
+    pRes->m_header = m_header;
+    pRes->m_imageSource = m_imageSource;
+    pRes->m_transparencyMode = m_transparencyMode;
+    return (OdRxObject*)pRes;
+  }
+
+  struct Header
+  {
+    Header(OdUInt32 width, OdUInt32 height, OdUInt16 bitPerPixel)
+      : m_width(width), m_height(height)
+      , m_bitPerPixel(bitPerPixel)
+      , m_xPelsPerUnit(0.0)
+      , m_yPelsPerUnit(0.0)
+      , m_resUnits(OdGiRasterImage::kNone)
+     {}
+    Header()
+      : m_width(0), m_height(0)
+      , m_bitPerPixel(0)
+      , m_xPelsPerUnit(0.0)
+      , m_yPelsPerUnit(0.0)
+      , m_resUnits(OdGiRasterImage::kNone)
+    {}
+    
+    OdUInt32  m_width;
+    OdUInt32  m_height;
+    OdUInt16  m_bitPerPixel;
+    double    m_xPelsPerUnit,
+              m_yPelsPerUnit;
+    OdGiRasterImage::Units 
+              m_resUnits;
+  };
+  
+  class Palette
+  {
+    OdBinaryData m_colorsData;
+  public:
+    const OdUInt8* getData() const { return m_colorsData.getPtr(); }
+    OdBinaryData& data() { return m_colorsData; }
+    const OdBinaryData& getBinData() const { return m_colorsData; }
+    OdUInt32 numColors() const { return m_colorsData.size() / 4; }
+    void setNumColors(OdUInt32 nColors) { m_colorsData.resize(nColors * 4); }
+    void setColorAt(OdUInt32 nIndex, OdUInt8 blue, OdUInt8 green, OdUInt8 red, OdUInt8 alpha = 0)
+    {
+      ODA_ASSERT(nIndex < m_colorsData.size());
+      nIndex *= 4;
+      m_colorsData[nIndex]     = blue;
+      m_colorsData[nIndex + 1] = green;
+      m_colorsData[nIndex + 2] = red;
+      m_colorsData[nIndex + 3] = alpha;
+    }
+    
+    void colorAt(OdUInt32 nIndex, OdUInt8& blue, OdUInt8& green, OdUInt8& red, OdUInt8* pAlpha = 0) const
+    {
+      ODA_ASSERT(nIndex < m_colorsData.size());
+      nIndex *= 4;
+      blue    = m_colorsData[nIndex];
+      green   = m_colorsData[nIndex + 1];
+      red     = m_colorsData[nIndex + 2];
+      if(pAlpha)
+      {
+        *pAlpha = m_colorsData[nIndex + 3];
+      }
+    }
+  };
+  
+  private:
+    Header           m_header;
+    OdBinaryData     m_bits;
+    Palette          m_palette;
+    ImageSource      m_imageSource;
+    TransparencyMode m_transparencyMode;
+  public:
+    /** \param bitsPerPixel [in]  Color depth.
+      \param xPixels [in]  X pixels.
+      \param yPixels [in]  Y pixels.
+    */
+    OdExGiRasterImage(OdUInt32 xPixels, OdUInt32 yPixels, OdUInt8 bitsPerPixel);
+    OdExGiRasterImage();
+    
+    /** \details
+      Returns the size in bytes of the pixel data for a specified (or this) RasterImage object.
+      \param bitsPerPixel [in]  Color depth.
+      \param xPixels [in]  X pixels.
+      \param yPixels [in]  Y pixels.
+    */
+    static OdUInt32 bitDataSize(OdUInt32 xPixels, OdUInt32 yPixels, OdUInt16 bitsPerPixel)
+    {
+      return ((xPixels * bitsPerPixel +31) & ~31) /8 * yPixels;
+    }
+    
+    OdUInt32 bitDataSize()
+    {
+      return OdExGiRasterImage::bitDataSize(m_header.m_width, m_header.m_height, 
+        m_header.m_bitPerPixel);
+    }
+    
+    /** \details
+      Returns a reference to the binary data for this RasterImage object.
+    */
+    OdBinaryData& bits() { return m_bits; }
+    /** \details
+      Returns a the binary data for this RasterImage object.
+    */
+    const OdBinaryData& getBits() const { return m_bits; }
+ 
+    /** \details
+      Returns an array of scan lines for this RasterImage object.
+      \param numBytes [out]  Receives the number of bytes in the array.
+    */
+    const OdUInt8* getScanLines(OdUInt32& numBytes) const
+    {
+      numBytes = m_bits.size();
+      return m_bits.asArrayPtr();
+    }
+
+    /** \details
+      Sets the binary data for this RasterImage object.
+      \param data [in]  Binary data.
+      \param numBytes [in]  Number of bytes in the array.
+    */
+        void setBits(const OdBinaryData& data)
+    {
+      ODA_ASSERT(data.size() <= bitDataSize());
+      m_bits = data;
+    }
+    
+    void setBits(const OdUInt8* data, OdUInt32 numBytes)
+    {
+      ODA_ASSERT(numBytes <= bitDataSize());
+      m_bits.resize(numBytes);
+      ::memcpy(m_bits.asArrayPtr(), data, numBytes);
+    }
+    
+    /** \details
+      Sets the metrics of this ReasterImage object.
+      
+      \param bitsPerPixel [in]  Color depth.
+      \param xPixels [in]  X pixels.
+      \param yPixels [in]  Y pixels.
+    */
+    void setMetrics(OdUInt32 xPixels, OdUInt32 yPixels, OdUInt16 bitsPerPixel)
+    {
+      m_header.m_width = xPixels;
+      m_header.m_height = yPixels;
+      m_header.m_bitPerPixel = bitsPerPixel;
+      m_transparencyMode = (bitsPerPixel < 32) ? kTransparencyDef : kTransparency8Bit;
+    }
+    
+    /** \details
+      Sets the default image resolution in pixels per unit of this RasterImage object.
+
+      \param xPelsPerUnit [in]  Pixels per unit value (x direction).
+      \param yPelsPerUnit [in]  Pixels per unit value (y direction).
+      \param units [in]  Units.
+    */
+     void setDefaultResolution(OdGiRasterImage::Units units, double xPelsPerUnit, double yPelsPerUnit)
+    {
+      m_header.m_resUnits = units;
+      m_header.m_xPelsPerUnit = xPelsPerUnit;
+      m_header.m_yPelsPerUnit = yPelsPerUnit;
+    }
+    
+    /** \details
+      Sets the number of colors in the palette of this RasterImage object.
+      \param numColors [in]  Number of colors.
+    */
+    void setPalNumColors(OdUInt32 numColors)
+    {
+      m_palette.setNumColors(numColors);
+    }
+    
+    /** \details
+      Returns the number of colors in the palette of this RasterImage object.
+    */
+    OdUInt32 getPalNumColors() const
+    {
+      return m_palette.numColors();
+    }
+    
+    /** \details
+      Returns the palette of this RasterImage object.
+    */
+    const Palette& getPalette() const
+    {
+      return m_palette;
+    }
+
+    /** \details
+      Returns the size in bytes of the palette of this RasterImage object.
+    */
+    OdUInt32 paletteDataSize() const
+    {
+      return m_palette.getBinData().size();
+    }
+
+    /** \details
+        Returns the palette data of this RasterImage object.
+        \param bytes [in]  Receives the data.
+    */
+    void paletteData(OdUInt8* bytes) const
+    {
+      const OdBinaryData& palData = m_palette.getBinData();
+      memcpy(bytes, palData.asArrayPtr(), palData.size());
+    }
+
+    /** \details
+        Returns the palette of this RasterImage object.
+        \param bytes [in]  Receives the data.
+    */
+    Palette& palette()
+    {
+      return m_palette;
+    }
+    /** \details
+      Sets the specified color in the palette of this RasterImage object.
+      
+      \param paletteIndex [in]  Color number.
+      \param blue [in]  Blue component.
+      \param green [in]  Green component.
+      \param red [in]  Red component.
+      \param alpha [in]  Alpha component.
+    */
+    void setPalColorAt(OdUInt32 paletteIndex, OdUInt8 blue, OdUInt8 green, OdUInt8 red, OdUInt8 alpha = 0)
+    {
+      m_palette.setColorAt(paletteIndex, blue, green, red, alpha);
+    }
+    
+    /** \details
+      Returns the specified color in the palette of this RasterImage object.
+      
+      \param paletteIndex [in]  Color number.
+      \param blue [out]  Receives the Blue component.
+      \param green [out]  Receives the Green component.
+      \param red [out]  Receives the Red component.
+      \param pAlpha [out]  Pointer to the object to receive the alpha component..
+    */
+    void getPalColorAt(OdUInt32 paletteIndex, OdUInt8& blue, OdUInt8& green, OdUInt8& red, OdUInt8* pAlpha = 0) const
+    {
+      m_palette.colorAt(paletteIndex, blue, green, red, pAlpha);
+    }
+    
+    // Gets the color(RGB) in specified point of raster image
+
+    /** \details
+      Returns the specified color at the specified pixel of this RasterImage object.
+      
+      \param x [in]  X-coordinate.
+      \param y [in]  Y-Coordinate
+      \param blue [out]  Receives the Blue component.
+      \param green [out]  Receives the Green component.
+      \param red [out]  Receives the Red component.
+    */
+    void getColorAt(OdUInt32 x, OdUInt32 y, OdUInt8& blue, OdUInt8& green, OdUInt8& red) const;
+    
+    // virtual overrides
+
+    void copyFrom(const OdRxObject* pOtherObj);
+    OdUInt32 pixelWidth() const;
+    OdUInt32 pixelHeight() const;
+    OdUInt32 colorDepth() const;
+    OdGiRasterImage::Units defaultResolution(double& xPelsPerUnit, double& yPelsPerUnit) const;
+    
+    /** Returns bitmap info header
+    */
+    // void getBitmapInfoHeader(BITMAPINFOHEADER& bmih) const;
+
+    
+    OdUInt32 numColors() const;
+
+    virtual ODCOLORREF color(OdUInt32 colorIndex) const;
+
+    void scanLines(OdUInt8* scnLines, OdUInt32 firstScanline, OdUInt32 numLines = 1) const;
+
+    /** \details
+        Returns pointer to image's pixels in bmp format.
+        Note that it is optional to have implementation of this function
+        (to prevent dummy copying of pixels data). You can return NULL in your
+        implementation if it is inconvenient in some case - any functionality
+        uses this interface must take it into account.
+    */
+
+    virtual const OdUInt8* scanLines() const;
+
+    virtual PixelFormatInfo pixelFormat() const;
+    
+    virtual OdUInt32 scanLinesAlignment() const;
+
+    virtual OdUInt32 supportedParams() const;
+    virtual ImageSource imageSource() const;
+    virtual void setImageSource(ImageSource source);
+    virtual TransparencyMode transparencyMode() const;
+    virtual void setTransparencyMode(TransparencyMode mode);
+};
+
+/** \details
+    This class implements platform-dependent loading and saving
+    of Raster Image files for Teigha.
+ 
+    <group ExServices_Classes> 
+    Library: Source code provided. 
+*/
+class ExRasterModule : public OdRxRasterServices
+{
+public:
+  /** \details
+      Loads the specified Raster Image file.
+      \param filename [in]  Filename of the Raster Image file to be read.
+      \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be read.
+      \param pFlagsChain [in]  Optional zero-terminated loading flag pairs array.
+
+      \remarks
+      The returned pointer is expected to be passed to OdGiViewportGeometry::rasterImageDc().
+  */
+  OdGiRasterImagePtr loadRasterImage(const OdString &filename, const OdUInt32 *pFlagsChain = NULL);
+  OdGiRasterImagePtr loadRasterImage(OdStreamBuf *pStreamBuf, const OdUInt32 *pFlagsChain = NULL);
+
+  /** \details
+      Saves specified Raster Image to the specified file.
+      \param rasterImage [in]  Raster image to be saved.
+      \param filename [in]  Filename of the Raster Image file to be written.
+      \param type [in]  Image format type to be written.
+      \param pFlagsChain [in]  Optional zero-terminated saving flag pairs array.
+  */
+  bool saveRasterImage(const OdGiRasterImage* rasterImage, const OdString& filename,
+                       const OdUInt32 *pFlagsChain = NULL);
+  bool saveRasterImage(const OdGiRasterImage* rasterImage, const OdString& filename,
+                       OdUInt32 type, const OdUInt32 *pFlagsChain = NULL);
+
+  /** \details
+      Try to convert raster image (RGB) to JPEG or other type.
+      \param pRaster [in]  Raster image to be converted.
+      \param type [in]  Image format type to be converted.
+      \param pStreamBuf [in]  Pointer to the StreamBuf object to which the data are to be stored.
+      \param pFlagsChain [in]  Optional zero-terminated saving flag pairs array.
+  */
+  bool convertRasterImage(const OdGiRasterImage* pRaster, OdUInt32 type,
+                          OdStreamBuf* pStreamBuf, const OdUInt32 *pFlagsChain = NULL);
+
+  /** \details
+      Try to convert raster image to other type.
+      \param pSrcStream [in]  Pointer to the StreamBuf object from which the data are to be converted.
+      \param pDstStream [in]  Pointer to the StreamBuf object to which the data are to be converted.
+      \param type [in]  Image format type to be converted.
+      \param pFlagsChainSrc [in]  Optional zero-terminated loading flag pairs array.
+      \param pFlagsChainDst [in]  Optional zero-terminated saving flag pairs array.
+  */
+  bool convertRasterImage(OdStreamBuf* pSrcStream, OdStreamBuf* pDstStream, OdUInt32 type,
+                          const OdUInt32 *pFlagsChainSrc = NULL, const OdUInt32 *pFlagsChainDst = NULL);
+
+  /** \details
+      Returns array of supported image format types.
+  */
+  OdUInt32Array getRasterImageTypes() const;
+
+  /** \details
+      Get file extension and filter name by type.
+      \param type [in]  Image format type to be formatted.
+      \param psFilterName [out]  Output filter name (can be Null).
+  */
+  OdString mapTypeToExtension(OdUInt32 type, OdString* psFilterName) const;
+
+  /** \details
+      Get image format type by file extension.
+      \param extension [in]  File extension.
+  */
+  OdUInt32 mapExtensionToType(const OdString& extension) const;
+
+  /** \details
+      Try to detect image format type from input stream.
+      \param filename [in]  Filename of the Raster Image file to be checked.
+      \param pStreamBuf [in]  Pointer to the StreamBuf object from which the data are to be checked.
+  */
+  OdUInt32 getImageFormat(const OdString &filename) const;
+  OdUInt32 getImageFormat(OdStreamBuf* pStreamBuf) const;
+
+  /** \details
+      Initialize module.
+  */
+  void initApp();
+  /** \details
+      Uninitialize module.
+  */
+  void uninitApp();
+};
+
+#include "TD_PackPop.h"
+
+#endif //#ifndef _OD_ODEXGIRASTERIMAGE_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExHostAppServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExHostAppServices.h
new file mode 100755
index 0000000..7490488
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExHostAppServices.h
@@ -0,0 +1,125 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _EX_HOSTAPPSERVICES_H_
+#define _EX_HOSTAPPSERVICES_H_
+
+#include "TD_PackPush.h"
+
+#include "DbHostAppServices.h"
+#include "HatchPatternManager.h"
+#include "StaticRxObject.h"
+#include "DbDatabaseReactor.h"
+#include "Gi/TtfDescriptor.h"
+
+#define STL_USING_MAP
+#include "OdaSTL.h"
+
+#include "ExPrintConsole.h"
+
+typedef OdArray<OdTtfDescriptor> mapTrueTypeFont;
+
+/** \details
+  This class implements platform-dependent operations and progress metering.
+  <group ExServices_Classes> 
+  Library: Source code provided. 
+*/
+class ExHostAppServices : public OdDbHostAppServices2, public OdDbHostAppProgressMeter
+{
+  // MKU 06/17/05 - This optimization is obsolete. But it can be reason of bug 
+  //                  when old database is found by name instead of creating anew.
+  /*
+  class DwgCollection : public OdStaticRxObject<OdDbDatabaseReactor>
+  {
+    std::map<OdString, OdDbDatabase*> m_loadedDwgs;
+    void goodbye(const OdDbDatabase* pDb);
+  public:
+    OdDbDatabase* lookUp(const OdString& keyFileName);
+    void add(OdDbDatabase* pDb);
+  }         m_dwgCollection;
+  */
+  
+  OdString  m_Prefix;
+  long      m_MeterLimit;
+  long      m_MeterCurrent;
+  long      m_MeterOld;
+  bool      m_disableOutput;
+//   mapTrueTypeFont m_mapTTF;
+//   OdMutex   m_TTFMapMutex;
+//   bool      m_bSysFontCollected;
+
+  OdHatchPatternManagerPtr m_patternManager;
+public:
+  ExHostAppServices();
+
+  OdDbHostAppProgressMeter* newProgressMeter();
+
+  void releaseProgressMeter(OdDbHostAppProgressMeter* pProgressMeter);
+
+#ifdef SWIG
+  void warning1(const OdString& ) { }
+#else
+  void warning(const char*, const OdString&) {}
+  TD_USING(OdDbHostAppServices2::warning); 
+#endif
+
+  // OdDbHostAppProgressMeter functions
+
+  void start(const OdString& displayString = OdString::kEmpty);
+
+  void stop();
+
+  void meterProgress();
+
+  void setLimit(int max);
+
+  bool ttfFileNameByDescriptor(const OdTtfDescriptor& description, OdString& filename);
+
+  /** \details
+    Controls display of this ProgressMeter.
+    \param disable [in]  Disables this ProgressMeter. 
+  */
+  void disableOutput(bool disable) { m_disableOutput = disable; }
+
+  /** \details
+    Sets the prefix for this ProgressMeter.
+    \param prefix [in]  Prefix for this ProgressMeter.
+  */
+  void setPrefix(const OdString& prefix) { m_Prefix = prefix; }
+
+  OdHatchPatternManager* patternManager();
+
+  OdDbDatabasePtr readFile(const OdString& filename,
+    bool allowCPConversion = false,
+    bool partialLoad = false,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    const OdPassword& password = OdPassword());
+
+  TD_USING(OdDbHostAppServices2::readFile);
+};
+
+#include "TD_PackPop.h"
+
+#endif
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExPrintConsole.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExPrintConsole.h
new file mode 100755
index 0000000..2b537b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExPrintConsole.h
@@ -0,0 +1,34 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _EX_PRINT_CONSOLE_H_
+#define _EX_PRINT_CONSOLE_H_
+
+typedef int (*PrintConsoleInsideFunc) (const wchar_t* fmt, ...);
+void odExSetPrintConsoleInsideFunc(PrintConsoleInsideFunc writeConsoleFunc);
+
+void odPrintConsoleString(const wchar_t* fmt, ...);
+void odPrintErrorString(const wchar_t* fmt, ...);
+
+#endif // _EX_PRINT_CONSOLE_H_
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExSystemServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExSystemServices.h
new file mode 100755
index 0000000..dc1ad9c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExSystemServices.h
@@ -0,0 +1,78 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef EXSYSTEMSERVICES_DEFINED
+#define EXSYSTEMSERVICES_DEFINED
+
+#include "TD_PackPush.h"
+
+#include "DbSystemServices.h"
+
+
+/** \details
+  This class implements platform-dependent file operations for Teigha.
+  <group ExServices_Classes> 
+  Library: Source code provided. 
+*/
+class ExSystemServices : public OdDbSystemServices
+{
+public:
+  ExSystemServices();
+
+  OdStreamBufPtr createFile(
+    const OdString& filename,                            
+    Oda::FileAccessMode accessMode = Oda::kFileRead,  
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo, 
+    Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting);
+
+  bool accessFile(const OdString& filename, int accessMode);
+
+  OdInt64 getFileCTime(const OdString& filename);                 
+  OdInt64 getFileMTime(const OdString& filename);                 
+  OdInt64 getFileSize(const OdString& filename);
+
+  OdString formatMessage(unsigned int formatId, va_list* argList = 0);
+  
+  /** \details
+    Returns the system code page.
+    
+    \remarks
+    On Windows platforms system code page is initialized based on computer's
+    Regional Settings. On other platforms with CP_UNDEFINED.
+    It can be altered by setSystemCodePage()
+  */
+  OdCodePageId systemCodePage() const;
+  
+  /** \details
+    Sets the system code page.
+    \param codePage [in]  CodePage.
+  */
+  void setSystemCodePage(OdCodePageId id);
+
+protected:
+  OdCodePageId m_CodePageId;
+};
+
+#include "TD_PackPop.h"
+
+#endif	// EXSYSTEMSERVICES_DEFINED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExTtfFileNameByDescriptor.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExTtfFileNameByDescriptor.h
new file mode 100755
index 0000000..e1d147f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/ExTtfFileNameByDescriptor.h
@@ -0,0 +1,173 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODEX_TTF_FILE_NAME_BY_DESCRIPTO_H_
+#define ODEX_TTF_FILE_NAME_BY_DESCRIPTO_H_
+
+#include "Gi/TtfDescriptor.h"
+
+#define STL_USING_VECTOR
+#include "OdaSTL.h"
+
+inline bool exTtfFileNameByDescriptor(const OdTtfDescriptor& descr, OdString& fileName)
+{
+#if defined(_MSC_VER) && defined(_WIN32) && !defined(_WIN32_WCE) && !defined(_WINRT)
+  OdString sNonExactMatched;
+
+  OdString sFaceName = descr.typeface();
+
+  OSVERSIONINFO os;
+  os.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
+  ::GetVersionEx(&os);
+  OdString sName;
+  sName.format(OD_T("Software\\Microsoft\\Windows%ls\\CurrentVersion\\"),
+    (os.dwPlatformId & VER_PLATFORM_WIN32_NT)!=0 ? OD_T(" nt") : OD_T(""));
+
+  LONG nRes;
+  HKEY hFontSubstitutes;
+  
+  DWORD nDataSize;
+  nRes = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, sName + OD_T("FontSubstitutes\\"), 0, KEY_READ, &hFontSubstitutes);
+  if (hFontSubstitutes)
+  {
+    OdString sValueName;
+    sValueName.format(OD_T("%ls,%d"), descr.typeface().c_str(), descr.charSet());
+    nRes = ::RegQueryValueEx(hFontSubstitutes, sValueName, NULL, NULL, NULL, &nDataSize);
+    if(nRes == ERROR_SUCCESS)
+    {
+      LPBYTE lpData = (LPBYTE)malloc(nDataSize);
+      nRes = ::RegQueryValueEx(hFontSubstitutes, sValueName, NULL, NULL, lpData, &nDataSize);
+      sFaceName = (LPCTSTR)lpData;
+      free(lpData);
+      int n = sFaceName.find(',');
+      if(n>0)
+      {
+        sFaceName = sFaceName.left(n);
+      }
+    }
+    nRes = ::RegCloseKey(hFontSubstitutes);
+  }
+
+  HKEY hFonts;
+  ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, sName + OD_T("Fonts\\"), 0, KEY_READ, &hFonts);
+  if (hFonts)
+  {
+    DWORD nIndex = 0;
+    DWORD nValNameSize = 20;
+    nDataSize = odmax(fileName.getLength(), 20);
+    int n_BT = sFaceName.replace(OD_T(" BT"), OD_T(" "));
+    for(;;)
+    {
+      OdString sValueName;
+      do
+      {
+        std::vector<TCHAR> lpValName(nValNameSize);
+        std::vector<BYTE> lpData(nDataSize);
+        nRes = ::RegEnumValue(hFonts, nIndex, &lpValName[0], &nValNameSize, NULL, NULL, &lpData[0], &nDataSize);
+        if (nRes == ERROR_MORE_DATA)
+        {
+          nValNameSize += 20;
+        }
+        else if (nRes == ERROR_SUCCESS)
+        {
+          sValueName = &lpValName[0];
+          fileName = (LPCTSTR)&lpData[0];
+        }
+        else 
+        {
+          sValueName.empty();
+          fileName.empty();
+        }
+      }
+      while (nRes == ERROR_MORE_DATA);
+
+      if (nRes == ERROR_SUCCESS)
+      {
+        ++nIndex;
+        nValNameSize = sValueName.getLength();
+        nDataSize = fileName.getLength();
+        if(sValueName.replace(OD_T("(TrueType)"), OD_T(""))) // is TrueType font?
+        {
+          if(sValueName.replace(OD_T(" BT"), OD_T(""))==n_BT)
+          {
+            bool bBold = false;
+            if(n_BT)
+            {
+              sValueName.replace(OD_T(" Extra Bold "), OD_T(" XBd "));
+            }
+            else
+            {
+              if(sValueName.find(OD_T(" Extra Bold "))==-1)
+                bBold = (sValueName.replace(OD_T(" Bold "), OD_T(" "))!=0);
+            }
+            
+            bool bItalic = (sValueName.replace(OD_T(" Italic "), OD_T(" "))!=0);
+            sValueName.remove(' ');
+            sFaceName.remove(' ');
+            if(sValueName==sFaceName)
+            {
+              sNonExactMatched = fileName;
+              if(descr.isBold()==bBold && descr.isItalic()==bItalic)
+                break;
+            }
+            if ( sValueName.find((sFaceName+L"&").c_str()) != -1 ||
+              sValueName.find((L"&"+sFaceName).c_str()) != -1 )
+            {
+              sNonExactMatched = fileName;
+              break;
+            }
+          }
+        }
+      }
+      else
+      {
+        fileName = sNonExactMatched;
+        break;
+      }
+    }
+    ::RegCloseKey(hFonts);
+  }
+  if ( !fileName.isEmpty() )
+  {
+    if ( fileName.find(L'\\') == -1 )
+    {
+      OdString testpath;
+      int nLen = ::GetWindowsDirectory(NULL, 0);
+      if(nLen)
+      {
+        OdChar* szWinDir = testpath.getBufferSetLength(nLen);
+        nLen = ::GetWindowsDirectoryW((LPWSTR)szWinDir, nLen);
+        testpath.releaseBuffer();
+
+        testpath += OD_T("\\fonts\\");
+        fileName = testpath + fileName;
+      }
+    }
+  }
+  if ( !fileName.isEmpty() )
+    return true;
+#endif
+  return false;
+}
+
+#endif // ODEX_TTF_FILE_NAME_BY_DESCRIPTO_H_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/OdFileBuf.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/OdFileBuf.h
new file mode 100755
index 0000000..38fe6a4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/OdFileBuf.h
@@ -0,0 +1,598 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef ODFILEBUF_DEFINED
+#define ODFILEBUF_DEFINED
+
+#include "TD_PackPush.h"
+#include "OdaCommon.h"
+
+#if defined(ODA_WINDOWS) && !defined(_WINRT)
+
+#include "OdStreamBuf.h"
+#include "RxObjectImpl.h"
+#include "OdString.h"
+#include "RxSystemServices.h"
+
+class OdBaseFileBuf;
+
+/** \remarks
+  This template class is a specialization of the OdSmartPtr class for OdBaseFileBuf object pointers.
+*/
+typedef OdSmartPtr<OdBaseFileBuf> OdBaseFileBufPtr;
+
+/** \details
+  This class is the base file I/O class.
+  \sa
+  Source code provided.
+  <group ExServices_Classes>
+*/
+class OdBaseFileBuf: public OdRxObjectImpl<OdStreamBuf>
+{
+private:
+  bool m_bError;
+protected:
+  inline void enableErrorMode(bool bEnable = true)
+  {
+    m_bError = bEnable;
+  }
+
+  inline bool errorModeEnabled()
+  {
+    return m_bError;
+  }
+
+  inline void throwOdError(const OdError &pError)
+  {
+    enableErrorMode(true);
+    throw pError;
+  }
+
+protected:
+  HANDLE    m_hFile;
+  OdString  m_sFileName;
+  int       m_iFileShare;
+  bool      m_bFileWritten;
+
+  OdBaseFileBuf()
+  {
+    m_hFile = INVALID_HANDLE_VALUE;
+    m_iFileShare = 0;
+    m_bFileWritten = false;
+    m_bError = false;
+  }
+
+public:
+  /** \details
+    Opens the specified file with this StreamBuf object.
+    \param filename [in]  Filename.
+    \param shareMode [in]  Share mode.
+    \param accessMode [in]  Access mode.
+    \param creationDisposition [in]  Creation disposition.
+  */
+  virtual void open(const OdString& filename,
+    Oda::FileShareMode shareMode,
+    Oda::FileAccessMode accessMode,
+    Oda::FileCreationDisposition creationDisposition);
+#ifndef TD_UNICODE
+  virtual void open(const OdCharW* filename,
+    Oda::FileShareMode shareMode,
+    Oda::FileAccessMode accessMode,
+    Oda::FileCreationDisposition creationDisposition);
+#endif
+
+  /** \details
+    Closes the file opened by this StreamBuf object.
+  */
+  virtual void close();
+
+  /** \details
+    Returns the name of the file associated with this StreamBuf object.
+  */
+  virtual OdString fileName() { return m_sFileName; }
+
+  /** \details
+    Returns the share mode of this StreamBuf object.
+  */
+  virtual OdUInt32 getShareMode() { return OdUInt32(m_iFileShare); }
+
+  /** \details
+    Returns the length in bytes of the file associated with
+    this StreamBuf object.
+  */
+  virtual OdUInt64 length();
+
+  /** \details
+    Moves the current position of the file pointer for
+    this StreamBuf object to the specified location.
+
+    \param offset [in]  Number of bytes.
+    \param seekType [in]  Seek type.
+
+    \remarks
+    seekType must be one of the following:
+
+    <table>
+    Name                    Value       Description.
+    OdDb::kSeekFromStart    SEEK_SET    Start of file.
+    OdDb::kSeekFromCurrent  SEEK_CUR    Current position of file pointer.
+    OdDb::kSeekFromEnd      SEEK_END    End of file.
+    </table>
+  */
+  virtual OdUInt64 seek(OdInt64 offset, OdDb::FilerSeekType seekType);
+
+  /** \details
+    Returns the current position of the file pointer for
+    this StreamBuf object.
+  */
+  virtual OdUInt64 tell();
+
+  /** \details
+    Returns true if and only if the current position of the file pointer for
+    this StreamBuf object is at the end of file.
+  */
+  virtual bool isEof();
+
+  /** \details
+    Returns the byte at the current position of the file pointer
+    for this StreamBuf object, and increments the pointer.
+  */
+  virtual OdUInt8 getByte();
+
+  /** \details
+    Returns the specified number of bytes, starting at the current position of the file pointer
+    for this StreamBuf object, and increments the pointer by numBytes.
+    \param buffer [in]  Character buffer.
+    \param numBytes [in]  Number of bytes.
+  */
+  virtual void getBytes(void* buffer, OdUInt32 numBytes);
+
+  /** \details
+    Writes the byte to the current position of the file pointer
+    for this StreamBuf object, and increments the pointer.
+    \param value [in]  Byte to write.
+  */
+  virtual void putByte(OdUInt8 value);
+
+  /** \details
+    Writes the specified number of bytes, starting at the current position of the file pointer
+    for this StreamBuf object, and increments the pointer by numBytes.
+    \param buffer [in]  Character buffer.
+    \param numBytes [in]  Number of bytes.
+  */
+  virtual void putBytes(const void* buffer, OdUInt32 numBytes);
+
+  /** \details
+    Sets the physical file size for the specified file associated with this 
+    StreamBuf object to the current position of the file pointer.
+  */
+  virtual void truncate();
+
+   /** \details
+    Copies the specified bytes from this StreamBuf object to the specified StreamBuf object.
+    \param pDestination [in]  Pointer to the StreamBuf object to receive the data.
+    \param sourceStart [in]  Starting position of the file pointer of this StreamBuf object.
+    \param sourceEnd [in]  Ending position of the file pointer of this StreamBuf object.
+    \remarks
+    Bytes are copied from sourceStart to sourceEnd inclusive.
+   */
+ virtual void copyDataTo(OdStreamBuf* pDestination, OdUInt64 sourceStart, OdUInt64 sourceEnd);
+};
+
+class OdRdFileBuf;
+
+/** \remarks
+  This template class is a specialization of the OdSmartPtr class for OdRdFileBuf object pointers.
+*/
+typedef OdSmartPtr<OdRdFileBuf> OdRdFileBufPtr;
+
+/** \details
+  This class implements file input.
+  \sa
+  Source code provided.
+  <group ExServices_Classes>
+*/
+class OdRdFileBuf : public OdBaseFileBuf
+{
+  OdRdFileBuf(const OdRdFileBuf& source);
+  OdRdFileBuf& operator = (const OdRdFileBuf& source);
+
+protected:
+  HANDLE      m_hFileMap;
+  LPVOID      m_pFileMap;
+  ULARGE_INTEGER  m_ulSize;
+  ULARGE_INTEGER  m_ulPos;
+
+  /*!DOM*/
+  inline bool memBufferUsed() const { return m_pFileMap != 0; }
+
+public:
+  OdRdFileBuf(const OdString& filename)
+  {
+    m_hFileMap = INVALID_HANDLE_VALUE;
+    m_pFileMap = NULL;
+    m_ulSize.QuadPart = 0;
+    m_ulPos.QuadPart = 0;
+
+    open(filename);
+  }
+
+  /** \details
+    \param filename [in]  Filename.
+    \param shareMode [in]  Share mode.
+    \param accessMode [in]  Access mode.
+    \param creationDisposition [in]  Creation disposition.
+    \remarks
+    Opens filename if specified.
+  */
+  OdRdFileBuf(
+    const OdString& filename,
+    Oda::FileShareMode shareMode,
+    Oda::FileAccessMode accessMode,
+    Oda::FileCreationDisposition creationDisposition)
+  {
+    m_hFileMap = INVALID_HANDLE_VALUE;
+    m_pFileMap = NULL;
+    m_ulSize.QuadPart = 0;
+    m_ulPos.QuadPart = 0;
+
+    open(filename, shareMode, accessMode, creationDisposition);
+  }
+
+  OdRdFileBuf();
+
+  ~OdRdFileBuf() { close(); }
+
+  /** \param filename [in]  Filename.
+    \param shareMode [in]  Share mode.
+    \param accessMode [in]  Access mode.
+    \param creationDisposition [in]  Creation disposition.
+    \remarks
+    Opens filename if specified.
+  */
+  static OdRdFileBufPtr createObject()
+  {
+    return OdRdFileBufPtr(new OdRdFileBuf(), kOdRxObjAttach);
+  }
+
+  static OdRdFileBufPtr createObject(
+    const OdString& filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyWrite,
+    Oda::FileAccessMode accessMode = Oda::kFileRead,
+    Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting)
+  {
+    return OdRdFileBufPtr(new OdRdFileBuf(filename, shareMode, accessMode, creationDisposition), kOdRxObjAttach);
+  }
+
+  virtual void open(const OdString& filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyWrite,
+    Oda::FileAccessMode accessMode = Oda::kFileRead,
+    Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting);
+#ifndef TD_UNICODE
+  virtual void open(const OdCharW* filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyWrite,
+    Oda::FileAccessMode accessMode = Oda::kFileRead,
+    Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting);
+#endif
+
+  virtual void close();
+
+  virtual OdUInt64 length();
+  virtual OdUInt64 seek(OdInt64 offset, OdDb::FilerSeekType seekType);
+  virtual OdUInt64 tell();
+  virtual bool isEof();
+  virtual OdUInt8 getByte();
+  virtual void getBytes(void* buffer, OdUInt32 numBytes);
+  virtual void putByte(OdUInt8 value);
+  virtual void putBytes(const void* buffer, OdUInt32 numBytes);
+  virtual void truncate();
+
+  virtual void copyDataTo(OdStreamBuf* pDestination, OdUInt64 sourceStart, OdUInt64 sourceEnd);
+};
+
+#define WRITING_BUFFER_LENGTH 1024*8
+class OdWrFileBuf;
+
+/** \remarks
+  This template class is a specialization of the OdSmartPtr class for OdWrFileBuf object pointers.
+*/
+typedef OdSmartPtr<OdWrFileBuf> OdWrFileBufPtr;
+
+/** \details
+  This class implements file output.
+  \sa
+  Source code provided.
+  <group ExServices_Classes>
+*/
+class OdWrFileBuf : public OdBaseFileBuf
+{
+  OdWrFileBuf(const OdWrFileBuf& source);
+  OdWrFileBuf& operator = (const OdWrFileBuf& source);
+  OdUInt8 m_pBuffer[WRITING_BUFFER_LENGTH+1]; // +1 is to suppress /analyse false positive
+  OdUInt32 m_nBufferedSize;
+  inline void flush()
+  {
+    if ( m_nBufferedSize == 0 )
+      return;
+    OdBaseFileBuf::putBytes(m_pBuffer, m_nBufferedSize);
+    m_nBufferedSize = 0;
+  }
+
+public:
+
+  /** \details
+    \param filename [in]  Filename.
+    \param shareMode [in]  Share mode.
+    \param accessMode [in]  Access mode.
+    \param creationDisposition [in]  Creation disposition.
+    \remarks
+    Opens filename if specified.
+  */
+  OdWrFileBuf(const OdString& filename):m_nBufferedSize(0) { open(filename); }
+  OdWrFileBuf(
+    const OdString& filename,
+    Oda::FileShareMode shareMode,
+    Oda::FileAccessMode accessMode,
+    Oda::FileCreationDisposition creationDisposition):m_nBufferedSize(0)
+  {
+    open(filename, shareMode, accessMode, creationDisposition);
+  }
+
+  OdWrFileBuf();
+
+  ~OdWrFileBuf();
+
+  /** \param filename [in]  Filename.
+    \param shareMode [in]  Share mode.
+    \param accessMode [in]  Access mode.
+    \param creationDisposition [in]  Creation disposition.
+    \remarks
+    Opens filename if specified.
+  */
+  static OdWrFileBufPtr createObject()
+  {
+    return OdWrFileBufPtr(new OdWrFileBuf(), kOdRxObjAttach);
+  }
+  static OdWrFileBufPtr createObject(const OdString& filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    Oda::FileAccessMode accessMode = Oda::kFileWrite,
+    Oda::FileCreationDisposition creationDisposition = Oda::kCreateAlways)
+  {
+    return OdWrFileBufPtr(new OdWrFileBuf(filename, shareMode, accessMode, creationDisposition), kOdRxObjAttach);
+  }
+
+  virtual void close();
+  virtual OdUInt64 seek(OdInt64 offset, OdDb::FilerSeekType seekType);
+  virtual void copyDataTo(OdStreamBuf* pDestination, OdUInt64 sourceStart, OdUInt64 sourceEnd);
+  virtual OdUInt64 tell();
+  virtual OdUInt64 length();
+
+  virtual void putByte(OdUInt8 value);
+  virtual void putBytes(const void* buffer, OdUInt32 numBytes);
+  virtual OdUInt8 getByte();
+  virtual void getBytes(void* buffer, OdUInt32 numBytes);
+
+  virtual void open(const OdString& filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    Oda::FileAccessMode accessMode = Oda::kFileWrite,
+    Oda::FileCreationDisposition creationDisposition = Oda::kCreateAlways);
+#ifndef TD_UNICODE
+  virtual void open(const OdCharW* filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    Oda::FileAccessMode accessMode = Oda::kFileWrite,
+    Oda::FileCreationDisposition creationDisposition = Oda::kCreateAlways);
+#endif
+};
+
+#else // #ifdef WIN32
+
+#include <stdio.h>
+#include <memory>
+#include "DbSystemServices.h"
+#include "OdString.h"
+#include "RxObjectImpl.h"
+
+#define ERR_VAL ((OdUInt64)-1)
+
+/** <group ExServices_Classes>
+*/
+class FileToRemoveOnClose
+{
+  char* fName;
+public:
+  void setFileName(const char* fileName)
+  {
+    free(fName);
+    fName = (char*)malloc(strlen(fileName)+1);
+    strcpy(fName, fileName);
+  }
+  FileToRemoveOnClose():fName(NULL){ }
+  ~FileToRemoveOnClose()
+  { 
+    if ( fName && strlen(fName)>0 )
+    {
+#ifdef OD_HAVE_REMOVE_FUNC
+      remove(fName);
+#else
+      DeleteFile(OdString(fName).c_str());
+#endif
+    }
+    free(fName);
+  }
+};
+
+class OdBaseFileBuf : public OdRxObjectImpl<OdStreamBuf>
+{
+  OdBaseFileBuf(const OdBaseFileBuf&);
+  OdBaseFileBuf& operator = (const OdBaseFileBuf&);
+  std::auto_ptr< FileToRemoveOnClose > m_pFtr;
+
+public:
+          OdBaseFileBuf();
+  virtual ~OdBaseFileBuf(){ close(); };
+
+  virtual void      open(
+    const OdString& filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    Oda::FileAccessMode accessMode = Oda::FileAccessMode(Oda::kFileRead | Oda::kFileWrite),
+    Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting);
+
+         virtual void      close();
+  inline virtual OdString  fileName()     { return m_FileName; }
+         virtual OdUInt8   getByte();
+         virtual void      getBytes(void* buffer, OdUInt32 numBytes);
+         virtual void      putByte(OdUInt8 value);
+         virtual void      putBytes(const void* buffer, OdUInt32 numBytes);
+  inline virtual OdUInt64  length()       { return m_length; };
+//         virtual OdUInt64  length();
+  inline virtual OdUInt32  getShareMode() { return (OdUInt32)m_shMode; };
+  inline virtual OdUInt64  tell()         { return m_position; };
+  inline virtual bool      isEof()        { return (m_position >= m_length); };
+         virtual OdUInt64  seek(OdInt64 offset, OdDb::FilerSeekType seekType);
+         virtual void      truncate();
+
+protected:
+  FILE *              m_fp;
+  OdString            m_FileName;
+  OdUInt64            m_length;
+  OdUInt64            m_position;
+  Oda::FileShareMode  m_shMode;
+  bool                m_prevWasRead;
+
+  void Unlink(const char* fileName){ m_pFtr->setFileName(fileName); }
+};
+
+class OdWrFileBuf;
+typedef OdSmartPtr<OdWrFileBuf> OdWrFileBufPtr;
+
+class OdWrFileBuf : public OdBaseFileBuf
+{
+  OdWrFileBuf(const OdWrFileBuf& source);
+  OdWrFileBuf& operator = (const OdWrFileBuf& source);
+
+public:
+  OdWrFileBuf(const OdString& filename) { open(filename); }
+  OdWrFileBuf(const OdString& filename, Oda::FileShareMode shareMode) { open(filename, shareMode); }
+  OdWrFileBuf(const OdString& filename, Oda::FileShareMode shareMode, Oda::FileAccessMode accessMode, Oda::FileCreationDisposition creationDisposition) 
+  { 
+    open(filename, shareMode, accessMode, creationDisposition); 
+  }
+  OdWrFileBuf(){};
+  ~OdWrFileBuf(){ close(); };
+
+  static OdWrFileBufPtr createObject()
+  {
+    return OdWrFileBufPtr(new OdWrFileBuf(), kOdRxObjAttach);
+  }
+  static OdWrFileBufPtr createObject(const OdString& filename, Oda::FileShareMode shareMode = Oda::kShareDenyNo)
+  {
+    return OdWrFileBufPtr(new OdWrFileBuf(filename, shareMode), kOdRxObjAttach);
+  }
+
+  virtual void open(const OdString& filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    Oda::FileAccessMode accessMode = Oda::kFileWrite,
+    Oda::FileCreationDisposition creationDisposition = Oda::kCreateAlways);
+};
+
+
+#define NUM_BUFFERS 8
+
+class OdRdFileBuf;
+typedef OdSmartPtr<OdRdFileBuf> OdRdFileBufPtr;
+
+class OdRdFileBuf : public OdBaseFileBuf
+{
+  OdRdFileBuf(const OdRdFileBuf&);
+  OdRdFileBuf& operator = (const OdRdFileBuf&);
+
+public:
+  OdRdFileBuf(const OdString& filename) : m_Counter(0L) { init(); open(filename); }
+  OdRdFileBuf(const OdString& filename, Oda::FileShareMode shareMode) : m_Counter(0L)
+  {
+    init();
+    open(filename, shareMode);
+  }
+  OdRdFileBuf(const OdString& filename, Oda::FileShareMode shareMode, Oda::FileAccessMode accessMode, Oda::FileCreationDisposition creationDisposition) : m_Counter(0L)
+  {
+    init();
+    open(filename, shareMode, accessMode, creationDisposition);
+  }
+  OdRdFileBuf();
+  static OdRdFileBufPtr createObject()
+  {
+    return OdRdFileBufPtr(new OdRdFileBuf(), kOdRxObjAttach);
+  }
+  static OdRdFileBufPtr createObject(const OdString& filename, Oda::FileShareMode shareMode = Oda::kShareDenyNo)
+  {
+    return OdRdFileBufPtr(new OdRdFileBuf(filename, shareMode), kOdRxObjAttach);
+  }
+  ~OdRdFileBuf(){ close(); };
+
+  virtual void open(
+    const OdString& filename,
+    Oda::FileShareMode shareMode = Oda::kShareDenyNo,
+    Oda::FileAccessMode accessMode = Oda::kFileRead,
+    Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting);
+
+  virtual void close();
+
+  virtual OdUInt64  seek(OdInt64 offset, OdDb::FilerSeekType seekType);
+  virtual OdUInt64  tell();
+  virtual bool      isEof();
+  virtual OdUInt8   getByte();
+  virtual void      getBytes(void* buffer, OdUInt32 numBytes);
+  virtual void      putByte(OdUInt8 value) { ODA_FAIL();  throw OdError(eNotApplicable); };
+  virtual void      putBytes(const void* buffer, OdUInt32 numBytes) { ODA_FAIL();  throw OdError(eNotApplicable); };
+  virtual void      truncate();
+
+protected:
+  struct blockstru
+  {
+    OdUInt8*  buf;        /* this buffer */
+    OdUInt64  startaddr;  /* address from which it came in the file */
+    int       validbytes; /* number of valid bytes it holds */
+    OdInt32   counter;    /* least recently used counter */
+  };
+
+  OdUInt64  m_PhysFilePos; /* where the file pointer is */
+  OdUInt64  m_BufPos;      /* position from which buf was filled */
+  int       m_BytesLeft;   /* bytes left in buf */
+  int       m_BufBytes;    /* valid bytes read into buffer */
+  OdUInt8*  m_pNextChar;   /* pointer to next char in buffer */
+  OdUInt8*  m_pCurBuf;     /* pointer to the buffer currently being used */
+  int       m_UsingBlock;  /* which block is currently in use */
+  struct blockstru         /* the data being held */
+            m_DataBlock[NUM_BUFFERS];
+
+  static const int m_BufSize; /* size of each read buffer */
+  static const int  m_PosMask; /* mask to allow position check */
+  OdInt32    m_Counter;
+
+  bool filbuf();
+  void init();
+};
+
+#endif // #ifdef WIN32
+#include "TD_PackPop.h"
+#endif // ODFILEBUF_DEFINED
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/StdAfx.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/StdAfx.h
new file mode 100755
index 0000000..eb15e29
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/StdAfx.h
@@ -0,0 +1,23 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+#include "OdaCommon.h"
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaAppServices.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaAppServices.h
new file mode 100755
index 0000000..214bf07
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaAppServices.h
@@ -0,0 +1,47 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#include <OdaCommon.h>
+#include <DbDatabase.h>
+#include <DbSystemServices.h>
+#include "ExHostAppServices.h"
+#include "ExSystemServices.h"
+
+class iOdaAppServices : public ExSystemServices, public ExHostAppServices {
+	
+public:
+	
+	static iOdaAppServices* getInstance();
+	virtual ~iOdaAppServices();
+	
+	void addRef();
+	void release();
+	
+protected:
+	
+	iOdaAppServices();
+	
+private:
+	OdMutex mutex;
+	int mCnt;
+};
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaApplication.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaApplication.h
new file mode 100755
index 0000000..5c69206
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iOdaApplication.h
@@ -0,0 +1,56 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#import <Foundation/NSObject.h>
+#import <UIKit/UIKit.h>
+
+@interface iOdaApplication : NSObject {	
+};
+
+
+	/**
+	 * Destructor
+	 */
+	- (void) dealloc;
+	
+	/**
+	 * Returns instance
+	 */
+	 + (iOdaApplication*) getInstance;
+	
+	/**
+	 * Initialize
+	 */
+	- (void) appInitialize;
+	
+	/**
+	 * Uninitialize
+	 */
+	- (void) appUninitialize;
+	
+	/**
+	 *
+	 */
+    - (void) odWriteEx: (NSString*)filePath;
+
+@end;
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iStrConv.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iStrConv.h
new file mode 100755
index 0000000..7bb2931
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/ShapeTool/iStrConv.h
@@ -0,0 +1,30 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+#import <UIKit/UIKit.h>
+
+#include <OdaCommon.h>
+#include <OdString.h>
+
+OdString NSString2OdString(NSString *nsStr);
+NSString *OdString2NSString(const OdString &str);
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.h
new file mode 100755
index 0000000..47e98a1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.h
@@ -0,0 +1,81 @@
+//
+//  DwgViewController.h
+//  iOdaApp
+//
+//  Created by Irina Bezruk on 03/11/15.
+//  Copyright © 2015 ODA. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <GLKit/GLKit.h>
+
+#include <OdaCommon.h>
+#include <Gs/Gs.h>
+#include <DbDatabase.h>
+#include <GiContextForDbDatabase.h>
+#include <DbGsManager.h>
+
+typedef NS_ENUM(NSInteger, ShapeType) {
+    ShapeTypePass = 0,                  //符合背景图,无语音,无照片,无文字
+    ShapeTypePassOk,                    //有文字:符合
+    ShapeTypePassPhoto,                 //有照片
+    ShapeTypePassPhotoOk,               //有照片,有文字:符合
+    ShapeTypePassSound,                 //有语音
+    ShapeTypePassPhotoSoundOk,          //有语音,有照片,有文字:符合
+    ShapeTypeUnPass,                    //不符合背景图,无语音,无照片,无文字
+    ShapeTypeUnPassOk,                  //有文字:不符合
+    ShapeTypeUnPassPhoto,               //有照片
+    ShapeTypeUnPassPhotoOk,             //有照片,有文字:不符合
+    ShapeTypeUnPassSound,               //有语音
+    ShapeTypeUnPassPhotoSound,          //有语音,有照片
+};
+
+
+@interface DwgViewController : GLKViewController
+{
+    GLint backingWidth;
+    GLint backingHeight;
+    CGFloat prevAngleRad;
+    CGPoint prevPanPoint;
+    CGFloat prevScale;
+    
+    OdGsDevicePtr gsDevice;
+    OdDbDatabasePtr pDb;
+}
+@property (nonatomic, strong) NSString *cadFileName;//dwg文件路径
+@property (nonatomic, strong) EAGLContext *glContext;
+@property (nonatomic, assign) double scale;//相对于初始状态下的放大缩小倍数
+
+@property (nonatomic, assign) BOOL enable;
+
+
+- (void)setupGL;
+- (void)handlePan:(UIPanGestureRecognizer *)recognizer;
+- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer;
+- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer;
+- (void)handleTap:(UITapGestureRecognizer *)recognizer;
+
+- (OdGePoint3d)toWCS: (CGFloat)x andY:(CGFloat) y;
+- (bool)viewCanRotate;
+
+/** 添加点击手势 */
+- (void)addTap;
+- (void)addLongTap;
+- (void)removeTap;
+- (void)removeLongTap;
+/** 复位 */
+- (void)zoomExtents;
+
+/** 检查是否有标注 0:没有 point为未转化的坐标*/
+- (int)picke:(CGPoint)point;
+
+/** 添加标注  point为未转化的坐标 */
+- (int)addShape:(CGPoint)point text:(NSString *)text type:(ShapeType)type;
+/** 修改 */
+- (int)alter:(int)currentID point:(CGPoint)point text:(NSString *)text type:(ShapeType)type;
+
+/** 删除 */
+- (void)deleteShape:(int)currentId;
+@property (nonatomic, assign) BOOL isDelete;
+@property (nonatomic, assign) CGPoint point;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.mm b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.mm
new file mode 100755
index 0000000..0f1465b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/DwgViewController.mm
@@ -0,0 +1,767 @@
+//
+//  DwgViewController.m
+//  iOdaApp
+//
+//  Created by Irina Bezruk on 03/11/15.
+//  Copyright © 2015 ODA. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "DwgViewController.h"
+#include <Gs/GsBaseVectorizer.h>
+#include <RxVariantValue.h>
+#include <RxDictionary.h>
+#include <ColorMapping.h>
+#include <AbstractViewPE.h>
+
+#import "iOdaAppServices.h"
+#import "iStrConv.h"
+
+#import "DbRasterImageDef.h"
+#import "DbBlockTableRecord.h"
+#import "DbDictionary.h"
+#import "DbRasterImage.h"
+#include "stdafx.h"
+#include "OdaCommon.h"
+
+@interface DwgViewController ()<UIGestureRecognizerDelegate>
+@property (nonatomic, strong) UITapGestureRecognizer * tap;
+@property (nonatomic, strong) UILongPressGestureRecognizer *longPressGR;
+
+@property (nonatomic, assign) int nid;
+@end
+
+@implementation DwgViewController
+
+@synthesize cadFileName;
+@synthesize glContext;
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view, typically from a nib.
+    [YJProgressHUD showProgress:@"正在加载..." inView:self.view];
+    UIButton *disBtn = [UIButton z_textButton:@"取消" boldFontSize:18 normalColor:IndicatedColor];
+    [disBtn addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside];
+    CGFloat y;
+    if (IS_IPHONE_X) {
+        y =20.f + 24.f;
+    }else {
+        y = 20.f;
+    }
+    disBtn.frame = CGRectMake(16, y, 40, 30);
+    [self.view addSubview:disBtn];
+    [self load];
+    
+}
+- (void)cancelAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+- (void)load {
+    NSLog(@"DwgViewController: %@", cadFileName);
+    backingWidth = 0;
+    backingHeight = 0;
+    prevAngleRad = 0.0;
+    prevScale = 1.0;
+    prevPanPoint = {0.0, 0.0};
+    self.scale = 1.0;
+    self.enable = YES;
+    self.glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 ];
+    
+    if (!self.glContext) {
+        NSLog(@"Failed to create OpenGL ES 2.0 context");
+    }
+    //  [EAGLContext setCurrentContext:self.glContext]; // VERY important! GL silently stops working without this
+    GLKView *view = (GLKView *)self.view;
+    view.context = self.glContext;
+    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
+    [self setupGL];
+    odgsInitialize();
+//    [self LoadCadFile];
+    [self LoadFile];
+    [self addGestureRecognizer];
+    //    [self addTap];
+    //    [self addLongTap];
+}
+- (void)addGestureRecognizer {
+    UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
+    pan.minimumNumberOfTouches = 1;
+    [self.view addGestureRecognizer:pan];
+    
+    UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
+    pinch.scale = 1.0;
+    pinch.enabled = YES;
+    pinch.cancelsTouchesInView = YES;
+    pinch.delaysTouchesEnded = YES;
+    [self.view addGestureRecognizer:pinch];
+    //    UIRotationGestureRecognizer * rotaion = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)];
+    //    rotaion.rotation = 0;
+    //    //    rotaion.enabled = YES;
+    //    //    rotaion.delaysTouchesEnded = YES;
+    //    //    rotaion.cancelsTouchesInView = YES;
+    //    [self.view addGestureRecognizer:rotaion];
+}
+
+- (void)setupGL
+{
+    [EAGLContext setCurrentContext:self.glContext];
+}
+
+- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
+{
+    if (gsDevice.isNull())
+        return;
+    // Set actual screen size for the generated geometry
+    [YJProgressHUD hide];
+    [self resizeGsDevice:rect];
+    // Draw geometry
+    gsDevice->invalidate();
+    gsDevice->update();
+    
+}
+
+
+-(void)resizeGsDevice: (CGRect)rect
+{
+    // Get size of our current window
+    if (((GLint)rect.size.width != backingWidth) ||
+        ((GLint)rect.size.height != backingHeight))
+    {
+        backingWidth = (GLint)rect.size.width;
+        backingHeight = (GLint)rect.size.height;
+        // Set the screen size for the generated geometry.
+        double scaleF = [[UIScreen mainScreen] scale];
+        //Plus 理想像素与实际像素比为1.15
+//        if (3 == scaleF) {
+//            scaleF /= 1.15;
+//        }
+        OdGsDCRect screenRect( OdGsDCPoint(0, self.view.frame.size.height*scaleF),
+                              OdGsDCPoint(self.view.frame.size.width*scaleF, 0) );
+        gsDevice->onSize(screenRect);
+    }
+}
+
+-(void)UninitOpenGLES
+{
+    if (!gsDevice.isNull())
+    {
+        // Release vectorizer and render buffers
+        gsDevice.release();
+    }
+}
+
+- (void)dealloc
+{
+    if ([EAGLContext currentContext] == self.glContext)
+    {
+        [EAGLContext setCurrentContext:nil];
+    }
+    
+    self.glContext = nil;
+    
+    // Uninitialize OpenGL context
+    [self UninitOpenGLES];
+    // Uninitialize GS
+    odgsUninitialize();
+    
+    ClearData();
+}
+
+
+- (OdGePoint3d)toWCS: (CGFloat)x andY:(CGFloat) y
+{
+    OdGePoint3d wcsPt((double)x, (double)y, 0.0);
+    const OdGsView* pView = gsDevice->viewAt(0);
+    if (pView->isPerspective())
+    {
+        wcsPt.z = pView->projectionMatrix()(2, 3);
+    }
+    wcsPt.transformBy((pView->screenMatrix() * pView->projectionMatrix()).inverse());
+    wcsPt.z =0.;
+    wcsPt.transformBy(OdAbstractViewPEPtr(pView)->eyeToWorld(pView));
+    return wcsPt;
+}
+
+- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
+    if (!self.enable) {
+        return;
+    }
+    CGPoint translation = [recognizer translationInView:self.view];
+    
+    OdGsView* pView = gsDevice->viewAt(0);
+    OdGeVector3d delta = [self toWCS:-translation.x andY:-translation.y] - [self toWCS:-prevPanPoint.x andY:-prevPanPoint.y];
+    delta.transformBy(pView->viewingMatrix());
+    pView->dolly(delta.x, delta.y, delta.z);
+    
+    prevPanPoint = translation;
+    if ([recognizer state] == UIGestureRecognizerStateEnded)
+    {
+        prevPanPoint = {0.0, 0.0};
+    }
+}
+
+
+- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer
+{
+    if (!self.enable) {
+        return;
+    }
+    if (!gsDevice.isNull())
+    {
+        OdGsView* pView = gsDevice->viewAt(0);
+        CGFloat scale = 1.0 - (prevScale - recognizer.scale);
+        //pView->zoom((double)(1.0 + (recognizer.scale - 1.0)/16.0));
+        pView->zoom((double)(scale));
+        prevScale = recognizer.scale;
+        if ([recognizer state] == UIGestureRecognizerStateEnded)
+        {
+            prevScale = 1.0;
+        }
+        self.scale /= (double)scale;
+        double revZoomScale = 1.0/scale;
+        
+        ZoomTag(pDb,  revZoomScale);
+    }
+}
+
+- (bool)viewCanRotate
+{
+    if (pDb.isNull())
+    {
+        return false;
+    }
+    return (pDb->getTILEMODE()) ? true : false;
+}
+
+
+- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer
+{
+    if (!self.enable) {
+        return;
+    }
+    CGFloat curAngleRad = recognizer.rotation;
+    
+    if (!gsDevice.isNull() && [self viewCanRotate])
+    {
+        OdGsView* pView = gsDevice->viewAt(0);
+        double angle = ((curAngleRad - prevAngleRad)/90)*180/OdaPI;
+        pView->roll(angle);
+        prevAngleRad = recognizer.rotation;
+        if ([recognizer state] == UIGestureRecognizerStateEnded)
+        {
+            prevAngleRad = 0.0;
+        }
+    }
+}
+
+
+-(BOOL) LoadCadFile
+{
+    BOOL rtn = false;
+    try
+    {
+        // Load file
+        pDb = iOdaAppServices::getInstance()->readFile(NSString2OdString(cadFileName));
+        if (pDb.isNull())
+        {
+            
+            // load database failed
+        }
+        else
+        {
+            // Create the rendering context.
+            OdGiContextForDbDatabasePtr pDwgContext = OdGiContextForDbDatabase::createObject();
+            // Create the custom rendering device and set the output stream for the device.
+            if (!gsDevice.isNull())
+            {
+                gsDevice.release();
+            }
+            if (gsDevice.isNull())
+            {
+                
+                NSString* adinitPath0 = [[NSBundle mainBundle]pathForResource:@"txt" ofType:@"shx"];
+                OdString adinitFile0 = iOdaAppServices::getInstance()->findFile([adinitPath0 cStringUsingEncoding:NSUTF8StringEncoding]);
+                
+                NSString* adinitPath1 = [[NSBundle mainBundle]pathForResource:@"hztxt" ofType:@"shx"];
+                OdString adinitFile1 = iOdaAppServices::getInstance()->findFile([adinitPath1 cStringUsingEncoding:NSUTF8StringEncoding]);
+                
+                OdDbTextStyleTablePtr pTextStyles = pDb->getTextStyleTableId().safeOpenObject(OdDb::kForWrite);
+                OdDbSymbolTableIteratorPtr itTextStyle = pTextStyles->newIterator();
+                OdDbTextStyleTableRecordPtr pTextStyle;
+                for (itTextStyle->start(); !itTextStyle->done(); itTextStyle->step())
+                {
+                    pTextStyle = itTextStyle->getRecord(OdDb::kForWrite);
+                    OdString oName = pTextStyle->getName();
+                    OdString oFileName = pTextStyle->fileName();
+                    OdString oBigFileName = pTextStyle->bigFontFileName();
+                    OdString  name = itTextStyle->getRecord()->getName();
+                    //			pTextStyle = itTextStyle->getRecord(OdDb::kForWrite);
+                    bool bShape = pTextStyle->isShapeFile();
+                    if (!bShape){
+                        pTextStyle->setFileName(adinitFile0);
+                        pTextStyle->setBigFontFileName(adinitFile1);
+                        //                 pTextStyle->setIsShapeFile(true);
+                        bShape = pTextStyle->isShapeFile();
+                    }
+                }
+//                ModifySteelSymbol(pDb->getModelSpaceId());
+                // Load graphics device module
+                OdGsModulePtr m = ::odrxDynamicLinker()->loadModule(OdWinGLES2ModuleName);
+                
+                // Create graphics device
+                gsDevice = m->createDevice();
+                // Prepare callbacks for WinOpenGL vectorizer
+                // m_protoCallback.m_pDelegate = self;
+                // Setup graphics device properties
+                OdRxDictionaryPtr pProps = gsDevice->properties();
+                if (!pProps.isNull())
+                {
+                    //TODO
+                }
+                else
+                {
+                    NSLog(@"\nCan't access device properties");
+                }
+            }
+            // Set the database to be vectorized.
+            pDwgContext->setDatabase(pDb);
+            pDwgContext->enableGsModel(true);
+            // Prepare the device to render the active layout in this database.
+            gsDevice = OdDbGsManager::setupActiveLayoutViews(gsDevice, pDwgContext);
+            // Setup device palette
+            if (OdGsPaperLayoutHelper::cast(gsDevice).isNull())
+            {
+                // ModelSpace
+                gsDevice->setLogicalPalette(::odcmAcadDarkPalette(), 256);
+                gsDevice->setBackgroundColor(ODRGB(0, 0, 0));
+                pDwgContext->setPaletteBackground(ODRGB(0, 0, 0));
+            }
+            else
+            {
+                gsDevice->setLogicalPalette(::odcmAcadLightPalette(), 256);
+                gsDevice->setBackgroundColor(ODRGB(173, 174, 173));
+                pDwgContext->setPaletteBackground(ODRGB(255, 255, 255));
+            }
+            // Setup rendering surface size
+            [self resizeGsDevice:self.view.frame];
+            OdAbstractViewPEPtr(gsDevice->viewAt(0))->zoomExtents(gsDevice->viewAt(0));
+            
+            // Layer must be set for WinGLES2 device
+            gsDevice->properties()->putAt(OD_T("EAGLContext"), OdRxVariantValue((OdIntPtr)self.glContext));
+        }
+    }
+    catch (int)
+    {
+        NSLog(@"\nNormal termination");
+    }
+    catch (const OdError& e)
+    {
+        printf("\nException Caught: %ls\n", e.description().c_str());
+    }
+    catch (...)
+    {
+        NSLog(@"\nUnknown Exception Caught\n");
+    }
+    return rtn;
+}
+
+-(BOOL) LoadFile
+{
+    BOOL rtn = false;
+    try
+    {
+        // Load file
+        NSString* tmp = [cadFileName pathExtension];
+        tmp = [ tmp lowercaseString];
+        tmp = [ tmp lowercaseString];
+        
+        if ([tmp isEqualToString:@"jpg"] ||
+            [tmp isEqualToString:@"png"] ||
+            [tmp isEqualToString:@"bmp"] ||
+            [tmp isEqualToString:@"jpeg"]){
+            
+            pDb = iOdaAppServices::getInstance()->createDatabase();
+            OdDbBlockTableRecordPtr pRecord = pDb->getActiveLayoutBTRId().safeOpenObject(OdDb::kForWrite) ;
+            OdDbObjectId imageDictId = OdDbRasterImageDef::createImageDictionary(pRecord->database());
+            OdDbDictionaryPtr pImageDict = imageDictId.safeOpenObject(OdDb::kForWrite);
+            // Create image definition
+            OdDbObjectId defId;
+            OdDbRasterImageDefPtr pDef = OdDbRasterImageDef::createObject();
+            pDef->setSourceFileName(NSString2OdString(cadFileName));
+            defId = pImageDict->setAt(OD_T("importedRasterImage"), pDef);
+            // Try to load raster image to found correct dimensions inside TD
+            OdDbRasterImageDefPtr pDefLoad = OdDbRasterImageDef::cast(defId.openObject(OdDb::kForWrite));
+            pDefLoad->load(false);
+            // Create and attach raster image reference
+            OdDbRasterImagePtr pRef = OdDbRasterImage::createObject();
+            pRef->setDatabaseDefaults(pDb);
+            pRef->setImageDefId(defId);
+            pRef->setOrientation(OdGePoint3d::kOrigin, OdGeVector3d::kXAxis, OdGeVector3d::kYAxis);
+            pRef->setDisplayOpt(OdDbRasterImage::kShow, true);
+            pRecord->appendOdDbEntity(pRef);
+            [self loadTheFile];
+            
+        }else{
+//                        UIView *view = [[UIView alloc]init];
+//                        view.backgroundColor = [UIColor blackColor];
+//                        [self.view addSubview:view];
+//                        [view mas_makeConstraints:^(MASConstraintMaker *make) {
+//                            make.edges.mas_equalTo(0);
+//                        }];
+            
+            dispatch_async(dispatch_get_global_queue(0, 0), ^{
+                pDb = iOdaAppServices::getInstance()->readFile(NSString2OdString(self.cadFileName));
+                dispatch_async(dispatch_get_main_queue(), ^{
+                    [self loadTheFile];
+                });
+            });
+            
+        }
+        
+        
+        //        if (pDb.isNull()){
+        //            // load database failed
+        //        }else{
+        //
+        //        }
+    }
+    catch (int)
+    {
+        NSLog(@"\nNormal termination");
+    }
+    catch (const OdError& e)
+    {
+        printf("\nException Caught: %ls\n", e.description().c_str());
+    }
+    catch (...)
+    {
+        NSLog(@"\nUnknown Exception Caught\n");
+    }
+    return rtn;
+}
+void ModifySteelSymbol(const OdDbObjectId &objectId)
+{
+    OdDbBlockTableRecordPtr pBlockTableRecord = objectId.safeOpenObject(OdDb::kForWrite);
+    
+    OdDbObjectIteratorPtr pEntIter = pBlockTableRecord->newIterator();
+    /********************************************************************/
+    for (; !pEntIter->done(); pEntIter->step())
+    {
+        OdDbObjectPtr pEntity = pEntIter->objectId().safeOpenObject(OdDb::kForWrite);
+        
+        if (pEntity->isKindOf(OdDbText::desc())){
+            OdDbTextPtr pOld = OdDbText::cast(pEntity);
+            OdString text = pOld->textString();
+            
+            bool bFind = false;
+            
+            for(int i=0;i<4;i++){
+                OdChar cE530 = 0xE530+i;
+                OdString sE530(" ");
+                OdString sE530New("%%130");
+                if(i==1)
+                    sE530New = "%%131";
+                else if(i==2)
+                    sE530New = "%%132";
+                else if(i==3)
+                    sE530New = "%%133";
+                
+                sE530.setAt(0, cE530);
+                if(text.find(cE530)>-1){
+                    text.replace(sE530, sE530New);
+                    bFind = true;
+                }
+            }
+            
+            if(bFind)
+                pOld->setTextString(text);
+        }
+        else if (pEntity->isKindOf(OdDbMText::desc())){
+            OdDbMTextPtr pOld = OdDbMText::cast(pEntity);
+            OdString text = pOld->contents();
+            
+            bool bFind = false;
+            
+            for(int i=0;i<4;i++){
+                OdChar cE530 = 0xE530+i;
+                OdString sE530(" ");
+                OdString sE530New("%%130");
+                if(i==1)
+                    sE530New = "%%131";
+                else if(i==2)
+                    sE530New = "%%132";
+                else if(i==3)
+                    sE530New = "%%133";
+                
+                sE530.setAt(0, cE530);
+                if(text.find(cE530)>-1){
+                    text.replace(sE530, sE530New);
+                    bFind = true;
+                }
+            }
+            
+            if(bFind)
+                pOld->setContents(text);
+        }
+        
+    }
+}
+- (void)loadTheFile{
+    // Create the rendering context.
+    OdGiContextForDbDatabasePtr pDwgContext = OdGiContextForDbDatabase::createObject();
+    // Create the custom rendering device and set the output stream for the device.
+    if (!gsDevice.isNull()){
+        gsDevice.release();
+    }
+    if (gsDevice.isNull()){
+        
+        
+        NSString* adinitPath0 = [[NSBundle mainBundle]pathForResource:@"txt" ofType:@"shx"];
+        OdString adinitFile0 = iOdaAppServices::getInstance()->findFile([adinitPath0 cStringUsingEncoding:NSUTF8StringEncoding]);
+        
+        NSString* adinitPath1 = [[NSBundle mainBundle]pathForResource:@"hztxt" ofType:@"shx"];
+        OdString adinitFile1 = iOdaAppServices::getInstance()->findFile([adinitPath1 cStringUsingEncoding:NSUTF8StringEncoding]);
+        
+        OdDbTextStyleTablePtr pTextStyles = pDb->getTextStyleTableId().safeOpenObject(OdDb::kForWrite);
+        OdDbSymbolTableIteratorPtr itTextStyle = pTextStyles->newIterator();
+        OdDbTextStyleTableRecordPtr pTextStyle;
+        for (itTextStyle->start(); !itTextStyle->done(); itTextStyle->step())
+        {
+            pTextStyle = itTextStyle->getRecord(OdDb::kForWrite);
+            OdString oName = pTextStyle->getName();
+            OdString oFileName = pTextStyle->fileName();
+            OdString oBigFileName = pTextStyle->bigFontFileName();
+            OdString  name = itTextStyle->getRecord()->getName();
+            //			pTextStyle = itTextStyle->getRecord(OdDb::kForWrite);
+            bool bShape = pTextStyle->isShapeFile();
+            if (!bShape){
+                pTextStyle->setFileName(adinitFile0);
+                pTextStyle->setBigFontFileName(adinitFile1);
+                //                 pTextStyle->setIsShapeFile(true);
+                bShape = pTextStyle->isShapeFile();
+            }
+        }
+//        ModifySteelSymbol(pDb->getModelSpaceId());
+        // Load graphics device module
+        OdGsModulePtr m = ::odrxDynamicLinker()->loadModule(OdWinGLES2ModuleName);
+        
+        // Create graphics device
+        gsDevice = m->createDevice();
+        // Prepare callbacks for WinOpenGL vectorizer
+        // m_protoCallback.m_pDelegate = self;
+        // Setup graphics device properties
+        OdRxDictionaryPtr pProps = gsDevice->properties();
+        if (!pProps.isNull())
+        {
+            //TODO
+        }
+        else
+        {
+            NSLog(@"\nCan't access device properties");
+        }
+    }
+    // Set the database to be vectorized.
+    pDwgContext->setDatabase(pDb);
+    pDwgContext->enableGsModel(true);
+    // Prepare the device to render the active layout in this database.
+    gsDevice = OdDbGsManager::setupActiveLayoutViews(gsDevice, pDwgContext);
+    // Setup device palette
+    if (OdGsPaperLayoutHelper::cast(gsDevice).isNull())
+    {
+        // ModelSpace
+        gsDevice->setLogicalPalette(::odcmAcadDarkPalette(), 256);
+        gsDevice->setBackgroundColor(ODRGB(0, 0, 0));
+        pDwgContext->setPaletteBackground(ODRGB(0, 0, 0));
+    }
+    else
+    {
+        gsDevice->setLogicalPalette(::odcmAcadLightPalette(), 256);
+        gsDevice->setBackgroundColor(ODRGB(173, 174, 173));
+        pDwgContext->setPaletteBackground(ODRGB(255, 255, 255));
+    }
+    // Setup rendering surface size
+    [self resizeGsDevice:self.view.frame];
+    OdAbstractViewPEPtr(gsDevice->viewAt(0))->zoomExtents(gsDevice->viewAt(0));
+    // Layer must be set for WinGLES2 device
+    gsDevice->properties()->putAt(OD_T("EAGLContext"), OdRxVariantValue((OdIntPtr)self.glContext));
+}
+/** 单击 */
+- (void)handleTap:(UITapGestureRecognizer *)recognizer {
+    if (!self.enable) {
+        return;
+    }
+    //点击点位置
+    CGPoint point = [recognizer locationInView:self.view];
+    
+    
+    [self addShape:point text:@"测试" type:ShapeTypePass];
+    
+}
+
+- (int)addShape:(CGPoint)point text:(NSString *)text type:(ShapeType)type {
+    float out1[3];
+    float out2[3];
+    OdGsViewPtr gsViewPtr = gsDevice->viewAt(0);
+    //ios视窗有个缩放比例
+    double scaleF = [[UIScreen mainScreen] scale];
+    ////Plus 理想像素与实际像素比为1.15
+    if (3 == scaleF) {
+        scaleF /= 1.15;
+    }
+    ScreenToWorld(gsViewPtr, 0, 0, out1);
+    ScreenToWorld(gsViewPtr, 100, 0, out2);
+    float size = fabs(out2[0]- out1[0]);
+    point.x *= scaleF;
+    point.y *= scaleF;
+    size *= scaleF;
+    
+    //屏幕坐标要转换为世界坐标
+    ScreenToWorld(gsViewPtr, point.x, point.y, out1);
+    
+    NSFileManager * fm = [NSFileManager defaultManager];
+    NSString* caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
+    NSString* fullFilePath = nil;
+    
+    
+    fullFilePath = [NSString stringWithFormat:@"%@/marker/%@", caches, [self nameWithType:type]];
+    
+    BOOL exsist = [fm fileExistsAtPath:fullFilePath];
+    if (!exsist) {
+        NSLog(@"addShpae:图片不存在");
+        return 0;
+    }
+    
+    OdString filepath = iOdaAppServices::getInstance()->findFile([fullFilePath cStringUsingEncoding:NSUTF8StringEncoding]);
+    
+    NSString* txtPath = [[NSBundle mainBundle]pathForResource:@"txt" ofType:@"shx"];
+    OdString oTxtPath = iOdaAppServices::getInstance()->findFile([txtPath cStringUsingEncoding:NSUTF8StringEncoding]);
+    
+    NSString* hzTxtPath = [[NSBundle mainBundle]pathForResource:@"hztxt" ofType:@"shx"];
+    OdString oHzTxtPath = iOdaAppServices::getInstance()->findFile([hzTxtPath cStringUsingEncoding:NSUTF8StringEncoding]);
+    if (text ==nil) {
+        text = @"";
+    }
+    OdString tex = NSString2OdString(text);
+    
+    //    OdString tex;
+    //    if (text.length) {
+    //        tex = NSString2OdString(text);
+    //    } else {
+    //        tex = "";
+    //    }
+    
+    //    int i = PickShapeByCursor(gsDevice->viewAt(0), pDb, point.x, point.y);
+    //    if (i) {
+    //        DeleteShape(pDb, i);
+    //    }
+    int nid = AddShape(pDb, oTxtPath, oHzTxtPath, out1[0], out1[1], size, filepath, tex, true);
+    return nid;
+}
+
+- (int)alter:(int)currentID point:(CGPoint)point text:(NSString *)text type:(ShapeType)type {
+    if (currentID) {
+        DeleteShape(pDb, currentID);
+    }
+    return  [self addShape:point text:text type:type];
+}
+
+- (void)deleteShape:(int)currentId {
+    if (currentId) {
+        DeleteShape(pDb, currentId);
+    }
+}
+
+- (NSString *)nameWithType:(ShapeType)type {
+    NSString * str = nil;
+    //    typedef NS_ENUM(NSInteger, ShapeType) {
+    //        ShapeTypePass = 0,                  //符合背景图,无语音,无照片,无文字
+    //        ShapeTypePassOk,                    //有文字:符合
+    //        ShapeTypePassPhoto,                 //有照片
+    //        ShapeTypePassPhotoOk,               //有照片,有文字:符合
+    //        ShapeTypePassSound,                 //有语音,有文字:符合
+    //        ShapeTypePassPhotoSoundOk,          //有语音,有照片,有文字:符合
+    //        ShapeTypeUnPass,                    //不符合背景图,无语音,无照片,无文字
+    //        ShapeTypeUnPassOk,                  //有文字:不符合
+    //        ShapeTypeUnPassPhoto,               //有照片
+    //        ShapeTypeUnPassPhotoOk,             //有照片,有文字:不符合
+    //        ShapeTypeUnPassSound,               //有语音,有文字:不符合
+    //        ShapeTypeUnPassPhotoSoundOk,        //有语音,有照片
+    //    };
+    
+    NSArray * imageNames = @[@"maker_pass",@"maker_pass_ok",@"maker_pass_p",@"maker_pass_pp",@"maker_pass_a",@"maker_pass_pa",@"maker_unpass",@"maker_unpass_ok",@"maker_unpass_p",@"maker_unpass_pp",@"maker_unpass_a",@"maker_unpass_pa"];
+    str = [NSString stringWithFormat:@"%@.png",imageNames[type]];
+    //    str = @"maker_pass.png";
+    return str;
+}
+
+- (void)zoomExtents {
+    double revZoomScale = 1.0 / self.scale;
+    
+    ZoomTag(pDb, revZoomScale);
+    
+    OdGsViewPtr pView = gsDevice->viewAt(0);
+    OdAbstractViewPEPtr(pView)->zoomExtents(pView);
+    self.scale = 1.0;
+}
+
+- (int)picke:(CGPoint)point {
+    double scaleF = [[UIScreen mainScreen] scale];
+    if (3 == scaleF) {
+        scaleF /= 1.15;
+    }
+    point.x *= scaleF;
+    point.y *= scaleF;
+    
+    return PickShapeByCursor(gsDevice->viewAt(0), pDb, point.x, point.y);
+}
+
+- (void)addLongTap{
+    self.longPressGR=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
+    
+    //设置手势需要的最小时间间隔
+    self.longPressGR.minimumPressDuration=1;
+    
+    //绑定手势到视图上
+    [self.view addGestureRecognizer:self.longPressGR];
+}
+- (void)removeLongTap{
+    [self.view removeGestureRecognizer:self.longPressGR];
+    self.longPressGR = nil;
+}
+-(void)longPress:(UILongPressGestureRecognizer *)gr{
+    self.point=[gr locationInView:self.view];
+    int nid = [self picke:self.point];
+    if (self.isDelete == YES || nid == 0) {
+        return;
+    }
+
+    self.isDelete = YES;
+    int currentId = [self picke:self.point];
+    [self deleteShape:currentId];
+    self.isDelete = NO;
+    
+}
+
+- (void)addTap {
+    [self.view addGestureRecognizer:self.tap];
+}
+- (void)removeTap {
+    [self.view removeGestureRecognizer:self.tap];
+    self.tap = nil;
+}
+- (UITapGestureRecognizer *)tap {
+    if (!_tap) {
+        _tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
+        _tap.numberOfTapsRequired = 1;
+        _tap.numberOfTouchesRequired = 1;
+        
+    }
+    return _tap;
+}
+#pragma mark-uiGestureRecognizerDelegate
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
+    return YES;
+}
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.cpp b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.cpp
new file mode 100755
index 0000000..85353ee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.cpp
@@ -0,0 +1,651 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2015, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2015 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// stdafx.cpp : source file that includes just the standard includes
+// OpenCAD.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// #ifdef _TOOLKIT_IN_DLL_
+
+
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2015, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2015 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// stdafx.cpp : source file that includes just the standard includes
+// OpenCAD.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+
+#include <map>
+#include <vector>
+
+std::map<int, OdDbObjectId> _mapId2Object;
+std::map<int, OdDbObjectId> _mapId2ObjectText;
+
+// #endif
+int addHatches(const OdDbObjectId& btrId, const OdString& textName, float w,
+	double x, double y, const OdDbObjectId& layerId,
+	const OdDbObjectId& shxStyleId, const OdDbObjectId& ttfStyleId,
+	bool bValidText) {
+	/**********************************************************************/
+	/* Open the BlockTableRecord                                          */
+	/**********************************************************************/
+	OdDbBlockTableRecordPtr bBTR = btrId.safeOpenObject(OdDb::kForWrite);
+
+	OdDbDatabase* pDb = btrId.database();
+
+	OdGePoint3d rightupper = pDb->getEXTMAX();
+	OdGePoint3d leftBottom = pDb->getEXTMIN();
+	/**********************************************************************/
+	/* Get the Upper-left corner of the box and its size                  */
+	/**********************************************************************/
+	OdGePoint3d point;
+	point.x = x;
+	point.y = y;
+	//  double h    = m_EntityBoxes.getHeight();
+	//double w = 3000;
+	double delta = w;
+
+	/**********************************************************************/
+	/* Create a rectangular Hatch with a circular hole                    */
+	/**********************************************************************/
+	OdDbHatchPtr pHatch = OdDbHatch::createObject();
+	pHatch->setDatabaseDefaults(pDb);
+	OdDbObjectId whiteHatchId = bBTR->appendOdDbEntity(pHatch);
+
+	/**********************************************************************/
+	/* Set some properties                                                */
+	/**********************************************************************/
+	pHatch->setAssociative(false);
+	pHatch->setPattern(OdDbHatch::kPreDefined, OD_T("SOLID"));
+	pHatch->setHatchStyle(OdDbHatch::kNormal);
+
+	OdCmColor col1;
+	if (!bValidText) {
+		col1.setRGB(240, 104, 37);
+	}
+	else {
+		col1.setRGB(37, 214, 240);
+	}
+	//	col1.setRGB(255, 0, 0); //��ע��ɫ
+	pHatch->setColor(col1);
+	OdCmTransparency transparency;
+	transparency.setAlphaPercent(0.7);
+	pHatch->setTransparency(transparency);
+
+	/**********************************************************************/
+	/* Define the outer loop with an OdGePolyline2d                       */
+	/**********************************************************************/
+	OdGePoint2dArray vertexPts;
+	OdGeDoubleArray vertexBulges;
+
+	double zy = 0.8;
+	double zx = 0.2;
+	double zw = 1.5;
+	double zh = 1;
+	vertexPts.resize(7);
+	vertexPts[0].set(point.x, point.y);
+	vertexPts[1].set(point.x + delta * zx, point.y * zh + delta * zy);
+	vertexPts[2].set(point.x + delta * zw, point.y * zh + delta * zy);
+	vertexPts[3].set(point.x + delta * zw, point.y * zh + delta * zy + delta);
+	vertexPts[4].set(point.x - delta * zw, point.y * zh + delta * zy + delta);
+	vertexPts[5].set(point.x - delta * zw, point.y * zh + delta * zy);
+	vertexPts[6].set(point.x - delta * zx, point.y * zh + delta * zy);
+
+	pHatch->appendLoop(OdDbHatch::kExternal | OdDbHatch::kPolyline, vertexPts,
+		vertexBulges);
+
+	std::vector < OdDbObjectId > vecObjectId;
+
+	vecObjectId.push_back(pHatch->objectId());
+
+	OdDbHandle id1 = pHatch->handle();
+	OdUInt64 nId = id1;
+	_mapId2Object[nId] = pHatch->objectId();
+
+	/**********************************************************************/
+	/* Add a label                                                        */
+	/**********************************************************************/
+	OdGePoint3d position;
+	position = point;
+	point.y += zy * w + w * 0.5;
+	point.z = 10;
+	OdDbObjectId id = addTextEnt(bBTR, point, point, textName, 0.4 * w,
+		OdDb::kTextMid, OdDb::kTextVertMid, layerId, shxStyleId);
+
+	_mapId2ObjectText[nId] = id;
+
+	return nId;
+}
+
+/************************************************************************/
+/* Add an Image to the specified BlockTableRecord                       */
+/************************************************************************/
+int addImage(OdDbDatabasePtr pDb, const OdString& sImagePath, double xPos, double yPos, double width, double height, const OdString& textName, const OdDbObjectId& layerId, const OdDbObjectId& shxStyleId)
+{
+	OdDbBlockTableRecordPtr pRecord = pDb->getActiveLayoutBTRId().safeOpenObject(OdDb::kForWrite);
+	OdDbObjectId imageDictId = OdDbRasterImageDef::createImageDictionary(pRecord->database());
+	OdDbDictionaryPtr pImageDict = imageDictId.safeOpenObject(OdDb::kForWrite);
+	// Create image definition
+	OdDbObjectId defId;
+	OdDbRasterImageDefPtr pDef = OdDbRasterImageDef::createObject();
+	pDef->setSourceFileName(sImagePath);
+	
+	char s[MAX_PATH];
+//	int i = _mapId2Object.size();
+    int i = rand();
+	sprintf(s, "pic__%d", i);
+	defId = pImageDict->setAt(s, pDef);
+	// Try to load raster image to found correct dimensions inside TD
+	OdDbRasterImageDefPtr pDefLoad = OdDbRasterImageDef::cast(defId.openObject(OdDb::kForWrite));
+	OdResult result = pDefLoad->load(false);
+	OdGeVector2d size = pDefLoad->size();
+    if(width==0){
+        width = size.x;
+        height = size.y;
+    }
+	// Create and attach raster image reference
+	OdDbRasterImagePtr pRef = OdDbRasterImage::createObject();
+	pRef->setDatabaseDefaults(pDb);
+	pRecord->appendOdDbEntity(pRef);
+
+	pRef->setImageDefId(defId);
+	OdGePoint3d origin;
+	OdGeVector3d u, v;
+
+
+	origin.x = xPos-width/2;
+	origin.y = yPos;
+	origin.z = 0;
+
+	
+	u.set(width, 0, 0);
+	v.set(0, height, 0);
+
+	pRef->setOrientation(origin, u, v);
+	pRef->setDisplayOpt(OdDbRasterImage::kShow, true);
+	pRef->setDisplayOpt(OdDbRasterImage::kTransparent, true);
+	pRef->setDisplayOpt(OdDbRasterImage::kClip, false);
+    OdCmTransparency transparency;
+    if (textName.getLength()) {
+        transparency.setAlphaPercent(0.7);
+    } else {
+        transparency.setAlphaPercent(1.0);
+    }
+    pRef->setTransparency(transparency);
+    
+    //�ر�ͼƬframe
+	OdDbRasterVariablesPtr pRVars = OdDbRasterVariables::openRasterVariables(pRecord->database(), OdDb::kForWrite);
+	pRVars->setImageFrame(OdDbRasterVariables::kImageFrameOff);
+
+
+	OdDbHandle id1 = pRef->handle();
+	OdUInt64 nId = id1;
+	_mapId2Object[nId] = pRef->objectId();
+
+
+	/**********************************************************************/
+	/* Add a label                                                        */
+	/**********************************************************************/
+	OdGePoint3d position;
+	position = origin;
+	position.x += width / 2;
+	position.y += height / 1.5;
+	position.z = 10;
+	OdDbObjectId id = addTextEnt(pRecord, position, position, textName, 0.5 * height,
+		OdDb::kTextMid, OdDb::kTextVertMid, layerId, shxStyleId);
+
+	_mapId2ObjectText[nId] = id;
+
+	return nId;
+}
+
+OdDbObjectId addLayer(OdDbDatabase* pDb, const OdString& name,
+	const OdCmColor color, const OdString& linetype) {
+	OdDbLayerTablePtr pLayersRead = pDb->getLayerTableId().safeOpenObject(
+		OdDb::kForRead);
+	OdDbSymbolTableIteratorPtr pEntIter = pLayersRead->newIterator();
+	/********************************************************************/
+	for (; !pEntIter->done(); pEntIter->step()) {
+		/********************************************************************/
+		/* Dump the Entity                                                  */
+		/********************************************************************/
+		OdDbLayerTableRecordPtr pEntity = pEntIter->getRecord();
+		if (pEntity->getName() == name)
+			return pEntity->objectId();
+	}
+
+	/**********************************************************************/
+	/* Open the layer table                                               */
+	/**********************************************************************/
+	OdDbLayerTablePtr pLayers = pDb->getLayerTableId().safeOpenObject(
+		OdDb::kForWrite);
+
+	/**********************************************************************/
+	/* Create a layer table record                                        */
+	/**********************************************************************/
+	OdDbLayerTableRecordPtr pLayer = OdDbLayerTableRecord::createObject();
+
+	/**********************************************************************/
+	/* Layer must have a name before adding it to the table.              */
+	/**********************************************************************/
+	pLayer->setName(name);
+
+	/**********************************************************************/
+	/* Set the Color.                                                     */
+	/**********************************************************************/
+	//	pLayer->setColorIndex(color);
+	pLayer->setColor(color);
+
+	/**********************************************************************/
+	/* Set the Linetype.                                                  */
+	/**********************************************************************/
+	OdDbLinetypeTablePtr pLinetypes = pDb->getLinetypeTableId().safeOpenObject(
+		OdDb::kForRead);
+	OdDbObjectId linetypeId = pLinetypes->getAt(linetype);
+	pLayer->setLinetypeObjectId(linetypeId);
+
+	/**********************************************************************/
+	/* Add the record to the table.                                       */
+	/**********************************************************************/
+	OdDbObjectId layerId = pLayers->add(pLayer);
+
+	return layerId;
+}
+
+/************************************************************************/
+/* Add a Text Style to the specified database                           */
+/*                                                                      */
+/* The symbol table and symbol table record are implicitly closed when  */
+/* this function returns.                                               */
+/************************************************************************/
+OdDbObjectId addStyle(OdDbDatabase* pDb, const OdString& txt, const OdString& hztxt, const OdString& styleName,
+	double textSize, double xScale, double priorSize, double obliquing,
+	const OdString& fileName, bool isShapeFile, const OdString& ttFaceName,
+	bool bold, bool italic, int charset, int pitchAndFamily)
+{
+	OdDbTextStyleTablePtr pLayersRead =
+		pDb->getTextStyleTableId().safeOpenObject(OdDb::kForRead);
+	OdDbSymbolTableIteratorPtr pEntIter = pLayersRead->newIterator();
+	/********************************************************************/
+	for (; !pEntIter->done(); pEntIter->step()) {
+		/********************************************************************/
+		/* Dump the Entity                                                  */
+		/********************************************************************/
+		OdDbTextStyleTableRecordPtr pEntity = pEntIter->getRecord();
+		if (pEntity->getName() == styleName)
+			return pEntity->objectId();
+	}
+
+	OdDbObjectId styleId;
+
+	OdDbTextStyleTablePtr pStyles = pDb->getTextStyleTableId().safeOpenObject(
+		OdDb::kForWrite);
+	OdDbTextStyleTableRecordPtr pStyle =
+		OdDbTextStyleTableRecord::createObject();
+
+	// Name must be set before a table object is added to a table.  The
+	// isShapeFile flag must also be set (if true) before adding the object
+	// to the database.
+	pStyle->setName(styleName);
+	pStyle->setIsShapeFile(false);
+
+	pStyle->setFileName(txt);
+	pStyle->setBigFontFileName(hztxt);
+
+	// Add the object to the table.
+	styleId = pStyles->add(pStyle);
+
+	// Set the remaining properties.
+	pStyle->setTextSize(textSize);
+	pStyle->setXScale(xScale);
+	pStyle->setPriorSize(priorSize);
+	pStyle->setObliquingAngle(obliquing);
+	//	pStyle->setFileName(fileName);
+	if (isShapeFile) {
+		pStyle->setPriorSize(22.45);
+	}
+	if (!ttFaceName.isEmpty()) {
+		pStyle->setFont(ttFaceName, bold, italic, charset, pitchAndFamily);
+	}
+
+	return styleId;
+}
+
+std::vector<OdDbObjectId> _vecObjectId;
+
+void ZoomTag(OdDbDatabasePtr m_pDatabase, double revZoomScale) {
+	OdDbBlockTableRecordPtr pBlockTableRecord =
+		m_pDatabase->getModelSpaceId().safeOpenObject(OdDb::kForRead);
+	OdGePoint3d Start, End;
+	std::map<int, OdDbObjectId>::iterator iter = _mapId2Object.begin();
+	while (iter != _mapId2Object.end()) {
+		int key = iter->first;
+		OdDbObjectId val = iter->second;
+		OdDbObjectPtr oid = val.openObject(OdDb::kForWrite, false);
+
+		OdDbHatchPtr hatch = OdDbHatch::cast(oid);
+		if (!hatch.isNull()) {
+			OdGePoint2dArray vertices;
+			OdGeDoubleArray bulges;
+			hatch->getLoopAt(0, vertices, bulges);
+			//    writeLine(indent++, OD_T("Edges"));
+			int nCnt = vertices.size();
+			OdGePoint2d origin = vertices[0];
+			Start.set(origin.x, origin.y, 0);
+			OdGeMatrix3d tm;
+			tm.setToScaling(revZoomScale, Start);
+			hatch->transformBy(tm);
+
+			std::map<int, OdDbObjectId>::iterator iter1 = _mapId2ObjectText.find(
+				key);
+			if (iter1 != _mapId2ObjectText.end()) {
+				OdDbObjectId val = iter1->second;
+				OdDbObjectPtr oid = val.openObject(OdDb::kForWrite, false);
+
+				OdDbTextPtr text = OdDbText::cast(oid);
+				if (!text.isNull()) {
+					OdGePoint3d pos = text->position();
+
+					OdGeMatrix3d tm;
+					tm.setToScaling(revZoomScale, Start);
+					text->transformBy(tm);
+				}
+			}
+		}
+
+		
+
+		OdDbRasterImagePtr image = OdDbRasterImage::cast(oid);
+		if (!image.isNull()) {
+			OdGePoint3d origin;
+			OdGeVector3d u, v;
+			image->getOrientation(origin, u, v);
+			origin.x += u[0] / 2;
+			OdGeMatrix3d tm;
+			tm.setToScaling(revZoomScale, origin);
+			image->transformBy(tm);
+
+			std::map<int, OdDbObjectId>::iterator iter1 = _mapId2ObjectText.find(
+				key);
+			if (iter1 != _mapId2ObjectText.end()) {
+				OdDbObjectId val = iter1->second;
+				OdDbObjectPtr oid = val.openObject(OdDb::kForWrite, false);
+
+				OdDbTextPtr text = OdDbText::cast(oid);
+				if (!text.isNull()) {
+					OdGePoint3d pos = text->position();
+
+					OdGeMatrix3d tm;
+					tm.setToScaling(revZoomScale, origin);
+					text->transformBy(tm);
+				}
+			}
+		}
+
+		iter++;
+	}
+}
+
+/************************************************************************/
+/* Add a text entity with the specified attributes to the specified     */
+/* BlockTableRecord                                                     */
+/************************************************************************/
+OdDbObjectId addTextEnt(OdDbBlockTableRecord* bBTR, const OdGePoint3d& position,
+	const OdGePoint3d& ap, const OdString& str, double height,
+	OdDb::TextHorzMode hMode, OdDb::TextVertMode vMode,
+	const OdDbObjectId& layerId, const OdDbObjectId& styleId,
+	OdDbGroup* pGroup) {
+	/**********************************************************************/
+	/* Create the text object                                             */
+	/**********************************************************************/
+	OdDbTextPtr pText = OdDbText::createObject();
+	pText->setDatabaseDefaults(bBTR->database());
+	OdDbObjectId textId = bBTR->appendOdDbEntity(pText);
+
+	// Make the text annotative
+	OdDbAnnotativeObjectPEPtr(pText)->setAnnotative(pText, true);
+
+	/**********************************************************************/
+	/* Add the text to the specified group                                */
+	/**********************************************************************/
+	if (pGroup) {
+		pGroup->append(textId);
+	}
+
+	/**********************************************************************/
+	/* Set some properties                                                */
+	/**********************************************************************/
+	pText->setPosition(position);
+	pText->setAlignmentPoint(ap);
+	pText->setHeight(height);
+	pText->setWidthFactor(1.0);
+	pText->setTextString(str);
+	pText->setHorizontalMode(hMode);
+	pText->setVerticalMode(vMode);
+
+	/**********************************************************************/
+	/* Set the text to the specified style                                */
+	/**********************************************************************/
+	if (!styleId.isNull()) {
+		pText->setTextStyle(styleId);
+	}
+	/**********************************************************************/
+	/* Set the text to the specified layer                                */
+	/**********************************************************************/
+	if (!layerId.isNull()) {
+		pText->setLayer(layerId, false);
+	}
+
+	return textId;
+}
+
+void ScreenToWorld(OdGsViewPtr pDevice, float x, float y, float out[]) {
+	OdGsViewPtr pView = pDevice;
+	OdGePoint3d WCSPoint(x, y, 0.0);
+
+	OdGeMatrix3d screenMatrix = pView->screenMatrix();
+	OdGeMatrix3d projectionMatrix = pView->projectionMatrix();
+
+	WCSPoint.transformBy(
+		(pView->screenMatrix() * pView->projectionMatrix()).inverse());
+	WCSPoint.z = 0.0;
+	WCSPoint.transformBy(OdAbstractViewPEPtr(pView)->eyeToWorld(pView));
+
+	out[0] = WCSPoint.x;
+	out[1] = WCSPoint.y;
+	out[2] = WCSPoint.z;
+}
+
+void WorldToScreen(OdGsViewPtr pDevice, float x, float y, float z,
+	float out[]) {
+	OdGsViewPtr pView = pDevice;
+	OdGePoint3d WCSPoint(x, y, z);
+	OdGeMatrix3d xWorldToScr = pView->worldToDeviceMatrix();
+	OdGePoint3d pt = xWorldToScr * WCSPoint;
+
+	out[0] = pt.x;
+	out[1] = pt.y;
+}
+
+int AddShape(OdDbDatabase* pDb, const OdString& txt, const OdString& hztxt, float x, float y, float fSize, const OdString& sImagePath, const OdString& sLableText, bool bValidText)
+{
+	OdCmColor clr;
+	OdString name;
+	//	clr.setRGB(255, 255, 255);
+	if (bValidText){
+		clr.setRGB(255, 255, 255);
+		name = OD_T("JKYTextLayer");
+	}
+	else{
+		clr.setRGB(0, 255, 0);
+		name = OD_T("JKYTextLayer1");
+	}
+
+	OdDbObjectId odaLayerId = addLayer(pDb, name, clr, OD_T("CONTINUOUS"));
+
+	OdDbObjectId shxTextStyleId = addStyle(pDb, txt, hztxt, OD_T("OdaShxStyle"), 0.0, 1.0,
+		0.2, 0.0, OD_T("txt"));
+
+	//int nId = addHatches(pDb->getModelSpaceId(), sLableText, 2000, x, y, odaLayerId, shxTextStyleId, shxTextStyleId, bValidText);
+
+    int nId = addImage(pDb, sImagePath, x, y, fSize, fSize*0.3, sLableText, odaLayerId, shxTextStyleId);
+	return nId;
+}
+
+void DeleteShape(OdDbDatabasePtr m_pDatabase, int nID) {
+	OdDbBlockTableRecordPtr pBlockTableRecord =
+		m_pDatabase->getModelSpaceId().safeOpenObject(OdDb::kForRead);
+
+	if (nID > 0) {
+		std::map<int, OdDbObjectId>::iterator iter = _mapId2Object.find(nID);
+		if (iter != _mapId2Object.end()) {
+			OdDbObjectId id = iter->second;
+			OdDbObjectPtr oid = id.openObject(OdDb::kForWrite, false);
+			oid->erase();
+
+			_mapId2Object.erase(iter);
+		}
+
+		iter = _mapId2ObjectText.find(nID);
+		if (iter != _mapId2ObjectText.end()) {
+			OdDbObjectId id = iter->second;
+			OdDbObjectPtr oid = id.openObject(OdDb::kForWrite, false);
+			oid->erase();
+
+			_mapId2ObjectText.erase(iter);
+		}
+	}
+	else {
+		std::map<int, OdDbObjectId>::iterator iter = _mapId2Object.begin();
+		while (iter != _mapId2Object.end()) {
+			DeleteShape(m_pDatabase, iter->first);
+			iter++;
+		}
+		ClearData();
+	}
+}
+
+int PickShapeByCursor(OdGsViewPtr pDevice, OdDbDatabasePtr m_pDatabase, float x,
+	float y) {
+	int nRet = 0;
+	OdDbBlockTableRecordPtr pBlockTableRecord =
+		m_pDatabase->getModelSpaceId().safeOpenObject(OdDb::kForRead);
+	float out[3];
+	ScreenToWorld(pDevice, x, y, out);
+	OdGePoint3d Start, End;
+	std::map<int, OdDbObjectId>::iterator iter = _mapId2Object.begin();
+	while (iter != _mapId2Object.end()) {
+		int key = iter->first;
+		OdDbObjectId val = iter->second;
+		OdDbObjectPtr oid = val.openObject(OdDb::kForRead, false);
+
+		OdDbHatchPtr hatch = OdDbHatch::cast(oid);
+		if (!hatch.isNull()) {
+			OdGePoint2dArray vertices;
+			OdGeDoubleArray bulges;
+			hatch->getLoopAt(0, vertices, bulges);
+			//    writeLine(indent++, OD_T("Edges"));
+			int nCnt = vertices.size();
+
+			float xmin = 0, ymin = 0, xmax = 0, ymax = 0;
+			for (int i = 0; i < nCnt; i++) {
+				if (i == 0) {
+					xmin = vertices[i].x;
+					ymin = vertices[i].y;
+					xmax = vertices[i].x;
+					ymax = vertices[i].y;
+				}
+				else {
+					if (xmin > vertices[i].x)
+						xmin = vertices[i].x;
+					if (ymin > vertices[i].y)
+						ymin = vertices[i].y;
+					if (xmax < vertices[i].x)
+						xmax = vertices[i].x;
+					if (ymax < vertices[i].y)
+						ymax = vertices[i].y;
+				}
+			}
+
+			if (out[0] > xmin && out[0] < xmax && out[1] > ymin
+				&& out[1] < ymax) {
+				nRet = key;
+				break;
+			}
+		}
+
+		OdDbRasterImagePtr image = OdDbRasterImage::cast(oid);
+		if (!image.isNull()) 
+		{
+			float xmin = 0, ymin = 0, xmax = 0, ymax = 0;
+			OdGePoint3d origin;
+			OdGeVector3d u, v;
+			image->getOrientation(origin, u, v);
+			
+			xmin = origin.x;
+			ymin = origin.y;
+			xmax = xmin + u[0];
+			ymax = ymin + v[1];
+			if (out[0] > xmin && out[0] < xmax && out[1] > ymin
+				&& out[1] < ymax) {
+				nRet = key;
+				break;
+			}
+		}
+
+		iter++;
+	}
+
+	return nRet;
+}
+
+void ClearData() {
+	_mapId2Object.clear();
+	_mapId2ObjectText.clear();
+}
+
+
+// #endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.h
new file mode 100755
index 0000000..4842d08
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Shape/Super/stdafx.h
@@ -0,0 +1,179 @@
+/////////////////////////////////////////////////////////////////////////////// 
+// Copyright (C) 2002-2015, Open Design Alliance (the "Alliance"). 
+// All rights reserved. 
+// 
+// This software and its documentation and related materials are owned by 
+// the Alliance. The software may only be incorporated into application 
+// programs owned by members of the Alliance, subject to a signed 
+// Membership Agreement and Supplemental Software License Agreement with the
+// Alliance. The structure and organization of this software are the valuable  
+// trade secrets of the Alliance and its suppliers. The software is also 
+// protected by copyright law and international treaty provisions. Application  
+// programs incorporating this software must include the following statement 
+// with their copyright notices:
+//   
+//   This application incorporates Teigha(R) software pursuant to a license 
+//   agreement with Open Design Alliance.
+//   Teigha(R) Copyright (C) 2002-2015 by Open Design Alliance. 
+//   All rights reserved.
+//
+// By use of this software, its documentation or related materials, you 
+// acknowledge and accept the above terms.
+///////////////////////////////////////////////////////////////////////////////
+
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently,
+// but are changed infrequently
+
+#if !defined(AFX_STDAFX_H__E5FB806A_3CA2_4eed_AB8E_F1A5B087C3E0__INCLUDED_)
+#define AFX_STDAFX_H__E5FB806A_3CA2_4eed_AB8E_F1A5B087C3E0__INCLUDED_
+
+
+#include "OdaCommon.h"
+
+
+#include <vector>
+
+#include "OdaCommon.h"
+#include "DbDatabase.h"
+
+#include "Db2LineAngularDimension.h"
+#include "Db2dPolyline.h"
+#include "Db2dVertex.h"
+#include "Db3PointAngularDimension.h"
+#include "Db3dPolyline.h"
+#include "Db3dPolylineVertex.h"
+#include "Db3dSolid.h"
+#include "DbAlignedDimension.h"
+#include "DbArc.h"
+#include "DbArcAlignedText.h"
+#include "DbArcDimension.h"
+#include "DbAttribute.h"
+#include "DbAttributeDefinition.h"
+#include "DbBlockReference.h"
+#include "DbBlockTable.h"
+#include "DbBody.h"
+#include "DbCircle.h"
+#include "DbDiametricDimension.h"
+#include "DbDimAssoc.h"
+#include "DbBreakData.h"
+#include "DbDimStyleTable.h"
+#include "DbEllipse.h"
+#include "DbFace.h"
+#include "DbFaceRecord.h"
+#include "DbFcf.h"
+#include "DbField.h"
+#include "DbGroup.h"
+#include "DbHyperlink.h"
+#include "DbLayerTable.h"
+#include "DbLayout.h"
+#include "DbLeader.h"
+#include "DbMLeader.h"
+#include "DbLine.h"
+#include "DbLinetypeTable.h"
+#include "DbMaterial.h"
+#include "DbMInsertBlock.h"
+#include "DbMline.h"
+#include "DbMlineStyle.h"
+#include "DbMText.h"
+#include "DbOrdinateDimension.h"
+#include "DbPoint.h"
+#include "DbPolyFaceMesh.h"
+#include "DbPolyFaceMeshVertex.h"
+#include "DbPolygonMesh.h"
+#include "DbPolygonMeshVertex.h"
+#include "DbPolyline.h"
+#include "DbRadialDimension.h"
+#include "DbRadialDimensionLarge.h"
+#include "DbRasterImage.h"
+#include "DbRasterImageDef.h"
+#include "DbRasterVariables.h"
+#include "DbRay.h"
+#include "DbRegion.h"
+#include "DbRotatedDimension.h"
+#include "DbShape.h"
+#include "DbSolid.h"
+#include "DbSortentsTable.h"
+#include "DbSpline.h"
+#include "DbTable.h"
+#include "DbText.h"
+#include "DbTextStyleTable.h"
+#include "DbTrace.h"
+#include "DbViewport.h"
+#include "DbViewportTable.h"
+#include "DbViewportTableRecord.h"
+#include "DbWipeout.h"
+#include "DbXline.h"
+#include "DbXrecord.h"
+#include "RText.h"
+#include "DbOle2Frame.h"
+#include "DbHelix.h"
+#include "DbUnderlayDefinition.h"
+#include "DbUnderlayReference.h"
+#include "DbLight.h"
+#include "DbSubDMesh.h"
+#include "DbExtrudedSurface.h"
+#include "DbRevolvedSurface.h"
+#include "DbPlaneSurface.h"
+#include "DbLoftedSurface.h"
+#include "DbSweptSurface.h"
+
+#include "OdPlatformStreamer.h"
+
+#include "Ge/GeCircArc2d.h"
+#include "Ge/GeScale3d.h"
+#include "Ge/GeExtents3d.h"
+#include "Gi/GiMaterial.h"
+#include "Gi/GiRasterWrappers.h"
+#include "XRefMan.h"
+#include "OleItemHandler.h"
+
+#include "OdFileBuf.h"
+#include <math.h>
+
+#include "DbSymUtl.h"
+#include "DbHostAppServices.h"
+#include "HatchPatternManager.h"
+#include "DbAnnotativeObjectPE.h"
+#include "DbObjectContextCollection.h"
+#include "DbObjectContextManager.h"
+#include "DbObjectContextInterface.h"
+#include "DbMLeaderBreaks.h"
+
+#include "DbGsManager.h"
+
+extern int addHatches(const OdDbObjectId& btrId,
+	const OdString& styleName,
+	float w,
+	double x,
+	double y,
+	const OdDbObjectId& layerId,
+	const OdDbObjectId& textStyleId,
+	const OdDbObjectId& ttfStyleId);
+extern int addImage(OdDbDatabasePtr pDb, const OdString& sImagePath, double xPos, double yPos, double width, double height, const OdString& textName, const OdDbObjectId& layerId, const OdDbObjectId& shxStyleId);
+
+extern OdDbObjectId addLayer(OdDbDatabase* pDb,
+	const OdString& name,
+	const OdCmColor color,
+	const OdString& linetype);
+
+extern OdDbObjectId addStyle(OdDbDatabase* pDb, const OdString& txt, const OdString& hztxt, const OdString& styleName, double textSize, double xScale, double priorSize, double obliquing, const OdString& fileName, bool isShapeFile = true, const OdString& ttFaceName = OD_T(""), bool bold = false, bool italic = false, int charset = false, int pitchAndFamily = 0);
+
+extern void ZoomTag(OdDbDatabasePtr m_pDatabase, double revZoomScale);
+
+extern void ModifyTextFont(OdDbDatabasePtr pDb);
+
+extern OdDbObjectId addTextEnt(OdDbBlockTableRecord* pBlock, const OdGePoint3d& position, const OdGePoint3d& ap, const OdString& str, double height, OdDb::TextHorzMode hMode, OdDb::TextVertMode vMode, const OdDbObjectId& layerId, const OdDbObjectId& styleId, OdDbGroup* pGroup = 0);
+
+
+extern std::vector<OdDbObjectId>_vecObjectId;
+
+extern void ScreenToWorld(OdGsViewPtr pDevice, float x, float y, float out[]);
+extern void WorldToScreen(OdGsViewPtr pDevice, float x, float y, float z, float out[]);
+extern int AddShape(OdDbDatabase* pDb, const OdString& txt, const OdString& hztxt, float x, float y, float fSize, const OdString& sImagePath, const OdString& sLableText, bool bValidText);
+extern void DeleteShape(OdDbDatabasePtr m_pDatabase, int nID);
+extern int PickShapeByCursor(OdGsViewPtr pDevice, OdDbDatabasePtr m_pDatabase, float x, float y);
+extern void ClearData();
+
+
+#endif // AFX_STDAFX_H__E5FB806A_3CA2_4eed_AB8E_F1A5B087C3E0__INCLUDED_
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/DwgViewController.storyboard b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/DwgViewController.storyboard
new file mode 100644
index 0000000..794c9d0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/DwgViewController.storyboard
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14313.18" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Chr-87-vXo">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14283.14"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--Dwg View Controller-->
+        <scene sceneID="3mr-Ve-mCl">
+            <objects>
+                <viewController id="Chr-87-vXo" customClass="DwgViewController" sceneMemberID="viewController">
+                    <view key="view" contentMode="scaleToFill" id="5By-Hi-wEg" customClass="GLKView">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
+                        <viewLayoutGuide key="safeArea" id="KLg-BE-6vH"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="isV-Vd-j56" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="-87" y="-742"/>
+        </scene>
+    </scenes>
+</document>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.h
new file mode 100644
index 0000000..8703d7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.h
@@ -0,0 +1,20 @@
+//
+//  PBDocBaseController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "PBProjectModel.h"
+#import "PBDocModel.h"
+#import "PBPromptView.h"
+@interface PBDocBaseController : UITableViewController
+@property (nonatomic, copy) NSString *roleIdStr;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSMutableArray<PBDocModel *> *docList;
+@property (nonatomic, strong) PBDocModel *docModel;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) NSArray *powerArr;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.mm b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.mm
new file mode 100644
index 0000000..0829959
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocBaseController.mm
@@ -0,0 +1,610 @@
+//
+//  PBDocBaseController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocBaseController.h"
+#import "PBDocListTableViewCell.h"
+#import "PBDocListController.h"
+#import "PBDocPrivilegeModel.h"
+#import "PBPreviewDocViewController.h"
+#import "DwgViewController.h"
+//#import "PBDocShareView.h"
+#import "PBShareView.h"
+
+static NSString *const CellID = @"CellId";
+@interface PBDocBaseController ()
+//@property (nonatomic, strong) PBDocShareView *docShareView;
+@property (nonatomic, strong) PBShareView *shareView;
+@property (nonatomic, strong) PBDocModel *previousDocModel;
+@end
+
+@implementation PBDocBaseController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupTableView];
+}
+- (void)setupTableView {
+    self.tableView.estimatedRowHeight = 74.f;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBDocListTableViewCell class] forCellReuseIdentifier:CellID];
+    
+    [self.tableView addSubview:self.promptView];
+    self.promptView.imageV.image = [UIImage imageNamed:@"Doc_list_empty"];
+    self.promptView.textL.text = @"暂无文档,请在WEB端添加文档";
+    self.promptView.hidden = YES;
+}
+
+#pragma mark - Table view data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _docList.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBDocListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.docModel = _docList[indexPath.row];
+    return cell;
+}
+#pragma mark - Table view delete
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBDocModel *docModel = self.docList[indexPath.row];
+    [self getDocPrivilegeListWith:docModel andAuthName:@"open" andCallBack:^(BOOL auth, NSError *error, NSString *roleId) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载权限失败" inView:self.view];
+            return;
+        }
+        if (auth) {
+            if ([docModel.FileSize isEqualToString:@"0"]) {
+                PBDocListController *docListVC = [[PBDocListController alloc] init];
+                docListVC.isOther = YES;
+                docListVC.roleIdStr = roleId;
+                docListVC.projectModel = self.projectModel;
+                docListVC.docModel  = docModel;
+                docListVC.title = docModel.FileName;
+                [self.navigationController pushViewController:docListVC animated:YES];
+            }else {
+                if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".dwg"]){
+                    [self downDwgFileWith:docModel];
+                }else if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".mp4"]){
+                    [self downFileWith:docModel];
+                
+                }else if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".pdf"] || [[docModel.FileExtensions lowercaseString] isEqualToString:@".xlsx"]){
+                    [self downFileWith:docModel];
+                }else {
+//                    PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+//                    previewDocVC.projectModel = self.projectModel;
+//                    previewDocVC.docModel = docModel;
+//                    previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+//                    [self presentViewController:previewDocVC animated:NO completion:nil];
+                    [self getDocumentVersion:docModel];
+                }
+            }
+        }else {
+            [YJProgressHUD showMessage:@"暂无权限查看" inView:self.view];
+        }
+    }];
+}
+//请求文件数据
+- (void)getDocumentVersion:(PBDocModel *)docModel {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSString *downLoadIP = BimUrl;
+    NSArray *arr = [NSString getApiArrData];
+    for (NSDictionary *obj in arr) {
+        NSString *Check = [obj valueForKey:@"Check"];
+        if ([Check isEqualToString:@"1"]) {
+            NSString *Code = [obj valueForKey:@"Code"];
+            if ([Code isEqualToString:@"300012"]){
+                downLoadIP = @"http://localhost:6081";
+                break;
+            }
+        }
+    }
+
+    NSDictionary *data = @{
+                           @"ProjectID":self.projectModel.bimcomposerid,
+                           @"FileID":docModel.FileId };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetDocumentVersion",BimUrl];
+    AFSecurityPolicy * securityPolicy = [AFSecurityPolicy defaultPolicy];
+    securityPolicy.allowInvalidCertificates = YES;//是否允许自建的证书
+    securityPolicy.validatesDomainName = NO;
+    
+    AFHTTPSessionManager * manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
+    [manager setSecurityPolicy:securityPolicy];
+    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
+    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
+    [manager.requestSerializer setValue:@"application/x-www-form-urlencoded;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
+    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain",nil];
+    [manager POST:url parameters:data headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        NSArray *docData = [NSString convertTodictionaryOrArr:str];
+        NSString *fileInfoV = [docData[0] valueForKey:@"FileInfoVersionId"];
+        NSString *downUrl = [NSString stringWithFormat:@"%@/api/Doc/GetFile?FileInfoVersionId=%@&FileKind=FileVersion&ProjectID=%@", downLoadIP, fileInfoV, self.projectModel.bimcomposerid];
+        NSString *downUrlUtF8 = [downUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@":/?=&"].invertedSet];
+        NSString *firstUrl = [NSString stringWithFormat:@"%@/api/DocViewer/Viewer/Show?downloadUrl=%@&tempNameAfterDownload=%@", BaseUrl,downUrlUtF8 ,docModel.FileName];
+        NSString *docUrl = [NSString stringWithFormat:@"%@/Content/PDFJS/web/Viewer.html?file=%@", BaseUrl, [firstUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@":/?=&%"].invertedSet]];
+        NSLog(@"%@",docUrl);
+       
+        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+        previewDocVC.projectModel = self.projectModel;
+        previewDocVC.name = docModel.FileName;
+        previewDocVC.docUrl = docUrl;
+        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:previewDocVC animated:NO completion:nil];
+
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        [YJProgressHUD showFailed:@"加载失败" inview:self.view];
+        NSLog(@"%@",error);
+    }];
+    
+}
+- (void)downPDFFileWith:(PBDocModel *)docModel {
+    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+    NSFileManager * manager = [NSFileManager defaultManager];
+    if (![manager fileExistsAtPath :folderPath]){
+        [self downLoadPDfFileWith:docModel.FileId andFileExtension:docModel.FileExtensions andName:docModel.FileName];
+        return;
+    }
+    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
+    NSString *fileName;
+    NSString *fileAbsolutePath = nil;
+    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
+        if ([fileName isEqualToString:[NSString stringWithFormat:@"%@%@",docModel.FileId, docModel.FileExtensions]]) {
+            fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
+        }
+    }
+    if (fileAbsolutePath == nil) {
+        [self downLoadPDfFileWith:docModel.FileId andFileExtension:docModel.FileExtensions andName:docModel.FileName];
+    }else {
+        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+        previewDocVC.path = fileAbsolutePath;
+        previewDocVC.name = docModel.FileName;
+        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:previewDocVC animated:NO completion:nil];
+    }
+}
+- (void)downLoadPDfFileWith:(NSString *)fileID andFileExtension:(NSString *)extension andName:(NSString *)name {
+    [YJProgressHUD showProgress:@"正在下载文件" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestDownLoadDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:fileID andExtension:extension andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"下载失败" inView:nil];
+            NSLog(@"%@",error);
+            return;
+        }
+        NSLog(@"filePath:%@",filePath);
+        NSString *str = [filePath absoluteString];
+        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
+        [YJProgressHUD hide];
+        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+        previewDocVC.path = str;
+        previewDocVC.name = name;
+        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:previewDocVC animated:NO completion:nil];
+    }];
+}
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    PBDocModel *docModel = self.docList[indexPath.row];
+//    UITableViewRowAction *shareAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"分享" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+//        [self shareWithDocModel:docModel];
+//    }];
+//    shareAction.backgroundColor = WarningColor;
+    UITableViewRowAction *deleteAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            //判断权限
+            PBDocModel *docModel = self.docList[indexPath.row];
+            [self getDocPrivilegeListWith:docModel andAuthName:@"delete" andCallBack:^(BOOL auth, NSError *error, NSString *roleId) {
+                if (error) {
+                    [YJProgressHUD showMessage:@"加载权限失败" inView:self.view];
+                    return;
+                }
+                if (auth) {
+                    [self deleteDocFileOrFolderWithDocModel:docModel andIndexPath:indexPath];
+                }else {
+                    [YJProgressHUD showMessage:@"暂无权限删除" inView:self.view];
+                }
+            }];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+    deleteAction.backgroundColor = ErrorColor;
+    if ([docModel.FileSize isEqualToString:@"0"]) {
+        return @[deleteAction];
+    }else {
+//        return @[shareAction, deleteAction];
+        return @[deleteAction];
+    }
+}
+//分享权限判断
+- (void)shareWithDocModel:(PBDocModel *)docModel {
+    [self getDocPrivilegeListWith:docModel andAuthName:@"share" andCallBack:^(BOOL auth, NSError *error, NSString *roleId) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载权限失败" inView:self.view];
+            return;
+        }
+        if (auth) {
+            [self shareViewTypeWith:docModel];
+        }else {
+            [YJProgressHUD showMessage:@"暂无权限分享文件" inView:self.view];
+        }
+    }];
+}
+//分享类型判断(DWG/普通)
+- (void)shareViewTypeWith:(PBDocModel *)docModel {
+//    if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".dwg"]) {
+//        [self dwgDocShareViewShowWithDocModel:docModel];
+//    }else {
+//        [self GetDocumentVersionWith:docModel];
+//    }
+    
+    [PBKeyWindow addSubview:self.shareView];
+    self.shareView.docId = docModel.FileId;
+    self.shareView.desc = docModel.FileName;
+    NSString *type = [docModel.FileExtensions stringByReplacingOccurrencesOfString:@"." withString:@""];
+    NSString *imageName = [NSString stringWithFormat:@"Doc_type_%@",[type lowercaseString]];
+    UIImage *image = [UIImage imageNamed:imageName];
+    if (image == nil) {
+        image = [UIImage imageNamed:@"Doc_type_ unknown"];
+    }
+    self.shareView.image = image;
+    [self.shareView show];
+}
+//- (void)GetDocumentVersionWith:(PBDocModel *)docModel {
+//    [[PBNetworkTools sharedTools] GetDocumentVersionWithProjectID:self.projectModel.bimcomposerid andFileID:docModel.FileId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+//        if (error) {
+//            NSLog(@"%@",error);
+//            return;
+//        }
+//        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+//        NSLog(@"%@",str);
+//        NSArray *arr = [NSString convertTodictionaryOrArr:str];
+//        if (arr.count > 0) {
+//            NSDictionary *dict = arr[0];
+//            NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetFile?FileInfoVersionId=%@&FileKind=FileVersion&ProjectID=%@",BimUrl,[dict valueForKey:@"FileInfoVersionId"],self.projectModel.bimcomposerid];
+//            [self docShareViewShowWithDocModel:docModel andUrl:url];
+//        }else {
+//            [YJProgressHUD showMessage:@"" inView:self.view afterDelayTime:1];
+//        }
+//    }];
+//}
+
+
+//- (void)dwgDocShareViewShowWithDocModel:(PBDocModel *)docModel {
+//    [YJProgressHUD showProgress:@"" inView:nil];
+//    [[PBNetworkTools sharedTools] RequestIDocViewWithProjectID:self.projectModel.organizeid andFileID:docModel.FileId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+//        if (error) {
+//            NSLog(@"%@",error);
+//            [YJProgressHUD showMessage:@"加载文件地址失败" inView:nil];
+//            return;
+//        }
+//        [YJProgressHUD hide];
+//        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+//        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+//        NSLog(@"%@",dict);
+////            dict = @{
+////              @"Ret": @"-1",
+////              @"InnerUrl": @"https://bimcomposer.probim.cn/api/Doc/GetFile?ProjectID=0fcfb8cc-175b-417a-927e-2cf0c1877c02&keyValue=e75d9b5a-5f20-4d47-82ff-991240295416&FileKind=File",
+////              @"OuterUrl": @"/view/url?url=",
+////              @"OuterUrl2": @"&name=",
+////              @"DWGUrlPre": @"https://www.probim.cn:9003"
+////            };
+//        NSNumber *num = [dict valueForKey:@"Ret"];
+//        NSInteger ret = [num integerValue];
+//        if (ret == -1) {
+//            NSString *charactersToEscape = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";
+//            NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
+//            NSString *dwgUrl = [[dict valueForKey:@"InnerUrl"] stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
+//            NSString *url = [NSString stringWithFormat:@"%@/Home/Index2?dwgurlcfg=%@&name=%@",[dict valueForKey:@"DWGUrlPre"], dwgUrl, docModel.FileName];
+//            [self docShareViewShowWithDocModel:docModel andUrl:url];
+//        }else {
+//            [YJProgressHUD showMessage:@"加载失败" inView:nil];
+//        }
+//    }];
+//}
+//- (void)docShareViewShowWithDocModel:(PBDocModel *)docModel andUrl:(NSString *)url {
+//    [PBKeyWindow addSubview:self.docShareView];
+//    self.docShareView.desc = docModel.FileName;
+//    self.docShareView.url = url;
+//    NSString *type = [docModel.FileExtensions stringByReplacingOccurrencesOfString:@"." withString:@""];
+//    NSString *imageName = [NSString stringWithFormat:@"Doc_type_%@",[type lowercaseString]];
+//    UIImage *image = [UIImage imageNamed:imageName];
+//    if (image == nil) {
+//        image = [UIImage imageNamed:@"Doc_type_ unknown"];
+//    }
+//    self.docShareView.image = image;
+//    [self.docShareView show];
+//    NSLog(@"文件URL:%@",url);
+//}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+
+- (void)setDocModel:(PBDocModel *)docModel {
+    self.previousDocModel = docModel;
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetAllFolderAndFileByFolderIDWithProjectID:self.projectModel.bimcomposerid andFolderID:docModel.FileId andLikeName:@"" andNormalOrDrawings:@"Normal" andRoleId:self.roleIdStr andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载文档失败" inView:nil];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSArray<PBDocModel *>*arr = [NSArray yy_modelArrayWithClass:[PBDocModel class] json:str];
+        self.docList = arr.mutableCopy;
+        [self.tableView reloadData];
+        if (self.docList.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            self.promptView.hidden = YES;
+        }
+    }];
+}
+
+
+- (void)downDwgFileWith:(PBDocModel *)docModel {
+    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+    NSFileManager * manager = [NSFileManager defaultManager];
+    if (![manager fileExistsAtPath :folderPath]){
+        [self downLoadDwgFileWith:docModel.FileId];
+        return;
+    }
+    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
+    NSString * fileName;
+    NSString * fileAbsolutePath = nil;
+    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
+        if ([fileName isEqualToString:[NSString stringWithFormat:@"%@.dwg",docModel.FileId]]) {
+            fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
+        }
+    }
+    if (fileAbsolutePath == nil) {
+        [self downLoadDwgFileWith:docModel.FileId];
+    }else {
+//        DwgViewController *destViewController = [DwgViewController new];
+        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"DwgViewController" bundle:nil];
+        DwgViewController *destViewController = [storyboard instantiateInitialViewController];
+        destViewController.cadFileName = fileAbsolutePath;
+        destViewController.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:destViewController animated:YES completion:nil];
+        
+    }
+}
+- (void)downFileWith:(PBDocModel *)docModel {
+    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+    NSFileManager * manager = [NSFileManager defaultManager];
+    if (![manager fileExistsAtPath :folderPath]){
+        [self downLoadFileWith:docModel];
+        return;
+    }
+    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
+    NSString * fileName;
+    NSString * fileAbsolutePath = nil;
+    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
+        if ([fileName isEqualToString:[NSString stringWithFormat:@"%@%@",docModel.FileId, docModel.FileExtensions]]) {
+            fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
+        }
+    }
+    if (fileAbsolutePath == nil) {
+        [self downLoadFileWith:docModel];
+    }else {
+        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+        previewDocVC.path = fileAbsolutePath;
+        previewDocVC.name = docModel.FileName;
+        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:previewDocVC animated:NO completion:nil];
+    }
+}
+- (void)downLoadDwgFileWith:(NSString *)fileID {
+    [YJProgressHUD showProgress:@"正在下载文件" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestDownLoadDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:fileID andExtension:@".dwg" andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"下载失败" inView:nil];
+            NSLog(@"%@",error);
+            return;
+        }
+        NSLog(@"filePath:%@",filePath);
+        NSString *str = [filePath absoluteString];
+        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
+        [YJProgressHUD hide];
+        DwgViewController *destViewController = [DwgViewController new];
+        destViewController.cadFileName = str;
+        destViewController.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:destViewController animated:YES completion:nil];
+    }];
+}
+- (void)downLoadFileWith:(PBDocModel *)docModel {
+    [YJProgressHUD showProgress:@"正在下载文件" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestDownLoadDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:docModel.FileId andExtension:docModel.FileExtensions andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"下载失败" inView:nil];
+            NSLog(@"%@",error);
+            return;
+        }
+        NSLog(@"filePath:%@",filePath);
+        NSString *str = [filePath absoluteString];
+        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
+        [YJProgressHUD hide];
+        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+        previewDocVC.path = str;
+        previewDocVC.name = docModel.FileName;
+        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:previewDocVC animated:NO completion:nil];
+    }];
+}
+#pragma mark - 删除文件/文件夹方法
+- (void)deleteDocFileOrFolderWithDocModel:(PBDocModel *)docModel andIndexPath:(NSIndexPath*)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    BOOL isFolder = [docModel.FileSize isEqualToString:@"0"];
+    [[PBNetworkTools sharedTools] RequestDeleteFileOrFolderWithIsFolder:isFolder andProjectID:_projectModel.bimcomposerid andFileID:docModel.FileId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"删除失败" inView:nil];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if ([networkModel.Msg isEqualToString:@"OK"]) {
+            [YJProgressHUD hide];
+            [self.docList removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:@"删除失败" inView:nil];
+        }
+    }];
+}
+#pragma mark - 获取权限
+- (void)getDocPrivilegeListWith:(PBDocModel *)docModel andAuthName:(NSString *)authName andCallBack:(void (^) ( BOOL auth, NSError *error, NSString *roleId))callBack {
+    [YJProgressHUD showProgress:@"" inView:nil];
+    NSString *fileId;
+    if ([docModel.FileSize isEqualToString:@"0"]) {
+        fileId = docModel.FileId;
+    }else {
+        if (self.previousDocModel) {
+            fileId = self.previousDocModel.FileId;
+        }else {
+            fileId = self.projectModel.bimcomposerid;
+        }
+    }
+    [[PBNetworkTools sharedTools] GetDocRolesAuthByNameWithOrgID:self.projectModel.organizeid andBIMComposerID:self.projectModel.bimcomposerid andFolderID:fileId andAuthName:authName andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            callBack (NO, error, @"");
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            PBNetworkModel *networkModel2 = [PBNetworkModel yy_modelWithDictionary:networkModel.Data];
+            if (networkModel2.Ret == 1) {
+                NSArray *authArr = networkModel2.Data;
+                if (authArr.count == 0) {
+                    callBack (NO, nil, @"");
+                }else {
+                    BOOL auth = NO;
+                    NSString *roleId = @"";
+                    for (NSDictionary *obj in networkModel2.Data) {
+                        roleId = [obj valueForKey:@"RoleId"];
+                        NSArray *arr = [obj valueForKey:@"RoleDocAuths"];
+                        NSDictionary *dict = arr[0];
+                        NSString *RoleDocAuthValue = [NSString stringWithFormat:@"%@",[dict valueForKey:@"RoleDocAuthValue"]];
+                        if ([RoleDocAuthValue isEqualToString:@"1"]) {
+                            auth = YES;
+                            break;
+                        }
+                    }
+                   
+                    if (auth) {
+                        callBack (YES, nil, roleId);
+                    }else {
+                        callBack (NO, nil, roleId);
+                    }
+                }
+            }else {
+                callBack (NO, error, @"");
+            }
+        }else {
+            callBack (NO, error, @"");
+        }
+    }];
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] initWithFrame:CGRectMake(0, 0, PBScreenWidth, PBScreenHeight)];
+    }
+    return _promptView;
+}
+
+//- (PBDocShareView *)docShareView {
+//    if (_docShareView == nil) {
+//        _docShareView = [[PBDocShareView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+//        CGFloat height;
+//        if (IS_IPHONE_X) {
+//            height = 193.f + 34.f;
+//        }else {
+//            height = 193.f;
+//        }
+//        _docShareView.visualViewHeight = height;
+//        _docShareView.viewController = self;
+//        _docShareView.title = @"文档";
+//    }
+//    return _docShareView;
+//}
+- (PBShareView *)shareView {
+    if (_shareView == nil) {
+        _shareView  = [[PBShareView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 290.f + 34.f;
+        }else {
+            height = 290.f;
+        }
+        _shareView.visualViewHeight = height;
+        _shareView.viewController = self;
+        _shareView.projectID = self.projectModel.bimcomposerid;
+        _shareView.title = @"文档";
+    }
+    return _shareView;
+}
+- (void)setRoleIdStr:(NSString *)roleIdStr {
+    _roleIdStr = roleIdStr;
+}
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.h
new file mode 100644
index 0000000..41b2dd5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.h
@@ -0,0 +1,13 @@
+//
+//  PBDocListController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocBaseController.h"
+
+@interface PBDocListController : PBDocBaseController
+@property (nonatomic, assign) BOOL isOther;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.m
new file mode 100644
index 0000000..3456248
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocListController.m
@@ -0,0 +1,105 @@
+//
+//  PBDocListController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocListController.h"
+#import "PBDocModel.h"
+#import "PBDocSearchController.h"
+#import "PBNavigationController.h"
+#import "PBProjectPower.h"
+#define DocModuleName @"Document"
+@interface PBDocListController ()<UIGestureRecognizerDelegate>
+
+@end
+
+@implementation PBDocListController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+       self.edgesForExtendedLayout = UIRectEdgeNone;
+       self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+       self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    if (!_isOther) {
+       [self setupNav];
+//        for (PBProjectPower *power in self.powerArr) {
+//            if ([power.Bm_EnCode isEqualToString:DocModuleName]) {
+//                if ([power.checkstate isEqualToString:@"1"]) {
+                    //有权限
+                    self.promptView.hidden = YES;
+                    [self loadDocList];
+//                    return;
+//                }else {
+//                    //无权限
+//                    self.navigationItem.rightBarButtonItem.enabled = NO;
+//                    self.promptView.textL.text = @"暂无权限";
+//                    self.promptView.hidden = NO;
+//                    return;
+//                }
+//            }
+//        }
+//        //无权限
+//        self.navigationItem.rightBarButtonItem.enabled = NO;
+//        self.promptView.textL.text = @"暂无权限";
+//        self.promptView.hidden = NO;
+    }else {
+        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Project_nav_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backAction)];
+    }
+    
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    UIBarButtonItem *searchItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_list_searchItem"] style:UIBarButtonItemStylePlain target:self action:@selector(searchBarAction)];
+    self.navigationItem.rightBarButtonItem = searchItem;
+}
+- (void)searchBarAction {
+    PBDocSearchController *docSearchVC = [[PBDocSearchController alloc] init];
+    docSearchVC.projectModel = self.projectModel;
+    PBNavigationController *navigationController = [[PBNavigationController alloc] initWithRootViewController:docSearchVC];
+    [self.navigationController presentViewController:navigationController animated:NO completion:nil];
+}
+- (void)backAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)backItemAction {
+    [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+}
+
+- (void)loadDocList {
+    [[PBNetworkTools sharedTools] RequestGetAllFolderAndFileByProjectIDWithProjectID:self.projectModel.bimcomposerid andLikeName:@"" andNormalOrDrawings:@"Normal" andRoleId:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载文档列表失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSArray<PBDocModel *>*arr = [NSArray yy_modelArrayWithClass:[PBDocModel class] json:str];
+        self.docList = arr.mutableCopy;
+        [self.tableView reloadData];
+        if (self.docList.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            self.promptView.hidden = YES;
+        }
+    }];
+}
+
+- (void)setIsOther:(BOOL)isOther {
+    _isOther = isOther;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.h
new file mode 100644
index 0000000..5c6a3c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.h
@@ -0,0 +1,13 @@
+//
+//  PBDocSearchController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/3.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocBaseController.h"
+
+@interface PBDocSearchController : PBDocBaseController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.m
new file mode 100644
index 0000000..5276c23
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBDocSearchController.m
@@ -0,0 +1,156 @@
+//
+//  PBDocSearchController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/3.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocSearchController.h"
+
+@interface PBDocSearchController ()<UISearchBarDelegate>
+@property (nonatomic, strong) UISearchBar *searchBar;
+@property (nonatomic, strong) UIButton *maskBtn;
+@end
+
+@implementation PBDocSearchController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+}
+- (void)setupNav {
+    self.view.backgroundColor = [UIColor z_colorWithR:229 G:229 B:229];
+    self.navigationItem.hidesBackButton = YES;
+    self.searchBar = [[UISearchBar alloc] init];
+    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
+    self.searchBar.placeholder = @"搜索项目文档";
+    self.searchBar.delegate = self;
+    self.navigationItem.titleView = self.searchBar;
+    [self.searchBar becomeFirstResponder];
+    
+    UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(cancelAction)];
+    self.navigationItem.rightBarButtonItem = cancelItem;
+}
+- (void)cancelAction {
+    [self.searchBar resignFirstResponder];
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+#pragma mark - UISearchBarDelegate
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    NSString *search = [searchBar.text stringByReplacingOccurrencesOfString:@" " withString:@""];
+    if ([search isEqualToString:@""]){
+        return;
+    }
+    [self loadDocListWithLikeName:searchBar.text];
+    [self.searchBar resignFirstResponder];
+}
+//- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
+//    [self loadDocListWithLikeName:searchBar.text];
+//}
+- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
+    [self.view addSubview:self.maskBtn];
+    return YES;
+}
+
+- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
+    [self.maskBtn removeFromSuperview];
+}
+
+- (void)loadDocListWithLikeName:(NSString *)likeName {
+    if ([likeName isEqualToString:@""]) {
+        self.docList = nil;
+        [self.tableView reloadData];
+        return;
+    }
+    [[PBNetworkTools sharedTools] RequestDocSearchWithProjectID:self.projectModel.bimcomposerid andLikeName:likeName andNormalOrDrawings:@"Normal" andRoleId:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSArray<PBDocModel *>*arr = [NSArray yy_modelArrayWithClass:[PBDocModel class] json:str];
+        self.docList = arr.mutableCopy;
+        [self.tableView reloadData];
+        if (self.docList.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            self.promptView.hidden = YES;
+        }
+    }];
+}
+
+- (UIButton *)maskBtn {
+    if (_maskBtn == nil) {
+        _maskBtn = [[UIButton alloc] initWithFrame:self.view.bounds];
+        _maskBtn.backgroundColor = [UIColor colorWithWhite:0 alpha:0.2];
+        [_maskBtn addTarget:self action:@selector(cancelMaskBtn) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return _maskBtn;
+}
+- (void)cancelMaskBtn {
+    [self.searchBar resignFirstResponder];
+}
+
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];
+    
+    // Configure the cell...
+    
+    return cell;
+}
+*/
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.h
new file mode 100644
index 0000000..1be881e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBPreviewDocViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBDocModel;
+@class PBDocPrivilegeModel;
+@class PBProjectModel;
+@interface PBPreviewDocViewController : UIViewController
+@property (nonatomic, copy) NSString *docUrl;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, copy) NSString *path;
+@property (nonatomic, copy) NSString *name;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.m
new file mode 100644
index 0000000..99b10a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/ViewControllers/PBPreviewDocViewController.m
@@ -0,0 +1,169 @@
+//
+//  PBPreviewDocViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/1.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBPreviewDocViewController.h"
+#import "PBDocPrivilegeModel.h"
+#import <WebKit/WebKit.h>
+#import "PBProjectModel.h"
+#import "PBPromptView.h"
+
+@interface PBPreviewDocViewController ()<WKNavigationDelegate, WKUIDelegate>
+@property (nonatomic, strong) WKWebView *webView;
+@property (nonatomic, weak) UILabel *fileNameL;
+@end
+
+@implementation PBPreviewDocViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
+
+}
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setWebView];
+}
+
+- (void)setupNav {
+    self.view.backgroundColor = [UIColor whiteColor];
+    UIView *navBgView = [[UIView alloc] init];
+    navBgView.backgroundColor = [UIColor z_colorWithR:18 G:18 B:18];
+    [self.view addSubview:navBgView];
+    CGFloat height;
+    if (IS_IPHONE_X) {
+        height = 88.0f;
+    }else {
+        height = 64.0f;
+    }
+    [navBgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.height.equalTo(@(height));
+    }];
+    UIButton *backBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Doc_preview_back"]];
+    [backBtn addTarget:self action:@selector(backBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [navBgView addSubview:backBtn];
+    [backBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(navBgView).offset(-12);
+        make.left.equalTo(navBgView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UILabel *fileNameL = [UILabel z_labelWithText:@"文档" Color:[UIColor whiteColor] isBold:YES Font:18];
+    fileNameL.textAlignment = NSTextAlignmentCenter;
+    [navBgView addSubview:fileNameL];
+    [fileNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(backBtn);
+        make.left.equalTo(backBtn.mas_right).offset(10);
+        make.right.equalTo(navBgView).offset(-(16 + backBtn.width + 10));
+    }];
+    self.fileNameL = fileNameL;
+}
+- (void)backBtnAction {
+    [self dismissViewControllerAnimated:NO completion:nil];
+}
+- (void)setWebView {
+    self.webView = [[WKWebView alloc] init];
+    self.webView.backgroundColor = [UIColor whiteColor];
+    self.webView.navigationDelegate = self;
+    self.webView.UIDelegate = self;
+    [self.view addSubview:self.webView];
+    CGFloat height;
+    if (IS_IPHONE_X) {
+        height = 88.0f;
+    }else {
+        height = 64.0f;
+    }
+    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(height);
+        make.bottom.left.right.equalTo(self.view);
+    }];
+    [self updaWebView];
+}
+- (void)updaWebView {
+    if (self.docUrl) {
+        //文档文件下载地址
+//        NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetFile?ProjectID=%@&FileKind=File&keyValue=%@&FileInfoVersionId=",BimUrl,self.projectModel.bimcomposerid,self.docModel.FileId];
+//        [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
+        
+        
+//        NSString *downUrl = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl,self.projectModel.bimcomposerid,self.docModel.FileId];
+//        NSString *downUrlUtF8 = [downUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@":/?=&"].invertedSet];
+//        NSString *firstUrl = [NSString stringWithFormat:@"%@/api/DocViewer/Viewer/Show?downloadUrl=%@&tempNameAfterDownload=%@", BaseUrl,downUrlUtF8 ,self.docModel.FileName];
+//        NSString *docUrl = [NSString stringWithFormat:@"%@/Content/PDFJS/web/Viewer.html?file=%@", BaseUrl, [firstUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@".:/?=&%"].invertedSet]];
+        self.fileNameL.text = self.name;
+        [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.docUrl]]];
+    }else {
+        self.fileNameL.text = self.name;
+        NSURL *url = [NSURL fileURLWithPath:self.path];
+        [self.webView loadFileURL:url allowingReadAccessToURL:url];
+    }
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+-(void)setDocUrl:(NSString *)docUrl {
+    _docUrl = docUrl;
+}
+
+//页面开始加载时调用 11111
+- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation{
+    [YJProgressHUD showProgress:@"" inView:self.view];
+}
+ //主机地址被重定向时调用
+- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation{
+}
+// 页面加载失败时调用 111
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error{
+    [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+    NSLog(@"页面加载失败");
+    [self.webView reload];
+}
+// 当内容开始返回时调用 1111
+- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation{
+    NSLog(@"开始返回内容 %@",navigation);
+    
+}
+//加载完成时调用 11111
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
+    [YJProgressHUD hide];
+    NSLog(@"页面加载完成");
+}
+//网页加载内容进程终止
+- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView API_AVAILABLE(macosx(10.11), ios(9.0)){
+    NSLog(@"网页加载内容进程终止");
+    [YJProgressHUD hide];
+}
+
+- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error{
+    [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+}
+- (void)setPath:(NSString *)path {
+    _path = path;
+}
+- (void)setName:(NSString *)name {
+    _name = name;
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.h
new file mode 100644
index 0000000..ddd4c62
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.h
@@ -0,0 +1,13 @@
+//
+//  PBDocListTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/31.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBDocModel;
+@interface PBDocListTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBDocModel *docModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.m
new file mode 100644
index 0000000..ce43baf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Document/Views/PBDocListTableViewCell.m
@@ -0,0 +1,108 @@
+//
+//  PBDocListTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/31.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDocListTableViewCell.h"
+#import "PBDocModel.h"
+
+@interface PBDocListTableViewCell()
+@property (nonatomic, weak) UIImageView *docTypeImageV;
+@property (nonatomic, weak) UILabel *docNameL;
+@property (nonatomic, weak) UILabel *creatTimeL;
+@property (nonatomic, weak) UILabel *docSizeL;
+@end
+
+@implementation PBDocListTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return  self;
+}
+
+- (void)setupUI {
+    UIImageView *docTypeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@""]];
+    [self.contentView addSubview:docTypeImageV];
+    [docTypeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(self.contentView);
+        make.left.equalTo(self.contentView).offset(25);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UILabel *docNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    docNameL.numberOfLines = 0;
+    [self.contentView addSubview:docNameL];
+    [docNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(9);
+        make.left.equalTo(docTypeImageV.mas_right).offset(15);
+        make.right.equalTo(self.contentView).offset(-25);
+    }];
+    
+    UILabel *creatTimeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:12];
+    [self.contentView addSubview:creatTimeL];
+    [creatTimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(docNameL.mas_bottom).offset(8);
+        make.left.equalTo(docNameL);
+        make.right.equalTo(docNameL).offset(-80);
+        make.height.equalTo(@16);
+    }];
+    
+    UILabel *docSizeL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:12];
+    docSizeL.textAlignment = NSTextAlignmentRight;
+    [self.contentView addSubview:docSizeL];
+    [docSizeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(creatTimeL);
+        make.right.equalTo(self.contentView).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(100, 20));
+        make.bottom.equalTo(self.contentView).offset(-12);
+    }];
+    
+    self.docTypeImageV = docTypeImageV;
+    self.docNameL = docNameL;
+    self.creatTimeL = creatTimeL;
+    self.docSizeL = docSizeL;
+}
+
+- (void)setDocModel:(PBDocModel *)docModel {
+    _docModel = docModel;
+    UIImage *image;
+    NSString *fileSize;
+    if ([docModel.FileSize isEqualToString:@"0"]) {
+        image = [UIImage imageNamed:@"Doc_type_folder"];
+        fileSize = nil;
+    }else {
+        NSString *type = [docModel.FileExtensions stringByReplacingOccurrencesOfString:@"." withString:@""];
+        NSString *imageName = [NSString stringWithFormat:@"Doc_type_%@",[type lowercaseString]];
+        image = [UIImage imageNamed:imageName];
+        if (image == nil) {
+            image = [UIImage imageNamed:@"Doc_type_ unknown"];
+        }
+        
+        fileSize = [NSByteCountFormatter stringFromByteCount:[docModel.FileSize doubleValue] countStyle:NSByteCountFormatterCountStyleBinary];
+    }
+    _docTypeImageV.image = image;
+    _docSizeL.text = fileSize;
+    _docNameL.text = docModel.FileName;
+    NSRange range = [docModel.CreateDate rangeOfString:@":"];
+    NSString *date = [docModel.CreateDate substringToIndex:range.location + 3];
+    _creatTimeL.text = date;
+    
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.h
new file mode 100644
index 0000000..1d9b673
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBAritifactsTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/8.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBAritifactsTableViewCell : UITableViewCell
+@property (nonatomic, copy) NSString *title;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.m
new file mode 100644
index 0000000..0fa627d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBAritifactsTableViewCell.m
@@ -0,0 +1,60 @@
+//
+//  PBAritifactsTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/8.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBAritifactsTableViewCell.h"
+@interface PBAritifactsTableViewCell()
+@property (nonatomic, weak) UIView *bgV;
+@property (nonatomic, weak) UILabel *titleL;
+@end
+@implementation PBAritifactsTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = PBColor(229, 239, 250);
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.bottom.equalTo(self.contentView);
+    }];
+//    [bgV circleViewWithRadius:6];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(0, 122, 255) isBold:YES Font:14];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(5);
+        make.left.equalTo(bgV).offset(10);
+        make.height.equalTo(@20);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    self.titleL = titleL;
+    self.bgV = bgV;
+}
+- (void)setTitle:(NSString *)title {
+    _title = title;
+    self.titleL.text = title;
+    [_titleL mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.bgV).offset(-10);
+            
+    }];
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.h
new file mode 100644
index 0000000..bf8aefc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.h
@@ -0,0 +1,20 @@
+//
+//  PBArtifactsListTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/8.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBArtifactsListTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void (^ChooseBlock)(void);
+@property (nonatomic, copy) void (^ToViewBlock)(NSInteger index);
+@property (nonatomic, copy) void (^LookAllBlock)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.m
new file mode 100644
index 0000000..ad086a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBArtifactsListTableViewCell.m
@@ -0,0 +1,195 @@
+//
+//  PBArtifactsListTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/8.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBArtifactsListTableViewCell.h"
+#import "PBAritifactsTableViewCell.h"
+#import "PBExamineAddModel.h"
+#import "PBArtifactsInfoModel.h"
+#import "PBETaskInfoModel.h"
+static NSString *const cellId = @"cellId";
+@interface PBArtifactsListTableViewCell()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic,strong) UITableView *tableView;
+@property (nonatomic,strong) NSMutableArray *data;
+//@property (nonatomic,copy) selectedHandler  handler;
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *dataL;
+@property (nonatomic, weak) UIButton *chooseBtn;
+@property (nonatomic, weak) UIButton *totalNumberBtn;
+@end
+@implementation PBArtifactsListTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *btn = [[UIButton alloc] init];
+    [btn addTarget:self action:@selector(chooseTime) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:btn];
+    [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.contentView);
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"构件" Color:PBColor(102, 102, 102) isBold:NO Font:15];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(self.contentView).offset(15);
+        make.height.equalTo(@18);
+    }];
+    UILabel *dataL = [UILabel z_labelWithText:@"请选择构件" Color:PBColor(79, 40, 58) isBold:NO Font:15];
+    [self.contentView addSubview:dataL];
+    [dataL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(116);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.centerY.equalTo(titleL);
+        make.height.equalTo(@18);
+    }];
+    UIButton *chooseBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"set_arrow_right"]];
+    [chooseBtn addTarget:self action:@selector(chooseTime) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:chooseBtn];
+    [chooseBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+        make.right.equalTo(self.contentView).offset(-15);
+    }];
+    self.titleL = titleL;
+    self.dataL = dataL;
+    self.chooseBtn = chooseBtn;
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+//    self.tableView.rowHeight = UITableViewAutomaticDimension;
+//    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.rowHeight = 42.f;
+    self.tableView.scrollEnabled = NO;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSelectionStyleNone;
+    [self.tableView registerClass:[PBAritifactsTableViewCell class] forCellReuseIdentifier:cellId];
+    [self.contentView addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(10);
+        make.left.right.equalTo(dataL);
+        make.height.equalTo(@1);
+        make.bottom.equalTo(self.contentView).offset(-15);
+    }];
+
+    UIButton *totalNumberBtn = [[UIButton alloc] init];
+    [totalNumberBtn addTarget:self action:@selector(totalNumberBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [totalNumberBtn setTitle:@"查看全部" forState:UIControlStateNormal];
+    [totalNumberBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    totalNumberBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.contentView addSubview:totalNumberBtn];
+    [totalNumberBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(6);
+        make.left.equalTo(dataL);
+        make.height.equalTo(@32);
+    }];
+    totalNumberBtn.layer.cornerRadius = 2;
+    totalNumberBtn.layer.masksToBounds = YES;
+    self.totalNumberBtn = totalNumberBtn;
+}
+- (void)totalNumberBtnAction {
+    NSLog(@"查看全部构件");
+    if (self.LookAllBlock) {
+        self.LookAllBlock();
+    }
+}
+- (void)chooseTime {
+    if (self.ChooseBlock) {
+        self.ChooseBlock();
+    }
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.titleL.text = examineAddModel.title;
+    if (examineAddModel.dataArr.count > 0) {
+        self.dataL.textColor = PBColor(40, 58, 79);
+        self.dataL.text = [NSString stringWithFormat:@"已关联%zd个", examineAddModel.dataArr.count];
+    }else {
+        self.dataL.textColor = PBColor(204, 204, 204);
+        self.dataL.text = examineAddModel.prompt;
+    }
+    self.data = examineAddModel.dataArr.mutableCopy;
+    [self.tableView reloadData];
+    [self.tableView layoutIfNeeded];
+    CGFloat botton;
+    CGFloat height;
+    if (self.examineAddModel.dataArr.count > 10) {
+        botton = 15.f + 32.f;
+        height = 42 * 10;
+        self.totalNumberBtn.hidden = NO;
+        [self.totalNumberBtn setTitle:[NSString stringWithFormat:@"查看全部%zd个%@", self.examineAddModel.dataArr.count, self.examineAddModel.title] forState:UIControlStateNormal];
+    }else {
+        botton = 15.f;
+        height = 42 * examineAddModel.dataArr.count;
+        self.totalNumberBtn.hidden = YES;
+    }
+    [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.contentView).offset(-(botton));
+        make.height.equalTo(@(height));
+    }];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    if (self.data.count > 10) {
+        return 10;
+    }else {
+        return self.data.count;
+    }
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBAritifactsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];
+    if ([self.examineAddModel.key isEqualToString:@"Materials"] || [self.examineAddModel.key isEqualToString:@"rel_materialjson"]) {
+        id obj = self.data[indexPath.row];
+        if ([obj isKindOfClass:[PBArtifactsInfoModel class]]) {
+            PBArtifactsInfoModel *model = (PBArtifactsInfoModel *)obj;
+//            cell.isNotEdit = NO;
+            cell.title = model.bm_materialname;
+        }else {
+            PBArtifactsInfoModel *model = [PBArtifactsInfoModel yy_modelWithDictionary:obj];
+//            cell.isNotEdit = YES;
+            cell.title = model.bm_materialname;
+        }
+    }else {
+//        cell.isNotEdit = YES;
+        id obj = self.data[indexPath.row];
+        if ([obj isKindOfClass:[PBETaskInfoModel class]]) {
+            PBETaskInfoModel *taskInfoModel = (PBETaskInfoModel *)obj;
+            cell.title = taskInfoModel.NAME_;
+        }else {
+            NSDictionary *dict = self.examineAddModel.dataArr[indexPath.row];
+            cell.title = [dict valueForKey:@"NAME_"];
+        }
+    }
+//    cell.deleteBlock = ^{
+//        if (self.DeleteBlock) {
+//            self.DeleteBlock(indexPath.row);
+//        }
+//    };
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.ToViewBlock) {
+        self.ToViewBlock(indexPath.row);
+    }
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.h
new file mode 100644
index 0000000..c8731a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBPersonRoleTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCheckBoxTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void (^updateBlock)(NSString *check);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.m
new file mode 100644
index 0000000..f2f0e9b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckBoxTableViewCell.m
@@ -0,0 +1,68 @@
+//
+//  PBPersonRoleTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBCheckBoxTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBCheckBoxTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UIButton *checkBoxBtn;
+@end
+@implementation PBCheckBoxTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"确认监理人" Color:PBColor(102, 102, 102) isBold:NO Font:15];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(self.contentView).offset(15);
+        make.width.equalTo(@100);
+        make.height.equalTo(@18);
+        make.bottom.equalTo(self.contentView).offset(-20);
+    }];
+    UIButton *checkBoxBtn = [[UIButton alloc] init];
+    [self.contentView addSubview:checkBoxBtn];
+    [checkBoxBtn setBackgroundImage:[UIImage imageNamed:@"supervisor_unchecked"] forState:UIControlStateNormal];
+    [checkBoxBtn setBackgroundImage:[UIImage imageNamed:@"supervisor_checked"] forState:UIControlStateSelected];
+    [checkBoxBtn addTarget:self action:@selector(checkAction:) forControlEvents:UIControlEventTouchUpInside];
+    [checkBoxBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(28, 28));
+        make.right.equalTo(self.contentView).offset(-20);
+    }];
+    self.titleL = titleL;
+    self.checkBoxBtn = checkBoxBtn;
+}
+- (void)checkAction:(UIButton *)button {
+    button.selected = !button.selected;
+    self.examineAddModel.dataStr = button.selected? @"1" : @"0";
+    if (self.updateBlock) {
+        self.updateBlock(self.examineAddModel.dataStr);
+    }
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.titleL.text = examineAddModel.title;
+    self.checkBoxBtn.selected = [examineAddModel.dataStr isEqualToString:@"1"]? YES : NO;
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.h
new file mode 100644
index 0000000..8557318
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.h
@@ -0,0 +1,27 @@
+//
+//  PBCheckHeaderView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/15.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCheckHeaderView : UIView
+@property (nonatomic, copy) void(^ChooseImageBlock)(void);
+@property (nonatomic, copy) void(^DeleteImageBlock)(NSInteger index);
+@property (nonatomic, copy) void(^DeleteVideoBlock)(void);
+@property (nonatomic, copy) void(^PlayVideoBlock)(void);
+@property (nonatomic, copy) void(^PlayVideoUrlBlock)(NSString *url);
+@property (nonatomic, assign) BOOL isAddExamine;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSMutableArray *imageArr;
+@property (nonatomic, strong) NSMutableArray *videoArr;
+@property (nonatomic, strong) NSArray *detailsImageArr;
+@property (nonatomic, assign) RoleType roleType;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.m
new file mode 100644
index 0000000..42f9a39
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckHeaderView.m
@@ -0,0 +1,338 @@
+//
+//  PBCheckHeaderView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/15.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCheckHeaderView.h"
+#import "PBImageCollectionViewCell.h"
+static NSString *const cellID = @"cellID";
+@interface PBCheckHeaderView()<UICollectionViewDelegate, UICollectionViewDataSource, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, strong) UIButton *photoBtn;
+@property (nonatomic, weak) UIButton *addPhotoBtn;
+@property (nonatomic, weak) UIView *videoBgV;
+@property (nonatomic, weak) UIImageView *videoImageV;
+@property (nonatomic, weak) UILabel *videoL;
+@property (nonatomic, weak) UIButton *deleteVideoBtn;
+@property (nonatomic, weak) UIButton *playVideoBtn;
+@property (nonatomic, copy) NSString *playUrl;
+
+typedef void(^MyImageBlock)(UIImage * _Nullable image);
+@end
+@implementation PBCheckHeaderView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 10, self.width - 20, 90)];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self addSubview:bgV];
+    [bgV circleViewWithRadius:6];
+    
+    self.photoBtn = [[UIButton alloc] init];
+    [self.photoBtn setImage:[UIImage imageNamed:@"add_phone"] forState:UIControlStateNormal];
+    [self.photoBtn setTitle:@"添加图片或视频" forState:UIControlStateNormal];
+    [self.photoBtn setTitleColor:PBColor(97, 111, 125) forState:UIControlStateNormal];
+    self.photoBtn.titleLabel.font = [UIFont systemFontOfSize:14];
+    [self.photoBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 98)];
+    [self.photoBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
+    [self.photoBtn addTarget:self action:@selector(uploadPhoto) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:self.photoBtn];
+    [self.photoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(43);
+        make.centerX.equalTo(self);
+        make.size.mas_equalTo(CGSizeMake(142, 24));
+    }];
+    [self addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(bgV).offset(10);
+        make.bottom.right.equalTo(bgV).offset(-10);
+    }];
+    self.collectionView.hidden = YES;
+    UIButton *addPhotoBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"image_camera"]];
+    [addPhotoBtn addTarget:self action:@selector(uploadPhoto) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:addPhotoBtn];
+    [addPhotoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(bgV);
+        make.width.equalTo(@90);
+    }];
+    self.addPhotoBtn = addPhotoBtn;
+    self.addPhotoBtn.hidden = YES;
+    
+    UIView *videoBgV = [[UIView alloc] init];
+    videoBgV.backgroundColor = [UIColor whiteColor];
+    [self addSubview:videoBgV];
+    [videoBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.collectionView);
+    }];
+    UIImageView *videoImageV = [[UIImageView alloc] initWithFrame:CGRectMake(10, 20, 70, 70)];
+    [self addSubview:videoImageV];
+    [videoImageV circleViewWithRadius:6];
+    
+    UILabel *videoL = [UILabel z_labelWithText:@"可添加一条60s内视频或者6张图片添加图片请删除视频" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    videoL.numberOfLines = 0;
+    [self addSubview:videoL];
+    [videoL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(videoBgV);
+        make.left.equalTo(videoImageV.mas_right).offset(15);
+        make.width.equalTo(@210);
+    }];
+    UIButton *deleteVideoBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"video_account_delete"]];
+    [self addSubview:deleteVideoBtn];
+    [deleteVideoBtn addTarget:self action:@selector(deleteVideo) forControlEvents:UIControlEventTouchUpInside];
+    [deleteVideoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(videoBgV).offset(-10);
+        make.bottom.equalTo(videoBgV);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UIButton *playVideoBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"small_play"]];
+    [self addSubview:playVideoBtn];
+    [playVideoBtn addTarget:self action:@selector(playVideo) forControlEvents:UIControlEventTouchUpInside];
+    [playVideoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(videoImageV);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    self.videoBgV = videoBgV;
+    self.videoImageV = videoImageV;
+    self.playVideoBtn = playVideoBtn;
+    self.videoL = videoL;
+    self.deleteVideoBtn = deleteVideoBtn;
+    
+    self.videoBgV.hidden = YES;
+    self.videoImageV.hidden = YES;
+    self.playVideoBtn.hidden = YES;
+    self.videoL.hidden = YES;
+    self.deleteVideoBtn.hidden = YES;
+}
+- (void)uploadPhoto {
+    if (self.ChooseImageBlock) {
+        self.ChooseImageBlock();
+    }
+}
+- (void)playVideo {
+    NSLog(@"开始播放");
+    if (self.isAddExamine) {
+        if (self.PlayVideoBlock) {
+            self.PlayVideoBlock();
+        }
+    }else {
+        if (self.PlayVideoUrlBlock) {
+            self.PlayVideoUrlBlock(self.playUrl);
+        }
+    }
+}
+- (void)deleteVideo {
+    NSLog(@"删除视频");
+    if (self.DeleteVideoBlock) {
+        self.DeleteVideoBlock();
+    }
+}
+- (UICollectionView *)collectionView {
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+        layout.itemSize = CGSizeMake(70, 70);
+        layout.minimumLineSpacing = 10;
+        layout.minimumInteritemSpacing = 0;
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+        [_collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+//        _collectionView.pagingEnabled = YES;
+//        _collectionView.bounces = NO;
+        _collectionView.showsHorizontalScrollIndicator = NO;
+        _collectionView.backgroundColor = [UIColor whiteColor];
+        _collectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 100);
+    }
+    return _collectionView;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    if (self.isAddExamine) {
+        if (self.imageArr.count >= 4) {
+            self.addPhotoBtn.hidden = NO;
+            return self.imageArr.count;
+        }else {
+            self.addPhotoBtn.hidden = YES;
+            return self.imageArr.count + 1;
+        }
+    }else {
+        return self.detailsImageArr.count;
+    }
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    if (self.isAddExamine) {
+        if (indexPath.row == self.imageArr.count) {
+            cell.image = [UIImage imageNamed:@"img_camera_2"];
+            cell.roleType = PARTICIPANT;
+        }else {
+            cell.image = self.imageArr[indexPath.row];
+            cell.roleType = CREATOR;
+        }
+        cell.DeleteImageBlock = ^{
+            if (self.DeleteImageBlock) {
+                self.DeleteImageBlock(indexPath.row);
+            }
+        };
+    }else {
+        NSDictionary *RelationDoc = self.detailsImageArr[indexPath.row];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[RelationDoc valueForKey:@"bf_path"]];
+        cell.imageUrl = url;
+        cell.roleType = PARTICIPANT;
+    }
+    [cell circleViewWithRadius:6];
+    return cell;
+}
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.imageArr.count < 4 & indexPath.row == self.imageArr.count & self.isAddExamine) {
+        if (self.ChooseImageBlock) {
+            self.ChooseImageBlock();
+        }
+    }else {
+        SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+        photoBrowser.delegate = self;
+        photoBrowser.currentImageIndex = indexPath.item;
+        if (self.isAddExamine) {
+            photoBrowser.imageCount = self.imageArr.count;
+        }else {
+            photoBrowser.imageCount = self.detailsImageArr.count;
+        }
+        photoBrowser.sourceImagesContainerView = self.collectionView;
+        [photoBrowser show];
+    }
+}
+
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    if (self.isAddExamine) {
+        return cell.imageV.image;
+    }else {
+        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+        UIImage *image = [UIImage imageWithData:data];;
+        return image;
+    }
+}
+- (void)setImageArr:(NSMutableArray *)imageArr {
+    _imageArr = imageArr;
+    if (_imageArr.count > 0){
+        self.collectionView.hidden = NO;
+        [self.collectionView reloadData];
+    }else {
+        self.collectionView.hidden = YES;
+        self.addPhotoBtn.hidden = YES;
+    }
+    self.videoBgV.hidden = YES;
+    self.videoImageV.hidden = YES;
+    self.videoL.hidden = YES;
+    self.deleteVideoBtn.hidden = YES;
+    self.playVideoBtn.hidden = YES;
+}
+- (void)setVideoArr:(NSMutableArray *)videoArr {
+    _videoArr = videoArr;
+    if (videoArr.count > 0) {
+        self.collectionView.hidden = YES;
+        self.addPhotoBtn.hidden = YES;
+        self.videoBgV.hidden = NO;
+        self.videoImageV.hidden = NO;
+        self.videoL.hidden = NO;
+        self.deleteVideoBtn.hidden = NO;
+        self.playVideoBtn.hidden = NO;
+        PBResultVideo *result = videoArr[0];
+        self.videoImageV.image = result.coverImage;
+    }else {
+        self.collectionView.hidden = YES;
+        self.addPhotoBtn.hidden = YES;
+        self.videoBgV.hidden = YES;
+        self.videoImageV.hidden = YES;
+        self.videoL.hidden = YES;
+        self.deleteVideoBtn.hidden = YES;
+        self.playVideoBtn.hidden = YES;
+    }
+}
+- (void)setDetailsImageArr:(NSArray *)detailsImageArr {
+    _detailsImageArr = detailsImageArr;
+    NSMutableArray *imageArr = [[NSMutableArray alloc] init];
+    NSMutableArray *videoArr = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i<detailsImageArr.count; i++) {
+        NSDictionary *item = detailsImageArr[i];
+        NSString *fileName = [item valueForKey:@"bf_filename"];
+        BOOL isVideo = [fileName hasSuffix:@".mp4"];
+        if (isVideo) {
+            [videoArr addObject:item];
+        }else {
+            [imageArr addObject:item];
+        }
+    }
+    if (videoArr.count > 0) {
+        self.collectionView.hidden = YES;
+        self.addPhotoBtn.hidden = YES;
+        self.videoBgV.hidden = NO;
+        self.videoImageV.hidden = NO;
+        self.videoL.hidden = YES;
+        self.deleteVideoBtn.hidden = YES;
+        self.playVideoBtn.hidden = NO;
+        self.playUrl = [NSString stringWithFormat:@"%@%@",BaseUrl,[videoArr[0] valueForKey:@"bf_path"]];
+        [self getThumbnailImage:[NSURL URLWithString:self.playUrl] completion:^(UIImage * _Nullable image) {
+            self.videoImageV.image = image;
+        }];
+    }else {
+        self.collectionView.hidden = NO;
+        [self.collectionView reloadData];
+        self.videoBgV.hidden = YES;
+        self.videoImageV.hidden = YES;
+        self.videoL.hidden = YES;
+        self.deleteVideoBtn.hidden = YES;
+        self.playVideoBtn.hidden = YES;
+    }
+}
+- (void)setIsAddExamine:(BOOL)isAddExamine {
+    _isAddExamine = isAddExamine;
+}
+- (void)getThumbnailImage:(NSURL *)videoURL completion:(MyImageBlock)handler {
+
+    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+
+        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
+        
+        AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
+        
+        generator.appliesPreferredTrackTransform = YES;
+        
+        CMTime time = CMTimeMakeWithSeconds(0.0, 600);
+        
+        NSError *error = nil;
+        
+        CMTime actualTime;
+        
+        CGImageRef imageRef = [generator copyCGImageAtTime:time actualTime:&actualTime error:&error];
+        
+        UIImage *thumb = [[UIImage alloc] initWithCGImage:imageRef];
+        
+        CGImageRelease(imageRef);
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            handler(thumb);
+        });
+    });
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.h
new file mode 100644
index 0000000..826f5e0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBCheckImageTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/22.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCheckImageTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void(^PlayVideoBlock)(NSString *videoUrl);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.m
new file mode 100644
index 0000000..949b7de
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckImageTableViewCell.m
@@ -0,0 +1,159 @@
+//
+//  PBCheckImageTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/22.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCheckImageTableViewCell.h"
+#import "PBExamineAddModel.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBVideoCollectionViewCell.h"
+static NSString *const ImageCellID = @"ImageCellID";
+static NSString *const VideoCellID = @"VideoCellID";
+@interface PBCheckImageTableViewCell()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@end
+@implementation PBCheckImageTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.contentView);
+    }];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(80, 80);
+    layout.minimumLineSpacing = 10;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    [self.collectionView registerClass:[PBVideoCollectionViewCell class] forCellWithReuseIdentifier:VideoCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.scrollEnabled = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+        make.height.equalTo(@80);
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+//    [self.collectionView circleViewWithRadius:6];
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.examineAddModel.dataArr.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineAddModel.dataArr[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        PBVideoCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:VideoCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.videoUrl = url;
+        cell.PlayVideoBlock = ^{
+            if (self.PlayVideoBlock) {
+                self.PlayVideoBlock(url);
+            }
+        };
+        return cell;
+    }else {
+        PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.roleType = PARTICIPANT;
+        if (self.examineAddModel.dataArr.count > 3 & indexPath.item == 2) {
+            cell.countStr = [NSString stringWithFormat:@"%zd", self.examineAddModel.dataArr.count];
+        }else {
+            cell.countStr = nil;
+        }
+        cell.imageUrl = url;
+        return cell;
+    }
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineAddModel.dataArr[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        if (self.PlayVideoBlock) {
+            self.PlayVideoBlock([NSString stringWithFormat:@"%@%@",BaseUrl, [dict valueForKey:@"AttachmentUrl"]]);
+        }
+    }else {
+        SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+        photoBrowser.delegate = self;
+        photoBrowser.currentImageIndex = indexPath.item;
+        photoBrowser.imageCount = self.examineAddModel.dataArr.count;
+        photoBrowser.sourceImagesContainerView = self.collectionView;
+        [photoBrowser show];
+    }
+}
+ 
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+    UIImage *image = [UIImage imageWithData:data];;
+    return image;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(1, 1);
+    layout.minimumLineSpacing = 0;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    
+    CGFloat height;
+    NSInteger count = examineAddModel.dataArr.count;
+    if (count <= 0) {
+        height = 0.f;
+    }else if (count == 1) {
+        height = 184.f;
+        layout.itemSize = CGSizeMake(MainScreenWidth - 20 * 2, 184);
+        layout.minimumLineSpacing = 0.f;
+    }else if (count == 2) {
+        height = 184.f;
+        layout.itemSize = CGSizeMake((MainScreenWidth - (20 * 2) - 1) / 2, 184);
+        layout.minimumLineSpacing = 1.f;
+    }else {
+        height = 92.f;
+        layout.itemSize = CGSizeMake((MainScreenWidth - (20 + 3) * 2) / 3, 92);
+        layout.minimumLineSpacing = 3.f;
+    }
+    
+    [self.collectionView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@(height));
+    }];
+    if (count > 0) {
+        [self.collectionView setCollectionViewLayout:layout animated:NO];
+    }
+    [self.collectionView reloadData];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.h
new file mode 100644
index 0000000..1e5dd9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBCheckInfoTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCheckInfoTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.m
new file mode 100644
index 0000000..eeb559d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBCheckInfoTableViewCell.m
@@ -0,0 +1,62 @@
+//
+//  PBCheckInfoTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCheckInfoTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBCheckInfoTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@end
+@implementation PBCheckInfoTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *titleV = [[UIView alloc] init];
+    titleV.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:titleV];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:14];
+    titleL.numberOfLines = 0;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleV).offset(15);
+        make.left.equalTo(titleV).offset(15);
+        make.right.equalTo(titleV).offset(-15);
+        make.bottom.equalTo(titleV).offset(-15);
+    }];
+    
+    [titleV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(5);
+        make.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.bottom.equalTo(self.contentView).offset(-10);
+    }];
+    [titleV circleViewWithRadius:6];
+    self.titleL = titleL;
+
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.titleL.text = examineAddModel.dataStr;
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.h
new file mode 100644
index 0000000..7c4cb7b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.h
@@ -0,0 +1,24 @@
+//
+//  PBTextInputTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/27.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBEAddImageView : UIView
+@property (nonatomic, copy) void(^ChooseImageBlock)(void);
+@property (nonatomic, copy) void(^DeleteImageBlock)(NSInteger index);
+@property (nonatomic, copy) void(^DeleteVideoBlock)(void);
+@property (nonatomic, copy) void(^PlayVideoBlock)(void);
+@property (nonatomic, assign) BOOL isAddExamine;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSMutableArray *imageArr;
+@property (nonatomic, strong) NSArray *detailsImageArr;
+@property (nonatomic, assign) RoleType roleType;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.m
new file mode 100644
index 0000000..2ee156b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEAddImageView.m
@@ -0,0 +1,172 @@
+//
+//  PBEAddImageView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/15.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBEAddImageView.h"
+#import "PBImageCollectionViewCell.h"
+static NSString *const cellID = @"cellID";
+@interface PBEAddImageView()<UICollectionViewDelegate, UICollectionViewDataSource, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, strong) UIButton *photoBtn;
+@property (nonatomic, weak) UIButton *addPhotoBtn;
+@end
+@implementation PBEAddImageView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 10, self.width - 20, 90)];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self addSubview:bgV];
+    [bgV circleViewWithRadius:6];
+    
+    self.photoBtn = [[UIButton alloc] init];
+    [self.photoBtn setImage:[UIImage imageNamed:@"add_phone"] forState:UIControlStateNormal];
+    [self.photoBtn setTitle:@"添加图片" forState:UIControlStateNormal];
+    [self.photoBtn setTitleColor:PBColor(97, 111, 125) forState:UIControlStateNormal];
+    self.photoBtn.titleLabel.font = [UIFont systemFontOfSize:14];
+    [self.photoBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 98)];
+    [self.photoBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
+    [self.photoBtn addTarget:self action:@selector(uploadPhoto) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:self.photoBtn];
+    [self.photoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(43);
+        make.centerX.equalTo(self);
+        make.size.mas_equalTo(CGSizeMake(122, 24));
+    }];
+    [self addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(bgV).offset(10);
+        make.bottom.right.equalTo(bgV).offset(-10);
+    }];
+    self.collectionView.hidden = YES;
+    UIButton *addPhotoBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"image_camera"]];
+    [addPhotoBtn addTarget:self action:@selector(uploadPhoto) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:addPhotoBtn];
+    [addPhotoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(bgV);
+        make.width.equalTo(@90);
+    }];
+    self.addPhotoBtn = addPhotoBtn;
+    self.addPhotoBtn.hidden = YES;
+}
+- (void)uploadPhoto {
+    if (self.ChooseImageBlock) {
+        self.ChooseImageBlock();
+    }
+}
+
+- (UICollectionView *)collectionView {
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+        layout.itemSize = CGSizeMake(70, 70);
+        layout.minimumLineSpacing = 10;
+        layout.minimumInteritemSpacing = 0;
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+        [_collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+//        _collectionView.pagingEnabled = YES;
+//        _collectionView.bounces = NO;
+        _collectionView.showsHorizontalScrollIndicator = NO;
+        _collectionView.backgroundColor = [UIColor whiteColor];
+        _collectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 100);
+    }
+    return _collectionView;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    if (self.isAddExamine) {
+        return self.imageArr.count;
+    }else {
+        return self.detailsImageArr.count;
+    }
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    cell.image = self.imageArr[indexPath.row];
+    [cell circleViewWithRadius:6];
+    if (self.isAddExamine) {
+        cell.roleType = CREATOR;//PARTICIPANT
+        cell.DeleteImageBlock = ^{
+            if (self.DeleteImageBlock) {
+                NSInteger index = indexPath.row;
+                self.DeleteImageBlock(index);
+            }
+        };
+    }else {
+        NSDictionary *RelationDoc = self.detailsImageArr[indexPath.row];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[RelationDoc valueForKey:@"bf_path"]];
+        cell.imageUrl = url;
+        cell.roleType = PARTICIPANT;
+    }
+    return cell;
+}
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    if (self.isAddExamine) {
+        photoBrowser.imageCount = self.imageArr.count;
+    }else {
+        photoBrowser.imageCount = self.detailsImageArr.count;
+    }
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+    
+}
+
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    if (self.isAddExamine) {
+        return cell.imageV.image;
+    }else {
+        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+        UIImage *image = [UIImage imageWithData:data];;
+        return image;
+    }
+}
+- (void)setImageArr:(NSMutableArray *)imageArr {
+    _imageArr = imageArr;
+    if (_imageArr.count > 0){
+        self.addPhotoBtn.hidden = NO;
+        self.collectionView.hidden = NO;
+        [self.collectionView reloadData];
+    }else {
+        self.collectionView.hidden = YES;
+        self.addPhotoBtn.hidden = YES;
+    }
+
+}
+-(void)setDetailsImageArr:(NSArray *)detailsImageArr {
+    _detailsImageArr = detailsImageArr;
+    self.collectionView.hidden = NO;
+    self.addPhotoBtn.hidden = YES;
+    [self.collectionView reloadData];
+}
+- (void)setIsAddExamine:(BOOL)isAddExamine {
+    _isAddExamine = isAddExamine;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.h
new file mode 100644
index 0000000..6b00990
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.h
@@ -0,0 +1,24 @@
+//
+//  PBEditTimeView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/30.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@class PBSiteMechanicalModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBEditTimeView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void(^ChooseCompleteBlock)(BOOL isSelsected, NSString *date);
+@property (nonatomic, copy) NSString *fillData;
+@property (nonatomic, strong) PBSiteMechanicalModel *siteMechanicalModel;
+- (void)show;
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.m
new file mode 100644
index 0000000..9ad5ca8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBEditTimeView.m
@@ -0,0 +1,321 @@
+//
+//  PBEditTimeView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/30.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBEditTimeView.h"
+#import "PBExamineAddModel.h"
+#import "PBSiteMechanicalModel.h"
+#define MAXYEAR 2099
+#define MINYEAR 2022
+@interface PBEditTimeView()<UIPickerViewDelegate,UIPickerViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UIPickerView *pickerView;
+@property (nonatomic, assign) BOOL isSelsected;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, copy) NSString *selectStr;
+@end
+@implementation PBEditTimeView{
+    NSMutableArray *_dateArr;
+    //日期存储数组
+    NSMutableArray *_yearArray;
+    NSMutableArray *_monthArray;
+    NSMutableArray *_dayArray;
+    
+    NSString *_dateFormatter;
+    //记录位置
+    NSInteger yearIndex;
+    NSInteger monthIndex;
+    NSInteger dayIndex;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        
+        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bgView.bounds      byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight   cornerRadii:CGSizeMake(10, 10)];
+        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+        maskLayer.frame = self.bgView.bounds;
+        maskLayer.path = maskPath.CGPath;
+        self.bgView.layer.mask = maskLayer;
+
+        _dateFormatter = @"yyyy-MM-dd";
+        [self setupUI];
+        [self defaultConfig];
+    }
+    return self;
+}
+- (void)defaultConfig {
+    NSDate *date = [NSDate date];
+    NSInteger year = date.year;
+    NSInteger month = date.month;
+    self.selectStr = [NSString stringWithFormat:@"%zd年%zd月%zd日",year, month, date.day];
+    //设置年月日时分数据
+    _dateArr = [self setArray:_dateArr];
+    _yearArray = [self setArray:_yearArray];
+    _monthArray = [self setArray:_monthArray];
+    _dayArray = [self setArray:_dayArray];
+    for (NSInteger i=1; i<13; i++) {
+        NSString *num = [NSString stringWithFormat:@"%zd",i];
+        [_monthArray addObject:num];
+    }
+    for (NSInteger i=year-1; i<=year+1; i++) {
+        NSString *num = [NSString stringWithFormat:@"%zd",i];
+        [_yearArray addObject:num];
+    }
+    NSInteger startYear;
+    NSInteger startMonth;
+    if (month == 1) {
+        startYear = year - 1;
+        startMonth = 12;
+    }else {
+        startYear = year;
+        startMonth = month - 1;
+    }
+    for (NSInteger i = 0; i < 12; i++) {
+        NSInteger monthIndex = (startMonth + i - 1) % 12;
+        NSInteger monthNum = [_monthArray[monthIndex] integerValue];
+        NSInteger numDay = [self DaysfromYear:startYear andMonth:monthNum];
+        for (NSInteger j = 1; j <= numDay; j++) {
+            NSString *timeStr;
+            if (startYear == date.year & monthNum == date.month & j == date.day) {
+                timeStr = @"今天";
+            }else {
+                timeStr = [NSString stringWithFormat:@"%zd年%zd月%zd日",startYear, monthNum, j];
+            }
+            [_dateArr addObject:timeStr];
+        }
+        startYear = startYear + monthNum / 12;
+    }
+}
+- (NSMutableArray *)setArray:(id)mutableArray {
+    if (mutableArray)
+        [mutableArray removeAllObjects];
+    else
+        mutableArray = [NSMutableArray array];
+    return mutableArray;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point = [[touches anyObject]locationInView:self];
+    CALayer *layer = [self.layer hitTest:point];
+    if (layer == self.layer) {
+        self.isSelsected = NO;
+        [self hidden];
+    }
+}
+- (void)hidden {
+    if (self.ChooseCompleteBlock) {
+        self.ChooseCompleteBlock(self.isSelsected, self.selectStr);
+    }
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBEditTimeView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UILabel *promptL =[UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(12);
+        make.left.equalTo(self.bgView).offset(20);
+        make.right.equalTo(self.bgView).offset(-20);
+        make.height.equalTo(@18);
+    }];
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = PBColor(244, 245, 246);
+    [self.bgView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(42);
+        make.left.equalTo(self.bgView).offset(25);
+        make.right.equalTo(self.bgView).offset(-25);
+        make.height.equalTo(@1);
+    }];
+    self.pickerView = [[UIPickerView alloc]init];
+    self.pickerView.backgroundColor = [UIColor whiteColor];
+    self.pickerView.delegate = self;
+    self.pickerView.dataSource = self;
+    [self.bgView addSubview:self.pickerView];
+    [self.pickerView reloadAllComponents];//刷新UIPickerView
+    [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(linView.mas_bottom);
+        make.right.equalTo(self.bgView).offset(-10);
+        make.left.equalTo(self.bgView).offset(10);
+        make.height.equalTo(@193);
+    }];
+    
+    UIButton *determineBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_add_confirm"]];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn addTarget:self action:@selector(determineBtnActio) forControlEvents:UIControlEventTouchUpInside];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.pickerView.mas_bottom).offset(7);
+        make.left.equalTo(self.bgView).offset(10);
+        make.right.equalTo(self.bgView).offset(-10);
+        make.height.equalTo(@50);
+    }];
+    self.promptL = promptL;
+}
+
+- (void)determineBtnActio {
+    self.isSelsected = YES;
+    if ([self.selectStr isEqualToString:@"今天"]) {
+        NSDate *date = [NSDate date];
+        self.selectStr = [NSString stringWithFormat:@"%zd年%zd月%zd日",date.year, date.month, date.day];
+    }
+    if (self.examineAddModel) {
+        self.examineAddModel.dataStr = self.selectStr.copy;
+    }else if(self.siteMechanicalModel){
+        self.siteMechanicalModel.MachineDetial_Estimated = self.selectStr.copy;
+    }else {
+        self.fillData = self.selectStr.copy;
+    }
+    [self hidden];
+}
+
+#pragma mark UIPickerViewDelegate && UIPickerViewDataSource
+- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
+    return 1;
+}
+
+- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
+    return _dateArr.count;
+}
+- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
+    return 40.f;
+}
+
+- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
+    self.selectStr = _dateArr[row];
+}
+
+- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
+        UILabel *customLabel = (UILabel *)view;
+        if (!customLabel) {
+            customLabel = [[UILabel alloc] init];
+            customLabel.textAlignment = NSTextAlignmentCenter;
+            [customLabel setFont:[UIFont systemFontOfSize:20]];
+        }
+        NSString *title = _dateArr[row];
+        customLabel.text = title;
+        customLabel.textColor = TitleColor;
+        return customLabel;
+}
+
+//滚动到指定的时间位置
+- (void)getNowDate:(NSDate *)date animated:(BOOL)animated {
+    if (!date) {
+        date = [NSDate date];
+    }
+    NSInteger startYear;
+    NSInteger startMonth;
+    if (date.month == 1) {
+        startYear = date.year - 1;
+        startMonth = 12;
+    }else {
+        startYear = date.year;
+        startMonth = date.month - 1;
+    }
+    NSInteger day = [self DaysfromYear:startYear andMonth:startMonth];
+    NSInteger index = day + date.day - 1;
+    [self.pickerView selectRow:index inComponent:0 animated:animated];
+}
+
+//通过年月求每月天数
+- (NSInteger)DaysfromYear:(NSInteger)year andMonth:(NSInteger)month
+{
+    NSInteger num_year  = year;
+    NSInteger num_month = month;
+    BOOL isrunNian = num_year%4==0 ? (num_year%100==0? (num_year%400==0?YES:NO):YES):NO;
+    switch (num_month) {
+        case 1:case 3:case 5:case 7:case 8:case 10:case 12:{
+//            [self setdayArray:31];
+            return 31;
+        }
+        case 4:case 6:case 9:case 11:{
+//            [self setdayArray:30];
+            return 30;
+        }
+        case 2:{
+            if (isrunNian) {
+//                [self setdayArray:29];
+                return 29;
+            }else{
+//                [self setdayArray:28];
+                return 28;
+            }
+        }
+        default:
+            break;
+    }
+    return 0;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.promptL.text = examineAddModel.title;
+    if(_examineAddModel.dataStr) {
+        NSDate *scrollToDate = [NSDate date:_examineAddModel.dataStr WithFormat:_dateFormatter];
+        [self getNowDate:scrollToDate animated:NO];
+    }else {
+        [self getNowDate:nil animated:NO];
+    }
+}
+
+- (void)setFillData:(NSString *)fillData {
+    _fillData = fillData;
+    self.promptL.text = @"填报日期";
+    if (fillData) {
+        NSDate *scrollToDate = [NSDate date:_fillData WithFormat:_dateFormatter];
+        [self getNowDate:scrollToDate animated:NO];
+    }else {
+        [self getNowDate:nil animated:NO];
+    }
+}
+- (void)setSiteMechanicalModel:(PBSiteMechanicalModel *)siteMechanicalModel {
+    _siteMechanicalModel = siteMechanicalModel;
+    self.promptL.text = @"预计到场日期";
+    if(_siteMechanicalModel.MachineDetial_Estimated) {
+        NSDate *scrollToDate = [NSDate date:_siteMechanicalModel.MachineDetial_Estimated WithFormat:_dateFormatter];
+        [self getNowDate:scrollToDate animated:NO];
+    }else {
+        [self getNowDate:nil animated:NO];
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBExamineImageTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBExamineImageTableViewCell.h
new file mode 100644
index 0000000..e2abf57
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBExamineImageTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBExamineImageTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by 东晨工元 on 2022/1/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol PBExamineImageTableViewCell <NSObject>
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.h
new file mode 100644
index 0000000..a1d648a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBInstructionsTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/14.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBInstructionsTableViewCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.m
new file mode 100644
index 0000000..13f3e01
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBInstructionsTableViewCell.m
@@ -0,0 +1,49 @@
+//
+//  PBInstructionsTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/14.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBInstructionsTableViewCell.h"
+
+@implementation PBInstructionsTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(254, 243, 243);
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"check_warning"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(12);
+        make.left.equalTo(self.contentView).offset(15);
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+    }];
+    UILabel *contentL = [UILabel z_labelWithText:@"「需整改」状态必须选择整改人,「已合格」状态下,整改人和验收人无效" Color:PBColor(244, 21, 21) isBold:NO Font:12];
+    contentL.numberOfLines = 0;
+    [self.contentView addSubview:contentL];
+    [contentL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(imageV.mas_right).offset(2);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.height.equalTo(@40);
+        make.bottom.equalTo(self.contentView).offset(-12);
+    }];
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.h
new file mode 100644
index 0000000..bfb3a73
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBListDataTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/8.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBListDataTableViewCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.m
new file mode 100644
index 0000000..263c247
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBListDataTableViewCell.m
@@ -0,0 +1,24 @@
+//
+//  PBListDataTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/8.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBListDataTableViewCell.h"
+
+@implementation PBListDataTableViewCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.h
new file mode 100644
index 0000000..9a0aebc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.h
@@ -0,0 +1,17 @@
+//
+//  PBMultiSelectPersonCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/7.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBUserModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBMultiSelectPersonCell : UITableViewCell
+@property (nonatomic, strong) PBUserModel *userModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.m
new file mode 100644
index 0000000..21a80bc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBMultiSelectPersonCell.m
@@ -0,0 +1,109 @@
+//
+//  PBMultiSelectPersonCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/7.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBMultiSelectPersonCell.h"
+#import "PBUserModel.h"
+@interface PBMultiSelectPersonCell()
+@property (nonatomic, weak) UILabel *nameShorthandL;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *typeL;
+@property (nonatomic, weak) UIImageView *chooseV;
+@end
+@implementation PBMultiSelectPersonCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *chooseV = [[UIImageView alloc] init];
+    [self.contentView addSubview:chooseV];
+    [chooseV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.left.equalTo(self.contentView).offset(12);
+        make.centerY.equalTo(self.contentView);
+    }];
+    UIView *nameBgV = [[UIView alloc] init];
+    nameBgV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:nameBgV];
+    [nameBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+        make.left.equalTo(chooseV.mas_right).offset(10);
+        make.centerY.equalTo(self.contentView);
+    }];
+    [nameBgV circleViewWithRadius:6];
+    UILabel *nameShorthandL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:14];
+    nameShorthandL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:nameShorthandL];
+    [nameShorthandL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(nameBgV);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@20);
+        make.left.equalTo(nameBgV.mas_right).offset(10);
+        make.centerY.equalTo(self.contentView);
+        make.right.equalTo(self.contentView).offset(-160);
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    typeL.textAlignment = NSTextAlignmentRight;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@16);
+        make.left.equalTo(nameL.mas_right).offset(30);
+        make.right.equalTo(self.contentView).offset(-35);
+        make.centerY.equalTo(self.contentView);
+    }];
+    self.nameShorthandL = nameShorthandL;
+    self.nameL = nameL;
+    self.typeL = typeL;
+    self.chooseV = chooseV;
+}
+- (void)setUserModel:(PBUserModel *)userModel {
+    _userModel = userModel;
+    if (userModel.isSelect) {
+        self.chooseV.image = [UIImage imageNamed:@"select_circle_select"];
+    }else {
+        self.chooseV.image = [UIImage imageNamed:@"select_circle"];
+    }
+    BOOL isChiness = [self IsChinese:userModel.RealName];
+    if (isChiness) {
+        self.nameShorthandL.text = [userModel.RealName substringFromIndex:userModel.RealName.length - 1];
+    }else {
+        self.nameShorthandL.text = [userModel.RealName substringToIndex:1];
+    }
+    self.nameL.text = userModel.RealName;
+    NSArray *role = userModel.RoleNames;
+    if (role.count > 0) {
+        self.typeL.text = role[0];
+    }
+}
+
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.h
new file mode 100644
index 0000000..11e7d10
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.h
@@ -0,0 +1,20 @@
+//
+//  PBPersonChooseTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/3.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPersonChooseTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void (^ChooseBlock)(void);
+@property (nonatomic, copy) void (^LookAllBlock)(void);
+@property (nonatomic, copy) void (^ReLoadBlock)(CGFloat height);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.m
new file mode 100644
index 0000000..c0bcad1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonChooseTableViewCell.m
@@ -0,0 +1,288 @@
+//
+//  PBPersonChooseTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/3.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBPersonChooseTableViewCell.h"
+#import "PBExamineAddModel.h"
+#import "PBPersonListView.h"
+#import "PBPersonModel.h"
+#import "MSSAutoresizeLabelFlowLayout.h"
+#import "PBPersonListCollectionViewCell.h"
+#import "MSSAutoresizeLabelFlowConfig.h"
+static NSString *const cellId = @"cellId";
+@interface PBPersonChooseTableViewCell()<UICollectionViewDataSource,UICollectionViewDelegate, MSSAutoresizeLabelFlowLayoutDataSource,MSSAutoresizeLabelFlowLayoutDelegate>
+@property (nonatomic,strong) UICollectionView *collection;
+@property (nonatomic,strong) NSMutableArray *data;
+//@property (nonatomic,copy) selectedHandler  handler;
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *personL;
+@property (nonatomic, weak) UIButton *chooseBtn;
+@property (nonatomic, weak) UIButton *totalNumberBtn;
+@property (nonatomic, weak) UIView *collectionBg;
+@property (nonatomic, assign) BOOL isLayout;
+@property (nonatomic, assign) CGFloat height;
+@end
+@implementation PBPersonChooseTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+//    self.contentView.backgroundColor = [UIColor blueColor];
+    UILabel *titleL = [UILabel z_labelWithText:@"检查人" Color:PBColor(102, 102, 102) isBold:NO Font:15];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(self.contentView).offset(15);
+        make.width.equalTo(@100);
+        make.height.equalTo(@18);
+    }];
+    UILabel *personL = [UILabel z_labelWithText:@"请指定检查人" Color:PBColor(79, 40, 58) isBold:NO Font:15];
+    [self.contentView addSubview:personL];
+    [personL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(116);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.top.equalTo(titleL);
+        make.height.equalTo(@18);
+    }];
+    UIButton *chooseBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"set_arrow_right"]];
+    [chooseBtn addTarget:self action:@selector(chooseTime) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:chooseBtn];
+    [chooseBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+        make.right.equalTo(self.contentView).offset(-15);
+    }];
+    UIButton *btn = [[UIButton alloc] init];
+    [btn addTarget:self action:@selector(chooseTime) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:btn];
+    [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.contentView);
+    }];
+    
+    self.titleL = titleL;
+    self.personL = personL;
+    self.chooseBtn = chooseBtn;
+    
+//    UIView *collectionBg = [[UIView alloc] init];
+//    collectionBg.backgroundColor = [UIColor yellowColor];
+//    [self.contentView addSubview:collectionBg];
+//    [collectionBg mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.contentView).offset(53);
+//        make.left.equalTo(self.contentView).offset(100);
+//        make.right.equalTo(self.contentView).offset(-20);
+//        make.height.equalTo(@1);
+//        make.bottom.equalTo(self.contentView).offset(-15);
+//    }];
+
+    MSSAutoresizeLabelFlowLayout *layout = [[MSSAutoresizeLabelFlowLayout alloc]init];
+    layout.delegate = self;
+    layout.dataSource = self;
+    self.collection = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];
+    self.collection.backgroundColor = [UIColor whiteColor];
+    self.collection.allowsMultipleSelection = YES;
+    self.collection.delegate = self;
+    self.collection.dataSource = self;
+//    self.collection.scrollEnabled = NO;
+    [self.collection registerClass:[PBPersonListCollectionViewCell class] forCellWithReuseIdentifier:cellId];
+    [self.contentView addSubview:self.collection];
+    [self.collection mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.left.right.bottom.equalTo(collectionBg);
+        make.top.equalTo(self.contentView).offset(53);
+        make.left.equalTo(self.contentView).offset(100);
+        make.right.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@1);
+        make.bottom.equalTo(self.contentView).offset(-15);
+    }];
+
+    UIButton *totalNumberBtn = [[UIButton alloc] init];
+    [totalNumberBtn addTarget:self action:@selector(totalNumberBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [totalNumberBtn setTitle:@"查看全部" forState:UIControlStateNormal];
+    [totalNumberBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    totalNumberBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.contentView addSubview:totalNumberBtn];
+    [totalNumberBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collection.mas_bottom);
+        make.left.equalTo(personL);
+        make.height.equalTo(@32);
+    }];
+    totalNumberBtn.layer.cornerRadius = 6;
+    totalNumberBtn.layer.masksToBounds = YES;
+    self.totalNumberBtn = totalNumberBtn;
+    self.totalNumberBtn.hidden = YES;
+//    self.collectionBg = collectionBg;
+    
+}
+- (void)totalNumberBtnAction {
+    NSLog(@"查看全部人员");
+    if (self.LookAllBlock) {
+        self.LookAllBlock();
+    }
+}
+- (void)chooseTime {
+    if (self.ChooseBlock) {
+        self.ChooseBlock();
+    }
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.data = [[NSMutableArray alloc] init];
+    self.data = examineAddModel.personArr.mutableCopy;
+    [self.collection reloadData];
+    [self.collection layoutIfNeeded];
+    if (self.examineAddModel.personArr.count > 0) {
+        [self.collection mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.equalTo(@(76));
+//            make.bottom.equalTo(self.contentView).offset(-(bottom));
+        }];
+    }else {
+        [self.collection mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.equalTo(@(1));
+//            make.bottom.equalTo(self.contentView).offset(-(bottom));
+        }];
+    }
+    
+    self.titleL.text = examineAddModel.title;
+//    if (examineAddModel.personArr.count > 10) {
+//        self.totalNumberBtn.hidden = NO;
+//    }else {
+//        self.totalNumberBtn.hidden = YES;
+//    }
+    if (examineAddModel.personArr.count > 0) {
+        self.personL.textColor = PBColor(40, 58, 79);
+        self.personL.text = [NSString stringWithFormat:@"已选择%zd人", examineAddModel.personArr.count];
+    }else {
+        self.personL.textColor = PBColor(204, 204, 204);
+        self.personL.text = examineAddModel.prompt;
+    }
+    
+//    if (self.data.count == 0) {
+//        [self.collectionBg mas_updateConstraints:^(MASConstraintMaker *make) {
+//            make.height.equalTo(@1);
+//        }];
+//    }
+    
+ 
+//    [self.collection setNeedsLayout];
+//    [self.collection layoutIfNeeded];
+    
+//    if (self.examineAddModel.personArr.count > 0) {
+//        NSLog(@"hhhhhhhhhhhhhhhhh-%f-%f",self.collection.contentSize.height,self.height);
+//        NSLog(@"wwwwwwwwwwwww-%f",self.collection.collectionViewLayout.collectionViewContentSize.height);
+//        [self.collection mas_updateConstraints:^(MASConstraintMaker *make) {
+//            make.height.equalTo(@(self.collection.collectionViewLayout.collectionViewContentSize.height));
+////            make.bottom.equalTo(self.contentView).offset(-(bottom));
+//        }];
+//    }else {
+//        [self.collection mas_updateConstraints:^(MASConstraintMaker *make) {
+//            make.height.equalTo(@(1));
+////            make.bottom.equalTo(self.contentView).offset(-(bottom));
+//        }];
+//    }
+    
+
+}
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return 1;
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+//    if (self.data.count > 10) {
+//        return 10;
+//    }else {
+        return self.data.count;
+//    }
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBPersonListCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
+    PBPersonModel *model = self.data[indexPath.item];
+    [cell configCellWithTitle:model.RealName];
+    return cell;
+}
+
+- (NSString *)titleForLabelAtIndexPath:(NSIndexPath *)indexPath {
+    PBPersonModel *model = self.data[indexPath.item];
+    return model.RealName;
+}
+
+- (void)layoutFinishWithNumberOfline:(NSInteger)number {
+    NSLog(@"===-=-=-=-=-=-=-=%zd",number);
+//    static NSInteger numberCount;
+//    if (numberCount == number) {
+//        return;
+//    }
+//    numberCount = number;
+    MSSAutoresizeLabelFlowConfig *config = [MSSAutoresizeLabelFlowConfig shareConfig];
+    CGFloat h = config.contentInsets.top+config.contentInsets.bottom+config.itemHeight*number+config.lineSpace*(number-1);
+    self.height = h;
+    NSLog(@"mmmmmmmmmmmmmmmm-%f",h);
+   
+     //    [self.contentView mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.bottom.equalTo(self.collection.mas_bottom).offset(15);
+//    }];
+//    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, h);
+//    [UIView animateWithDuration:0.2 animations:^{
+//        self.collection.frame = self.bounds;
+//    }];
+
+//    [self.collection mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.height.equalTo(@(h));
+//    }];
+//    [self.contentView layoutIfNeeded];
+//    CGFloat botton;
+//    if (self.examineAddModel.personArr.count > 10) {
+//        botton = 15.f + 32.f;
+//        self.totalNumberBtn.hidden = NO;
+//        [self.totalNumberBtn setTitle:[NSString stringWithFormat:@"查看全部%zd个%@", self.examineAddModel.personArr.count, self.examineAddModel.title] forState:UIControlStateNormal];
+//    }else {
+//        botton = 15.f;
+//        self.totalNumberBtn.hidden = YES;
+//    }
+//    [self.collection mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.bottom.equalTo(self.contentView).offset(-(botton));
+//    }];
+//    CGFloat bottom;
+//    if (self.examineAddModel.personArr.count > 10) {
+//        self.totalNumberBtn.hidden = NO;
+//        bottom = 32 + 15;
+//    }else {
+//        self.totalNumberBtn.hidden = YES;
+//        bottom = 15;
+//    }
+//    NSLog(@"======%f",h);
+//    if (h <= 0) {
+//        h = 1.f;
+//    }
+//    self.examineAddModel.height = h;
+//    [self.collection mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.height.equalTo(@(h));
+//        make.bottom.equalTo(self.contentView).offset(-(bottom));
+//    }];
+//    if (self.examineAddModel.height == 0) {
+////        self.examineAddModel.height = h;
+//        if (self.ReLoadBlock) {
+//            self.ReLoadBlock(h);
+//        }
+//    }
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.h
new file mode 100644
index 0000000..744db69
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBPersonListCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/4.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPersonListCollectionViewCell : UICollectionViewCell
+- (void)configCellWithTitle:(NSString *)title;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.m
new file mode 100644
index 0000000..97c0f03
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListCollectionViewCell.m
@@ -0,0 +1,39 @@
+//
+//  PBPersonListCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/4.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBPersonListCollectionViewCell.h"
+@interface PBPersonListCollectionViewCell()
+@property (nonatomic,strong) UILabel *titleLabel;
+@end
+@implementation PBPersonListCollectionViewCell
+- (UILabel *)titleLabel {
+    if (_titleLabel == nil) {
+        _titleLabel = [UILabel z_labelWithText:@"" Color:PBColor(0, 122, 255) isBold:YES Font:14];
+        _titleLabel.backgroundColor = PBColor(229, 239, 250);
+        _titleLabel.layer.cornerRadius = 6;
+        _titleLabel.layer.masksToBounds = YES;
+        _titleLabel.textAlignment = NSTextAlignmentCenter;
+//        _titleLabel.layer.borderColor = JKColor(220, 220, 220, 1.0).CGColor;
+//        _titleLabel.layer.borderWidth = 0.5;
+    }
+    return _titleLabel;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self.contentView addSubview:self.titleLabel];
+    }
+    return self;
+}
+
+- (void)configCellWithTitle:(NSString *)title {
+    self.titleLabel.frame = self.bounds;
+    self.titleLabel.text = title;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.h
new file mode 100644
index 0000000..75d3f31
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.h
@@ -0,0 +1,38 @@
+//
+//  PBPersonListView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/4.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+typedef void(^selectedHandler)(NSUInteger index,NSString *title);
+
+@interface PBPersonListView : UIView
+
+- (instancetype)initWithFrame:(CGRect)frame
+                       titles:(NSArray *)titles
+              selectedHandler:(selectedHandler)handler;
+
+- (void)insertLabelWithTitle:(NSString *)title
+                     atIndex:(NSUInteger)index
+                    animated:(BOOL)animated;
+
+- (void)insertLabelsWithTitles:(NSArray *)titles
+                     atIndexes:(NSIndexSet *)indexes
+                      animated:(BOOL)animated;
+
+- (void)deleteLabelAtIndex:(NSUInteger)index
+                  animated:(BOOL)animated;
+
+- (void)deleteLabelsAtIndexes:(NSIndexSet *)indexes
+                     animated:(BOOL)animated;
+
+- (void)reloadAllWithTitles:(NSArray *)titles;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.m
new file mode 100644
index 0000000..a324811
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonListView.m
@@ -0,0 +1,158 @@
+//
+//  PBPersonListView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/4.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBPersonListView.h"
+#import "MSSAutoresizeLabelFlowLayout.h"
+#import "PBPersonListCollectionViewCell.h"
+static NSString *const cellId = @"cellId";
+@interface PBPersonListView()<UICollectionViewDataSource,UICollectionViewDelegate, MSSAutoresizeLabelFlowLayoutDataSource,MSSAutoresizeLabelFlowLayoutDelegate>
+@property (nonatomic,strong) UICollectionView *collection;
+@property (nonatomic,strong) NSMutableArray   *data;
+@property (nonatomic,copy) selectedHandler  handler;
+@end
+
+@implementation PBPersonListView
+
+- (instancetype)initWithFrame:(CGRect)frame titles:(NSArray *)titles selectedHandler:(selectedHandler)handler {
+    self = [super initWithFrame:frame];
+    if (!titles.count) {
+        return self;
+    }
+    if (self) {
+        self.backgroundColor = [UIColor clearColor];
+        self.data = [titles mutableCopy];
+        self.handler = handler;
+        [self setup];
+    }
+    return self;
+}
+
+- (void)setup {
+    MSSAutoresizeLabelFlowLayout *layout = [[MSSAutoresizeLabelFlowLayout alloc]init];
+    layout.delegate = self;
+    layout.dataSource = self;
+    self.collection = [[UICollectionView alloc]initWithFrame:self.bounds collectionViewLayout:layout];
+    self.collection.backgroundColor = [UIColor whiteColor];
+    self.collection.allowsMultipleSelection = YES;
+    self.collection.delegate = self;
+    self.collection.dataSource = self;
+    [self.collection registerClass:[PBPersonListCollectionViewCell class] forCellWithReuseIdentifier:cellId];
+    [self addSubview:self.collection];
+    [self.collection reloadData];
+    [self.collection layoutIfNeeded];
+    self.collection.backgroundColor = [UIColor orangeColor];
+    CGFloat height = self.collection.contentSize.height;
+    NSLog(@"===========%f",height);
+    self.collection.frame = CGRectMake(0, 0, self.bounds.size.width, height);
+}
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return 1;
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.data.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBPersonListCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
+    [cell configCellWithTitle:self.data[indexPath.item]];
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.handler) {
+        NSUInteger index = indexPath.item;
+        NSString *title = self.data[index];
+        self.handler(index,title);
+    }
+}
+
+- (NSString *)titleForLabelAtIndexPath:(NSIndexPath *)indexPath {
+    return self.data[indexPath.item];
+}
+
+- (void)layoutFinishWithNumberOfline:(NSInteger)number {
+//    static NSInteger numberCount;
+//    if (numberCount == number) {
+//        return;
+//    }
+//    numberCount = number;
+//    MSSAutoresizeLabelFlowConfig *config = [MSSAutoresizeLabelFlowConfig shareConfig];
+//    CGFloat h = config.contentInsets.top+config.contentInsets.bottom+config.itemHeight*number+config.lineSpace*(number-1);
+//    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, h);
+//    [UIView animateWithDuration:0.2 animations:^{
+//        self.collection.frame = self.bounds;
+//    }];
+}
+
+- (void)insertLabelWithTitle:(NSString *)title atIndex:(NSUInteger)index animated:(BOOL)animated {
+    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:index inSection:0];
+    [self.data insertObject:title atIndex:index];
+    [self performBatchUpdatesWithAction:UICollectionUpdateActionInsert indexPaths:@[indexPath] animated:animated];
+}
+
+- (void)insertLabelsWithTitles:(NSArray *)titles atIndexes:(NSIndexSet *)indexes animated:(BOOL)animated {
+    NSArray *indexPaths = [self indexPathsWithIndexes:indexes];
+    [self.data insertObjects:titles atIndexes:indexes];
+    [self performBatchUpdatesWithAction:UICollectionUpdateActionInsert indexPaths:indexPaths animated:animated];
+}
+
+- (void)deleteLabelAtIndex:(NSUInteger)index animated:(BOOL)animated {
+    [self deleteLabelsAtIndexes:[NSIndexSet indexSetWithIndex:index] animated:animated];
+}
+
+- (void)deleteLabelsAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated {
+    NSArray *indexPaths = [self indexPathsWithIndexes:indexes];
+    [self.data removeObjectsAtIndexes:indexes];
+    [self performBatchUpdatesWithAction:UICollectionUpdateActionDelete indexPaths:indexPaths animated:animated];
+}
+
+- (void)reloadAllWithTitles:(NSArray *)titles {
+    self.data = [titles mutableCopy];
+    [self.collection reloadData];
+}
+
+- (void)performBatchUpdatesWithAction:(UICollectionUpdateAction)action indexPaths:(NSArray *)indexPaths animated:(BOOL)animated {
+    if (!animated) {
+        [UIView setAnimationsEnabled:NO];
+    }
+    [self.collection performBatchUpdates:^{
+        switch (action) {
+            case UICollectionUpdateActionInsert:
+                [self.collection insertItemsAtIndexPaths:indexPaths];
+                break;
+            case UICollectionUpdateActionDelete:
+                [self.collection deleteItemsAtIndexPaths:indexPaths];
+            default:
+                break;
+        }
+    } completion:^(BOOL finished) {
+        if (!animated) {
+            [UIView setAnimationsEnabled:YES];
+        }
+    }];
+}
+
+- (NSArray *)indexPathsWithIndexes:(NSIndexSet *)set {
+    NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:set.count];
+    [set enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
+        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx inSection:0];
+        [indexPaths addObject:indexPath];
+    }];
+    return [indexPaths copy];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.h
new file mode 100644
index 0000000..ec8a6e0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBPersonRoleTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPersonRoleTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSDictionary *roleDict;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.m
new file mode 100644
index 0000000..4d3f515
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonRoleTableViewCell.m
@@ -0,0 +1,75 @@
+//
+//  PBPersonRoleTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBPersonRoleTableViewCell.h"
+@interface PBPersonRoleTableViewCell()
+@property (nonatomic, weak) UILabel *roleNameL;
+@property (nonatomic, weak) UILabel *countL;
+@end
+@implementation PBPersonRoleTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *nameBgV = [[UIView alloc] init];
+    nameBgV.backgroundColor = PBColor(229, 239, 250);
+    [self.contentView addSubview:nameBgV];
+    [nameBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+        make.left.equalTo(self.contentView).offset(15);
+        make.centerY.equalTo(self.contentView);
+    }];
+    [nameBgV circleViewWithRadius:6];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"examine_folder"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(nameBgV);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UILabel *roleNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:roleNameL];
+    [roleNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@20);
+        make.left.equalTo(nameBgV.mas_right).offset(10);
+        make.centerY.equalTo(self.contentView);
+        make.right.equalTo(self.contentView).offset(-160);
+    }];
+    UILabel *countL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    countL.textAlignment = NSTextAlignmentRight;
+    [self.contentView addSubview:countL];
+    [countL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@16);
+        make.left.equalTo(roleNameL.mas_right).offset(30);
+        make.right.equalTo(self.contentView).offset(-35);
+        make.centerY.equalTo(self.contentView);
+    }];
+    self.roleNameL = roleNameL;
+    self.countL = countL;
+}
+- (void)setRoleDict:(NSDictionary *)roleDict {
+    _roleDict = roleDict;
+    self.roleNameL.text = [roleDict valueForKey:@"RoleName"];
+    NSArray *arr = [roleDict valueForKey:@"Users"];
+    self.countL.text = [NSString stringWithFormat:@"%zd",arr.count];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.h
new file mode 100644
index 0000000..3a2e6c8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBPersonVCTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/5.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBUserModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPersonVCTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBUserModel *userModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.m
new file mode 100644
index 0000000..3cf37b6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBPersonVCTableViewCell.m
@@ -0,0 +1,95 @@
+//
+//  PBPersonVCTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/5.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBPersonVCTableViewCell.h"
+#import "PBUserModel.h"
+@interface PBPersonVCTableViewCell()
+@property (nonatomic, weak) UILabel *nameShorthandL;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *typeL;
+@end
+@implementation PBPersonVCTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *nameBgV = [[UIView alloc] init];
+    nameBgV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:nameBgV];
+    [nameBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+        make.left.equalTo(self.contentView).offset(15);
+        make.centerY.equalTo(self.contentView);
+    }];
+    [nameBgV circleViewWithRadius:6];
+    UILabel *nameShorthandL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:14];
+    nameShorthandL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:nameShorthandL];
+    [nameShorthandL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(nameBgV);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@20);
+        make.left.equalTo(nameBgV.mas_right).offset(10);
+        make.centerY.equalTo(self.contentView);
+        make.right.equalTo(self.contentView).offset(-160);
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    typeL.textAlignment = NSTextAlignmentRight;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@16);
+        make.left.equalTo(nameL.mas_right).offset(30);
+        make.right.equalTo(self.contentView).offset(-35);
+        make.centerY.equalTo(self.contentView);
+    }];
+    self.nameShorthandL = nameShorthandL;
+    self.nameL = nameL;
+    self.typeL = typeL;
+}
+- (void)setUserModel:(PBUserModel *)userModel {
+    _userModel = userModel;
+    BOOL isChiness = [self IsChinese:userModel.RealName];
+    if (isChiness) {
+        self.nameShorthandL.text = [userModel.RealName substringFromIndex:userModel.RealName.length - 1];
+    }else {
+        self.nameShorthandL.text = [userModel.RealName substringToIndex:1];
+    }
+    self.nameL.text = userModel.RealName;
+    NSArray *role = userModel.RoleNames;
+    if (role.count > 0) {
+        self.typeL.text = role[0];
+    }
+}
+
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.h
new file mode 100644
index 0000000..9924b60
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBRadioTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/14.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRadioTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.m
new file mode 100644
index 0000000..6b05d4d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRadioTableViewCell.m
@@ -0,0 +1,125 @@
+//
+//  PBRadioTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/14.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBRadioTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBRadioTableViewCell()
+@property (nonatomic, strong) NSArray *seriousArr;
+@property (nonatomic, strong) NSArray *btnArr;
+@end
+@implementation PBRadioTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *btn1 = [UIButton z_textButton:self.seriousArr[0] fontSize:14 normalColor:PBColor(97, 111, 125) SelectedColor:[UIColor whiteColor]];
+    [btn1 setBackgroundImage:[UIImage imageNamed:@"choose_nor_bg"] forState:UIControlStateNormal];
+    [btn1 setBackgroundImage:[UIImage imageNamed:@"choose_selected_bg"] forState:UIControlStateSelected];
+    [self.contentView addSubview:btn1];
+    btn1.tag = 100 + 0;
+    [btn1 addTarget:self action:@selector(selectedAction:) forControlEvents:UIControlEventTouchUpInside];
+    [btn1 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(self.contentView).offset(15);
+        make.size.mas_equalTo(CGSizeMake(50, 32));
+        make.bottom.equalTo(self.contentView).offset(-15);
+    }];
+    [btn1 circleViewWithRadius:6];
+    btn1.selected = YES;
+
+    UIButton *btn2 = [UIButton z_textButton:self.seriousArr[1] fontSize:14 normalColor:PBColor(97, 111, 125) SelectedColor:[UIColor whiteColor]];
+    [btn2 setBackgroundImage:[UIImage imageNamed:@"choose_nor_bg"] forState:UIControlStateNormal];
+    [btn2 setBackgroundImage:[UIImage imageNamed:@"choose_selected_bg"] forState:UIControlStateSelected];
+    [self.contentView addSubview:btn2];
+    btn2.tag = 100 + 1;
+    [btn2 addTarget:self action:@selector(selectedAction:) forControlEvents:UIControlEventTouchUpInside];
+    [btn2 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(btn1.mas_right).offset(15);
+        make.size.mas_equalTo(CGSizeMake(50, 32));
+    }];
+    [btn2 circleViewWithRadius:6];
+
+    UIButton *btn3 = [UIButton z_textButton:self.seriousArr[2] fontSize:14 normalColor:PBColor(97, 111, 125) SelectedColor:[UIColor whiteColor]];
+    [btn3 setBackgroundImage:[UIImage imageNamed:@"choose_nor_bg"] forState:UIControlStateNormal];
+    [btn3 setBackgroundImage:[UIImage imageNamed:@"choose_selected_bg"] forState:UIControlStateSelected];
+    [self.contentView addSubview:btn3];
+    btn3.tag = 100 + 2;
+    [btn3 addTarget:self action:@selector(selectedAction:) forControlEvents:UIControlEventTouchUpInside];
+    [btn3 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(btn2.mas_right).offset(15);
+        make.size.mas_equalTo(CGSizeMake(80, 32));
+    }];
+    [btn3 circleViewWithRadius:6];
+    self.btnArr = @[btn1, btn2, btn3];
+}
+- (void)selectedAction:(UIButton *)sender {
+    if (!self.examineAddModel.isAddExamine) {
+        return;
+    }
+    NSInteger flag = sender.tag - 100;
+    for (NSInteger i = 0; i < self.btnArr.count; i++) {
+        UIButton *btn = self.btnArr[i];
+        if (flag == i) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+    self.examineAddModel.dataStr = self.seriousArr[flag];
+}
+- (NSArray *)seriousArr {
+    if (_seriousArr == nil) {
+        _seriousArr = @[@"一般", @"严重", @"非常严重"];
+    }
+    return _seriousArr;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    if ([examineAddModel.dataStr isEqualToString:statuChoosequalified]) {
+        for (NSInteger j = 0; j < self.btnArr.count; j++) {
+            UIButton *btn = self.btnArr[j];
+            btn.selected = NO;
+            btn.enabled = NO;
+        }
+    }else {
+        NSInteger index = 0;
+        for (NSInteger i = 0; i < self.seriousArr.count; i++) {
+            NSString *str = self.seriousArr[i];
+            if ([examineAddModel.dataStr isEqualToString:str]) {
+                index = i;
+            }
+        }
+        for (NSInteger j = 0; j < self.btnArr.count; j++) {
+            UIButton *btn = self.btnArr[j];
+            btn.enabled = YES;
+            if (index == j) {
+                btn.selected = YES;
+            }else {
+                btn.selected = NO;
+            }
+        }
+        examineAddModel.dataStr = self.seriousArr[index];
+    }
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.h
new file mode 100644
index 0000000..3318b6b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBRecordInputTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRecordInputTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.m
new file mode 100644
index 0000000..8d22180
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBRecordInputTableViewCell.m
@@ -0,0 +1,180 @@
+//
+//  PBRecordInputTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBRecordInputTableViewCell.h"
+#import "PBExamineAddModel.h"
+#define maxTextCount 500
+@interface PBRecordInputTableViewCell()<UITextViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, strong) UIToolbar *kbToolbar;
+@end
+@implementation PBRecordInputTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.right.equalTo(self.contentView);
+        make.bottom.equalTo(self.contentView);
+        make.height.equalTo(@190);
+    }];
+    [bgView circleViewWithRadius:6];
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= PBColor(40, 58, 79);
+    textView.font = [UIFont boldSystemFontOfSize:15];
+//    [textView becomeFirstResponder];
+    textView.delegate = self;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(16);
+        make.left.equalTo(bgView).offset(16);
+        make.right.equalTo(bgView).offset(-16);
+        make.bottom.equalTo(bgView).offset(-26);
+    }];
+    textView.inputAccessoryView = self.kbToolbar;
+    
+    UILabel *promptL= [UILabel z_labelWithText:@"请输入任务标题" Color:PBColor(97, 111, 125) isBold:NO Font:14];
+    [bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+    self.textView = textView;
+    self.promptL = promptL;
+}
+#pragma mark - UITextViewDelete
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
+ replacementText:(NSString *)text {
+    NSLog(@"%zd",textView.text.length);
+    NSLog(@"===shouldChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //获取高亮部分内容
+    //NSString * selectedtext = [textView textInRange:selectedRange];
+    //如果有高亮且当前字数开始位置小于最大限制时允许输入
+    if (selectedRange && pos) {
+        NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
+        NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
+        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
+        if (offsetRange.location < maxTextCount) {
+            return YES;
+        }
+        else{
+            return NO;
+        }
+    }
+    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    NSInteger caninputlen = maxTextCount - comcatstr.length;
+    if (caninputlen >= 0){
+        return YES;
+    }else{
+        NSInteger len = text.length + caninputlen;
+        //防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
+        NSRange rg = {0,MAX(len,0)};
+        if (rg.length > 0){
+            NSString *s = @"";
+            //判断是否只普通的字符或asc码(对于中文和表情返回NO)
+            BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
+            if (asc) {
+                s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
+            }else{
+                __block NSInteger idx = 0;
+                __block NSString  *trimString = @"";//截取出的字串
+                //使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
+                [text enumerateSubstringsInRange:NSMakeRange(0, [text length])
+                                         options:NSStringEnumerationByComposedCharacterSequences
+                                      usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
+                                          if (idx >= rg.length) {
+                                              *stop = YES; //取出所需要就break,提高效率
+                                              return ;
+                                          }
+                                          trimString = [trimString stringByAppendingString:substring];
+                                          idx++;
+                                      }];
+                s = trimString;
+            }
+            //rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
+            [textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
+            //既然是超出部分截取了,哪一定是最大限制了。
+//            self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
+        }
+        return NO;
+    }
+}
+
+
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    NSLog(@"===DidChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //如果在变化中是高亮部分在变,就不要计算字符了
+    if (selectedRange && pos) {
+        return;
+    }
+    NSString  *nsTextContent = textView.text;
+    NSInteger existTextNum = nsTextContent.length;
+    if (existTextNum > maxTextCount){
+        //截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
+        NSString *s = [nsTextContent substringToIndex:maxTextCount];
+        [textView setText:s];
+    }
+    self.examineAddModel.dataStr = textView.text;
+    //不让显示负数 口口日
+//    self.textLengthL.text = [NSString stringWithFormat:@"%ld/%d",MAX(0,maxTextCount - existTextNum),maxTextCount];
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel =  examineAddModel;
+    self.promptL.text = examineAddModel.prompt;
+    self.textView.text = examineAddModel.dataStr;
+    if (self.textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+}
+- (UIToolbar *) kbToolbar {
+    if (_kbToolbar == nil) {
+        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+    }
+    return _kbToolbar;
+}
+
+- (void)closeKeyboard {
+    [self endEditing:YES];
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.h
new file mode 100644
index 0000000..c40667d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBStatusTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/15.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBStatusTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, strong) void (^statusChange) (NSString *statu);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.m
new file mode 100644
index 0000000..03e9354
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBStatusTableViewCell.m
@@ -0,0 +1,104 @@
+//
+//  PBStatusTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/15.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBStatusTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBStatusTableViewCell()
+@property (nonatomic, strong) NSArray *statusArr;
+@property (nonatomic, strong) NSArray *btnArr;
+@end
+@implementation PBStatusTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *btn1 = [UIButton z_textButton:self.statusArr[0] fontSize:14 normalColor:PBColor(97, 111, 125) SelectedColor:[UIColor whiteColor]];
+    [btn1 setBackgroundImage:[UIImage imageNamed:@"choose_nor_bg"] forState:UIControlStateNormal];
+    [btn1 setBackgroundImage:[UIImage imageNamed:@"choose_selected_bg"] forState:UIControlStateSelected];
+    [self.contentView addSubview:btn1];
+    btn1.tag = 200 + 0;
+    [btn1 addTarget:self action:@selector(selectedAction:) forControlEvents:UIControlEventTouchUpInside];
+    [btn1 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(self.contentView).offset(15);
+        make.size.mas_equalTo(CGSizeMake(80, 32));
+        make.bottom.equalTo(self.contentView).offset(-15);
+    }];
+    [btn1 circleViewWithRadius:6];
+    btn1.selected = YES;
+
+    UIButton *btn2 = [UIButton z_textButton:self.statusArr[1] fontSize:14 normalColor:PBColor(97, 111, 125) SelectedColor:[UIColor whiteColor]];
+    [btn2 setBackgroundImage:[UIImage imageNamed:@"choose_nor_bg"] forState:UIControlStateNormal];
+    [btn2 setBackgroundImage:[UIImage imageNamed:@"choose_selected_bg"] forState:UIControlStateSelected];
+    [self.contentView addSubview:btn2];
+    btn2.tag = 200 + 1;
+    [btn2 addTarget:self action:@selector(selectedAction:) forControlEvents:UIControlEventTouchUpInside];
+    [btn2 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(btn1.mas_right).offset(15);
+        make.size.mas_equalTo(CGSizeMake(80, 32));
+    }];
+    [btn2 circleViewWithRadius:6];
+    self.btnArr = @[btn1, btn2];
+}
+- (void)selectedAction:(UIButton *)sender {
+    NSInteger flag = sender.tag - 200;
+    for (NSInteger i = 0; i < self.btnArr.count; i++) {
+        UIButton *btn = self.btnArr[i];
+        if (flag == i) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+    NSString *dataStr = self.statusArr[flag];
+    self.examineAddModel.dataStr = dataStr;
+    if (self.statusChange) {
+        self.statusChange(dataStr);
+    }
+}
+- (NSArray *)statusArr {
+    if (_statusArr == nil) {
+        _statusArr = @[@"需整改", @"已合格"];
+    }
+    return _statusArr;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    NSInteger index = 0;
+    for (NSInteger i = 0; i < self.statusArr.count; i++) {
+        NSString *str = self.statusArr[i];
+        if ([examineAddModel.dataStr isEqualToString:str]) {
+            index = i;
+        }
+    }
+    for (NSInteger j = 0; j < self.btnArr.count; j++) {
+        UIButton *btn = self.btnArr[j];
+        if (index == j) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+    examineAddModel.dataStr = self.statusArr[index];
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.h
new file mode 100644
index 0000000..08746a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.h
@@ -0,0 +1,20 @@
+//
+//  PBTextInputTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/27.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTextInputTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) NSString *text;
+@property (nonatomic, copy) NSString *prompt;
+@property (nonatomic, copy) void (^endEditBlock)(NSString *text);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.m
new file mode 100644
index 0000000..30600cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTextInputTableViewCell.m
@@ -0,0 +1,205 @@
+//
+//  PBTextInputTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/27.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBTextInputTableViewCell.h"
+#import "PBExamineAddModel.h"
+#define maxTextCount 200
+@interface PBTextInputTableViewCell()<UITextViewDelegate, UIGestureRecognizerDelegate>
+//@property (nonatomic, weak) UIView *topView;
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, strong) UIToolbar *kbToolbar;
+@end
+@implementation PBTextInputTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+//    UIView *topView = [[UIView alloc] init];
+//    topView.backgroundColor = PBColor(244, 245, 246);
+//    [self.contentView addSubview:topView];
+//    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.left.right.equalTo(self.contentView);
+//        make.height.equalTo(@16);
+//    }];
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.right.equalTo(self.contentView);
+        make.bottom.equalTo(self.contentView);
+        make.height.equalTo(@102);
+    }];
+    [bgView circleViewWithRadius:6];
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= PBColor(40, 58, 79);
+    textView.font = [UIFont boldSystemFontOfSize:15];
+//    [textView becomeFirstResponder];
+    textView.delegate = self;
+    textView.text = _text;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(16);
+        make.left.equalTo(bgView).offset(16);
+        make.right.equalTo(bgView).offset(-16);
+        make.bottom.equalTo(bgView).offset(-16);
+    }];
+    textView.inputAccessoryView = self.kbToolbar;
+
+    UILabel *promptL= [UILabel z_labelWithText:@"请输入任务标题" Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+    if (_text.length != 0) {
+        promptL.hidden = YES;
+    }
+//    self.topView = topView;
+    self.textView = textView;
+    self.promptL = promptL;
+}
+#pragma mark - UITextViewDelete
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
+ replacementText:(NSString *)text {
+    NSLog(@"%zd",textView.text.length);
+    NSLog(@"===shouldChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //获取高亮部分内容
+    //NSString * selectedtext = [textView textInRange:selectedRange];
+    //如果有高亮且当前字数开始位置小于最大限制时允许输入
+    if (selectedRange && pos) {
+        NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
+        NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
+        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
+        if (offsetRange.location < maxTextCount) {
+            return YES;
+        }
+        else{
+            return NO;
+        }
+    }
+    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    NSInteger caninputlen = maxTextCount - comcatstr.length;
+    if (caninputlen >= 0){
+        return YES;
+    }else{
+        NSInteger len = text.length + caninputlen;
+        //防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
+        NSRange rg = {0,MAX(len,0)};
+        if (rg.length > 0){
+            NSString *s = @"";
+            //判断是否只普通的字符或asc码(对于中文和表情返回NO)
+            BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
+            if (asc) {
+                s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
+            }else{
+                __block NSInteger idx = 0;
+                __block NSString  *trimString = @"";//截取出的字串
+                //使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
+                [text enumerateSubstringsInRange:NSMakeRange(0, [text length])
+                                         options:NSStringEnumerationByComposedCharacterSequences
+                                      usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
+                                          if (idx >= rg.length) {
+                                              *stop = YES; //取出所需要就break,提高效率
+                                              return ;
+                                          }
+                                          trimString = [trimString stringByAppendingString:substring];
+                                          idx++;
+                                      }];
+                s = trimString;
+            }
+            //rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
+            [textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
+            //既然是超出部分截取了,哪一定是最大限制了。
+//            self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
+        }
+        return NO;
+    }
+}
+
+
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    NSLog(@"===DidChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //如果在变化中是高亮部分在变,就不要计算字符了
+    if (selectedRange && pos) {
+        return;
+    }
+    NSString  *nsTextContent = textView.text;
+    NSInteger existTextNum = nsTextContent.length;
+    if (existTextNum > maxTextCount){
+        //截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
+        NSString *s = [nsTextContent substringToIndex:maxTextCount];
+        [textView setText:s];
+    }
+    self.examineAddModel.dataStr = textView.text;
+    //不让显示负数 口口日
+//    self.textLengthL.text = [NSString stringWithFormat:@"%ld/%d",MAX(0,maxTextCount - existTextNum),maxTextCount];
+}
+- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
+    if (self.endEditBlock) {
+        self.endEditBlock(textView.text);
+    }
+    return YES;
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel =  examineAddModel;
+//    if ([examineAddModel.key isEqualToString:@"RectificationRemark"]) {
+//        self.topView.backgroundColor = PBColor(244, 245, 246);
+//    }else {
+//        self.topView.backgroundColor = [UIColor blackColor];
+//    }
+    self.promptL.text = examineAddModel.prompt;
+    self.textView.text = examineAddModel.dataStr;
+    if (self.textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    if (examineAddModel.isAddExamine) {
+        self.textView.editable = YES;
+    }else {
+        self.textView.editable = NO;
+    }
+}
+- (UIToolbar *) kbToolbar {
+    if (_kbToolbar == nil) {
+        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+    }
+    return _kbToolbar;
+}
+
+- (void)closeKeyboard {
+    [self endEditing:YES];
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.h
new file mode 100644
index 0000000..b3a1037
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBTimeChooseTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/30.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTimeChooseTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void (^ChooseBlock)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.m
new file mode 100644
index 0000000..032eef2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTimeChooseTableViewCell.m
@@ -0,0 +1,86 @@
+//
+//  PBTimeChooseTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/30.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBTimeChooseTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBTimeChooseTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *timeL;
+@property (nonatomic, weak) UIButton *chooseBtn;
+@end
+@implementation PBTimeChooseTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"开始时间" Color:PBColor(102, 102, 102) isBold:NO Font:15];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(self.contentView).offset(15);
+        make.size.mas_equalTo(CGSizeMake(100, 18));
+        make.bottom.equalTo(self.contentView).offset(-15);
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(79, 40, 58) isBold:NO Font:15];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.contentView).offset(116);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.centerY.equalTo(titleL);
+        make.height.equalTo(@18);
+    }];
+    UIButton *chooseBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"set_arrow_right"]];
+    [chooseBtn addTarget:self action:@selector(chooseTime) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:chooseBtn];
+    [chooseBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+        make.right.equalTo(self.contentView).offset(-15);
+    }];
+    UIButton *btn = [[UIButton alloc] init];
+    [btn addTarget:self action:@selector(chooseTime) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:btn];
+    [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.contentView);
+    }];
+    
+    self.titleL = titleL;
+    self.timeL = timeL;
+    self.chooseBtn = chooseBtn;
+}
+- (void)chooseTime {
+    if (self.ChooseBlock) {
+        self.ChooseBlock();
+    }
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.titleL.text = examineAddModel.title;
+    if (examineAddModel.dataStr == nil || [examineAddModel.dataStr isEqualToString:@""]) {
+        self.timeL.textColor = PBColor(204, 204, 204);
+        self.timeL.text = examineAddModel.prompt;
+    }else {
+        self.timeL.textColor = PBColor(79, 40, 58);
+        self.timeL.text = examineAddModel.dataStr;
+    }
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.h
new file mode 100644
index 0000000..06daec2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBTopTitleTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/30.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTopTitleTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.m
new file mode 100644
index 0000000..bde84fe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBTopTitleTableViewCell.m
@@ -0,0 +1,66 @@
+//
+//  PBTopTitleTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/30.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBTopTitleTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBTopTitleTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@end
+
+@implementation PBTopTitleTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] init];
+    topView.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:topView];
+    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.contentView);
+        make.height.equalTo(@20);
+    }];
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView).offset(10);
+        make.left.right.bottom.equalTo(self.contentView);
+        make.height.equalTo(@45);
+    }];
+    [bgView circleViewWithRadius:6];
+    UILabel *titleL = [UILabel z_labelWithText:@"基本信息" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(22);
+        make.left.equalTo(self.contentView).offset(15);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.height.equalTo(@18);
+    }];
+    self.titleL = titleL;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.titleL.text = examineAddModel.title;
+}
+
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.h
new file mode 100644
index 0000000..83784f4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBUserCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/8.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBUserModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBUserCollectionViewCell : UICollectionViewCell
+@property (nonatomic, strong) PBUserModel *userModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.m
new file mode 100644
index 0000000..308e7a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/PBUserCollectionViewCell.m
@@ -0,0 +1,56 @@
+//
+//  PBUserCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/8.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBUserCollectionViewCell.h"
+#import "PBUserModel.h"
+@interface PBUserCollectionViewCell()
+@property (nonatomic, weak) UILabel *nameL;
+@end
+@implementation PBUserCollectionViewCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    [bgV circleViewWithRadius:6];
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:14];
+    nameL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(bgV);
+    }];
+    self.nameL = nameL;
+}
+- (void)setUserModel:(PBUserModel *)userModel {
+    _userModel = userModel;
+    BOOL isChiness = [self IsChinese:userModel.RealName];
+    if (isChiness) {
+        self.nameL.text = [userModel.RealName substringFromIndex:userModel.RealName.length - 1];
+    }else {
+        self.nameL.text = [userModel.RealName substringToIndex:1];
+    }
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.h
new file mode 100644
index 0000000..5ffbc3b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  UITableViewCell+PBExamineImageTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by 东晨工元 on 2022/1/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UITableViewCell ()
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.m
new file mode 100644
index 0000000..2d34200
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/AddViews/UITableViewCell+PBExamineImageTableViewCell.m
@@ -0,0 +1,13 @@
+//
+//  UITableViewCell+PBExamineImageTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by 东晨工元 on 2022/1/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "UITableViewCell+PBExamineImageTableViewCell.h"
+
+@implementation UITableViewCell (PBExamineImageTableViewCell)
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.h
new file mode 100644
index 0000000..c1e37c6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.h
@@ -0,0 +1,46 @@
+//
+//  PBArtifactsInfoModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/22.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBArtifactsInfoModel : NSObject
+@property (nonatomic, copy) NSString *bhaselerel;
+@property (nonatomic, copy) NSString *relelejson;
+@property (nonatomic, copy) NSString *bm_guid;
+@property (nonatomic, copy) NSString *bm_materialname;
+@property (nonatomic, copy) NSString *bm_materialcode;
+@property (nonatomic, copy) NSString *bm_materialmodel;
+@property (nonatomic, copy) NSString *bm_materialcount;
+@property (nonatomic, copy) NSString *bm_materialunit;
+@property (nonatomic, copy) NSString *bm_materialfac;
+@property (nonatomic, copy) NSString *bm_planarrtime;
+@property (nonatomic, copy) NSString *bc_guid_materialtype;
+@property (nonatomic, copy) NSString *bc_guid_materialstatus;
+@property (nonatomic, copy) NSString *bm_extjson;
+@property (nonatomic, assign) BOOL isSelected;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ bhaselerel : 1
+ relelejson : "303bec16-77b6-47fa-9944-e4e0ab18e348"
+ bm_guid : "7762f91c-204c-469a-a781-7f26cc93e3a6"
+ bm_materialname : "BB24"
+ bm_materialcode : "B1524"
+ bm_materialmodel : ""
+ bm_materialcount : 0
+ bm_materialunit : "个"
+ bm_materialfac : ""
+ bm_planarrtime : null
+ bc_guid_materialtype : "adf1e1ab-d601-4cad-ab1a-37440112b933"
+ bc_guid_materialstatus : ""
+ bm_extjson : "[{"fieldid":"760c218d-27d5-46c8-ab46-deb5b0216403","fieldname":"AA11","fieldval":""},{"fieldid":"a11adf35-3ee6-4364-a75a-cd0770822357","fieldname":"BB11","fieldval":""},{"fieldid":"8f72e5f1-9acb-40b9-850e-e8cfa95f35a8","fieldname":"CC11","fieldval":""},{"fieldid":"01333427-bd07-4191-896f-95498dae40b9","fieldname":"CC33","fieldval":""},{"fieldid":"7a2f47ef-938d-4cd0-bc1d-7beaf78a5fdc","fieldname":"qweqwe请问","fieldval":""},{"fieldid":"e3ab721b-b45d-400a-b335-8668373ddbed","fieldname":"请问","fieldval":""},{"fieldid":"469888bd-5382-4628-b544-5fcd2bc2ed6e","fieldname":"为","fieldval":""},{"fieldid":"5dc5a1f2-6af1-4083-ab8c-c4ca5b465697","fieldname":"委屈","fieldval":""}]"
+ bm_updatetime : "2020-09-01T15:24:09"
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.m
new file mode 100644
index 0000000..3e1a60d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsInfoModel.m
@@ -0,0 +1,13 @@
+//
+//  PBArtifactsInfoModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/22.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBArtifactsInfoModel.h"
+
+@implementation PBArtifactsInfoModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.h
new file mode 100644
index 0000000..65c392a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.h
@@ -0,0 +1,38 @@
+//
+//  PBArtifactsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBArtifactsModel : NSObject
+@property (nonatomic, copy) NSString *DirectChildrenCount;
+@property (nonatomic, copy) NSString *ChildrenItemCount;
+@property (nonatomic, copy) NSString *bmc_guid;
+@property (nonatomic, copy) NSString *bmc_organizeId;
+@property (nonatomic, copy) NSString *bmc_name;
+@property (nonatomic, copy) NSString *bmc_code;
+@property (nonatomic, copy) NSString *bmc_currentNumber;
+@property (nonatomic, copy) NSString *bmc_createTime;
+@property (nonatomic, copy) NSString *bmc_extjson;
+@property (nonatomic, copy) NSString *bmc_elementids;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ DirectChildrenCount : 1
+ ChildrenItemCount : 1
+ bmc_guid : "410eee11-5c11-4a94-afd1-f898904f8f41"
+ bmc_organizeId : "48617e7b-07f2-4748-9199-238af8f2bfc6"
+ bmc_name : "3"
+ bmc_code : "003"
+ bmc_currentNumber : 3
+ bmc_createTime : "2020-07-13T17:43:03"
+ bmc_extjson : null
+ bmc_elementids : null
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.m
new file mode 100644
index 0000000..b6ebc7a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBArtifactsModel.m
@@ -0,0 +1,13 @@
+//
+//  PBArtifactsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBArtifactsModel.h"
+
+@implementation PBArtifactsModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.h
new file mode 100644
index 0000000..f5c0d2e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.h
@@ -0,0 +1,29 @@
+//
+//  PBDrawingposModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/27.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBDrawingposModel : NSObject
+@property (nonatomic, copy) NSString *ExamineId;
+@property (nonatomic, copy) NSString *CreateDate;
+@property (nonatomic, copy) NSString *FileId;
+@property (nonatomic, copy) NSString *GID;
+@property (nonatomic, copy) NSString *IsDel;
+@property (nonatomic, copy) NSString *OpId;
+@property (nonatomic, copy) NSString *OpUser;
+@property (nonatomic, copy) NSString *Pixel2MX;
+@property (nonatomic, copy) NSString *Pixel2MY;
+@property (nonatomic, copy) NSString *PosX;
+@property (nonatomic, copy) NSString *PosY;
+@property (nonatomic, copy) NSString *Width;
+@property (nonatomic, copy) NSString *Height;
+@property (nonatomic, copy) NSString *X;
+@property (nonatomic, copy) NSString *Y;
+@property (nonatomic, copy) NSString *Z;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.m
new file mode 100644
index 0000000..36732b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBDrawingposModel.m
@@ -0,0 +1,64 @@
+//
+//  PBDrawingposModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/27.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBDrawingposModel.h"
+
+@implementation PBDrawingposModel
+//- (id)copyWithZone:(nullable NSZone *)zone {
+//    PBAddInfoModel *model = [[self class] allocWithZone:zone];
+//    model.title = _title;
+//    model.prompt = _prompt;
+//    model.key = _key;
+//    model.type = _type;
+//    model.configDict = _configDict;
+//    model.modelsModel = _modelsModel;
+//    model.viewsModel = _viewsModel;
+//    model.viewPointModel = _viewPointModel;
+//    model.inputStr = _inputStr;
+//    model.downImage = _downImage;
+//    model.postImages = _postImages;
+//    model.recordingIsDelete = _recordingIsDelete;
+//    model.recordingName = _recordingName;
+//    model.recordingType = _recordingType;
+//    model.recordingDetail = _recordingDetail;
+//    model.personArr = _personArr;
+//    model.timeStr = _timeStr;
+//    model.isQualified = _isQualified;
+//    model.drawposModel = _drawposModel;
+//    model.drawingsInfoModel = _drawingsInfoModel;
+//    model.recordInfo = _recordInfo;
+//    model.optional = _optional;
+//    return model;
+//}
+//- (id)mutableCopyWithZone:(nullable NSZone *)zone {
+//    PBAddInfoModel *model = [[self class] allocWithZone:zone];
+//    model.title = _title;
+//    model.prompt = _prompt;
+//    model.key = _key;
+//    model.type = _type;
+//    model.configDict = _configDict;
+//    model.modelsModel = _modelsModel;
+//    model.viewsModel = _viewsModel;
+//    model.viewPointModel = _viewPointModel;
+//    model.inputStr = _inputStr;
+//    model.downImage = _downImage;
+//    model.postImages = _postImages;
+//    model.recordingIsDelete = _recordingIsDelete;
+//    model.recordingName = _recordingName;
+//    model.recordingType = _recordingType;
+//    model.recordingDetail = _recordingDetail;
+//    model.personArr = _personArr;
+//    model.timeStr = _timeStr;
+//    model.isQualified = _isQualified;
+//    model.drawposModel = _drawposModel;
+//    model.drawingsInfoModel = _drawingsInfoModel;
+//    model.recordInfo = _recordInfo;
+//    model.optional = _optional;
+//    return model;
+//}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.h
new file mode 100644
index 0000000..2f32965
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.h
@@ -0,0 +1,78 @@
+//
+//  PBArtifactsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBETaskInfoModel : NSObject
+@property (nonatomic, copy) NSString *ACTUALDURATION_;
+@property (nonatomic, copy) NSString *ACTUALFINISH_;
+@property (nonatomic, copy) NSString *ACTUALSTART_;
+@property (nonatomic, copy) NSString *ASSIGNMENTS_;
+@property (nonatomic, copy) NSString *CONSTRAINTDATE_;
+@property (nonatomic, copy) NSString *CONSTRAINTTYPE_;
+@property (nonatomic, copy) NSString *CRITICAL2_;
+@property (nonatomic, copy) NSString *CRITICAL_;
+@property (nonatomic, copy) NSString *DEPARTMENT_;
+@property (nonatomic, copy) NSString *DURATION_;
+@property (nonatomic, copy) NSString *FINISH_;
+@property (nonatomic, copy) NSString *FIXEDDATE_;
+@property (nonatomic, copy) NSString *ID_;
+@property (nonatomic, copy) NSString *MANUAL_;
+@property (nonatomic, copy) NSString *MILESTONE_;
+@property (nonatomic, copy) NSString *NAME_;
+@property (nonatomic, copy) NSString *NOTES_;
+@property (nonatomic, copy) NSString *PARENTTASKUID_;
+@property (nonatomic, copy) NSString *PERCENTCOMPLETE_;
+@property (nonatomic, copy) NSString *PREDECESSORLINK_;
+@property (nonatomic, copy) NSString *PRINCIPAL_;
+@property (nonatomic, copy) NSString *PRIORITY_;
+@property (nonatomic, copy) NSString *PROJECTUID_;
+@property (nonatomic, copy) NSString *START_;
+@property (nonatomic, copy) NSString *SUMMARY_;
+@property (nonatomic, copy) NSString *UID_;
+@property (nonatomic, copy) NSString *WBS_;
+@property (nonatomic, copy) NSString *WEIGHT_;
+@property (nonatomic, copy) NSString *WORK_;
+@property (nonatomic, strong) NSArray *Children;
+@property (nonatomic, assign) BOOL isSelected;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ ACTUALDURATION_: null
+ ACTUALFINISH_: null
+ ACTUALSTART_: null
+ ASSIGNMENTS_: null
+ CONSTRAINTDATE_: null
+ CONSTRAINTTYPE_: 0
+ CRITICAL2_: 0
+ CRITICAL_: 0
+ DEPARTMENT_: null
+ DURATION_: 22
+ FINISH_: "2021-12-13T23:59:59"
+ FIXEDDATE_: 0
+ ID_: 3
+ MANUAL_: 0
+ MILESTONE_: 0
+ NAME_: "模块2"
+ NOTES_: null
+ PARENTTASKUID_: "-1"
+ PERCENTCOMPLETE_: 100
+ PREDECESSORLINK_: "[]"
+ PRINCIPAL_: null
+ PRIORITY_: null
+ PROJECTUID_: "e63d0c13-9056-4344-b650-255dd6363a76"
+ START_: "2021-11-22T00:00:00"
+ SUMMARY_: 1
+ UID_: "2E7DB305-C16E-4271-A875-024AF97B5B45"
+ WBS_: null
+ WEIGHT_: 0
+ WORK_: 0
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.m
new file mode 100644
index 0000000..950dc7c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskInfoModel.m
@@ -0,0 +1,13 @@
+//
+//  PBArtifactsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBETaskInfoModel.h"
+
+@implementation PBETaskInfoModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.h
new file mode 100644
index 0000000..cff1123
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.h
@@ -0,0 +1,32 @@
+//
+//  PBArtifactsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBETaskModel : NSObject
+@property (nonatomic, copy) NSString *NAME_;
+@property (nonatomic, copy) NSString *bop_guid;
+@property (nonatomic, copy) NSString *bop_modelId;
+@property (nonatomic, copy) NSString *bop_modelphase;
+@property (nonatomic, copy) NSString *bop_organizeId;
+@property (nonatomic, copy) NSString *bop_planId;
+@property (nonatomic, copy) NSString *cnt;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ NAME_: "cs"
+ bop_guid: "07ea3605-a35e-48f2-8048-27c0eed2dc32"
+ bop_modelId: ""
+ bop_modelphase: ""
+ bop_organizeId: "f6932be1-79ce-486a-8623-88743a9c5b9c"
+ bop_planId: "e63d0c13-9056-4344-b650-255dd6363a76"
+ cnt: 0
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.m
new file mode 100644
index 0000000..8e0bcbf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBETaskModel.m
@@ -0,0 +1,13 @@
+//
+//  PBArtifactsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/21.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBETaskModel.h"
+
+@implementation PBETaskModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.h
new file mode 100644
index 0000000..caade79
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.h
@@ -0,0 +1,69 @@
+//
+//  PBExamineAddModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+typedef enum : NSUInteger {
+    START,
+    END,
+    PLAY
+} RecordingType;
+
+@class PBModelsModel;
+@class PBViewPointModel;
+@class PBDrawingsInfoModel;
+@class PBDrawingposModel;
+
+@interface PBExamineAddModel : NSObject
+//标题
+@property (nonatomic, copy) NSString *title;
+//对应字段Key
+@property (nonatomic, copy) NSString *key;
+//cell显示的类型
+@property (nonatomic, copy) NSString *cellType;
+//提示信息
+@property (nonatomic, copy) NSString *prompt;
+//输入类型的文字存储/ 验收日期/ 限期整改日期/ 检查结果/
+@property (nonatomic, copy) NSString *dataStr;
+//人员选择存储
+@property (nonatomic, strong) NSArray *personArr;
+//关联任务数组
+@property (nonatomic, strong) NSArray *dataArr;
+//工程/专业/班组 数据记录
+@property (nonatomic, strong) NSDictionary *dataDict;
+//定位选择的模型
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+//定位选择的视点
+@property (nonatomic, strong) PBViewPointModel *viewPointModel;
+//定位选择的图纸信息
+@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;
+//定位上传数据
+@property (nonatomic, strong) PBDrawingposModel *drawingposModel;
+//录音本地name
+@property (nonatomic, copy) NSString *recordingName;
+////录音机的状态
+@property (nonatomic, assign) RecordingType recordingType;
+////录音播放资源路径
+//@property (nonatomic, strong) NSDictionary *recordingDetail;
+
+
+//截止日期存储
+//@property (nonatomic, copy) NSString *dateStr;
+
+//是否是必填项
+@property (nonatomic, assign) BOOL isMandatory;
+//是否可以进行选填标识
+@property (nonatomic, assign) BOOL optional;
+//角色
+@property (nonatomic, assign) RoleType roleType;
+//当前是否是新增还是编辑
+@property (nonatomic, assign) BOOL isAddExamine;
+//是否有编辑权限
+@property (nonatomic, assign) BOOL isIssueManage;
+//人员cell高度计算
+@property (nonatomic, assign) CGFloat height;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.m
new file mode 100644
index 0000000..0dbee32
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineAddModel.m
@@ -0,0 +1,13 @@
+//
+//  PBExamineAddModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineAddModel.h"
+
+@implementation PBExamineAddModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.h
new file mode 100644
index 0000000..1423541
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.h
@@ -0,0 +1,130 @@
+//
+//  PBExamineListModel.h
+//  IphoneBIMe
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@interface PBExamineListModel : NSObject
+
+@property (nonatomic, copy) NSString *aede_severitylevel;//严重等级
+@property (nonatomic, copy) NSString *ExamineRemark;//title
+@property (nonatomic, copy) NSString *aedt_name;//类别
+@property (nonatomic, copy) NSString *bu_checker_RealName;//检查人
+@property (nonatomic, strong) NSArray *CacheRecordList;//流转记录
+@property (nonatomic, copy) NSString *ExamineID;
+@property (nonatomic, copy) NSString *ExamineDate;//任务起始时间
+@property (nonatomic, copy) NSString *RectificateDate;//任务截止时间
+@property (nonatomic, copy) NSString *ExamineResult;//A、B、C、D 区分
+@property (nonatomic, copy) NSString *CreateDate;//发起任务时间
+@property (nonatomic, copy) NSString *bu_examiner_name;//创建人
+@property (nonatomic, copy) NSString *ExaminerID;//创建人ID
+@property (nonatomic, strong) NSArray *FirstCheck_Attachments;//检查人附件
+@property (nonatomic, copy) NSString *FirstCheck_Description;//
+@property (nonatomic, copy) NSString *RelationMemberName;
+@property (nonatomic, copy) NSString *PrincipalName;
+
+//@property (nonatomic, copy) NSString *ExaminerID;
+//@property (nonatomic, copy) NSString *ExamineDate;
+//@property (nonatomic, copy) NSString *ExamineRemark;
+//@property (nonatomic, copy) NSString *ExamineResult;
+//@property (nonatomic, copy) NSString *RectificateDate;
+//@property (nonatomic, copy) NSString *FloorID;
+//@property (nonatomic, copy) NSString *FloorName;
+//@property (nonatomic, copy) NSString *FlowPhase;
+//@property (nonatomic, copy) NSString *Professional;
+//@property (nonatomic, copy) NSString *Category;
+//@property (nonatomic, copy) NSString *Placement;
+//@property (nonatomic, copy) NSString *FirstCheckerID;
+//@property (nonatomic, copy) NSString *FirstCheckerName;
+//@property (nonatomic, copy) NSString *FirstCheckDate;
+//@property (nonatomic, copy) NSString *FirstCheckRemark;
+//@property (nonatomic, copy) NSString *FirstCheckResult;
+//@property (nonatomic, copy) NSString *SecondCheckerID;
+//@property (nonatomic, copy) NSString *SecondCheckerName;
+//@property (nonatomic, copy) NSString *SecondCheckDate;
+//@property (nonatomic, copy) NSString *SecondCheckRemark;
+//@property (nonatomic, copy) NSString *SecondCheckResult;
+//@property (nonatomic, copy) NSString *IsDel;
+//@property (nonatomic, copy) NSString *ConstructUnit;
+//@property (nonatomic, copy) NSString *ConstructUnitID;
+//@property (nonatomic, copy) NSString *SubConstructUnit;
+//@property (nonatomic, copy) NSString *SubConstructUnitID;
+//@property (nonatomic, copy) NSString *Subdivisional;
+//@property (nonatomic, copy) NSString *SubdivisionalID;
+//@property (nonatomic, copy) NSString *VerifyBatch;
+//@property (nonatomic, copy) NSString *VerifyBatchID;
+//@property (nonatomic, copy) NSString *Axis;
+//@property (nonatomic, copy) NSString *AxisID;
+//@property (nonatomic, copy) NSString *ConstructionTeam;
+//@property (nonatomic, copy) NSString *ConstructionTeamID;
+//@property (nonatomic, copy) NSString *FlowPhaseID;
+//@property (nonatomic, copy) NSString *ProfessionalID;
+//@property (nonatomic, copy) NSString *CategoryID;
+//@property (nonatomic, copy) NSString *CreateDate;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ aede_severitylevel : "严重"
+ aedt_guid : "4ff8d2fb-5df9-11ea-96fd-fa163e36b61c"
+ aedt_name : "类别一"
+ bu_checker_UserId : "7dce08b3-e7a3-408a-8023-728eb3cd5b46"
+ bu_checker_RealName : "臧珊珊"
+ CacheRecordList
+ bu_examiner_name : "薛友松"
+ FirstCheck_Attachments
+ FirstCheck_Description : "整改"
+ ExamineID : "79515447-07f5-44df-9926-8dc0cb5f21dc"
+ ProjectID : null
+ ModelID : null
+ ViewID : null
+ ViewpointID : null
+ LinkType : null
+ LinkID : null
+ Principal : null
+ PrincipalID : "7dce08b3-e7a3-408a-8023-728eb3cd5b46"
+ RelationMember : null
+ RelationMemberID : "7dce08b3-e7a3-408a-8023-728eb3cd5b46"
+ Examiner : null
+ ExaminerID : null
+ ExamineDate : "2020-08-13T00:00:00"
+ ExamineRemark : "测试addmission接口2"
+ ExamineResult : "D_Qualified"
+ RectificateDate : "2020-08-13T00:00:00"
+ FloorID : null
+ FloorName : null
+ FlowPhaseID : null
+ FlowPhase : null
+ Professional : null
+ Category : null
+ Placement : null
+ FirstCheckerID : null
+ FirstCheckerName : null
+ FirstCheckDate : null
+ FirstCheckRemark : null
+ FirstCheckResult : null
+ SecondCheckerID : null
+ SecondCheckerName : null
+ SecondCheckDate : null
+ SecondCheckRemark : null
+ SecondCheckResult : null
+ ConstructUnit : null
+ ConstructUnitID : null
+ SubConstructUnit : null
+ SubConstructUnitID : null
+ Subdivisional : null
+ SubdivisionalID : null
+ VerifyBatch : null
+ VerifyBatchID : null
+ Axis : null
+ AxisID : null
+ ConstructionTeam : null
+ ConstructionTeamID : null
+ IsDel : null
+ ProfessionalID : null
+ CategoryID : null
+ CreateDate : "2020-08-12T11:32:02"
+ Title : null
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.m
new file mode 100644
index 0000000..c4315f0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBExamineListModel.m
@@ -0,0 +1,13 @@
+//
+//  PBExamineListModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/26.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineListModel.h"
+
+@implementation PBExamineListModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.h
new file mode 100644
index 0000000..32e8c8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.h
@@ -0,0 +1,77 @@
+//
+//  PBRecordModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/31.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRecordModel : NSObject
+//@property (nonatomic, strong) NSString *examineid;
+//@property (nonatomic, strong) NSString *rectificationid;
+//
+//@property (nonatomic, strong) NSString *rectificationoperatorid;
+////创建人
+//@property (nonatomic, strong) NSString *rectificationoperator;
+////1为检查记录 2 为申请检查记录
+//@property (nonatomic, strong) NSString *rectificationoperateflag;
+//@property (nonatomic, strong) NSString *rectificationcheckdate;
+////合格/整改
+//@property (nonatomic, strong) NSString *rectificationcheckresult;
+////描述信息
+//@property (nonatomic, strong) NSString *rectificationremark;
+//@property (nonatomic, strong) NSString *isdel;
+////@property (nonatomic, strong) NSString *attachmenturls;
+//
+////附件 - 图片URL
+//@property (nonatomic, strong) NSArray *imageUrls;
+////附件 - 录音URL
+//@property (nonatomic, strong) NSArray *cafUrls;
+////第一条记录
+//@property (nonatomic, assign) BOOL isOne;
+////记录播放状态
+//@property (nonatomic, assign) BOOL isPlay;
+//
+//@property (nonatomic, copy) NSString *createdate;
+////附件 fileID
+//@property (nonatomic, copy) NSString *fileids;
+////附件 类型
+//@property (nonatomic, copy) NSString *filetypes;
+////名称
+//@property (nonatomic, copy) NSString *HeadIconString;
+
+@property (nonatomic, copy) NSString *CreateDate;
+@property (nonatomic, copy) NSString *ExamineID;
+@property (nonatomic, copy) NSString *IsDel;
+@property (nonatomic, copy) NSString *RealName;
+@property (nonatomic, copy) NSString *RectificationCheckDate;
+@property (nonatomic, copy) NSString *RectificationCheckResult;
+@property (nonatomic, copy) NSString *RectificationID;
+@property (nonatomic, copy) NSString *RectificationOperateFlag;
+@property (nonatomic, copy) NSString *RectificationOperator;
+@property (nonatomic, copy) NSString *RectificationOperatorID;
+@property (nonatomic, copy) NSString *RectificationRemark;
+@property (nonatomic, strong) NSArray *Attachments;
+@property (nonatomic, copy) NSString *indexFlag;//0 为创建任务 , 1为检查信息
+@property (nonatomic, assign) BOOL isOneIndex;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ Attachments
+ RectificationID : "3b0b0ac2-86f4-4da1-8af1-072fb00cc1ed"
+ RectificationOperatorID : "9d9ca069-af5a-4564-9999-591b16560332"
+ RectificationOperator : "zjf"
+ RectificationOperateFlag : 1
+ RectificationCheckDate : "2020-08-19T14:29:35"
+ RectificationCheckResult : "整改"
+ RectificationRemark : "Djfkejkfjekljfkejlkfjelkjllsleifiejiijkdsnfklffjeh"
+ IsDel : null
+ ExamineID : "9578d162-aef6-4a99-92c2-d5b6048651b7"
+ CreateDate : "2020-08-19T14:29:35"
+ aer_counterpart : null
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.m
new file mode 100644
index 0000000..a21e90b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRecordModel.m
@@ -0,0 +1,13 @@
+//
+//  PBRecordModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/31.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBRecordModel.h"
+
+@implementation PBRecordModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.h
new file mode 100644
index 0000000..824df06
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.h
@@ -0,0 +1,19 @@
+//
+//  PBRoleModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/20.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRoleModel : NSObject
+@property (nonatomic, assign) BOOL User_InPrincipal;//是否是验收人
+@property (nonatomic, assign) BOOL User_InRelation;//是否是整改人
+@property (nonatomic, assign) BOOL User_IsChecker;//是否是检查人
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.m
new file mode 100644
index 0000000..8b7cac3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBRoleModel.m
@@ -0,0 +1,13 @@
+//
+//  PBRoleModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/20.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBRoleModel.h"
+
+@implementation PBRoleModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.h
new file mode 100644
index 0000000..269639c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.h
@@ -0,0 +1,20 @@
+//
+//  PBUserModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/7.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBUserModel : NSObject
+@property (nonatomic, copy)NSString *UserId;
+@property (nonatomic, copy)NSString *RealName;
+@property (nonatomic, strong) NSArray *RoleNames;
+@property (nonatomic, assign) BOOL isSelect;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.m
new file mode 100644
index 0000000..055ed43
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Models/PBUserModel.m
@@ -0,0 +1,13 @@
+//
+//  PBUserModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/7.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBUserModel.h"
+
+@implementation PBUserModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.h
new file mode 100644
index 0000000..0f1901c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.h
@@ -0,0 +1,21 @@
+//
+//  PBAddExamineController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/28.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBExamineListModel;
+@interface PBAddExamineController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, assign) BOOL isAddExamine;
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, strong) NSDictionary *examineListDict;
+@property (nonatomic, strong) NSArray *typeArr;
+@property (nonatomic, strong) NSArray *levelArr;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.m
new file mode 100644
index 0000000..ede25ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineController.m
@@ -0,0 +1,891 @@
+//
+//  PBAddExamineController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/28.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBAddExamineController.h"
+#import "PBProjectModel.h"
+#import "PBExamineTableHeaderView.h"
+#import "PBExamineAddModel.h"
+#import "PBExamineInputTableViewCell.h"
+#import "PBOneChooseTableViewCell.h"
+#import "PBTwoChooseTableViewCell.h"
+#import "PBMoreChooseTableViewCell.h"
+#import "PBEditTimeTableViewCell.h"
+#import "PBPersonTableViewCell.h"
+#import "PBTextShowTableViewCell.h"
+#import "PBEditTextController.h"
+#import "PBChooseModelViewController.h"
+#import "AppDelegate.h"
+#import "PBOneChooseView.h"
+#import "PBDivisionViewController.h"
+#import "PBTwoChooseView.h"
+#import "PBEditPersonView.h"
+#import "PBPersonModel.h"
+#import "PBTimeChooseView.h"
+#import "PBModelsModel.h"
+#import "PBViewPointModel.h"
+#import "PBDrawingposModel.h"
+#import "PBDrawingsInfoModel.h"
+#import "PBResultModel.h"
+#import "PBExamineListModel.h"
+#import "PBRecordViewController.h"
+#import "PBOpenDrawController.h"
+#import "PBOpenViewPointController.h"
+#import "PBRecordModel.h"
+#import "PBStructureViewController.h"
+
+static NSString *const inputCellID = @"InputCellID";
+static NSString *const positioningCellID = @"positioningCellID";
+static NSString *const oneChooseCellID = @"oneChooseCellID";
+static NSString *const twoChooseCellID = @"twoChooseCellID";
+static NSString *const moreChooseCellID = @"moreChooseCellID";
+static NSString *const personCellID = @"personCellID";
+static NSString *const textCellID = @"textCellID";
+static NSString *const timeCellID = @"timeCellID";
+
+@interface PBAddExamineController ()<UITableViewDataSource ,UITableViewDelegate, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBExamineTableHeaderView *tableheaderView;
+@property (nonatomic, strong) NSMutableArray<PBExamineAddModel *> *dataListM;
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, assign) NSInteger mandatoryCount;//必填项个数
+@property (nonatomic, strong) PBOneChooseView *oneChooseView;
+@property (nonatomic, strong) PBTwoChooseView *twoChooseView;
+@property (nonatomic, strong) PBTimeChooseView *timeChooseView;
+@property (nonatomic, strong) PBEditPersonView *editPersonView;
+@property (nonatomic, strong) NSArray *engineeringArr;//单位工程数据
+@property (nonatomic, strong) NSArray *professionalArr;//专业数据
+@property (nonatomic, strong) NSArray *teamArr;//施工班组数据
+@property (nonatomic, copy) NSString *recordingName;//本地录音name
+
+@property (nonatomic, strong) PBModelsModel *modelsModel;//定位选择的模型信息
+@property (nonatomic, strong) NSMutableArray *imageArr;//详情图片信息
+@property (nonatomic, strong) NSDictionary *audioData;//详情音频信息
+@property (nonatomic, strong) PBViewPointModel *viewPointModel;//定位视点信息
+@property (nonatomic, strong) PBDrawingposModel *drawingposModel;//定位图纸点信息
+@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;//定位图纸点信息
+@property (nonatomic, assign) RoleType roleType;
+@property (nonatomic, weak) UIView *linView;
+@property (nonatomic, strong) NSMutableArray *recordListM;
+@property (nonatomic, strong) NSDictionary *examinDetailDic;
+@property (nonatomic, assign) BOOL isIssueManage;
+@end
+
+@implementation PBAddExamineController
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    //工程结构 选择后更新数据通知
+    [PBNoteCenter addObserver:self selector:@selector(updateDivision:) name:PBNoteCenterUpdateDivision object:nil];
+    //复检为合格后
+    [PBNoteCenter addObserver:self selector:@selector(reInspectionQualified:) name:PBNoteCenterReInspectionQualified object:nil];
+//    if (self.examineListModel.IsExamineMgr) {
+//        self.isIssueManage = YES;
+//    }else {
+//        self.isIssueManage = NO;
+//    }
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [self loadData];
+    if (self.isAddExamine) {
+        [self setupNav];
+        [self setupUI];
+    }else {
+        [self loadRelevantData];
+    }
+}
+
+- (void)updateDivision:(NSNotification *)noti {
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:0];
+    if (self.isAddExamine) {
+        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    }else {
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+        [dictM setValue:[examineAddModel.dataDict valueForKey:@"ec_guid"] forKey:examineAddModel.key];
+        [YJProgressHUD showProgress:@"" inView:self.view];
+        [self ModifyExamineTextDataWith:dictM andIndexPath:indexPath andIsDelete:NO];
+    }
+}
+
+- (void)reInspectionQualified:(NSNotification *)noti {
+    self.dataListM[4].dataStr = @"合格";
+    self.dataListM[5].dataStr = nil;
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:4 inSection:0];
+    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+}
+
+- (void)loadData {
+    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"examineAdd3" ofType:@"plist"];
+    NSArray *list = [NSArray arrayWithContentsOfFile:plistPath];
+    NSMutableArray *listM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < list.count; i++) {
+        NSDictionary *dict = list[i];
+        PBExamineAddModel *model = [PBExamineAddModel yy_modelWithDictionary:dict];
+        model.isAddExamine = self.isAddExamine;
+        model.isIssueManage = self.isIssueManage;
+        if (model.isMandatory) {
+            ++self.mandatoryCount;
+        }
+        [listM addObject:model];
+    }
+    self.dataListM = listM;
+}
+#pragma mark - 加载检查相关数据
+- (void)loadRelevantData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetItemWithExamineID:self.examineListModel.ExamineID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载详情失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            self.examinDetailDic = networkModel.Data;
+            [self collatingDetailedData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)collatingDetailedData {
+    for (PBExamineAddModel *examineAddModel in self.dataListM) {
+        if ([examineAddModel.cellType isEqualToString:@"text"] || [examineAddModel.cellType isEqualToString:@"time"] || [examineAddModel.cellType isEqualToString:@"input"]){
+            NSString *dataStr = [self.examinDetailDic valueForKey:examineAddModel.key];
+            if ([dataStr isKindOfClass:[NSNull class]]) {
+                examineAddModel.dataStr = nil;
+            }else {
+                if ([examineAddModel.cellType isEqualToString:@"time"]) {
+                    NSRange range = [dataStr rangeOfString:@"T"];
+                    dataStr = [dataStr substringToIndex:range.location];
+                    examineAddModel.dataStr = dataStr;
+                }else {
+                    examineAddModel.dataStr = dataStr;
+                }
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"choose"]) {
+            if ([examineAddModel.key isEqualToString:@"CategoryID"]) {
+                if ([self.examinDetailDic valueForKey:@"ec_name"]) {
+                    NSDictionary *dic = @{
+                                         @"ec_name":[self.examinDetailDic valueForKey:@"ec_name"]
+                                         };
+                    examineAddModel.dataDict = dic;
+                }
+            }else if ([examineAddModel.key isEqualToString:@"aedt_guid"]) {
+                if ([self.examinDetailDic valueForKey:@"aedt_name"]) {
+                    NSDictionary *dic = @{
+                                         @"aedt_name":[self.examinDetailDic valueForKey:@"aedt_name"]
+                                         };
+                    examineAddModel.dataDict = dic;
+                }
+            }else {
+                if ([self.examinDetailDic valueForKey:examineAddModel.key]) {
+                    NSDictionary *dic = @{
+                                         @"aedt_name":[self.examinDetailDic valueForKey:examineAddModel.key]
+                                         };
+                    examineAddModel.dataDict = dic;
+                }
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"person"]) {
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            NSArray *personArr;
+            if ([examineAddModel.key isEqualToString:@"PrincipalID"]) {
+                personArr = [self.examinDetailDic valueForKey:@"PrincipalObjs"];
+            }else {
+                personArr = [self.examinDetailDic valueForKey:@"aede_checkeruserobjs"];
+            }
+            for (NSDictionary *obj in personArr) {
+                PBPersonModel *personModel = [PBPersonModel yy_modelWithDictionary:obj];
+                [arrM addObject:personModel];
+            }
+            examineAddModel.personArr = arrM.copy;
+        }
+//        else if ([examineAddModel.cellType isEqualToString:@"text"]) {
+//            if ([self.examinDetailDic valueForKey:@"Examiner"]) {
+//                NSDictionary *dic = @{
+//                                     @"RealName":[self.examinDetailDic valueForKey:@"Examiner"],
+//                                     @"UserID":@""
+//                                     };
+//                examineAddModel.dataDict = dic;
+//            }
+//        }
+    }
+//    self.imageArr = [[self.examinDetailDic valueForKey:@"Attachments"] mutableCopy];
+//    [self setupNav];
+    [self setupUI];
+//    [self setTableHeaderViewImage];
+}
+
+- (void)updateCompletionIndicator {
+    if (!self.isAddExamine) {
+        return;
+    }
+    CGFloat oneWidth = PBScreenWidth / self.mandatoryCount;
+    NSInteger completedCount = 0;
+    for (PBExamineAddModel *examineAddModel in self.dataListM) {
+        if (examineAddModel.isMandatory) {
+            if ([examineAddModel.cellType isEqualToString:@"input"]) {
+                if (examineAddModel.dataStr != nil && ![examineAddModel.dataStr isEqualToString:@""]) {
+                    ++completedCount;
+                }
+            }else if ([examineAddModel.cellType isEqualToString:@"choose"]) {
+                if (examineAddModel.dataDict){
+                    ++completedCount;
+                }
+            }else if ([examineAddModel.cellType isEqualToString:@"person"]) {
+                if (examineAddModel.personArr.count != 0) {
+                    ++completedCount;
+                }
+            }else if ([examineAddModel.cellType isEqualToString:@"time"]) {
+                PBExamineAddModel *resultExamineModel = self.dataListM[4];
+                if ([resultExamineModel.dataStr isEqualToString:@"合格"]) {
+                        ++completedCount;
+                }else {
+                    if (examineAddModel.dataStr != nil && ![examineAddModel.dataStr isEqualToString:@""]) {
+                        ++completedCount;
+                    }
+                }
+            }
+        }
+    }
+    CGFloat linViewW = oneWidth *completedCount;
+    [UIView animateWithDuration:0.2 animations:^{
+       self.linView.width = linViewW;
+    } completion:^(BOOL finished) {
+        if (completedCount == self.mandatoryCount) {
+            self.navigationItem.rightBarButtonItem.enabled = YES;
+        }else {
+            self.navigationItem.rightBarButtonItem.enabled = NO;
+        }
+    }];
+    
+}
+
+- (void)setupUI {
+    __weak typeof(self) weakSelf = self;
+    if (_isAddExamine) {
+        self.view.backgroundColor = [UIColor z_colorWithR:216 G:216 B:216];
+    }else {
+        self.view.backgroundColor = [UIColor whiteColor];
+    }
+    UIView *linView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 3)];
+    linView.backgroundColor = WarningColor;
+    [self.view addSubview:linView];
+    self.linView = linView;
+
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    [self.tableView registerClass:[PBExamineInputTableViewCell class] forCellReuseIdentifier:inputCellID];
+    [self.tableView registerClass:[PBOneChooseTableViewCell class] forCellReuseIdentifier:oneChooseCellID];
+    [self.tableView registerClass:[PBTwoChooseTableViewCell class] forCellReuseIdentifier:twoChooseCellID];
+    [self.tableView registerClass:[PBMoreChooseTableViewCell class] forCellReuseIdentifier:moreChooseCellID];
+    [self.tableView registerClass:[PBPersonTableViewCell class] forCellReuseIdentifier:personCellID];
+    [self.tableView registerClass:[PBTextShowTableViewCell class] forCellReuseIdentifier:textCellID];
+    [self.tableView registerClass:[PBEditTimeTableViewCell class] forCellReuseIdentifier:timeCellID];
+    [self.view addSubview:self.tableView];
+    NSInteger topH = 0;
+    if (self.isAddExamine) {
+        topH = 3;
+    }else {
+        topH = 0;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(topH);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+//    self.tableheaderView = [[PBExamineTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 200)];
+//    self.tableheaderView.ChooseImageBlock = ^{
+//        if (weakSelf.isAddExamine) {
+//            [weakSelf takePhotoLibrary];
+//        }else if (weakSelf.isIssueManage) {
+//            if ([[[weakSelf.examinDetailDic valueForKey:@"BasicInfo"] valueForKey:@"ExamineResult"] isEqualToString:@"合格"]) {
+//                [YJProgressHUD showMessage:@"已合格,无法修改" inView:weakSelf.view];
+//            }else {
+//                [weakSelf takePhotoLibrary];
+//            }
+//        }
+//    };
+//    self.tableheaderView.DeleteImageBlock = ^(NSInteger index) {
+//        if (weakSelf.isAddExamine) {
+//            [weakSelf.selectedPhotos removeObjectAtIndex:index];
+//            [weakSelf setTableHeaderViewImage];
+//        }else {
+//            if (weakSelf.isIssueManage) {
+//                if ([[[weakSelf.examinDetailDic valueForKey:@"BasicInfo"] valueForKey:@"ExamineResult"] isEqualToString:@"合格"]) {
+//                    [YJProgressHUD showMessage:@"已合格,无法修改" inView:weakSelf.view];
+//                }else {
+//                    [weakSelf deleteRelationImageWithIndex:index andIsIamge:YES];
+//                }
+//            }else {
+//                [YJProgressHUD showMessage:@"没有删除权限" inView:weakSelf.view];
+//            }
+//        }
+//    };
+//    self.tableheaderView.projectModel = self.projectModel;
+//    self.tableheaderView.isAddExamine = self.isAddExamine;
+//    self.tableheaderView.roleType = self.roleType;
+//    self.tableView.tableHeaderView = self.tableheaderView;
+}
+
+- (void)setupNav {
+    self.title = @"检查";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"取消";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    if (self.isAddExamine) {
+        UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveExamine)];
+        self.navigationItem.rightBarButtonItem = saveNavItem;
+        self.navigationItem.rightBarButtonItem.enabled = NO;
+    }else {
+        UIBarButtonItem *commentsItem = [[UIBarButtonItem alloc] initWithTitle:[NSString stringWithFormat:@"记录(%zd)",[[self.examinDetailDic valueForKey:@"Rectifications"] count]] style:UIBarButtonItemStylePlain target:self action:@selector(recordAction)];
+        self.navigationItem.rightBarButtonItem = commentsItem;
+    }
+}
+- (void)saveImageWithImage:(NSArray *)files {
+    [[PBNetworkTools sharedTools] UploadImagesWithFiles:files andIssueID:nil andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSMutableString *strM = [[NSMutableString alloc] init];
+            NSString *fileID = @"";
+            for (NSDictionary *obj in networkModel.Data) {
+                [strM appendFormat:@"%@,",[obj valueForKey:@"bf_guid"]];
+            }
+            if([strM length] > 0){
+                fileID = [strM substringToIndex:([strM length]-1)];
+                [self creatTextDataWithFileIDs:fileID];
+            }else {
+                [YJProgressHUD showMessage:@"上传图片返回数据错误" inView:self.view];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)addIamgeWithFiles:(NSArray *)files {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    [dictM setValue:self.examineListModel.ExamineID forKey:@"ExamineID"];
+    [[PBNetworkTools sharedTools] RequestExam_AddAttachmentsWithData:dictM andIamges:files andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"添加图片失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self loadRelevantData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - 保存方法
+- (void)saveExamine {
+    [self.view endEditing:NO];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    if (self.selectedPhotos.count > 0) {
+        [self saveImageWithImage:self.selectedPhotos.copy];
+    }else {
+        [self creatTextDataWithFileIDs:@""];
+    }
+}
+- (void)creatTextDataWithFileIDs:(NSString *)fileIDs {
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    for (PBExamineAddModel *examineAddModel in self.dataListM) {
+        if ([examineAddModel.cellType isEqualToString:@"input"]) {
+            NSString *inputStr = examineAddModel.dataStr == nil ? @"" : examineAddModel.dataStr;
+            [dictM setObject:inputStr forKey:examineAddModel.key];
+        }else if ([examineAddModel.cellType isEqualToString:@"choose"]){
+            if (examineAddModel.dataDict) {
+                NSString *chooseValue = @"";
+                if ([examineAddModel.key isEqualToString:@"CategoryID"]) {
+                    chooseValue = [examineAddModel.dataDict valueForKey:@"ec_guid"];
+                }else if ([examineAddModel.key isEqualToString:@"aedt_guid"]){
+                    chooseValue = [examineAddModel.dataDict valueForKey:@"aedt_guid"];
+                }else if ([examineAddModel.key isEqualToString:@"aede_severitylevel"]) {
+                    chooseValue = [examineAddModel.dataDict valueForKey:@"aedt_name"];
+                }
+                if (chooseValue == nil) {
+                    chooseValue = @"";
+                }
+                [dictM setObject:chooseValue forKey:examineAddModel.key];
+            }else {
+                [dictM setObject:@"" forKey:examineAddModel.key];
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"person"]) {
+            NSMutableString *userIdStrM = [[NSMutableString alloc] init];
+            for (PBPersonModel *obj in examineAddModel.personArr) {
+                [userIdStrM appendString:[NSString stringWithFormat:@"%@,",obj.UserId]];
+            }
+            if (userIdStrM.length == 0) {
+                [dictM setObject:@"" forKey:examineAddModel.key];
+            }else {
+                [dictM setObject:userIdStrM.copy forKey:examineAddModel.key];
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"text"]) {
+            [dictM setObject:[examineAddModel.dataDict valueForKey:@"UserID"] forKey:examineAddModel.key];
+        }else if ([examineAddModel.cellType isEqualToString:@"result"]) {
+            [dictM setObject:examineAddModel.dataStr forKey:examineAddModel.key];
+        }else if ([examineAddModel.cellType isEqualToString:@"time"]) {
+            NSString *timeStr = (examineAddModel.dataStr == nil) ? @"" : examineAddModel.dataStr;
+            [dictM setObject:timeStr forKey:examineAddModel.key];
+        }
+    }
+    [dictM setObject:self.projectModel.bimcomposerid forKey:@"bimcomposerId"];
+    [dictM setObject:fileIDs forKey:@"bf_guids"];
+    [self addExamineWithData:dictM];
+}
+
+#pragma mark - 提交 质检/安检 数据
+- (void)addExamineWithData:(NSMutableDictionary *)dictM {
+    [[PBNetworkTools sharedTools] RequestAddItemsWithData:dictM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"保存失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD showMessage:@"保存成功" inView:self.view];
+            [self createRecordWithDict:networkModel.Data];
+//            [self dismissViewControllerAnimated:YES completion:nil];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - 创建整改记录
+//生成整改记录
+- (void)createRecordWithDict:(NSString *)str {
+    [YJProgressHUD showProgress:@"添加记录" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestExam_AddRecordWithExamineID:str andResult:@"整改" andRemark:@"整改" andFlag:@"1" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showProgress:@"添加记录失败" inView:self.view];
+            [self dismissViewControllerAnimated:YES completion:nil];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD showMessage:@"添加记录成功" inView:self.view];
+            [self dismissViewControllerAnimated:YES completion:nil];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            [self dismissViewControllerAnimated:YES completion:nil];
+        }
+    }];
+}
+
+#pragma mark - 修改检查文本数据
+- (void)ModifyExamineTextDataWith:(NSMutableDictionary *)dictM andIndexPath:(NSIndexPath *)indexPath andIsDelete:(BOOL)isDelete {
+    [dictM setObject:self.examineListModel.ExamineID forKey:@"ExamineId"];
+    [[PBNetworkTools sharedTools] RequestModifyItemWithData:dictM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"修改数据失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD showMessage:@"修改成功" inView:self.view];
+            [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+#pragma mark - 记录
+- (void)recordAction {
+    [self.view endEditing:NO];
+    PBRecordViewController *recordVC = [[PBRecordViewController alloc] init];
+    recordVC.projectModel = self.projectModel;
+    recordVC.examineListModel = self.examineListModel;
+    recordVC.roleType = self.roleType;
+//    recordVC.recordListM = [self.examinDetailDic valueForKey:@"Rectifications"];
+    recordVC.examineDetailDic = self.examinDetailDic;
+    recordVC.UpdateRecordCountBlock = ^(NSDictionary * _Nonnull detailDic) {
+        self.examinDetailDic = detailDic;
+        self.recordListM = [self.examinDetailDic valueForKey:@"Rectifications"];
+        self.navigationItem.rightBarButtonItem.title = [NSString stringWithFormat:@"记录(%zd)",[[self.examinDetailDic valueForKey:@"Rectifications"] count]];
+    };
+    [self.navigationController pushViewController:recordVC animated:YES];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 6;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    __weak typeof(self) weakSelf = self;
+    if (indexPath.row == 0) {
+        PBExamineInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inputCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.EditTextBlock = ^(NSString *text) {
+            PBEditTextController *editTextVC = [[PBEditTextController alloc] init];
+            editTextVC.text = text;
+            editTextVC.titleText = examineAddModel.title;
+            editTextVC.prompt = examineAddModel.prompt;
+            editTextVC.CompleteEditTextBlock = ^(NSString *text) {
+                examineAddModel.dataStr = text;
+                [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                [self updateCompletionIndicator];
+            };
+            [self.navigationController pushViewController:editTextVC animated:YES];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 1) {
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        PBOneChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:oneChooseCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.ChooseBlock = ^{
+            if ([[[weakSelf.examinDetailDic valueForKey:@"BasicInfo"] valueForKey:@"ExamineResult"] isEqualToString:@"合格"]) {
+                [YJProgressHUD showMessage:@"已合格,无法修改" inView:weakSelf.view];
+            }else {
+                PBStructureViewController *structureVC = [[PBStructureViewController alloc] init];
+                structureVC.examineAddModel = examineAddModel;
+                structureVC.projectModel = self.projectModel;
+                [self.navigationController pushViewController:structureVC animated:YES];
+            }
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 2 || indexPath.row == 3) {
+        PBTextShowTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:textCellID forIndexPath:indexPath];
+        cell.examineAddModel = self.dataListM[indexPath.row];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 4) {
+        PBEditTimeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:timeCellID forIndexPath:indexPath];
+        PBExamineAddModel *leftExamineAddModel = self.dataListM[indexPath.row];
+        PBExamineAddModel *rightExamineAddModel = self.dataListM[indexPath.row + 1];
+        cell.leftExamineAddModel = leftExamineAddModel;
+        cell.rightExamineAddModel = rightExamineAddModel;
+        cell.ChooseBlock = ^(NSInteger index) {
+            if (!self.isAddExamine) {
+                return;
+            }
+            if ([leftExamineAddModel.dataStr isEqualToString:@"合格"] && index == 1) {
+                [YJProgressHUD showMessage:@"整改结果已合格,无需填写整改时间" inView:self.view];
+                return;
+            }
+            [PBKeyWindow addSubview:self.timeChooseView];
+            self.timeChooseView.leftExamineAddModel = self.dataListM[indexPath.row];
+            self.timeChooseView.rightExamineAddModel = self.dataListM[indexPath.row + 1];
+            self.timeChooseView.index = index;
+            self.timeChooseView.ChooseCompleteBlock = ^(BOOL isSelectLeft, BOOL isSelectRight) {
+                if (isSelectLeft == NO && isSelectRight == NO) {
+                    return;
+                }
+                if (weakSelf.isAddExamine) {
+                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                    [weakSelf updateCompletionIndicator];
+                }else {
+                    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+                    [dictM setObject:leftExamineAddModel.dataStr forKey:leftExamineAddModel.key];
+
+                    NSString *timeStr = (rightExamineAddModel.dataStr == nil) ? @"" : rightExamineAddModel.dataStr;
+                    [dictM setObject:timeStr forKey:rightExamineAddModel.key];
+                    [YJProgressHUD showProgress:@"" inView:weakSelf.view];
+                    [weakSelf ModifyExamineTextDataWith:dictM andIndexPath:indexPath andIsDelete:NO];
+                }
+            };
+            [self.timeChooseView show];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 5 || indexPath.row == 6) {
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row + 1];
+        PBPersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.EditPersonBlock = ^{
+            if ([[[weakSelf.examinDetailDic valueForKey:@"BasicInfo"] valueForKey:@"ExamineResult"] isEqualToString:@"合格"]) {
+                [YJProgressHUD showMessage:@"已合格,无法修改" inView:weakSelf.view];
+            }else {
+                [PBKeyWindow addSubview:self.editPersonView];
+                self.editPersonView.projectModel = self.projectModel;
+                self.editPersonView.examineAddModel = examineAddModel;
+                self.editPersonView.EditCompleteBlock = ^{
+                    if (weakSelf.isAddExamine) {
+                        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                        [weakSelf updateCompletionIndicator];
+                    }else {
+                        NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+                        NSMutableString *strM = [[NSMutableString alloc] init];
+                        for (PBPersonModel *personModel in examineAddModel.personArr) {
+                            [strM appendFormat:@"%@,",personModel.UserId];
+                        }
+                        if (strM.length > 0) {
+                            NSString *userIDs = [strM substringToIndex:([strM length]-1)];
+                            [dictM setValue:userIDs forKey:examineAddModel.key];
+                            [YJProgressHUD showProgress:@"" inView:weakSelf.view];
+                            [weakSelf ModifyExamineTextDataWith:dictM andIndexPath:indexPath andIsDelete:NO];
+                        }
+                    }
+                };
+                [self.editPersonView show];
+            }
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 7) {
+        PBTwoChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:twoChooseCellID forIndexPath:indexPath];
+        PBExamineAddModel *leftExamineModel;PBExamineAddModel *rightExamineModel;
+        leftExamineModel = self.dataListM[indexPath.row + 1];
+        rightExamineModel = self.dataListM[indexPath.row + 2];
+        cell.leftExamineAddModel = leftExamineModel;
+        cell.rightExamineAddModel = rightExamineModel;
+        cell.ChooseBlock = ^(NSInteger index) {
+            if ([[[weakSelf.examinDetailDic valueForKey:@"BasicInfo"] valueForKey:@"ExamineResult"] isEqualToString:@"合格"]) {
+                [YJProgressHUD showMessage:@"已合格,无法修改" inView:weakSelf.view];
+            }else {
+                [PBKeyWindow addSubview:self.twoChooseView];
+                self.twoChooseView.leftData = self.typeArr;
+                self.twoChooseView.rightData = self.levelArr;
+                self.twoChooseView.leftExamineAddModel = leftExamineModel;
+                self.twoChooseView.rightExamineAddModel = rightExamineModel;
+                self.twoChooseView.index = index;
+                self.twoChooseView.ChooseCompleteBlock = ^(BOOL isSelectLeft, BOOL isSelectRight) {
+                    if (isSelectLeft == NO && isSelectRight == NO) {
+                        return;
+                    }
+                    if (weakSelf.isAddExamine) {
+                        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                        [weakSelf updateCompletionIndicator];
+                    }else {
+                        NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+                        [dictM setValue:[leftExamineModel.dataDict valueForKey:@"aedt_guid"] forKey:@"aede_examinetype"];
+                        [dictM setValue:[rightExamineModel.dataDict valueForKey:@"aedt_name"] forKey:rightExamineModel.key];
+                        [YJProgressHUD showProgress:@"" inView:weakSelf.view];
+                        [weakSelf ModifyExamineTextDataWith:dictM andIndexPath:indexPath andIsDelete:NO];
+                    }
+                };
+                [self.twoChooseView show];
+            } 
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else {
+        return nil;
+    }
+}
+
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+
+- (void)pushLFImagePickerController {
+    NSInteger maxImageCount = 3 - self.selectedPhotos.count;
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:maxImageCount delegate:self];
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+#pragma mark - LFImagePickerControllerDelegate
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            [imageArrM addObject:originalImage];
+        }
+    }
+    if (self.isAddExamine) {
+        [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
+        [self setTableHeaderViewImage];
+    }else {
+        [self addIamgeWithFiles:imageArrM.copy];
+    }
+}
+
+#pragma mark - 删除附件
+- (void)deleteRelationImageWithIndex:(NSInteger )index andIsIamge:(BOOL)isImage{
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSDictionary *dict = self.imageArr[index];
+    [[PBNetworkTools sharedTools] RequestExam_RmAttachmentsWithAttachmentIDs:[dict valueForKey:@"ExamineAttachmentID"] andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.imageArr removeObjectAtIndex:index];
+            [self setTableHeaderViewImage];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+//新增图片选择图片后填充
+- (void)setTableHeaderViewImage {
+    if (self.isAddExamine) {
+        self.tableheaderView.imageArr = self.selectedPhotos;
+    }else {
+        self.tableheaderView.detailsImageArr = self.imageArr;
+    }
+}
+
+- (NSMutableArray *)selectedPhotos {
+    if (_selectedPhotos == nil) {
+        _selectedPhotos = [[NSMutableArray alloc] init];
+    }
+    return _selectedPhotos;
+}
+
+- (PBOneChooseView *)oneChooseView {
+    if (_oneChooseView == nil) {
+        _oneChooseView = [[PBOneChooseView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _oneChooseView.visualViewHeight = 468.f;
+        _oneChooseView.dataArr = self.engineeringArr;
+    }
+    return _oneChooseView;
+}
+- (PBTwoChooseView *)twoChooseView {
+    if (_twoChooseView == nil) {
+        _twoChooseView = [[PBTwoChooseView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _twoChooseView.visualViewHeight = 468.f;
+//        _twoChooseView.unitDict = self.engineeringArr;
+    }
+    return _twoChooseView;
+}
+- (PBTimeChooseView *)timeChooseView {
+    if (_timeChooseView == nil) {
+        _timeChooseView = [[PBTimeChooseView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _timeChooseView.visualViewHeight = 468.f;
+    }
+    return _timeChooseView;
+}
+- (PBEditPersonView *)editPersonView {
+    if (_editPersonView == nil) {
+        _editPersonView = [[PBEditPersonView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _editPersonView.visualViewHeight = 468.f + bottomH;
+        _editPersonView.isExamineChoose = YES;
+    }
+    return _editPersonView;
+}
+- (void)backItemAction {
+    PBExamineAddModel *examineAddModel = self.dataListM[2];
+    if (examineAddModel.recordingType == PLAY) {
+        [[PBAVPlayerManager sharedManager] stopPlay];
+    }
+    self.recordingName = examineAddModel.recordingName;
+    [PBNoteCenter removeObserver:self];
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setIsAddExamine:(BOOL)isAddExamine {
+    _isAddExamine = isAddExamine;
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+}
+- (void)setExamineListDict:(NSDictionary *)examineListDict {
+    _examineListDict = examineListDict;
+}
+
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+- (NSMutableArray *)imageArr {
+    if (_imageArr == nil) {
+        _imageArr = [[NSMutableArray alloc] init];
+    }
+    return _imageArr;
+}
+- (void)setTypeArr:(NSArray *)typeArr {
+    _typeArr = typeArr;
+}
+- (void)setLevelArr:(NSArray *)levelArr {
+    _levelArr = levelArr;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.h
new file mode 100644
index 0000000..7abc477
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBAddExamineViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/16.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBAddExamineViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *typeArr;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.m
new file mode 100644
index 0000000..018c28e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddExamineViewController.m
@@ -0,0 +1,952 @@
+//
+//  PBAddExamineViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/16.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBAddExamineViewController.h"
+#import "PBExamineAddModel.h"
+#import "PBExamineListModel.h"
+#import "PBExamineInputTableViewCell.h"
+#import "PBTextShowTableViewCell.h"
+#import "PBEditTimeTableViewCell.h"
+#import "PBListTableViewCell.h"
+#import "PBCheckViewController.h"
+#import "PBRoleModel.h"
+#import "PBEditTextController.h"
+#import "PBPersonTableViewCell.h"
+#import "PBOneChooseTableViewCell.h"
+#import "PBEditPersonView.h"
+#import "PBTimeChooseView.h"
+#import "PBEditTimeTableViewCell.h"
+#import "PBArtifactsViewController.h"
+#import "PBPersonModel.h"
+#import "PBArtifactsInfoModel.h"
+#import "PBProjectModel.h"
+#import "MSSAutoresizeLabelFlow.h"
+#import "PBTextInputTableViewCell.h"
+#import "PBTopTitleTableViewCell.h"
+#import "PBTimeChooseTableViewCell.h"
+#import "PBEditTimeView.h"
+#import "PBPersonChooseTableViewCell.h"
+#import "PBArtifactsListTableViewCell.h"
+#import "PBPersonListViewController.h"
+#import "PBSelectedPersonController.h"
+#import "PBSeleceArtifactsViewController.h"
+#import "PBEAddImageView.h"
+#import "PBTaskViewController.h"
+#import "PBETaskInfoModel.h"
+#import "PBCheckBoxTableViewCell.h"
+#import "PBRadioTableViewCell.h"
+#import "PBStatusTableViewCell.h"
+#import "PBInstructionsTableViewCell.h"
+#import "PBUserModel.h"
+#import "PBCheckHeaderView.h"
+#import "LXFCameraController.h"
+#import "PBVideoPlayViewController.h"
+static NSString *const inputCellID = @"InputCellID";
+static NSString *const titleCellID = @"titleCellID";
+static NSString *const oneChooseCellID = @"oneChooseCellID";
+static NSString *const timeChooseCellID = @"timeChooseCellID";
+static NSString *const personCellID = @"personCellID";
+static NSString *const listCellID = @"listCellID";
+static NSString *const checkBoxCellID = @"checkBoxCellID";
+static NSString *const radioCellID = @"radioCellID";
+static NSString *const statusCellID = @"statusCellID";
+static NSString *const instructionsCellID = @"instructionsCellID";
+
+@interface PBAddExamineViewController ()<UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray<PBExamineAddModel *> *dataListM;
+@property (nonatomic, strong) NSDictionary *examinDetailDic;
+@property (nonatomic, strong) PBRoleModel *roleModel;
+@property (nonatomic, strong) PBEditPersonView *editPersonView;
+@property (nonatomic, strong) PBTimeChooseView *timeChooseView;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;
+@property (nonatomic, strong) UIView *backgroundView;
+@property (nonatomic, strong) UIView *typeBackView;
+@property (nonatomic, strong) MSSAutoresizeLabelFlow *typeListRecordV;
+@property (nonatomic, weak) UIButton *typeListBtn;
+@property (nonatomic, strong) NSDictionary *typeDict;
+@property (nonatomic, strong) PBCheckHeaderView *tableheaderView1;
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, strong) NSMutableArray *selectedVideo;
+@property (nonatomic, strong) NSMutableArray *selectAssetArr;
+@property (nonatomic, assign) NSInteger personIndex;
+@property (nonatomic, assign) BOOL isSupervisor;//是否为监理人
+@property (nonatomic, assign) BOOL isQualified;//是否状态为已合格
+@end
+
+@implementation PBAddExamineViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+//    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    [PBNoteCenter addObserver:self selector:@selector(updateAddArtifacts:) name:PBNoteCenterUpdateArtifacts object:nil];
+    [PBNoteCenter addObserver:self selector:@selector(updateAddPerson:) name:PBNoteCenterUpdatePerson object:nil];
+    [PBNoteCenter addObserver:self selector:@selector(updateAddTask:) name:PBNoteCenterUpdateTask object:nil];
+    [self setupNav];
+    [self loadData];
+    [self setupUI];
+}
+- (void)updateAddArtifacts:(NSNotification *)noti {
+    PBExamineAddModel *examineAddModel = self.dataListM[self.personIndex];
+    examineAddModel.dataArr = noti.object;
+    NSIndexPath *path = [NSIndexPath indexPathForRow:self.personIndex inSection:0];
+    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (void)updateAddPerson:(NSNotification *)noti {
+    PBExamineAddModel *examineAddModel = self.dataListM[self.personIndex];
+    examineAddModel.personArr = noti.object;
+    NSIndexPath *path = [NSIndexPath indexPathForRow:self.personIndex inSection:0];
+    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (void)updateAddTask:(NSNotification *)noti {
+    PBExamineAddModel *examineAddModel = self.dataListM[self.personIndex];
+    examineAddModel.dataArr = noti.object;
+    NSIndexPath *path = [NSIndexPath indexPathForRow:self.personIndex inSection:0];
+    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (void)setupNav {
+    NSString *btnTitle = @"无";
+    if (self.typeArr.count > 0) {
+        self.typeDict = self.typeArr[0];
+        btnTitle = [NSString stringWithFormat:@"%@ ⋁",[self.typeDict valueForKey:@"aedt_name"]];
+    }
+    UIButton *typeListBtn = [[UIButton alloc] init];
+    [typeListBtn setTitle:btnTitle forState:UIControlStateNormal];
+    [typeListBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+    [typeListBtn setTitleColor:PBColor(169, 176, 185) forState:UIControlStateDisabled];
+    [typeListBtn addTarget:self action:@selector(typeListShow) forControlEvents:UIControlEventTouchUpInside];
+    self.typeListBtn = typeListBtn;
+    self.navigationItem.titleView = typeListBtn;
+    
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"arrow_left"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+  
+    UIBarButtonItem *stateNavItem = [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:self action:nil];
+    [stateNavItem setImage:[[UIImage imageNamed:@"Rectify_ check"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+    [stateNavItem setImageInsets:UIEdgeInsetsMake(0, 20, 0, -20)];
+    self.navigationItem.rightBarButtonItem = stateNavItem;
+}
+- (void)backItemAction {
+    [PBNoteCenter removeObserver:self];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)loadData {
+    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"examineAdd1" ofType:@"plist"];
+    NSArray *list = [NSArray arrayWithContentsOfFile:plistPath];
+    NSMutableArray *listM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < list.count; i++) {
+        NSDictionary *dict = list[i];
+        PBExamineAddModel *model = [PBExamineAddModel yy_modelWithDictionary:dict];
+//        model.isAddExamine = self.isAddExamine;
+//        model.isIssueManage = self.isIssueManage;
+        model.isAddExamine = YES;
+        [listM addObject:model];
+    }
+    self.dataListM = listM;
+}
+
+- (void)setupUI {
+    __weak typeof(self) weakSelf = self;
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSelectionStyleNone;
+    self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
+    [self.tableView registerClass:[PBTextInputTableViewCell class] forCellReuseIdentifier:inputCellID];
+    [self.tableView registerClass:[PBTopTitleTableViewCell class] forCellReuseIdentifier:titleCellID];
+    [self.tableView registerClass:[PBOneChooseTableViewCell class] forCellReuseIdentifier:oneChooseCellID];
+    [self.tableView registerClass:[PBTimeChooseTableViewCell class] forCellReuseIdentifier:timeChooseCellID];
+    [self.tableView registerClass:[PBPersonChooseTableViewCell class] forCellReuseIdentifier:personCellID];
+    [self.tableView registerClass:[PBArtifactsListTableViewCell class] forCellReuseIdentifier:listCellID];
+    [self.tableView registerClass:[PBCheckBoxTableViewCell class] forCellReuseIdentifier:checkBoxCellID];
+    [self.tableView registerClass:[PBRadioTableViewCell class] forCellReuseIdentifier:radioCellID];
+    [self.tableView registerClass:[PBStatusTableViewCell class] forCellReuseIdentifier:statusCellID];
+    [self.tableView registerClass:[PBInstructionsTableViewCell class] forCellReuseIdentifier:instructionsCellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    UIButton *checkBtn = [[UIButton alloc] init];
+    [checkBtn setImage:[UIImage imageNamed:@"submit_dis"] forState:UIControlStateDisabled];
+    [checkBtn setImage:[UIImage imageNamed:@"submit_nor"] forState:UIControlStateNormal];
+    [checkBtn addTarget:self action:@selector(checkAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:checkBtn];
+    [checkBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@50);
+    }];
+    self.tableheaderView1 = [[PBCheckHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 100)];
+    self.tableheaderView1.ChooseImageBlock = ^{
+        [weakSelf.view endEditing:YES];
+        [weakSelf chooseImageOrVideo];
+//        [weakSelf takePhotoLibrary];
+//        [weakSelf videoBtnFunc];
+    };
+    self.tableheaderView1.DeleteImageBlock = ^(NSInteger index) {
+        [weakSelf.selectedPhotos removeObjectAtIndex:index];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView1.DeleteVideoBlock = ^{
+        [weakSelf.selectedVideo removeAllObjects];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView1.PlayVideoBlock = ^{
+        [weakSelf.view endEditing:YES];
+        NSLog(@"打开视频");
+        PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+        PBResultVideo *result = weakSelf.selectedVideo[0];
+        playVC.filePath = result.url;
+        [weakSelf.navigationController pushViewController:playVC animated:YES];
+    };
+    self.tableheaderView1.projectModel = self.projectModel;
+    self.tableheaderView1.isAddExamine = YES;
+    self.tableView.tableHeaderView = self.tableheaderView1;
+}
+- (void)chooseImageOrVideo {
+    if (self.selectedPhotos.count > 0) {
+        [self takePhotoLibrary];
+        return;;
+    }
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:@"请选择" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *videoAction  = [UIAlertAction actionWithTitle:@"拍摄" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self videoBtnFunc];
+    }];
+    UIAlertAction *imageAction  = [UIAlertAction actionWithTitle:@"从手机相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self takePhotoLibrary];
+    }];
+    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:videoAction];
+    [alertVC addAction:imageAction];
+    [alertVC addAction:cancelAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+    
+}
+- (void)videoBtnFunc {
+    LXFCameraController *cameraController = [LXFCameraController defaultCameraController];
+    
+    __weak LXFCameraController *weakCameraController = cameraController;
+    
+    cameraController.takePhotosCompletionBlock = ^(UIImage *image, NSError *error) {
+        NSLog(@"takePhotosCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
+        UIImage *originalImage = [UIImage imageWithData:imageData];
+        [self.selectedPhotos addObject:originalImage];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.shootCompletionBlock = ^(NSURL *videoUrl, CGFloat videoTimeLength, UIImage *thumbnailImage, NSError *error) {
+        NSLog(@"shootCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        PBResultVideo *video = [[PBResultVideo alloc] init];
+        video.coverImage = thumbnailImage;
+        video.url = videoUrl;
+        video.data = [NSData dataWithContentsOfURL:videoUrl];
+        [self.selectedVideo addObject:video];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:cameraController animated:YES completion:nil];
+}
+//新增图片选择图片后填充
+- (void)setTableHeaderViewImage {
+    if (self.selectedVideo.count > 0) {
+        self.tableheaderView1.videoArr = self.selectedVideo;
+    }else {
+        self.tableheaderView1.imageArr = self.selectedPhotos;
+    }
+}
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+- (void)pushLFImagePickerController {
+    NSInteger maxImageCount = 9 - self.selectedPhotos.count;
+    
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:maxImageCount delegate:self];
+    imagePicker.maxVideosCount = 1;
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    if (self.selectedPhotos.count > 0) {
+        imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    }else {
+        imagePicker.allowPickingType = LFPickingMediaTypeALL;//用户是否可以选择视频
+    }
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+//    imagePicker.selectedAssets = self.selectAssetArr;
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+#pragma mark - LFImagePickerControllerDelegate
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+    NSMutableArray *videoArr = [[NSMutableArray alloc] init];
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            [imageArrM addObject:originalImage];
+        }else {
+            LFResultVideo *resultVideo = (LFResultVideo *)result;
+            PBResultVideo *video = [[PBResultVideo alloc] init];
+            video.coverImage = resultVideo.coverImage;
+            video.url = resultVideo.url;
+            video.data = resultVideo.data;
+            [videoArr addObject:video];
+        }
+    }
+    if (videoArr.count > 0) {
+        self.selectedVideo = videoArr;
+        [self.selectedPhotos removeAllObjects];
+    }else {
+        [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
+    }
+//    self.selectAssetArr = assetArr;
+    [self setTableHeaderViewImage];
+    
+}
+#pragma mark - 上传图片
+- (void)uploadFileWithFile:(NSArray *)files andData:(NSMutableDictionary *)dictM andCheckData:(NSMutableDictionary *)checkDictM {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+//    NSString *issueID = self.issueListModel.IssueId;
+//    if (self.isAddIssue) {
+//        issueID = @"";
+//    }
+    [[PBNetworkTools sharedTools] UploadImagesWithFiles:files andIssueID:nil andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+//            if (self.isAddIssue) {
+                NSMutableString *strM = [[NSMutableString alloc] init];
+                NSString *fileID = @"";
+                for (NSDictionary *obj in networkModel.Data) {
+                    [strM appendFormat:@"%@,",[obj valueForKey:@"bf_guid"]];
+                }
+                if([strM length] > 0){
+                    fileID = [strM substringToIndex:([strM length]-1)];
+                }
+                [self saveExamineWithFileId:fileID andData:dictM andCheckData:checkDictM];
+//            }else {
+//                [YJProgressHUD hide];
+//                [self.associatedDocs addObjectsFromArray:networkModel.Data];
+//                [self setTableViewHeaderView];
+//            }
+        }else {
+            [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
+        }
+    }];
+}
+#pragma mark - 保存
+- (void)saveExamineWithFileId:(NSString *)fileId andData:(NSMutableDictionary *)dictM andCheckData:(NSMutableDictionary *)checkDictM{
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [dictM setObject:fileId forKey:@"ImageIds"];
+    [[PBNetworkTools sharedTools] AddMissionWithDictM:dictM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"发起任务失败" inView:self.view afterDelayTime:1];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            if (self.isSupervisor) {
+                [self saveCheckDate:checkDictM andExamineID:[networkModel.Data valueForKey:@"ExamId"]];
+            }else {
+                [YJProgressHUD hide];
+                [PBNoteCenter removeObserver:self];
+                [self.navigationController popViewControllerAnimated:YES];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view afterDelayTime:1];
+        }
+    }];
+}
+#pragma mark - 保存检查数据
+- (void)saveCheckDate:(NSMutableDictionary *)checkDate andExamineID:(NSString *)examineId {
+    [[PBNetworkTools sharedTools] checkMissionWithExamineID:examineId andOrganizeId:self.projectModel.organizeid andData:checkDate andImageArr:[NSMutableArray new] andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [PBNoteCenter removeObserver:self];
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+#pragma mark - 发起任务方法
+- (void)checkAction {
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    NSMutableDictionary *dict1M = [[NSMutableDictionary alloc] init];
+    for (PBExamineAddModel *obj in self.dataListM) {
+        if (![obj.cellType isEqualToString:@"classTitle"] && ![obj.cellType isEqualToString:@"instructions"] && ![obj.cellType isEqualToString:@"checkbox"]) {
+            if ([obj.cellType isEqualToString:@"input"]) {
+                if (obj.dataStr == nil) {
+                    [YJProgressHUD showFailed:obj.prompt inview:self.view];
+                    return;
+                }else {
+                    if ([obj.key isEqualToString:@"RectificationRemark"]) {
+                        [dict1M setValue:obj.dataStr forKey:obj.key];
+                    }else {
+                        [dictM setValue:obj.dataStr forKey:obj.key];
+                    }
+                }
+            }else if ([obj.cellType isEqualToString:@"person"]) {
+                if ([obj.key isEqualToString:@"CheckerUserId"]) {
+                    if (obj.personArr.count > 0) {
+                        PBPersonModel *personModel = obj.personArr[0];
+                        [dictM setValue:personModel.UserId forKey:obj.key];
+                    }else {
+                        [YJProgressHUD showFailed:obj.prompt inview:self.view];
+                        return;
+                    }
+                }else {
+                    if (self.isQualified) {
+                        [dict1M setObject:@"" forKey:obj.key];
+                    }else {
+                        NSMutableString *userIdStrM = [[NSMutableString alloc] init];
+                        for (PBPersonModel *person in obj.personArr) {
+                            [userIdStrM appendString:[NSString stringWithFormat:@"%@,",person.UserId]];
+                        }
+                        if (userIdStrM.length == 0) {
+                            if([obj.key isEqualToString:@"RelationMemberID"]) {
+                                [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+                                return;
+                            }else {
+                                [dict1M setObject:@"" forKey:obj.key];
+                            }
+                        }else {
+                            [dict1M setObject:userIdStrM.copy forKey:obj.key];
+                        }
+                    }
+                }
+
+            }else if ([obj.cellType isEqualToString:@"time"]) {
+                if (obj.dataStr == nil) {
+                    [YJProgressHUD showFailed:obj.prompt inview:self.view];
+                    return;
+                }else {
+                    [dictM setValue:obj.dataStr forKey:obj.key];
+                }
+            }else if ([obj.cellType isEqualToString:@"list"]) {
+                if (obj.dataArr.count <= 0) {
+                    [dictM setValue:@"[]" forKey:obj.key];
+                }else {
+                    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+                    if ([obj.key isEqualToString:@"rel_taskjson"]) {//任务
+                        for (PBETaskInfoModel *model in obj.dataArr) {
+                            NSDictionary *dict =  @{
+                                @"ACTUALDURATION_" : model.ACTUALDURATION_ == nil? @"" : model.ACTUALDURATION_,
+                                @"ACTUALFINISH_" : model.ACTUALFINISH_ == nil? @"" : model.ACTUALFINISH_,
+                                @"ACTUALSTART_" : model.ACTUALSTART_ == nil? @"" : model.ACTUALSTART_,
+                                @"ASSIGNMENTS_" : model.ASSIGNMENTS_ == nil? @"" : model.ASSIGNMENTS_,
+                                @"CONSTRAINTDATE_" : model.CONSTRAINTDATE_ == nil? @"" : model.CONSTRAINTDATE_,
+                                @"CONSTRAINTTYPE_" : model.CONSTRAINTTYPE_ == nil? @"" : model.CONSTRAINTTYPE_,
+                                @"CRITICAL2_" : model.CRITICAL2_ == nil? @"" : model.CRITICAL2_,
+                                @"CRITICAL_" : model.CRITICAL_ == nil? @"" : model.CRITICAL_,
+                                @"DEPARTMENT_" : model.DEPARTMENT_ == nil? @"" : model.DEPARTMENT_,
+                                @"DURATION_" : model.DURATION_ == nil? @"" : model.DURATION_,
+                                @"FINISH_" : model.FINISH_ == nil? @"" : model.FINISH_,
+                                @"FIXEDDATE_" : model.FIXEDDATE_ == nil? @"" : model.FIXEDDATE_,
+                                @"ID_" : model.ID_ == nil? @"" : model.ID_,
+                                @"MANUAL_" : model.MANUAL_ == nil? @"" : model.MANUAL_,
+                                @"MILESTONE_" : model.MILESTONE_ == nil? @"" : model.MILESTONE_,
+                                @"NAME_" : model.NAME_ == nil? @"" : model.NAME_,
+                                @"NOTES_" : model.NOTES_ == nil? @"" : model.NOTES_,
+                                @"PARENTTASKUID_" : model.PARENTTASKUID_ == nil? @"" : model.PARENTTASKUID_,
+                                @"PERCENTCOMPLETE_" : model.PERCENTCOMPLETE_ == nil? @"" : model.PERCENTCOMPLETE_,
+                                @"PREDECESSORLINK_" : model.PREDECESSORLINK_ == nil? @"" : model.PREDECESSORLINK_,
+                                @"PRINCIPAL_" : model.PRINCIPAL_ == nil? @"" : model.PRINCIPAL_,
+                                @"PRIORITY_" : model.PRIORITY_ == nil? @"" : model.PRIORITY_,
+                                @"PROJECTUID_" : model.PROJECTUID_ == nil? @"" : model.PROJECTUID_,
+                                @"START_" : model.START_ == nil? @"" : model.START_,
+                                @"SUMMARY_" : model.SUMMARY_ == nil? @"" : model.SUMMARY_,
+                                @"UID_" : model.UID_ == nil? @"" : model.UID_,
+                                @"WBS_" : model.WBS_ == nil? @"" : model.WBS_,
+                                @"WEIGHT_" : model.WEIGHT_ == nil? @"" : model.WEIGHT_,
+                                @"WORK_" : model.WORK_ == nil? @"" : model.WORK_
+                            };
+                            [arrM addObject:dict];
+                        }
+                    }else {
+                        for (PBArtifactsInfoModel *model in obj.dataArr) {
+                            NSDictionary *dict =  @{
+                                @"bhaselerel" : model.bhaselerel == nil? @"" : model.bhaselerel,
+                                @"relelejson" : model.relelejson == nil? @"" : model.relelejson,
+                                @"bm_guid" : model.bm_guid == nil? @"" : model.bm_guid,
+                                @"bm_materialname" : model.bm_materialname == nil? @"" : model.bm_materialname,
+                                @"bm_materialcode" : model.bm_materialcode == nil? @"" : model.bm_materialcode,
+                                @"bm_materialmodel" : model.bm_materialmodel == nil? @"" : model.bm_materialmodel,
+                                @"bm_materialcount" : model.bm_materialcount == nil? @"" : model.bm_materialcount,
+                                @"bm_materialunit" : model.bm_materialunit == nil? @"" : model.bm_materialunit,
+                                @"bm_materialfac" : model.bm_materialfac == nil? @"" : model.bm_materialfac,
+                                @"bm_planarrtime" : model.bm_planarrtime == nil? @"" : model.bm_planarrtime,
+                                @"bc_guid_materialtype" : model.bc_guid_materialtype == nil? @"" : model.bc_guid_materialtype,
+                                @"bc_guid_materialstatus" : model.bc_guid_materialstatus == nil? @"" : model.bc_guid_materialstatus,
+                                @"bm_extjson" : model.bm_extjson == nil? @"" : model.bm_extjson
+                            };
+                            [arrM addObject:dict];
+                        }
+                    }
+                    
+                    NSString *jsonStr = [NSString arrConvertToJson:arrM.copy];
+                    [dictM setValue:jsonStr forKey:obj.key];
+                }
+            }else if ([obj.cellType isEqualToString:@"choose"]) {
+                if ([obj.dataStr isEqualToString:@""] || obj.dataStr == nil) {
+                    [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+                    return;
+                }
+                [dict1M setObject:obj.dataStr forKey:obj.key];
+            }else if ([obj.cellType isEqualToString:@"statu"]) {
+                NSString *chooseValue;
+                if ([obj.dataStr isEqualToString:@"已合格"]) {//statuChoosequalified
+                    chooseValue = @"1";
+                    self.isQualified = YES;
+                }else {
+                    chooseValue = @"0";
+                }
+                [dict1M setObject:chooseValue forKey:obj.key];
+            }
+
+        }
+    }
+    //类型
+    if (self.typeDict) {
+        [dictM setObject:[self.typeDict valueForKey:@"aedt_guid"] forKey:@"aedt_guid"];
+    }else {
+        [YJProgressHUD showFailed:@"请选择类型" inview:self.view];
+        return;
+    }
+    [dictM setValue:self.projectModel.bimcomposerid forKey:@"bimcomposerId"];
+    [dictM setValue:self.projectModel.organizeid forKey:@"organizeId"];
+    //截止日期和开始日期比较
+    NSInteger  result = [self compareWithDate:[dictM valueForKey:@"ExamineDate"] andDate:[dictM valueForKey:@"RectificateDate"]];
+    if (result == 1) {
+        [YJProgressHUD showFailed:@"截止日期应大于开始日期" inview:self.view];
+        return;
+    }
+    if (self.selectedPhotos.count == 0 && self.selectedVideo.count == 0) {
+        [YJProgressHUD showProgress:@"" inView:self.view];
+        [self saveExamineWithFileId:@"" andData:dictM andCheckData:dict1M];
+    }else {
+        if (self.selectedVideo.count > 0){
+            [self uploadFileWithFile:self.selectedVideo andData:dictM andCheckData:dict1M];
+        }else {
+            [self uploadFileWithFile:self.selectedPhotos andData:dictM andCheckData:dict1M];
+        }
+    }
+}
+//比较时间大小
+- (NSInteger)compareWithDate:(NSString*)aDate andDate:(NSString *)bDate{
+    NSDateFormatter *dateformater = [[NSDateFormatter alloc] init];
+    [dateformater setDateFormat:@"yyyy年MM月dd日"];
+    NSDate*dta = [[NSDate alloc]init];
+    NSDate*dtb = [[NSDate alloc]init];
+    dta = [dateformater dateFromString:aDate];
+    dtb = [dateformater dateFromString:bDate];
+    NSComparisonResult result = [dta compare:dtb];
+    if (result == NSOrderedDescending) {
+    //指定时间 a 大于 b
+       return 1;
+    }else if(result == NSOrderedAscending){
+    //指定时间 b 大于 a
+       return -1;
+    }else{
+    //刚好时间一样.
+       return 0;
+    }
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataListM.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+    if ([examineAddModel.cellType isEqualToString:@"input"]) {
+        PBTextInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inputCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"classTitle"]) {
+        PBTopTitleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:titleCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"time"]) {
+        PBTimeChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:timeChooseCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.ChooseBlock = ^{
+            [self.view endEditing:YES];
+            [PBKeyWindow addSubview:self.editTimeView];
+            self.editTimeView.examineAddModel = self.dataListM[indexPath.row];
+            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+                if (isSelsected) {
+                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                }
+            };
+            [self.editTimeView show];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"person"]) {
+        PBPersonChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.ChooseBlock = ^{
+              [self.view endEditing:YES];
+              if([examineAddModel.key isEqualToString:@"CheckerUserId"]) {
+                  if (self.isSupervisor) {
+                      return;
+                  }
+              }
+              self.personIndex = indexPath.row;
+              PBPersonListViewController *personListVC = [[PBPersonListViewController alloc] init];
+              personListVC.projectModel = self.projectModel;
+              if ([examineAddModel.key isEqualToString:@"RelationMemberID"]){
+                  personListVC.isMultiSelect = YES;
+              }else {
+                  personListVC.isMultiSelect = NO;
+              }
+              personListVC.selectList = examineAddModel.personArr.mutableCopy;
+              [self.navigationController pushViewController:personListVC animated:YES];
+          };
+          cell.LookAllBlock = ^{
+              PBSelectedPersonController *selectedPersonVC = [[PBSelectedPersonController alloc] init];
+              selectedPersonVC.selectList = examineAddModel.personArr.mutableCopy;
+              [self.navigationController pushViewController:selectedPersonVC animated:YES];
+          };
+          cell.selectionStyle = UITableViewCellSelectionStyleNone;
+          return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"checkbox"]) {
+          PBCheckBoxTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:checkBoxCellID forIndexPath:indexPath];
+          cell.examineAddModel = examineAddModel;
+          cell.selectionStyle = UITableViewCellSelectionStyleNone;
+          cell.updateBlock = ^(NSString * _Nonnull check) {
+              [self supervisorUpdate:check];
+          };
+          return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"list"]) {
+        PBArtifactsListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:listCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        cell.ChooseBlock = ^{
+            self.personIndex = indexPath.row;
+            if ([examineAddModel.key isEqualToString:@"rel_materialjson"]){
+                [self.view endEditing:YES];
+                PBArtifactsViewController *artifactsVC = [[PBArtifactsViewController alloc] init];
+                artifactsVC.examineAddModel = examineAddModel;
+                artifactsVC.projectModel = self.projectModel;
+                artifactsVC.selectList = examineAddModel.dataArr.mutableCopy;
+                [self.navigationController pushViewController:artifactsVC animated:YES];
+            }else {
+                [self.view endEditing:YES];
+                PBTaskViewController *taskVC = [[PBTaskViewController alloc] init];
+                taskVC.examineAddModel = examineAddModel;
+                taskVC.projectModel = self.projectModel;
+                taskVC.isOntPage = YES;
+                taskVC.selectList = examineAddModel.dataArr.mutableCopy;
+                [self.navigationController pushViewController:taskVC animated:YES];
+            }
+        };
+        cell.LookAllBlock = ^{
+            PBSeleceArtifactsViewController *selectedArtifactsVC = [[PBSeleceArtifactsViewController alloc] init];
+            if ([examineAddModel.key isEqualToString:@"rel_materialjson"]) {
+                selectedArtifactsVC.type = @"Artifacts";
+            }else {
+                selectedArtifactsVC.type = @"Task";
+            }
+            selectedArtifactsVC.selectList = examineAddModel.dataArr.mutableCopy;
+            [self.navigationController pushViewController:selectedArtifactsVC animated:YES];
+        };
+        return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"choose"]) {
+        PBRadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:radioCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"statu"]) {
+        PBStatusTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:statusCellID forIndexPath:indexPath];
+        cell.examineAddModel = examineAddModel;
+        cell.statusChange = ^(NSString * _Nonnull statu) {
+            if ([statu isEqualToString:@"已合格"]) {
+                examineAddModel.dataStr = statuChoosequalified;
+            }else {
+                examineAddModel.dataStr = @"";
+            }
+            [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationFade)];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if ([examineAddModel.cellType isEqualToString:@"instructions"]) {
+        PBInstructionsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:instructionsCellID forIndexPath:indexPath];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else {
+        return nil;
+    }
+}
+- (void)supervisorUpdate:(NSString *)check {
+    if ([check isEqualToString:@"1"]) {
+        //设置检查人为当前登录人 且不可更改
+        PBUserModel *checkPerson = [[PBUserModel alloc] init];
+        checkPerson.UserId = UserID;
+        checkPerson.RealName = Realname;
+        PBExamineAddModel *examineAddModel = self.dataListM[4];
+        examineAddModel.personArr = @[checkPerson];
+        
+        self.isSupervisor = YES;
+        NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"examineAdd4" ofType:@"plist"];
+        NSArray *list = [NSArray arrayWithContentsOfFile:plistPath];
+        NSMutableArray *listM = [[NSMutableArray alloc] init];
+        for (NSInteger i = 0; i < list.count; i++) {
+            NSDictionary *dict = list[i];
+            PBExamineAddModel *model = [PBExamineAddModel yy_modelWithDictionary:dict];
+            model.isAddExamine = YES;
+    //        model.isIssueManage = self.isIssueManage;
+            [listM addObject:model];
+        }
+        NSArray *array = listM.copy;
+        NSRange range = NSMakeRange(7, [array count]);
+        NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range];
+        [self.dataListM insertObjects:array atIndexes:indexSet];
+    }else {
+        self.isSupervisor = NO;
+        NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"examineAdd4" ofType:@"plist"];
+        NSArray *list = [NSArray arrayWithContentsOfFile:plistPath];
+        NSRange range = NSMakeRange(7, [list count]);
+        [self.dataListM removeObjectsInRange:range];
+    }
+    [self.tableView reloadData];
+    
+}
+- (void)presentTypeWithIndexPath:(NSIndexPath *)indexPath andExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"请选择类型" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
+    for (NSInteger i = 0; i < self.typeArr.count; i++) {
+        NSDictionary *dict = self.typeArr[i];
+        NSString *title = [dict valueForKey:@"aedt_name"];
+        UIAlertAction *action1 = [UIAlertAction actionWithTitle:title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            examineAddModel.dataDict = dict;
+            [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        }];
+        [alertVC addAction:action1];
+    }
+    
+    UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:cancel];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+
+- (PBEditPersonView *)editPersonView {
+    if (_editPersonView == nil) {
+        _editPersonView = [[PBEditPersonView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+//        _editPersonView.isChooseOne = YES;
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _editPersonView.visualViewHeight = 468.f + bottomH;
+        _editPersonView.isExamineChoose = YES;
+    }
+    return _editPersonView;
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setTypeArr:(NSArray *)typeArr {
+    _typeArr = typeArr;
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+
+- (void)backTapped:(UITapGestureRecognizer *)sender {
+    [self hideDropDown];
+}
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+//    if ([NSStringFromClass([touch.view class]) isEqualToString:@"MSSAutoresizeLabelFlow"]) {
+//        return NO;
+//    } else {
+//        return YES;
+//    }
+    if (touch.view == self.backgroundView) {
+        return YES;
+    } else {
+        return NO;
+    }
+}
+- (void)typeListShow {
+    if (self.typeArr.count <=  0) {
+        [YJProgressHUD showMessage:@"没有类型相关数据" inView:self.view];
+        return;
+    }
+    [self.view addSubview:self.backgroundView];
+    [self.backgroundView addSubview:self.typeBackView];
+    [self.typeBackView circleViewWithRadius:6];
+    [self.typeBackView addSubview:self.typeListRecordV];
+    [UIView animateWithDuration:0.5 animations:^{
+        self.typeBackView.frame = CGRectMake(0, 0, PBScreenWidth, 176);
+        self.backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.3];
+    }completion:^(BOOL finished) {
+//        self->_isShow = YES;
+        
+    }];
+    self.typeListBtn.enabled = NO;
+    self.navigationItem.leftBarButtonItem.enabled = NO;
+}
+- (void)hideDropDown{
+    [UIView animateWithDuration:0.5 animations:^{
+        self.typeBackView.frame = CGRectMake(0, -176, PBScreenWidth, 176);
+        self.backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
+    }completion:^(BOOL finished) {
+        [self.backgroundView removeFromSuperview];
+        [self.typeBackView removeFromSuperview];
+        [self.typeListRecordV removeFromSuperview];
+//        self->_isShow = NO;
+    }];
+    self.typeListBtn.enabled = YES;
+    self.navigationItem.leftBarButtonItem.enabled = YES;
+}
+- (UIView *)backgroundView {
+    if (_backgroundView == nil) {
+        _backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0 , 0, PBScreenWidth, self.view.height)];
+        _backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
+        [_backgroundView setOpaque:NO];
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backTapped:)];
+        tap.delegate = self;
+        [_backgroundView addGestureRecognizer:tap];
+    }
+    return _backgroundView;
+}
+- (MSSAutoresizeLabelFlow *)typeListRecordV {
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < self.typeArr.count; i++) {
+        NSString *str = [self.typeArr[i] valueForKey:@"aedt_name"];
+        [arrM addObject:str];
+    }
+    NSArray *array = arrM.copy;
+    if (_typeListRecordV == nil) {
+        _typeListRecordV = [[MSSAutoresizeLabelFlow alloc] initWithFrame:CGRectMake(0, 25, PBScreenWidth, 126) titles:array selectedHandler:^(NSUInteger index, NSString *title) {
+            self.typeDict = self.typeArr[index];
+            NSString *btnTitle = [NSString stringWithFormat:@"%@ ⋁",[self.typeDict valueForKey:@"aedt_name"]];
+            [self.typeListBtn setTitle:btnTitle forState:UIControlStateNormal];
+            [self hideDropDown];
+        }];
+    }
+    return _typeListRecordV;
+}
+- (UIView *)typeBackView {
+    if (_typeBackView == nil) {
+        _typeBackView = [[UIView alloc] initWithFrame:CGRectMake(0, -176, PBScreenWidth, 176)];
+        _typeBackView.backgroundColor = [UIColor whiteColor];
+    }
+    return _typeBackView;
+}
+- (NSMutableArray *)selectedPhotos {
+    if (_selectedPhotos == nil) {
+        _selectedPhotos = [[NSMutableArray alloc] init];
+    }
+    return _selectedPhotos;
+}
+- (NSMutableArray *)selectedVideo {
+    if (_selectedVideo == nil) {
+        _selectedVideo = [[NSMutableArray alloc] init];
+    }
+    return _selectedVideo;
+}
+
+//textFName.inputAccessoryView = self.kbToolbar;
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.h
new file mode 100644
index 0000000..cbe0ff7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBAddRecordViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/2/15.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "WKAvoidKeyboardViewController.h"
+@class PBExamineListModel;
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBAddRecordViewController : UIViewController
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, copy) void(^UpdateRecordListBlock)(BOOL isQualified);
+@property (nonatomic, assign) BOOL isBackList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.m
new file mode 100644
index 0000000..3e292e8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBAddRecordViewController.m
@@ -0,0 +1,397 @@
+//
+//  PBAddRecordViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/2/15.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBAddRecordViewController.h"
+#import "PBExamineAddModel.h"
+#import "PBProjectModel.h"
+#import "PBExamineListModel.h"
+#import "PBResultModel.h"
+#import "PBExamineTableHeaderView.h"
+#import "PBVideoPlayViewController.h"
+#import "PBCheckHeaderView.h"
+#import "PBExamineAddModel.h"
+#import "PBRecordInputTableViewCell.h"
+#import "PBStatusTableViewCell.h"
+#import "PBTopTitleTableViewCell.h"
+#import "LXFCameraController.h"
+static NSString *const inputCellID = @"inputCellID";
+static NSString *const stateCellID = @"stateCellID";
+static NSString *const titleCellID = @"titleCellID";
+@interface PBAddRecordViewController ()<UITableViewDataSource, UITableViewDelegate, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBCheckHeaderView *tableheaderView;
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, strong) NSMutableArray *selectedVideo;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSMutableArray *selectAssetArr;
+@end
+
+@implementation PBAddRecordViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    UIView *topV = [[UIView alloc] init];
+    topV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:topV];
+    [topV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.height.equalTo(@50);
+    }];
+    UIButton *cancelBtn = [UIButton z_textButton:@"取消" fontSize:16 normalColor:PBColor(97, 111, 125)];
+    [cancelBtn addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:cancelBtn];
+    [cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(16);
+        make.left.equalTo(self.view).offset(20);
+        make.size.mas_equalTo(CGSizeMake(34, 18));
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"验收" Color:PBColor(97, 111, 125) isBold:YES Font:16];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.view addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(16);
+        make.size.mas_equalTo(CGSizeMake(69, 18));
+        make.centerX.equalTo(self.view);
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(233, 235, 237);
+    [self.view addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topV.mas_bottom);
+        make.left.right.equalTo(self.view);
+        make.height.equalTo(@1);
+    }];
+}
+- (void)cancelAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+- (void)setupUI {
+    __weak typeof(self) weakSelf = self;
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
+    self.tableView.bounces = NO;
+    [self.tableView registerClass:[PBRecordInputTableViewCell class] forCellReuseIdentifier:inputCellID];
+    [self.tableView registerClass:[PBStatusTableViewCell class] forCellReuseIdentifier:stateCellID];
+    [self.tableView registerClass:[PBTopTitleTableViewCell class] forCellReuseIdentifier:titleCellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(51);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    UIButton *applyBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"acceptance_nor"]];
+    [applyBtn addTarget:self action:@selector(saveAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:applyBtn];
+    [applyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@50);
+    }];
+    self.tableheaderView = [[PBCheckHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 100)];
+    self.tableheaderView.ChooseImageBlock = ^{
+        [weakSelf.view endEditing:YES];
+        [weakSelf chooseImageOrVideo];
+    };
+    self.tableheaderView.DeleteImageBlock = ^(NSInteger index) {
+        [weakSelf.view endEditing:YES];
+        [weakSelf.selectedPhotos removeObjectAtIndex:index];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView.DeleteVideoBlock = ^{
+        [weakSelf.view endEditing:YES];
+        [weakSelf.selectedVideo removeAllObjects];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView.PlayVideoBlock = ^{
+        [weakSelf.view endEditing:YES];
+        NSLog(@"打开视频");
+        PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+        PBResultVideo *result = weakSelf.selectedVideo[0];
+        playVC.filePath = result.url;
+        [weakSelf.navigationController pushViewController:playVC animated:YES];
+    };
+    self.tableheaderView.projectModel = self.projectModel;
+    self.tableheaderView.isAddExamine = YES;
+    self.tableView.tableHeaderView = self.tableheaderView;
+}
+- (void)chooseImageOrVideo {
+    if (self.selectedPhotos.count > 0) {
+        [self takePhotoLibrary];
+        return;;
+    }
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:@"请选择" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *videoAction  = [UIAlertAction actionWithTitle:@"拍摄" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self videoBtnFunc];
+    }];
+    UIAlertAction *imageAction  = [UIAlertAction actionWithTitle:@"从手机相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self takePhotoLibrary];
+    }];
+    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:videoAction];
+    [alertVC addAction:imageAction];
+    [alertVC addAction:cancelAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+- (void)videoBtnFunc {
+    LXFCameraController *cameraController = [LXFCameraController defaultCameraController];
+    
+    __weak LXFCameraController *weakCameraController = cameraController;
+    
+    cameraController.takePhotosCompletionBlock = ^(UIImage *image, NSError *error) {
+        NSLog(@"takePhotosCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
+        UIImage *originalImage = [UIImage imageWithData:imageData];
+        [self.selectedPhotos addObject:originalImage];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.shootCompletionBlock = ^(NSURL *videoUrl, CGFloat videoTimeLength, UIImage *thumbnailImage, NSError *error) {
+        NSLog(@"shootCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        PBResultVideo *video = [[PBResultVideo alloc] init];
+        video.coverImage = thumbnailImage;
+        video.url = videoUrl;
+        video.data = [NSData dataWithContentsOfURL:videoUrl];
+        [self.selectedVideo addObject:video];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:cameraController animated:YES completion:nil];
+}
+//新增图片选择图片后填充
+- (void)setTableHeaderViewImage {
+    if (self.selectedVideo.count > 0) {
+        self.tableheaderView.videoArr = self.selectedVideo;
+    }else {
+        self.tableheaderView.imageArr = self.selectedPhotos;
+    }
+}
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+
+- (void)pushLFImagePickerController {
+    NSInteger maxImageCount = 9 - self.selectedPhotos.count;
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:maxImageCount delegate:self];
+    imagePicker.maxVideosCount = 1;
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    if (self.selectedPhotos.count > 0) {
+        imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    }else {
+        imagePicker.allowPickingType = LFPickingMediaTypeALL;//用户是否可以选择视频
+    }
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+//    imagePicker.selectedAssets = self.selectAssetArr.copy;
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+#pragma mark - LFImagePickerControllerDelegate
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+    NSMutableArray *videoArr = [[NSMutableArray alloc] init];
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            [imageArrM addObject:originalImage];
+        }else {
+            LFResultVideo *resultVideo = (LFResultVideo *)result;
+            PBResultVideo *video = [[PBResultVideo alloc] init];
+            video.coverImage = resultVideo.coverImage;
+            video.url = resultVideo.url;
+            video.data = resultVideo.data;
+            [videoArr addObject:video];
+        }
+    }
+    if (videoArr.count > 0) {
+        self.selectedVideo = videoArr;
+        [self.selectedPhotos removeAllObjects];
+    }else {
+        [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
+    }
+    [self setTableHeaderViewImage];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == 0) {
+        PBRecordInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inputCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataList[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 1) {
+        PBTopTitleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:titleCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataList[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else {
+        PBStatusTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:stateCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataList[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }
+}
+#pragma mark - 提交保存数据
+- (void)saveAction {
+    [self.view endEditing:NO];
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"确认保存" message:@"保存后将不可更改,是否确认保存" preferredStyle:UIAlertControllerStyleAlert];
+    UIAlertAction *saveAction = [UIAlertAction actionWithTitle:@"保存" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self saveTextDataAndExamine];
+    }];
+    UIAlertAction *canceAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:saveAction];
+    [alertVC addAction:canceAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+- (void)saveTextDataAndExamine {
+    NSMutableArray *arrM;
+    if (self.selectedVideo.count > 0) {
+        arrM = self.selectedVideo;
+    }else {
+        arrM = self.selectedPhotos;
+    }
+    PBExamineAddModel *examindeAddModel = self.dataList[0];
+    NSString *remark = examindeAddModel.dataStr;
+    
+    PBExamineAddModel *examindeAddModel1 = self.dataList[2];
+    NSString *result = @"0";
+    BOOL updateFlag = NO;
+    if ([examindeAddModel1.dataStr isEqualToString:@"已合格"]) {
+        result = @"1";
+        updateFlag = YES;
+    }
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] tryToAcceptanceWithExamineID:self.examineListModel.ExamineID andOrganizeId:self.projectModel.organizeid andRectificationRemark:remark andIsPassed:result andImageArr:arrM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+       if (error) {
+           [YJProgressHUD showMessage:@"保存失败" inView:self.view];
+           return;
+       }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            if (self.UpdateRecordListBlock) {
+                
+                self.UpdateRecordListBlock(updateFlag);
+            }
+            [self dismissViewControllerAnimated:YES completion:nil];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (NSArray *)dataList {
+    if (_dataList == nil) {
+        PBExamineAddModel *examineAddModel = [[PBExamineAddModel alloc] init];
+        examineAddModel.prompt = @"请输入验收内容";
+        PBExamineAddModel *examineAddModel1 = [[PBExamineAddModel alloc] init];
+        examineAddModel1.title = @"验收情况";
+        PBExamineAddModel *examineAddModel2 = [[PBExamineAddModel alloc] init];
+        _dataList = @[examineAddModel, examineAddModel1, examineAddModel2];
+    }
+    return _dataList;
+}
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    [self.view endEditing:YES];
+}
+- (NSMutableArray *)selectedPhotos {
+    if (_selectedPhotos == nil) {
+        _selectedPhotos = [[NSMutableArray alloc] init];
+    }
+    return _selectedPhotos;
+}
+- (NSMutableArray *)selectedVideo {
+    if (_selectedVideo == nil) {
+        _selectedVideo = [[NSMutableArray alloc] init];
+    }
+    return _selectedVideo;
+}
+- (NSMutableArray *)selectAssetArr {
+    if (_selectAssetArr == nil) {
+        _selectAssetArr = [[NSMutableArray alloc] init];
+    }
+    return _selectAssetArr;
+}
+- (void)setIsBackList:(BOOL)isBackList {
+    _isBackList = isBackList;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.h
new file mode 100644
index 0000000..52c5bfa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.h
@@ -0,0 +1,21 @@
+//
+//  PBApplyInspectionViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/2/28.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "WKAvoidKeyboardViewController.h"
+@class PBExamineListModel;
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBApplyInspectionViewController : UIViewController
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, copy) void(^UpdateRecordListBlock)(void);
+@property (nonatomic, assign) BOOL isBackList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.m
new file mode 100644
index 0000000..4fdf31b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBApplyInspectionViewController.m
@@ -0,0 +1,362 @@
+//
+//  PBApplyInspectionViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/2/28.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBApplyInspectionViewController.h"
+#import "PBIssueAddModel.h"
+#import "PBProjectModel.h"
+#import "PBExamineListModel.h"
+#import "PBExamineTableHeaderView.h"
+#import "PBVideoPlayViewController.h"
+#import "PBCheckHeaderView.h"
+#import "PBExamineAddModel.h"
+#import "PBRecordInputTableViewCell.h"
+#import "LXFCameraController.h"
+static NSString *const inputCellID = @"inputCellID";
+@interface PBApplyInspectionViewController ()<UITableViewDataSource, UITableViewDelegate, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBCheckHeaderView *tableheaderView;
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, strong) NSMutableArray *selectedVideo;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSMutableArray *selectAssetArr;
+@end
+
+@implementation PBApplyInspectionViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    UIView *topV = [[UIView alloc] init];
+    topV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:topV];
+    [topV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.height.equalTo(@50);
+    }];
+    UIButton *cancelBtn = [UIButton z_textButton:@"取消" fontSize:16 normalColor:PBColor(97, 111, 125)];
+    [cancelBtn addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:cancelBtn];
+    [cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(16);
+        make.left.equalTo(self.view).offset(20);
+        make.size.mas_equalTo(CGSizeMake(34, 18));
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"申请复检" Color:PBColor(97, 111, 125) isBold:YES Font:16];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.view addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(16);
+        make.size.mas_equalTo(CGSizeMake(69, 18));
+        make.centerX.equalTo(self.view);
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(233, 235, 237);
+    [self.view addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topV.mas_bottom);
+        make.left.right.equalTo(self.view);
+        make.height.equalTo(@1);
+    }];
+}
+- (void)cancelAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+#pragma mark - 提交保存数据
+- (void)saveAction {
+    [self.view endEditing:NO];
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"确认保存" message:@"保存后将不可更改,是否确认保存" preferredStyle:UIAlertControllerStyleAlert];
+    UIAlertAction *saveAction = [UIAlertAction actionWithTitle:@"保存" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        NSMutableArray *arrM;
+        if (self.selectedVideo.count > 0) {
+            arrM = self.selectedVideo;
+        }else {
+            arrM = self.selectedPhotos;
+        }
+        PBExamineAddModel *examindeAddModel = self.dataList[0];
+        NSString *remark = examindeAddModel.dataStr;
+        [YJProgressHUD showProgress:@"" inView:self.view];
+        [[PBNetworkTools sharedTools] ApplyToAcceptanceWithExamineID:self.examineListModel.ExamineID andOrganizeId:self.projectModel.organizeid andRectificationRemark:remark andImageArr:arrM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"保存失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                [YJProgressHUD showMessage:@"保存成功" inView:self.view];
+                if (self.UpdateRecordListBlock) {
+                    self.UpdateRecordListBlock();
+                }
+                [self dismissViewControllerAnimated:YES completion:nil];
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+    }];
+    UIAlertAction *canceAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:saveAction];
+    [alertVC addAction:canceAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+- (void)setupUI {
+    __weak typeof(self) weakSelf = self;
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
+    self.tableView.bounces = NO;
+    [self.tableView registerClass:[PBRecordInputTableViewCell class] forCellReuseIdentifier:inputCellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(51);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    UIButton *applyBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"apply_reinspection_nor"]];
+    [applyBtn addTarget:self action:@selector(saveAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:applyBtn];
+    [applyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@50);
+    }];
+    self.tableheaderView = [[PBCheckHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 100)];
+    self.tableheaderView.ChooseImageBlock = ^{
+        [weakSelf.view endEditing:YES];
+        [weakSelf chooseImageOrVideo];
+    };
+    self.tableheaderView.DeleteImageBlock = ^(NSInteger index) {
+        [weakSelf.view endEditing:YES];
+        [weakSelf.selectedPhotos removeObjectAtIndex:index];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView.DeleteVideoBlock = ^{
+        [weakSelf.view endEditing:YES];
+        [weakSelf.selectedVideo removeAllObjects];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView.PlayVideoBlock = ^{
+        [weakSelf.view endEditing:YES];
+        NSLog(@"打开视频");
+        PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+        PBResultVideo *result = weakSelf.selectedVideo[0];
+        playVC.filePath = result.url;
+        [weakSelf.navigationController pushViewController:playVC animated:YES];
+    };
+    self.tableheaderView.projectModel = self.projectModel;
+    self.tableheaderView.isAddExamine = YES;
+    self.tableView.tableHeaderView = self.tableheaderView;
+}
+
+- (void)chooseImageOrVideo {
+    if (self.selectedPhotos.count > 0) {
+        [self takePhotoLibrary];
+        return;;
+    }
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:@"请选择" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *videoAction  = [UIAlertAction actionWithTitle:@"拍摄" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self videoBtnFunc];
+    }];
+    UIAlertAction *imageAction  = [UIAlertAction actionWithTitle:@"从手机相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self takePhotoLibrary];
+    }];
+    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:videoAction];
+    [alertVC addAction:imageAction];
+    [alertVC addAction:cancelAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+- (void)videoBtnFunc {
+    LXFCameraController *cameraController = [LXFCameraController defaultCameraController];
+    
+    __weak LXFCameraController *weakCameraController = cameraController;
+    
+    cameraController.takePhotosCompletionBlock = ^(UIImage *image, NSError *error) {
+        NSLog(@"takePhotosCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
+        UIImage *originalImage = [UIImage imageWithData:imageData];
+        [self.selectedPhotos addObject:originalImage];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.shootCompletionBlock = ^(NSURL *videoUrl, CGFloat videoTimeLength, UIImage *thumbnailImage, NSError *error) {
+        NSLog(@"shootCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        PBResultVideo *video = [[PBResultVideo alloc] init];
+        video.coverImage = thumbnailImage;
+        video.url = videoUrl;
+        video.data = [NSData dataWithContentsOfURL:videoUrl];
+        [self.selectedVideo addObject:video];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:cameraController animated:YES completion:nil];
+}
+//新增图片选择图片后填充
+- (void)setTableHeaderViewImage {
+    if (self.selectedVideo.count > 0) {
+        self.tableheaderView.videoArr = self.selectedVideo;
+    }else {
+        self.tableheaderView.imageArr = self.selectedPhotos;
+    }
+}
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+
+- (void)pushLFImagePickerController {
+    NSInteger maxImageCount = 9 - self.selectedPhotos.count;
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:maxImageCount delegate:self];
+    imagePicker.maxVideosCount = 1;
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    if (self.selectedPhotos.count > 0) {
+        imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    }else {
+        imagePicker.allowPickingType = LFPickingMediaTypeALL;//用户是否可以选择视频
+    }
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+//    imagePicker.selectedAssets = self.selectAssetArr.copy;
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+#pragma mark - LFImagePickerControllerDelegate
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+//    NSMutableArray *assetArr = [[NSMutableArray alloc] init];
+    NSMutableArray *videoArr = [[NSMutableArray alloc] init];
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            [imageArrM addObject:originalImage];
+//            [assetArr addObject:result.asset];
+        }else {
+            LFResultVideo *resultVideo = (LFResultVideo *)result;
+            PBResultVideo *video = [[PBResultVideo alloc] init];
+            video.coverImage = resultVideo.coverImage;
+            video.url = resultVideo.url;
+            video.data = resultVideo.data;
+            [videoArr addObject:video];
+        }
+    }
+    if (videoArr.count > 0) {
+        self.selectedVideo = videoArr;
+        [self.selectedPhotos removeAllObjects];
+//        [self.selectAssetArr removeAllObjects];
+    }else {
+        [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
+//        [self.selectAssetArr addObjectsFromArray:assetArr];
+    }
+    [self setTableHeaderViewImage];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBRecordInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inputCellID forIndexPath:indexPath];
+    PBExamineAddModel *examineAddModel = self.dataList[indexPath.row];
+    cell.examineAddModel = examineAddModel;
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+- (NSArray *)dataList {
+    if (_dataList == nil) {
+        PBExamineAddModel *examineAddModel = [[PBExamineAddModel alloc] init];
+        examineAddModel.prompt = @"请输入申请复检内容";
+        _dataList = @[examineAddModel];
+    }
+    return _dataList;
+}
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+}
+- (NSMutableArray *)selectedPhotos {
+    if (_selectedPhotos == nil) {
+        _selectedPhotos = [[NSMutableArray alloc] init];
+    }
+    return _selectedPhotos;
+}
+- (NSMutableArray *)selectedVideo {
+    if (_selectedVideo == nil) {
+        _selectedVideo = [[NSMutableArray alloc] init];
+    }
+    return _selectedVideo;
+}
+- (void)setIsBackList:(BOOL)isBackList {
+    _isBackList = isBackList;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.h
new file mode 100644
index 0000000..940deea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.h
@@ -0,0 +1,27 @@
+//
+//  PBArtifactsViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/11.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@class PBSiteMechanicalModel;
+@class PBProjectModel;
+@class PBArtifactsModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBArtifactsViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+//@property (nonatomic, strong) NSString *structureId;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, strong) PBSiteMechanicalModel *siteMechanicalModel;
+@property (nonatomic, strong) PBArtifactsModel *artifactsModel;
+
+@property (nonatomic, strong) NSMutableArray *selectList;
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.m
new file mode 100644
index 0000000..5ac47e7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBArtifactsViewController.m
@@ -0,0 +1,400 @@
+//
+//  PBArtifactsViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/11.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBArtifactsViewController.h"
+#import "PBStructureTableViewCell.h"
+#import "PBProjectModel.h"
+#import "PBArtifactsModel.h"
+#import "PBChooseArtifactsCell.h"
+#import "PBArtifactsInfoModel.h"
+#import "PBAddExamineViewController.h"
+#import "PBSiteMaterialViewController.h"
+#import "PBSeleceArtifactsViewController.h"
+#import "PBExamineAddModel.h"
+#import "PBSiteMechanicalModel.h"
+static NSString *const cellID = @"cellID";
+static NSString *const artifactsCellID = @"artifactsCellID";
+@interface PBArtifactsViewController ()<UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, weak) UIView *bottomV;
+@property (nonatomic, weak) UIButton *determineBtn;
+@property (nonatomic, weak) UIButton *arrowBtn;
+@property (nonatomic, weak) UILabel *selectCountL;
+@end
+
+@implementation PBArtifactsViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    NSLog(@"============%zd",self.selectList.count);
+    if ([self.artifactsModel.DirectChildrenCount isEqualToString:@"0"] && ![self.artifactsModel.ChildrenItemCount isEqualToString:@"0"]) {
+        for (PBArtifactsInfoModel *model in self.dataList) {
+            for (PBArtifactsInfoModel *selectModel in self.selectList) {
+                if ([model.bm_guid isEqualToString:selectModel.bm_guid]) {
+                    model.isSelected = YES;
+                    break;
+                }else {
+                    model.isSelected = NO;
+                }
+            }
+        }
+        [self.tableView reloadData];
+    }
+    if (self.selectList.count > 0) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.selectCountL.hidden = NO;
+        self.determineBtn.hidden = NO;
+        self.selectCountL.text = [NSString stringWithFormat:@"已选择%zd个构件",self.selectList.count];
+        [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+    }else {
+//        self.bottomV.hidden = YES;
+//        self.arrowBtn.hidden = YES;
+//        self.selectCountL.hidden = YES;
+//        self.determineBtn.hidden = YES;
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.selectCountL.hidden = NO;
+        self.determineBtn.hidden = NO;
+        self.selectCountL.text = [NSString stringWithFormat:@"已选择%zd个构件",self.selectList.count];
+        [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    [self setupNav];
+    [self setupUI];
+    [self loadArtifactsData];
+}
+- (void)loadArtifactsData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSString *code;
+    if (self.artifactsModel == nil) {
+        code = @"";
+        [[PBNetworkTools sharedTools] GetCategoriesWithOrganizeId:self.projectModel.organizeid andBaseCode:code andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                [YJProgressHUD hide];
+                self.dataList = [networkModel.Data valueForKey:@"list"];
+                [self.tableView reloadData];
+                if (self.dataList.count == 0) {
+                    [YJProgressHUD showMessage:@"暂无内容,请返回上级选择" inView:self.view];
+                }
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+    }else {
+        if ([self.artifactsModel.DirectChildrenCount isEqualToString:@"0"]) {
+            if ([self.artifactsModel.ChildrenItemCount isEqualToString:@"0"]) {
+                [YJProgressHUD showMessage:@"暂无数据" inView:self.view];
+                return;
+            }
+            [[PBNetworkTools sharedTools] GetMaterialListWithOrganizeId:self.projectModel.organizeid andBc_guid:self.artifactsModel.bmc_guid andCallBack:^(NSURLResponse *response, id responseObject, NSError *error) {
+                if (error) {
+                    [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                    return;
+                }
+                NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
+                PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+                if (networkModel.Ret == 1) {
+                    [YJProgressHUD hide];
+                    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+                    NSArray *list = [networkModel.Data valueForKey:@"List"];
+                    for (NSDictionary *obj in list) {
+                        PBArtifactsInfoModel *model = [PBArtifactsInfoModel yy_modelWithDictionary:obj];
+                        for (PBArtifactsInfoModel *selectModel in self.selectList) {
+                            if ([model.bm_guid isEqualToString:selectModel.bm_guid]) {
+                                model.isSelected = YES;
+                                break;
+                            }else {
+                                model.isSelected = NO;
+                            }
+                        }
+                        [arrM addObject:model];
+                    }
+                    self.dataList = arrM.copy;
+                    [self.tableView reloadData];
+                    if (self.dataList.count == 0) {
+                        [YJProgressHUD showMessage:@"暂无内容,请返回上级选择" inView:self.view];
+                    }
+                }else {
+                    [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+                }
+            }];
+        }else {
+            code = self.artifactsModel.bmc_code;
+            [[PBNetworkTools sharedTools] GetCategoriesWithOrganizeId:self.projectModel.organizeid andBaseCode:code andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+                if (error) {
+                    [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                    return;
+                }
+                NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+                PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+                if (networkModel.Ret == 1) {
+                    [YJProgressHUD hide];
+                    self.dataList = [networkModel.Data valueForKey:@"list"];
+                    [self.tableView reloadData];
+                    if (self.dataList.count == 0) {
+                        [YJProgressHUD showMessage:@"暂无内容,请返回上级选择" inView:self.view];
+                    }
+                }else {
+                    [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+                }
+            }];
+        }
+    }
+}
+- (void)setupNav {
+    self.title = @"关联构件";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 47;
+    self.tableView.sectionIndexColor = PBColor(97, 111, 125);
+    UITableView *footerV = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+    if (@available(iOS 15.0, *)) {
+        footerV.sectionHeaderTopPadding = 0;
+    };
+    self.tableView.tableFooterView = footerV;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBStructureTableViewCell class] forCellReuseIdentifier:cellID];
+    [self.tableView registerClass:[PBChooseArtifactsCell class] forCellReuseIdentifier:artifactsCellID];
+    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 56, 0);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+//    self.tableView.tableHeaderView = [self setupTableHearderView];
+    
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.bottom.right.equalTo(self.tableView);
+        make.height.equalTo(@54);
+    }];
+    UIButton *arrowBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"arrow_top"]];
+    [arrowBtn addTarget:self action:@selector(arrowTopActon) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:arrowBtn];
+    [arrowBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(15);
+        make.left.equalTo(bottomV).offset(12);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UILabel *selectCountL = [UILabel z_labelWithText:[NSString stringWithFormat:@"已选择%zd个构件",self.selectList.count] Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.view addSubview:selectCountL];
+    [selectCountL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(arrowBtn);
+        make.height.equalTo(@20);
+        make.left.equalTo(arrowBtn.mas_right).offset(15);
+        make.right.equalTo(self.view).offset(-120);
+    }];
+    UIButton *determineBtn = [UIButton z_textButton:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] boldFontSize:14 normalColor:[UIColor whiteColor]];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    determineBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.view addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(9);
+        make.right.equalTo(bottomV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(89, 34));
+    }];
+    [determineBtn circleViewWithRadius:6];
+    self.arrowBtn = arrowBtn;
+    self.bottomV = bottomV;
+    self.selectCountL = selectCountL;
+    self.determineBtn = determineBtn;
+    if (self.selectList.count > 0) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.selectCountL.hidden = NO;
+        self.determineBtn.hidden = NO;
+    }else {
+//        self.bottomV.hidden = YES;
+//        self.arrowBtn.hidden = YES;
+//        self.selectCountL.hidden = YES;
+//        self.determineBtn.hidden = YES;
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.selectCountL.hidden = NO;
+        self.determineBtn.hidden = NO;
+    }
+}
+- (void)determineBtnAction {
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdateArtifacts object:self.selectList.copy];
+    if (self.examineAddModel) {
+        [self backAction];
+    }else if (self.siteMechanicalModel) {
+        [self backAction1];
+    }
+}
+- (UIView *)setupTableHearderView {
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 52)];
+    bgV.backgroundColor = PBColor(244, 245, 246);
+    UIButton *searchBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_search_background"]];
+    [searchBtn addTarget:self action:@selector(searchAction) forControlEvents:UIControlEventTouchUpInside];
+    [bgV addSubview:searchBtn];
+    [searchBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(8);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+        make.height.equalTo(@36);
+    }];
+    return bgV;
+}
+- (void)searchAction {
+    
+}
+- (void)arrowTopActon {
+    PBSeleceArtifactsViewController *selectArtifactsVC = [[PBSeleceArtifactsViewController alloc] init];
+    selectArtifactsVC.type = @"Artifacts";
+    selectArtifactsVC.selectList = self.selectList;
+    [self.navigationController pushViewController:selectArtifactsVC animated:YES];
+}
+- (void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBAddExamineViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+- (void)backAction1{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBSiteMaterialViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if ([self.artifactsModel.DirectChildrenCount isEqualToString:@"0"] && ![self.artifactsModel.ChildrenItemCount isEqualToString:@"0"]) {
+        PBChooseArtifactsCell *cell = [tableView dequeueReusableCellWithIdentifier:artifactsCellID forIndexPath:indexPath];
+        PBArtifactsInfoModel *infoModel = self.dataList[indexPath.row];
+        cell.artifactsInfoModel = infoModel;
+        __weak typeof(cell) weakCell = cell;
+        cell.saveBlock = ^(BOOL isSave) {
+            if (isSave) {
+                [self.selectList addObject:infoModel];
+            }else {
+                for (PBArtifactsInfoModel *model in self.selectList) {
+                    if ([model.bm_guid isEqualToString:infoModel.bm_guid]) {
+                        [self.selectList removeObject:model];
+                        break;
+                    }
+                }
+            }
+            if (self.selectList.count > 0) {
+                self.bottomV.hidden = NO;
+                self.arrowBtn.hidden = NO;
+                self.selectCountL.hidden = NO;
+                self.determineBtn.hidden = NO;
+                self.selectCountL.text = [NSString stringWithFormat:@"已选择%zd个构件",self.selectList.count];
+                [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+            }else {
+//                self.bottomV.hidden = YES;
+//                self.arrowBtn.hidden = YES;
+//                self.selectCountL.hidden = YES;
+//                self.determineBtn.hidden = YES;
+                self.bottomV.hidden = NO;
+                self.arrowBtn.hidden = NO;
+                self.selectCountL.hidden = NO;
+                self.determineBtn.hidden = NO;
+                self.selectCountL.text = [NSString stringWithFormat:@"已选择%zd个构件",self.selectList.count];
+                [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+            }
+        };
+        return cell;
+    }else {
+        PBStructureTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+        NSDictionary *dict = self.dataList[indexPath.row];
+        PBArtifactsModel *artifactsModel = [PBArtifactsModel yy_modelWithDictionary:dict];
+        cell.artifactsModel = artifactsModel;
+        cell.NextLevelBlock = ^{
+            PBArtifactsViewController *vc = [[PBArtifactsViewController alloc] init];
+            vc.projectModel = self.projectModel;
+            if (self.examineAddModel) {
+                vc.examineAddModel = self.examineAddModel;
+            } else if (self.siteMechanicalModel){
+                vc.siteMechanicalModel = self.siteMechanicalModel;
+            }
+            vc.artifactsModel = artifactsModel;
+            vc.selectList = self.selectList;
+            [self.navigationController pushViewController:vc animated:YES];
+        };
+        return cell;
+    }
+}
+#pragma mark - UITableViewDelegate
+- (void)setArtifactsModel:(PBArtifactsModel *)artifactsModel {
+    _artifactsModel = artifactsModel;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (NSMutableArray *)selectList {
+    if (_selectList == nil) {
+        _selectList = [[NSMutableArray alloc] init];
+    }
+    return _selectList;;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+}
+- (void)setSiteMechanicalModel:(PBSiteMechanicalModel *)siteMechanicalModel {
+    _siteMechanicalModel = siteMechanicalModel;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.h
new file mode 100644
index 0000000..b8e44a5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.h
@@ -0,0 +1,24 @@
+//
+//  PBCheckTaskViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@class PBProjectModel;
+@class PBExamineListModel;
+@interface PBCheckTaskViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, assign) BOOL isAddExamine;
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, strong) NSDictionary *examineListDict;
+@property (nonatomic, strong) NSArray *stateArr;
+@property (nonatomic, strong) NSArray *levelArr;
+@property (nonatomic, strong) NSArray *typeArr;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.m
new file mode 100644
index 0000000..6b0eedc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckTaskViewController.m
@@ -0,0 +1,668 @@
+//
+//  PBCheckTaskViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCheckTaskViewController.h"
+#import "PBExamineAddModel.h"
+#import "PBExamineListModel.h"
+#import "PBExamineInputTableViewCell.h"
+#import "PBEditTimeTableViewCell.h"
+#import "PBListTableViewCell.h"
+#import "PBCheckViewController.h"
+#import "PBRoleModel.h"
+#import "PBEditTextController.h"
+#import "PBEditPersonView.h"
+#import "PBEditTimeView.h"
+#import "PBProjectModel.h"
+#import "PBPersonModel.h"
+#import "PBArtifactsViewController.h"
+#import "PBComponentHierarchyView.h"
+#import "PBTextInputTableViewCell.h"
+#import "PBTopTitleTableViewCell.h"
+#import "PBTimeChooseTableViewCell.h"
+#import "PBPersonChooseTableViewCell.h"
+#import "PBArtifactsListTableViewCell.h"
+#import "MSSAutoresizeLabelFlow.h"
+#import "PBRecordViewController.h"
+#import "PBPersonListViewController.h"
+#import "PBSelectedPersonController.h"
+#import "PBEAddImageView.h"
+#import "PBCheckHeaderView.h"
+#import "PBVideoPlayViewController.h"
+static NSString *const inputCellID = @"InputCellID";
+static NSString *const titleCellID = @"titleCellID";
+static NSString *const timeChooseCellID = @"timeChooseCellID";
+static NSString *const personCellID = @"personCellID";
+static NSString *const listCellID = @"listCellID";
+
+@interface PBCheckTaskViewController ()<UITableViewDelegate, UITableViewDataSource, UIGestureRecognizerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray<PBExamineAddModel *> *dataListM;
+@property (nonatomic, strong) NSDictionary *examinDetailDic;
+@property (nonatomic, strong) PBRoleModel *roleModel;
+@property (nonatomic, assign) BOOL isEdit;
+@property (nonatomic, strong) PBEditPersonView *editPersonView;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;;
+@property (nonatomic, weak) UIButton *typeListBtn;
+@property (nonatomic, strong) NSDictionary *typeDict;
+@property (nonatomic, strong) PBComponentHierarchyView *componentHierarchyView;
+@property (nonatomic, strong) UIView *backgroundView;
+@property (nonatomic, strong) UIView *typeBackView;
+@property (nonatomic, strong) MSSAutoresizeLabelFlow *typeListRecordV;
+@property (nonatomic, assign) BOOL isCheck;
+@property (nonatomic, strong) PBCheckHeaderView *tableheaderView1;
+@end
+
+@implementation PBCheckTaskViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    self.isCheck = NO;
+//    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(updateArtifacts:) name:PBNoteCenterUpdateArtifacts object:nil];
+    [PBNoteCenter addObserver:self selector:@selector(updatePerson:) name:PBNoteCenterUpdatePerson object:nil];
+    [self setupNav];
+    [self loadData];
+    [self loadRelevantData];
+}
+
+- (void)updateArtifacts:(NSNotification *)noti {
+    PBExamineAddModel *examineAddModel = self.dataListM[6];
+    examineAddModel.dataArr = noti.object;
+    NSIndexPath *path = [NSIndexPath indexPathForRow:6 inSection:0];
+    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (void)updatePerson:(NSNotification *)noti {
+    if (self.isCheck) {
+        return;
+    }
+    PBExamineAddModel *examineAddModel = self.dataListM[4];
+    PBPersonModel *originalPersonModel = examineAddModel.personArr[0];
+    examineAddModel.personArr = noti.object;
+    NSIndexPath *path = [NSIndexPath indexPathForRow:4 inSection:0];
+    if (examineAddModel.personArr.count > 0) {
+        PBPersonModel *personModel = examineAddModel.personArr[0];
+        if ([personModel.UserId isEqualToString:originalPersonModel.UserId]) {
+            return;
+        }
+        [self ModifyMissionCheckerWithUserId:personModel.UserId andIndexPath:path andPersonModel:originalPersonModel];
+    }
+}
+- (void)setupNav {
+    self.view.backgroundColor = [UIColor whiteColor];
+    NSString *btnTitle = @"-";
+    if (self.typeArr.count > 0) {
+        self.typeDict = self.typeArr[0];
+        btnTitle = [NSString stringWithFormat:@"%@ ⋁",[self.typeDict valueForKey:@"aedt_name"]];
+    }
+    UIButton *typeListBtn = [[UIButton alloc] init];
+    [typeListBtn setTitle:btnTitle forState:UIControlStateNormal];
+    [typeListBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+    [typeListBtn setTitleColor:PBColor(169, 176, 185) forState:UIControlStateDisabled];
+    [typeListBtn addTarget:self action:@selector(typeListShow) forControlEvents:UIControlEventTouchUpInside];
+    self.typeListBtn = typeListBtn;
+    self.navigationItem.titleView = typeListBtn;
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *stateNavItem = [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:self action:nil];
+    [stateNavItem setImage:[[UIImage imageNamed:@""] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+    [stateNavItem setImageInsets:UIEdgeInsetsMake(0, 20, 0, -20)];
+    self.navigationItem.rightBarButtonItem = stateNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)loadData {
+    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"examineAdd3" ofType:@"plist"];
+    NSArray *list = [NSArray arrayWithContentsOfFile:plistPath];
+    NSMutableArray *listM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < list.count; i++) {
+        NSDictionary *dict = list[i];
+        PBExamineAddModel *model = [PBExamineAddModel yy_modelWithDictionary:dict];
+        model.isAddExamine = YES;
+//        model.isIssueManage = self.isIssueManage;
+       
+        [listM addObject:model];
+    }
+    self.dataListM = listM;
+}
+#pragma mark - 加载检查相关数据
+- (void)loadRelevantData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetItemWithExamineID:self.examineListModel.ExamineID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载详情失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            self.examinDetailDic = networkModel.Data;
+            self.roleModel = [PBRoleModel yy_modelWithDictionary:networkModel.Data];
+            [self collatingDetailedData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)collatingDetailedData {
+    for (PBExamineAddModel *examineAddModel in self.dataListM) {
+        if ([examineAddModel.cellType isEqualToString:@"time"] || [examineAddModel.cellType isEqualToString:@"input"]){
+            NSString *dataStr = [self.examinDetailDic valueForKey:examineAddModel.key];
+            if ([dataStr isKindOfClass:[NSNull class]]) {
+                examineAddModel.dataStr = nil;
+            }else {
+                if ([examineAddModel.cellType isEqualToString:@"time"]) {
+                    NSRange range = [dataStr rangeOfString:@"T"];
+                    dataStr = [dataStr substringToIndex:range.location];
+
+                    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+                    //需要设置为和字符串相同的格式
+                    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+                    NSDate *localDate = [dateFormatter dateFromString:dataStr];
+                    NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
+                    [dateFormat1 setDateFormat:@"yyyy年M月d日"];
+                    NSString *timeStr = [dateFormat1 stringFromDate:localDate];
+                    examineAddModel.dataStr = timeStr;
+                }else {
+                    examineAddModel.dataStr = dataStr;
+                }
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"list"]) {
+            examineAddModel.dataArr = [self.examinDetailDic valueForKey:examineAddModel.key];
+        }else if ([examineAddModel.cellType isEqualToString:@"person"]) {
+            PBPersonModel *personModel = [[PBPersonModel alloc] init];
+            personModel.RealName = [self.examinDetailDic valueForKey:examineAddModel.key];
+            examineAddModel.personArr = @[personModel];
+        }else if ([examineAddModel.cellType isEqualToString:@"choose"]) {
+            NSDictionary *dict = @{@"aedt_name" : [self.examinDetailDic valueForKey:examineAddModel.key], @"aedt_guid" : @""};
+            examineAddModel.dataDict = dict;
+            self.typeDict = dict;
+        }
+    }
+    [self setupUI];
+}
+- (void)setupUI {
+    __weak typeof(self) weakSelf = self;
+    NSString *btnTitle = [NSString stringWithFormat:@"%@ ⋁",[self.typeDict valueForKey:@"aedt_name"]];
+    [self.typeListBtn setTitle:btnTitle forState:UIControlStateNormal];
+    NSString *result = [self.examinDetailDic valueForKey:@"ExamineResult"];
+    NSString *flagStr = [result substringToIndex:1];
+    UIImage *image;
+    if ([flagStr isEqualToString:@"A"]) {
+        image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+        image = [UIImage imageNamed:@"Rectify_ rectification"];
+    }else if ([flagStr isEqualToString:@"C"]) {
+        image = [UIImage imageNamed:@"Rectify_ acceptance"];
+    }else if ([flagStr isEqualToString:@"D"]) {
+        image = [UIImage imageNamed:@"Rectify_ qualified"];
+    }else {
+        image = [UIImage imageNamed:@""];
+    }
+    [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+    self.view.backgroundColor = PBColor(244, 245, 246);
+//    UIView *bgView = [[UIView alloc] init];
+//    bgView.backgroundColor = PBColor(244, 245, 246);
+//    [self.view addSubview:bgView];
+//    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.view).offset(70);
+//        make.left.right.bottom.equalTo(self.view);
+//    }];
+//    __weak typeof(self) weakSelf = self;
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
+    [self.tableView registerClass:[PBTextInputTableViewCell class] forCellReuseIdentifier:inputCellID];
+    [self.tableView registerClass:[PBTopTitleTableViewCell class] forCellReuseIdentifier:titleCellID];
+    [self.tableView registerClass:[PBTimeChooseTableViewCell class] forCellReuseIdentifier:timeChooseCellID];
+    [self.tableView registerClass:[PBPersonChooseTableViewCell class] forCellReuseIdentifier:personCellID];
+    [self.tableView registerClass:[PBArtifactsListTableViewCell class] forCellReuseIdentifier:listCellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    //设置图片 如有有图片 显
+    NSArray *imageArr = [self.examinDetailDic valueForKey:@"imges"];
+    if (imageArr.count > 0) {
+//        self.tableheaderView = [[PBEAddImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 100)];
+////        self.tableheaderView.ChooseImageBlock = ^{
+////            [weakSelf.view endEditing:YES];
+////            [weakSelf takePhotoLibrary];
+////        };
+////        self.tableheaderView.DeleteImageBlock = ^(NSInteger index) {
+////            [weakSelf.selectedPhotos removeObjectAtIndex:index];
+////            [weakSelf.selectAssetArr removeObjectAtIndex:index];
+////            [weakSelf setTableHeaderViewImage];
+////        };
+//
+//        self.tableheaderView.projectModel = self.projectModel;
+//        self.tableheaderView.isAddExamine = NO;
+//        self.tableheaderView.detailsImageArr = imageArr;
+        self.tableheaderView1 = [[PBCheckHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 100)];
+        self.tableheaderView1.PlayVideoUrlBlock = ^(NSString * _Nonnull url) {
+            [weakSelf.view endEditing:YES];
+            NSLog(@"打开视频");
+            PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+            playVC.url = url;
+            [weakSelf.navigationController pushViewController:playVC animated:YES];
+        };
+        self.tableheaderView1.projectModel = self.projectModel;
+        self.tableheaderView1.isAddExamine = NO;
+        self.tableheaderView1.detailsImageArr = imageArr;
+        self.tableView.tableHeaderView = self.tableheaderView1;
+    }
+    
+ 
+    UIButton *recordBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"recording"]];
+    [recordBtn addTarget:self action:@selector(recordAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:recordBtn];
+    [recordBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(15);
+        make.left.equalTo(self.view).offset(20);
+        make.size.mas_equalTo(CGSizeMake(93, 24));
+    }];
+    
+    UIButton *checkBtn = [[UIButton alloc] init];
+    [checkBtn setImage:[UIImage imageNamed:@"inspect_disable"] forState:UIControlStateDisabled];
+    [checkBtn setImage:[UIImage imageNamed:@"inspect"] forState:UIControlStateNormal];
+    [checkBtn addTarget:self action:@selector(checkAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:checkBtn];
+    [checkBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.size.mas_equalTo(CGSizeMake(100, 34));
+    }];
+    if (self.roleModel.User_IsChecker) {
+        checkBtn.enabled = YES;
+    }else {
+        checkBtn.enabled = NO;
+    }
+}
+#pragma mark - 流转记录
+- (void)recordAction {
+    PBRecordViewController *recordVC = [[PBRecordViewController alloc] init];
+    recordVC.examineListModel = self.examineListModel;
+    recordVC.examineDetailDic = self.examinDetailDic;
+    recordVC.projectModel = self.projectModel;
+    recordVC.roleModel = self.roleModel;
+//    recordVC.recordListM = [[self.examinDetailDic valueForKey:@"RecordWithAttachments"] mutableCopy];
+    [self.navigationController pushViewController:recordVC animated:YES];
+}
+#pragma mark - 检查方法
+- (void)checkAction {
+    self.isCheck = YES;
+    PBCheckViewController *checkVC = [[PBCheckViewController alloc] init];
+    checkVC.examineListModel = self.examineListModel;
+    checkVC.projectModel = self.projectModel;
+    checkVC.levelArr = self.levelArr;
+    checkVC.stateArr = self.stateArr;
+//    checkVC.CkeckCompleteBlock = ^{
+//        [self.navigationController popViewControllerAnimated:NO];
+//    };
+    [self.navigationController pushViewController:checkVC animated:YES];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 8;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    __weak typeof(self) weakSelf = self;
+    if (indexPath.row == 0) {
+        PBTextInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inputCellID forIndexPath:indexPath];
+                PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        NSString *originalStr = examineAddModel.dataStr;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        cell.endEditBlock = ^(NSString * _Nonnull text) {
+            if ([text isEqualToString:originalStr]) {
+                return;
+            }
+            NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+            [dictM setValue:text forKey:@"Title"];
+            [dictM setValue:@"1" forKey:@"modify_flag"];
+            [self ModifyMissionInfoWithData:dictM andIndexPath:indexPath andOriginalData:originalStr];
+        };
+        return cell;
+    } else if (indexPath.row == 1 || indexPath.row == 5) {
+        PBTopTitleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:titleCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 2 || indexPath.row == 3) {
+        PBTimeChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:timeChooseCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        NSString *originalStr = examineAddModel.dataStr;
+//        cell.ChooseBlock = ^{
+//            [self.view endEditing:YES];
+//            [PBKeyWindow addSubview:self.editTimeView];
+//            self.editTimeView.examineAddModel = self.dataListM[indexPath.row];
+//            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected){
+//                if (isSelsected) {
+//                    if ([examineAddModel.dataStr isEqualToString:originalStr]) {
+//                        return;
+//                    }
+//                    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+//                    if (indexPath.row == 2) {
+//                        [dictM setValue:examineAddModel.dataStr forKey:@"BeginTimeStr"];
+//                    }else {
+//                        [dictM setValue:examineAddModel.dataStr forKey:@"EndTimeStr"];
+//                    }
+//                    [dictM setValue:@"2" forKey:@"modify_flag"];
+//                    [weakSelf ModifyMissionInfoWithData:dictM andIndexPath:indexPath andOriginalData:originalStr];
+//                }
+//            };
+//            [self.editTimeView show];
+//        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 4) {
+        PBPersonChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+//        cell.ChooseBlock = ^{
+//            [self.view endEditing:YES];
+//            PBPersonListViewController *personListVC = [[PBPersonListViewController alloc] init];
+//            personListVC.projectModel = self.projectModel;
+//            personListVC.isMultiSelect = NO;
+//            personListVC.selectList = examineAddModel.personArr.mutableCopy;
+//            [self.navigationController pushViewController:personListVC animated:YES];
+//        };
+        cell.LookAllBlock = ^{
+            PBSelectedPersonController *selectedPersonVC = [[PBSelectedPersonController alloc] init];
+            selectedPersonVC.selectList = examineAddModel.personArr.mutableCopy;
+            [self.navigationController pushViewController:selectedPersonVC animated:YES];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 6 || indexPath.row == 7) {
+        PBArtifactsListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:listCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        cell.ChooseBlock = ^{
+            [self.view endEditing:YES];
+            if (indexPath.row == 6 || indexPath.row == 7) {
+                return;
+            }
+            PBArtifactsViewController *artifactsVC = [[PBArtifactsViewController alloc] init];
+            artifactsVC.examineAddModel = examineAddModel;
+            artifactsVC.projectModel = self.projectModel;
+            [self.navigationController pushViewController:artifactsVC animated:YES];
+        };
+        if (indexPath.row == 6) {
+            [self.view endEditing:YES];
+            cell.ToViewBlock = ^(NSInteger index) {
+                NSLog(@"查看模型========");
+                NSDictionary *dict = examineAddModel.dataArr[index];
+                [self getCategoryArrayByBmGuidWithGuid:[dict valueForKey:@"bm_guid"]];
+            };
+        }
+        return cell;
+    }else {
+        return nil;
+    }
+}
+
+- (void)getCategoryArrayByBmGuidWithGuid:(NSString *)guid {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetCategoryArrayByBmGuidWithGuid:guid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [PBKeyWindow addSubview:self.componentHierarchyView];
+            self.componentHierarchyView.dataArr = networkModel.Data;
+            [self.componentHierarchyView show];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+        
+    }];
+}
+- (void)ModifyMissionInfoWithData:(NSMutableDictionary *)dictM andIndexPath:(NSIndexPath *)indexPath andOriginalData:(NSString *)data {
+    [dictM setValue:self.examineListModel.ExamineID forKey:@"ExamineID"];
+    [dictM setValue:self.projectModel.organizeid forKey:@"OrganizeId"];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] ModifyMissionInfoWithDictM:dictM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"保存失败" inView:self.view];
+            NSLog(@"%@",error);
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD showMessage:@"修改成功" inView:self.view];
+            if (indexPath) {
+                [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+            }else {
+                PBExamineAddModel *examineAddModel = self.dataListM[8];
+                self.typeDict = examineAddModel.dataDict;
+                NSString *btnTitle = [NSString stringWithFormat:@"%@ ⋁",[self.typeDict valueForKey:@"aedt_name"]];
+                [self.typeListBtn setTitle:btnTitle forState:UIControlStateNormal];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            if (indexPath.row == 0 || indexPath.row == 2 || indexPath.row == 3) {
+                PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+                examineAddModel.dataStr = data;
+                [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+            }
+        }
+    }];
+}
+- (void)ModifyMissionCheckerWithUserId:(NSString *)userId andIndexPath:(NSIndexPath *)indexPath andPersonModel:(PBPersonModel *)personModel {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] ModifyMissionCheckerWithExamineID:self.examineListModel.ExamineID andOrganizeId:self.projectModel.organizeid andCheckerUserId:userId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"保存失败" inView:self.view];
+            NSLog(@"%@",error);
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD showMessage:@"修改成功" inView:self.view];
+            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+            examineAddModel.personArr = @[personModel];
+        }
+    }];
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setIsAddExamine:(BOOL)isAddExamine {
+    _isAddExamine = isAddExamine;
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+    if ([examineListModel.ExaminerID isEqualToString:UserID]) {
+        self.isEdit = YES;
+    }else {
+        self.isEdit = NO;
+    }
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+- (PBEditPersonView *)editPersonView {
+    if (_editPersonView == nil) {
+        _editPersonView = [[PBEditPersonView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editPersonView.isChooseOne = YES;
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _editPersonView.visualViewHeight = 468.f + bottomH;
+        _editPersonView.isExamineChoose = YES;
+    }
+    return _editPersonView;
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+
+- (void)setStateArr:(NSArray *)stateArr {
+    _stateArr = stateArr;
+}
+- (void)setLevelArr:(NSArray *)levelArr {
+    _levelArr = levelArr;
+}
+- (void)setTypeArr:(NSArray *)typeArr {
+    _typeArr = typeArr;
+}
+- (PBComponentHierarchyView *)componentHierarchyView {
+    if (_componentHierarchyView == nil) {
+        _componentHierarchyView = [[PBComponentHierarchyView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _componentHierarchyView.visualViewHeight = 214.f + bottomH;
+    }
+    return _componentHierarchyView;
+}
+- (void)backTapped:(UITapGestureRecognizer *)sender {
+    [self hideDropDown];
+}
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+//    if ([NSStringFromClass([touch.view class]) isEqualToString:@"MSSAutoresizeLabelFlow"]) {
+//        return NO;
+//    } else {
+//        return YES;
+//    }
+    if (touch.view == self.backgroundView) {
+        return YES;
+    } else {
+        return NO;
+    }
+}
+- (void)typeListShow {
+    if (self.typeArr.count <=  0) {
+        [YJProgressHUD showMessage:@"没有类型相关数据" inView:self.view];
+        return;
+    }
+    [self.view addSubview:self.backgroundView];
+    [self.backgroundView addSubview:self.typeBackView];
+    [self.typeBackView circleViewWithRadius:6];
+    [self.typeBackView addSubview:self.typeListRecordV];
+    [UIView animateWithDuration:0.5 animations:^{
+        self.typeBackView.frame = CGRectMake(0, 0, PBScreenWidth, 176);
+        self.backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.3];
+    }completion:^(BOOL finished) {
+//        self->_isShow = YES;
+        
+    }];
+    self.typeListBtn.enabled = NO;
+    self.navigationItem.leftBarButtonItem.enabled = NO;
+}
+- (void)hideDropDown{
+    [UIView animateWithDuration:0.5 animations:^{
+        self.typeBackView.frame = CGRectMake(0, -176, PBScreenWidth, 176);
+        self.backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
+    }completion:^(BOOL finished) {
+        [self.backgroundView removeFromSuperview];
+        [self.typeBackView removeFromSuperview];
+        [self.typeListRecordV removeFromSuperview];
+//        self->_isShow = NO;
+    }];
+    self.typeListBtn.enabled = YES;
+    self.navigationItem.leftBarButtonItem.enabled = YES;
+}
+- (UIView *)backgroundView {
+    if (_backgroundView == nil) {
+        _backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0 , 0, PBScreenWidth, self.view.height)];
+        _backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
+        [_backgroundView setOpaque:NO];
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backTapped:)];
+        tap.delegate = self;
+        [_backgroundView addGestureRecognizer:tap];
+    }
+    return _backgroundView;
+}
+- (MSSAutoresizeLabelFlow *)typeListRecordV {
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < self.typeArr.count; i++) {
+        NSString *str = [self.typeArr[i] valueForKey:@"aedt_name"];
+        [arrM addObject:str];
+    }
+    NSArray *array = arrM.copy;
+    if (_typeListRecordV == nil) {
+        _typeListRecordV = [[MSSAutoresizeLabelFlow alloc] initWithFrame:CGRectMake(0, 25, PBScreenWidth, 126) titles:array selectedHandler:^(NSUInteger index, NSString *title) {
+            __weak typeof(self) weakSelf = self;
+            NSDictionary *typeDic = self.typeArr[index];
+            NSString *guidStr = [typeDic valueForKey:@"aedt_guid"];
+            NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+            [dictM setValue:guidStr forKey:@"aedt_guid"];
+            [dictM setValue:@"3" forKey:@"modify_flag"];
+            PBExamineAddModel *examineAddModel = self.dataListM[8];
+            examineAddModel.dataDict = typeDic;
+            [weakSelf ModifyMissionInfoWithData:dictM andIndexPath:nil andOriginalData:nil];
+            [self hideDropDown];
+        }];
+    }
+    return _typeListRecordV;
+}
+- (UIView *)typeBackView {
+    if (_typeBackView == nil) {
+        _typeBackView = [[UIView alloc] initWithFrame:CGRectMake(0, -176, PBScreenWidth, 176)];
+        _typeBackView.backgroundColor = [UIColor whiteColor];
+    }
+    return _typeBackView;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.h
new file mode 100644
index 0000000..a443c20
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBCheckViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCheckViewController : UIViewController
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *stateArr;
+@property (nonatomic, strong) NSArray *levelArr;
+@property (nonatomic, copy) void(^CkeckCompleteBlock)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.m
new file mode 100644
index 0000000..8b25faa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBCheckViewController.m
@@ -0,0 +1,578 @@
+//
+//  PBCheckViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCheckViewController.h"
+#import "PBExamineListModel.h"
+#import "PBExamineAddModel.h"
+#import "PBExamineInputTableViewCell.h"
+#import "PBTwoChooseTableViewCell.h"
+#import "PBPersonTableViewCell.h"
+#import "PBEditPersonView.h"
+#import "PBProjectModel.h"
+#import "PBEditTextController.h"
+#import "PBTwoChooseView.h"
+//#import "PBExamineTableHeaderView.h"
+#import "PBPersonModel.h"
+#import "PBTextInputTableViewCell.h"
+#import "PBTopTitleTableViewCell.h"
+#import "PBRadioTableViewCell.h"
+#import "PBPersonChooseTableViewCell.h"
+#import "PBInstructionsTableViewCell.h"
+#import "PBStatusTableViewCell.h"
+#import "PBCheckHeaderView.h"
+#import "PBPersonListViewController.h"
+#import "PBSelectedPersonController.h"
+#import "LXFCameraController.h"
+#import "PBVideoPlayViewController.h"
+#import "PBExamineListViewController.h"
+static NSString *const inputCellID = @"InputCellID";
+static NSString *const titleCellID = @"titleCellID";
+static NSString *const radioCellID = @"radioCellID";
+static NSString *const statusCellID = @"statusCellID";
+static NSString *const personCellID = @"personCellID";
+static NSString *const instructionsCellID = @"instructionsCellID";
+
+@interface PBCheckViewController ()<UITableViewDelegate, UITableViewDataSource, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray<PBExamineAddModel *> *dataListM;
+@property (nonatomic, strong) PBEditPersonView *editPersonView;
+@property (nonatomic, strong) PBTwoChooseView *twoChooseView;
+@property (nonatomic, strong) PBCheckHeaderView *tableheaderView;
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, strong) NSMutableArray *selectedVideo;
+@property (nonatomic, assign) BOOL isQualified;
+@property (nonatomic, strong) NSMutableArray *selectAssetArr;
+@property (nonatomic, assign) NSInteger personIndex;
+@end
+
+@implementation PBCheckViewController
+//- (void)viewWillAppear:(BOOL)animated {
+//    [super viewWillAppear:animated];
+//    [self.navigationController setNavigationBarHidden:YES animated:animated];
+//}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(updatePerson:) name:PBNoteCenterUpdatePerson object:nil];
+    [self setupNav];
+    [self loadData];
+    [self setupUI];
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+- (void)updatePerson:(NSNotification *)noti {
+    PBExamineAddModel *examineAddModel = self.dataListM[self.personIndex];
+    examineAddModel.personArr = noti.object;
+    NSIndexPath *path = [NSIndexPath indexPathForRow:self.personIndex inSection:0];
+    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+//    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (void)setupNav {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+//    UIView *topV = [[UIView alloc] init];
+//    topV.backgroundColor = [UIColor whiteColor];
+//    [self.view addSubview:topV];
+//    [topV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.left.right.equalTo(self.view);
+//        make.height.equalTo(@50);
+//    }];
+//    UIButton *cancelBtn = [UIButton z_textButton:@"取消" fontSize:16 normalColor:PBColor(97, 111, 125)];
+//    [cancelBtn addTarget:self action:@selector(cancelAction) forControlEvents:UIControlEventTouchUpInside];
+//    [self.view addSubview:cancelBtn];
+//    [cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.view).offset(16);
+//        make.left.equalTo(self.view).offset(20);
+//        make.size.mas_equalTo(CGSizeMake(34, 18));
+//    }];
+//    UILabel *titleL = [UILabel z_labelWithText:@"检查" Color:PBColor(97, 111, 125) isBold:YES Font:16];
+//    [self.view addSubview:titleL];
+//    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.view).offset(16);
+//        make.size.mas_equalTo(CGSizeMake(34, 18));
+//        make.centerX.equalTo(self.view);
+//    }];
+//    UIView *linV = [[UIView alloc] init];
+//    linV.backgroundColor = PBColor(233, 235, 237);
+//    [self.view addSubview:linV];
+//    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(topV.mas_bottom);
+//        make.left.right.equalTo(self.view);
+//        make.height.equalTo(@1);
+//    }];
+    self.title = @"检查";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+//- (void)cancelAction {
+//    [self dismissViewControllerAnimated:YES completion:nil];
+//}
+- (void)loadData {
+    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"examineAdd4" ofType:@"plist"];
+    NSArray *list = [NSArray arrayWithContentsOfFile:plistPath];
+    NSMutableArray *listM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < list.count; i++) {
+        NSDictionary *dict = list[i];
+        PBExamineAddModel *model = [PBExamineAddModel yy_modelWithDictionary:dict];
+        model.isAddExamine = YES;
+//        model.isIssueManage = self.isIssueManage;
+        [listM addObject:model];
+    }
+    self.dataListM = listM;
+}
+- (void)setupUI {
+    __weak typeof(self) weakSelf = self;
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.bounces = NO;
+    self.tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
+    [self.tableView registerClass:[PBTextInputTableViewCell class] forCellReuseIdentifier:inputCellID];
+    [self.tableView registerClass:[PBTopTitleTableViewCell class] forCellReuseIdentifier:titleCellID];
+    [self.tableView registerClass:[PBRadioTableViewCell class] forCellReuseIdentifier:radioCellID];
+    [self.tableView registerClass:[PBStatusTableViewCell class] forCellReuseIdentifier:statusCellID];
+    [self.tableView registerClass:[PBPersonChooseTableViewCell class] forCellReuseIdentifier:personCellID];
+    [self.tableView registerClass:[PBInstructionsTableViewCell class] forCellReuseIdentifier:instructionsCellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    UIButton *checkBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"publish_check"]];
+    [checkBtn addTarget:self action:@selector(checkAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:checkBtn];
+    [checkBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@50);
+    }];
+    
+    self.tableheaderView = [[PBCheckHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 100)];
+    self.tableheaderView.ChooseImageBlock = ^{
+        [weakSelf.view endEditing:YES];
+        [weakSelf chooseImageOrVideo];
+    };
+    self.tableheaderView.DeleteImageBlock = ^(NSInteger index) {
+        [weakSelf.selectedPhotos removeObjectAtIndex:index];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView.DeleteVideoBlock = ^{
+        [weakSelf.selectedVideo removeAllObjects];
+        [weakSelf setTableHeaderViewImage];
+    };
+    self.tableheaderView.PlayVideoBlock = ^{
+        [weakSelf.view endEditing:YES];
+        NSLog(@"打开视频");
+        PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+        PBResultVideo *result = weakSelf.selectedVideo[0];
+        playVC.filePath = result.url;
+        [weakSelf.navigationController pushViewController:playVC animated:YES];
+//        PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+//        playVC.url = videoUrl;
+//        [self.navigationController pushViewController:playVC animated:YES];
+    };
+    self.tableheaderView.projectModel = self.projectModel;
+    self.tableheaderView.isAddExamine = YES;
+    self.tableView.tableHeaderView = self.tableheaderView;
+}
+
+- (void)chooseImageOrVideo {
+    if (self.selectedPhotos.count > 0) {
+        [self takePhotoLibrary];
+        return;;
+    }
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:@"请选择" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *videoAction  = [UIAlertAction actionWithTitle:@"拍摄" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self videoBtnFunc];
+    }];
+    UIAlertAction *imageAction  = [UIAlertAction actionWithTitle:@"从手机相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self takePhotoLibrary];
+    }];
+    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:videoAction];
+    [alertVC addAction:imageAction];
+    [alertVC addAction:cancelAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+- (void)videoBtnFunc {
+    LXFCameraController *cameraController = [LXFCameraController defaultCameraController];
+    
+    __weak LXFCameraController *weakCameraController = cameraController;
+    
+    cameraController.takePhotosCompletionBlock = ^(UIImage *image, NSError *error) {
+        NSLog(@"takePhotosCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        NSData *imageData = UIImageJPEGRepresentation(image, 0.5);
+        UIImage *originalImage = [UIImage imageWithData:imageData];
+        [self.selectedPhotos addObject:originalImage];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.shootCompletionBlock = ^(NSURL *videoUrl, CGFloat videoTimeLength, UIImage *thumbnailImage, NSError *error) {
+        NSLog(@"shootCompletionBlock");
+        [weakCameraController dismissViewControllerAnimated:YES completion:nil];
+        PBResultVideo *video = [[PBResultVideo alloc] init];
+        video.coverImage = thumbnailImage;
+        video.url = videoUrl;
+        video.data = [NSData dataWithContentsOfURL:videoUrl];
+        [self.selectedVideo addObject:video];
+        [self setTableHeaderViewImage];
+    };
+    
+    cameraController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:cameraController animated:YES completion:nil];
+}
+
+//新增图片选择图片后填充
+- (void)setTableHeaderViewImage {
+    if (self.selectedVideo.count > 0) {
+        self.tableheaderView.videoArr = self.selectedVideo;
+    }else {
+        self.tableheaderView.imageArr = self.selectedPhotos;
+    }
+}
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+
+- (void)pushLFImagePickerController {
+    NSInteger maxImageCount = 9 - self.selectedPhotos.count;
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:maxImageCount delegate:self];
+    imagePicker.maxVideosCount = 1;
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    if (self.selectedPhotos.count > 0) {
+        imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    }else {
+        imagePicker.allowPickingType = LFPickingMediaTypeALL;//用户是否可以选择视频
+    }
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+//    imagePicker.selectedAssets = self.selectAssetArr.copy;
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+#pragma mark - LFImagePickerControllerDelegate
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+//    NSMutableArray *assetArr = [[NSMutableArray alloc] init];
+    NSMutableArray *videoArr = [[NSMutableArray alloc] init];
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            [imageArrM addObject:originalImage];
+        }else {
+            LFResultVideo *resultVideo = (LFResultVideo *)result;
+            PBResultVideo *video = [[PBResultVideo alloc] init];
+            video.coverImage = resultVideo.coverImage;
+            video.url = resultVideo.url;
+            video.data = resultVideo.data;
+            [videoArr addObject:video];
+        }
+    }
+    if (videoArr.count > 0) {
+        self.selectedVideo = videoArr;
+        [self.selectedPhotos removeAllObjects];
+    }else {
+        [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
+    }
+//    self.selectAssetArr = assetArr;
+    [self setTableHeaderViewImage];
+}
+
+#pragma mark - 检查方法
+- (void)checkAction {
+    [self.view endEditing:YES];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    for (PBExamineAddModel *examineAddModel in self.dataListM) {
+        if ([examineAddModel.cellType isEqualToString:@"input"]) {
+            if ([examineAddModel.dataStr isEqualToString:@""] || examineAddModel.dataStr == nil) {
+                [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+                return;
+            }
+            [dictM setObject:examineAddModel.dataStr forKey:examineAddModel.key];
+        }else if ([examineAddModel.cellType isEqualToString:@"choose"]){
+            if ([examineAddModel.dataStr isEqualToString:@""] || examineAddModel.dataStr == nil) {
+                [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+                return;
+            }
+            if ([examineAddModel.key isEqualToString:@"aede_severitylevel"]) {
+                if ([examineAddModel.dataStr isEqualToString:statuChoosequalified]) {
+                    examineAddModel.dataStr = @"";
+                }
+                [dictM setObject:examineAddModel.dataStr forKey:examineAddModel.key];
+            }else {
+                NSString *chooseValue;
+                if ([examineAddModel.dataStr isEqualToString:@"已合格"]) {
+                    chooseValue = @"1";
+                    self.isQualified = YES;
+                }else {
+                    chooseValue = @"0";
+                }
+                [dictM setObject:chooseValue forKey:examineAddModel.key];
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"person"]) {
+            if (self.isQualified) {
+                [dictM setObject:@"" forKey:examineAddModel.key];
+            }else {
+                NSMutableString *userIdStrM = [[NSMutableString alloc] init];
+                for (PBPersonModel *obj in examineAddModel.personArr) {
+                    [userIdStrM appendString:[NSString stringWithFormat:@"%@,",obj.UserId]];
+                }
+                if (userIdStrM.length == 0) {
+                    if([examineAddModel.key isEqualToString:@"RelationMemberID"]) {
+                        [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+                        return;
+                    }else {
+                        [dictM setObject:@"" forKey:examineAddModel.key];
+                    }
+                }else {
+                    [dictM setObject:userIdStrM.copy forKey:examineAddModel.key];
+                }
+            }
+        }
+    }
+    NSMutableArray *arrM;
+    if (self.selectedVideo.count > 0) {
+        arrM = self.selectedVideo;
+    }else {
+        arrM = self.selectedPhotos;
+    }
+    [[PBNetworkTools sharedTools] checkMissionWithExamineID:self.examineListModel.ExamineID andOrganizeId:self.projectModel.organizeid andData:dictM andImageArr:arrM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+//            if (self.CkeckCompleteBlock) {
+//                self.CkeckCompleteBlock();
+//            }
+            [self backAction];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBExamineListViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 9;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+//    __weak typeof(self) weakSelf = self;
+    if (indexPath.row == 0) {
+        PBTextInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inputCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 1 || indexPath.row == 3 || indexPath.row == 5) {
+        PBTopTitleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:titleCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 6) {
+        PBInstructionsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:instructionsCellID forIndexPath:indexPath];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 2) {
+        PBRadioTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:radioCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 4) {
+        PBStatusTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:statusCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.statusChange = ^(NSString * _Nonnull statu) {
+            NSInteger severityLevelIndex = 2;
+            PBExamineAddModel *levelExamineAddModel = self.dataListM[severityLevelIndex];
+            if ([statu isEqualToString:@"已合格"]) {
+                levelExamineAddModel.dataStr = statuChoosequalified;
+            }else {
+                levelExamineAddModel.dataStr = @"";
+            }
+            NSIndexPath *path = [NSIndexPath indexPathForRow:severityLevelIndex inSection:0];
+            [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:(UITableViewRowAnimationFade)];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 7) {
+        PBPersonChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.ChooseBlock = ^{
+              [self.view endEditing:YES];
+              self.personIndex = indexPath.row;
+              PBPersonListViewController *personListVC = [[PBPersonListViewController alloc] init];
+              personListVC.projectModel = self.projectModel;
+              if (indexPath.row == 7) {
+                  personListVC.isMultiSelect = YES;
+              }else {
+                  personListVC.isMultiSelect = NO;
+              }
+              personListVC.selectList = examineAddModel.personArr.mutableCopy;
+              [self.navigationController pushViewController:personListVC animated:YES];
+          };
+          cell.LookAllBlock = ^{
+              PBSelectedPersonController *selectedPersonVC = [[PBSelectedPersonController alloc] init];
+              selectedPersonVC.selectList = examineAddModel.personArr.mutableCopy;
+              [self.navigationController pushViewController:selectedPersonVC animated:YES];
+          };
+          cell.selectionStyle = UITableViewCellSelectionStyleNone;
+          return cell;
+    }else if (indexPath.row == 8) {
+        PBPersonChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.ChooseBlock = ^{
+              [self.view endEditing:YES];
+              self.personIndex = indexPath.row;
+              PBPersonListViewController *personListVC = [[PBPersonListViewController alloc] init];
+              personListVC.projectModel = self.projectModel;
+              if (indexPath.row == 7) {
+                  personListVC.isMultiSelect = YES;
+              }else {
+                  personListVC.isMultiSelect = NO;
+              }
+              personListVC.selectList = examineAddModel.personArr.mutableCopy;
+              [self.navigationController pushViewController:personListVC animated:YES];
+          };
+          cell.LookAllBlock = ^{
+              PBSelectedPersonController *selectedPersonVC = [[PBSelectedPersonController alloc] init];
+              selectedPersonVC.selectList = examineAddModel.personArr.mutableCopy;
+              [self.navigationController pushViewController:selectedPersonVC animated:YES];
+          };
+          cell.selectionStyle = UITableViewCellSelectionStyleNone;
+          return cell;
+    }else {
+        return nil;
+    }
+}
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+}
+- (void)setStateArr:(NSArray *)stateArr {
+    _stateArr = stateArr;
+}
+- (void)setLevelArr:(NSArray *)levelArr {
+    _levelArr = levelArr;
+}
+
+- (NSMutableArray *)selectedPhotos {
+    if (_selectedPhotos == nil) {
+        _selectedPhotos = [[NSMutableArray alloc] init];
+    }
+    return _selectedPhotos;
+}
+- (NSMutableArray *)selectedVideo {
+    if (_selectedVideo == nil) {
+        _selectedVideo = [[NSMutableArray alloc] init];
+    }
+    return _selectedVideo;
+}
+
+- (PBEditPersonView *)editPersonView {
+    if (_editPersonView == nil) {
+        _editPersonView = [[PBEditPersonView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _editPersonView.visualViewHeight = 468.f + bottomH;
+        _editPersonView.isExamineChoose = YES;
+    }
+    return _editPersonView;
+}
+- (PBTwoChooseView *)twoChooseView {
+    if (_twoChooseView == nil) {
+        _twoChooseView = [[PBTwoChooseView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _twoChooseView.visualViewHeight = 468.f;
+//        _twoChooseView.unitDict = self.engineeringArr;
+    }
+    return _twoChooseView;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.h
new file mode 100644
index 0000000..561fc60
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.h
@@ -0,0 +1,15 @@
+//
+//  PBChooseModelViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/17.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBModelListViewController.h"
+@class PBExamineAddModel;
+@interface PBChooseModelViewController : PBModelListViewController
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.m
new file mode 100644
index 0000000..f9cbec2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBChooseModelViewController.m
@@ -0,0 +1,62 @@
+//
+//  PBChooseModelViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/17.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBChooseModelViewController.h"
+#import "PBModelsModel.h"
+#import "PBPositioningTypeViewController.h"
+#import "PBExamineAddModel.h"
+
+@interface PBChooseModelViewController ()
+
+@end
+
+@implementation PBChooseModelViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+}
+
+- (void)setupNav {
+    self.title = @"模型选择";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBModelsModel *modelsModel = self.modelsArrM[indexPath.row];
+    PBPositioningTypeViewController *positioningTypeVC = [[PBPositioningTypeViewController alloc] init];
+    positioningTypeVC.projectModel = self.projectModel;
+    positioningTypeVC.modelsModel = modelsModel;
+    positioningTypeVC.examineAddModel = self.examineAddModel;
+    [self.navigationController pushViewController:positioningTypeVC animated:YES];
+}
+
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    return NO;
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.h
new file mode 100644
index 0000000..366ebfe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.h
@@ -0,0 +1,14 @@
+//
+//  PBDivisionViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/20.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBDivisionViewController : UIViewController
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSArray<PBExamineAddModel *> *examineArr;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.m
new file mode 100644
index 0000000..617fcf8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBDivisionViewController.m
@@ -0,0 +1,136 @@
+//
+//  PBDivisionViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/20.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBDivisionViewController.h"
+#import "PBItemizedViewController.h"
+#import "PBExamineAddModel.h"
+static NSString *const cellID = @"cellID";
+@interface PBDivisionViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@end
+
+@implementation PBDivisionViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.title = @"分部工程";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"请选择分部工程" Color:DescColor isBold:NO Font:12];
+    titleL.backgroundColor = PBColor(242, 242, 242);
+    [self.view addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.equalTo(self.view);
+        make.left.equalTo(self.view).offset(16);
+        make.height.equalTo(@24);
+    }];
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 42;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(24);
+        make.right.bottom.equalTo(self.view);
+        make.left.equalTo(self.view).offset(16);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _dataList.count + 1;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    if (indexPath.row == 0) {
+        cell.textLabel.text = @"无分部工程";
+    }else {
+        NSDictionary *dict = self.dataList[indexPath.row - 1];
+        cell.textLabel.text = [dict valueForKey:@"name"];
+    }
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == 0) {
+        [self setupData];
+        [PBNoteCenter postNotificationName:PBNoteCenterUpdateDivision object:nil];
+        [self.navigationController popToRootViewControllerAnimated:YES];
+    }else {
+        PBItemizedViewController *itemizedVC = [[PBItemizedViewController alloc] init];
+        NSArray *arr = [self.dataList[indexPath.row - 1] valueForKey:@"children"];
+        for (NSDictionary *dict in arr) {
+            NSString *title = [dict valueForKey:@"title"];
+            if ([title isEqualToString:@"分项工程"]) {
+                itemizedVC.dataList = [dict valueForKey:@"items"];
+            }
+        }
+        itemizedVC.divisionDict = self.dataList[indexPath.row - 1];
+        itemizedVC.examineArr = self.examineArr;
+        [self.navigationController pushViewController:itemizedVC animated:YES];
+    }
+}
+- (void)setupData {
+    NSDictionary *dict = @{
+                           @"name" : @"<无分部工程>",
+                           @"value" : @"",
+                           @"children" : @[]
+                           };
+    
+    NSDictionary *dict1 = @{
+                           @"name" : @"<无分项工程>",
+                           @"value" : @"",
+                           @"children" : @[]
+                           };
+    NSDictionary *dict2 = @{
+                           @"name" : @"<无检验批>",
+                           @"value" : @"",
+                           @"children" : @[]
+                           };
+    self.examineArr[0].dataDict = dict;
+    self.examineArr[1].dataDict = dict1;
+    self.examineArr[2].dataDict = dict2;
+    
+}
+
+- (void)setDataList:(NSArray *)dataList {
+    _dataList = dataList;
+}
+- (void)setExamineArr:(NSArray<PBExamineAddModel *> *)examineArr {
+    _examineArr = examineArr;
+}
+
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.h
new file mode 100644
index 0000000..bb70bc3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.h
@@ -0,0 +1,19 @@
+//
+//  PBEDrawingsShowController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/18.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBDrawingsShowController.h"
+@class PBDrawingsModel;
+@class PBModelsModel;
+@class PBExamineAddModel;
+@interface PBEDrawingsShowController : UIViewController
+@property (nonatomic, strong) PBDrawingsModel *drawingsModel;
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.m
new file mode 100644
index 0000000..89c4195
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEDrawingsShowController.m
@@ -0,0 +1,220 @@
+//
+//  PBEDrawingsShowController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/18.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBEDrawingsShowController.h"
+#import "PBDrawingsModel.h"
+#import "PBModelsModel.h"
+#import "PBDrawingsInfoModel.h"
+#import "PBExamineAddModel.h"
+#import "PBDrawingposModel.h"
+
+#define positionImageVW 30
+#define positionImageVH 30
+@interface PBEDrawingsShowController ()<UIScrollViewDelegate>
+@property (nonatomic,strong) UIScrollView *scrollView;
+@property (nonatomic, strong) UIImageView *imageV;
+@property (nonatomic, strong) UIImage *image;
+@property (nonatomic, strong) UIView *redView;
+@property (nonatomic, strong) UIImageView *positionImageV;
+@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;
+@end
+
+@implementation PBEDrawingsShowController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setNav];
+    [self setupUI];
+}
+
+- (void)setNav {
+    self.view.backgroundColor = [UIColor whiteColor];
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"图纸";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *saveItem = [[UIBarButtonItem alloc] initWithTitle:@"确认" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveItem;
+    self.navigationItem.rightBarButtonItem.enabled = NO;
+}
+
+- (void)backNavAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+#pragma mark - 保存接口
+- (void)saveAction {
+    CGPoint point = self.redView.origin;
+    NSInteger X = point.x;
+    NSInteger Y = point.y;
+//    NSLog(@"%zd- %zd",X,Y);
+    NSInteger imageW = CGImageGetWidth(self.image.CGImage);
+    NSInteger imageH = CGImageGetHeight(self.image.CGImage);
+    
+    //新建
+    PBDrawingposModel *drawingposModel = [[PBDrawingposModel alloc] init];
+    drawingposModel.FileId = self.drawingsInfoModel.ID;
+    drawingposModel.PosX = [NSString stringWithFormat:@"%zd",X];
+    drawingposModel.PosY = [NSString stringWithFormat:@"%zd",Y];
+    drawingposModel.OpId = UserID;
+    drawingposModel.OpUser = Realname;
+    NSDate *currentDate = [NSDate date];
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm"];
+    NSString *dateString = [dateFormatter stringFromDate:currentDate];
+    drawingposModel.CreateDate = dateString;
+    drawingposModel.X = [_drawingsInfoModel.leftptm valueForKey:@"X"];
+    drawingposModel.Y = [_drawingsInfoModel.leftptm valueForKey:@"Y"];
+    drawingposModel.Z = [_drawingsInfoModel.leftptm valueForKey:@"Z"];
+    drawingposModel.Pixel2MX = _drawingsInfoModel.pixel2mx;
+    drawingposModel.Pixel2MY = _drawingsInfoModel.pixel2my;
+    drawingposModel.Width = [NSString stringWithFormat:@"%zd",imageW];
+    drawingposModel.Height = [NSString stringWithFormat:@"%zd",imageH];
+    drawingposModel.IsDel = @"0";
+    self.examineAddModel.viewPointModel = nil;
+    self.examineAddModel.modelsModel = self.modelsModel;
+    self.examineAddModel.drawingsInfoModel = self.drawingsInfoModel;
+    self.examineAddModel.drawingposModel = drawingposModel;
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdatePositioning object:nil];
+    [self.navigationController popToRootViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.scrollView = [[UIScrollView alloc] init];
+    self.scrollView.delegate = self;
+    [self.view addSubview:self.scrollView];
+    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+    }];
+    
+    self.imageV = [[UIImageView alloc] init];
+    self.imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.scrollView addSubview:self.imageV];
+    [self.imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.scrollView);
+    }];
+    
+    [self.imageV addSubview:self.redView];
+    [self.view addSubview:self.positionImageV];
+    self.redView.hidden = YES;
+    self.positionImageV.hidden = YES;
+}
+
+- (void)loadDrawingsInfo {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetFIleWithProjectID:_modelsModel.ProjectID andModelID:_modelsModel.ID andVersionNO:@"" andFileType:@"PlanView" andFileName:_drawingsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载图纸失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        self.drawingsInfoModel = [PBDrawingsInfoModel yy_modelWithJSON:str];
+        self.image = [NSString imageDecoding:self.drawingsInfoModel.imagebase64];
+        [self setScrollView];
+    }];
+}
+
+- (void)setScrollView {
+    self.imageV.image = self.image;
+    self.scrollView.contentSize = self.image.size;
+    NSInteger imageW = CGImageGetWidth(self.image.CGImage);
+    NSInteger width = self.view.bounds.size.width;
+    CGFloat scale = (CGFloat)width / (CGFloat)imageW;
+    self.scrollView.maximumZoomScale = 2;
+    self.scrollView.minimumZoomScale = scale;
+    [self.scrollView setZoomScale:scale animated:NO];
+    self.redView.frame = CGRectMake(500, 800, 1, 1);
+    CGPoint point = [self.redView convertPoint:CGPointMake(0, 0) toView:self.view];
+    CGRect frame = CGRectMake(point.x - (positionImageVW / 2), point.y - positionImageVH, positionImageVW, positionImageVH);
+    self.positionImageV.frame = frame;
+    self.redView.hidden = NO;
+    self.positionImageV.hidden = NO;
+}
+
+- (void)setDrawingsModel:(PBDrawingsModel *)drawingsModel {
+    _drawingsModel = drawingsModel;
+    self.title = drawingsModel.name;
+    [self loadDrawingsInfo];
+}
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+
+#pragma mark - UIScrollViewDelegate
+- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
+    return self.imageV;
+}
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    [self changegreenView];
+}
+
+- (UIView *)redView {
+    if (_redView == nil) {
+        _redView = [[UIView alloc] init];
+        _redView.backgroundColor = [UIColor redColor];
+    }
+    return _redView;
+}
+- (UIImageView *)positionImageV {
+    if (_positionImageV == nil) {
+        _positionImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"location"]];
+        self.positionImageV.userInteractionEnabled = YES;
+        UILongPressGestureRecognizer *longRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longRecognizerAciont:)];
+        longRecognizer.minimumPressDuration = 0.2;
+        [self.positionImageV addGestureRecognizer:longRecognizer];
+    }
+    return _positionImageV;
+}
+
+- (void)longRecognizerAciont:(UILongPressGestureRecognizer *)longRecognizer {
+    self.navigationItem.rightBarButtonItem.enabled = YES;
+    switch (longRecognizer.state) {
+        case UIGestureRecognizerStateBegan:
+            NSLog(@"长按开始了");
+            self.scrollView.scrollEnabled = NO;
+            break;
+        case UIGestureRecognizerStateChanged:
+            NSLog(@"长按在走动~~~~~");
+            CGPoint redViewpoint = [longRecognizer locationInView:self.imageV];
+            NSLog(@"图纸位置=================%@",NSStringFromCGPoint(redViewpoint));
+            self.redView.frame = CGRectMake(redViewpoint.x, redViewpoint.y, 1, 1);
+            [self changegreenView];
+            break;
+        case UIGestureRecognizerStateEnded:
+            NSLog(@"长按结束");
+            self.scrollView.scrollEnabled = YES;
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)changegreenView {
+    CGPoint point = [self.redView convertPoint:CGPointMake(0, 0) toView:self.view];
+    CGRect frame = CGRectMake(point.x - (positionImageVW / 2), point.y - positionImageVH, positionImageVW, positionImageVH);
+    self.positionImageV.frame = frame;
+    NSLog(@"self.views位置-----------------------%@",NSStringFromCGPoint(point));
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.h
new file mode 100644
index 0000000..8a8cb40
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.h
@@ -0,0 +1,15 @@
+//
+//  PBEViewPointDetailsController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/18.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBViewPointDetailsController.h"
+@class PBExamineAddModel;
+@interface PBEViewPointDetailsController : PBViewPointDetailsController;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.m
new file mode 100644
index 0000000..020bd3b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBEViewPointDetailsController.m
@@ -0,0 +1,59 @@
+
+//
+//  PBEViewPointDetailsController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/18.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBEViewPointDetailsController.h"
+#import "PBViewPointModel.h"
+#import "PBExamineAddModel.h"
+#import "PBModelsModel.h"
+@interface PBEViewPointDetailsController ()
+
+@end
+
+@implementation PBEViewPointDetailsController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+}
+
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"视点";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)LoadModelDisplayVC {
+    self.examineAddModel.modelsModel = self.modelsModel;
+    self.examineAddModel.viewPointModel = self.loadViewPointModel;
+    self.examineAddModel.drawingsInfoModel = nil;
+    self.examineAddModel.drawingposModel = nil;
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdatePositioning object:nil];
+    [self.navigationController popToRootViewControllerAnimated:YES];
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.h
new file mode 100644
index 0000000..3d3dce3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.h
@@ -0,0 +1,38 @@
+//
+//  PBExamineBaseController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/26.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "PBPromptView.h"
+#import "PBProjectModel.h"
+
+@interface PBExamineBaseController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *powerArr;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *examineArrM;
+//@property (nonatomic, assign) NSInteger typeSelectIndex;
+//@property (nonatomic, assign) NSInteger levelSelectIndex;
+//@property (nonatomic, assign) NSInteger resultSelectIndex;
+//@property (nonatomic, assign) NSInteger relatedSelectIndex;
+@property (nonatomic, copy) NSString *searchText;
+@property (nonatomic, strong) PBPromptView *promptView;
+//@property (nonatomic, strong) NSMutableArray *dropdownMenuArrM;
+@property (nonatomic, strong) NSArray *typeArr;
+@property (nonatomic, strong) NSArray *levelArr;
+@property (nonatomic, strong) NSArray *stateArr;
+//@property (nonatomic, strong) NSArray *relatedArr;
+@property (nonatomic, strong) NSString *relatedId;
+@property (nonatomic, strong) NSString *levelId;
+@property (nonatomic, strong) NSString *stateId;
+@property (nonatomic, strong) NSString *typeId;
+@property (nonatomic, assign) NSInteger sortingSelect;
+@property (nonatomic, assign) NSInteger sortingAse;
+@property (nonatomic, strong) NSArray *sortingArr;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.m
new file mode 100644
index 0000000..08681a5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineBaseController.m
@@ -0,0 +1,441 @@
+//
+//  PBExamineBaseController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/26.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineBaseController.h"
+#import "PBExamineListTableViewCell.h"
+#import "PBExamineListToCheckCell.h"
+#import "PBExamineListPicCell.h"
+#import "PBExamineListTwoPicCell.h"
+#import "PBExamineListMorePicCell.h"
+#import "PBResultModel.h"
+#import "PBExamineListModel.h"
+#import "PBIssueNavModel.h"
+#import "PBCheckTaskViewController.h"
+#import "PBExamineDetailController.h"
+#import "PBRefreshGifHeader.h"
+#import "PBVideoPlayViewController.h"
+#define pageSize 15
+
+static NSString *const CellID = @"CellID";
+static NSString *const ToCheckCellID = @"ToCheckCellID";
+static NSString *const CheckPicCellID = @"CheckPicCellID";
+static NSString *const TwoPicCellID = @"TwoPicCellID";
+static NSString *const MorePicCellID = @"MorePicCellID";
+@interface PBExamineBaseController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, assign) NSInteger pageIndex;
+@property (nonatomic, strong) NSMutableArray *examineDictArr;
+@property (nonatomic, strong) PBRefreshGifHeader *headerView;
+@end
+
+@implementation PBExamineBaseController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    self.view.backgroundColor = [UIColor whiteColor];
+    [self setupUI];
+    [self setupRefresh];
+}
+- (void)setupUI {
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 200.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBExamineListTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.tableView registerClass:[PBExamineListToCheckCell class] forCellReuseIdentifier:ToCheckCellID];
+    [self.tableView registerClass:[PBExamineListPicCell class] forCellReuseIdentifier:CheckPicCellID];
+    [self.tableView registerClass:[PBExamineListTwoPicCell class] forCellReuseIdentifier:TwoPicCellID];
+    [self.tableView registerClass:[PBExamineListMorePicCell class] forCellReuseIdentifier:MorePicCellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(41);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    
+    [self.view addSubview:self.promptView];
+    self.promptView.hidden = YES;
+}
+
+- (void)setupRefresh {
+    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+        self.pageIndex = 0;
+        [self.examineArrM removeAllObjects];
+        [self.examineDictArr removeAllObjects];
+        [self loadExamineList];
+    }];
+    header.lastUpdatedTimeLabel.hidden = YES;
+    header.stateLabel.textColor = TitleColor;
+    [header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
+    [header setTitle:@"释放更新" forState:MJRefreshStatePulling];
+    [header setTitle:@"加载中..." forState:MJRefreshStateRefreshing];
+    self.tableView.mj_header = header;
+    
+//    MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
+//        [self loadExamineList];
+//    }];
+//    self.tableView.mj_footer = footer;
+    
+//    self.tableView.mj_header = self.headerView;
+}
+- (void)loadExamineList {
+    NSString *search = @"";
+    if (self.searchText == nil) {
+        self.promptView.textL.text = @"暂无检查数据";
+        self.promptView.imageV.image = [UIImage imageNamed:@"Examine_ security_list_empty"];
+//        NSMutableAttributedString *noteStr = [[NSMutableAttributedString alloc] initWithString:_promptView.textL.text];
+//        NSRange redRange = NSMakeRange([[noteStr string] rangeOfString:@"加号"].location, [[noteStr string] rangeOfString:@"加号"].length);
+//        //需要设置的位置
+//        [noteStr addAttribute:NSForegroundColorAttributeName value:IndicatedColor range:redRange];
+//        //设置颜色
+//        [_promptView.textL setAttributedText:noteStr];
+    }else {
+        search = self.searchText;
+        self.promptView.textL.text = @"暂无相关检查数据,请换关键字搜索";
+        self.promptView.imageV.image = [UIImage imageNamed:@"Examine_quality_list_empty"];
+        if ([search isEqualToString:@""]) {
+            [self.tableView.mj_header endRefreshing];
+            self.promptView.hidden = NO;
+            return;
+        }
+    }
+    NSString *relatedID;
+    NSString *levelID;
+    NSString *stateID;
+    NSString *typeID;
+    NSString *SortField;
+    NSString *SortIsAsc;
+    if (![self.searchText isEqualToString:@""] && self.searchText != nil) {
+        relatedID = @"";
+        levelID = @"";
+        stateID = @"";
+        typeID = @"";
+        SortField = @"";
+        SortIsAsc = @"";
+    }else {
+        relatedID = self.relatedId == nil? @"" : self.relatedId;
+        levelID = self.levelId == nil? @"" : self.levelId;
+        stateID = self.stateId == nil? @"" : self.stateId;
+        typeID = self.typeId == nil? @"" : self.typeId;
+        SortField = self.sortingArr[self.sortingSelect];
+        SortIsAsc = self.sortingAse == 0? @"0" : @"1";
+//        PBIssueNavModel *resultNavModel = _dropdownMenuArrM[0][_resultSelectIndex];
+//        PBIssueNavModel *typeNavModel = _dropdownMenuArrM[1][_typeSelectIndex];
+//        PBIssueNavModel *levelNavModel = _dropdownMenuArrM[2][_levelSelectIndex];
+//        PBIssueNavModel *relatedModel = _dropdownMenuArrM[3][_relatedSelectIndex];
+
+//        StateType = resultNavModel.ItemDetailId;
+//        AuthorType = relatedModel.ItemDetailId;
+//        Severitylevel = levelNavModel.ItemDetailId;
+//        Types = typeNavModel.ItemDetailId;
+    }
+    [[PBNetworkTools sharedTools] RequestExamineListWithBIMComposerId:self.projectModel.bimcomposerid andSearchValue:search andStateType:stateID andAuthorType:relatedID andSeveritylevel:levelID andTypes:typeID andSortField:SortField andSortIsAsc:SortIsAsc andPageIndex:0 andPageSize:1000 andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        [self.tableView.mj_header endRefreshing];
+        if (error) {
+           [YJProgressHUD showMessage:@"加载现场管理列表失败" inView:self.view];
+           return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            for (NSDictionary *obj in [networkModel.Data valueForKey:@"List"]) {
+                PBExamineListModel *examineListModel = [PBExamineListModel yy_modelWithDictionary:obj];
+                [self.examineArrM addObject:examineListModel];
+            }
+            [self.examineDictArr addObjectsFromArray:[networkModel.Data valueForKey:@"List"]];
+            if (self.examineArrM.count == 0) {
+                self.promptView.hidden = NO;
+            }else {
+                self.promptView.hidden = YES;
+                [self.tableView reloadData];
+            }
+        }else {
+           [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+           [self.tableView reloadData];
+        }
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.examineArrM.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBExamineListModel *examineListModel = self.examineArrM[indexPath.row];
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        PBExamineListToCheckCell *cell = [tableView dequeueReusableCellWithIdentifier:ToCheckCellID forIndexPath:indexPath];
+        cell.examineListModel = examineListModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    } else {
+        //列表不显示图片视频
+//        if (examineListModel.FirstCheck_Attachments.count >= 3) {
+//            PBExamineListMorePicCell *cell = [tableView dequeueReusableCellWithIdentifier:MorePicCellID forIndexPath:indexPath];
+//            cell.examineListModel = examineListModel;
+//            cell.selectionStyle = UITableViewCellSelectionStyleNone;
+//            return cell;
+//        }else if (examineListModel.FirstCheck_Attachments.count == 2) {
+//            PBExamineListTwoPicCell *cell = [tableView dequeueReusableCellWithIdentifier:TwoPicCellID forIndexPath:indexPath];
+//            cell.examineListModel = examineListModel;
+//            cell.selectionStyle = UITableViewCellSelectionStyleNone;
+//            return cell;
+//        }else if (examineListModel.FirstCheck_Attachments.count == 1) {
+//            PBExamineListPicCell *cell = [tableView dequeueReusableCellWithIdentifier:CheckPicCellID forIndexPath:indexPath];
+//            cell.examineListModel = examineListModel;
+//            cell.selectionStyle = UITableViewCellSelectionStyleNone;
+//            cell.PlayVideoBlock = ^(NSString * _Nonnull url) {
+//                PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+//                playVC.url = url;
+//                playVC.hidesBottomBarWhenPushed = YES;
+//                [self.navigationController pushViewController:playVC animated:YES];
+//            };
+//            return cell;
+//        }else {
+            PBExamineListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+            cell.examineListModel = examineListModel;
+            cell.selectionStyle = UITableViewCellSelectionStyleNone;
+            return cell;
+//        }
+    }
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBExamineListModel *examineListModel = self.examineArrM[indexPath.row];
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        PBCheckTaskViewController *addExamineVC = [[PBCheckTaskViewController alloc] init];
+        addExamineVC.projectModel = self.projectModel;
+        addExamineVC.stateArr = self.stateArr;
+        addExamineVC.levelArr = self.levelArr;
+        addExamineVC.typeArr = self.typeArr;
+        addExamineVC.examineListModel = examineListModel;
+        addExamineVC.examineListDict = self.examineDictArr[indexPath.row];
+        addExamineVC.hidesBottomBarWhenPushed = YES;
+        [self.navigationController pushViewController:addExamineVC animated:YES];
+    }else {
+        PBExamineDetailController *vc = [[PBExamineDetailController alloc] init];
+        vc.projectModel = self.projectModel;
+        vc.stateArr = self.stateArr;
+        vc.levelArr = self.levelArr;
+        vc.examineListModel = examineListModel;
+        vc.hidesBottomBarWhenPushed = YES;
+        [self.navigationController pushViewController:vc animated:YES];
+    }
+}
+
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    PBExamineListModel *examineListModel = self.examineArrM[indexPath.row];
+//    if (!examineListModel.IsExamineMgr) {
+//        return @[];
+//    }
+    UITableViewRowAction *deleteAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            [self deleteExamineWith:indexPath];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+    deleteAction.backgroundColor = ErrorColor;
+ 
+    UITableViewRowAction *closeAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"关闭" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要关闭吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            [self closeExamineWith:indexPath];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+    closeAction.backgroundColor = PBColor(40, 58, 79);
+    //判断权限
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([UserID isEqualToString:examineListModel.ExaminerID]) {
+        if ([flagStr isEqualToString:@"E"]){
+            return @[deleteAction];
+        }else {
+            return @[closeAction, deleteAction];
+        }
+    }else {
+        return nil;
+    }
+}
+//关闭
+- (void)closeExamineWith:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    PBExamineListModel *examienListModel = self.examineArrM[indexPath.row];
+    [[PBNetworkTools sharedTools] RequestCloseItemsWithId:examienListModel.ExamineID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"关闭失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.examineArrM removeObjectAtIndex:indexPath.row];
+            [self.examineDictArr removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+//删除
+- (void)deleteExamineWith:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    PBExamineListModel *examienListModel = self.examineArrM[indexPath.row];
+    [[PBNetworkTools sharedTools] RequestRemoveItemsWithId:examienListModel.ExamineID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"删除失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.examineArrM removeObjectAtIndex:indexPath.row];
+            [self.examineDictArr removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] initWithFrame:self.view.bounds];
+    }
+    return _promptView;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+
+- (NSMutableArray *)examineArrM {
+    if (_examineArrM == nil) {
+        _examineArrM = [[NSMutableArray alloc] init];
+    }
+    return _examineArrM;
+}
+
+- (NSMutableArray *)examineDictArr {
+    if (_examineDictArr == nil) {
+        _examineDictArr = [[NSMutableArray alloc] init];
+    }
+    return _examineDictArr;
+}
+
+- (void)setSearchText:(NSString *)searchText {
+    _searchText = searchText;
+}
+- (NSArray *)sortingArr {
+    if (_sortingArr == nil) {
+        _sortingArr = @[@"CreateDate", @"RectificateDate", @"State"];
+    }
+    return _sortingArr;
+}
+- (PBRefreshGifHeader *)headerView {
+    if(_headerView == nil) {
+        _headerView = [[PBRefreshGifHeader alloc] init];
+        __weak typeof(self) weakSelf = self;
+        [self.headerView setRefreshingBlock:^{
+            weakSelf.pageIndex = 0;
+            [weakSelf.examineArrM removeAllObjects];
+            [weakSelf.examineDictArr removeAllObjects];
+            [weakSelf loadExamineList];
+        }];
+    }
+    return _headerView;
+}
+//- (NSMutableArray *)dropdownMenuArrM {
+//    if (_dropdownMenuArrM == nil) {
+//        _dropdownMenuArrM = [[NSMutableArray alloc] init];
+//        
+//        PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+//        issueNavModel.ItemDetailId = @"";
+//        issueNavModel.ItemName = @"等级";
+//        
+//        PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+//        issueNavModel1.ItemDetailId = @"非常严重";
+//        issueNavModel1.ItemName = @"非常严重";
+//        
+//        PBIssueNavModel *issueNavModel2 = [[PBIssueNavModel alloc] init];
+//        issueNavModel2.ItemDetailId = @"严重";
+//        issueNavModel2.ItemName = @"严重";
+//        
+//        PBIssueNavModel *issueNavModel3 = [[PBIssueNavModel alloc] init];
+//        issueNavModel3.ItemDetailId = @"一般";
+//        issueNavModel3.ItemName = @"一般";
+//        NSArray *typeArr = @[issueNavModel, issueNavModel1, issueNavModel2, issueNavModel3];
+//        
+//        PBIssueNavModel *issueNavMode4 = [[PBIssueNavModel alloc] init];
+//        issueNavMode4.ItemDetailId = @"";
+//        issueNavMode4.ItemName = @"状态";
+//        
+//        PBIssueNavModel *issueNavModel5 = [[PBIssueNavModel alloc] init];
+//        issueNavModel5.ItemDetailId = @"A_ToBeCheck";
+//        issueNavModel5.ItemName = @"待检查";
+//        
+//        PBIssueNavModel *issueNavModel6 = [[PBIssueNavModel alloc] init];
+//        issueNavModel6.ItemDetailId = @"B_ToBeRectified";
+//        issueNavModel6.ItemName = @"待整改";
+//        PBIssueNavModel *issueNavModel7 = [[PBIssueNavModel alloc] init];
+//        issueNavModel7.ItemDetailId = @"C_ToBeRecheck";
+//        issueNavModel7.ItemName = @"待验收";
+//        PBIssueNavModel *issueNavModel8 = [[PBIssueNavModel alloc] init];
+//        issueNavModel8.ItemDetailId = @"D_Qualified";
+//        issueNavModel8.ItemName = @"已合格";
+//        NSArray *stateArr = @[issueNavMode4, issueNavModel5, issueNavModel6, issueNavModel7, issueNavModel8];
+//       
+//        PBIssueNavModel *issueNavModel9 = [[PBIssueNavModel alloc] init];
+//        issueNavModel9.ItemDetailId = @"";
+//        issueNavModel9.ItemName = @"相关";
+//        PBIssueNavModel *issueNavModel10 = [[PBIssueNavModel alloc] init];
+//        issueNavModel10.ItemDetailId = @"AsChecker";
+//        issueNavModel10.ItemName = @"我检查";
+//        PBIssueNavModel *issueNavModel11 = [[PBIssueNavModel alloc] init];
+//        issueNavModel11.ItemDetailId = @"AsRectifier";
+//        issueNavModel11.ItemName = @"我整改";
+//        PBIssueNavModel *issueNavModel12 = [[PBIssueNavModel alloc] init];
+//        issueNavModel12.ItemDetailId = @"AsRechecker";
+//        issueNavModel12.ItemName = @"我验收";
+//        NSArray *relatedArr = @[issueNavModel9, issueNavModel10, issueNavModel11, issueNavModel12];
+//
+//        [_dropdownMenuArrM addObject:stateArr];
+//        [_dropdownMenuArrM addObject:typeArr];
+//        [_dropdownMenuArrM addObject:relatedArr];
+//    }//传空字符串或以下其中之一,可选值:AsChecker(我检查)AsRechecker(我复检)AsRectifier(我整改)
+//    return _dropdownMenuArrM;
+//}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.h
new file mode 100644
index 0000000..72533c5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.h
@@ -0,0 +1,24 @@
+//
+//  PBExamineDetailController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/19.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBExamineListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBExamineDetailController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, assign) BOOL isAddExamine;
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, strong) NSDictionary *examineListDict;
+@property (nonatomic, strong) NSArray *stateArr;
+@property (nonatomic, strong) NSArray *levelArr;
+@property (nonatomic, strong) NSArray *typeArr;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.m
new file mode 100644
index 0000000..449579a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineDetailController.m
@@ -0,0 +1,589 @@
+//
+//  PBExamineDetailController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/19.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBExamineDetailController.h"
+#import "PBExamineAddModel.h"
+#import "PBExamineListModel.h"
+#import "PBExamineInputTableViewCell.h"
+#import "PBTextShowTableViewCell.h"
+#import "PBTwoChooseTableViewCell.h"
+#import "PBPersonTableViewCell.h"
+#import "PBListTableViewCell.h"
+#import "PBCheckTableViewCell.h"
+#import "PBRecordViewController.h"
+#import "PBRoleModel.h"
+#import "PBAddRecordViewController.h"
+#import "PBApplyInspectionViewController.h"
+#import "PBEditPersonView.h"
+#import "PBPersonModel.h"
+#import "PBProjectModel.h"
+#import "PBOneChooseTableViewCell.h"
+#import "PBVideoPlayViewController.h"
+#import "PBComponentHierarchyView.h"
+#import "PBTextInputTableViewCell.h"
+#import "PBTopTitleTableViewCell.h"
+#import "PBTimeChooseTableViewCell.h"
+#import "PBPersonChooseTableViewCell.h"
+#import "PBArtifactsListTableViewCell.h"
+#import "PBRadioTableViewCell.h"
+#import "PBCheckInfoTableViewCell.h"
+#import "PBCheckImageTableViewCell.h"
+static NSString *const inputCellID = @"InputCellID";
+static NSString *const topTitleCellID = @"topTitleCellID";
+static NSString *const timeChooseCellID = @"timeChooseCellID";
+static NSString *const textCellID = @"textCellID";
+static NSString *const listCellID = @"listCellID";
+static NSString *const personCellID = @"personCellID";
+static NSString *const imageCellID = @"imageCellID";
+static NSString *const radioCellID = @"radioCellID";
+static NSString *const checkInfoCellID = @"checkInfoCellID";
+static NSString *const checkImageCellID = @"checkImageCellID";
+@interface PBExamineDetailController ()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray<PBExamineAddModel *> *dataListM;
+@property (nonatomic, strong) NSDictionary *examinDetailDic;
+@property (nonatomic, strong) PBRoleModel *roleModel;
+@property (nonatomic, strong) PBEditPersonView *editPersonView;
+@property (nonatomic, strong) PBComponentHierarchyView *componentHierarchyView;
+@property (nonatomic, strong) NSDictionary *typeDict;
+@property (nonatomic, weak) UIButton *typeListBtn;
+@property (nonatomic, weak) UIButton *functionBtn;
+@end
+
+@implementation PBExamineDetailController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+//    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    [self setupNav];
+    [self loadData];
+    [self loadRelevantData];
+}
+- (void)setupNav {
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *stateNavItem = [[UIBarButtonItem alloc] initWithTitle:nil style:UIBarButtonItemStylePlain target:self action:nil];
+    [stateNavItem setImage:[[UIImage imageNamed:@""] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+    [stateNavItem setImageInsets:UIEdgeInsetsMake(0, 20, 0, -20)];
+    self.navigationItem.rightBarButtonItem = stateNavItem;
+}
+- (void)typeListShow {
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)loadData {
+    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"examineAdd5" ofType:@"plist"];
+    NSArray *list = [NSArray arrayWithContentsOfFile:plistPath];
+    NSMutableArray *listM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < list.count; i++) {
+        NSDictionary *dict = list[i];
+        PBExamineAddModel *model = [PBExamineAddModel yy_modelWithDictionary:dict];
+        model.isAddExamine = NO;
+//        model.isIssueManage = self.isIssueManage;
+       
+        [listM addObject:model];
+    }
+    self.dataListM = listM;
+}
+#pragma mark - 加载检查相关数据
+- (void)loadRelevantData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetItemWithExamineID:self.examineListModel.ExamineID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载详情失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            self.examinDetailDic = networkModel.Data;
+            self.roleModel = [PBRoleModel yy_modelWithDictionary:networkModel.Data];
+            [self collatingDetailedData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)collatingDetailedData {
+    for (PBExamineAddModel *examineAddModel in self.dataListM) {
+        if ([examineAddModel.cellType isEqualToString:@"time"] || [examineAddModel.cellType isEqualToString:@"input"]){
+            NSString *dataStr = [self.examinDetailDic valueForKey:examineAddModel.key];
+            if ([dataStr isKindOfClass:[NSNull class]]) {
+                examineAddModel.dataStr = nil;
+            }else {
+                if ([examineAddModel.cellType isEqualToString:@"time"]) {
+                    NSRange range = [dataStr rangeOfString:@"T"];
+                    dataStr = [dataStr substringToIndex:range.location];
+
+                    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+                    //需要设置为和字符串相同的格式
+                    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+                    NSDate *localDate = [dateFormatter dateFromString:dataStr];
+                    NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
+                    [dateFormat1 setDateFormat:@"yyyy年M月d日"];
+                    NSString *timeStr = [dateFormat1 stringFromDate:localDate];
+                    examineAddModel.dataStr = timeStr;
+                }else {
+                    examineAddModel.dataStr = dataStr;
+                }
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"list"]) {
+            examineAddModel.dataArr = [self.examinDetailDic valueForKey:examineAddModel.key];
+        }else if ([examineAddModel.cellType isEqualToString:@"person"]) {
+            if ([examineAddModel.key isEqualToString:@"CheckerName"]) {
+                PBPersonModel *personModel = [[PBPersonModel alloc] init];
+                personModel.RealName = [self.examinDetailDic valueForKey:examineAddModel.key];
+                examineAddModel.personArr = @[personModel];
+            }else {
+                NSMutableArray *arrM = [[NSMutableArray alloc] init];
+                NSArray *personArr = [self.examinDetailDic valueForKey:examineAddModel.key];
+                for (NSDictionary *obj in personArr) {
+                    PBPersonModel *personModel = [PBPersonModel yy_modelWithDictionary:obj];
+                    [arrM addObject:personModel];
+                };
+                examineAddModel.personArr = arrM.copy;
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"choose"]) {
+            NSString *dataStr = [self.examinDetailDic valueForKey:examineAddModel.key];
+            if ([dataStr isKindOfClass:[NSNull class]] || dataStr == nil || [dataStr isEqualToString:@""]) {
+                examineAddModel.dataStr = statuChoosequalified;
+            }else {
+                examineAddModel.dataStr = dataStr;
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"checkTitle"]) {
+            NSArray *arr = [self.examinDetailDic valueForKey:examineAddModel.key];
+            if (arr.count > 0) {
+                NSDictionary *dict = arr[arr.count - 1];
+                examineAddModel.dataStr = [dict valueForKey:@"RectificationRemark"];
+            }
+        }else if ([examineAddModel.cellType isEqualToString:@"image"]) {
+            NSArray *arr = [self.examinDetailDic valueForKey:examineAddModel.key];
+            if (arr.count > 0) {
+                NSDictionary *dict = arr[arr.count - 1];
+                examineAddModel.dataArr = [dict valueForKey:@"Attachments"];
+            }
+        }
+    }
+    [self setupUI];
+}
+- (void)setupUI {
+//    __weak typeof(self) weakSelf = self;
+    self.title = [self.examinDetailDic valueForKey:@"aedt_name"];
+    self.view.backgroundColor = PBColor(244, 245, 246);
+//    self.view.backgroundColor = [UIColor blackColor];
+//    UIView *bgView = [[UIView alloc] init];
+//    bgView.backgroundColor = PBColor(244, 245, 246);
+//    [self.view addSubview:bgView];
+//    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.view).offset(70);
+//        make.left.right.bottom.equalTo(self.view);
+//    }];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.bounces = NO;
+    [self.tableView registerClass:[PBTextInputTableViewCell class] forCellReuseIdentifier:inputCellID];
+    [self.tableView registerClass:[PBTopTitleTableViewCell class] forCellReuseIdentifier:topTitleCellID];
+    [self.tableView registerClass:[PBTimeChooseTableViewCell class] forCellReuseIdentifier:timeChooseCellID];
+    [self.tableView registerClass:[PBTextShowTableViewCell class] forCellReuseIdentifier:textCellID];
+    [self.tableView registerClass:[PBArtifactsListTableViewCell class] forCellReuseIdentifier:listCellID];
+    [self.tableView registerClass:[PBPersonChooseTableViewCell class] forCellReuseIdentifier:personCellID];
+    [self.tableView registerClass:[PBCheckTableViewCell class] forCellReuseIdentifier:imageCellID];
+    [self.tableView registerClass:[PBRadioTableViewCell class] forCellReuseIdentifier:radioCellID];
+    [self.tableView registerClass:[PBCheckInfoTableViewCell class] forCellReuseIdentifier:checkInfoCellID];
+    [self.tableView registerClass:[PBCheckImageTableViewCell class] forCellReuseIdentifier:checkImageCellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(246, 246, 247);
+    [self.view addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom);
+        make.left.right.equalTo(self.view);
+        make.height.equalTo(@1);
+    }];
+    UIButton *recordBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"recording"]];
+    [recordBtn addTarget:self action:@selector(recordAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:recordBtn];
+    [recordBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(15);
+        make.left.equalTo(self.view).offset(20);
+        make.size.mas_equalTo(CGSizeMake(93, 24));
+    }];
+    UIButton *functionBtn = [[UIButton alloc] init];
+    self.functionBtn = functionBtn;
+    [self.view addSubview:functionBtn];
+    [functionBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(15);
+        make.right.equalTo(self.view).offset(-10);
+    }];
+    NSString *result = [self.examinDetailDic valueForKey:@"ExamineResult"];
+    NSString *flagStr = [result substringToIndex:1];
+    UIImage *image;
+    if ([flagStr isEqualToString:@"A"]) {
+        image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+        image = [UIImage imageNamed:@"Rectify_ rectification"];
+        [functionBtn setImage:[UIImage imageNamed:@"btn_applyforreexamination"] forState:UIControlStateNormal];
+        [functionBtn setImage:[UIImage imageNamed:@"btn_applyforreexamination_disable"] forState:UIControlStateDisabled];
+        if (self.roleModel.User_InRelation) {
+            functionBtn.enabled = YES;
+        }else {
+            functionBtn.enabled = NO;
+        }
+        [functionBtn addTarget:self action:@selector(apply) forControlEvents:UIControlEventTouchUpInside];
+    }else if ([flagStr isEqualToString:@"C"]) {
+        image = [UIImage imageNamed:@"Rectify_ acceptance"];
+        [functionBtn setImage:[UIImage imageNamed:@"checkacceptance"] forState:UIControlStateNormal];
+        [functionBtn setImage:[UIImage imageNamed:@"checkacceptance_disable"] forState:UIControlStateDisabled];
+        if (self.roleModel.User_InPrincipal) {
+            functionBtn.enabled = YES;
+        }else {
+            functionBtn.enabled = NO;
+        }
+        [functionBtn addTarget:self action:@selector(acceptance) forControlEvents:UIControlEventTouchUpInside];
+    }else if ([flagStr isEqualToString:@"D"]) {
+        image = [UIImage imageNamed:@"Rectify_ qualified"];
+        [functionBtn setImage:[UIImage imageNamed:@"qualified_disable"] forState:UIControlStateDisabled];
+        functionBtn.enabled = NO;
+    }else if ([flagStr isEqualToString:@"E"]) {
+        image = [UIImage imageNamed:@"Rectify_close"];
+        [functionBtn setImage:[UIImage imageNamed:@"closed_disable"] forState:UIControlStateDisabled];
+        functionBtn.enabled = NO;
+    }else {
+        image = [UIImage imageNamed:@""];
+    }
+    [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+}
+#pragma mark - 申请复检
+- (void)apply {
+    PBApplyInspectionViewController *applyInspectionVC = [[PBApplyInspectionViewController alloc] init];
+    applyInspectionVC.examineListModel = self.examineListModel;
+    applyInspectionVC.projectModel = self.projectModel;
+    applyInspectionVC.isBackList = YES;
+    applyInspectionVC.UpdateRecordListBlock = ^{
+    //更改任务当前状态 及 底部按钮
+        UIImage *image = [UIImage imageNamed:@"Rectify_ acceptance"];
+        [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+        [self.functionBtn setImage:[UIImage imageNamed:@"acceptance"] forState:UIControlStateNormal];
+        [self.functionBtn setImage:[UIImage imageNamed:@"acceptance_dis"] forState:UIControlStateDisabled];
+        if (self.roleModel.User_InPrincipal) {
+            self.functionBtn.enabled = YES;
+        }else {
+            self.functionBtn.enabled = NO;
+        }
+        [self.functionBtn addTarget:self action:@selector(acceptance) forControlEvents:UIControlEventTouchUpInside];
+    };
+    [self presentViewController:applyInspectionVC animated:YES completion:nil];
+}
+#pragma mark - 验收
+- (void)acceptance {
+    PBAddRecordViewController *addRecordVC = [[PBAddRecordViewController alloc] init];
+    addRecordVC.examineListModel = self.examineListModel;
+    addRecordVC.projectModel = self.projectModel;
+    addRecordVC.isBackList = YES;
+    addRecordVC.UpdateRecordListBlock = ^(BOOL isQualified) {
+        if (isQualified) {
+            UIImage *image = [UIImage imageNamed:@"Rectify_ qualified"];
+            [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+            [self.functionBtn setImage:[UIImage imageNamed:@"qualified_disable"] forState:UIControlStateDisabled];
+            self.functionBtn.enabled = NO;
+        }else {
+            UIImage *image = [UIImage imageNamed:@"Rectify_ rectification"];
+            [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+            [self.functionBtn setImage:[UIImage imageNamed:@"apply_reinspection"] forState:UIControlStateNormal];
+            [self.functionBtn setImage:[UIImage imageNamed:@"apply_reinspection_dis"] forState:UIControlStateDisabled];
+            if (self.roleModel.User_InRelation) {
+                self.functionBtn.enabled = YES;
+            }else {
+                self.functionBtn.enabled = NO;
+            }
+            [self.functionBtn addTarget:self action:@selector(apply) forControlEvents:UIControlEventTouchUpInside];
+        }
+    };
+    [self presentViewController:addRecordVC animated:YES completion:nil];
+}
+#pragma mark - 流转记录
+- (void)recordAction {
+    PBRecordViewController *recordVC = [[PBRecordViewController alloc] init];
+    recordVC.examineListModel = self.examineListModel;
+    recordVC.examineDetailDic = self.examinDetailDic;
+    recordVC.projectModel = self.projectModel;
+    recordVC.roleModel = self.roleModel;
+    recordVC.ModifyStateBlock = ^(NSString * _Nonnull flagStr) {
+        if ([flagStr isEqualToString:@"B"]) {
+            //申请复检
+            UIImage *image = [UIImage imageNamed:@"Rectify_ rectification"];
+            [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+            [self.functionBtn setImage:[UIImage imageNamed:@"apply_reinspection"] forState:UIControlStateNormal];
+            [self.functionBtn setImage:[UIImage imageNamed:@"apply_reinspection_dis"] forState:UIControlStateDisabled];
+            [self.functionBtn addTarget:self action:@selector(apply) forControlEvents:UIControlEventTouchUpInside];
+            if (self.roleModel.User_InRelation) {
+                self.functionBtn.enabled = YES;
+            }else {
+                self.functionBtn.enabled = NO;
+            }
+        }else if ([flagStr isEqualToString:@"C"]) {
+            //验收
+            UIImage *image = [UIImage imageNamed:@"Rectify_ acceptance"];
+            [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+            [self.functionBtn setImage:[UIImage imageNamed:@"acceptance"] forState:UIControlStateNormal];
+            [self.functionBtn setImage:[UIImage imageNamed:@"acceptance_dis"] forState:UIControlStateDisabled];
+            [self.functionBtn addTarget:self action:@selector(acceptance) forControlEvents:UIControlEventTouchUpInside];
+            if (self.roleModel.User_InPrincipal) {
+                self.functionBtn.enabled = YES;
+            }else {
+                self.functionBtn.enabled = NO;
+            }
+        }else if ([flagStr isEqualToString:@"D"]) {
+            UIImage *image = [UIImage imageNamed:@"Rectify_ qualified"];
+            [self.navigationItem.rightBarButtonItem setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
+            [self.functionBtn setImage:[UIImage imageNamed:@"qualified_disable"] forState:UIControlStateDisabled];
+            self.functionBtn.enabled = NO;
+        }
+    };
+//    recordVC.recordListM = [[self.examinDetailDic valueForKey:@"RecordWithAttachments"] mutableCopy];
+    [self.navigationController pushViewController:recordVC animated:YES];
+    
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 16;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    __weak typeof(self) weakSelf = self;
+    if (indexPath.row == 0) {
+        PBTextInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inputCellID forIndexPath:indexPath];
+                PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 1 || indexPath.row == 5 || indexPath.row == 8 || indexPath.row == 10 || indexPath.row == 13) {
+        PBTopTitleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:topTitleCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 2 || indexPath.row == 3) {
+        PBTimeChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:timeChooseCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 4 || indexPath.row == 11 || indexPath.row == 12) {
+        PBPersonChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 14 || indexPath.row == 15) {
+        PBArtifactsListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:listCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        if (indexPath.row == 14) {
+            cell.ToViewBlock = ^(NSInteger index) {
+                NSLog(@"查看模型========");
+                NSDictionary *dict = examineAddModel.dataArr[index];
+                [self getCategoryArrayByBmGuidWithGuid:[dict valueForKey:@"bm_guid"]];
+            };
+        }
+        return cell;
+    }else if (indexPath.row == 6) {
+        PBCheckInfoTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:checkInfoCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if (indexPath.row == 7) {
+        PBCheckImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:checkImageCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        cell.PlayVideoBlock = ^(NSString * _Nonnull videoUrl) {
+            NSLog(@"%@",videoUrl);
+            PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+            playVC.url = videoUrl;
+            playVC.hidesBottomBarWhenPushed = YES;
+            [self.navigationController pushViewController:playVC animated:YES];
+        };
+        return cell;
+    }else if (indexPath.row == 9) {
+        PBRadioTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:radioCellID forIndexPath:indexPath];
+        PBExamineAddModel *examineAddModel = self.dataListM[indexPath.row];
+        cell.examineAddModel = examineAddModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else {
+        return nil;
+    }
+}
+
+- (void)getCategoryArrayByBmGuidWithGuid:(NSString *)guid {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetCategoryArrayByBmGuidWithGuid:guid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [PBKeyWindow addSubview:self.componentHierarchyView];
+            self.componentHierarchyView.dataArr = networkModel.Data;
+            [self.componentHierarchyView show];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+        
+    }];
+}
+#pragma mark - 检查人修改
+- (void)ModifyExamineTextDataWith:(NSMutableDictionary *)dictM andIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] modifyMissionMemberWithExamineID:self.examineListModel.ExamineID andOrganizeId:self.projectModel.organizeid andData:dictM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [YJProgressHUD showMessage:@"修改成功" inView:self.view];
+            [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - 检查人修改严重等级
+- (void)presentSeveritylevelWithIndexPath:(NSIndexPath *)indexPath andExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"请选择严重等级" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"一般" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self ModifySeveritylevelWithIndexPath:indexPath andLevel:@"一般" andExamineAddModel:examineAddModel];
+    }];
+    UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"严重" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self ModifySeveritylevelWithIndexPath:indexPath andLevel:@"严重" andExamineAddModel:examineAddModel];
+    }];
+    UIAlertAction *action3 = [UIAlertAction actionWithTitle:@"非常严重" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [self ModifySeveritylevelWithIndexPath:indexPath andLevel:@"非常严重" andExamineAddModel:examineAddModel];
+    }];
+    UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertVC addAction:action1];
+    [alertVC addAction:action2];
+    [alertVC addAction:action3];
+    [alertVC addAction:cancel];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+- (void)ModifySeveritylevelWithIndexPath:(NSIndexPath *)indexPath andLevel:(NSString *)level andExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] ModifySeveritylevelWithExamineID:self.examineListModel.ExamineID andOrganizeId:self.projectModel.organizeid andSeveritylevel:level andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [YJProgressHUD showMessage:@"修改成功" inView:self.view];
+            examineAddModel.dataDict = @{
+                @"ec_name":level
+            };
+            [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setIsAddExamine:(BOOL)isAddExamine {
+    _isAddExamine = isAddExamine;
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+}
+
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+
+- (void)setStateArr:(NSArray *)stateArr {
+    _stateArr = stateArr;
+}
+- (void)setLevelArr:(NSArray *)levelArr {
+    _levelArr = levelArr;
+}
+- (PBEditPersonView *)editPersonView {
+    if (_editPersonView == nil) {
+        _editPersonView = [[PBEditPersonView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _editPersonView.visualViewHeight = 468.f + bottomH;
+        _editPersonView.isExamineChoose = YES;
+    }
+    return _editPersonView;
+}
+- (PBComponentHierarchyView *)componentHierarchyView {
+    if (_componentHierarchyView == nil) {
+        _componentHierarchyView = [[PBComponentHierarchyView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _componentHierarchyView.visualViewHeight = 214.f + bottomH;
+    }
+    return _componentHierarchyView;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.h
new file mode 100644
index 0000000..f51ed65
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.h
@@ -0,0 +1,14 @@
+//
+//  PBExamineListViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBExamineBaseController.h"
+
+
+@interface PBExamineListViewController : PBExamineBaseController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.m
new file mode 100644
index 0000000..57b1ca6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineListViewController.m
@@ -0,0 +1,412 @@
+//
+//  PBExamineListViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBExamineListViewController.h"
+#import "PBDropdownMenu.h"
+#import "PBExamineSearchController.h"
+#import "PBNavigationController.h"
+#import "PBAddExamineViewController.h"
+#import "PBIssueNavModel.h"
+#import "PBScreeningView.h"
+#import "PBRetrieveView1.h"
+@interface PBExamineListViewController ()<PBDropdownMenuDelegate, ExamineMenuViewDelegate>
+@property (nonatomic, assign) BOOL isLoadType;
+@property (nonatomic, weak) PBScreeningView *screeningView;
+@property (nonatomic, strong) PBRetrieveView1 *menu;
+@property (nonatomic, strong) NSArray *btnArr;
+@property (nonatomic, strong) NSArray *labelArr;
+@property (nonatomic, strong) NSArray *imageArr;
+@end
+
+@implementation PBExamineListViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+//    NSDictionary *dic = @{NSForegroundColorAttributeName : [UIColor whiteColor],
+//                              NSFontAttributeName : [UIFont systemFontOfSize:18 weight:UIFontWeightMedium]};
+//    if (@available(iOS 15.0, *)) {
+//        UINavigationBarAppearance *barApp = [UINavigationBarAppearance new];
+//        barApp.backgroundColor = PBColor(35, 36, 41);
+//        barApp.shadowColor = [UIColor blackColor];
+//        barApp.titleTextAttributes = dic;
+//        self.navigationController.navigationBar.scrollEdgeAppearance = barApp;
+//        self.navigationController.navigationBar.standardAppearance = barApp;
+//    }else {
+//        self.navigationController.navigationBar.barTintColor = PBColor(35, 36, 41);
+//        self.navigationController.navigationBar.titleTextAttributes = dic;
+//        [self.navigationController.navigationBar setShadowImage:[UIImage new]];
+//        [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
+//
+//    }
+//    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
+    
+    
+    
+    
+//    //导航栏背景颜色
+//    [self.navigationController.navigationBar setBarTintColor:PBColor(35, 36, 41)];
+//    // 去掉导航条下边的线
+//    self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
+//    //返回按钮颜色
+//    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
+//    for (UIBarButtonItem *item in self.navigationItem.leftBarButtonItems) {
+//        [item setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]} forState:UIControlStateNormal];
+//    }
+//    for (UIBarButtonItem *item in self.navigationItem.rightBarButtonItems) {
+//        [item setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]} forState:UIControlStateNormal];
+//    }
+//    [item setTitleTextAttributes:@{NSForegroundColorAttributeName: IndicatedColor} forState:UIControlStateHighlighted];
+//    [item setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor lightGrayColor]} forState:UIControlStateDisabled];
+   
+    //标题颜色
+//    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor],NSFontAttributeName: [UIFont boldSystemFontOfSize:16]}];
+    
+    
+    
+    
+    
+    
+    
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+
+    [self.navigationController setNavigationBarHidden:YES animated:animated];
+    
+    if (self.isLoadType) {
+        [self.tableView.mj_header beginRefreshing];
+    }
+}
+- (void)viewWillDisappear:(BOOL)animated {
+    [self.navigationController setNavigationBarHidden:NO animated:animated];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupTop];
+    [self setupSortingView];
+    [self loadtype];
+    [self addExamineBtn];
+    [self setupScreeningV];
+}
+- (void)setupTop {
+    CGFloat topH = 109;
+    CGFloat searchTop = 23.f;
+    if (IS_IPHONE_X) {
+        topH = 109 + 24;
+        searchTop = 23 + 24;
+    }
+    [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(topH);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    UIView *topView = [[UIView alloc] init];
+    topView.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:topView];
+    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.height.equalTo(@109);
+    }];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Examine_search_bd"]];
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(searchAction)];
+    imageV.userInteractionEnabled = YES;
+    [imageV addGestureRecognizer:tap];
+    [self.view addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(searchTop);
+        make.size.mas_equalTo(CGSizeMake(257, 36));
+        make.centerX.equalTo(self.view);
+    }];
+    UIButton *leftBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"arrow_left"]];
+    [leftBtn addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:leftBtn];
+    [leftBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.left.equalTo(self.view).offset(15);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UIButton *rightBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"set"]];
+    [rightBtn addTarget:self action:@selector(setAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:rightBtn];
+    [rightBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.right.equalTo(self.view).offset(-15);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+}
+- (void)setupSortingView {
+    CGFloat btnW = self.view.width / 3;
+    UIButton *btn = [[UIButton alloc] init];
+    btn.tag = 600 + 0;
+    [btn addTarget:self action:@selector(sortingAction:) forControlEvents:UIControlEventTouchUpInside];
+    btn.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:btn];
+    CGFloat btnTop = 69;
+    if (IS_IPHONE_X) {
+        btnTop = 69 + 24;
+    }
+    [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.view);
+        make.top.equalTo(self.view).offset(btnTop);
+        make.size.mas_equalTo(CGSizeMake(btnW, 40));
+    }];
+    UILabel *btnTitleL = [UILabel z_labelWithText:@"创建时间" Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [btn addSubview:btnTitleL];
+    [btnTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(64, 18));
+        make.left.equalTo(btn).offset(30);
+        make.centerY.equalTo(btn);
+    }];
+    UIImageView *btnIamgeV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"positiveSequence_nor"]];
+    [btn addSubview:btnIamgeV];
+    [btnIamgeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(14, 14));
+        make.centerY.equalTo(btn);
+        make.left.equalTo(btnTitleL.mas_right).offset(4);
+    }];
+    
+    UIButton *btn1 = [[UIButton alloc] init];
+    btn1.tag = 600 + 1;
+    [btn1 addTarget:self action:@selector(sortingAction:) forControlEvents:UIControlEventTouchUpInside];
+    btn1.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:btn1];
+    [btn1 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(btn);
+        make.left.equalTo(btn.mas_right);
+        make.size.mas_equalTo(CGSizeMake(btnW, 40));
+    }];
+    UILabel *btn1TitleL = [UILabel z_labelWithText:@"截止时间" Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [btn1 addSubview:btn1TitleL];
+    [btn1TitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(64, 18));
+        make.left.equalTo(btn1).offset(30);
+        make.centerY.equalTo(btn1);
+    }];
+    UIImageView *btn1IamgeV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"positiveSequence_nor"]];
+    [btn1 addSubview:btn1IamgeV];
+    [btn1IamgeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(14, 14));
+        make.centerY.equalTo(btn1);
+        make.left.equalTo(btn1TitleL.mas_right).offset(4);
+    }];
+ 
+    UIButton *btn2 = [[UIButton alloc] init];
+    btn2.tag = 600 + 2;
+    [btn2 addTarget:self action:@selector(sortingAction:) forControlEvents:UIControlEventTouchUpInside];
+    btn2.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:btn2];
+    [btn2 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(btn);
+        make.left.equalTo(btn1.mas_right);
+        make.size.mas_equalTo(CGSizeMake(btnW, 40));
+    }];
+    UILabel *btn2TitleL = [UILabel z_labelWithText:@"状态" Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [btn2 addSubview:btn2TitleL];
+    [btn2TitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(34, 18));
+        make.left.equalTo(btn2).offset(45);
+        make.centerY.equalTo(btn2);
+    }];
+    UIImageView *btn2IamgeV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"positiveSequence_nor"]];
+    [btn2 addSubview:btn2IamgeV];
+    [btn2IamgeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(14, 14));
+        make.centerY.equalTo(btn2);
+        make.left.equalTo(btn2TitleL.mas_right).offset(4);
+    }];
+    self.btnArr = @[btn, btn1, btn2];
+    self.labelArr = @[btnTitleL, btn1TitleL, btn2TitleL];
+    self.imageArr = @[btnIamgeV, btn1IamgeV, btn2IamgeV];
+    self.sortingSelect = 1;
+    self.sortingAse = 0;
+    btn1TitleL.textColor = PBColor(0, 122, 255);
+    btn1IamgeV.image = [UIImage imageNamed:@"positiveSequence_select"];
+}
+- (void)sortingAction:(UIButton *)btn {
+    NSInteger index = btn.tag - 600;
+    if (self.sortingSelect == index) {
+        UIImageView *imageV = self.imageArr[index];
+        if (self.sortingAse == 0) {
+            self.sortingAse = 1;
+            imageV.image = [UIImage imageNamed:@"arrow_select_top"];
+        }else {
+            self.sortingAse = 0;
+            imageV.image = [UIImage imageNamed:@"positiveSequence_select"];
+        }
+    }else {
+        self.sortingSelect = index;
+        self.sortingAse = 0;
+        for (NSInteger i = 0; i < self.btnArr.count; i++) {
+            UILabel *label = self.labelArr[i];
+            UIImageView *imageV = self.imageArr[i];
+            if (i == index) {
+                label.textColor = PBColor(0, 122, 255);
+                imageV.image = [UIImage imageNamed:@"positiveSequence_select"];
+            }else {
+                label.textColor = PBColor(97, 111, 125);
+                imageV.image = [UIImage imageNamed:@"positiveSequence_nor"];
+            }
+        }
+    }
+    [self.tableView.mj_header beginRefreshing];
+}
+- (void)addExamineBtn {
+    UIButton *addExamineBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"new_btn_background"]];
+    [addExamineBtn addTarget:self action:@selector(addExamineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:addExamineBtn];
+    [addExamineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(60, 60));
+        make.right.equalTo(self.view).offset(-20);
+        make.bottom.equalTo(self.view).offset(-10);
+    }];
+}
+- (void)setupScreeningV {
+    PBScreeningView *screeningView = [[PBScreeningView alloc]initWithFrame:CGRectMake(MainScreenWidth * 0.18, 0, MainScreenWidth * 0.82, MainScreenHeight)];
+    screeningView.customDelegate = self;
+    screeningView.determineBlock = ^(NSString *related_guid, NSString *level_guid, NSString *state_guid, NSString *type_guid) {
+        self.relatedId = related_guid;
+        self.levelId = level_guid;
+        self.stateId = state_guid;
+        self.typeId = type_guid;
+        [self.menu hidenWithAnimation];
+        [self.tableView.mj_header beginRefreshing];
+        
+    };
+    self.screeningView = screeningView;
+    self.menu = [[PBRetrieveView1 alloc]initWithDependencyView:self.view MenuView:screeningView isShowCoverView:YES];
+}
+- (void)loadtype {
+    self.levelArr = @[@{@"aedt_name":@"非常严重"}, @{@"aedt_name":@"严重"}, @{@"aedt_name":@"一般"}, @{@"aedt_name":@"无"},];
+    self.stateArr = @[@{@"aedt_name":@"整改"}, @{@"aedt_name":@"合格"}];
+    [[PBNetworkTools sharedTools] RequestExam_GetExamTypesWithOrganizeId:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkMdoel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkMdoel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.typeArr = networkMdoel.Data;
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+            issueNavModel.ItemDetailId = @"";
+            issueNavModel.ItemName = @"类别";
+            [arrM addObject:issueNavModel];
+            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
+            PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+            issueNavModel1.ItemDetailId = @"";
+            issueNavModel1.ItemName = @"全部";
+            [typeArrM addObject:issueNavModel1];
+            for (NSDictionary *obj in self.typeArr) {
+                PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+                issueNavModel.ItemDetailId = [obj valueForKey:@"aedt_guid"];
+                issueNavModel.ItemName = [obj valueForKey:@"aedt_name"];
+                [arrM addObject:issueNavModel];
+                [typeArrM addObject:issueNavModel];
+            }
+            self.screeningView.typeArr = typeArrM.copy;
+//            [self.dropdownMenuArrM insertObject:arrM.copy atIndex:1];
+//            [self setupDropdownMenuView];
+            self.isLoadType = YES;
+            [self.tableView.mj_header beginRefreshing];
+        }else {
+            [YJProgressHUD showMessage:networkMdoel.Msg inView:self.view];
+        }
+    }];
+}
+
+
+- (void)setAction {
+    [self.menu show];
+}
+- (void)backItemAction {
+//    [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+//- (void)addExamine {
+//    PBAddExamineController *addExamineVC = [[PBAddExamineController alloc] init];
+//    addExamineVC.projectModel = self.projectModel;
+//    addExamineVC.isAddExamine = YES;
+//    addExamineVC.typeArr = self.typeArr;
+//    addExamineVC.levelArr = self.levelArr;
+//    PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:addExamineVC];
+//    nav.modalPresentationStyle = UIModalPresentationFullScreen;
+//    [self presentViewController:nav animated:YES completion:nil];
+//}
+- (void)addExamineBtnAction {
+    PBAddExamineViewController *addExamineVC = [[PBAddExamineViewController alloc] init];
+    addExamineVC.projectModel = self.projectModel;
+    addExamineVC.typeArr = self.typeArr;
+    addExamineVC.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:addExamineVC animated:YES];
+}
+//- (void)setupDropdownMenuView {
+//    float dropdownMenuW = MainScreenWidth / 4;
+//    PBDropdownMenu *dropdownMenu = [[PBDropdownMenu alloc] initWithFrame:CGRectMake(0, 0, self.dropdownMenuArrM.count * dropdownMenuW, 40) andArr:self.dropdownMenuArrM];
+//    dropdownMenu.delegate = self;
+//    [self.view addSubview:dropdownMenu];
+//
+////    UIButton *searchBtn = [[UIButton alloc] init];
+////    [searchBtn setImage:[UIImage imageNamed:@"Doc_list_searchItem"] forState:UIControlStateNormal];
+////    searchBtn.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+////    searchBtn.frame = CGRectMake(dropdownMenuW * self.dropdownMenuArrM.count, 0, dropdownMenuW, 40);
+////    [searchBtn addTarget:self action:@selector(searchAction)  forControlEvents:UIControlEventTouchUpInside];
+////    [self.view addSubview:searchBtn];
+//}
+- (void)searchAction {
+    PBExamineSearchController *searchVC = [[PBExamineSearchController alloc] init];
+    searchVC.projectModel = self.projectModel;
+    searchVC.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:searchVC animated:YES];
+}
+//#pragma mark - PBDropdownMenuDelegate
+//- (void)dropdownMenu:(UIButton *)clickBtn selectedCellNumber:(NSInteger)number {
+//    NSInteger index = clickBtn.tag -100;
+//    switch (index) {
+//        case 0:{
+//            self.resultSelectIndex = number;
+//            [self.tableView.mj_header beginRefreshing];
+//            break;
+//        }
+//        case 1:{
+//            self.typeSelectIndex = number;
+//            [self.tableView.mj_header beginRefreshing];
+//            break;
+//        }
+//        case 2:{
+//            self.levelSelectIndex = number;
+//            [self.tableView.mj_header beginRefreshing];
+//            break;
+//        }
+//        case 3:{
+//            self.relatedSelectIndex = number;
+//            [self.tableView.mj_header beginRefreshing];
+//            break;
+//        }
+//        default:
+//            break;
+//    }
+//}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.h
new file mode 100644
index 0000000..551ab5c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.h
@@ -0,0 +1,17 @@
+//
+//  PBExamineSearchController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/28.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineBaseController.h"
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBExamineSearchController : PBExamineBaseController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.m
new file mode 100644
index 0000000..ecacb1f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBExamineSearchController.m
@@ -0,0 +1,127 @@
+//
+//  PBExamineSearchController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/28.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineSearchController.h"
+
+@interface PBExamineSearchController ()<UISearchBarDelegate>
+@property (nonatomic, strong) UISearchBar *searchBar;
+@property (nonatomic, weak) UIButton *cancelBtn;
+@end
+
+@implementation PBExamineSearchController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self.navigationController setNavigationBarHidden:YES animated:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+}
+- (void)viewWillDisappear:(BOOL)animated {
+    [self.navigationController setNavigationBarHidden:NO animated:animated];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+}
+- (void)setupNav {
+    self.view.backgroundColor = [UIColor whiteColor];
+    UIView *topV = [[UIView alloc] init];
+    topV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:topV];
+
+    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"whileNav"] forBarMetrics:UIBarMetricsDefault];
+    self.searchBar = [[UISearchBar alloc] init];
+    self.searchBar.placeholder = @"请输入任务名称";
+    self.searchBar.delegate = self;
+    self.searchBar.returnKeyType = UIReturnKeySearch;
+    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
+    [topV addSubview:self.searchBar];
+
+    [self.searchBar setShowsCancelButton:YES];
+    UIButton *cancelBtn = [self.searchBar valueForKey:@"cancelButton"];
+    self.cancelBtn = cancelBtn;
+    
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(244, 245, 246);
+    [topV addSubview:linV];
+    CGFloat topH = 64;
+    CGFloat searchTop = 23.f;
+    if (IS_IPHONE_X) {
+        topH = 64 + 24;
+        searchTop = 23 + 24;
+    }
+    [topV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.height.equalTo(@(topH));
+    }];
+    [self.searchBar mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topV).offset(searchTop);
+        make.left.equalTo(topV).offset(20);
+        make.right.equalTo(topV).offset(-20);
+        make.height.equalTo(@40);
+    }];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.equalTo(topV);
+        make.height.equalTo(@1);
+    }];
+    [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(topH);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    self.tableView.bounces = NO;
+}
+
+- (void)cancelAction {
+    [self.searchBar resignFirstResponder];
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+#pragma mark - UISearchBarDelegate
+- (void)searchBarCancelButtonClicked:(UISearchBar*)searchBar {
+    [self.searchBar resignFirstResponder];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    NSString *search = [searchBar.text stringByReplacingOccurrencesOfString:@" " withString:@""];
+    if ([search isEqualToString:@""]){
+        return;
+    }
+    [self.searchBar resignFirstResponder];
+    self.searchText = searchBar.text;
+    [self.tableView.mj_header beginRefreshing];
+}
+
+//- (void)loadIssueListWithTitle:(NSString *)title {
+//    if ([title isEqualToString:@""]) {
+//        self.examineArrM = nil;
+//        [self.tableView reloadData];
+//        return;
+//    }
+//    self.searchText = title;
+//    [self.tableView.mj_header beginRefreshing];
+//}
+
+//- (UIButton *)maskBtn {
+//    if (_maskBtn == nil) {
+//        _maskBtn = [[UIButton alloc] initWithFrame:self.view.bounds];
+//        _maskBtn.backgroundColor = [UIColor colorWithWhite:0 alpha:0.2];
+//        [_maskBtn addTarget:self action:@selector(cancelMaskBtn) forControlEvents:UIControlEventTouchUpInside];
+//    }
+//    return _maskBtn;
+//}
+- (void)cancelMaskBtn {
+    [self.searchBar resignFirstResponder];
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.h
new file mode 100644
index 0000000..9205956
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.h
@@ -0,0 +1,16 @@
+//
+//  PBItemizedViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/21.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBItemizedViewController : UIViewController
+@property(nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSArray<PBExamineAddModel *> *examineArr;
+@property (nonatomic, strong) NSDictionary *divisionDict;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.m
new file mode 100644
index 0000000..3b7d25b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBItemizedViewController.m
@@ -0,0 +1,140 @@
+//
+//  PBItemizedViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/21.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBItemizedViewController.h"
+#import "PBTestViewController.h"
+#import "PBExamineAddModel.h"
+
+static NSString *const cellID = @"cellID";
+@interface PBItemizedViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+
+@end
+
+@implementation PBItemizedViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.title = @"分项工程";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"请选择分项工程" Color:DescColor isBold:NO Font:12];
+    titleL.backgroundColor = PBColor(242, 242, 242);
+    [self.view addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.equalTo(self.view);
+        make.left.equalTo(self.view).offset(16);
+        make.height.equalTo(@24);
+    }];
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 42;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(24);
+        make.right.bottom.equalTo(self.view);
+        make.left.equalTo(self.view).offset(16);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _dataList.count + 1;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    if (indexPath.row == 0) {
+        cell.textLabel.text = @"无分项工程";
+    }else {
+        NSDictionary *dict = self.dataList[indexPath.row - 1];
+        cell.textLabel.text = [dict valueForKey:@"name"];
+    }
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == 0) {
+        [self setupData];
+        [PBNoteCenter postNotificationName:PBNoteCenterUpdateDivision object:nil];
+        [self.navigationController popToRootViewControllerAnimated:YES];
+    }else {
+        PBTestViewController *testVC = [[PBTestViewController alloc] init];
+        NSArray *arr = [self.dataList[indexPath.row - 1] valueForKey:@"children"];
+        for (NSDictionary *dict in arr) {
+            NSString *title = [dict valueForKey:@"title"];
+            if ([title isEqualToString:@"检验批"]) {
+                testVC.dataList = [dict valueForKey:@"items"];
+            }
+        }
+        testVC.examineArr = self.examineArr;
+        testVC.divisionDict = self.divisionDict;
+        testVC.itemizedDict = self.self.dataList[indexPath.row - 1];
+        [self.navigationController pushViewController:testVC animated:YES];
+    }
+}
+
+- (void)setupData {
+    NSDictionary *dict1 = @{
+                            @"name" : @"<无分项工程>",
+                            @"value" : @"",
+                            @"children" : @[]
+                            };
+    NSDictionary *dict2 = @{
+                            @"name" : @"<无检验批>",
+                            @"value" : @"",
+                            @"children" : @[]
+                            };
+    self.examineArr[0].dataDict = self.divisionDict;
+    self.examineArr[1].dataDict = dict1;
+    self.examineArr[2].dataDict = dict2;
+    
+}
+
+- (void)setDataList:(NSArray *)dataList {
+    _dataList = dataList;
+}
+
+- (void)setExamineArr:(NSArray<PBExamineAddModel *> *)examineArr {
+    _examineArr = examineArr;
+}
+- (void)setDivisionDict:(NSDictionary *)divisionDict {
+    _divisionDict = divisionDict;
+}
+
+
+
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.h
new file mode 100644
index 0000000..dc79ac7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.h
@@ -0,0 +1,19 @@
+//
+//  PBPersonListViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/5.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPersonListViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, assign) BOOL isMultiSelect;
+@property (nonatomic, strong) NSMutableArray *selectList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.m
new file mode 100644
index 0000000..461801e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPersonListViewController.m
@@ -0,0 +1,399 @@
+//
+//  PBPersonListViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/5.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBPersonListViewController.h"
+#import "PBPersonVCTableViewCell.h"
+#import "PBMultiSelectPersonCell.h"
+#import "PBProjectModel.h"
+#import "PBRoleViewController.h"
+#import "PBUserModel.h"
+#import "PBUserCollectionViewCell.h"
+#import "PBSelectedPersonController.h"
+static NSString *const cellID = @"cellID";
+static NSString *const MScellID = @"MScellID";
+static NSString *collectionCell = @"collectionCell";
+@interface PBPersonListViewController ()<UITableViewDelegate, UITableViewDataSource, UICollectionViewDelegate, UICollectionViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, weak) UIView *bottomV;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, weak) UIButton *determineBtn;
+@property (nonatomic, weak) UIButton *arrowBtn;
+@end
+
+@implementation PBPersonListViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    if (!self.isMultiSelect) {
+        return;
+    }
+    NSMutableArray *list = [[NSMutableArray alloc] init];
+    for (NSDictionary *obj in self.dataList) {
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        for (PBUserModel *model in [obj valueForKey:@"Users"]) {
+            for (PBUserModel *selectModel in self.selectList) {
+                if ([model.UserId isEqualToString:selectModel.UserId]) {
+                    model.isSelect = YES;
+                    break;
+                }else{
+                    model.isSelect = NO;
+                }
+            }
+            [arrM addObject:model];
+        }
+        NSDictionary *dict = @{@"FirstLetter":[obj valueForKey:@"FirstLetter"], @"Users":arrM.copy};
+        [list addObject:dict];
+    }
+    self.dataList = list;
+    [self.tableView reloadData];
+    if (self.selectList.count > 0) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.collectionView.hidden = NO;
+        self.determineBtn.hidden = NO;
+        [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+        [self.collectionView reloadData];
+    }else {
+        self.bottomV.hidden = YES;
+        self.arrowBtn.hidden = YES;
+        self.collectionView.hidden = YES;
+        self.determineBtn.hidden = YES;
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self loadData];
+}
+- (void)setupNav {
+    self.title = @"请指定人员";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 56;
+    self.tableView.sectionIndexColor = PBColor(97, 111, 125);
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    };
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBPersonVCTableViewCell class] forCellReuseIdentifier:cellID];
+    [self.tableView registerClass:[PBMultiSelectPersonCell class] forCellReuseIdentifier:MScellID];
+    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 56, 0);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    self.tableView.tableHeaderView = [self setupTableHearderView];
+    
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.bottom.right.equalTo(self.tableView);
+        make.height.equalTo(@54);
+    }];
+    UIButton *arrowBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"arrow_top"]];
+    [arrowBtn addTarget:self action:@selector(arrowTopActon) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:arrowBtn];
+    [arrowBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(15);
+        make.left.equalTo(bottomV).offset(12);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(34, 34);
+    layout.minimumLineSpacing = 10;
+    layout.minimumInteritemSpacing = 0;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBUserCollectionViewCell class] forCellWithReuseIdentifier:collectionCell];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).mas_offset(10);
+        make.left.equalTo(bottomV).offset(46);
+        make.right.equalTo(bottomV).offset(-120);
+        make.height.equalTo(@34);
+    }];
+    UIButton *determineBtn = [UIButton z_textButton:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] boldFontSize:14 normalColor:[UIColor whiteColor]];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    determineBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.view addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(9);
+        make.right.equalTo(bottomV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(89, 34));
+    }];
+    [determineBtn circleViewWithRadius:6];
+    self.arrowBtn = arrowBtn;
+    self.bottomV = bottomV;
+    self.determineBtn = determineBtn;
+    if (self.selectList.count > 0 && self.isMultiSelect) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.collectionView.hidden = NO;
+        self.determineBtn.hidden = NO;
+        [self.collectionView reloadData];
+    }else {
+        self.bottomV.hidden = YES;
+        self.arrowBtn.hidden = YES;
+        self.collectionView.hidden = YES;
+        self.determineBtn.hidden = YES;
+    }
+}
+- (void)determineBtnAction {
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdatePerson object:self.selectList.copy];
+    [self.navigationController popViewControllerAnimated:YES];  
+}
+- (UIView *)setupTableHearderView {
+//    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 104)];
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 60)];
+    bgV.backgroundColor = PBColor(244, 245, 246);
+//    UIButton *searchBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_search_background"]];
+//    [searchBtn addTarget:self action:@selector(searchAction) forControlEvents:UIControlEventTouchUpInside];
+//    [bgV addSubview:searchBtn];
+//    [searchBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(bgV).offset(8);
+//        make.left.equalTo(bgV).offset(10);
+//        make.right.equalTo(bgV).offset(-10);
+//        make.height.equalTo(@36);
+//    }];
+    UIButton *typeBtn = [[UIButton alloc] init];
+    [typeBtn addTarget:self action:@selector(typeAction) forControlEvents:UIControlEventTouchUpInside];
+    typeBtn.backgroundColor = [UIColor whiteColor];
+    [bgV addSubview:typeBtn];
+    [typeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(8);
+        make.left.right.equalTo(bgV);
+        make.height.equalTo(@52);
+    }];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"grouping_person"]];
+    [typeBtn addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeBtn).offset(14);
+        make.left.equalTo(typeBtn).offset(12);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"按角色选择" Color:PBColor(97, 111, 125) isBold:YES Font:14];
+    [typeBtn addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(typeBtn);
+        make.left.equalTo(imageV.mas_right).offset(10);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *rightV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"examine_arrow"]];
+    [typeBtn addSubview:rightV];
+    [rightV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(typeBtn);
+        make.right.equalTo(typeBtn).offset(-27);
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+    }];
+    return bgV;
+}
+- (void)searchAction {
+    
+    
+}
+- (void)arrowTopActon {
+    PBSelectedPersonController *selectPersonVC = [[PBSelectedPersonController alloc] init];
+    selectPersonVC.selectList = self.selectList;
+    [self.navigationController pushViewController:selectPersonVC animated:YES];
+}
+- (void)typeAction {
+    PBRoleViewController *roleVC = [[PBRoleViewController alloc] init];
+    roleVC.projectModel = self.projectModel;
+    roleVC.isMultiSelect = self.isMultiSelect;
+    roleVC.selectList = self.selectList;
+    [self.navigationController pushViewController:roleVC animated:YES];  
+}
+- (void)loadData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetProjectUserSortByLetterRoleId:@"" andOrganizeID:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载成员信息失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            NSArray *arr = [networkModel.Data valueForKey:@"List"];
+            for (NSDictionary *obj in arr) {
+                NSMutableArray *arrM = [[NSMutableArray alloc] init];
+                for (NSDictionary *user in [obj valueForKey:@"Users"]) {
+                    PBUserModel *model = [PBUserModel yy_modelWithDictionary:user];
+                    for (PBUserModel *selectModel in self.selectList) {
+                        if ([model.UserId isEqualToString:selectModel.UserId]) {
+                            model.isSelect = YES;
+                        }
+                    }
+                    [arrM addObject:model];
+                }
+                NSDictionary *dict = @{@"FirstLetter":[obj valueForKey:@"FirstLetter"], @"Users":arrM.copy};
+                [self.dataList addObject:dict];
+            }
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - UITableViewDelegate, UITableViewDataSource
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return self.dataList.count;
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSDictionary *dict = self.dataList[section];
+    NSArray *arr = [dict valueForKey:@"Users"];
+    return arr.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.isMultiSelect) {
+        PBMultiSelectPersonCell *cell = [tableView dequeueReusableCellWithIdentifier:MScellID forIndexPath:indexPath];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        NSDictionary *dict = self.dataList[indexPath.section];
+        NSArray *arr = [dict valueForKey:@"Users"];
+        cell.userModel = arr[indexPath.row];
+        return cell;
+    }else {
+        PBPersonVCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        NSDictionary *dict = self.dataList[indexPath.section];
+        NSArray *arr = [dict valueForKey:@"Users"];
+        cell.userModel = arr[indexPath.row];
+        return cell;
+    }
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 16;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+#pragma mark 右侧索引
+- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (NSDictionary *dict in self.dataList) {
+        [arrM addObject:[dict valueForKey:@"FirstLetter"]];
+    };
+    return arrM.copy;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    UIView *bgView = [[UIView alloc]init];
+    bgView.backgroundColor = PBColor(244, 245, 246);
+    NSDictionary *dict = self.dataList[section];
+    UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"FirstLetter"] Color:PBColor(97, 111, 125) isBold:YES Font:12];
+    [bgView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(bgView);
+        make.left.equalTo(bgView).offset(20);
+    }];
+    return bgView;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.dataList[indexPath.section];
+    NSArray *arr = [dict valueForKey:@"Users"];
+    PBUserModel *userModel = arr[indexPath.row];
+    if (self.isMultiSelect) {
+        if (userModel.isSelect) {
+            userModel.isSelect = NO;
+            for (PBUserModel *model in self.selectList) {
+                if ([model.UserId isEqualToString:userModel.UserId]) {
+                    [self.selectList removeObject:model];
+                    break;
+                }
+            }
+        }else {
+            userModel.isSelect = YES;
+            [self.selectList addObject:userModel];
+        }
+        if (self.selectList.count > 0) {
+            self.bottomV.hidden = NO;
+            self.arrowBtn.hidden = NO;
+            self.collectionView.hidden = NO;
+            self.determineBtn.hidden = NO;
+            [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+        }else {
+            self.bottomV.hidden = YES;
+            self.arrowBtn.hidden = YES;
+            self.collectionView.hidden = YES;
+            self.determineBtn.hidden = YES;
+        }
+        [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        [self.collectionView reloadData];
+    }else {
+        [PBNoteCenter postNotificationName:PBNoteCenterUpdatePerson object:@[userModel]];
+        [self.navigationController popViewControllerAnimated:YES];
+    }
+}
+#pragma mark - UICollectionViewDelegate, UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    return self.selectList.count;
+}
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBUserCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCell forIndexPath:indexPath];
+    cell.userModel = self.selectList[indexPath.item];
+    return cell;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setIsMultiSelect:(BOOL)isMultiSelect {
+    _isMultiSelect = isMultiSelect;
+}
+- (NSMutableArray *)dataList {
+    if (_dataList == nil) {
+        _dataList = [[NSMutableArray alloc] init];
+    }
+    return _dataList;
+}
+- (void)setSelectList:(NSMutableArray *)selectList {
+    _selectList = selectList;
+    if (_selectList == nil) {
+        _selectList = [[NSMutableArray alloc] init];
+    }
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.h
new file mode 100644
index 0000000..46fa452
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBPositioningTypeViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/17.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBModelsModel;
+@class PBProjectModel;
+@class PBExamineAddModel;
+@interface PBPositioningTypeViewController : UIViewController
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.m
new file mode 100644
index 0000000..f6b407a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBPositioningTypeViewController.m
@@ -0,0 +1,222 @@
+//
+//  PBPositioningTypeViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/17.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBPositioningTypeViewController.h"
+#import "PBModelsModel.h"
+#import "PBViewPointModel.h"
+#import "PBPromptView.h"
+#import "PBTextTableViewCell.h"
+#import "PBImageTableViewCell.h"
+#import "PBDrawingsModel.h"
+#import "PBEViewPointDetailsController.h"
+#import "PBEDrawingsShowController.h"
+#import "PBExamineAddModel.h"
+
+static NSString *const TextCellID = @"TextCellID";
+static NSString *const ImageCellID = @"ImageCellID";
+
+@interface PBPositioningTypeViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, assign) BOOL isDraw;
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) UITableView *tableView;
+@end
+
+@implementation PBPositioningTypeViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self loadViewPoint];
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    NSArray * _titles = @[@"模型定位", @"图纸定位"];
+    UISegmentedControl * segmentedControl = [[UISegmentedControl alloc] initWithItems:_titles];
+    segmentedControl.size = CGSizeMake(200, 32);
+    segmentedControl.selectedSegmentIndex = 0;
+    segmentedControl.tintColor = TitleColor;
+    [segmentedControl addTarget:self action:@selector(segmentValueChanged:) forControlEvents:UIControlEventValueChanged];
+    self.navigationItem.titleView = segmentedControl;
+    
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 70;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBTextTableViewCell class] forCellReuseIdentifier:TextCellID];
+    [self.tableView registerClass:[PBImageTableViewCell class] forCellReuseIdentifier:ImageCellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.equalTo(self.view);
+    }];
+    [self.view addSubview:self.promptView];
+    [self.promptView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView);
+        make.bottom.left.right.equalTo(self.view);
+    }];
+    self.promptView.hidden = YES;
+}
+- (void)segmentValueChanged:(UISegmentedControl *)segment {
+    switch (segment.selectedSegmentIndex) {
+        case 0:
+        {
+            self.isDraw = NO;
+            [self loadViewPoint];
+            break;
+        }
+        case 1:
+        {
+            self.isDraw = YES;
+            [self loadDraw];
+            break;
+        }
+        default:
+            break;
+    }
+}
+- (void)loadViewPoint {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    self.dataList = nil;
+    [self.tableView reloadData];
+    self.promptView.hidden = YES;
+    [[PBNetworkTools sharedTools] RequestGetAllViewpointWithProjectId:_modelsModel.ProjectID andModelId:_modelsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载视图失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSArray *arr = [NSArray yy_modelArrayWithClass:[PBViewPointModel class] json:str];
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        for (PBViewPointModel *viewPointModel in arr) {
+            if ([viewPointModel.Type isEqualToString:@"0"] || [viewPointModel.Type isEqualToString:@"1"]) {
+                [arrM addObject:viewPointModel];
+            }
+        }
+        self.dataList = arrM;
+        if (self.dataList.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            [self.tableView reloadData];
+        }
+    }];
+    
+}
+
+- (void)loadDraw {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    self.dataList = nil;
+    [self.tableView reloadData];
+    self.promptView.hidden = YES;
+    [[PBNetworkTools sharedTools] RequestGetFIleWithProjectID:_modelsModel.ProjectID andModelID:_modelsModel.ID andVersionNO:@"" andFileType:@"PlanView" andFileName:@"sheets" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        for (NSDictionary *obj in [dict valueForKey:@"sheets"]) {
+            PBDrawingsModel *model = [PBDrawingsModel yy_modelWithDictionary:obj];
+            [arrM addObject:model];
+        }
+        self.dataList = arrM;
+        if (self.dataList.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            [self.tableView reloadData];
+        }
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    id model = self.dataList[indexPath.row];
+    PBImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ImageCellID forIndexPath:indexPath];
+    if (self.isDraw) {
+        cell.drawingsModel = (PBDrawingsModel *)model;
+    }else {
+        cell.viewPointModel = (PBViewPointModel *)model;
+    }
+    return cell;
+}
+
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.isDraw) {
+        // 图纸选择
+        PBDrawingsModel *drawingsModel = self.dataList[indexPath.row];
+        PBEDrawingsShowController *drawingsShowVC = [[PBEDrawingsShowController alloc] init];
+        drawingsShowVC.modelsModel = _modelsModel;
+        drawingsShowVC.drawingsModel = drawingsModel;
+        drawingsShowVC.examineAddModel = self.examineAddModel;
+        [self.navigationController pushViewController:drawingsShowVC animated:YES];
+  
+    }else {
+        // 视点选择
+        PBViewPointModel *viewPointModel = self.dataList[indexPath.row];
+        PBEViewPointDetailsController *viewPointDetailsVC = [[PBEViewPointDetailsController alloc] init];
+        viewPointDetailsVC.updataDefaultViewPointBlock = ^{
+//            [self loadData:self.index];
+        };
+        viewPointDetailsVC.projectModel = _projectModel;
+        viewPointDetailsVC.modelsModel = _modelsModel;
+        viewPointDetailsVC.viewPointModel = viewPointModel;
+        viewPointDetailsVC.isExamineShow = YES;
+        viewPointDetailsVC.examineAddModel = self.examineAddModel;
+        [self.navigationController pushViewController:viewPointDetailsVC animated:YES];
+    }
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] init];
+        _promptView.imageV.image = [UIImage imageNamed:@"Model_category_empty"];
+        _promptView.textL.text = @"暂无数据";
+        _promptView.hidden = YES;
+    }
+    return _promptView;
+}
+
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.h
new file mode 100644
index 0000000..7da365f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.h
@@ -0,0 +1,26 @@
+//
+//  PBRecordViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/31.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+@class PBProjectModel;
+@class PBRoleModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRecordViewController : UIViewController
+@property (nonatomic, strong) NSDictionary *examineDetailDic;
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, assign) RoleType roleType;
+//@property (nonatomic, strong) NSMutableArray *recordListM;
+@property (nonatomic, copy) void(^UpdateRecordCountBlock)(NSDictionary *detailDic);
+@property (nonatomic, copy) void(^ModifyStateBlock)(NSString *flagStr);
+@property (nonatomic, strong) PBRoleModel *roleModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.m
new file mode 100644
index 0000000..e6a8592
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRecordViewController.m
@@ -0,0 +1,314 @@
+//
+//  PBRecordViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/31.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBRecordViewController.h"
+#import "PBExamineListModel.h"
+#import "PBResultModel.h"
+#import "PBRecordModel.h"
+#import "PBRecordTableViewCell.h"
+#import "PBAddRecordViewController.h"
+#import "PBApplyInspectionViewController.h"
+#import "PBRoleModel.h"
+#import "PBVideoPlayViewController.h"
+#import "PBRecordImageTableViewCell.h"
+static NSString *const CellID = @"CellID";
+static NSString *const attachmentCellID = @"CeattachmentCellIDllID";
+@interface PBRecordViewController ()<UIGestureRecognizerDelegate, UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSIndexPath *indexPath;
+@property (nonatomic, assign) BOOL acceptance;
+@property (nonatomic, assign) BOOL rectification;
+@property (nonatomic, strong) NSMutableArray *recordListM;
+@property (nonatomic, weak) UIButton *functionBtn;
+@end
+
+@implementation PBRecordViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    [self setupNav];
+    [self setupUI];
+    [self loadDetail];
+}
+
+- (void)setupNav {
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+#pragma mark - 验收
+- (void)acceptanceAction {
+    PBAddRecordViewController *addRecordVC = [[PBAddRecordViewController alloc] init];
+    addRecordVC.examineListModel = self.examineListModel;
+    addRecordVC.projectModel = self.projectModel;
+    addRecordVC.UpdateRecordListBlock = ^(BOOL isQualified) {
+        [self loadDetail];
+    };
+    [self presentViewController:addRecordVC animated:YES completion:nil];
+}
+#pragma mark - 申请复检
+- (void)apply {
+    PBApplyInspectionViewController *applyInspectionVC = [[PBApplyInspectionViewController alloc] init];
+    applyInspectionVC.examineListModel = self.examineListModel;
+    applyInspectionVC.projectModel = self.projectModel;
+    applyInspectionVC.UpdateRecordListBlock = ^{
+        [self loadDetail];
+    };
+    [self presentViewController:applyInspectionVC animated:YES completion:nil];
+}
+- (void)loadDetail {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetItemWithExamineID:self.examineListModel.ExamineID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载详情失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+           self.examineDetailDic = networkModel.Data;
+           NSString *flagStr = [[self.examineDetailDic valueForKey:@"ExamineResult"] substringToIndex:1];
+           self.recordListM = [[NSMutableArray alloc] init];
+           [self.recordListM addObjectsFromArray:[self.examineDetailDic valueForKey:@"RecordWithAttachments"]];
+           NSDictionary *dict = @{
+                               @"RectificationOperator" : self.examineListModel.bu_examiner_name,
+                               @"RectificationRemark" : [self.examineDetailDic valueForKey:@"ExamineRemark"],
+                               @"CreateDate": self.examineListModel.CreateDate,
+                               @"indexFlag": @"0"
+           };
+            [self.recordListM addObject:dict];
+            self.title = [NSString stringWithFormat:@"全部 %zd 条记录",self.recordListM.count];
+//           if (self.UpdateRecordCountBlock) {
+//               self.UpdateRecordCountBlock(self.examineDetailDic);
+//           }
+            [self.tableView reloadData];
+            [self setBottomBtnWithFlag:flagStr];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)setBottomBtnWithFlag:(NSString *)flagStr {
+    if (self.roleModel.User_InRelation == NO && self.roleModel.User_InPrincipal == NO) {
+        self.functionBtn.hidden = YES;
+        return;
+    }
+    if (self.functionBtn == nil) {
+        UIButton *functionBtn = [[UIButton alloc] init];
+        self.functionBtn = functionBtn;
+        [self.view addSubview:functionBtn];
+        [functionBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.tableView.mas_bottom).offset(7);
+            make.left.equalTo(self.view).offset(10);
+            make.right.equalTo(self.view).offset(-10);
+            make.height.equalTo(@50);
+        }];
+    }
+    if ([flagStr isEqualToString:@"B"]) {
+        //申请复检
+        [self.functionBtn setImage:[UIImage imageNamed:@"apply_reinspection_nor"] forState:UIControlStateNormal];
+        [self.functionBtn setImage:[UIImage imageNamed:@"apply_reinspection_dis-1"] forState:UIControlStateDisabled];
+        [self.functionBtn addTarget:self action:@selector(apply) forControlEvents:UIControlEventTouchUpInside];
+        if (self.roleModel.User_InRelation) {
+            self.functionBtn.enabled = YES;
+        }else {
+            self.functionBtn.enabled = NO;
+        }
+    }else if ([flagStr isEqualToString:@"C"]) {
+        //验收
+        [self.functionBtn setImage:[UIImage imageNamed:@"acceptance_nor"] forState:UIControlStateNormal];
+        [self.functionBtn setImage:[UIImage imageNamed:@"acceptance_dis-1"] forState:UIControlStateDisabled];
+        [self.functionBtn addTarget:self action:@selector(acceptanceAction) forControlEvents:UIControlEventTouchUpInside];
+        if (self.roleModel.User_InPrincipal) {
+            self.functionBtn.enabled = YES;
+        }else {
+            self.functionBtn.enabled = NO;
+        }
+    }else if ([flagStr isEqualToString:@"D"]) {
+        self.functionBtn.hidden = YES;
+    }
+    if (self.ModifyStateBlock) {
+        self.ModifyStateBlock(flagStr);
+    }
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+//    self.view.backgroundColor = [UIColor blackColor];
+//    UIView *bgView = [[UIView alloc] init];
+//    bgView.backgroundColor = PBColor(244, 245, 246);
+//    [self.view addSubview:bgView];
+//    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.view).offset(70);
+//        make.left.right.bottom.equalTo(self.view);
+//    }];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    [self.tableView registerClass:[PBRecordTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.tableView registerClass:[PBRecordImageTableViewCell class] forCellReuseIdentifier:attachmentCellID];
+    self.tableView.estimatedRowHeight = 80.f;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.bounces = NO;
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(246, 246, 247);
+    [self.view addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom);
+        make.left.right.equalTo(self.view);
+        make.height.equalTo(@1);
+    }];
+}
+
+#pragma mark - Table view data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return self.recordListM.count;
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 2;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBRecordModel *recordModel = [PBRecordModel yy_modelWithDictionary:self.recordListM[indexPath.section]];
+    if (indexPath.section == 0) {
+        recordModel.isOneIndex = NO;
+    }else {
+        recordModel.isOneIndex = NO;
+    }
+    if (indexPath.section == self.recordListM.count - 2) {
+        recordModel.indexFlag = @"1";
+    }
+    if (indexPath.row == 0) {
+        PBRecordTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+        cell.recordModel = recordModel;
+        cell.PlayVideoBlock = ^(NSString * _Nonnull videoUrl) {
+            NSLog(@"打开视频");
+            PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+            playVC.url = videoUrl;
+            [self.navigationController pushViewController:playVC animated:YES];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else {
+        PBRecordImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:attachmentCellID forIndexPath:indexPath];
+        cell.recordModel = recordModel;
+        cell.PlayVideoBlock = ^(NSString * _Nonnull videoUrl) {
+            NSLog(@"打开视频");
+            PBVideoPlayViewController *playVC = [[PBVideoPlayViewController alloc] init];
+            playVC.url = videoUrl;
+            [self.navigationController pushViewController:playVC animated:YES];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+//- (void)setRecordListM:(NSMutableArray *)recordListM {
+//    _recordListM = recordListM;
+//    /**
+//     RectificationID : "3b0b0ac2-86f4-4da1-8af1-072fb00cc1ed"
+//     RectificationOperatorID : "9d9ca069-af5a-4564-9999-591b16560332"
+//     RectificationOperator : "zjf"
+//     RectificationOperateFlag : 1
+//     RectificationCheckDate : "2020-08-19T14:29:35"
+//     RectificationCheckResult : "整改"
+//     RectificationRemark : "Djfkejkfjekljfkejlkfjelkjllsleifiejiijkdsnfklffjeh"
+//     IsDel : null
+//     ExamineID : "9578d162-aef6-4a99-92c2-d5b6048651b7"
+//     CreateDate : "2020-08-19T14:29:35"
+//     aer_counterpart : null
+//     */
+//    NSDictionary *dict = @{
+//        @"RectificationOperator" : self.examineListModel.bu_examiner_name,
+//        @"RectificationRemark" : [self.examineDetailDic valueForKey:@"ExamineRemark"],
+//        @"CreateDate": self.examineListModel.CreateDate,
+//        @"indexFlag": @"0"
+//    };
+//    [_recordListM addObject:dict];
+//}
+
+- (void)setExamineDetailDic:(NSDictionary *)examineDetailDic {
+    _examineDetailDic = examineDetailDic;
+}
+- (void)setRoleType:(RoleType)roleType {
+    _roleType = roleType;
+}
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.h
new file mode 100644
index 0000000..c02cf2c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.h
@@ -0,0 +1,20 @@
+//
+//  PBRolePersonViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRolePersonViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, copy) NSString *roleID;
+@property (nonatomic, assign) BOOL isMultiSelect;
+@property (nonatomic, strong) NSMutableArray *selectList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.m
new file mode 100644
index 0000000..fb36cd3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRolePersonViewController.m
@@ -0,0 +1,378 @@
+//
+//  PBRolePersonViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBRolePersonViewController.h"
+#import "PBPersonVCTableViewCell.h"
+#import "PBMultiSelectPersonCell.h"
+#import "PBProjectModel.h"
+#import "PBUserModel.h"
+#import "PBUserCollectionViewCell.h"
+#import "PBSelectedPersonController.h"
+#import "PBAddExamineViewController.h"
+#import "PBCheckViewController.h"
+static NSString *const cellID = @"cellID";
+static NSString *const MScellID = @"MScellID";
+static NSString *collectionCell = @"collectionCell";
+@interface PBRolePersonViewController ()<UITableViewDelegate, UITableViewDataSource, UICollectionViewDelegate, UICollectionViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, weak) UIView *bottomV;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, weak) UIButton *determineBtn;
+@property (nonatomic, weak) UIButton *arrowBtn;
+@end
+
+@implementation PBRolePersonViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    if (!self.isMultiSelect) {
+        return;
+    }
+    NSMutableArray *list = [[NSMutableArray alloc] init];
+    for (NSDictionary *obj in self.dataList) {
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        for (PBUserModel *model in [obj valueForKey:@"Users"]) {
+            for (PBUserModel *selectModel in self.selectList) {
+                if ([model.UserId isEqualToString:selectModel.UserId]) {
+                    model.isSelect = YES;
+                    break;
+                }else{
+                    model.isSelect = NO;
+                }
+            }
+            [arrM addObject:model];
+        }
+        NSDictionary *dict = @{@"FirstLetter":[obj valueForKey:@"FirstLetter"], @"Users":arrM.copy};
+        [list addObject:dict];
+    }
+    self.dataList = list;
+    [self.tableView reloadData];
+    if (self.selectList.count > 0) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.collectionView.hidden = NO;
+        self.determineBtn.hidden = NO;
+        [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+        [self.collectionView reloadData];
+    }else {
+        self.bottomV.hidden = YES;
+        self.arrowBtn.hidden = YES;
+        self.collectionView.hidden = YES;
+        self.determineBtn.hidden = YES;
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self loadData];
+}
+- (void)setupNav {
+    self.title = @"请指定人员";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 56;
+    self.tableView.sectionIndexColor = PBColor(97, 111, 125);
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    };
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBPersonVCTableViewCell class] forCellReuseIdentifier:cellID];
+    [self.tableView registerClass:[PBMultiSelectPersonCell class] forCellReuseIdentifier:MScellID];
+    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 56, 0);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+//    self.tableView.tableHeaderView = [self setupTableHearderView];
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.bottom.right.equalTo(self.tableView);
+        make.height.equalTo(@54);
+    }];
+    UIButton *arrowBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"arrow_top"]];
+    [arrowBtn addTarget:self action:@selector(arrowTopActon) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:arrowBtn];
+    [arrowBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(15);
+        make.left.equalTo(bottomV).offset(12);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(34, 34);
+    layout.minimumLineSpacing = 10;
+    layout.minimumInteritemSpacing = 0;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBUserCollectionViewCell class] forCellWithReuseIdentifier:collectionCell];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).mas_offset(10);
+        make.left.equalTo(bottomV).offset(46);
+        make.right.equalTo(bottomV).offset(-120);
+        make.height.equalTo(@34);
+    }];
+    UIButton *determineBtn = [UIButton z_textButton:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] boldFontSize:14 normalColor:[UIColor whiteColor]];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    determineBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.view addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(9);
+        make.right.equalTo(bottomV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(89, 34));
+    }];
+    [determineBtn circleViewWithRadius:6];
+    self.arrowBtn = arrowBtn;
+    self.bottomV = bottomV;
+    self.determineBtn = determineBtn;
+    if (self.selectList.count > 0 && self.isMultiSelect) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.collectionView.hidden = NO;
+        self.determineBtn.hidden = NO;
+        [self.collectionView reloadData];
+    }else {
+        self.bottomV.hidden = YES;
+        self.arrowBtn.hidden = YES;
+        self.collectionView.hidden = YES;
+        self.determineBtn.hidden = YES;
+    }
+}
+- (void)arrowTopActon {
+    PBSelectedPersonController *selectPersonVC = [[PBSelectedPersonController alloc] init];
+    selectPersonVC.selectList = self.selectList;
+    [self.navigationController pushViewController:selectPersonVC animated:YES];
+}
+- (void)determineBtnAction {
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdatePerson object:self.selectList.copy];
+    [self backAction];
+}
+- (UIView *)setupTableHearderView {
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 52)];
+    bgV.backgroundColor = PBColor(244, 245, 246);
+    UIButton *searchBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_search_background"]];
+    [searchBtn addTarget:self action:@selector(searchAction) forControlEvents:UIControlEventTouchUpInside];
+    [bgV addSubview:searchBtn];
+    [searchBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(8);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+        make.height.equalTo(@36);
+    }];
+    return bgV;
+}
+- (void)searchAction {
+    
+}
+
+- (void)loadData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetProjectUserSortByLetterRoleId:self.roleID andOrganizeID:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载成员信息失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            NSArray *arr = [networkModel.Data valueForKey:@"List"];
+            for (NSDictionary *obj in arr) {
+                NSMutableArray *arrM = [[NSMutableArray alloc] init];
+                for (NSDictionary *user in [obj valueForKey:@"Users"]) {
+                    PBUserModel *model = [PBUserModel yy_modelWithDictionary:user];
+                    for (PBUserModel *selectModel in self.selectList) {
+                        if ([model.UserId isEqualToString:selectModel.UserId]) {
+                            model.isSelect = YES;
+                            break;
+                        }else {
+                            model.isSelect = NO;
+                        }
+                    }
+                    [arrM addObject:model];
+                }
+                NSDictionary *dict = @{@"FirstLetter":[obj valueForKey:@"FirstLetter"], @"Users":arrM.copy};
+                [self.dataList addObject:dict];
+            }
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - UITableViewDelegate, UITableViewDataSource
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return self.dataList.count;
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSDictionary *dict = self.dataList[section];
+    NSArray *arr = [dict valueForKey:@"Users"];
+    return arr.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.isMultiSelect) {
+        PBMultiSelectPersonCell *cell = [tableView dequeueReusableCellWithIdentifier:MScellID forIndexPath:indexPath];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        NSDictionary *dict = self.dataList[indexPath.section];
+        NSArray *arr = [dict valueForKey:@"Users"];
+        cell.userModel = arr[indexPath.row];
+        return cell;
+    }else {
+        PBPersonVCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        NSDictionary *dict = self.dataList[indexPath.section];
+        NSArray *arr = [dict valueForKey:@"Users"];
+        cell.userModel = arr[indexPath.row];
+        return cell;
+    }
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 16;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    UIView *bgView = [[UIView alloc]init];
+    bgView.backgroundColor = PBColor(244, 245, 246);
+    NSDictionary *dict = self.dataList[section];
+    UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"FirstLetter"] Color:PBColor(97, 111, 125) isBold:YES Font:12];
+    [bgView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(bgView);
+        make.left.equalTo(bgView).offset(20);
+    }];
+    return bgView;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.dataList[indexPath.section];
+    NSArray *arr = [dict valueForKey:@"Users"];
+    PBUserModel *userModel = arr[indexPath.row];
+    if (self.isMultiSelect) {
+        if (userModel.isSelect) {
+            userModel.isSelect = NO;
+            for (PBUserModel *model in self.selectList) {
+                if ([model.UserId isEqualToString:userModel.UserId]) {
+                    [self.selectList removeObject:model];
+                    break;
+                }
+            }
+        }else {
+            userModel.isSelect = YES;
+            [self.selectList addObject:userModel];
+        }
+        if (self.selectList.count > 0) {
+            self.bottomV.hidden = NO;
+            self.arrowBtn.hidden = NO;
+            self.collectionView.hidden = NO;
+            self.determineBtn.hidden = NO;
+            [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+        }else {
+            self.bottomV.hidden = YES;
+            self.arrowBtn.hidden = YES;
+            self.collectionView.hidden = YES;
+            self.determineBtn.hidden = YES;
+        }
+        [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        [self.collectionView reloadData];
+    }else {
+        [PBNoteCenter postNotificationName:PBNoteCenterUpdatePerson object:@[userModel]];
+        [self backAction];
+    }
+}
+- (void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBAddExamineViewController class]]) {
+            break;
+        }
+        if ([vc isKindOfClass:[PBCheckViewController class]]) {
+            break;
+        }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+#pragma mark 右侧索引
+- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (NSDictionary *dict in self.dataList) {
+        [arrM addObject:[dict valueForKey:@"FirstLetter"]];
+    };
+    return arrM.copy;
+}
+#pragma mark - UICollectionViewDelegate, UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    return self.selectList.count;
+}
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBUserCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCell forIndexPath:indexPath];
+    cell.userModel = self.selectList[indexPath.item];
+    return cell;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setRoleID:(NSString *)roleID {
+    _roleID = roleID;
+}
+- (void)setIsMultiSelect:(BOOL)isMultiSelect {
+    _isMultiSelect = isMultiSelect;
+}
+- (NSMutableArray *)dataList {
+    if (_dataList == nil) {
+        _dataList = [[NSMutableArray alloc] init];
+    }
+    return _dataList;
+}
+- (void)setSelectList:(NSMutableArray *)selectList {
+    _selectList = selectList;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.h
new file mode 100644
index 0000000..0952ecd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.h
@@ -0,0 +1,19 @@
+//
+//  PBRoleViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRoleViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, assign) BOOL isMultiSelect;
+@property (nonatomic, strong) NSMutableArray *selectList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.m
new file mode 100644
index 0000000..9f5f780
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBRoleViewController.m
@@ -0,0 +1,143 @@
+//
+//  PBRoleViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/6.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBRoleViewController.h"
+#import "PBProjectModel.h"
+#import "PBPersonRoleTableViewCell.h"
+#import "PBRolePersonViewController.h"
+static NSString *const CellID = @"CellID";
+@interface PBRoleViewController ()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@end
+
+@implementation PBRoleViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self loadData];
+}
+- (void)setupNav {
+    self.title = @"请指定人员";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 56;
+    UITableView *footerV = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+    if (@available(iOS 15.0, *)) {
+        footerV.sectionHeaderTopPadding = 0;
+    };
+    self.tableView.tableFooterView = footerV;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBPersonRoleTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+//    self.tableView.tableHeaderView = [self setupTableHearderView];
+}
+- (UIView *)setupTableHearderView {
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 52)];
+    bgV.backgroundColor = PBColor(244, 245, 246);
+    UIButton *searchBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_search_background"]];
+    [searchBtn addTarget:self action:@selector(searchAction) forControlEvents:UIControlEventTouchUpInside];
+    [bgV addSubview:searchBtn];
+    [searchBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(8);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+        make.height.equalTo(@36);
+    }];
+    return bgV;
+}
+- (void)searchAction {
+    
+    
+}
+- (void)loadData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetProjectRolesAndUsersOrganizeID:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.dataList = [networkModel.Data valueForKey:@"List"];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];  
+}
+#pragma mark - UITableViewDelegate, UITableViewDataSource
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return 1;
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBPersonRoleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    NSDictionary *dict = self.dataList[indexPath.row];
+    cell.roleDict = dict;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.dataList[indexPath.row];
+    NSString *roleId = [dict valueForKey:@"RoleId"];
+    PBRolePersonViewController *personListVC = [[PBRolePersonViewController alloc] init];
+    personListVC.roleID = roleId;
+    personListVC.projectModel = self.projectModel;
+    personListVC.isMultiSelect = self.isMultiSelect;
+    personListVC.selectList = self.selectList;
+    [self.navigationController pushViewController:personListVC animated:YES]; 
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setIsMultiSelect:(BOOL)isMultiSelect {
+    _isMultiSelect = isMultiSelect;
+}
+- (void)setSelectList:(NSMutableArray *)selectList {
+    _selectList = selectList;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.h
new file mode 100644
index 0000000..77c9d66
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBSeleceArtifactsViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/14.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSeleceArtifactsViewController : UIViewController
+@property (nonatomic, copy) NSString *type;
+@property (nonatomic, strong) NSMutableArray *selectList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.m
new file mode 100644
index 0000000..4a1d938
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSeleceArtifactsViewController.m
@@ -0,0 +1,170 @@
+//
+//  PBSeleceArtifactsViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/14.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBSeleceArtifactsViewController.h"
+#import "PBSelectArtifactsCell.h"
+#import "PBSelectTaskCell.h"
+#import "PBArtifactsInfoModel.h"
+#import "PBETaskInfoModel.h"
+#import "PBAddExamineViewController.h"
+static NSString *const cellID = @"cellID";
+static NSString *const TaskCellID = @"TaskCellID";
+@interface PBSeleceArtifactsViewController ()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, weak) UIButton *determineBtn;
+@property (nonatomic, copy) NSString *titleText;
+@end
+
+@implementation PBSeleceArtifactsViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.title = [NSString stringWithFormat:@"%@ (%zd)",self.titleText, self.selectList.count];
+        UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 56;
+    self.tableView.sectionIndexColor = PBColor(97, 111, 125);
+    UITableView *footerV = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+    if (@available(iOS 15.0, *)) {
+        footerV.sectionHeaderTopPadding = 0;
+    };
+    self.tableView.tableFooterView = footerV;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBSelectArtifactsCell class] forCellReuseIdentifier:cellID];
+    [self.tableView registerClass:[PBSelectTaskCell class] forCellReuseIdentifier:TaskCellID];
+    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 56, 0);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.bottom.right.equalTo(self.tableView);
+        make.height.equalTo(@54);
+    }];
+    
+    UIButton *determineBtn = [UIButton z_textButton:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] boldFontSize:14 normalColor:[UIColor whiteColor]];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    determineBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.view addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(9);
+        make.right.equalTo(bottomV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(89, 34));
+    }];
+    [determineBtn circleViewWithRadius:6];
+    self.determineBtn = determineBtn;
+}
+- (void)determineBtnAction {
+    if ([self.type isEqualToString:@"Artifacts"]) {
+        [PBNoteCenter postNotificationName:PBNoteCenterUpdateArtifacts object:self.selectList.copy];
+    }else if ([self.type isEqualToString:@"Task"]) {
+        [PBNoteCenter postNotificationName:PBNoteCenterUpdateTask object:self.selectList.copy];
+    }
+    [self backAction];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.selectList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if ([self.type isEqualToString:@"Artifacts"]) {
+        PBSelectArtifactsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+        PBArtifactsInfoModel *infoModel = self.selectList[indexPath.row];
+        cell.artifactsInfoModel = infoModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else if ([self.type isEqualToString:@"Task"]) {
+        PBSelectTaskCell *cell = [tableView dequeueReusableCellWithIdentifier:TaskCellID forIndexPath:indexPath];
+        PBETaskInfoModel *infoModel = self.selectList[indexPath.row];
+        cell.taskInfoModel = infoModel;
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else {
+        UITableViewCell *cell = [[UITableViewCell alloc] init];
+        return cell;
+    }
+    
+}
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    return YES;
+}
+- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
+        //先删数据 再删UI
+        [self.selectList removeObjectAtIndex:indexPath.row];
+        self.title = [NSString stringWithFormat:@"%@ (%zd)",self.titleText, self.selectList.count];
+        [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+//        if (self.selectList.count == 0) {
+//            self.determineBtn.enabled = NO;
+//        }
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        [tableView reloadData];
+    }];
+    return @[deleteAction];
+}
+-(void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBAddExamineViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+- (void)setSelectList:(NSMutableArray *)selectList {
+    _selectList = selectList;
+    if (selectList == nil) {
+        _selectList = [[NSMutableArray alloc] init];
+    }
+}
+
+- (void)setType:(NSString *)type {
+    _type = type;
+    if ([type isEqualToString:@"Artifacts"]) {
+        self.titleText = @"构件";
+    }else if([type isEqualToString:@"Task"]) {
+        self.titleText = @"任务";
+    }
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.h
new file mode 100644
index 0000000..a807f5e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.h
@@ -0,0 +1,17 @@
+//
+//  PBSelectedPersonController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/8.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSelectedPersonController : UIViewController
+@property (nonatomic, strong) NSMutableArray *selectList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.m
new file mode 100644
index 0000000..70f46b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBSelectedPersonController.m
@@ -0,0 +1,140 @@
+//
+//  PBSelectedPersonController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/8.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBSelectedPersonController.h"
+#import "PBPersonVCTableViewCell.h"
+#import "PBUserModel.h"
+#import "PBAddExamineViewController.h"
+static NSString *const cellID = @"cellID";
+@interface PBSelectedPersonController ()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, weak) UIButton *determineBtn;
+@end
+
+@implementation PBSelectedPersonController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.title = [NSString stringWithFormat:@"整改人 (%zd)",self.selectList.count];
+        UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 56;
+    self.tableView.sectionIndexColor = PBColor(97, 111, 125);
+    UITableView *footerV = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+    if (@available(iOS 15.0, *)) {
+        footerV.sectionHeaderTopPadding = 0;
+    };
+    self.tableView.tableFooterView = footerV;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBPersonVCTableViewCell class] forCellReuseIdentifier:cellID];
+    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 56, 0);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.bottom.right.equalTo(self.tableView);
+        make.height.equalTo(@54);
+    }];
+    
+    UIButton *determineBtn = [UIButton z_textButton:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] boldFontSize:14 normalColor:[UIColor whiteColor]];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    determineBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.view addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(9);
+        make.right.equalTo(bottomV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(89, 34));
+    }];
+    [determineBtn circleViewWithRadius:6];
+    self.determineBtn = determineBtn;
+}
+- (void)determineBtnAction {
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdatePerson object:self.selectList.copy];
+    [self backAction];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.selectList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBPersonVCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    PBUserModel *userModel = self.selectList[indexPath.row];
+    cell.userModel = userModel;
+    return cell;
+}
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    return YES;
+}
+- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
+        //先删数据 再删UI
+        [self.selectList removeObjectAtIndex:indexPath.row];
+        self.title = [NSString stringWithFormat:@"整改人 (%zd)",self.selectList.count];
+        [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+        if (self.selectList.count == 0) {
+            self.determineBtn.enabled = NO;
+        }
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        [tableView reloadData];
+    }];
+    return @[deleteAction];
+}
+-(void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBAddExamineViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+- (void)setSelectList:(NSMutableArray *)selectList {
+    _selectList = selectList;
+    if (selectList == nil) {
+        _selectList = [[NSMutableArray alloc] init];
+    }
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.h
new file mode 100644
index 0000000..94f6c9c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.h
@@ -0,0 +1,21 @@
+//
+//  PBStructureViewController.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/4/2.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@class PBProjectModel;
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBStructureViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSString *structureId;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.m
new file mode 100644
index 0000000..4891e6c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBStructureViewController.m
@@ -0,0 +1,141 @@
+//
+//  PBStructureViewController.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/4/2.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBStructureViewController.h"
+#import "PBStructureTableViewCell.h"
+#import "PBProjectModel.h"
+#import "PBExamineAddModel.h"
+static NSString *const cellID = @"cellID";
+@interface PBStructureViewController ()<UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@end
+
+@implementation PBStructureViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    [self setupNav];
+    [self setupUI];
+    [self loadData];
+}
+- (void)loadData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    if (self.structureId == nil || [self.structureId isEqualToString:@""]) {
+        self.structureId = @"";
+    }
+    [[PBNetworkTools sharedTools] RequestGetQualitySafeCategoriesWithOrganizeId:self.projectModel.organizeid andType:@"quality" andLikepara:self.structureId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.dataList = networkModel.Data;
+            [self.tableView reloadData];
+            if (self.dataList.count == 0) {
+                [YJProgressHUD showMessage:@"暂无内容,请返回上级选择" inView:self.view];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)setupNav {
+    self.title = @"工程结构";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+//    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+//    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+//- (void) saveAction{
+//
+//}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"请点击 ○ 选择工程结构" Color:DescColor isBold:NO Font:12];
+//    titleL.backgroundColor = PBColor(242, 242, 242);
+    [self.view addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.equalTo(self.view);
+        make.left.equalTo(self.view).offset(16);
+        make.height.equalTo(@24);
+    }];
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 42;
+    [self.tableView registerClass:[PBStructureTableViewCell class] forCellReuseIdentifier:cellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(24);
+        make.left.right.bottom.equalTo(self.view);
+//        make.left.equalTo(self.view).offset(16);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBStructureTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    NSDictionary *dict = self.dataList[indexPath.row];
+    cell.dict = dict;
+    cell.NextLevelBlock = ^{
+        PBStructureViewController *vc = [[PBStructureViewController alloc] init];
+        vc.projectModel = self.projectModel;
+        vc.examineAddModel = self.examineAddModel;
+        vc.structureId = [dict valueForKey:@"ec_code"];
+        [self.navigationController pushViewController:vc animated:YES];
+    };
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.dataList[indexPath.row];
+    PBStructureViewController *vc = [[PBStructureViewController alloc] init];
+    vc.projectModel = self.projectModel;
+    vc.examineAddModel = self.examineAddModel;
+    vc.structureId = [dict valueForKey:@"ec_code"];
+    [self.navigationController pushViewController:vc animated:YES];
+}
+
+- (void)setStructureId:(NSString *)structureId {
+    _structureId = structureId;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.h
new file mode 100644
index 0000000..1df51da
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.h
@@ -0,0 +1,27 @@
+//
+//  PBArtifactsViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/11.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@class PBProjectModel;
+//@class PBETaskInfoModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTaskViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+//@property (nonatomic, strong) NSString *structureId;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+//@property (nonatomic, strong) PBETaskInfoModel *taskInfoModel;
+@property (nonatomic, assign) BOOL isOntPage;
+@property (nonatomic, strong) NSArray *tasks;
+
+@property (nonatomic, strong) NSMutableArray *selectList;
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.m
new file mode 100644
index 0000000..61bcd50
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTaskViewController.m
@@ -0,0 +1,369 @@
+//
+//  PBArtifactsViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/11.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBTaskViewController.h"
+#import "PBStructureTableViewCell.h"
+#import "PBProjectModel.h"
+#import "PBArtifactsModel.h"
+#import "PBChooseTasksCell.h"
+#import "PBArtifactsInfoModel.h"
+#import "PBETaskModel.h"
+#import "PBETaskInfoModel.h"
+#import "PBAddExamineViewController.h"
+#import "PBSeleceArtifactsViewController.h"
+static NSString *const cellID = @"cellID";
+static NSString *const tasksCellID = @"tasksCellID";
+@interface PBTaskViewController ()<UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, weak) UIView *bottomV;
+@property (nonatomic, weak) UIButton *determineBtn;
+@property (nonatomic, weak) UIButton *arrowBtn;
+@property (nonatomic, weak) UILabel *selectCountL;
+@end
+
+@implementation PBTaskViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    NSLog(@"============%zd",self.selectList.count);
+
+    if (!self.isOntPage && self.tasks.count > 0 && self.selectList.count > 0) {
+        for (PBETaskInfoModel *model in self.tasks) {
+            if (model.Children.count > 0) {
+                
+            }else {
+                for (PBETaskInfoModel *selectModel in self.selectList) {
+                    if ([model.UID_ isEqualToString:selectModel.UID_]) {
+                        model.isSelected = YES;
+                        break;
+                    }else {
+                        model.isSelected = NO;
+                    }
+                }
+            }
+        }
+        [self.tableView reloadData];
+    }
+    if (self.selectList.count > 0) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.selectCountL.hidden = NO;
+        self.determineBtn.hidden = NO;
+        self.selectCountL.text = [NSString stringWithFormat:@"已选择%zd个构件",self.selectList.count];
+        [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+    }else {
+        self.bottomV.hidden = YES;
+        self.arrowBtn.hidden = YES;
+        self.selectCountL.hidden = YES;
+        self.determineBtn.hidden = YES;
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    [self setupNav];
+    [self setupUI];
+    if (self.isOntPage) {
+        [self loadArtifactsData];
+    }
+}
+- (void)loadArtifactsData {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetCheckTaskWithOrganizeId:self.projectModel.bimcomposerid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.tasks = networkModel.Data;
+            [self.tableView reloadData];
+            if (self.tasks.count == 0) {
+                [YJProgressHUD showMessage:@"暂无内容" inView:self.view];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)setupNav {
+    self.title = @"关联任务";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 47;
+    self.tableView.sectionIndexColor = PBColor(97, 111, 125);
+    UITableView *footerV = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+    if (@available(iOS 15.0, *)) {
+        footerV.sectionHeaderTopPadding = 0;
+    };
+    self.tableView.tableFooterView = footerV;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBStructureTableViewCell class] forCellReuseIdentifier:cellID];
+    [self.tableView registerClass:[PBChooseTasksCell class] forCellReuseIdentifier:tasksCellID];
+    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 56, 0);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+//    self.tableView.tableHeaderView = [self setupTableHearderView];
+    
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.bottom.right.equalTo(self.tableView);
+        make.height.equalTo(@54);
+    }];
+    UIButton *arrowBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"arrow_top"]];
+    [arrowBtn addTarget:self action:@selector(arrowTopActon) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:arrowBtn];
+    [arrowBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(15);
+        make.left.equalTo(bottomV).offset(12);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UILabel *selectCountL = [UILabel z_labelWithText:[NSString stringWithFormat:@"已选择%zd个构件",self.selectList.count] Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.view addSubview:selectCountL];
+    [selectCountL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(arrowBtn);
+        make.height.equalTo(@20);
+        make.left.equalTo(arrowBtn.mas_right).offset(15);
+        make.right.equalTo(self.view).offset(-120);
+    }];
+    UIButton *determineBtn = [UIButton z_textButton:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] boldFontSize:14 normalColor:[UIColor whiteColor]];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    determineBtn.backgroundColor = PBColor(0, 122, 255);
+    [self.view addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(9);
+        make.right.equalTo(bottomV).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(89, 34));
+    }];
+    [determineBtn circleViewWithRadius:6];
+    self.arrowBtn = arrowBtn;
+    self.bottomV = bottomV;
+    self.selectCountL = selectCountL;
+    self.determineBtn = determineBtn;
+    if (self.selectList.count > 0) {
+        self.bottomV.hidden = NO;
+        self.arrowBtn.hidden = NO;
+        self.selectCountL.hidden = NO;
+        self.determineBtn.hidden = NO;
+    }else {
+        self.bottomV.hidden = YES;
+        self.arrowBtn.hidden = YES;
+        self.selectCountL.hidden = YES;
+        self.determineBtn.hidden = YES;
+    }
+}
+- (void)determineBtnAction {
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdateTask object:self.selectList.copy];
+    [self backAction];
+}
+- (UIView *)setupTableHearderView {
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 52)];
+    bgV.backgroundColor = PBColor(244, 245, 246);
+    UIButton *searchBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_search_background"]];
+    [searchBtn addTarget:self action:@selector(searchAction) forControlEvents:UIControlEventTouchUpInside];
+    [bgV addSubview:searchBtn];
+    [searchBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(8);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+        make.height.equalTo(@36);
+    }];
+    return bgV;
+}
+- (void)searchAction {
+    
+}
+- (void)arrowTopActon {
+    PBSeleceArtifactsViewController *selectArtifactsVC = [[PBSeleceArtifactsViewController alloc] init];
+    selectArtifactsVC.type = @"Task";
+    selectArtifactsVC.selectList = self.selectList;
+    [self.navigationController pushViewController:selectArtifactsVC animated:YES];
+}
+- (void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBAddExamineViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.tasks.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.isOntPage) {
+        PBStructureTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+        NSDictionary *dict = self.tasks[indexPath.row];
+        PBETaskModel *taskModel = [PBETaskModel yy_modelWithDictionary:dict];
+        cell.taskModel = taskModel;
+        cell.NextLevelBlock = ^{
+            [self getTaskItemData:taskModel];
+        };
+        return cell;
+    }else {
+        PBETaskInfoModel *taskInfoModel = self.tasks[indexPath.row];
+        PBChooseTasksCell *cell = [tableView dequeueReusableCellWithIdentifier:tasksCellID forIndexPath:indexPath];
+        cell.taskInfoModel = taskInfoModel;
+        __weak typeof(cell) weakCell = cell;
+        cell.saveBlock = ^(BOOL isSave) {
+            if (isSave) {
+                [self.selectList addObject:taskInfoModel];
+            }else {
+                for (PBETaskInfoModel *item in self.selectList) {
+                    if ([item.UID_ isEqualToString:taskInfoModel.UID_]) {
+                        [self.selectList removeObject:item];
+                        break;
+                    }
+                }
+            }
+            if (self.selectList.count > 0) {
+                self.bottomV.hidden = NO;
+                self.arrowBtn.hidden = NO;
+                self.selectCountL.hidden = NO;
+                self.determineBtn.hidden = NO;
+                self.selectCountL.text = [NSString stringWithFormat:@"已选择%zd个任务",self.selectList.count];
+                [self.determineBtn setTitle:[NSString stringWithFormat:@"确定(%zd)",self.selectList.count] forState:UIControlStateNormal];
+            }else {
+                self.bottomV.hidden = YES;
+                self.arrowBtn.hidden = YES;
+                self.selectCountL.hidden = YES;
+                self.determineBtn.hidden = YES;
+            }
+        };
+        cell.nextBlock = ^{
+            PBTaskViewController *vc = [[PBTaskViewController alloc] init];
+            vc.isOntPage = NO;
+            vc.projectModel = self.projectModel;
+            vc.tasks = taskInfoModel.Children;
+            vc.selectList = self.selectList;
+            [self.navigationController pushViewController:vc animated:YES];
+        };
+        return cell;
+    }
+      
+}
+#pragma mark - 加载任务
+- (void)getTaskItemData:(PBETaskModel *)taskModel {
+    [YJProgressHUD showProgress:@"正在加载..." inView:self.view];
+    [[PBNetworkTools sharedTools] GetTaskItemDataWithPlanId:taskModel.bop_planId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            NSMutableArray *newTasksData = [[NSMutableArray alloc] init];
+            NSMutableArray *tasks = [[NSMutableArray alloc] init];
+            NSArray *tasksData = [networkModel.Data valueForKey:@"Tasks"];
+            if (tasksData.count == 0) {
+                [YJProgressHUD showMessage:@"暂无内容" inView:self.view];
+            }else {
+                for (int i=0; i<tasksData.count; i++) {
+                    PBETaskInfoModel *taskInfoModel = [PBETaskInfoModel yy_modelWithDictionary:tasksData[i]];
+                    [newTasksData addObject:taskInfoModel];
+                    if([taskInfoModel.PARENTTASKUID_ isEqualToString:@"-1"]) {
+                        [tasks addObject:taskInfoModel];
+                    }
+                }
+                for (int j=0; j<tasks.count; j++) {
+                    [self filterData:tasks[j] andAllData:newTasksData];
+                }
+                NSLog(@"------%@", tasks);
+                PBTaskViewController *vc = [[PBTaskViewController alloc] init];
+                vc.isOntPage = NO;
+                vc.projectModel = self.projectModel;
+                vc.tasks = tasks;
+                vc.selectList = self.selectList;
+                [self.navigationController pushViewController:vc animated:YES];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+    
+}
+- (void)filterData:(PBETaskInfoModel*)item andAllData:(NSArray *)taskData {
+    NSMutableArray *hasChildrenData = [[NSMutableArray alloc] init];
+    for (int i=0; i<taskData.count; i++) {
+        PBETaskInfoModel *task = taskData[i];
+        if ([item.UID_ isEqualToString:task.PARENTTASKUID_]) {
+            [hasChildrenData addObject:task];
+        }
+    }
+    if (hasChildrenData.count > 0) {
+        item.Children = hasChildrenData;
+        if (item.Children.count > 0) {
+            for (int j=0; j<item.Children.count; j++) {
+                [self filterData:item.Children[j] andAllData:taskData];
+            }
+        }
+    }else {
+        item.Children = [NSArray new];
+    }
+}
+#pragma mark - UITableViewDelegate
+- (void)setIsOntPage:(BOOL)isOntPage {
+    _isOntPage = isOntPage;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setTasks:(NSArray *)tasks {
+    _tasks = tasks;
+}
+- (NSMutableArray *)selectList {
+    if (_selectList == nil) {
+        _selectList = [[NSMutableArray alloc] init];
+    }
+    return _selectList;;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.h
new file mode 100644
index 0000000..042484d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBTestViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/24.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBTestViewController : UIViewController
+@property(nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSArray<PBExamineAddModel *> *examineArr;
+@property (nonatomic, strong) NSDictionary *divisionDict;
+@property (nonatomic, strong) NSDictionary *itemizedDict;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.m
new file mode 100644
index 0000000..281551f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBTestViewController.m
@@ -0,0 +1,123 @@
+//
+//  PBTestViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/24.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBTestViewController.h"
+#import "PBExamineAddModel.h"
+
+static NSString *const cellID = @"cellID";
+@interface PBTestViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@end
+
+@implementation PBTestViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.title = @"检验批";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"请选择检验批" Color:DescColor isBold:NO Font:12];
+    titleL.backgroundColor = PBColor(242, 242, 242);
+    [self.view addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.equalTo(self.view);
+        make.left.equalTo(self.view).offset(16);
+        make.height.equalTo(@24);
+    }];
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 42;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(24);
+        make.right.bottom.equalTo(self.view);
+        make.left.equalTo(self.view).offset(16);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _dataList.count + 1;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    if (indexPath.row == 0) {
+        cell.textLabel.text = @"无检验批";
+    }else {
+        NSDictionary *dict = self.dataList[indexPath.row - 1];
+        cell.textLabel.text = [dict valueForKey:@"name"];
+    }
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == 0) {
+        [self setupData];
+    }else {
+        self.examineArr[0].dataDict = self.divisionDict;
+        self.examineArr[1].dataDict = self.itemizedDict;
+        self.examineArr[2].dataDict = self.dataList[indexPath.row - 1];
+    }
+    [PBNoteCenter postNotificationName:PBNoteCenterUpdateDivision object:nil];
+    [self.navigationController popToRootViewControllerAnimated:YES];
+}
+- (void)setupData {
+    NSDictionary *dict2 = @{
+                            @"name" : @"<无检验批>",
+                            @"value" : @"",
+                            @"children" : @[]
+                            };
+    self.examineArr[0].dataDict = self.divisionDict;
+    self.examineArr[1].dataDict = self.itemizedDict;
+    self.examineArr[2].dataDict = dict2;
+}
+
+- (void)setDataList:(NSArray *)dataList {
+    _dataList = dataList;
+}
+
+- (void)setExamineArr:(NSArray<PBExamineAddModel *> *)examineArr {
+    _examineArr = examineArr;
+}
+
+- (void)setDivisionDict:(NSDictionary *)divisionDict {
+    _divisionDict = divisionDict;
+}
+
+- (void)setItemizedDict:(NSDictionary *)itemizedDict {
+    _itemizedDict = itemizedDict;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.h
new file mode 100644
index 0000000..5b448f0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBVideoPlayViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/26.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBVideoPlayViewController : UIViewController
+@property (nonatomic, copy) NSString *url;
+@property (nonatomic, strong) NSURL *filePath;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.m
new file mode 100644
index 0000000..6c8cfc7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/PBVideoPlayViewController.m
@@ -0,0 +1,103 @@
+//
+//  PBVideoPlayViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/26.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBVideoPlayViewController.h"
+#import <WebKit/WebKit.h>
+@interface PBVideoPlayViewController ()<WKUIDelegate, WKNavigationDelegate>
+@property (nonatomic, strong) WKWebView *webView;
+@end
+
+@implementation PBVideoPlayViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+}
+- (void)setupUI {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    self.view.backgroundColor = [UIColor greenColor];
+    self.title = @"视频";
+    self.webView = [[WKWebView alloc] init];
+    self.webView.navigationDelegate = self;
+    self.webView.UIDelegate = self;
+    [self.view addSubview:self.webView];
+    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+    }];
+    if (self.url != nil && ![self.url isEqualToString:@""]) {
+        [self loadWeb];
+    }else {
+        [self playLocal];
+    }
+    
+}
+
+- (void)loadWeb {
+    NSLog(@"url:%@",self.url);
+    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.url]]];
+}
+- (void)playLocal {
+    [self.webView loadFileURL:self.filePath allowingReadAccessToURL:self.filePath];
+}
+- (void)backNavAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setUrl:(NSString *)url {
+    _url = url;
+}
+- (void)setFilePath:(NSURL *)filePath {
+    _filePath = filePath;
+}
+    // 页面开始加载时调用
+- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
+    NSLog(@"页面开始加载时调用");
+    [YJProgressHUD showProgress:@"" inView:self.view];
+}
+    // 页面加载失败时调用
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error {
+    NSLog(@"页面加载失败时调用%@",error);
+    [YJProgressHUD showFailed:@"页面加载失败" inview:self.view];
+}
+    // 当内容开始返回时调用
+- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
+    NSLog(@"当内容开始返回时调用");
+    [YJProgressHUD hide];
+}
+    // 页面加载完成之后调用
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
+    NSLog(@" 页面加载完成之后调用");
+    [YJProgressHUD hide];
+}
+    //提交发生错误时调用
+- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error {
+    NSLog(@"提交发生错误时调用%@",error);
+}
+   // 接收到服务器跳转请求即服务重定向时之后调用
+- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation {
+}
+
+    //进程被终止时调用
+- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView{
+    NSLog(@"进程被终止时调用");
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.h
new file mode 100755
index 0000000..d8fef91
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.h
@@ -0,0 +1,20 @@
+//
+//  WKAvoidKeyboardViewController.h
+//  AvoidKeyboardDemo
+//
+//  Created by 吴珂 on 15/9/9.
+//  Copyright (c) 2015年 MyCompany. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface WKAvoidKeyboardViewController : UIViewController
+
+@property (nonatomic, strong) UITextField *editTextField;
+@property (nonatomic, strong) UITextView *editTextView;
+
+- (void)hideKeyboard:(NSNotification *)noti;
+- (void)showKeyboard:(NSNotification *)noti;
+- (void)searchTextViewWithView:(UIView *)view;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.m
new file mode 100755
index 0000000..113add6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/ViewControllers/WKAvoidKeyboardViewController.m
@@ -0,0 +1,114 @@
+//
+//  WKAvoidKeyboardViewController.m
+//  AvoidKeyboardDemo
+//
+//  Created by 吴珂 on 15/9/9.
+//  Copyright (c) 2015年 MyCompany. All rights reserved.
+//
+
+#import "WKAvoidKeyboardViewController.h"
+
+#define GetOSVersion [[UIDevice currentDevice].systemVersion floatValue]
+
+#define GetTransformDistance(Distance) (GetOSVersion < 7.1 ? Distance / 2 : Distance)
+
+@interface WKAvoidKeyboardViewController ()<UITextFieldDelegate, UITextViewDelegate>
+
+@end
+
+@implementation WKAvoidKeyboardViewController
+
+- (void)searchTextViewWithView:(UIView *)view
+{
+    for (UIView *subview in view.subviews)
+    {
+        if ([subview isKindOfClass:[UITextView class]]) {
+            ((UITextView *)subview).delegate = self;
+        }
+        if ([subview isKindOfClass:[UITextField class]]) {
+            ((UITextField *)subview).delegate = self;
+        }
+        [self searchTextViewWithView:subview];
+    }
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+
+    [self searchTextViewWithView:self.view];
+    //注册通知
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showKeyboard:) name:UIKeyboardWillShowNotification object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillHideNotification object:nil];
+}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+#pragma mark - 键盘躲避
+- (void)showKeyboard:(NSNotification *)noti
+{
+    
+    self.view.transform = CGAffineTransformIdentity;
+    UIView *editView = _editTextView ? _editTextView : _editTextField;
+    
+    CGRect tfRect = [editView.superview convertRect:editView.frame toView:self.view];
+    NSValue *value = noti.userInfo[@"UIKeyboardFrameEndUserInfoKey"];
+    NSLog(@"%@", value);
+    CGRect keyBoardF = [value CGRectValue];
+    
+    CGFloat animationTime = [noti.userInfo[@"UIKeyboardAnimationDurationUserInfoKey"] floatValue];
+    CGFloat _editMaxY = CGRectGetMaxY(tfRect);
+    CGFloat _keyBoardMinY = CGRectGetMinY(keyBoardF);
+    NSLog(@"%f %f", _editMaxY, _keyBoardMinY);
+    
+    //获取状态栏的rect
+    CGRect statusRect = [[UIApplication sharedApplication] statusBarFrame];
+    //获取导航栏的rect
+    CGRect navRect = self.navigationController.navigationBar.frame;
+    //那么导航栏+状态栏的高度
+    CGFloat height = statusRect.size.height + navRect.size.height;
+    if (navRect.size.height == 0) {
+        height = 0;
+    }
+    _editMaxY += height;
+    if (_keyBoardMinY < _editMaxY) {
+        CGFloat moveDistance = _editMaxY - _keyBoardMinY;
+        [UIView animateWithDuration:animationTime animations:^{
+            self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, -moveDistance);
+        }];
+        
+    }
+}
+
+- (void)hideKeyboard:(NSNotification *)noti
+{
+    //    NSLog(@"%@", noti);
+    self.view.transform = CGAffineTransformIdentity;
+}
+
+- (void)textFieldDidBeginEditing:(UITextField *)textField
+{
+    _editTextField = textField;
+    _editTextView = nil;
+}
+
+- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
+{
+    _editTextView = textView;
+    _editTextField = nil;
+    return YES;
+}
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
+{
+    [self.view endEditing:YES];
+}
+
+- (void)dealloc
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.h
new file mode 100644
index 0000000..79c9498
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBCheckTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/19.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCheckTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void(^PlayVideoBlock)(NSString *videoUrl);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.m
new file mode 100644
index 0000000..d1838bb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBCheckTableViewCell.m
@@ -0,0 +1,117 @@
+//
+//  PBCheckTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/19.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCheckTableViewCell.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBVideoCollectionViewCell.h"
+#import "PBExamineAddModel.h"
+static NSString *const ImageCellID = @"ImageCellID";
+static NSString *const VideoCellID = @"VideoCellID";
+@interface PBCheckTableViewCell()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, weak) UILabel *descL;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@end
+@implementation PBCheckTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *descL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:16];
+    descL.numberOfLines = 0;
+    [self.contentView addSubview:descL];
+    [descL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(80, 80);
+    layout.minimumLineSpacing = 10;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    [self.collectionView registerClass:[PBVideoCollectionViewCell class] forCellWithReuseIdentifier:VideoCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(descL.mas_bottom).offset(10);
+        make.left.equalTo(self.contentView).offset(20);
+        make.right.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@80);
+        make.bottom.equalTo(self.contentView).offset(-10);
+    }];
+    self.descL = descL;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.examineAddModel.dataArr.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineAddModel.dataArr[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        PBVideoCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:VideoCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.videoUrl = url;
+        cell.PlayVideoBlock = ^{
+            if (self.PlayVideoBlock) {
+                self.PlayVideoBlock(url);
+            }
+        };
+        return cell;
+    }else {
+        PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.roleType = PARTICIPANT;
+        cell.imageUrl = url;
+        return cell;
+    }
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineAddModel.dataArr[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        if (self.PlayVideoBlock) {
+            self.PlayVideoBlock([NSString stringWithFormat:@"%@%@",BaseUrl, [dict valueForKey:@"AttachmentUrl"]]);
+        }
+    }else {
+        SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+        photoBrowser.delegate = self;
+        photoBrowser.currentImageIndex = indexPath.item;
+        photoBrowser.imageCount = self.examineAddModel.dataArr.count;
+        photoBrowser.sourceImagesContainerView = self.collectionView;
+        [photoBrowser show];
+    }
+}
+
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+    UIImage *image = [UIImage imageWithData:data];;
+    return image;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.descL.text = examineAddModel.dataStr;
+    [self.collectionView reloadData];
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.h
new file mode 100644
index 0000000..4e44fac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.h
@@ -0,0 +1,19 @@
+//
+//  PBComponentHierarchyView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/9.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBComponentHierarchyView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, strong) NSArray *dataArr;
+- (void)show;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.m
new file mode 100644
index 0000000..2d5ff9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBComponentHierarchyView.m
@@ -0,0 +1,94 @@
+//
+//  PBComponentHierarchyView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/9.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBComponentHierarchyView.h"
+static NSString *const cellID = @"CellID";
+@interface PBComponentHierarchyView()<UITableViewDataSource>
+@property (nonatomic, strong) UIView *bgView;
+@property (nonatomic, strong) UITableView *tableView;
+@end
+@implementation PBComponentHierarchyView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self setupUI];
+    }
+    return self;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point = [[touches anyObject]locationInView:self];
+    CALayer *layer = [self.layer hitTest:point];
+    if (layer == self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBComponentHierarchyView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID];
+    [self.bgView addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(14);
+        make.left.right.bottom.equalTo(self.bgView);
+        make.height.equalTo(@200);
+    }];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArr.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    NSDictionary *dict = self.dataArr[indexPath.row];
+    cell.textLabel.text = [dict valueForKey:@"bmc_name"];
+    return cell;
+}
+- (void)setDataArr:(NSArray *)dataArr {
+    _dataArr = dataArr;
+    [self.tableView reloadData];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.h
new file mode 100644
index 0000000..665ee7c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.h
@@ -0,0 +1,16 @@
+//
+//  PBEditTimeTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBEditTimeTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^ChooseBlock)(NSInteger index);
+@property (nonatomic, strong) PBExamineAddModel *leftExamineAddModel;
+@property (nonatomic, strong) PBExamineAddModel *rightExamineAddModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.m
new file mode 100644
index 0000000..a7a9b76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBEditTimeTableViewCell.m
@@ -0,0 +1,135 @@
+//
+//  PBEditTimeTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBEditTimeTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBEditTimeTableViewCell()
+@property (nonatomic, weak) UILabel *leftTitleL;
+@property (nonatomic, weak) UILabel *rightTitleL;
+@property (nonatomic, weak) UILabel *leftSelectL;
+@property (nonatomic, weak) UILabel *rightSelectL;
+@end
+@implementation PBEditTimeTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.contentView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.bottom.equalTo(self.contentView).offset(-22);
+        make.centerX.equalTo(self.contentView);
+        make.width.equalTo(@1);
+        make.height.equalTo(@55);
+    }];
+    UIButton *statusBtn = [[UIButton alloc] init];
+    [statusBtn addTarget:self action:@selector(leftBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:statusBtn];
+    [statusBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView);
+        make.left.bottom.equalTo(self.contentView);
+        make.right.equalTo(linView.mas_left);
+    }];
+    
+    UIButton *typeBtn = [[UIButton alloc] init];
+    [typeBtn addTarget:self action:@selector(rightBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:typeBtn];
+    [typeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView);
+        make.right.bottom.equalTo(self.contentView);
+        make.left.equalTo(linView.mas_right);
+    }];
+    
+    UILabel *statusTieleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:statusTieleL];
+    [statusTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.centerX.equalTo(statusBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *typeTieleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:typeTieleL];
+    [typeTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.centerX.equalTo(typeBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *statusSelectL = [UILabel z_labelWithText:@"" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    statusSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:statusSelectL];
+    [statusSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(statusTieleL.mas_bottom).offset(16);
+        make.left.equalTo(statusBtn).offset(16);
+        make.right.equalTo(statusBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UILabel *typeSelectL = [UILabel z_labelWithText:@"" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    typeSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeSelectL];
+    [typeSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeTieleL.mas_bottom).offset(16);
+        make.left.equalTo(typeBtn).offset(16);
+        make.right.equalTo(typeBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    self.leftTitleL = statusTieleL;
+    self.rightTitleL = typeTieleL;
+    self.leftSelectL = statusSelectL;
+    self.rightSelectL = typeSelectL;
+}
+- (void)leftBtnAction {
+    if (self.ChooseBlock) {
+        self.ChooseBlock(0);
+    }
+}
+- (void)rightBtnAction {
+    if (self.ChooseBlock) {
+        self.ChooseBlock(1);
+    }
+}
+
+- (void)setLeftExamineAddModel:(PBExamineAddModel *)leftExamineAddModel {
+    _leftExamineAddModel = leftExamineAddModel;
+    self.leftTitleL.text = leftExamineAddModel.title;
+    if (_leftExamineAddModel.dataStr) {
+        self.leftSelectL.text = _leftExamineAddModel.dataStr;
+        self.leftSelectL.textColor = TitleColor;
+    }else {
+        self.leftSelectL.text = _leftExamineAddModel.prompt;
+        self.leftSelectL.textColor = DescColor;
+    }
+}
+
+- (void)setRightExamineAddModel:(PBExamineAddModel *)rightExamineAddModel {
+    _rightExamineAddModel = rightExamineAddModel;
+    self.rightTitleL.text = rightExamineAddModel.title;
+    if (_rightExamineAddModel.dataStr) {
+        self.rightSelectL.text = _rightExamineAddModel.dataStr;
+        self.rightSelectL.textColor = TitleColor;
+    }else {
+        self.rightSelectL.text = _rightExamineAddModel.prompt;
+        self.rightSelectL.textColor = DescColor;
+    }
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+    
+    // Configure the view for the selected state
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.h
new file mode 100644
index 0000000..693ebcb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.h
@@ -0,0 +1,14 @@
+//
+//  PBExamineInputTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBExamineInputTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^EditTextBlock)(NSString *text);
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.m
new file mode 100644
index 0000000..c705c04
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineInputTableViewCell.m
@@ -0,0 +1,84 @@
+//
+//  PBExamineInputTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineInputTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBExamineInputTableViewCell()
+@property (nonatomic, weak) UILabel *textL;
+@end
+@implementation PBExamineInputTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *textL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:TitleFontSize];
+    textL.numberOfLines = 0;
+    [self.contentView addSubview:textL];
+    [textL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.height.greaterThanOrEqualTo(@22);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.bottom.equalTo(self.contentView).offset(-16);
+    }];
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
+    textL.userInteractionEnabled = YES;
+    [textL addGestureRecognizer:tap];
+    self.textL = textL;
+}
+
+- (void)tapAction:(UITapGestureRecognizer *)tap {
+    if (!self.examineAddModel.isAddExamine) {
+        return;
+    }
+    NSString *str = [_examineAddModel.dataStr mutableCopy];
+    if (self.EditTextBlock) {
+        self.EditTextBlock(str);
+    }
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    if (_examineAddModel.isAddExamine) {
+        if ([examineAddModel.key isEqualToString:@"Title"]) {
+            if (examineAddModel.dataStr == nil || [examineAddModel.dataStr isEqualToString:@""]) {
+                self.textL.textColor = DescColor;
+                self.textL.text = examineAddModel.prompt;
+            }else {
+                self.textL.textColor = TitleColor;
+                self.textL.text = examineAddModel.dataStr;
+            }
+        }else {
+            if (examineAddModel.dataStr == nil || [examineAddModel.dataStr isEqualToString:@""]) {
+                self.textL.textColor = DescColor;
+                self.textL.text = examineAddModel.prompt;
+            }else {
+                self.textL.textColor = TitleColor;
+                self.textL.text = examineAddModel.dataStr;
+            }
+        }
+    }else {
+        if (examineAddModel.dataStr == nil || [examineAddModel.dataStr isEqualToString:@""]) {
+            self.textL.text = examineAddModel.prompt;
+            self.textL.textColor = PromptColor;
+        }else {
+            self.textL.text = examineAddModel.dataStr;
+            self.textL.textColor = TitleColor;
+        }
+    }
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+    // Configure the view for the selected state
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.h
new file mode 100644
index 0000000..6616549
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.h
@@ -0,0 +1,18 @@
+//
+//  PBExamineListPicCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/4.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBExamineListPicCell : UITableViewCell
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@property (nonatomic, copy) void (^PlayVideoBlock)(NSString *url);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.m
new file mode 100644
index 0000000..ad8a89c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBExamineListPicCell.m
@@ -0,0 +1,362 @@
+//
+//  PBExamineListPicCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/4.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBExamineListPicCell.h"
+#import "PBExamineListModel.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBVideoCollectionViewCell.h"
+static NSString *const ImageCellID = @"ImageCellID";
+static NSString *const VideoCellID = @"VideoCellID";
+@interface PBExamineListPicCell()<UICollectionViewDelegate, UICollectionViewDataSource, SDPhotoBrowserDelegate>
+@property (nonatomic, weak) UILabel *referredL;//检查人 简称
+@property (nonatomic, weak) UILabel *checkNameL;//检查人
+@property (nonatomic, weak) UIImageView *stateImageV;//状态
+@property (nonatomic, weak) UILabel *originatorL;//发起人
+@property (nonatomic, weak) UILabel *timeL;//发起时间
+@property (nonatomic, weak) UILabel *titleL;//标题
+@property (nonatomic, weak) UILabel *typeL;//类型
+@property (nonatomic, weak) UIView *stateBgV;//级别背景
+@property (nonatomic, weak) UILabel *stateL;//级别
+@property (nonatomic, weak) UILabel *checkL;//检查内容
+@property (nonatomic, weak) UILabel *limitL;//期限
+@property (nonatomic, weak) UIView *checkBgV;
+@property (nonatomic, weak) UILabel *timeLimitL;
+@property (nonatomic, weak) UIView *leftView;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@end
+@implementation PBExamineListPicCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.bottom.equalTo(self.contentView);
+    }];
+    [bgV circleViewWithRadius:6];
+    UIView *portraitImageV = [[UIView alloc] init];
+    portraitImageV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:portraitImageV];
+    [portraitImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(13);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    [portraitImageV circleViewWithRadius:20];
+    
+    UILabel *referredL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:16];
+    referredL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:referredL];
+    [referredL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.right.equalTo(portraitImageV);
+    }];
+    UILabel *checkNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:checkNameL];
+    [checkNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV);
+        make.left.equalTo(portraitImageV.mas_right).offset(8);
+        make.right.equalTo(bgV).offset(-70);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *stateImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rectify_ qualified"]];
+    [self.contentView addSubview:stateImageV];
+    [stateImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV);
+        make.size.mas_equalTo(CGSizeMake(60, 22));
+    }];
+  
+    UILabel *originatorL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:originatorL];
+    [originatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkNameL.mas_bottom).offset(4);
+        make.left.equalTo(checkNameL);
+        make.height.equalTo(@16);
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(originatorL);
+        make.left.equalTo(originatorL.mas_right).offset(8);
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    titleL.numberOfLines = 3;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeL.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    UIImageView *typeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"typebg"]];
+    [self.contentView addSubview:typeImageV];
+    [typeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL);
+        make.left.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(62, 22));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"设计问题" Color:[UIColor whiteColor] isBold:YES Font:12];
+    typeL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(typeImageV);
+    }];
+    UIView *leftView = [[UIView alloc] init];
+    [self.contentView addSubview:leftView];
+    UIView *stateBgV = [[UIView alloc] init];
+    stateBgV.backgroundColor = PBColor(0, 122, 255);
+    [self.contentView addSubview:stateBgV];
+    UILabel *stateL = [UILabel z_labelWithText:@"" Color:PBColor(0, 122, 255) isBold:YES Font:12];
+    stateL.numberOfLines = 0;
+    stateL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:stateL];
+    UIView *rightView = [[UIView alloc] init];
+    rightView.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:rightView];
+    
+    UIView *checkBgV = [[UIView alloc] init];
+    checkBgV.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:checkBgV];
+    UILabel *checkL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:14];
+    checkL.numberOfLines = 3;
+    [self.contentView addSubview:checkL];
+    [checkL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV).offset(15);
+        make.left.equalTo(checkBgV).offset(8);
+        make.right.equalTo(checkBgV).offset(-8);
+    }];
+    [checkBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(10);
+        make.left.equalTo(bgV).offset(50);
+        make.right.equalTo(bgV).offset(-10);
+        make.bottom.equalTo(checkL).offset(15);
+    }];
+    
+    [stateBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(checkBgV);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(checkBgV.mas_left);
+    }];
+    [stateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(stateBgV).offset(10);
+        make.bottom.equalTo(stateBgV).offset(-10);
+        make.left.right.equalTo(stateBgV);
+    }];
+    [leftView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(stateBgV);
+        make.width.equalTo(@10);
+    }];
+    [rightView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.equalTo(checkBgV);
+        make.width.equalTo(@10);
+    }];
+    
+//    UIImageView *playImageV = [[UIImageView alloc] init];
+//    [self.contentView addSubview:playImageV];
+//    [playImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(checkBgV.mas_bottom).offset(10);
+//        make.left.equalTo(self.contentView).offset(20);
+//        make.right.equalTo(self.contentView).offset(-20);
+//        make.height.equalTo(@184);
+//    }];
+//    [playImageV circleViewWithRadius:6];
+//    UIButton *playBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"details_play"]];
+//    [self.contentView addSubview:playBtn];
+//    [playBtn addTarget:self action:@selector(playVideo) forControlEvents:UIControlEventTouchUpInside];
+//    [playBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.size.mas_equalTo(CGSizeMake(40, 40));
+//        make.center.equalTo(playImageV);
+//    }];
+    
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(MainScreenWidth - 20 * 2, 184);
+    layout.minimumLineSpacing = 0;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    [self.collectionView registerClass:[PBVideoCollectionViewCell class] forCellWithReuseIdentifier:VideoCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.scrollEnabled = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor blackColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV.mas_bottom).offset(10);
+        make.left.equalTo(self.contentView).offset(20);
+        make.right.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@184);
+    }];
+    
+    UILabel *timeLimitL = [UILabel z_labelWithText:@"任务期限" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeLimitL];
+    [timeLimitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(52, 16));
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+    UILabel *limitL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:limitL];
+    [limitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeLimitL);
+        make.left.equalTo(timeLimitL.mas_right).offset(18);
+    }];
+    self.referredL = referredL;
+    self.checkNameL = checkNameL;
+    self.stateImageV = stateImageV;
+    self.originatorL = originatorL;
+    self.timeL = timeL;
+    self.titleL = titleL;
+    self.typeL = typeL;
+    self.stateBgV = stateBgV;
+    self.stateL = stateL;
+    self.checkL = checkL;
+    self.limitL = limitL;
+    self.checkBgV = checkBgV;
+    self.timeLimitL = timeLimitL;
+    self.leftView = leftView;
+}
+
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.examineListModel.FirstCheck_Attachments.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineListModel.FirstCheck_Attachments[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        PBVideoCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:VideoCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.videoUrl = url;
+        cell.PlayVideoBlock = ^{
+            if (self.PlayVideoBlock) {
+                self.PlayVideoBlock(url);
+            }
+        };
+        return cell;
+    }else {
+        PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.roleType = PARTICIPANT;
+        cell.imageUrl = url;
+        return cell;
+    }
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineListModel.FirstCheck_Attachments[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        if (self.PlayVideoBlock) {
+            self.PlayVideoBlock([NSString stringWithFormat:@"%@%@",BaseUrl, [dict valueForKey:@"AttachmentUrl"]]);
+        }
+    }else {
+        SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+        photoBrowser.delegate = self;
+        photoBrowser.currentImageIndex = indexPath.item;
+        photoBrowser.imageCount = self.examineListModel.FirstCheck_Attachments.count;
+        photoBrowser.sourceImagesContainerView = self.collectionView;
+        [photoBrowser show];
+    }
+}
+ 
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+    UIImage *image = [UIImage imageWithData:data];;
+    return image;
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+    BOOL isChiness = [self IsChinese:examineListModel.bu_checker_RealName];
+    if (isChiness) {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringFromIndex:examineListModel.bu_checker_RealName.length - 1];
+    }else {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringToIndex:1];
+    }
+    self.checkNameL.text = examineListModel.bu_checker_RealName;
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+    }else if ([flagStr isEqualToString:@"C"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ acceptance"];
+    }else if ([flagStr isEqualToString:@"D"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ qualified"];
+    }else {
+        self.stateImageV.image = [UIImage imageNamed:@""];
+    }
+    self.originatorL.text = examineListModel.bu_examiner_name;
+    NSString *time = [examineListModel.CreateDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    self.timeL.text = [NSString stringWithFormat:@"于%@发起任务",time];
+    self.titleL.text = [NSString stringWithFormat:@"------- %@",examineListModel.ExamineRemark];
+    self.typeL.text = examineListModel.aedt_name;
+    NSRange range1 = [examineListModel.ExamineDate rangeOfString:@"T"];
+    NSRange range2 = [examineListModel.RectificateDate rangeOfString:@"T"];
+    NSString *start = [examineListModel.ExamineDate substringToIndex:range1.location];
+    NSString *end = [examineListModel.RectificateDate substringToIndex:range2.location];
+    self.limitL.text = [NSString stringWithFormat:@"%@ - %@",start, end];
+    if ([examineListModel.aede_severitylevel isEqualToString:@"一般"]) {
+        self.stateBgV.backgroundColor = PBColor(219, 232, 246);
+        self.leftView.backgroundColor = PBColor(219, 232, 246);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"严重"]) {
+        self.stateBgV.backgroundColor = PBColor(245, 232, 220);
+        self.leftView.backgroundColor = PBColor(245, 232, 220);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"非常严重"]) {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }else {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }
+    self.stateL.text = examineListModel.aede_severitylevel;
+    if (examineListModel.CacheRecordList.count > 0) {
+        self.checkL.text = [examineListModel.CacheRecordList[examineListModel.CacheRecordList.count - 1] valueForKey:@"RectificationRemark"];
+    }else {
+        self.checkL.text = @"内容错误";
+    }
+    [self.stateBgV circleViewWithRadius:6];
+    [self.checkBgV circleViewWithRadius:6];
+    [self.collectionView reloadData];
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.h
new file mode 100644
index 0000000..2fd84a6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBListDataTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/10/19.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBListDataTableViewCell : UITableViewCell
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) void (^deleteBlock)(void);
+@property (nonatomic, assign) BOOL isNotEdit;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.m
new file mode 100644
index 0000000..2fed312
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListDataTableViewCell.m
@@ -0,0 +1,72 @@
+//
+//  PBListDataTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/10/19.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBListDataTableViewCell.h"
+@interface PBListDataTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UIButton *deleteBtn;
+@end
+@implementation PBListDataTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = [UIColor whiteColor];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:16];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(5);
+        make.left.equalTo(self.contentView).offset(40);
+        make.right.equalTo(self.contentView).offset(-40);
+        make.height.equalTo(@30);
+        make.bottom.equalTo(self.contentView).offset(-5);
+    }];
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Issue_image_delete"]];
+    [deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.right.equalTo(self.contentView).offset(-10);
+        make.centerY.equalTo(titleL);
+    }];
+    self.titleL = titleL;
+    self.deleteBtn = deleteBtn;
+}
+- (void)deleteAction {
+    if (self.deleteBlock) {
+        self.deleteBlock();
+    }   
+}
+- (void)setTitle:(NSString *)title {
+    _title = title;
+    self.titleL.text = title;
+    if (self.isNotEdit) {
+        self.deleteBtn.hidden = YES;
+    }else {
+        self.deleteBtn.hidden = NO;
+    }
+}
+- (void)setIsNotEdit:(BOOL)isNotEdit {
+    _isNotEdit = isNotEdit;
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.h
new file mode 100644
index 0000000..bf23add
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.h
@@ -0,0 +1,20 @@
+//
+//  PBListTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBListTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic,copy) void (^ChooseBlock)(void);
+@property (nonatomic,copy) void (^DeleteBlock)(NSInteger index);
+@property (nonatomic, copy) void (^ToViewBlock)(NSInteger index);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.m
new file mode 100644
index 0000000..696e602
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBListTableViewCell.m
@@ -0,0 +1,179 @@
+//
+//  PBListTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBListTableViewCell.h"
+#import "PBExamineAddModel.h"
+#import "PBListDataTableViewCell.h"
+#import "PBArtifactsInfoModel.h"
+static NSString *const cellID = @"CellID";
+@interface PBListTableViewCell()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *descL;
+@property (nonatomic, weak) UILabel *promteL;
+@property (nonatomic, weak) UIButton *selectBtn;
+@end
+@implementation PBListTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:14];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.height.equalTo(@20);
+        
+    }];
+//    UILabel *descL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:18];
+//    descL.numberOfLines = 0;
+//    descL.textAlignment = NSTextAlignmentCenter;
+//    [self.contentView addSubview:descL];
+//    [descL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(titleL.mas_bottom).offset(16);
+//        make.left.right.equalTo(titleL);
+//        make.bottom.equalTo(self.contentView).offset(-16);
+//        make.height.mas_greaterThanOrEqualTo(25);
+//    }];
+    UILabel *promteL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:promteL];
+    [promteL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(10);
+        make.centerX.equalTo(titleL);
+        make.height.equalTo(@25);
+    }];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBListDataTableViewCell class] forCellReuseIdentifier:cellID];
+    [self.contentView addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(14);
+        make.left.right.bottom.equalTo(self.contentView);
+        make.height.equalTo(@1);
+//        make.bottom.equalTo(self.contentView).offset(-25);
+    }];
+    [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self);
+        make.bottom.equalTo(self.tableView.mas_bottom).offset(25);
+    }];
+    UIButton *selectBtn = [[UIButton alloc] init];
+    [selectBtn addTarget:self action:@selector(selectAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.contentView);
+        make.right.equalTo(self.contentView).offset(-100);
+    }];
+    self.titleL = titleL;
+//    self.descL = descL;
+    self.promteL = promteL;
+    self.selectBtn = selectBtn;
+}
+- (void)selectAction {
+    if (self.ChooseBlock) {
+        self.ChooseBlock();
+    }
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.titleL.text = examineAddModel.title;
+    if (examineAddModel.dataArr.count > 0) {
+        self.promteL.hidden = YES;
+        CGFloat tableViewH = examineAddModel.dataArr.count * 40.f;
+        [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.equalTo(@(tableViewH));
+        }];
+        [self.tableView reloadData];
+    }else {
+        self.promteL.hidden = NO;
+        self.promteL.text = examineAddModel.prompt;
+        [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.equalTo(@(1));
+        }];
+    }
+    if ([examineAddModel.key isEqualToString:@"Materials"]) {
+        self.selectBtn.hidden = YES;
+    }else {
+        self.selectBtn.hidden = NO;
+    }
+    
+    
+    
+//    NSMutableString *strM = [[NSMutableString alloc] init];
+//    if (examineAddModel.dataArr.count > 0) {
+//        self.promteL.hidden = YES;
+//        for (NSInteger i = 0 ; i < examineAddModel.dataArr.count; i++) {
+//            NSDictionary *obj = examineAddModel.dataArr[i];
+//            NSString *str;
+//            if ([examineAddModel.key isEqualToString:@"Materials"] || [examineAddModel.key isEqualToString:@"rel_materialjson"]) {
+//                str = [obj valueForKey:@"bm_materialname"];
+//            }else {
+//                str = [obj valueForKey:@"NAME_"];
+//            }
+//            if (i == examineAddModel.dataArr.count - 1) {
+//                [strM appendFormat:@"%@",str];
+//            }else {
+//                [strM appendFormat:@"%@\n",str];
+//            }
+//        }
+//        self.descL.text = strM.copy;
+//    }else {
+//        self.descL.text = @"";
+//        self.promteL.hidden = NO;
+//        self.promteL.text = examineAddModel.prompt;
+//    }
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.examineAddModel.dataArr.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBListDataTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    if ([self.examineAddModel.key isEqualToString:@"Materials"] || [self.examineAddModel.key isEqualToString:@"rel_materialjson"]) {
+        id obj = self.examineAddModel.dataArr[indexPath.row];
+        if ([obj isKindOfClass:[PBArtifactsInfoModel class]]) {
+            PBArtifactsInfoModel *model = (PBArtifactsInfoModel *)obj;
+            cell.isNotEdit = NO;
+            cell.title = model.bm_materialname;
+        }else {
+            PBArtifactsInfoModel *model = [PBArtifactsInfoModel yy_modelWithDictionary:obj];
+            cell.isNotEdit = YES;
+            cell.title = model.bm_materialname;
+        }
+    }else {
+        cell.isNotEdit = YES;
+        NSDictionary *dict = self.examineAddModel.dataArr[indexPath.row];
+        cell.title = [dict valueForKey:@"NAME_"];
+    }
+    cell.deleteBlock = ^{
+        if (self.DeleteBlock) {
+            self.DeleteBlock(indexPath.row);
+        }
+    };
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.ToViewBlock) {
+        self.ToViewBlock(indexPath.row);
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.h
new file mode 100644
index 0000000..0bebc48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.h
@@ -0,0 +1,15 @@
+//
+//  PBMoreChooseTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBMoreChooseTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSArray<PBExamineAddModel *> *dataArr;
+@property (nonatomic, copy) void(^ChooseBlock)(void);
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.m
new file mode 100644
index 0000000..dfdb55b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBMoreChooseTableViewCell.m
@@ -0,0 +1,133 @@
+//
+//  PBMoreChooseTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBMoreChooseTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBMoreChooseTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *divisionL;
+@property (nonatomic, weak) UILabel *itemizedL;
+@property (nonatomic, weak) UILabel *inspectionL;
+@end
+@implementation PBMoreChooseTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *divisionL = [UILabel z_labelWithText:@"" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    divisionL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:divisionL];
+    [divisionL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    UILabel *itemizedL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:MarkedFontSize];
+    itemizedL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:itemizedL];
+    [itemizedL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(divisionL.mas_bottom).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    UILabel *inspectionL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:MarkedFontSize];
+    inspectionL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:inspectionL];
+    [inspectionL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(itemizedL.mas_bottom).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self);
+        make.bottom.equalTo(inspectionL.mas_bottom).offset(16);
+    }];
+    UIButton *clickBtn = [[UIButton alloc] init];
+    [self.contentView addSubview:clickBtn];
+    [clickBtn addTarget:self action:@selector(clickAction) forControlEvents:UIControlEventTouchUpInside];
+    [clickBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.divisionL = divisionL;
+    self.itemizedL = itemizedL;
+    self.inspectionL = inspectionL;
+}
+- (void)clickAction {
+    if (self.ChooseBlock) {
+        self.ChooseBlock();
+    }
+}
+
+- (void)setDataArr:(NSArray<PBExamineAddModel *> *)dataArr {
+    _dataArr = dataArr;
+    if (dataArr.count == 3) {
+        PBExamineAddModel *divisionModel = dataArr[0];
+        PBExamineAddModel *itemizedModel = dataArr[1];
+        PBExamineAddModel *inspectionModel = dataArr[2];
+        self.titleL.text = [NSString stringWithFormat:@"%@-%@-%@(选填)",divisionModel.title, itemizedModel.title, inspectionModel.title];
+        if (divisionModel.dataDict) {
+            if (!itemizedModel.dataDict) {
+                NSDictionary *dict = @{
+                                       @"name":@"<无分项工程>",
+                                       @"value":@"",
+                                       @"children":@""
+                                       };
+                itemizedModel.dataDict = dict;
+            }
+            if (!inspectionModel.dataDict) {
+                NSDictionary *dict = @{
+                                       @"name":@"<无检验批>",
+                                       @"value":@"",
+                                       @"children":@""
+                                       };
+                inspectionModel.dataDict = dict;
+            }
+            self.itemizedL.hidden = NO;
+            self.inspectionL.hidden = NO;
+            self.divisionL.text = [divisionModel.dataDict valueForKey:@"name"];
+            self.itemizedL.text = [itemizedModel.dataDict valueForKey:@"name"];
+            self.inspectionL.text = [inspectionModel.dataDict valueForKey:@"name"];
+            self.divisionL.textColor = TitleColor;
+            [self.contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                make.top.left.right.equalTo(self);
+                make.bottom.equalTo(self.inspectionL.mas_bottom).offset(16);
+            }];
+        }else {
+            self.itemizedL.hidden = YES;
+            self.inspectionL.hidden = YES;
+            self.divisionL.textColor = DescColor;
+            self.divisionL.text = divisionModel.prompt;
+            [self.contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                make.top.left.right.equalTo(self);
+                make.bottom.equalTo(self.divisionL.mas_bottom).offset(16);
+            }];
+        }
+    }else {
+        NSLog(@"数据错误");
+    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.h
new file mode 100644
index 0000000..12fd93d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.h
@@ -0,0 +1,15 @@
+//
+//  PBOneChooseTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBOneChooseTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void(^ChooseBlock)(void);
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.m
new file mode 100644
index 0000000..0a3529b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseTableViewCell.m
@@ -0,0 +1,89 @@
+//
+//  PBOneChooseTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBOneChooseTableViewCell.h"
+#import "PBExamineAddModel.h"
+
+@interface PBOneChooseTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *promptL;
+@end
+
+@implementation PBOneChooseTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:14];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@20);
+    }];
+    UILabel *promptL = [UILabel z_labelWithText:@"" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@25);
+        make.bottom.equalTo(self.contentView).offset(-16);
+    }];
+    
+    UIButton *button = [[UIButton alloc] init];
+    [button addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:button];
+    [button mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.promptL = promptL;
+}
+- (void)clickBtn {
+    if (self.examineAddModel.isAddExamine || self.examineAddModel.isIssueManage) {
+        if (self.ChooseBlock) {
+            self.ChooseBlock();
+        }
+    }
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.titleL.text = examineAddModel.title;
+    if (examineAddModel.dataDict == nil) {
+        self.promptL.text = examineAddModel.prompt;
+        self.promptL.textColor = DescColor;
+    }else {
+        if ([[examineAddModel.dataDict allKeys] containsObject:@"ec_name"]) {
+           self.promptL.text = [examineAddModel.dataDict valueForKey:@"ec_name"];
+        }else {
+            if ([[examineAddModel.dataDict allKeys] containsObject:@"aedt_name"]) {
+                self.promptL.text = [examineAddModel.dataDict valueForKey:@"aedt_name"];
+            }else {
+                self.promptL.text = @"";
+            }
+        }
+        self.promptL.textColor = TitleColor;
+    }
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.h
new file mode 100644
index 0000000..df69299
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.h
@@ -0,0 +1,20 @@
+//
+//  PBOneChooseView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/19.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+
+@interface PBOneChooseView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, copy) void(^ChooseCompleteBlock)(BOOL isSelect);
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, strong) NSArray *dataArr;
+- (void)show;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.m
new file mode 100644
index 0000000..14a7ccc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBOneChooseView.m
@@ -0,0 +1,200 @@
+//
+//  PBOneChooseView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/19.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBOneChooseView.h"
+#import "PBExamineAddModel.h"
+@interface PBOneChooseView()<UIPickerViewDelegate,UIPickerViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UIPickerView *pickerView;
+@property (nonatomic, weak) UILabel *engineeringTieleL;
+@property (nonatomic, weak) UILabel *engineeringSelectL;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, strong) NSDictionary *selectDate;
+@property (nonatomic, assign) BOOL isSelect;
+@end
+@implementation PBOneChooseView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self setupUI];
+    }
+    return self;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point = [[touches anyObject]locationInView:self];
+    CALayer *layer = [self.layer hitTest:point];
+    if (layer == self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    if (self.ChooseCompleteBlock) {
+        self.ChooseCompleteBlock(_isSelect);
+    }
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBOneChooseView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width, 3)];
+    topView.backgroundColor = WarningColor;
+    [self.bgView addSubview:topView];
+
+    UILabel *engineeringTieleL = [UILabel z_labelWithText:@"状态" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:engineeringTieleL];
+    [engineeringTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(34);
+        make.centerX.equalTo(self.bgView);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *engineeringSelectL = [UILabel z_labelWithText:@"请选择" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    engineeringSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:engineeringSelectL];
+    [engineeringSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(engineeringTieleL.mas_bottom).offset(14);
+        make.left.equalTo(self.bgView).offset(16);
+        make.right.equalTo(self.bgView).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UIView *lin1View = [[UIView alloc] init];
+    lin1View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin1View];
+    [lin1View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(132);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    UILabel *promptL = [UILabel z_labelWithText:@"请选择单位工程" Color:PromptColor isBold:NO Font:MarkedFontSize];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin1View).offset(15);
+        make.size.mas_equalTo(CGSizeMake(130, 25));
+        make.centerX.equalTo(self.bgView);
+    }];
+    
+    UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn addTarget:self action:@selector(determineBtnActio) forControlEvents:UIControlEventTouchUpInside];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(promptL);
+        make.right.equalTo(self.bgView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(52, 50));
+    }];
+    
+    UIView *lin2View = [[UIView alloc] init];
+    lin2View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin2View];
+    [lin2View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin1View.mas_bottom).offset(54);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    self.pickerView = [[UIPickerView alloc]init];
+    self.pickerView.backgroundColor = [UIColor whiteColor];
+    self.pickerView.delegate = self;
+    self.pickerView.dataSource = self;
+    [self.bgView addSubview:self.pickerView];
+    [self.pickerView reloadAllComponents];//刷新UIPickerView
+    [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin2View.mas_bottom);
+        make.right.equalTo(self.bgView).offset(-44);
+        make.left.equalTo(self.bgView).offset(44);
+        make.height.equalTo(@282);
+    }];
+    self.engineeringTieleL = engineeringTieleL;
+    self.engineeringSelectL = engineeringSelectL;
+    self.promptL = promptL;
+}
+
+//确定按钮点击方法
+- (void)determineBtnActio {
+    self.isSelect = YES;
+    self.examineAddModel.dataDict = self.selectDate;
+    self.engineeringSelectL.text = [self.examineAddModel.dataDict valueForKey:@"name"];
+    [self hidden];
+}
+
+
+#pragma mark UIPickerViewDelegate && UIPickerViewDataSource
+- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
+    return 1;
+}
+
+- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
+    return self.dataArr.count;
+}
+
+- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
+    return 60.f;
+}
+
+- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
+    self.selectDate = self.dataArr[row];
+}
+
+- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
+    for(UIView *singleLine in pickerView.subviews){
+        if (singleLine.frame.size.height < 1){
+            singleLine.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+        }
+    }
+    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width / 2, 30)];
+    label.textAlignment = NSTextAlignmentCenter;
+    label.font = [UIFont systemFontOfSize:20];
+    NSDictionary *dict = self.dataArr[row];
+    label.text = [dict valueForKey:@"name"];
+    return label;
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    self.engineeringTieleL.text = examineAddModel.title;
+    if (examineAddModel.dataDict) {
+        self.engineeringSelectL.text = [examineAddModel.dataDict valueForKey:@"name"];
+        self.engineeringSelectL.textColor = TitleColor;
+    }else {
+        self.engineeringSelectL.text = examineAddModel.prompt;
+        self.engineeringSelectL.textColor = IgnoreColor;
+    }
+}
+- (void)setDataArr:(NSArray *)dataArr {
+    _dataArr = dataArr;
+    self.selectDate = dataArr[0];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBRecordingView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBRecordingView.h
new file mode 100644
index 0000000..5a0dc9c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBRecordingView.h
@@ -0,0 +1,15 @@
+//
+//  PBRecordingView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/3.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBRecordingView : UIView
+@property (nonatomic, copy) void(^endRecordingBlock)(NSString *recordingName);
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.h
new file mode 100644
index 0000000..b0c712a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.h
@@ -0,0 +1,21 @@
+//
+//  PBStructureTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/4/2.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBArtifactsModel;
+@class PBETaskModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBStructureTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSDictionary *dict;
+@property (nonatomic, copy) void(^NextLevelBlock)(void);
+@property (nonatomic, strong) PBArtifactsModel *artifactsModel;
+@property (nonatomic, strong) PBETaskModel *taskModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.m
new file mode 100644
index 0000000..a975ecf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBStructureTableViewCell.m
@@ -0,0 +1,102 @@
+//
+//  PBStructureTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/4/2.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBStructureTableViewCell.h"
+#import "PBArtifactsModel.h"
+#import "PBETaskModel.h"
+@interface PBStructureTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UIImageView *nextLevelV;
+@end
+@implementation PBStructureTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = PBColor(233, 235, 237);
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.bottom.equalTo(self.contentView);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    [bgView circleViewWithRadius:6];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"folder"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.center.equalTo(bgView);
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(bgView);
+        make.left.equalTo(bgView.mas_right).offset(10);
+        make.right.equalTo(self.contentView).offset(-61);
+        make.height.equalTo(@20);
+    }];
+    
+    UIImageView *nextLevelV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"course_btn_company_open"]];
+    [self.contentView addSubview:nextLevelV];
+    [nextLevelV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+        make.right.equalTo(self.contentView).offset(-30);
+        make.centerY.equalTo(bgView);
+    }];
+    UIButton *selectBtn = [[UIButton alloc] init];
+    [selectBtn addTarget:self action:@selector(nextLevelAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.nextLevelV = nextLevelV;
+}
+- (void)nextLevelAction {
+    if ([self.artifactsModel.DirectChildrenCount isEqualToString:@"0"] && [self.artifactsModel.ChildrenItemCount isEqualToString:@"0"]) {
+        [YJProgressHUD showMessage:@"暂无数据" inView:self];
+    }else {
+        if (self.NextLevelBlock) {
+            self.NextLevelBlock();
+        }
+    }
+}
+- (void)setDict:(NSDictionary *)dict {
+    _dict = dict;
+    self.titleL.text = [dict valueForKey:@"ec_name"];
+}
+- (void)setArtifactsModel:(PBArtifactsModel *)artifactsModel {
+    _artifactsModel = artifactsModel;
+    self.titleL.text = artifactsModel.bmc_name;
+    if ([artifactsModel.DirectChildrenCount isEqualToString:@"0"] && [artifactsModel.ChildrenItemCount isEqualToString:@"0"]) {
+        self.nextLevelV.hidden = YES;
+    }else {
+        self.nextLevelV.hidden = NO;
+    }
+}
+- (void)setTaskModel:(PBETaskModel *)taskModel {
+    _taskModel = taskModel;
+    self.titleL.text = taskModel.NAME_;
+    self.nextLevelV.hidden = NO;
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.h
new file mode 100644
index 0000000..d47b1b6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.h
@@ -0,0 +1,15 @@
+//
+//  PBTextShowTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBTextShowTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void (^EditBlock)(void);
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.m
new file mode 100644
index 0000000..f877028
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTextShowTableViewCell.m
@@ -0,0 +1,68 @@
+//
+//  PBTextShowTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBTextShowTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBTextShowTableViewCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *textL;
+@end
+@implementation PBTextShowTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@20);
+    }];
+    UILabel *textL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:MarkedFontSize];
+    textL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:textL];
+    [textL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@25);
+        make.bottom.equalTo(self.contentView).offset(-16);
+    }];
+    UIButton *btn = [[UIButton alloc] init];
+    [self.contentView addSubview:btn];
+    [btn addTarget:self action:@selector(selectedAction) forControlEvents:UIControlEventTouchUpInside];
+    [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.textL = textL;
+}
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    _titleL.text = examineAddModel.title;
+    _textL.text = examineAddModel.dataStr;
+}
+- (void)selectedAction {
+    if (self.EditBlock) {
+        self.EditBlock();
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.h
new file mode 100644
index 0000000..3cb1f53
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.h
@@ -0,0 +1,22 @@
+//
+//  PBTimeChooseView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/26.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+
+@interface PBTimeChooseView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, copy) void(^ChooseCompleteBlock)(BOOL isSelectLeft, BOOL isSelectRight);
+@property (nonatomic, assign) NSInteger index;
+@property (nonatomic, strong) PBExamineAddModel *leftExamineAddModel;
+@property (nonatomic, strong) PBExamineAddModel *rightExamineAddModel;
+@property (nonatomic, assign) BOOL isAddRecord;
+- (void)show;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.m
new file mode 100644
index 0000000..3e7afed
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTimeChooseView.m
@@ -0,0 +1,453 @@
+//
+//  PBTimeChooseView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/26.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBTimeChooseView.h"
+#import "PBExamineAddModel.h"
+#define MAXYEAR 2099
+#define MINYEAR 2000
+
+@interface PBTimeChooseView()<UIPickerViewDelegate,UIPickerViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UIPickerView *pickerView;
+
+//@property (nonatomic, strong) NSArray *dataArr;
+@property (nonatomic, weak) UIView *topView;
+
+@property (nonatomic, weak) UILabel *leftTitleL;
+@property (nonatomic, weak) UILabel *rightTitleL;
+@property (nonatomic, weak) UILabel *leftSelectL;
+@property (nonatomic, weak) UILabel *rightSelectL;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, assign) BOOL isSelectLeft;
+@property (nonatomic, assign) BOOL isSelectRight;
+@property (nonatomic, copy) NSString *selectStr;
+//@property (nonatomic, strong) NSArray *leftData;
+//@property (nonatomic, strong) NSArray *rightData;
+
+@end
+@implementation PBTimeChooseView{
+    //日期存储数组
+    NSMutableArray *_yearArray;
+    NSMutableArray *_monthArray;
+    NSMutableArray *_dayArray;
+    
+    NSString *_dateFormatter;
+    //记录位置
+    NSInteger yearIndex;
+    NSInteger monthIndex;
+    NSInteger dayIndex;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        _dateFormatter = @"yyyy-MM-dd";
+        [self setupUI];
+        [self defaultConfig];
+    }
+    return self;
+}
+-(void)defaultConfig {
+    //设置年月日时分数据
+    _yearArray = [self setArray:_yearArray];
+    _monthArray = [self setArray:_monthArray];
+    _dayArray = [self setArray:_dayArray];
+    for (int i=1; i<13; i++) {
+        NSString *num = [NSString stringWithFormat:@"%02d",i];
+        [_monthArray addObject:num];
+    }
+    for (NSInteger i=MINYEAR; i<=MAXYEAR; i++) {
+        NSString *num = [NSString stringWithFormat:@"%ld",(long)i];
+        [_yearArray addObject:num];
+    }
+}
+- (NSMutableArray *)setArray:(id)mutableArray {
+    if (mutableArray)
+        [mutableArray removeAllObjects];
+    else
+        mutableArray = [NSMutableArray array];
+    return mutableArray;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point = [[touches anyObject]locationInView:self];
+    CALayer *layer = [self.layer hitTest:point];
+    if (layer == self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    if (self.ChooseCompleteBlock) {
+        self.ChooseCompleteBlock(_isSelectLeft, _isSelectRight);
+    }
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBTimeChooseView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width / 2, 3)];
+    topView.backgroundColor = WarningColor;
+    [self.bgView addSubview:topView];
+    
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(33);
+        make.centerX.equalTo(self.bgView);
+        make.width.equalTo(@1);
+        make.height.equalTo(@55);
+    }];
+    UIButton *leftBtn = [[UIButton alloc] init];
+    [leftBtn addTarget:self action:@selector(statusBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:leftBtn];
+    [leftBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.left.equalTo(self.bgView);
+        make.right.equalTo(linView.mas_left);
+        make.height.equalTo(@129);
+    }];
+    
+    UIButton *rightBtn = [[UIButton alloc] init];
+    [rightBtn addTarget:self action:@selector(typeBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:rightBtn];
+    [rightBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.right.equalTo(self.bgView);
+        make.left.equalTo(linView.mas_right);
+        make.height.equalTo(@129);
+    }];
+    
+    UILabel *leftTieleL = [UILabel z_labelWithText:@"状态" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:leftTieleL];
+    [leftTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(leftBtn).offset(31);
+        make.centerX.equalTo(leftBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *rightTieleL = [UILabel z_labelWithText:@"类型" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:rightTieleL];
+    [rightTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(rightBtn).offset(31);
+        make.centerX.equalTo(rightBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *leftSelectL = [UILabel z_labelWithText:@"请选择" Color:WarningColor isBold:NO Font:MarkedFontSize];
+    leftSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:leftSelectL];
+    [leftSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(leftTieleL.mas_bottom).offset(14);
+        make.left.equalTo(leftBtn).offset(16);
+        make.right.equalTo(leftBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UILabel *rightSelectL = [UILabel z_labelWithText:@"请选择" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    rightSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:rightSelectL];
+    [rightSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(rightTieleL.mas_bottom).offset(14);
+        make.left.equalTo(rightBtn).offset(16);
+        make.right.equalTo(rightBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UIView *lin1View = [[UIView alloc] init];
+    lin1View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin1View];
+    [lin1View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(leftBtn.mas_bottom);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    UILabel *promptL =[UILabel z_labelWithText:@"请选择状态" Color:PromptColor isBold:NO Font:MarkedFontSize];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin1View).offset(15);
+        make.size.mas_equalTo(CGSizeMake(130, 25));
+        make.centerX.equalTo(self.bgView);
+    }];
+    
+    UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn addTarget:self action:@selector(determineBtnActio) forControlEvents:UIControlEventTouchUpInside];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(promptL);
+        make.right.equalTo(self.bgView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(52, 50));
+    }];
+    
+    UIView *lin2View = [[UIView alloc] init];
+    lin2View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin2View];
+    [lin2View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(promptL.mas_bottom).offset(13);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    self.pickerView = [[UIPickerView alloc]init];
+    self.pickerView.backgroundColor = [UIColor whiteColor];
+    self.pickerView.delegate = self;
+    self.pickerView.dataSource = self;
+    [self.bgView addSubview:self.pickerView];
+    [self.pickerView reloadAllComponents];//刷新UIPickerView
+    [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin2View.mas_bottom);
+        make.right.equalTo(self.bgView).offset(-44);
+        make.left.equalTo(self.bgView).offset(44);
+        make.height.equalTo(@282);
+    }];
+    self.topView = topView;
+    self.leftTitleL = leftTieleL;
+    self.rightTitleL = rightTieleL;
+    self.leftSelectL = leftSelectL;
+    self.rightSelectL = rightSelectL;
+    self.promptL = promptL;
+}
+
+- (void)determineBtnActio {
+    if (self.index == 0) {
+        self.isSelectLeft = YES;
+        self.leftExamineAddModel.dataStr = self.selectStr.copy;
+        self.leftSelectL.text = self.leftExamineAddModel.dataStr;
+        if(self.rightExamineAddModel.dataStr) {
+            [self hidden];
+        }else {
+            self.index = 1;
+        }
+    }else {
+        self.isSelectRight = YES;
+        self.rightExamineAddModel.dataStr =  self.selectStr.copy;
+        self.rightSelectL.text = self.rightExamineAddModel.dataStr;
+        if(self.leftExamineAddModel.dataStr) {
+            [self hidden];
+        }else {
+            self.index = 0;
+        }
+    }
+}
+- (void)statusBtnAction {
+    self.index = 0;
+}
+
+- (void)typeBtnAction {
+    if (self.rightExamineAddModel.roleType != CREATOR) {
+        return;
+    }
+    self.index = 1;
+}
+
+#pragma mark UIPickerViewDelegate && UIPickerViewDataSource
+- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
+    return 3;
+}
+
+- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
+    NSArray *numberArr = [self getNumberOfRowsInComponent];
+    return [numberArr[component] integerValue];
+}
+
+- (NSArray *)getNumberOfRowsInComponent {
+    NSInteger yearNum = _yearArray.count;
+    NSInteger monthNum = _monthArray.count;
+    NSInteger dayNum = [self DaysfromYear:[_yearArray[yearIndex] integerValue] andMonth:[_monthArray[monthIndex] integerValue]];
+    return @[@(yearNum),@(monthNum),@(dayNum)];
+}
+
+- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
+    return 60.f;
+}
+
+- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
+    if (component == 0) {
+        yearIndex = row;
+    }
+    if (component == 1) {
+        monthIndex = row;
+    }
+    if (component == 2) {
+        dayIndex = row;
+    }
+    if (component == 0 || component == 1){
+        [self DaysfromYear:[_yearArray[yearIndex] integerValue] andMonth:[_monthArray[monthIndex] integerValue]];
+        if (_dayArray.count-1<dayIndex) {
+            dayIndex = _dayArray.count-1;
+        }
+        [pickerView reloadComponent:2];
+    }
+    
+    self.selectStr = [NSString stringWithFormat:@"%@-%@-%@",_yearArray[yearIndex],_monthArray[monthIndex],_dayArray[dayIndex]];
+}
+
+- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
+        UILabel *customLabel = (UILabel *)view;
+        if (!customLabel) {
+            customLabel = [[UILabel alloc] init];
+            customLabel.textAlignment = NSTextAlignmentCenter;
+            [customLabel setFont:[UIFont systemFontOfSize:20]];
+        }
+        NSString *title;
+        if (component==0) {
+            title = _yearArray[row];
+        }else if (component==1) {
+            title = _monthArray[row];
+        }else if (component==2) {
+            title = _dayArray[row];
+        }
+        
+        customLabel.text = title;
+        customLabel.textColor = TitleColor;
+        return customLabel;
+}
+- (void)setIndex:(NSInteger)index {
+    _index = index;
+    if (index == 0) {
+        [UIView animateWithDuration:0.2 animations:^{
+            self.topView.x = 0;
+        }];
+        self.leftSelectL.textColor = WarningColor;
+        if (self.rightExamineAddModel.dataStr) {
+            self.rightSelectL.textColor = TitleColor;
+        }else {
+            self.rightSelectL.textColor = IgnoreColor;
+        }
+        self.promptL.text = self.leftExamineAddModel.prompt;
+        if(_examineAddModel.dataStr) {
+            NSDate *scrollToDate = [NSDate date:_examineAddModel.dataStr WithFormat:_dateFormatter];
+            [self getNowDate:scrollToDate animated:NO];
+        }else {
+            [self getNowDate:nil animated:NO];
+        }
+    }else {
+        [UIView animateWithDuration:0.2 animations:^{
+            self.topView.x = self.bgView.width / 2;
+        }];
+        self.rightSelectL.textColor = WarningColor;
+        if (self.leftExamineAddModel.dataStr) {
+            self.leftSelectL.textColor = TitleColor;
+        }else {
+            self.leftSelectL.textColor = IgnoreColor;
+        }
+        self.promptL.text = self.rightExamineAddModel.prompt;
+        if(_examineAddModel.dataStr) {
+            NSDate *scrollToDate = [NSDate date:_examineAddModel.dataStr WithFormat:_dateFormatter];
+            [self getNowDate:scrollToDate animated:NO];
+        }else {
+            [self getNowDate:nil animated:NO];
+        }
+    }
+}
+//滚动到指定的时间位置
+- (void)getNowDate:(NSDate *)date animated:(BOOL)animated {
+    if (!date) {
+        date = [NSDate date];
+    }
+    [self DaysfromYear:date.year andMonth:date.month];
+    self.selectStr = [NSString stringWithFormat:@"%zd-%02zd-%02zd",date.year, date.month, date.day];
+    yearIndex = date.year-MINYEAR;
+    monthIndex = date.month-1;
+    dayIndex = date.day-1;
+    NSArray *indexArray = @[@(yearIndex),@(monthIndex),@(dayIndex)];
+    [self.pickerView reloadAllComponents];
+    for (int i=0; i<indexArray.count; i++) {
+        [self.pickerView selectRow:[indexArray[i] integerValue] inComponent:i animated:animated];
+    }
+}
+
+//通过年月求每月天数
+- (NSInteger)DaysfromYear:(NSInteger)year andMonth:(NSInteger)month
+{
+    NSInteger num_year  = year;
+    NSInteger num_month = month;
+    BOOL isrunNian = num_year%4==0 ? (num_year%100==0? (num_year%400==0?YES:NO):YES):NO;
+    switch (num_month) {
+        case 1:case 3:case 5:case 7:case 8:case 10:case 12:{
+            [self setdayArray:31];
+            return 31;
+        }
+        case 4:case 6:case 9:case 11:{
+            [self setdayArray:30];
+            return 30;
+        }
+        case 2:{
+            if (isrunNian) {
+                [self setdayArray:29];
+                return 29;
+            }else{
+                [self setdayArray:28];
+                return 28;
+            }
+        }
+        default:
+            break;
+    }
+    return 0;
+}
+//设置每月的天数数组
+- (void)setdayArray:(NSInteger)num {
+    [_dayArray removeAllObjects];
+    for (int i=1; i<=num; i++) {
+        [_dayArray addObject:[NSString stringWithFormat:@"%02d",i]];
+    }
+}
+
+- (void)setLeftExamineAddModel:(PBExamineAddModel *)leftExamineAddModel {
+    _leftExamineAddModel = leftExamineAddModel;
+    _leftTitleL.text = leftExamineAddModel.title;
+    if (leftExamineAddModel.dataStr) {
+        _leftSelectL.text = leftExamineAddModel.dataStr;
+    }else {
+        _leftSelectL.text = @"请选择";
+    }
+}
+
+- (void)setRightExamineAddModel:(PBExamineAddModel *)rightExamineAddModel {
+    _rightExamineAddModel = rightExamineAddModel;
+    _rightTitleL.text = rightExamineAddModel.title;
+    if (rightExamineAddModel.dataStr) {
+        _rightSelectL.text = rightExamineAddModel.dataStr;
+    }else {
+        _rightSelectL.text = @"请选择";
+    }
+}
+- (void)setIsAddRecord:(BOOL)isAddRecord {
+    _isAddRecord = isAddRecord;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.h
new file mode 100644
index 0000000..9d8f7b2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.h
@@ -0,0 +1,16 @@
+//
+//  PBTwoChooseTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+@interface PBTwoChooseTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^ChooseBlock)(NSInteger index);
+@property (nonatomic, strong) PBExamineAddModel *leftExamineAddModel;
+@property (nonatomic, strong) PBExamineAddModel *rightExamineAddModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.m
new file mode 100644
index 0000000..d21db7b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseTableViewCell.m
@@ -0,0 +1,144 @@
+//
+//  PBTwoChooseTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/13.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBTwoChooseTableViewCell.h"
+#import "PBExamineAddModel.h"
+@interface PBTwoChooseTableViewCell()
+@property (nonatomic, weak) UILabel *leftTitleL;
+@property (nonatomic, weak) UILabel *rightTitleL;
+@property (nonatomic, weak) UILabel *leftSelectL;
+@property (nonatomic, weak) UILabel *rightSelectL;
+@end
+@implementation PBTwoChooseTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.contentView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.bottom.equalTo(self.contentView).offset(-22);
+        make.centerX.equalTo(self.contentView);
+        make.width.equalTo(@1);
+        make.height.equalTo(@55);
+    }];
+    UIButton *statusBtn = [[UIButton alloc] init];
+    [statusBtn addTarget:self action:@selector(leftBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:statusBtn];
+    [statusBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView);
+        make.left.bottom.equalTo(self.contentView);
+        make.right.equalTo(linView.mas_left);
+    }];
+    
+    UIButton *typeBtn = [[UIButton alloc] init];
+    [typeBtn addTarget:self action:@selector(rightBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:typeBtn];
+    [typeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView);
+        make.right.bottom.equalTo(self.contentView);
+        make.left.equalTo(linView.mas_right);
+    }];
+    
+    UILabel *leftTitleL = [UILabel z_labelWithText:@"轴网(选填)" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:leftTitleL];
+    [leftTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.centerX.equalTo(statusBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *rightTitleL = [UILabel z_labelWithText:@"流水段(选填)" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:rightTitleL];
+    [rightTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.centerX.equalTo(typeBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *leftSelectL = [UILabel z_labelWithText:@"请选择" Color:TitleColor isBold:NO Font:MarkedFontSize];
+    leftSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:leftSelectL];
+    [leftSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(leftTitleL.mas_bottom).offset(16);
+        make.left.equalTo(statusBtn).offset(16);
+        make.right.equalTo(statusBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UILabel *rightSelectL = [UILabel z_labelWithText:@"请选择" Color:TitleColor isBold:NO Font:MarkedFontSize];
+    rightSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:rightSelectL];
+    [rightSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(rightTitleL.mas_bottom).offset(16);
+        make.left.equalTo(typeBtn).offset(16);
+        make.right.equalTo(typeBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    self.leftTitleL = leftTitleL;
+    self.rightTitleL = rightTitleL;
+    self.leftSelectL = leftSelectL;
+    self.rightSelectL = rightSelectL;
+}
+- (void)leftBtnAction {
+    if (self.leftExamineAddModel.isAddExamine || self.leftExamineAddModel.isIssueManage) {
+        if (self.ChooseBlock) {
+            self.ChooseBlock(0);
+        }
+    }
+}
+- (void)rightBtnAction {
+    if (self.leftExamineAddModel.isAddExamine || self.leftExamineAddModel.isIssueManage) {
+        if (self.ChooseBlock) {
+            self.ChooseBlock(1);
+        }
+    }
+}
+
+- (void)setLeftExamineAddModel:(PBExamineAddModel *)leftExamineAddModel {
+    _leftExamineAddModel = leftExamineAddModel;
+    self.leftTitleL.text = leftExamineAddModel.title;
+    if (_leftExamineAddModel.isAddExamine) {
+        if (_leftExamineAddModel.dataDict) {
+            self.leftSelectL.text = [_leftExamineAddModel.dataDict valueForKey:@"aedt_name"];
+        }else {
+            self.leftSelectL.text = _leftExamineAddModel.prompt;
+        }
+    }else {
+        self.leftSelectL.text = leftExamineAddModel.dataStr;
+    }
+}
+
+- (void)setRightExamineAddModel:(PBExamineAddModel *)rightExamineAddModel {
+    _rightExamineAddModel = rightExamineAddModel;
+    self.rightTitleL.text = rightExamineAddModel.title;
+    if (_rightExamineAddModel.isAddExamine) {
+        if (_rightExamineAddModel.dataDict) {
+            self.rightSelectL.text = [_rightExamineAddModel.dataDict valueForKey:@"aedt_name"];
+        }else {
+            self.rightSelectL.text = _rightExamineAddModel.prompt;
+        }
+    }else {
+        self.rightSelectL.text = rightExamineAddModel.dataStr;
+    }
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+    
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.h
new file mode 100644
index 0000000..83b344d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.h
@@ -0,0 +1,23 @@
+//
+//  PBTwoChooseView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/24.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineAddModel;
+
+@interface PBTwoChooseView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, copy) void(^ChooseCompleteBlock)(BOOL isSelectLeft, BOOL isSelectRight);
+@property (nonatomic, assign) NSInteger index;
+@property (nonatomic, strong) PBExamineAddModel *leftExamineAddModel;
+@property (nonatomic, strong) PBExamineAddModel *rightExamineAddModel;
+@property (nonatomic, strong) NSArray *leftData;
+@property (nonatomic, strong) NSArray *rightData;
+
+- (void)show;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.m
new file mode 100644
index 0000000..955f715
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/PBTwoChooseView.m
@@ -0,0 +1,330 @@
+//
+//  PBTwoChooseView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/12/24.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBTwoChooseView.h"
+#import "PBExamineAddModel.h"
+@interface PBTwoChooseView()<UIPickerViewDelegate,UIPickerViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UIPickerView *pickerView;
+
+@property (nonatomic, strong) NSArray *dataArr;
+@property (nonatomic, weak) UIView *topView;
+
+@property (nonatomic, weak) UILabel *leftTitleL;
+@property (nonatomic, weak) UILabel *rightTitleL;
+@property (nonatomic, weak) UILabel *leftSelectL;
+@property (nonatomic, weak) UILabel *rightSelectL;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, assign) BOOL isSelectLeft;
+@property (nonatomic, assign) BOOL isSelectRight;
+@property (nonatomic, strong) NSDictionary *selectDict;
+@end
+@implementation PBTwoChooseView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point = [[touches anyObject]locationInView:self];
+    CALayer *layer = [self.layer hitTest:point];
+    if (layer == self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    if (self.ChooseCompleteBlock) {
+        self.ChooseCompleteBlock(_isSelectLeft, _isSelectRight);
+    }
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBTwoChooseView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width / 2, 3)];
+    topView.backgroundColor = WarningColor;
+    [self.bgView addSubview:topView];
+    
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(33);
+        make.centerX.equalTo(self.bgView);
+        make.width.equalTo(@1);
+        make.height.equalTo(@55);
+    }];
+    UIButton *leftBtn = [[UIButton alloc] init];
+    [leftBtn addTarget:self action:@selector(statusBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:leftBtn];
+    [leftBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.left.equalTo(self.bgView);
+        make.right.equalTo(linView.mas_left);
+        make.height.equalTo(@129);
+    }];
+    
+    UIButton *rightBtn = [[UIButton alloc] init];
+    [rightBtn addTarget:self action:@selector(typeBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:rightBtn];
+    [rightBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.right.equalTo(self.bgView);
+        make.left.equalTo(linView.mas_right);
+        make.height.equalTo(@129);
+    }];
+    
+    UILabel *leftTieleL = [UILabel z_labelWithText:@"状态" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:leftTieleL];
+    [leftTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(leftBtn).offset(31);
+        make.centerX.equalTo(leftBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *rightTieleL = [UILabel z_labelWithText:@"类型" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:rightTieleL];
+    [rightTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(rightBtn).offset(31);
+        make.centerX.equalTo(rightBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *leftSelectL = [UILabel z_labelWithText:@"请选择" Color:WarningColor isBold:NO Font:MarkedFontSize];
+    leftSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:leftSelectL];
+    [leftSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(leftTieleL.mas_bottom).offset(14);
+        make.left.equalTo(leftBtn).offset(16);
+        make.right.equalTo(leftBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UILabel *rightSelectL = [UILabel z_labelWithText:@"请选择" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    rightSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:rightSelectL];
+    [rightSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(rightTieleL.mas_bottom).offset(14);
+        make.left.equalTo(rightBtn).offset(16);
+        make.right.equalTo(rightBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UIView *lin1View = [[UIView alloc] init];
+    lin1View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin1View];
+    [lin1View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(leftBtn.mas_bottom);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    UILabel *promptL =[UILabel z_labelWithText:@"请选择状态" Color:PromptColor isBold:NO Font:MarkedFontSize];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin1View).offset(15);
+        make.size.mas_equalTo(CGSizeMake(130, 25));
+        make.centerX.equalTo(self.bgView);
+    }];
+    
+    UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn addTarget:self action:@selector(determineBtnActio) forControlEvents:UIControlEventTouchUpInside];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(promptL);
+        make.right.equalTo(self.bgView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(52, 50));
+    }];
+    
+    UIView *lin2View = [[UIView alloc] init];
+    lin2View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin2View];
+    [lin2View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(promptL.mas_bottom).offset(13);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    self.pickerView = [[UIPickerView alloc]init];
+    self.pickerView.backgroundColor = [UIColor whiteColor];
+    self.pickerView.delegate = self;
+    self.pickerView.dataSource = self;
+    [self.bgView addSubview:self.pickerView];
+    [self.pickerView reloadAllComponents];//刷新UIPickerView
+    [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin2View.mas_bottom);
+        make.right.equalTo(self.bgView).offset(-44);
+        make.left.equalTo(self.bgView).offset(44);
+        make.height.equalTo(@282);
+    }];
+    self.topView = topView;
+    self.leftTitleL = leftTieleL;
+    self.rightTitleL = rightTieleL;
+    self.leftSelectL = leftSelectL;
+    self.rightSelectL = rightSelectL;
+    self.promptL = promptL;
+}
+
+- (void)determineBtnActio {
+    if (self.index == 0) {
+        self.isSelectLeft = YES;
+        self.leftExamineAddModel.dataDict = self.selectDict.copy;
+        self.leftSelectL.text = [self.leftExamineAddModel.dataDict valueForKey:@"aedt_name"];
+        if(self.rightExamineAddModel.dataDict) {
+            [self hidden];
+        }else {
+            self.index = 1;
+        }
+    }else {
+        self.isSelectRight = YES;
+        self.rightExamineAddModel.dataDict =  self.selectDict.copy;
+        self.rightSelectL.text = [self.rightExamineAddModel.dataDict valueForKey:@"aedt_name"];
+        if(self.leftExamineAddModel.dataDict) {
+            [self hidden];
+        }else {
+            self.index = 0;
+        }
+    }
+}
+- (void)statusBtnAction {
+    self.index = 0;
+}
+
+- (void)typeBtnAction {
+    if (self.rightExamineAddModel.roleType != CREATOR) {
+        return;
+    }
+    self.index = 1;
+}
+
+#pragma mark UIPickerViewDelegate && UIPickerViewDataSource
+- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
+    return 1;
+}
+
+- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
+    return self.dataArr.count;
+}
+
+- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
+    return 60.f;
+}
+
+- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
+    self.selectDict = self.dataArr[row];
+}
+
+- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
+    for(UIView *singleLine in pickerView.subviews){
+        if (singleLine.frame.size.height < 1){
+            singleLine.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+        }
+    }
+    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width / 2, 30)];
+    label.textAlignment = NSTextAlignmentCenter;
+    label.font = [UIFont systemFontOfSize:20];
+    NSDictionary *dict = self.dataArr[row];
+    label.text = [dict valueForKey:@"aedt_name"];
+    return label;
+}
+- (void)setIndex:(NSInteger)index {
+    _index = index;
+    if (index == 0) {
+        [UIView animateWithDuration:0.2 animations:^{
+            self.topView.x = 0;
+        }];
+        self.leftSelectL.textColor = WarningColor;
+        if (self.rightExamineAddModel.dataDict) {
+            self.rightSelectL.textColor = TitleColor;
+        }else {
+            self.rightSelectL.textColor = IgnoreColor;
+        }
+        self.promptL.text = self.leftExamineAddModel.prompt;
+        self.dataArr = self.leftData;
+        [self.pickerView reloadAllComponents];
+        [self.pickerView selectRow:0 inComponent:0 animated:NO];
+        if (self.dataArr.count > 0) {
+            self.selectDict = self.dataArr[0];
+        }
+    }else {
+        [UIView animateWithDuration:0.2 animations:^{
+            self.topView.x = self.bgView.width / 2;
+        }];
+        self.rightSelectL.textColor = WarningColor;
+        if (self.leftExamineAddModel.dataDict) {
+            self.leftSelectL.textColor = TitleColor;
+        }else {
+            self.leftSelectL.textColor = IgnoreColor;
+        }
+        self.promptL.text = self.rightExamineAddModel.prompt;
+        self.dataArr = self.rightData;
+        [self.pickerView reloadAllComponents];
+        [self.pickerView selectRow:0 inComponent:0 animated:NO];
+        self.selectDict = self.dataArr[0];
+    }
+}
+
+- (void)setLeftExamineAddModel:(PBExamineAddModel *)leftExamineAddModel {
+    _leftExamineAddModel = leftExamineAddModel;
+    _leftTitleL.text = leftExamineAddModel.title;
+    if (_leftExamineAddModel.dataDict) {
+        _leftSelectL.text = [leftExamineAddModel.dataDict valueForKey:@"aedt_name"];
+    }else {
+        _leftSelectL.text = @"请选择";
+    }
+}
+
+- (void)setRightExamineAddModel:(PBExamineAddModel *)rightExamineAddModel {
+    _rightExamineAddModel = rightExamineAddModel;
+    _rightTitleL.text = rightExamineAddModel.title;
+    if (rightExamineAddModel.dataDict) {
+        _rightSelectL.text = [rightExamineAddModel.dataDict valueForKey:@"aedt_name"];
+    }else {
+        _rightSelectL.text = @"请选择";
+    }
+}
+- (void)setLeftData:(NSArray *)leftData {
+    _leftData = leftData;
+}
+
+- (void)setRightData:(NSArray *)rightData {
+    _rightData = rightData;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.h
new file mode 100755
index 0000000..dce9a1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.h
@@ -0,0 +1,45 @@
+//
+//  ConvertAudioFile.h
+//  Expert
+//
+//  Created by xuxiwen on 2017/3/21.
+//  Copyright © 2017年 xuxiwen. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface ConvertAudioFile : NSObject
+
+
+/**
+ get instance obj
+
+ @return ConvertAudioFile instance
+ */
++ (instancetype)sharedInstance;
+
+/**
+ ConvertMp3
+
+ @param cafFilePath caf FilePath
+ @param mp3FilePath mp3 FilePath
+ @param sampleRate sampleRate (same record sampleRate set)
+ */
+- (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath
+                        mp3FilePath:(NSString *)mp3FilePath
+                         sampleRate:(int)sampleRate;
+
+/**
+ send end record signal
+ */
+- (void)sendEndRecord;
+
+
+
+// Use this FUNC convent to mp3 after record
++ (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath
+                        mp3FilePath:(NSString *)mp3FilePath
+                         sampleRate:(int)sampleRate
+                           callback:(void(^)(BOOL result))callback;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.m
new file mode 100755
index 0000000..40dea0c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/ConvertAudioFile/ConvertAudioFile.m
@@ -0,0 +1,272 @@
+//
+//  ConvertAudioFile.m
+//  Expert
+//
+//  Created by xuxiwen on 2017/3/21.
+//  Copyright © 2017年 xuxiwen. All rights reserved.
+//
+
+#import "ConvertAudioFile.h"
+#import <lame/lame.h>
+
+@interface ConvertAudioFile ()
+@property (nonatomic, assign) BOOL stopRecord;
+@end
+
+@implementation ConvertAudioFile
+
+/**
+ get instance obj
+ 
+ @return ConvertAudioFile instance
+ */
++ (instancetype)sharedInstance {
+    static ConvertAudioFile *instance = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        instance = [[ConvertAudioFile alloc] init];
+    });
+    return instance;
+}
+
+/**
+ ConvertMp3
+ 
+ @param cafFilePath caf FilePath
+ @param mp3FilePath mp3 FilePath
+ @param sampleRate sampleRate (same record sampleRate set)
+ @param callback callback result
+ */
+//- (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath
+//                        mp3FilePath:(NSString *)mp3FilePath
+//                         sampleRate:(int)sampleRate
+//                           callback:(void(^)(BOOL result))callback
+//{
+//
+//        NSLog(@"convert begin!!");
+//    __weak typeof(self) weakself = self;
+//    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+//
+//        weakself.stopRecord = NO;
+//
+//        @try {
+//
+//            int read, write;
+//
+//            FILE *pcm = fopen([cafFilePath cStringUsingEncoding:NSASCIIStringEncoding], "rb");
+//            FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:NSASCIIStringEncoding], "wb+");
+//
+//            const int PCM_SIZE = 8192;
+//            const int MP3_SIZE = 8192;
+//            short int pcm_buffer[PCM_SIZE * 2];
+//            unsigned char mp3_buffer[MP3_SIZE];
+//
+//            lame_t lame = lame_init();
+//            lame_set_in_samplerate(lame, sampleRate);
+//            lame_set_VBR(lame, vbr_default);
+//            lame_init_params(lame);
+//
+//            long curpos;
+//            BOOL isSkipPCMHeader = NO;
+//
+//            do {
+//                curpos = ftell(pcm);
+//                long startPos = ftell(pcm);
+//                fseek(pcm, 0, SEEK_END);
+//                long endPos = ftell(pcm);
+//                long length = endPos - startPos;
+//                fseek(pcm, curpos, SEEK_SET);
+//
+//                if (length > PCM_SIZE * 2 * sizeof(short int)) {
+//
+//                    if (!isSkipPCMHeader) {
+//                        //Uump audio file header, If you do not skip file header
+//                        //you will heard some noise at the beginning!!!
+//                        fseek(pcm, 4 * 1024, SEEK_CUR);
+//                        isSkipPCMHeader = YES;
+//                        NSLog(@"skip pcm file header !!!!!!!!!!");
+//                    }
+//
+//                    read = (int)fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);
+//                    write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
+//                    fwrite(mp3_buffer, write, 1, mp3);
+////                    NSLog(@"read %d bytes", write);
+//                } else {
+//                    [NSThread sleepForTimeInterval:0.05];
+////                    NSLog(@"sleep");
+//                }
+//
+//            } while (! weakself.stopRecord);
+//
+//            read = (int)fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);
+//            write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
+//
+//            NSLog(@"read %d bytes and flush to mp3 file", write);
+//            lame_mp3_tags_fid(lame, mp3);
+//
+//            lame_close(lame);
+//            fclose(mp3);
+//            fclose(pcm);
+//        }
+//        @catch (NSException *exception) {
+//            NSLog(@"%@", [exception description]);
+//            if (callback) {
+//                callback(NO);
+//            }
+//        }
+//        @finally {
+//            if (callback) {
+//                callback(YES);
+//            }
+//            NSLog(@"convert mp3 finish!!! %@", mp3FilePath);
+//        }
+//    });
+//
+//}
+
+/**
+ send end record signal
+ */
+- (void)sendEndRecord {
+    self.stopRecord = YES;
+}
+
+- (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath
+                        mp3FilePath:(NSString *)mp3FilePath
+                         sampleRate:(int)sampleRate {
+    __weak typeof(self) weakself = self;
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        weakself.stopRecord = NO;
+        @try {
+            int read, write;
+            FILE *pcm = fopen([cafFilePath cStringUsingEncoding:NSASCIIStringEncoding], "rb");
+            FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:NSASCIIStringEncoding], "wb+");
+            
+            const int PCM_SIZE = 8192;
+            const int MP3_SIZE = 8192;
+            short int pcm_buffer[PCM_SIZE * 2];
+            unsigned char mp3_buffer[MP3_SIZE];
+            
+            lame_t lame = lame_init();
+            lame_set_in_samplerate(lame, sampleRate);
+            lame_set_VBR(lame, vbr_default);
+            lame_init_params(lame);
+            
+            long curpos;
+            BOOL isSkipPCMHeader = NO;
+            
+            do {
+                curpos = ftell(pcm);
+                long startPos = ftell(pcm);
+                fseek(pcm, 0, SEEK_END);
+                long endPos = ftell(pcm);
+                long length = endPos - startPos;
+                fseek(pcm, curpos, SEEK_SET);
+                
+                if (length > PCM_SIZE * 2 * sizeof(short int)) {
+                    
+                    if (!isSkipPCMHeader) {
+                        //Uump audio file header, If you do not skip file header
+                        //you will heard some noise at the beginning!!!
+                        fseek(pcm, 4 * 1024, SEEK_CUR);
+                        isSkipPCMHeader = YES;
+                        NSLog(@"skip pcm file header !!!!!!!!!!");
+                    }
+                    
+                    read = (int)fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);
+                    write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
+                    fwrite(mp3_buffer, write, 1, mp3);
+                    //                    NSLog(@"read %d bytes", write);
+                } else {
+                    [NSThread sleepForTimeInterval:0.05];
+                    //                    NSLog(@"sleep");
+                }
+            } while (! weakself.stopRecord);
+                NSLog(@"停止录音回调-----");
+                read = (int)fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);
+                write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
+                NSLog(@"read %d bytes and flush to mp3 file", write);
+                lame_mp3_tags_fid(lame, mp3);
+                lame_close(lame);
+                fclose(mp3);
+                fclose(pcm);
+        }
+        @catch (NSException *exception) {
+            NSLog(@"出错了");
+            NSLog(@"%@", [exception description]);
+        
+        }
+        @finally {
+            NSLog(@"转码完成");
+            NSLog(@"convert mp3 finish!!! %@", mp3FilePath);
+        }
+    });
+}
+
+#pragma mark - ----------------------------------
+
+// 这是录完再转码的方法, 如果录音时间比较长的话,会要等待几秒...
+// Use this FUNC convent to mp3 after record
+
++ (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath
+                        mp3FilePath:(NSString *)mp3FilePath
+                         sampleRate:(int)sampleRate
+                           callback:(void(^)(BOOL result))callback
+{
+    
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        
+        @try {
+            int read, write;
+            
+            FILE *pcm = fopen([cafFilePath cStringUsingEncoding:1], "rb");  //source 被转换的音频文件位置
+            fseek(pcm, 4*1024, SEEK_CUR);                                   //skip file header
+            FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb+");  //output 输出生成的Mp3文件位置
+            
+            const int PCM_SIZE = 8192;
+            const int MP3_SIZE = 8192;
+            short int pcm_buffer[PCM_SIZE*2];
+            unsigned char mp3_buffer[MP3_SIZE];
+            
+            lame_t lame = lame_init();
+            lame_set_num_channels(lame,1);//设置1为单通道,默认为2双通道
+            lame_set_in_samplerate(lame, sampleRate);
+            lame_set_VBR(lame, vbr_default);
+            lame_init_params(lame);
+            
+            do {
+                
+                read = (int)fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);
+                if (read == 0) {
+                write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
+
+                } else {
+                    write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
+                }
+                
+                fwrite(mp3_buffer, write, 1, mp3);
+
+            } while (read != 0);
+
+            lame_mp3_tags_fid(lame, mp3);
+
+            lame_close(lame);
+            fclose(mp3);
+            fclose(pcm);
+        }
+        @catch (NSException *exception) {
+            NSLog(@"%@",[exception description]);
+            if (callback) {
+                callback(NO);
+            }
+        }
+        @finally {
+            NSLog(@"-----\n  MP3生成成功: %@   -----  \n", mp3FilePath);
+            if (callback) {
+                callback(YES);
+            }
+        }
+    });
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/Headers/lame.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/Headers/lame.h
new file mode 100755
index 0000000..b87c059
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/Headers/lame.h
@@ -0,0 +1,1324 @@
+/*
+ *	Interface to MP3 LAME encoding engine
+ *
+ *	Copyright (c) 1999 Mark Taylor
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ * https://github.com/wuqiong/mp3lame-for-iOS
+ */
+
+/* $Id: lame.h,v 1.189.2.1 2012/01/08 23:49:58 robert Exp $ */
+
+#ifndef LAME_LAME_H
+#define LAME_LAME_H
+
+/* for size_t typedef */
+#include <stddef.h>
+/* for va_list typedef */
+#include <stdarg.h>
+/* for FILE typedef, TODO: remove when removing lame_mp3_tags_fid */
+#include <stdio.h>
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+typedef void (*lame_report_function)(const char *format, va_list ap);
+
+#if defined(WIN32) || defined(_WIN32)
+#undef CDECL
+#define CDECL __cdecl
+#else
+#define CDECL
+#endif
+
+#define DEPRECATED_OR_OBSOLETE_CODE_REMOVED 1
+
+typedef enum vbr_mode_e {
+  vbr_off=0,
+  vbr_mt,               /* obsolete, same as vbr_mtrh */
+  vbr_rh,
+  vbr_abr,
+  vbr_mtrh,
+  vbr_max_indicator,    /* Don't use this! It's used for sanity checks.       */
+  vbr_default=vbr_mtrh    /* change this to change the default VBR mode of LAME */
+} vbr_mode;
+
+
+/* MPEG modes */
+typedef enum MPEG_mode_e {
+  STEREO = 0,
+  JOINT_STEREO,
+  DUAL_CHANNEL,   /* LAME doesn't supports this! */
+  MONO,
+  NOT_SET,
+  MAX_INDICATOR   /* Don't use this! It's used for sanity checks. */
+} MPEG_mode;
+
+/* Padding types */
+typedef enum Padding_type_e {
+  PAD_NO = 0,
+  PAD_ALL,
+  PAD_ADJUST,
+  PAD_MAX_INDICATOR   /* Don't use this! It's used for sanity checks. */
+} Padding_type;
+
+
+
+/*presets*/
+typedef enum preset_mode_e {
+    /*values from 8 to 320 should be reserved for abr bitrates*/
+    /*for abr I'd suggest to directly use the targeted bitrate as a value*/
+    ABR_8 = 8,
+    ABR_320 = 320,
+
+    V9 = 410, /*Vx to match Lame and VBR_xx to match FhG*/
+    VBR_10 = 410,
+    V8 = 420,
+    VBR_20 = 420,
+    V7 = 430,
+    VBR_30 = 430,
+    V6 = 440,
+    VBR_40 = 440,
+    V5 = 450,
+    VBR_50 = 450,
+    V4 = 460,
+    VBR_60 = 460,
+    V3 = 470,
+    VBR_70 = 470,
+    V2 = 480,
+    VBR_80 = 480,
+    V1 = 490,
+    VBR_90 = 490,
+    V0 = 500,
+    VBR_100 = 500,
+
+
+
+    /*still there for compatibility*/
+    R3MIX = 1000,
+    STANDARD = 1001,
+    EXTREME = 1002,
+    INSANE = 1003,
+    STANDARD_FAST = 1004,
+    EXTREME_FAST = 1005,
+    MEDIUM = 1006,
+    MEDIUM_FAST = 1007
+} preset_mode;
+
+
+/*asm optimizations*/
+typedef enum asm_optimizations_e {
+    MMX = 1,
+    AMD_3DNOW = 2,
+    SSE = 3
+} asm_optimizations;
+
+
+/* psychoacoustic model */
+typedef enum Psy_model_e {
+    PSY_GPSYCHO = 1,
+    PSY_NSPSYTUNE = 2
+} Psy_model;
+
+
+/* buffer considerations */
+typedef enum buffer_constraint_e {
+    MDB_DEFAULT=0,
+    MDB_STRICT_ISO=1,
+    MDB_MAXIMUM=2
+} buffer_constraint;
+
+
+struct lame_global_struct;
+typedef struct lame_global_struct lame_global_flags;
+typedef lame_global_flags *lame_t;
+
+
+
+
+/***********************************************************************
+ *
+ *  The LAME API
+ *  These functions should be called, in this order, for each
+ *  MP3 file to be encoded.  See the file "API" for more documentation
+ *
+ ***********************************************************************/
+
+
+/*
+ * REQUIRED:
+ * initialize the encoder.  sets default for all encoder parameters,
+ * returns NULL if some malloc()'s failed
+ * otherwise returns pointer to structure needed for all future
+ * API calls.
+ */
+lame_global_flags * CDECL lame_init(void);
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/* obsolete version */
+int CDECL lame_init_old(lame_global_flags *);
+#endif
+
+/*
+ * OPTIONAL:
+ * set as needed to override defaults
+ */
+
+/********************************************************************
+ *  input stream description
+ ***********************************************************************/
+/* number of samples.  default = 2^32-1   */
+int CDECL lame_set_num_samples(lame_global_flags *, unsigned long);
+unsigned long CDECL lame_get_num_samples(const lame_global_flags *);
+
+/* input sample rate in Hz.  default = 44100hz */
+int CDECL lame_set_in_samplerate(lame_global_flags *, int);
+int CDECL lame_get_in_samplerate(const lame_global_flags *);
+
+/* number of channels in input stream. default=2  */
+int CDECL lame_set_num_channels(lame_global_flags *, int);
+int CDECL lame_get_num_channels(const lame_global_flags *);
+
+/*
+  scale the input by this amount before encoding.  default=1
+  (not used by decoding routines)
+*/
+int CDECL lame_set_scale(lame_global_flags *, float);
+float CDECL lame_get_scale(const lame_global_flags *);
+
+/*
+  scale the channel 0 (left) input by this amount before encoding.  default=1
+  (not used by decoding routines)
+*/
+int CDECL lame_set_scale_left(lame_global_flags *, float);
+float CDECL lame_get_scale_left(const lame_global_flags *);
+
+/*
+  scale the channel 1 (right) input by this amount before encoding.  default=1
+  (not used by decoding routines)
+*/
+int CDECL lame_set_scale_right(lame_global_flags *, float);
+float CDECL lame_get_scale_right(const lame_global_flags *);
+
+/*
+  output sample rate in Hz.  default = 0, which means LAME picks best value
+  based on the amount of compression.  MPEG only allows:
+  MPEG1    32, 44.1,   48khz
+  MPEG2    16, 22.05,  24
+  MPEG2.5   8, 11.025, 12
+  (not used by decoding routines)
+*/
+int CDECL lame_set_out_samplerate(lame_global_flags *, int);
+int CDECL lame_get_out_samplerate(const lame_global_flags *);
+
+
+/********************************************************************
+ *  general control parameters
+ ***********************************************************************/
+/* 1=cause LAME to collect data for an MP3 frame analyzer. default=0 */
+int CDECL lame_set_analysis(lame_global_flags *, int);
+int CDECL lame_get_analysis(const lame_global_flags *);
+
+/*
+  1 = write a Xing VBR header frame.
+  default = 1
+  this variable must have been added by a Hungarian notation Windows programmer :-)
+*/
+int CDECL lame_set_bWriteVbrTag(lame_global_flags *, int);
+int CDECL lame_get_bWriteVbrTag(const lame_global_flags *);
+
+/* 1=decode only.  use lame/mpglib to convert mp3/ogg to wav.  default=0 */
+int CDECL lame_set_decode_only(lame_global_flags *, int);
+int CDECL lame_get_decode_only(const lame_global_flags *);
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/* 1=encode a Vorbis .ogg file.  default=0 */
+/* DEPRECATED */
+int CDECL lame_set_ogg(lame_global_flags *, int);
+int CDECL lame_get_ogg(const lame_global_flags *);
+#endif
+
+/*
+  internal algorithm selection.  True quality is determined by the bitrate
+  but this variable will effect quality by selecting expensive or cheap algorithms.
+  quality=0..9.  0=best (very slow).  9=worst.
+  recommended:  2     near-best quality, not too slow
+                5     good quality, fast
+                7     ok quality, really fast
+*/
+int CDECL lame_set_quality(lame_global_flags *, int);
+int CDECL lame_get_quality(const lame_global_flags *);
+
+/*
+  mode = 0,1,2,3 = stereo, jstereo, dual channel (not supported), mono
+  default: lame picks based on compression ration and input channels
+*/
+int CDECL lame_set_mode(lame_global_flags *, MPEG_mode);
+MPEG_mode CDECL lame_get_mode(const lame_global_flags *);
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/*
+  mode_automs.  Use a M/S mode with a switching threshold based on
+  compression ratio
+  DEPRECATED
+*/
+int CDECL lame_set_mode_automs(lame_global_flags *, int);
+int CDECL lame_get_mode_automs(const lame_global_flags *);
+#endif
+
+/*
+  force_ms.  Force M/S for all frames.  For testing only.
+  default = 0 (disabled)
+*/
+int CDECL lame_set_force_ms(lame_global_flags *, int);
+int CDECL lame_get_force_ms(const lame_global_flags *);
+
+/* use free_format?  default = 0 (disabled) */
+int CDECL lame_set_free_format(lame_global_flags *, int);
+int CDECL lame_get_free_format(const lame_global_flags *);
+
+/* perform ReplayGain analysis?  default = 0 (disabled) */
+int CDECL lame_set_findReplayGain(lame_global_flags *, int);
+int CDECL lame_get_findReplayGain(const lame_global_flags *);
+
+/* decode on the fly. Search for the peak sample. If the ReplayGain
+ * analysis is enabled then perform the analysis on the decoded data
+ * stream. default = 0 (disabled)
+ * NOTE: if this option is set the build-in decoder should not be used */
+int CDECL lame_set_decode_on_the_fly(lame_global_flags *, int);
+int CDECL lame_get_decode_on_the_fly(const lame_global_flags *);
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/* DEPRECATED: now does the same as lame_set_findReplayGain()
+   default = 0 (disabled) */
+int CDECL lame_set_ReplayGain_input(lame_global_flags *, int);
+int CDECL lame_get_ReplayGain_input(const lame_global_flags *);
+
+/* DEPRECATED: now does the same as
+   lame_set_decode_on_the_fly() && lame_set_findReplayGain()
+   default = 0 (disabled) */
+int CDECL lame_set_ReplayGain_decode(lame_global_flags *, int);
+int CDECL lame_get_ReplayGain_decode(const lame_global_flags *);
+
+/* DEPRECATED: now does the same as lame_set_decode_on_the_fly()
+   default = 0 (disabled) */
+int CDECL lame_set_findPeakSample(lame_global_flags *, int);
+int CDECL lame_get_findPeakSample(const lame_global_flags *);
+#endif
+
+/* counters for gapless encoding */
+int CDECL lame_set_nogap_total(lame_global_flags*, int);
+int CDECL lame_get_nogap_total(const lame_global_flags*);
+
+int CDECL lame_set_nogap_currentindex(lame_global_flags* , int);
+int CDECL lame_get_nogap_currentindex(const lame_global_flags*);
+
+
+/*
+ * OPTIONAL:
+ * Set printf like error/debug/message reporting functions.
+ * The second argument has to be a pointer to a function which looks like
+ *   void my_debugf(const char *format, va_list ap)
+ *   {
+ *       (void) vfprintf(stdout, format, ap);
+ *   }
+ * If you use NULL as the value of the pointer in the set function, the
+ * lame buildin function will be used (prints to stderr).
+ * To quiet any output you have to replace the body of the example function
+ * with just "return;" and use it in the set function.
+ */
+int CDECL lame_set_errorf(lame_global_flags *, lame_report_function);
+int CDECL lame_set_debugf(lame_global_flags *, lame_report_function);
+int CDECL lame_set_msgf  (lame_global_flags *, lame_report_function);
+
+
+
+/* set one of brate compression ratio.  default is compression ratio of 11.  */
+int CDECL lame_set_brate(lame_global_flags *, int);
+int CDECL lame_get_brate(const lame_global_flags *);
+int CDECL lame_set_compression_ratio(lame_global_flags *, float);
+float CDECL lame_get_compression_ratio(const lame_global_flags *);
+
+
+int CDECL lame_set_preset( lame_global_flags*  gfp, int );
+int CDECL lame_set_asm_optimizations( lame_global_flags*  gfp, int, int );
+
+
+
+/********************************************************************
+ *  frame params
+ ***********************************************************************/
+/* mark as copyright.  default=0 */
+int CDECL lame_set_copyright(lame_global_flags *, int);
+int CDECL lame_get_copyright(const lame_global_flags *);
+
+/* mark as original.  default=1 */
+int CDECL lame_set_original(lame_global_flags *, int);
+int CDECL lame_get_original(const lame_global_flags *);
+
+/* error_protection.  Use 2 bytes from each frame for CRC checksum. default=0 */
+int CDECL lame_set_error_protection(lame_global_flags *, int);
+int CDECL lame_get_error_protection(const lame_global_flags *);
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/* padding_type. 0=pad no frames  1=pad all frames 2=adjust padding(default) */
+int CDECL lame_set_padding_type(lame_global_flags *, Padding_type);
+Padding_type CDECL lame_get_padding_type(const lame_global_flags *);
+#endif
+
+/* MP3 'private extension' bit  Meaningless.  default=0 */
+int CDECL lame_set_extension(lame_global_flags *, int);
+int CDECL lame_get_extension(const lame_global_flags *);
+
+/* enforce strict ISO compliance.  default=0 */
+int CDECL lame_set_strict_ISO(lame_global_flags *, int);
+int CDECL lame_get_strict_ISO(const lame_global_flags *);
+
+
+/********************************************************************
+ * quantization/noise shaping
+ ***********************************************************************/
+
+/* disable the bit reservoir. For testing only. default=0 */
+int CDECL lame_set_disable_reservoir(lame_global_flags *, int);
+int CDECL lame_get_disable_reservoir(const lame_global_flags *);
+
+/* select a different "best quantization" function. default=0  */
+int CDECL lame_set_quant_comp(lame_global_flags *, int);
+int CDECL lame_get_quant_comp(const lame_global_flags *);
+int CDECL lame_set_quant_comp_short(lame_global_flags *, int);
+int CDECL lame_get_quant_comp_short(const lame_global_flags *);
+
+int CDECL lame_set_experimentalX(lame_global_flags *, int); /* compatibility*/
+int CDECL lame_get_experimentalX(const lame_global_flags *);
+
+/* another experimental option.  for testing only */
+int CDECL lame_set_experimentalY(lame_global_flags *, int);
+int CDECL lame_get_experimentalY(const lame_global_flags *);
+
+/* another experimental option.  for testing only */
+int CDECL lame_set_experimentalZ(lame_global_flags *, int);
+int CDECL lame_get_experimentalZ(const lame_global_flags *);
+
+/* Naoki's psycho acoustic model.  default=0 */
+int CDECL lame_set_exp_nspsytune(lame_global_flags *, int);
+int CDECL lame_get_exp_nspsytune(const lame_global_flags *);
+
+void CDECL lame_set_msfix(lame_global_flags *, double);
+float CDECL lame_get_msfix(const lame_global_flags *);
+
+
+/********************************************************************
+ * VBR control
+ ***********************************************************************/
+/* Types of VBR.  default = vbr_off = CBR */
+int CDECL lame_set_VBR(lame_global_flags *, vbr_mode);
+vbr_mode CDECL lame_get_VBR(const lame_global_flags *);
+
+/* VBR quality level.  0=highest  9=lowest  */
+int CDECL lame_set_VBR_q(lame_global_flags *, int);
+int CDECL lame_get_VBR_q(const lame_global_flags *);
+
+/* VBR quality level.  0=highest  9=lowest, Range [0,...,10[  */
+int CDECL lame_set_VBR_quality(lame_global_flags *, float);
+float CDECL lame_get_VBR_quality(const lame_global_flags *);
+
+/* Ignored except for VBR=vbr_abr (ABR mode) */
+int CDECL lame_set_VBR_mean_bitrate_kbps(lame_global_flags *, int);
+int CDECL lame_get_VBR_mean_bitrate_kbps(const lame_global_flags *);
+
+int CDECL lame_set_VBR_min_bitrate_kbps(lame_global_flags *, int);
+int CDECL lame_get_VBR_min_bitrate_kbps(const lame_global_flags *);
+
+int CDECL lame_set_VBR_max_bitrate_kbps(lame_global_flags *, int);
+int CDECL lame_get_VBR_max_bitrate_kbps(const lame_global_flags *);
+
+/*
+  1=strictly enforce VBR_min_bitrate.  Normally it will be violated for
+  analog silence
+*/
+int CDECL lame_set_VBR_hard_min(lame_global_flags *, int);
+int CDECL lame_get_VBR_hard_min(const lame_global_flags *);
+
+/* for preset */
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+int CDECL lame_set_preset_expopts(lame_global_flags *, int);
+#endif
+
+/********************************************************************
+ * Filtering control
+ ***********************************************************************/
+/* freq in Hz to apply lowpass. Default = 0 = lame chooses.  -1 = disabled */
+int CDECL lame_set_lowpassfreq(lame_global_flags *, int);
+int CDECL lame_get_lowpassfreq(const lame_global_flags *);
+/* width of transition band, in Hz.  Default = one polyphase filter band */
+int CDECL lame_set_lowpasswidth(lame_global_flags *, int);
+int CDECL lame_get_lowpasswidth(const lame_global_flags *);
+
+/* freq in Hz to apply highpass. Default = 0 = lame chooses.  -1 = disabled */
+int CDECL lame_set_highpassfreq(lame_global_flags *, int);
+int CDECL lame_get_highpassfreq(const lame_global_flags *);
+/* width of transition band, in Hz.  Default = one polyphase filter band */
+int CDECL lame_set_highpasswidth(lame_global_flags *, int);
+int CDECL lame_get_highpasswidth(const lame_global_flags *);
+
+
+/********************************************************************
+ * psycho acoustics and other arguments which you should not change
+ * unless you know what you are doing
+ ***********************************************************************/
+
+/* only use ATH for masking */
+int CDECL lame_set_ATHonly(lame_global_flags *, int);
+int CDECL lame_get_ATHonly(const lame_global_flags *);
+
+/* only use ATH for short blocks */
+int CDECL lame_set_ATHshort(lame_global_flags *, int);
+int CDECL lame_get_ATHshort(const lame_global_flags *);
+
+/* disable ATH */
+int CDECL lame_set_noATH(lame_global_flags *, int);
+int CDECL lame_get_noATH(const lame_global_flags *);
+
+/* select ATH formula */
+int CDECL lame_set_ATHtype(lame_global_flags *, int);
+int CDECL lame_get_ATHtype(const lame_global_flags *);
+
+/* lower ATH by this many db */
+int CDECL lame_set_ATHlower(lame_global_flags *, float);
+float CDECL lame_get_ATHlower(const lame_global_flags *);
+
+/* select ATH adaptive adjustment type */
+int CDECL lame_set_athaa_type( lame_global_flags *, int);
+int CDECL lame_get_athaa_type( const lame_global_flags *);
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/* select the loudness approximation used by the ATH adaptive auto-leveling  */
+int CDECL lame_set_athaa_loudapprox( lame_global_flags *, int);
+int CDECL lame_get_athaa_loudapprox( const lame_global_flags *);
+#endif
+
+/* adjust (in dB) the point below which adaptive ATH level adjustment occurs */
+int CDECL lame_set_athaa_sensitivity( lame_global_flags *, float);
+float CDECL lame_get_athaa_sensitivity( const lame_global_flags* );
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/* OBSOLETE: predictability limit (ISO tonality formula) */
+int CDECL lame_set_cwlimit(lame_global_flags *, int);
+int CDECL lame_get_cwlimit(const lame_global_flags *);
+#endif
+
+/*
+  allow blocktypes to differ between channels?
+  default: 0 for jstereo, 1 for stereo
+*/
+int CDECL lame_set_allow_diff_short(lame_global_flags *, int);
+int CDECL lame_get_allow_diff_short(const lame_global_flags *);
+
+/* use temporal masking effect (default = 1) */
+int CDECL lame_set_useTemporal(lame_global_flags *, int);
+int CDECL lame_get_useTemporal(const lame_global_flags *);
+
+/* use temporal masking effect (default = 1) */
+int CDECL lame_set_interChRatio(lame_global_flags *, float);
+float CDECL lame_get_interChRatio(const lame_global_flags *);
+
+/* disable short blocks */
+int CDECL lame_set_no_short_blocks(lame_global_flags *, int);
+int CDECL lame_get_no_short_blocks(const lame_global_flags *);
+
+/* force short blocks */
+int CDECL lame_set_force_short_blocks(lame_global_flags *, int);
+int CDECL lame_get_force_short_blocks(const lame_global_flags *);
+
+/* Input PCM is emphased PCM (for instance from one of the rarely
+   emphased CDs), it is STRONGLY not recommended to use this, because
+   psycho does not take it into account, and last but not least many decoders
+   ignore these bits */
+int CDECL lame_set_emphasis(lame_global_flags *, int);
+int CDECL lame_get_emphasis(const lame_global_flags *);
+
+
+
+/************************************************************************/
+/* internal variables, cannot be set...                                 */
+/* provided because they may be of use to calling application           */
+/************************************************************************/
+/* version  0=MPEG-2  1=MPEG-1  (2=MPEG-2.5)     */
+int CDECL lame_get_version(const lame_global_flags *);
+
+/* encoder delay   */
+int CDECL lame_get_encoder_delay(const lame_global_flags *);
+
+/*
+  padding appended to the input to make sure decoder can fully decode
+  all input.  Note that this value can only be calculated during the
+  call to lame_encoder_flush().  Before lame_encoder_flush() has
+  been called, the value of encoder_padding = 0.
+*/
+int CDECL lame_get_encoder_padding(const lame_global_flags *);
+
+/* size of MPEG frame */
+int CDECL lame_get_framesize(const lame_global_flags *);
+
+/* number of PCM samples buffered, but not yet encoded to mp3 data. */
+int CDECL lame_get_mf_samples_to_encode( const lame_global_flags*  gfp );
+
+/*
+  size (bytes) of mp3 data buffered, but not yet encoded.
+  this is the number of bytes which would be output by a call to
+  lame_encode_flush_nogap.  NOTE: lame_encode_flush() will return
+  more bytes than this because it will encode the reamining buffered
+  PCM samples before flushing the mp3 buffers.
+*/
+int CDECL lame_get_size_mp3buffer( const lame_global_flags*  gfp );
+
+/* number of frames encoded so far */
+int CDECL lame_get_frameNum(const lame_global_flags *);
+
+/*
+  lame's estimate of the total number of frames to be encoded
+   only valid if calling program set num_samples
+*/
+int CDECL lame_get_totalframes(const lame_global_flags *);
+
+/* RadioGain value. Multiplied by 10 and rounded to the nearest. */
+int CDECL lame_get_RadioGain(const lame_global_flags *);
+
+/* AudiophileGain value. Multipled by 10 and rounded to the nearest. */
+int CDECL lame_get_AudiophileGain(const lame_global_flags *);
+
+/* the peak sample */
+float CDECL lame_get_PeakSample(const lame_global_flags *);
+
+/* Gain change required for preventing clipping. The value is correct only if
+   peak sample searching was enabled. If negative then the waveform
+   already does not clip. The value is multiplied by 10 and rounded up. */
+int CDECL lame_get_noclipGainChange(const lame_global_flags *);
+
+/* user-specified scale factor required for preventing clipping. Value is
+   correct only if peak sample searching was enabled and no user-specified
+   scaling was performed. If negative then either the waveform already does
+   not clip or the value cannot be determined */
+float CDECL lame_get_noclipScale(const lame_global_flags *);
+
+
+
+
+
+
+
+/*
+ * REQUIRED:
+ * sets more internal configuration based on data provided above.
+ * returns -1 if something failed.
+ */
+int CDECL lame_init_params(lame_global_flags *);
+
+
+/*
+ * OPTIONAL:
+ * get the version number, in a string. of the form:
+ * "3.63 (beta)" or just "3.63".
+ */
+const char*  CDECL get_lame_version       ( void );
+const char*  CDECL get_lame_short_version ( void );
+const char*  CDECL get_lame_very_short_version ( void );
+const char*  CDECL get_psy_version        ( void );
+const char*  CDECL get_lame_url           ( void );
+const char*  CDECL get_lame_os_bitness    ( void );
+
+/*
+ * OPTIONAL:
+ * get the version numbers in numerical form.
+ */
+typedef struct {
+    /* generic LAME version */
+    int major;
+    int minor;
+    int alpha;               /* 0 if not an alpha version                  */
+    int beta;                /* 0 if not a beta version                    */
+
+    /* version of the psy model */
+    int psy_major;
+    int psy_minor;
+    int psy_alpha;           /* 0 if not an alpha version                  */
+    int psy_beta;            /* 0 if not a beta version                    */
+
+    /* compile time features */
+    const char *features;    /* Don't make assumptions about the contents! */
+} lame_version_t;
+void CDECL get_lame_version_numerical(lame_version_t *);
+
+
+/*
+ * OPTIONAL:
+ * print internal lame configuration to message handler
+ */
+void CDECL lame_print_config(const lame_global_flags*  gfp);
+
+void CDECL lame_print_internals( const lame_global_flags *gfp);
+
+
+/*
+ * input pcm data, output (maybe) mp3 frames.
+ * This routine handles all buffering, resampling and filtering for you.
+ *
+ * return code     number of bytes output in mp3buf. Can be 0
+ *                 -1:  mp3buf was too small
+ *                 -2:  malloc() problem
+ *                 -3:  lame_init_params() not called
+ *                 -4:  psycho acoustic problems
+ *
+ * The required mp3buf_size can be computed from num_samples,
+ * samplerate and encoding rate, but here is a worst case estimate:
+ *
+ * mp3buf_size in bytes = 1.25*num_samples + 7200
+ *
+ * I think a tighter bound could be:  (mt, March 2000)
+ * MPEG1:
+ *    num_samples*(bitrate/8)/samplerate + 4*1152*(bitrate/8)/samplerate + 512
+ * MPEG2:
+ *    num_samples*(bitrate/8)/samplerate + 4*576*(bitrate/8)/samplerate + 256
+ *
+ * but test first if you use that!
+ *
+ * set mp3buf_size = 0 and LAME will not check if mp3buf_size is
+ * large enough.
+ *
+ * NOTE:
+ * if gfp->num_channels=2, but gfp->mode = 3 (mono), the L & R channels
+ * will be averaged into the L channel before encoding only the L channel
+ * This will overwrite the data in buffer_l[] and buffer_r[].
+ *
+*/
+int CDECL lame_encode_buffer (
+        lame_global_flags*  gfp,           /* global context handle         */
+        const short int     buffer_l [],   /* PCM data for left channel     */
+        const short int     buffer_r [],   /* PCM data for right channel    */
+        const int           nsamples,      /* number of samples per channel */
+        unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
+        const int           mp3buf_size ); /* number of valid octets in this
+                                              stream                        */
+
+/*
+ * as above, but input has L & R channel data interleaved.
+ * NOTE:
+ * num_samples = number of samples in the L (or R)
+ * channel, not the total number of samples in pcm[]
+ */
+int CDECL lame_encode_buffer_interleaved(
+        lame_global_flags*  gfp,           /* global context handlei        */
+        short int           pcm[],         /* PCM data for left and right
+                                              channel, interleaved          */
+        int                 num_samples,   /* number of samples per channel,
+                                              _not_ number of samples in
+                                              pcm[]                         */
+        unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
+        int                 mp3buf_size ); /* number of valid octets in this
+                                              stream                        */
+
+
+/* as lame_encode_buffer, but for 'float's.
+ * !! NOTE: !! data must still be scaled to be in the same range as
+ * short int, +/- 32768
+ */
+int CDECL lame_encode_buffer_float(
+        lame_global_flags*  gfp,           /* global context handle         */
+        const float         pcm_l [],      /* PCM data for left channel     */
+        const float         pcm_r [],      /* PCM data for right channel    */
+        const int           nsamples,      /* number of samples per channel */
+        unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
+        const int           mp3buf_size ); /* number of valid octets in this
+                                              stream                        */
+
+/* as lame_encode_buffer, but for 'float's.
+ * !! NOTE: !! data must be scaled to +/- 1 full scale
+ */
+int CDECL lame_encode_buffer_ieee_float(
+        lame_t          gfp,
+        const float     pcm_l [],          /* PCM data for left channel     */
+        const float     pcm_r [],          /* PCM data for right channel    */
+        const int       nsamples,
+        unsigned char * mp3buf,
+        const int       mp3buf_size);
+int CDECL lame_encode_buffer_interleaved_ieee_float(
+        lame_t          gfp,
+        const float     pcm[],             /* PCM data for left and right
+                                              channel, interleaved          */
+        const int       nsamples,
+        unsigned char * mp3buf,
+        const int       mp3buf_size);
+
+/* as lame_encode_buffer, but for 'double's.
+ * !! NOTE: !! data must be scaled to +/- 1 full scale
+ */
+int CDECL lame_encode_buffer_ieee_double(
+        lame_t          gfp,
+        const double    pcm_l [],          /* PCM data for left channel     */
+        const double    pcm_r [],          /* PCM data for right channel    */
+        const int       nsamples,
+        unsigned char * mp3buf,
+        const int       mp3buf_size);
+int CDECL lame_encode_buffer_interleaved_ieee_double(
+        lame_t          gfp,
+        const double    pcm[],             /* PCM data for left and right
+                                              channel, interleaved          */
+        const int       nsamples,
+        unsigned char * mp3buf,
+        const int       mp3buf_size);
+
+/* as lame_encode_buffer, but for long's
+ * !! NOTE: !! data must still be scaled to be in the same range as
+ * short int, +/- 32768
+ *
+ * This scaling was a mistake (doesn't allow one to exploit full
+ * precision of type 'long'.  Use lame_encode_buffer_long2() instead.
+ *
+ */
+int CDECL lame_encode_buffer_long(
+        lame_global_flags*  gfp,           /* global context handle         */
+        const long     buffer_l [],       /* PCM data for left channel     */
+        const long     buffer_r [],       /* PCM data for right channel    */
+        const int           nsamples,      /* number of samples per channel */
+        unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
+        const int           mp3buf_size ); /* number of valid octets in this
+                                              stream                        */
+
+/* Same as lame_encode_buffer_long(), but with correct scaling.
+ * !! NOTE: !! data must still be scaled to be in the same range as
+ * type 'long'.   Data should be in the range:  +/- 2^(8*size(long)-1)
+ *
+ */
+int CDECL lame_encode_buffer_long2(
+        lame_global_flags*  gfp,           /* global context handle         */
+        const long     buffer_l [],       /* PCM data for left channel     */
+        const long     buffer_r [],       /* PCM data for right channel    */
+        const int           nsamples,      /* number of samples per channel */
+        unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
+        const int           mp3buf_size ); /* number of valid octets in this
+                                              stream                        */
+
+/* as lame_encode_buffer, but for int's
+ * !! NOTE: !! input should be scaled to the maximum range of 'int'
+ * If int is 4 bytes, then the values should range from
+ * +/- 2147483648.
+ *
+ * This routine does not (and cannot, without loosing precision) use
+ * the same scaling as the rest of the lame_encode_buffer() routines.
+ *
+ */
+int CDECL lame_encode_buffer_int(
+        lame_global_flags*  gfp,           /* global context handle         */
+        const int      buffer_l [],       /* PCM data for left channel     */
+        const int      buffer_r [],       /* PCM data for right channel    */
+        const int           nsamples,      /* number of samples per channel */
+        unsigned char*      mp3buf,        /* pointer to encoded MP3 stream */
+        const int           mp3buf_size ); /* number of valid octets in this
+                                              stream                        */
+
+
+
+
+
+/*
+ * REQUIRED:
+ * lame_encode_flush will flush the intenal PCM buffers, padding with
+ * 0's to make sure the final frame is complete, and then flush
+ * the internal MP3 buffers, and thus may return a
+ * final few mp3 frames.  'mp3buf' should be at least 7200 bytes long
+ * to hold all possible emitted data.
+ *
+ * will also write id3v1 tags (if any) into the bitstream
+ *
+ * return code = number of bytes output to mp3buf. Can be 0
+ */
+int CDECL lame_encode_flush(
+        lame_global_flags *  gfp,    /* global context handle                 */
+        unsigned char*       mp3buf, /* pointer to encoded MP3 stream         */
+        int                  size);  /* number of valid octets in this stream */
+
+/*
+ * OPTIONAL:
+ * lame_encode_flush_nogap will flush the internal mp3 buffers and pad
+ * the last frame with ancillary data so it is a complete mp3 frame.
+ *
+ * 'mp3buf' should be at least 7200 bytes long
+ * to hold all possible emitted data.
+ *
+ * After a call to this routine, the outputed mp3 data is complete, but
+ * you may continue to encode new PCM samples and write future mp3 data
+ * to a different file.  The two mp3 files will play back with no gaps
+ * if they are concatenated together.
+ *
+ * This routine will NOT write id3v1 tags into the bitstream.
+ *
+ * return code = number of bytes output to mp3buf. Can be 0
+ */
+int CDECL lame_encode_flush_nogap(
+        lame_global_flags *  gfp,    /* global context handle                 */
+        unsigned char*       mp3buf, /* pointer to encoded MP3 stream         */
+        int                  size);  /* number of valid octets in this stream */
+
+/*
+ * OPTIONAL:
+ * Normally, this is called by lame_init_params().  It writes id3v2 and
+ * Xing headers into the front of the bitstream, and sets frame counters
+ * and bitrate histogram data to 0.  You can also call this after
+ * lame_encode_flush_nogap().
+ */
+int CDECL lame_init_bitstream(
+        lame_global_flags *  gfp);    /* global context handle                 */
+
+
+
+/*
+ * OPTIONAL:    some simple statistics
+ * a bitrate histogram to visualize the distribution of used frame sizes
+ * a stereo mode histogram to visualize the distribution of used stereo
+ *   modes, useful in joint-stereo mode only
+ *   0: LR    left-right encoded
+ *   1: LR-I  left-right and intensity encoded (currently not supported)
+ *   2: MS    mid-side encoded
+ *   3: MS-I  mid-side and intensity encoded (currently not supported)
+ *
+ * attention: don't call them after lame_encode_finish
+ * suggested: lame_encode_flush -> lame_*_hist -> lame_close
+ */
+
+void CDECL lame_bitrate_hist(
+        const lame_global_flags * gfp,
+        int bitrate_count[14] );
+void CDECL lame_bitrate_kbps(
+        const lame_global_flags * gfp,
+        int bitrate_kbps [14] );
+void CDECL lame_stereo_mode_hist(
+        const lame_global_flags * gfp,
+        int stereo_mode_count[4] );
+
+void CDECL lame_bitrate_stereo_mode_hist (
+        const lame_global_flags * gfp,
+        int bitrate_stmode_count[14][4] );
+
+void CDECL lame_block_type_hist (
+        const lame_global_flags * gfp,
+        int btype_count[6] );
+
+void CDECL lame_bitrate_block_type_hist (
+        const lame_global_flags * gfp,
+        int bitrate_btype_count[14][6] );
+
+#if (DEPRECATED_OR_OBSOLETE_CODE_REMOVED && 0)
+#else
+/*
+ * OPTIONAL:
+ * lame_mp3_tags_fid will rewrite a Xing VBR tag to the mp3 file with file
+ * pointer fid.  These calls perform forward and backwards seeks, so make
+ * sure fid is a real file.  Make sure lame_encode_flush has been called,
+ * and all mp3 data has been written to the file before calling this
+ * function.
+ * NOTE:
+ * if VBR  tags are turned off by the user, or turned off by LAME because
+ * the output is not a regular file, this call does nothing
+ * NOTE:
+ * LAME wants to read from the file to skip an optional ID3v2 tag, so
+ * make sure you opened the file for writing and reading.
+ * NOTE:
+ * You can call lame_get_lametag_frame instead, if you want to insert
+ * the lametag yourself.
+*/
+void CDECL lame_mp3_tags_fid(lame_global_flags *, FILE* fid);
+#endif
+
+/*
+ * OPTIONAL:
+ * lame_get_lametag_frame copies the final LAME-tag into 'buffer'.
+ * The function returns the number of bytes copied into buffer, or
+ * the required buffer size, if the provided buffer is too small.
+ * Function failed, if the return value is larger than 'size'!
+ * Make sure lame_encode flush has been called before calling this function.
+ * NOTE:
+ * if VBR  tags are turned off by the user, or turned off by LAME,
+ * this call does nothing and returns 0.
+ * NOTE:
+ * LAME inserted an empty frame in the beginning of mp3 audio data,
+ * which you have to replace by the final LAME-tag frame after encoding.
+ * In case there is no ID3v2 tag, usually this frame will be the very first
+ * data in your mp3 file. If you put some other leading data into your
+ * file, you'll have to do some bookkeeping about where to write this buffer.
+ */
+size_t CDECL lame_get_lametag_frame(
+        const lame_global_flags *, unsigned char* buffer, size_t size);
+
+/*
+ * REQUIRED:
+ * final call to free all remaining buffers
+ */
+int  CDECL lame_close (lame_global_flags *);
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/*
+ * OBSOLETE:
+ * lame_encode_finish combines lame_encode_flush() and lame_close() in
+ * one call.  However, once this call is made, the statistics routines
+ * will no longer work because the data will have been cleared, and
+ * lame_mp3_tags_fid() cannot be called to add data to the VBR header
+ */
+int CDECL lame_encode_finish(
+        lame_global_flags*  gfp,
+        unsigned char*      mp3buf,
+        int                 size );
+#endif
+
+
+
+
+
+
+/*********************************************************************
+ *
+ * decoding
+ *
+ * a simple interface to mpglib, part of mpg123, is also included if
+ * libmp3lame is compiled with HAVE_MPGLIB
+ *
+ *********************************************************************/
+
+struct hip_global_struct;
+typedef struct hip_global_struct hip_global_flags;
+typedef hip_global_flags *hip_t;
+
+
+typedef struct {
+  int header_parsed;   /* 1 if header was parsed and following data was
+                          computed                                       */
+  int stereo;          /* number of channels                             */
+  int samplerate;      /* sample rate                                    */
+  int bitrate;         /* bitrate                                        */
+  int mode;            /* mp3 frame type                                 */
+  int mode_ext;        /* mp3 frame type                                 */
+  int framesize;       /* number of samples per mp3 frame                */
+
+  /* this data is only computed if mpglib detects a Xing VBR header */
+  unsigned long nsamp; /* number of samples in mp3 file.                 */
+  int totalframes;     /* total number of frames in mp3 file             */
+
+  /* this data is not currently computed by the mpglib routines */
+  int framenum;        /* frames decoded counter                         */
+} mp3data_struct;
+
+/* required call to initialize decoder */
+hip_t CDECL hip_decode_init(void);
+
+/* cleanup call to exit decoder  */
+int CDECL hip_decode_exit(hip_t gfp);
+
+/* HIP reporting functions */
+void CDECL hip_set_errorf(hip_t gfp, lame_report_function f);
+void CDECL hip_set_debugf(hip_t gfp, lame_report_function f);
+void CDECL hip_set_msgf  (hip_t gfp, lame_report_function f);
+
+/*********************************************************************
+ * input 1 mp3 frame, output (maybe) pcm data.
+ *
+ *  nout = hip_decode(hip, mp3buf,len,pcm_l,pcm_r);
+ *
+ * input:
+ *    len          :  number of bytes of mp3 data in mp3buf
+ *    mp3buf[len]  :  mp3 data to be decoded
+ *
+ * output:
+ *    nout:  -1    : decoding error
+ *            0    : need more data before we can complete the decode
+ *           >0    : returned 'nout' samples worth of data in pcm_l,pcm_r
+ *    pcm_l[nout]  : left channel data
+ *    pcm_r[nout]  : right channel data
+ *
+ *********************************************************************/
+int CDECL hip_decode( hip_t           gfp
+                    , unsigned char * mp3buf
+                    , size_t          len
+                    , short           pcm_l[]
+                    , short           pcm_r[]
+                    );
+
+/* same as hip_decode, and also returns mp3 header data */
+int CDECL hip_decode_headers( hip_t           gfp
+                            , unsigned char*  mp3buf
+                            , size_t          len
+                            , short           pcm_l[]
+                            , short           pcm_r[]
+                            , mp3data_struct* mp3data
+                            );
+
+/* same as hip_decode, but returns at most one frame */
+int CDECL hip_decode1( hip_t          gfp
+                     , unsigned char* mp3buf
+                     , size_t         len
+                     , short          pcm_l[]
+                     , short          pcm_r[]
+                     );
+
+/* same as hip_decode1, but returns at most one frame and mp3 header data */
+int CDECL hip_decode1_headers( hip_t           gfp
+                             , unsigned char*  mp3buf
+                             , size_t          len
+                             , short           pcm_l[]
+                             , short           pcm_r[]
+                             , mp3data_struct* mp3data
+                             );
+
+/* same as hip_decode1_headers, but also returns enc_delay and enc_padding
+   from VBR Info tag, (-1 if no info tag was found) */
+int CDECL hip_decode1_headersB( hip_t gfp
+                              , unsigned char*   mp3buf
+                              , size_t           len
+                              , short            pcm_l[]
+                              , short            pcm_r[]
+                              , mp3data_struct*  mp3data
+                              , int             *enc_delay
+                              , int             *enc_padding
+                              );
+
+
+
+/* OBSOLETE:
+ * lame_decode... functions are there to keep old code working
+ * but it is strongly recommended to replace calls by hip_decode...
+ * function calls, see above.
+ */
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+int CDECL lame_decode_init(void);
+int CDECL lame_decode(
+        unsigned char *  mp3buf,
+        int              len,
+        short            pcm_l[],
+        short            pcm_r[] );
+int CDECL lame_decode_headers(
+        unsigned char*   mp3buf,
+        int              len,
+        short            pcm_l[],
+        short            pcm_r[],
+        mp3data_struct*  mp3data );
+int CDECL lame_decode1(
+        unsigned char*  mp3buf,
+        int             len,
+        short           pcm_l[],
+        short           pcm_r[] );
+int CDECL lame_decode1_headers(
+        unsigned char*   mp3buf,
+        int              len,
+        short            pcm_l[],
+        short            pcm_r[],
+        mp3data_struct*  mp3data );
+int CDECL lame_decode1_headersB(
+        unsigned char*   mp3buf,
+        int              len,
+        short            pcm_l[],
+        short            pcm_r[],
+        mp3data_struct*  mp3data,
+        int              *enc_delay,
+        int              *enc_padding );
+int CDECL lame_decode_exit(void);
+
+#endif /* obsolete lame_decode API calls */
+
+
+/*********************************************************************
+ *
+ * id3tag stuff
+ *
+ *********************************************************************/
+
+/*
+ * id3tag.h -- Interface to write ID3 version 1 and 2 tags.
+ *
+ * Copyright (C) 2000 Don Melton.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* utility to obtain alphabetically sorted list of genre names with numbers */
+void CDECL id3tag_genre_list(
+        void (*handler)(int, const char *, void *),
+        void*  cookie);
+
+void CDECL id3tag_init     (lame_t gfp);
+
+/* force addition of version 2 tag */
+void CDECL id3tag_add_v2   (lame_t gfp);
+
+/* add only a version 1 tag */
+void CDECL id3tag_v1_only  (lame_t gfp);
+
+/* add only a version 2 tag */
+void CDECL id3tag_v2_only  (lame_t gfp);
+
+/* pad version 1 tag with spaces instead of nulls */
+void CDECL id3tag_space_v1 (lame_t gfp);
+
+/* pad version 2 tag with extra 128 bytes */
+void CDECL id3tag_pad_v2   (lame_t gfp);
+
+/* pad version 2 tag with extra n bytes */
+void CDECL id3tag_set_pad  (lame_t gfp, size_t n);
+
+void CDECL id3tag_set_title(lame_t gfp, const char* title);
+void CDECL id3tag_set_artist(lame_t gfp, const char* artist);
+void CDECL id3tag_set_album(lame_t gfp, const char* album);
+void CDECL id3tag_set_year(lame_t gfp, const char* year);
+void CDECL id3tag_set_comment(lame_t gfp, const char* comment);
+            
+/* return -1 result if track number is out of ID3v1 range
+                    and ignored for ID3v1 */
+int CDECL id3tag_set_track(lame_t gfp, const char* track);
+
+/* return non-zero result if genre name or number is invalid
+  result 0: OK
+  result -1: genre number out of range
+  result -2: no valid ID3v1 genre name, mapped to ID3v1 'Other'
+             but taken as-is for ID3v2 genre tag */
+int CDECL id3tag_set_genre(lame_t gfp, const char* genre);
+
+/* return non-zero result if field name is invalid */
+int CDECL id3tag_set_fieldvalue(lame_t gfp, const char* fieldvalue);
+
+/* return non-zero result if image type is invalid */
+int CDECL id3tag_set_albumart(lame_t gfp, const char* image, size_t size);
+
+/* lame_get_id3v1_tag copies ID3v1 tag into buffer.
+ * Function returns number of bytes copied into buffer, or number
+ * of bytes rquired if buffer 'size' is too small.
+ * Function fails, if returned value is larger than 'size'.
+ * NOTE:
+ * This functions does nothing, if user/LAME disabled ID3v1 tag.
+ */
+size_t CDECL lame_get_id3v1_tag(lame_t gfp, unsigned char* buffer, size_t size);
+
+/* lame_get_id3v2_tag copies ID3v2 tag into buffer.
+ * Function returns number of bytes copied into buffer, or number
+ * of bytes rquired if buffer 'size' is too small.
+ * Function fails, if returned value is larger than 'size'.
+ * NOTE:
+ * This functions does nothing, if user/LAME disabled ID3v2 tag.
+ */
+size_t CDECL lame_get_id3v2_tag(lame_t gfp, unsigned char* buffer, size_t size);
+
+/* normaly lame_init_param writes ID3v2 tags into the audio stream
+ * Call lame_set_write_id3tag_automatic(gfp, 0) before lame_init_param
+ * to turn off this behaviour and get ID3v2 tag with above function
+ * write it yourself into your file.
+ */
+void CDECL lame_set_write_id3tag_automatic(lame_global_flags * gfp, int);
+int CDECL lame_get_write_id3tag_automatic(lame_global_flags const* gfp);
+
+/* experimental */
+int CDECL id3tag_set_textinfo_latin1(lame_t gfp, char const *id, char const *text);
+
+/* experimental */
+int CDECL id3tag_set_comment_latin1(lame_t gfp, char const *lang, char const *desc, char const *text);
+
+#if DEPRECATED_OR_OBSOLETE_CODE_REMOVED
+#else
+/* experimental */
+int CDECL id3tag_set_textinfo_ucs2(lame_t gfp, char const *id, unsigned short const *text);
+
+/* experimental */
+int CDECL id3tag_set_comment_ucs2(lame_t gfp, char const *lang,
+                                  unsigned short const *desc, unsigned short const *text);
+
+/* experimental */
+int CDECL id3tag_set_fieldvalue_ucs2(lame_t gfp, const unsigned short *fieldvalue);
+#endif
+
+/* experimental */
+int CDECL id3tag_set_fieldvalue_utf16(lame_t gfp, const unsigned short *fieldvalue);
+
+/* experimental */
+int CDECL id3tag_set_textinfo_utf16(lame_t gfp, char const *id, unsigned short const *text);
+
+/* experimental */
+int CDECL id3tag_set_comment_utf16(lame_t gfp, char const *lang, unsigned short const *desc, unsigned short const *text);
+
+
+/***********************************************************************
+*
+*  list of valid bitrates [kbps] & sample frequencies [Hz].
+*  first index: 0: MPEG-2   values  (sample frequencies 16...24 kHz)
+*               1: MPEG-1   values  (sample frequencies 32...48 kHz)
+*               2: MPEG-2.5 values  (sample frequencies  8...12 kHz)
+***********************************************************************/
+
+extern const int     bitrate_table    [3][16];
+extern const int     samplerate_table [3][ 4];
+
+/* access functions for use in DLL, global vars are not exported */
+int CDECL lame_get_bitrate(int mpeg_version, int table_index);
+int CDECL lame_get_samplerate(int mpeg_version, int table_index);
+
+
+/* maximum size of albumart image (128KB), which affects LAME_MAXMP3BUFFER
+   as well since lame_encode_buffer() also returns ID3v2 tag data */
+#define LAME_MAXALBUMART    (128 * 1024)
+
+/* maximum size of mp3buffer needed if you encode at most 1152 samples for
+   each call to lame_encode_buffer.  see lame_encode_buffer() below  
+   (LAME_MAXMP3BUFFER is now obsolete)  */
+#define LAME_MAXMP3BUFFER   (16384 + LAME_MAXALBUMART)
+
+
+typedef enum {
+    LAME_OKAY             =   0,
+    LAME_NOERROR          =   0,
+    LAME_GENERICERROR     =  -1,
+    LAME_NOMEM            = -10,
+    LAME_BADBITRATE       = -11,
+    LAME_BADSAMPFREQ      = -12,
+    LAME_INTERNALERROR    = -13,
+
+    FRONTEND_READERROR    = -80,
+    FRONTEND_WRITEERROR   = -81,
+    FRONTEND_FILETOOLARGE = -82
+
+} lame_errorcodes_t;
+
+#if defined(__cplusplus)
+}
+#endif
+#endif /* LAME_LAME_H */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/lame b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/lame
new file mode 100755
index 0000000..fec6376
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/Lame/lame.framework/lame
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.h
new file mode 100644
index 0000000..5a0dc9c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.h
@@ -0,0 +1,15 @@
+//
+//  PBRecordingView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/3.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBRecordingView : UIView
+@property (nonatomic, copy) void(^endRecordingBlock)(NSString *recordingName);
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.m
new file mode 100644
index 0000000..9967e89
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/AddExamineView/RecordingView/PBRecordingView.m
@@ -0,0 +1,227 @@
+//
+//  PBRecordingView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/3.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBRecordingView.h"
+#import <AVFoundation/AVFoundation.h>
+#import "ConvertAudioFile.h"
+#define ETRECORD_RATE 11025.0
+
+@interface PBRecordingView()
+//时间记录
+@property (nonatomic, strong) UILabel *timeL;
+//录音机
+@property (nonatomic, strong) AVAudioRecorder *recorder;
+//每秒60次
+@property (nonatomic, strong) CADisplayLink *displayLink;
+//录音计数
+@property (nonatomic, assign) NSInteger recordingTimer;
+@property (nonatomic, assign) NSInteger totalTime;
+//录音路径
+@property (nonatomic, copy) NSString *recordingCafPath;
+//记录右侧按钮状态
+@property (nonatomic, assign) BOOL isComplete;
+@end
+@implementation PBRecordingView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor colorWithWhite:0 alpha:0.3];
+    UIView *toolsView = [[UIView alloc] init];
+    toolsView.backgroundColor = [UIColor whiteColor];
+    toolsView.layer.cornerRadius = 10.0f;
+    [toolsView.layer setMasksToBounds:YES];
+    [self addSubview:toolsView];
+    [toolsView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(self);
+        make.size.mas_equalTo(CGSizeMake(317, 166));
+    }];
+
+    UILabel *promptL = [UILabel z_labelWithText:@"提示:仅可上传一条语音,最多60秒" Color:TitleColor isBold:NO Font:14];
+    [self addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(toolsView).offset(20);
+        make.centerX.equalTo(toolsView);
+        make.height.equalTo(@20);
+    }];
+
+    UILabel *countdownL = [UILabel z_labelWithText:@"倒计时" Color:TitleColor isBold:NO Font:16];
+    [self addSubview:countdownL];
+    [countdownL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(toolsView).offset(98);
+        make.top.equalTo(toolsView).offset(72);
+        make.size.mas_equalTo(CGSizeMake(57, 22));
+    }];
+    self.timeL = [UILabel z_labelWithText:@"60 S" Color:TitleColor isBold:YES Font:20];
+    [self addSubview:self.timeL];
+    [self.timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(countdownL);
+        make.left.equalTo(countdownL.mas_right).offset(20);
+        make.height.equalTo(@28);
+    }];
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = PBColor(208, 211, 218);
+    [self addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(toolsView).offset(115);
+        make.left.right.equalTo(toolsView);
+        make.height.equalTo(@1);
+    }];
+    UIView *lin2View = [[UIView alloc] init];
+    lin2View.backgroundColor = PBColor(208, 211, 218);
+    [self addSubview:lin2View];
+    [lin2View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(linView.mas_bottom);
+        make.bottom.equalTo(toolsView);
+        make.centerX.equalTo(toolsView);
+        make.width.equalTo(@1);
+    }];
+    
+    UIButton *cancelBtn = [UIButton z_textButton:@"取消" fontSize:20 normalColor:IndicatedColor];
+    [cancelBtn addTarget:self action:@selector(cancelInterAction) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:cancelBtn];
+    [cancelBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(linView.mas_bottom);
+        make.left.bottom.equalTo(toolsView);
+        make.right.equalTo(lin2View.mas_left);
+    }];
+    
+    UIButton *endBtn = [UIButton z_textButton:@"开始" fontSize:20 normalColor:IndicatedColor];
+    [endBtn addTarget:self action:@selector(endAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:endBtn];
+    [endBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(linView.mas_bottom);
+        make.right.bottom.equalTo(toolsView);
+        make.left.equalTo(lin2View.mas_right);
+    }];
+}
+//定时器
+- (void)updateMeters{
+    self.recordingTimer ++;
+    NSInteger seconds = self.recordingTimer / 60;
+    NSInteger countdown = self.totalTime - seconds;
+    if (countdown == 0) {
+        [self.recorder stop];
+        [self.displayLink invalidate];
+        [self cleanCafFile];
+        if (self.endRecordingBlock) {
+            NSString *mp3Path = [_recordingCafPath stringByReplacingOccurrencesOfString:@"caf" withString:@"mp3"];
+            self.endRecordingBlock([mp3Path lastPathComponent]);
+        }
+        [self removeFromSuperview];
+    }
+    self.timeL.text = [NSString stringWithFormat:@"%zd S",countdown];
+}
+- (void)cleanCafFile {
+    NSFileManager *fileManager=[NSFileManager defaultManager];
+    BOOL isDir = FALSE;
+    BOOL isDirExist = [fileManager fileExistsAtPath:_recordingCafPath isDirectory:&isDir];
+    if (isDirExist) {
+        [fileManager removeItemAtPath:_recordingCafPath error:nil];
+    }
+}
+- (void)cleanMp3File {
+    NSString *recordingMp3Path = [_recordingCafPath stringByReplacingOccurrencesOfString:@"caf" withString:@"mp3"];
+    NSFileManager *fileManager=[NSFileManager defaultManager];
+    BOOL isDir = FALSE;
+    BOOL isDirExist = [fileManager fileExistsAtPath:recordingMp3Path isDirectory:&isDir];
+    if (isDirExist) {
+        [fileManager removeItemAtPath:recordingMp3Path error:nil];
+    }
+}
+//取消录音
+- (void)cancelInterAction {
+    if (self.isComplete) {
+        [self.recorder stop];
+        [self.displayLink invalidate];
+        [self cleanCafFile];
+        [self cleanMp3File];
+    }
+    [self removeFromSuperview];
+}
+
+// 开始/完成录音
+- (void)endAction:(UIButton *)button {
+    if (self.isComplete) {
+        [self.recorder stop];
+        [[ConvertAudioFile sharedInstance] sendEndRecord];
+        [self.displayLink invalidate];
+        [self cleanCafFile];
+        if (self.endRecordingBlock) {
+            NSString *mp3Path = [_recordingCafPath stringByReplacingOccurrencesOfString:@"caf" withString:@"mp3"];
+            self.endRecordingBlock([mp3Path lastPathComponent]);
+        }
+        [self removeFromSuperview];
+    }else {
+        [button setTitle:@"完成" forState:UIControlStateNormal];
+        self.totalTime = 60;
+        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
+        [audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
+        [self.recorder record];
+        //转换MP3格式
+        [[ConvertAudioFile sharedInstance] conventToMp3WithCafFilePath:_recordingCafPath mp3FilePath:[_recordingCafPath stringByReplacingOccurrencesOfString:@"caf" withString:@"mp3"] sampleRate:ETRECORD_RATE];
+        self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateMeters)];
+        [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
+        self.isComplete = YES;
+    }
+}
+#pragma mark - 懒加载
+- (AVAudioRecorder *)recorder {
+    if (_recorder == nil) {
+        NSDateFormatter * formatter = [[NSDateFormatter alloc ] init];
+        [formatter setDateFormat:@"YYYYMMddHHmmssSSS"];
+        NSString *date = [formatter stringFromDate:[NSDate date]];
+        NSString *recordingName = [NSString stringWithFormat:@"%@.caf",date];
+        
+        AVAudioSession *session = [AVAudioSession sharedInstance];
+        NSError *sessionError;
+        [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
+        if(session == nil) {
+            NSLog(@"Error creating session: %@", [sessionError description]);
+        } else {
+            [session setActive:YES error:nil];
+        }
+        //设置录音输出路径
+        _recordingCafPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:recordingName];
+        NSLog(@"=======%@", _recordingCafPath);
+        
+        // 2.录音参数设置
+        NSMutableDictionary *settingDictM = [NSMutableDictionary dictionary];
+        [settingDictM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
+        [settingDictM setObject:@(ETRECORD_RATE) forKey:AVSampleRateKey];
+        [settingDictM setObject:@(2) forKey:AVNumberOfChannelsKey];
+        [settingDictM setObject:@(16) forKey:AVLinearPCMBitDepthKey];
+        [settingDictM setObject:[NSNumber numberWithInt:AVAudioQualityMin] forKey:AVEncoderAudioQualityKey];
+        
+        //创建录音机
+        NSError *error=nil;
+        _recorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:_recordingCafPath] settings:settingDictM error:&error];
+        //        _recorder.delegate = self;
+        _recorder.meteringEnabled = YES;//如果要监控声波则必须设置为YES
+        [_recorder prepareToRecord];
+        if (error) {
+            NSLog(@"创建录音机对象时发生错误,错误信息:%@",error.localizedDescription);
+            return nil;
+        }
+    }
+    return _recorder;
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.h
new file mode 100644
index 0000000..3b1032e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.h
@@ -0,0 +1,18 @@
+//
+//  PBChooseArtifactsCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBArtifactsInfoModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBChooseArtifactsCell : UITableViewCell
+@property (nonatomic, strong) PBArtifactsInfoModel *artifactsInfoModel;
+@property (nonatomic, copy) void (^saveBlock)(BOOL isSave);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.m
new file mode 100644
index 0000000..82c9839
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseArtifactsCell.m
@@ -0,0 +1,122 @@
+//
+//  PBChooseArtifactsCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBChooseArtifactsCell.h"
+#import "PBArtifactsInfoModel.h"
+@interface PBChooseArtifactsCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UIImageView *imageV;
+@end
+@implementation PBChooseArtifactsCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIImageView *selectImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@""]];
+    [self.contentView addSubview:selectImageV];
+    [selectImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+//    UIView *bgView = [[UIView alloc] init];
+//    bgView.backgroundColor = PBColor(233, 235, 237);
+//    [self.contentView addSubview:bgView];
+//    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.contentView).offset(8);
+//        make.bottom.equalTo(self.contentView);
+//        make.left.equalTo(selectImageV.mas_right).offset(8);
+//        make.size.mas_equalTo(CGSizeMake(40, 40));
+//    }];
+//    [bgView circleViewWithRadius:6];
+//    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"batch"]];
+//    [self.contentView addSubview:imageV];
+//    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.size.mas_equalTo(CGSizeMake(24, 24));
+//        make.center.equalTo(bgView);
+//    }];
+    
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"batch"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.bottom.equalTo(self.contentView);
+        make.left.equalTo(selectImageV.mas_right).offset(8);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(10);
+        make.right.equalTo(self.contentView).offset(-135);
+        make.height.equalTo(@20);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    nameL.textAlignment = NSTextAlignmentRight;
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.left.equalTo(titleL.mas_right).offset(5);
+        make.right.equalTo(self.contentView).offset(-35);
+        make.height.equalTo(@20);
+    }];
+    UIButton *selectBtn = [[UIButton alloc] init];
+    [selectBtn addTarget:self action:@selector(selectAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.nameL = nameL;
+    self.imageV = selectImageV;
+}
+- (void)selectAction {
+    if (self.artifactsInfoModel.isSelected) {
+        self.imageV.image = [UIImage imageNamed:@"select_circle"];
+        self.artifactsInfoModel.isSelected = NO;
+        if (self.saveBlock) {
+            self.saveBlock(NO);
+        }
+    }else {
+        self.imageV.image = [UIImage imageNamed:@"select_circle_select"];
+        self.artifactsInfoModel.isSelected = YES;
+        if (self.saveBlock) {
+            self.saveBlock(YES);
+        }
+    }
+}
+
+- (void)setArtifactsInfoModel:(PBArtifactsInfoModel *)artifactsInfoModel {
+    _artifactsInfoModel = artifactsInfoModel;
+    self.titleL.text = artifactsInfoModel.bm_materialcode;
+    self.nameL.text = artifactsInfoModel.bm_materialname;
+    if (artifactsInfoModel.isSelected) {
+        self.imageV.image = [UIImage imageNamed:@"select_circle_select"];
+    }else {
+        self.imageV.image = [UIImage imageNamed:@"select_circle"];
+    }
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.h
new file mode 100644
index 0000000..7783a74
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.h
@@ -0,0 +1,21 @@
+//
+//  PBChooseArtifactsCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBETaskInfoModel;
+@class PBSchedulePlanModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBChooseTasksCell : UITableViewCell
+@property (nonatomic, strong) PBETaskInfoModel *taskInfoModel;
+@property (nonatomic, strong) PBSchedulePlanModel *planModel;
+@property (nonatomic, copy) void (^nextBlock)(void);
+@property (nonatomic, copy) void (^saveBlock)(BOOL isSave);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.m
new file mode 100644
index 0000000..10595ea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBChooseTasksCell.m
@@ -0,0 +1,141 @@
+//
+//  PBChooseArtifactsCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBChooseTasksCell.h"
+#import "PBETaskInfoModel.h"
+#import "PBSchedulePlanModel.h"
+@interface PBChooseTasksCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UIImageView *nextLevelV;
+@end
+@implementation PBChooseTasksCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIImageView *selectImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@""]];
+    [self.contentView addSubview:selectImageV];
+    [selectImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(12);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"task_list"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+//        make.bottom.equalTo(self.contentView);
+        make.left.equalTo(selectImageV.mas_right).offset(8);
+        make.size.mas_equalTo(CGSizeMake(30, 30));
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(10);
+        make.right.equalTo(self.contentView).offset(-60);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *nextLevelV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"course_btn_company_open"]];
+    [self.contentView addSubview:nextLevelV];
+    [nextLevelV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+        make.right.equalTo(self.contentView).offset(-30);
+        make.centerY.equalTo(self.contentView);
+    }];
+   
+    UIButton *selectBtn = [[UIButton alloc] init];
+    [selectBtn addTarget:self action:@selector(selectAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.imageV = selectImageV;
+    self.nextLevelV = nextLevelV;
+}
+- (void)selectAction {
+    if (self.planModel) {
+        if (self.planModel.children.count > 0) {
+            if (self.nextBlock) {
+                self.nextBlock();
+            }
+        }else {
+            if (self.saveBlock) {
+                self.saveBlock(YES);
+            }
+        }
+    }else {
+        if (self.taskInfoModel.Children.count > 0) {
+            if (self.nextBlock) {
+                self.nextBlock();
+            }
+        }else {
+            if (self.taskInfoModel.isSelected) {
+                self.imageV.image = [UIImage imageNamed:@"select_circle"];
+                self.taskInfoModel.isSelected = NO;
+                if (self.saveBlock) {
+                    self.saveBlock(NO);
+                }
+            }else {
+                self.imageV.image = [UIImage imageNamed:@"select_circle_select"];
+                self.taskInfoModel.isSelected = YES;
+                if (self.saveBlock) {
+                    self.saveBlock(YES);
+                }
+            }
+        }
+    }
+}
+
+- (void)setTaskInfoModel:(PBETaskInfoModel *)taskInfoModel {
+    _taskInfoModel = taskInfoModel;
+    self.titleL.text = taskInfoModel.NAME_;
+    if (taskInfoModel.Children.count > 0) {
+        self.imageV.hidden = YES;
+        self.nextLevelV.hidden = NO;
+    }else {
+        self.imageV.hidden = NO;
+        self.nextLevelV.hidden = YES;
+        if (taskInfoModel.isSelected) {
+            self.imageV.image = [UIImage imageNamed:@"select_circle_select"];
+        }else {
+            self.imageV.image = [UIImage imageNamed:@"select_circle"];
+        }
+    }
+}
+- (void)setPlanModel:(PBSchedulePlanModel *)planModel {
+    _planModel = planModel;
+    self.titleL.text = planModel.Name;
+    if (planModel.children.count > 0) {
+        self.imageV.hidden = YES;
+        self.nextLevelV.hidden = NO;
+    }else {
+        self.imageV.hidden = NO;
+        self.nextLevelV.hidden = YES;
+        self.imageV.image = [UIImage imageNamed:@"select_circle"];
+    }
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.h
new file mode 100644
index 0000000..703fe04
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.h
@@ -0,0 +1,17 @@
+//
+//  PBExamineListMorePicCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/5.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBExamineListMorePicCell : UITableViewCell
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.m
new file mode 100644
index 0000000..1d96e6a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListMorePicCell.m
@@ -0,0 +1,323 @@
+//
+//  PBExamineListMorePicCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/5.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBExamineListMorePicCell.h"
+#import "PBExamineListModel.h"
+#import "PBImageCollectionViewCell.h"
+static NSString *const ImageCellID = @"ImageCellID";
+@interface PBExamineListMorePicCell()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, weak) UILabel *referredL;//检查人 简称
+@property (nonatomic, weak) UILabel *checkNameL;//检查人
+@property (nonatomic, weak) UIImageView *stateImageV;//状态
+@property (nonatomic, weak) UILabel *originatorL;//发起人
+@property (nonatomic, weak) UILabel *timeL;//发起时间
+@property (nonatomic, weak) UILabel *titleL;//标题
+@property (nonatomic, weak) UILabel *typeL;//类型
+@property (nonatomic, weak) UIView *stateBgV;//级别背景
+@property (nonatomic, weak) UILabel *stateL;//级别
+@property (nonatomic, weak) UILabel *checkL;//检查内容
+@property (nonatomic, weak) UILabel *limitL;//期限
+@property (nonatomic, weak) UIView *checkBgV;
+@property (nonatomic, weak) UILabel *timeLimitL;
+@property (nonatomic, weak) UIView *leftView;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@end
+
+@implementation PBExamineListMorePicCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.bottom.equalTo(self.contentView);
+    }];
+    [bgV circleViewWithRadius:6];
+    UIView *portraitImageV = [[UIView alloc] init];
+    portraitImageV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:portraitImageV];
+    [portraitImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(13);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    [portraitImageV circleViewWithRadius:20];
+    
+    UILabel *referredL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:16];
+    referredL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:referredL];
+    [referredL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.right.equalTo(portraitImageV);
+    }];
+    UILabel *checkNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:checkNameL];
+    [checkNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV);
+        make.left.equalTo(portraitImageV.mas_right).offset(8);
+        make.right.equalTo(bgV).offset(-70);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *stateImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rectify_ qualified"]];
+    [self.contentView addSubview:stateImageV];
+    [stateImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV);
+        make.size.mas_equalTo(CGSizeMake(60, 22));
+    }];
+  
+    UILabel *originatorL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:originatorL];
+    [originatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkNameL.mas_bottom).offset(4);
+        make.left.equalTo(checkNameL);
+        make.height.equalTo(@16);
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(originatorL);
+        make.left.equalTo(originatorL.mas_right).offset(8);
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    titleL.numberOfLines = 3;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeL.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    UIImageView *typeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"typebg"]];
+    [self.contentView addSubview:typeImageV];
+    [typeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL);
+        make.left.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(62, 22));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"设计问题" Color:[UIColor whiteColor] isBold:YES Font:12];
+    typeL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(typeImageV);
+    }];
+    UIView *leftView = [[UIView alloc] init];
+    [self.contentView addSubview:leftView];
+    UIView *stateBgV = [[UIView alloc] init];
+    stateBgV.backgroundColor = PBColor(0, 122, 255);
+    [self.contentView addSubview:stateBgV];
+    UILabel *stateL = [UILabel z_labelWithText:@"" Color:PBColor(0, 122, 255) isBold:YES Font:12];
+    stateL.numberOfLines = 0;
+    stateL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:stateL];
+    UIView *rightView = [[UIView alloc] init];
+    rightView.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:rightView];
+    
+    UIView *checkBgV = [[UIView alloc] init];
+    checkBgV.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:checkBgV];
+    UILabel *checkL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:14];
+    checkL.numberOfLines = 3;
+    [self.contentView addSubview:checkL];
+    [checkL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV).offset(15);
+        make.left.equalTo(checkBgV).offset(8);
+        make.right.equalTo(checkBgV).offset(-8);
+    }];
+    [checkBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(10);
+        make.left.equalTo(bgV).offset(50);
+        make.right.equalTo(bgV).offset(-10);
+        make.bottom.equalTo(checkL).offset(15);
+    }];
+    
+    [stateBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(checkBgV);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(checkBgV.mas_left);
+    }];
+    [stateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(stateBgV).offset(10);
+        make.bottom.equalTo(stateBgV).offset(-10);
+        make.left.right.equalTo(stateBgV);
+    }];
+    [leftView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(stateBgV);
+        make.width.equalTo(@10);
+    }];
+    [rightView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.equalTo(checkBgV);
+        make.width.equalTo(@10);
+    }];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake((MainScreenWidth - (20 + 3) * 2) / 3, 92);
+    layout.minimumLineSpacing = 3.f;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.scrollEnabled = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV.mas_bottom).offset(10);
+        make.left.equalTo(self.contentView).offset(20);
+        make.right.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@92);
+    }];
+    UILabel *timeLimitL = [UILabel z_labelWithText:@"任务期限" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeLimitL];
+    [timeLimitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(52, 16));
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+    UILabel *limitL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:limitL];
+    [limitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeLimitL);
+        make.left.equalTo(timeLimitL.mas_right).offset(18);
+    }];
+    self.referredL = referredL;
+    self.checkNameL = checkNameL;
+    self.stateImageV = stateImageV;
+    self.originatorL = originatorL;
+    self.timeL = timeL;
+    self.titleL = titleL;
+    self.typeL = typeL;
+    self.stateBgV = stateBgV;
+    self.stateL = stateL;
+    self.checkL = checkL;
+    self.limitL = limitL;
+    self.checkBgV = checkBgV;
+    self.timeLimitL = timeLimitL;
+    self.leftView = leftView;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.examineListModel.FirstCheck_Attachments.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineListModel.FirstCheck_Attachments[indexPath.row];
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+    NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+    cell.roleType = PARTICIPANT;
+    if (self.examineListModel.FirstCheck_Attachments.count > 3 & indexPath.item == 2) {
+        cell.countStr = [NSString stringWithFormat:@"%zd", self.examineListModel.FirstCheck_Attachments.count];
+    }else {
+        cell.countStr = nil;
+    }
+    cell.imageUrl = url;
+    return cell;
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    photoBrowser.imageCount = self.examineListModel.FirstCheck_Attachments.count;
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+}
+ 
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+    UIImage *image = [UIImage imageWithData:data];
+    return image;
+}
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+    BOOL isChiness = [self IsChinese:examineListModel.bu_checker_RealName];
+    if (isChiness) {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringFromIndex:examineListModel.bu_checker_RealName.length - 1];
+    }else {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringToIndex:1];
+    }
+    self.checkNameL.text = examineListModel.bu_checker_RealName;
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+    }else if ([flagStr isEqualToString:@"C"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ acceptance"];
+    }else if ([flagStr isEqualToString:@"D"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ qualified"];
+    }else {
+        self.stateImageV.image = [UIImage imageNamed:@""];
+    }
+    self.originatorL.text = examineListModel.bu_examiner_name;
+    NSString *time = [examineListModel.CreateDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    self.timeL.text = [NSString stringWithFormat:@"于%@发起任务",time];
+    self.titleL.text = [NSString stringWithFormat:@"------- %@",examineListModel.ExamineRemark];
+    self.typeL.text = examineListModel.aedt_name;
+    NSRange range1 = [examineListModel.ExamineDate rangeOfString:@"T"];
+    NSRange range2 = [examineListModel.RectificateDate rangeOfString:@"T"];
+    NSString *start = [examineListModel.ExamineDate substringToIndex:range1.location];
+    NSString *end = [examineListModel.RectificateDate substringToIndex:range2.location];
+    self.limitL.text = [NSString stringWithFormat:@"%@ - %@",start, end];
+    if ([examineListModel.aede_severitylevel isEqualToString:@"一般"]) {
+        self.stateBgV.backgroundColor = PBColor(219, 232, 246);
+        self.leftView.backgroundColor = PBColor(219, 232, 246);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"严重"]) {
+        self.stateBgV.backgroundColor = PBColor(245, 232, 220);
+        self.leftView.backgroundColor = PBColor(245, 232, 220);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"非常严重"]) {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }else {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }
+    self.stateL.text = examineListModel.aede_severitylevel;
+    if (examineListModel.CacheRecordList.count > 0) {
+        self.checkL.text = [examineListModel.CacheRecordList[examineListModel.CacheRecordList.count - 1] valueForKey:@"RectificationRemark"];
+    }else {
+        self.checkL.text = @"内容错误";
+    }
+    [self.stateBgV circleViewWithRadius:6];
+    [self.checkBgV circleViewWithRadius:6];
+    [self.collectionView reloadData];
+}
+
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.h
new file mode 100644
index 0000000..77071f4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBExamineListTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/26.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBExamineListTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.m
new file mode 100644
index 0000000..1382796
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTableViewCell.m
@@ -0,0 +1,341 @@
+//
+//  PBExamineListTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/26.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineListTableViewCell.h"
+#import "PBExamineListModel.h"
+@interface PBExamineListTableViewCell()
+@property (nonatomic, weak) UILabel *referredL;//检查人 简称
+@property (nonatomic, weak) UILabel *checkNameL;//检查人
+@property (nonatomic, weak) UIImageView *stateImageV;//状态
+@property (nonatomic, weak) UILabel *originatorL;//发起人
+@property (nonatomic, weak) UILabel *timeL;//发起时间
+@property (nonatomic, weak) UILabel *titleL;//标题
+@property (nonatomic, weak) UILabel *typeL;//类型
+@property (nonatomic, weak) UIView *stateBgV;//级别背景
+@property (nonatomic, weak) UILabel *stateL;//级别
+@property (nonatomic, weak) UILabel *checkL;//检查内容
+@property (nonatomic, weak) UILabel *limitL;//期限
+@property (nonatomic, weak) UIView *checkBgV;
+@property (nonatomic, weak) UILabel *timeLimitL;
+@property (nonatomic, weak) UIView *leftView;
+@property (nonatomic, weak) UIView *examineStateBgV;
+@property (nonatomic, weak) UILabel *stateTextL;
+@property (nonatomic, weak) UIView *yuanV;
+@end
+@implementation PBExamineListTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.bottom.equalTo(self.contentView);
+    }];
+//    [bgV circleViewWithRadius:6];
+    UIView *portraitImageV = [[UIView alloc] init];
+    portraitImageV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:portraitImageV];
+    [portraitImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(13);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    [portraitImageV circleViewWithRadius:20];
+    
+    UILabel *referredL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:16];
+    referredL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:referredL];
+    [referredL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.right.equalTo(portraitImageV);
+    }];
+    UILabel *checkNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:checkNameL];
+    [checkNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV);
+        make.left.equalTo(portraitImageV.mas_right).offset(8);
+        make.right.equalTo(bgV).offset(-70);
+        make.height.equalTo(@20);
+    }];
+//    UIImageView *stateImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rectify_ qualified"]];
+//    [self.contentView addSubview:stateImageV];
+//    [stateImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(bgV).offset(10);
+//        make.right.equalTo(bgV);
+//        make.size.mas_equalTo(CGSizeMake(60, 22));
+//    }];
+    UIView *examineStateBgV = [[UIView alloc] init];
+    examineStateBgV.backgroundColor = [UIColor yellowColor];
+    [self.contentView addSubview:examineStateBgV];
+    [examineStateBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV);
+        make.height.equalTo(@22);
+    }];
+    UIView *yuanV = [[UIView alloc] init];
+    yuanV.backgroundColor = [UIColor yellowColor];
+    [self.contentView addSubview:yuanV];
+    [yuanV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.right.equalTo(examineStateBgV.mas_left).offset(11);
+        make.size.mas_equalTo(CGSizeMake(22, 22));
+    }];
+    [yuanV circleViewWithRadius:11];
+
+    UILabel *stateTextL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:NO Font:12];
+    [self.contentView addSubview:stateTextL];
+    [stateTextL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(examineStateBgV);
+        make.left.equalTo(examineStateBgV);
+        make.right.equalTo(examineStateBgV).offset(-10);
+    }];
+//    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:examineStateBgV.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(10,10)];
+//    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+//    maskLayer.frame = examineStateBgV.bounds;
+//    maskLayer.path = maskPath.CGPath;
+//    examineStateBgV.layer.mask = maskLayer;
+    
+    
+    
+  
+    UILabel *originatorL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:originatorL];
+    [originatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkNameL.mas_bottom).offset(4);
+        make.left.equalTo(checkNameL);
+        make.height.equalTo(@16);
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(originatorL);
+        make.left.equalTo(originatorL.mas_right).offset(8);
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    titleL.numberOfLines = 3;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeL.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    UIImageView *typeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"typebg"]];
+    [self.contentView addSubview:typeImageV];
+    [typeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL);
+        make.left.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(62, 22));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"设计问题" Color:[UIColor whiteColor] isBold:YES Font:12];
+    typeL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(typeImageV);
+    }];
+    UIView *leftView = [[UIView alloc] init];
+    [self.contentView addSubview:leftView];
+    UIView *stateBgV = [[UIView alloc] init];
+    stateBgV.backgroundColor = PBColor(0, 122, 255);
+    [self.contentView addSubview:stateBgV];
+    UILabel *stateL = [UILabel z_labelWithText:@"" Color:PBColor(0, 122, 255) isBold:YES Font:12];
+    stateL.numberOfLines = 0;
+    stateL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:stateL];
+    UIView *rightView = [[UIView alloc] init];
+    rightView.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:rightView];
+    
+    UIView *checkBgV = [[UIView alloc] init];
+    checkBgV.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:checkBgV];
+    UILabel *checkL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:14];
+    checkL.numberOfLines = 3;
+    [self.contentView addSubview:checkL];
+    [checkL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV).offset(15);
+        make.left.equalTo(checkBgV).offset(8);
+        make.right.equalTo(checkBgV).offset(-8);
+    }];
+    [checkBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(10);
+        make.left.equalTo(bgV).offset(50);
+        make.right.equalTo(bgV).offset(-10);
+        make.bottom.equalTo(checkL).offset(15);
+    }];
+    
+    [stateBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(checkBgV);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(checkBgV.mas_left);
+    }];
+    [stateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(stateBgV).offset(10);
+        make.bottom.equalTo(stateBgV).offset(-10);
+        make.left.right.equalTo(stateBgV);
+    }];
+    [leftView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(stateBgV);
+        make.width.equalTo(@10);
+    }];
+    [rightView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.equalTo(checkBgV);
+        make.width.equalTo(@10);
+    }];
+    UILabel *timeLimitL = [UILabel z_labelWithText:@"任务期限" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeLimitL];
+    [timeLimitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(52, 16));
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+    UILabel *limitL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:limitL];
+    [limitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeLimitL);
+        make.left.equalTo(timeLimitL.mas_right).offset(18);
+    }];
+
+    self.referredL = referredL;
+    self.checkNameL = checkNameL;
+//    self.stateImageV = stateImageV;
+    self.originatorL = originatorL;
+    self.timeL = timeL;
+    self.titleL = titleL;
+    self.typeL = typeL;
+    self.stateBgV = stateBgV;
+    self.stateL = stateL;
+    self.checkL = checkL;
+    self.limitL = limitL;
+    self.checkBgV = checkBgV;
+    self.timeLimitL = timeLimitL;
+    self.leftView = leftView;
+    self.examineStateBgV = examineStateBgV;
+    self.stateTextL = stateTextL;
+    self.yuanV = yuanV;
+//    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.stateBgV.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(10, 10)];
+//    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+//    maskLayer.frame = self.stateBgV.bounds;
+//    maskLayer.path = maskPath.CGPath;
+//    self.stateBgV.layer.mask = maskLayer;
+//
+//    UIBezierPath *maskPath1 = [UIBezierPath bezierPathWithRoundedRect:self.checkBgV.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
+//    CAShapeLayer *maskLayer1 = [[CAShapeLayer alloc] init];
+//    maskLayer1.frame = self.checkBgV.bounds;
+//    maskLayer1.path = maskPath1.CGPath;
+//    self.checkBgV.layer.mask = maskLayer1;
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+    BOOL isChiness = [self IsChinese:examineListModel.bu_checker_RealName];
+    if (isChiness) {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringFromIndex:examineListModel.bu_checker_RealName.length - 1];
+    }else {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringToIndex:1];
+    }
+    self.checkNameL.text = examineListModel.bu_checker_RealName;
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        self.yuanV.backgroundColor = PBColor(97, 111, 125);
+        self.examineStateBgV.backgroundColor = PBColor(97, 111, 125);
+        self.stateTextL.text = @"待检查";
+//        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+//        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+        self.yuanV.backgroundColor = PBColor(179, 89, 0);
+        self.examineStateBgV.backgroundColor = PBColor(179, 89, 0);
+        if (examineListModel.RelationMemberName == nil) {
+            self.stateTextL.text = @"需整改";
+        }else {
+            self.stateTextL.text = [NSString stringWithFormat:@"%@ 需整改", examineListModel.RelationMemberName];
+        }
+    }else if ([flagStr isEqualToString:@"C"]) {
+//        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ acceptance"];
+        self.yuanV.backgroundColor = PBColor(0, 107, 179);
+        self.examineStateBgV.backgroundColor = PBColor(0, 107, 179);
+        if (examineListModel.PrincipalName == nil) {
+            self.stateTextL.text = @"待验收";
+        }else {
+            self.stateTextL.text = [NSString stringWithFormat:@"%@ 待验收", examineListModel.PrincipalName];
+        }
+    }else if ([flagStr isEqualToString:@"D"]) {
+//        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ qualified"];
+        self.yuanV.backgroundColor = PBColor(0, 128, 115);
+        self.examineStateBgV.backgroundColor = PBColor(0, 128, 115);
+        self.stateTextL.text = @"已合格";
+    }else if ([flagStr isEqualToString:@"E"]){
+//        self.stateImageV.image = [UIImage imageNamed:@""]; 
+        self.examineStateBgV .backgroundColor = PBColor(40, 58, 79);
+        self.yuanV.backgroundColor = PBColor(40, 58, 79);
+        self.stateTextL.text = @"已关闭";
+    }else {
+        self.examineStateBgV .backgroundColor = [UIColor clearColor];
+        self.yuanV.backgroundColor = [UIColor clearColor];
+        self.stateTextL.text = @"";
+    }
+    self.originatorL.text = examineListModel.bu_examiner_name;
+    NSString *time = [examineListModel.CreateDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    self.timeL.text = [NSString stringWithFormat:@"于%@发起任务",time];
+    self.titleL.text = [NSString stringWithFormat:@"------- %@",examineListModel.ExamineRemark];
+    self.typeL.text = examineListModel.aedt_name;
+    NSRange range1 = [examineListModel.ExamineDate rangeOfString:@"T"];
+    NSRange range2 = [examineListModel.RectificateDate rangeOfString:@"T"];
+    NSString *start = [examineListModel.ExamineDate substringToIndex:range1.location];
+    NSString *end = [examineListModel.RectificateDate substringToIndex:range2.location];
+    self.limitL.text = [NSString stringWithFormat:@"%@ - %@",start, end];
+    if ([examineListModel.aede_severitylevel isEqualToString:@"一般"]) {
+        self.stateBgV.backgroundColor = PBColor(219, 232, 246);
+        self.leftView.backgroundColor = PBColor(219, 232, 246);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"严重"]) {
+        self.stateBgV.backgroundColor = PBColor(245, 232, 220);
+        self.leftView.backgroundColor = PBColor(245, 232, 220);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"非常严重"]) {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }else {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }
+    self.stateL.text = examineListModel.aede_severitylevel;
+    if (examineListModel.CacheRecordList.count > 0) {
+        self.checkL.text = [examineListModel.CacheRecordList[examineListModel.CacheRecordList.count - 1] valueForKey:@"RectificationRemark"];
+    }else {
+        self.checkL.text = @"内容错误";
+    }
+    [self.stateBgV circleViewWithRadius:6];
+    [self.checkBgV circleViewWithRadius:6];
+    
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.h
new file mode 100644
index 0000000..84333bc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.h
@@ -0,0 +1,17 @@
+//
+//  PBExamineListToCheckCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBExamineListToCheckCell : UITableViewCell
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.m
new file mode 100644
index 0000000..cc6445a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListToCheckCell.m
@@ -0,0 +1,200 @@
+//
+//  PBExamineListToCheckCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/24.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBExamineListToCheckCell.h"
+#import "PBExamineListModel.h"
+@interface PBExamineListToCheckCell()
+@property (nonatomic, weak) UILabel *referredL;//检查人 简称
+@property (nonatomic, weak) UILabel *checkNameL;//检查人
+@property (nonatomic, weak) UIImageView *stateImageV;//状态
+@property (nonatomic, weak) UILabel *originatorL;//发起人
+@property (nonatomic, weak) UILabel *timeL;//发起时间
+@property (nonatomic, weak) UILabel *titleL;//标题
+@property (nonatomic, weak) UILabel *typeL;//类型
+@property (nonatomic, weak) UILabel *limitL;//期限
+@end
+@implementation PBExamineListToCheckCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.bottom.equalTo(self.contentView);
+    }];
+
+    UIView *portraitImageV = [[UIView alloc] init];
+    portraitImageV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:portraitImageV];
+    [portraitImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(13);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    [portraitImageV circleViewWithRadius:20];
+    
+    UILabel *referredL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:16];
+    referredL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:referredL];
+    [referredL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.right.equalTo(portraitImageV);
+    }];
+    UILabel *checkNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:checkNameL];
+    [checkNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV);
+        make.left.equalTo(portraitImageV.mas_right).offset(8);
+        make.right.equalTo(bgV).offset(-70);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *stateImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rectify_ qualified"]];
+    [self.contentView addSubview:stateImageV];
+    [stateImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV);
+        make.size.mas_equalTo(CGSizeMake(60, 22));
+    }];
+  
+    UILabel *originatorL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:originatorL];
+    [originatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkNameL.mas_bottom).offset(4);
+        make.left.equalTo(checkNameL);
+        make.height.equalTo(@16);
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(originatorL);
+        make.left.equalTo(originatorL.mas_right).offset(8);
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    titleL.numberOfLines = 3;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeL.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    UIImageView *typeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"typebg"]];
+    [self.contentView addSubview:typeImageV];
+    [typeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL);
+        make.left.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(62, 22));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"设计问题" Color:[UIColor whiteColor] isBold:YES Font:12];
+    typeL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(typeImageV);
+    }];
+
+    UILabel *timeLimitL = [UILabel z_labelWithText:@"任务期限" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeLimitL];
+    [timeLimitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(52, 16));
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+    UILabel *limitL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:limitL];
+    [limitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeLimitL);
+        make.left.equalTo(timeLimitL.mas_right).offset(18);
+    }];
+    self.referredL = referredL;
+    self.checkNameL = checkNameL;
+    self.stateImageV = stateImageV;
+    self.originatorL = originatorL;
+    self.timeL = timeL;
+    self.titleL = titleL;
+    self.typeL = typeL;
+    self.limitL = limitL;
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+    BOOL isChiness = [self IsChinese:examineListModel.bu_checker_RealName];
+    if (isChiness) {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringFromIndex:examineListModel.bu_checker_RealName.length - 1];
+    }else {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringToIndex:1];
+    }
+    self.checkNameL.text = examineListModel.bu_checker_RealName;
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+    }else if ([flagStr isEqualToString:@"C"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ acceptance"];
+    }else if ([flagStr isEqualToString:@"D"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ qualified"];
+    }else {
+        self.stateImageV.image = [UIImage imageNamed:@""];
+    }
+    self.originatorL.text = examineListModel.bu_examiner_name;
+    self.timeL.text = [NSString stringWithFormat:@"于%@发起任务",[examineListModel.CreateDate stringByReplacingOccurrencesOfString:@"T" withString:@" "]];
+    self.titleL.text = [NSString stringWithFormat:@"------- %@",examineListModel.ExamineRemark];
+    self.typeL.text = examineListModel.aedt_name;
+    NSRange range1 = [examineListModel.ExamineDate rangeOfString:@"T"];
+    NSRange range2 = [examineListModel.RectificateDate rangeOfString:@"T"];
+    NSString *start = [examineListModel.ExamineDate substringToIndex:range1.location];
+    NSString *end = [examineListModel.RectificateDate substringToIndex:range2.location];
+    self.limitL.text = [NSString stringWithFormat:@"%@ - %@",start, end];
+
+    
+//    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.stateBgV.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(10, 10)];
+//    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+//    maskLayer.frame = self.stateBgV.bounds;
+//    maskLayer.path = maskPath.CGPath;
+//    self.stateBgV.layer.mask = maskLayer;
+//
+//    UIBezierPath *maskPath1 = [UIBezierPath bezierPathWithRoundedRect:self.checkBgV.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
+//    CAShapeLayer *maskLayer1 = [[CAShapeLayer alloc] init];
+//    maskLayer1.frame = self.checkBgV.bounds;
+//    maskLayer1.path = maskPath1.CGPath;
+//    self.checkBgV.layer.mask = maskLayer1;
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+
+
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.h
new file mode 100644
index 0000000..27fd177
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.h
@@ -0,0 +1,17 @@
+//
+//  PBExamineListTwoPicCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/5.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBExamineListTwoPicCell : UITableViewCell
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.m
new file mode 100644
index 0000000..7f67ac2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineListTwoPicCell.m
@@ -0,0 +1,318 @@
+//
+//  PBExamineListTwoPicCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/11/5.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBExamineListTwoPicCell.h"
+#import "PBExamineListModel.h"
+#import "PBImageCollectionViewCell.h"
+static NSString *const ImageCellID = @"ImageCellID";
+@interface PBExamineListTwoPicCell()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, weak) UILabel *referredL;//检查人 简称
+@property (nonatomic, weak) UILabel *checkNameL;//检查人
+@property (nonatomic, weak) UIImageView *stateImageV;//状态
+@property (nonatomic, weak) UILabel *originatorL;//发起人
+@property (nonatomic, weak) UILabel *timeL;//发起时间
+@property (nonatomic, weak) UILabel *titleL;//标题
+@property (nonatomic, weak) UILabel *typeL;//类型
+@property (nonatomic, weak) UIView *stateBgV;//级别背景
+@property (nonatomic, weak) UILabel *stateL;//级别
+@property (nonatomic, weak) UILabel *checkL;//检查内容
+@property (nonatomic, weak) UILabel *limitL;//期限
+@property (nonatomic, weak) UIView *checkBgV;
+@property (nonatomic, weak) UILabel *timeLimitL;
+@property (nonatomic, weak) UIView *leftView;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@end
+@implementation PBExamineListTwoPicCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.bottom.equalTo(self.contentView);
+    }];
+    [bgV circleViewWithRadius:6];
+    UIView *portraitImageV = [[UIView alloc] init];
+    portraitImageV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:portraitImageV];
+    [portraitImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(13);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    [portraitImageV circleViewWithRadius:20];
+    
+    UILabel *referredL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:16];
+    referredL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:referredL];
+    [referredL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.right.equalTo(portraitImageV);
+    }];
+    UILabel *checkNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:checkNameL];
+    [checkNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV);
+        make.left.equalTo(portraitImageV.mas_right).offset(8);
+        make.right.equalTo(bgV).offset(-70);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *stateImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rectify_ qualified"]];
+    [self.contentView addSubview:stateImageV];
+    [stateImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV);
+        make.size.mas_equalTo(CGSizeMake(60, 22));
+    }];
+  
+    UILabel *originatorL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:originatorL];
+    [originatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkNameL.mas_bottom).offset(4);
+        make.left.equalTo(checkNameL);
+        make.height.equalTo(@16);
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(originatorL);
+        make.left.equalTo(originatorL.mas_right).offset(8);
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    titleL.numberOfLines = 3;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeL.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    UIImageView *typeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"typebg"]];
+    [self.contentView addSubview:typeImageV];
+    [typeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL);
+        make.left.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(62, 22));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"设计问题" Color:[UIColor whiteColor] isBold:YES Font:12];
+    typeL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(typeImageV);
+    }];
+    UIView *leftView = [[UIView alloc] init];
+    [self.contentView addSubview:leftView];
+    UIView *stateBgV = [[UIView alloc] init];
+    stateBgV.backgroundColor = PBColor(0, 122, 255);
+    [self.contentView addSubview:stateBgV];
+    UILabel *stateL = [UILabel z_labelWithText:@"" Color:PBColor(0, 122, 255) isBold:YES Font:12];
+    stateL.numberOfLines = 0;
+    stateL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:stateL];
+    UIView *rightView = [[UIView alloc] init];
+    rightView.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:rightView];
+    
+    UIView *checkBgV = [[UIView alloc] init];
+    checkBgV.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:checkBgV];
+    UILabel *checkL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:14];
+    checkL.numberOfLines = 3;
+    [self.contentView addSubview:checkL];
+    [checkL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV).offset(15);
+        make.left.equalTo(checkBgV).offset(8);
+        make.right.equalTo(checkBgV).offset(-8);
+    }];
+    [checkBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(10);
+        make.left.equalTo(bgV).offset(50);
+        make.right.equalTo(bgV).offset(-10);
+        make.bottom.equalTo(checkL).offset(15);
+    }];
+    
+    [stateBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(checkBgV);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(checkBgV.mas_left);
+    }];
+    [stateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(stateBgV).offset(10);
+        make.bottom.equalTo(stateBgV).offset(-10);
+        make.left.right.equalTo(stateBgV);
+    }];
+    [leftView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(stateBgV);
+        make.width.equalTo(@10);
+    }];
+    [rightView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.equalTo(checkBgV);
+        make.width.equalTo(@10);
+    }];
+
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake((MainScreenWidth - (20 * 2) - 1) / 2, 184);
+    layout.minimumLineSpacing = 1.f;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.scrollEnabled = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV.mas_bottom).offset(10);
+        make.left.equalTo(self.contentView).offset(20);
+        make.right.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@184);
+    }];
+    UILabel *timeLimitL = [UILabel z_labelWithText:@"任务期限" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeLimitL];
+    [timeLimitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(52, 16));
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+    UILabel *limitL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:limitL];
+    [limitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeLimitL);
+        make.left.equalTo(timeLimitL.mas_right).offset(18);
+    }];
+    self.referredL = referredL;
+    self.checkNameL = checkNameL;
+    self.stateImageV = stateImageV;
+    self.originatorL = originatorL;
+    self.timeL = timeL;
+    self.titleL = titleL;
+    self.typeL = typeL;
+    self.stateBgV = stateBgV;
+    self.stateL = stateL;
+    self.checkL = checkL;
+    self.limitL = limitL;
+    self.checkBgV = checkBgV;
+    self.timeLimitL = timeLimitL;
+    self.leftView = leftView;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.examineListModel.FirstCheck_Attachments.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.examineListModel.FirstCheck_Attachments[indexPath.row];
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+    NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+    cell.roleType = PARTICIPANT;
+    cell.imageUrl = url;
+    return cell;
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    photoBrowser.imageCount = self.examineListModel.FirstCheck_Attachments.count;
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+}
+ 
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+    UIImage *image = [UIImage imageWithData:data];;
+    return image;
+}
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+    BOOL isChiness = [self IsChinese:examineListModel.bu_checker_RealName];
+    if (isChiness) {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringFromIndex:examineListModel.bu_checker_RealName.length - 1];
+    }else {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringToIndex:1];
+    }
+    self.checkNameL.text = examineListModel.bu_checker_RealName;
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+    }else if ([flagStr isEqualToString:@"C"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ acceptance"];
+    }else if ([flagStr isEqualToString:@"D"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ qualified"];
+    }else {
+        self.stateImageV.image = [UIImage imageNamed:@""];
+    }
+    self.originatorL.text = examineListModel.bu_examiner_name;
+    NSString *time = [examineListModel.CreateDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    self.timeL.text = [NSString stringWithFormat:@"于%@发起任务",time];
+    self.titleL.text = [NSString stringWithFormat:@"------- %@",examineListModel.ExamineRemark];
+    self.typeL.text = examineListModel.aedt_name;
+    NSRange range1 = [examineListModel.ExamineDate rangeOfString:@"T"];
+    NSRange range2 = [examineListModel.RectificateDate rangeOfString:@"T"];
+    NSString *start = [examineListModel.ExamineDate substringToIndex:range1.location];
+    NSString *end = [examineListModel.RectificateDate substringToIndex:range2.location];
+    self.limitL.text = [NSString stringWithFormat:@"%@ - %@",start, end];
+    if ([examineListModel.aede_severitylevel isEqualToString:@"一般"]) {
+        self.stateBgV.backgroundColor = PBColor(219, 232, 246);
+        self.leftView.backgroundColor = PBColor(219, 232, 246);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"严重"]) {
+        self.stateBgV.backgroundColor = PBColor(245, 232, 220);
+        self.leftView.backgroundColor = PBColor(245, 232, 220);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"非常严重"]) {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }else {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }
+    self.stateL.text = examineListModel.aede_severitylevel;
+    if (examineListModel.CacheRecordList.count > 0) {
+        self.checkL.text = [examineListModel.CacheRecordList[examineListModel.CacheRecordList.count - 1] valueForKey:@"RectificationRemark"];
+    }else {
+        self.checkL.text = @"内容错误";
+    }
+    [self.stateBgV circleViewWithRadius:6];
+    [self.checkBgV circleViewWithRadius:6];
+    [self.collectionView reloadData];
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.h
new file mode 100644
index 0000000..e6fa9a3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.h
@@ -0,0 +1,23 @@
+//
+//  PBExamineTableHeaderView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/29.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@interface PBExamineTableHeaderView : UIView
+@property (nonatomic, copy) void(^ChooseImageBlock)(void);
+@property (nonatomic, copy) void(^DeleteImageBlock)(NSInteger index);
+@property (nonatomic, copy) void(^DeleteVideoBlock)(void);
+@property (nonatomic, copy) void(^PlayVideoBlock)(void);
+@property (nonatomic, assign) BOOL isAddExamine;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSMutableArray *imageArr;
+@property (nonatomic, strong) NSMutableArray *videoArr;
+@property (nonatomic, strong) NSArray *detailsImageArr;
+@property (nonatomic, assign) RoleType roleType;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.m
new file mode 100644
index 0000000..71efeaa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBExamineTableHeaderView.m
@@ -0,0 +1,256 @@
+//
+//  PBExamineTableHeaderView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/11/29.
+//  Copyright © 2018 ProBIM. All rights reserved.
+//
+
+#import "PBExamineTableHeaderView.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBProjectModel.h"
+
+static NSString *cellID = @"cellID";
+@interface PBExamineTableHeaderView()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, strong) UIButton *photoBtn;
+@property (nonatomic, strong) UIPageControl *pageControl;
+//记录当前页码
+@property (nonatomic, assign) NSInteger currentPage;
+@property (nonatomic, weak) UIImageView *videoImageV;
+@property (nonatomic, weak) UIButton *playBtn;
+@property (nonatomic, weak) UIButton *deleteBtn;
+@end
+
+@implementation PBExamineTableHeaderView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *bgImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Examine_add_photo_bg"]];
+    [self addSubview:bgImageV];
+    [bgImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self);
+    }];
+    UIButton *uploadPhotoBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_upload_photo"]];
+    [uploadPhotoBtn addTarget:self action:@selector(uploadPhoto) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:uploadPhotoBtn];
+    [uploadPhotoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(self);
+    }];
+    [self addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self);
+    }];
+    self.collectionView.hidden = YES;
+    
+    UIButton *photoBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_camera"]];
+    [photoBtn addTarget:self action:@selector(uploadPhoto) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:photoBtn];
+    [photoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(self);
+        make.right.equalTo(self).offset(-10);
+    }];
+    photoBtn.hidden = YES;
+    UIPageControl *pageControl = [[UIPageControl alloc] init];
+    pageControl.numberOfPages = 5;
+    pageControl.currentPage = 3;
+    pageControl.pageIndicatorTintColor = [UIColor whiteColor];
+    pageControl.currentPageIndicatorTintColor = WarningColor;
+    pageControl.hidesForSinglePage = YES;
+    [self addSubview:pageControl];
+    [pageControl mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self);
+        make.bottom.equalTo(self).offset(-13);
+    }];
+    self.pageControl.currentPage = 0;
+    self.photoBtn = photoBtn;
+    self.pageControl = pageControl;
+    self.pageControl.hidden = YES;
+    
+    UIImageView *videoImageV = [[UIImageView alloc] init];
+    [self addSubview:videoImageV];
+    [videoImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self);
+    }];
+    UIButton *playBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"details_play"]];
+    [playBtn addTarget:self action:@selector(playVideo) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:playBtn];
+    [playBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(self);
+        make.size.mas_equalTo(CGSizeMake(92, 92));
+    }];
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Issue_image_delete"]];
+    [deleteBtn addTarget:self action:@selector(deleteVideo) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(5);
+        make.right.equalTo(self).offset(-5);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    self.videoImageV = videoImageV;
+    self.playBtn = playBtn;
+    self.deleteBtn = deleteBtn;
+    self.deleteBtn.hidden = YES;
+    self.playBtn.hidden = YES;
+    self.videoImageV.hidden = YES;
+}
+
+- (void)uploadPhoto {
+    if (self.ChooseImageBlock) {
+        self.ChooseImageBlock();
+    }
+}
+- (void)playVideo {
+    NSLog(@"开始播放");
+    if (self.PlayVideoBlock) {
+        self.PlayVideoBlock();
+    }
+}
+- (void)deleteVideo {
+    NSLog(@"删除视频");
+    if (self.DeleteVideoBlock) {
+        self.DeleteVideoBlock();
+    }
+}
+- (UICollectionView *)collectionView {
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+        layout.itemSize = CGSizeMake(self.width, self.height);
+        layout.minimumLineSpacing = 0;
+        layout.minimumInteritemSpacing = 0;
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+        [_collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+        _collectionView.pagingEnabled = YES;
+        _collectionView.bounces = NO;
+        _collectionView.showsHorizontalScrollIndicator = NO;
+        _collectionView.backgroundColor = [UIColor whiteColor];
+    }
+    return _collectionView;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    if (_isAddExamine) {
+       return self.imageArr.count;
+    }else {
+       return self.detailsImageArr.count;
+    }
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    cell.roleType = self.roleType;
+    cell.DeleteImageBlock = ^{
+        NSInteger count;
+        if (self.isAddExamine) {
+            count = self.imageArr.count - 1;
+        }else {
+            count = self.detailsImageArr.count - 1;
+        }
+        if (self.currentPage == (self.imageArr.count - 1) && self.currentPage != 0) {
+                --self.currentPage;
+        }
+        if (self.DeleteImageBlock) {
+            self.DeleteImageBlock(indexPath.row);
+        }
+    };
+    
+    if (_isAddExamine) {
+        cell.image = self.imageArr[indexPath.row];
+    }else {
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl, [self.detailsImageArr[indexPath.row] valueForKey:@"AttachmentUrl"]];
+        cell.imageUrl = url;
+    }
+    return cell;
+}
+
+#pragma mark - UICollectionViewDelegate
+ - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    self.currentPage = scrollView.contentOffset.x / self.width;
+    self.pageControl.currentPage = self.currentPage;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    if (self.isAddExamine) {
+        photoBrowser.imageCount = self.imageArr.count;
+    }else {
+        photoBrowser.imageCount = self.detailsImageArr.count;
+    }
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+}
+
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    return cell.imageV.image;
+}
+
+
+- (void)setImageArr:(NSMutableArray *)imageArr {
+    _imageArr = imageArr;
+    self.videoImageV.hidden = YES;
+    self.playBtn.hidden = YES;
+    self.deleteBtn.hidden = YES;
+    [self setPageControl];
+}
+- (void)setVideoArr:(NSMutableArray *)videoArr {
+    _videoArr = videoArr;
+    self.videoImageV.hidden = NO;
+    self.playBtn.hidden = NO;
+    self.deleteBtn.hidden = NO;
+    LFResultVideo *result = videoArr[0];
+    self.videoImageV.image = result.coverImage;
+}
+
+- (void)setPageControl {
+    NSArray *arr;
+    if (_isAddExamine) {
+        arr = self.imageArr;
+    }else {
+        arr = self.detailsImageArr;
+    }
+    if (arr.count != 0) {
+        self.collectionView.hidden = NO;
+        self.photoBtn.hidden = NO;
+        self.pageControl.hidden = NO;
+        if (self.isAddExamine) {
+            self.pageControl.numberOfPages = self.imageArr.count;
+        }else {
+            self.pageControl.numberOfPages = self.detailsImageArr.count;
+        }
+        self.pageControl.currentPage = self.currentPage;
+        [self.collectionView reloadData];
+    }else {
+        self.photoBtn.hidden = YES;
+        self.collectionView.hidden = YES;
+        self.pageControl.hidden = YES;
+        [self.collectionView reloadData];
+    }
+}
+- (void)setDetailsImageArr:(NSArray *)detailsImageArr {
+    _detailsImageArr = detailsImageArr;
+    [self setPageControl];
+}
+- (void)setIsAddExamine:(BOOL)isAddExamine {
+    _isAddExamine = isAddExamine;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setRoleType:(RoleType)roleType {
+    _roleType = roleType;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.h
new file mode 100644
index 0000000..5bd0f34
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBRecordImageTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/29.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBRecordModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRecordImageTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBRecordModel *recordModel;
+@property (nonatomic, copy) void(^PlayVideoBlock)(NSString *videoUrl);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.m
new file mode 100644
index 0000000..bb95e48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordImageTableViewCell.m
@@ -0,0 +1,169 @@
+//
+//  PBRecordImageTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/12/29.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBRecordImageTableViewCell.h"
+#import "PBRecordModel.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBVideoCollectionViewCell.h"
+static NSString *const ImageCellID = @"ImageCellID";
+static NSString *const VideoCellID = @"VideoCellID";
+@interface PBRecordImageTableViewCell()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, weak) UILabel *timeL;
+@end
+@implementation PBRecordImageTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.contentView);
+    }];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(80, 80);
+    layout.minimumLineSpacing = 10;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    [self.collectionView registerClass:[PBVideoCollectionViewCell class] forCellWithReuseIdentifier:VideoCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.scrollEnabled = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.height.equalTo(@80);
+    }];
+//    [self.collectionView circleViewWithRadius:6];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom).offset(10);
+        make.left.equalTo(bgV).offset(10);
+        make.height.equalTo(@16);
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+    self.timeL = timeL;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.recordModel.Attachments.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.recordModel.Attachments[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        PBVideoCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:VideoCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.videoUrl = url;
+        cell.PlayVideoBlock = ^{
+            if (self.PlayVideoBlock) {
+                self.PlayVideoBlock(url);
+            }
+        };
+        return cell;
+    }else {
+        PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+        NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[dict valueForKey:@"AttachmentUrl"]];
+        cell.roleType = PARTICIPANT;
+        if (self.recordModel.Attachments.count > 3 & indexPath.item == 2) {
+            cell.countStr = [NSString stringWithFormat:@"%zd", self.recordModel.Attachments.count];
+        }else {
+            cell.countStr = nil;
+        }
+        cell.imageUrl = url;
+        return cell;
+    }
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.recordModel.Attachments[indexPath.row];
+    if ([[dict valueForKey:@"AttachmentType"] isEqualToString:@".mp4"]) {
+        if (self.PlayVideoBlock) {
+            self.PlayVideoBlock([NSString stringWithFormat:@"%@%@",BaseUrl, [dict valueForKey:@"AttachmentUrl"]]);
+        }
+    }else {
+        SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+        photoBrowser.delegate = self;
+        photoBrowser.currentImageIndex = indexPath.item;
+        photoBrowser.imageCount = self.recordModel.Attachments.count;
+        photoBrowser.sourceImagesContainerView = self.collectionView;
+        [photoBrowser show];
+    }
+}
+ 
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+    UIImage *image = [UIImage imageWithData:data];;
+    return image;
+}
+
+- (void)setRecordModel:(PBRecordModel *)recordModel {
+    _recordModel = recordModel;
+    self.timeL.text = [recordModel.CreateDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(1, 1);
+    layout.minimumLineSpacing = 0;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    
+    CGFloat height;
+    NSInteger count = recordModel.Attachments.count;
+    if (count <= 0) {
+        height = 0.f;
+    }else if (count == 1) {
+        height = 184.f;
+        layout.itemSize = CGSizeMake(MainScreenWidth - 20 * 2, 184);
+        layout.minimumLineSpacing = 0.f;
+    }else if (count == 2) {
+        height = 184.f;
+        layout.itemSize = CGSizeMake((MainScreenWidth - (20 * 2) - 1) / 2, 184);
+        layout.minimumLineSpacing = 1.f;
+    }else {
+        height = 92.f;
+        layout.itemSize = CGSizeMake((MainScreenWidth - (20 + 3) * 2) / 3, 92);
+        layout.minimumLineSpacing = 3.f;
+    }
+    
+    [self.collectionView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@(height));
+    }];
+    if (count > 0) {
+        [self.collectionView setCollectionViewLayout:layout animated:NO];
+    }
+    [self.collectionView reloadData];
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.h
new file mode 100644
index 0000000..0494aac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBRecordTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/31.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBRecordModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRecordTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBRecordModel *recordModel;
+@property (nonatomic, copy) void(^PlayVideoBlock)(NSString *videoUrl);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.m
new file mode 100644
index 0000000..165ac98
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBRecordTableViewCell.m
@@ -0,0 +1,152 @@
+//
+//  PBRecordTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/31.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBRecordTableViewCell.h"
+#import "PBRecordModel.h"
+@interface PBRecordTableViewCell()
+@property (nonatomic, weak) UILabel *referredL;
+@property (nonatomic, weak) UILabel *checkNameL;
+@property (nonatomic, weak) UILabel *contentL;
+@property (nonatomic, weak) UIImageView *stateImageV;
+@property (nonatomic, weak) UIView *topView;
+@property (nonatomic, weak) UIView *contentbgV;
+@end
+
+@implementation PBRecordTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *topView = [[UIView alloc] init];
+    topView.backgroundColor = [UIColor blackColor];
+    [self.contentView addSubview:topView];
+    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.contentView);
+        make.height.equalTo(@16);
+    }];
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.right.equalTo(self.contentView);
+        make.bottom.equalTo(self.contentView);
+    }];
+//    [bgV circleViewWithRadius:6];
+    UIView *portraitImageV = [[UIView alloc] init];
+    portraitImageV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:portraitImageV];
+    [portraitImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(30, 30));
+    }];
+    [portraitImageV circleViewWithRadius:15];
+
+    UILabel *referredL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:16];
+    referredL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:referredL];
+    [referredL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.right.equalTo(portraitImageV);
+    }];
+    UILabel *checkNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:checkNameL];
+    [checkNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.equalTo(portraitImageV.mas_right).offset(8);
+        make.right.equalTo(bgV).offset(-70);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *stateImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rectify_ qualified"]];
+    [self.contentView addSubview:stateImageV];
+    [stateImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(12);
+        make.right.equalTo(bgV);
+        make.size.mas_equalTo(CGSizeMake(60, 22));
+    }];
+    UIView *contentbgV = [[UIView alloc] init];
+    contentbgV.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:contentbgV];
+    UILabel *contentL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:14];
+    contentL.numberOfLines = 0;
+    [self.contentView addSubview:contentL];
+    
+    [contentL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV.mas_bottom).offset(25);
+        make.left.equalTo(bgV).offset(25);
+        make.right.equalTo(bgV).offset(-25);
+        make.bottom.equalTo(bgV).offset(-15);
+    }];
+    [contentbgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV.mas_bottom).offset(10);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+        make.bottom.equalTo(contentL.mas_bottom).offset(15);
+    }];
+//    [contentbgV circleViewWithRadius:6];
+    self.topView = topView;
+    self.referredL = referredL;
+    self.checkNameL = checkNameL;
+    self.contentL = contentL;
+    self.stateImageV = stateImageV;
+    self.contentbgV = contentbgV;
+}
+
+- (void)setRecordModel:(PBRecordModel *)recordModel {
+    _recordModel = recordModel;
+    if (recordModel.isOneIndex) {
+        self.topView.backgroundColor = [UIColor blackColor];
+    }else {
+        self.topView.backgroundColor = PBColor(244, 245, 246);
+    }
+    BOOL isChiness = [self IsChinese:recordModel.RectificationOperator];
+    if (isChiness) {
+        self.referredL.text = [recordModel.RectificationOperator substringFromIndex:recordModel.RectificationOperator.length - 1];
+    }else {
+        self.referredL.text = [recordModel.RectificationOperator substringToIndex:1];
+    }
+    if ([recordModel.indexFlag isEqualToString:@"0"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ check"];
+        self.checkNameL.text = [NSString stringWithFormat:@"%@ 创建了任务", recordModel.RectificationOperator];
+    }else if ([recordModel.indexFlag isEqualToString:@"1"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+        self.checkNameL.text = [NSString stringWithFormat:@"%@ 检查了任务", recordModel.RectificationOperator];
+    }else if ([recordModel.RectificationOperateFlag isEqualToString:@"1"]) {
+        self.checkNameL.text = [NSString stringWithFormat:@"%@ 进行了验收", recordModel.RectificationOperator];
+        if([recordModel.RectificationCheckResult isEqualToString:@"合格"]) {
+            self.stateImageV.image = [UIImage imageNamed:@"Rectify_ qualified"];
+        }else {
+            self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+        }
+    }else if ([recordModel.RectificationOperateFlag isEqualToString:@"2"]){
+        self.checkNameL.text = [NSString stringWithFormat:@"%@ 申请复检", recordModel.RectificationOperator];
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ acceptance"];
+    }else {
+        self.checkNameL.text = @"";
+        self.stateImageV.image = [UIImage imageNamed:@""];
+    }
+    self.contentL.text = recordModel.RectificationRemark;
+    [self.contentbgV circleViewWithRadius:6];
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.h
new file mode 100644
index 0000000..cb7a741
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.h
@@ -0,0 +1,17 @@
+//
+//  PBScreeningCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/15.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScreeningCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.m
new file mode 100644
index 0000000..9d9bcc6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningCell.m
@@ -0,0 +1,39 @@
+//
+//  PBScreeningCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/15.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBScreeningCell.h"
+
+@implementation PBScreeningCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = [UIColor greenColor];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(22);
+        make.left.equalTo(self.contentView).offset(15);
+    }];
+ 
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.h
new file mode 100644
index 0000000..ba01e45
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.h
@@ -0,0 +1,18 @@
+//
+//  PBScreeningView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/7.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@protocol ExamineMenuViewDelegate <NSObject>
+- (void)RightMenuViewClick:(NSInteger)tag;
+@end
+@interface PBScreeningView : UIView
+@property (nonatomic ,weak) id <ExamineMenuViewDelegate> customDelegate;
+@property (nonatomic, strong) NSArray *typeArr;
+@property (nonatomic, copy) void (^determineBlock)(NSString *related_guid, NSString *level_guid, NSString *state_guid, NSString *type_guid);
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.m
new file mode 100644
index 0000000..3f94c27
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBScreeningView.m
@@ -0,0 +1,522 @@
+//
+//  PBScreeningView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/7.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBScreeningView.h"
+#import "PBIssueNavModel.h"
+static NSString *const CellID = @"CellID";
+@interface PBScreeningView ()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *relatedArr;
+@property (nonatomic, strong) NSArray *levelArr;
+@property (nonatomic, strong) NSArray *stateArr;
+
+@property (nonatomic, strong) NSMutableArray *relatedBtnArr;
+@property (nonatomic, strong) NSMutableArray *levelBtnArr;
+@property (nonatomic, strong) NSMutableArray *stateBtnArr;
+@property (nonatomic, strong) NSMutableArray *typeBtnArr;
+
+@property (nonatomic, assign) NSInteger relatedIndex;
+@property (nonatomic, assign) NSInteger levelIndex;
+@property (nonatomic, assign) NSInteger stateIndex;
+@property (nonatomic, assign) NSInteger typeIndex;
+
+@end
+@implementation PBScreeningView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 200.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
+    [self addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self);
+        make.bottom.equalTo(self).offset(-70);
+    }];
+    
+    UIButton *resetBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"resetBtn"]];
+    [resetBtn addTarget:self action:@selector(resetAction) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:resetBtn];
+    [resetBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(10);
+        make.left.equalTo(self).offset(9);
+        make.size.mas_equalTo(CGSizeMake(116, 50));
+    }];
+    UIButton *confirmBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"confirmBtn"]];
+    [confirmBtn addTarget:self action:@selector(confirmAction) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:confirmBtn];
+    [confirmBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(10);
+        make.left.equalTo(resetBtn.mas_right);
+        make.size.mas_equalTo(CGSizeMake(166, 50));
+    }];
+}
+- (void)resetAction {
+    self.relatedIndex = 0;
+    self.levelIndex = 0;
+    self.stateIndex = 0;
+    self.typeIndex = 0;
+    [self setBtnSelectState];
+}
+- (void)confirmAction {
+    for (NSInteger i = 0; i < self.relatedBtnArr.count; i++) {
+        UIButton *btn = self.relatedBtnArr[i];
+        if (btn.selected) {
+            self.relatedIndex = i;
+        }
+    }
+    PBIssueNavModel *issueNavModel = self.relatedArr[self.relatedIndex];
+    NSLog(@"%@",issueNavModel.ItemName);
+    
+    for (NSInteger i = 0; i < self.levelBtnArr.count; i++) {
+        UIButton *btn = self.levelBtnArr[i];
+        if (btn.selected) {
+            self.levelIndex = i;
+        }
+    }
+    PBIssueNavModel *issueNavModel1 = self.levelArr[self.levelIndex];
+    NSLog(@"%@",issueNavModel1.ItemName);
+    
+    for (NSInteger i = 0; i < self.stateBtnArr.count; i++) {
+        UIButton *btn = self.stateBtnArr[i];
+        if (btn.selected) {
+            self.stateIndex = i;
+        }
+    }
+    PBIssueNavModel *issueNavModel2 = self.stateArr[self.stateIndex];
+    NSLog(@"%@",issueNavModel2.ItemName);
+    
+    for (NSInteger i = 0; i < self.typeBtnArr.count; i++) {
+        UIButton *btn = self.typeBtnArr[i];
+        if (btn.selected) {
+            self.typeIndex = i;
+        }
+    }
+    PBIssueNavModel *issueNavModel3 = self.typeArr[self.typeIndex];
+    NSLog(@"%@",issueNavModel3.ItemName);
+    if (self.determineBlock) {
+        self.determineBlock(issueNavModel.ItemDetailId, issueNavModel1.ItemDetailId, issueNavModel2.ItemDetailId, issueNavModel3.ItemDetailId);
+    }
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 0;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    return cell;
+}
+- (UIView *)setupHeaderView {
+    CGFloat bgVH = 450 + self.typeArr.count * (32 + 8);
+    UIView *bgV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.width, bgVH)];
+    bgV.backgroundColor = [UIColor whiteColor];
+    UILabel *titleL = [UILabel z_labelWithText:@"显示相关数据" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [bgV addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(17);
+        make.left.equalTo(bgV).offset(15);
+        make.height.equalTo(@16);
+    }];
+    CGFloat btnW = 62.f;
+    CGFloat margin = 15.f;
+    CGFloat spacing = (self.width - (btnW * (self.relatedArr.count - 1)) - (2 * margin)) / (self.relatedArr.count - 1 - 1);
+    for (NSInteger i = 0; i < self.relatedArr.count; i++) {
+        PBIssueNavModel *obj = self.relatedArr[i];
+        UIButton *btn = [[UIButton alloc] init];
+        btn.tag = 100 + i;
+        [btn addTarget:self action:@selector(relatedSelecd:) forControlEvents:UIControlEventTouchUpInside];
+        [btn setTitle:obj.ItemName forState:UIControlStateNormal];
+        [btn setTitleColor:PBColor(40, 58, 79) forState:UIControlStateNormal];
+        btn.titleLabel.font = [UIFont systemFontOfSize:13];
+        [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg"] forState:UIControlStateNormal];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg_select"] forState:UIControlStateSelected];
+        [bgV addSubview:btn];
+        CGFloat topH;
+        CGFloat leftSpacing;
+        if (i == 0) {
+            topH = 19;
+            leftSpacing = margin;
+        }else {
+            topH = 59;
+            leftSpacing = margin + (spacing * (i - 1)) + (btnW * (i - 1));
+        }
+        [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(titleL.mas_bottom).offset(topH);
+            make.left.equalTo(bgV).offset(leftSpacing);
+            make.size.mas_equalTo(CGSizeMake(62, 32));
+        }];
+        [self.relatedBtnArr addObject:btn];
+    }
+    
+    
+    UILabel *levelTitleL = [UILabel z_labelWithText:@"严重等级" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [bgV addSubview:levelTitleL];
+    [levelTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(130);
+        make.left.equalTo(bgV).offset(15);
+        make.height.equalTo(@16);
+    }];
+    CGFloat levelBtnW = 62.f;
+    CGFloat levelMargin = 15.f;
+    CGFloat levelSpacing = (self.width - (levelBtnW * self.levelArr.count) - (2 * levelMargin)) / (self.levelArr.count - 1);
+    for (NSInteger i = 0; i < self.levelArr.count; i++) {
+        PBIssueNavModel *obj = self.levelArr[i];
+        UIButton *btn = [[UIButton alloc] init];
+        btn.tag = 200 + i;
+        [btn addTarget:self action:@selector(levelSelecd:) forControlEvents:UIControlEventTouchUpInside];
+        [btn setTitle:obj.ItemName forState:UIControlStateNormal];
+        [btn setTitleColor:PBColor(40, 58, 79) forState:UIControlStateNormal];
+        btn.titleLabel.font = [UIFont systemFontOfSize:13];
+        [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg"] forState:UIControlStateNormal];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg_select"] forState:UIControlStateSelected];
+        [bgV addSubview:btn];
+        CGFloat leftSpacing = levelMargin + (levelSpacing * i) + (levelBtnW * i);
+        [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(levelTitleL.mas_bottom).offset(19);
+            make.left.equalTo(bgV).offset(leftSpacing);
+            make.size.mas_equalTo(CGSizeMake(62, 32));
+        }];
+        [self.levelBtnArr addObject:btn];
+    }
+    
+    
+    UILabel *stateTitleL = [UILabel z_labelWithText:@"状态" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [bgV addSubview:stateTitleL];
+    [stateTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(levelTitleL.mas_bottom).offset(90);
+        make.left.equalTo(bgV).offset(15);
+        make.height.equalTo(@16);
+    }];
+    CGFloat stateBtnW = 62.f;
+    CGFloat stateMargin = 15.f;
+    CGFloat stateSpacing = (self.width - (stateBtnW * 4) - (2 * stateMargin)) / 3;
+    for (NSInteger i = 0; i < self.stateArr.count; i++) {
+        PBIssueNavModel *obj = self.stateArr[i];
+        UIButton *btn = [[UIButton alloc] init];
+        btn.tag = 300 + i;
+        [btn addTarget:self action:@selector(stateSelecd:) forControlEvents:UIControlEventTouchUpInside];
+        [btn setTitle:obj.ItemName forState:UIControlStateNormal];
+        [btn setTitleColor:PBColor(40, 58, 79) forState:UIControlStateNormal];
+        btn.titleLabel.font = [UIFont systemFontOfSize:13];
+        [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg"] forState:UIControlStateNormal];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg_select"] forState:UIControlStateSelected];
+        [bgV addSubview:btn];
+        CGFloat topH;
+        CGFloat leftSpacing;
+        if (i == 0) {
+            topH = 19;
+            leftSpacing = stateMargin;
+        }else if (i == 1) {
+            topH = 19;
+            leftSpacing = stateMargin + (stateSpacing * i) + (stateBtnW * i);
+        }else {
+            topH = 59;
+            leftSpacing = stateMargin + (stateSpacing * (i - 2)) + (stateBtnW * (i - 2));
+        }
+        [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(stateTitleL.mas_bottom).offset(topH);
+            make.left.equalTo(bgV).offset(leftSpacing);
+            make.size.mas_equalTo(CGSizeMake(62, 32));
+        }];
+        [self.stateBtnArr addObject:btn];
+    }
+    UILabel *typeTitleL = [UILabel z_labelWithText:@"类型" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [bgV addSubview:typeTitleL];
+    [typeTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(stateTitleL.mas_bottom).offset(130);
+        make.left.equalTo(bgV).offset(15);
+        make.height.equalTo(@16);
+    }];
+    CGFloat typeBtnW = 190.f;
+    CGFloat typeBtnH = 32.f;
+    CGFloat typeTop = 19.f;
+    CGFloat typeSpacing = 8.f;
+    for (NSInteger i = 0; i < self.typeArr.count; i++) {
+        PBIssueNavModel *obj = self.typeArr[i];
+        UIButton *btn = [[UIButton alloc] init];
+        btn.tag = 400 + i;
+        [btn addTarget:self action:@selector(typeSelecd:) forControlEvents:UIControlEventTouchUpInside];
+        [btn setTitle:obj.ItemName forState:UIControlStateNormal];
+        [btn setTitleColor:PBColor(40, 58, 79) forState:UIControlStateNormal];
+        btn.titleLabel.font = [UIFont systemFontOfSize:13];
+        [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg"] forState:UIControlStateNormal];
+        [btn setBackgroundImage:[UIImage imageNamed:@"btn_bg_select"] forState:UIControlStateSelected];
+        [bgV addSubview:btn];
+        CGFloat topH = typeTop + (typeSpacing * i) + (typeBtnH * i);
+        [btn mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(typeTitleL.mas_bottom).offset(topH);
+            make.left.equalTo(bgV).offset(15);
+            make.size.mas_equalTo(CGSizeMake(typeBtnW, typeBtnH));
+        }];
+        [self.typeBtnArr addObject:btn];
+    }
+    return bgV;
+}
+- (void)setBtnSelectState {
+    for (NSInteger i = 0 ; i < self.relatedBtnArr.count; i++) {
+        UIButton *btn = self.relatedBtnArr[i];
+        if (i == self.relatedIndex) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+    for (NSInteger i = 0 ; i < self.levelBtnArr.count; i++) {
+        UIButton *btn = self.levelBtnArr[i];
+        if (i == self.levelIndex) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+    for (NSInteger i = 0 ; i < self.stateBtnArr.count; i++) {
+        UIButton *btn = self.stateBtnArr[i];
+        if (i == self.stateIndex) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+    for (NSInteger i = 0 ; i < self.typeBtnArr.count; i++) {
+        UIButton *btn = self.typeBtnArr[i];
+        if (i == self.typeIndex) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+}
+- (void)relatedSelecd:(UIButton *)btn {
+    NSInteger flag = btn.tag - 100;
+    for (NSInteger i = 0; i < self.relatedBtnArr.count; i++) {
+        UIButton *btn = self.relatedBtnArr[i];
+        if (i == flag) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+}
+- (void)levelSelecd:(UIButton *)btn {
+    NSInteger flag = btn.tag - 200;
+    for (NSInteger i = 0; i < self.levelBtnArr.count; i++) {
+        UIButton *btn = self.levelBtnArr[i];
+        if (i == flag) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+}
+- (void)stateSelecd:(UIButton *)btn {
+    NSInteger flag = btn.tag - 300;
+    for (NSInteger i = 0; i < self.stateBtnArr.count; i++) {
+        UIButton *btn = self.stateBtnArr[i];
+        if (i == flag) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+}
+- (void)typeSelecd:(UIButton *)btn {
+    NSInteger flag = btn.tag - 400;
+    for (NSInteger i = 0; i < self.typeBtnArr.count; i++) {
+        UIButton *btn = self.typeBtnArr[i];
+        if (i == flag) {
+            btn.selected = YES;
+        }else {
+            btn.selected = NO;
+        }
+    }
+}
+
+
+
+- (NSArray *)relatedArr {
+    if (_relatedArr == nil) {
+        PBIssueNavModel *issueNavModel9 = [[PBIssueNavModel alloc] init];
+        issueNavModel9.ItemDetailId = @"";
+        issueNavModel9.ItemName = @"全部";
+        PBIssueNavModel *issueNavModel13 = [[PBIssueNavModel alloc] init];
+        issueNavModel13.ItemDetailId = @"AsLauncher";
+        issueNavModel13.ItemName = @"我发起";
+        PBIssueNavModel *issueNavModel10 = [[PBIssueNavModel alloc] init];
+        issueNavModel10.ItemDetailId = @"AsChecker";
+        issueNavModel10.ItemName = @"我检查";
+        PBIssueNavModel *issueNavModel11 = [[PBIssueNavModel alloc] init];
+        issueNavModel11.ItemDetailId = @"AsRectifier";
+        issueNavModel11.ItemName = @"我整改";
+        PBIssueNavModel *issueNavModel12 = [[PBIssueNavModel alloc] init];
+        issueNavModel12.ItemDetailId = @"AsRechecker";
+        issueNavModel12.ItemName = @"我验收";
+        _relatedArr = @[issueNavModel9, issueNavModel13, issueNavModel10, issueNavModel11, issueNavModel12];
+    }
+    return _relatedArr;
+}
+- (NSArray *)levelArr {
+    if (_levelArr == nil) {
+        PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+        issueNavModel.ItemDetailId = @"";
+        issueNavModel.ItemName = @"全部";
+        
+        PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+        issueNavModel1.ItemDetailId = @"非常严重";
+        issueNavModel1.ItemName = @"非常严重";
+        
+        PBIssueNavModel *issueNavModel2 = [[PBIssueNavModel alloc] init];
+        issueNavModel2.ItemDetailId = @"严重";
+        issueNavModel2.ItemName = @"严重";
+        
+        PBIssueNavModel *issueNavModel3 = [[PBIssueNavModel alloc] init];
+        issueNavModel3.ItemDetailId = @"一般";
+        issueNavModel3.ItemName = @"一般";
+        _levelArr = @[issueNavModel, issueNavModel3, issueNavModel2, issueNavModel1];
+    }
+    return _levelArr;
+}
+- (NSArray *)stateArr {
+    if (_stateArr == nil) {
+        PBIssueNavModel *issueNavModel4 = [[PBIssueNavModel alloc] init];
+        issueNavModel4.ItemDetailId = @"";
+        issueNavModel4.ItemName = @"全部";
+        
+        PBIssueNavModel *issueNavModel5 = [[PBIssueNavModel alloc] init];
+        issueNavModel5.ItemDetailId = @"E_Closed";
+        issueNavModel5.ItemName = @"已关闭";
+        
+        PBIssueNavModel *issueNavModel6 = [[PBIssueNavModel alloc] init];
+        issueNavModel6.ItemDetailId = @"A_ToBeCheck";
+        issueNavModel6.ItemName = @"待检查";
+        
+        PBIssueNavModel *issueNavModel7 = [[PBIssueNavModel alloc] init];
+        issueNavModel7.ItemDetailId = @"B_ToBeRectified";
+        issueNavModel7.ItemName = @"待整改";
+        
+        PBIssueNavModel *issueNavModel8 = [[PBIssueNavModel alloc] init];
+        issueNavModel8.ItemDetailId = @"C_ToBeRecheck";
+        issueNavModel8.ItemName = @"待验收";
+        
+        PBIssueNavModel *issueNavModel9 = [[PBIssueNavModel alloc] init];
+        issueNavModel9.ItemDetailId = @"D_Qualified";
+        issueNavModel9.ItemName = @"已合格";
+        _stateArr = @[issueNavModel4, issueNavModel5, issueNavModel6, issueNavModel7, issueNavModel8, issueNavModel9];
+    }
+    return _stateArr;
+}
+- (void)setTypeArr:(NSArray *)typeArr {
+    _typeArr = typeArr;
+    self.tableView.tableHeaderView = [self setupHeaderView];
+    [self setBtnSelectState];
+}
+- (NSMutableArray *)relatedBtnArr {
+    if (_relatedBtnArr == nil) {
+        _relatedBtnArr = [[NSMutableArray alloc] init];
+    }
+    return _relatedBtnArr;
+}
+- (NSMutableArray *)levelBtnArr {
+    if (_levelBtnArr == nil) {
+        _levelBtnArr = [[NSMutableArray alloc] init];
+    }
+    return _levelBtnArr;
+}
+- (NSMutableArray *)stateBtnArr {
+    if (_stateBtnArr == nil) {
+        _stateBtnArr = [[NSMutableArray alloc] init];
+    }
+    return _stateBtnArr;
+}
+- (NSMutableArray *)typeBtnArr {
+    if (_typeBtnArr == nil) {
+        _typeBtnArr = [[NSMutableArray alloc] init];
+    }
+    return _typeBtnArr;
+}
+/**
+  PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+  issueNavModel.ItemDetailId = @"";
+  issueNavModel.ItemName = @"等级";
+  
+  PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+  issueNavModel1.ItemDetailId = @"非常严重";
+  issueNavModel1.ItemName = @"非常严重";
+  
+  PBIssueNavModel *issueNavModel2 = [[PBIssueNavModel alloc] init];
+  issueNavModel2.ItemDetailId = @"严重";
+  issueNavModel2.ItemName = @"严重";
+  
+  PBIssueNavModel *issueNavModel3 = [[PBIssueNavModel alloc] init];
+  issueNavModel3.ItemDetailId = @"一般";
+  issueNavModel3.ItemName = @"一般";
+  NSArray *typeArr = @[issueNavModel, issueNavModel1, issueNavModel2, issueNavModel3];
+  
+  PBIssueNavModel *issueNavMode4 = [[PBIssueNavModel alloc] init];
+  issueNavMode4.ItemDetailId = @"";
+  issueNavMode4.ItemName = @"状态";
+  
+  PBIssueNavModel *issueNavModel5 = [[PBIssueNavModel alloc] init];
+  issueNavModel5.ItemDetailId = @"A_ToBeCheck";
+  issueNavModel5.ItemName = @"待检查";
+  
+  PBIssueNavModel *issueNavModel6 = [[PBIssueNavModel alloc] init];
+  issueNavModel6.ItemDetailId = @"B_ToBeRectified";
+  issueNavModel6.ItemName = @"待整改";
+  PBIssueNavModel *issueNavModel7 = [[PBIssueNavModel alloc] init];
+  issueNavModel7.ItemDetailId = @"C_ToBeRecheck";
+  issueNavModel7.ItemName = @"待验收";
+  PBIssueNavModel *issueNavModel8 = [[PBIssueNavModel alloc] init];
+  issueNavModel8.ItemDetailId = @"D_Qualified";
+  issueNavModel8.ItemName = @"已合格";
+  NSArray *stateArr = @[issueNavMode4, issueNavModel5, issueNavModel6, issueNavModel7, issueNavModel8];
+ 
+  PBIssueNavModel *issueNavModel9 = [[PBIssueNavModel alloc] init];
+  issueNavModel9.ItemDetailId = @"";
+  issueNavModel9.ItemName = @"相关";
+  PBIssueNavModel *issueNavModel10 = [[PBIssueNavModel alloc] init];
+  issueNavModel10.ItemDetailId = @"AsChecker";
+  issueNavModel10.ItemName = @"我检查";
+  PBIssueNavModel *issueNavModel11 = [[PBIssueNavModel alloc] init];
+  issueNavModel11.ItemDetailId = @"AsRectifier";
+  issueNavModel11.ItemName = @"我整改";
+  PBIssueNavModel *issueNavModel12 = [[PBIssueNavModel alloc] init];
+  issueNavModel12.ItemDetailId = @"AsRechecker";
+  issueNavModel12.ItemName = @"我验收";
+  NSArray *relatedArr = @[issueNavModel9, issueNavModel10, issueNavModel11, issueNavModel12];
+ */
+
+
+
+//if ([self.customDelegate respondsToSelector:@selector(LeftMenuViewClick:)]) {
+//    [self.customDelegate LeftMenuViewClick:indexPath.row];
+//}
+
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.h
new file mode 100644
index 0000000..ea6a875
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.h
@@ -0,0 +1,17 @@
+//
+//  PBSelectArtifactsCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/14.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBArtifactsInfoModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSelectArtifactsCell : UITableViewCell
+@property (nonatomic, strong) PBArtifactsInfoModel *artifactsInfoModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.m
new file mode 100644
index 0000000..ed5810d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectArtifactsCell.m
@@ -0,0 +1,70 @@
+//
+//  PBSelectArtifactsCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/14.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBSelectArtifactsCell.h"
+#import "PBArtifactsInfoModel.h"
+@interface PBSelectArtifactsCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *nameL;
+@end
+@implementation PBSelectArtifactsCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"batch"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.bottom.equalTo(self.contentView);
+        make.left.equalTo(self.contentView).offset(15);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(10);
+        make.right.equalTo(self.contentView).offset(-135);
+        make.height.equalTo(@20);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    nameL.textAlignment = NSTextAlignmentRight;
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.left.equalTo(titleL.mas_right).offset(5);
+        make.right.equalTo(self.contentView).offset(-35);
+        make.height.equalTo(@20);
+    }];
+    self.titleL = titleL;
+    self.nameL = nameL;
+}
+
+- (void)setArtifactsInfoModel:(PBArtifactsInfoModel *)artifactsInfoModel {
+    _artifactsInfoModel = artifactsInfoModel;
+    self.titleL.text = artifactsInfoModel.bm_materialcode;
+    self.nameL.text = artifactsInfoModel.bm_materialname;
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.h
new file mode 100644
index 0000000..573b82d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.h
@@ -0,0 +1,17 @@
+//
+//  PBSelectArtifactsCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/14.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBETaskInfoModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSelectTaskCell : UITableViewCell
+@property (nonatomic, strong) PBETaskInfoModel *taskInfoModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.m
new file mode 100644
index 0000000..3febf45
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBSelectTaskCell.m
@@ -0,0 +1,61 @@
+//
+//  PBSelectArtifactsCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/1/14.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBSelectTaskCell.h"
+#import "PBETaskInfoModel.h"
+@interface PBSelectTaskCell()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *nameL;
+@end
+@implementation PBSelectTaskCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"task_list"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+//        make.bottom.equalTo(self.contentView);
+        make.left.equalTo(self.contentView).offset(15);
+        make.size.mas_equalTo(CGSizeMake(30, 30));
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(10);
+        make.right.equalTo(self.contentView).offset(-30);
+        make.height.equalTo(@20);
+    }];
+   
+    self.titleL = titleL;
+}
+
+- (void)setTaskInfoModel:(PBETaskInfoModel *)taskInfoModel {
+    _taskInfoModel = taskInfoModel;
+    self.titleL.text = taskInfoModel.NAME_;
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.h
new file mode 100644
index 0000000..301a49c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBVideoListTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/3.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBExamineListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBVideoListTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBExamineListModel *examineListModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.m
new file mode 100644
index 0000000..6d7aa13
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/PBVideoListTableViewCell.m
@@ -0,0 +1,272 @@
+//
+//  PBVideoListTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/3.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBVideoListTableViewCell.h"
+#import "PBExamineListModel.h"
+@interface PBVideoListTableViewCell()
+@property (nonatomic, weak) UILabel *referredL;//检查人 简称
+@property (nonatomic, weak) UILabel *checkNameL;//检查人
+@property (nonatomic, weak) UIImageView *stateImageV;//状态
+@property (nonatomic, weak) UILabel *originatorL;//发起人
+@property (nonatomic, weak) UILabel *timeL;//发起时间
+@property (nonatomic, weak) UILabel *titleL;//标题
+@property (nonatomic, weak) UILabel *typeL;//类型
+@property (nonatomic, weak) UIView *stateBgV;//级别背景
+@property (nonatomic, weak) UILabel *stateL;//级别
+@property (nonatomic, weak) UILabel *checkL;//检查内容
+@property (nonatomic, weak) UILabel *limitL;//期限
+@property (nonatomic, weak) UIView *checkBgV;
+@property (nonatomic, weak) UILabel *timeLimitL;
+@property (nonatomic, weak) UIView *leftView;
+@end
+
+@implementation PBVideoListTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.bottom.equalTo(self.contentView);
+    }];
+    [bgV circleViewWithRadius:6];
+    UIView *portraitImageV = [[UIView alloc] init];
+    portraitImageV.backgroundColor = PBColor(40, 58, 79);
+    [self.contentView addSubview:portraitImageV];
+    [portraitImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(13);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(40, 40));
+    }];
+    [portraitImageV circleViewWithRadius:20];
+    
+    UILabel *referredL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:16];
+    referredL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:referredL];
+    [referredL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(portraitImageV);
+        make.left.right.equalTo(portraitImageV);
+    }];
+    UILabel *checkNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    [self.contentView addSubview:checkNameL];
+    [checkNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(portraitImageV);
+        make.left.equalTo(portraitImageV.mas_right).offset(8);
+        make.right.equalTo(bgV).offset(-70);
+        make.height.equalTo(@20);
+    }];
+    UIImageView *stateImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Rectify_ qualified"]];
+    [self.contentView addSubview:stateImageV];
+    [stateImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV);
+        make.size.mas_equalTo(CGSizeMake(60, 22));
+    }];
+  
+    UILabel *originatorL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:originatorL];
+    [originatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkNameL.mas_bottom).offset(4);
+        make.left.equalTo(checkNameL);
+        make.height.equalTo(@16);
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(originatorL);
+        make.left.equalTo(originatorL.mas_right).offset(8);
+    }];
+    
+    UILabel *titleL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    titleL.numberOfLines = 3;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeL.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    UIImageView *typeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"typebg"]];
+    [self.contentView addSubview:typeImageV];
+    [typeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL);
+        make.left.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(62, 22));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"设计问题" Color:[UIColor whiteColor] isBold:YES Font:12];
+    typeL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(typeImageV);
+    }];
+    UIView *leftView = [[UIView alloc] init];
+    [self.contentView addSubview:leftView];
+    UIView *stateBgV = [[UIView alloc] init];
+    stateBgV.backgroundColor = PBColor(0, 122, 255);
+    [self.contentView addSubview:stateBgV];
+    UILabel *stateL = [UILabel z_labelWithText:@"" Color:PBColor(0, 122, 255) isBold:YES Font:12];
+    stateL.numberOfLines = 0;
+    stateL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:stateL];
+    UIView *rightView = [[UIView alloc] init];
+    rightView.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:rightView];
+    
+    UIView *checkBgV = [[UIView alloc] init];
+    checkBgV.backgroundColor = PBColor(244, 245, 246);
+    [self.contentView addSubview:checkBgV];
+    UILabel *checkL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:14];
+    checkL.numberOfLines = 3;
+    [self.contentView addSubview:checkL];
+    [checkL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV).offset(15);
+        make.left.equalTo(checkBgV).offset(8);
+        make.right.equalTo(checkBgV).offset(-8);
+    }];
+    [checkBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(10);
+        make.left.equalTo(bgV).offset(50);
+        make.right.equalTo(bgV).offset(-10);
+        make.bottom.equalTo(checkL).offset(15);
+    }];
+    
+    [stateBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(checkBgV);
+        make.left.equalTo(bgV).offset(10);
+        make.right.equalTo(checkBgV.mas_left);
+    }];
+    [stateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(stateBgV).offset(10);
+        make.bottom.equalTo(stateBgV).offset(-10);
+        make.left.right.equalTo(stateBgV);
+    }];
+    [leftView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(stateBgV);
+        make.width.equalTo(@10);
+    }];
+    [rightView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.equalTo(checkBgV);
+        make.width.equalTo(@10);
+    }];
+    UILabel *timeLimitL = [UILabel z_labelWithText:@"任务期限" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeLimitL];
+    [timeLimitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(checkBgV.mas_bottom).offset(15);
+        make.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(52, 16));
+        make.bottom.equalTo(bgV).offset(-10);
+    }];
+    UILabel *limitL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    [self.contentView addSubview:limitL];
+    [limitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(timeLimitL);
+        make.left.equalTo(timeLimitL.mas_right).offset(18);
+    }];
+    self.referredL = referredL;
+    self.checkNameL = checkNameL;
+    self.stateImageV = stateImageV;
+    self.originatorL = originatorL;
+    self.timeL = timeL;
+    self.titleL = titleL;
+    self.typeL = typeL;
+    self.stateBgV = stateBgV;
+    self.stateL = stateL;
+    self.checkL = checkL;
+    self.limitL = limitL;
+    self.checkBgV = checkBgV;
+    self.timeLimitL = timeLimitL;
+    self.leftView = leftView;
+    
+//    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.stateBgV.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomLeft cornerRadii:CGSizeMake(10, 10)];
+//    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+//    maskLayer.frame = self.stateBgV.bounds;
+//    maskLayer.path = maskPath.CGPath;
+//    self.stateBgV.layer.mask = maskLayer;
+//
+//    UIBezierPath *maskPath1 = [UIBezierPath bezierPathWithRoundedRect:self.checkBgV.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
+//    CAShapeLayer *maskLayer1 = [[CAShapeLayer alloc] init];
+//    maskLayer1.frame = self.checkBgV.bounds;
+//    maskLayer1.path = maskPath1.CGPath;
+//    self.checkBgV.layer.mask = maskLayer1;
+}
+
+- (void)setExamineListModel:(PBExamineListModel *)examineListModel {
+    _examineListModel = examineListModel;
+    BOOL isChiness = [self IsChinese:examineListModel.bu_checker_RealName];
+    if (isChiness) {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringFromIndex:examineListModel.bu_checker_RealName.length - 1];
+    }else {
+        self.referredL.text = [examineListModel.bu_checker_RealName substringToIndex:1];
+    }
+    self.checkNameL.text = examineListModel.bu_checker_RealName;
+    NSString *flagStr = [examineListModel.ExamineResult substringToIndex:1];
+    if ([flagStr isEqualToString:@"A"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ check"];
+    }else if ([flagStr isEqualToString:@"B"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ rectification"];
+    }else if ([flagStr isEqualToString:@"C"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ acceptance"];
+    }else if ([flagStr isEqualToString:@"D"]) {
+        self.stateImageV.image = [UIImage imageNamed:@"Rectify_ qualified"];
+    }else {
+        self.stateImageV.image = [UIImage imageNamed:@""];
+    }
+    self.originatorL.text = examineListModel.bu_examiner_name;
+    NSString *time = [examineListModel.CreateDate stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    self.timeL.text = [NSString stringWithFormat:@"于%@发起任务",time];
+    self.titleL.text = [NSString stringWithFormat:@"------- %@",examineListModel.ExamineRemark];
+    self.typeL.text = examineListModel.aedt_name;
+    NSRange range1 = [examineListModel.ExamineDate rangeOfString:@"T"];
+    NSRange range2 = [examineListModel.RectificateDate rangeOfString:@"T"];
+    NSString *start = [examineListModel.ExamineDate substringToIndex:range1.location];
+    NSString *end = [examineListModel.RectificateDate substringToIndex:range2.location];
+    self.limitL.text = [NSString stringWithFormat:@"%@ - %@",start, end];
+    if ([examineListModel.aede_severitylevel isEqualToString:@"一般"]) {
+        self.stateBgV.backgroundColor = PBColor(219, 232, 246);
+        self.leftView.backgroundColor = PBColor(219, 232, 246);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"严重"]) {
+        self.stateBgV.backgroundColor = PBColor(245, 232, 220);
+        self.leftView.backgroundColor = PBColor(245, 232, 220);
+    }else if ([examineListModel.aede_severitylevel isEqualToString:@"非常严重"]) {
+        self.stateBgV.backgroundColor = PBColor(243, 222, 222);
+        self.leftView.backgroundColor = PBColor(243, 222, 222);
+    }
+    self.stateL.text = examineListModel.aede_severitylevel;
+    if (examineListModel.CacheRecordList.count > 0) {
+        self.checkL.text = [examineListModel.CacheRecordList[examineListModel.CacheRecordList.count - 1] valueForKey:@"RectificationRemark"];
+    }else {
+        self.checkL.text = @"内容错误";
+    }
+    [self.stateBgV circleViewWithRadius:6];
+    [self.checkBgV circleViewWithRadius:6];
+    
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.h
new file mode 100644
index 0000000..1c7f03b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.h
@@ -0,0 +1,41 @@
+//
+//  PBRetrieveView1.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/14.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRetrieveView1 : UIView
++(instancetype)MenuViewWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover;
+
+/**
+ *  初始化方法
+ *
+ *  @param dependencyView 传入需要滑出菜单的控制器的view
+ *  @param leftmenuView   传入需要显示的菜单的view
+ *  @param isCover        bool值,是否有右边遮挡的阴影
+ *
+ *  @return self
+ */
+-(instancetype)initWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover;
+    
+/**
+ *  展开菜单,可放进点击事件内
+ */
+-(void)show;
+/**
+ *  关闭菜单不带动画效果
+ */
+-(void)hidenWithoutAnimation;
+/**
+ *  关闭菜单带动画效果
+ */
+-(void)hidenWithAnimation;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.m
new file mode 100644
index 0000000..27134e8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Examine/Views/Retrieve/PBRetrieveView1.m
@@ -0,0 +1,344 @@
+//
+//  PBRetrieveView1.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/14.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+// 获得屏幕尺寸
+#define kSCREEN_WIDTH   [[UIScreen mainScreen] bounds].size.width
+#define kSCREEN_HEIGHT  [[UIScreen mainScreen] bounds].size.height
+
+//#define MenuView_scale_of_Screen        0.8
+#define CoverViewAlpha 0.4
+
+#define CoverViewBackGround [UIColor colorWithRed:52/255.0 green:52/255.0 blue:52/255.0 alpha:1.0]
+#import "PBRetrieveView1.h"
+@interface PBRetrieveView1()
+@property (nonatomic ,assign)CGRect         menuViewframe;
+@property (nonatomic ,assign)CGRect         coverViewframe;
+@property (nonatomic ,strong)UIView         *coverView;
+@property (nonatomic ,strong)UIView         *leftMenuView;
+@property (nonatomic ,assign)BOOL           isShowCoverView;
+@end
+@implementation PBRetrieveView1
++(instancetype)MenuViewWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover{
+    
+    PBRetrieveView1 *menu = [[PBRetrieveView1 alloc]initWithDependencyView:dependencyView MenuView:leftmenuView isShowCoverView:isCover];
+    
+    return menu;
+}
+
+-(instancetype)initWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover{
+    if(self = [super init]){
+        self.isShowCoverView = isCover;
+
+//     [self addPanGestureAtDependencyView:dependencyView];
+        self.leftMenuView = leftmenuView;
+//      if((CGRectEqualToRect(_coverViewframe, CGRectZero)) == NO){
+        self.menuViewframe = leftmenuView.frame;
+//      }else{
+//      }
+        self.coverViewframe = CGRectMake(0, 0, kSCREEN_WIDTH - self.menuViewframe.size.width, self.menuViewframe.size.height);
+    }
+    return self;
+}
+
+-(void)setIsShowCoverView:(BOOL)isShowCoverView
+{
+    _isShowCoverView = isShowCoverView;
+
+    if(self.isShowCoverView){
+        self.coverView.backgroundColor = CoverViewBackGround;
+    }else{
+        self.coverView.backgroundColor = [UIColor clearColor];
+    }
+
+}
+
+-(void)addPanGestureAtDependencyView:(UIView *)dependencyView{
+    
+    // 屏幕边缘pan手势(优先级高于其他手势)
+    UIScreenEdgePanGestureRecognizer *leftEdgeGesture = \
+    [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self
+                                                      action:@selector(handleLeftEdgeGesture:)];
+    leftEdgeGesture.edges                             = UIRectEdgeLeft;// 屏幕左侧边缘响应
+    [dependencyView addGestureRecognizer:leftEdgeGesture]; //
+}
+
+
+//-(void)initView{
+
+//    if(self.isShowCoverView){
+//        self.coverView.backgroundColor = CoverViewBackGround;
+//    }else{
+//        self.coverView.backgroundColor = [UIColor clearColor];
+//    }
+//
+//    [self setBackgroundColor:[UIColor clearColor]];
+//    [self.leftMenuView setBackgroundColor:MenuViewBackgroundColor];
+//}
+
+
+-(void)show {
+    UIWindow * window = [[UIApplication sharedApplication].delegate window];
+    [window addSubview:self.coverView];
+    [window addSubview:self.leftMenuView];
+    self.leftMenuView.frame = CGRectMake(kSCREEN_WIDTH + self.menuViewframe.origin.x, self.menuViewframe.origin.y, self.menuViewframe.size.width, self.menuViewframe.size.height);
+    self.coverView.frame = CGRectMake(kSCREEN_WIDTH, 0, kSCREEN_WIDTH - self.menuViewframe.size.width, self.menuViewframe.size.height);
+//    [UIView animateWithDuration:0.3 animations:^{
+//        self.leftMenuView.frame = self.menuViewframe;
+//        self.coverView.frame    = self.coverViewframe;
+//        self.coverView.alpha = CoverViewAlpha;
+//    }];
+    [UIView animateWithDuration:0.3 animations:^{
+        self.leftMenuView.frame = self.menuViewframe;
+        self.coverView.frame    = self.coverViewframe;
+    } completion:^(BOOL finished) {
+        self.coverView.alpha = CoverViewAlpha;
+    }];
+}
+-(void)hidenWithoutAnimation{
+    [self removeCoverAndMenuView];
+}
+-(void)hidenWithAnimation{
+    
+    [self coverTap];
+}
+
+
+#pragma mark - 屏幕左侧菜单
+-(UIView *)leftMenuView{
+    if(_leftMenuView == nil){
+        UIView *LeftView = [[UIView alloc]initWithFrame:self.menuViewframe];
+        _leftMenuView = LeftView;
+    }
+    return _leftMenuView;
+}
+
+
+#pragma mark - 遮盖
+-(UIView *)coverView {
+    
+    if (_coverView == nil) {
+        
+        UIView *Cover = [[UIView alloc]initWithFrame:self.coverViewframe];
+        Cover.backgroundColor                     = CoverViewBackGround;
+        Cover.alpha                               = 0;
+        UITapGestureRecognizer *Click             = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(coverTap)];
+        [Cover addGestureRecognizer:Click];
+        
+//        UIGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc]
+//                                                     initWithTarget:self
+//                                                     action:@selector(handleftPan:)];
+//
+//        [Cover addGestureRecognizer:panGestureRecognizer];
+//        [Click requireGestureRecognizerToFail:panGestureRecognizer];
+        
+        _coverView = Cover;
+    }
+    return _coverView;
+}
+
+#pragma mark - 屏幕往右滑处理
+- (void)handleLeftEdgeGesture:(UIScreenEdgePanGestureRecognizer *)gesture{
+    UIWindow * window = [[UIApplication sharedApplication].delegate window];
+    [window addSubview:self.coverView];
+    [window addSubview:self.leftMenuView];
+    // 根据被触摸手势的view计算得出坐标值
+    CGPoint translation = [gesture translationInView:gesture.view];
+    if(UIGestureRecognizerStateBegan == gesture.state ||
+       UIGestureRecognizerStateChanged == gesture.state){
+        
+        if(translation.x <= self.menuViewframe.size.width){// && self.leftMenuView.frame.origin.x != 0
+            
+            if(translation.x <= 10){
+                self.coverView.frame = CGRectMake(0, self.menuViewframe.origin.y, kSCREEN_WIDTH, self.menuViewframe.size.height);
+            }
+            
+            CGFloat x           = translation.x  - self.menuViewframe.size.width;
+            CGFloat y           = self.menuViewframe.origin.y;
+            CGFloat w           = self.menuViewframe.size.width;
+            CGFloat h           = self.menuViewframe.size.height;
+            self.leftMenuView.frame = CGRectMake(x, y, w, h);
+            
+            self.coverView.frame    = CGRectMake(self.leftMenuView.frame.size.width+x, 0,kSCREEN_WIDTH-self.leftMenuView.frame.size.width-x, h);
+            self.coverView.alpha    = CoverViewAlpha*(translation.x / w);
+        }else{
+            
+            self.leftMenuView.frame = self.menuViewframe;
+            self.coverView.frame = self.coverViewframe;
+        }
+    }
+    else{
+        //结束
+        if(translation.x > self.menuViewframe.size.width/2){
+            // 展开设置
+            [self openMenuView];
+        }else{
+            // 恢复设置
+            [self closeMenuView];
+        }
+    }
+}
+
+
+#pragma mark - coverView往左滑隐藏
+-(void)handleftPan:(UIPanGestureRecognizer*)recognizer{
+    
+    CGPoint translation = [recognizer translationInView:recognizer.view];
+    static CGFloat BeganX;
+    
+    if(UIGestureRecognizerStateBegan == recognizer.state){
+        BeganX = translation.x;
+    }
+    
+    CGFloat Place = (-translation.x) - (-BeganX);
+    
+    if(UIGestureRecognizerStateBegan == recognizer.state ||
+       UIGestureRecognizerStateChanged == recognizer.state){
+
+        CGFloat x           = 0 ;
+        CGFloat y           = self.menuViewframe.origin.y;
+        CGFloat w           = self.menuViewframe.size.width;
+        CGFloat h           = self.menuViewframe.size.height;
+
+        if(Place <= self.leftMenuView.frame.size.width &&  Place >0){
+            
+            x  = 0 - Place;
+
+//            self.leftMenuView.frame = CGRectMake(x, y, w, h);
+
+            self.coverView.frame    = CGRectMake(self.leftMenuView.frame.size.width-Place, 0,kSCREEN_WIDTH-self.leftMenuView.frame.size.width+Place, h);
+            self.coverView.alpha    = CoverViewAlpha*((w - Place) / w);
+
+        }else if(Place >0){
+            
+             x  = - self.menuViewframe.size.width;
+//            CGFloat y           = self.menuViewframe.origin.y;
+//            CGFloat w           = self.menuViewframe.size.width;
+//            CGFloat h           = self.menuViewframe.size.height;
+//            self.leftMenuView.frame = CGRectMake(x, y, w, h);//self.LeftViewFrame;
+            self.coverView.frame    = CGRectMake(0, 0,kSCREEN_WIDTH,h);
+            
+        }else{
+            
+            x = 0;
+//            CGFloat y           = self.menuViewframe.origin.y;
+//            CGFloat w           = self.menuViewframe.size.width;
+//            CGFloat h           = self.menuViewframe.size.height;
+
+            self.coverView.frame    = CGRectMake(self.leftMenuView.frame.size.width, 0,kSCREEN_WIDTH-self.leftMenuView.frame.size.width, h);
+            self.coverView.alpha    = CoverViewAlpha;
+        }
+
+         self.leftMenuView.frame = CGRectMake(x, y, w, h);
+
+        
+    }else{
+        //结束
+        if(Place > self.menuViewframe.size.width/2){
+            // 收起设置
+            [self closeMenuView];
+            
+        }else{
+            // 展开设置
+            [self openMenuView];
+        }
+    }
+    
+}
+
+
+-(void)openMenuView{
+    
+    [UIView animateWithDuration:0.3 animations:^{
+        CGFloat x           = 0;
+        CGFloat y           = self.menuViewframe.origin.y;
+        CGFloat w           = self.menuViewframe.size.width;
+        CGFloat h           = self.menuViewframe.size.height;
+        self.leftMenuView.frame = CGRectMake(x, y, w, h);
+        
+        self.coverView.frame    = self.coverViewframe;
+        self.coverView.alpha    = CoverViewAlpha;
+    }];
+}
+
+-(void)closeMenuView{
+    [UIView animateWithDuration:0.3 animations:^{
+        
+        CGFloat x           = -self.menuViewframe.size.width;
+        CGFloat y           = self.menuViewframe.origin.y;
+        CGFloat w           = self.menuViewframe.size.width;
+        CGFloat h           = self.menuViewframe.size.height;
+        self.leftMenuView.frame = CGRectMake(x, y, w, h);//self.LeftViewFrame;
+        self.coverView.frame    = CGRectMake(0, 0,kSCREEN_WIDTH, self.menuViewframe.size.height);
+    } completion:^(BOOL finished) {
+        [self removeCoverAndMenuView];
+    }];
+}
+#pragma mark - 点击遮盖移除
+-(void)coverTap{
+    self.coverView.alpha = 0;
+    [UIView animateKeyframesWithDuration:0.3 delay:0 options:UIViewKeyframeAnimationOptionLayoutSubviews animations:^{
+        self.leftMenuView.frame = CGRectMake(kSCREEN_WIDTH + self.menuViewframe.origin.x, self.menuViewframe.origin.y, self.menuViewframe.size.width, self.menuViewframe.size.height);
+        self.coverView.frame = CGRectMake(kSCREEN_WIDTH, 0, kSCREEN_WIDTH - self.menuViewframe.size.width, self.menuViewframe.size.height);
+        self.coverView.alpha    = 0.0;
+    } completion:^(BOOL finished) {
+        [self.coverView removeFromSuperview];
+        [self.leftMenuView removeFromSuperview];
+    }];
+    
+}
+
+#pragma mark - 移除菜单和遮盖
+-(void)removeCoverAndMenuView{
+    
+    self.leftMenuView.frame = CGRectMake(-self.leftMenuView.frame.size.width, 0, self.leftMenuView.frame.size.width, kSCREEN_HEIGHT);
+    self.coverView.frame    = CGRectMake(0, 0,kSCREEN_WIDTH, kSCREEN_HEIGHT);
+    self.coverView.alpha    = 0.0;
+    
+    [self.coverView removeFromSuperview];
+    [self.leftMenuView removeFromSuperview];
+}
+
+
+//
+//-(CGRect)menuViewframe{
+//
+//    if((CGRectEqualToRect(_menuViewframe,CGRectZero)) == YES){
+//
+//        //设置左侧菜单
+//        CGFloat w                   = kSCREEN_WIDTH * MenuView_scale_of_Screen;
+//        CGFloat h                   = kSCREEN_HEIGHT;
+//        CGFloat x                   = 0;
+//        CGFloat y                   = 0;
+//        _menuViewframe = CGRectMake(x , y , w , h);
+//    }
+//    return _menuViewframe;
+//}
+//
+//
+//
+//-(CGRect)coverViewframe{
+//
+//     if((CGRectEqualToRect(_coverViewframe, CGRectZero)) == YES){
+//
+//        _coverViewframe = CGRectMake(self.menuViewframe.size.width, self.menuViewframe.origin.y, kSCREEN_WIDTH - self.menuViewframe.size.width, self.menuViewframe.size.height);
+//    }
+//    return _coverViewframe;
+//}
+
+
+
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.h
new file mode 100644
index 0000000..1b615ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.h
@@ -0,0 +1,41 @@
+//
+//  PBCommentsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/31.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBCommentsModel : NSObject
+@property (nonatomic, strong) NSDictionary *contenttypeJson;
+@property (nonatomic, copy) NSString *issue_talkid;
+@property (nonatomic, copy) NSString *issueid;
+@property (nonatomic, copy) NSString *userid;
+@property (nonatomic, copy) NSString *content;
+@property (nonatomic, copy) NSString *createdate;
+@property (nonatomic, copy) NSString *contenttype;
+@property (nonatomic, copy) NSString *deletemark;
+@property (nonatomic, copy) NSString *userofunread;
+@property (nonatomic, copy) NSString *issue_ptalkid;
+@property (nonatomic, copy) NSString *realname;
+@property (nonatomic, copy) NSString *targetids;
+@property (nonatomic, strong) NSArray *innerlist;
+
+/**
+ contenttypeJson
+ issue_talkid : "f27e2943-6621-4079-80d4-f82ea9abda74"
+ issueid : "17393b84-f8ea-4b1b-93ad-9a4ddc1fa4ea"
+ userid : "9d9ca069-af5a-4564-9999-591b16560332"
+ content : "mine_btn_my_collection@2x.png"
+ createdate : "2020/3/17 16:05:37"
+ contenttype : "{"type":"image","id":"10837ab3-2513-485b-9da3-35f3a8f1830d"}"
+ deletemark : 0
+ userofunread : ""
+ issue_ptalkid : ""
+ realname : "zjf"
+ targetids : ""
+ innerlist
+ */
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.m
new file mode 100644
index 0000000..550ffac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBCommentsModel.m
@@ -0,0 +1,13 @@
+//
+//  PBCommentsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/31.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBCommentsModel.h"
+
+@implementation PBCommentsModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.h
new file mode 100644
index 0000000..4b57c03
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.h
@@ -0,0 +1,51 @@
+//
+//  PBIssueAddModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "PBIssueNavModel.h"
+#import "PBModelsModel.h"
+#import "PBViewPointModel.h"
+#import "PBDrawingsInfoModel.h"
+#import "PBDrawingposModel.h"
+@interface PBIssueAddModel : NSObject
+//标题
+@property (nonatomic, copy) NSString *title;
+//对应字段Key
+@property (nonatomic, copy) NSString *key;
+//cell显示的类型
+@property (nonatomic, copy) NSString *cellType;
+//提示信息
+@property (nonatomic, copy) NSString *prompt;
+//输入类型的文字存储
+@property (nonatomic, copy) NSString *inputStr;
+//状态、类型选择存储
+@property (nonatomic, strong) PBIssueNavModel *navModel;
+//人员选择存储
+@property (nonatomic, strong) NSArray *personArr;
+//标签选择储存
+@property (nonatomic, strong) NSArray *labelArr;
+//截止日期存储
+@property (nonatomic, copy) NSString *dateStr;
+//是否是必填项
+@property (nonatomic, assign) BOOL isMandatory;
+//角色
+@property (nonatomic, assign) RoleType roleType;
+//当前是否是新增还是编辑
+@property (nonatomic, assign) BOOL isAddIssue;
+//编辑权限
+@property (nonatomic, assign) BOOL isIssueManager;
+
+//定位模型信息
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+//定位视点模型信息
+@property (nonatomic, strong) PBViewPointModel *veiwPointModel;
+//定位图纸信息
+@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;
+//定位坐标信息
+@property (nonatomic, strong) PBDrawingposModel *drawingposModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.m
new file mode 100644
index 0000000..41a2f9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueAddModel.m
@@ -0,0 +1,13 @@
+//
+//  PBIssueAddModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueAddModel.h"
+
+@implementation PBIssueAddModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.h
new file mode 100644
index 0000000..bdf571b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.h
@@ -0,0 +1,32 @@
+//
+//  PBIssueDetailModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBIssueDetailModel : NSObject
+@property (nonatomic, strong) NSArray *activities;
+@property (nonatomic, assign) BOOL isIssueManager;
+@property (nonatomic, strong) NSDictionary *issueObj;
+@property (nonatomic, copy) NSString *modelname;
+@property (nonatomic, strong) NSArray *relationFiles;
+@property (nonatomic, strong) NSArray *base_files;
+@property (nonatomic, strong) NSArray *comments;
+@property (nonatomic, strong) NSArray *joiners;
+@property (nonatomic, strong) NSArray *tagList;
+/*
+activities
+isIssueManager : false
+issueObj
+modelname : ""
+relationFiles
+base_files
+comments
+joiners
+tagList
+*/
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.m
new file mode 100644
index 0000000..c3771bd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueDetailModel.m
@@ -0,0 +1,13 @@
+//
+//  PBIssueDetailModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueDetailModel.h"
+
+@implementation PBIssueDetailModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.h
new file mode 100644
index 0000000..b0f1b19
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.h
@@ -0,0 +1,77 @@
+//
+//  PBIssueListModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBIssueListModel : NSObject
+@property (nonatomic, assign) BOOL isIssueManager;
+@property (nonatomic, strong) NSArray *base_files;
+@property (nonatomic, copy) NSString *IssueTypeText;
+@property (nonatomic, copy) NSString *IssueStatusText;
+@property (nonatomic, copy) NSString *FileId;
+@property (nonatomic, assign) BOOL IsHide;
+@property (nonatomic, assign) NSInteger FileCount;
+@property (nonatomic, assign) NSInteger TalkCount;
+@property (nonatomic, copy) NSString *bdid_status_SortCode;
+@property (nonatomic, copy) NSString *IssueStatusColor;
+@property (nonatomic, copy) NSString *bu_Email;
+@property (nonatomic, copy) NSString *bu_Mobile;
+@property (nonatomic, strong) NSArray *RelationFiles;
+@property (nonatomic, copy) NSString *bgpicture_src;
+@property (nonatomic, copy) NSString *com_FullName;
+@property (nonatomic, strong) NSArray *TagIdList;
+@property (nonatomic, copy) NSString *IssueId;
+@property (nonatomic, copy) NSString *ProjectID;
+@property (nonatomic, copy) NSString *ModelId  ;
+@property (nonatomic, copy) NSString *ViewpointID;
+@property (nonatomic, copy) NSString *Title;
+@property (nonatomic, copy) NSString *ImageUrl;
+@property (nonatomic, copy) NSString *Content;
+@property (nonatomic, copy) NSString *IssueStatus;
+@property (nonatomic, copy) NSString *CreateDate;
+@property (nonatomic, copy) NSString *CreateUserId;
+@property (nonatomic, copy) NSString *CreateUserName;
+@property (nonatomic, copy) NSString *EndDate;
+@property (nonatomic, copy) NSString *IsPublic;
+@property (nonatomic, copy) NSString *IssueTypeID;
+@property (nonatomic, copy) NSString *DeleteMark;
+@end
+
+/**
+ base_files
+ isIssueManager : false
+ IssueTypeText : "分类一"
+ IssueStatusText : "打开"
+ FileId : ""
+ IsHide : false
+ FileCount : 0
+ TalkCount : 0
+ bdid_status_SortCode : -1
+ IssueStatusColor : "rgba(29, 164, 140, 1)"
+ bu_Email : "wangping@probim.com.cn"
+ bu_Mobile : "15001008629"
+ RelationFiles : null
+ bgpicture_src : "https://www.probim.cn:8080/ModelImages/2020/2/17/855e5222-5027-40b9-b709-5ca899620bed.bmp"
+ com_FullName : "北京东晨工元科技发展有限公司"
+ TagIdList
+ IssueId : "0bdf79c4-cb72-463d-b51f-91682732916c"
+ ProjectID : null
+ ModelId : ""
+ ViewpointID : "{"hidedElement":[],"isolateElelement":[],"clipInof":null,"cameraInof":{"position":{"x":-83.62903378665067,"y":-76.18885039750711,"z":-388.41412057986383},"rotation":{"_x":-3.141592653589793,"_y":1.0569120286198495e-16,"_z":3.141592653589793,"_order":"XYZ"},"target":{"x":-83.6290337866507,"y":-76.18885039750712,"z":-119.50139500971386}}}"
+ Title : "a后"
+ ImageUrl : "https://www.probim.cn:8080/ModelImages/2020/2/17/855e5222-5027-40b9-b709-5ca899620bed.bmp"
+ Content : null
+ IssueStatus : "72b471b8-42e8-482d-920b-0feda8bb1eba"
+ CreateDate : "2020-02-17T13:24:27"
+ CreateUserId : "6937a7da-4bcd-44c1-a6c2-896e7a212324"
+ CreateUserName : "王平"
+ EndDate : "2020-02-29T00:00:00"
+ IsPublic : null
+ IssueTypeID : "859d55e6-eced-4705-86c6-1fa2d8b17726"
+ DeleteMark : 0
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.m
new file mode 100644
index 0000000..45ea6b0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueListModel.m
@@ -0,0 +1,13 @@
+//
+//  PBIssueListModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueListModel.h"
+
+@implementation PBIssueListModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.h
new file mode 100644
index 0000000..855e914
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.h
@@ -0,0 +1,20 @@
+//
+//  PBIssueNavModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBIssueNavModel : NSObject
+@property (nonatomic, copy) NSString *ItemDetailId;
+@property (nonatomic, copy) NSString *ItemName;
+@end
+
+/*
+ it_guid : "63247e84-aa39-41dd-a554-0c55beac036c"
+ it_name : "测试状态"
+ */
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.m
new file mode 100644
index 0000000..fe0428d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBIssueNavModel.m
@@ -0,0 +1,24 @@
+//
+//  PBIssueNavModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueNavModel.h"
+
+@implementation PBIssueNavModel
+- (id)copyWithZone:(nullable NSZone *)zone {
+    PBIssueNavModel *model = [[self class] allocWithZone:zone];
+    model.ItemDetailId = _ItemDetailId;
+    model.ItemName = _ItemName;
+    return model;
+}
+- (id)mutableCopyWithZone:(nullable NSZone *)zone {
+    PBIssueNavModel *model = [[self class] allocWithZone:zone];
+    model.ItemDetailId = _ItemDetailId;
+    model.ItemName = _ItemName;
+    return model;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.h
new file mode 100644
index 0000000..57755b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.h
@@ -0,0 +1,16 @@
+//
+//  PBPersonModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/21.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBPersonModel : NSObject
+@property (nonatomic, copy) NSString *UserId;
+@property (nonatomic, copy) NSString *RealName;
+@property (nonatomic, copy) NSString *TelPhoneNum;
+@property (nonatomic, copy) NSString *Email;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.m
new file mode 100644
index 0000000..6028105
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBPersonModel.m
@@ -0,0 +1,13 @@
+//
+//  PBPersonModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/21.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBPersonModel.h"
+
+@implementation PBPersonModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.h
new file mode 100644
index 0000000..de71c99
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.h
@@ -0,0 +1,26 @@
+//
+//  PBTagModel.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/11.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTagModel : NSObject
+@property (nonatomic, copy) NSString *it_guid;
+@property (nonatomic, copy) NSString *it_name;
+@property (nonatomic, copy) NSString *it_color;
+@property (nonatomic, copy) NSString *it_organizeId;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ it_guid : "0b412982-8d9f-47ae-a72e-0f232503a469"
+ it_name : "12"
+ it_color : "rgba(86, 98, 112, 1)"
+ it_organizeId : "48617e7b-07f2-4748-9199-238af8f2bfc6"
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.m
new file mode 100644
index 0000000..c5be3f1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Models/PBTagModel.m
@@ -0,0 +1,13 @@
+//
+//  PBTagModel.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/11.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBTagModel.h"
+
+@implementation PBTagModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.h
new file mode 100644
index 0000000..7aa5652
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.h
@@ -0,0 +1,19 @@
+//
+//  PBAddCommentsController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/3.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBIssueDetailModel;
+@class PBIssueListModel;
+@interface PBAddCommentsController : UIViewController
+@property (nonatomic, copy) void(^SaveCommentsBlock)(NSDictionary *commentsDic);
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBIssueDetailModel *issueDetailModel;
+@property (nonatomic, strong) PBIssueListModel *issueListModel;
+@property (nonatomic, copy) NSString *talkId;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.m
new file mode 100644
index 0000000..0ed0651
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddCommentsController.m
@@ -0,0 +1,403 @@
+//
+//  PBAddCommentsController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/3.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBAddCommentsController.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBIssueDetailModel.h"
+#import "PBProjectModel.h"
+#import "PBCommentsFooterView.h"
+#import "PBIssueListModel.h"
+#import "PBCommentsModel.h"
+#import "IQKeyboardManager.h"
+#define ALineCount 3
+#define Spacing 10
+#define whiteColor [UIColor whiteColor]
+#define separateColor [UIColor z_colorWithR:242 G:242 B:242]
+static NSString *const cellID = @"cellID";
+@interface PBAddCommentsController ()<UITableViewDataSource, UITableViewDelegate, LFImagePickerControllerDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UIView *linView;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, strong) PBCommentsFooterView *tableFooterView;
+@property (nonatomic, weak) UIView *bottomV;
+@property (nonatomic, assign) CGFloat height;
+@end
+
+@implementation PBAddCommentsController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [[IQKeyboardManager sharedManager] setEnable:NO];
+}
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    [[IQKeyboardManager sharedManager] setEnable:YES];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+//    if (IS_IPHONE_X) {
+//        self.height = 34.0f;
+//    }else {
+//        self.height = 0.0f;
+//    }
+//    [PBNoteCenter addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardDidShowNotification object:nil];
+//
+//    [PBNoteCenter addObserver:self selector:@selector(keyboardWillHidden:) name:UIKeyboardWillHideNotification object:nil];
+    [self setupNav];
+    [self setupUI];
+}
+//- (void)keyboardWillShow:(NSNotification *)notification {
+//    CGRect frame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
+//    [self.bottomV mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.bottom.equalTo(self.view).offset(-frame.size.height);
+//    }];
+//}
+//- (void)keyboardWillHidden:(NSNotification *)notification{
+//    [self.bottomV mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.bottom.equalTo(self.view).offset(-(self.height));
+//    }];
+//}
+
+- (void)setupNav {
+    self.title = @"新增评论";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"取消";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *saveItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveItem;
+}
+
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveAction {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] AddCommentWithIssueId:self.issueListModel.IssueId andOrganizeId:self.projectModel.bimcomposerid andText:self.textView.text andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"评论失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            [YJProgressHUD hide];
+            NSDictionary *commentDic = @{
+                    @"issue_talkid":[networkModel.Data valueForKey:@"Issue_TalkId"],
+                    @"issueid":[networkModel.Data valueForKey:@"IssueId"],
+                    @"userid":[networkModel.Data valueForKey:@"UserId"],
+                    @"content":[networkModel.Data valueForKey:@"Content"],
+                    @"createdate":[networkModel.Data valueForKey:@"CreateDate"],
+                    @"contenttype":[networkModel.Data valueForKey:@"ContentType"],
+                    @"deletemark":[networkModel.Data valueForKey:@"DeleteMark"],
+                    @"userofunread":[networkModel.Data valueForKey:@"UserOfUnRead"],
+                    @"issue_ptalkid":[networkModel.Data valueForKey:@"Issue_PTalkId"],
+                    @"commentpatchguid":[networkModel.Data valueForKey:@"CommentPatchGUID"],
+                    @"realname":Realname
+            };
+            if (self.SaveCommentsBlock) {
+                self.SaveCommentsBlock(commentDic);
+            }
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)uploadFileToideFolderWithImage:(UIImage *)image {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] UploadFileToHideFolder_MulPropWithImage:image andProjectID:self.projectModel.bimcomposerid andFileType:@"Issue" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"上传图片失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        if (dict){
+            [self saveimageCommentsWithFile:dict];
+        }else {
+            [YJProgressHUD showMessage:@"上传图片失败" inView:self.view];
+        }
+    }];
+}
+
+- (void)saveimageCommentsWithFile:(NSDictionary *)file {
+    [[PBNetworkTools sharedTools] AddImageCommentWithIssueId:self.issueListModel.IssueId andFileID:[file valueForKey:@"FileId"] andFielName:[file valueForKey:@"FileName"] andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"评论失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            [YJProgressHUD hide];
+            NSDictionary *commentDic = @{
+                    @"issue_talkid":[networkModel.Data valueForKey:@"Issue_TalkId"],
+                    @"issueid":[networkModel.Data valueForKey:@"IssueId"],
+                    @"userid":[networkModel.Data valueForKey:@"UserId"],
+                    @"content":[networkModel.Data valueForKey:@"Content"],
+                    @"createdate":[networkModel.Data valueForKey:@"CreateDate"],
+                    @"contenttype":[networkModel.Data valueForKey:@"ContentType"],
+                    @"deletemark":[networkModel.Data valueForKey:@"DeleteMark"],
+                    @"userofunread":[networkModel.Data valueForKey:@"UserOfUnRead"],
+                    @"issue_ptalkid":[networkModel.Data valueForKey:@"Issue_PTalkId"],
+                    @"commentpatchguid":[networkModel.Data valueForKey:@"CommentPatchGUID"],
+                    @"realname":Realname,
+                    @"contenttypeJson":@{@"type":@"image", @"contentImgId":[file valueForKey:@"FileId"]}
+            };
+            if (self.SaveCommentsBlock) {
+                self.SaveCommentsBlock(commentDic);
+            }
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+    
+}
+- (void)setupUI {
+    self.view.backgroundColor = whiteColor;
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(67 + self.height));
+    }];
+    self.tableView.tableFooterView = [UIView new];
+//    self.tableFooterView.frame = CGRectMake(0, 0, self.view.width, 60);
+//    self.tableView.tableFooterView = self.tableFooterView;
+//
+//    UIView *bottomV = [[UIView alloc] init];
+//    bottomV.backgroundColor = whiteColor;
+//    [self.view addSubview:bottomV];
+//    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.size.mas_equalTo(CGSizeMake(self.view.width, 67));
+//        make.centerX.equalTo(self.view);
+//        make.bottom.equalTo(self.view).offset(self.height);
+//    }];
+//
+//    UIView *linView = [[UIView alloc] init];
+//    linView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+//    [bottomV addSubview:linView];
+//    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(bottomV);
+//        make.left.right.equalTo(bottomV);
+//        make.height.equalTo(@10);
+//    }];
+//
+//    UILabel *imageL = [UILabel z_labelWithText:@"评论图片" Color:TitleColor isBold:NO Font:TitleFontSize];
+//    [bottomV addSubview:imageL];
+//    [imageL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(linView.mas_bottom).offset(18);
+//        make.left.equalTo(self.view).offset(18);
+//        make.size.mas_equalTo(CGSizeMake(66, 22));
+//    }];
+//    UIButton *chooseImageBtn = [UIButton z_textButton:@"请选择图片" fontSize:MarkedFontSize normalColor:IgnoreColor];
+//    [chooseImageBtn addTarget:self action:@selector(chooseImageAction) forControlEvents:UIControlEventTouchUpInside];
+//    [bottomV addSubview:chooseImageBtn];
+//    [chooseImageBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.centerY.equalTo(imageL);
+//        make.right.equalTo(bottomV).offset(-16);
+//    }];
+//
+//    self.bottomV = bottomV;
+}
+
+- (UIView *)tableHeaderView {
+    UIView *bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 150)];
+    bgView.backgroundColor = whiteColor;
+    
+    UITextView *textView = [[UITextView alloc] init];
+    self.textView = textView;
+    textView.textColor= TitleColor;
+    textView.font = [UIFont systemFontOfSize:TitleFontSize];
+    [textView becomeFirstResponder];
+//    textView.delegate = self;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(16);
+        make.left.equalTo(bgView).offset(16);
+        make.right.equalTo(bgView).offset(-16);
+        make.height.equalTo(@118);
+    }];
+    
+    UIView *linView = [[UIView alloc] init];
+    self.linView = linView;
+    linView.backgroundColor = whiteColor;
+    [bgView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.equalTo(bgView);
+        make.height.equalTo(@10);
+        make.bottom.equalTo(bgView);
+    }];
+    return bgView;
+}
+
+
+- (void)chooseImageAction {
+    [self takePhotoLibrary];
+}
+
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+        
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+
+- (void)pushLFImagePickerController {
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            [imageArrM addObject:originalImage];
+        }
+    }
+    if (imageArrM.count) {
+        [self uploadFileToideFolderWithImage:imageArrM[0]];
+    }
+//    self.linView.backgroundColor = separateColor;
+//    [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
+//    [self setupTableFooterViewHeight];
+}
+
+
+- (UITableView *)tableView {
+    if (!_tableView) {
+        _tableView = [[UITableView alloc] init];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.tableHeaderView = [self tableHeaderView];
+    }
+    return _tableView;
+}
+- (PBCommentsFooterView *)tableFooterView {
+    __weak typeof(self) weakSelf = self;
+    if (_tableFooterView == nil) {
+        _tableFooterView = [[PBCommentsFooterView alloc] init];
+        _tableFooterView.deleteImageBlock = ^(NSInteger index) {
+            [weakSelf.selectedPhotos removeObjectAtIndex:index];
+            [weakSelf setupTableFooterViewHeight];
+            if (self.selectedPhotos.count == 0) {
+                weakSelf.linView.backgroundColor = whiteColor;
+            }
+        };
+    }
+    return _tableFooterView;
+}
+- (void)setupTableFooterViewHeight {
+    NSInteger more = self.selectedPhotos.count % ALineCount == 0 ?  0 : 1;
+    NSInteger rowNumber = (self.selectedPhotos.count / ALineCount) + more;
+    CGFloat itemWH = (PBScreenWidth - 4 * Spacing) / ALineCount;
+    CGFloat collectViewH = (itemWH *rowNumber) + (rowNumber - 1) * Spacing;
+    collectViewH = collectViewH < 0 ? 28 : collectViewH;
+    self.tableFooterView.frame = CGRectMake(0, 0, self.view.width, collectViewH + 32);
+    self.tableFooterView.selectedPhotos = self.selectedPhotos;
+    self.tableView.tableFooterView = self.tableFooterView;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 0;
+}
+
+- (UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    return nil;
+}
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    [self.textView resignFirstResponder];
+}
+- (NSMutableArray *)selectedPhotos {
+    if (_selectedPhotos == nil) {
+        _selectedPhotos = [[NSMutableArray alloc] init];
+    }
+    return _selectedPhotos;
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (void)setIssueDetailModel:(PBIssueDetailModel *)issueDetailModel {
+    _issueDetailModel = issueDetailModel;
+}
+
+- (void)setTalkId:(NSString *)talkId {
+    _talkId = talkId;
+}
+- (void)setIssueListModel:(PBIssueListModel *)issueListModel {
+    _issueListModel = issueListModel;
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+ #pragma mark - Navigation
+ 
+ // In a storyboard-based application, you will often want to do a little preparation before navigation
+ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+ // Get the new view controller using [segue destinationViewController].
+ // Pass the selected object to the new view controller.
+ }
+ */
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.h
new file mode 100644
index 0000000..1a63616
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.h
@@ -0,0 +1,23 @@
+//
+//  PBAddIssueController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBViewPointModel;
+@class PBIssueListModel;
+@interface PBAddIssueController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, copy) NSString *viewPointStr;
+@property (nonatomic, copy) NSString *base64Image;
+@property (nonatomic, copy) NSString *modelID;
+@property (nonatomic, strong) NSDictionary *statusAndTypeData;
+@property (nonatomic, strong) PBIssueListModel *issueListModel;
+@property (nonatomic, assign) BOOL isAddIssue;
+@property (nonatomic, copy) void (^SaveSuccessBlock)(void);
+@property (nonatomic, copy) void (^updataSuccessBlock)(void);
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.mm b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.mm
new file mode 100644
index 0000000..322e9e1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBAddIssueController.mm
@@ -0,0 +1,1295 @@
+//
+//  PBAddIssueController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBAddIssueController.h"
+#import "PBInputTableViewCell.h"
+#import "PBChooseTableViewCell.h"
+#import "PBEditTextController.h"
+#import "PBChooseView.h"
+#import "PBPersonTableViewCell.h"
+#import "PBEditPersonView.h"
+#import "PBEditLableView.h"
+#import "PBDateTableViewCell.h"
+#import "PBEditDateView.h"
+#import "PBIssueAddModel.h"
+#import "PBProjectModel.h"
+#import "PBPersonModel.h"
+#import "PBViewPointModel.h"
+#import "PBCommentsController.h"
+#import "PBIssueListModel.h"
+#import "PBIssueDetailModel.h"
+#import "PBNetworkModel.h"
+#import "PBDocModel.h"
+#import "PBLoadModelDisplayController.h"
+#import "PBPreviewDocViewController.h"
+#import "PBIssueImageTableViewCell.h"
+#import "PBPositionTableViewCell.h"
+#import "PBIssueHeaderView.h"
+#import "PBIssueModelListController.h"
+#import "PBOpenViewPointController.h"
+#import "PBOpenDrawController.h"
+#import "PBTagModel.h"
+#import "PBDocListTableViewCell.h"
+#import "DwgViewController.h"
+
+static NSString *const ImageCellID = @"ImageCellID";
+static NSString *const PositionCellID = @"PositionCellID";
+static NSString *const InputCellID = @"InputCellID";
+static NSString *const chooseCellID = @"chooseCellID";
+static NSString *const personCellID = @"personCellID";
+static NSString *const dateCellID = @"dateCellID";
+static NSString *const docCellID = @"docCellID";
+@interface PBAddIssueController ()<UITableViewDataSource, UITableViewDelegate, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBChooseView *chooseView;
+@property (nonatomic, strong) PBEditPersonView *editPersonView;
+@property (nonatomic, strong) PBEditLableView *editLabelView;
+@property (nonatomic, strong) PBEditDateView *editDateView;
+@property (nonatomic, strong) NSMutableArray<PBIssueAddModel *> *dataListM;
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, strong) NSMutableArray *selectedAssets;
+@property (nonatomic, strong) PBIssueHeaderView *issueHeaderView;
+@property (nonatomic, strong) NSMutableArray *imageDocArr;
+@property (nonatomic, strong) NSMutableArray *docArr;
+@property (nonatomic, strong) NSMutableArray *associatedDocs;
+@property (nonatomic, assign) RoleType roleType;
+@property (nonatomic, assign) NSInteger mandatoryCount;
+@property (nonatomic, weak) UIView *linView;
+@property (nonatomic, strong) PBIssueDetailModel *issueDetailModel;
+@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;
+@property (nonatomic, assign) BOOL isIssueManage;
+@end
+
+@implementation PBAddIssueController
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(updatePosition:) name:PBNoteCenterIssueUpdatePositioning object:nil];
+    if (self.issueListModel.isIssueManager) {
+        self.isIssueManage = YES;
+    }else {
+        self.isIssueManage = NO;
+    }
+    [self setupUI];
+    [self loadData];
+    [self setupNav];
+}
+- (void)updatePosition:(NSNotification *)noti {
+    PBIssueAddModel *issueAddModel = noti.object;
+    NSIndexPath *path;
+    if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
+        path = [NSIndexPath indexPathForRow:0 inSection:0];
+    }else {
+        path = [NSIndexPath indexPathForRow:1 inSection:0];
+    }
+    if (self.isAddIssue) {
+        [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+    }else {
+        if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
+            NSDictionary *viewPointDic = @{
+                                           @"modelID" : issueAddModel.veiwPointModel.ModelID,
+                                           @"viewPointID" : issueAddModel.veiwPointModel.ID
+                                           };
+            [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:viewPointDic andDraw:nil andIndexPath:path];
+        }else {
+            NSDictionary *drawDic = @{
+                                      @"modelID" : issueAddModel.modelsModel.ID,
+                                      @"imageID" : issueAddModel.drawingposModel.FileId,
+                                      @"position" : [NSString stringWithFormat:@"%@_%@",issueAddModel.drawingposModel.PosX,issueAddModel.drawingposModel.PosY],
+                                      };
+            [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:nil andDraw:drawDic andIndexPath:path];
+        }
+    }
+}
+
+- (void)updateCompletionIndicator {
+    
+    if (!self.isAddIssue) {
+        return;
+    }
+    CGFloat oneWidth = PBScreenWidth / self.mandatoryCount;
+    NSInteger completedCount = 0;
+    for (PBIssueAddModel *issueAddModel in self.dataListM) {
+        if (issueAddModel.isMandatory) {
+            if ([issueAddModel.cellType isEqualToString:@"input"]) {
+                if (issueAddModel.inputStr != nil && ![issueAddModel.inputStr isEqualToString:@""]) {
+                    ++completedCount;
+                }
+            }else if ([issueAddModel.cellType isEqualToString:@"choose"]) {
+                if (issueAddModel.navModel){
+                    ++completedCount;
+                }
+            }else if ([issueAddModel.cellType isEqualToString:@"person"]) {
+                if (issueAddModel.personArr.count != 0) {
+                    ++completedCount;
+                }
+            }else if ([issueAddModel.cellType isEqualToString:@"date"]) {
+                if (issueAddModel.dateStr!= nil && ![issueAddModel.dateStr isEqualToString:@""]) {
+                    ++completedCount;
+                }
+            }
+        }
+    }
+    CGFloat linViewW = oneWidth *completedCount;
+    [UIView animateWithDuration:0.2 animations:^{
+        self.linView.width = linViewW;
+    } completion:^(BOOL finished) {
+        if (completedCount == self.mandatoryCount) {
+            self.navigationItem.rightBarButtonItem.enabled = YES;
+        }else {
+            self.navigationItem.rightBarButtonItem.enabled = NO;
+        }
+    }];
+}
+
+- (void)loadData {
+    self.dataListM = [[NSMutableArray alloc] init];
+    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"issueAdd" ofType:@"plist"];
+    NSArray *arr = [NSArray arrayWithContentsOfFile:plistPath];
+    NSMutableArray *listM = [[NSMutableArray alloc] init];
+    for (NSDictionary *obj in arr) {
+        PBIssueAddModel *model = [PBIssueAddModel yy_modelWithDictionary:obj];
+        model.isAddIssue = self.isAddIssue;
+        model.isIssueManager = self.isIssueManage;
+        if (model.isMandatory) {
+            ++self.mandatoryCount;
+        }
+        [listM addObject:model];
+    }
+    if (self.statusAndTypeData == nil) {
+        [self getProjectParentId];
+    }
+    if (_isAddIssue) {
+        [self setTableViewHeaderView];
+        self.dataListM = listM;
+        [self.dataListM removeLastObject];
+    }else {
+        [YJProgressHUD showProgress:@"" inView:self.view];
+        [[PBNetworkTools sharedTools] RequestGetIssueDetailByIdWithIssueID:self.issueListModel.IssueId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            self.dataListM = listM;
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                PBIssueDetailModel *issueDetailModel = [PBIssueDetailModel yy_modelWithDictionary:networkModel.Data];
+//                if (issueDetailModel.IssueId == nil || [issueDetailModel.IssueId isEqualToString:@""]) {
+//                    [YJProgressHUD showMessage:@"此问题已删除" inView:self.view];
+//                    [self dismissViewControllerAnimated:YES completion:nil];
+//                    return;
+//                }
+                self.issueDetailModel = issueDetailModel;
+                self.issueListModel = [PBIssueListModel yy_modelWithDictionary:self.issueDetailModel.issueObj];
+                [self.navigationItem.rightBarButtonItem setTitle:[NSString stringWithFormat:@"评论(%zd)",self.issueDetailModel.comments.count]];
+//                [self judgeRoleWith:issueDetailModel];
+                //附件
+                [self.associatedDocs addObjectsFromArray:self.issueDetailModel.base_files];
+                [YJProgressHUD hide];
+                [self setTableViewHeaderView];
+                [self RefreshListData];
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+    }
+}
+- (void)RefreshListData {
+    for (PBIssueAddModel *issueAddModel in self.dataListM) {
+        if ([issueAddModel.cellType isEqualToString:@"input"]) {
+            issueAddModel.inputStr = self.issueListModel.Title;
+        }else if ([issueAddModel.cellType isEqualToString:@"choose"]) {
+            PBIssueNavModel *navModel = [[PBIssueNavModel alloc] init];
+            if ([issueAddModel.key isEqualToString:@"IssueStatusID"]) {
+                if ([self.issueListModel.IssueStatus isEqualToString:@""]) {
+                    issueAddModel.navModel = nil;
+                }else {
+                    navModel.ItemDetailId = self.issueListModel.IssueStatus;
+                    navModel.ItemName = self.issueListModel.IssueStatusText;
+                    issueAddModel.navModel = navModel;
+                }
+            }else {
+                if ([self.issueListModel.IssueTypeID isEqualToString:@""]) {
+                    issueAddModel.navModel = nil;
+                }else {
+                    navModel.ItemDetailId = self.issueListModel.IssueTypeID;
+                    navModel.ItemName = self.issueListModel.IssueTypeText;
+                    issueAddModel.navModel = navModel;
+                }
+            }
+        } else if ([issueAddModel.cellType isEqualToString:@"person"]) {
+            issueAddModel.personArr = [NSArray yy_modelArrayWithClass:[PBPersonModel class] json: self.issueDetailModel.joiners];
+           
+        } else if ([issueAddModel.cellType isEqualToString:@"date"]) {
+            NSString *dateStr;
+            if ([self.issueListModel.EndDate isEqualToString:@""] || [self.issueListModel.EndDate isEqualToString:@"0001-01-01 00:00:00"]) {
+                dateStr = nil;
+            }else {
+                NSRange range = [self.issueListModel.EndDate rangeOfString:@"T"];
+                dateStr = [self.issueListModel.EndDate substringToIndex:range.location];
+            }
+            issueAddModel.dateStr = dateStr;
+        } else if ([issueAddModel.cellType isEqualToString:@"label"]) {
+            issueAddModel.labelArr = [NSArray yy_modelArrayWithClass:[PBTagModel class] json:self.issueDetailModel.tagList];
+        }
+    }
+    [self.tableView reloadData];
+}
+#pragma mark - 设置头视图
+- (void)setTableViewHeaderView {
+    CGFloat height = 177.f;
+    if (self.isAddIssue) {
+        if (self.selectedPhotos.count == 0 && self.base64Image == nil) {
+            height = 61.f;
+        }
+    }else {
+        if (self.associatedDocs.count == 0 && [self.issueListModel.ViewpointID isEqualToString:@""]) {
+            height = 61.f;
+        }
+    }
+    self.issueHeaderView.frame = CGRectMake(0, 0, self.view.width, height);
+    if (self.isAddIssue) {
+        if (self.base64Image) {
+            NSRange range = [self.base64Image rangeOfString:@"base64,"];
+            NSString *base64 = [self.base64Image substringFromIndex:range.location + range.length];
+            UIImage *image = [NSString imageDecoding:base64];
+            self.issueHeaderView.viewPointImage = image;
+        }
+        self.issueHeaderView.imageArr = self.selectedPhotos;
+    }else {
+        self.issueHeaderView.viewPointImageUrl = self.issueListModel.ImageUrl;
+        self.issueHeaderView.imageDocArr = self.associatedDocs;
+    }
+    self.tableView.tableHeaderView = self.issueHeaderView;
+}
+
+
+- (PBIssueHeaderView *)issueHeaderView {
+    __weak typeof(self) weakSelf = self;
+    if (_issueHeaderView == nil) {
+        _issueHeaderView = [[PBIssueHeaderView alloc] init];
+        _issueHeaderView.projectMdoel = self.projectModel;
+         RoleType roleType = PARTICIPANT;
+        if (self.isAddIssue || self.isIssueManage) {
+            roleType = CREATOR;
+        }
+        _issueHeaderView.roleType = roleType;
+        self.issueHeaderView.ChooseImageBlock = ^{
+            if ([weakSelf.issueListModel.DeleteMark isEqualToString:@"2"]) {
+                [YJProgressHUD showMessage:@"已归档,无法修改" inView:weakSelf.view];
+                return;
+            }
+            if (self.isAddIssue || weakSelf.isIssueManage) {
+                [weakSelf takePhotoLibrary];
+            }else {
+                [YJProgressHUD showMessage:@"无修改权限" inView:weakSelf.view];
+            }
+        };
+        self.issueHeaderView.DeleteImageBlock = ^(NSInteger index) {
+            if (weakSelf.isAddIssue) {
+                [weakSelf.selectedPhotos removeObjectAtIndex:index];
+//                [weakSelf.selectedAssets removeObjectAtIndex:index];
+                [weakSelf setTableViewHeaderView];
+            }else {
+                if ([weakSelf.issueListModel.DeleteMark isEqualToString:@"2"]) {
+                    [YJProgressHUD showMessage:@"已归档,无法修改" inView:weakSelf.view];
+                    return;
+                }
+                [weakSelf deleteRelationImageWithIndex:index];
+            }
+        };
+        self.issueHeaderView.OpenViewPointBlock = ^{
+            if (weakSelf.isAddIssue) {
+                
+            }else {
+                PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+                modelDisplayVC.hidesBottomBarWhenPushed = YES;
+                modelDisplayVC.projectIID = weakSelf.projectModel.bimcomposerid;
+                modelDisplayVC.modelID = weakSelf.issueListModel.ModelId;
+                modelDisplayVC.viewPointID = weakSelf.issueListModel.ViewpointID;
+                [weakSelf.navigationController pushViewController:modelDisplayVC animated:YES];
+            }
+        };
+    }
+    return _issueHeaderView;
+}
+
+- (void)getProjectParentId {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] getProjectParentIDWithProjectID:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            [self loadTypeAndStatusWith:networkModel.Data];
+        }else {
+            [YJProgressHUD showMessage:@"加载状态、类型失败" inView:self.view];
+        }
+    }];
+}
+- (void)loadTypeAndStatusWith:(NSString *)parentId {
+    __block NSArray *statusArr; __block NSArray *typeArr;
+    dispatch_semaphore_t sem = dispatch_semaphore_create(0);
+    NSInteger commandCount = 2;
+    __block NSInteger httpFinishCount = 0;
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        [[PBNetworkTools sharedTools] getIssueStatusWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if ([networkModel.Msg isEqualToString:@"OK"]) {
+                statusArr = networkModel.Data;
+                if (++httpFinishCount == commandCount) {
+                    dispatch_semaphore_signal(sem);
+                }
+            }else {
+                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+                return;
+            }
+        }];
+        
+        [[PBNetworkTools sharedTools] getIssueTypesWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if ([networkModel.Msg isEqualToString:@"OK"]) {
+                typeArr = networkModel.Data;
+                if (++httpFinishCount == commandCount) {
+                    dispatch_semaphore_signal(sem);
+                }
+            }else {
+                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
+                return;
+            }
+        }];
+        //如果全部请求没有返回则该线程会一直阻塞
+        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
+        NSLog(@"全部加载完成==================: %@", [NSThread currentThread]);
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSLog(@"更新视图UI update in main thread!:%@",[NSThread currentThread]);
+            [YJProgressHUD hide];
+            NSMutableArray *statusArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *dict in statusArr) {
+                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
+                [statusArrM addObject:issueNavModel];
+            }
+            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *dict in typeArr) {
+                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
+                [typeArrM addObject:issueNavModel];
+            }
+            self.statusAndTypeData = @{@"IssueStatus":statusArrM.mutableCopy, @"IssueTypes":typeArrM.mutableCopy};
+        });
+    });
+}
+
+- (void)setupUI {
+    if (_isAddIssue) {
+        self.view.backgroundColor = [UIColor z_colorWithR:216 G:216 B:216];
+    }else {
+        self.view.backgroundColor = [UIColor whiteColor];
+    }
+    UIView *linView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 3)];
+    linView.backgroundColor = WarningColor;
+    [self.view addSubview:linView];
+    self.linView = linView;
+    
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBIssueImageTableViewCell class] forCellReuseIdentifier:ImageCellID];
+    [self.tableView registerClass:[PBPositionTableViewCell class] forCellReuseIdentifier:PositionCellID];
+    [self.tableView registerClass:[PBInputTableViewCell class] forCellReuseIdentifier:InputCellID];
+    [self.tableView registerClass:[PBChooseTableViewCell class] forCellReuseIdentifier:chooseCellID];
+    [self.tableView registerClass:[PBPersonTableViewCell class] forCellReuseIdentifier:personCellID];
+    [self.tableView registerClass:[PBDateTableViewCell class] forCellReuseIdentifier:dateCellID];
+    [self.tableView registerClass:[PBDocListTableViewCell class] forCellReuseIdentifier:docCellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(3);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"取消";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    if (self.isAddIssue) {
+        UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveIssue)];
+        saveNavItem.enabled = YES;
+        self.navigationItem.rightBarButtonItem = saveNavItem;
+        self.navigationItem.rightBarButtonItem.enabled = NO;
+    }else {
+        UIBarButtonItem *commentsItem = [[UIBarButtonItem alloc] initWithTitle:@"评论" style:UIBarButtonItemStylePlain target:self action:@selector(commentsAction)];
+        self.navigationItem.rightBarButtonItem = commentsItem;
+    }
+}
+- (void)backItemAction {
+    [PBNoteCenter removeObserver:self];
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+- (void)commentsAction {
+    PBCommentsController *commentsVC = [[PBCommentsController alloc] init];
+    commentsVC.projectModel = self.projectModel;
+    commentsVC.issueListModel = self.issueListModel;
+    commentsVC.issueDetailModel = self.issueDetailModel;
+    commentsVC.CommentsCountBlock = ^(NSInteger count) {
+        [self.navigationItem.rightBarButtonItem setTitle:[NSString stringWithFormat:@"评论(%zd)",count]];
+    };
+    [self.navigationController pushViewController:commentsVC animated:YES];
+}
+- (void)saveIssue {
+    if (self.selectedPhotos.count == 0) {
+        [YJProgressHUD showProgress:@"" inView:self.view];
+        [self saveIssueDataWithFileId:@""];
+    }else {
+        [self uploadFileWithFile:self.selectedPhotos];
+    }
+}
+- (void)saveIssueDataWithFileId:(NSString *)fileId {
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    for (PBIssueAddModel *issueAddModel in self.dataListM) {
+    if ([issueAddModel.cellType isEqualToString:@"input"]) {
+            [dictM setObject:issueAddModel.inputStr == nil ? @"" : issueAddModel.inputStr forKey:issueAddModel.key];
+        }else if ([issueAddModel.cellType isEqualToString:@"choose"]) {
+            if ([issueAddModel.key isEqualToString:@"IssueTypeId"]) {
+                [dictM setObject:issueAddModel.navModel.ItemDetailId forKey:issueAddModel.key];
+            }
+        }else if ([issueAddModel.cellType isEqualToString:@"person"]) {
+            NSMutableString *strM = [[NSMutableString alloc] init];
+            for (PBPersonModel *personModel in issueAddModel.personArr) {
+                [strM appendString:[NSString stringWithFormat:@"%@,",personModel.UserId]];
+            }
+            [dictM setObject:strM.copy == nil ? @"" : strM.copy  forKey:issueAddModel.key];
+        }else if ([issueAddModel.cellType isEqualToString:@"date"]) {
+            [dictM setObject:issueAddModel.dateStr== nil ? @"" : issueAddModel.dateStr forKey:issueAddModel.key];
+        }
+    }
+    [dictM setObject:self.projectModel.organizeid forKey:@"OrganizeId"];
+    [dictM setObject:fileId forKey:@"ImageIds"];
+    if (self.viewPointStr) {
+        [dictM setObject:self.modelID forKey:@"ModelID"];
+        [dictM setObject:self.base64Image forKey:@"ImageUrl"];
+        [dictM setObject:self.viewPointStr forKey:@"ViewPointID"];
+    }else {
+        [dictM setObject:@"" forKey:@"ModelID"];
+        [dictM setObject:@"" forKey:@"ImageUrl"];
+        [dictM setObject:@"" forKey:@"ViewPointID"];
+    }
+    [[PBNetworkTools sharedTools] RequestSaveIssueWithData:dictM andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"保存数据失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD showSuccess:@"保存成功" inview:self.view];
+            if (self.SaveSuccessBlock) {
+                self.SaveSuccessBlock();
+            }
+            [self dismissViewControllerAnimated:YES completion:nil];
+        }else {
+            [YJProgressHUD showMessage:@"保存数据失败" inView:self.view];
+        }
+    }];
+}
+
+- (void)uploadFileWithFile:(NSArray *)files {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSString *issueID = self.issueListModel.IssueId;
+    if (self.isAddIssue) {
+        issueID = @"";
+    }
+    [[PBNetworkTools sharedTools] UploadImagesWithFiles:files andIssueID:issueID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            if (self.isAddIssue) {
+                NSMutableString *strM = [[NSMutableString alloc] init];
+                NSString *fileID = @"";
+                for (NSDictionary *obj in networkModel.Data) {
+                    [strM appendFormat:@"%@,",[obj valueForKey:@"bf_guid"]];
+                }
+                if([strM length] > 0){
+                    fileID = [strM substringToIndex:([strM length]-1)];
+                }
+                [self saveIssueDataWithFileId:fileID];
+            }else {
+                [YJProgressHUD hide];
+                [self.associatedDocs addObjectsFromArray:networkModel.Data];
+                [self setTableViewHeaderView];
+            }
+        }else {
+            [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
+        }
+    }];
+}
+
+- (void)positionMoreFunctionsWithIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    NSString *title = @"图纸定位";
+    NSString *action1Title = @"重新选择图纸定位";
+    NSString *action2Title = @"清空图纸定位";
+    if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
+        title = @"视点定位";
+        action1Title = @"重新选择视点定位";
+        action2Title = @"清空视点定位";
+    }
+    UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:title message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
+    
+    UIAlertAction *action1 = [UIAlertAction actionWithTitle:action1Title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+        PBIssueModelListController *modelListVC = [[PBIssueModelListController alloc] init];
+        modelListVC.powerArr = appDelegate.powerArr;
+        modelListVC.projectModel = self.projectModel;
+        modelListVC.issueAddModel = issueAddModel;
+        [self.navigationController pushViewController:modelListVC animated:YES];
+    }];
+    UIAlertAction *action2 = [UIAlertAction actionWithTitle:action2Title style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        NSIndexPath *path;
+        if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
+            path = [NSIndexPath indexPathForRow:0 inSection:0];
+            issueAddModel.modelsModel = nil;
+            issueAddModel.veiwPointModel = nil;
+        }else {
+            path = [NSIndexPath indexPathForRow:1 inSection:0];
+            issueAddModel.modelsModel = nil;
+            issueAddModel.drawingsInfoModel = nil;
+            issueAddModel.drawingposModel = nil;
+        }
+        if (self.isAddIssue) {
+            [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
+        }else {
+            if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
+                NSDictionary *viewPointDic = @{
+                                               @"modelID" : @"",
+                                               @"viewPointID" : @""
+                                               };
+                [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:viewPointDic andDraw:nil andIndexPath:path];
+            }else {
+                NSDictionary *drawDic = @{
+                                          @"modelID" : @"",
+                                          @"imageID" : @"",
+                                          @"position" : @"",
+                                          };
+                [self updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:nil andLUserIDStr:nil andEndDate:nil andViewPoint:nil andDraw:drawDic andIndexPath:path];
+            }
+        }
+    }];
+    UIAlertAction *action3 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [actionSheet addAction:action1];
+    [actionSheet addAction:action2];
+    [actionSheet addAction:action3];
+    [self presentViewController:actionSheet animated:YES completion:nil];
+}
+#pragma mark - Table view data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataListM.count - 1 + self.issueDetailModel.relationFiles.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    __weak typeof(self) weakSelf = self;
+        if (indexPath.row == 0) {
+        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row];
+        PBInputTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:InputCellID forIndexPath:indexPath];
+        cell.issueAddModel = issueAddModel;
+        cell.EditTextBlock = ^(NSString *text) {
+            PBEditTextController *editTextVC = [[PBEditTextController alloc] init];
+            editTextVC.text = text;
+            editTextVC.titleText = issueAddModel.title;
+            editTextVC.prompt = issueAddModel.prompt;
+            editTextVC.CompleteEditTextBlock = ^(NSString *text) {
+                issueAddModel.inputStr = text;
+                [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                [self updateCompletionIndicator];
+            };
+            [self.navigationController pushViewController:editTextVC animated:YES];
+        };
+        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+        return cell;
+    }else if (indexPath.row == 1) {
+        PBIssueAddModel *leftIssueAddModel = self.dataListM[indexPath.row];
+        PBIssueAddModel *rightIssueAddModel = self.dataListM[indexPath.row + 1];
+        PBChooseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:chooseCellID forIndexPath:indexPath];
+        cell.leftIssueAddModel = leftIssueAddModel;
+        cell.rightIssueAddModel = rightIssueAddModel;
+        cell.ChooseBlock = ^(NSInteger index) {
+            [PBKeyWindow addSubview:self.chooseView];
+            if (self.isAddIssue) {
+                PBIssueNavModel *navModel = [[PBIssueNavModel alloc] init];
+                navModel.ItemName = @"打开";
+                leftIssueAddModel.navModel = navModel;
+                self.chooseView.leftIssueAddModel = leftIssueAddModel;
+            }else {
+                self.chooseView.leftIssueAddModel = leftIssueAddModel;
+            }
+            self.chooseView.rightIssueAddModel = rightIssueAddModel;
+            self.chooseView.statusAndTypeData = self.statusAndTypeData;
+            self.chooseView.index = index;
+            self.chooseView.ChooseCompleteBlock = ^(BOOL isSelectStatus, BOOL isSelectType) {
+                if (isSelectStatus == NO & isSelectType == NO) {
+                    return;
+                }
+                [weakSelf updateCompletionIndicator];
+                if (weakSelf.isAddIssue) {
+                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                }else {
+                    if (isSelectStatus) {
+                        NSString *statusId = leftIssueAddModel.navModel.ItemDetailId;
+                        [weakSelf ModifyIssueStatusWithstateID:statusId andIndexPath:indexPath];
+                    }else {
+                        NSString *typeID = rightIssueAddModel.navModel.ItemDetailId;
+                        [weakSelf ModifyIssueTypeWithTypeID:typeID andIndexPath:indexPath];
+                    }
+                }
+            };
+            [self.chooseView show];
+        };
+        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+        return cell;
+    }else if (indexPath.row == 2) {
+        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row + 1];
+        PBPersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        cell.issueAddModel = issueAddModel;
+        cell.EditPersonBlock = ^{
+            [PBKeyWindow addSubview:self.editPersonView];
+            self.editPersonView.projectModel = self.projectModel;
+            self.editPersonView.issueListModel = self.issueListModel;
+            self.editPersonView.issueAddModel = issueAddModel;
+            self.editPersonView.EditCompleteBlock = ^{
+                [weakSelf updateCompletionIndicator];
+                if (weakSelf.isAddIssue) {
+                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                }else {
+                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+//                    NSString *ruserId = nil; NSString *luserId = nil;
+//                    NSMutableString *strM = [[NSMutableString alloc] init];
+//                    for (PBPersonModel *personModel in issueAddModel.personArr) {
+//                        [strM appendFormat:@"%@,",personModel.UserId];
+//                    }
+//                    if (indexPath.row == 5) {
+//                        ruserId = strM.copy;
+//                    }else {
+//                        luserId = strM.copy;
+//                    }
+//                    [weakSelf updaIssueWithStatusId:nil andTypeId:nil andRUserIDStr:ruserId andLUserIDStr:luserId andEndDate:nil andViewPoint:nil andDraw:nil andIndexPath:indexPath];
+                }
+            };
+            [self.editPersonView show];
+        };
+        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+        return cell;
+    }else if (indexPath.row == 3) {
+        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row + 1];
+        PBDateTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dateCellID forIndexPath:indexPath];
+        cell.issueAddModel = issueAddModel;
+        cell.EditDateBlock = ^{
+            [PBKeyWindow addSubview:self.editDateView];
+            self.editDateView.IssueAddModel = issueAddModel;
+            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+                [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+            if (weakSelf.isAddIssue) {
+                self.editDateView.stareDate = [dateFormatter stringFromDate:[NSDate date]];
+            }else {
+                NSRange range = [self.issueListModel.CreateDate rangeOfString:@"T"];
+                self.editDateView.stareDate = [self.issueListModel.CreateDate substringToIndex:range.location];
+            }
+            self.editDateView.EditCompleteBlock = ^{
+                [weakSelf updateCompletionIndicator];
+                if (weakSelf.isAddIssue){
+                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                }else {
+                    [weakSelf ModifyEndDateWithstateDate:issueAddModel.dateStr andIndexPath:indexPath];
+                }
+            };
+            [self.editDateView show];
+        };
+        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+        return cell;
+    }else if (indexPath.row == 4) {
+        PBIssueAddModel *issueAddModel = self.dataListM[indexPath.row + 1];
+        PBPersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:personCellID forIndexPath:indexPath];
+        cell.isLabel = YES;
+        cell.issueAddModel = issueAddModel;
+        cell.EditPersonBlock = ^{
+            [PBKeyWindow addSubview:self.editLabelView];
+            self.editLabelView.projectModel = self.projectModel;
+            self.editLabelView.issueAddModel = issueAddModel;
+            self.editLabelView.EditCompleteBlock = ^{
+                if (weakSelf.isAddIssue) {
+                    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+                }else {
+                    NSMutableString *strM = [[NSMutableString alloc] init];
+                    for (PBTagModel *tagModel in issueAddModel.labelArr) {
+                        [strM appendFormat:@"%@,",tagModel.it_guid];
+                    }
+                    if([strM length] > 0){
+                        NSString *tagStr = [strM substringToIndex:([strM length]-1)];
+                        [weakSelf OverrideIssueTagWithTagIds:tagStr andIndexPath:indexPath];
+                    }else {
+                        [weakSelf OverrideIssueTagWithTagIds:@"" andIndexPath:indexPath];
+                    }
+                }
+            };
+            [self.editLabelView show];
+        };
+        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+        return cell;
+    }else {
+        NSInteger index = indexPath.row - (self.dataListM.count - 1);
+        PBDocModel *docModel = [PBDocModel yy_modelWithDictionary:self.issueDetailModel.relationFiles[index]];
+        PBDocListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:docCellID forIndexPath:indexPath];
+        cell.docModel = docModel;
+        return cell;
+    }
+}
+//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+//    if (indexPath.row >= (self.dataListM.count - 1)) {
+//        return 64.f;
+//    }
+//    return 100;
+//}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row >= (self.dataListM.count - 1)) {
+        NSInteger index = indexPath.row - (self.dataListM.count - 1);
+        PBDocModel *docModel = [PBDocModel yy_modelWithDictionary:self.issueDetailModel.relationFiles[index]];
+        if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".dwg"]){
+            [self downDwgFileWith:docModel];
+        }else if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".mp4"] || [[docModel.FileExtensions lowercaseString] isEqualToString:@".mp3"]){
+            [self downFileWith:docModel];
+//        }else if ([[docModel.FileExtensions lowercaseString] isEqualToString:@".pdf"]){
+//            [self downPDFFileWith:docModel];
+        }else {
+            NSString *downUrl = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl,self.projectModel.bimcomposerid,docModel.FileId];
+            NSString *downUrlUtF8 = [downUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@":/?=&"].invertedSet];
+            NSString *firstUrl = [NSString stringWithFormat:@"%@/api/DocViewer/Viewer/Show?downloadUrl=%@&tempNameAfterDownload=%@", BaseUrl,downUrlUtF8 ,docModel.FileName];
+            NSString *docUrl = [NSString stringWithFormat:@"%@/Content/PDFJS/web/Viewer.html?file=%@", BaseUrl, [firstUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@".:/?=&%"].invertedSet]];
+            
+            
+            
+            
+            PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+            previewDocVC.projectModel = self.projectModel;
+            previewDocVC.name = docModel.FileName;
+            previewDocVC.docUrl = docUrl;
+            previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+            [self presentViewController:previewDocVC animated:NO completion:nil];
+        }
+    }
+}
+- (void)downFileWith:(PBDocModel *)docModel {
+    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+    NSFileManager * manager = [NSFileManager defaultManager];
+    if (![manager fileExistsAtPath :folderPath]){
+        [self downLoadFileWith:docModel];
+        return;
+    }
+    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
+    NSString * fileName;
+    NSString * fileAbsolutePath = nil;
+    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
+        if ([fileName isEqualToString:[NSString stringWithFormat:@"%@%@",docModel.FileId, docModel.FileExtensions]]) {
+            fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
+        }
+    }
+    if (fileAbsolutePath == nil) {
+        [self downLoadFileWith:docModel];
+    }else {
+        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+        previewDocVC.path = fileAbsolutePath;
+        previewDocVC.name = docModel.FileName;
+        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:previewDocVC animated:NO completion:nil];
+    }
+}
+- (void)downLoadFileWith:(PBDocModel *)docModel {
+    [YJProgressHUD showProgress:@"正在下载文件" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestDownLoadDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:docModel.FileId andExtension:docModel.FileExtensions andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"下载失败" inView:nil];
+            NSLog(@"%@",error);
+            return;
+        }
+        NSLog(@"filePath:%@",filePath);
+        NSString *str = [filePath absoluteString];
+        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
+        [YJProgressHUD hide];
+        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+        previewDocVC.path = str;
+        previewDocVC.name = docModel.FileName;
+        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:previewDocVC animated:NO completion:nil];
+    }];
+}
+//- (void)downPDFFileWith:(PBDocModel *)docModel {
+//    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+//        NSFileManager * manager = [NSFileManager defaultManager];
+//        if (![manager fileExistsAtPath :folderPath]){
+//            [self downLoadPDfFileWith:docModel.FileId andName:docModel.FileName];
+//            return;
+//        }
+//        NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
+//        NSString * fileName;
+//        NSString * fileAbsolutePath = nil;
+//        while ((fileName = [childFilesEnumerator nextObject]) != nil ){
+//            if ([fileName isEqualToString:[NSString stringWithFormat:@"%@.pdf",docModel.FileId]]) {
+//                fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
+//            }
+//        }
+//        if (fileAbsolutePath == nil) {
+//            [self downLoadPDfFileWith:docModel.FileId andName:docModel.FileName];
+//        }else {
+//            PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+//            previewDocVC.path = fileAbsolutePath;
+//            previewDocVC.name = docModel.FileName;
+//            previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+//            [self presentViewController:previewDocVC animated:NO completion:nil];
+//        }
+//}
+//- (void)downLoadPDfFileWith:(NSString *)fileID andName:(NSString *)name {
+//    [YJProgressHUD showProgress:@"正在下载文件" inView:self.view];
+//    [[PBNetworkTools sharedTools] RequestDownLoadDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:fileID andExtension:@".pdf" andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
+//        if (error) {
+//            [YJProgressHUD showMessage:@"下载失败" inView:nil];
+//            NSLog(@"%@",error);
+//            return;
+//        }
+//        NSLog(@"filePath:%@",filePath);
+//        NSString *str = [filePath absoluteString];
+//        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
+//        [YJProgressHUD hide];
+//        PBPreviewDocViewController *previewDocVC  = [[PBPreviewDocViewController alloc] init];
+//        previewDocVC.path = str;
+//        previewDocVC.name = name;
+//        previewDocVC.modalPresentationStyle = UIModalPresentationFullScreen;
+//        [self presentViewController:previewDocVC animated:NO completion:nil];
+//    }];
+//}
+- (void)downDwgFileWith:(PBDocModel *)docModel {
+    NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+    NSFileManager * manager = [NSFileManager defaultManager];
+    if (![manager fileExistsAtPath :folderPath]){
+        [self downLoadDwgFileWith:docModel.FileId];
+        return;
+    }
+    NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];
+    NSString * fileName;
+    NSString * fileAbsolutePath = nil;
+    while ((fileName = [childFilesEnumerator nextObject]) != nil ){
+        if ([fileName isEqualToString:[NSString stringWithFormat:@"%@.dwg",docModel.FileId]]) {
+            fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];
+        }
+    }
+    if (fileAbsolutePath == nil) {
+        [self downLoadDwgFileWith:docModel.FileId];
+    }else {
+//        DwgViewController *destViewController = [DwgViewController new];
+        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"DwgViewController" bundle:nil];
+        DwgViewController *destViewController = [storyboard instantiateInitialViewController];
+        destViewController.cadFileName = fileAbsolutePath;
+        destViewController.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:destViewController animated:YES completion:nil];
+        
+    }
+}
+- (void)downLoadDwgFileWith:(NSString *)fileID {
+    [YJProgressHUD showProgress:@"正在下载DWG文件" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestDownLoadIssueDwgFileWithProjectID:self.projectModel.bimcomposerid andFileID:fileID andExtension:@".dwg" andCallBack:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"下载失败" inView:nil];
+            NSLog(@"%@",error);
+            return;
+        }
+        NSLog(@"filePath:%@",filePath);
+        NSString *str = [filePath absoluteString];
+        str = [str stringByReplacingOccurrencesOfString:@"file://" withString:@""];
+        [YJProgressHUD hide];
+        DwgViewController *destViewController = [DwgViewController new];
+        destViewController.cadFileName = str;
+        destViewController.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:destViewController animated:YES completion:nil];
+    }];
+}
+- (void)ModifyIssueTypeWithTypeID:(NSString *)typeID andIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] ModifyIssueTypeWithIssueID:self.issueListModel.IssueId andID:typeID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+        }else {
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+        }
+    }];
+}
+- (void)ModifyIssueStatusWithstateID:(NSString *)stateID andIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] ModifyIssueStatusWithIssueID:self.issueListModel.IssueId andID:stateID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+        }else {
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+        }
+    }];
+}
+- (void)ModifyEndDateWithstateDate:(NSString *)date andIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] ModifyIssueEndDateWithIssueID:self.issueListModel.IssueId andEndData:date andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+        }else {
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+        }
+    }];
+}
+- (void)OverrideIssueTagWithTagIds:(NSString *)tagIds andIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] OverrideIssueTagWithIssueID:self.issueListModel.IssueId andRit_tagIds:tagIds andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改标签失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+        }else {
+            [YJProgressHUD showMessage:@"修改标签失败" inView:self.view];
+        }
+    }];
+}
+
+
+- (void)updaIssueWithStatusId:(NSString *)statusId andTypeId:(NSString *)typeId andRUserIDStr:(NSString *)ruserIDs andLUserIDStr:(NSString *)luserIDs andEndDate:(NSString *)endDate andViewPoint:(NSDictionary *)viewPointDic andDraw:(NSDictionary *)drawDic andIndexPath:(NSIndexPath *)indexPath {
+    if ([self.issueListModel.DeleteMark isEqualToString:@"2"]) {
+        [YJProgressHUD showMessage:@"已归档,无法修改" inView:self.view];
+        return;
+    }
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestUpdateIssueWithIssueID:self.issueListModel.IssueId andIssueStatusID:statusId andIssueTypeID:typeId andRUserIDStr:ruserIDs andLUserIDStr:luserIDs andEndDate:endDate andViewPoint:viewPointDic andDraw:drawDic andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        if ([str isEqualToString:@"success"]) {
+            [YJProgressHUD hide];
+            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
+            
+        }else {
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+        }
+    }];
+}
+
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+
+- (void)pushLFImagePickerController {
+    NSInteger maxImageCount = 9;
+    if (!self.isAddIssue) {
+        maxImageCount = 9 - self.associatedDocs.count;
+    }else {
+        maxImageCount = 9 - self.selectedPhotos.count;
+    }
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:maxImageCount delegate:self];
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if (self.isAddIssue) {
+//        imagePicker.selectedAssets = self.selectedAssets;
+    }
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+//    NSMutableArray *assetsArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            [imageArrM addObject:originalImage];
+//            [assetsArrM addObject:result.asset];
+        }
+    }
+    if (_isAddIssue) {
+//        self.selectedAssets = assetsArrM;
+        [self.selectedPhotos addObjectsFromArray:imageArrM.copy];
+        [self setTableViewHeaderView];
+    }else {
+        [self uploadFileWithFile:imageArrM.copy];
+    }
+}
+
+- (void)deleteRelationImageWithIndex:(NSInteger)index {
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"确定删除?" message:@"" preferredStyle:UIAlertControllerStyleAlert];
+    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+        [YJProgressHUD showProgress:@"" inView:self.view];
+        NSDictionary *dict = self.associatedDocs[index];
+        [[PBNetworkTools sharedTools] RemoveIssueDocRelWithIssueID:self.issueListModel.IssueId andFileId:[dict valueForKey:@"bf_guid"] andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"删除失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                [YJProgressHUD hide];
+                [self.associatedDocs removeObjectAtIndex:index];
+                [self setTableViewHeaderView];
+            }else {
+                [YJProgressHUD showMessage:@"删除失败" inView:self.view];
+            }
+        }];
+    }];
+    [alertVC addAction:cancelAction];
+    [alertVC addAction:determineAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+
+- (void)setIsAddIssue:(BOOL)isAddIssue {
+    _isAddIssue = isAddIssue;
+    if (_isAddIssue) {
+        self.title = @"新建问题";
+    }else {
+        self.title = @"详情";
+    }
+}
+
+- (void)setIssueListModel:(PBIssueListModel *)issueListModel {
+    _issueListModel = issueListModel;
+}
+- (NSMutableArray *)imageDocArr {
+    if (_imageDocArr == nil) {
+        _imageDocArr = [[NSMutableArray alloc] init];
+    }
+    return _imageDocArr;
+}
+
+- (PBChooseView *)chooseView {
+    if (_chooseView == nil) {
+        _chooseView  = [[PBChooseView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _chooseView.visualViewHeight = 468.f;
+        _chooseView.isAdd = self.isAddIssue;
+    }
+    return _chooseView;
+}
+- (PBEditPersonView *)editPersonView {
+    if (_editPersonView == nil) {
+        _editPersonView = [[PBEditPersonView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _editPersonView.visualViewHeight = 468.f + bottomH;
+    }
+    return _editPersonView;
+}
+- (PBEditLableView *)editLabelView {
+    if (_editLabelView == nil) {
+        _editLabelView = [[PBEditLableView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat bottomH = 0.f;
+        if (IS_IPHONE_X) {
+            bottomH = 34.f;
+        }
+        _editLabelView.visualViewHeight = 465.f + bottomH;;
+    }
+    return _editLabelView;
+}
+- (PBEditDateView *)editDateView {
+    if (_editDateView == nil) {
+        _editDateView = [[PBEditDateView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editDateView.visualViewHeight = 468.f;
+    }
+    return _editDateView;
+}
+- (NSMutableArray *)selectedPhotos {
+    if (_selectedPhotos == nil) {
+        _selectedPhotos = [[NSMutableArray alloc] init];
+    }
+    return _selectedPhotos;
+}
+- (NSMutableArray *)selectedAssets {
+    if (_selectedAssets == nil) {
+        _selectedAssets = [[NSMutableArray alloc] init];
+    }
+    return _selectedAssets;
+}
+- (NSMutableArray *)associatedDocs {
+    if (_associatedDocs == nil) {
+        _associatedDocs = [[NSMutableArray alloc] init];
+    }
+    return _associatedDocs;
+}
+- (void)setStatusAndTypeData:(NSDictionary *)statusAndTypeData {
+    _statusAndTypeData = statusAndTypeData;
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (void)setViewPointStr:(NSString *)viewPointStr {
+    _viewPointStr = viewPointStr;
+}
+- (void)setBase64Image:(NSString *)base64Image {
+    _base64Image = base64Image;
+}
+
+- (void)setModelID:(NSString *)modelID {
+    _modelID = modelID;
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+
+
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.h
new file mode 100644
index 0000000..6c2f3c3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.h
@@ -0,0 +1,18 @@
+//
+//  PBCommentsController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBIssueDetailModel;
+@class PBIssueListModel;
+@interface PBCommentsController : UITableViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBIssueDetailModel *issueDetailModel;
+@property (nonatomic, strong) PBIssueListModel *issueListModel;
+@property (nonatomic, copy) void (^CommentsCountBlock)(NSInteger count);
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.m
new file mode 100644
index 0000000..77b705a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBCommentsController.m
@@ -0,0 +1,262 @@
+//
+//  PBCommentsController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBCommentsController.h"
+#import "PBProjectModel.h"
+#import "PBIssueDetailModel.h"
+#import "PBDocModel.h"
+#import "PBCommentsModel.h"
+#import "PBPreviewDocViewController.h"
+#import "PBAddCommentsController.h"
+#import "PBNetworkModel.h"
+#import "PBPromptView.h"
+#import "PBPublishCommentCell.h"
+#import "PBIssueListModel.h"
+#import "PBCommentsCell.h"
+#import "PBImageCommentsCell.h"
+static NSString *const CommentsCellID = @"CommentsCellID";
+static NSString *const ImageCommentsCellID = @"ImageCommentsCellID";
+@interface PBCommentsController ()<UIGestureRecognizerDelegate>
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) NSMutableArray *commentM;
+@end
+
+@implementation PBCommentsController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    [self setupNav];
+    [self setTableView];
+}
+
+- (void)setupNav {
+    if (self.commentM.count == 0) {
+        self.title = @"评论";
+    }else {
+        self.title = [NSString stringWithFormat:@"评论(%zd)",self.commentM.count];
+    }
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"   ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *addCommentsItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"] style:UIBarButtonItemStylePlain target:self action:@selector(commentsAction)];
+    self.navigationItem.rightBarButtonItem = addCommentsItem;
+  
+}
+- (void)backItemAction {
+    self.issueDetailModel.comments = self.commentM.copy;
+    if (self.CommentsCountBlock) {
+        self.CommentsCountBlock(self.issueDetailModel.comments.count);
+    }
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)commentsAction {
+    PBAddCommentsController *addCommentsVC = [[PBAddCommentsController alloc] init];
+    addCommentsVC.projectModel = self.projectModel;
+    addCommentsVC.issueListModel = self.issueListModel;
+    addCommentsVC.issueDetailModel = self.issueDetailModel;
+    addCommentsVC.SaveCommentsBlock = ^(NSDictionary *commentsDic) {
+        [self.commentM insertObject:commentsDic atIndex:0];
+        self.title = [NSString stringWithFormat:@"评论(%zd)",self.commentM.count];
+        self.promptView.hidden = YES;
+        [self.tableView reloadData];
+    };
+    [self.navigationController pushViewController:addCommentsVC animated:YES];
+}
+- (void)loadCommentsList {
+//    [YJProgressHUD showProgress:@"" inView:self.view];
+//    [[PBNetworkTools sharedTools] RequestGetIssueCommentsByIdWithIssueId:self.issueListModel.IssueId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+//        if (error) {
+//            NSLog(@"%@",error);
+//            [YJProgressHUD showMessage:@"加载评论失败" inView:self.view];
+//            return;
+//        }
+//        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+//        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+//        if (networkModel.Ret == 1) {
+//            NSArray *comments = networkModel.Data;
+//            self.issueDetailModel.comments = comments;
+//            self.title = [NSString stringWithFormat:@"评论(%zd)",self.issueDetailModel.comments.count];
+//            if (comments.count == 0) {
+//                [YJProgressHUD hide];
+//                self.promptView.hidden = NO;
+//                return;
+//            }else {
+//                self.promptView.hidden = YES;
+//            }
+//            NSMutableArray *commentsM = [[NSMutableArray alloc] init];
+//            for (NSDictionary *obj in comments) {
+//                PBCommentsModel *commentsModel = [PBCommentsModel yy_modelWithDictionary:obj];
+//                [commentsM addObject:commentsModel];
+//            }
+//            self.commentM = commentsM;
+//            [YJProgressHUD hide];
+//            [self.tableView reloadData];
+//        }else {
+//            [YJProgressHUD showMessage:@"加载评论失败" inView:self.view];
+//        }
+//    }];
+}
+
+- (void)setTableView {
+    [self.tableView registerClass:[PBCommentsCell class] forCellReuseIdentifier:CommentsCellID];
+    [self.tableView registerClass:[PBImageCommentsCell class] forCellReuseIdentifier:ImageCommentsCellID];
+    self.tableView.estimatedRowHeight = 80.f;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView addSubview:self.promptView];
+    if (self.commentM.count == 0) {
+        self.promptView.hidden = NO;
+    }else {
+        self.promptView.hidden = YES;
+    }
+}
+
+#pragma mark - Table view data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.commentM.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBCommentsModel *commentsModel = [PBCommentsModel yy_modelWithDictionary:self.commentM[indexPath.row]];
+    if ([commentsModel.contenttype isEqualToString:@"text"]) {
+        PBCommentsCell *cell = [tableView dequeueReusableCellWithIdentifier:CommentsCellID forIndexPath:indexPath];
+        cell.commentsModel = commentsModel;
+        cell.deleteCommentsBlock = ^{
+            [self creatAlertControllerWithDeleteAndData:commentsModel andIndex:indexPath];
+        };
+        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+        return cell;
+    }else {
+        PBImageCommentsCell *cell = [tableView dequeueReusableCellWithIdentifier:ImageCommentsCellID forIndexPath:indexPath];
+        cell.projectModel = self.projectModel;
+        cell.commentsModel = commentsModel;
+        cell.deleteCommentsBlock = ^{
+            [self creatAlertControllerWithDeleteAndData:commentsModel andIndex:indexPath];
+        };
+        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+        return cell;
+    }
+}
+
+- (void)creatAlertControllerWithDeleteAndData:(PBCommentsModel *)commentsModel andIndex:(NSIndexPath *)indexPath {
+    NSLog(@"fenzu:%zd-row:%zd",indexPath.section, indexPath.row);
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除这条评论吗?" preferredStyle:UIAlertControllerStyleAlert];
+    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+        [self deleteCommentsWith:commentsModel andIndexPath:indexPath];
+    }];
+    [alertVC addAction:cancelAction];
+    [alertVC addAction:determineAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+- (void)deleteCommentsWith:(PBCommentsModel *)commentsModel andIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestDeleteMessageWithMessageID:commentsModel.issue_talkid andIssueID:commentsModel.issueid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"删除评论失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.commentM removeObjectAtIndex:indexPath.row];
+//            [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+            if (self.commentM.count == 0) {
+                self.title = @"评论";
+                self.promptView.hidden = NO;
+            }else {
+                self.title = [NSString stringWithFormat:@"评论(%zd)",self.commentM.count];
+                self.promptView.hidden = YES;
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+
+#pragma  mark - Set方法
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setIssueDetailModel:(PBIssueDetailModel *)issueDetailModel {
+    _issueDetailModel = issueDetailModel;
+    self.commentM = issueDetailModel.comments.mutableCopy;
+}
+
+#pragma mark - 懒加载
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] initWithFrame:self.tableView.bounds];
+        _promptView.imageV.image = [UIImage imageNamed:@"Issue_list_empty"];
+        _promptView.textL.text = @"暂无评论点击右上角加号新增评论";
+//        NSMutableAttributedString *noteStr = [[NSMutableAttributedString alloc] initWithString:_promptView.textL.text];
+//        NSRange redRange = NSMakeRange([[noteStr string] rangeOfString:@"加号"].location, [[noteStr string] rangeOfString:@"加号"].length);
+//        //需要设置的位置
+//        [noteStr addAttribute:NSForegroundColorAttributeName value:IndicatedColor range:redRange];
+//        //设置颜色
+//        [_promptView.textL setAttributedText:noteStr];
+    }
+    return _promptView;
+}
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.h
new file mode 100644
index 0000000..b54bfc7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.h
@@ -0,0 +1,16 @@
+//
+//  PBEditTextController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBEditTextController : UIViewController
+@property (nonatomic, copy) void(^CompleteEditTextBlock)(NSString *text);
+@property (nonatomic, copy) NSString *text;
+@property (nonatomic, copy) NSString *titleText;
+@property (nonatomic, copy) NSString *prompt;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.m
new file mode 100644
index 0000000..f62a2ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBEditTextController.m
@@ -0,0 +1,252 @@
+//
+//  PBEditTextController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBEditTextController.h"
+#import "IQKeyboardManager.h"
+#define maxTextCount 150
+@interface PBEditTextController ()<UITextViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UILabel *textLengthL;
+@property (nonatomic, weak) UILabel *promptL;
+@end
+
+@implementation PBEditTextController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [[IQKeyboardManager sharedManager] setEnable:NO];
+}
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+    [[IQKeyboardManager sharedManager] setEnable:YES];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+//        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    [self setupNav];
+    [self setupUI];
+}
+//- (void)viewWillAppear:(BOOL)animated {
+//    [super viewWillAppear:YES];
+//    //导航栏背景颜色
+//    [self.navigationController.navigationBar setBarTintColor:PBColor(35, 36, 41)];
+//    // 去掉导航条下边的线
+//    self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
+//    //返回按钮颜色
+//    self.navigationController.navigationBar.tintColor = [UIColor redColor];
+//    for (UIBarButtonItem *item in self.navigationItem.leftBarButtonItems) {
+//        [item setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blueColor]} forState:UIControlStateNormal];
+//    }
+//    for (UIBarButtonItem *item in self.navigationItem.rightBarButtonItems) {
+//        [item setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blueColor]} forState:UIControlStateNormal];
+//    }
+////    [item setTitleTextAttributes:@{NSForegroundColorAttributeName: IndicatedColor} forState:UIControlStateHighlighted];
+////    [item setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor lightGrayColor]} forState:UIControlStateDisabled];
+//
+//    //标题颜色
+//    [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor],NSFontAttributeName: [UIFont boldSystemFontOfSize:16]}];
+//}
+- (void)setupNav {
+//    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+//    backNav.title = @"取消";
+//    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+//    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStylePlain target:self action:@selector(saveText)];
+    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveText {
+    if(self.CompleteEditTextBlock) {
+        self.CompleteEditTextBlock(_textView.text);
+    }
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    bgView.layer.borderWidth = 1.f;
+    bgView.layer.borderColor = [[UIColor z_colorWithR:219 G:219 B:219] CGColor];
+    [self.view addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(10);
+        make.left.equalTo(self.view).offset(16);
+        make.right.equalTo(self.view).offset(-16);
+        make.height.equalTo(@250);
+    }];
+    
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= TitleColor;
+    textView.font = [UIFont systemFontOfSize:TitleFontSize];
+    [textView becomeFirstResponder];
+    textView.delegate = self;
+    textView.text = _text;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(16);
+        make.left.equalTo(bgView).offset(16);
+        make.right.equalTo(bgView).offset(-16);
+        make.bottom.equalTo(bgView).offset(-46);
+    }];
+    UILabel *promptL= [UILabel z_labelWithText:_prompt Color:IgnoreColor isBold:NO Font:TitleFontSize];
+    [bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+    if (_text.length != 0) {
+        promptL.hidden = YES;
+    }
+    
+    UIButton *clearAllBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Issue_editText_clearAll"]];
+    [clearAllBtn addTarget:self action:@selector(clearAllAction) forControlEvents:UIControlEventTouchUpInside];
+    [bgView addSubview:clearAllBtn];
+    [clearAllBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(bgView).offset(-11);
+        make.left.equalTo(bgView).offset(22);
+        make.size.mas_equalTo(CGSizeMake(79, 16));
+    }];
+    UILabel *textLengthL = [UILabel z_labelWithText:[NSString stringWithFormat:@"%lu/%d",(unsigned long)_text.length,maxTextCount] Color:DescColor isBold:NO Font:DescFontSize];
+    textLengthL.textAlignment = NSTextAlignmentRight;
+    [bgView addSubview:textLengthL];
+    [textLengthL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(clearAllBtn);
+        make.right.equalTo(bgView).offset(-16);
+        make.height.equalTo(@20);
+    }];
+    
+    self.textView = textView;
+    self.promptL = promptL;
+    self.textLengthL = textLengthL;
+}
+- (void)clearAllAction {
+    _text = @"";
+    _textView.text = _text;
+    self.promptL.hidden = NO;
+    _textLengthL.text = [NSString stringWithFormat:@"%lu/%d",(unsigned long)_text.length,maxTextCount];
+}
+- (void)setText:(NSString *)text {
+    _text = text;
+}
+- (void)setTitleText:(NSString *)titleText {
+    self.title = titleText;
+}
+- (void)setPrompt:(NSString *)prompt {
+    _prompt = prompt;
+}
+#pragma mark - UITextViewDelete
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
+ replacementText:(NSString *)text {
+    NSLog(@"%zd",textView.text.length);
+    NSLog(@"===shouldChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //获取高亮部分内容
+    //NSString * selectedtext = [textView textInRange:selectedRange];
+    //如果有高亮且当前字数开始位置小于最大限制时允许输入
+    if (selectedRange && pos) {
+        NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
+        NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
+        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
+        if (offsetRange.location < maxTextCount) {
+            return YES;
+        }
+        else{
+            return NO;
+        }
+    }
+    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    NSInteger caninputlen = maxTextCount - comcatstr.length;
+    if (caninputlen >= 0){
+        return YES;
+    }else{
+        NSInteger len = text.length + caninputlen;
+        //防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
+        NSRange rg = {0,MAX(len,0)};
+        if (rg.length > 0){
+            NSString *s = @"";
+            //判断是否只普通的字符或asc码(对于中文和表情返回NO)
+            BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
+            if (asc) {
+                s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
+            }else{
+                __block NSInteger idx = 0;
+                __block NSString  *trimString = @"";//截取出的字串
+                //使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
+                [text enumerateSubstringsInRange:NSMakeRange(0, [text length])
+                                         options:NSStringEnumerationByComposedCharacterSequences
+                                      usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
+                                          if (idx >= rg.length) {
+                                              *stop = YES; //取出所需要就break,提高效率
+                                              return ;
+                                          }
+                                          trimString = [trimString stringByAppendingString:substring];
+                                          idx++;
+                                      }];
+                s = trimString;
+            }
+            //rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
+            [textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
+            //既然是超出部分截取了,哪一定是最大限制了。
+            self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
+        }
+        return NO;
+    }
+}
+
+
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    NSLog(@"===DidChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //如果在变化中是高亮部分在变,就不要计算字符了
+    if (selectedRange && pos) {
+        return;
+    }
+    NSString  *nsTextContent = textView.text;
+    NSInteger existTextNum = nsTextContent.length;
+    if (existTextNum > maxTextCount){
+        //截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
+        NSString *s = [nsTextContent substringToIndex:maxTextCount];
+        [textView setText:s];
+    }
+    //不让显示负数 口口日
+    self.textLengthL.text = [NSString stringWithFormat:@"%ld/%d",MAX(0,maxTextCount - existTextNum),maxTextCount];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.h
new file mode 100644
index 0000000..a48a47e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.h
@@ -0,0 +1,28 @@
+//
+//  PBIssueBaseController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "PBNetworkModel.h"
+#import "PBIssueNavModel.h"
+#import "PBProjectModel.h"
+#import "PBPromptView.h"
+@interface PBIssueBaseController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *powerArr;
+@property (nonatomic,strong) UITableView *tableView;
+@property (nonatomic,strong) NSMutableArray *issueArrM;
+@property (nonatomic, strong) NSMutableArray *dropdownMenuArrM;
+@property (nonatomic, assign) NSInteger statusSelectIndex;
+@property (nonatomic, assign) NSInteger typeSelectIndex;
+@property (nonatomic, assign) NSInteger userSelectIndex;
+@property (nonatomic, assign) NSInteger archiveSelectIndex;
+@property (nonatomic, copy) NSString *searchText;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) NSDictionary *statusAndTypeData;
+@property (nonatomic, strong) UILabel *countL;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.m
new file mode 100644
index 0000000..3f2cfcf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueBaseController.m
@@ -0,0 +1,355 @@
+//
+//  PBIssueBaseController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueBaseController.h"
+#import "PBIssueListTableViewCell.h"
+#import "PBIssueListModel.h"
+#import "PBAddIssueController.h"
+#import "PBNavigationController.h"
+#import "PBRefreshGifHeader.h"
+#define pageSize 20
+
+static NSString *const CellID = @"CellID";
+@interface PBIssueBaseController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, assign) NSInteger pageIndex;
+@property (nonatomic, strong) PBRefreshGifHeader *headerView;
+@end
+
+@implementation PBIssueBaseController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupUI];
+    [self setupRefresh];
+}
+- (void)setupUI {
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 120.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBIssueListTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(41);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    
+    [self.view addSubview:self.promptView];
+    self.promptView.hidden = YES;
+}
+- (void)setupRefresh {
+    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+        self.pageIndex = 0;
+        [self.issueArrM removeAllObjects];
+        [self loadIssueList];
+    }];
+    header.lastUpdatedTimeLabel.hidden = YES;
+    header.stateLabel.textColor = TitleColor;
+    [header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
+    [header setTitle:@"释放更新" forState:MJRefreshStatePulling];
+    [header setTitle:@"加载中..." forState:MJRefreshStateRefreshing];
+    self.tableView.mj_header = header;
+
+//    MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
+//        [self loadIssueList];
+//    }];
+//    self.tableView.mj_footer = footer;
+
+//    self.tableView.mj_header = self.headerView;
+}
+
+- (void)loadIssueList {
+    self.promptView.hidden = YES;
+    NSString *statusId = @""; NSString *typeId = @""; NSString *archiveId = @""; NSString *search = @"";
+    if (self.dropdownMenuArrM.count == 3) {
+        PBIssueNavModel *statusNavModel = self.dropdownMenuArrM[0][self.statusSelectIndex];
+        PBIssueNavModel *typeNavModel = self.dropdownMenuArrM[1][self.typeSelectIndex];
+        PBIssueNavModel *archiveTypeNavModel = self.dropdownMenuArrM[2][self.archiveSelectIndex];
+        statusId = statusNavModel.ItemDetailId;
+        typeId = typeNavModel.ItemDetailId;
+        archiveId = archiveTypeNavModel.ItemDetailId;
+    };
+    if (self.searchText == nil) {
+        if ([statusId isEqualToString:@""] & [typeId isEqualToString:@""]) {
+            self.promptView.textL.text = @"暂无问题点击右上角加号新增问题";
+//            NSMutableAttributedString *noteStr = [[NSMutableAttributedString alloc] initWithString:_promptView.textL.text];
+//            NSRange redRange = NSMakeRange([[noteStr string] rangeOfString:@"加号"].location, [[noteStr string] rangeOfString:@"加号"].length);
+//            //需要设置的位置
+//            [noteStr addAttribute:NSForegroundColorAttributeName value:IndicatedColor range:redRange];
+//            //设置颜色
+//            [_promptView.textL setAttributedText:noteStr];
+            
+        }else {
+            self.promptView.textL.text = @"无筛选结果";
+        }
+    }else {
+        search = self.searchText;
+        self.promptView.textL.text = @"暂无相关问题,请换关键字搜索";
+        if ([search isEqualToString:@""]) {
+            [self.tableView.mj_header endRefreshing];
+            self.promptView.hidden = NO;
+            self.countL.text = @"搜索结果(0)";
+            return;
+        }
+    }
+    [[PBNetworkTools sharedTools] getIssueListWithOrganizeId:_projectModel.organizeid andIssueStatusId:statusId andIssueTypeId:typeId andArchiveId:archiveId andKeyword:search andUserType:@"" andPageIndex:++self.pageIndex andPageSize:pageSize andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+        if (error) {
+            [YJProgressHUD showMessage:@"加载问题列表失败" inView:self.view];
+            --self.pageIndex;
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if ([networkModel.Msg isEqualToString:@"OK"]) {
+            if (self.countL) {
+                self.countL.hidden = NO;
+                NSInteger count = [[networkModel.Data valueForKey:@"TotalCount"] integerValue];
+                self.countL.text = [NSString stringWithFormat:@"搜索结果(%zd)",count];
+            }
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in [networkModel.Data valueForKey:@"Items"]) {
+                PBIssueListModel *issueListModel = [PBIssueListModel yy_modelWithDictionary:obj];
+                [arrM addObject:issueListModel];
+            }
+            [self.issueArrM addObjectsFromArray:arrM.copy];
+            [self.tableView reloadData];
+            if (arrM.count < pageSize) {
+                self.tableView.mj_footer.hidden = YES;
+            }else {
+                self.tableView.mj_footer.hidden = NO;
+            }
+            if (self.issueArrM.count == 0) {
+                self.promptView.hidden = NO;
+            }else {
+                self.promptView.hidden = YES;
+            }
+        }else {
+            --self.pageIndex;
+            [YJProgressHUD showMessage:@"加载问题列表失败" inView:self.view];
+        }
+    }];
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.issueArrM.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBIssueListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.projectModel = self.projectModel;
+    cell.issueListModel = self.issueArrM[indexPath.row];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBAddIssueController *detailsVC = [[PBAddIssueController alloc] init];
+    detailsVC.isAddIssue = NO;
+    detailsVC.projectModel = self.projectModel;
+    detailsVC.issueListModel = self.issueArrM[indexPath.row];
+    detailsVC.statusAndTypeData = self.statusAndTypeData;
+    PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:detailsVC];
+    nav.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:nav animated:YES completion:nil];
+    
+}
+
+
+//- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath {
+//    [self customDeleteBtnAfteriOS11:tableView];
+//}
+//- (void)customDeleteBtnAfteriOS11:(UITableView *)tableView {
+//    NSLog(@"yyyyyyy");
+//    for (UIView *subview in tableView.subviews) {
+//        NSLog(@"======%@",NSStringFromClass([subview class]));
+//
+//        if ([NSStringFromClass([subview class]) isEqualToString:@"UISwipeActionPullView"]) {
+//            UIButton *btn = [subview.subviews objectAtIndex:0];
+//            [btn setImage:[UIImage imageNamed:@"Issue_problem_list_delete"] forState:UIControlStateNormal];
+//        }
+//    }
+//}
+
+//- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
+//    NSLog(@"===bbbbb");
+//    return UITableViewCellEditingStyleDelete;
+//}
+//- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+//    PBIssueListModel *issueListModel = self.issueArrM[indexPath.row];
+//    NSString *userId = [[NSString getLoginData] valueForKey:@"UserId"];
+//    if (![userId isEqualToString:issueListModel.CreateUserId]) {
+//        return @[];
+//    }
+//
+//    UITableViewRowAction *rowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
+//        NSLog(@"点击了删除");
+//        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除吗?" preferredStyle:UIAlertControllerStyleAlert];
+//        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+//        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+//            [self deleteIssueWith:indexPath];
+//        }];
+//        [alertVC addAction:cancelAction];
+//        [alertVC addAction:determineAction];
+//        [self presentViewController:alertVC animated:YES completion:nil];
+//     }];
+//    rowAction.backgroundColor = [UIColor whiteColor];
+//    return @[rowAction];
+//}
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    PBIssueListModel *issueListModel = self.issueArrM[indexPath.row];
+    if (!issueListModel.isIssueManager) {
+        return @[];
+    }
+    UITableViewRowAction *shareAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            [self deleteIssueWith:indexPath];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+//    shareAction.backgroundColor = WarningColor;
+    
+    UITableViewRowAction *loadAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"归档" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要归档吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            [self archiveWith:indexPath];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+    loadAction.backgroundColor = IndicatedColor;
+    return @[shareAction];
+}
+                                         
+- (void)deleteIssueWith:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    PBIssueListModel *issueListModel = self.issueArrM[indexPath.row];
+    [[PBNetworkTools sharedTools] RequestDeleteIssueWithIssueID:issueListModel.IssueId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"删除失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.issueArrM removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }]; 
+}
+- (void)archiveWith:(NSIndexPath *)indexPath {
+    PBIssueListModel *issueListModel = self.issueArrM[indexPath.row];
+    if (![issueListModel.IssueStatusText isEqualToString:@"关闭"]) {
+        [YJProgressHUD showMessage:@"该问题未关闭,不能归档" inView:self.view];
+        return;
+    }
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] SetIssueDeleteMarkWithIssueID:issueListModel.IssueId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"归档失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            //判断是否隐藏归档
+            PBIssueNavModel *archiveTypeNavModel = self.dropdownMenuArrM[3][self.archiveSelectIndex];
+            NSString *archiveId = archiveTypeNavModel.ItemDetailId;
+            if ([archiveId isEqualToString:@"0"]) {//隐藏
+                [self.issueArrM removeObjectAtIndex:indexPath.row];
+                [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+                [self.tableView reloadData];
+            }else {
+                PBIssueListModel *issueModel = self.issueArrM[indexPath.row];
+                issueModel.DeleteMark = @"2";
+                [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+
+- (NSMutableArray *)issueArrM {
+    if (_issueArrM == nil) {
+        _issueArrM = [[NSMutableArray alloc] init];
+    }
+    return _issueArrM;
+}
+- (NSMutableArray *)dropdownMenuArrM {
+    if (_dropdownMenuArrM == nil) {
+        _dropdownMenuArrM = [[NSMutableArray alloc] init];
+    }
+    return _dropdownMenuArrM;
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] initWithFrame:self.view.bounds];
+        _promptView.imageV.image = [UIImage imageNamed:@"Issue_list_empty"];
+    }
+    return _promptView;
+}
+
+- (PBRefreshGifHeader *)headerView {
+    if(_headerView == nil) {
+        _headerView = [[PBRefreshGifHeader alloc] init];
+        __weak typeof(self) weakSelf = self;
+        [self.headerView setRefreshingBlock:^{
+            weakSelf.pageIndex = 0;
+            [weakSelf.issueArrM removeAllObjects];
+            [weakSelf loadIssueList];
+//            [weakSelf.tableView.mj_header endRefreshing];
+        }];
+    }
+    return _headerView;
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.h
new file mode 100644
index 0000000..e3604f1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.h
@@ -0,0 +1,13 @@
+//
+//  PBIssueDetailsViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueListModel;
+@interface PBIssueDetailsViewController : UIViewController
+@property (nonatomic, strong) PBIssueListModel *issueListModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.m
new file mode 100644
index 0000000..aac035a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueDetailsViewController.m
@@ -0,0 +1,77 @@
+//
+//  PBIssueDetailsViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueDetailsViewController.h"
+#import "PBIssueListModel.h"
+#import "PBCommentsController.h"
+@interface PBIssueDetailsViewController ()
+
+@end
+
+@implementation PBIssueDetailsViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self loadIssueDetail];
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"问题";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *commentsItem = [[UIBarButtonItem alloc] initWithTitle:@"评论" style:UIBarButtonItemStylePlain target:self action:@selector(commentsAction)];
+    self.navigationItem.rightBarButtonItem = commentsItem;
+
+}
+- (void)backItemAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+- (void)commentsAction {
+    PBCommentsController *commentsVC = [[PBCommentsController alloc] init];
+    [self.navigationController pushViewController:commentsVC animated:YES];
+}
+- (void)loadIssueDetail {
+    [[PBNetworkTools sharedTools] RequestGetIssueDetailByIdWithIssueID:_issueListModel.IssueId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+    }];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor yellowColor];
+    
+    
+    
+    
+}
+- (void)setIssueListModel:(PBIssueListModel *)issueListModel {
+    _issueListModel = issueListModel;
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.h
new file mode 100644
index 0000000..ff019c3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.h
@@ -0,0 +1,13 @@
+//
+//  PBIssueListViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueBaseController.h"
+
+@interface PBIssueListViewController : PBIssueBaseController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.m
new file mode 100644
index 0000000..6eb4f29
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueListViewController.m
@@ -0,0 +1,281 @@
+//
+//  PBIssueListViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueListViewController.h"
+#import "PBDropdownMenu.h"
+#import "PBIssueSearchController.h"
+#import "PBNavigationController.h"
+#import "PBAddIssueController.h"
+#import "PBProjectPower.h"
+#define IssueModuleName @"IssueTracking"
+@interface PBIssueListViewController ()<PBDropdownMenuDelegate>
+@property (nonatomic, strong) NSArray *roleArr;
+@property (nonatomic, strong) NSArray *archiveArr;
+@end
+
+@implementation PBIssueListViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    for (PBProjectPower *power in self.powerArr) {
+        if ([power.Bm_EnCode isEqualToString:IssueModuleName]) {
+            if ([power.checkstate isEqualToString:@"1"]) {
+                //有权限
+                self.promptView.hidden = YES;
+                [self getProjectParentId];
+//                [self.tableView.mj_header beginRefreshing];
+                for (NSDictionary *obj in power.Bmbs) {
+                    if ([[obj valueForKey:@"Bmb_FullName"] isEqualToString:@"新增问题"]) {
+                        if ([[obj valueForKey:@"checkstate"] isEqualToString:@"1"]) {
+                            self.navigationItem.rightBarButtonItem.enabled = YES;
+                        }
+                    }
+                }
+                return;
+            }else {
+                //无权限
+                self.promptView.textL.text = @"暂无权限";
+                self.promptView.hidden = NO;
+                return;
+            }
+        }
+    }
+    //无权限
+    self.promptView.textL.text = @"暂无权限";
+    self.promptView.hidden = NO;
+}
+#pragma mark - PBDropdownMenuDelegate
+- (void)dropdownMenu:(UIButton *)clickBtn selectedCellNumber:(NSInteger)number {
+    NSInteger index = clickBtn.tag -100;
+    switch (index) {
+        case 0:
+            self.statusSelectIndex = number;
+            [self.tableView.mj_header beginRefreshing];
+            break;
+        case 1:
+            self.typeSelectIndex = number;
+            [self.tableView.mj_header beginRefreshing];
+            break;
+//        case 2:
+//            self.userSelectIndex = number;
+//            [self.tableView.mj_header beginRefreshing];
+//            break;
+        case 2:
+            self.archiveSelectIndex = number;
+            [self.tableView.mj_header beginRefreshing];
+            break;
+        default:
+            break;
+    }
+}
+- (void)getProjectParentId {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] getProjectParentIDWithProjectID:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载状态、类型失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            [self loadTypeAndStatusWith:networkModel.Data];
+        }else {
+            [YJProgressHUD showMessage:@"加载状态、类型失败" inView:self.view];
+        }
+    }];
+}
+- (void)loadTypeAndStatusWith:(NSString *)parentId {
+    __block NSArray *statusArr; __block NSArray *typeArr;
+    dispatch_semaphore_t sem = dispatch_semaphore_create(0);
+    NSInteger commandCount = 2;
+    __block NSInteger httpFinishCount = 0;
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        [[PBNetworkTools sharedTools] getIssueStatusWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if ([networkModel.Msg isEqualToString:@"OK"]) {
+                statusArr = networkModel.Data;
+                if (++httpFinishCount == commandCount) {
+                    dispatch_semaphore_signal(sem);
+                }
+            }else {
+                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+                return;
+            }
+        }];
+        
+        [[PBNetworkTools sharedTools] getIssueTypesWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if ([networkModel.Msg isEqualToString:@"OK"]) {
+                typeArr = networkModel.Data;
+                if (++httpFinishCount == commandCount) {
+                    dispatch_semaphore_signal(sem);
+                }
+            }else {
+                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
+                return;
+            }
+        }];
+        //如果全部请求没有返回则该线程会一直阻塞
+        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
+        NSLog(@"全部加载完成==================: %@", [NSThread currentThread]);
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSLog(@"更新视图UI update in main thread!:%@",[NSThread currentThread]);
+            [YJProgressHUD hide];
+            NSMutableArray *statusArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *dict in statusArr) {
+                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
+                [statusArrM addObject:issueNavModel];
+            }
+            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *dict in typeArr) {
+                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
+                [typeArrM addObject:issueNavModel];
+            }
+            self.statusAndTypeData = @{@"IssueStatus":statusArrM.mutableCopy, @"IssueTypes":typeArrM.mutableCopy};
+            PBIssueNavModel *statusNavModel = [[PBIssueNavModel alloc] init];
+            statusNavModel.ItemDetailId = @"";
+            statusNavModel.ItemName = @"状态";
+            [statusArrM insertObject:statusNavModel atIndex:0];
+            
+            PBIssueNavModel *typeNavModel = [[PBIssueNavModel alloc] init];
+            typeNavModel.ItemDetailId = @"";
+            typeNavModel.ItemName = @"类型";
+            [typeArrM insertObject:typeNavModel atIndex:0];
+            
+            [self.dropdownMenuArrM addObject:statusArrM];
+            [self.dropdownMenuArrM addObject:typeArrM];
+//            [self.dropdownMenuArrM addObject:self.roleArr];//去掉我相关检索
+            [self.dropdownMenuArrM addObject:self.archiveArr];
+            [self setupDropdownMenuView];
+            [self.tableView.mj_header beginRefreshing];
+        });
+    });
+}
+- (void)setupDropdownMenuView {
+    float dropdownMenuW = MainScreenWidth / (self.dropdownMenuArrM.count + 1);
+    PBDropdownMenu *dropdownMenu = [[PBDropdownMenu alloc] initWithFrame:CGRectMake(0, 0, self.dropdownMenuArrM.count * dropdownMenuW, 40) andArr:self.dropdownMenuArrM];
+    dropdownMenu.delegate = self;
+    [self.view addSubview:dropdownMenu];
+
+    UIButton *searchBtn = [[UIButton alloc] init];
+    [searchBtn setImage:[UIImage imageNamed:@"Doc_list_searchItem"] forState:UIControlStateNormal];
+    searchBtn.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    searchBtn.frame = CGRectMake(dropdownMenuW * self.dropdownMenuArrM.count, 0, dropdownMenuW, 40);
+    [searchBtn addTarget:self action:@selector(searchAction)  forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:searchBtn];
+}
+
+- (void)searchAction {
+    PBIssueSearchController *searchVC = [[PBIssueSearchController alloc] init];
+    searchVC.projectModel = self.projectModel;
+    searchVC.hidesBottomBarWhenPushed = YES;
+    searchVC.dropdownMenuArrM = self.dropdownMenuArrM;
+    searchVC.statusSelectIndex = self.statusSelectIndex;
+    searchVC.typeSelectIndex = self.typeSelectIndex;
+    searchVC.userSelectIndex = self.userSelectIndex;
+    searchVC.archiveSelectIndex = self.archiveSelectIndex;
+    [self.navigationController pushViewController:searchVC animated:YES];
+}
+
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *addIssueItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"] style:UIBarButtonItemStylePlain target:self action:@selector(addIssue)];
+    self.navigationItem.rightBarButtonItem = addIssueItem;
+    self.navigationItem.rightBarButtonItem.enabled = YES;
+}
+- (void)addIssue {
+    PBAddIssueController *addIssueVC = [[PBAddIssueController alloc] init];
+    addIssueVC.isAddIssue = YES;
+    addIssueVC.projectModel = self.projectModel;
+    addIssueVC.statusAndTypeData = self.statusAndTypeData;
+    addIssueVC.SaveSuccessBlock = ^{
+        [self.tableView.mj_header beginRefreshing];
+    };
+    PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:addIssueVC];
+    nav.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:nav animated:YES completion:nil];
+}
+- (void)backItemAction {
+    [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+}
+
+- (NSArray *)roleArr {
+    if (_roleArr == nil) {
+        PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+        issueNavModel.ItemDetailId = @"";
+        issueNavModel.ItemName = @"相关";
+        
+        PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+        issueNavModel1.ItemDetailId = @"Creator";
+        issueNavModel1.ItemName = @"我创建";
+        
+//        PBIssueNavModel *issueNavModel2 = [[PBIssueNavModel alloc] init];
+//        issueNavModel2.ItemDetailId = @"Manager";
+//        issueNavModel2.ItemName = @"我负责";
+        
+        PBIssueNavModel *issueNavModel3 = [[PBIssueNavModel alloc] init];
+        issueNavModel3.ItemDetailId = @"Joiner";
+        issueNavModel3.ItemName = @"我参与";
+        
+        _roleArr = @[issueNavModel,issueNavModel1,issueNavModel3];
+    }
+    return _roleArr;
+}
+- (NSArray *)archiveArr {
+    if (_archiveArr == nil) {
+        PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+        issueNavModel.ItemDetailId = @"0";
+        issueNavModel.ItemName = @"归档/隐";
+        
+        PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+        issueNavModel1.ItemDetailId = @"1";
+        issueNavModel1.ItemName = @"归档/显";
+        
+        _archiveArr = @[issueNavModel,issueNavModel1];
+    }
+    return _archiveArr;
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.h
new file mode 100644
index 0000000..b5253cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.h
@@ -0,0 +1,13 @@
+//
+//  PBIssueSearchController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueBaseController.h"
+
+@interface PBIssueSearchController : PBIssueBaseController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.m
new file mode 100644
index 0000000..ee12127
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBIssueSearchController.m
@@ -0,0 +1,107 @@
+//
+//  PBIssueSearchController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueSearchController.h"
+
+@interface PBIssueSearchController ()<UISearchBarDelegate>
+@property (nonatomic, strong) UISearchBar *searchBar;
+@property (nonatomic, strong) UIButton *maskBtn;
+@end
+
+@implementation PBIssueSearchController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+}
+- (void)setupNav {
+    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
+    self.view.backgroundColor = [UIColor whiteColor];
+    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"whileNav"] forBarMetrics:UIBarMetricsDefault];
+    self.searchBar = [[UISearchBar alloc] init];
+    self.searchBar.placeholder = @"输入问题标题";
+    self.searchBar.delegate = self;
+    self.searchBar.returnKeyType=UIReturnKeySearch;
+    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
+    self.navigationItem.titleView = self.searchBar;
+    [self.searchBar setShowsCancelButton:YES];
+//    UIButton *cancelBtn = [self.searchBar valueForKey:@"cancelButton"];
+//    self.cancelBtn = cancelBtn;
+    self.navigationItem.hidesBackButton = YES;
+    [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+}
+//- (void)setupNav {
+//    self.searchText = @"";
+//    self.view.backgroundColor = [UIColor whiteColor];
+//    self.navigationItem.hidesBackButton = YES;
+//    self.searchBar = [[UISearchBar alloc] init];
+//    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
+//    self.searchBar.placeholder = @"搜索问题";
+//    self.searchBar.delegate = self;
+//    self.navigationItem.titleView = self.searchBar;
+//    [self.searchBar becomeFirstResponder];
+//
+//    UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(cancelAction)];
+//    self.navigationItem.rightBarButtonItem = cancelItem;
+//
+//    self.countL = [UILabel z_labelWithText:@"搜索结果" Color:DescColor isBold:NO Font:16];
+//    self.countL.frame = CGRectMake(20, 0, self.view.width - 40, 40);
+//    [self.view addSubview:self.countL];
+//    self.countL.hidden = YES;
+//
+//    CGFloat insetBottom;
+//    if (IS_IPHONE_X) {
+//        insetBottom = 34.f;
+//    }else {
+//        insetBottom = 0.f;
+//    }
+//    self.tableView.mj_footer.ignoredScrollViewContentInsetBottom =  insetBottom;
+//}
+
+#pragma mark - UISearchBarDelegate
+- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
+    [self.searchBar resignFirstResponder];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    NSString *search = [searchBar.text stringByReplacingOccurrencesOfString:@" " withString:@""];
+    if ([search isEqualToString:@""]){
+        return;
+    }
+    [self loadIssueListWithTitle:searchBar.text];
+    [self.searchBar resignFirstResponder];
+}
+
+- (void)loadIssueListWithTitle:(NSString *)title {
+    if ([title isEqualToString:@""]) {
+        self.issueArrM = nil;
+        [self.tableView reloadData];
+        return;
+    }
+    self.searchText = title;
+    [self.tableView.mj_header beginRefreshing];
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.h
new file mode 100644
index 0000000..cac4161
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.h
@@ -0,0 +1,17 @@
+//
+//  PBModelSearchController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/31.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBModelSearchController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.m
new file mode 100644
index 0000000..b590dab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/PBModelSearchController.m
@@ -0,0 +1,116 @@
+//
+//  PBModelSearchController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/31.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBModelSearchController.h"
+#import "PBModelsTableViewCell.h"
+#import "PBProjectModel.h"
+#import "PBModelsModel.h"
+#import "PBLoadModelDisplayController.h"
+static NSString *const cellID = @"cellID";
+@interface PBModelSearchController ()<UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *searchData;
+@property (nonatomic, strong) UISearchBar *searchBar;
+@property (nonatomic, weak) UIButton *cancelBtn;
+@end
+
+@implementation PBModelSearchController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+//    [self loadModelWith:@""];
+}
+- (void)loadModelWith:(NSString *)keyword {
+    [[PBNetworkTools sharedTools] RequestGetProjectAllModelsWithProjectID:_projectModel.bimcomposerid andKeyword:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        str = [str stringByReplacingOccurrencesOfString:@"\\" withString:@""];
+        NSMutableString *mString = [NSMutableString stringWithString:str];
+        [mString deleteCharactersInRange:NSMakeRange(0, 1)];
+        [mString deleteCharactersInRange:NSMakeRange(mString.length-1, 1)];
+        self.searchData = [NSArray yy_modelArrayWithClass:[PBModelsModel class] json:mString.copy];
+        [self.tableView reloadData];
+    }];
+}
+- (void)setupNav {
+    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
+    self.view.backgroundColor = [UIColor whiteColor];
+    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"whileNav"] forBarMetrics:UIBarMetricsDefault];
+    self.searchBar = [[UISearchBar alloc] init];
+    self.searchBar.placeholder = @"请输入模型名称";
+    self.searchBar.delegate = self;
+    self.searchBar.returnKeyType=UIReturnKeySearch;
+    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
+    self.navigationItem.titleView = self.searchBar;
+    [self.searchBar setShowsCancelButton:YES];
+    UIButton *cancelBtn = [self.searchBar valueForKey:@"cancelButton"];
+    self.cancelBtn = cancelBtn;
+    self.navigationItem.hidesBackButton = YES;
+    
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
+    self.tableView.rowHeight = 100;
+    [self.tableView registerClass:[PBModelsTableViewCell class] forCellReuseIdentifier:cellID];
+    self.tableView.delegate = self;
+    self.tableView.dataSource = self;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.view addSubview:self.tableView];
+}
+#pragma mark - UISearchBarDelegate
+- (void)searchBarCancelButtonClicked:(UISearchBar*)searchBar{
+    [self.searchBar resignFirstResponder];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    [self.searchBar resignFirstResponder];
+    [self loadModelWith:searchBar.text];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.searchData.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBModelsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    PBModelsModel *model = self.searchData[indexPath.row];
+    cell.modelsModel = model;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+    modelDisplayVC.hidesBottomBarWhenPushed = YES;
+    modelDisplayVC.projectModel = self.projectModel;
+    modelDisplayVC.projectIID = self.projectModel.bimcomposerid;
+    NSArray *arr = self.searchData[indexPath.section];
+    PBModelsModel *modelsModel = arr[indexPath.row];
+    modelDisplayVC.modelID = modelsModel.ID;
+    [self.navigationController pushViewController:modelDisplayVC animated:YES];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.h
new file mode 100644
index 0000000..93b581c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.h
@@ -0,0 +1,19 @@
+//
+//  PBIssueDrawingsShowController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@class PBDrawingsModel;
+@class PBModelsModel;
+
+@interface PBIssueDrawingsShowController : UIViewController
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@property (nonatomic, strong) PBDrawingsModel *drawingsModel;
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.m
new file mode 100644
index 0000000..5a1fc63
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueDrawingsShowController.m
@@ -0,0 +1,209 @@
+//
+//  PBIssueDrawingsShowController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBIssueDrawingsShowController.h"
+#import "PBDrawingsModel.h"
+#import "PBModelsModel.h"
+#import "PBDrawingsInfoModel.h"
+#import "PBIssueAddModel.h"
+#import "PBDrawingposModel.h"
+#define positionImageVW 30
+#define positionImageVH 30
+@interface PBIssueDrawingsShowController ()<UIScrollViewDelegate>
+@property (nonatomic,strong) UIScrollView *scrollView;
+@property (nonatomic, strong) UIImageView *imageV;
+@property (nonatomic, strong) UIImage *image;
+@property (nonatomic, strong) UIView *redView;
+@property (nonatomic, strong) UIImageView *positionImageV;
+@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;
+@end
+
+@implementation PBIssueDrawingsShowController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setNav];
+    [self setupUI];
+}
+
+- (void)setNav {
+    self.view.backgroundColor = [UIColor whiteColor];
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"图纸";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *saveItem = [[UIBarButtonItem alloc] initWithTitle:@"确认" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveItem;
+    self.navigationItem.rightBarButtonItem.enabled = NO;
+}
+
+- (void)backNavAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+#pragma mark - 保存接口
+- (void)saveAction {
+    CGPoint point = self.redView.origin;
+    NSInteger X = point.x;
+    NSInteger Y = point.y;
+    //    NSLog(@"%zd- %zd",X,Y);
+    NSInteger imageW = CGImageGetWidth(self.image.CGImage);
+    NSInteger imageH = CGImageGetHeight(self.image.CGImage);
+    
+    //新建
+    PBDrawingposModel *drawingposModel = [[PBDrawingposModel alloc] init];
+    drawingposModel.FileId = self.drawingsInfoModel.ID;
+    drawingposModel.PosX = [NSString stringWithFormat:@"%zd",X];
+    drawingposModel.PosY = [NSString stringWithFormat:@"%zd",Y];
+    drawingposModel.OpId = UserID;
+    drawingposModel.OpUser = Realname;
+    NSDate *currentDate = [NSDate date];
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm"];
+    NSString *dateString = [dateFormatter stringFromDate:currentDate];
+    drawingposModel.CreateDate = dateString;
+    drawingposModel.X = [_drawingsInfoModel.leftptm valueForKey:@"X"];
+    drawingposModel.Y = [_drawingsInfoModel.leftptm valueForKey:@"Y"];
+    drawingposModel.Z = [_drawingsInfoModel.leftptm valueForKey:@"Z"];
+    drawingposModel.Pixel2MX = _drawingsInfoModel.pixel2mx;
+    drawingposModel.Pixel2MY = _drawingsInfoModel.pixel2my;
+    drawingposModel.Width = [NSString stringWithFormat:@"%zd",imageW];
+    drawingposModel.Height = [NSString stringWithFormat:@"%zd",imageH];
+    drawingposModel.IsDel = @"0";
+    self.issueAddModel.modelsModel = self.modelsModel;
+    self.issueAddModel.drawingsInfoModel = self.drawingsInfoModel;
+    self.issueAddModel.drawingposModel = drawingposModel;
+    [PBNoteCenter postNotificationName:PBNoteCenterIssueUpdatePositioning object:self.issueAddModel];
+    [self.navigationController popToRootViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.scrollView = [[UIScrollView alloc] init];
+    self.scrollView.delegate = self;
+    [self.view addSubview:self.scrollView];
+    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+    }];
+    
+    self.imageV = [[UIImageView alloc] init];
+    self.imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.scrollView addSubview:self.imageV];
+    [self.imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.scrollView);
+    }];
+    
+    [self.imageV addSubview:self.redView];
+    [self.view addSubview:self.positionImageV];
+    self.redView.hidden = YES;
+    self.positionImageV.hidden = YES;
+}
+
+- (void)loadDrawingsInfo {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetFIleWithProjectID:_modelsModel.ProjectID andModelID:_modelsModel.ID andVersionNO:@"" andFileType:@"PlanView" andFileName:_drawingsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载图纸失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        self.drawingsInfoModel = [PBDrawingsInfoModel yy_modelWithJSON:str];
+        self.image = [NSString imageDecoding:self.drawingsInfoModel.imagebase64];
+        [self setScrollView];
+    }];
+}
+
+- (void)setScrollView {
+    self.imageV.image = self.image;
+    self.scrollView.contentSize = self.image.size;
+    NSInteger imageW = CGImageGetWidth(self.image.CGImage);
+    NSInteger width = self.view.bounds.size.width;
+    CGFloat scale = (CGFloat)width / (CGFloat)imageW;
+    self.scrollView.maximumZoomScale = 2;
+    self.scrollView.minimumZoomScale = scale;
+    [self.scrollView setZoomScale:scale animated:NO];
+    self.redView.frame = CGRectMake(500, 800, 1, 1);
+    CGPoint point = [self.redView convertPoint:CGPointMake(0, 0) toView:self.view];
+    CGRect frame = CGRectMake(point.x - (positionImageVW / 2), point.y - positionImageVH, positionImageVW, positionImageVH);
+    self.positionImageV.frame = frame;
+    self.redView.hidden = NO;
+    self.positionImageV.hidden = NO;
+}
+
+- (void)setDrawingsModel:(PBDrawingsModel *)drawingsModel {
+    _drawingsModel = drawingsModel;
+    self.title = drawingsModel.name;
+    [self loadDrawingsInfo];
+}
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+
+#pragma mark - UIScrollViewDelegate
+- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
+    return self.imageV;
+}
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    [self changegreenView];
+}
+
+- (UIView *)redView {
+    if (_redView == nil) {
+        _redView = [[UIView alloc] init];
+        _redView.backgroundColor = [UIColor redColor];
+    }
+    return _redView;
+}
+- (UIImageView *)positionImageV {
+    if (_positionImageV == nil) {
+        _positionImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"location"]];
+        self.positionImageV.userInteractionEnabled = YES;
+        UILongPressGestureRecognizer *longRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longRecognizerAciont:)];
+        longRecognizer.minimumPressDuration = 0.2;
+        [self.positionImageV addGestureRecognizer:longRecognizer];
+    }
+    return _positionImageV;
+}
+
+- (void)longRecognizerAciont:(UILongPressGestureRecognizer *)longRecognizer {
+    self.navigationItem.rightBarButtonItem.enabled = YES;
+    switch (longRecognizer.state) {
+        case UIGestureRecognizerStateBegan:
+            NSLog(@"长按开始了");
+            self.scrollView.scrollEnabled = NO;
+            break;
+        case UIGestureRecognizerStateChanged:
+            NSLog(@"长按在走动~~~~~");
+            CGPoint redViewpoint = [longRecognizer locationInView:self.imageV];
+            NSLog(@"图纸位置=================%@",NSStringFromCGPoint(redViewpoint));
+            self.redView.frame = CGRectMake(redViewpoint.x, redViewpoint.y, 1, 1);
+            [self changegreenView];
+            break;
+        case UIGestureRecognizerStateEnded:
+            NSLog(@"长按结束");
+            self.scrollView.scrollEnabled = YES;
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)changegreenView {
+    CGPoint point = [self.redView convertPoint:CGPointMake(0, 0) toView:self.view];
+    CGRect frame = CGRectMake(point.x - (positionImageVW / 2), point.y - positionImageVH, positionImageVW, positionImageVH);
+    self.positionImageV.frame = frame;
+    NSLog(@"self.views位置-----------------------%@",NSStringFromCGPoint(point));
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.h
new file mode 100644
index 0000000..3a8c988
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.h
@@ -0,0 +1,14 @@
+//
+//  PBIssueMoselListController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/10.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBModelListViewController.h"
+@class PBIssueAddModel;
+@interface PBIssueModelListController : PBModelListViewController
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.m
new file mode 100644
index 0000000..6745300
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueModelListController.m
@@ -0,0 +1,51 @@
+//
+//  PBIssueMoselListController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/10.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBIssueModelListController.h"
+#import "PBIssueAddModel.h"
+#import "PBIssuePositionTypeController.h"
+@interface PBIssueModelListController ()
+
+@end
+
+@implementation PBIssueModelListController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+}
+- (void)setupNav {
+    self.title = @"模型选择";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+   
+    PBModelsModel *modelsModel = self.modelsArrM[indexPath.row];
+    PBIssuePositionTypeController *positioningTypeVC = [[PBIssuePositionTypeController alloc] init];
+    positioningTypeVC.projectModel = self.projectModel;
+    positioningTypeVC.modelsModel = modelsModel;
+    positioningTypeVC.issueAddModel = self.issueAddModel;
+    [self.navigationController pushViewController:positioningTypeVC animated:YES];
+}
+
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    return NO;
+}
+
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.h
new file mode 100644
index 0000000..48321e8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.h
@@ -0,0 +1,18 @@
+//
+//  PBIssuePositionTypeController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBModelsModel;
+@class PBProjectModel;
+@class PBIssueAddModel;
+@interface PBIssuePositionTypeController : UIViewController
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.m
new file mode 100644
index 0000000..5f4fe7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssuePositionTypeController.m
@@ -0,0 +1,209 @@
+//
+//  PBIssuePositionTypeController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBIssuePositionTypeController.h"
+#import "PBModelsModel.h"
+#import "PBViewPointModel.h"
+#import "PBPromptView.h"
+#import "PBTextTableViewCell.h"
+#import "PBImageTableViewCell.h"
+#import "PBDrawingsModel.h"
+#import "PBIssueDrawingsShowController.h"
+#import "PBIssueViewPointDetailsController.h"
+#import "PBIssueAddModel.h"
+
+static NSString *const TextCellID = @"TextCellID";
+static NSString *const ImageCellID = @"ImageCellID";
+
+@interface PBIssuePositionTypeController ()<UITableViewDataSource, UITableViewDelegate>
+
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) UITableView *tableView;
+
+@end
+
+@implementation PBIssuePositionTypeController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    if ([self.issueAddModel.key isEqualToString:@"viewPoint"]) {
+        [self loadViewPoint];
+    }else {
+        [self loadDraw];
+    }
+}
+
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    if ([self.issueAddModel.key isEqualToString:@"viewPoint"]) {
+        self.title = @"视点";
+    }else {
+        self.title = @"图纸";
+    }
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 70;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBTextTableViewCell class] forCellReuseIdentifier:TextCellID];
+    [self.tableView registerClass:[PBImageTableViewCell class] forCellReuseIdentifier:ImageCellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.equalTo(self.view);
+    }];
+    [self.view addSubview:self.promptView];
+    [self.promptView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView);
+        make.bottom.left.right.equalTo(self.view);
+    }];
+    self.promptView.hidden = YES;
+}
+
+- (void)loadViewPoint {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    self.dataList = nil;
+    [self.tableView reloadData];
+    self.promptView.hidden = YES;
+    [[PBNetworkTools sharedTools] RequestGetAllViewpointWithProjectId:_modelsModel.ProjectID andModelId:_modelsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载视图失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSArray *arr = [NSArray yy_modelArrayWithClass:[PBViewPointModel class] json:str];
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        for (PBViewPointModel *viewPointModel in arr) {
+            if ([viewPointModel.Type isEqualToString:@"0"] || [viewPointModel.Type isEqualToString:@"1"]) {
+                [arrM addObject:viewPointModel];
+            }
+        }
+        self.dataList = arrM;
+        if (self.dataList.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            [self.tableView reloadData];
+        }
+    }];
+    
+}
+
+- (void)loadDraw {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    self.dataList = nil;
+    [self.tableView reloadData];
+    self.promptView.hidden = YES;
+    [[PBNetworkTools sharedTools] RequestGetFIleWithProjectID:_modelsModel.ProjectID andModelID:_modelsModel.ID andVersionNO:@"" andFileType:@"PlanView" andFileName:@"sheets" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        for (NSDictionary *obj in [dict valueForKey:@"sheets"]) {
+            PBDrawingsModel *model = [PBDrawingsModel yy_modelWithDictionary:obj];
+            [arrM addObject:model];
+        }
+        self.dataList = arrM;
+        if (self.dataList.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            [self.tableView reloadData];
+        }
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    id model = self.dataList[indexPath.row];
+    PBImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ImageCellID forIndexPath:indexPath];
+    if ([self.issueAddModel.key isEqualToString:@"viewPoint"]) {
+        cell.viewPointModel = (PBViewPointModel *)model;
+    }else {
+        cell.drawingsModel = (PBDrawingsModel *)model;
+    }
+    return cell;
+}
+
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if ([self.issueAddModel.key isEqualToString:@"viewPoint"]) {
+        // 视点选择
+        PBViewPointModel *viewPointModel = self.dataList[indexPath.row];
+        PBIssueViewPointDetailsController *viewPointDetailsVC = [[PBIssueViewPointDetailsController alloc] init];
+        viewPointDetailsVC.updataDefaultViewPointBlock = ^{
+            //            [self loadData:self.index];
+        };
+        viewPointDetailsVC.projectModel = _projectModel;
+        viewPointDetailsVC.modelsModel = _modelsModel;
+        viewPointDetailsVC.viewPointModel = viewPointModel;
+        viewPointDetailsVC.isExamineShow = YES;
+        viewPointDetailsVC.issueAddModel = self.issueAddModel;
+        [self.navigationController pushViewController:viewPointDetailsVC animated:YES];
+        
+    }else {
+        // 图纸选择
+        PBDrawingsModel *drawingsModel = self.dataList[indexPath.row];
+        PBIssueDrawingsShowController *drawingsShowVC = [[PBIssueDrawingsShowController alloc] init];
+        drawingsShowVC.modelsModel = _modelsModel;
+        drawingsShowVC.drawingsModel = drawingsModel;
+        drawingsShowVC.issueAddModel = self.issueAddModel;
+        [self.navigationController pushViewController:drawingsShowVC animated:YES];
+    }
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] init];
+        _promptView.imageV.image = [UIImage imageNamed:@"Model_category_empty"];
+        _promptView.textL.text = @"暂无数据";
+        _promptView.hidden = YES;
+    }
+    return _promptView;
+}
+
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+}
+/*
+ #pragma mark - Navigation
+ 
+ // In a storyboard-based application, you will often want to do a little preparation before navigation
+ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+ // Get the new view controller using [segue destinationViewController].
+ // Pass the selected object to the new view controller.
+ }
+ */
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.h
new file mode 100644
index 0000000..601ab4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.h
@@ -0,0 +1,14 @@
+//
+//  PBIssueViewPointDetailsController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBViewPointDetailsController.h"
+@class PBIssueAddModel;
+@interface PBIssueViewPointDetailsController : PBViewPointDetailsController
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.m
new file mode 100644
index 0000000..cd0fd6d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBIssueViewPointDetailsController.m
@@ -0,0 +1,42 @@
+//
+//  PBIssueViewPointDetailsController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBIssueViewPointDetailsController.h"
+#import "PBIssueAddModel.h"
+@interface PBIssueViewPointDetailsController ()
+
+@end
+
+@implementation PBIssueViewPointDetailsController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"视点";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)LoadModelDisplayVC {
+    self.issueAddModel.modelsModel = self.modelsModel;
+    self.issueAddModel.veiwPointModel = self.loadViewPointModel;
+    [PBNoteCenter postNotificationName:PBNoteCenterIssueUpdatePositioning object:self.issueAddModel];
+    [self.navigationController popToRootViewControllerAnimated:YES];
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.h
new file mode 100644
index 0000000..f426ec4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.h
@@ -0,0 +1,17 @@
+//
+//  PBOpenDrawController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/16.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBDrawingsInfoModel;
+@class PBDrawingposModel;
+
+@interface PBOpenDrawController : UIViewController
+@property (nonatomic, strong) PBDrawingsInfoModel *drawingsInfoModel;
+@property (nonatomic, strong) PBDrawingposModel *drawingposModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.m
new file mode 100644
index 0000000..ea71413
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenDrawController.m
@@ -0,0 +1,129 @@
+//
+//  PBOpenDrawController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/16.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBOpenDrawController.h"
+#import "PBDrawingsModel.h"
+#import "PBModelsModel.h"
+#import "PBDrawingsInfoModel.h"
+#import "PBIssueAddModel.h"
+#import "PBDrawingposModel.h"
+#define positionImageVW 30
+#define positionImageVH 30
+
+@interface PBOpenDrawController ()<UIScrollViewDelegate>
+@property (nonatomic,strong) UIScrollView *scrollView;
+@property (nonatomic, strong) UIImageView *imageV;
+@property (nonatomic, strong) UIImage *image;
+@property (nonatomic, strong) UIView *redView;
+@property (nonatomic, strong) UIImageView *positionImageV;
+@end
+
+@implementation PBOpenDrawController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setNav];
+    [self setupUI];
+}
+
+- (void)setNav {
+    self.view.backgroundColor = [UIColor whiteColor];
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)backNavAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)setupUI {
+    self.scrollView = [[UIScrollView alloc] init];
+    self.scrollView.delegate = self;
+    [self.view addSubview:self.scrollView];
+    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+    }];
+    
+    self.imageV = [[UIImageView alloc] init];
+    self.imageV.image = self.image;
+    self.imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.scrollView addSubview:self.imageV];
+    [self.imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.scrollView);
+    }];
+    CGFloat x = [self.drawingposModel.PosX floatValue];
+    CGFloat y = [self.drawingposModel.PosY floatValue];
+    self.redView.frame = CGRectMake(x, y, 1, 1);
+    [self.imageV addSubview:self.redView];
+    
+    
+    self.scrollView.contentSize = self.image.size;
+    NSInteger imageW = CGImageGetWidth(self.image.CGImage);
+    NSInteger width = self.view.bounds.size.width;
+    CGFloat scale = (CGFloat)width / (CGFloat)imageW;
+    self.scrollView.maximumZoomScale = 2;
+    self.scrollView.minimumZoomScale = scale;
+    [self.scrollView setZoomScale:scale animated:NO];
+    
+    CGPoint point = [self.redView convertPoint:CGPointMake(0, 0) toView:self.view];
+    self.positionImageV.frame = CGRectMake(point.x - (positionImageVW / 2), point.y - positionImageVH, positionImageVW, positionImageVH);
+    [self.view addSubview:self.positionImageV];
+}
+
+- (void)setDrawingsInfoModel:(PBDrawingsInfoModel *)drawingsInfoModel {
+    _drawingsInfoModel = drawingsInfoModel;
+    self.title = drawingsInfoModel.name;
+    self.image = [NSString imageDecoding:self.drawingsInfoModel.imagebase64];
+}
+- (void)setDrawingposModel:(PBDrawingposModel *)drawingposModel {
+    _drawingposModel = drawingposModel;
+}
+#pragma mark - UIScrollViewDelegate
+- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
+    return self.imageV;
+}
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    [self changegreenView];
+}
+
+- (UIView *)redView {
+    if (_redView == nil) {
+        _redView = [[UIView alloc] init];
+        _redView.backgroundColor = [UIColor redColor];
+    }
+    return _redView;
+}
+- (UIImageView *)positionImageV {
+    if (_positionImageV == nil) {
+        _positionImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"location"]];
+    }
+    return _positionImageV;
+}
+
+- (void)changegreenView {
+    CGPoint point = [self.redView convertPoint:CGPointMake(0, 0) toView:self.view];
+    CGRect frame = CGRectMake(point.x - (positionImageVW / 2), point.y - positionImageVH, positionImageVW, positionImageVH);
+    self.positionImageV.frame = frame;
+    NSLog(@"self.views位置-----------------------%@",NSStringFromCGPoint(point));
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.h
new file mode 100644
index 0000000..a170c21
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.h
@@ -0,0 +1,18 @@
+//
+//  PBOpenViewPointController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/16.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBModelsModel;
+@class PBViewPointModel;
+@interface PBOpenViewPointController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@property (nonatomic, strong) PBViewPointModel *viewPointModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.m
new file mode 100644
index 0000000..9d148d4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/ViewControllers/Position/PBOpenViewPointController.m
@@ -0,0 +1,153 @@
+//
+//  PBOpenViewPointController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/16.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBOpenViewPointController.h"
+#import "PBProjectModel.h"
+#import "PBModelsModel.h"
+#import "PBViewPointModel.h"
+#import "PBViewPointDetailCell.h"
+#import "PBLoadModelDisplayController.h"
+#import "PBImageShowViewController.h"
+
+@interface PBOpenViewPointController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray<PBViewPointModel *> *dataList;
+@property (nonatomic, weak) UIImageView *viewPointImageV;
+@property (nonatomic, strong) UIImage *image;
+@end
+
+@implementation PBOpenViewPointController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)setupUI {
+    self.title = self.viewPointModel.Name;
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.estimatedRowHeight = 180;
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    [self.view addSubview:self.tableView];
+    CGFloat height;
+    if (IS_IPHONE_X) {
+        height = 110.0f;
+    }else {
+        height = 76.0f;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(height));
+    }];
+    self.tableView.tableHeaderView = [self tableHeadViewWithImage:self.image];
+    NSString * btnText = [self.viewPointModel.Type isEqualToString:@"0"] ? @"加载视点" : @"加载批注";
+    UIButton *loadViewPointBtn = [UIButton z_textButton:btnText boldFontSize:18 normalColor:[UIColor whiteColor]];
+    [loadViewPointBtn addTarget:self action:@selector(LoadModelDisplayVC) forControlEvents:UIControlEventTouchUpInside];
+    [loadViewPointBtn setBackgroundImage:[UIImage imageNamed:@"Model_loadViewPointBtn_bg"] forState:UIControlStateNormal];
+    
+    [self.view addSubview:loadViewPointBtn];
+    [loadViewPointBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(10);
+        make.left.equalTo(self.view).offset(16);
+        make.right.equalTo(self.view).offset(-16);
+        make.height.equalTo(@50);
+    }];
+}
+- (void)LoadModelDisplayVC {
+    PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+    modelDisplayVC.projectModel = _projectModel;
+    modelDisplayVC.modelID = _modelsModel.ID;
+    modelDisplayVC.viewID = _viewPointModel.ViewID;
+    modelDisplayVC.viewPointID = _viewPointModel.ID;
+    [self.navigationController pushViewController:modelDisplayVC animated:YES];
+}
+
+- (UIView *)tableHeadViewWithImage:(UIImage *)image {
+    NSInteger imageW = image.size.width;
+    NSInteger imageH = image.size.height;
+    CGFloat scale = (CGFloat)self.view.width / (CGFloat)imageW;
+    imageH = imageH *scale;
+    UIView *bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, imageH)];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:image];
+    [bgView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(bgView);
+    }];
+    imageV.userInteractionEnabled = YES;
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
+    [imageV addGestureRecognizer:tap];
+    self.viewPointImageV = imageV;
+    return bgView;
+}
+- (void)tapAction {
+    PBImageShowViewController *imageShowVC = [[PBImageShowViewController alloc] init];
+    imageShowVC.image = self.image;
+    imageShowVC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:imageShowVC animated:NO completion:nil];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBViewPointDetailCell *cell = [PBViewPointDetailCell new];
+    cell.viewPointModel = self.dataList[indexPath.row];
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setViewPointModel:(PBViewPointModel *)viewPointModel {
+    _viewPointModel = viewPointModel;
+    [self.dataList addObject:viewPointModel];
+    if (viewPointModel.Links.count == 0) {
+        self.image = [UIImage imageNamed:@"Model_viewPoint_ failureImage"];
+    }else {
+        NSString *thumbnail = [viewPointModel.Links[0] valueForKey:@"Content"];
+        NSRange range = [thumbnail rangeOfString:@"base64,"];
+        thumbnail = [thumbnail substringFromIndex:range.location + range.length];
+        self.image = [NSString imageDecoding:thumbnail];
+    }
+}
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+- (NSMutableArray *)dataList {
+    if (_dataList == nil) {
+        _dataList = [[NSMutableArray alloc] init];
+    }
+    return _dataList;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.h
new file mode 100644
index 0000000..c474bc1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.h
@@ -0,0 +1,15 @@
+//
+//  PBChooseTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/15.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@interface PBChooseTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^ChooseBlock)(NSInteger index);
+@property (nonatomic, strong) PBIssueAddModel *leftIssueAddModel;
+@property (nonatomic, strong) PBIssueAddModel *rightIssueAddModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.m
new file mode 100644
index 0000000..a8e156e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseTableViewCell.m
@@ -0,0 +1,165 @@
+//
+//  PBChooseTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/15.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBChooseTableViewCell.h"
+#import "PBIssueAddModel.h"
+
+@interface PBChooseTableViewCell()
+@property (nonatomic, weak) UILabel *leftTitleL;
+@property (nonatomic, weak) UILabel *rightTitleL;
+@property (nonatomic, weak) UILabel *leftSelectL;
+@property (nonatomic, weak) UILabel *rightSelectL;
+
+@end
+@implementation PBChooseTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] init];
+    topView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.contentView addSubview:topView];
+    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.contentView);
+        make.height.equalTo(@10);
+    }];
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.contentView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(16);
+        make.bottom.equalTo(self.contentView).offset(-22);
+        make.centerX.equalTo(self.contentView);
+        make.width.equalTo(@1);
+        make.height.equalTo(@55);
+    }];
+    UIButton *statusBtn = [[UIButton alloc] init];
+    [statusBtn addTarget:self action:@selector(statusBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:statusBtn];
+    [statusBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.left.bottom.equalTo(self.contentView);
+        make.right.equalTo(linView.mas_left);
+    }];
+    
+    UIButton *typeBtn = [[UIButton alloc] init];
+    [typeBtn addTarget:self action:@selector(typeBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:typeBtn];
+    [typeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.right.bottom.equalTo(self.contentView);
+        make.left.equalTo(linView.mas_right);
+    }];
+ 
+    UILabel *statusTieleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:statusTieleL];
+    [statusTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(16);
+        make.centerX.equalTo(statusBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *typeTieleL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:typeTieleL];
+    [typeTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(16);
+        make.centerX.equalTo(typeBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *statusSelectL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:MarkedFontSize];
+    statusSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:statusSelectL];
+    [statusSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(statusTieleL.mas_bottom).offset(16);
+        make.left.equalTo(statusBtn).offset(16);
+        make.right.equalTo(statusBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UILabel *typeSelectL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:MarkedFontSize];
+    typeSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:typeSelectL];
+    [typeSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeTieleL.mas_bottom).offset(16);
+        make.left.equalTo(typeBtn).offset(16);
+        make.right.equalTo(typeBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    self.leftTitleL = statusTieleL;
+    self.rightTitleL = typeTieleL;
+    self.leftSelectL = statusSelectL;
+    self.rightSelectL = typeSelectL;
+}
+- (void)statusBtnAction {
+    if (!self.leftIssueAddModel.isIssueManager) {
+        return;
+    }
+    if (self.ChooseBlock) {
+        self.ChooseBlock(0);
+    }
+}
+- (void)typeBtnAction {
+    if (self.rightIssueAddModel.isAddIssue || self.rightIssueAddModel.isIssueManager) {
+        if (self.ChooseBlock) {
+            self.ChooseBlock(1);
+        }
+    }
+}
+
+- (void)setLeftIssueAddModel:(PBIssueAddModel *)leftIssueAddModel {
+    _leftIssueAddModel = leftIssueAddModel;
+    if (leftIssueAddModel.isAddIssue) {
+        self.leftTitleL.text = leftIssueAddModel.title;
+        self.leftSelectL.text = @"打开";
+    }else {
+        self.leftTitleL.text = leftIssueAddModel.title;
+        if(_leftIssueAddModel.navModel) {
+            self.leftSelectL.text = leftIssueAddModel.navModel.ItemName;
+//            self.leftSelectL.textColor = TitleColor;
+        }else {
+            self.leftSelectL.text = leftIssueAddModel.prompt;
+//            self.leftSelectL.textColor = TitleColor;
+        }
+        if (self.leftIssueAddModel.isIssueManager) {
+            self.leftSelectL.textColor = TitleColor;
+        }else {
+            self.leftSelectL.textColor = PromptColor;
+        }
+        
+        
+    }
+}
+- (void)setRightIssueAddModel:(PBIssueAddModel *)rightIssueAddModel {
+    _rightIssueAddModel = rightIssueAddModel;
+    self.rightTitleL.text = rightIssueAddModel.title;
+    if(_rightIssueAddModel.navModel) {
+        self.rightSelectL.text = rightIssueAddModel.navModel.ItemName;
+//        self.rightSelectL.textColor = TitleColor;
+    }else {
+        self.rightSelectL.text = rightIssueAddModel.prompt;
+//        self.rightSelectL.textColor = TitleColor;
+    }
+    if (self.rightIssueAddModel.isAddIssue || self.rightIssueAddModel.isIssueManager){
+        self.rightSelectL.textColor = TitleColor;
+    }else {
+        self.rightSelectL.textColor = PromptColor;
+    }
+    
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.h
new file mode 100644
index 0000000..dd1ae37
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.h
@@ -0,0 +1,20 @@
+//
+//  PBChooseView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/15.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@interface PBChooseView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, copy) void(^ChooseCompleteBlock)(BOOL isSelectStatus, BOOL isSelectType);
+@property (nonatomic, assign) NSInteger index;
+@property (nonatomic, strong) PBIssueAddModel *leftIssueAddModel;
+@property (nonatomic, strong) PBIssueAddModel *rightIssueAddModel;
+@property (nonatomic, strong) NSDictionary *statusAndTypeData;
+@property (nonatomic, assign) BOOL isAdd;
+- (void)show;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.m
new file mode 100644
index 0000000..2603132
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBChooseView.m
@@ -0,0 +1,356 @@
+//
+//  PBChooseView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/15.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBChooseView.h"
+#import "PBIssueAddModel.h"
+
+@interface PBChooseView()<UIPickerViewDelegate,UIPickerViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UIPickerView *pickerView;
+
+@property (nonatomic, strong) NSArray *dataArr;
+@property (nonatomic, weak) UIView *topView;
+
+@property (nonatomic, weak) UILabel *statusTitleL;
+@property (nonatomic, weak) UILabel *typeTitleL;
+@property (nonatomic, weak) UILabel *statusSelectL;
+@property (nonatomic, weak) UILabel *typeSelectL;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, strong) PBIssueNavModel *selectNavModel;
+@property (nonatomic, assign) BOOL isSelectStatus;
+@property (nonatomic, assign) BOOL isSelectType;
+@end
+
+@implementation PBChooseView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point = [[touches anyObject]locationInView:self];
+    CALayer *layer = [self.layer hitTest:point];
+    if (layer == self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    if (self.ChooseCompleteBlock) {
+        self.ChooseCompleteBlock(_isSelectStatus, _isSelectType);
+    }
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBChooseView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width / 2, 3)];
+    topView.backgroundColor = WarningColor;
+    [self.bgView addSubview:topView];
+
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(33);
+        make.centerX.equalTo(self.bgView);
+        make.width.equalTo(@1);
+        make.height.equalTo(@55);
+    }];
+    UIButton *statusBtn = [[UIButton alloc] init];
+    [statusBtn addTarget:self action:@selector(statusBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:statusBtn];
+    [statusBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.left.equalTo(self.bgView);
+        make.right.equalTo(linView.mas_left);
+        make.height.equalTo(@129);
+    }];
+    
+    UIButton *typeBtn = [[UIButton alloc] init];
+    [typeBtn addTarget:self action:@selector(typeBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:typeBtn];
+    [typeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom);
+        make.right.equalTo(self.bgView);
+        make.left.equalTo(linView.mas_right);
+        make.height.equalTo(@129);
+    }];
+    
+    UILabel *statusTieleL = [UILabel z_labelWithText:@"状态" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:statusTieleL];
+    [statusTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(statusBtn).offset(31);
+        make.centerX.equalTo(statusBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *typeTieleL = [UILabel z_labelWithText:@"类型" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:typeTieleL];
+    [typeTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeBtn).offset(31);
+        make.centerX.equalTo(typeBtn);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *statusSelectL = [UILabel z_labelWithText:@"请选择" Color:WarningColor isBold:NO Font:MarkedFontSize];
+    statusSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:statusSelectL];
+    [statusSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(statusTieleL.mas_bottom).offset(14);
+        make.left.equalTo(statusBtn).offset(16);
+        make.right.equalTo(statusBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UILabel *typeSelectL = [UILabel z_labelWithText:@"请选择" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    typeSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:typeSelectL];
+    [typeSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeTieleL.mas_bottom).offset(14);
+        make.left.equalTo(typeBtn).offset(16);
+        make.right.equalTo(typeBtn).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    
+    UIView *lin1View = [[UIView alloc] init];
+    lin1View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin1View];
+    [lin1View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(statusBtn.mas_bottom);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+
+    UILabel *promptL = [UILabel z_labelWithText:@"请选择状态" Color:PromptColor isBold:NO Font:MarkedFontSize];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin1View).offset(15);
+        make.size.mas_equalTo(CGSizeMake(120, 25));
+        make.centerX.equalTo(self.bgView);
+    }];
+    
+    UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn addTarget:self action:@selector(determineBtnActio) forControlEvents:UIControlEventTouchUpInside];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(promptL);
+        make.right.equalTo(self.bgView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(52, 50));
+    }];
+    
+    UIView *lin2View = [[UIView alloc] init];
+    lin2View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin2View];
+    [lin2View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(promptL.mas_bottom).offset(13);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    self.pickerView = [[UIPickerView alloc]init];
+    self.pickerView.backgroundColor = [UIColor whiteColor];
+    self.pickerView.delegate = self;
+    self.pickerView.dataSource = self;
+    [self.bgView addSubview:self.pickerView];
+    [self.pickerView reloadAllComponents];//刷新UIPickerView
+    [self.pickerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin2View.mas_bottom);
+        make.right.equalTo(self.bgView).offset(-44);
+        make.left.equalTo(self.bgView).offset(44);
+        make.height.equalTo(@282);
+    }];
+    self.topView = topView;
+    self.statusTitleL = statusTieleL;
+    self.typeTitleL = typeTieleL;
+    self.statusSelectL = statusSelectL;
+    self.typeSelectL = typeSelectL;
+    self.promptL = promptL;
+}
+
+- (void)determineBtnActio {
+    if (self.index == 0) {
+        self.isSelectStatus = YES;
+        self.leftIssueAddModel.navModel = self.selectNavModel.copy;
+        self.statusSelectL.text = self.leftIssueAddModel.navModel.ItemName;
+        if (self.rightIssueAddModel.roleType != CREATOR) {
+            [self hidden];
+        }else {
+            if(self.rightIssueAddModel.navModel) {
+                [self hidden];
+            }else {
+                self.index = 1;
+            }
+        }
+    }else {
+        self.isSelectType = YES;
+        self.rightIssueAddModel.navModel =  self.selectNavModel.copy;
+        self.typeSelectL.text = self.rightIssueAddModel.navModel.ItemName;
+        if(self.leftIssueAddModel.navModel) {
+            [self hidden];
+        }else {
+            self.index = 0;
+        }
+    }
+}
+- (void)statusBtnAction {
+    if (self.isAdd) {
+        return;
+    }
+    self.index = 0;
+}
+
+- (void)typeBtnAction {
+    if (self.rightIssueAddModel.roleType != CREATOR) {
+        return;
+    }
+    self.index = 1;
+}
+
+#pragma mark UIPickerViewDelegate && UIPickerViewDataSource
+- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
+    return 1;
+}
+
+- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
+    return self.dataArr.count;
+}
+
+- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
+    return 60.f;
+}
+
+- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
+    self.selectNavModel = self.dataArr[row];
+}
+
+- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
+     for(UIView *singleLine in pickerView.subviews){
+         if (singleLine.frame.size.height < 1){
+             singleLine.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+         }
+     }
+    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width / 2, 30)];
+    label.textAlignment = NSTextAlignmentCenter;
+    label.font = [UIFont systemFontOfSize:20];
+    PBIssueNavModel *navModel = self.dataArr[row];
+    label.text = navModel.ItemName;
+    return label;
+}
+- (void)setIndex:(NSInteger)index {
+    _index = index;
+    if (index == 0) {
+         [UIView animateWithDuration:0.2 animations:^{
+             self.topView.x = 0;
+         }];
+         self.statusSelectL.textColor = WarningColor;
+         if (self.rightIssueAddModel.navModel) {
+             self.typeSelectL.textColor = TitleColor;
+         }else {
+             self.typeSelectL.textColor = IgnoreColor;
+         }
+        if (self.rightIssueAddModel.roleType != CREATOR) {
+            self.typeSelectL.textColor = IgnoreColor;
+        }
+         self.promptL.text = self.leftIssueAddModel.prompt;
+         self.dataArr = [self.statusAndTypeData valueForKey:@"IssueStatus"];
+         [self.pickerView reloadAllComponents];
+         [self.pickerView selectRow:0 inComponent:0 animated:NO];
+         self.selectNavModel = self.dataArr[0];
+    }else {
+         [UIView animateWithDuration:0.2 animations:^{
+                self.topView.x = self.bgView.width / 2;
+         }];
+        if (self.rightIssueAddModel.roleType != CREATOR) {
+           self.typeSelectL.textColor = IgnoreColor;
+        }else {
+           self.typeSelectL.textColor = WarningColor;
+        }
+         if (self.leftIssueAddModel.navModel) {
+             self.statusSelectL.textColor = TitleColor;
+         }else {
+             self.statusSelectL.textColor = IgnoreColor;
+         }
+         self.promptL.text = self.rightIssueAddModel.prompt;
+         self.dataArr = [self.statusAndTypeData valueForKey:@"IssueTypes"];
+         [self.pickerView reloadAllComponents];
+        [self.pickerView selectRow:0 inComponent:0 animated:NO];
+        self.selectNavModel = self.dataArr[0];
+    }
+}
+
+- (void)setLeftIssueAddModel:(PBIssueAddModel *)leftIssueAddModel {
+    _leftIssueAddModel = leftIssueAddModel;
+    self.statusTitleL.text = leftIssueAddModel.title;
+    if (leftIssueAddModel.navModel) {
+        self.statusSelectL.text = leftIssueAddModel.navModel.ItemName;
+    }else {
+        self.statusSelectL.text = @"请选择";
+    }
+}
+
+- (void)setRightIssueAddModel:(PBIssueAddModel *)rightIssueAddModel {
+    _rightIssueAddModel = rightIssueAddModel;
+    self.typeTitleL.text = rightIssueAddModel.title;
+    if (rightIssueAddModel.navModel) {
+        self.typeSelectL.text = rightIssueAddModel.navModel.ItemName;
+    }else {
+        self.typeSelectL.text = @"请选择";
+    }
+    
+}
+- (void)setStatusAndTypeData:(NSDictionary *)statusAndTypeData {
+    _statusAndTypeData = statusAndTypeData;
+}
+- (void)setIsAdd:(BOOL)isAdd {
+    _isAdd = isAdd;
+}
+@end
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.h
new file mode 100644
index 0000000..588536e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.h
@@ -0,0 +1,14 @@
+//
+//  PBDateTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@interface PBDateTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^EditDateBlock)(void);
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.m
new file mode 100644
index 0000000..eaa1bcb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBDateTableViewCell.m
@@ -0,0 +1,84 @@
+//
+//  PBDateTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDateTableViewCell.h"
+#import "PBIssueAddModel.h"
+@interface PBDateTableViewCell ()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *promteL;
+@end
+
+@implementation PBDateTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"截止日期(选填)" Color:PromptColor isBold:NO Font:DescFontSize];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.right.equalTo(self.contentView);
+        make.height.equalTo(@20);
+    }];
+   
+    UILabel *promteL = [UILabel z_labelWithText:@"请选择截止日期" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:promteL];
+    [promteL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.centerX.equalTo(titleL);
+        make.height.equalTo(@25);
+        make.bottom.equalTo(self.contentView).offset(-16);
+    }];
+
+    UIButton *selectBtn = [[UIButton alloc] init];
+    [selectBtn addTarget:self action:@selector(selectBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.promteL = promteL;
+}
+
+- (void)selectBtnAction {
+    if (self.issueAddModel.isAddIssue || self.issueAddModel.isIssueManager) {
+        if (self.EditDateBlock) {
+            self.EditDateBlock();
+        }
+    }
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+    self.titleL.text = issueAddModel.title;
+    if (issueAddModel.dateStr) {
+//        self.promteL.textColor = TitleColor;
+        self.promteL.text = issueAddModel.dateStr;
+    }else {
+//        self.promteL.textColor = TitleColor;
+        self.promteL.text = issueAddModel.prompt;
+    }
+    if (self.issueAddModel.isAddIssue || self.issueAddModel.isIssueManager){
+        self.promteL.textColor = TitleColor;
+    }else {
+        self.promteL.textColor = PromptColor;
+    }
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.h
new file mode 100644
index 0000000..d8f6026
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.h
@@ -0,0 +1,17 @@
+//
+//  PBEditDateView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@interface PBEditDateView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, strong) PBIssueAddModel *IssueAddModel;
+@property (nonatomic, copy) void(^EditCompleteBlock)(void);
+@property (nonatomic, copy) NSString *stareDate;
+- (void)show;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.m
new file mode 100644
index 0000000..b9486c8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditDateView.m
@@ -0,0 +1,379 @@
+//
+//  PBEditDateView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBEditDateView.h"
+#import "PBIssueAddModel.h"
+#define MAXYEAR 2099
+#define MINYEAR 2000
+
+@interface PBEditDateView()<UIPickerViewDelegate,UIPickerViewDataSource>
+{
+    //日期存储数组
+    NSMutableArray *_yearArray;
+    NSMutableArray *_monthArray;
+    NSMutableArray *_dayArray;
+
+    NSString *_dateFormatter;
+    //记录位置
+    NSInteger yearIndex;
+    NSInteger monthIndex;
+    NSInteger dayIndex;
+}
+@property (nonatomic, weak) UILabel *endDateL;
+@property (nonatomic, weak) UILabel *endDatesSelectL;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic,strong)UIPickerView *datePicker;
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, copy)  NSString *selectDateStr;
+@end
+
+@implementation PBEditDateView
+
+-  (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        _dateFormatter = @"yyyy-MM-dd";
+        [self setupUI];
+        [self defaultConfig];
+    }
+    return self;
+}
+-(void)defaultConfig {
+    //设置年月日时分数据
+    _yearArray = [self setArray:_yearArray];
+    _monthArray = [self setArray:_monthArray];
+    _dayArray = [self setArray:_dayArray];
+    for (int i=1; i<13; i++) {
+        NSString *num = [NSString stringWithFormat:@"%02d",i];
+        [_monthArray addObject:num];
+    }
+    for (NSInteger i=MINYEAR; i<=MAXYEAR; i++) {
+        NSString *num = [NSString stringWithFormat:@"%ld",(long)i];
+        [_yearArray addObject:num];
+    }
+}
+
+- (NSMutableArray *)setArray:(id)mutableArray {
+    if (mutableArray)
+        [mutableArray removeAllObjects];
+    else
+        mutableArray = [NSMutableArray array];
+    return mutableArray;
+}
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width, 3)];
+    topView.backgroundColor = WarningColor;
+    [self.bgView addSubview:topView];
+    UILabel *endDateL = [UILabel z_labelWithText:@"截止日期" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:endDateL];
+    [endDateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(31);
+        make.centerX.equalTo(self.bgView);
+        make.height.equalTo(@20);
+    }];
+    UILabel *endDatesSelectL = [UILabel z_labelWithText:@"请选择" Color:IgnoreColor isBold:NO Font:MarkedFontSize];
+    endDatesSelectL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:endDatesSelectL];
+    [endDatesSelectL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(endDateL.mas_bottom).offset(14);
+        make.left.equalTo(self.bgView).offset(16);
+        make.right.equalTo(self.bgView).offset(-16);
+        make.height.equalTo(@25);
+    }];
+    UIView *lin1View = [[UIView alloc] init];
+    lin1View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin1View];
+    [lin1View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(endDatesSelectL.mas_bottom).offset(39);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    UILabel *promptL =[UILabel z_labelWithText:@"请选择截止日期" Color:PromptColor isBold:NO Font:MarkedFontSize];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin1View).offset(15);
+        make.size.mas_equalTo(CGSizeMake(150, 25));
+        make.centerX.equalTo(self.bgView);
+    }];
+    UIButton *emptyBtn = [UIButton z_textButton:@"清空" fontSize:MarkedFontSize normalColor:PromptColor];
+    [self.bgView addSubview:emptyBtn];
+    [emptyBtn addTarget:self action:@selector(emptyBtnBtnActio) forControlEvents:UIControlEventTouchUpInside];
+    [emptyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(promptL);
+        make.left.equalTo(self.bgView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(52, 50));
+    }];
+    
+    UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn addTarget:self action:@selector(determineBtnActio) forControlEvents:UIControlEventTouchUpInside];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(promptL);
+        make.right.equalTo(self.bgView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(52, 50));
+    }];
+    
+    UIView *lin2View = [[UIView alloc] init];
+    lin2View.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self.bgView addSubview:lin2View];
+    [lin2View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(promptL.mas_bottom).offset(13);
+        make.left.right.equalTo(self.bgView);
+        make.height.equalTo(@1);
+    }];
+    
+    [self.bgView addSubview:self.datePicker];
+    [self.datePicker mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lin2View.mas_bottom).offset(16);
+        make.left.equalTo(self.bgView).offset(44);
+        make.right.equalTo(self.bgView).offset(-44);
+        make.height.equalTo(@282);
+    }];
+    self.endDateL = endDateL;
+    self.endDatesSelectL = endDatesSelectL;
+    self.promptL = promptL;
+}
+- (void)determineBtnActio {
+    int result;
+    if (self.stareDate == nil) {
+        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+        [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+        NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];
+        result = [self compareOneDay:todayStr withAnotherDay:self.selectDateStr];
+    }else {
+        result = [self compareOneDay:self.stareDate withAnotherDay:self.selectDateStr];
+    }
+    if (result == 1) {
+        [YJProgressHUD showMessage:@"截止日期不应小于开始日期" inView:self];
+        return;
+    }else {
+        self.IssueAddModel.dateStr = self.selectDateStr;
+        if (self.EditCompleteBlock) {
+            self.EditCompleteBlock();
+        }
+        [self hidden];
+    }
+}
+#pragma mark - 时间比较大小
+- (int)compareOneDay:(NSString *)oneDayStr withAnotherDay:(NSString *)anotherDayStr {
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+//    NSString *oneDayStr = [dateFormatter stringFromDate:oneDay];
+//    NSString *anotherDayStr = [dateFormatter stringFromDate:anotherDay];
+    NSDate *dateA = [dateFormatter dateFromString:oneDayStr];
+    NSDate *dateB = [dateFormatter dateFromString:anotherDayStr];
+    NSComparisonResult result = [dateA compare:dateB];
+    if (result == NSOrderedDescending) {
+        //oneDay > anotherDay
+        return 1;
+    }else if (result == NSOrderedAscending){
+        //oneDay < anotherDay
+        return -1;
+    }
+    //oneDay = anotherDay
+    return 0;
+}
+- (void)emptyBtnBtnActio {
+    self.IssueAddModel.dateStr = nil;
+    if (self.EditCompleteBlock) {
+        self.EditCompleteBlock();
+    }
+    [self hidden];
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point=[[touches anyObject]locationInView:self];
+    CALayer *layer=[self.layer hitTest:point];
+    if (layer ==self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBEditDateView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (UIPickerView *)datePicker {
+    if (_datePicker == nil) {
+        _datePicker = [[UIPickerView alloc] init];
+        _datePicker.showsSelectionIndicator = YES;
+        _datePicker.delegate = self;
+        _datePicker.dataSource = self;
+    }
+    return _datePicker;
+}
+
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+#pragma mark - UIPickerViewDelegate,UIPickerViewDataSource
+- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
+    return 3;
+}
+
+- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
+    NSArray *numberArr = [self getNumberOfRowsInComponent];
+    return [numberArr[component] integerValue];
+}
+
+-(NSArray *)getNumberOfRowsInComponent {
+    
+    NSInteger yearNum = _yearArray.count;
+    NSInteger monthNum = _monthArray.count;
+    NSInteger dayNum = [self DaysfromYear:[_yearArray[yearIndex] integerValue] andMonth:[_monthArray[monthIndex] integerValue]];
+
+   return @[@(yearNum),@(monthNum),@(dayNum)];
+}
+
+- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
+    return 60;
+}
+
+
+- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
+    UILabel *customLabel = (UILabel *)view;
+    if (!customLabel) {
+        customLabel = [[UILabel alloc] init];
+        customLabel.textAlignment = NSTextAlignmentCenter;
+        [customLabel setFont:[UIFont systemFontOfSize:20]];
+    }
+    NSString *title;
+    if (component==0) {
+        title = _yearArray[row];
+    }else if (component==1) {
+        title = _monthArray[row];
+    }else if (component==2) {
+        title = _dayArray[row];
+    }
+
+    customLabel.text = title;
+    customLabel.textColor = TitleColor;
+    return customLabel;
+    
+}
+
+- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
+            if (component == 0) {
+                yearIndex = row;
+            }
+            if (component == 1) {
+                monthIndex = row;
+            }
+            if (component == 2) {
+                dayIndex = row;
+            }
+            if (component == 0 || component == 1){
+                [self DaysfromYear:[_yearArray[yearIndex] integerValue] andMonth:[_monthArray[monthIndex] integerValue]];
+                if (_dayArray.count-1<dayIndex) {
+                    dayIndex = _dayArray.count-1;
+                }
+                [pickerView reloadComponent:2];
+            }
+
+    self.selectDateStr = [NSString stringWithFormat:@"%@-%@-%@",_yearArray[yearIndex],_monthArray[monthIndex],_dayArray[dayIndex]];
+}
+#pragma mark - tools
+//通过年月求每月天数
+- (NSInteger)DaysfromYear:(NSInteger)year andMonth:(NSInteger)month
+{
+    NSInteger num_year  = year;
+    NSInteger num_month = month;
+    BOOL isrunNian = num_year%4==0 ? (num_year%100==0? (num_year%400==0?YES:NO):YES):NO;
+    switch (num_month) {
+        case 1:case 3:case 5:case 7:case 8:case 10:case 12:{
+            [self setdayArray:31];
+            return 31;
+        }
+        case 4:case 6:case 9:case 11:{
+            [self setdayArray:30];
+            return 30;
+        }
+        case 2:{
+            if (isrunNian) {
+                [self setdayArray:29];
+                return 29;
+            }else{
+                [self setdayArray:28];
+                return 28;
+            }
+        }
+        default:
+            break;
+    }
+    return 0;
+}
+//设置每月的天数数组
+- (void)setdayArray:(NSInteger)num {
+    [_dayArray removeAllObjects];
+    for (int i=1; i<=num; i++) {
+        [_dayArray addObject:[NSString stringWithFormat:@"%02d",i]];
+    }
+}
+//滚动到指定的时间位置
+- (void)getNowDate:(NSDate *)date animated:(BOOL)animated {
+    if (!date) {
+        date = [NSDate date];
+    }
+    [self DaysfromYear:date.year andMonth:date.month];
+    self.selectDateStr = [NSString stringWithFormat:@"%zd-%02zd-%02zd",date.year, date.month, date.day];
+    yearIndex = date.year-MINYEAR;
+    monthIndex = date.month-1;
+    dayIndex = date.day-1;
+    NSArray *indexArray = @[@(yearIndex),@(monthIndex),@(dayIndex)];
+    [self.datePicker reloadAllComponents];
+    for (int i=0; i<indexArray.count; i++) {
+       [self.datePicker selectRow:[indexArray[i] integerValue] inComponent:i animated:animated];
+    }
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)IssueAddModel {
+    _IssueAddModel = IssueAddModel;
+    self.endDateL.text = IssueAddModel.title;
+    self.promptL.text = IssueAddModel.prompt;
+    if (IssueAddModel.dateStr) {
+        self.endDatesSelectL.text = IssueAddModel.dateStr;
+        self.endDatesSelectL.textColor = TitleColor;
+    }else {
+        self.endDatesSelectL.text = @"请选择";
+        self.endDatesSelectL.textColor = IgnoreColor;
+    }
+    if(IssueAddModel.dateStr) {
+        NSDate *scrollToDate = [NSDate date:IssueAddModel.dateStr WithFormat:_dateFormatter];
+        [self getNowDate:scrollToDate animated:NO];
+    }else {
+        [self getNowDate:nil animated:NO];
+    }
+}
+- (void)setStareDate:(NSString *)stareDate {
+    _stareDate = stareDate;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.h
new file mode 100644
index 0000000..315046e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.h
@@ -0,0 +1,23 @@
+//
+//  PBEditLableView.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/10.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@class PBProjectModel;
+@class PBExamineAddModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBEditLableView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@property (nonatomic, copy) void(^EditCompleteBlock)(void);
+@property (nonatomic, strong) PBProjectModel *projectModel;
+- (void)show;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.m
new file mode 100644
index 0000000..e27615c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditLableView.m
@@ -0,0 +1,256 @@
+//
+//  PBEditLableView.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/10.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBEditLableView.h"
+#import "PBEditPersonCollectionViewCell.h"
+#import "PBRoleTableViewCell.h"
+#import "PBIssueAddModel.h"
+#import "PBPersonModel.h"
+#import "PBProjectModel.h"
+#import "PBExamineAddModel.h"
+#import "PBTagModel.h"
+#define ItemWidth 110
+#define ItemHeight 34
+#define LineSpacing 6
+#define InteritemSpacing 6
+static NSString *const cellID = @"cellID";
+static NSString *const roleCellID = @"roleCellID";
+@interface PBEditLableView()<UICollectionViewDataSource, UICollectionViewDelegate>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, strong) UICollectionView *bottomCollectionView;
+@property (nonatomic, assign) NSInteger aLineCount;
+@property (nonatomic, strong) NSArray *projectTags;
+@property (nonatomic, strong) NSMutableArray *labelListM;
+@end
+@implementation PBEditLableView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self setupUI];
+    }
+    return self;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point=[[touches anyObject]locationInView:self];
+    CALayer *layer=[self.layer hitTest:point];
+    if (layer ==self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBEditLableView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width, 3)];
+    topView.backgroundColor = WarningColor;
+    [self.bgView addSubview:topView];
+    UILabel *titleL = [UILabel z_labelWithText:@"请选择标签" Color:IgnoreColor isBold:NO Font:TitleFontSize];
+    [self.bgView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(14);
+        make.centerX.equalTo(self);
+        make.size.mas_equalTo(CGSizeMake(120, 22));
+    }];
+    UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(13);
+        make.right.equalTo(topView).offset(-24);
+    }];
+    
+    if (PBScreenWidth > 320) {
+        _aLineCount = 3;
+    }else {
+        _aLineCount = 2;
+    }
+    CGFloat margin = (PBScreenWidth - ((ItemWidth * _aLineCount) + ((_aLineCount - 1) * LineSpacing))) / 2;
+    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+    layout.itemSize = CGSizeMake(ItemWidth, ItemHeight);
+    layout.minimumLineSpacing = LineSpacing;
+    layout.minimumInteritemSpacing = InteritemSpacing;
+    layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    self.collectionView.backgroundColor = [UIColor clearColor];
+    [self.collectionView registerClass:[PBEditPersonCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+    self.collectionView.dataSource = self;
+    [self.bgView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(63);
+        make.left.equalTo(self.bgView).offset(margin);
+        make.right.equalTo(self.bgView).offset(-margin);
+        make.height.equalTo(@114);
+    }];
+
+    UILabel *roleTitleL = [UILabel z_labelWithText:@"标签" Color:IgnoreColor isBold:NO Font:CommentsSize];
+    [self.bgView addSubview:roleTitleL];
+    [roleTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom).offset(30);
+        make.left.equalTo(self.bgView).offset(16);
+        make.height.equalTo(@21);
+    }];
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = [UIColor z_colorWithR:235 G:235 B:237];
+    [self.bgView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(roleTitleL.mas_bottom).offset(10);
+        make.left.equalTo(self.bgView).offset(15);
+        make.right.equalTo(self.bgView).offset(17);
+        make.height.equalTo(@1);
+    }];
+    UICollectionViewFlowLayout *layout1 = [[UICollectionViewFlowLayout alloc] init];
+    layout1.itemSize = CGSizeMake(ItemWidth, ItemHeight);
+    layout1.minimumLineSpacing = LineSpacing;
+    layout1.minimumInteritemSpacing = InteritemSpacing;
+    layout1.scrollDirection = UICollectionViewScrollDirectionVertical;
+    self.bottomCollectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout1];
+    self.bottomCollectionView.backgroundColor = [UIColor clearColor];
+    [self.bottomCollectionView registerClass:[PBEditPersonCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+    self.bottomCollectionView.dataSource = self;
+    self.bottomCollectionView.delegate = self;
+    [self.bgView addSubview:self.bottomCollectionView];
+    [self.bottomCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(linView.mas_bottom).offset(16);
+        make.left.equalTo(self.bgView).offset(margin);
+        make.right.equalTo(self.bgView).offset(-margin);
+        make.height.equalTo(@215);
+    }];
+}
+
+- (void)determineBtnAction {
+    self.issueAddModel.labelArr = self.labelListM.copy;
+    [self hidden];
+    if (self.EditCompleteBlock) {
+        self.EditCompleteBlock();
+    }
+}
+- (void)allSelectBtnAction {
+//    NSMutableArray *personArrM = [[NSMutableArray alloc] init];
+//    for (NSDictionary *dict in self.rightArr) {
+//        BOOL isAdd = NO;
+//        PBPersonModel *rightPersonModel = [PBPersonModel yy_modelWithDictionary:dict];
+//        for (PBPersonModel *personModel in self.personListM) {
+//            if ([rightPersonModel.UserId isEqualToString:personModel.UserId]) {
+//                isAdd = YES;
+//                break;
+//            }
+//        }
+//        if (!isAdd) {
+//            [personArrM addObject:rightPersonModel];
+//        }
+//    }
+//    [self.personListM addObjectsFromArray:personArrM.copy];
+//    [self.collectionView reloadData];
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    if (collectionView == self.collectionView) {
+        return self.labelListM.count;
+    }else {
+        return self.projectTags.count;
+    }
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBEditPersonCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    PBTagModel *tagModel;
+    if (collectionView == self.collectionView) {
+        tagModel = self.labelListM[indexPath.row];
+        cell.deletePersonBlock = ^{
+            NSLog(@"=====%zd",indexPath.row);
+            [self.labelListM removeObjectAtIndex:indexPath.row];
+            [self.collectionView reloadData];
+        };
+    }else {
+        tagModel =  self.projectTags[indexPath.row];
+        cell.isHiddenDelete = YES;
+    }
+    cell.name = tagModel.it_name;
+    return cell;
+}
+#pragma mark - UICollectionViewDelegate
+-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBTagModel *tagModel = self.projectTags[indexPath.row];
+    for (PBTagModel *model in self.labelListM) {
+        if ([model.it_guid isEqualToString:tagModel.it_guid]) {
+            return;
+        }
+    }
+    [self.labelListM addObject:tagModel];
+    [self.collectionView reloadData];
+ 
+}
+- (void)loadPersonData {
+    [[PBNetworkTools sharedTools] RequestGetIssueOrganizeTags:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            self.projectTags = networkModel.Data;
+
+            self.projectTags = [NSArray yy_modelArrayWithClass:[PBTagModel class] json:networkModel.Data];
+            [self.bottomCollectionView reloadData];
+        }else {
+            [YJProgressHUD showMessage:@"加载项目标签失败" inView:self];
+        }
+    }];
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+    self.labelListM = issueAddModel.labelArr.mutableCopy;
+    [self.collectionView reloadData];
+    [self loadPersonData];
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.h
new file mode 100644
index 0000000..b2eac65
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.h
@@ -0,0 +1,16 @@
+//
+//  PBEditPersonCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBEditPersonCollectionViewCell : UICollectionViewCell
+@property (nonatomic, assign) BOOL isHiddenDelete;
+@property (nonatomic, copy) NSString *name;
+@property (nonatomic, copy) void(^deletePersonBlock)(void);
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.m
new file mode 100644
index 0000000..488e497
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonCollectionViewCell.m
@@ -0,0 +1,61 @@
+//
+//  PBEditPersonCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBEditPersonCollectionViewCell.h"
+@interface PBEditPersonCollectionViewCell()
+@property (nonatomic, weak) UILabel *personNameL;
+@property (nonatomic, weak) UIButton *deleteBtn;
+@end
+@implementation PBEditPersonCollectionViewCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = [UIColor z_colorWithR:255 G:170 B:0 alpha:0.12];
+    UILabel *personNameL = [UILabel z_labelWithText:@"" Color:WarningColor isBold:NO Font:12];
+    personNameL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:personNameL];
+    [personNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(6);
+        make.bottom.equalTo(self.contentView).offset(-6);
+        make.left.equalTo(self.contentView).offset(8);
+        make.right.equalTo(self.contentView).offset(-26);
+    }];
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Issue_editPerson_delete"]];
+    [deleteBtn addTarget:self action:@selector(deleteBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.right.bottom.equalTo(self.contentView);
+        make.width.equalTo(@26);
+    }];
+
+    self.personNameL = personNameL;
+    self.deleteBtn = deleteBtn;
+}
+- (void)setIsHiddenDelete:(BOOL)isHiddenDelete {
+    _isHiddenDelete = isHiddenDelete;
+}
+- (void)setName:(NSString *)name {
+    _name = name;
+    self.personNameL.text = name;
+    if (self.isHiddenDelete) {
+        self.deleteBtn.hidden = YES;
+    }else {
+        self.deleteBtn.hidden = NO;
+    }
+}
+
+- (void)deleteBtnAction {
+    if (self.deletePersonBlock) {
+        self.deletePersonBlock();
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.h
new file mode 100644
index 0000000..066ecf4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.h
@@ -0,0 +1,25 @@
+//
+//  PBEditPersonView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@class PBProjectModel;
+@class PBExamineAddModel;
+@class PBIssueListModel;
+@interface PBEditPersonView : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, strong) PBIssueListModel *issueListModel;
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+@property (nonatomic, copy) void(^EditCompleteBlock)(void);
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, assign) BOOL isChooseOne;
+@property (nonatomic, assign) BOOL isExamineChoose;
+- (void)show;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.m
new file mode 100644
index 0000000..9a5963f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBEditPersonView.m
@@ -0,0 +1,386 @@
+//
+//  PBEditPersonView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBEditPersonView.h"
+#import "PBEditPersonCollectionViewCell.h"
+#import "PBRoleTableViewCell.h"
+#import "PBIssueAddModel.h"
+#import "PBPersonModel.h"
+#import "PBProjectModel.h"
+#import "PBExamineAddModel.h"
+#import "PBIssueListModel.h"
+#define ItemWidth 160
+#define ItemHeight 34
+#define LineSpacing 6
+#define InteritemSpacing 6
+static NSString *const cellID = @"cellID";
+static NSString *const roleCellID = @"roleCellID";
+@interface PBEditPersonView()<UICollectionViewDataSource, UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, assign) NSInteger aLineCount;
+@property (nonatomic, strong) NSArray *rightArr;
+@property (nonatomic, strong) UITableView *rightTableView;
+@property (nonatomic, assign) NSInteger leftSelectIndex;
+@property (nonatomic, strong) NSMutableArray *personListM;
+@property (nonatomic, assign) BOOL isIssue;
+@property (nonatomic, weak) UIButton *determineBtn;
+@property (nonatomic, weak) UIButton *packupBtn;
+@end
+@implementation PBEditPersonView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self setupUI];
+    }
+    return self;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point=[[touches anyObject]locationInView:self];
+    CALayer *layer=[self.layer hitTest:point];
+    if (layer ==self.layer) {
+        if (_isIssue) {
+            [self saveData];
+        }else {
+            [self hidden];
+        }
+    }
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBEditPersonView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UIView *topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.bgView.width, 3)];
+    topView.backgroundColor = WarningColor;
+    [self.bgView addSubview:topView];
+    
+//    UIButton *searchBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Doc_list_searchItem"]];
+//    [searchBtn addTarget:self action:@selector(searchBtnAction) forControlEvents:UIControlEventTouchUpInside];
+//    [self.bgView addSubview:searchBtn];
+//    [searchBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(topView.mas_bottom).offset(13);
+//        make.left.equalTo(topView).offset(24);
+//    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"请选择人员" Color:IgnoreColor isBold:NO Font:TitleFontSize];
+    [self.bgView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(14);
+        make.centerX.equalTo(self);
+        make.size.mas_equalTo(CGSizeMake(120, 22));
+    }];
+    UIButton *determineBtn = [UIButton z_textButton:@"确定" fontSize:MarkedFontSize normalColor:WarningColor];
+    UIButton *packupBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Issue_ retrieve_default"]] ;
+    [packupBtn addTarget:self action:@selector(packupBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:packupBtn];
+    [self.bgView addSubview:determineBtn];
+    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(13);
+        make.right.equalTo(topView).offset(-24);
+    }];
+    [packupBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(13);
+        make.right.equalTo(topView).offset(-24);
+    }];
+    self.determineBtn = determineBtn;
+    self.packupBtn = packupBtn;
+    if (PBScreenWidth > 320) {
+        _aLineCount = 2;
+    }else {
+        _aLineCount = 2;
+    }
+    CGFloat margin = (PBScreenWidth - ((ItemWidth * _aLineCount) + ((_aLineCount - 1) * LineSpacing))) / 2;
+    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+    layout.itemSize = CGSizeMake(ItemWidth, ItemHeight);
+    layout.minimumLineSpacing = LineSpacing;
+    layout.minimumInteritemSpacing = InteritemSpacing;
+    layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    self.collectionView.backgroundColor = [UIColor clearColor];
+    [self.collectionView registerClass:[PBEditPersonCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+    self.collectionView.dataSource = self;
+    [self.bgView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(63);
+        make.left.equalTo(self.bgView).offset(margin);
+        make.right.equalTo(self.bgView).offset(-margin);
+        make.height.equalTo(@114);
+    }];
+    
+    UILabel *membersTitleL = [UILabel z_labelWithText:@"成员" Color:IgnoreColor isBold:NO Font:DescFontSize];
+    [self.bgView addSubview:membersTitleL];
+    [membersTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom).offset(21);
+        make.left.equalTo(self).offset(14);
+    }];
+    UIButton *allSelectBtn = [UIButton z_textButton:@"全选" fontSize:DescFontSize normalColor:WarningColor];
+    [allSelectBtn addTarget:self action:@selector(allSelectBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.bgView addSubview:allSelectBtn];
+    [allSelectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(membersTitleL);
+        make.right.equalTo(self.bgView).offset(-11);
+    }];
+   
+    self.rightTableView = [[UITableView alloc] init];
+    self.rightTableView.bounces = NO;
+    self.rightTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.rightTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellID];
+    self.rightTableView.rowHeight = 58.f;
+    self.rightTableView.delegate = self;
+    self.rightTableView.dataSource = self;
+    [self.bgView addSubview:self.rightTableView];
+    [self.rightTableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(membersTitleL.mas_bottom).offset(34);
+        make.height.equalTo(@210);
+        make.left.right.equalTo(self);
+    }];
+}
+- (void)searchBtnAction {
+    
+    
+}
+- (void)packupBtnAction {
+    [self saveData];
+}
+- (void)determineBtnAction {
+    [self saveData];
+}
+- (void)saveData {
+    if (_isIssue) {
+       self.issueAddModel.personArr = self.personListM.copy;
+    }else {
+       self.examineAddModel.personArr = self.personListM.copy;
+    }
+    if (self.EditCompleteBlock) {
+        self.EditCompleteBlock();
+    }
+    [self hidden];
+}
+- (void)allSelectBtnAction {
+    NSMutableArray *personArrM = [[NSMutableArray alloc] init];
+    for (NSDictionary *dict in self.rightArr) {
+        BOOL isAdd = NO;
+        PBPersonModel *rightPersonModel = [PBPersonModel yy_modelWithDictionary:dict];
+        for (PBPersonModel *personModel in self.personListM) {
+            if ([rightPersonModel.UserId isEqualToString:personModel.UserId]) {
+                isAdd = YES;
+                break;
+            }
+        }
+        if (!isAdd) {
+            [personArrM addObject:rightPersonModel];
+        }
+    }
+    [self.personListM addObjectsFromArray:personArrM.copy];
+    [self.collectionView reloadData];
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    return self.personListM.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBEditPersonCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    PBPersonModel *personModel = self.personListM[indexPath.row];
+    if ([personModel.UserId isEqualToString:self.issueListModel.CreateUserId]) {
+        cell.isHiddenDelete = YES;
+    }else {
+        cell.isHiddenDelete = NO;
+    }
+    cell.name = personModel.RealName;
+    __weak typeof(self) weakSelf = self;
+    cell.deletePersonBlock = ^{
+        NSLog(@"=====%zd",indexPath.row);
+        if (weakSelf.isIssue && weakSelf.issueListModel.IssueId) {
+            [self RemoveIssueJoinerWithIndexPath:indexPath];
+        }else {
+            [self.personListM removeObjectAtIndex:indexPath.row];
+            [self.collectionView reloadData];
+        }
+    };
+    return cell;
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.rightArr.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    cell.textLabel.font = [UIFont systemFontOfSize:TitleFontSize];
+    cell.textLabel.text = [self.rightArr[indexPath.row] valueForKey:@"RealName"];
+    cell.textLabel.textColor = TitleColor;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.rightArr[indexPath.row];
+    PBPersonModel *addPersonModel = [PBPersonModel yy_modelWithDictionary:dict];
+    if (self.isChooseOne) {
+        [self.personListM removeAllObjects];
+        [self.personListM addObject:addPersonModel];
+        [self.collectionView reloadData];
+    }else {
+        for (PBPersonModel *personModel in self.personListM) {
+            if ([personModel.UserId isEqualToString:addPersonModel.UserId]) {
+                return;
+            }
+        }
+        if (_isIssue && self.issueListModel.IssueId) {
+            [self AddIssueJoinerWithID:addPersonModel];
+        }else {
+            [self.personListM addObject:addPersonModel];
+            [self.collectionView reloadData];
+        }
+    }
+}
+- (void)loadPersonData {
+    if (self.isExamineChoose) {
+        [[PBNetworkTools sharedTools] RequestGetToAddIssueJoiners_WithOperatorWithProjectID:self.projectModel.organizeid andEncodedKeyWord:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"加载成员信息失败" inView:self];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                self.rightArr = networkModel.Data;
+                [self.rightTableView reloadData];
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self];
+            }
+        }];
+    }else {
+        [[PBNetworkTools sharedTools] RequestGetToAddIssueJoinersWithProjectID:self.projectModel.organizeid andEncodedKeyWord:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"加载成员信息失败" inView:self];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                self.rightArr = networkModel.Data;
+                [self.rightTableView reloadData];
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self];
+            }
+        }];
+    }
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+    _isIssue = YES;
+    self.determineBtn.hidden = YES;
+    self.packupBtn.hidden = NO;
+    [self.personListM removeAllObjects];
+    [self.personListM addObjectsFromArray:issueAddModel.personArr];
+    [self.collectionView reloadData];
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    _isIssue = NO;
+    self.determineBtn.hidden = NO;
+    self.packupBtn.hidden = YES;
+    [self.personListM removeAllObjects];
+    [self.personListM addObjectsFromArray:examineAddModel.personArr];
+    [self.collectionView reloadData];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+    [self loadPersonData];
+}
+- (NSMutableArray *)personListM {
+    if (_personListM == nil) {
+        _personListM = [[NSMutableArray alloc] init];
+    }
+    return _personListM;
+}
+- (void)setIssueListModel:(PBIssueListModel *)issueListModel {
+    _issueListModel = issueListModel;
+}
+- (void)AddIssueJoinerWithID:(PBPersonModel *)personModel {
+    [YJProgressHUD showProgress:@"" inView:self];
+    [[PBNetworkTools sharedTools] AddIssueJoinerWithIssueID:self.issueListModel.IssueId andID:personModel.UserId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"添加失败" inView:self];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.personListM addObject:personModel];
+            [self.collectionView reloadData];
+            self.issueAddModel.personArr = self.personListM.copy;
+            if (self.EditCompleteBlock) {
+                self.EditCompleteBlock();
+            }
+        }else {
+            [YJProgressHUD showMessage:@"添加失败" inView:self];
+        }
+    }];
+}
+- (void)RemoveIssueJoinerWithIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self];
+    PBPersonModel *personModel = self.personListM[indexPath.row];
+    [[PBNetworkTools sharedTools] RemoveIssueJoinerWithIssueID:self.issueListModel.IssueId andID:personModel.UserId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"删除失败" inView:self];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.personListM removeObjectAtIndex:indexPath.row];
+            [self.collectionView reloadData];
+            self.issueAddModel.personArr = self.personListM.copy;
+            if (self.EditCompleteBlock) {
+                self.EditCompleteBlock();
+            }
+        }else {
+            [YJProgressHUD showMessage:@"删除失败" inView:self];
+        }
+    }];
+}
+- (void)setIsChooseOne:(BOOL)isChooseOne {
+    _isChooseOne = isChooseOne;
+}
+- (void)setIsExamineChoose:(BOOL)isExamineChoose {
+    _isExamineChoose = isExamineChoose;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.h
new file mode 100644
index 0000000..ad02c23
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBImageCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/22.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@interface PBImageCollectionViewCell : UICollectionViewCell
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, strong) UIImage *image;
+@property (nonatomic, copy) NSString *imageUrl;
+@property (nonatomic, assign) RoleType roleType;
+@property (nonatomic, copy) void(^DeleteImageBlock)(void);
+@property (nonatomic, copy) NSString *viewPointFlag;
+@property (nonatomic, copy) void(^OpenViewPointBlock)(void);
+@property (nonatomic, copy) NSString *countStr;//先于image\imageUrl
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.m
new file mode 100644
index 0000000..c396238
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBImageCollectionViewCell.m
@@ -0,0 +1,132 @@
+//
+//  PBImageCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/22.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBImageCollectionViewCell.h"
+@interface PBImageCollectionViewCell()
+@property (nonatomic, weak) UIButton *viewPointBtn;
+@property (nonatomic, weak) UIButton *deleteBtn;
+@property (nonatomic, weak) UIView *maskView;
+@property (nonatomic, weak) UILabel *countL;
+@end
+@implementation PBImageCollectionViewCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"]];
+    imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Issue_image_delete"]];
+    [deleteBtn addTarget:self action:@selector(deleteImage) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(5);
+        make.right.equalTo(self.contentView).offset(-5);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UIButton *viewPointBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Examine_takingViewPointBtn"]];
+    [viewPointBtn addTarget:self action:@selector(openViewPoint) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:viewPointBtn];
+    [viewPointBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.contentView).offset(-5);
+        make.right.equalTo(self.contentView).offset(-5);
+        make.size.mas_equalTo(CGSizeMake(32, 32));
+    }];
+    
+    UIView *maskView = [[UIView alloc] init];
+    maskView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];
+    [self.contentView addSubview:maskView];
+    [maskView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(imageV);
+    }];
+    UILabel *countL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:22];
+    countL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:countL];
+    [countL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@26);
+        make.left.right.equalTo(imageV);
+        make.centerY.equalTo(imageV);
+    }];
+    
+    self.imageV = imageV;
+    self.deleteBtn = deleteBtn;
+    self.viewPointBtn = viewPointBtn;
+    self.maskView = maskView;
+    self.countL = countL;
+}
+
+- (void)deleteImage {
+    if (self.DeleteImageBlock) {
+        self.DeleteImageBlock();
+    }   
+}
+- (void)setCountStr:(NSString *)countStr {
+    _countStr = countStr;
+}
+- (void)setImage:(UIImage *)image {
+    _image = image;
+    self.imageV .image = image;
+    self.viewPointBtn.hidden = YES;
+    if (self.countStr == nil || [self.countStr isEqualToString:@""]) {
+        self.maskView.hidden = YES;
+        self.countL.hidden = YES;
+    }else {
+        self.maskView.hidden = NO;
+        self.countL.hidden = NO;
+        self.countL.text = self.countStr;
+    }
+}
+
+- (void)setRoleType:(RoleType)roleType {
+    _roleType = roleType;
+    if (roleType == CREATOR) {
+        self.deleteBtn.hidden = NO;
+    }else {
+        self.deleteBtn.hidden = YES;
+    }
+    self.viewPointBtn.hidden = YES;
+}
+- (void)setImageUrl:(NSString *)imageUrl {
+    _imageUrl = imageUrl;
+    [self.imageV  sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"logo_unknown"]];
+    self.viewPointBtn.hidden = YES;
+    if (self.countStr == nil || [self.countStr isEqualToString:@""]) {
+        self.maskView.hidden = YES;
+        self.countL.hidden = YES;
+    }else {
+        self.maskView.hidden = NO;
+        self.countL.hidden = NO;
+        self.countL.text = self.countStr;
+    }
+}
+- (void)setViewPointFlag:(NSString *)viewPointFlag {
+    _viewPointFlag = viewPointFlag;
+    if ([viewPointFlag isEqualToString:@"viewPoint"]) {
+        self.viewPointBtn.hidden = NO;
+        self.deleteBtn.hidden = YES;
+    }else {
+        self.viewPointBtn.hidden = YES;
+        self.deleteBtn.hidden = NO;
+    }
+    self.maskView.hidden = YES;
+    self.countL.hidden = YES;
+}
+- (void)openViewPoint {
+    if (self.OpenViewPointBlock) {
+        self.OpenViewPointBlock();
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.h
new file mode 100644
index 0000000..672eee8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.h
@@ -0,0 +1,14 @@
+//
+//  PBInputTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@interface PBInputTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^EditTextBlock)(NSString *text);
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.m
new file mode 100644
index 0000000..51500cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBInputTableViewCell.m
@@ -0,0 +1,84 @@
+//
+//  PBInputTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBInputTableViewCell.h"
+#import "PBIssueAddModel.h"
+@interface PBInputTableViewCell()
+@property (nonatomic, weak) UILabel *textL;
+@end
+@implementation PBInputTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UILabel *textL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:TitleFontSize];
+    textL.numberOfLines = 0;
+    [self.contentView addSubview:textL];
+    [textL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.height.greaterThanOrEqualTo(@22);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.bottom.equalTo(self.contentView).offset(-16);
+    }];
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
+    textL.userInteractionEnabled = YES;
+    [textL addGestureRecognizer:tap];
+    self.textL = textL;
+}
+
+- (void)tapAction:(UITapGestureRecognizer *)tap {
+    if (!self.issueAddModel.isAddIssue) {
+        return;
+    }
+    NSString *str = [_issueAddModel.inputStr mutableCopy];
+    if (self.EditTextBlock) {
+        self.EditTextBlock(str);
+    }  
+}
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+    if (issueAddModel.isAddIssue) {
+        if ([issueAddModel.key isEqualToString:@"Title"]) {
+            if (issueAddModel.inputStr == nil || [issueAddModel.inputStr isEqualToString:@""]) {
+                self.textL.textColor = TitleColor;
+                self.textL.text = issueAddModel.prompt;
+            }else {
+                self.textL.textColor = TitleColor;
+                self.textL.text = issueAddModel.inputStr;
+            }
+        }else {
+            if (issueAddModel.inputStr == nil || [issueAddModel.inputStr isEqualToString:@""]) {
+                self.textL.textColor = TitleColor;
+                self.textL.text = issueAddModel.prompt;
+            }else {
+                self.textL.textColor = TitleColor;
+                self.textL.text = issueAddModel.inputStr;
+            }
+        }
+    }else {
+        if (issueAddModel.inputStr == nil || [issueAddModel.inputStr isEqualToString:@""]) {
+            self.textL.text = issueAddModel.prompt;
+        }else {
+            self.textL.text = issueAddModel.inputStr;
+        }
+        self.textL.textColor = PromptColor;
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.h
new file mode 100644
index 0000000..65e0809
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.h
@@ -0,0 +1,24 @@
+//
+//  PBIssueHeaderView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/10.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBDocModel;
+@class PBProjectModel;
+
+@interface PBIssueHeaderView : UIView
+@property (nonatomic, strong) PBProjectModel *projectMdoel;
+@property (nonatomic, assign) RoleType roleType;
+@property (nonatomic, copy) void(^ChooseImageBlock)(void);
+@property (nonatomic, copy) void(^DeleteImageBlock)(NSInteger index);
+@property (nonatomic, copy) void(^OpenViewPointBlock)(void);
+@property (nonatomic, strong) NSMutableArray *imageArr;
+@property (nonatomic, strong) NSMutableArray *imageDocArr;
+@property (nonatomic, strong) UIImage *viewPointImage;
+@property (nonatomic, copy) NSString *viewPointImageUrl;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.m
new file mode 100644
index 0000000..2dcd519
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueHeaderView.m
@@ -0,0 +1,245 @@
+//
+//  PBIssueHeaderView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/10.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBIssueHeaderView.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBProjectModel.h"
+
+static NSString *const ImageCellID = @"ImageCellID";
+@interface PBIssueHeaderView ()<UICollectionViewDelegate, UICollectionViewDataSource, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, assign) BOOL isAddIssue;
+@property (nonatomic, strong) UIButton *selectBtn;
+@end
+@implementation PBIssueHeaderView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self == [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    UILabel *titleL = [UILabel z_labelWithText:@"关联图片(选填)" Color:PromptColor isBold:NO Font:TitleFontSize];
+    [self addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(13);
+        make.left.equalTo(self).offset(16);
+        make.height.equalTo(@22);
+        make.width.equalTo(@132);
+    }];
+
+    self.selectBtn = [UIButton z_textButton:@"请选择" fontSize:MarkedFontSize normalColor:TitleColor];
+    [self.selectBtn addTarget:self action:@selector(chooseImageAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:self.selectBtn];
+    [self.selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self).offset(-16);
+        make.centerY.equalTo(titleL);
+    }];
+    
+    UIView *lineV = [[UIView alloc] init];
+    lineV.backgroundColor = PBColor(240, 240, 240);
+    [self addSubview:lineV];
+    [lineV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.left.equalTo(self).offset(20);
+        make.right.equalTo(self).offset(-20);
+        make.height.equalTo(@1);
+    }];
+    
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(80, 80);
+    layout.minimumLineSpacing = 10;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lineV.mas_bottom).offset(16);
+        make.left.equalTo(self).offset(33);
+        make.right.equalTo(self).offset(-32);
+        make.height.equalTo(@80);
+    }];
+    self.collectionView.hidden = YES;
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = PBColor(242, 242, 242);
+    [self addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.equalTo(self);
+        make.height.equalTo(@10);
+    }];
+}
+- (void)chooseImageAction:(UIButton *)button {
+    if (self.ChooseImageBlock) {
+        self.ChooseImageBlock();
+    }
+}
+
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    if (self.isAddIssue) {
+        if (self.viewPointImage != nil) {
+            return self.imageArr.count + 1;
+        }else {
+            return self.imageArr.count;
+        }
+    }else {
+        if (self.viewPointImageUrl != nil && ![self.viewPointImageUrl  isEqualToString:@""]) {
+            return self.imageDocArr.count + 1;
+        }else {
+            return self.imageDocArr.count;
+        }
+    }
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+    if (self.isAddIssue) {
+        if (indexPath.row == 0 && self.viewPointImage != nil) {
+            cell.image = self.viewPointImage;
+            cell.viewPointFlag = @"viewPoint";
+        }else {
+            NSInteger index = indexPath.row;
+            if (self.viewPointImage) {
+                index = indexPath.row - 1;
+            }
+            cell.image = self.imageArr[index];
+        }
+    }else {
+        if (indexPath.row == 0 && self.viewPointImageUrl != nil && ![self.viewPointImageUrl isEqualToString:@""]) {
+            cell.imageUrl = self.viewPointImageUrl;
+            cell.viewPointFlag = @"viewPoint";
+        }else {
+            NSInteger index = indexPath.row;
+                    if (self.viewPointImageUrl != nil && ![self.viewPointImageUrl isEqualToString:@""]) {
+                        index = indexPath.row - 1;
+                    }
+                    NSDictionary *RelationDoc = self.imageDocArr[index];
+            //        NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl,self.projectMdoel.bimcomposerid,[RelationDoc valueForKey:@"TargetID"]];
+                    NSString *url = [NSString stringWithFormat:@"%@%@",BaseUrl,[RelationDoc valueForKey:@"bf_path"]];
+                    cell.imageUrl = url;
+                    cell.roleType = self.roleType;
+        }
+    }
+    cell.DeleteImageBlock = ^{
+        if (self.DeleteImageBlock) {
+            NSInteger index = indexPath.row;
+            if (self.isAddIssue) {
+                if (self.viewPointImage) {
+                    index = indexPath.row - 1;
+                }
+            }else {
+                if (self.viewPointImageUrl) {
+                    index = indexPath.row - 1;
+                }
+            }
+            self.DeleteImageBlock(index);
+        }  
+    };
+    cell.OpenViewPointBlock = ^{
+        if (self.OpenViewPointBlock) {
+            self.OpenViewPointBlock();
+        }
+    };
+    return cell;
+}
+
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    if (self.isAddIssue) {
+        if (self.viewPointImage) {
+            photoBrowser.imageCount = self.imageArr.count + 1;
+        }else {
+            photoBrowser.imageCount = self.imageArr.count;
+        }
+    }else {
+        if (self.viewPointImageUrl) {
+            photoBrowser.imageCount = self.imageDocArr.count + 1;
+        }else {
+            photoBrowser.imageCount = self.imageDocArr.count;
+        }
+    }
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+}
+
+
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    if (self.isAddIssue) {
+        return cell.imageV.image;
+    }else {
+        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+        UIImage *image = [UIImage imageWithData:data];;
+        return image;
+    }
+}
+
+- (void)setImageArr:(NSMutableArray *)imageArr {
+    _imageArr = imageArr;
+    self.isAddIssue = YES;
+    [self.collectionView reloadData];
+    if (imageArr.count == 0 && self.viewPointImage == nil) {
+        self.collectionView.hidden = YES;
+    }else {
+        self.collectionView.hidden = NO;
+    }
+}
+
+- (void)setImageDocArr:(NSMutableArray *)imageDocArr {
+    _imageDocArr = imageDocArr;
+    self.isAddIssue = NO;
+    [self.collectionView reloadData];
+    if (imageDocArr.count == 0 && [self.viewPointImageUrl isEqualToString:@""]) {
+        self.collectionView.hidden = YES;
+    }else {
+        self.collectionView.hidden = NO;
+    }
+}
+
+- (void)setProjectMdoel:(PBProjectModel *)projectMdoel {
+    _projectMdoel = projectMdoel;
+}
+- (void)setRoleType:(RoleType)roleType {
+    _roleType = roleType;
+    if (roleType == CREATOR) {
+        [self.selectBtn setTitleColor:TitleColor forState:UIControlStateNormal];
+    }else {
+        [self.selectBtn setTitleColor:PromptColor forState:UIControlStateNormal];
+    }
+}
+- (void)setViewPointImage:(UIImage *)viewPointImage {
+    _viewPointImage = viewPointImage;
+}
+- (void)setViewPointImageUrl:(NSString *)viewPointImageUrl {
+    _viewPointImageUrl = viewPointImageUrl;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.h
new file mode 100644
index 0000000..2916698
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.h
@@ -0,0 +1,14 @@
+//
+//  PBImageTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/10.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBIssueImageTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^ChooseImageBlock)(void);
+@property (nonatomic, strong) NSMutableArray *imageArr;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.m
new file mode 100644
index 0000000..c5c154f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBIssueImageTableViewCell.m
@@ -0,0 +1,131 @@
+//
+//  PBImageTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/10.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBIssueImageTableViewCell.h"
+#import "PBImageCollectionViewCell.h"
+
+static NSString *const ImageCellID = @"ImageCellID";
+@interface PBIssueImageTableViewCell ()<UICollectionViewDelegate, UICollectionViewDataSource, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@end
+@implementation PBIssueImageTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self == [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    self.contentView.backgroundColor = [UIColor yellowColor];
+    UILabel *titleL = [UILabel z_labelWithText:@"关联图片(选填)" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(13);
+        make.left.equalTo(self.contentView).offset(16);
+        make.height.equalTo(@22);
+        make.width.equalTo(@129);
+    }];
+    
+    UIButton *selectBtn = [UIButton z_textButton:@"请选择" fontSize:MarkedFontSize normalColor:PromptColor];
+    [selectBtn addTarget:self action:@selector(chooseImageAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView).offset(-16);
+        make.centerY.equalTo(titleL);
+    }];
+    
+    UIView *lineV = [[UIView alloc] init];
+    [self.contentView addSubview:lineV];
+    [lineV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.left.equalTo(self.contentView).offset(20);
+        make.right.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@1);
+    }];
+
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(80, 80);
+    layout.minimumLineSpacing = 10;
+    layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lineV.mas_bottom).offset(16);
+        make.left.equalTo(self.contentView).offset(33);
+        make.right.equalTo(self.contentView).offset(-32);
+        make.height.equalTo(@80);
+        make.bottom.equalTo(self.contentView).offset(-26);
+    }];
+    
+}
+- (void)chooseImageAction:(UIButton *)button {
+    if (self.ChooseImageBlock) {
+        self.ChooseImageBlock();
+    }
+}
+
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+//    return self.imageArr.count + 1;
+    return 0;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+        cell.image = self.imageArr[indexPath.row];
+    cell.DeleteImageBlock = ^{
+        [self.imageArr removeObjectAtIndex:indexPath.row];
+        [self.collectionView reloadData];
+    };
+    return cell;
+}
+
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+        SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+        photoBrowser.delegate = self;
+        photoBrowser.currentImageIndex = indexPath.item;
+        photoBrowser.imageCount = self.imageArr.count;
+        photoBrowser.sourceImagesContainerView = self.collectionView;
+        
+        [photoBrowser show];
+}
+
+
+#pragma mark  SDPhotoBrowserDelegate
+
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    
+    return cell.image;
+    
+}
+
+- (void)setImageArr:(NSMutableArray *)imageArr {
+    _imageArr = imageArr;
+    [self.collectionView reloadData];
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.h
new file mode 100644
index 0000000..b671608
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.h
@@ -0,0 +1,14 @@
+//
+//  PBPersonCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBPersonCollectionViewCell : UICollectionViewCell
+@property (nonatomic, copy) NSString *name;
+@property (nonatomic, assign) RoleType roleType;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.m
new file mode 100644
index 0000000..e055828
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonCollectionViewCell.m
@@ -0,0 +1,46 @@
+//
+//  PBPersonCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBPersonCollectionViewCell.h"
+@interface PBPersonCollectionViewCell()
+@property (nonatomic, weak) UILabel *personNameL;
+@end
+@implementation PBPersonCollectionViewCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *personNameL = [UILabel z_labelWithText:@"" Color:WarningColor isBold:NO Font:12];
+    personNameL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:personNameL];
+    [personNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.bottom.equalTo(self.contentView).offset(-8);
+        make.left.equalTo(self.contentView).offset(2);
+        make.right.equalTo(self.contentView).offset(-2);
+    }];
+    self.personNameL = personNameL;
+}
+-(void)setName:(NSString *)name {
+    _name = name;
+    self.personNameL.text = name;
+}
+- (void)setRoleType:(RoleType)roleType {
+    _roleType = roleType;
+    if (roleType == CREATOR) {
+        self.contentView.backgroundColor = [UIColor z_colorWithR:255 G:170 B:0 alpha:0.12];
+        self.personNameL.textColor = WarningColor;
+    }else {
+        self.contentView.backgroundColor = [UIColor whiteColor];
+        self.personNameL.textColor = PromptColor;
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.h
new file mode 100644
index 0000000..a7a21a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBPersonTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+@class PBExamineAddModel;
+@interface PBPersonTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^EditPersonBlock)(void);
+@property (nonatomic, assign) BOOL isLabel;
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@property (nonatomic, strong) PBExamineAddModel *examineAddModel;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.m
new file mode 100644
index 0000000..5991621
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPersonTableViewCell.m
@@ -0,0 +1,200 @@
+//
+//  PBPersonTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBPersonTableViewCell.h"
+#import "PBPersonCollectionViewCell.h"
+#import "PBIssueAddModel.h"
+#import "PBPersonModel.h"
+#import "PBExamineAddModel.h"
+#import "PBTagModel.h"
+#define ItemWidth 120
+#define ItemHeight 34
+#define LineSpacing 6
+#define InteritemSpacing 6
+static NSString *cellID = @"cellID";
+
+@interface PBPersonTableViewCell()<UICollectionViewDataSource>
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *promteL;
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, assign) NSInteger aLineCount;
+@property (nonatomic, assign) BOOL isIssue;
+@end
+@implementation PBPersonTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"负责人" Color:PromptColor isBold:NO Font:DescFontSize];
+    titleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.right.equalTo(self.contentView);
+        make.height.equalTo(@20);
+    }];
+    
+    if (PBScreenWidth > 320) {
+        _aLineCount = 3;
+    }else {
+        _aLineCount = 2;
+    }
+    CGFloat margin = (PBScreenWidth - ((ItemWidth * _aLineCount) + ((_aLineCount - 1) * LineSpacing))) / 2;
+    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+    layout.itemSize = CGSizeMake(ItemWidth, ItemHeight);
+    layout.minimumLineSpacing = LineSpacing;
+    layout.minimumInteritemSpacing = InteritemSpacing;
+    layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    self.collectionView.backgroundColor = [UIColor clearColor];
+    [self.collectionView registerClass:[PBPersonCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+    self.collectionView.dataSource = self;
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.left.equalTo(self.contentView).offset(margin);
+        make.right.equalTo(self.contentView).offset(-margin);
+        make.height.equalTo(@25);
+        make.bottom.equalTo(self.contentView).offset(-16);
+    }];
+    
+    UILabel *promteL = [UILabel z_labelWithText:@"请选择负责人" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:promteL];
+    [promteL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.centerX.equalTo(titleL);
+        make.height.equalTo(@25);
+    }];
+    
+    UIButton *selectBtn = [[UIButton alloc] init];
+    [selectBtn addTarget:self action:@selector(selectBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.titleL = titleL;
+    self.promteL = promteL;
+}
+
+- (void)selectBtnAction {
+    if (_isIssue) {
+        if (self.issueAddModel.isAddIssue || self.issueAddModel.isIssueManager) {
+            if(self.EditPersonBlock) {
+                self.EditPersonBlock();
+            }
+        }
+    }else {
+        if (self.examineAddModel.isAddExamine || self.examineAddModel.isIssueManage){
+            if(self.EditPersonBlock) {
+                self.EditPersonBlock();
+            }
+        }
+    }
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    if (_isIssue) {
+        if (self.isLabel) {
+            return self.issueAddModel.labelArr.count;
+        }else {
+            return self.issueAddModel.personArr.count;
+        }
+    }else {
+        return self.examineAddModel.personArr.count;
+    }
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBPersonCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    PBPersonModel *personModel;
+    RoleType roleType;
+    if (_isIssue) {
+        if (self.isLabel) {
+            PBTagModel *tagModel = self.issueAddModel.labelArr[indexPath.row];
+            roleType = self.issueAddModel.roleType;
+            cell.name = tagModel.it_name;
+        }else {
+            personModel = self.issueAddModel.personArr[indexPath.row];
+            roleType = self.issueAddModel.roleType;
+            cell.name = personModel.RealName;
+        }
+    }else {
+        id data = self.examineAddModel.personArr[indexPath.row];
+        if ([data isKindOfClass:[PBPersonModel class]]) {
+            personModel = data;
+        }else {
+            personModel = [PBPersonModel yy_modelWithDictionary:data];
+        }
+        roleType = self.examineAddModel.roleType;
+        cell.name = personModel.RealName;
+    }
+    cell.roleType = roleType;
+    return cell;
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+    _isIssue = YES;
+    self.titleL.text = issueAddModel.title;
+    self.promteL.text = issueAddModel.prompt;
+    NSArray *arr;
+    if (self.isLabel) {
+        arr = self.issueAddModel.labelArr;
+    }else {
+        arr = self.issueAddModel.personArr;
+    }
+    if (arr.count == 0) {
+        self.promteL.hidden = NO;
+        if (issueAddModel.isIssueManager || issueAddModel.isAddIssue) {
+            self.promteL.textColor = TitleColor;
+        }else {
+            self.promteL.textColor = PromptColor;
+        }
+    }else {
+        self.promteL.hidden = YES;
+    }
+    NSInteger more = arr.count % _aLineCount == 0?  0 : 1;
+    NSInteger rowNumber = (arr.count / _aLineCount) + more;
+    CGFloat height = (ItemHeight *rowNumber) + (rowNumber - 1) * InteritemSpacing;
+    height = height < 25.0 ? 25.0 : height;
+    [self.collectionView reloadData];
+    [self.collectionView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@(height));
+    }];
+}
+
+- (void)setExamineAddModel:(PBExamineAddModel *)examineAddModel {
+    _examineAddModel = examineAddModel;
+    _isIssue = NO;
+    self.titleL.text = examineAddModel.title;
+    self.promteL.text = examineAddModel.prompt;
+    if (examineAddModel.personArr.count == 0) {
+        self.promteL.hidden = NO;
+    }else {
+        self.promteL.hidden = YES;
+    }
+    NSArray *arr = examineAddModel.personArr;
+    NSInteger more = arr.count % _aLineCount == 0?  0 : 1;
+    NSInteger rowNumber = (arr.count / _aLineCount) + more;
+    CGFloat height = (ItemHeight *rowNumber) + (rowNumber - 1) * InteritemSpacing;
+    height = height < 25.0 ? 25.0 : height;
+    [self.collectionView reloadData];
+    [self.collectionView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@(height));
+    }];
+}
+- (void)setIsLabel:(BOOL)isLabel {
+    _isLabel = isLabel;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.h
new file mode 100644
index 0000000..e50e594
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBPositionTableViewCell1.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueAddModel;
+
+@interface PBPositionTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^ChoosePositionBlock)(void);
+@property (nonatomic, copy) void(^OpenPositionBlock)(void);
+@property (nonatomic, strong) PBIssueAddModel *issueAddModel;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.m
new file mode 100644
index 0000000..ea19b7c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBPositionTableViewCell.m
@@ -0,0 +1,164 @@
+//
+//  PBPositionTableViewCell1.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/11.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBPositionTableViewCell.h"
+#import "PBIssueAddModel.h"
+#import "PBViewPointModel.h"
+
+@interface PBPositionTableViewCell ()
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UIButton *selectBtn;
+@property (nonatomic, weak) UIButton *openBtn;
+@end
+@implementation PBPositionTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"图纸定位(选填)" Color:PromptColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.height.equalTo(@22);
+    }];
+    UIButton *selectBtn = [UIButton z_textButton:@"请选择" fontSize:MarkedFontSize normalColor:TitleColor];
+    [selectBtn addTarget:self action:@selector(selectbtnAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:selectBtn];
+    [selectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView).offset(-16);
+        make.centerY.equalTo(titleL);
+    }];
+    
+    UIImageView *imageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo (titleL.mas_bottom).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(120, 120));
+    }];
+    
+    UILabel *nameL = [UILabel z_labelWithText:@"图纸名称" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@22);
+    }];
+    
+    UIButton *openBtn = [UIButton z_textButton:@"打开图纸" fontSize:MarkedFontSize normalColor:IndicatedColor];
+    [openBtn addTarget:self action:@selector(openbtnAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:openBtn];
+    [openBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView).offset(-16);
+        make.bottom.equalTo(imageV);
+    }];
+    
+    [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self);
+        make.bottom.equalTo(titleL.mas_bottom).offset(26);
+    }];
+    
+    self.titleL = titleL;
+    self.nameL = nameL;
+    self.imageV = imageV;
+    self.selectBtn = selectBtn;
+    self.openBtn = openBtn;
+}
+
+- (void)selectbtnAction:(UIButton *)button {
+    if (self.issueAddModel.roleType != CREATOR) {
+        return;
+    }
+    if (self.ChoosePositionBlock) {
+        self.ChoosePositionBlock();
+    }
+}
+
+- (void)openbtnAction:(UIButton *)button {
+    if (self.OpenPositionBlock) {
+        self.OpenPositionBlock();
+    }
+}
+
+- (void)setIssueAddModel:(PBIssueAddModel *)issueAddModel {
+    _issueAddModel = issueAddModel;
+    self.titleL.text = issueAddModel.title;
+    if (issueAddModel.roleType == CREATOR) {
+        [self.selectBtn setTitleColor:TitleColor forState:UIControlStateNormal];
+    }else {
+        [self.selectBtn setTitleColor:PromptColor forState:UIControlStateNormal];
+    }
+    if ([issueAddModel.key isEqualToString:@"viewPoint"]) {
+        if (issueAddModel.veiwPointModel == nil) {
+            [self.selectBtn setTitle:issueAddModel.prompt forState:UIControlStateNormal];
+            self.nameL.hidden = YES;
+            self.imageV.hidden = YES;
+            self.openBtn.hidden = YES;
+            [self.contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                make.top.left.right.equalTo(self);
+                make.bottom.equalTo(self.titleL.mas_bottom).offset(26);
+            }];
+        }else {
+            self.nameL.hidden = NO;
+            self.imageV.hidden = NO;
+            self.openBtn.hidden = NO;
+            [self.contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                make.top.left.right.equalTo(self);
+                make.bottom.equalTo(self.imageV.mas_bottom).offset(26);
+            }];
+            [self.selectBtn setTitle:@"更多操作" forState:UIControlStateNormal];
+            [self.openBtn setTitle:@"打开视点" forState:UIControlStateNormal];
+            self.nameL.text = self.issueAddModel.veiwPointModel.Name;
+            if (issueAddModel.veiwPointModel.Links.count == 0){
+                self.imageV.image = [UIImage imageNamed:@"Issue_viewPoint_fail"];
+            }else {
+                NSString *thumbnail = [issueAddModel.veiwPointModel.Links[0] valueForKey:@"Content"];
+                NSRange range = [thumbnail rangeOfString:@"base64,"];
+                thumbnail = [thumbnail substringFromIndex:range.location + range.length];
+                self.imageV.image = [NSString imageDecoding:thumbnail];
+            }
+        }
+    }else {
+        if (self.issueAddModel.drawingsInfoModel == nil) {
+            [self.selectBtn setTitle:issueAddModel.prompt forState:UIControlStateNormal];
+            self.nameL.hidden = YES;
+            self.imageV.hidden = YES;
+            self.openBtn.hidden = YES;
+            [self.contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                make.top.left.right.equalTo(self);
+                make.bottom.equalTo(self.titleL.mas_bottom).offset(26);
+            }];
+        }else {
+            self.nameL.hidden = NO;
+            self.imageV.hidden = NO;
+            self.openBtn.hidden = NO;
+            [self.contentView mas_remakeConstraints:^(MASConstraintMaker *make) {
+                make.top.left.right.equalTo(self);
+                make.bottom.equalTo(self.imageV.mas_bottom).offset(26);
+            }];
+            [self.selectBtn setTitle:@"更多操作" forState:UIControlStateNormal];
+            [self.openBtn setTitle:@"打开图纸" forState:UIControlStateNormal];
+            self.nameL.text = self.issueAddModel.drawingsInfoModel.name;
+            self.imageV.image = [NSString imageDecoding:self.issueAddModel.drawingsInfoModel.imagebase64];
+        }  
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+    
+    // Configure the view for the selected state
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.h
new file mode 100644
index 0000000..3a4568b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.h
@@ -0,0 +1,14 @@
+//
+//  PBPersonRoleTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBRoleTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSDictionary *roleData;
+@property (nonatomic, assign) BOOL isSelect;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.m
new file mode 100644
index 0000000..876d541
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBRoleTableViewCell.m
@@ -0,0 +1,68 @@
+//
+//  PBPersonRoleTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBRoleTableViewCell.h"
+@interface PBRoleTableViewCell()
+@property (nonatomic, weak) UILabel *roleNameL;
+@property (nonatomic, weak) UILabel *countL;
+@end
+@implementation PBRoleTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Issue_editPerson_roleIcon"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.left.equalTo(self.contentView).offset(24);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UILabel *roleNameL = [UILabel z_labelWithText:@"项目经理" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:roleNameL];
+    [roleNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(imageV.mas_right).offset(8);
+        make.centerY.equalTo(self.contentView);
+        make.right.equalTo(self.contentView).offset(-50);
+    }];
+    UILabel *countL = [UILabel z_labelWithText:@"15" Color:IndicatedColor isBold:NO Font:12];
+    [self.contentView addSubview:countL];
+    [countL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView).offset(10);
+        make.width.equalTo(@40);
+        make.centerY.equalTo(self.contentView);
+    }];
+    self.roleNameL = roleNameL;
+    self.countL = countL;
+}
+
+- (void)setRoleData:(NSDictionary *)roleData {
+    _roleData = roleData;
+    self.roleNameL.text = [roleData valueForKey:@"RoleName"];
+    self.countL.text = [NSString stringWithFormat:@"%zd",[[roleData valueForKey:@"Users"] count]];
+}
+- (void)setIsSelect:(BOOL)isSelect {
+    _isSelect = isSelect;
+    if (isSelect) {
+        self.roleNameL.textColor = WarningColor;
+    }else {
+        self.roleNameL.textColor = TitleColor;
+    }
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.h
new file mode 100644
index 0000000..3d36800
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.h
@@ -0,0 +1,15 @@
+//
+//  PBTableHeaderView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBViewPointModel;
+@interface PBTableHeaderView : UIView
+@property (nonatomic, strong) PBViewPointModel *viewPointModel;
+@property (nonatomic, assign) BOOL isAddIssue;
+@property (nonatomic, copy) void (^loadViewPointBlock)(PBViewPointModel *viewPointModel);
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.m
new file mode 100644
index 0000000..6f6a0bb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBTableHeaderView.m
@@ -0,0 +1,118 @@
+//
+//  PBTableHeaderView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBTableHeaderView.h"
+#import "PBViewPointModel.h"
+
+
+
+@interface PBTableHeaderView()
+@property (nonatomic, weak) UILabel *viewPointNameL;
+@property (nonatomic, weak) UILabel *viewPointDesceL;
+@property (nonatomic, weak) UIImageView *viewPointImageV;
+@property (nonatomic, weak) UIButton *loadViewPointBtn;
+@end
+@implementation PBTableHeaderView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *titleL = [UILabel z_labelWithText:@"关联图片" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(16);
+        make.left.equalTo(self).offset(16);
+    }];
+    
+//    UILabel *modelNameL = [UILabel z_labelWithText:@"模型名称-视点" Color:DescColor isBold:NO Font:TitleFontSize];
+//    modelNameL.textAlignment = NSTextAlignmentRight;
+//    [self addSubview:modelNameL];
+//    [modelNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(titleL);
+//        make.right.equalTo(self).offset(-16);
+//        make.left.equalTo(titleL.mas_right).offset(30);
+//    }];
+    
+    UIImageView *viewPointImageV = [[UIImageView alloc] init];
+    viewPointImageV.backgroundColor = [UIColor grayColor];
+    [self addSubview:viewPointImageV];
+    [viewPointImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(16);
+        make.left.equalTo(titleL);
+        make.size.mas_equalTo(CGSizeMake(120, 120));
+    }];
+    
+    UILabel *viewPointNameL = [UILabel z_labelWithText:@"视点名称XXXX" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self addSubview:viewPointNameL];
+    [viewPointNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(viewPointImageV);
+        make.right.equalTo(self).offset(-16);
+        make.left.equalTo(viewPointImageV.mas_right).offset(16);
+    }];
+    
+    UILabel *viewPointDesceL = [UILabel z_labelWithText:@"<无描述>" Color:DescColor isBold:NO Font:DescFontSize];
+    viewPointDesceL.numberOfLines = 0;
+    [self addSubview:viewPointDesceL];
+    [viewPointDesceL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(viewPointNameL.mas_bottom).offset(10);
+        make.right.equalTo(self).offset(-16);
+        make.left.equalTo(viewPointNameL);
+        make.bottom.equalTo(viewPointImageV).offset(-35);
+    }];
+    UIButton *loadViewPointBtn = [UIButton z_textButton:@"加载模型" fontSize:MarkedFontSize normalColor:IndicatedColor];
+    [loadViewPointBtn addTarget:self action:@selector(loadViewPoint) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:loadViewPointBtn];
+    [loadViewPointBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(75, 25));
+        make.right.equalTo(self).offset(-16);
+        make.bottom.equalTo(viewPointImageV);
+    }];
+    
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.equalTo(self);
+        make.height.equalTo(@10);
+    }];
+    self.viewPointImageV = viewPointImageV;
+    self.viewPointNameL = viewPointNameL;
+    self.viewPointDesceL = viewPointDesceL;
+    self.loadViewPointBtn = loadViewPointBtn;
+}
+
+- (void)setViewPointModel:(PBViewPointModel *)viewPointModel {
+    _viewPointModel = viewPointModel;
+    NSString *thumbnail = viewPointModel.Snapshot;
+    NSRange range = [thumbnail rangeOfString:@"base64,"];
+    thumbnail = [thumbnail substringFromIndex:range.location + range.length];
+    UIImage *image = [NSString imageDecoding:thumbnail];
+    self.viewPointImageV.image = image;
+    self.viewPointNameL.text = viewPointModel.Name;
+    NSDictionary *dict = [NSString convertTodictionaryOrArr:viewPointModel.Tag];
+    NSString *desc = [dict valueForKey:@"description"];
+    self.viewPointDesceL.text = [desc isEqualToString:@""] ? @"<无描述>" : desc;
+}
+- (void)loadViewPoint {
+    if (self.loadViewPointBlock) {
+        self.loadViewPointBlock(_viewPointModel);
+    }
+}
+- (void)setIsAddIssue:(BOOL)isAddIssue {
+    _isAddIssue = isAddIssue;
+    if (isAddIssue) {
+        self.loadViewPointBtn.hidden = YES;
+    }else {
+        self.loadViewPointBtn.hidden = NO;
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.h
new file mode 100644
index 0000000..1b2aae2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBVideoCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/25.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBVideoCollectionViewCell : UICollectionViewCell
+@property (nonatomic, copy) NSString *videoUrl;
+@property (nonatomic, copy) void(^PlayVideoBlock)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.m
new file mode 100644
index 0000000..f6db481
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/AddIssueView/PBVideoCollectionViewCell.m
@@ -0,0 +1,55 @@
+//
+//  PBVideoCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/8/25.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBVideoCollectionViewCell.h"
+@interface PBVideoCollectionViewCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UIButton *playBtn;
+@end
+@implementation PBVideoCollectionViewCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+//       UIViewContentModeScaleToFill,
+//       UIViewContentModeScaleAspectFit,      // contents scaled to fit with fixed aspect. remainder is transparent
+//       UIViewContentModeScaleAspectFill,     // contents scaled to fill with fixed aspect. some portion of content may be clipped.
+//       UIViewContentModeRedraw,              // redraw on bounds change (calls -setNeedsDisplay)
+//       UIViewContentModeCenter,
+    imageV.contentMode = UIViewContentModeScaleAspectFill;
+    imageV.backgroundColor = [UIColor blackColor];
+    UIButton *playBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"details_play"]];
+    [playBtn addTarget:self action:@selector(playViedo) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:playBtn];
+    [playBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(self.contentView);
+        make.size.mas_equalTo(CGSizeMake(30, 30));
+    }];
+   
+    self.imageV = imageV;
+    self.playBtn = playBtn;
+}
+- (void)playViedo {
+    if (self.PlayVideoBlock) {
+        self.PlayVideoBlock();
+    }
+}
+- (void)setVideoUrl:(NSString *)videoUrl {
+    _videoUrl = videoUrl;
+    NSString *imageStr = [videoUrl stringByReplacingOccurrencesOfString:@".mp4" withString:@"_image.png"];
+    [self.imageV sd_setImageWithURL:[NSURL URLWithString:imageStr] placeholderImage:[UIImage imageNamed:@""]];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.h
new file mode 100644
index 0000000..ce9b271
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.h
@@ -0,0 +1,18 @@
+//
+//  PBCommentsCell.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBCommentsModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBCommentsCell : UITableViewCell
+@property (nonatomic, copy) void(^deleteCommentsBlock)(void);
+@property (nonatomic, strong) PBCommentsModel *commentsModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.m
new file mode 100644
index 0000000..d58853e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsCell.m
@@ -0,0 +1,142 @@
+//
+//  PBCommentsCell.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBCommentsCell.h"
+#import "PBProjectModel.h"
+#import "PBCommentsModel.h"
+@interface PBCommentsCell()
+@property (nonatomic, weak) UIImageView *iconImageV;
+@property (nonatomic, weak) UILabel *creatorL;
+@property (nonatomic, weak) UILabel *textL;
+@property (nonatomic, weak) UILabel *creatimeL;
+@property (nonatomic, weak) UIButton *deleteBtn;
+@property (nonatomic, weak) UILabel *iconL;
+@end
+@implementation PBCommentsCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *iconImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Issue_comments_iconbg"]];
+    [self.contentView addSubview:iconImageV];
+    [iconImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.left.equalTo(self.contentView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(30, 30));
+    }];
+    UILabel *iconL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:DescFontSize];
+    iconL.textAlignment = NSTextAlignmentCenter;
+    [iconImageV addSubview:iconL];
+    [iconL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.equalTo(iconImageV);
+        make.height.equalTo(@20);
+        make.center.equalTo(iconImageV);
+    }];
+    UILabel *creatorL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:YES Font:TitleFontSize];
+    [self.contentView addSubview:creatorL];
+    [creatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.left.equalTo(iconImageV.mas_right).offset(8);
+        make.height.equalTo(@22);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    UILabel *textL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:CommentsSize];
+    textL.numberOfLines = 0;
+    [self.contentView addSubview:textL];
+    [textL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(creatorL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(54);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    UILabel *creatimeL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:creatimeL];
+    [creatimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textL.mas_bottom).offset(12);
+        make.bottom.equalTo(self.contentView).offset(-18);
+        make.left.equalTo(self.contentView).offset(54);
+        make.height.equalTo(@20);
+    }];
+    UIButton *deleteBtn = [[UIButton alloc] init];
+    [deleteBtn setImage:[UIImage imageNamed:@"Issue_comment_deleteBtn"] forState:UIControlStateNormal];
+    [deleteBtn addTarget:self action:@selector(deletecomment) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(creatimeL);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(242, 242, 242);
+    [self.contentView addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.left.right.equalTo(self.contentView);
+        make.height.equalTo(@10);
+    }];
+    self.iconImageV = iconImageV;
+    self.creatorL = creatorL;
+    self.textL = textL;
+    self.creatimeL = creatimeL;
+    self.deleteBtn = deleteBtn;
+    self.iconL = iconL;
+}
+//删除
+- (void)deletecomment {
+    if (self.deleteCommentsBlock) {
+        self.deleteCommentsBlock();
+    }
+}
+- (void)setCommentsModel:(PBCommentsModel *)commentsModel {
+    _commentsModel = commentsModel;
+    
+    if (commentsModel.realname == nil || [commentsModel.realname isEqualToString:@""]) {
+        self.iconL.text = @"";
+    }else {
+        BOOL isChiness = [self IsChinese:commentsModel.realname];
+        if (isChiness) {
+            self.iconL.text = [commentsModel.realname substringFromIndex:commentsModel.realname.length - 1];
+        }else {
+            self.iconL.text = [commentsModel.realname substringToIndex:1];
+        }
+    }
+//    self.iconL.text = commentsModel.realname;
+    self.creatorL.text = commentsModel.realname;
+    if ([commentsModel.userid isEqualToString:UserID]) {
+        self.deleteBtn.hidden = NO;
+    }else {
+        self.deleteBtn.hidden = YES;
+    }
+    self.textL.text = commentsModel.content;
+    NSRange range = [commentsModel.createdate rangeOfString:@":"];
+    NSString *timeStr = [commentsModel.createdate substringToIndex:range.location + 3];
+    timeStr = [timeStr stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    self.creatimeL.text = [timeStr stringByReplacingOccurrencesOfString:@"-" withString:@"/"];
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.h
new file mode 100644
index 0000000..6ed65e3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.h
@@ -0,0 +1,14 @@
+//
+//  PBCommentsFooterView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/4.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBCommentsFooterView : UIView
+@property (nonatomic, strong) NSMutableArray *selectedPhotos;
+@property (nonatomic, copy) void(^deleteImageBlock)(NSInteger index);
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.m
new file mode 100644
index 0000000..8c639a5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBCommentsFooterView.m
@@ -0,0 +1,98 @@
+//
+//  PBCommentsFooterView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/4.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBCommentsFooterView.h"
+#import "PBImageCollectionViewCell.h"
+
+#define ALineCount 3
+
+#define Spacing 10
+static NSString *const cellID = @"cellID";
+@interface PBCommentsFooterView()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, assign) CGFloat itemWH;
+@end
+@implementation PBCommentsFooterView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    [self addSubview:self.collectionView];
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(16);
+        make.left.equalTo(self).offset(Spacing);
+        make.right.equalTo(self).offset(-Spacing);
+        make.bottom.equalTo(self).offset(-16);
+    }];
+}
+
+- (UICollectionView *)collectionView{
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+        CGFloat itemWH = (PBScreenWidth - (ALineCount + 1) * Spacing) / ALineCount;
+        self.itemWH = itemWH;
+        layout.itemSize = CGSizeMake(itemWH, itemWH);
+        layout.minimumLineSpacing = Spacing;
+        layout.minimumInteritemSpacing = Spacing;
+        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+        _collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+        _collectionView.backgroundColor = [UIColor whiteColor];
+        [_collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+        
+    }
+    return _collectionView;
+}
+
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    return self.selectedPhotos.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    cell.image = self.selectedPhotos[indexPath.row];
+    cell.roleType = CREATOR;
+    cell.DeleteImageBlock = ^{
+        if (self.deleteImageBlock) {
+            self.deleteImageBlock(indexPath.row);
+        }
+    };
+    return cell;
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    photoBrowser.imageCount = self.selectedPhotos.count;
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+    
+}
+#pragma mark - SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    return cell.imageV.image;
+}
+- (void)setSelectedPhotos:(NSMutableArray *)selectedPhotos {
+    _selectedPhotos = selectedPhotos;
+    [self.collectionView reloadData];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.h
new file mode 100644
index 0000000..30f4b9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.h
@@ -0,0 +1,23 @@
+//
+//  PBDropdownMenu.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBDropdownMenu;
+@protocol PBDropdownMenuDelegate <NSObject>
+
+@optional
+- (void)dropdownMenu:(UIButton *)clickBtn selectedCellNumber:(NSInteger)number; // 当选择某个选项时调用
+@end
+
+@interface PBDropdownMenu : UIView <UITableViewDataSource,UITableViewDelegate>
+@property (nonatomic, assign) id <PBDropdownMenuDelegate>delegate;
+
+- (instancetype)initWithFrame:(CGRect)frame andArr:(NSArray *)arr;
+- (void)showDropDown; // 显示下拉菜单
+- (void)hideDropDown; // 隐藏下拉菜单
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.m
new file mode 100644
index 0000000..56cb5f6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBDropdownMenu.m
@@ -0,0 +1,211 @@
+//
+//  PBDropdownMenu.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDropdownMenu.h"
+#import "PBIssueNavModel.h"
+#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
+#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
+#define AnimateTime 0.25f   // 下拉动画时间
+@interface PBDropdownMenu()<UIGestureRecognizerDelegate>
+@property (nonatomic, strong) UIView *backgroundView;//背景视图
+@property (nonatomic, strong) UITableView *tableView;//选择列表
+@property (nonatomic, assign) BOOL isShow;//标识是否是弹出状态
+@property (nonatomic, strong) NSMutableArray *selectIndexArr;//标识是否是弹出状态
+@property (nonatomic, assign) NSInteger currentSelectIndex;//标识是否是弹出状态
+@property (nonatomic, strong) NSMutableArray *buttonArr;//标识是否是弹出状态
+@end
+@implementation PBDropdownMenu {
+    CGFloat _rowHeight;   // 下拉列表行高
+    NSArray *_titleArr;
+}
+
+- (void)setBtnTitle:(NSString *)title {
+    UIButton *clickBtn = self.buttonArr[self.currentSelectIndex];
+    [clickBtn setTitle:title forState:UIControlStateNormal];
+    CGFloat imageWidth = clickBtn.imageView.bounds.size.width;
+    CGFloat labelWidth = clickBtn.titleLabel.bounds.size.width;
+    clickBtn.imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth, 0, -labelWidth);
+    clickBtn.titleEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, 0, imageWidth);
+}
+
+
+- (instancetype)initWithFrame:(CGRect)frame andArr:(NSArray *)arr {
+    if (self = [super initWithFrame:frame]) {
+        _titleArr = arr;
+        [self creatMenuListWithArr:arr];
+    }
+    return self;
+}
+- (void)creatMenuListWithArr:(NSArray *)arr {
+    _rowHeight = 40.f;
+    CGFloat meunWidth = self.width / arr.count;
+    for (NSInteger i = 0; i < arr.count; i++) {
+        UIButton *clickBtn = [[UIButton alloc] init];
+        clickBtn.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+        [clickBtn setFrame:CGRectMake(meunWidth * i, 0, meunWidth, self.height)];
+        clickBtn.titleLabel.font = [UIFont systemFontOfSize:TitleFontSize];
+        [clickBtn setTitleColor:TitleColor forState:UIControlStateNormal];
+        PBIssueNavModel *issueNavModel = arr[i][0];
+        [clickBtn setImage:[UIImage imageNamed:@"Issue_ retrieve_default"] forState:UIControlStateNormal];
+        [clickBtn setTitle:issueNavModel.ItemName forState:UIControlStateNormal];
+        CGFloat imageWidth = clickBtn.imageView.bounds.size.width;
+        CGFloat labelWidth = clickBtn.titleLabel.bounds.size.width;
+        clickBtn.imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth, 0, -labelWidth);
+        clickBtn.titleEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, 0, imageWidth);
+        clickBtn.selected = NO;
+        [clickBtn addTarget:self action:@selector(clickMainBtn:) forControlEvents:UIControlEventTouchUpInside];
+        clickBtn.tag = 100 + i;
+        [self.buttonArr addObject:clickBtn];
+        [self addSubview:clickBtn];
+    }
+}
+#pragma mark - 点击方法
+- (void)clickMainBtn:(UIButton *)button{
+    if (_currentSelectIndex == (button.tag - 100)) {
+        if (_isShow) {
+            [self hideDropDown];
+        }else {
+            [self showDropDown];
+        }
+    }else {
+        if (_isShow) {
+            [self hideDropDown];
+        }else {
+            self.currentSelectIndex = button.tag - 100;
+            [self showDropDown];
+        }
+    }
+}
+#pragma mark - 显示下拉列表
+- (void)showDropDown {
+    [self.superview addSubview:self.backgroundView];
+    [self.backgroundView addSubview:self.tableView];
+    UIButton *clickBtn = self.buttonArr[self.currentSelectIndex];
+    [UIView animateWithDuration:AnimateTime animations:^{
+        clickBtn.imageView.transform = CGAffineTransformMakeRotation(M_PI);
+        NSArray *titles = self->_titleArr[self.currentSelectIndex];
+        CGFloat tableViewH = self->_rowHeight * titles.count;
+        if (tableViewH > self->_rowHeight * 4) {
+            tableViewH = self->_rowHeight * 4;
+        }
+        self->_tableView.frame = CGRectMake(0, 0, SCREEN_WIDTH, tableViewH);
+        self.backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.3];
+    }completion:^(BOOL finished) {
+        self->_isShow = YES;
+    }];
+    [clickBtn setTitleColor:WarningColor forState:UIControlStateNormal];
+    [clickBtn setImage:[UIImage imageNamed:@"Issue_ retrieve_show"] forState:UIControlStateNormal];
+}
+#pragma mark -  隐藏下拉列表
+- (void)hideDropDown{
+    UIButton *clickBtn = self.buttonArr[self.currentSelectIndex];
+    [UIView animateWithDuration:AnimateTime animations:^{
+        clickBtn.imageView.transform = CGAffineTransformIdentity;
+        self.backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
+        self->_tableView.frame = CGRectMake(0, 0, SCREEN_WIDTH, 0);
+    }completion:^(BOOL finished) {
+        [self.backgroundView removeFromSuperview];
+        [self.tableView removeFromSuperview];
+        self->_isShow = NO;
+    }];
+    [clickBtn setTitleColor:TitleColor forState:UIControlStateNormal];
+    [clickBtn setImage:[UIImage imageNamed:@"Issue_ retrieve_default"] forState:UIControlStateNormal];
+}
+
+#pragma mark - UITableView Delegate
+-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return _rowHeight;
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSArray *titles = _titleArr[self.currentSelectIndex];
+    return titles.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    static NSString *CellIdentifier = @"Cell";
+    NSArray *titles = _titleArr[self.currentSelectIndex];
+    NSInteger selectIndex = [self.selectIndexArr[self.currentSelectIndex] integerValue];
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+    if (cell == nil) {
+        //---------------------------下拉选项样式,可在此处自定义-------------------------
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
+        cell.textLabel.font          = [UIFont systemFontOfSize:16.f];
+//        cell.textLabel.textColor     = [UIColor blackColor];
+//        cell.selectionStyle          = UITableViewCellSelectionStyleNone;
+        
+        //---------------------------------------------------------------------------
+    }
+    if (selectIndex == indexPath.row) {
+        cell.textLabel.textColor     = WarningColor;
+        cell.selectionStyle          = UITableViewCellSelectionStyleBlue;
+    }else {
+        cell.textLabel.textColor     = TitleColor;
+        cell.selectionStyle          = UITableViewCellSelectionStyleNone;
+    }
+    PBIssueNavModel *issueNavModel = titles[indexPath.row];
+    cell.textLabel.text = issueNavModel.ItemName;
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    self.selectIndexArr[self.currentSelectIndex] = [NSNumber numberWithInteger:indexPath.row];
+    NSArray *titles = _titleArr[self.currentSelectIndex];
+    PBIssueNavModel *issueNavModel = titles[indexPath.row];
+    [self setBtnTitle:issueNavModel.ItemName];
+    if ([self.delegate respondsToSelector:@selector(dropdownMenu:selectedCellNumber:)]) {
+        [self.delegate dropdownMenu:self.buttonArr[self.currentSelectIndex] selectedCellNumber:indexPath.row];
+    }
+    [self hideDropDown];
+}
+
+- (UIView *)backgroundView {
+    if (_backgroundView == nil) {
+        _backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0 , self.y + self.height, SCREEN_WIDTH, SCREEN_HEIGHT - self.y - self.height)];
+        _backgroundView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
+        [_backgroundView setOpaque:NO];
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backTapped:)];
+        tap.delegate = self;
+        [_backgroundView addGestureRecognizer:tap];
+    }
+    return _backgroundView;
+}
+
+- (void)backTapped:(UITapGestureRecognizer *)sender {
+    [self hideDropDown];
+}
+
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
+    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
+        return NO;
+    } else {
+        return YES;
+    }
+}
+- (UITableView *)tableView {
+    _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0,SCREEN_WIDTH,0)];
+    _tableView.delegate = self;
+    _tableView.dataSource = self;
+    _tableView.bounces = NO;
+    return _tableView;
+}
+- (NSMutableArray *)selectIndexArr {
+    if (_selectIndexArr == nil) {
+        _selectIndexArr = [[NSMutableArray alloc] init];
+        for (NSInteger i = 0; i < _titleArr.count; i++) {
+            [_selectIndexArr addObject:[NSNumber numberWithInteger:0]];
+        }
+    }
+    return _selectIndexArr;
+}
+- (NSMutableArray *)buttonArr {
+    if (_buttonArr == nil) {
+        _buttonArr = [[NSMutableArray alloc] init];
+    }
+    return _buttonArr;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.h
new file mode 100644
index 0000000..8bb2515
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.h
@@ -0,0 +1,20 @@
+//
+//  PBImageCommentsCell.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBCommentsModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBImageCommentsCell : UITableViewCell
+@property (nonatomic, copy) void(^deleteCommentsBlock)(void);
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBCommentsModel *commentsModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.m
new file mode 100644
index 0000000..dc8a559
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBImageCommentsCell.m
@@ -0,0 +1,172 @@
+//
+//  PBImageCommentsCell.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2020/3/18.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBImageCommentsCell.h"
+#import "PBProjectModel.h"
+#import "PBCommentsModel.h"
+#import "PBImageCollectionViewCell.h"
+
+static NSString *const ImageCellID = @"ImageCellID";
+@interface PBImageCommentsCell()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (nonatomic, weak) UIImageView *iconImageV;
+@property (nonatomic, weak) UILabel *creatorL;
+@property (nonatomic, weak) UILabel *creatimeL;
+@property (nonatomic, weak) UIButton *deleteBtn;
+@property (nonatomic, weak) UILabel *iconL;
+@end
+@implementation PBImageCommentsCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *iconImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Issue_comments_iconbg"]];
+    [self.contentView addSubview:iconImageV];
+    [iconImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.left.equalTo(self.contentView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(30, 30));
+    }];
+    UILabel *iconL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:DescFontSize];
+    iconL.textAlignment = NSTextAlignmentCenter;
+    [iconImageV addSubview:iconL];
+    [iconL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.equalTo(iconImageV);
+        make.height.equalTo(@20);
+        make.center.equalTo(iconImageV);
+    }];
+    UILabel *creatorL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:YES Font:TitleFontSize];
+    [self.contentView addSubview:creatorL];
+    [creatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.left.equalTo(iconImageV.mas_right).offset(8);
+        make.height.equalTo(@22);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(120, 120);
+    layout.minimumLineSpacing = 10;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    self.collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [self.collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+    self.collectionView.delegate = self;
+    self.collectionView.dataSource = self;
+    self.collectionView.bounces = NO;
+    self.collectionView.scrollEnabled = NO;
+    self.collectionView.showsHorizontalScrollIndicator = NO;
+    self.collectionView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(creatorL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(54);
+        make.size.mas_equalTo(CGSizeMake(120, 120));
+    }];
+ 
+    UILabel *creatimeL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:creatimeL];
+    [creatimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.collectionView.mas_bottom).offset(12);
+        make.bottom.equalTo(self.contentView).offset(-18);
+        make.left.equalTo(self.contentView).offset(54);
+        make.height.equalTo(@20);
+    }];
+    UIButton *deleteBtn = [[UIButton alloc] init];
+    [deleteBtn setImage:[UIImage imageNamed:@"Issue_comment_deleteBtn"] forState:UIControlStateNormal];
+    [deleteBtn addTarget:self action:@selector(deletecomment) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(creatimeL);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(242, 242, 242);
+    [self.contentView addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.left.right.equalTo(self.contentView);
+        make.height.equalTo(@10);
+    }];
+    self.iconImageV = iconImageV;
+    self.creatorL = creatorL;
+    self.creatimeL = creatimeL;
+    self.deleteBtn = deleteBtn;
+    self.iconL = iconL;
+}
+//删除
+- (void)deletecomment {
+    if (self.deleteCommentsBlock) {
+        self.deleteCommentsBlock();
+    }
+}
+- (void)setCommentsModel:(PBCommentsModel *)commentsModel {
+    _commentsModel = commentsModel;
+    self.iconL.text = commentsModel.realname;
+    self.creatorL.text = commentsModel.realname;
+    if ([commentsModel.userid isEqualToString:UserID]) {
+        self.deleteBtn.hidden = NO;
+    }else {
+        self.deleteBtn.hidden = YES;
+    }
+    NSRange range = [commentsModel.createdate rangeOfString:@":"];
+    NSString *timeStr = [commentsModel.createdate substringToIndex:range.location + 3];
+    timeStr = [timeStr stringByReplacingOccurrencesOfString:@" " withString:@" "];
+    self.creatimeL.text = [timeStr stringByReplacingOccurrencesOfString:@"-" withString:@"/"];
+    [self.collectionView reloadData];
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return 1;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl,self.projectModel.bimcomposerid,[self.commentsModel.contenttypeJson valueForKey:@"contentImgId"]];
+    cell.roleType = PARTICIPANT;
+    cell.imageUrl = url;
+    return cell;
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    photoBrowser.imageCount = 1;
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+}
+ 
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index
+{
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+    UIImage *image = [UIImage imageWithData:data];;
+    return image;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.h
new file mode 100644
index 0000000..3b470d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.h
@@ -0,0 +1,15 @@
+//
+//  PBIssueListTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBIssueListModel;
+@class PBProjectModel;
+@interface PBIssueListTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBIssueListModel *issueListModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.m
new file mode 100644
index 0000000..6a58bbe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBIssueListTableViewCell.m
@@ -0,0 +1,110 @@
+//
+//  PBIssueListTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/8/8.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBIssueListTableViewCell.h"
+#import "PBIssueListModel.h"
+#import "PBProjectModel.h"
+@interface PBIssueListTableViewCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UILabel *titleL;
+@property (nonatomic, weak) UILabel *creatorL;
+@property (nonatomic, weak) UILabel *creatimeL;
+@property (nonatomic, weak) UILabel *archiveL;
+@end
+
+@implementation PBIssueListTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(120, 90));
+    }];
+ 
+    UILabel *titleL = [UILabel z_labelWithText:@"测试问题追踪" Color:TitleColor isBold:NO Font:TitleFontSize];
+    titleL.numberOfLines = 0;
+    [self.contentView addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(8);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@44);
+    }];
+    UIImageView *creatorV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Project_list_cell_manager"]];
+    [self.contentView addSubview:creatorV];
+    [creatorV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(titleL.mas_bottom).offset(12);
+        make.left.equalTo(imageV.mas_right).offset(8);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UILabel *creatorL = [UILabel z_labelWithText:@"张三丰" Color:IndicatedColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:creatorL];
+    [creatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(creatorV.mas_right).offset(8);
+        make.centerY.equalTo(creatorV);
+        make.width.equalTo(@70);
+    }];
+    
+    
+    UILabel *creatimeL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:creatimeL];
+    [creatimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(creatorV);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    UILabel *archiveL = [UILabel z_labelWithText:@"已归档" Color:[UIColor redColor] isBold:YES Font:12];
+    [self.contentView addSubview:archiveL];
+    [archiveL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(creatimeL.mas_bottom).offset(5);
+        make.right.equalTo(self.contentView).offset(-20);
+    }];
+    
+    self.imageV = imageV;
+    self.titleL = titleL;
+    self.creatorL = creatorL;
+    self.creatimeL = creatimeL;
+    self.archiveL = archiveL;
+}
+
+- (void)setIssueListModel:(PBIssueListModel *)issueListModel {
+    _issueListModel = issueListModel;
+    if ([issueListModel.DeleteMark isEqualToString:@"2"]) {
+        self.archiveL.hidden = NO;
+    }else {
+        self.archiveL.hidden = YES;
+    }
+    
+//    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl,self.projectModel.bimcomposerid,issueListModel.FileId];
+    if (issueListModel.ViewpointID == nil || [issueListModel.ViewpointID isEqualToString:@""]) {
+        [self.imageV sd_setImageWithURL:[NSURL URLWithString:issueListModel.bgpicture_src] placeholderImage:[UIImage imageNamed:@"Issue_listimg_defult"]];
+    }else {
+        [self.imageV sd_setImageWithURL:[NSURL URLWithString:issueListModel.ImageUrl] placeholderImage:[UIImage imageNamed:@"Issue_listimg_defult"]];
+    }
+    _titleL.text = issueListModel.Title;
+    _creatorL.text = _issueListModel.CreateUserName;
+    NSString *time = issueListModel.CreateDate;
+    time = [time stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    time = [time stringByReplacingOccurrencesOfString:@"-" withString:@"/"];
+    time = [time substringToIndex:time.length - 3];
+    _creatimeL.text = time;
+    
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.h
new file mode 100644
index 0000000..bdb36ba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.h
@@ -0,0 +1,19 @@
+//
+//  PBPublishCommentCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/18.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBCommentsModel;
+@interface PBPublishCommentCell : UITableViewCell
+@property (nonatomic, copy) void(^ReplyBlock)(PBCommentsModel *commentsModel);
+@property (nonatomic, copy) void(^deleteCommentsBlock)(void);
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBCommentsModel *commentsModel;
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.m
new file mode 100644
index 0000000..f5f0463
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Issue/Views/PBPublishCommentCell.m
@@ -0,0 +1,225 @@
+//
+//  PBPublishCommentCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/18.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBPublishCommentCell.h"
+#import "PBProjectModel.h"
+#import "PBCommentsModel.h"
+#import "PBImageCollectionViewCell.h"
+
+#define ALineCount 3
+#define Spacing 10
+static NSString *const cellID = @"cellID";
+@interface PBPublishCommentCell()<UICollectionViewDataSource, UICollectionViewDelegate, SDPhotoBrowserDelegate>
+@property (nonatomic, strong) UICollectionView *collectionView;
+@property (assign, nonatomic) CGFloat itemWH;
+@property (nonatomic, weak) UIImageView *iconImageV;
+@property (nonatomic, weak) UILabel *creatorL;
+@property (nonatomic, weak) UILabel *textL;
+@property (nonatomic, weak) UILabel *creatimeL;
+@property (nonatomic, weak) UIButton *functionBtn;
+@property (nonatomic, weak) UILabel *iconL;
+@end
+@implementation PBPublishCommentCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *iconImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Issue_comments_iconbg"]];
+    [self.contentView addSubview:iconImageV];
+    [iconImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.left.equalTo(self.contentView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(30, 30));
+    }];
+    UILabel *iconL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:DescFontSize];
+    iconL.textAlignment = NSTextAlignmentCenter;
+    [iconImageV addSubview:iconL];
+    [iconL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.equalTo(iconImageV);
+        make.height.equalTo(@20);
+        make.center.equalTo(iconImageV);
+    }];
+
+    UILabel *creatorL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:YES Font:TitleFontSize];
+    [self.contentView addSubview:creatorL];
+    [creatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.left.equalTo(iconImageV.mas_right).offset(8);
+        make.height.equalTo(@22);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    
+    UILabel *textL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:CommentsSize];
+    textL.numberOfLines = 0;
+    [self.contentView addSubview:textL];
+    [textL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(creatorL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(54);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    
+    [self.contentView addSubview:self.collectionView];
+    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(54);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@95);
+        make.bottom.equalTo(self.contentView).offset(-46);
+    }];
+    
+    UILabel *creatimeL = [UILabel z_labelWithText:@"" Color:PromptColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:creatimeL];
+    [creatimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.contentView).offset(-18);
+        make.left.equalTo(self.contentView).offset(54);
+        make.height.equalTo(@20);
+    }];
+    UIButton *replyBtn = [UIButton z_textButton:@"回复TA" fontSize:DescFontSize normalColor:IndicatedColor];
+    [replyBtn addTarget:self action:@selector(replyBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:replyBtn];
+    [replyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(creatimeL);
+        make.left.equalTo(creatimeL.mas_right).offset(23);
+    }];
+    
+    UIButton *functionBtn = [[UIButton alloc] init];
+    [functionBtn setImage:[UIImage imageNamed:@"Issue_comment_deleteBtn"] forState:UIControlStateNormal];
+    [functionBtn addTarget:self action:@selector(deletecomment) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:functionBtn];
+    [functionBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(creatimeL);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+     
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(242, 242, 242);
+    [self.contentView addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.left.right.equalTo(self.contentView);
+        make.height.equalTo(@10);
+    }];
+    
+    self.iconImageV = iconImageV;
+    self.creatorL = creatorL;
+    self.textL = textL;
+    self.creatimeL = creatimeL;
+    self.functionBtn = functionBtn;
+    self.iconL = iconL;
+}
+//回复
+- (void)replyBtnAction {
+    if (self.ReplyBlock) {
+        self.ReplyBlock(self.commentsModel);
+    }
+}
+
+//删除
+- (void)deletecomment {
+    if (self.deleteCommentsBlock) {
+        self.deleteCommentsBlock();
+    }
+}
+
+//懒加载
+- (UICollectionView *)collectionView{
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+        CGFloat itemWH = (PBScreenWidth - 54 - 16 - (ALineCount - 1) * Spacing) / ALineCount;
+        self.itemWH = itemWH;
+        layout.itemSize = CGSizeMake(itemWH, itemWH);
+        layout.minimumLineSpacing = Spacing;
+        layout.minimumInteritemSpacing = Spacing;
+        layout.scrollDirection = UICollectionViewScrollDirectionVertical;
+        _collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+        _collectionView.backgroundColor = [UIColor clearColor];
+        [_collectionView registerClass:[PBImageCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+    }
+    return _collectionView;
+}
+
+
+- (void)setCommentsModel:(PBCommentsModel *)commentsModel {
+    _commentsModel = commentsModel;
+    self.iconL.text = commentsModel.realname;
+    self.creatorL.text = commentsModel.realname;
+    if ([commentsModel.userid isEqualToString:UserID]) {
+        self.functionBtn.hidden = NO;
+    }else {
+        self.functionBtn.hidden = YES;
+    }
+    self.textL.text = commentsModel.content;
+    NSRange range = [commentsModel.createdate rangeOfString:@":"];
+    NSString *timeStr = [commentsModel.createdate substringToIndex:range.location + 3];
+    timeStr = [timeStr stringByReplacingOccurrencesOfString:@" " withString:@" "];
+    self.creatimeL.text = [timeStr stringByReplacingOccurrencesOfString:@"-" withString:@"/"];
+//    NSInteger more = self.commentsModel.TalkDocs.count % ALineCount == 0 ?  0 : 1;
+//    NSInteger rowNumber = (self.commentsModel.TalkDocs.count / ALineCount) + more;
+//    CGFloat collectViewH = (self.itemWH * rowNumber) + (rowNumber - 1) * Spacing;
+//    collectViewH = collectViewH < 0 ? 0 : collectViewH;
+//    [self.collectionView mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.height.equalTo(@(collectViewH));
+//    }];
+//    [self.collectionView reloadData];
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+//    return self.commentsModel.TalkDocs.count;
+    return 0;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    PBImageCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+//    NSDictionary *associatedImage = self.commentsModel.TalkDocs[indexPath.row];
+//    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl, self.projectModel.bimcomposerid,[associatedImage valueForKey:@"TargetID"]];
+//    cell.imageUrl = url;
+//    cell.roleType = PARTICIPANT;
+    return cell;
+}
+
+#pragma mark - UICollectionViewDelegate
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+//    photoBrowser.imageCount = self.commentsModel.TalkDocs.count;
+    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+    
+}
+#pragma mark - SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImageCollectionViewCell *cell = (PBImageCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    return cell.imageV.image;
+}
+// 返回高质量图片的url
+//- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index
+//{
+//    NSString *urlStr = self.imageUrls[index];
+//    return [NSURL URLWithString:urlStr];
+//}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.h
new file mode 100644
index 0000000..1d1eaea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.h
@@ -0,0 +1,19 @@
+//
+//  PBDrawingsInfoModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBDrawingsInfoModel : NSObject
+@property (nonatomic, copy) NSString *ID;
+@property (nonatomic, copy) NSString *name;
+@property (nonatomic, copy) NSString *pixel2mx;
+@property (nonatomic, copy) NSString * pixel2my;
+@property (nonatomic, strong) NSArray *viewports;
+@property (nonatomic, strong) NSDictionary *leftptm;
+@property (nonatomic, copy) NSString *imagebase64;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.m
new file mode 100644
index 0000000..e786cfd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsInfoModel.m
@@ -0,0 +1,17 @@
+//
+//  PBDrawingsInfoModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDrawingsInfoModel.h"
+
+@implementation PBDrawingsInfoModel
++ (NSDictionary *)modelCustomPropertyMapper {
+    return  @{
+              @"ID":@"id"
+              };
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.h
new file mode 100644
index 0000000..a1c4190
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.h
@@ -0,0 +1,15 @@
+//
+//  PBDrawingsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBDrawingsModel : NSObject
+@property (nonatomic, copy) NSString *ID;
+@property (nonatomic, copy) NSString *name;
+@property (nonatomic, copy) NSString *thumbnail;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.m
new file mode 100644
index 0000000..fab8098
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBDrawingsModel.m
@@ -0,0 +1,17 @@
+//
+//  PBDrawingsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDrawingsModel.h"
+
+@implementation PBDrawingsModel
++ (NSDictionary *)modelCustomPropertyMapper {
+    return  @{
+              @"ID":@"id"
+              };
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.h
new file mode 100644
index 0000000..fe9230b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.h
@@ -0,0 +1,27 @@
+//
+//  PBModelsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBModelsModel : NSObject
+@property (nonatomic, copy) NSString *ProjectID;
+@property (nonatomic, copy) NSString *Name;
+@property (nonatomic, copy) NSString *ID;
+@property (nonatomic, copy) NSString *Description;
+@property (nonatomic, copy) NSString *Thumbnail;
+@property (nonatomic, copy) NSString *Creator;
+@property (nonatomic, copy) NSString *CreateTime;
+@property (nonatomic, copy) NSString *ModelMD5;
+@property (nonatomic, assign) int Status;
+@property (nonatomic, assign) BOOL IsMerge;
+@property (nonatomic, copy) NSString *Model_N_View;
+@property (nonatomic, copy) NSString *Phase;
+@property (nonatomic, copy) NSString *Children;
+@property (nonatomic, copy) NSString *Views;
+@property (nonatomic, copy) NSString *CurrentVersion;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.m
new file mode 100644
index 0000000..37ddd5f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBModelsModel.m
@@ -0,0 +1,13 @@
+//
+//  PBModelsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBModelsModel.h"
+
+@implementation PBModelsModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.h
new file mode 100644
index 0000000..225ce6b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.h
@@ -0,0 +1,30 @@
+//
+//  PBViewPointModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBViewPointModel : NSObject
+@property (nonatomic, copy) NSString *ViewID;
+@property (nonatomic, copy) NSString *ID;
+@property (nonatomic, copy) NSString *ParentID;
+@property (nonatomic, copy) NSString *Name;
+@property (nonatomic, copy) NSString *ModelID;
+@property (nonatomic, copy) NSString *Override;
+@property (nonatomic, copy) NSString *Creator;
+@property (nonatomic, copy) NSString *CreateTime;
+@property (nonatomic, assign) BOOL IsDefault;
+@property (nonatomic, copy) NSString *Editor;
+@property (nonatomic, copy) NSString *EditTime;
+@property (nonatomic, copy) NSString *Snapshot;
+@property (nonatomic, assign) BOOL IsFolder;
+@property (nonatomic, copy) NSString *Tag;
+@property (nonatomic, copy) NSString *Type;
+@property (nonatomic, copy) NSString *VersionNO;
+@property (nonatomic, copy) NSString *Category;
+@property (nonatomic, strong) NSArray *Links;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.m
new file mode 100644
index 0000000..5e8d9c0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewPointModel.m
@@ -0,0 +1,13 @@
+//
+//  PBViewPointModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBViewPointModel.h"
+
+@implementation PBViewPointModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.h
new file mode 100644
index 0000000..5ff5eea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.h
@@ -0,0 +1,27 @@
+//
+//  PBViewsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBViewsModel : NSObject
+@property (nonatomic, strong) NSString *ID;
+@property (nonatomic, strong) NSString *Name;
+@property (nonatomic, strong) NSString *ModelID;
+@property (nonatomic, strong) NSString *Override;
+@property (nonatomic, strong) NSString *Creator;
+@property (nonatomic, strong) NSString *CreateTime;
+@property (nonatomic, assign) BOOL IsDefault;
+@property (nonatomic, strong) NSString *Editor;
+@property (nonatomic, strong) NSString *EditTime;
+@property (nonatomic, strong) NSString *Snapshot;
+@property (nonatomic, strong) NSString *Viewpoints;
+@property (nonatomic, assign) BOOL IsFromModel;
+@property (nonatomic, strong) NSString *Categories;
+@property (nonatomic, strong) NSString *Levels;
+@property (nonatomic, strong) NSString *BaseViewID;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.m
new file mode 100644
index 0000000..e6e85e9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Models/PBViewsModel.m
@@ -0,0 +1,13 @@
+//
+//  PBViewsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBViewsModel.h"
+
+@implementation PBViewsModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.h
new file mode 100644
index 0000000..d50bac5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBBrowseViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/3/1.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBBrowseViewController : UIViewController
+@property (nonatomic, strong) NSDictionary *details;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.m
new file mode 100644
index 0000000..9fb125f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBBrowseViewController.m
@@ -0,0 +1,121 @@
+//
+//  PBBrowseViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/3/1.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBBrowseViewController.h"
+#import <WebKit/WebKit.h>
+
+@interface PBBrowseViewController ()<WKUIDelegate, WKNavigationDelegate>
+@property (nonatomic, strong) WKWebView *webView;
+
+@end
+
+@implementation PBBrowseViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
+    self.webView.scrollView.bounces = NO;
+    self.webView.navigationDelegate = self;
+    self.webView.UIDelegate = self;
+    [self.view addSubview:self.webView];
+    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.view);
+    }];
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    [self loadWeb];
+}
+- (void)loadWeb {
+    long type = [[self.details valueForKey:@"Type"] longValue];
+    NSString *content = [self.details valueForKey:@"Content"];
+    //1图片 2文件 3链接
+    if (type == 1 || type == 2) {
+        NSRange range = [content rangeOfString:@"base64,"];
+        NSString *base64 = [content substringFromIndex:range.location + range.length];
+        NSData *data = [[NSData alloc]initWithBase64EncodedString:base64 options:NSDataBase64DecodingIgnoreUnknownCharacters];
+        
+        NSString *fileName = [self.details valueForKey:@"Name"];
+        NSRange range1 = [fileName rangeOfString:@"|"];
+        NSString *name = [fileName substringFromIndex:range1.location + range1.length];
+        
+        NSString *path_document = NSTemporaryDirectory();
+        NSString *imagePath = [path_document stringByAppendingString:name];
+        NSFileManager *fileManger = [NSFileManager defaultManager];
+        [fileManger createFileAtPath:imagePath contents:data attributes:nil];
+        [self.webView loadFileURL:[NSURL fileURLWithPath:imagePath] allowingReadAccessToURL:[NSURL fileURLWithPath:imagePath]];
+//      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//      });
+    }else if (type == 3) {
+//        if ([content hasPrefix:@"https"] || [content hasPrefix:@"http"]) {
+//        }
+        [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:content]]];
+    }
+}
+- (void)backNavAction {
+    long type = [[self.details valueForKey:@"Type"] longValue];
+    if (type != 3) {
+        NSString *fileName = [self.details valueForKey:@"Name"];
+        NSRange range1 = [fileName rangeOfString:@"|"];
+        NSString *name = [fileName substringFromIndex:range1.location + range1.length];
+        NSString *path_document = NSTemporaryDirectory();
+        NSString *imagePath = [path_document stringByAppendingString:name];
+        NSFileManager *fileManger = [NSFileManager defaultManager];
+        [fileManger removeItemAtPath:imagePath error:nil];
+    }
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)setDetails:(NSDictionary *)details {
+    _details = details;
+}
+
+#pragma mark -- 实现WKNavigationDelegate委托协议
+
+//开始加载时调用
+
+-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation{
+    NSLog(@"开始加载");
+}
+
+//当内容开始返回时调用
+
+-(void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation{
+    NSLog(@"内容开始返回");
+}
+
+//加载完成之后调用
+
+-(void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
+    NSLog(@"加载完成");
+
+}
+
+//加载失败时调用
+
+-(void)webView:(WKWebView *)webView didFailLoadWithError:(nonnull NSError *)error{
+    NSLog(@"加载失败 error : %@",error.description);
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.h
new file mode 100644
index 0000000..ea02790
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.h
@@ -0,0 +1,15 @@
+//
+//  PBDrawingsShowController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBDrawingsModel;
+@class PBModelsModel;
+@interface PBDrawingsShowController : UIViewController
+@property (nonatomic, strong) PBDrawingsModel *drawingsModel;
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.m
new file mode 100644
index 0000000..99fe9b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBDrawingsShowController.m
@@ -0,0 +1,115 @@
+//
+//  PBDrawingsShowController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBDrawingsShowController.h"
+#import "PBDrawingsModel.h"
+#import "PBModelsModel.h"
+#import "PBDrawingsInfoModel.h"
+
+@interface PBDrawingsShowController ()<UIScrollViewDelegate>
+@property (nonatomic,strong) UIScrollView *scrollView;
+@property (nonatomic, strong) UIImageView *imageV;
+@property (nonatomic, strong) UIImage *image;
+@end
+
+@implementation PBDrawingsShowController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setNav];
+    [self setupUI];
+}
+- (void)setNav{
+    self.view.backgroundColor = [UIColor whiteColor];
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"图纸";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)setupUI {
+    self.scrollView = [[UIScrollView alloc] init];
+    self.scrollView.delegate = self;
+    [self.view addSubview:self.scrollView];
+    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+    }];
+    
+    self.imageV = [[UIImageView alloc] init];
+    self.imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.scrollView addSubview:self.imageV];
+    [self.imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.scrollView);
+    }];
+}
+
+- (void)backNavAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)loadDrawingsInfo {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetFIleWithProjectID:_modelsModel.ProjectID andModelID:_modelsModel.ID andVersionNO:@"" andFileType:@"PlanView" andFileName:_drawingsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载图纸失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBDrawingsInfoModel *drawingsInfoModel = [PBDrawingsInfoModel yy_modelWithJSON:str];
+        self.image = [NSString imageDecoding:drawingsInfoModel.imagebase64];
+        [self setScrollView];
+    }];
+}
+
+- (void)setScrollView {
+    self.imageV.image = self.image;
+    self.scrollView.contentSize = self.image.size;
+    NSInteger imageW = CGImageGetWidth(self.image.CGImage);
+    NSInteger width = self.view.bounds.size.width;
+    CGFloat scale = (CGFloat)width / (CGFloat)imageW;
+    self.scrollView.maximumZoomScale = 2;
+    self.scrollView.minimumZoomScale = scale;
+    [self.scrollView setZoomScale:scale animated:NO];
+
+}
+
+- (void)setDrawingsModel:(PBDrawingsModel *)drawingsModel {
+    _drawingsModel = drawingsModel;
+    self.title = drawingsModel.name;
+    [self loadDrawingsInfo];
+}
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+
+#pragma mark - UIScrollViewDelegate
+- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
+    return self.imageV;
+}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.h
new file mode 100644
index 0000000..e78c338
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.h
@@ -0,0 +1,13 @@
+//
+//  PBImageShowViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBImageShowViewController : UIViewController
+@property (nonatomic, strong) UIImage *image;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.m
new file mode 100644
index 0000000..82418d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBImageShowViewController.m
@@ -0,0 +1,100 @@
+//
+//  PBImageShowViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBImageShowViewController.h"
+
+@interface PBImageShowViewController ()<UIScrollViewDelegate>
+@property (nonatomic,strong) UIScrollView *scrollView;
+@property (nonatomic,weak) UIImageView *imageV;
+@end
+
+@implementation PBImageShowViewController
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+   
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor blackColor];
+    UIView *navBgView = [[UIView alloc] init];
+    navBgView.backgroundColor = [UIColor blackColor];
+    [self.view addSubview:navBgView];
+    CGFloat height;
+    if (IS_IPHONE_X) {
+        height = 88.0f;
+    }else {
+        height = 64.0f;
+    }
+    [navBgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.height.equalTo(@(height));
+    }];
+    
+    UIButton *button =[UIButton z_textButton:@"取消" fontSize:18 normalColor:[UIColor whiteColor]];
+    [button addTarget:self action:@selector(cancelButton) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:button];
+    [button mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(navBgView).offset(-12);
+        make.left.equalTo(self.view).offset(20);
+        make.size.mas_equalTo(CGSizeMake(50, 30));
+    }];
+    
+    self.scrollView = [[UIScrollView alloc] init];
+    self.scrollView.delegate = self;
+    [self.view addSubview:self.scrollView];
+    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(navBgView.mas_bottom);
+        make.bottom.left.right.equalTo(self.view);
+    }];
+    
+    UIImageView *imageV = [[UIImageView alloc] init];
+    self.imageV = imageV;
+    imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.scrollView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.scrollView);
+    }];
+    
+    imageV.image = self.image;
+    self.scrollView.contentSize = self.image.size;
+    NSInteger imageW = CGImageGetWidth(self.image.CGImage);
+    NSInteger width = self.view.bounds.size.width;
+    CGFloat scale = (CGFloat)width / (CGFloat)imageW;
+    self.scrollView.maximumZoomScale = 2;
+    self.scrollView.minimumZoomScale = scale;
+    [self.scrollView setZoomScale:scale animated:NO];
+}
+- (void)cancelButton {
+    [self dismissViewControllerAnimated:NO completion:nil];
+}
+
+#pragma mark - UIScrollViewDelegate
+- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
+    return self.imageV;
+}
+
+- (void)setImage:(UIImage *)image {
+    _image = image;
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.h
new file mode 100644
index 0000000..b806660
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.h
@@ -0,0 +1,20 @@
+//
+//  PBLoadModelDisplayController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@interface PBLoadModelDisplayController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, copy) NSString *projectIID;
+@property (nonatomic, copy) NSString *modelID;
+@property (nonatomic, copy) NSString *viewID;
+@property (nonatomic, copy) NSString *viewPointID;
+
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.m
new file mode 100644
index 0000000..dda387f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBLoadModelDisplayController.m
@@ -0,0 +1,206 @@
+//
+//  PBLoadModelDisplayController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBLoadModelDisplayController.h"
+#import "PBAddIssueController.h"
+#import "PBNavigationController.h"
+#import <WebKit/WebKit.h>
+#import "PBProjectModel.h"
+#import <JavaScriptCore/JavaScriptCore.h>
+#import "PBBrowseViewController.h"
+@interface PBLoadModelDisplayController ()<WKUIDelegate, WKNavigationDelegate,WKScriptMessageHandler, UIGestureRecognizerDelegate>
+@property (nonatomic, strong) WKWebView *webView;
+//@property (nonatomic, strong) JSContext *context;
+@end
+
+@implementation PBLoadModelDisplayController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+        self.navigationController.interactivePopGestureRecognizer.delegate = self;
+    }
+    [self setupUI];
+}
+- (void)setupUI {
+    self.title = @"三维浏览";
+    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
+    configuration.userContentController = [WKUserContentController new];
+    [configuration.userContentController addScriptMessageHandler:self name:@"finshLoad"];
+    [configuration.userContentController addScriptMessageHandler:self name:@"base64Image"];
+    [configuration.userContentController addScriptMessageHandler:self name:@"preView"];
+    WKPreferences *preferences = [WKPreferences new];
+    preferences.javaScriptCanOpenWindowsAutomatically = YES;
+    configuration.preferences = preferences;
+    self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
+    self.webView.scrollView.bounces = NO;
+    self.webView.navigationDelegate = self;
+    self.webView.UIDelegate = self;
+    [self.view addSubview:self.webView];
+    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.view);
+    }];
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backNavAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+
+    UIBarButtonItem *right = [[UIBarButtonItem alloc] initWithTitle:@"新增问题" style:UIBarButtonItemStylePlain target:self action:@selector(rightAction)];
+    self.navigationItem.rightBarButtonItem = right;
+    self.navigationItem.rightBarButtonItem.enabled = NO;
+    [self loadWeb];
+}
+
+- (void)loadWeb {
+    NSString *url = [NSString stringWithFormat:@"%@/BIMComposer/index.html?projectId=%@&model=%@&ver=",WebUrl,self.projectIID, self.modelID];
+    NSLog(@"url:%@",url);
+    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
+}
+- (void)backNavAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setModelID:(NSString *)modelID {
+    _modelID = modelID;
+}
+- (void)setViewID:(NSString *)viewID {
+    _viewID = viewID;
+}
+- (void)setViewPointID:(NSString *)viewPointID {
+    _viewPointID = viewPointID;
+}
+- (void)setProjectIID:(NSString *)projectIID {
+    _projectIID = projectIID;
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+// 页面加载完成之后调用
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
+    NSLog(@"加载完成");
+    NSString *ocToJs = @"window.model.BIM365API.Events.finishRender.on('default',()=>{window.top.webkit.messageHandlers.finshLoad.postMessage(null)})";
+    [self.webView evaluateJavaScript:ocToJs completionHandler:^(id _Nullable name, NSError * _Nullable error) {
+        NSLog(@"方法调用完成回调%@",error);
+    }];
+}
+- (void)rightAction {
+    NSString *ocToJs = @"window.model.BIM365API.Context.asynCapturePicture().then((image_base64)=>{window.top.webkit.messageHandlers.base64Image.postMessage(image_base64)})";
+    [self.webView evaluateJavaScript:ocToJs completionHandler:^(id name, NSError * error) {
+        NSLog(@"获取截图%@ - %@",name, error);
+    }];
+}
+#pragma mark - WKScriptMessageHandler
+- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
+    //    message.body  --  Allowed types are NSNumber, NSString, NSDate, NSArray,NSDictionary, and NSNull.
+    if ([message.name isEqualToString:@"finshLoad"]) {
+        if (self.viewPointID) {
+            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+                NSString *ocToJs = [NSString stringWithFormat:@"window.model.BIM365API.Context.setViewPointBasicInfo(%@)",self.viewPointID];
+                [self.webView evaluateJavaScript:ocToJs completionHandler:^(id _Nullable name, NSError * _Nullable error) {
+                    NSLog(@"相机位置设置完成");
+                }];
+            });
+        }else {
+            self.navigationItem.rightBarButtonItem.enabled = YES;
+        }
+    }else if ([message.name isEqualToString:@"base64Image"]) {
+        NSLog(@"图片回来了%@",message.body);
+//        NSRange range = [message.body rangeOfString:@"base64,"];
+//        NSString *base64 = [message.body substringFromIndex:range.location + range.length];
+//        UIImage *image = [NSString imageDecoding:base64];
+
+        PBAddIssueController *addIssueVC = [[PBAddIssueController alloc] init];
+        addIssueVC.isAddIssue = YES;
+        addIssueVC.projectModel = self.projectModel;
+//        addIssueVC.statusAndTypeData = self.statusAndTypeData;
+        addIssueVC.modelID = self.modelID;
+        NSLog(@"获取相机位置");
+        NSString *ocToJs = @"window.model.BIM365API.Context.getViewPointBasicInfo(true)";
+        [self.webView evaluateJavaScript:ocToJs completionHandler:^(id name, NSError * error) {
+            NSLog(@"方法调用完成回调%@ - %@",name, error);
+            NSDictionary *dict = (NSDictionary *)name;
+            NSString *str = [NSString convertToJson:dict];
+            addIssueVC.viewPointStr = str;
+        }];
+        addIssueVC.base64Image = message.body;
+        addIssueVC.SaveSuccessBlock = ^{
+            
+            
+        };
+        PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:addIssueVC];
+        nav.modalPresentationStyle = UIModalPresentationFullScreen;
+        [self presentViewController:nav animated:YES completion:nil];
+    }else if ([message.name isEqualToString:@"preView"]) {
+        NSLog(@"图片回来了%@",message.body);
+        NSString *str =  (NSString *)message.body;
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        NSLog(@"%@",dict);
+        PBBrowseViewController *browseVC = [[PBBrowseViewController alloc] init];
+        browseVC.details = dict;
+        [self.navigationController pushViewController:browseVC animated:YES];
+    }
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+
+- (void)encodeWithCoder:(nonnull NSCoder *)coder {
+    
+}
+
+- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection {
+    
+}
+
+- (void)preferredContentSizeDidChangeForChildContentContainer:(nonnull id<UIContentContainer>)container {
+    
+}
+
+
+
+- (void)systemLayoutFittingSizeDidChangeForChildContentContainer:(nonnull id<UIContentContainer>)container {
+    
+}
+
+- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(nonnull id<UIViewControllerTransitionCoordinator>)coordinator {
+    
+}
+
+- (void)willTransitionToTraitCollection:(nonnull UITraitCollection *)newCollection withTransitionCoordinator:(nonnull id<UIViewControllerTransitionCoordinator>)coordinator {
+    
+}
+
+- (void)didUpdateFocusInContext:(nonnull UIFocusUpdateContext *)context withAnimationCoordinator:(nonnull UIFocusAnimationCoordinator *)coordinator {
+    
+}
+
+- (void)setNeedsFocusUpdate {
+    
+}
+
+
+
+- (void)updateFocusIfNeeded {
+    
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.h
new file mode 100644
index 0000000..3543c32
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBModelCategoryViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBModelsModel;
+@class PBProjectModel;
+@interface PBModelCategoryViewController : UIViewController
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.m
new file mode 100644
index 0000000..ba7178e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelCategoryViewController.m
@@ -0,0 +1,536 @@
+//
+//  PBModelCategoryViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBModelCategoryViewController.h"
+#import "PBModelsModel.h"
+#import "PBPhaseLabel.h"
+#import "PBViewsModel.h"
+#import "PBDrawingsModel.h"
+#import "PBViewPointModel.h"
+#import "PBTextTableViewCell.h"
+#import "PBImageTableViewCell.h"
+#import "PBLoadModelDisplayController.h"
+#import "PBDrawingsShowController.h"
+#import "PBViewPointDetailsController.h"
+#import "PBMoreTabViewController.h"
+#import "PBAlertController.h"
+#import "PBMoreFunctionView.h"
+#import "PBAddIssueController.h"
+#import "PBNavigationController.h"
+#import "PBPromptView.h"
+#import "PBShareView.h"
+#import "PBProjectModel.h"
+static NSString *const TextCellID = @"TextCellID";
+static NSString *const ImageCellID = @"ImageCellID";
+
+@interface PBModelCategoryViewController ()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UIScrollView *phaseScrollView;
+@property (nonatomic, strong) NSArray *phaseArr;
+@property (nonatomic, strong) NSMutableArray *labelM;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, assign) NSInteger index;
+@property (nonatomic, strong) PBMoreFunctionView *moreFunctionView;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) PBShareView *shareView;
+@end
+
+@implementation PBModelCategoryViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+    [self loadData:0];
+}
+/// 创建频道标签
+- (void)createChannelLabel{
+    CGFloat labelW = self.view.width / 4;
+    CGFloat labelH = self.phaseScrollView.bounds.size.height;
+    for (int i = 0; i < self.phaseArr.count; i++) {
+        PBPhaseLabel *label = [[PBPhaseLabel alloc] init];
+        [self.phaseScrollView addSubview:label];
+        CGFloat labelX = labelW * i;
+        label.frame = CGRectMake(labelX, 0, labelW, labelH);
+        self.phaseScrollView.contentSize = CGSizeMake(labelW * self.phaseArr.count, 0);
+        label.text = self.phaseArr[i];
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTapClick:)];
+        [label addGestureRecognizer:tap];
+        label.tag = i;
+        label.userInteractionEnabled = YES;
+        [self.labelM addObject:label];
+        if (i == 0) {
+            //            label.scale = 1.0;
+            label.isSelectLabel = YES;
+        }else {
+            label.isSelectLabel = NO;
+        }
+    }
+}
+
+#pragma mark - 频道标签的点击事件
+- (void)labelTapClick:(UITapGestureRecognizer *)tap {
+    PBPhaseLabel *selected_label = (PBPhaseLabel *)tap.view;
+    CGFloat labelOffsetX = selected_label.center.x - (self.view.bounds.size.width * 0.5);
+    CGFloat minOffsetX = 0;
+    CGFloat maxOffsetX = self.phaseScrollView.contentSize.width - self.view.bounds.size.width;
+    if (maxOffsetX > minOffsetX) {
+        if (labelOffsetX < minOffsetX) {
+            labelOffsetX = 0;
+        } else if (labelOffsetX > maxOffsetX) {
+            labelOffsetX = maxOffsetX;
+        }
+        [self.phaseScrollView setContentOffset:CGPointMake(labelOffsetX, 0) animated:YES];
+    }
+#pragma mark - 点击频道标签剧中时,更新模型
+    self.index = selected_label.tag;
+    [self loadData:selected_label.tag];
+#pragma mark - 点击label时选中的缩放比例最大,其余的保持
+    NSInteger index = selected_label.tag;
+    for (int i = 0; i < self.labelM.count; ++i) {
+        PBPhaseLabel *label = self.labelM[i];
+        if (index == i) {
+            //            label.scale = 1.0;
+            label.isSelectLabel = YES;
+        } else {
+            //            label.scale = 0;
+            label.isSelectLabel = NO;
+        }
+    }
+}
+- (void)loadData:(NSInteger)index {
+    self.dataList = nil;
+    [self.tableView reloadData];
+    self.promptView.hidden = YES;
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    if (index == 0) {
+        [[PBNetworkTools sharedTools] RequestGetAllViewsWithProjectID:_modelsModel.ProjectID andModelID:_modelsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            [YJProgressHUD hide];
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            NSArray *arr = [NSArray yy_modelArrayWithClass:[PBViewsModel class] json:str];
+            self.dataList = arr.mutableCopy;
+            if (self.dataList.count == 0) {
+                self.promptView.hidden = NO;
+            }else {
+                [self.tableView reloadData];
+            }
+        }];
+    }else if (index == 1) {
+        [[PBNetworkTools sharedTools] RequestGetFIleWithProjectID:_modelsModel.ProjectID andModelID:_modelsModel.ID andVersionNO:@"" andFileType:@"PlanView" andFileName:@"sheets" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            [YJProgressHUD hide];
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in [dict valueForKey:@"sheets"]) {
+                PBDrawingsModel *model = [PBDrawingsModel yy_modelWithDictionary:obj];
+                [arrM addObject:model];
+            }
+            self.dataList = arrM;
+            if (self.dataList.count == 0) {
+                self.promptView.hidden = NO;
+            }else {
+                [self.tableView reloadData];
+            }
+        }];
+    }else if (index == 2) {
+        [[PBNetworkTools sharedTools] RequestGetAllViewpointWithProjectId:_modelsModel.ProjectID andModelId:_modelsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            [YJProgressHUD hide];
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            NSArray *arr = [NSArray yy_modelArrayWithClass:[PBViewPointModel class] json:str];
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (PBViewPointModel *viewPointModel in arr) {
+                if ([viewPointModel.Type isEqualToString:@"0"]) {
+                    [arrM addObject:viewPointModel];
+                }
+            }
+            self.dataList =arrM;
+            if (self.dataList.count == 0) {
+                self.promptView.hidden = NO;
+            }else {
+                [self.tableView reloadData];
+            }
+        }];
+    }else {
+        [[PBNetworkTools sharedTools] RequestGetAllViewpointWithProjectId:_modelsModel.ProjectID andModelId:_modelsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            [YJProgressHUD hide];
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            NSArray *arr = [NSArray yy_modelArrayWithClass:[PBViewPointModel class] json:str];
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (PBViewPointModel *viewPointModel in arr) {
+                if ([viewPointModel.Type isEqualToString:@"1"]) {
+                    [arrM addObject:viewPointModel];
+                }
+            }
+            self.dataList = arrM;
+            if (self.dataList.count == 0) {
+                self.promptView.hidden = NO;
+            }else {
+                [self.tableView reloadData];
+            }
+        }];
+    }
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    id model = self.dataList[indexPath.row];
+    if (self.index == 0) {
+        PBTextTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TextCellID forIndexPath:indexPath];
+        cell.viewsModel = (PBViewsModel *)model;
+        return cell;
+    }else {
+        PBImageTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ImageCellID forIndexPath:indexPath];
+        if (self.index == 1) {
+            cell.drawingsModel = (PBDrawingsModel *)model;
+        }else {
+            cell.viewPointModel = (PBViewPointModel *)model;
+        }
+        return cell;
+    }
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    id model = self.dataList[indexPath.row];
+    if (self.index == 0) {
+        PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+        modelDisplayVC.projectModel = _projectModel;
+        modelDisplayVC.modelID = _modelsModel.ID;
+        PBViewsModel *viewsModel = (PBViewsModel *)model;
+        modelDisplayVC.viewID = viewsModel.ID;
+        [self.navigationController pushViewController:modelDisplayVC animated:YES];
+    }else if (self.index == 1) {
+        PBDrawingsShowController *drawingsShowVC = [[PBDrawingsShowController alloc] init];
+        drawingsShowVC.modelsModel = _modelsModel;
+        drawingsShowVC.drawingsModel = (PBDrawingsModel *)model;
+        [self.navigationController pushViewController:drawingsShowVC animated:YES];
+    }else {
+        PBViewPointDetailsController *viewPointDetailsVC = [[PBViewPointDetailsController alloc] init];
+        viewPointDetailsVC.updataDefaultViewPointBlock = ^{
+            [self loadData:self.index];
+        };
+        viewPointDetailsVC.projectModel = _projectModel;
+        viewPointDetailsVC.modelsModel = _modelsModel;
+        viewPointDetailsVC.viewPointModel = (PBViewPointModel *)model;
+        [self.navigationController pushViewController:viewPointDetailsVC animated:YES];                                                                     
+    }
+}
+
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    id model = self.dataList[indexPath.row];
+    UITableViewRowAction *shareAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"分享" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        [self shareWithModel:self.dataList[indexPath.row]];
+    }];
+    shareAction.backgroundColor = WarningColor;
+    UITableViewRowAction *setDefaultAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"设为默认" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        [self creatAlertControllerWithIsDelete:NO andIsViews:YES andData:model andIndex:indexPath];
+    }];
+    setDefaultAction.backgroundColor = DisableColor;
+    
+    UITableViewRowAction *deleteAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        [self creatAlertControllerWithIsDelete:YES andIsViews:NO andData:model andIndex:indexPath];
+    }];
+    deleteAction.backgroundColor = ErrorColor;
+    
+    UITableViewRowAction *moreAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"更多" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        [self moreWith:(PBViewPointModel *)model andIndexPath:indexPath];
+    }];
+    moreAction.backgroundColor = DisableColor;
+    switch (self.index) {
+        case 0:{
+            PBViewsModel *viewsModel = (PBViewsModel *)model;
+            if (viewsModel.IsDefault) {
+                return @[shareAction];
+            }else {
+                return @[shareAction, setDefaultAction];
+            }
+            break;
+        }
+        case 2:{
+            return @[shareAction, moreAction];
+            break;
+        }
+        default:
+            return @[deleteAction, shareAction];
+            break;
+    }
+}
+//分享
+- (void)shareWithModel:(id)model {
+    NSString *title; NSString *modelID; NSString *viewID; NSString *viewPointID; NSString *desc; UIImage *image;
+    if (self.index == 0) {
+        title = @"视图";
+        PBViewsModel *viewsModel = (PBViewsModel *)model;
+        desc = viewsModel.Name;
+        modelID = viewsModel.ModelID;
+        viewID = viewsModel.ID;
+        viewPointID = @"";
+        image = nil;
+    }else {
+        if (self.index == 2) {
+            title = @"视点";
+        }else {
+            title = @"批注";
+        }
+        PBViewPointModel *viewPointModel = (PBViewPointModel *)model;
+        desc = viewPointModel.Name;
+        modelID = viewPointModel.ModelID;
+        viewID = @"";
+        viewPointID = viewPointModel.ID;
+        NSRange range = [viewPointModel.Snapshot rangeOfString:@"base64,"];
+        NSString *base64 = [viewPointModel.Snapshot substringFromIndex:range.location + range.length];
+        image = [NSString imageDecoding:base64];
+    }
+    [PBKeyWindow addSubview:self.shareView];
+    self.shareView.modelID = modelID;
+    self.shareView.desc = desc;
+    self.shareView.viewID = viewID;
+    self.shareView.viewPointID = viewPointID;
+    self.shareView.title = title;
+    self.shareView.image = image;
+    [self.shareView show];
+}
+
+- (PBMoreFunctionView *)moreFunctionView {
+    if (_moreFunctionView == nil) {
+        _moreFunctionView = [[PBMoreFunctionView alloc]initWithFrame:[UIScreen mainScreen].bounds];
+        _moreFunctionView.visualViewHeight = 204;
+        _moreFunctionView.dataArr = @[@"删除", @"设为默认"];
+        _moreFunctionView.title = @"模型名称";
+    }
+    return _moreFunctionView;
+}
+- (void)moreWith:(PBViewPointModel *)viewPointModel andIndexPath:(NSIndexPath *)indexPath {
+    [PBKeyWindow addSubview:self.moreFunctionView];
+    [self.moreFunctionView show];
+    __weak typeof(self) weakSelf = self;
+    self.moreFunctionView.seletedIndexBlock = ^(NSInteger index) {
+        if (index == 0) {
+            [weakSelf creatAlertControllerWithIsDelete:YES andIsViews:NO andData:viewPointModel andIndex:indexPath];
+        }else {
+            [weakSelf creatAlertControllerWithIsDelete:NO andIsViews:NO andData:viewPointModel andIndex:indexPath];
+        }
+    };
+}
+
+- (void)creatAlertControllerWithIsDelete:(BOOL)isDelete andIsViews:(BOOL)isViews andData:(id)model andIndex:(NSIndexPath *)indexPath {
+    NSString *message;
+    if (isDelete) {
+        PBViewPointModel *viewPointModel = (PBViewPointModel *)model;
+        NSString * str = [viewPointModel.Type isEqualToString:@"0"] ? @"视点" : @"批注";
+        message = [NSString stringWithFormat:@"您确定要删除此%@",str];
+    }else {
+        NSString *str = isViews == YES ? @"视图" : @"视点";
+        message = [NSString stringWithFormat:@"您确定把此%@设为默认%@",str, str];
+    }
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:message preferredStyle:UIAlertControllerStyleAlert];
+    UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+        if (isDelete) {
+            [self deleteViewPointWith:(PBViewPointModel *)model andIndexPath:indexPath];
+        }else {
+            if (isViews) {
+                [self setDefaultViewsWith:(PBViewsModel *)model];
+            }else {
+                [self setDefaultViewPointWith:(PBViewPointModel *)model];
+            }
+        }
+    }];
+    [alertVC addAction:cancelAction];
+    [alertVC addAction:determineAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+- (void)deleteViewPointWith:(PBViewPointModel *)viewPointModel andIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestDeleteViewpointWithProjectID:_modelsModel.ProjectID andViewpointID:viewPointModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showFailed:@"删除失败" inview:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        if ([str isEqualToString:@"true"]) {
+            [YJProgressHUD hide];
+            [self.dataList removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showFailed:@"删除失败" inview:self.view];
+        }
+    }];
+}
+- (void)setDefaultViewsWith:(PBViewsModel *)viewsModel {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestSetDefaultViewsWithProjectID:_modelsModel.ProjectID andModelId:_modelsModel.ID andViewID:viewsModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showFailed:@"设置默认视图失败" inview:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        if ([str isEqualToString:@"\"\""]) {
+            [self loadData:self.index];
+        }else {
+            [YJProgressHUD showFailed:@"设置默认视图失败" inview:self.view];
+        }
+    }];
+}
+- (void)setDefaultViewPointWith:(PBViewPointModel *)viewPointModel {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestSetDefaultViewpointWithProjectID:_modelsModel.ProjectID andModelId:_modelsModel.ID andViewpointID:viewPointModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showFailed:@"设置默认视点失败" inview:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        if ([str isEqualToString:@"\"\""]) {
+            [self loadData:self.index];
+        }else {
+            [YJProgressHUD showFailed:@"设置默认视点失败" inview:self.view];
+        }
+    }];
+}
+
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.index == 1) {
+        return NO;
+    }else {
+        return YES;
+    }
+}
+
+- (void)setupNav {
+    self.title = _modelsModel.Name;
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"模型";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor z_colorWithR:239 G:239 B:239];
+    self.phaseScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 43)];
+    self.phaseScrollView.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:self.phaseScrollView];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 70;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBTextTableViewCell class] forCellReuseIdentifier:TextCellID];
+    [self.tableView registerClass:[PBImageTableViewCell class] forCellReuseIdentifier:ImageCellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.phaseScrollView.mas_bottom).offset(1);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    [self.view addSubview:self.promptView];
+    [self.promptView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView);
+        make.bottom.left.right.equalTo(self.view);
+    }];
+    self.promptView.hidden = YES;
+    [self createChannelLabel];
+}
+
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+- (NSMutableArray *)labelM {
+    if (_labelM == nil) {
+        _labelM = [NSMutableArray array];
+    }
+    return _labelM;
+}
+- (NSArray *)phaseArr {
+    if (_phaseArr == nil) {
+        _phaseArr = @[@"视图", @"二维图纸",@"视点", @"批注"];
+    }
+    return _phaseArr;
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] init];
+        _promptView.imageV.image = [UIImage imageNamed:@"Model_category_empty"];
+        _promptView.textL.text = @"暂无数据";
+        _promptView.hidden = YES;
+    }
+    return _promptView;
+}
+
+- (PBShareView *)shareView {
+    if (_shareView == nil) {
+        _shareView  = [[PBShareView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 290.f + 34.f;
+        }else {
+            height = 290.f;
+        }
+        _shareView.visualViewHeight = height;
+        _shareView.viewController = self;
+        _shareView.projectID = self.projectModel.organizeid;
+    }
+    return _shareView;
+}
+
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.h
new file mode 100644
index 0000000..bfa8bad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.h
@@ -0,0 +1,16 @@
+//
+//  PBModelListViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBModelsModel;
+@interface PBModelListViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *powerArr;
+@property (nonatomic,strong) NSMutableArray<PBModelsModel *>*modelsArrM;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.m
new file mode 100644
index 0000000..b25e211
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelListViewController.m
@@ -0,0 +1,363 @@
+//
+//  PBModelListViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/18.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBModelListViewController.h"
+#import "PBProjectModel.h"
+#import "PBPhaseLabel.h"
+#import "PBModelsModel.h"
+#import "PBModelsTableViewCell.h"
+#import "PBModelCategoryViewController.h"
+#import "PBLoadModelDisplayController.h"
+#import "PBPromptView.h"
+#import "PBProjectPower.h"
+#import "PBShareView.h"
+#define ModelModuleName  @"BIMModel"
+static NSString *const CellID = @"CellID";
+@interface PBModelListViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UIScrollView *phaseScrollView;
+@property (nonatomic,strong) NSArray *phaseArr;
+@property (nonatomic,strong) NSMutableArray *labelM;
+@property (nonatomic,strong) UITableView *tableView;
+@property (nonatomic,strong) NSMutableArray *listArrM;
+@property (nonatomic,copy) NSString *firstValue;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) PBShareView *shareView;
+@end
+@implementation PBModelListViewController
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+    [self setupNav];
+    [self setupUI];
+}
+- (void)loadProjectConfig {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [[PBNetworkTools sharedTools] RequestGetProjectConfigWithProjectID:_projectModel.bimcomposerid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        NSArray *projectDictData = [dict valueForKey:@"ProjectDictData"];
+        NSArray *arr = [projectDictData[0] valueForKey:@"children"];
+        self.firstValue = [arr[0] valueForKey:@"value"];
+        NSMutableArray *arr_M = arr.mutableCopy;
+        for (int i = 0; i < arr_M.count; ++i) {
+            for (int  j = 0; j < arr_M.count-1; ++j) {
+                NSInteger sort1 = [[arr_M[j] valueForKey:@"sort"] intValue];
+                NSInteger sort2 = [[arr_M[j + 1] valueForKey:@"sort"] intValue];
+                if (sort1 > sort2) {
+                    [arr_M exchangeObjectAtIndex:j withObjectAtIndex:j+1];
+                }
+            }
+        }
+        self.phaseArr = arr_M.copy;
+        [self loadAllMode];
+        [self createChannelLabel];
+    }];
+}
+
+/// 创建频道标签
+- (void)createChannelLabel{
+    CGFloat labelW = 130;
+    CGFloat labelH = self.phaseScrollView.bounds.size.height;
+    for (int i = 0; i < self.phaseArr.count; i++) {
+        PBPhaseLabel *label = [[PBPhaseLabel alloc] init];
+        [self.phaseScrollView addSubview:label];
+        CGFloat labelX = labelW * i;
+        label.frame = CGRectMake(labelX, 0, labelW, labelH);
+        self.phaseScrollView.contentSize = CGSizeMake(labelW * self.phaseArr.count, 0);
+        label.text = [self.phaseArr[i] valueForKey:@"name"];
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTapClick:)];
+        [label addGestureRecognizer:tap];
+        label.tag = i;
+        label.userInteractionEnabled = YES;
+        [self.labelM addObject:label];
+        if (i == 0) {
+//            label.scale = 1.0;
+            label.isSelectLabel = YES;
+        }else {
+            label.isSelectLabel = NO;
+        }
+    }
+}
+
+#pragma mark - 频道标签的点击事件
+- (void)labelTapClick:(UITapGestureRecognizer *)tap {
+    PBPhaseLabel *selected_label = (PBPhaseLabel *)tap.view;
+    CGFloat labelOffsetX = selected_label.center.x - (self.view.bounds.size.width * 0.5);
+    CGFloat minOffsetX = 0;
+    CGFloat maxOffsetX = self.phaseScrollView.contentSize.width - self.view.bounds.size.width;
+    if (maxOffsetX > minOffsetX) {
+        if (labelOffsetX < minOffsetX) {
+            labelOffsetX = 0;
+        } else if (labelOffsetX > maxOffsetX) {
+            labelOffsetX = maxOffsetX;
+        }
+        [self.phaseScrollView setContentOffset:CGPointMake(labelOffsetX, 0) animated:YES];
+    }
+#pragma mark - 点击频道标签剧中时,更新模型
+    [self retrieveModelsWithIndex:selected_label.tag];
+#pragma mark - 点击label时选中的缩放比例最大,其余的保持
+    NSInteger index = selected_label.tag;
+    for (int i = 0; i < self.labelM.count; ++i) {
+        PBPhaseLabel *label = self.labelM[i];
+        if (index == i) {
+//            label.scale = 1.0;
+            label.isSelectLabel = YES;
+        } else {
+//            label.scale = 0;
+            label.isSelectLabel = NO;
+        }
+    }
+}
+
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor z_colorWithR:239 G:239 B:239];
+    self.phaseScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 43)];
+    self.phaseScrollView.backgroundColor = [UIColor whiteColor];
+    self.phaseScrollView.showsHorizontalScrollIndicator = NO;
+    [self.view addSubview:self.phaseScrollView];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 70.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBModelsTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.phaseScrollView.mas_bottom).offset(1);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    [self.view addSubview:self.promptView];
+    [self.promptView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.tableView);
+    }];
+    for (PBProjectPower *power in self.powerArr) {
+        if ([power.Bm_EnCode isEqualToString:ModelModuleName]) {
+            if ([power.checkstate isEqualToString:@"1"]) {
+                //有权限
+                self.promptView.hidden = YES;
+                [self loadProjectConfig];
+                return;
+            }else {
+                //无权限
+                self.promptView.textL.text = @"暂无权限";
+                self.promptView.hidden = NO;
+                return;
+            }
+        }
+    }
+    //无权限
+    self.promptView.textL.text = @"暂无权限";
+    self.promptView.hidden = NO;
+}
+
+- (void)loadAllMode {
+    [[PBNetworkTools sharedTools] RequestGetProjectAllModelsWithProjectID:_projectModel.bimcomposerid andKeyword:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        str = [str stringByReplacingOccurrencesOfString:@"\\" withString:@""];
+        NSMutableString *mString = [NSMutableString stringWithString:str];
+        [mString deleteCharactersInRange:NSMakeRange(0, 1)];
+        [mString deleteCharactersInRange:NSMakeRange(mString.length-1, 1)];
+        NSArray *modelsArr = [NSArray yy_modelArrayWithClass:[PBModelsModel class] json:mString.copy];
+        for (int i = 0; i < self.phaseArr.count; i++) {
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            NSMutableArray *noBelongArrM = [[NSMutableArray alloc] init];
+            for (int j = 0; j < modelsArr.count; j++) {
+                PBModelsModel *modelsModel = modelsArr[j];
+                if([[self.phaseArr[i] valueForKey:@"value"] isEqualToString:modelsModel.Phase]) {
+                    [arrM addObject:modelsModel];
+                }else {
+                    [noBelongArrM addObject:modelsModel];
+                }
+            }
+            modelsArr = noBelongArrM.copy;
+            [self.listArrM addObject:arrM];
+            if (i == self.phaseArr.count - 1) {
+                [self.listArrM addObject:noBelongArrM];
+            }
+        }
+        [self.modelsArrM addObjectsFromArray:self.listArrM[0]];
+        if ([[self.phaseArr[0] valueForKey:@"value"] isEqualToString:self.firstValue]) {
+            [self.modelsArrM addObjectsFromArray:self.listArrM[self.phaseArr.count]];
+        }
+        if (self.modelsArrM.count == 0) {
+            self.promptView.hidden = NO;
+        }else {
+            self.promptView.hidden = YES;
+        }
+        [self.tableView reloadData];
+    }];
+}
+
+- (void)retrieveModelsWithIndex:(NSInteger)index {
+    [self.modelsArrM removeAllObjects];
+    [self.modelsArrM addObjectsFromArray:self.listArrM[index]];
+    if ([[self.phaseArr[index] valueForKey:@"value"] isEqualToString:self.firstValue]) {
+        [self.modelsArrM addObjectsFromArray:self.listArrM[self.phaseArr.count]];
+    }
+    if (self.modelsArrM.count == 0) {
+        self.promptView.hidden = NO;
+    }else {
+        self.promptView.hidden = YES;
+    }
+    [self.tableView reloadData];
+}
+
+- (NSMutableArray *)labelM {
+    if (_labelM == nil) {
+        _labelM = [NSMutableArray array];
+    }
+    return _labelM;
+}
+
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"项目";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.modelsArrM.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBModelsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.modelsModel = self.modelsArrM[indexPath.row];
+    return cell;
+}
+
+- (NSMutableArray<PBModelsModel *> *)modelsArrM {
+    if (_modelsArrM == nil) {
+        _modelsArrM = [[NSMutableArray alloc] init];
+    }
+    return _modelsArrM;
+}
+- (NSMutableArray *)listArrM {
+    if (_listArrM == nil) {
+        _listArrM = [[NSMutableArray alloc] init];
+    }
+    return _listArrM;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+//    PBModelsModel *modelsModel = self.modelsArrM[indexPath.row];
+//    PBModelCategoryViewController *modelCategoryVC = [[PBModelCategoryViewController alloc] init];
+//    modelCategoryVC.hidesBottomBarWhenPushed = YES;
+//    modelCategoryVC.projectModel = _projectModel;
+//    modelCategoryVC.modelsModel = modelsModel;
+//    [self.navigationController pushViewController:modelCategoryVC animated:YES];
+    PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+    modelDisplayVC.hidesBottomBarWhenPushed = YES;
+    modelDisplayVC.projectModel = self.projectModel;
+    modelDisplayVC.projectIID = self.projectModel.bimcomposerid;
+    modelDisplayVC.modelID = self.modelsArrM[indexPath.row].ID;
+    [self.navigationController pushViewController:modelDisplayVC animated:YES];
+}
+
+
+//- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+//    UITableViewRowAction *shareAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"分享" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+//        [self shareWithModelsModel:self.modelsArrM[indexPath.row]];
+//    }];
+//    shareAction.backgroundColor = WarningColor;
+//
+//    UITableViewRowAction *loadAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"加载" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+//        PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+//        modelDisplayVC.hidesBottomBarWhenPushed = YES;
+//        modelDisplayVC.projectModel = self.projectModel;
+//        modelDisplayVC.projectIID = self.projectModel.bimcomposerid;
+//        modelDisplayVC.modelID = self.modelsArrM[indexPath.row].ID;
+//        [self.navigationController pushViewController:modelDisplayVC animated:YES];
+//    }];
+//    loadAction.backgroundColor = IndicatedColor;
+//    return @[shareAction, loadAction];
+//}
+- (void)shareWithModelsModel:(PBModelsModel *)model {
+    [PBKeyWindow addSubview:self.shareView];
+    self.shareView.modelID = model.ID;
+    self.shareView.desc = model.Name;
+    UIImage *image;
+    if([model.Thumbnail isEqualToString:@""]) {
+        image = [UIImage imageNamed:@"logo_unknown"];
+    }else {
+        image = [NSString imageDecoding:model.Thumbnail];
+    }
+    self.shareView.image = image;
+    [self.shareView show];
+}
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    return YES;
+}
+- (PBShareView *)shareView {
+    if (_shareView == nil) {
+        _shareView  = [[PBShareView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 290.f + 34.f;
+        }else {
+            height = 290.f;
+        }
+        _shareView.visualViewHeight = height;
+        _shareView.viewController = self;
+        _shareView.projectID = self.projectModel.organizeid;
+        _shareView.viewID = @"";
+        _shareView.viewPointID = @"";
+        _shareView.title = @"模型";
+    }
+    return _shareView;
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] init];
+        _promptView.imageV.image = [UIImage imageNamed:@"Model_category_empty"];
+        _promptView.textL.text = @"此阶段无模型数据";
+    }
+    return _promptView;
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.h
new file mode 100644
index 0000000..d461209
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.h
@@ -0,0 +1,19 @@
+//
+//  PBModelViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/28.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBModelsModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBModelViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *powerArr;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.m
new file mode 100644
index 0000000..d0359fa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBModelViewController.m
@@ -0,0 +1,366 @@
+//
+//  PBModelViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/28.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBModelViewController.h"
+#import "PBProjectModel.h"
+#import "PBModelsModel.h"
+#import "PBModelLeftTableViewCell.h"
+#import "PBRightTableViewCell.h"
+#import "PBBlankTableViewCell.h"
+#import "PBModelSearchController.h"
+#import "PBLoadModelDisplayController.h"
+#import "PBShareView.h"
+static NSString *const LeftCellID = @"LeftCellID";
+static NSString *const RightCellID = @"RightCellID";
+static NSString *const BlackCellID = @"BlackCellID";
+@interface PBModelViewController ()<UITableViewDelegate,UITableViewDataSource>
+{
+    NSInteger _leftIndex;//左边被选中的索引值
+//    BOOL _isSelectSlide;//是点击leftTableView,还是拖拽右边的滑动视图
+}
+@property (nonatomic,strong) NSArray *phaseArr;
+@property (nonatomic,strong) NSMutableArray *listArrM;
+//左视图-->标签tableView
+@property (nonatomic , strong)UITableView *leftTabView;
+//右视图-->列表样式or卡片样式
+@property (nonatomic , strong)UITableView *rightTabView;
+@property (nonatomic, strong) PBShareView *shareView;
+@end
+
+@implementation PBModelViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    _leftIndex = 0;
+    [self setupUI];
+    [self loadProjectConfig];
+}
+- (void)setupUI {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+//    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"search_background"]];
+//    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(searchAction:)];
+//    imageV.userInteractionEnabled = YES;
+//    [imageV addGestureRecognizer:tap];
+//    self.navigationItem.titleView = imageV;
+
+    self.leftTabView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    self.leftTabView.dataSource = self;
+    self.leftTabView.delegate = self;
+    self.leftTabView.backgroundColor = [UIColor whiteColor];
+    self.leftTabView.tableFooterView = [UIView new];
+    self.leftTabView.showsVerticalScrollIndicator = NO;
+    self.leftTabView.rowHeight = 62.f;
+    [self.leftTabView registerClass:[PBModelLeftTableViewCell class] forCellReuseIdentifier:LeftCellID];
+    self.leftTabView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.view addSubview:self.leftTabView];
+    [self.leftTabView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.bottom.equalTo(self.view);
+        make.width.equalTo(@(takeawayLeft_W));
+    }];
+    
+    self.rightTabView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain];
+    self.rightTabView.dataSource = self;
+    self.rightTabView.delegate = self;
+    self.rightTabView.backgroundColor = PBColor(245, 244, 247);
+    self.rightTabView.tableFooterView = [UIView new];
+    self.rightTabView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.rightTabView.showsVerticalScrollIndicator = NO;
+    self.rightTabView.rowHeight = UITableViewAutomaticDimension;
+    self.rightTabView.estimatedRowHeight = 100.f;
+    [self.rightTabView registerClass:[PBRightTableViewCell class] forCellReuseIdentifier:RightCellID];
+    [self.rightTabView registerClass:[PBBlankTableViewCell class] forCellReuseIdentifier:BlackCellID];
+    [self.view addSubview:self.rightTabView];
+    [self.rightTabView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.leftTabView.mas_right);
+        make.top.bottom.right.equalTo(self.view);
+    }];
+    if (@available(iOS 15.0, *)) {
+        self.rightTabView.sectionHeaderTopPadding = 0;
+    }
+//    self.rightTabView.contentInset = UIEdgeInsetsMake(0, 0, 0, 10 );
+}
+- (void)backItemAction {
+    [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+}
+- (void)searchAction:(UITapGestureRecognizer *)tap {
+    PBModelSearchController *searchVC = [[PBModelSearchController alloc] init];
+    searchVC.projectModel = self.projectModel;
+    searchVC.hidesBottomBarWhenPushed = YES;
+    [self.navigationController pushViewController:searchVC animated:YES];
+}
+- (void)loadProjectConfig {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetProjectConfigWithProjectID:_projectModel.bimcomposerid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        NSArray *projectDictData = [dict valueForKey:@"ProjectDictData"];
+        NSArray *arr = [projectDictData[0] valueForKey:@"children"];
+//        self.firstValue = [arr[0] valueForKey:@"value"];
+        NSMutableArray *arr_M = arr.mutableCopy;
+        for (int i = 0; i < arr_M.count; ++i) {
+            for (int  j = 0; j < arr_M.count-1; ++j) {
+                NSInteger sort1 = [[arr_M[j] valueForKey:@"sort"] intValue];
+                NSInteger sort2 = [[arr_M[j + 1] valueForKey:@"sort"] intValue];
+                if (sort1 > sort2) {
+                    [arr_M exchangeObjectAtIndex:j withObjectAtIndex:j+1];
+                }
+            }
+        }
+        self.phaseArr = arr_M.copy;
+        [self loadAllMode];
+    }];
+}
+- (void)loadAllMode {
+    [[PBNetworkTools sharedTools] RequestGetProjectAllModelsWithProjectID:_projectModel.bimcomposerid andKeyword:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        str = [str stringByReplacingOccurrencesOfString:@"\\" withString:@""];
+        NSMutableString *mString = [NSMutableString stringWithString:str];
+        [mString deleteCharactersInRange:NSMakeRange(0, 1)];
+        [mString deleteCharactersInRange:NSMakeRange(mString.length-1, 1)];
+        NSArray *modelsArr = [NSArray yy_modelArrayWithClass:[PBModelsModel class] json:mString.copy];
+        for (int i = 0; i < self.phaseArr.count; i++) {
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            NSMutableArray *noBelongArrM = [[NSMutableArray alloc] init];
+            for (int j = 0; j < modelsArr.count; j++) {
+                PBModelsModel *modelsModel = modelsArr[j];
+                if([[self.phaseArr[i] valueForKey:@"value"] isEqualToString:modelsModel.Phase]) {
+                    [arrM addObject:modelsModel];
+                }else {
+                    [noBelongArrM addObject:modelsModel];
+                }
+            }
+            modelsArr = noBelongArrM.copy;
+            [self.listArrM addObject:arrM];
+        }
+        [self.leftTabView reloadData];
+        [self.rightTabView reloadData];   
+    }];
+}
+
+#pragma mark - FSBaseTableViewDataSource & FSBaseTableViewDelegate  委托方法
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    if (tableView == self.leftTabView) {
+        return 1;
+    }
+    return self.listArrM.count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    if (tableView == self.leftTabView) {
+        return self.phaseArr.count;
+    }
+    NSArray *arr = self.listArrM[section];
+    if (arr.count == 0) {
+        return 1;
+    }else {
+        return arr.count;
+    }
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    if (tableView == _rightTabView) {
+        return 26;
+    }else{
+        return 0.01;
+    }
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    if (tableView == _rightTabView) {
+        UIView *bgView = [[UIView alloc]init];
+        bgView.backgroundColor = PBColor(245, 244, 247);
+        NSDictionary *dict = self.phaseArr[section];
+        UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"name"] Color:PBColor(97, 111, 125) isBold:YES Font:12];
+        [bgView addSubview:nameL];
+        [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(bgView).offset(10);
+            make.left.equalTo(bgView).offset(10);
+            make.height.equalTo(@16);
+        }];
+        return bgView;
+    }
+    return nil;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (tableView == _leftTabView) {
+        PBModelLeftTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LeftCellID forIndexPath:indexPath];
+        cell.dict = self.phaseArr[indexPath.row];
+        UIView *selectView = [[UIView alloc]initWithFrame:cell.frame];
+        selectView.backgroundColor = PBColor(245, 244, 247);
+        UIView *linV = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 4, 62.f)];
+        linV.backgroundColor = PBColor(0, 122, 255);
+        [selectView addSubview:linV];
+        cell.selectedBackgroundView = selectView;
+        if (indexPath.row == _leftIndex) {
+            [_leftTabView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
+        }
+        return cell;
+    }else {
+        NSArray *arr = self.listArrM[indexPath.section];
+        if (arr.count == 0) {
+            PBBlankTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:BlackCellID forIndexPath:indexPath];
+            return cell;
+        }else {
+            PBRightTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RightCellID forIndexPath:indexPath];
+            cell.modelsModel = arr[indexPath.row];
+            return cell;
+        }
+    }
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (_leftTabView == tableView) {
+//        //选中_leftTabView而不是拖拽右边的滑动视图
+//        _isSelectSlide = YES;
+        [_rightTabView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:indexPath.row] atScrollPosition:UITableViewScrollPositionTop animated:YES];
+        [_leftTabView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
+        _leftIndex = indexPath.row;
+    }else{
+        PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+        modelDisplayVC.hidesBottomBarWhenPushed = YES;
+        modelDisplayVC.projectModel = self.projectModel;
+        modelDisplayVC.projectIID = self.projectModel.bimcomposerid;
+        NSArray *arr = self.listArrM[indexPath.section];
+        PBModelsModel *modelsModel = arr[indexPath.row];
+        modelDisplayVC.modelID = modelsModel.ID;
+        [self.navigationController pushViewController:modelDisplayVC animated:YES];
+    }
+}
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    if (_rightTabView == tableView){
+//        UITableViewRowAction *shareAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"分享" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+//            NSArray *arr = self.listArrM[indexPath.section];
+//            PBModelsModel *modelsModel = arr[indexPath.row];
+//            [self shareWithModelsModel:modelsModel];
+//        }];
+//        shareAction.backgroundColor = WarningColor;
+
+        UITableViewRowAction *loadAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"加载" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+            PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+            modelDisplayVC.hidesBottomBarWhenPushed = YES;
+            modelDisplayVC.projectModel = self.projectModel;
+            modelDisplayVC.projectIID = self.projectModel.bimcomposerid;
+            NSArray *arr = self.listArrM[indexPath.section];
+            PBModelsModel *modelsModel = arr[indexPath.row];
+            modelDisplayVC.modelID = modelsModel.ID;
+            [self.navigationController pushViewController:modelDisplayVC animated:YES];
+        }];
+        loadAction.backgroundColor = IndicatedColor;
+        return @[loadAction];
+    }else {
+        return @[];
+    }
+}
+- (void)shareWithModelsModel:(PBModelsModel *)model {
+    [PBKeyWindow addSubview:self.shareView];
+    self.shareView.modelID = model.ID;
+    self.shareView.desc = model.Name;
+    UIImage *image;
+    if([model.Thumbnail isEqualToString:@""]) {
+        image = [UIImage imageNamed:@"Project_list_cellImg_bg"];
+    }else {
+        image = [NSString imageDecoding:model.Thumbnail];
+    }
+    self.shareView.image = image;
+    [self.shareView show];
+}
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    if (scrollView != _leftTabView) {
+        if (!(scrollView.isTracking || scrollView.isDecelerating)) {
+            
+        }else {
+            NSArray *array;
+            array = _rightTabView.indexPathsForVisibleRows;
+            if (array.count > 0) {
+                //1:找到indexPath
+                NSIndexPath *indexPath = array[0];
+                //2:可见的第一个section位置
+                NSInteger section = indexPath.section;
+                //3:
+//                if (!_isSelectSlide) {
+                    NSLog(@"section:--------%zd",section);
+                    //只有拖拽的时候,才执行该方法
+                    [_leftTabView selectRowAtIndexPath:[NSIndexPath indexPathForRow:section inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
+//                }
+            }
+        }
+    }
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+- (NSMutableArray *)listArrM {
+    if (_listArrM == nil) {
+        _listArrM = [[NSMutableArray alloc] init];
+    }
+    return _listArrM;
+}
+- (PBShareView *)shareView {
+    if (_shareView == nil) {
+        _shareView  = [[PBShareView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 290.f + 34.f;
+        }else {
+            height = 290.f;
+        }
+        _shareView.visualViewHeight = height;
+        _shareView.viewController = self;
+        _shareView.projectID = self.projectModel.organizeid;
+        _shareView.viewID = @"";
+        _shareView.viewPointID = @"";
+        _shareView.title = @"模型";
+    }
+    return _shareView;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.h
new file mode 100644
index 0000000..acf94b7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.h
@@ -0,0 +1,13 @@
+//
+//  PBMoreTabViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBMoreTabViewController : UIViewController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.m
new file mode 100644
index 0000000..361cfe0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBMoreTabViewController.m
@@ -0,0 +1,44 @@
+//
+//  PBMoreTabViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/26.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBMoreTabViewController.h"
+
+@interface PBMoreTabViewController ()
+
+@end
+
+@implementation PBMoreTabViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.6];
+    
+    
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.h
new file mode 100644
index 0000000..a3018ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.h
@@ -0,0 +1,20 @@
+//
+//  PBViewPointDetailsController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBModelsModel;
+@class PBViewPointModel;
+@interface PBViewPointDetailsController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@property (nonatomic, strong) PBViewPointModel *viewPointModel;
+@property (nonatomic, strong) PBViewPointModel *loadViewPointModel;
+@property (nonatomic, copy) void(^updataDefaultViewPointBlock)(void);
+@property (nonatomic, assign)BOOL isExamineShow;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.m
new file mode 100644
index 0000000..11ca331
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/ViewControllers/PBViewPointDetailsController.m
@@ -0,0 +1,226 @@
+//
+//  PBViewPointDetailsController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBViewPointDetailsController.h"
+#import "PBProjectModel.h"
+#import "PBModelsModel.h"
+#import "PBViewPointModel.h"
+#import "PBViewPointDetailCell.h"
+#import "PBLoadModelDisplayController.h"
+#import "PBImageShowViewController.h"
+
+@interface PBViewPointDetailsController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray<PBViewPointModel *> *dataList;
+@property (nonatomic, weak) UIImageView *viewPointImageV;
+@property (nonatomic, strong) UIImage *image;
+@property (nonatomic, weak) UIButton *loadViewPointBtn;
+@end
+
+@implementation PBViewPointDetailsController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self loadData];
+}
+- (void)setupNav {
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    if ([self.viewPointModel.Type isEqualToString:@"0"]) {
+        backNav.title = @"视点";
+    }else {
+        backNav.title = @"批注";
+    }
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    if ([self.viewPointModel.Type isEqualToString:@"0"]) {
+        UIBarButtonItem *setToDefaultItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Model_previewItem_default"] style:UIBarButtonItemStylePlain target:self action:@selector(setToDefaultViewPoint)];
+        self.navigationItem.rightBarButtonItem = setToDefaultItem;
+        if (self.viewPointModel.IsDefault) {
+            self.navigationItem.rightBarButtonItem.enabled = NO;
+        }else {
+            self.navigationItem.rightBarButtonItem.enabled = YES;
+        }
+    }
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setToDefaultViewPoint {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestSetDefaultViewpointWithProjectID:_modelsModel.ProjectID andModelId:_modelsModel.ID andViewpointID:_viewPointModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error){
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"设置失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        if ([str isEqualToString:@"\"\""]) {
+            self.dataList[0].IsDefault = YES;
+            [self.tableView reloadData];
+            if (self.updataDefaultViewPointBlock) {
+                self.updataDefaultViewPointBlock();
+            }
+        }else {
+            [YJProgressHUD showMessage:@"设置失败" inView:self.view];
+        }
+    }];
+}
+- (void)setupUI {
+    self.title = self.viewPointModel.Name;
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.estimatedRowHeight = 180;
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    [self.view addSubview:self.tableView];
+    CGFloat height;
+    if (IS_IPHONE_X) {
+        height = 110.0f;
+    }else {
+        height = 76.0f;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(height));
+    }];
+    NSString *btnText;
+    if (self.isExamineShow) {
+        btnText = @"确认";
+    }else {
+        btnText = [self.viewPointModel.Type isEqualToString:@"0"] ? @"加载视点" : @"加载批注";
+    }
+    UIButton *loadViewPointBtn = [UIButton z_textButton:btnText boldFontSize:18 normalColor:[UIColor whiteColor]];
+    [loadViewPointBtn addTarget:self action:@selector(LoadModelDisplayVC) forControlEvents:UIControlEventTouchUpInside];
+    [loadViewPointBtn setBackgroundImage:[UIImage imageNamed:@"Model_loadViewPointBtn_bg"] forState:UIControlStateNormal];
+    
+    [self.view addSubview:loadViewPointBtn];
+    [loadViewPointBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(10);
+        make.left.equalTo(self.view).offset(16);
+        make.right.equalTo(self.view).offset(-16);
+        make.height.equalTo(@50);
+    }];
+    self.loadViewPointBtn = loadViewPointBtn;
+    self.loadViewPointBtn.hidden = YES;
+}
+- (void)LoadModelDisplayVC {
+    PBLoadModelDisplayController *modelDisplayVC = [[PBLoadModelDisplayController alloc] init];
+    modelDisplayVC.projectModel = _projectModel;
+    modelDisplayVC.modelID = _modelsModel.ID;
+    modelDisplayVC.viewID = _viewPointModel.ViewID;
+    modelDisplayVC.viewPointID = _viewPointModel.ID;
+    [self.navigationController pushViewController:modelDisplayVC animated:YES];
+}
+
+- (void)loadData {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] RequestGetFullViewpointWithProjectID:_modelsModel.ProjectID andViewpointID:_viewPointModel.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        [YJProgressHUD hide];
+        self.loadViewPointBtn.hidden = NO;
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        str = [str stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];
+        str = [str stringByReplacingOccurrencesOfString:@"\\\\" withString:@"\\"];
+        NSMutableString *mString = [NSMutableString stringWithString:str];
+        [mString deleteCharactersInRange:NSMakeRange(0, 1)];
+        [mString deleteCharactersInRange:NSMakeRange(mString.length-1, 1)];
+        PBViewPointModel *viewPointModel = [PBViewPointModel yy_modelWithJSON:mString.copy];
+        [self.dataList addObject:viewPointModel];
+        self.loadViewPointModel = viewPointModel;
+        if (viewPointModel.Links.count == 0) {
+            self.image = [UIImage imageNamed:@"Model_viewPoint_ failureImage"];
+        }else {
+            NSString *thumbnail = [viewPointModel.Links[0] valueForKey:@"Content"];
+            NSRange range = [thumbnail rangeOfString:@"base64,"];
+            thumbnail = [thumbnail substringFromIndex:range.location + range.length];
+            self.image = [NSString imageDecoding:thumbnail];
+        }
+        self.tableView.tableHeaderView = [self tableHeadViewWithImage:self.image];
+        [self.tableView reloadData];
+    }];
+}
+- (UIView *)tableHeadViewWithImage:(UIImage *)image {
+    NSInteger imageW = image.size.width;
+    NSInteger imageH = image.size.height;
+    CGFloat scale = (CGFloat)self.view.width / (CGFloat)imageW;
+    imageH = imageH *scale;
+    UIView *bgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, imageH)];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:image];
+    [bgView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(bgView);
+    }];
+    imageV.userInteractionEnabled = YES;
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
+    [imageV addGestureRecognizer:tap];
+    self.viewPointImageV = imageV;
+    return bgView;
+}
+- (void)tapAction {
+    PBImageShowViewController *imageShowVC = [[PBImageShowViewController alloc] init];
+    imageShowVC.image = self.image;
+    imageShowVC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:imageShowVC animated:NO completion:nil];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBViewPointDetailCell *cell = [PBViewPointDetailCell new];
+    cell.viewPointModel = self.dataList[indexPath.row];
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setViewPointModel:(PBViewPointModel *)viewPointModel {
+    _viewPointModel = viewPointModel;
+}
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+}
+- (NSMutableArray *)dataList {
+    if (_dataList == nil) {
+        _dataList = [[NSMutableArray alloc] init];
+    }
+    return _dataList;
+}
+- (void)setIsExamineShow:(BOOL)isExamineShow {
+    _isExamineShow = isExamineShow;
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.h
new file mode 100644
index 0000000..95602ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBBlankTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/1.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBBlankTableViewCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.m
new file mode 100644
index 0000000..00dc30b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBBlankTableViewCell.m
@@ -0,0 +1,38 @@
+//
+//  PBBlankTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/9/1.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBBlankTableViewCell.h"
+
+@implementation PBBlankTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = PBColor(241, 242, 244);
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@1);
+        make.top.bottom.equalTo(self.contentView);
+    }];
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.h
new file mode 100644
index 0000000..230f217
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.h
@@ -0,0 +1,15 @@
+//
+//  PBImageTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBViewPointModel;
+@class PBDrawingsModel;
+@interface PBImageTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBDrawingsModel *drawingsModel;
+@property (nonatomic, strong) PBViewPointModel *viewPointModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.m
new file mode 100644
index 0000000..b9acc94
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBImageTableViewCell.m
@@ -0,0 +1,106 @@
+//
+//  PBImageTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBImageTableViewCell.h"
+#import "PBDrawingsModel.h"
+#import "PBViewPointModel.h"
+@interface PBImageTableViewCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *descL;
+@property (nonatomic, weak) UILabel *isDefaultL;
+@end
+@implementation PBImageTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.size.mas_equalTo(CGSizeMake(60, 50));
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(15);
+        make.right.equalTo(self.contentView).offset(-22);
+        make.height.equalTo(@22);
+    }];
+    
+    UILabel *descL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:descL];
+    [descL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(nameL.mas_bottom).offset(8);
+        make.left.right.equalTo(nameL);
+        make.height.equalTo(@20);
+        make.right.equalTo(self.contentView).offset(-52);
+    }];
+    
+    UILabel *isDefaultL = [UILabel z_labelWithText:@"默认" Color:IndicatedColor isBold:YES Font:DescFontSize];
+    [self.contentView addSubview:isDefaultL];
+    [isDefaultL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(descL);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    
+    self.imageV = imageV;
+    self.nameL = nameL;
+    self.descL = descL;
+    self.isDefaultL = isDefaultL;
+}
+
+- (void)setDrawingsModel:(PBDrawingsModel *)drawingsModel {
+    _drawingsModel = drawingsModel;
+    self.isDefaultL.hidden = YES;
+    self.nameL.text = drawingsModel.name;
+    self.imageV.image = [NSString imageDecoding:drawingsModel.thumbnail];
+    self.descL.text = @"";
+}
+- (void)setViewPointModel:(PBViewPointModel *)viewPointModel {
+    _viewPointModel = viewPointModel;
+    self.nameL.text = viewPointModel.Name;
+    NSRange range = [viewPointModel.Snapshot rangeOfString:@"base64,"];
+    NSString *base64 = [viewPointModel.Snapshot substringFromIndex:range.location + range.length];
+    self.imageV.image = [NSString imageDecoding:base64];
+    id dict = [NSString convertTodictionaryOrArr:viewPointModel.Tag];
+    if ([dict isKindOfClass:[NSDictionary class]]) {
+        NSDictionary *dic = (NSDictionary *)dict;
+        if ([[dic allKeys] containsObject:@"description"]){
+            NSString *str = [dic valueForKey:@"description"];
+            if ([str isEqualToString:@""]) {
+                self.descL.text = @"<无描述>";
+            }else {
+                self.descL.text = str;
+            }
+        }else {
+            self.descL.text = @"<无描述>";
+        }
+    }else {
+        self.descL.text = @"<无描述>";
+    }
+    if (viewPointModel.IsDefault) {
+        self.isDefaultL.hidden = NO;
+    }else {
+        self.isDefaultL.hidden = YES;
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.h
new file mode 100644
index 0000000..a0c9765
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBModelLeftTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/29.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBModelLeftTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSDictionary *dict;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.m
new file mode 100644
index 0000000..03534e5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelLeftTableViewCell.m
@@ -0,0 +1,49 @@
+//
+//  PBModelLeftTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/29.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBModelLeftTableViewCell.h"
+@interface PBModelLeftTableViewCell()
+@property (nonatomic, weak) UILabel *nameL;
+@end
+@implementation PBModelLeftTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:YES Font:13];
+    nameL.numberOfLines = 0;
+    nameL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(14);
+        make.left.equalTo(self.contentView).offset(14);
+        make.right.equalTo(self.contentView).offset(-14);
+        make.height.equalTo(@38);
+    }];
+    self.nameL = nameL;
+}
+- (void)setDict:(NSDictionary *)dict {
+    _dict = dict;
+    self.nameL.text = [dict valueForKey:@"name"];
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.h
new file mode 100644
index 0000000..6d4b6b4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.h
@@ -0,0 +1,13 @@
+//
+//  PBModelsTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBModelsModel;
+@interface PBModelsTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.m
new file mode 100644
index 0000000..a256cee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBModelsTableViewCell.m
@@ -0,0 +1,85 @@
+//
+//  PBModelsTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBModelsTableViewCell.h"
+#import "PBModelsModel.h"
+@interface PBModelsTableViewCell()
+@property (nonatomic, weak) UIImageView *modelImageV;
+@property (nonatomic, weak) UILabel *modelNameL;
+@property (nonatomic, weak) UILabel *timeL;
+@end
+@implementation PBModelsTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(244, 245, 246);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(15);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.bottom.equalTo(self.contentView);
+    }];
+    [bgV circleViewWithRadius:6];
+    
+    UIImageView *modelImageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:modelImageV];
+    [modelImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(bgV).offset(10);
+        make.size.mas_equalTo(CGSizeMake(70, 70));
+    }];
+    [modelImageV circleViewWithRadius:6];
+    
+    UILabel *modelNameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    modelNameL.numberOfLines = 2;
+    [self.contentView addSubview:modelNameL];
+    [modelNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(modelImageV);
+        make.left.equalTo(modelImageV.mas_right).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(modelImageV.mas_bottom);
+        make.left.right.equalTo(modelNameL);
+        make.height.equalTo(@16);
+    }];
+    self.modelImageV = modelImageV;
+    self.modelNameL = modelNameL;
+    self.timeL = timeL;
+}
+- (void)setModelsModel:(PBModelsModel *)modelsModel{
+    _modelsModel = modelsModel;
+    if([modelsModel.Thumbnail isEqualToString:@""]) {
+        self.modelImageV.image = [UIImage imageNamed:@"logo_unknown"];
+    }else {
+        self.modelImageV.image = [NSString imageDecoding:modelsModel.Thumbnail];
+    }
+    self.modelNameL.text = modelsModel.Name;
+    NSString *timeStr = [modelsModel.CreateTime stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    NSRange range = [timeStr rangeOfString:@":"];
+    timeStr = [timeStr substringToIndex:range.location + 3];
+    self.timeL.text = timeStr;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.h
new file mode 100644
index 0000000..5c9d182
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.h
@@ -0,0 +1,16 @@
+//
+//  PBMoreFunctionView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/27.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@interface PBMoreFunctionView : UIView
+@property (nonatomic, strong) NSArray *dataArr;
+@property (nonatomic, strong) NSString *title;
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, copy) void(^seletedIndexBlock)(NSInteger index);
+- (void)show;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.m
new file mode 100644
index 0000000..9ab40e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBMoreFunctionView.m
@@ -0,0 +1,131 @@
+//
+//  PBMoreFunctionView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/27.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBMoreFunctionView.h"
+static NSString *const CellID = @"CellID";
+@interface PBMoreFunctionView()<UITableViewDataSource, UITableViewDelegate>
+@property (strong, nonatomic)  UIView *bgView;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) UILabel *titleL;
+@end
+@implementation PBMoreFunctionView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        [self.bgView addSubview:self.titleL];
+    }
+    return self;
+}
+
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (UITableView *)tableView {
+    if (_tableView == nil) {
+        _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 60, PBScreenWidth, _visualViewHeight - 60) style:UITableViewStylePlain];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.rowHeight = 60.f;
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        _tableView.bounces = NO;
+        [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
+        if (@available(iOS 15.0, *)) {
+            _tableView.sectionHeaderTopPadding = 0;
+        }
+    }
+    return _tableView;
+}
+
+- (UILabel *)titleL {
+    if (_titleL == nil) {
+        _titleL = [UILabel z_labelWithText:self.title Color:DescColor isBold:NO Font:DescFontSize];
+        _titleL.frame = CGRectMake(35, 0, PBScreenWidth - (35 *2), 60);
+    }
+    return _titleL;
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point=[[touches anyObject]locationInView:self];
+    CALayer *layer=[self.layer hitTest:point];
+    if (layer ==self.layer) {
+        [self hidden];
+    }
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.5 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBMoreFunctionView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return _dataArr.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.textLabel.text = self.dataArr[indexPath.row];
+    cell.textLabel.font = [UIFont systemFontOfSize:TitleFontSize];
+    cell.textLabel.textColor = TitleColor;
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    [self hidden];
+    if (self.seletedIndexBlock) {
+        self.seletedIndexBlock(indexPath.row);
+    }
+}
+
+- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 2;
+}
+- (void)show {
+    [UIView animateWithDuration:0.5 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - _visualViewHeight;
+    }];
+}
+
+- (void)setTitle:(NSString *)title {
+    _title = title;
+    _titleL.text = title;
+}
+
+- (void)setDataArr:(NSArray *)dataArr {
+    _dataArr = dataArr;
+    [self.tableView reloadData];
+}
+
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+    [self.bgView addSubview:self.tableView];
+}
+
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.h
new file mode 100644
index 0000000..ce5f6fc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.h
@@ -0,0 +1,16 @@
+//
+//  PBPhaseLabel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBPhaseLabel : UILabel
+/// 接收外界的缩放比
+@property (nonatomic, assign) CGFloat scale;
+/// 接收外界的是否是选中的label
+@property (nonatomic, assign) BOOL isSelectLabel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.m
new file mode 100644
index 0000000..d6e8b14
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBPhaseLabel.m
@@ -0,0 +1,41 @@
+//
+//  PBPhaseLabel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBPhaseLabel.h"
+
+@implementation PBPhaseLabel
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.textAlignment = NSTextAlignmentCenter;
+        self.font = [UIFont systemFontOfSize:16];
+//        self.backgroundColor = [UIColor colorWithRed:((float)arc4random_uniform(256) / 255.0) green:((float)arc4random_uniform(256) / 255.0) blue:((float)arc4random_uniform(256) / 255.0) alpha:1.0];
+    }
+    return self;
+}
+
+- (void)setScale:(CGFloat)scale {
+    _scale = scale;
+    self.textColor = [UIColor colorWithRed:scale green:0 blue:0 alpha:1];
+    CGFloat minScale = 1.0;
+    CGFloat maxScale = 1.3;
+    scale = minScale + (maxScale - minScale) *scale;
+    self.transform = CGAffineTransformMakeScale(scale, scale);
+}
+
+- (void)setIsSelectLabel:(BOOL)isSelectLabel {
+    _isSelectLabel = isSelectLabel;
+    if(isSelectLabel) {
+        self.textColor = WarningColor;
+        self.font = [UIFont systemFontOfSize:20];
+    }else {
+        self.textColor = DescColor;
+        self.font = [UIFont systemFontOfSize:16];
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.h
new file mode 100644
index 0000000..ac1fcca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBRightTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/29.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBModelsModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRightTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBModelsModel *modelsModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.m
new file mode 100644
index 0000000..bd4c54e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBRightTableViewCell.m
@@ -0,0 +1,94 @@
+//
+//  PBRightTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/29.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBRightTableViewCell.h"
+#import "PBModelsModel.h"
+@interface PBRightTableViewCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *timeL;
+@end
+@implementation PBRightTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI  {
+    self.contentView.backgroundColor = PBColor(245, 244, 247);
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.height.equalTo(@90);
+        make.bottom.equalTo(self.contentView);
+    }];
+    [bgV circleViewWithRadius:6];
+    
+    UIImageView *imageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.left.equalTo(bgV).offset(10);
+        make.bottom.equalTo(bgV).offset(-10);
+        make.width.equalTo(@70);
+    }];
+    [imageV circleViewWithRadius:6];
+     
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:14];
+    nameL.numberOfLines = 2;
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.left.equalTo(imageV.mas_right).offset(10);
+        make.right.equalTo(bgV).offset(-10);
+    }];
+    
+    UILabel *timeL = [UILabel z_labelWithText:@"" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(imageV);
+        make.left.right.equalTo(nameL);
+        make.height.equalTo(@16);
+    }];
+    self.imageV = imageV;
+    self.nameL = nameL;
+    self.timeL = timeL;
+}
+
+- (void)setModelsModel:(PBModelsModel *)modelsModel {
+    _modelsModel = modelsModel;
+    if([modelsModel.Thumbnail isEqualToString:@""]) {
+        self.imageV.image = [UIImage imageNamed:@"logo_unknown"];
+    }else {
+        self.imageV.image = [NSString imageDecoding:modelsModel.Thumbnail];
+    }
+    self.nameL.text = modelsModel.Name;
+    NSString *timeStr = [modelsModel.CreateTime stringByReplacingOccurrencesOfString:@"T" withString:@" "];
+    NSRange range = [timeStr rangeOfString:@":"];
+    timeStr = [timeStr substringToIndex:range.location + 3];
+    self.timeL.text = timeStr;
+    
+}
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.h
new file mode 100644
index 0000000..d199c96
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.h
@@ -0,0 +1,13 @@
+//
+//  PBTextTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBViewsModel;
+@interface PBTextTableViewCell : UITableViewCell
+@property (nonatomic, strong)PBViewsModel *viewsModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.m
new file mode 100644
index 0000000..582eea9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBTextTableViewCell.m
@@ -0,0 +1,70 @@
+//
+//  PBTextTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/23.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBTextTableViewCell.h"
+#import "PBViewsModel.h"
+
+@interface PBTextTableViewCell()
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *descL;
+@property (nonatomic, weak) UILabel *isDefaultL;
+@end
+@implementation PBTextTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(16);
+        make.height.equalTo(@22);
+    }];
+    UILabel *descL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:descL];
+    [descL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(nameL.mas_bottom).offset(8);
+        make.left.equalTo(nameL);
+        make.height.equalTo(@20);
+    }];
+    
+    UILabel *isDefaultL = [UILabel z_labelWithText:@"默认" Color:IndicatedColor isBold:YES Font:DescFontSize];
+    [self.contentView addSubview:isDefaultL];
+    [isDefaultL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(descL);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    
+    self.nameL = nameL;
+    self.descL = descL;
+    self.isDefaultL = isDefaultL;
+}
+- (void)setViewsModel:(PBViewsModel *)viewsModel {
+    _viewsModel = viewsModel;
+    self.nameL.text = viewsModel.Name;
+    if(viewsModel.IsDefault) {
+        self.isDefaultL.hidden = NO;
+    }else {
+        self.isDefaultL.hidden = YES;
+    }
+    self.descL.text = @"原始视图";
+}
+
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.h
new file mode 100644
index 0000000..194192f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.h
@@ -0,0 +1,13 @@
+//
+//  PBViewPointDetailCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBViewPointModel;
+@interface PBViewPointDetailCell : UITableViewCell
+@property (nonatomic, strong) PBViewPointModel *viewPointModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.m
new file mode 100644
index 0000000..949d071
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Model/Views/PBViewPointDetailCell.m
@@ -0,0 +1,97 @@
+//
+//  PBViewPointDetailCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/24.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBViewPointDetailCell.h"
+#import "PBViewPointModel.h"
+@interface PBViewPointDetailCell()
+@property (nonatomic, weak) UILabel *viewPointNameL;
+@property (nonatomic, weak) UILabel *viewPointDescL;
+@property (nonatomic, weak) UILabel *creatorL;
+@property (nonatomic, weak) UILabel *updateTimeL;
+@property (nonatomic, weak) UILabel *isDefaultL;
+@end
+@implementation PBViewPointDetailCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *viewPointNameL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:TitleFontSize];
+    viewPointNameL.numberOfLines = 0;
+    [self.contentView addSubview:viewPointNameL];
+    [viewPointNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(20);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+
+    UILabel *viewPointDescL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:DescFontSize];
+    viewPointDescL.numberOfLines = 0;
+    [self.contentView addSubview:viewPointDescL];
+    [viewPointDescL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(viewPointNameL.mas_bottom).offset(10);
+        make.left.right.equalTo(viewPointNameL);
+    }];
+    
+//    UILabel *creatorL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:NO Font:TitleFontSize];
+//    creatorL.numberOfLines = 0;
+//    [self.contentView addSubview:creatorL];
+//    [creatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(viewPointDescL.mas_bottom).offset(20);
+//        make.left.right.equalTo(viewPointNameL);
+//    }];
+    UILabel *updateTimeL = [UILabel z_labelWithText:@"" Color:DescColor isBold:NO Font:DescFontSize];
+    [self.contentView addSubview:updateTimeL];
+    [updateTimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(viewPointDescL.mas_bottom).offset(10);
+        make.left.right.equalTo(viewPointNameL);
+    }];
+    UILabel *isDefaultL = [UILabel z_labelWithText:@"默认" Color:IndicatedColor isBold:YES Font:DescFontSize];
+    [self.contentView addSubview:isDefaultL];
+    [isDefaultL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(updateTimeL.mas_bottom).offset(10);
+        make.left.equalTo(viewPointNameL);
+        make.height.equalTo(@22);
+        make.bottom.equalTo(self.contentView).offset(-20);
+    }];
+    
+    self.viewPointNameL = viewPointNameL;
+    self.viewPointDescL = viewPointDescL;
+//    self.creatorL = creatorL;
+    self.updateTimeL = updateTimeL;
+    self.isDefaultL = isDefaultL;
+}
+
+- (void)setViewPointModel:(PBViewPointModel *)viewPointModel {
+    _viewPointModel = viewPointModel;
+    self.viewPointNameL.text = viewPointModel.Name;
+    NSDictionary *dict = [NSString convertTodictionaryOrArr:viewPointModel.Tag];
+    id desc = [dict valueForKey:@"description"];
+    if ([desc isKindOfClass:[NSString class]]) {
+        self.viewPointDescL.text = [desc isEqualToString:@""] ? @"<无描述>" : desc;
+    }else {
+        self.viewPointDescL.text = @"<无描述>";
+    }    
+//    self.creatorL.text = [NSString stringWithFormat:@"创建人   %@",viewPointModel.Editor];
+    self.updateTimeL.text = [NSString stringWithFormat:@"更新时间    %@",[viewPointModel.EditTime stringByReplacingOccurrencesOfString:@"T" withString:@" "]];
+    if (viewPointModel.IsDefault) {
+        self.isDefaultL.hidden = NO;
+    }else {
+        self.isDefaultL.hidden = YES;
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.h
new file mode 100644
index 0000000..ee434a9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.h
@@ -0,0 +1,36 @@
+//
+//  PBPanoramaItemModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/21.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPanoramaItemModel : NSObject
+@property (nonatomic, copy) NSString *PchChname;
+@property (nonatomic, copy) NSString *ModelId;
+@property (nonatomic, copy) NSString *PbGuid;
+@property (nonatomic, copy) NSString *PsCollecteddatetime;
+@property (nonatomic, copy) NSString *PsGuid;
+@property (nonatomic, copy) NSString *PsScenename;
+@property (nonatomic, copy) NSString *ViewId;
+
+@property (nonatomic, copy) NSString *PbUrl;
+@property (nonatomic, copy) NSString *LabelName;
+@property (nonatomic, copy) NSString *pbName;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ PsGuid : "383b061e-fd5d-4757-8186-e6cbe1174520"
+ PbGuid : "a084941b-223a-8373-1e1e-ccd929afecc9"
+ PsScenename : "149856b4-1ad6-4d13-872b-286f4b9b7278"
+ PsCollecteddatetime : "2022-10-25T18:08:00"
+ ModelId : ""
+ ViewId : ""
+ PchChname : "91.JPG"
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.m
new file mode 100644
index 0000000..889db9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaItemModel.m
@@ -0,0 +1,13 @@
+//
+//  PBPanoramaItemModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/21.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaItemModel.h"
+
+@implementation PBPanoramaItemModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.h
new file mode 100644
index 0000000..ce1a23e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.h
@@ -0,0 +1,37 @@
+//
+//  PBPanoramaListModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/21.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPanoramaListModel : NSObject
+@property (nonatomic, copy) NSString *BackGroundColor;
+@property (nonatomic, copy) NSString *FontColor;
+@property (nonatomic, copy) NSString *LabelId;
+@property (nonatomic, copy) NSString *LabelName;
+@property (nonatomic, strong) NSArray *Panoramas;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ BackGroundColor
+ :
+ "rgba(87, 130, 217, 1)"
+ FontColor
+ :
+ "rgba(255, 255, 255, 1)"
+ LabelId
+ :
+ "4425d93d-a214-4c21-95de-f6dbfa54ede0"
+ LabelName
+ :
+ "测试二组"
+ Panoramas
+ :
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.m
new file mode 100644
index 0000000..d5488f2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaListModel.m
@@ -0,0 +1,13 @@
+//
+//  PBPanoramaListModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/21.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaListModel.h"
+
+@implementation PBPanoramaListModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.h
new file mode 100644
index 0000000..a72482f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.h
@@ -0,0 +1,78 @@
+//
+//  PBPanoramaModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPanoramaModel : NSObject
+@property (nonatomic, copy) NSString *BackGroundColor;
+@property (nonatomic, copy) NSString *FontColor;
+@property (nonatomic, copy) NSString *LabelId;
+@property (nonatomic, copy) NSString *LabelName;
+@property (nonatomic, copy) NSString *LabelSort;
+@property (nonatomic, copy) NSString *PbBIMComposerId;
+@property (nonatomic, copy) NSString *PbGuid;
+@property (nonatomic, copy) NSString *PbIsdel;
+@property (nonatomic, copy) NSString *PbName;
+@property (nonatomic, copy) NSString *PbOrganizeId;
+@property (nonatomic, copy) NSString *PbOrganizeName;
+@property (nonatomic, copy) NSString *PbUpdatetime;
+@property (nonatomic, copy) NSString *PbUrl;
+@property (nonatomic, assign) NSInteger PqFlag;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+
+ BackGroundColor
+ :
+ ""
+ FontColor
+ :
+ ""
+ LabelId
+ :
+ ""
+ LabelName
+ :
+ ""
+ LabelSort
+ :
+ -999
+ PbBIMComposerId
+ :
+ null
+ PbGisinfo
+ :
+ ""
+ PbGuid
+ :
+ "25c8eef7-7adc-d3eb-c66c-075e4d62f779"
+ PbIsdel
+ :
+ 0
+ PbName
+ :
+ "0923"
+ PbOrganizeId
+ :
+ "bf36bf2b-1619-4f12-acc6-daee5261ebd4"
+ PbOrganizeName
+ :
+ null
+ PbUpdatetime
+ :
+ "2022-09-24T00:00:00"
+ PbUrl
+ :
+ "/2/5/c/8/e/e/f/7/25c8eef7-7adc-d3eb-c66c-075e4d62f779"
+ PqFlag
+ :
+ 2
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.m
new file mode 100644
index 0000000..08a32aa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Models/PBPanoramaModel.m
@@ -0,0 +1,13 @@
+//
+//  PBPanoramaModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaModel.h"
+
+@implementation PBPanoramaModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.h
new file mode 100644
index 0000000..cf64c9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBAddPanoramaViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/19.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBPanoramaModel;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBAddPanoramaViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *tagList;
+@property (nonatomic, strong) PBPanoramaModel *panoramaModel;
+@property (nonatomic, copy) void(^SaveSuccessBlock)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.m
new file mode 100644
index 0000000..af8a66d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBAddPanoramaViewController.m
@@ -0,0 +1,562 @@
+//
+//  PBAddPanoramaViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/19.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBAddPanoramaViewController.h"
+#import "PBProjectModel.h"
+#import "PBViewPointScrollView.h"
+#import "PBChooseType.h"
+#import "PBPanoramaModel.h"
+#import "PBViewPointModel.h"
+#import "PBModelsModel.h"
+#import "HJCycleView.h"
+
+static NSString *const ImageCellID = @"ImageCellID";
+@interface PBAddPanoramaViewController ()<UITextFieldDelegate, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) PBChooseType *chooseTypeView;
+@property (nonatomic, strong) NSDictionary *tagDict;
+@property (nonatomic, weak) UIButton *tagBtn;
+@property (nonatomic, strong) NSData *imageDate;
+@property (nonatomic, copy) NSString *imageExtension;
+@property (nonatomic, weak) UIImageView *panoramaImageV;
+@property (nonatomic, weak) PBViewPointScrollView *vpScrollView;
+@property (nonatomic, weak)UITextField *nameTF;
+@property (nonatomic, weak)UITextField *panoramaNameTF;
+@property (nonatomic, assign) BOOL isAddsubset;
+@property (nonatomic, weak) HJCycleView *cycleview;
+@end
+
+@implementation PBAddPanoramaViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    if (self.isAddsubset) {
+        [self loadImage];
+    }
+}
+- (void)setupNav {
+    self.view.backgroundColor = [UIColor z_colorWithR:247 G:247 B:247];
+    self.title = @"添加全景图";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *saveItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveItem;
+}
+- (void)loadImage {
+    [YJProgressHUD showProgress:@"正在加载辅助图片..." inView:self.view];
+    NSString *labelId = @"";
+    if (self.isAddsubset) {
+        labelId = self.panoramaModel.LabelId;
+    } else {
+        labelId = [self.tagDict valueForKey:@"LabelId"];
+    }
+    [[PBNetworkTools sharedTools] GetLabelFileWithOrganizeId:self.projectModel.organizeid andLabelId:labelId AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showFailed:@"加载辅助图片失败" inview:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            NSMutableArray *imageM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                NSString *url = [NSString stringWithFormat:@"%@/%@", PanoramaUrl, [obj valueForKey:@"FilePath"]];
+                [imageM addObject:url];
+            }
+            self.cycleview.data = imageM.copy;
+        }else {
+            [YJProgressHUD showFailed:networkModel.Msg inview:self.view];
+        }
+    }];
+}
+- (void)saveAction {
+    if (self.imageDate == nil) {
+        [YJProgressHUD showMessage:@"请选择全景图" inView:self.view];
+        return;
+    }
+    [YJProgressHUD showProgress:@"正在保存..." inView:self.view];
+    PBViewPointModel *vpModel = self.vpScrollView.vpData;
+    NSString *vpStr = nil;
+    if (vpModel.Override) {
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:vpModel.Override];
+        NSString *pos = [dict valueForKey:@"cameraPosition"];
+        NSString *target = [dict valueForKey:@"controlPostion"];
+        NSString *focalOffset = [dict valueForKey:@"focalOffset"];
+        NSDictionary *vpDict = @{
+                                @"pos" : pos,
+                                @"target" : target,
+                                @"focalOffset" : focalOffset
+                                };
+        
+        vpStr = [NSString convertToJson:vpDict];
+    }
+    
+    PBModelsModel *model = self.vpScrollView.modelData;
+ 
+    NSString *targetPatchGuid =  nil;
+    NSString *name = @"";
+    NSString *labelId = @"";
+    if(self.isAddsubset) {
+        targetPatchGuid = self.panoramaModel.PbGuid;
+    }else {
+        name = self.nameTF.text;
+        labelId = [self.tagDict valueForKey:@"LabelId"];
+        if (name == nil || [name isEqualToString:@""]) {
+           [YJProgressHUD showMessage:@"请输入全景图集名称" inView:self.view];
+           return;
+        }
+        if (labelId == nil) {
+            labelId = @"";
+        }
+    }
+    NSString *panoramaName = [NSString stringWithFormat:@"%@.%@", self.panoramaNameTF.text, self.imageExtension];
+    if (panoramaName == nil || [panoramaName isEqualToString:@""]) {
+        [YJProgressHUD showMessage:@"请输入图片名称" inView:self.view];
+        return;
+    }
+    [[PBNetworkTools sharedTools] UploadPanoramaImagesWithFile:self.imageDate andfileName:panoramaName andTargetPatchGuid:targetPatchGuid andOrganizeId:self.projectModel.organizeid andPbname:name andLabelId:labelId andModelId:model.ID andViewId:vpStr andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showFailed:@"保存失败" inview:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            [YJProgressHUD hide];
+            if (self.SaveSuccessBlock) {
+                self.SaveSuccessBlock();
+            }
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showFailed:networkModel.Msg inview:self.view];
+        }
+    }];
+
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
+    [self.view addSubview:scrollView];
+    scrollView.contentSize = CGSizeMake(self.view.width, 1200);
+    scrollView.backgroundColor = PBColor(248, 248, 248);
+    NSInteger width = self.view.width - 20;
+    
+    UIView *topView = [[UIView alloc] init];
+    topView.backgroundColor = [UIColor whiteColor];
+    [scrollView addSubview:topView];
+    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(scrollView).offset(10);
+        make.height.equalTo(@436);
+        make.width.equalTo(@(width));
+    }];
+    [topView circleViewWithRadius:6];
+    
+    UIImageView *iconImagV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"add_panorama"]];
+    [topView addSubview:iconImagV];
+    [iconImagV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView).offset(13);
+        make.left.equalTo(topView).offset(10);
+        make.size.mas_equalTo(CGSizeMake(15, 15));
+    }];
+    UILabel *addTitleL = [UILabel z_labelWithText:@"添加全景图" Color:[UIColor z_colorWithR:24 G:24 B:24] isBold:YES Font:15];
+    [topView addSubview:addTitleL];
+    [addTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView).offset(10);
+        make.left.equalTo(iconImagV.mas_right).offset(10);
+        make.height.equalTo(@21);
+    }];
+    UIView *bgV = [[UIView alloc] init];
+    bgV.layer.cornerRadius = 6;
+    bgV.layer.borderWidth = 1;
+    bgV.layer.borderColor = [UIColor z_colorWithR:216 G:216 B:216].CGColor;
+    [topView addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(iconImagV.mas_bottom).offset(13);
+        make.left.equalTo(iconImagV);
+        make.right.equalTo(topView).offset(-10);
+        make.height.equalTo(@40);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"图集名称" Color:[UIColor z_colorWithR:24 G:24 B:24] isBold:YES Font:13];
+    [bgV addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(bgV).offset(10);
+        make.top.equalTo(bgV).offset(11);
+        make.height.equalTo(@19);
+    }];
+    UIView *line = [[UIView alloc] init];
+    line.backgroundColor = [UIColor z_colorWithR:216 G:216 B:216];
+    [bgV addSubview:line];
+    [line mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV).offset(10);
+        make.bottom.equalTo(bgV).offset(-10);
+        make.width.equalTo(@1);
+        make.left.equalTo(bgV).offset(72);
+    }];
+    UITextField *nameTF = [[UITextField alloc] init];
+    nameTF.placeholder = @"请输入全景图集名称";
+    nameTF.textAlignment= NSTextAlignmentLeft;
+    nameTF.textColor = TitleColor;
+    nameTF.font = [UIFont fontWithName:Coarse size:13.0];
+    nameTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    nameTF.delegate = self;
+    [bgV addSubview:nameTF];
+    [nameTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(bgV);
+        make.right.equalTo(bgV).offset(-12);
+        make.left.equalTo(line).offset(10);
+    }];
+    
+    
+    UIView *bg1V = [[UIView alloc] init];
+    bg1V.layer.cornerRadius = 6;
+    bg1V.layer.borderWidth = 1;
+    bg1V.layer.borderColor = [UIColor z_colorWithR:216 G:216 B:216].CGColor;
+    [topView addSubview:bg1V];
+    [bg1V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV.mas_bottom).offset(10);
+        make.left.equalTo(iconImagV);
+        make.right.equalTo(topView).offset(-10);
+        make.height.equalTo(@40);
+    }];
+    UILabel *tagL = [UILabel z_labelWithText:@"标签" Color:[UIColor z_colorWithR:24 G:24 B:24] isBold:YES Font:13];
+    [bg1V addSubview:tagL];
+    [tagL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(bg1V).offset(10);
+        make.top.equalTo(bg1V).offset(11);
+        make.height.equalTo(@19);
+    }];
+    UIView *line1 = [[UIView alloc] init];
+    line1.backgroundColor = [UIColor z_colorWithR:216 G:216 B:216];
+    [bg1V addSubview:line1];
+    [line1 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg1V).offset(10);
+        make.bottom.equalTo(bg1V).offset(-10);
+        make.width.equalTo(@1);
+        make.left.equalTo(bg1V).offset(72);
+    }];
+    
+    
+    UIButton *tagBtn = [UIButton z_textButton:@"请选择标签" fontSize:13 normalColor:[UIColor z_colorWithR:102 G:102 B:102]];
+    [tagBtn addTarget:self action:@selector(chooseTag) forControlEvents:UIControlEventTouchUpInside];
+    tagBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
+    [bg1V addSubview:tagBtn];
+    [tagBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(bg1V);
+        make.right.equalTo(bg1V).offset(-12);
+        make.left.equalTo(line1).offset(10);
+    }];
+    
+    UIView *addImageView = [[UIView alloc] init];
+    [topView addSubview:addImageView];
+    [addImageView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg1V.mas_bottom).offset(10);
+        make.left.right.equalTo(bgV);
+        make.height.equalTo(@235);
+    }];
+    
+    UIImageView *addImagebg = [[UIImageView alloc] init];
+    addImagebg.image = [UIImage imageNamed:@"add_panorama_bg"];
+    [addImageView addSubview:addImagebg];
+    [addImagebg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(addImageView);
+    }];
+    
+    UIView *btnView = [[UIView alloc] init];
+    [addImageView addSubview:btnView];
+    [btnView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.center.equalTo(addImageView);
+        make.size.mas_equalTo(CGSizeMake(105, 20));
+    }];
+    UIButton *addImage = [UIButton z_bgImageButton:[UIImage imageNamed:@"panorama_add"]];
+    [addImage addTarget:self action:@selector(addImageAction) forControlEvents:UIControlEventTouchUpInside];
+    [btnView addSubview:addImage];
+    [addImage mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(btnView);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UIButton *addTitle = [UIButton z_textButton:@"上传一张全景图" fontSize:13 normalColor:[UIColor z_colorWithR:0 G:122 B:255]];
+    [addTitle addTarget:self action:@selector(addImageAction) forControlEvents:UIControlEventTouchUpInside];
+    [btnView addSubview:addTitle];
+    [addTitle mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(addImage.mas_right).offset(4);
+        make.top.bottom.equalTo(btnView);
+    }];
+
+    UIImageView *panoramaImageV = [[UIImageView alloc] init];
+    panoramaImageV.userInteractionEnabled = YES;
+    [addImageView addSubview:panoramaImageV];
+    [panoramaImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(addImageView);
+    }];
+    [panoramaImageV circleViewWithRadius:6];
+    panoramaImageV.hidden = YES;
+    
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(deleteImage) forControlEvents:UIControlEventTouchUpInside];
+    [panoramaImageV addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(panoramaImageV).offset(4);
+        make.right.equalTo(panoramaImageV).offset(-4);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UIView *namebgV = [[UIView alloc] init];
+    namebgV.layer.cornerRadius = 6;
+    namebgV.layer.borderWidth = 1;
+    namebgV.layer.borderColor = [UIColor z_colorWithR:216 G:216 B:216].CGColor;
+    [topView addSubview:namebgV];
+    [namebgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(addImageView.mas_bottom).offset(10);
+        make.left.equalTo(iconImagV);
+        make.right.equalTo(topView).offset(-10);
+        make.height.equalTo(@40);
+    }];
+    UILabel *panoramaNameL = [UILabel z_labelWithText:@"图片名称" Color:[UIColor z_colorWithR:24 G:24 B:24] isBold:YES Font:13];
+    [namebgV addSubview:panoramaNameL];
+    [panoramaNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(namebgV).offset(10);
+        make.top.equalTo(namebgV).offset(11);
+        make.height.equalTo(@19);
+    }];
+    UIView *line2 = [[UIView alloc] init];
+    line2.backgroundColor = [UIColor z_colorWithR:216 G:216 B:216];
+    [namebgV addSubview:line2];
+    [line2 mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(namebgV).offset(10);
+        make.bottom.equalTo(namebgV).offset(-10);
+        make.width.equalTo(@1);
+        make.left.equalTo(namebgV).offset(72);
+    }];
+    UITextField *panoramaNameTF = [[UITextField alloc] init];
+    panoramaNameTF.placeholder = @"图片名称";
+    panoramaNameTF.textAlignment= NSTextAlignmentLeft;
+    panoramaNameTF.textColor = TitleColor;
+    panoramaNameTF.font = [UIFont fontWithName:Coarse size:13.0];
+    panoramaNameTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    panoramaNameTF.delegate = self;
+    [namebgV addSubview:panoramaNameTF];
+    [panoramaNameTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(namebgV);
+        make.right.equalTo(namebgV).offset(-12);
+        make.left.equalTo(line2).offset(10);
+    }];
+    
+    
+    UIView *middleView = [[UIView alloc] init];
+    middleView.backgroundColor = [UIColor whiteColor];
+    [scrollView addSubview:middleView];
+    [middleView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topView.mas_bottom).offset(10);
+        make.left.width.equalTo(topView);
+        make.height.equalTo(@350);
+    }];
+    [middleView circleViewWithRadius:6];
+    UIImageView *vpiconImagV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"add_viewpoint"]];
+    [middleView addSubview:vpiconImagV];
+    [vpiconImagV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(middleView).offset(13);
+        make.left.equalTo(middleView).offset(10);
+        make.size.mas_equalTo(CGSizeMake(15, 15));
+    }];
+    UILabel *chooseVpL = [UILabel z_labelWithText:@"选择视点" Color:[UIColor z_colorWithR:24 G:24 B:24] isBold:YES Font:15];
+    [middleView addSubview:chooseVpL];
+    [chooseVpL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(middleView).offset(10);
+        make.left.equalTo(vpiconImagV.mas_right).offset(10);
+        make.height.equalTo(@21);
+    }];
+    PBViewPointScrollView *vpscrollView = [[PBViewPointScrollView alloc] initWithFrame:CGRectMake(0, 31, width, 319) withProjectModel:self.projectModel];
+    [middleView addSubview:vpscrollView];
+    
+  
+    UIView *bottomView = [[UIView alloc] init];
+    bottomView.backgroundColor = [UIColor whiteColor];
+    [scrollView addSubview:bottomView];
+    [bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(middleView.mas_bottom).offset(10);
+        make.left.width.equalTo(topView);
+        make.height.equalTo(@286);
+    }];
+    [bottomView circleViewWithRadius:6];
+    
+    UIImageView *choosedianImagV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"add_selection"]];
+    [bottomView addSubview:choosedianImagV];
+    [choosedianImagV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomView).offset(13);
+        make.left.equalTo(bottomView).offset(10);
+        make.size.mas_equalTo(CGSizeMake(15, 15));
+    }];
+    UILabel *choosedianL = [UILabel z_labelWithText:@"辅助选点" Color:[UIColor z_colorWithR:24 G:24 B:24] isBold:YES Font:15];
+    [bottomView addSubview:choosedianL];
+    [choosedianL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomView).offset(10);
+        make.left.equalTo(choosedianImagV.mas_right).offset(10);
+        make.height.equalTo(@21);
+    }];
+    
+    NSInteger collectionW = width - 20;
+    NSInteger collectionH = 286 - 50;
+
+    HJCycleView *cycleview = [[HJCycleView alloc] initWithFrame:CGRectMake(10, 40, collectionW, collectionH) andData:@[]];
+    cycleview.backgroundColor = [UIColor whiteColor];
+    cycleview.returnBlock = ^(NSInteger index) {
+        NSLog(@"点击了%ld",index);
+    };
+    [bottomView addSubview:cycleview];
+    self.cycleview = cycleview;
+    
+    
+    self.tagBtn = tagBtn;
+    self.panoramaImageV = panoramaImageV;
+    self.vpScrollView = vpscrollView;
+    self.nameTF = nameTF;
+    self.panoramaNameTF = panoramaNameTF;
+    if (_isAddsubset) {
+        self.nameTF.text = self.panoramaModel.PbName;
+        self.nameTF.enabled = NO;
+        [self.tagBtn setTitle:self.panoramaModel.LabelName forState:UIControlStateNormal];
+    }
+}
+// 选择标签
+- (void)chooseTag {
+    if (self.isAddsubset) {
+        return;
+    }
+    [self.view endEditing:YES];
+    [PBKeyWindow addSubview:self.chooseTypeView];
+    PBPanoramaModel *panoramaModel = [[PBPanoramaModel alloc] init];
+    self.chooseTypeView.panoramaModel = panoramaModel;
+    self.chooseTypeView.dateList = self.tagList;
+    self.chooseTypeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSInteger index){
+        if (isSelsected) {
+            self.tagDict = self.tagList[index];
+            [self.tagBtn setTitle:[self.tagDict valueForKey:@"LabelName"] forState:UIControlStateNormal];
+            [self loadImage];
+        }
+    };
+    [self.chooseTypeView show];
+}
+//选择全景图
+- (void)addImageAction {
+    [self takePhotoLibrary];
+}
+
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+- (void)pushLFImagePickerController {
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
+//    imagePicker.maxVideosCount = 1;
+//    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+//    if (self.selectedPhotos.count > 0) {
+        imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+//    }else {
+//        imagePicker.allowPickingType = LFPickingMediaTypeALL;//用户是否可以选择视频
+//    }
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+//    imagePicker.selectedAssets = self.selectAssetArr;
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+#pragma mark - LFImagePickerControllerDelegate
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+    if(results.count > 0) {
+        self.panoramaImageV.hidden = NO;
+        LFResultObject *result = results[0];
+        LFResultImage *resultImage = (LFResultImage *)result;
+        self.panoramaImageV.image = resultImage.thumbnailImage;
+        self.imageDate = resultImage.originalData;
+        self.panoramaNameTF.text = [result.info.name stringByDeletingPathExtension];
+        self.imageExtension = [result.info.name pathExtension];
+    }
+}
+
+- (void)deleteImage {
+    self.panoramaImageV.image = nil;
+    self.imageDate = nil;
+    self.panoramaImageV.hidden = YES;
+    self.panoramaNameTF.text = @"";
+    self.imageExtension = @"";
+}
+
+#pragma mark - UITextFieldDelegate
+- (void)textFieldDidEndEditing:(UITextField *)textField{
+//    self.unitText = textField.text;
+
+}
+- (void)setPanoramaModel:(PBPanoramaModel *)panoramaModel {
+    _panoramaModel = panoramaModel;
+    _isAddsubset = YES;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setTagList:(NSArray *)tagList {
+    _tagList = tagList;
+}
+- (PBChooseType *)chooseTypeView {
+    if (_chooseTypeView == nil) {
+        _chooseTypeView = [[PBChooseType alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _chooseTypeView.visualViewHeight = 300;
+    }
+    return _chooseTypeView;;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.h
new file mode 100644
index 0000000..d6594d2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.h
@@ -0,0 +1,29 @@
+//
+//  PBPanoramaBaseController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "PBProjectModel.h"
+#import "PBPromptView.h"
+#import "PBIssueNavModel.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPanoramaBaseController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *powerArr;
+@property (nonatomic,strong) UITableView *tableView;
+@property (nonatomic,strong) NSMutableArray *panoramaArrM;
+@property (nonatomic, strong) NSMutableArray *dropdownMenuArrM;
+@property (nonatomic, assign) NSInteger statusSelectIndex;
+//@property (nonatomic, assign) NSInteger archiveSelectIndex;
+@property (nonatomic, copy) NSString *searchText;
+//@property (nonatomic, strong) PBPromptView *promptView;
+//@property (nonatomic, strong) UILabel *countL;
+@property (nonatomic, strong) NSArray *tagList;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.m
new file mode 100644
index 0000000..a69079c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaBaseController.m
@@ -0,0 +1,173 @@
+//
+//  PBPanoramaBaseController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaBaseController.h"
+#import "PBPanoramaTableViewCell.h"
+#import "PBPanoramaModel.h"
+#import "PBPanoramaViewController.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBPanoramaBaseController ()<UITableViewDataSource, UITableViewDelegate>
+
+@end
+
+@implementation PBPanoramaBaseController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupUI];
+    [self setupRefresh];
+}
+- (void)setupUI {
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(248, 248, 248);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 114.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBPanoramaTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(41);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    
+//    [self.view addSubview:self.promptView];
+//    self.promptView.hidden = YES;
+}
+- (void)setupRefresh {
+    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+        [self.panoramaArrM removeAllObjects];
+        [self loadPanoramaList];
+    }];
+    header.lastUpdatedTimeLabel.hidden = YES;
+    header.stateLabel.textColor = TitleColor;
+    [header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
+    [header setTitle:@"释放更新" forState:MJRefreshStatePulling];
+    [header setTitle:@"加载中..." forState:MJRefreshStateRefreshing];
+    self.tableView.mj_header = header;
+}
+- (void)loadPanoramaList {
+    NSString *statusId = @""; NSString *searText = @"";
+    if (self.dropdownMenuArrM.count == 1) {
+        PBIssueNavModel *statusNavModel = self.dropdownMenuArrM[0][self.statusSelectIndex];
+        statusId = statusNavModel.ItemDetailId;
+    };
+    searText = self.searchText == nil? @"" : self.searchText;
+    [[PBNetworkTools sharedTools] GetListByLabelGroupWithOrganizeId:self.projectModel.organizeid andLabelId:statusId andPbName:searText  AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        [self.tableView.mj_header endRefreshing];
+        if (error) {
+            [YJProgressHUD showMessage:@"加载列表失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                NSArray *arr =  [obj valueForKey:@"Panoramas"];
+                [arrM addObjectsFromArray:arr];
+            }
+            NSMutableArray *modelArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *dict in arrM) {
+                PBPanoramaModel *panoramaModel = [PBPanoramaModel yy_modelWithDictionary:dict];
+                [modelArrM addObject:panoramaModel];
+            }
+            self.panoramaArrM = modelArrM;
+            [self.tableView reloadData];
+        } else {
+            [YJProgressHUD showMessage:@"加载列表失败" inView:self.view];
+        }
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.panoramaArrM.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBPanoramaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.panoramaModel = self.panoramaArrM[indexPath.row];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBPanoramaModel *panoramaModel = self.panoramaArrM[indexPath.row];
+    PBPanoramaViewController *panoramaVC = [[PBPanoramaViewController alloc] init];
+    panoramaVC.projectModel = self.projectModel;
+    panoramaVC.panoramaModel = panoramaModel;
+    [self.navigationController pushViewController:panoramaVC animated:YES];
+}
+
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            [self delPanoramaGroupWith:indexPath];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+
+    return @[deleteAction];
+}
+                                         
+- (void)delPanoramaGroupWith:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    PBPanoramaModel *panoramaModel = self.panoramaArrM[indexPath.row];
+    [[PBNetworkTools sharedTools] RemoveItemWithPbGuid:panoramaModel.PbGuid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"删除失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.panoramaArrM removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (NSMutableArray *)panoramaArrM {
+    if (_panoramaArrM == nil) {
+        _panoramaArrM = [[NSMutableArray alloc] init];
+    }
+    return _panoramaArrM;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (NSMutableArray *)dropdownMenuArrM {
+    if (_dropdownMenuArrM == nil) {
+        _dropdownMenuArrM = [[NSMutableArray alloc] init];
+    }
+    return _dropdownMenuArrM;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.h
new file mode 100644
index 0000000..600646d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBPanoramaListViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaBaseController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPanoramaListViewController : PBPanoramaBaseController
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.m
new file mode 100644
index 0000000..2d96f8b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaListViewController.m
@@ -0,0 +1,143 @@
+//
+//  PBPanoramaListViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaListViewController.h"
+#import "PBAddPanoramaViewController.h"
+#import "PBDropdownMenu.h"
+
+@interface PBPanoramaListViewController ()<PBDropdownMenuDelegate, UISearchBarDelegate, UITextFieldDelegate>
+
+@end
+
+@implementation PBPanoramaListViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self loadTags];
+    [self.tableView.mj_header beginRefreshing];
+}
+- (void)setupNav {
+    self.title = self.projectModel.fullname;
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *addIssueItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"] style:UIBarButtonItemStylePlain target:self action:@selector(addPanorama)];
+    self.navigationItem.rightBarButtonItem = addIssueItem;
+}
+- (void)addPanorama {
+    PBAddPanoramaViewController *addPanoramaVC = [[PBAddPanoramaViewController alloc] init];
+    addPanoramaVC.projectModel = self.projectModel;
+    addPanoramaVC.tagList = self.tagList;
+    addPanoramaVC.SaveSuccessBlock = ^{
+        [self.tableView.mj_header beginRefreshing];
+    };
+    [self.navigationController pushViewController:addPanoramaVC animated:YES];
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)loadTags {
+    [[PBNetworkTools sharedTools] GetLabelListWithOrganizeId:self.projectModel.organizeid AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showFailed:@"加载标签失败" inview:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            self.tagList = networkModel.Data;
+            NSMutableArray *statusArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+                issueNavModel.ItemName = [obj valueForKey:@"LabelName"];
+                issueNavModel.ItemDetailId = [obj valueForKey:@"LabelId"];
+                [statusArrM addObject:issueNavModel];
+            }
+            PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+            issueNavModel1.ItemName = @"全部";
+            issueNavModel1.ItemDetailId = @"";
+            [statusArrM insertObject:issueNavModel1 atIndex:0];
+            [self.dropdownMenuArrM addObject:statusArrM];
+            [self setupDropdownMenuView];
+            [self.tableView.mj_header beginRefreshing];
+        }else {
+            [YJProgressHUD showMessage:@"加载列表失败" inView:self.view];
+        }
+    }];
+}
+- (void)setupDropdownMenuView {
+    float dropdownMenuW = MainScreenWidth / (self.dropdownMenuArrM.count + 1);
+    PBDropdownMenu *dropdownMenu = [[PBDropdownMenu alloc] initWithFrame:CGRectMake(0, 0, self.dropdownMenuArrM.count * dropdownMenuW, 40) andArr:self.dropdownMenuArrM];
+    dropdownMenu.delegate = self;
+    [self.view addSubview:dropdownMenu];
+    
+    UITextField *searchTF = [[UITextField alloc] initWithFrame:CGRectMake(dropdownMenuW * self.dropdownMenuArrM.count, 0, dropdownMenuW, 40)];
+    searchTF.placeholder = @"查找全景图";
+    searchTF.textAlignment= NSTextAlignmentLeft;
+    searchTF.clearButtonMode = UITextFieldViewModeAlways;
+    searchTF.textColor = TitleColor;
+    searchTF.font = [UIFont fontWithName:Conventional size:16.0];
+    searchTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    searchTF.delegate = self;
+    searchTF.returnKeyType=UIReturnKeySearch;
+    searchTF.backgroundColor = PBColor(242, 242, 242);
+    searchTF.leftViewMode = UITextFieldViewModeAlways;
+    UIImageView *leftImageV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 13, 15, 15)];
+    leftImageV.image = [UIImage imageNamed:@"searchTF"];
+    UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 40)];
+    [leftView addSubview:leftImageV];
+    searchTF.leftView = leftView;
+    [self.view addSubview:searchTF];
+}
+#pragma mark - PBDropdownMenuDelegate
+- (void)dropdownMenu:(UIButton *)clickBtn selectedCellNumber:(NSInteger)number {
+    NSInteger index = clickBtn.tag -100;
+    switch (index) {
+        case 0:
+            self.statusSelectIndex = number;
+            [self.tableView.mj_header beginRefreshing];
+            break;
+        default:
+            break;
+    }
+}
+
+#pragma mark - UITextFieldDelegate
+- (BOOL)textFieldShouldClear:(UITextField *)textField {
+    [textField performSelector: @selector(resignFirstResponder)
+                    withObject: nil
+                    afterDelay: 0];
+    self.searchText = @"";
+    [self.tableView.mj_header beginRefreshing];
+    return YES;
+}
+- (BOOL)textFieldShouldReturn:(UITextField *)textField{
+    self.searchText = textField.text;
+    [textField resignFirstResponder];
+    [self.tableView.mj_header beginRefreshing];
+    return YES;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.h
new file mode 100644
index 0000000..a5b72b6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.h
@@ -0,0 +1,19 @@
+//
+//  PBPanoramaViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/19.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBPanoramaModel;
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPanoramaViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBPanoramaModel *panoramaModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.m
new file mode 100644
index 0000000..76780d1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBPanoramaViewController.m
@@ -0,0 +1,166 @@
+//
+//  PBPanoramaViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/19.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaViewController.h"
+#import "PBPanoramaTableViewCell.h"
+#import "PBPanoramaModel.h"
+#import "PBPanoramaItemModel.h"
+#import "PBAddPanoramaViewController.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBPanoramaViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *panoramas;
+@end
+
+@implementation PBPanoramaViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self setupRefresh];
+    [self.tableView.mj_header beginRefreshing];
+}
+- (void)setupNav {
+    self.title = self.panoramaModel.PbName;
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *addIssueItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"] style:UIBarButtonItemStylePlain target:self action:@selector(addPanorama)];
+    self.navigationItem.rightBarButtonItem = addIssueItem;
+}
+- (void)setupRefresh {
+    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+        [self loadData];
+    }];
+    header.lastUpdatedTimeLabel.hidden = YES;
+    header.stateLabel.textColor = TitleColor;
+    [header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
+    [header setTitle:@"释放更新" forState:MJRefreshStatePulling];
+    [header setTitle:@"加载中..." forState:MJRefreshStateRefreshing];
+    self.tableView.mj_header = header;
+}
+- (void)addPanorama {
+    PBAddPanoramaViewController *addPanoramaVC = [[PBAddPanoramaViewController alloc] init];
+    addPanoramaVC.projectModel = self.projectModel;
+    addPanoramaVC.panoramaModel = self.panoramaModel;
+    addPanoramaVC.SaveSuccessBlock = ^{
+        [self.tableView.mj_header beginRefreshing];
+    };
+    [self.navigationController pushViewController:addPanoramaVC animated:YES];
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)loadData {
+    [[PBNetworkTools sharedTools] GetPanoramaSceneListWithPb_guid:self.panoramaModel.PbGuid AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        [self.tableView.mj_header endRefreshing];
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"获取列表失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBPanoramaItemModel *itemModel = [PBPanoramaItemModel yy_modelWithDictionary:obj];
+                itemModel.PbUrl = self.panoramaModel.PbUrl;
+                itemModel.LabelName = self.panoramaModel.LabelName;
+                itemModel.pbName = self.panoramaModel.PbName;
+                [arrM addObject:itemModel];
+            }
+            self.panoramas = arrM;
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showFailed:networkModel.Msg inview:self.view];
+        }
+    }];
+}
+- (void)setupUI {
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(248, 248, 248);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 114.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBPanoramaTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.equalTo(self.view);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.panoramas.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBPanoramaTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.panoramaItemModel = self.panoramas[indexPath.row];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            [self delPanoramaWith:indexPath];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+
+    return @[deleteAction];
+}
+                                         
+- (void)delPanoramaWith:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    PBPanoramaItemModel *panoramaItemModel = self.panoramas[indexPath.row];
+    [[PBNetworkTools sharedTools] RemoveSceneWithPbGuid:panoramaItemModel.PbGuid andSceneName:[NSString stringWithFormat:@"scene_%@",panoramaItemModel.PsScenename] andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"删除失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.panoramas removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+
+
+- (void)setPanoramaModel:(PBPanoramaModel *)panoramaModel {
+    _panoramaModel = panoramaModel;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.h
new file mode 100644
index 0000000..4b777b3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBVideoViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2023/2/7.
+//  Copyright © 2023 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "PBProjectModel.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBVideoViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.m
new file mode 100644
index 0000000..4fc0c4a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBVideoViewController.m
@@ -0,0 +1,111 @@
+//
+//  PBVideoViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2023/2/7.
+//  Copyright © 2023 ProBIM. All rights reserved.
+//
+
+#import "PBVideoViewController.h"
+#import "PBWebViewController.h"
+
+@interface PBVideoViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic,strong) UITableView *tableView;
+@property (nonatomic,strong) NSArray *videoArr;
+@end
+
+static NSString *const CellID = @"CellID";
+@implementation PBVideoViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+    [self loadVideoList];
+}
+- (void)setupNav {
+    self.title = @"现场监控";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(248, 248, 248);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 50.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+//    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.view);
+    }];
+}
+- (void)loadVideoList {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetVideoWithOrganizeId:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"加载列表失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.videoArr = networkModel.Data;
+            [self.tableView reloadData];
+        } else {
+            [YJProgressHUD showMessage:@"加载列表失败" inView:self.view];
+        }
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.videoArr.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.backgroundColor = PBColor(248, 248, 248);
+    NSDictionary *dict = self.videoArr[indexPath.row];
+    cell.textLabel.text = [dict valueForKey:@"carmerName"];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.videoArr[indexPath.row];
+    NSString *url = [dict valueForKey:@"carmerSrc"];
+    NSString *title = [dict valueForKey:@"carmerName"];
+    PBWebViewController *vc = [[PBWebViewController alloc] init];
+    vc.jump_URL = url;
+    vc.jump_Title = title;
+    [self.navigationController pushViewController:vc animated:YES];
+//    PBPanoramaModel *panoramaModel = self.videoArr[indexPath.row];
+//    PBPanoramaViewController *panoramaVC = [[PBPanoramaViewController alloc] init];
+//    panoramaVC.projectModel = self.projectModel;
+//    panoramaVC.panoramaModel = panoramaModel;
+//    [self.navigationController pushViewController:panoramaVC animated:YES];
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.h
new file mode 100644
index 0000000..1afd15f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBWebViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2023/2/7.
+//  Copyright © 2023 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBWebViewController : UIViewController
+@property (nonatomic, copy) NSString *jump_URL;
+@property (nonatomic, copy) NSString *jump_Title;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.m
new file mode 100644
index 0000000..5a3658b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/ViewControllers/PBWebViewController.m
@@ -0,0 +1,91 @@
+//
+//  PBWebViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2023/2/7.
+//  Copyright © 2023 ProBIM. All rights reserved.
+//
+
+#import "PBWebViewController.h"
+#import <WebKit/WebKit.h>
+
+@interface PBWebViewController ()<WKNavigationDelegate, WKUIDelegate>
+@property (nonatomic, strong) WKWebView *wkWebView;
+@end
+
+@implementation PBWebViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    [self configNav];
+    [self.view addSubview:self.wkWebView];
+    
+    [self loadData];
+}
+- (void)loadData {
+    NSURL *url = [NSURL URLWithString:self.jump_URL];
+    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
+    [_wkWebView loadRequest:urlRequest];
+}
+
+- (WKWebView *)wkWebView {
+    if (!_wkWebView) {
+        CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
+        _wkWebView = [[WKWebView alloc] initWithFrame:frame];
+        _wkWebView.navigationDelegate = self;
+    }
+    return _wkWebView;
+}
+
+/// 页面加载完成之后调用
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
+   
+}
+/// 页面加载失败时调用
+- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error {
+
+   
+}
+
+- (void)configNav {
+    self.title = self.jump_Title;
+//    UIButton *left_Button = [[UIButton alloc] init];
+//    [left_Button setTitle:@"back" forState:UIControlStateNormal];
+//    [left_Button setTitleColor:[UIColor colorWithRed: 21/ 255.0f green: 126/ 255.0f blue: 251/ 255.0f alpha:1.0] forState:(UIControlStateNormal)];
+//    [left_Button sizeToFit];
+//    [left_Button addTarget:self action:@selector(left_BarButtonItemAction) forControlEvents:UIControlEventTouchUpInside];
+//    UIBarButtonItem *left_BarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:left_Button];
+//    self.navigationItem.leftBarButtonItem = left_BarButtonItem;
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(left_BarButtonItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:(UIBarButtonSystemItemRefresh) target:self action:@selector(right_BarButtonItemAction)];
+}
+
+- (void)left_BarButtonItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)right_BarButtonItemAction {
+    [self.wkWebView reload];
+}
+-(void)setJump_URL:(NSString *)jump_URL {
+    _jump_URL = jump_URL;
+}
+-(void)setJump_Title:(NSString *)jump_Title {
+    _jump_Title = jump_Title;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.h
new file mode 100644
index 0000000..12a231e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBPanoramaTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBPanoramaModel;
+@class PBPanoramaItemModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPanoramaTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBPanoramaModel *panoramaModel;
+@property (nonatomic, strong) PBPanoramaItemModel *panoramaItemModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.m
new file mode 100644
index 0000000..2f39fe2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBPanoramaTableViewCell.m
@@ -0,0 +1,149 @@
+//
+//  PBPanoramaTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPanoramaTableViewCell.h"
+#import "PBPanoramaModel.h"
+#import "PBPanoramaItemModel.h"
+@interface PBPanoramaTableViewCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *labelNameL;
+@property (nonatomic, weak) UILabel *creatTimeL;
+@property (nonatomic, weak) UILabel *labelTieleL;
+@property (nonatomic, weak) UIImageView *statuV;
+@end
+@implementation PBPanoramaTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = [UIColor z_colorWithR:248 G:248 B:248];
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.equalTo(self.contentView).offset(10);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.height.equalTo(@104);
+    }];
+    [bgView circleViewWithRadius:6];
+    
+    UIImageView *imageV = [[UIImageView alloc] init];
+//    imageV.contentMode = UIViewContentModeScaleAspectFill;
+    [bgView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(10);
+        make.left.equalTo(bgView).offset(10);
+        make.size.mas_equalTo(CGSizeMake(120, 84));
+    }];
+    [imageV circleViewWithRadius:6];
+    
+    UIImageView *statuV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"guanlian"]];
+    [self.contentView addSubview:statuV];
+    [statuV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV).offset(4);
+        make.right.equalTo(imageV).offset(-4);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UILabel *nameL = [UILabel z_labelWithText:@"大兴机场监管库" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:16];
+    nameL.numberOfLines = 0;
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV).offset(4);
+        make.left.equalTo(imageV.mas_right).offset(8);
+        make.right.equalTo(bgView).offset(-8);
+        make.height.equalTo(@22);
+    }];
+    
+    
+    UILabel *labelTieleL = [UILabel z_labelWithText:@"标签名称" Color:[UIColor z_colorWithR:102 G:102 B:102] isBold:NO Font:14];
+    labelTieleL.numberOfLines = 0;
+    [self.contentView addSubview:labelTieleL];
+    [labelTieleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(nameL.mas_bottom).offset(5);
+        make.left.equalTo(nameL);
+        make.width.equalTo(@60);
+        make.height.equalTo(@17);
+    }];
+    
+    UILabel *labelNameL = [UILabel z_labelWithText:@"第38期" Color:[UIColor z_colorWithR:0 G:122 B:255] isBold:NO Font:14];
+    labelNameL.numberOfLines = 0;
+    [self.contentView addSubview:labelNameL];
+    [labelNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(labelTieleL);
+        make.left.equalTo(labelTieleL.mas_right).offset(20);
+        make.height.equalTo(labelTieleL);
+        make.right.equalTo(nameL);
+    }];
+    UILabel *creatTimeL = [UILabel z_labelWithText:@"创建时间:2022-08-12" Color:[UIColor z_colorWithR:102 G:102 B:102] isBold:NO Font:14];
+    creatTimeL.numberOfLines = 0;
+    [self.contentView addSubview:creatTimeL];
+    [creatTimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(imageV).offset(-4);
+        make.left.right.equalTo(nameL);
+        make.height.equalTo(@20);
+    }];
+    
+    self.imageV = imageV;
+    self.nameL = nameL;
+    self.labelNameL = labelNameL;
+    self.creatTimeL = creatTimeL;
+    self.labelTieleL = labelTieleL;
+    self.statuV = statuV;
+}
+
+- (void)setPanoramaModel:(PBPanoramaModel *)panoramaModel {
+    _panoramaModel = panoramaModel;
+    self.statuV.hidden = YES;
+    NSString *status = @"";
+    if (panoramaModel.PqFlag == 0) {
+        status = @"(待转换)";
+    }else if (panoramaModel.PqFlag == 1){
+        status = @"(转换中)";
+    }else if (panoramaModel.PqFlag == 3){
+        status = @"(转换失败)";
+    }
+    
+    NSURL *imageUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@/Panorama%@/cover.png", PanoramaUrl, panoramaModel.PbUrl]];
+    [self.imageV sd_setImageWithURL:imageUrl placeholderImage:[UIImage imageNamed:@""]];
+    self.nameL.text = [NSString stringWithFormat:@"%@%@",panoramaModel.PbName, status];
+    self.labelNameL.text = panoramaModel.LabelName;
+    self.labelTieleL.text = @"标签名称";
+    NSRange range = [panoramaModel.PbUpdatetime rangeOfString:@"T"];
+    NSString *string = [panoramaModel.PbUpdatetime substringToIndex:range.location];
+    self.creatTimeL.text = [NSString stringWithFormat:@"创建时间:%@", string];
+    
+    
+}
+- (void)setPanoramaItemModel:(PBPanoramaItemModel *)panoramaItemModel {
+    _panoramaItemModel = panoramaItemModel;
+    NSURL *imageUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@/Panorama%@/vtour/panos/%@.tiles/thumb.jpg", PanoramaUrl, panoramaItemModel.PbUrl, panoramaItemModel.PsScenename]];
+    [self.imageV sd_setImageWithURL:imageUrl placeholderImage:[UIImage imageNamed:@""]];
+    self.nameL.text = panoramaItemModel.PchChname;
+    self.labelNameL.text = panoramaItemModel.pbName;
+    self.labelTieleL.text = @"所属图集:";
+    NSRange range = [panoramaItemModel.PsCollecteddatetime rangeOfString:@"T"];
+    NSString *string = [panoramaItemModel.PsCollecteddatetime substringToIndex:range.location];
+    self.creatTimeL.text = [NSString stringWithFormat:@"创建时间:%@", string];
+    if (panoramaItemModel.ViewId) {
+        self.statuV.hidden = NO;
+    }else {
+        self.statuV.hidden = YES;
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.h
new file mode 100644
index 0000000..1b9379d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.h
@@ -0,0 +1,18 @@
+//
+//  PBScrollModelView.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBModelsModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScrollModelView : UIView
+@property (nonatomic, strong) NSArray *modelArr;
+@property (nonatomic, copy) void (^saveBlock)(PBModelsModel *data);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.m
new file mode 100644
index 0000000..73f09ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollModelView.m
@@ -0,0 +1,70 @@
+//
+//  PBScrollModelView.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScrollModelView.h"
+#import "PBModelsModel.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBScrollModelView()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@end
+@implementation PBScrollModelView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+ 
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 40.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
+    [self addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.modelArr.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    PBModelsModel *model = self.modelArr[indexPath.row];
+    cell.textLabel.text = model.Name;
+    cell.textLabel.font = [UIFont fontWithName:@"PingFangSC-Regular" size:13];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.saveBlock) {
+        self.saveBlock(self.modelArr[indexPath.row]);
+    }
+}
+- (void)setModelArr:(NSArray *)modelArr {
+    _modelArr = modelArr;
+    [self.tableView reloadData];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.h
new file mode 100644
index 0000000..e2b1c0d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.h
@@ -0,0 +1,18 @@
+//
+//  PBScrollStageView.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScrollStageView : UIView
+@property (nonatomic, strong) NSArray *stageArr;
+@property (nonatomic, copy) void (^saveBlock)(NSDictionary *data);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.m
new file mode 100644
index 0000000..816e548
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollStageView.m
@@ -0,0 +1,70 @@
+//
+//  PBScrollStageView.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScrollStageView.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBScrollStageView()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@end
+@implementation PBScrollStageView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+ 
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 40.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
+    [self addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.stageArr.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    NSDictionary *dict = self.stageArr[indexPath.row];
+    cell.textLabel.text = [dict valueForKey:@"name"];
+    cell.textLabel.font = [UIFont fontWithName:@"PingFangSC-Regular" size:13];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.saveBlock) {
+        self.saveBlock(self.stageArr[indexPath.row]);
+    }
+}
+
+- (void)setStageArr:(NSArray *)stageArr {
+    _stageArr = stageArr;
+    [self.tableView reloadData];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.h
new file mode 100644
index 0000000..817b812
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.h
@@ -0,0 +1,18 @@
+//
+//  PBScrollVpView.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBViewPointModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScrollVpView : UIView
+@property (nonatomic, strong) NSArray *vpArr;
+@property (nonatomic, copy) void (^saveBlock)(PBViewPointModel *data);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.m
new file mode 100644
index 0000000..7583ab2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBScrollVpView.m
@@ -0,0 +1,70 @@
+//
+//  PBScrollVpView.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScrollVpView.h"
+#import "PBViewPointModel.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBScrollVpView()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong) UITableView *tableView;
+@end
+@implementation PBScrollVpView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+ 
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 40.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
+    [self addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self);
+    }];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.vpArr.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    PBViewPointModel *vpModel = self.vpArr[indexPath.row];
+    cell.textLabel.text = vpModel.Name;
+    cell.textLabel.font = [UIFont fontWithName:@"PingFangSC-Regular" size:13];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.saveBlock) {
+        self.saveBlock(self.vpArr[indexPath.row]);
+    }
+}
+- (void)setVpArr:(NSArray *)vpArr {
+    _vpArr = vpArr;
+    [self.tableView reloadData];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.h
new file mode 100644
index 0000000..b86b4ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.h
@@ -0,0 +1,22 @@
+//
+//  PBViewPointScrollView.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@class PBModelsModel;
+@class PBViewPointModel;
+//NS_ASSUME_NONNULL_BEGIN
+
+@interface PBViewPointScrollView : UIView
+@property (nonatomic, strong) NSDictionary *stageData;
+@property (nonatomic, strong) PBModelsModel *modelData;
+@property (nonatomic, strong) PBViewPointModel *vpData;
+- (instancetype)initWithFrame:(CGRect)frame withProjectModel:(PBProjectModel *)projectModel;
+@end
+
+//NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.m
new file mode 100644
index 0000000..3d4ed14
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Panorama/Views/PBViewPointScrollView.m
@@ -0,0 +1,273 @@
+//
+//  PBViewPointScrollView.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBViewPointScrollView.h"
+#import "PBScrollVpView.h"
+#import "PBScrollModelView.h"
+#import "PBScrollStageView.h"
+#import "PBProjectModel.h"
+#import "PBModelsModel.h"
+#import "PBViewPointModel.h"
+@interface PBViewPointScrollView()<UIScrollViewDelegate>
+@property (nonatomic, weak) UIView *menuView;
+@property (nonatomic, weak) UIView *menuTextView;
+@property (nonatomic, weak) UILabel *scrollLab;
+@property (nonatomic, assign) NSInteger lastIndex;
+@property (nonatomic, assign) NSInteger currentIndex;
+@property (nonatomic, strong) UIScrollView *subScrollView;
+@property (nonatomic , strong) PBScrollStageView *stageView;//阶段
+@property (nonatomic , strong) PBScrollModelView *modelView;//模型
+@property (nonatomic , strong) PBScrollVpView *vpView;//空间视点
+@property (nonatomic , strong) PBProjectModel *projectModel;
+@property (nonatomic , strong) NSArray *stageArr;
+@property (nonatomic , strong) NSArray *modelArr;
+@property (nonatomic , strong) NSArray *vpArr;
+@property (nonatomic, weak) UILabel *stageL;
+@property (nonatomic, weak) UILabel *modelL;
+@property (nonatomic, weak) UILabel *viewPointL;
+@end
+@implementation PBViewPointScrollView
+- (instancetype)initWithFrame:(CGRect)frame withProjectModel:(nonnull PBProjectModel *)projectModel {
+    if (self = [super initWithFrame:frame]) {
+        self.projectModel = projectModel;
+        [self loadProjectConfig];
+        [self setupUI];
+    }
+    return self;
+}
+- (void)loadProjectConfig {
+    [YJProgressHUD showProgress:@"" inView:self];
+    [[PBNetworkTools sharedTools] RequestGetProjectConfigWithProjectID:_projectModel.bimcomposerid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        NSArray *projectDictData = [dict valueForKey:@"ProjectDictData"];
+        NSArray *arr = [projectDictData[0] valueForKey:@"children"];
+        NSMutableArray *arr_M = arr.mutableCopy;
+        for (int i = 0; i < arr_M.count; ++i) {
+            for (int  j = 0; j < arr_M.count-1; ++j) {
+                NSInteger sort1 = [[arr_M[j] valueForKey:@"sort"] intValue];
+                NSInteger sort2 = [[arr_M[j + 1] valueForKey:@"sort"] intValue];
+                if (sort1 > sort2) {
+                    [arr_M exchangeObjectAtIndex:j withObjectAtIndex:j+1];
+                }
+            }
+        }
+        self.stageArr = arr_M.copy;
+        self.stageView.stageArr = self.stageArr;
+    }];
+}
+- (void)loadModels {
+    self.modelL.text = @"请选择";
+    self.viewPointL.text = @"请选择";
+    self.modelData = nil;
+    self.vpData = nil;
+    self.vpArr = @[];
+    self.vpView.vpArr = self.vpArr;
+    
+    [[PBNetworkTools sharedTools] RequestGetProjectStageAllModelsWithProjectID:_projectModel.bimcomposerid andPhase:[self.stageData valueForKey:@"value"] andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        str = [str stringByReplacingOccurrencesOfString:@"\\" withString:@""];
+        NSMutableString *mString = [NSMutableString stringWithString:str];
+        [mString deleteCharactersInRange:NSMakeRange(0, 1)];
+        [mString deleteCharactersInRange:NSMakeRange(mString.length-1, 1)];
+        self.modelArr = [NSArray yy_modelArrayWithClass:[PBModelsModel class] json:mString.copy];
+        self.modelView.modelArr = self.modelArr;
+    }];
+}
+
+- (void)loadVierPoint {
+    self.viewPointL.text = @"请选择";
+    self.vpData = nil;
+    [[PBNetworkTools sharedTools] RequestGetAllViewpointWithProjectId:_projectModel.bimcomposerid andModelId:_modelData.ID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSArray *arr = [NSArray yy_modelArrayWithClass:[PBViewPointModel class] json:str];
+        NSMutableArray *arrM = [[NSMutableArray alloc] init];
+        for (PBViewPointModel *viewPointModel in arr) {
+            if ([viewPointModel.Type isEqualToString:@"0"] || [viewPointModel.Type isEqualToString:@"1"]) {
+                [arrM addObject:viewPointModel];
+            }
+        }
+        self.vpArr = arrM;
+        self.vpView.vpArr = self.vpArr;
+    }];
+    
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    //创建顶部tap
+    [self createTopMenuView];
+    [self addSubview:self.subScrollView];
+    [self.subScrollView addSubview:self.stageView];//阶段
+    [self.subScrollView addSubview:self.modelView];//模型
+    [self.subScrollView addSubview:self.vpView];//空间视点
+}
+
+- (void)createTopMenuView {
+    UIView *menuView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.width, 40)];
+    [self addSubview:menuView];
+//    _menuView = menuView;
+    //商品
+    CGFloat button_W = self.width/3;
+    UIButton *stageBT = [UIButton z_textButton:@"阶段" boldFontSize:14 normalColor:PBColor(24, 24, 24)];
+    [stageBT addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
+    stageBT.frame = CGRectMake(0, 0, button_W, menuView.height);
+    stageBT.tag = 1;
+    [menuView addSubview:stageBT];
+    
+    UIButton *modelBT = [UIButton z_textButton:@"模型" boldFontSize:14 normalColor:PBColor(24, 24, 24)];
+    [modelBT addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
+    modelBT.frame = CGRectMake(button_W, 0, button_W, menuView.height);
+    modelBT.tag = 2;
+    [menuView addSubview:modelBT];
+    
+    UIButton *viewPointBT = [UIButton z_textButton:@"空间视点" boldFontSize:14 normalColor:PBColor(24, 24, 24)];
+    [viewPointBT addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
+    viewPointBT.frame = CGRectMake(button_W*2, 0, button_W, menuView.height);
+    viewPointBT.tag = 3;
+    [menuView addSubview:viewPointBT];
+
+    UILabel *line = [[UILabel alloc] initWithFrame:CGRectMake(0, menuView.height-1, self.width, 1)];
+    line.backgroundColor = PBColor(216, 216, 216);
+    [menuView addSubview:line];
+//    //4:可移动的底部滑竿
+    UILabel *scrollLab = [[UILabel alloc]init];
+    scrollLab.frame = CGRectMake(stageBT.center.x-15, menuView.height-8, 30, 2);
+    scrollLab.backgroundColor = PBColor(0, 122, 255);
+    [menuView addSubview:scrollLab];
+    self.menuView = menuView;
+    self.scrollLab = scrollLab;
+    
+    
+    UIView *menuTextView = [[UIView alloc]initWithFrame:CGRectMake(0, menuView.height, self.width, 40)];
+    [self addSubview:menuTextView];
+    
+    UILabel *stageL = [UILabel z_labelWithText:@"请选择" Color:PBColor(24, 24, 24) isBold:NO Font:13];
+    stageL.numberOfLines = 1;
+    stageL.textAlignment = NSTextAlignmentCenter;
+    stageL.frame = CGRectMake(0, 0, button_W, menuTextView.height);
+    stageL.tag = 10;
+    [menuTextView addSubview:stageL];
+    
+    UILabel *modelL = [UILabel z_labelWithText:@"请选择" Color:PBColor(24, 24, 24) isBold:NO Font:13];
+    modelL.numberOfLines = 1;
+    modelL.textAlignment = NSTextAlignmentCenter;
+    modelL.frame = CGRectMake(button_W, 0, button_W, menuTextView.height);
+    modelL.tag = 11;
+    [menuTextView addSubview:modelL];
+    
+    UILabel *viewPointL = [UILabel z_labelWithText:@"请选择" Color:PBColor(24, 24, 24) isBold:NO Font:13];
+    viewPointL.numberOfLines = 1;
+    viewPointL.textAlignment = NSTextAlignmentCenter;
+    viewPointL.frame = CGRectMake(button_W*2, 0, button_W, menuTextView.height);
+    viewPointL.tag = 12;
+    [menuTextView addSubview:viewPointL];
+
+    UILabel *line1 = [[UILabel alloc] initWithFrame:CGRectMake(0, menuTextView.height-1, self.width, 1)];
+    line1.backgroundColor = PBColor(216, 216, 216);
+    [menuTextView addSubview:line1];
+    self.menuTextView = menuTextView;
+    self.stageL = stageL;
+    self.modelL = modelL;
+    self.viewPointL = viewPointL;
+}
+#pragma mark - 控制事件
+- (void)btnClick:(UIButton *)btn {
+    NSInteger tag = btn.tag;
+    _currentIndex = tag;
+
+    [self.subScrollView setContentOffset:CGPointMake((_currentIndex-1)*self.subScrollView.width, 0) animated:YES];
+
+}
+#pragma mark - UIScrollViewDelegate
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+    CGFloat scorllOffsetW = self.subScrollView.width*2;
+    CGFloat currentOffsetX =  self.subScrollView.contentOffset.x;
+    CGFloat rate = currentOffsetX/scorllOffsetW;//速率
+    CGFloat offset_X = self.width/3 * rate*2;
+    CGRect frame = _scrollLab.frame;
+    frame.origin.x = offset_X+(self.width/3/2-15);;
+    _scrollLab.frame = frame;
+    
+}
+
+#pragma mark - 懒加载
+- (UIScrollView *)subScrollView {
+    if (_subScrollView == nil) {
+        _subScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, _menuView.height + _menuTextView.height, self.width, self.height-_menuView.height - _menuTextView.height)];
+        _subScrollView.contentSize = CGSizeMake(self.width * 3, _subScrollView.height);
+        _subScrollView.pagingEnabled = YES;
+        _subScrollView.scrollEnabled = YES;
+        _subScrollView.showsHorizontalScrollIndicator = NO;
+        _subScrollView.backgroundColor = [UIColor whiteColor];
+        _subScrollView.delegate = self;
+    }
+    return _subScrollView;
+}
+
+- (PBScrollStageView *)stageView
+{
+    if (!_stageView) {
+        _stageView = [[PBScrollStageView alloc]initWithFrame:CGRectMake(0, 0, self.width, _subScrollView.height)];
+        _stageView.saveBlock = ^(NSDictionary * _Nonnull data) {
+            _stageData = data;
+            _stageL.text = [data valueForKey:@"name"];
+            [self loadModels];
+        };
+    }
+    return _stageView;
+}
+
+- (PBScrollModelView *)modelView
+{
+    if (!_modelView) {
+        _modelView = [[PBScrollModelView alloc]initWithFrame:CGRectMake(self.width, 0, self.width, _subScrollView.height)];
+        _modelView.saveBlock = ^(PBModelsModel * _Nonnull data) {
+            _modelData = data;
+            _modelL.text = data.Name;
+            [self loadVierPoint];
+        };
+    }
+    return _modelView;
+}
+
+- (PBScrollVpView *)vpView
+{
+    if (!_vpView) {
+        _vpView = [[PBScrollVpView alloc]initWithFrame:CGRectMake(self.width*2, 0, self.width, _subScrollView.height)];
+        _vpView.saveBlock = ^(PBViewPointModel * _Nonnull data) {
+            _vpData = data;
+            _viewPointL.text = data.Name;
+        };
+    }
+    return _vpView;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.h
new file mode 100644
index 0000000..ed0e438
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.h
@@ -0,0 +1,29 @@
+//
+//  PBImageModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/9.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBImageModel : NSObject
+@property (nonatomic, copy) UIImage *image;// 材料名称
+@property (nonatomic, copy) NSString *name;// 部位
+@property (nonatomic, copy) NSString *bf_guid;
+@property (nonatomic, copy) NSString *bf_md5;
+@property (nonatomic, copy) NSString *bf_path;
+@property (nonatomic, copy) NSString *bf_filename;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ 
+ bf_guid : "c2c6279c-fb44-4d20-b501-2db2001a48cf"
+ bf_md5 : "93026b729a1091d582c37715c4f975fd"
+ bf_path : "/IssueImages/2020/4/8/c5df2555-3cd6-43cd-a238-d3d798739344.png"
+ bf_filename : "shui"
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.m
new file mode 100644
index 0000000..885923e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBImageModel.m
@@ -0,0 +1,13 @@
+//
+//  PBImageModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/9.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBImageModel.h"
+
+@implementation PBImageModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.h
new file mode 100644
index 0000000..e2b4f44
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.h
@@ -0,0 +1,33 @@
+//
+//  PBMaterialPlanModel.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2022/9/3.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBMaterialPlanModel : NSObject
+@property (nonatomic, copy) NSString *Materials_ID;
+@property (nonatomic, copy) NSString *Materials_Name; //类型
+@property (nonatomic, copy) NSString *Materials_PlanNum;  //计划数量
+@property (nonatomic, copy) NSString *Materials_Unit;  //单位
+@property (nonatomic, copy) NSString *organizeId;
+@property (nonatomic, copy) NSString *Materials_Size;
+@property (nonatomic, copy) NSString *Materials_Method;
+@property (nonatomic, copy) NSString *Materials_AddNum; // 累计
+@end
+
+NS_ASSUME_NONNULL_END
+/*
+ " Materials_ID": 1, --机械清单主键
+ "Materials_Name": "水电工",--机械名称
+ "Materials_PlanNum": 10,--计划数量
+ " Materials_Unit": "个",--单位
+ "organizeId": "8148cdcd-4771-4c28-89ce-74aeb3cbca22" –项目编码,
+ "Materials_Size": 10,--机械规格
+ " Materials_Method": "个",--产地
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.m
new file mode 100644
index 0000000..645a220
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMaterialPlanModel.m
@@ -0,0 +1,13 @@
+//
+//  PBMaterialPlanModel.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2022/9/3.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBMaterialPlanModel.h"
+
+@implementation PBMaterialPlanModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.h
new file mode 100644
index 0000000..9600b73
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.h
@@ -0,0 +1,34 @@
+//
+//  PBMechanicalPlanModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBMechanicalPlanModel : NSObject
+@property (nonatomic, copy) NSString *Machine_ID;
+@property (nonatomic, copy) NSString *Machine_Name; //类型
+@property (nonatomic, copy) NSString *Machine_PlanNum;  //计划数量
+@property (nonatomic, copy) NSString *Machine_Unit;  //单位
+@property (nonatomic, copy) NSString *organizeId;
+@property (nonatomic, copy) NSString *Machine_Size;
+@property (nonatomic, copy) NSString *Machine_Adress;
+@property (nonatomic, copy) NSString *Machine_AddNum; // 累计
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ "Machine_ID": 1, --材料清单主键
+ "Machine_Name": "水电工",--材料名称
+" Machine_PlanNum": 10,--计划数量
+ " Machine_Unit": "个",--单位
+"organizeId": "8148cdcd-4771-4c28-89ce-74aeb3cbca22" –项目编码,
+ " Machine_AddNum": 10,--累计数量
+ " Machine_Size ": 10,--材料规格
+ " Machine_Adress ": 10,--供应方式
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.m
new file mode 100644
index 0000000..1d2eb7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBMechanicalPlanModel.m
@@ -0,0 +1,13 @@
+//
+//  PBMechanicalPlanModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBMechanicalPlanModel.h"
+
+@implementation PBMechanicalPlanModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.h
new file mode 100644
index 0000000..02f166b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.h
@@ -0,0 +1,22 @@
+//
+//  PBPerPlanModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPerPlanModel : NSObject
+@property (nonatomic, copy) NSString *Mobile_UserId;
+@property (nonatomic, copy) NSString *Mobile_UserType; //类型
+@property (nonatomic, copy) NSString *Mobile_PlanNum;  //计划数量
+@property (nonatomic, copy) NSString *Mobile_Unit;  //单位
+@property (nonatomic, copy) NSString *organizeId;
+@property (nonatomic, copy) NSString *Mobile_AddNum; // 累计
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.m
new file mode 100644
index 0000000..1c9cb97
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBPerPlanModel.m
@@ -0,0 +1,13 @@
+//
+//  PBPerPlanModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPerPlanModel.h"
+
+@implementation PBPerPlanModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.h
new file mode 100644
index 0000000..52a307a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.h
@@ -0,0 +1,18 @@
+//
+//  PBSafetyModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/31.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSafetyModel : NSObject
+@property (nonatomic, copy) NSString *MobileSafe_Name;//风险
+@property (nonatomic, copy) NSString *MobileSafe_Measure; //措施
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.m
new file mode 100644
index 0000000..3d088ec
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSafetyModel.m
@@ -0,0 +1,13 @@
+//
+//  PBSafetyModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/31.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSafetyModel.h"
+
+@implementation PBSafetyModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.h
new file mode 100644
index 0000000..78cdfb1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.h
@@ -0,0 +1,37 @@
+//
+//  PBScheduleListModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScheduleListModel : NSObject
+@property (nonatomic, copy) NSString *organizeId;
+@property (nonatomic, copy) NSString *MobilePA_ID;
+@property (nonatomic, copy) NSString *MobilePA_ProjectName;
+@property (nonatomic, copy) NSString *MobilePA_ProjectID;
+@property (nonatomic, copy) NSString *MobilePA_Unittime;
+@property (nonatomic, copy) NSString *MobilePA_CreateUser;
+@property (nonatomic, copy) NSString *MobilePA_Createuserid;
+@property (nonatomic, copy) NSString *MobilePA_rate;
+@property (nonatomic, copy) NSString *MobilePA_state;
+@property (nonatomic, strong) NSArray *Image_Json;
+@property (nonatomic, copy) NSString *MobilePA_Insertime;
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ MobilePA_ID : 1
+ MobilePA_ProjectName : "基准方案"
+ MobilePA_ProjectID : "5cc0ea99-3749-4df4-9eb6-d242ab34f149"
+ MobilePA_Unittime : "2022-09-05"
+ MobilePA_CreateUser : "薛友松"
+ MobilePA_state : "待提交"
+ MobilePA_rate : ""
+
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.m
new file mode 100644
index 0000000..10e02d9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBScheduleListModel.m
@@ -0,0 +1,13 @@
+//
+//  PBScheduleListModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleListModel.h"
+
+@implementation PBScheduleListModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.h
new file mode 100644
index 0000000..36d7433
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.h
@@ -0,0 +1,80 @@
+//
+//  PBSchedulePlanModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/23.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSchedulePlanModel : NSObject
+@property (nonatomic, copy) NSString *PercentComplete;
+@property (nonatomic, copy) NSString *ParentTaskUID;
+@property (nonatomic, copy) NSString *Critical;
+@property (nonatomic, copy) NSString *FixedDate;
+@property (nonatomic, copy) NSString *Priority;
+@property (nonatomic, copy) NSString *Notes;
+@property (nonatomic, copy) NSString *Summary;
+@property (nonatomic, copy) NSString *Duration;
+@property (nonatomic, copy) NSString *ActualStart;
+@property (nonatomic, copy) NSString *Work;
+@property (nonatomic, strong) NSArray *children;
+@property (nonatomic, copy) NSString *Milestone;
+@property (nonatomic, copy) NSString *Department;
+@property (nonatomic, copy) NSString *Start;
+@property (nonatomic, copy) NSString *ActualDuration;
+@property (nonatomic, copy) NSString *ProjectUID;
+@property (nonatomic, copy) NSString *IssueId;
+@property (nonatomic, copy) NSString *ProjectID;
+@property (nonatomic, copy) NSString *Finish  ;
+@property (nonatomic, copy) NSString *ConstraintType;
+@property (nonatomic, copy) NSString *Weight;
+@property (nonatomic, copy) NSString *Name;
+@property (nonatomic, copy) NSString *Critical2;
+@property (nonatomic, copy) NSString *ID;
+@property (nonatomic, copy) NSString *WBS;
+@property (nonatomic, copy) NSString *UID;
+@property (nonatomic, copy) NSString *Manual;
+@property (nonatomic, copy) NSString *ActualFinish;
+@property (nonatomic, copy) NSString *Principal;
+@property (nonatomic, copy) NSString *IssueTypeID;
+@property (nonatomic, strong) NSArray *PredecessorLink;
+@property (nonatomic, copy) NSString *ConstraintDate;
+@property (nonatomic, copy) NSString *mobilePlan;
+@end
+
+NS_ASSUME_NONNULL_END
+/*
+ PercentComplete : 4
+ ParentTaskUID : "-1"
+ Critical : 0
+ FixedDate : 0
+ Priority : null
+ Notes : null
+ Summary : 1
+ Duration : 33
+ ActualStart : "2020-04-01T00:00:00"
+ Work : 0
+ children
+ Milestone : 0
+ Department : null
+ Start : "2020-03-27T00:00:00"
+ ActualDuration : null
+ ProjectUID : "5cc0ea99-3749-4df4-9eb6-d242ab34f149"
+ Finish : "2020-04-28T23:59:59"
+ ConstraintType : 4
+ Weight : 0
+ Name : "轨道"
+ Critical2 : 0
+ ID : 2
+ WBS : null
+ UID : "FE25E4AB-F65E-47B1-83A0-8E2E3BB0CD28"
+ Manual : 0
+ ActualFinish : "2020-04-07T00:00:00"
+ Principal : null
+ PredecessorLink
+ ConstraintDate : "2020-03-27T00:00:00"
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.m
new file mode 100644
index 0000000..219154d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSchedulePlanModel.m
@@ -0,0 +1,13 @@
+//
+//  PBSchedulePlanModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/23.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSchedulePlanModel.h"
+
+@implementation PBSchedulePlanModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.h
new file mode 100644
index 0000000..8a1f40a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.h
@@ -0,0 +1,35 @@
+//
+//  PBSiteMaterialModel.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2022/9/3.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSiteMaterialModel : NSObject
+@property (nonatomic, copy) NSString *MaterialsDetial_Name;// 人员类型名称
+@property (nonatomic, copy) NSString *MaterialsDetial_PlanNum;// 计划人数
+@property (nonatomic, copy) NSString *MaterialsDetial_AdddelNum; // 增减
+@property (nonatomic, copy) NSString *MaterialsDetial_AddNum;// 累计
+@property (nonatomic, copy) NSString *MaterialsDetial_NewNum;// 现场
+@property (nonatomic, copy) NSString *MaterialsDetial_type;// 新增的类型名称
+@end
+
+NS_ASSUME_NONNULL_END
+/*
+ "MaterialsDetial_Name": "称其为", --机械名称
+ "MaterialsDetial_PlanNum": "12",--机械计划数量
+ "MaterialsDetial_AddNum": "12", --机械累计数量
+ "MaterialsDetial_AdddelNum": "12",--机械增减数量
+ "MaterialsDetial_NewNum": "12",--机械现场数量
+ "MaterialsDetial_type": "测试",--机械类别
+ "MaterialsDetial_state": "待提交", 状态
+ "MaterialsDetial_ProjectID": "0d372441-0938-40d0-b838-7bab14ac0bf9",--进度计划编码
+ "MaterialsDetial_Unittime": "2022-8-31",--填报日期
+ "MaterialsDetial_createuser": "薛友松",--填报人
+ "organizeId": "8148cdcd-4771-4c28-89ce-74aeb3cbca22" –项目编码
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.m
new file mode 100644
index 0000000..3b1e833
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMaterialModel.m
@@ -0,0 +1,13 @@
+//
+//  PBSiteMaterialModel.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2022/9/3.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSiteMaterialModel.h"
+
+@implementation PBSiteMaterialModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.h
new file mode 100644
index 0000000..7e54f15
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.h
@@ -0,0 +1,46 @@
+//
+//  PBSiteMechanicalModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSiteMechanicalModel : NSObject
+@property (nonatomic, copy) NSString *MachineDetial_Name;// 材料名称
+@property (nonatomic, copy) NSString *MachineDetial_Parts;// 部位
+@property (nonatomic, copy) NSString *MachineDetial_Size;// 材料规格
+@property (nonatomic, copy) NSString *MachineDetial_Unit;// 材料单位
+@property (nonatomic, copy) NSString *MachineDetial_Sum;// 材料总量
+@property (nonatomic, copy) NSString *MachineDetial_Approcach;// 当日进厂量
+@property (nonatomic, copy) NSString *MachineDetial_Add; // 累计进场
+@property (nonatomic, copy) NSString *MachineDetial_Product;// 生产情况
+@property (nonatomic, copy) NSString *MachineDetial_Estimated;// 预计到场
+@property (nonatomic, copy) NSString *MachineDetial_Remark;// 备注
+@property (nonatomic, strong) NSArray *elementList;
+@property (nonatomic, copy) NSString *MachineDetialAdd;// 累计记录
+@end
+
+NS_ASSUME_NONNULL_END
+/**
+ " MachineDetial_Name ": "称其为", --材料名称
+ " MachineDetial_Parts ": "12",--部位(部位名称按照逗号分隔)
+ " MachineDetial_Size ": "12", --材料规格
+ " MachineDetial_Unit ": "12",--材料单位
+ " MachineDetial_Sum ": "12",--材料总量
+ " MachineDetial_Approcach ": "测试",--当日进厂量
+ " MachineDetial_Add ": "123", 累计进场
+ " MachineDetial_Product ": "123",生产情况
+ " MachineDetial_Estimated ": "456", 预计到场
+
+ " MachineDetial_Remark ": "待提交", 备注
+
+ " MachineDetial_ProjectID ": "0d372441-0938-40d0-b838-7bab14ac0bf9",--进度计划编码
+ " MachineDetial_Unittime ": "2022-8-31",--填报日期
+ " MachineDetial_Createuser ": "薛友松",--填报人
+ "organizeId": "8148cdcd-4771-4c28-89ce-74aeb3cbca22" –项目编码
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.m
new file mode 100644
index 0000000..8580791
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSiteMechanicalModel.m
@@ -0,0 +1,13 @@
+//
+//  PBSiteMechanicalModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSiteMechanicalModel.h"
+
+@implementation PBSiteMechanicalModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.h
new file mode 100644
index 0000000..f2c021f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.h
@@ -0,0 +1,22 @@
+//
+//  PBSitePerModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+//@class PBPerPlanModel;
+
+@interface PBSitePerModel : NSObject
+//@property (nonatomic, strong) PBPerPlanModel *planModel;
+@property (nonatomic, copy) NSString *MobileUserDetial_Name;// 人员类型名称
+@property (nonatomic, copy) NSString *MobileUserDetial_PlanNum;// 计划人数
+@property (nonatomic, copy) NSString *MobileUserDetial_AdddelNum; // 增减
+@property (nonatomic, copy) NSString *MobileUserDetial_AddNum;// 累计
+@property (nonatomic, copy) NSString *MobileUserDetial_NewNum;// 现场
+@property (nonatomic, copy) NSString *MobileUserDetial_type;// 新增的类型名称
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.m
new file mode 100644
index 0000000..0f3e4cf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSitePerModel.m
@@ -0,0 +1,13 @@
+//
+//  PBSitePerModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSitePerModel.h"
+
+@implementation PBSitePerModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.h
new file mode 100644
index 0000000..6fd6f08
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.h
@@ -0,0 +1,17 @@
+//
+//  PBSuperviseModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/1.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSuperviseModel : NSObject
+@property (nonatomic, copy) NSString *MobileSupervise_Name;//督导内容
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.m
new file mode 100644
index 0000000..0903470
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBSuperviseModel.m
@@ -0,0 +1,13 @@
+//
+//  PBSuperviseModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/1.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSuperviseModel.h"
+
+@implementation PBSuperviseModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.h
new file mode 100644
index 0000000..6afa7a7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.h
@@ -0,0 +1,51 @@
+//
+//  PBTaskScheduleModel.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/25.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+@class PBSchedulePlanModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTaskScheduleModel : NSObject
+//@property (nonatomic, strong) PBSchedulePlanModel *planModel;
+@property (nonatomic, copy) NSString *Progress_Name; //任务名称
+@property (nonatomic, copy) NSString *Progress_treeID; //任务ID
+@property (nonatomic, copy) NSString *Progress_planstarttime; //任务开始时间
+@property (nonatomic, copy) NSString *Progress_plannendtime; //任务结束时间
+@property (nonatomic, copy) NSString *Progress_state  ; //状态
+@property (nonatomic, copy) NSString *Progress_planratio; //计划完成比例
+@property (nonatomic, copy) NSString *Progress_actualratio; //今日完成比例
+@property (nonatomic, copy) NSString *Progress_MobileAddratio; //累计完成比例
+@property (nonatomic, copy) NSString *Progress_MobileTomorrowratio; //明日完成比例
+@property (nonatomic, copy) NSString *Progress_MobileReason; //滞后原因
+@property (nonatomic, copy) NSString *MobileAddratio; //记录累计
+@property (nonatomic, copy) NSString *Progress_MobileCompany;
+@property (nonatomic, copy) NSString *Progress_MobilePlan;//顺序
+
+@property (nonatomic, copy) NSString *NoProgress_Name;//非计划
+@property (nonatomic, copy) NSString *NoProgress_MobileCompany;
+@end
+
+NS_ASSUME_NONNULL_END
+
+/**
+ {
+ "Progress_Name": "基础开挖",  // 任务项
+ "Progress_planstarttime": "2014-12-1", // 计划开始时间
+ "Progress_plannendtime": "2014-12-8", //计划结束时间
+ "Progress_state": "滞后", //任务状态
+ "Progress_planratio": "20", 计划完成比例
+ "Progress_actualratio": "20",今日完成比例
+ "Progress_MobileTomorrowratio": "12",明日完成比例
+ "Progress_MobileAddratio": "12", 累计完成比例
+ "Progress_MobileImageID": "0667d1d9-7283-4076-a065-195a5266cf67,067a9afe-9ee5-447e-b38e-2b253df99d56", // 图片id
+ "Progress_ProjectID": "3695d371-6d74-42cb-bdd0-fb193591f051", // 进度计划id
+ "Progress_treeID": "72381fa7-446e-4923-9f24-6a20ce395fd6", //当前任务id
+ "Progress_createuser": "薛友松", //填报人 登录人
+ "Progress_unittime": "2022-8-26" //填报时间
+ }
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.m
new file mode 100644
index 0000000..69dd18d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Models/PBTaskScheduleModel.m
@@ -0,0 +1,13 @@
+//
+//  PBTaskScheduleModel.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/25.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBTaskScheduleModel.h"
+
+@implementation PBTaskScheduleModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.h
new file mode 100644
index 0000000..168b246
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.h
@@ -0,0 +1,19 @@
+//
+//  PBChooseOneTaskViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/26.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBChooseOneTaskViewController : UIViewController
+@property (nonatomic, strong) PBSchedulePlanModel *planModel;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.m
new file mode 100644
index 0000000..d58f895
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBChooseOneTaskViewController.m
@@ -0,0 +1,160 @@
+//
+//  PBChooseOneTaskViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/26.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBChooseOneTaskViewController.h"
+#import "PBSchedulePlanModel.h"
+#import "PBChooseTasksCell.h"
+#import "PBTaskScheduleViewController.h"
+
+static NSString *const tasksCellID = @"tasksCellID";
+@interface PBChooseOneTaskViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, weak) UIView *bottomV;
+@property (nonatomic, weak) UIButton *determineBtn;
+@end
+
+@implementation PBChooseOneTaskViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+}
+
+- (void)setupNav {
+    self.title = @"选择任务";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Doc_preview_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.bounces = NO;
+    self.tableView.rowHeight = 47;
+    self.tableView.sectionIndexColor = PBColor(97, 111, 125);
+//    UITableView *footerV = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+//    if (@available(iOS 15.0, *)) {
+//        footerV.sectionHeaderTopPadding = 0;
+//    };
+//    self.tableView.tableFooterView = footerV;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBChooseTasksCell class] forCellReuseIdentifier:tasksCellID];
+    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 56, 0);
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 0.f;
+    if (IS_IPHONE_X) {
+        bottomH = 0.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-(bottomH));
+    }];
+    
+//    UIView *bottomV = [[UIView alloc] init];
+//    bottomV.backgroundColor = [UIColor whiteColor];
+//    [self.view addSubview:bottomV];
+//    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.left.bottom.right.equalTo(self.tableView);
+//        make.height.equalTo(@54);
+//    }];
+//
+//    UIButton *determineBtn = [UIButton z_textButton:@"确定" boldFontSize:14 normalColor:[UIColor whiteColor]];
+//    [determineBtn addTarget:self action:@selector(determineBtnAction) forControlEvents:UIControlEventTouchUpInside];
+//    determineBtn.backgroundColor = PBColor(0, 122, 255);
+//    [self.view addSubview:determineBtn];
+//    [determineBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(bottomV).offset(9);
+//        make.right.equalTo(bottomV).offset(-20);
+//        make.size.mas_equalTo(CGSizeMake(89, 34));
+//    }];
+//    [determineBtn circleViewWithRadius:6];
+//    self.bottomV = bottomV;
+//    self.determineBtn = determineBtn;
+}
+- (void)determineBtnAction:(PBSchedulePlanModel *)planModel {
+    [PBNoteCenter postNotificationName:PBNoteCenterChooseTask object:planModel];
+    [self backAction];
+}
+- (void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBTaskScheduleViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+    PBSchedulePlanModel *taskInfoModel = [PBSchedulePlanModel yy_modelWithDictionary:self.dataList[indexPath.row]];
+    PBChooseTasksCell *cell = [tableView dequeueReusableCellWithIdentifier:tasksCellID forIndexPath:indexPath];
+    cell.planModel = taskInfoModel;
+    cell.saveBlock = ^(BOOL isSave) {
+        NSString *planStr = @"";
+        if (self.planModel.mobilePlan == nil || [self.planModel.mobilePlan isEqualToString: @""]){
+            planStr = taskInfoModel.Name;
+        }else {
+            planStr = [NSString stringWithFormat:@"%@-->%@",self.planModel.mobilePlan ,taskInfoModel.Name];
+        }
+        
+        taskInfoModel.mobilePlan = planStr;
+        [self determineBtnAction:taskInfoModel];
+    };
+    cell.nextBlock = ^{
+        PBChooseOneTaskViewController *vc = [[PBChooseOneTaskViewController alloc] init];
+        NSString *planStr = @"";
+        if (self.planModel.mobilePlan == nil || [self.planModel.mobilePlan isEqualToString: @""]){
+            planStr = taskInfoModel.Name;
+        }else {
+            planStr = [NSString stringWithFormat:@"%@-->%@",self.planModel.mobilePlan ,taskInfoModel.Name];
+        }
+        
+        taskInfoModel.mobilePlan = planStr;
+        vc.planModel = taskInfoModel;
+        [self.navigationController pushViewController:vc animated:YES];
+    };
+    return cell;
+}
+
+- (void)setPlanModel:(PBSchedulePlanModel *)planModel {
+    _planModel = planModel;
+    self.dataList = planModel.children;
+    [self.tableView reloadData];
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.h
new file mode 100644
index 0000000..d6a0a36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.h
@@ -0,0 +1,20 @@
+//
+//  PBPreScheduleViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/13.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBScheduleListModel;
+@class PBProjectModel;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPreScheduleViewController : UIViewController
+@property (nonatomic, strong)PBScheduleListModel *scheduleListModel;
+@property (nonatomic, strong)PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.m
new file mode 100644
index 0000000..eca2c0f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBPreScheduleViewController.m
@@ -0,0 +1,173 @@
+//
+//  PBPreScheduleViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/13.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPreScheduleViewController.h"
+#import "PBScheduleListViewController.h"
+#import "PBScheduleListModel.h"
+#import "PBProjectModel.h"
+#import <WebKit/WebKit.h>
+
+@interface PBPreScheduleViewController ()<WKUIDelegate, WKNavigationDelegate>
+@property (nonatomic, strong) WKWebView *webView;
+@end
+
+@implementation PBPreScheduleViewController
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+}
+- (void)setupNav {
+    self.title = @"预览";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+//    if ([self.scheduleListModel.MobilePA_state isEqualToString:@"待提交"] || [self.scheduleListModel.MobilePA_state isEqualToString:@"驳回待提交"]){
+//        UIBarButtonItem *publishItem = [[UIBarButtonItem alloc] initWithTitle:@"发布" style:UIBarButtonItemStylePlain target:self action:@selector(rightAction)];
+//        self.navigationItem.rightBarButtonItem = publishItem;
+//    }
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+//    CGFloat bottomH = 0.f;
+//    if ([self.scheduleListModel.MobilePA_state isEqualToString:@"待审核"]){
+//        bottomH = 64.f;
+//        if (IS_IPHONE_X) {
+//            bottomH = 64.f + IPHONE_X_BOTTOM;
+//        }
+//    }
+   
+    self.webView = [[WKWebView alloc] init];
+    self.webView.scrollView.bounces = NO;
+    self.webView.navigationDelegate = self;
+    self.webView.UIDelegate = self;
+    [self.view addSubview:self.webView];
+    self.webView.backgroundColor = [UIColor whiteColor];
+    [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.bottom.equalTo(self.view);
+//        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+//    NSString *url = [NSString stringWithFormat:@"http://newweb.biaddti.com/#/Home/ProjectBoot/ProgressReportingDaily/2799f5aa-290f-49a8-95aa-c48bb07697f9/a3fb839e-90fa-43c0-a705-fb5469a649a6/8a0f9c1c-05d7-4968-ab7e-47c434fd78c9/2022-09-07"];
+//    /#/Home/ProjectBoot/ProgressReportingDaily
+//    后面传递参数organizeId/ProjectID/CreateuserId/Unittime
+    
+    NSString *url = [NSString stringWithFormat:@"%@/#/Home/ProjectBoot/ProgressReportingDaily/%@/%@/%@/%@", WebUrl, self.projectModel.organizeid, self.scheduleListModel.MobilePA_ProjectID, self.scheduleListModel.MobilePA_Createuserid, self.scheduleListModel.MobilePA_Unittime];
+    NSLog(@"url:%@",url);
+    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
+    
+//    if ([self.scheduleListModel.MobilePA_state isEqualToString:@"待审核"]){
+//        UIButton *bohuiBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"overrule"]];
+//        [bohuiBtn addTarget:self action:@selector(bohui) forControlEvents:UIControlEventTouchUpInside];
+//        [self.view addSubview:bohuiBtn];
+//        [bohuiBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//            make.top.equalTo(self.webView.mas_bottom).offset(7);
+//            make.left.equalTo(self.view);
+//            make.height.equalTo(@48);
+//            make.width.equalTo(@140);
+//        }];
+//        UIButton *tongguoBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"pass"]];
+//        [tongguoBtn addTarget:self action:@selector(tongguo) forControlEvents:UIControlEventTouchUpInside];
+//        [self.view addSubview:tongguoBtn];
+//        [tongguoBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//            make.top.equalTo(self.webView.mas_bottom).offset(7);
+//            make.left.equalTo(bohuiBtn.mas_right);
+//            make.right.equalTo(self.view);
+//            make.height.equalTo(@48);
+//        }];
+//    }
+
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)publish {
+    
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    
+    
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+#pragma mark - WKWKNavigationDelegate Methods
+//开始加载
+- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+}
+
+//加载完成
+- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
+    [YJProgressHUD hide];
+}
+
+//加载失败
+- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
+    [YJProgressHUD showFailed:@"加载失败" inview:self.view];
+}
+
+- (void)rightAction {
+    [self updateStatus:@"待审核"];
+}
+- (void)bohui {
+    [self updateStatus:@"驳回待提交"];
+}
+- (void)tongguo {
+    [self updateStatus:@"已审核"];
+}
+- (void)updateStatus:(NSString *)status {
+    [YJProgressHUD showProgress:@"正在发布..." inView:self.view];
+    [[PBNetworkTools sharedTools] UpdateStatesWithPlanId:self.scheduleListModel.MobilePA_ProjectID andUnittime:self.scheduleListModel.MobilePA_Unittime andCreateUserId:self.scheduleListModel.MobilePA_Createuserid andStatus:status andOrganizeId:self.projectModel.organizeid AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"发布失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self backAction];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)backAction{
+    UINavigationController *navVC = self.navigationController;
+    NSMutableArray *viewControllers = [[NSMutableArray alloc] init];
+    for (UIViewController *vc in [navVC viewControllers]) {
+        [viewControllers addObject:vc];
+        if ([vc isKindOfClass:[PBScheduleListViewController class]]) {
+            break;
+         }
+    }
+    [navVC setViewControllers:viewControllers animated:YES];
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.h
new file mode 100644
index 0000000..3de4ce4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBSafetyViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+@class PBProjectModel;
+@class PBScheduleListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSafetyViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@property (nonatomic, copy) void (^AddSuccessBlock)(PBScheduleListModel *listModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.m
new file mode 100644
index 0000000..a7b637b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSafetyViewController.m
@@ -0,0 +1,315 @@
+//
+//  PBSafetyViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSafetyViewController.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBScheduleHeaderView.h"
+#import "PBSafetyTableViewCell.h"
+#import "PBSafetyModel.h"
+#import "PBEditTimeView.h"
+#import "PBScheduleListModel.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBSafetyViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;
+@property (nonatomic, strong) PBScheduleHeaderView *headerView;
+@property (nonatomic, strong) NSMutableArray *safetyArrM;
+@property (nonatomic, copy) NSString *fillDate;
+@property (nonatomic, copy) NSString *creatName;
+@property (nonatomic, copy) NSString *creatId;
+@property (nonatomic, assign) BOOL isAdd;
+@end
+
+@implementation PBSafetyViewController
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+    [self loadData];
+    [self setupNav];
+}
+
+- (void)setupNav {
+    self.title = @"质量安全";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveAction{
+    [YJProgressHUD showProgress:@"正在保存..." inView:self.view];
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (PBSafetyModel *obj in self.safetyArrM) {
+        if (obj.MobileSafe_Name == nil || obj.MobileSafe_Measure == nil) {
+            [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+            return;
+        }
+        NSDictionary *dict = @{
+            @"MobileSafe_Name": obj.MobileSafe_Name == nil? @"" : obj.MobileSafe_Name,
+            @"MobileSafe_Measure": obj.MobileSafe_Measure == nil? @"" : obj.MobileSafe_Measure,
+            @"MobileSafe_ProjectID": self.schedulePlanModel.UID == nil? @"" : self.schedulePlanModel.UID,
+            @"MobileSafe_Unittime": self.fillDate == nil? @"" : self.fillDate,
+            @"MobileSafe_Createusername": self.creatName == nil? @"" : self.creatName,
+            @"organizeId": self.projectModel.organizeid == nil? @"" : self.projectModel.organizeid
+        };
+        [arrM addObject:dict];
+    }
+   
+    [[PBNetworkTools sharedTools] AddMobileSafeJSONWithOrganizeId:self.projectModel.organizeid andMobile:arrM.copy andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            PBScheduleListModel *listModel = [[PBScheduleListModel alloc] init];
+            listModel.MobilePA_ProjectID = self.schedulePlanModel.UID;
+            listModel.MobilePA_ProjectName = self.schedulePlanModel.Name;
+            listModel.MobilePA_Unittime = self.fillDate;
+            listModel.MobilePA_CreateUser = self.creatName;
+            listModel.MobilePA_Createuserid =  self.creatId;
+            listModel.MobilePA_state = @"待提交";
+            if (self.AddSuccessBlock) {
+                self.AddSuccessBlock(listModel);
+            }
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+
+}
+- (void)loadData {
+    self.dataList = @[@{@"name": @"质量、安全风险隐患日检查情况", @"child": self.safetyArrM}];
+    
+    [[PBNetworkTools sharedTools] GetMobileSafeJSONWithUnittime:self.fillDate andCreateuserId:self.creatId andPlanID:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+//            [YJProgressHUD hide];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBSafetyModel *model = [PBSafetyModel yy_modelWithDictionary:obj];
+                [self.safetyArrM addObject:model];
+            }
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    
+//    UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
+//    [self addChildViewController:tvc];
+//    self.tableView = tvc.tableView;
+    
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.tableFooterView = [UIView new];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    [self.tableView registerClass:[PBSafetyTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    }
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+    UIButton *addTaskBtn = [[UIButton alloc] init];
+    [addTaskBtn setImage:[UIImage imageNamed:@"add_safety"] forState:UIControlStateNormal];
+    [addTaskBtn addTarget:self action:@selector(addPersonAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:addTaskBtn];
+    [addTaskBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@48);
+    }];
+    PBScheduleHeaderView *headerV = [[PBScheduleHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 132)];
+    self.headerView = headerV;
+    headerV.schedulePlanModel = self.schedulePlanModel;
+    headerV.fillDate = self.fillDate;
+    headerV.ChooseDate = ^{
+        if (self.isAdd) {
+            [self.view endEditing:YES];
+            [PBKeyWindow addSubview:self.editTimeView];
+            self.editTimeView.fillData = self.fillDate;
+            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+                if (isSelsected) {
+                    date = [date stringByReplacingOccurrencesOfString:@"年" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"月" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"日" withString:@""];
+                    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+                    [formatter setDateFormat:@"yyyy-MM-dd"];
+                    NSDate *newDate = [formatter dateFromString:date];
+                    NSString * dateStr = [formatter stringFromDate:newDate];
+                    self.fillDate = dateStr;
+                    self.headerView.fillDate = self.fillDate;
+                }
+            };
+            [self.editTimeView show];
+        }else {
+            [YJProgressHUD showMessage:@"无法修改日期" inView:self.view];
+        }
+    };
+    self.tableView.tableHeaderView = headerV;
+    
+}
+- (void)addPersonAction {
+    PBSafetyModel *safetyModel = [[PBSafetyModel alloc] init];
+    [self.safetyArrM addObject:safetyModel];
+    [self.tableView reloadData];
+}
+
+#pragma mark - Table view data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return self.dataList.count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSDictionary *item = self.dataList[section];
+    NSArray *arr = [item valueForKey:@"child"];
+    return arr.count;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 52;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    UIView *bgView = [[UIView alloc]init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    UIView *iconV = [[UIView alloc] init];
+    iconV.backgroundColor = PBColor(95, 158, 249);
+    [bgView addSubview:iconV];
+    [iconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(20);
+        make.size.mas_equalTo(CGSizeMake(6, 20));
+        make.left.equalTo(bgView);
+    }];
+    NSDictionary *dict = self.dataList[section];
+    UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"name"] Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:18];
+    [bgView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(iconV);
+        make.left.equalTo(iconV.mas_right).offset(5);
+    }];
+    return bgView;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *item = self.dataList[indexPath.section];
+    NSArray *arr = [item valueForKey:@"child"];
+    PBSafetyModel *model = arr[indexPath.row];
+    PBSafetyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.safetyModel = model;
+    cell.safetyIndex = indexPath.row + 1;
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    cell.DeleteBlock = ^{
+        [self.safetyArrM removeObjectAtIndex:indexPath.row];
+        [self.tableView reloadData];
+    };
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel{
+    _schedulePlanModel = schedulePlanModel;
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    self.fillDate = [formatter stringFromDate:[NSDate date]];
+    self.creatName = Realname;
+    self.creatId = UserID;
+    self.isAdd = true;
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    PBSchedulePlanModel *planModel = [[PBSchedulePlanModel alloc] init];
+    planModel.UID = scheduleListModel.MobilePA_ProjectID;
+    planModel.Name = scheduleListModel.MobilePA_ProjectName;
+    self.schedulePlanModel = planModel;
+    self.fillDate = scheduleListModel.MobilePA_Unittime;
+    self.creatName = scheduleListModel.MobilePA_CreateUser;
+    self.creatId = scheduleListModel.MobilePA_Createuserid;
+    self.isAdd = false;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+
+-(NSMutableArray *)safetyArrM {
+    if (_safetyArrM == nil) {
+        _safetyArrM = [[NSMutableArray alloc] init];
+    }
+    return _safetyArrM;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.h
new file mode 100644
index 0000000..6df2f9e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.h
@@ -0,0 +1,31 @@
+//
+//  PBScheduleBaseController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "PBNetworkModel.h"
+#import "PBIssueNavModel.h"
+#import "PBProjectModel.h"
+#import "PBPromptView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScheduleBaseController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) NSArray *powerArr;
+@property (nonatomic,strong) UITableView *tableView;
+@property (nonatomic,strong) NSMutableArray *issueArrM;
+@property (nonatomic, strong) NSMutableArray *dropdownMenuArrM;
+@property (nonatomic, assign) NSInteger statusSelectIndex;
+@property (nonatomic, assign) NSInteger archiveSelectIndex;
+@property (nonatomic, copy) NSString *searchText;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) UILabel *countL;
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.m
new file mode 100644
index 0000000..0293564
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleBaseController.m
@@ -0,0 +1,250 @@
+//
+//  PBScheduleBaseController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleBaseController.h"
+#import "PBScheduleTableViewCell.h"
+#import "PBScheduleListModel.h"
+#import "PBAddIssueController.h"
+#import "PBNavigationController.h"
+#import "PBRefreshGifHeader.h"
+#import "PBScheduleModuleViewController.h"
+#import "PBPreScheduleViewController.h"
+#define pageSize 20
+
+static NSString *const CellID = @"CellID";
+@interface PBScheduleBaseController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, assign) NSInteger pageIndex;
+@property (nonatomic, strong) PBRefreshGifHeader *headerView;
+
+@end
+
+@implementation PBScheduleBaseController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.view.backgroundColor = [UIColor whiteColor];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupUI];
+    [self setupRefresh];
+}
+- (void)setupUI {
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(244, 245, 246);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 112.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    [self.tableView registerClass:[PBScheduleTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(41);
+        make.left.right.bottom.equalTo(self.view);
+    }];
+    
+    [self.view addSubview:self.promptView];
+    self.promptView.hidden = YES;
+}
+- (void)setupRefresh {
+    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+        self.pageIndex = 0;
+        [self.issueArrM removeAllObjects];
+        [self loadIssueList];
+    }];
+    header.lastUpdatedTimeLabel.hidden = YES;
+    header.stateLabel.textColor = TitleColor;
+    [header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
+    [header setTitle:@"释放更新" forState:MJRefreshStatePulling];
+    [header setTitle:@"加载中..." forState:MJRefreshStateRefreshing];
+    self.tableView.mj_header = header;
+
+//    MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
+//        [self loadIssueList];
+//    }];
+//    self.tableView.mj_footer = footer;
+
+//    self.tableView.mj_header = self.headerView;
+}
+
+- (void)loadIssueList {
+    self.promptView.hidden = YES;
+    NSString *statusId = @""; NSString *archiveId = @"";
+    if (self.dropdownMenuArrM.count == 2) {
+        PBIssueNavModel *statusNavModel = self.dropdownMenuArrM[0][self.statusSelectIndex];
+        PBIssueNavModel *archiveTypeNavModel = self.dropdownMenuArrM[1][self.archiveSelectIndex];
+        statusId = statusNavModel.ItemDetailId;
+        archiveId = archiveTypeNavModel.ItemDetailId;
+    };
+
+    [[PBNetworkTools sharedTools] GetMobilePASONWithOrganizeId:self.projectModel.organizeid andMobilePA_ProjectID:archiveId andMobilePA_state:statusId AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+        if (error) {
+            [YJProgressHUD showMessage:@"加载列表失败" inView:self.view];
+            --self.pageIndex;
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            if (self.countL) {
+                self.countL.hidden = NO;
+                NSInteger count = [[networkModel.Data valueForKey:@"TotalCount"] integerValue];
+                self.countL.text = [NSString stringWithFormat:@"搜索结果(%zd)",count];
+            }
+            NSMutableArray *arrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBScheduleListModel *scheduleListModel = [PBScheduleListModel yy_modelWithDictionary:obj];
+                [arrM addObject:scheduleListModel];
+            }
+            [self.issueArrM addObjectsFromArray:arrM.copy];
+            [self.tableView reloadData];
+            if (arrM.count < pageSize) {
+                self.tableView.mj_footer.hidden = YES;
+            }else {
+                self.tableView.mj_footer.hidden = NO;
+            }
+            if (self.issueArrM.count == 0) {
+                self.promptView.hidden = YES;
+            }else {
+                self.promptView.hidden = YES;
+            }
+        }else {
+            --self.pageIndex;
+            [YJProgressHUD showMessage:@"加载列表失败" inView:self.view];
+        }
+    }];
+    
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.issueArrM.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBScheduleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.projectModel = self.projectModel;
+    cell.scheduleListModel = self.issueArrM[indexPath.row];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBScheduleListModel *model = self.issueArrM[indexPath.row];
+//    if ([model.MobilePA_state isEqualToString:@"待提交"] || [model.MobilePA_state isEqualToString:@"驳回待提交"]){
+//        PBScheduleModuleViewController *moduleVC = [[PBScheduleModuleViewController alloc] init];
+//        moduleVC.isAdd = false;
+//        moduleVC.projectModel = self.projectModel;
+//        moduleVC.scheduleListModel = model;
+//        [self.navigationController pushViewController:moduleVC animated:YES];
+//    }else {
+//        PBPreScheduleViewController *preVC = [[PBPreScheduleViewController alloc] init];
+//        preVC.projectModel = self.projectModel;
+//        preVC.scheduleListModel = model;
+//        [self.navigationController pushViewController:preVC animated:YES];
+//    }
+    
+}
+
+
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    UITableViewRowAction *shareAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"提示" message:@"您确定要删除吗?" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction  = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *determineAction  = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
+            [self delMobilePAWith:indexPath];
+        }];
+        [alertVC addAction:cancelAction];
+        [alertVC addAction:determineAction];
+        [self presentViewController:alertVC animated:YES completion:nil];
+    }];
+
+    return @[shareAction];
+}
+                                         
+- (void)delMobilePAWith:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    PBScheduleListModel *scheduleListModel = self.issueArrM[indexPath.row];
+    [[PBNetworkTools sharedTools] DelMobilePAWithPlanId:scheduleListModel.MobilePA_ProjectID andCreateuserId:scheduleListModel.MobilePA_Createuserid andUnittime:scheduleListModel.MobilePA_Unittime andOrganizeId:self.projectModel.organizeid AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"删除失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.issueArrM removeObjectAtIndex:indexPath.row];
+            [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setPowerArr:(NSArray *)powerArr {
+    _powerArr = powerArr;
+}
+
+- (NSMutableArray *)issueArrM {
+    if (_issueArrM == nil) {
+        _issueArrM = [[NSMutableArray alloc] init];
+    }
+    return _issueArrM;
+}
+- (NSMutableArray *)dropdownMenuArrM {
+    if (_dropdownMenuArrM == nil) {
+        _dropdownMenuArrM = [[NSMutableArray alloc] init];
+    }
+    return _dropdownMenuArrM;
+}
+
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] initWithFrame:self.view.bounds];
+        _promptView.imageV.image = [UIImage imageNamed:@"Issue_list_empty"];
+    }
+    return _promptView;
+}
+
+- (PBRefreshGifHeader *)headerView {
+    if(_headerView == nil) {
+        _headerView = [[PBRefreshGifHeader alloc] init];
+        __weak typeof(self) weakSelf = self;
+        [self.headerView setRefreshingBlock:^{
+            weakSelf.pageIndex = 0;
+            [weakSelf.issueArrM removeAllObjects];
+            [weakSelf loadIssueList];
+//            [weakSelf.tableView.mj_header endRefreshing];
+        }];
+    }
+    return _headerView;
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.h
new file mode 100644
index 0000000..0590a7d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBScheduleListViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleBaseController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScheduleListViewController : PBScheduleBaseController
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.m
new file mode 100644
index 0000000..b33a3b1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleListViewController.m
@@ -0,0 +1,191 @@
+//
+//  PBScheduleListViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/18.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleListViewController.h"
+#import "PBDropdownMenu.h"
+#import "PBIssueSearchController.h"
+#import "PBNavigationController.h"
+#import "PBSchedulePlanViewController.h"
+#import "PBProjectPower.h"
+#import "PBSchedulePlanModel.h"
+#define IssueModuleName @"IssueTracking"
+
+@interface PBScheduleListViewController ()<PBDropdownMenuDelegate>
+@property (nonatomic, strong) NSArray *archiveArr;
+@property (nonatomic, strong) NSArray *statusArr;
+@end
+
+@implementation PBScheduleListViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    [self.tableView.mj_header beginRefreshing];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+//    for (PBProjectPower *power in self.powerArr) {
+//        if ([power.Bm_EnCode isEqualToString:IssueModuleName]) {
+//            if ([power.checkstate isEqualToString:@"1"]) {
+//                //有权限
+//                self.promptView.hidden = YES;
+                [self loadTypeAndStatus];
+                [self.tableView.mj_header beginRefreshing];
+//                for (NSDictionary *obj in power.Bmbs) {
+//                    if ([[obj valueForKey:@"Bmb_FullName"] isEqualToString:@"新增问题"]) {
+//                        if ([[obj valueForKey:@"checkstate"] isEqualToString:@"1"]) {
+//                            self.navigationItem.rightBarButtonItem.enabled = YES;
+//                        }
+//                    }
+//                }
+//                return;
+//            }else {
+//                //无权限
+//                self.promptView.textL.text = @"暂无权限";
+//                self.promptView.hidden = NO;
+//                return;
+//            }
+//        }
+//    }
+//    //无权限
+//    self.promptView.textL.text = @"暂无权限";
+//    self.promptView.hidden = NO;
+}
+#pragma mark - PBDropdownMenuDelegate
+- (void)dropdownMenu:(UIButton *)clickBtn selectedCellNumber:(NSInteger)number {
+    NSInteger index = clickBtn.tag -100;
+    switch (index) {
+        case 0:
+            self.statusSelectIndex = number;
+            [self.tableView.mj_header beginRefreshing];
+            break;
+        case 1:
+            self.archiveSelectIndex = number;
+            [self.tableView.mj_header beginRefreshing];
+            break;
+        default:
+            break;
+    }
+}
+
+- (void)loadTypeAndStatus {
+    [[PBNetworkTools sharedTools] GetSchedualTreeWithOrganizeId:self.projectModel.bimcomposerid andUid:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            NSMutableArray *planArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBSchedulePlanModel *model = [PBSchedulePlanModel yy_modelWithDictionary:obj];
+                PBIssueNavModel *navModel = [[PBIssueNavModel alloc] init];
+                navModel.ItemName = model.Name;
+                navModel.ItemDetailId = model.UID;
+                [planArrM addObject:navModel];
+            }
+            PBIssueNavModel *typeNavModel = [[PBIssueNavModel alloc] init];
+            typeNavModel.ItemDetailId = @"";
+            typeNavModel.ItemName = @"全部计划";
+            [planArrM insertObject:typeNavModel atIndex:0];
+            self.archiveArr = planArrM.copy;
+//            [self.dropdownMenuArrM addObject:self.statusArr];
+            [self.dropdownMenuArrM addObject:self.archiveArr];
+            [self setupDropdownMenuView];
+            [self.tableView.mj_header beginRefreshing];
+
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+  
+}
+- (void)setupDropdownMenuView {
+    float dropdownMenuW = MainScreenWidth / self.dropdownMenuArrM.count;
+    PBDropdownMenu *dropdownMenu = [[PBDropdownMenu alloc] initWithFrame:CGRectMake(0, 0, self.dropdownMenuArrM.count * dropdownMenuW, 40) andArr:self.dropdownMenuArrM];
+    dropdownMenu.delegate = self;
+    [self.view addSubview:dropdownMenu];
+}
+
+- (void)setupNav {
+    self.title = self.projectModel.fullname;
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *addIssueItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"] style:UIBarButtonItemStylePlain target:self action:@selector(addSchedule)];
+    self.navigationItem.rightBarButtonItem = addIssueItem;
+}
+- (void)addSchedule {
+    PBSchedulePlanViewController *schedulePlanVC = [[PBSchedulePlanViewController alloc] init];
+    schedulePlanVC.projectModel = self.projectModel;
+    schedulePlanVC.SaveSuccessBlock = ^{
+        [self.tableView.mj_header beginRefreshing];
+    };
+    [self.navigationController pushViewController:schedulePlanVC animated:YES];
+}
+- (void)backItemAction {
+//    [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (NSArray *)archiveArr {
+    if (_archiveArr == nil) {
+        PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+        issueNavModel.ItemDetailId = @"";
+        issueNavModel.ItemName = @"计划";
+        _archiveArr = @[issueNavModel];
+    }
+    return _archiveArr;
+}
+- (NSArray *)statusArr {
+    if (_statusArr == nil) {
+        PBIssueNavModel *issueNavModel = [[PBIssueNavModel alloc] init];
+        issueNavModel.ItemDetailId = @"";
+        issueNavModel.ItemName = @"全部状态";
+        
+        PBIssueNavModel *issueNavModel1 = [[PBIssueNavModel alloc] init];
+        issueNavModel1.ItemDetailId = @"待提交";
+        issueNavModel1.ItemName = @"待提交";
+        
+        PBIssueNavModel *issueNavModel2 = [[PBIssueNavModel alloc] init];
+        issueNavModel2.ItemDetailId = @"待审核";
+        issueNavModel2.ItemName = @"待审核";
+        
+        PBIssueNavModel *issueNavModel3 = [[PBIssueNavModel alloc] init];
+        issueNavModel3.ItemDetailId = @"驳回待提交";
+        issueNavModel3.ItemName = @"驳回待提交";
+        
+        PBIssueNavModel *issueNavModel4 = [[PBIssueNavModel alloc] init];
+        issueNavModel4.ItemDetailId = @"已审核";
+        issueNavModel4.ItemName = @"已审核";
+
+        _statusArr = @[issueNavModel, issueNavModel1, issueNavModel2, issueNavModel3, issueNavModel4];
+    }
+    return _statusArr;
+}
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+    // Dispose of any resources that can be recreated.
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.h
new file mode 100644
index 0000000..ccac5d5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBScheduleModuleViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/23.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+@class PBProjectModel;
+@class PBScheduleListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScheduleModuleViewController : UIViewController
+@property (nonatomic, assign) BOOL isAdd;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.m
new file mode 100644
index 0000000..1cfa710
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBScheduleModuleViewController.m
@@ -0,0 +1,283 @@
+//
+//  PBScheduleModuleViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/23.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleModuleViewController.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBModuleTableViewCell.h"
+#import "PBTaskScheduleViewController.h"
+#import "PBSitePerViewController.h"
+#import "PBSiteMechanicalViewController.h"
+#import "PBSiteMaterialViewController.h"
+#import "PBSafetyViewController.h"
+#import "PBSuperviseViewController.h"
+#import "PBScheduleListModel.h"
+#import "PBPreScheduleViewController.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBScheduleModuleViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSDictionary *completeState;
+@property (nonatomic, weak) UIButton *previewBtn;
+@end
+
+@implementation PBScheduleModuleViewController
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.completeState = @{
+        @"Progress_MobileState": @"未提交",
+        @"MobileUserDetial_state": @"未提交",
+        @"MaterialsDetial_state": @"未提交",
+        @"MachineDetial_State": @"未提交",
+        @"MobileSafe_state": @"未提交",
+        @"MobileSupervise_state": @"未提交"
+    };
+    if (self.isAdd) {
+        [self loadData];
+    }else {
+        [self loadData];
+        [self loadStatus];
+    }
+    [self setupUI];
+    [self setupNav];
+}
+- (void)setupNav {
+    self.title = @"模块";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)loadData {
+    self.dataList = @[ @{@"key": @"schedule", @"icon": @"schedule", @"name": @"任务进度", @"completeKey": @"Progress_MobileState", @"complete": @"未提交"},
+//                       @{@"key": @"personnel", @"icon": @"personnel", @"name": @"现场人员", @"completeKey": @"MobileUserDetial_state", @"complete": @"未提交"},
+//                       @{@"key": @"mechanical", @"icon": @"mechanical", @"name": @"现场机械", @"completeKey": @"MaterialsDetial_state", @"complete": @"未提交"},
+//                       @{@"key": @"Material", @"icon": @"Material", @"name": @"现场材料", @"completeKey": @"MachineDetial_State", @"complete": @"未提交"},
+//                       @{@"key": @"safety", @"icon": @"safety", @"name": @"质量安全", @"completeKey": @"MobileSafe_state", @"complete": @"未提交"},
+//                       @{@"key": @"supervise", @"icon": @"supervise", @"name": @"督导会", @"completeKey": @"MobileSupervise_state", @"complete": @"未提交"},
+                     ];
+}
+- (void)loadStatus {
+    [[PBNetworkTools sharedTools] GetSearchstateWithPlanId:self.scheduleListModel.MobilePA_ProjectID andUnittime:self.scheduleListModel.MobilePA_Unittime andCreateuserid:self.scheduleListModel.MobilePA_Createuserid AndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            self.completeState = networkModel.Data;
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+            
+    }];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor z_colorWithR:243 G:243 B:244];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(243, 243, 244);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 88.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBModuleTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+//    UIButton *previewBtn = [[UIButton alloc] init];
+//    [previewBtn setImage:[UIImage imageNamed:@"preview_dis"] forState:UIControlStateDisabled];
+//    [previewBtn setImage:[UIImage imageNamed:@"preview"] forState:UIControlStateNormal];
+//    [previewBtn addTarget:self action:@selector(previewAction) forControlEvents:UIControlEventTouchUpInside];
+//    [self.view addSubview:previewBtn];
+//    [previewBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+//        make.left.equalTo(self.view).offset(10);
+//        make.right.equalTo(self.view).offset(-10);
+//        make.height.equalTo(@48);
+//    }];
+//    if (self.isAdd) {
+//        previewBtn.enabled = NO;
+//    }else {
+//        previewBtn.enabled = YES;
+//    }
+//    self.previewBtn = previewBtn;
+}
+- (void)previewAction {
+    PBPreScheduleViewController * preVC = [[PBPreScheduleViewController alloc] init];
+    preVC.projectModel = self.projectModel;
+    preVC.scheduleListModel = self.scheduleListModel;
+    [self.navigationController pushViewController:preVC animated:YES];
+}
+#pragma mark - Table view data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBModuleTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    NSDictionary *dict = self.dataList[indexPath.row];
+    NSMutableDictionary *dictM = dict.mutableCopy;
+    NSString *iscomplete = [self.completeState valueForKey:[dict valueForKey:@"completeKey"]];
+    [dictM setValue:iscomplete forKey:@"complete"];
+    cell.dict = dictM.copy;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.dataList[indexPath.row];
+    NSString *type = [dict valueForKey:@"key"];
+    if ([type isEqualToString:@"schedule"]) { // 任务进度
+        PBTaskScheduleViewController *moduleVC = [[PBTaskScheduleViewController alloc] init];
+        moduleVC.projectModel = self.projectModel;
+        if (self.isAdd) {
+            moduleVC.schedulePlanModel = self.schedulePlanModel;
+        }else {
+            moduleVC.scheduleListModel = self.scheduleListModel;
+        }
+        moduleVC.AddSuccessBlock = ^(PBScheduleListModel * _Nonnull listModel) {
+            if (self.isAdd) {
+                self.isAdd = false;
+                self.scheduleListModel = listModel;
+//                self.previewBtn.enabled = YES;
+            }
+            [self loadStatus];
+        };
+        [self.navigationController pushViewController:moduleVC animated:YES];
+    } else if ([type isEqualToString:@"personnel"]) { // 现场人员
+        PBSitePerViewController *moduleVC = [[PBSitePerViewController alloc] init];
+        moduleVC.projectModel = self.projectModel;
+        if (self.isAdd) {
+            moduleVC.schedulePlanModel = self.schedulePlanModel;
+        }else {
+            moduleVC.scheduleListModel = self.scheduleListModel;
+        }
+//        moduleVC.AddSuccessBlock = ^(PBScheduleListModel * _Nonnull listModel) {
+//            if (self.isAdd) {
+//                self.isAdd = false;
+//                self.scheduleListModel = listModel;
+//                self.previewBtn.enabled = YES;
+//            }
+//            [self loadStatus];
+//        };
+        [self.navigationController pushViewController:moduleVC animated:YES];
+    } else if ([type isEqualToString:@"mechanical"]) { // 现场机械
+        PBSiteMechanicalViewController *moduleVC = [[PBSiteMechanicalViewController alloc] init];
+        moduleVC.projectModel = self.projectModel;
+        if (self.isAdd) {
+            moduleVC.schedulePlanModel = self.schedulePlanModel;
+        }else {
+            moduleVC.scheduleListModel = self.scheduleListModel;
+        }
+        moduleVC.AddSuccessBlock = ^(PBScheduleListModel * _Nonnull listModel) {
+            if (self.isAdd) {
+                self.isAdd = false;
+                self.scheduleListModel = listModel;
+//                self.previewBtn.enabled = YES;
+            }
+            [self loadStatus];
+        };
+        [self.navigationController pushViewController:moduleVC animated:YES];
+    } else if ([type isEqualToString:@"Material"]) { // 现场材料
+        PBSiteMaterialViewController *moduleVC = [[PBSiteMaterialViewController alloc] init];
+        moduleVC.projectModel = self.projectModel;
+        if (self.isAdd) {
+            moduleVC.schedulePlanModel = self.schedulePlanModel;
+        }else {
+            moduleVC.scheduleListModel = self.scheduleListModel;
+        }
+        moduleVC.AddSuccessBlock = ^(PBScheduleListModel * _Nonnull listModel) {
+            if (self.isAdd) {
+                self.isAdd = false;
+                self.scheduleListModel = listModel;
+//                self.previewBtn.enabled = YES;
+            }
+            [self loadStatus];
+        };
+        [self.navigationController pushViewController:moduleVC animated:YES];
+    } else if ([type isEqualToString:@"safety"]) { // 质量安全
+        PBSafetyViewController *moduleVC = [[PBSafetyViewController alloc] init];
+        moduleVC.projectModel = self.projectModel;
+        if (self.isAdd) {
+            moduleVC.schedulePlanModel = self.schedulePlanModel;
+        }else {
+            moduleVC.scheduleListModel = self.scheduleListModel;
+        }
+        moduleVC.AddSuccessBlock = ^(PBScheduleListModel * _Nonnull listModel) {
+            if (self.isAdd) {
+                self.isAdd = false;
+                self.scheduleListModel = listModel;
+//                self.previewBtn.enabled = YES;
+            }
+            [self loadStatus];
+        };
+        [self.navigationController pushViewController:moduleVC animated:YES];
+    } else if ([type isEqualToString:@"supervise"]) { // 督导会
+        PBSuperviseViewController *moduleVC = [[PBSuperviseViewController alloc] init];
+        moduleVC.projectModel = self.projectModel;
+        if (self.isAdd) {
+            moduleVC.schedulePlanModel = self.schedulePlanModel;
+        }else {
+            moduleVC.scheduleListModel = self.scheduleListModel;
+        }
+        moduleVC.AddSuccessBlock = ^(PBScheduleListModel * _Nonnull listModel) {
+            if (self.isAdd) {
+                self.isAdd = false;
+                self.scheduleListModel = listModel;
+//                self.previewBtn.enabled = YES;
+            }
+            [self loadStatus];
+        };
+        [self.navigationController pushViewController:moduleVC animated:YES];
+    }
+}
+- (void)setScheduleModel:(PBSchedulePlanModel *)schedulePlanModel {
+    _schedulePlanModel = schedulePlanModel;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+}
+- (void)setIsAdd:(BOOL)isAdd {
+    _isAdd = isAdd;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.h
new file mode 100644
index 0000000..c4e787f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.h
@@ -0,0 +1,18 @@
+//
+//  PBSchedulePlanViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSchedulePlanViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, copy) void (^SaveSuccessBlock)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.m
new file mode 100644
index 0000000..09373dc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSchedulePlanViewController.m
@@ -0,0 +1,122 @@
+//
+//  PBSchedulePlanViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSchedulePlanViewController.h"
+#import "PBSchedulePlanTableViewCell.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBScheduleModuleViewController.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBSchedulePlanViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) NSMutableArray *dataListM;
+@property (nonatomic, strong) UITableView *tableView;
+@end
+
+@implementation PBSchedulePlanViewController
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+    [self loadData];
+    [self setupNav];
+}
+- (void)setupNav {
+    self.title = @"选择一个进度计划";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"取消";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)loadData {
+    // 加载进度计划列表
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] GetSchedualTreeWithOrganizeId:self.projectModel.bimcomposerid andUid:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBSchedulePlanModel *model = [PBSchedulePlanModel yy_modelWithDictionary:obj];
+                [self.dataListM addObject:model];
+            }
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor z_colorWithR:243 G:243 B:244];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.backgroundColor = PBColor(243, 243, 244);
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.rowHeight = 72.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.tableView registerClass:[PBSchedulePlanTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+    }];
+}
+#pragma mark - Table view data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataListM.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBSchedulePlanTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.planModel = self.dataListM[indexPath.row];
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBSchedulePlanModel *planModel = self.dataListM[indexPath.row];
+    PBScheduleModuleViewController *moduleVC = [[PBScheduleModuleViewController alloc] init];
+    moduleVC.isAdd = YES;
+    moduleVC.schedulePlanModel = planModel;
+    moduleVC.projectModel = self.projectModel;
+    [self.navigationController pushViewController:moduleVC animated:YES];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (NSMutableArray *)dataListM {
+    if (_dataListM ==  nil) {
+        _dataListM = [[NSMutableArray alloc] init];
+    }
+    return _dataListM;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.h
new file mode 100644
index 0000000..5a9392e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBSiteMaterialViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+@class PBProjectModel;
+@class PBScheduleListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSiteMaterialViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@property (nonatomic, copy) void (^AddSuccessBlock)(PBScheduleListModel *listModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.m
new file mode 100644
index 0000000..882a4e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMaterialViewController.m
@@ -0,0 +1,459 @@
+//
+//  PBSiteMaterialViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSiteMaterialViewController.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBScheduleHeaderView.h"
+#import "PBMateralTableViewCell.h"
+#import "PBMechanicalPlanModel.h"
+#import "PBSiteMechanicalModel.h"
+#import "PBEditTimeView.h"
+#import "PBChooseType.h"
+#import "PBArtifactsViewController.h"
+#import "PBArtifactsInfoModel.h"
+#import "PBScheduleListModel.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBSiteMaterialViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSArray *typeDataList;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;
+@property (nonatomic, strong) PBChooseType *chooseTypeView;
+@property (nonatomic, strong) PBScheduleHeaderView *headerView;
+@property (nonatomic, strong) NSMutableArray *siteMaterialArrM;
+@property (nonatomic, strong) NSIndexPath *currentIndexPath;
+@property (nonatomic, copy) NSString *fillDate;
+@property (nonatomic, copy) NSString *creatName;
+@property (nonatomic, copy) NSString *creatId;
+@property (nonatomic, assign) BOOL isAdd;
+@end
+
+@implementation PBSiteMaterialViewController
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(updateAddArtifacts:) name:PBNoteCenterUpdateArtifacts object:nil];
+    [self setupUI];
+    [self loadUserTypeWithPlanID:@"" andUserType:@"" andIndexPath:nil andModel:nil];
+    [self loadData];
+    [self setupNav];
+}
+- (void)updateAddArtifacts:(NSNotification *)noti {
+    PBSiteMechanicalModel *siteMechanicalModel = self.siteMaterialArrM[self.currentIndexPath.row];
+    siteMechanicalModel.elementList = noti.object;
+    [self.tableView reloadRowsAtIndexPaths:@[self.currentIndexPath] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (void)setupNav {
+    self.title = @"现场材料";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+- (void)backItemAction {
+    [PBNoteCenter removeObserver:self];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveAction{
+    [YJProgressHUD showProgress:@"正在保存..." inView:self.view];
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (PBSiteMechanicalModel *obj in self.siteMaterialArrM) {
+//        if (obj.MobileSafe_Name == nil || obj.MobileSafe_Measure == nil) {
+//            [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+//            return;
+//        }
+        NSMutableArray *elementArrM = [[NSMutableArray alloc] init];
+        for (PBArtifactsInfoModel *model in obj.elementList) {
+            NSDictionary *elementDict =  @{
+                @"bhaselerel" : model.bhaselerel == nil? @"" : model.bhaselerel,
+                @"relelejson" : model.relelejson == nil? @"" : model.relelejson,
+                @"bm_guid" : model.bm_guid == nil? @"" : model.bm_guid,
+                @"bm_materialname" : model.bm_materialname == nil? @"" : model.bm_materialname,
+                @"bm_materialcode" : model.bm_materialcode == nil? @"" : model.bm_materialcode,
+                @"bm_materialmodel" : model.bm_materialmodel == nil? @"" : model.bm_materialmodel,
+                @"bm_materialcount" : model.bm_materialcount == nil? @"" : model.bm_materialcount,
+                @"bm_materialunit" : model.bm_materialunit == nil? @"" : model.bm_materialunit,
+                @"bm_materialfac" : model.bm_materialfac == nil? @"" : model.bm_materialfac,
+                @"bm_planarrtime" : model.bm_planarrtime == nil? @"" : model.bm_planarrtime,
+                @"bc_guid_materialtype" : model.bc_guid_materialtype == nil? @"" : model.bc_guid_materialtype,
+                @"bc_guid_materialstatus" : model.bc_guid_materialstatus == nil? @"" : model.bc_guid_materialstatus,
+                @"bm_extjson" : model.bm_extjson == nil? @"" : model.bm_extjson
+            };
+            [elementArrM addObject:elementDict];
+        }
+        NSString *jsonStr = [NSString arrConvertToJson:elementArrM.copy];
+        NSDictionary *dict = @{
+            @"MachineDetial_Name": obj.MachineDetial_Name == nil? @"" : obj.MachineDetial_Name, //材料名称
+            @"MachineDetial_Parts": jsonStr == nil? @"" : jsonStr,//部位(json)
+            @"MachineDetial_Size": obj.MachineDetial_Size == nil? @"" : obj.MachineDetial_Size, //材料规格
+            @"MachineDetial_Unit": obj.MachineDetial_Unit == nil? @"" : obj.MachineDetial_Unit,//材料单位
+            @"MachineDetial_Sum": obj.MachineDetial_Sum == nil? @"" : obj.MachineDetial_Sum,//材料总量
+            @"MachineDetial_Approcach": obj.MachineDetial_Approcach == nil? @"" : obj.MachineDetial_Approcach,//当日进厂量
+            @"MachineDetial_Add": obj.MachineDetial_Add == nil? @"" : obj.MachineDetial_Add, //累计进场
+            @"MachineDetial_Product": obj.MachineDetial_Product == nil? @"" : obj.MachineDetial_Product,//生产情况
+            @"MachineDetial_Estimated": obj.MachineDetial_Estimated == nil? @"" : obj.MachineDetial_Estimated, //预计到场
+            @"MachineDetial_Remark": obj.MachineDetial_Remark == nil? @"" : obj.MachineDetial_Remark, //备注
+
+            @"MachineDetial_ProjectID": self.schedulePlanModel.UID == nil? @"" : self.schedulePlanModel.UID,//进度计划编码
+            @"MachineDetial_Unittime": self.fillDate == nil? @"" : self.fillDate,//填报日期
+            @"MachineDetial_Createuser": self.creatName == nil? @"" : self.creatName,//填报人
+            @"organizeId": self.projectModel.organizeid == nil? @"" : self.projectModel.organizeid //项目编码
+        };
+        [arrM addObject:dict];
+    }
+    
+    [[PBNetworkTools sharedTools] AddMachineJSONWithOrganizeId:self.projectModel.organizeid andMobile:arrM.copy andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            PBScheduleListModel *listModel = [[PBScheduleListModel alloc] init];
+            listModel.MobilePA_ProjectID = self.schedulePlanModel.UID;
+            listModel.MobilePA_ProjectName = self.schedulePlanModel.Name;
+            listModel.MobilePA_Unittime = self.fillDate;
+            listModel.MobilePA_CreateUser = self.creatName;
+            listModel.MobilePA_Createuserid =  self.creatId;
+            listModel.MobilePA_state = @"待提交";
+            if (self.AddSuccessBlock) {
+                self.AddSuccessBlock(listModel);
+            }
+            [PBNoteCenter removeObserver:self];
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)loadUserTypeWithPlanID:(NSString *)planId andUserType:(NSString *)type andIndexPath:(NSIndexPath *) indexPath andModel:(PBSiteMechanicalModel *)mechanicalModel {
+    [[PBNetworkTools sharedTools] GetMachineWithOrganizeId:self.projectModel.organizeid andMobileUserDetial_ProjectID:planId andMobile_UserType:type andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBMechanicalPlanModel *model = [PBMechanicalPlanModel yy_modelWithDictionary:obj];
+                [typeArrM addObject:model];
+            }
+            if (indexPath == nil){
+                self.typeDataList = typeArrM.copy;
+            }else {
+                if (typeArrM.count > 0){
+                    PBMechanicalPlanModel *typeModel = typeArrM[0];
+                    mechanicalModel.MachineDetial_Name = typeModel.Machine_Name; //材料名称
+                    mechanicalModel.MachineDetial_Size = typeModel.Machine_Size; //材料规格
+                    mechanicalModel.MachineDetial_Unit = typeModel.Machine_Unit; //材料单位
+                    mechanicalModel.MachineDetial_Sum =  typeModel.Machine_PlanNum; //材料总量
+                    mechanicalModel.MachineDetial_Add =  typeModel.Machine_AddNum; //累计进场
+                    mechanicalModel.MachineDetialAdd =  typeModel.Machine_AddNum; //累计记录
+                    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+                }
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)loadData {
+    self.dataList = @[@{@"name": @"材料进场情况", @"child": self.siteMaterialArrM}];
+    if(self.isAdd) {
+        [self.tableView reloadData];
+    }else {
+        [[PBNetworkTools sharedTools] GetMachineJSONWithUnittime:self.fillDate andCreateuserId:self.creatId andPlanID:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+    //            [YJProgressHUD hide];
+                for (NSDictionary *obj in networkModel.Data) {
+                    PBSiteMechanicalModel *model = [PBSiteMechanicalModel yy_modelWithDictionary:obj];
+                    model.MachineDetialAdd = model.MachineDetial_Add;
+                    NSArray *elementList = [NSString convertTodictionaryOrArr:model.MachineDetial_Parts];
+                    NSMutableArray *modelArr = [[NSMutableArray alloc] init];
+                    for (NSDictionary *ele in elementList) {
+                        PBArtifactsInfoModel *artifactsInfoModel = [PBArtifactsInfoModel yy_modelWithDictionary:ele];
+                        [modelArr addObject:artifactsInfoModel];
+                    }
+                    model.elementList = modelArr.copy;
+                    [self.siteMaterialArrM addObject:model];
+                }
+                [self.tableView reloadData];
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+    }
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    
+//    UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
+//    [self addChildViewController:tvc];
+//    self.tableView = tvc.tableView;
+    
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.tableFooterView = [UIView new];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    [self.tableView registerClass:[PBMateralTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    }
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+    UIButton *addTaskBtn = [[UIButton alloc] init];
+    [addTaskBtn setImage:[UIImage imageNamed:@"add_material"] forState:UIControlStateNormal];
+    [addTaskBtn addTarget:self action:@selector(addPersonAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:addTaskBtn];
+    [addTaskBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@48);
+    }];
+    PBScheduleHeaderView *headerV = [[PBScheduleHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 132)];
+    self.headerView = headerV;
+    headerV.schedulePlanModel = self.schedulePlanModel;
+    headerV.fillDate = self.fillDate;
+    headerV.ChooseDate = ^{
+        if (self.isAdd) {
+            [self.view endEditing:YES];
+            [PBKeyWindow addSubview:self.editTimeView];
+            self.editTimeView.fillData = self.fillDate;
+            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+                if (isSelsected) {
+                    date = [date stringByReplacingOccurrencesOfString:@"年" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"月" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"日" withString:@""];
+                    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+                    [formatter setDateFormat:@"yyyy-MM-dd"];
+                    NSDate *newDate = [formatter dateFromString:date];
+                    NSString * dateStr = [formatter stringFromDate:newDate];
+                    self.fillDate = dateStr;
+                    self.headerView.fillDate = self.fillDate;
+                }
+            };
+            [self.editTimeView show];
+        }else {
+            [YJProgressHUD showMessage:@"无法修改日期" inView:self.view];
+        }
+    };
+    self.tableView.tableHeaderView = headerV;
+    
+}
+- (void)addPersonAction {
+    PBSiteMechanicalModel *sitePerModel = [[PBSiteMechanicalModel alloc] init];
+    [self.siteMaterialArrM addObject:sitePerModel];
+    [self.tableView reloadData];
+}
+
+
+#pragma mark - Table view data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return self.dataList.count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSDictionary *item = self.dataList[section];
+    NSArray *arr = [item valueForKey:@"child"];
+    return arr.count;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 52;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    UIView *bgView = [[UIView alloc]init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    UIView *iconV = [[UIView alloc] init];
+    iconV.backgroundColor = PBColor(95, 158, 249);
+    [bgView addSubview:iconV];
+    [iconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(20);
+        make.size.mas_equalTo(CGSizeMake(6, 20));
+        make.left.equalTo(bgView);
+    }];
+    NSDictionary *dict = self.dataList[section];
+    UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"name"] Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:18];
+    [bgView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(iconV);
+        make.left.equalTo(iconV.mas_right).offset(5);
+    }];
+    return bgView;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *item = self.dataList[indexPath.section];
+    NSArray *arr = [item valueForKey:@"child"];
+    PBSiteMechanicalModel *model = arr[indexPath.row];
+    PBMateralTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.siteMechanicalModel = model;
+    cell.materialIndex = indexPath.row + 1;
+    cell.ChooseTypeBlock = ^{
+        [self.view endEditing:YES];
+        [PBKeyWindow addSubview:self.chooseTypeView];
+        self.chooseTypeView.siteMechanicalModel = model;
+        self.chooseTypeView.dateList = self.typeDataList;
+        self.chooseTypeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSInteger index){
+            if (isSelsected) {
+                PBMechanicalPlanModel *typeModel = self.typeDataList[index];
+                [self loadUserTypeWithPlanID:self.schedulePlanModel.UID andUserType:typeModel.Machine_Name andIndexPath:indexPath andModel:model];
+            }
+        };
+        [self.chooseTypeView show];
+    };
+    cell.AddElementBlock = ^{
+        self.currentIndexPath = indexPath;
+        [self.view endEditing:YES];
+        PBArtifactsViewController *artifactsVC = [[PBArtifactsViewController alloc] init];
+        artifactsVC.siteMechanicalModel = model;
+        artifactsVC.projectModel = self.projectModel;
+        artifactsVC.selectList = model.elementList.mutableCopy;
+        [self.navigationController pushViewController:artifactsVC animated:YES];
+    };
+    cell.DeleteElementBlock = ^(NSArray * _Nonnull elements) {
+        model.elementList = elements;
+        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    };
+    cell.ChooseTimeBlock = ^{
+        [self.view endEditing:YES];
+        [PBKeyWindow addSubview:self.editTimeView];
+        self.editTimeView.fillData = self.fillDate;
+        self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+            if (isSelsected) {
+                date = [date stringByReplacingOccurrencesOfString:@"年" withString:@"-"];
+                date = [date stringByReplacingOccurrencesOfString:@"月" withString:@"-"];
+                date = [date stringByReplacingOccurrencesOfString:@"日" withString:@""];
+                NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+                [formatter setDateFormat:@"yyyy-MM-dd"];
+                NSDate *newDate = [formatter dateFromString:date];
+                NSString * dateStr = [formatter stringFromDate:newDate];
+                model.MachineDetial_Estimated = dateStr;
+                [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            }
+        };
+        [self.editTimeView show];
+    };
+    cell.DeleteBlock = ^{
+        [self.siteMaterialArrM removeObjectAtIndex:indexPath.row];
+        [self.tableView reloadData];
+    };
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel{
+    _schedulePlanModel = schedulePlanModel;
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    self.fillDate = [formatter stringFromDate:[NSDate date]];
+    self.creatName = Realname;
+    self.creatId = UserID;
+    self.isAdd = true;
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    PBSchedulePlanModel *planModel = [[PBSchedulePlanModel alloc] init];
+    planModel.UID = scheduleListModel.MobilePA_ProjectID;
+    planModel.Name = scheduleListModel.MobilePA_ProjectName;
+    self.schedulePlanModel = planModel;
+    self.fillDate = scheduleListModel.MobilePA_Unittime;
+    self.creatName = scheduleListModel.MobilePA_CreateUser;
+    self.creatId = scheduleListModel.MobilePA_Createuserid;
+    self.isAdd = false;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+- (PBChooseType *)chooseTypeView {
+    if (_chooseTypeView == nil) {
+        _chooseTypeView = [[PBChooseType alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _chooseTypeView.visualViewHeight = 300;
+    }
+    return _chooseTypeView;;
+}
+- (NSMutableArray *)siteMaterialArrM {
+    if (_siteMaterialArrM == nil) {
+        _siteMaterialArrM = [[NSMutableArray alloc] init];
+    }
+    return _siteMaterialArrM;
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.h
new file mode 100644
index 0000000..6e99e40
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBSiteMechanicalViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+@class PBProjectModel;
+@class PBScheduleListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSiteMechanicalViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@property (nonatomic, copy) void (^AddSuccessBlock)(PBScheduleListModel *listModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.m
new file mode 100644
index 0000000..5e079fb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSiteMechanicalViewController.m
@@ -0,0 +1,385 @@
+//
+//  PBSitePerViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSiteMechanicalViewController.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBScheduleHeaderView.h"
+#import "PBSitePerTableViewCell.h"
+#import "PBMaterialPlanModel.h"
+#import "PBSiteMaterialModel.h"
+#import "PBEditTimeView.h"
+#import "PBChooseType.h"
+#import "PBScheduleListModel.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBSiteMechanicalViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSArray *typeDataList;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;
+@property (nonatomic, strong) PBChooseType *chooseTypeView;
+@property (nonatomic, strong) PBScheduleHeaderView *headerView;
+@property (nonatomic, strong) NSMutableArray *siteMaterialArrM;
+@property (nonatomic, copy) NSString *fillDate;
+@property (nonatomic, copy) NSString *creatName;
+@property (nonatomic, copy) NSString *creatId;
+@property (nonatomic, assign) BOOL isAdd;
+@end
+
+@implementation PBSiteMechanicalViewController
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+    [self loadUserTypeWithPlanID:@"" andUserType:@"" andIndexPath:nil andModel:nil];
+    [self loadData];
+    [self setupNav];
+}
+
+- (void)setupNav {
+    self.title = @"现场机械";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveAction{
+    [YJProgressHUD showProgress:@"正在保存..." inView:self.view];
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (PBSiteMaterialModel *obj in self.siteMaterialArrM) {
+//        if (obj.MobileSafe_Name == nil || obj.MobileSafe_Measure == nil) {
+//            [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+//            return;
+//        }
+        NSDictionary *dict = @{
+            @"MaterialsDetial_Name": obj.MaterialsDetial_Name == nil? @"" : obj.MaterialsDetial_Name, //机械名称
+            @"MaterialsDetial_PlanNum": obj.MaterialsDetial_PlanNum == nil? @"" : obj.MaterialsDetial_PlanNum,//机械计划数量
+//            @"MaterialsDetial_AddNum": obj.MaterialsDetial_AddNum, //机械累计数量
+            @"MaterialsDetial_AdddelNum": obj.MaterialsDetial_AdddelNum == nil? @"" : obj.MaterialsDetial_AdddelNum,//机械增减数量
+            @"MaterialsDetial_NewNum": obj.MaterialsDetial_NewNum == nil? @"" : obj.MaterialsDetial_NewNum,//机械现场数量
+            @"MaterialsDetial_type": obj.MaterialsDetial_type==nil? @"": obj.MaterialsDetial_type,//机械类别
+            @"MaterialsDetial_ProjectID": self.schedulePlanModel.UID == nil? @"" : self.schedulePlanModel.UID,//进度计划编码
+            @"MaterialsDetial_Unittime": self.fillDate == nil? @"" : self.fillDate,//填报日期
+            @"MaterialsDetial_createuser": self.creatName == nil? @"" : self.creatName,//填报人
+            @"organizeId": self.projectModel.organizeid == nil? @"" : self.projectModel.organizeid //项目编码
+            
+        };
+        [arrM addObject:dict];
+    }
+    
+    [[PBNetworkTools sharedTools] AddMaterialsJSONWithOrganizeId:self.projectModel.organizeid andMobile:arrM.copy andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            PBScheduleListModel *listModel = [[PBScheduleListModel alloc] init];
+            listModel.MobilePA_ProjectID = self.schedulePlanModel.UID;
+            listModel.MobilePA_ProjectName = self.schedulePlanModel.Name;
+            listModel.MobilePA_Unittime = self.fillDate;
+            listModel.MobilePA_CreateUser = self.creatName;
+            listModel.MobilePA_Createuserid =  self.creatId;
+            listModel.MobilePA_state = @"待提交";
+            if (self.AddSuccessBlock) {
+                self.AddSuccessBlock(listModel);
+            }
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)loadUserTypeWithPlanID:(NSString *)planId andUserType:(NSString *)type andIndexPath:(NSIndexPath *) indexPath andModel:(PBSiteMaterialModel *)materialModel {
+    [[PBNetworkTools sharedTools] GetMaterialsWithOrganizeId:self.projectModel.organizeid andMobileUserDetial_ProjectID:planId andMobile_UserType:type andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBMaterialPlanModel *model = [PBMaterialPlanModel yy_modelWithDictionary:obj];
+                [typeArrM addObject:model];
+            }
+            if (indexPath == nil){
+                self.typeDataList = typeArrM.copy;
+            }else {
+                PBMaterialPlanModel *typeModel = typeArrM[0];
+                materialModel.MaterialsDetial_Name = typeModel.Materials_Name;
+                materialModel.MaterialsDetial_PlanNum = typeModel.Materials_PlanNum;
+                materialModel.MaterialsDetial_AddNum = typeModel.Materials_AddNum;
+                [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)loadData {
+    self.dataList = @[@{@"name": @"现场机械情况", @"child": self.siteMaterialArrM}];
+    if(self.isAdd) {
+        [self.tableView reloadData];
+    }else {
+        [[PBNetworkTools sharedTools] GetMaterialsJSONWithUnittime:self.fillDate andCreateuserId:self.creatId andPlanID:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+    //            [YJProgressHUD hide];
+                for (NSDictionary *obj in networkModel.Data) {
+                    PBSiteMaterialModel *model = [PBSiteMaterialModel yy_modelWithDictionary:obj];
+                    [self.siteMaterialArrM addObject:model];
+                }
+                [self.tableView reloadData];
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+    }
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    
+//    UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
+//    [self addChildViewController:tvc];
+//    self.tableView = tvc.tableView;
+    
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.tableFooterView = [UIView new];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    [self.tableView registerClass:[PBSitePerTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    }
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+    UIButton *addTaskBtn = [[UIButton alloc] init];
+    [addTaskBtn setImage:[UIImage imageNamed:@"add_mechinal"] forState:UIControlStateNormal];
+    [addTaskBtn addTarget:self action:@selector(addPersonAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:addTaskBtn];
+    [addTaskBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@48);
+    }];
+    PBScheduleHeaderView *headerV = [[PBScheduleHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 132)];
+    self.headerView = headerV;
+    headerV.schedulePlanModel = self.schedulePlanModel;
+    headerV.fillDate = self.fillDate;
+    headerV.ChooseDate = ^{
+        if (self.isAdd) {
+            [self.view endEditing:YES];
+            [PBKeyWindow addSubview:self.editTimeView];
+            self.editTimeView.fillData = self.fillDate;
+            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+                if (isSelsected) {
+                    date = [date stringByReplacingOccurrencesOfString:@"年" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"月" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"日" withString:@""];
+                    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+                    [formatter setDateFormat:@"yyyy-MM-dd"];
+                    NSDate *newDate = [formatter dateFromString:date];
+                    NSString * dateStr = [formatter stringFromDate:newDate];
+                    self.fillDate = dateStr;
+                    self.headerView.fillDate = self.fillDate;
+                }
+            };
+            [self.editTimeView show];
+        }else {
+            [YJProgressHUD showMessage:@"无法修改日期" inView:self.view];
+        }
+    };
+    self.tableView.tableHeaderView = headerV;
+    
+}
+- (void)addPersonAction {
+    PBSiteMaterialModel *sitePerModel = [[PBSiteMaterialModel alloc] init];
+    [self.siteMaterialArrM addObject:sitePerModel];
+    [self.tableView reloadData];
+}
+
+
+#pragma mark - Table view data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return self.dataList.count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSDictionary *item = self.dataList[section];
+    NSArray *arr = [item valueForKey:@"child"];
+    return arr.count;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 52;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    UIView *bgView = [[UIView alloc]init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    UIView *iconV = [[UIView alloc] init];
+    iconV.backgroundColor = PBColor(95, 158, 249);
+    [bgView addSubview:iconV];
+    [iconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(20);
+        make.size.mas_equalTo(CGSizeMake(6, 20));
+        make.left.equalTo(bgView);
+    }];
+    NSDictionary *dict = self.dataList[section];
+    UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"name"] Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:18];
+    [bgView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(iconV);
+        make.left.equalTo(iconV.mas_right).offset(5);
+    }];
+    return bgView;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *item = self.dataList[indexPath.section];
+    NSArray *arr = [item valueForKey:@"child"];
+    PBSiteMaterialModel *model = arr[indexPath.row];
+    PBSitePerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.siteMaterialModel = model;
+    cell.materialIndex = indexPath.row + 1;
+    cell.ChooseTypeBlock = ^{
+        [self.view endEditing:YES];
+        [PBKeyWindow addSubview:self.chooseTypeView];
+        self.chooseTypeView.siteMaterialModel = model;
+        self.chooseTypeView.dateList = self.typeDataList;
+        self.chooseTypeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSInteger index){
+            if (isSelsected) {
+                PBMaterialPlanModel *typeModel = self.typeDataList[index];
+//                [self loadUserTypeWithPlanID:self.schedulePlanModel.UID andUserType:typeModel.Materials_Name andIndexPath:indexPath andModel:model];
+                model.MaterialsDetial_Name = typeModel.Materials_Name;
+                model.MaterialsDetial_PlanNum = typeModel.Materials_PlanNum;
+                //清空
+                model.MaterialsDetial_AdddelNum = @"";
+                model.MaterialsDetial_NewNum = @"";
+                model.MaterialsDetial_type = @"";
+                [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+            }
+        };
+        [self.chooseTypeView show];
+    };
+    cell.DeleteBlock = ^{
+        [self.siteMaterialArrM removeObjectAtIndex:indexPath.row];
+        [self.tableView reloadData];
+    };
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel{
+    _schedulePlanModel = schedulePlanModel;
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    self.fillDate = [formatter stringFromDate:[NSDate date]];
+    self.creatName = Realname;
+    self.creatId = UserID;
+    self.isAdd = true;
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    PBSchedulePlanModel *planModel = [[PBSchedulePlanModel alloc] init];
+    planModel.UID = scheduleListModel.MobilePA_ProjectID;
+    planModel.Name = scheduleListModel.MobilePA_ProjectName;
+    self.schedulePlanModel = planModel;
+    self.fillDate = scheduleListModel.MobilePA_Unittime;
+    self.creatName = scheduleListModel.MobilePA_CreateUser;
+    self.creatId = scheduleListModel.MobilePA_Createuserid;
+    self.isAdd = false;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+- (PBChooseType *)chooseTypeView {
+    if (_chooseTypeView == nil) {
+        _chooseTypeView = [[PBChooseType alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _chooseTypeView.visualViewHeight = 300;
+    }
+    return _chooseTypeView;;
+}
+- (NSMutableArray *)siteMaterialArrM {
+    if (_siteMaterialArrM == nil) {
+        _siteMaterialArrM = [[NSMutableArray alloc] init];
+    }
+    return _siteMaterialArrM;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.h
new file mode 100644
index 0000000..e794c22
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBSitePerViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+@class PBProjectModel;
+@class PBScheduleListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSitePerViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@property (nonatomic, copy) void (^AddSuccessBlock)(PBScheduleListModel *listModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.m
new file mode 100644
index 0000000..8b19e69
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSitePerViewController.m
@@ -0,0 +1,454 @@
+//
+//  PBSitePerViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSitePerViewController.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBScheduleHeaderView.h"
+#import "PBNewPersonTableViewCell.h"
+#import "PBPerPlanModel.h"
+#import "PBSitePerModel.h"
+#import "PBEditTimeView.h"
+#import "PBChooseType.h"
+#import "PBScheduleListModel.h"
+#import "SGQRCode.h"
+#import "QQQRCodeVC.h"
+#import <AMapLocationKit/AMapLocationKit.h>
+
+static NSString *const CellID = @"CellID";
+@interface PBSitePerViewController ()<UITableViewDataSource, UITableViewDelegate, AMapLocationManagerDelegate>
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) NSArray *typeDataList;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;
+@property (nonatomic, strong) PBChooseType *chooseTypeView;
+@property (nonatomic, strong) PBScheduleHeaderView *headerView;
+@property (nonatomic, strong) NSMutableArray *sitePersonArrM;
+@property (nonatomic, copy) NSString *fillDate;
+@property (nonatomic, copy) NSString *creatName;
+@property (nonatomic, copy) NSString *creatId;
+@property (nonatomic, assign) BOOL isAdd;
+@property (nonatomic, strong) AMapLocationManager *locationManager;
+@property (nonatomic, copy) NSString *place;
+@end
+
+@implementation PBSitePerViewController
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self getPositioning];
+    
+    [self setupUI];
+//    [self loadUserTypeWithPlanID:@"" andUserType:@"" andIndexPath:nil andModel:nil];
+//    [self loadData];
+    [self setupNav];
+}
+
+- (void)setupNav {
+    self.title = @"现场人员";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+//    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+//    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+//- (void)saveAction{
+//    [YJProgressHUD showProgress:@"正在保存..." inView:self.view];
+//    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+//    for (PBSitePerModel *obj in self.sitePersonArrM) {
+////        if (obj.MobileSafe_Name == nil || obj.MobileSafe_Measure == nil) {
+////            [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+////            return;
+////        }
+//        NSDictionary *dict = @{
+//            @"MobileUserDetial_Name": obj.MobileUserDetial_Name == nil? @"" : obj.MobileUserDetial_Name, // 人员名称
+//            @"MobileUserDetial_PlanNum": obj.MobileUserDetial_PlanNum == nil? @"" : obj.MobileUserDetial_PlanNum, //人员计划数量
+//            @"MobileUserDetial_AdddelNum": obj.MobileUserDetial_AdddelNum == nil? @"" : obj.MobileUserDetial_AdddelNum, //人员增减数量
+////            @"MobileUserDetial_AddNum": obj.MobileUserDetial_AddNum, //人员累计数量
+//            @"MobileUserDetial_NewNum": obj.MobileUserDetial_NewNum == nil? @"" : obj.MobileUserDetial_NewNum, //人员现场数量
+//            @"MobileUserDetial_type": obj.MobileUserDetial_type==nil? @"": obj.MobileUserDetial_type, //人员类别
+//            @"MobileUserDetial_ProjectID": self.schedulePlanModel.UID == nil? @"" : self.schedulePlanModel.UID, //进度计划编码
+//            @"MobileUserDetial_Unittime": self.fillDate == nil? @"" : self.fillDate,  //填报日期
+//            @"MobileUserDetial_createuser": self.creatName == nil? @"" : self.creatName, //填报人
+//            @"organizeId": self.projectModel.organizeid == nil? @"": self.projectModel.organizeid //项目编码
+//        };
+//        [arrM addObject:dict];
+//    }
+//
+//    [[PBNetworkTools sharedTools] AddMobileUserJSONWithOrganizeId:self.projectModel.organizeid andMobile:arrM.copy andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+//        if (error) {
+//            NSLog(@"%@",error);
+//            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+//            return;
+//        }
+//        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+//        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+//        if (networkModel.Ret == 1) {
+//            [YJProgressHUD hide];
+//            PBScheduleListModel *listModel = [[PBScheduleListModel alloc] init];
+//            listModel.MobilePA_ProjectID = self.schedulePlanModel.UID;
+//            listModel.MobilePA_ProjectName = self.schedulePlanModel.Name;
+//            listModel.MobilePA_Unittime = self.fillDate;
+//            listModel.MobilePA_CreateUser = self.creatName;
+//            listModel.MobilePA_Createuserid =  self.creatId;
+//            listModel.MobilePA_state = @"待提交";
+//            if (self.AddSuccessBlock) {
+//                self.AddSuccessBlock(listModel);
+//            }
+//            [self.navigationController popViewControllerAnimated:YES];
+//        }else {
+//            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+//        }
+//    }];
+//}
+
+//- (void)loadUserTypeWithPlanID:(NSString *)planId andUserType:(NSString *)type andIndexPath:(NSIndexPath *) indexPath andModel:(PBSitePerModel *)preModel {
+//    [[PBNetworkTools sharedTools] GetMobileUserWithOrganizeId:self.projectModel.organizeid andMobileUserDetial_ProjectID:planId andMobile_UserType:type andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+//        if (error) {
+//            NSLog(@"%@",error);
+//            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+//            return;
+//        }
+//        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+//        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+//        if (networkModel.Ret == 1) {
+//            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
+//            for (NSDictionary *obj in networkModel.Data) {
+//                PBPerPlanModel *model = [PBPerPlanModel yy_modelWithDictionary:obj];
+//                [typeArrM addObject:model];
+//            }
+//            if (indexPath == nil){
+//                self.typeDataList = typeArrM.copy;
+//            }else {
+//                PBPerPlanModel *typeModel = typeArrM[0];
+//                preModel.MobileUserDetial_Name = typeModel.Mobile_UserType;
+//                preModel.MobileUserDetial_PlanNum = typeModel.Mobile_PlanNum;
+//                preModel.MobileUserDetial_AddNum = typeModel.Mobile_AddNum;
+//                [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+//            }
+//        }else {
+//            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+//        }
+//    }];
+//}
+
+//- (void)loadData {
+//    self.dataList = @[];
+//    if(self.isAdd) {
+//        [self.tableView reloadData];
+//    }else {
+//        [[PBNetworkTools sharedTools] GetMobileUserJSONWithUnittime:self.fillDate andCreateuserId:self.creatId andPlanID:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+//            if (error) {
+//                NSLog(@"%@",error);
+//                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+//                return;
+//            }
+//            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+//            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+//            if (networkModel.Ret == 1) {
+//    //            [YJProgressHUD hide];
+//                for (NSDictionary *obj in networkModel.Data) {
+//                    PBSitePerModel *model = [PBSitePerModel yy_modelWithDictionary:obj];
+//                    [self.sitePersonArrM addObject:model];
+//                }
+//                [self.tableView reloadData];
+//            }else {
+//                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+//            }
+//        }];
+//    }
+//}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.tableFooterView = [UIView new];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    [self.tableView registerClass:[PBNewPersonTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    }
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+    UIButton *approachBtn = [UIButton z_textButton:@"进场" boldFontSize:16 normalColor:[UIColor whiteColor]];
+    approachBtn.tag = 90;
+    approachBtn.backgroundColor = PBColor(0, 122, 254);
+    [approachBtn addTarget:self action:@selector(personnelReporting:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:approachBtn];
+    [approachBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.height.equalTo(@48);
+    }];
+    UIButton *appearBtn = [UIButton z_textButton:@"出场" boldFontSize:16 normalColor:[UIColor whiteColor]];
+    appearBtn.tag = 91;
+    appearBtn.backgroundColor = WarningColor;
+    [appearBtn addTarget:self action:@selector(personnelReporting:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:appearBtn];
+    [appearBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(approachBtn.mas_right);
+        make.right.equalTo(self.view).offset(-10);
+        make.width.equalTo(approachBtn);
+        make.height.equalTo(@48);
+    }];
+    
+    PBScheduleHeaderView *headerV = [[PBScheduleHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 112)];
+    self.headerView = headerV;
+//    headerV.schedulePlanModel = self.schedulePlanModel;
+//    headerV.fillDate = self.fillDate;
+//    headerV.ChooseDate = ^{
+//        if (self.isAdd) {
+//            [self.view endEditing:YES];
+//            [PBKeyWindow addSubview:self.editTimeView];
+//            self.editTimeView.fillData = self.fillDate;
+//            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+//                if (isSelsected) {
+//                    date = [date stringByReplacingOccurrencesOfString:@"年" withString:@"-"];
+//                    date = [date stringByReplacingOccurrencesOfString:@"月" withString:@"-"];
+//                    date = [date stringByReplacingOccurrencesOfString:@"日" withString:@""];
+//                    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+//                    [formatter setDateFormat:@"yyyy-MM-dd"];
+//                    NSDate *newDate = [formatter dateFromString:date];
+//                    NSString * dateStr = [formatter stringFromDate:newDate];
+//                    self.fillDate = dateStr;
+//                    self.headerView.fillDate = self.fillDate;
+//                }
+//            };
+//            [self.editTimeView show];
+//        }else {
+//            [YJProgressHUD showMessage:@"无法修改日期" inView:self.view];
+//        }
+//    };
+    headerV.Scanning = ^{
+        [self authorityJudgment];
+    };
+    self.tableView.tableHeaderView = headerV;
+    
+}
+- (void)authorityJudgment {
+    [SGPermission permissionWithType:SGPermissionTypeCamera completion:^(SGPermission * _Nonnull permission, SGPermissionStatus status) {
+        if (status == SGPermissionStatusNotDetermined) {
+            [permission request:^(BOOL granted) {
+                if (granted) {
+                    NSLog(@"第一次授权成功");
+                    QQQRCodeVC *VC = [[QQQRCodeVC alloc] init];
+                    VC.getPersonBlock = ^(NSString * _Nonnull personId) {
+                        [self getFillUserInfoWithID:personId];
+                    };
+                    [self.navigationController pushViewController:VC animated:YES];
+
+                } else {
+                    NSLog(@"第一次授权失败");
+                }
+            }];
+        } else if (status == SGPermissionStatusAuthorized) {
+            NSLog(@"SGPermissionStatusAuthorized");
+            QQQRCodeVC *VC = [[QQQRCodeVC alloc] init];
+            VC.getPersonBlock = ^(NSString * _Nonnull personId) {
+                [self getFillUserInfoWithID:personId];
+            };
+            [self.navigationController pushViewController:VC animated:YES];
+
+        } else if (status == SGPermissionStatusDenied) {
+            NSLog(@"SGPermissionStatusDenied");
+            [self failed];
+        } else if (status == SGPermissionStatusRestricted) {
+            NSLog(@"SGPermissionStatusRestricted");
+            [self unknown];
+        }
+
+    }];
+}
+- (void)failed {
+    UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"[前往:设置 - 隐私 - 相机 - SGQRCode] 打开访问开关" preferredStyle:(UIAlertControllerStyleAlert)];
+    UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
+    }];
+    
+    [alertC addAction:alertA];
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self presentViewController:alertC animated:YES completion:nil];
+    });
+}
+
+- (void)unknown {
+    UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"未检测到您的摄像头" preferredStyle:(UIAlertControllerStyleAlert)];
+    UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
+        
+    }];
+    
+    [alertC addAction:alertA];
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self presentViewController:alertC animated:YES completion:nil];
+    });
+}
+- (void)getFillUserInfoWithID:(NSString *)guid {
+    [[PBNetworkTools sharedTools] GetFillUserInfoWithID:guid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            self.dataList = @[networkModel.Data];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)getPositioning {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [AMapLocationManager updatePrivacyShow:(AMapPrivacyShowStatusDidShow) privacyInfo:AMapPrivacyInfoStatusDidContain];
+    [AMapLocationManager updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree];
+    self.locationManager = [[AMapLocationManager alloc] init];
+    self.locationManager.delegate = self;
+    // 带逆地理信息的一次定位(返回坐标和地址信息)
+    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
+    //   定位超时时间,最低2s,此处设置为2s
+    self.locationManager.locationTimeout = 2;
+    //   逆地理请求超时时间,最低2s,此处设置为2s
+    self.locationManager.reGeocodeTimeout = 2;
+    [self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
+        [YJProgressHUD hide];
+        if (error){
+            NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);
+            if (error.code == AMapLocationErrorLocateFailed){
+                return;
+            }
+        }
+        NSLog(@"location:%@", location);
+        if (regeocode){
+            NSLog(@"reGeocode:%@", regeocode);
+            self.place = regeocode.formattedAddress;
+            self.headerView.place = regeocode.formattedAddress;
+        }
+    }];
+}
+- (void)personnelReporting:(UIButton *)btn {
+    if (self.dataList.count <= 0) {
+        [YJProgressHUD showFailed:@"请先进行扫码,获取人员信息!" inview:self.view];
+        return;
+    }
+    NSInteger type = btn.tag - 90;
+    NSDictionary *dict = self.dataList[0];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] aEntryOrExitWithOrganizeId:self.projectModel.organizeid andFillingUserId:[dict valueForKey:@"Id"] andProgressParentId:@"" andProgressTreeId:@"" andProgressProjectId:@"" andAddress:self.place andType:type andCallBack:^(NSURLResponse *response, id responseObject, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"操作失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD showSuccess:@"操作成功" inview:self.view];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+    
+}
+
+
+#pragma mark - Table view data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *item = self.dataList[indexPath.row];
+    PBNewPersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.dict = item;
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    return cell;
+}
+
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel{
+    _schedulePlanModel = schedulePlanModel;
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    self.fillDate = [formatter stringFromDate:[NSDate date]];
+    self.creatName = Realname;
+    self.creatId = UserID;
+    self.isAdd = true;
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    PBSchedulePlanModel *planModel = [[PBSchedulePlanModel alloc] init];
+    planModel.UID = scheduleListModel.MobilePA_ProjectID;
+    planModel.Name = scheduleListModel.MobilePA_ProjectName;
+    self.schedulePlanModel = planModel;
+    self.fillDate = scheduleListModel.MobilePA_Unittime;
+    self.creatName = scheduleListModel.MobilePA_CreateUser;
+    self.creatId = scheduleListModel.MobilePA_Createuserid;
+    self.isAdd = false;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+- (PBChooseType *)chooseTypeView {
+    if (_chooseTypeView == nil) {
+        _chooseTypeView = [[PBChooseType alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _chooseTypeView.visualViewHeight = 300;
+    }
+    return _chooseTypeView;;
+}
+- (NSMutableArray *)sitePersonArrM {
+    if (_sitePersonArrM == nil) {
+        _sitePersonArrM = [[NSMutableArray alloc] init];
+    }
+    return _sitePersonArrM;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.h
new file mode 100644
index 0000000..9ba10e4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBSuperviseViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+@class PBProjectModel;
+@class PBScheduleListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSuperviseViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@property (nonatomic, copy) void (^AddSuccessBlock)(PBScheduleListModel *listModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.m
new file mode 100644
index 0000000..614bc40
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBSuperviseViewController.m
@@ -0,0 +1,314 @@
+//
+//  PBSuperviseViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSuperviseViewController.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBScheduleHeaderView.h"
+#import "PBSuperviseTableViewCell.h"
+#import "PBSuperviseModel.h"
+#import "PBEditTimeView.h"
+#import "PBScheduleListModel.h"
+
+static NSString *const CellID = @"CellID";
+@interface PBSuperviseViewController ()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;
+@property (nonatomic, strong) PBScheduleHeaderView *headerView;
+@property (nonatomic, strong) NSMutableArray *safetyArrM;
+@property (nonatomic, copy) NSString *fillDate;
+@property (nonatomic, copy) NSString *creatName;
+@property (nonatomic, copy) NSString *creatId;
+@property (nonatomic, assign) BOOL isAdd;
+
+@end
+
+@implementation PBSuperviseViewController
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+    [self loadData];
+    [self setupNav];
+}
+
+- (void)setupNav {
+    self.title = @"督导会";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveAction{
+    [YJProgressHUD showProgress:@"正在保存..." inView:self.view];
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (PBSuperviseModel *obj in self.safetyArrM) {
+        if (obj.MobileSupervise_Name == nil) {
+            [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+            return;
+        }
+        NSDictionary *dict = @{
+            @"MobileSupervise_Name": obj.MobileSupervise_Name == nil? @"" : obj.MobileSupervise_Name,
+            @"MobileSupervise_ProjectID": self.schedulePlanModel.UID == nil? @"" : self.schedulePlanModel.UID,
+            @"MobileSupervise_Unittime": self.fillDate == nil? @"" : self.fillDate,
+            @"MobileSupervise_Createusername": self.creatName == nil? @"" : self.creatName,
+            @"organizeId": self.projectModel.organizeid == nil? @"" : self.projectModel.organizeid
+        };
+        [arrM addObject:dict];
+    }
+    [[PBNetworkTools sharedTools] AddMobileSuperviseJSONWithOrganizeId:self.projectModel.organizeid andMobile:arrM.copy andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            PBScheduleListModel *listModel = [[PBScheduleListModel alloc] init];
+            listModel.MobilePA_ProjectID = self.schedulePlanModel.UID;
+            listModel.MobilePA_ProjectName = self.schedulePlanModel.Name;
+            listModel.MobilePA_Unittime = self.fillDate;
+            listModel.MobilePA_CreateUser = self.creatName;
+            listModel.MobilePA_Createuserid =  self.creatId;
+            listModel.MobilePA_state = @"待提交";
+            if (self.AddSuccessBlock) {
+                self.AddSuccessBlock(listModel);
+            }
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)loadData {
+    self.dataList = @[@{@"name": @"日督导会内容", @"child": self.safetyArrM}];
+    
+    [[PBNetworkTools sharedTools] GetMobileSuperviseJSONWithUnittime:self.fillDate andCreateuserId:self.creatId andPlanID:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            for (NSDictionary *obj in networkModel.Data) {
+                PBSuperviseModel *model = [PBSuperviseModel yy_modelWithDictionary:obj];
+                [self.safetyArrM addObject:model];
+            }
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+    
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+
+//    UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
+//    [self addChildViewController:tvc];
+//    self.tableView = tvc.tableView;
+    
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.tableFooterView = [UIView new];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    [self.tableView registerClass:[PBSuperviseTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.view addSubview:self.tableView];
+
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    }
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+    UIButton *addTaskBtn = [[UIButton alloc] init];
+    [addTaskBtn setImage:[UIImage imageNamed:@"add_supervise"] forState:UIControlStateNormal];
+    [addTaskBtn addTarget:self action:@selector(addPersonAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:addTaskBtn];
+    [addTaskBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@48);
+    }];
+    PBScheduleHeaderView *headerV = [[PBScheduleHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 132)];
+    self.headerView = headerV;
+    headerV.schedulePlanModel = self.schedulePlanModel;
+    headerV.fillDate = self.fillDate;
+    headerV.ChooseDate = ^{
+        if (self.isAdd) {
+            [self.view endEditing:YES];
+            [PBKeyWindow addSubview:self.editTimeView];
+            self.editTimeView.fillData = self.fillDate;
+            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+                if (isSelsected) {
+                    date = [date stringByReplacingOccurrencesOfString:@"年" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"月" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"日" withString:@""];
+                    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+                    [formatter setDateFormat:@"yyyy-MM-dd"];
+                    NSDate *newDate = [formatter dateFromString:date];
+                    NSString * dateStr = [formatter stringFromDate:newDate];
+                    self.fillDate = dateStr;
+                    self.headerView.fillDate = self.fillDate;
+                }
+            };
+            [self.editTimeView show];
+        }else {
+            [YJProgressHUD showMessage:@"无法修改日期" inView:self.view];
+        }
+    };
+    self.tableView.tableHeaderView = headerV;
+    
+}
+- (void)addPersonAction {
+    PBSuperviseModel *superviseModel = [[PBSuperviseModel alloc] init];
+    [self.safetyArrM addObject:superviseModel];
+    [self.tableView reloadData];
+}
+
+#pragma mark - Table view data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return self.dataList.count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSDictionary *item = self.dataList[section];
+    NSArray *arr = [item valueForKey:@"child"];
+    return arr.count;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 52;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    UIView *bgView = [[UIView alloc]init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    UIView *iconV = [[UIView alloc] init];
+    iconV.backgroundColor = PBColor(95, 158, 249);
+    [bgView addSubview:iconV];
+    [iconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(20);
+        make.size.mas_equalTo(CGSizeMake(6, 20));
+        make.left.equalTo(bgView);
+    }];
+    NSDictionary *dict = self.dataList[section];
+    UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"name"] Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:18];
+    [bgView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(iconV);
+        make.left.equalTo(iconV.mas_right).offset(5);
+    }];
+    return bgView;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *item = self.dataList[indexPath.section];
+    NSArray *arr = [item valueForKey:@"child"];
+    PBSuperviseModel *model = arr[indexPath.row];
+    PBSuperviseTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.superviseModel = model;
+    cell.superviseIndex = indexPath.row + 1;
+    cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    cell.DeleteBlock = ^{
+        [self.safetyArrM removeObjectAtIndex:indexPath.row];
+        [self.tableView reloadData];
+    };
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel{
+    _schedulePlanModel = schedulePlanModel;
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    self.fillDate = [formatter stringFromDate:[NSDate date]];
+    self.creatName = Realname;
+    self.creatId = UserID;
+    self.isAdd = true;
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    PBSchedulePlanModel *planModel = [[PBSchedulePlanModel alloc] init];
+    planModel.UID = scheduleListModel.MobilePA_ProjectID;
+    planModel.Name = scheduleListModel.MobilePA_ProjectName;
+    self.schedulePlanModel = planModel;
+    self.fillDate = scheduleListModel.MobilePA_Unittime;
+    self.creatName = scheduleListModel.MobilePA_CreateUser;
+    self.creatId = scheduleListModel.MobilePA_Createuserid;
+    self.isAdd = false;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+
+-(NSMutableArray *)safetyArrM {
+    if (_safetyArrM == nil) {
+        _safetyArrM = [[NSMutableArray alloc] init];
+    }
+    return _safetyArrM;
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.h
new file mode 100644
index 0000000..cc89f04
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.h
@@ -0,0 +1,22 @@
+//
+//  PBTaskScheduleViewController.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+@class PBProjectModel;
+@class PBScheduleListModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTaskScheduleViewController : UIViewController
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@property (nonatomic, copy) void (^AddSuccessBlock)(PBScheduleListModel *listModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.m
new file mode 100644
index 0000000..1d5a037
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/PBTaskScheduleViewController.m
@@ -0,0 +1,697 @@
+//
+//  PBTaskScheduleViewController.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBTaskScheduleViewController.h"
+#import "PBProjectModel.h"
+#import "PBSchedulePlanModel.h"
+#import "PBTaskHeaderView.h"
+#import "PBPlanTaskTableViewCell.h"
+#import "PBunPlanTaskTableViewCell.h"
+#import "PBScheduleImgTableViewCell.h"
+#import "PBTaskScheduleModel.h"
+#import "PBChooseOneTaskViewController.h"
+#import "PBEditTimeView.h"
+#import "PBScheduleListModel.h"
+#import "PBImageModel.h"
+
+static NSString *const ImageCellID = @"ImageCellID";
+static NSString *const PlanCellID = @"PlanCellID";
+static NSString *const unPlanCellID = @"unPlanCellID";
+@interface PBTaskScheduleViewController ()<UITableViewDataSource, UITableViewDelegate, LFImagePickerControllerDelegate>
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSIndexPath *currentIndexPath;
+@property (nonatomic, strong) PBEditTimeView *editTimeView;
+@property (nonatomic, strong) PBTaskHeaderView *headerView;
+@property (nonatomic, strong) NSMutableArray *imageArrM;
+@property (nonatomic, strong) NSMutableArray *planTaskArrM;
+@property (nonatomic, strong) NSMutableArray *unplanTaskArrM;
+@property (nonatomic, copy) NSString *unitText;
+@property (nonatomic, copy) NSString *fillDate;
+@property (nonatomic, copy) NSString *creatName;
+@property (nonatomic, copy) NSString *creatId;
+@property (nonatomic, assign) BOOL isAdd;
+@end
+
+@implementation PBTaskScheduleViewController
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+        self.navigationController.interactivePopGestureRecognizer.enabled = NO;    //让rootView禁止滑动
+    }
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(updateTask:) name:PBNoteCenterChooseTask object:nil];
+    [self setupUI];
+    [self loadTask];
+    [self loadData];
+    [self setupNav];
+}
+- (void)processingRatio:(PBTaskScheduleModel *)model andFillDate:(NSString *)fillDate {
+    if (model.Progress_Name){
+        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+        [formatter setDateFormat:@"yyyy-MM-dd"];
+        NSDate *startDate = [formatter dateFromString:model.Progress_planstarttime];
+        NSDate *finshDate = [formatter dateFromString:model.Progress_plannendtime];
+        NSDate *filDate = [formatter dateFromString:fillDate];
+        NSTimeInterval planTime = [finshDate timeIntervalSinceDate:startDate];
+    //    NSInteger planDay = (NSInteger)planTime/(3600*24);
+        NSTimeInterval time = [filDate timeIntervalSinceDate:startDate];
+    //    NSInteger day = (NSInteger)time/(3600*24);
+        // 计划
+        NSString *planString = @"0";
+        float planP = time / planTime;
+        if(planP >= 1) {
+            planString = @"100";
+        } else if(planP < 0) {
+            planString = @"0"; 
+        } else {
+           NSInteger num = planP * 100;
+           planString = [NSString stringWithFormat:@"%zd", num];
+        }
+        NSLog(@"计划所得:%f,%@",planP, planString);
+        model.Progress_planratio = planString;
+        // 累计
+        
+        // 状态
+        NSInteger planProgress = [planString integerValue];
+        NSInteger mobileProgress = [model.Progress_MobileAddratio integerValue];
+        if (mobileProgress > planProgress) {
+            model.Progress_state = @"超前";
+        }else if(mobileProgress == planProgress){
+            model.Progress_state = @"正常";
+        } else {
+            model.Progress_state = @"滞后";
+        }
+    }
+}
+- (void)updateTask:(NSNotification *)noti {
+    NSDictionary *item = self.dataList[self.currentIndexPath.section];
+    NSArray *arr = [item valueForKey:@"child"];
+    PBTaskScheduleModel *model = arr[self.currentIndexPath.row];
+    PBSchedulePlanModel *planModel = noti.object;
+    model.Progress_Name = planModel.Name;
+    model.Progress_treeID = planModel.UID;
+    model.Progress_MobilePlan = planModel.mobilePlan;
+    model.Progress_MobileTomorrowratio = @"";
+    model.Progress_actualratio = @"";
+    NSRange range = [planModel.Start rangeOfString:@"T"];
+    NSString *start = [planModel.Start substringToIndex:range.location];
+    NSRange range1 = [planModel.Finish rangeOfString:@"T"];
+    NSString *finish = [planModel.Finish substringToIndex:range1.location];
+    model.Progress_planstarttime = start;
+    model.Progress_plannendtime = finish;
+    //获取累计
+    [self getTaskAddWithModel:model];
+}
+- (void)getTaskAddWithModel:(PBTaskScheduleModel *)model {
+    [[PBNetworkTools sharedTools] GetMobileAddWithTreeID:model.Progress_treeID andPlanId:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"获取累计失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            model.Progress_MobileAddratio = networkModel.Data;
+            model.MobileAddratio = networkModel.Data;
+            [self processingRatio:model andFillDate:self.fillDate];
+            [self.tableView reloadRowsAtIndexPaths:@[self.currentIndexPath] withRowAnimation:UITableViewRowAnimationFade];
+        }else {
+            [YJProgressHUD showFailed:@"获取累计失败" inview:self.view];
+        }
+    }];
+}
+
+- (void)setupNav {
+    self.title = @"任务进度";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @"返回";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    
+    UIBarButtonItem *saveNavItem = [[UIBarButtonItem alloc] initWithTitle:@"保存" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveNavItem;
+}
+- (void)backItemAction {
+    [PBNoteCenter removeObserver:self];
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveAction{
+    // 先上传图片
+    NSMutableArray *files = [[NSMutableArray alloc] init];
+    NSMutableString *names = [[NSMutableString alloc] init];
+    for (PBImageModel *imageModel in self.imageArrM) {
+        if(imageModel.image){
+            [files addObject:imageModel.image];
+            [names appendString:[NSString stringWithFormat:@"%@,", imageModel.name]];
+        }
+    }
+//    names = [names substringToIndex:([names length]-1)];
+    if (files.count > 0){
+        [[PBNetworkTools sharedTools] scheduleUploadImagesWithFiles:files andNames:names.copy andPlanID:self.schedulePlanModel.UID andUnittime:self.fillDate andorganizeId:self.projectModel.organizeid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"上传文件失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                [self saveTask];
+            }else {
+                [YJProgressHUD showFailed:networkModel.Msg inview:self.view];
+            }
+        }];
+    }else {
+        [self saveTask];
+    }
+}
+
+- (void)deleteImageWithIndex:(NSInteger)index {
+    UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"确认删除图片" message:@"" preferredStyle:(UIAlertControllerStyleActionSheet)];
+    UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"删除" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
+        PBImageModel *model = self.imageArrM[index];
+        [[PBNetworkTools sharedTools] DelteImageWithGuid:model.bf_guid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"删除文件失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                [self.imageArrM removeObjectAtIndex:index];
+                NSIndexSet *set = [[NSIndexSet alloc] initWithIndex:0];
+                [self.tableView reloadSections:set withRowAnimation:UITableViewRowAnimationFade];
+            }else {
+                [YJProgressHUD showFailed:networkModel.Msg inview:self.view];
+            }
+        }];
+    }];
+    UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertC addAction:alertA];
+    [alertC addAction:cancel];
+    [self presentViewController:alertC animated:YES completion:nil];
+}
+- (void)saveTask {
+    [YJProgressHUD showProgress:@"正在保存..." inView:self.view];
+    NSMutableArray *planArrM = [[NSMutableArray alloc] init];
+    NSMutableArray *unPlanArrM = [[NSMutableArray alloc] init];
+    for (PBTaskScheduleModel *obj in self.planTaskArrM) {
+//        if (obj.MobileSafe_Name == nil || obj.MobileSafe_Measure == nil) {
+//            [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+//            return;
+//        }
+        
+        NSDictionary *dict = @{
+            @"Progress_MobilePlan": obj.Progress_MobilePlan == nil? @"" : obj.Progress_MobilePlan, //任务层级
+            @"Progress_Name": obj.Progress_Name == nil? @"" : obj.Progress_Name,  // 任务项
+            @"Progress_treeID": obj.Progress_treeID == nil? @"" : obj.Progress_treeID, //当前任务id
+            @"Progress_planstarttime": obj.Progress_planstarttime == nil? @"" : obj.Progress_planstarttime, // 计划开始时间
+            @"Progress_plannendtime": obj.Progress_plannendtime == nil? @"" : obj.Progress_plannendtime, //计划结束时间
+            @"Progress_state": obj.Progress_state == nil? @"" : obj.Progress_state, //任务状态
+            @"Progress_MobileReason": obj.Progress_MobileReason == nil? @"" : obj.Progress_MobileReason, //滞后原因
+            @"Progress_planratio": obj.Progress_planratio == nil? @"" : obj.Progress_planratio, //计划完成比例
+            @"Progress_actualratio": obj.Progress_actualratio == nil? @"" : obj.Progress_actualratio, //今日完成比例
+            @"Progress_MobileTomorrowratio": obj.Progress_MobileTomorrowratio == nil? @"" : obj.Progress_MobileTomorrowratio, //明日完成比例
+            @"Progress_MobileAddratio": obj.Progress_MobileAddratio == nil? @"" : obj.Progress_MobileAddratio, //累计完成比例
+            @"Progress_MobileImageID": @"", // 图片id
+            
+            @"Progress_ProjectID": self.schedulePlanModel.UID == nil? @"" : self.schedulePlanModel.UID, // 进度计划id
+            @"Progress_createuser": self.creatName == nil? @"" : self.creatName, //填报人 登录人
+            @"Progress_unittime": self.fillDate == nil? @"" : self.fillDate, //填报时间
+            @"organizeId": self.projectModel.organizeid == nil? @"" :self.projectModel.organizeid, //项目编码
+            @"Progress_MobileCompany": self.unitText == nil? @"" : self.unitText //施工单位
+        };
+        [planArrM addObject:dict];
+    }
+    for (PBTaskScheduleModel *obj in self.unplanTaskArrM) {
+        NSDictionary *dict = @{
+            @"NoProgress_Name": obj.NoProgress_Name == nil? @"" : obj.NoProgress_Name, // 备注
+            
+            @"NoProgress_ProjectID": self.schedulePlanModel.UID == nil? @"" : self.schedulePlanModel.UID, // 进度计划id
+            @"NoProgress_unittime": self.fillDate == nil? @"" : self.fillDate, //填报时间
+            @"NoProgress_Username": self.creatName == nil? @"" : self.creatName, //填报人
+            @"organizeId": self.projectModel.organizeid == nil? @"" : self.projectModel.organizeid, //填报人
+            @"NoProgress_MobileCompany": self.unitText == nil? @"" : self.unitText
+        };
+        [unPlanArrM addObject:dict];
+    }
+    NSDictionary *mobile = @{
+        @"Plan_json" : planArrM.copy,
+        @"NoPlan_json" : unPlanArrM.copy
+    };
+    
+    [[PBNetworkTools sharedTools] AddMobileJSONWithOrganizeId:self.projectModel.organizeid andMobile:mobile andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+         if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"保存失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            PBScheduleListModel *listModel = [[PBScheduleListModel alloc] init];
+            listModel.MobilePA_ProjectID = self.schedulePlanModel.UID;
+            listModel.MobilePA_ProjectName = self.schedulePlanModel.Name;
+            listModel.MobilePA_Unittime = self.fillDate;
+            listModel.MobilePA_CreateUser = self.creatName;
+            listModel.MobilePA_Createuserid =  self.creatId;
+            listModel.MobilePA_state = @"待提交";
+            if (self.AddSuccessBlock) {
+                self.AddSuccessBlock(listModel);
+            }
+            [PBNoteCenter removeObserver:self];
+            [self.navigationController popViewControllerAnimated:YES];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+
+    }];
+}
+- (void)loadTask{
+    if (!self.isAdd) {
+        [[PBNetworkTools sharedTools] GetSchedualTreeWithOrganizeId:self.projectModel.bimcomposerid andUid:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                [YJProgressHUD hide];
+                NSArray *arr = networkModel.Data;
+                if (arr.count > 0){
+                    NSDictionary *obj = arr[0];
+                    self.schedulePlanModel = [PBSchedulePlanModel yy_modelWithDictionary:obj];
+                    self.fillDate = self.scheduleListModel.MobilePA_Unittime;
+                    self.creatName = self.scheduleListModel.MobilePA_CreateUser;
+                    self.creatId = self.scheduleListModel.MobilePA_Createuserid;
+                    self.isAdd = false;
+                }
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+    }
+}
+- (void)loadData {
+    self.dataList = @[@{@"type":@"image", @"name": @"进度形象照片", @"child": self.imageArrM}, @{@"type":@"planTask", @"name": @"计划任务完成情况", @"child": self.planTaskArrM}, @{@"type":@"unplanTask", @"name": @"非计划任务完成情况", @"child": self.unplanTaskArrM}];
+    if(self.isAdd) {
+        [self.tableView reloadData];
+    }else {
+        [[PBNetworkTools sharedTools] GetMobileJSONWithUnittime:self.fillDate andCreateuserId:self.creatId andPlanID:self.schedulePlanModel.UID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+    //            [YJProgressHUD hide];
+                NSArray *imageArr = [networkModel.Data valueForKey:@"Image_Json"];
+                NSArray *planArr = [networkModel.Data valueForKey:@"Plan_json"];
+                NSArray *unplanArr = [networkModel.Data valueForKey:@"NoPlan_json"];
+                for (NSDictionary *obj in imageArr) {
+                    PBImageModel *model = [PBImageModel yy_modelWithDictionary:obj];
+                    [self.imageArrM addObject:model];
+                }
+                for (NSDictionary *obj in planArr) {
+                    PBTaskScheduleModel *model = [PBTaskScheduleModel yy_modelWithDictionary:obj];
+                    model.MobileAddratio = model.Progress_MobileAddratio;
+                    [self.planTaskArrM addObject:model];
+                }
+                for (NSDictionary *obj in unplanArr) {
+                    PBTaskScheduleModel *model = [PBTaskScheduleModel yy_modelWithDictionary:obj];
+                    [self.unplanTaskArrM addObject:model];
+                }
+                [self.tableView reloadData];
+                if (self.planTaskArrM.count > 0) {
+                    PBTaskScheduleModel *model = self.planTaskArrM[0];
+                    self.unitText = model.Progress_MobileCompany;
+                } else if (self.unplanTaskArrM.count > 0){
+                    PBTaskScheduleModel *model = self.unplanTaskArrM[0];
+                    self.unitText = model.NoProgress_MobileCompany;
+                } else {
+                    self.unitText = nil;
+                }
+                self.headerView.unitText = self.unitText;
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+        
+    }
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
+    
+//    UITableViewController *tvc = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
+//    [self addChildViewController:tvc];
+//    self.tableView = tvc.tableView;
+    
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.tableFooterView = [UIView new];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 100.f;
+    [self.tableView registerClass:[PBPlanTaskTableViewCell class] forCellReuseIdentifier:PlanCellID];
+    [self.tableView registerClass:[PBunPlanTaskTableViewCell class] forCellReuseIdentifier:unPlanCellID];
+    [self.tableView registerClass:[PBScheduleImgTableViewCell class] forCellReuseIdentifier:ImageCellID];
+    [self.view addSubview:self.tableView];
+
+    if (@available(iOS 15.0, *)) {
+        self.tableView.sectionHeaderTopPadding = 0;
+    }
+    CGFloat bottomH = 64.f;
+    if (IS_IPHONE_X) {
+        bottomH = 64.f + IPHONE_X_BOTTOM;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+        make.bottom.equalTo(self.view).offset(-bottomH);
+    }];
+    UIButton *uploadImageBtn = [[UIButton alloc] init];
+    [uploadImageBtn setImage:[UIImage imageNamed:@"uploadImage"] forState:UIControlStateNormal];
+    [uploadImageBtn addTarget:self action:@selector(uploadImage) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:uploadImageBtn];
+    [uploadImageBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(self.view);
+        make.width.equalTo(@140);
+        make.height.equalTo(@48);
+    }];
+    
+    UIButton *addTaskBtn = [[UIButton alloc] init];
+    [addTaskBtn setImage:[UIImage imageNamed:@"add_task"] forState:UIControlStateNormal];
+    [addTaskBtn addTarget:self action:@selector(addTaskAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:addTaskBtn];
+    [addTaskBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.tableView.mas_bottom).offset(7);
+        make.left.equalTo(uploadImageBtn.mas_right);
+        make.right.equalTo(self.view);
+        make.height.equalTo(@48);
+    }];
+    PBTaskHeaderView *headerV = [[PBTaskHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 186)];
+    self.headerView = headerV;
+    headerV.schedulePlanModel = self.schedulePlanModel;
+    headerV.fillDate = self.fillDate;
+    headerV.unitText = self.unitText;
+    headerV.ChooseDate = ^{
+        if (self.isAdd) {
+            [self.view endEditing:YES];
+            [PBKeyWindow addSubview:self.editTimeView];
+            self.editTimeView.fillData = self.fillDate;
+            self.editTimeView.ChooseCompleteBlock = ^(BOOL isSelsected, NSString *date){
+                if (isSelsected) {
+                    date = [date stringByReplacingOccurrencesOfString:@"年" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"月" withString:@"-"];
+                    date = [date stringByReplacingOccurrencesOfString:@"日" withString:@""];
+                    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+                    [formatter setDateFormat:@"yyyy-MM-dd"];
+                    NSDate *newDate = [formatter dateFromString:date];
+                    NSString * dateStr = [formatter stringFromDate:newDate];
+                    self.fillDate = dateStr;
+                    self.headerView.fillDate = self.fillDate;
+                }
+            };
+            [self.editTimeView show];
+        }else {
+            [YJProgressHUD showMessage:@"无法修改日期" inView:self.view];
+        }
+    };
+    headerV.textEditBlock = ^(NSString * _Nonnull text) {
+        self.unitText = text;
+    };
+    self.tableView.tableHeaderView = headerV;
+    
+}
+- (void)addTaskAction {
+    UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"添加任务" message:@"" preferredStyle:(UIAlertControllerStyleActionSheet)];
+    UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"计划任务" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
+        PBTaskScheduleModel *task = [[PBTaskScheduleModel alloc] init];
+        [self.planTaskArrM addObject:task];
+        [self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
+    }];
+    UIAlertAction *alertA1 = [UIAlertAction actionWithTitle:@"非计划任务" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
+        PBTaskScheduleModel *task = [[PBTaskScheduleModel alloc] init];
+        [self.unplanTaskArrM addObject:task];
+        [self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:2] withRowAnimation:UITableViewRowAnimationFade];
+    }];
+    UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+    [alertC addAction:alertA];
+    [alertC addAction:alertA1];
+    [alertC addAction:cancel];
+    [self presentViewController:alertC animated:YES completion:nil];
+    
+}
+- (void)uploadImage {
+    [self.view endEditing:YES];
+    [self takePhotoLibrary];
+}
+#pragma mark - Table view data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return self.dataList.count;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSDictionary *item = self.dataList[section];
+    NSArray *arr = [item valueForKey:@"child"];
+    NSString *type = [item valueForKey:@"type"];
+    if ([type isEqualToString:@"image"]){
+        if (arr.count > 0) {
+            return 1;
+        }else {
+            return 0;
+        }
+    }
+    return arr.count;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    return 52;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    //最后一个
+    return 0.01;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
+    return nil;
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    UIView *bgView = [[UIView alloc]init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    UIView *iconV = [[UIView alloc] init];
+    iconV.backgroundColor = PBColor(95, 158, 249);
+    [bgView addSubview:iconV];
+    [iconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(20);
+        make.size.mas_equalTo(CGSizeMake(6, 20));
+        make.left.equalTo(bgView);
+    }];
+    NSDictionary *dict = self.dataList[section];
+    UILabel *nameL = [UILabel z_labelWithText:[dict valueForKey:@"name"] Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:18];
+    [bgView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(iconV);
+        make.left.equalTo(iconV.mas_right).offset(5);
+    }];
+    return bgView;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+ 
+    NSDictionary *item = self.dataList[indexPath.section];
+    NSString *type = [item valueForKey:@"type"];
+    NSArray *arr = [item valueForKey:@"child"];
+ 
+    if ([type isEqualToString:@"image"]) {
+        PBScheduleImgTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ImageCellID forIndexPath:indexPath];
+        cell.DeleteImageBlock = ^(NSInteger index) {
+            [self deleteImageWithIndex:index];
+        };
+        cell.imageArr = self.imageArrM;
+        return cell;
+    }else if ([type isEqualToString:@"planTask"]){
+        PBTaskScheduleModel *model = arr[indexPath.row];
+        PBPlanTaskTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PlanCellID forIndexPath:indexPath];
+        cell.taskScheduleModel = model;
+        cell.taskIndex = indexPath.row + 1;
+        cell.ChooseTaskBlock = ^{
+            [self.view endEditing:YES];
+            self.currentIndexPath = indexPath;
+            PBChooseOneTaskViewController *taskVC = [[PBChooseOneTaskViewController alloc] init];
+            taskVC.planModel = self.schedulePlanModel;
+            [self.navigationController pushViewController:taskVC animated:YES];
+        };
+        cell.DeleteBlock = ^{
+            [self.planTaskArrM removeObjectAtIndex:indexPath.row];
+            [self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }else {
+        PBTaskScheduleModel *model = arr[indexPath.row];
+        PBunPlanTaskTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:unPlanCellID forIndexPath:indexPath];
+        cell.taskScheduleModel = model;
+        cell.taskIndex = indexPath.row + 1;
+        cell.DeleteBlock = ^{
+            [self.unplanTaskArrM removeObjectAtIndex:indexPath.row];
+            [self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];
+        };
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+        return cell;
+    }
+    
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+- (void)takePhotoLibrary {
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {//未作出回应
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized) {
+                dispatch_async(dispatch_get_main_queue(), ^{//用户点击ok
+                    [self pushLFImagePickerController];
+                });
+            } else {
+                dispatch_async(dispatch_get_main_queue(), ^{//点击不允许访问
+                    NSLog(@"点击不允许访问");
+                });
+            }
+        }];
+    }else if (status == PHAuthorizationStatusRestricted) {//没有被授权访问 可能家长控制
+
+    }else if (status == PHAuthorizationStatusDenied) {//已明确否认相册权限
+        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"无法访问相册" message:@"请在iPhone的""设置-隐私-相册""中允许访问相册" preferredStyle:UIAlertControllerStyleAlert];
+        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            if (@available(iOS 10.0, *)) {
+                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
+            } else {
+                NSLog(@"选择取消");
+            }
+        }];
+        [alertController addAction:cancelAction];
+        [alertController addAction:okAction];
+        [self presentViewController:alertController animated:YES completion:nil];
+    }else if (status == PHAuthorizationStatusAuthorized){//有权限访问
+        [self pushLFImagePickerController];
+    }
+}
+- (void)pushLFImagePickerController {
+    LFImagePickerController *imagePicker = [[LFImagePickerController alloc] initWithMaxImagesCount:9 delegate:self];
+    imagePicker.allowTakePicture = YES;//内部显示相机
+    imagePicker.isSelectOriginalPhoto = YES;//是否选择原图
+    imagePicker.allowPickingType = LFPickingMediaTypePhoto;//用户是否可以选择视频
+    imagePicker.allowPickingOriginalPhoto = NO;//原图按钮将隐藏,用户将不能发送原图
+    imagePicker.maxPhotoBytes = 1024 * 1024 * 100;//最大图片所选字节大小
+    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0f) {
+        imagePicker.syncAlbum = YES; /** 实时同步相册 */
+    }
+//    imagePicker.selectedAssets = self.selectAssetArr;
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+#pragma mark - LFImagePickerControllerDelegate
+
+- (void)lf_imagePickerController:(LFImagePickerController *)picker didFinishPickingResult:(NSArray <LFResultObject /* <LFResultImage/LFResultVideo> */*> *)results {
+    NSMutableArray *imageArrM = [[NSMutableArray alloc] init];
+    for (NSInteger i = 0; i < results.count; i++) {
+        LFResultObject *result = results[i];
+        if ([result isKindOfClass:[LFResultImage class]]){
+            LFResultImage *resultImage = (LFResultImage *)result;
+            NSData *imageData = UIImageJPEGRepresentation(resultImage.originalImage, 0.5);
+            UIImage *originalImage = [UIImage imageWithData:imageData];
+            PBImageModel *imageModel = [[PBImageModel alloc] init];
+            imageModel.image = originalImage;
+            imageModel.name = @"";
+            [imageArrM addObject:imageModel];
+        }
+    }
+//    NSDictionary *dict = self.dataList[self.currentIndexPath.section];
+//    NSArray *arr = [dict valueForKey:@"child"];
+//    PBTaskScheduleModel *model = arr[self.currentIndexPath.row];
+//    [model.imageArr addObjectsFromArray:imageArrM.copy];
+//    [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:self.currentIndexPath,nil] withRowAnimation:UITableViewRowAnimationFade];
+    [self.imageArrM addObjectsFromArray:imageArrM];
+    [self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
+}
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel{
+      _schedulePlanModel = schedulePlanModel;
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    self.fillDate = [formatter stringFromDate:[NSDate date]];
+    self.creatName = Realname;
+    self.creatId = UserID;
+    self.isAdd = true;
+}
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    PBSchedulePlanModel *planModel = [[PBSchedulePlanModel alloc] init];
+    planModel.UID = scheduleListModel.MobilePA_ProjectID;
+    planModel.Name = scheduleListModel.MobilePA_ProjectName;
+    self.schedulePlanModel = planModel;
+    self.fillDate = scheduleListModel.MobilePA_Unittime;
+    self.creatName = scheduleListModel.MobilePA_CreateUser;
+    self.creatId = scheduleListModel.MobilePA_Createuserid;
+    self.isAdd = false;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+- (PBEditTimeView *)editTimeView {
+    if (_editTimeView == nil) {
+        _editTimeView = [[PBEditTimeView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+        _editTimeView.visualViewHeight = 300;
+    }
+    return _editTimeView;
+}
+-(NSMutableArray *)imageArrM {
+    if (_imageArrM == nil) {
+        _imageArrM = [[NSMutableArray alloc] init];
+    }
+    return _imageArrM;
+}
+- (NSMutableArray *)planTaskArrM {
+    if (_planTaskArrM == nil) {
+        _planTaskArrM = [[NSMutableArray alloc] init];
+    }
+    return _planTaskArrM;
+}
+
+- (NSMutableArray *)unplanTaskArrM {
+    if (_unplanTaskArrM == nil) {
+        _unplanTaskArrM = [[NSMutableArray alloc] init];
+    }
+    return _unplanTaskArrM;
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.h
new file mode 100644
index 0000000..ae81233
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.h
@@ -0,0 +1,17 @@
+//
+//  QQQRCodeVC.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/11.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface QQQRCodeVC : UIViewController
+@property (nonatomic, copy) void(^getPersonBlock)(NSString *personId);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.m
new file mode 100644
index 0000000..8cfea83
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/ViewControllers/QQQRCodeVC.m
@@ -0,0 +1,210 @@
+//
+//  QQQRCodeVC.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/11.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "QQQRCodeVC.h"
+#import "SGQRCode.h"
+//#import "WebViewController.h"
+
+@interface QQQRCodeVC ()<SGScanCodeDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
+    SGScanCode *scanCode;
+}
+@property (nonatomic, strong) SGScanView *scanView;
+@property (nonatomic, strong) UILabel *promptLabel;
+
+@end
+
+@implementation QQQRCodeVC
+
+- (void)dealloc {
+    NSLog(@"QQQRCodeVC - dealloc");
+    
+    [self stop];
+}
+
+- (void)start {
+    [scanCode startRunning];
+    [self.scanView startScanning];
+}
+
+- (void)stop {
+    [scanCode stopRunning];
+    [self.scanView stopScanning];
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view from its nib.
+    self.view.backgroundColor = [UIColor blackColor];
+    
+    [self configureNav];
+    
+    [self configureUI];
+    
+    [self configureQRCode];
+}
+
+- (void)configureUI {
+    [self.view addSubview:self.scanView];
+    [self.view addSubview:self.promptLabel];
+}
+
+- (void)configureQRCode {
+    scanCode = [SGScanCode scanCode];
+    scanCode.preview = self.view;
+    scanCode.delegate = self;
+    [scanCode startRunning];
+}
+
+- (void)scanCode:(SGScanCode *)scanCode result:(NSString *)result {
+    [self stop];
+    
+    [scanCode playSoundEffect:@"SGQRCode.bundle/scan_end_sound.caf"];
+
+//    WebViewController *jumpVC = [[WebViewController alloc] init];
+//    jumpVC.comeFromVC = ComeFromWC;
+//    [self.navigationController pushViewController:jumpVC animated:YES];
+
+//    if ([result hasPrefix:@"http"]) {
+//
+//    } else {
+////        jumpVC.jump_bar_code = result;
+//    }
+    if (self.getPersonBlock) {
+        self.getPersonBlock(result);
+    }
+    [self.navigationController popViewControllerAnimated:YES];
+}
+
+- (void)configureNav {
+    self.navigationItem.title = @"扫一扫";
+    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"相册" style:(UIBarButtonItemStyleDone) target:self action:@selector(rightBarButtonItenAction)];
+}
+
+- (void)rightBarButtonItenAction {
+    [SGPermission permissionWithType:SGPermissionTypePhoto completion:^(SGPermission * _Nonnull permission, SGPermissionStatus status) {
+        if (status == SGPermissionStatusNotDetermined) {
+            [permission request:^(BOOL granted) {
+                if (granted) {
+                    NSLog(@"第一次授权成功");
+                    [self _enterImagePickerController];
+                } else {
+                    NSLog(@"第一次授权失败");
+                }
+            }];
+        } else if (status == SGPermissionStatusAuthorized) {
+            NSLog(@"SGPermissionStatusAuthorized");
+            [self _enterImagePickerController];
+        } else if (status == SGPermissionStatusDenied) {
+            NSLog(@"SGPermissionStatusDenied");
+            NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
+            NSString *app_Name = [infoDict objectForKey:@"CFBundleDisplayName"];
+            if (app_Name == nil) {
+                app_Name = [infoDict objectForKey:@"CFBundleName"];
+            }
+            
+            NSString *messageString = [NSString stringWithFormat:@"[前往:设置 - 隐私 - 照片 - %@] 允许应用访问", app_Name];
+            UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"温馨提示" message:messageString preferredStyle:(UIAlertControllerStyleAlert)];
+            UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:nil];
+            
+            [alertC addAction:alertA];
+            [self presentViewController:alertC animated:YES completion:nil];
+        } else if (status == SGPermissionStatusRestricted) {
+            NSLog(@"SGPermissionStatusRestricted");
+            UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"由于系统原因, 无法访问相册" preferredStyle:(UIAlertControllerStyleAlert)];
+            UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:nil];
+            [alertC addAction:alertA];
+            [self presentViewController:alertC animated:YES completion:nil];
+        }
+    }];
+}
+
+- (void)_enterImagePickerController {
+    [self stop];
+
+    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
+    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
+    imagePicker.delegate = self;
+    imagePicker.modalPresentationStyle = UIModalPresentationCustom;
+    [self presentViewController:imagePicker animated:YES completion:nil];
+}
+
+#pragma mark - - UIImagePickerControllerDelegate 的方法
+- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
+    [self dismissViewControllerAnimated:YES completion:nil];
+    [self start];
+}
+
+- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
+    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
+    [scanCode readQRCode:image completion:^(NSString *result) {
+        if (result == nil) {
+            [self dismissViewControllerAnimated:YES completion:nil];
+            [self start];
+            NSLog(@"未识别出二维码");
+        } else {
+            [self dismissViewControllerAnimated:YES completion:^{
+//                WebViewController *jumpVC = [[WebViewController alloc] init];
+//                jumpVC.comeFromVC = ComeFromWC;
+//                [self.navigationController pushViewController:jumpVC animated:YES];
+//
+//                if ([result hasPrefix:@"http"]) {
+//                    jumpVC.jump_URL = result;
+//                } else {
+//                    jumpVC.jump_bar_code = result;
+//                }
+                if (self.getPersonBlock) {
+                    self.getPersonBlock(result);
+                }
+                [self.navigationController popViewControllerAnimated:YES];
+            }];
+        }
+    }];
+}
+
+- (SGScanView *)scanView {
+    if (!_scanView) {
+        SGScanViewConfigure *configure = [[SGScanViewConfigure alloc] init];
+        configure.isShowBorder = YES;
+        configure.borderColor = [UIColor clearColor];
+        configure.cornerColor = [UIColor whiteColor];
+        configure.cornerWidth = 3;
+        configure.cornerLength = 15;
+        configure.isFromTop = YES;
+        configure.scanline = @"SGQRCode.bundle/scan_scanline_qq";
+        configure.color = [UIColor clearColor];
+        
+        CGFloat x = 0;
+        CGFloat y = 0;
+        CGFloat w = self.view.frame.size.width;
+        CGFloat h = self.view.frame.size.height;
+        _scanView = [[SGScanView alloc] initWithFrame:CGRectMake(x, y, w, h) configure:configure];
+        [_scanView startScanning];
+        _scanView.scanFrame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
+    }
+    return _scanView;
+}
+
+- (UILabel *)promptLabel {
+    if (!_promptLabel) {
+        _promptLabel = [[UILabel alloc] init];
+        _promptLabel.backgroundColor = [UIColor clearColor];
+        CGFloat promptLabelX = 0;
+        CGFloat promptLabelY = 0.73 * self.view.frame.size.height;
+        CGFloat promptLabelW = self.view.frame.size.width;
+        CGFloat promptLabelH = 25;
+        _promptLabel.frame = CGRectMake(promptLabelX, promptLabelY, promptLabelW, promptLabelH);
+        _promptLabel.textAlignment = NSTextAlignmentCenter;
+        _promptLabel.font = [UIFont boldSystemFontOfSize:13.0];
+        _promptLabel.textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.6];
+        _promptLabel.text = @"将二维码/条码放入框内, 即可自动扫描";
+    }
+    return _promptLabel;
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.h
new file mode 100644
index 0000000..b9e4534
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.h
@@ -0,0 +1,27 @@
+//
+//  PBChooseType.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSitePerModel;
+@class PBSiteMaterialModel;
+@class PBSiteMechanicalModel;
+@class PBPanoramaModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBChooseType : UIView
+@property (nonatomic, assign) NSInteger visualViewHeight;
+@property (nonatomic, strong) PBSitePerModel *sitePerModel;
+@property (nonatomic, strong) NSArray *dateList;
+@property (nonatomic, strong) PBSiteMaterialModel *siteMaterialModel;
+@property (nonatomic, strong) PBSiteMechanicalModel *siteMechanicalModel;
+@property (nonatomic, strong) PBPanoramaModel *panoramaModel;
+@property (nonatomic, copy) void(^ChooseCompleteBlock)(BOOL isSelsected, NSInteger index);
+- (void)show;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.m
new file mode 100644
index 0000000..7ee00e1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBChooseType.m
@@ -0,0 +1,182 @@
+//
+//  PBChooseType.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBChooseType.h"
+#import "PBSitePerModel.h"
+#import "PBPerPlanModel.h"
+#import "PBSiteMaterialModel.h"
+#import "PBMaterialPlanModel.h"
+#import "PBMechanicalPlanModel.h"
+#import "PBSiteMechanicalModel.h"
+#import "PBPanoramaModel.h"
+
+@interface PBChooseType()<UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, strong)  UIView *bgView;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, assign) BOOL isSelsected;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, assign) NSInteger index;
+@end
+@implementation PBChooseType
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        [self addSubview:self.bgView];
+        
+        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bgView.bounds      byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight   cornerRadii:CGSizeMake(10, 10)];
+        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+        maskLayer.frame = self.bgView.bounds;
+        maskLayer.path = maskPath.CGPath;
+        self.bgView.layer.mask = maskLayer;
+        [self setupUI];
+    }
+    return self;
+}
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    CGPoint point = [[touches anyObject]locationInView:self];
+    CALayer *layer = [self.layer hitTest:point];
+    if (layer == self.layer) {
+        self.isSelsected = NO;
+        [self hidden];
+    }
+}
+- (void)hidden {
+    if (self.ChooseCompleteBlock) {
+        self.ChooseCompleteBlock(self.isSelsected, self.index);
+    }
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.bgView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBChooseType class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        self.bgView.y = PBScreenHeight - self.visualViewHeight;
+    }];
+}
+#pragma mark - 懒加载
+- (UIView *)bgView {
+    if (_bgView ==  nil) {
+        _bgView = [[UIView alloc]initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, PBScreenHeight)];
+        _bgView.backgroundColor = [UIColor whiteColor];
+    }
+    return _bgView;
+}
+- (void)setVisualViewHeight:(NSInteger)visualViewHeight {
+    _visualViewHeight = visualViewHeight;
+}
+
+- (void)setupUI {
+    UILabel *promptL =[UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    promptL.textAlignment = NSTextAlignmentCenter;
+    [self.bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(12);
+        make.left.equalTo(self.bgView).offset(20);
+        make.right.equalTo(self.bgView).offset(-20);
+        make.height.equalTo(@18);
+    }];
+    UIView *linView = [[UIView alloc] init];
+    linView.backgroundColor = PBColor(244, 245, 246);
+    [self.bgView addSubview:linView];
+    [linView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.bgView).offset(42);
+        make.left.equalTo(self.bgView).offset(25);
+        make.right.equalTo(self.bgView).offset(-25);
+        make.height.equalTo(@1);
+    }];
+   
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.dataSource = self;
+    self.tableView.delegate = self;
+    self.tableView.backgroundColor = [UIColor whiteColor];
+    self.tableView.tableFooterView = [UIView new];
+//    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    self.tableView.showsVerticalScrollIndicator = NO;
+    self.tableView.rowHeight = 44;
+    [self.bgView addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(linView.mas_bottom);
+        make.right.equalTo(self.bgView).offset(-10);
+        make.left.equalTo(self.bgView).offset(10);
+        make.height.equalTo(@220);
+    }];
+    self.promptL = promptL;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dateList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if(self.sitePerModel) {
+        PBPerPlanModel *planModel = self.dateList[indexPath.row];
+        UITableViewCell *cell = [[UITableViewCell alloc] init];
+        cell.textLabel.text = planModel.Mobile_UserType;
+        return cell;
+    }else if(self.siteMaterialModel){
+        PBMaterialPlanModel *planModel = self.dateList[indexPath.row];
+        UITableViewCell *cell = [[UITableViewCell alloc] init];
+        cell.textLabel.text = planModel.Materials_Name;
+        return cell;
+    }else if (self.siteMechanicalModel) {
+        PBMechanicalPlanModel *planModel = self.dateList[indexPath.row];
+        UITableViewCell *cell = [[UITableViewCell alloc] init];
+        cell.textLabel.text = planModel.Machine_Name;
+        return cell;
+    }else if (self.panoramaModel) {
+        NSDictionary *dict =  self.dateList[indexPath.row];
+        UITableViewCell *cell = [[UITableViewCell alloc] init];
+        cell.textLabel.text = [dict valueForKey:@"LabelName"];
+        return cell;
+    } else {
+        UITableViewCell *cell = [[UITableViewCell alloc] init];
+        return cell;
+    }
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    self.index = indexPath.row;
+    self.isSelsected = YES;
+    [self hidden];
+}
+- (void)setDateList:(NSArray *)dateList {
+    _dateList = dateList;
+    [self.tableView reloadData];
+}
+- (void)setSitePerModel:(PBSitePerModel *)sitePerModel{
+    _sitePerModel = sitePerModel;
+    self.promptL.text = @"请选择工种";
+}
+- (void)setSiteMaterialModel:(PBSiteMaterialModel *)siteMaterialModel {
+    _siteMaterialModel = siteMaterialModel;
+    self.promptL.text = @"请选择机械";
+}
+- (void)setSiteMechanicalModel:(PBSiteMechanicalModel *)siteMechanicalModel {
+    _siteMechanicalModel = siteMechanicalModel;
+    self.promptL.text = @"请选择材料";
+}
+- (void)setPanoramaModel:(PBPanoramaModel *)panoramaModel {
+    _panoramaModel = panoramaModel;
+    self.promptL.text = @"请选择标签";
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.h
new file mode 100644
index 0000000..22e9cce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBImgAndNameCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/9.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBImageModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBImgAndNameCollectionViewCell : UICollectionViewCell
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, copy) void(^DeleteImageBlock)(void);
+@property (nonatomic, strong) PBImageModel *model;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.m
new file mode 100644
index 0000000..a5022cb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBImgAndNameCollectionViewCell.m
@@ -0,0 +1,106 @@
+//
+//  PBImgAndNameCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/9.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBImgAndNameCollectionViewCell.h"
+#import "PBImageModel.h"
+
+@interface PBImgAndNameCollectionViewCell()<UITextFieldDelegate>
+@property (nonatomic, weak) UIButton *deleteBtn;
+@property (nonatomic, weak) UITextField *nameTF;
+//@property (nonatomic, strong) UIToolbar *kbToolbar;
+@end
+@implementation PBImgAndNameCollectionViewCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"]];
+    imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self.contentView);
+        make.height.equalTo(@96);
+    }];
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"Issue_image_delete"]];
+    [deleteBtn addTarget:self action:@selector(deleteImage) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(5);
+        make.right.equalTo(self.contentView).offset(-5);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UITextField *nameTF = [[UITextField alloc] init];
+    nameTF.placeholder = @"请输入";
+    nameTF.textAlignment= NSTextAlignmentLeft;
+    nameTF.textColor = PBColor(40, 58, 79);
+    nameTF.font = [UIFont fontWithName:Coarse size:16.0];
+    nameTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    nameTF.delegate = self;
+    nameTF.layer.cornerRadius = 4;
+    nameTF.layer.borderWidth = 1.f;
+    nameTF.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    nameTF.leftViewMode = UITextFieldViewModeAlways;
+    nameTF.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 12, 44)];
+    [self.contentView addSubview:nameTF];
+    [nameTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV.mas_bottom).offset(8);
+        make.left.right.equalTo(imageV);
+        make.height.equalTo(@36);
+    }];
+//    nameTF.inputAccessoryView = self.kbToolbar;
+    self.imageV = imageV;
+    self.deleteBtn = deleteBtn;
+    self.nameTF = nameTF;
+}
+
+- (void)deleteImage {
+    if (self.DeleteImageBlock) {
+        self.DeleteImageBlock();
+    }
+}
+
+- (void)setModel:(PBImageModel *)model {
+    _model = model;
+    if (model.bf_path) {
+        NSString *imageUrl = [NSString stringWithFormat:@"%@%@",BaseUrl, _model.bf_path];
+        [self.imageV sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"schedule_def"]];
+        self.nameTF.text = _model.bf_filename;
+        self.nameTF.backgroundColor = PBColor(243, 243, 243);
+    }else {
+        self.imageV.image = _model.image;
+        self.nameTF.text = _model.name;
+        self.nameTF.backgroundColor = [UIColor whiteColor];
+    }
+    
+}
+//- (UIToolbar *) kbToolbar {
+//    if (_kbToolbar == nil) {
+//        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+//        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+//        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+//    }
+//    return _kbToolbar;
+//}
+//- (void)closeKeyboard {
+//    [self endEditing:YES];
+//}
+#pragma mark - UITextFieldDelegate
+- (void)textFieldDidEndEditing:(UITextField *)textField{
+    self.model.name = textField.text;
+}
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
+    if (self.model.image) {
+        return YES;
+    } else {
+        return NO;
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.h
new file mode 100644
index 0000000..198f34f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.h
@@ -0,0 +1,23 @@
+//
+//  PBMateralTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZJF on 2022/9/4.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSiteMechanicalModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBMateralTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^ChooseTimeBlock)(void);
+@property (nonatomic, copy) void(^ChooseTypeBlock)(void);
+@property (nonatomic, copy) void(^AddElementBlock)(void);
+@property (nonatomic, copy) void(^DeleteElementBlock)(NSArray *elements);
+@property (nonatomic, copy) void(^DeleteBlock)(void);
+@property (nonatomic, strong) PBSiteMechanicalModel *siteMechanicalModel;
+@property (nonatomic, assign) NSInteger materialIndex;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.m
new file mode 100644
index 0000000..8ab5373
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBMateralTableViewCell.m
@@ -0,0 +1,583 @@
+//
+//  PBMateralTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZJF on 2022/9/4.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBMateralTableViewCell.h"
+#import "PBSiteMechanicalModel.h"
+#import "PBSchedulesElementTableViewCell.h"
+#import "PBArtifactsInfoModel.h"
+
+#define maxTextCount 200
+static NSString *const CellID = @"CellID";
+@interface PBMateralTableViewCell()<UITextFieldDelegate, UITextViewDelegate, UITableViewDelegate, UITableViewDataSource>
+@property (nonatomic, weak) UILabel *taskNameL; //材料1
+@property (nonatomic, weak) UILabel *chooseTaskL; //所选材料类型
+@property (nonatomic, weak) UITableView *tableView; //部位
+@property (nonatomic, weak) UITextField *specificationTF; //规格
+@property (nonatomic, weak) UITextField *materialUnitTF; //单位
+@property (nonatomic, weak) UILabel *totalNumL;//材料总量
+@property (nonatomic, weak) UITextField *approachTF; //当日进厂量
+@property (nonatomic, weak) UILabel *addupNumL; //累计进厂量
+@property (nonatomic, weak) UITextView *textView;//生产情况
+@property (nonatomic, weak) UILabel *arrivalTimePrL;//预计进场时间
+@property (nonatomic, weak) UITextView *remarktextView;// 备注
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, weak) UILabel *prompt1L;
+//@property (nonatomic, strong) UIToolbar *kbToolbar;
+@property (nonatomic, strong) NSMutableArray *elements;
+@end
+@implementation PBMateralTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UILabel *taskNameL = [UILabel z_labelWithText:@"人员1" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:14];
+    [self.contentView addSubview:taskNameL];
+    [taskNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(deleteBtn);
+        make.left.equalTo(deleteBtn.mas_right).offset(8);
+    }];
+    UIButton *chooseTask = [[UIButton alloc] init];
+    [chooseTask addTarget:self action:@selector(choosetype) forControlEvents:UIControlEventTouchUpInside];
+    chooseTask.layer.cornerRadius = 4;
+    chooseTask.layer.borderWidth = 1.f;
+    chooseTask.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:chooseTask];
+    [chooseTask mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(deleteBtn.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@44);
+    }];
+    UILabel *chooseTaskL = [UILabel z_labelWithText:@"请选择" Color:[UIColor z_colorWithR:174 G:174 B:174] isBold:NO Font:14];
+    [self.contentView addSubview:chooseTaskL];
+    [chooseTaskL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(chooseTask).offset(12);
+        make.right.equalTo(chooseTask).offset(-44);
+        make.centerY.equalTo(chooseTask);
+    }];
+    UIImageView *chooseImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chooseTask_icon"]];
+    [self.contentView addSubview:chooseImageV];
+    [chooseImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(chooseTask).offset(18);
+        make.right.equalTo(chooseTask).offset(-14);
+        make.size.mas_equalTo(CGSizeMake(12, 10));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"部位" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(chooseTask.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+        make.height.equalTo(@16);
+    }];
+    UIButton *addPart = [UIButton z_bgImageButton:[UIImage imageNamed:@"addPart_btn"]];
+    [addPart addTarget:self action:@selector(addPart) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:addPart];
+    [addPart mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeL.mas_bottom).offset(6);
+        make.left.right.height.equalTo(chooseTask);
+    }];
+    UITableView *tableView = [[UITableView alloc] init];
+    tableView.dataSource = self;
+    tableView.delegate = self;
+    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+//    tableView.showsVerticalScrollIndicator = NO;
+    tableView.rowHeight = 44.f;
+    [tableView registerClass:[PBSchedulesElementTableViewCell class] forCellReuseIdentifier:CellID];
+    [self.contentView addSubview:tableView];
+    [tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(addPart.mas_bottom).offset(6);
+        make.left.right.equalTo(chooseTask);
+        make.height.equalTo(@100);
+    }];
+    
+    UILabel *specificationL = [UILabel z_labelWithText:@"规格" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:specificationL];
+    [specificationL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(tableView.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+        make.height.equalTo(@16);
+    }];
+    UITextField *specificationTF = [[UITextField alloc] init];
+    specificationTF.placeholder = @"请输入...";
+    specificationTF.textAlignment= NSTextAlignmentLeft;
+    specificationTF.textColor = PBColor(40, 58, 79);
+    specificationTF.font = [UIFont fontWithName:Coarse size:14.0];
+    specificationTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    specificationTF.delegate = self;
+    specificationTF.layer.cornerRadius = 4;
+    specificationTF.layer.borderWidth = 1.f;
+    specificationTF.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    specificationTF.leftViewMode = UITextFieldViewModeAlways;
+    specificationTF.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 12, 44)];
+    [self.contentView addSubview:specificationTF];
+    [specificationTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(specificationL.mas_bottom).offset(6);
+        make.left.right.height.equalTo(chooseTask);
+    }];
+    
+    UILabel *materialUnitL = [UILabel z_labelWithText:@"单位" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:materialUnitL];
+    [materialUnitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(specificationTF.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+        make.height.equalTo(@16);
+    }];
+    UITextField *materialUnitTF = [[UITextField alloc] init];
+    materialUnitTF.placeholder = @"请输入...";
+    materialUnitTF.textAlignment= NSTextAlignmentLeft;
+    materialUnitTF.textColor = PBColor(40, 58, 79);
+    materialUnitTF.font = [UIFont fontWithName:Coarse size:14.0];
+    materialUnitTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    materialUnitTF.delegate = self;
+    materialUnitTF.layer.cornerRadius = 4;
+    materialUnitTF.layer.borderWidth = 1.f;
+    materialUnitTF.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    materialUnitTF.leftViewMode = UITextFieldViewModeAlways;
+    materialUnitTF.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 12, 44)];
+    [self.contentView addSubview:materialUnitTF];
+    [materialUnitTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(materialUnitL.mas_bottom).offset(6);
+        make.left.right.height.equalTo(chooseTask);
+    }];
+    
+    UILabel *totalL = [UILabel z_labelWithText:@"材料总量:" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:totalL];
+    [totalL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(materialUnitTF.mas_bottom).offset(16);
+        make.left.height.equalTo(chooseTask);
+    }];
+    UILabel *totalNumL = [UILabel z_labelWithText:@"  223" Color:[UIColor z_colorWithR:40 G:58 B:79] isBold:YES Font:14];
+    totalNumL.backgroundColor = PBColor(243, 243, 244);
+    [totalNumL circleViewWithRadius:4];
+    [self.contentView addSubview:totalNumL];
+    [totalNumL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(totalL);
+        make.left.equalTo(self.contentView).offset(100);
+        make.right.height.equalTo(chooseTask);
+    }];
+    
+    UILabel *approachL = [UILabel z_labelWithText:@"当日进场量:" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:approachL];
+    [approachL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(totalNumL.mas_bottom).offset(16);
+        make.left.height.equalTo(chooseTask);
+    }];
+    UITextField *approachTF = [[UITextField alloc] init];
+    approachTF.placeholder = @"请输入...";
+    approachTF.textAlignment= NSTextAlignmentLeft;
+    approachTF.textColor = PBColor(40, 58, 79);
+    approachTF.font = [UIFont fontWithName:Coarse size:14.0];
+    approachTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    approachTF.delegate = self;
+    approachTF.layer.cornerRadius = 4;
+    approachTF.layer.borderWidth = 1.f;
+    approachTF.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    approachTF.leftViewMode = UITextFieldViewModeAlways;
+    approachTF.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 12, 44)];
+    [self.contentView addSubview:approachTF];
+    [approachTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(approachL);
+        make.left.equalTo(self.contentView).offset(100);
+        make.right.height.equalTo(chooseTask);
+    }];
+    
+    UILabel *addupL = [UILabel z_labelWithText:@"累计进场量:" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:addupL];
+    [addupL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(approachTF.mas_bottom).offset(16);
+        make.left.height.equalTo(chooseTask);
+    }];
+    UILabel *addupNumL = [UILabel z_labelWithText:@"  2123" Color:[UIColor z_colorWithR:40 G:58 B:79] isBold:YES Font:16];
+    addupNumL.backgroundColor = PBColor(243, 243, 244);
+    [addupNumL circleViewWithRadius:4];
+    [self.contentView addSubview:addupNumL];
+    [addupNumL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(addupL);
+        make.left.equalTo(self.contentView).offset(100);
+        make.right.height.equalTo(chooseTask);
+    }];
+    
+    UILabel *generationL = [UILabel z_labelWithText:@"生产情况:" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:generationL];
+    [generationL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(addupNumL.mas_bottom).offset(16);
+        make.left.height.equalTo(chooseTask);
+    }];
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(generationL);
+        make.left.equalTo(self.contentView).offset(100);
+        make.right.equalTo(chooseTask);
+        make.height.equalTo(@132);
+    }];
+    bgView.layer.cornerRadius = 4;
+    bgView.layer.borderWidth = 1;
+    bgView.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= PBColor(40, 58, 79);
+    textView.font = [UIFont boldSystemFontOfSize:14];
+    textView.delegate = self;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(10);
+        make.left.equalTo(bgView).offset(10);
+        make.right.equalTo(bgView).offset(-10);
+        make.bottom.equalTo(bgView).offset(-10);
+    }];
+//    textView.inputAccessoryView = self.kbToolbar;
+
+    UILabel *promptL= [UILabel z_labelWithText:@"请输入..." Color:PBColor(174, 174, 174) isBold:YES Font:14];
+    [bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+    
+    UILabel *arrivalTimeL = [UILabel z_labelWithText:@"预计到场:" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:arrivalTimeL];
+    [arrivalTimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView.mas_bottom).offset(16);
+        make.left.height.equalTo(chooseTask);
+    }];
+    UIButton *arrivalTime = [[UIButton alloc] init];
+    [arrivalTime addTarget:self action:@selector(chooseTime) forControlEvents:UIControlEventTouchUpInside];
+    arrivalTime.layer.cornerRadius = 4;
+    arrivalTime.layer.borderWidth = 1.f;
+    arrivalTime.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:arrivalTime];
+    [arrivalTime mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(arrivalTimeL);
+        make.left.equalTo(self.contentView).offset(100);
+        make.right.equalTo(chooseTask);
+        make.height.equalTo(@44);
+    }];
+    UILabel *arrivalTimePrL = [UILabel z_labelWithText:@"请选择" Color:[UIColor z_colorWithR:174 G:174 B:174] isBold:NO Font:14];
+    [self.contentView addSubview:arrivalTimePrL];
+    [arrivalTimePrL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(arrivalTime).offset(12);
+        make.right.equalTo(arrivalTime).offset(-44);
+        make.centerY.equalTo(arrivalTime);
+    }];
+    UIImageView *timeImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"date_btn"]];
+    [self.contentView addSubview:timeImageV];
+    [timeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(arrivalTime).offset(10);
+        make.right.equalTo(arrivalTime).offset(-10);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    
+    UILabel *remarkL = [UILabel z_labelWithText:@"备注:" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:remarkL];
+    [remarkL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(arrivalTimeL.mas_bottom).offset(16);
+        make.left.height.equalTo(chooseTask);
+    }];
+    UIView *remarkbgView = [[UIView alloc] init];
+    remarkbgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:remarkbgView];
+    [remarkbgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(remarkL);
+        make.left.equalTo(self.contentView).offset(100);
+        make.right.equalTo(chooseTask);
+        make.bottom.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@132);
+    }];
+    remarkbgView.layer.cornerRadius = 4;
+    remarkbgView.layer.borderWidth = 1;
+    remarkbgView.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    
+    UITextView *remarktextView = [[UITextView alloc] init];
+    remarktextView.textColor= PBColor(40, 58, 79);
+    remarktextView.font = [UIFont boldSystemFontOfSize:14];
+    remarktextView.delegate = self;
+    [remarkbgView addSubview:remarktextView];
+    [remarktextView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(remarkbgView).offset(10);
+        make.left.equalTo(remarkbgView).offset(10);
+        make.right.equalTo(remarkbgView).offset(-10);
+        make.bottom.equalTo(remarkbgView).offset(-10);
+    }];
+//    remarktextView.inputAccessoryView = self.kbToolbar;
+
+    UILabel *prompt1L= [UILabel z_labelWithText:@"请输入..." Color:PBColor(174, 174, 174) isBold:YES Font:14];
+    [remarkbgView addSubview:prompt1L];
+    [prompt1L mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(remarktextView).offset(8);
+        make.left.equalTo(remarktextView).offset(6);
+    }];
+//    specificationTF.inputAccessoryView = self.kbToolbar;
+//    materialUnitTF.inputAccessoryView = self.kbToolbar;
+//    approachTF.inputAccessoryView = self.kbToolbar;
+    self.taskNameL = taskNameL;
+    self.chooseTaskL = chooseTaskL;
+    self.tableView = tableView;
+    self.specificationTF = specificationTF;
+    self.materialUnitTF = materialUnitTF;
+    self.totalNumL = totalNumL;
+    self.approachTF = approachTF;
+    self.addupNumL = addupNumL;
+    self.textView = textView;
+    self.arrivalTimePrL = arrivalTimePrL;
+    self.remarktextView = remarktextView;
+    self.promptL = promptL;
+    self.prompt1L = prompt1L;
+
+}
+
+- (void)choosetype {
+    if (self.ChooseTypeBlock) {
+        self.ChooseTypeBlock();
+    }
+}
+- (void)chooseTime {
+    if (self.ChooseTimeBlock) {
+        self.ChooseTimeBlock();
+    }
+}
+- (void)addPart {
+    if(self.AddElementBlock) {
+        self.AddElementBlock();
+    }
+}
+- (void)deleteAction {
+    if (self.DeleteBlock) {
+        self.DeleteBlock();
+    }
+}
+- (void)setSiteMechanicalModel:(PBSiteMechanicalModel *)siteMechanicalModel {
+    _siteMechanicalModel = siteMechanicalModel;
+    if (siteMechanicalModel.MachineDetial_Name == nil) {
+        self.chooseTaskL.textColor = PBColor(174, 174, 174);
+        self.chooseTaskL.text = @"请选择";
+    }else {
+        self.chooseTaskL.textColor = PBColor(51, 51, 51);
+        self.chooseTaskL.text = siteMechanicalModel.MachineDetial_Name;
+    }
+    
+    self.elements = siteMechanicalModel.elementList.mutableCopy;
+    NSInteger tableH = 44 * self.elements.count;
+    [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@(tableH));
+    }];
+    [self.tableView reloadData];
+    
+ 
+    self.specificationTF.text = siteMechanicalModel.MachineDetial_Size;
+    self.materialUnitTF.text = siteMechanicalModel.MachineDetial_Unit;
+    if (siteMechanicalModel.MachineDetial_Sum==nil){
+        siteMechanicalModel.MachineDetial_Sum = @"";
+    }
+    self.totalNumL.text = [NSString stringWithFormat:@"  %@",siteMechanicalModel.MachineDetial_Sum];
+    self.approachTF.text = siteMechanicalModel.MachineDetial_Approcach;
+    if (siteMechanicalModel.MachineDetial_Add==nil){
+        siteMechanicalModel.MachineDetial_Add = @"";
+    }
+    self.addupNumL.text = [NSString stringWithFormat:@"  %@",siteMechanicalModel.MachineDetial_Add];
+    self.textView.text = siteMechanicalModel.MachineDetial_Product;
+    if (self.textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    
+    if (siteMechanicalModel.MachineDetial_Estimated == nil) {
+        self.arrivalTimePrL.textColor = PBColor(174, 174, 174);
+        self.arrivalTimePrL.text = @"请选择日期";
+    }else {
+        self.arrivalTimePrL.textColor = PBColor(51, 51, 51);
+        self.arrivalTimePrL.text = siteMechanicalModel.MachineDetial_Estimated;
+    }
+    
+    self.remarktextView.text = siteMechanicalModel.MachineDetial_Remark;
+    if (self.remarktextView.text.length == 0) {
+        self.prompt1L.hidden = NO;
+    }else {
+        self.prompt1L.hidden = YES;
+    }
+}
+
+-(void)setMaterialIndex:(NSInteger)materialIndex {
+    _materialIndex = materialIndex;
+    self.taskNameL.text = [NSString stringWithFormat:@"材料%zd",materialIndex];
+}
+//- (UIToolbar *) kbToolbar {
+//    if (_kbToolbar == nil) {
+//        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+//        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+//        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+//    }
+//    return _kbToolbar;
+//}
+//- (void)closeKeyboard {
+//    [self endEditing:YES];
+//}
+
+#pragma mark - UITextFieldDelegate
+- (void)textFieldDidEndEditing:(UITextField *)textField{
+    if (textField == self.specificationTF) {
+        self.siteMechanicalModel.MachineDetial_Size = textField.text;
+    }else if (textField == self.materialUnitTF){
+        self.siteMechanicalModel.MachineDetial_Unit =  textField.text;
+    }else {
+        self.siteMechanicalModel.MachineDetial_Approcach = textField.text;
+        NSInteger approcach = [self.siteMechanicalModel.MachineDetial_Approcach integerValue];
+        NSInteger total = [self.siteMechanicalModel.MachineDetialAdd integerValue];
+        self.siteMechanicalModel.MachineDetial_Add = [NSString stringWithFormat:@"%zd",approcach + total];
+        self.addupNumL.text = [NSString stringWithFormat:@"  %@", self.siteMechanicalModel.MachineDetial_Add];
+    }
+}
+#pragma mark - UITextViewDelegate
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
+ replacementText:(NSString *)text {
+    NSLog(@"%zd",textView.text.length);
+    NSLog(@"===shouldChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //获取高亮部分内容
+    //NSString * selectedtext = [textView textInRange:selectedRange];
+    //如果有高亮且当前字数开始位置小于最大限制时允许输入
+    if (selectedRange && pos) {
+        NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
+        NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
+        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
+        if (offsetRange.location < maxTextCount) {
+            return YES;
+        }
+        else{
+            return NO;
+        }
+    }
+    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    NSInteger caninputlen = maxTextCount - comcatstr.length;
+    if (caninputlen >= 0){
+        return YES;
+    }else{
+        NSInteger len = text.length + caninputlen;
+        //防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
+        NSRange rg = {0,MAX(len,0)};
+        if (rg.length > 0){
+            NSString *s = @"";
+            //判断是否只普通的字符或asc码(对于中文和表情返回NO)
+            BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
+            if (asc) {
+                s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
+            }else{
+                __block NSInteger idx = 0;
+                __block NSString  *trimString = @"";//截取出的字串
+                //使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
+                [text enumerateSubstringsInRange:NSMakeRange(0, [text length])
+                                         options:NSStringEnumerationByComposedCharacterSequences
+                                      usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
+                                          if (idx >= rg.length) {
+                                              *stop = YES; //取出所需要就break,提高效率
+                                              return ;
+                                          }
+                                          trimString = [trimString stringByAppendingString:substring];
+                                          idx++;
+                                      }];
+                s = trimString;
+            }
+            //rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
+            [textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
+            //既然是超出部分截取了,哪一定是最大限制了。
+//            self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
+        }
+        return NO;
+    }
+}
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView == self.textView) {
+        if (textView.text.length == 0) {
+            self.promptL.hidden = NO;
+        }else {
+            self.promptL.hidden = YES;
+        }
+    }else {
+        if (textView.text.length == 0) {
+            self.prompt1L.hidden = NO;
+        }else {
+            self.prompt1L.hidden = YES;
+        }
+    }
+    
+    NSLog(@"===DidChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //如果在变化中是高亮部分在变,就不要计算字符了
+    if (selectedRange && pos) {
+        return;
+    }
+    NSString  *nsTextContent = textView.text;
+    NSInteger existTextNum = nsTextContent.length;
+    if (existTextNum > maxTextCount){
+        //截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
+        NSString *s = [nsTextContent substringToIndex:maxTextCount];
+        [textView setText:s];
+    }
+    if (textView == self.textView) {
+        self.siteMechanicalModel.MachineDetial_Product =  textView.text;
+    }else {
+        self.siteMechanicalModel.MachineDetial_Remark = textView.text;
+    }
+
+}
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.elements.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBSchedulesElementTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    PBArtifactsInfoModel *model = self.elements[indexPath.row];
+    cell.artifactsModel = model;
+    cell.DeleteBlock = ^{
+        [self.elements removeObjectAtIndex:indexPath.row];
+        [self updateTableViewWithDate:self.elements.copy];
+    };
+    return cell;
+}
+- (void)updateTableViewWithDate:(NSArray *)element {
+//    self.siteMechanicalModel.elementList = element;
+//    NSInteger tableH = 44 * self.siteMechanicalModel.elementList.count;
+//    [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
+//        make.height.equalTo(@(tableH));
+//    }];
+//    [self.tableView reloadData];
+    if (self.DeleteElementBlock) {
+        self.DeleteElementBlock(element);
+    }
+}
+- (NSMutableArray *)elements {
+    if (_elements == nil) {
+        _elements = [[NSMutableArray alloc] init];
+    }
+    return _elements;
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.h
new file mode 100644
index 0000000..3ac80a5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBModuleTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/23.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBModuleTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSDictionary *dict;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.m
new file mode 100644
index 0000000..ca1cdcf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBModuleTableViewCell.m
@@ -0,0 +1,91 @@
+//
+//  PBModuleTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/23.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBModuleTableViewCell.h"
+
+@interface PBModuleTableViewCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UIImageView *completeV;
+@end
+
+@implementation PBModuleTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(243, 243, 244);
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@72);
+    }];
+    bgView.layer.cornerRadius = 6;
+    [bgView.layer setMasksToBounds:YES];
+    
+    UIImageView *imageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(bgView);
+        make.left.equalTo(bgView).offset(20);
+        make.size.mas_equalTo(CGSizeMake(32, 32));
+    }];
+    
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(51, 51, 51) isBold:YES Font:16];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@16);
+        make.left.equalTo(imageV.mas_right).offset(12);
+        make.right.equalTo(bgView).offset(-20);
+        make.centerY.equalTo(bgView);
+    }];
+    
+    UIImageView *completeV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"complete"]];
+    [self.contentView addSubview:completeV];
+    [completeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(bgView);
+        make.right.equalTo(bgView).offset(-56);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UIImageView *nextLevel = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nextLevel"]];
+    [self.contentView addSubview:nextLevel];
+    [nextLevel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(bgView);
+        make.right.equalTo(bgView).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(16, 12));
+    }];
+    self.imageV = imageV;
+    self.nameL = nameL;
+    self.completeV = completeV;
+}
+- (void)setDict:(NSDictionary *)dict {
+    _dict = dict;
+    self.imageV.image = [UIImage imageNamed:[dict valueForKey:@"icon"]];
+    self.nameL.text = [dict valueForKey:@"name"];
+    NSString *complete = [dict valueForKey:@"complete"];
+    if ([complete isEqualToString:@"待提交"]) {
+        self.completeV.hidden = NO;
+    }else {
+        self.completeV.hidden = YES;
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.h
new file mode 100644
index 0000000..de9d90f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBPersonTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2023/2/1.
+//  Copyright © 2023 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBNewPersonTableViewCell : UITableViewCell
+@property (nonatomic, strong) NSDictionary *dict;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.m
new file mode 100644
index 0000000..5226dce
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBNewPersonTableViewCell.m
@@ -0,0 +1,191 @@
+//
+//  PBPersonTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2023/2/1.
+//  Copyright © 2023 ProBIM. All rights reserved.
+//
+
+#import "PBNewPersonTableViewCell.h"
+@interface PBNewPersonTableViewCell()
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *genderL;
+@property (nonatomic, weak) UILabel *unitL;
+@property (nonatomic, weak) UILabel *typeL;
+@property (nonatomic, weak) UILabel *idCardL;
+@property (nonatomic, weak) UILabel *telL;
+@property (nonatomic, weak) UILabel *lotL;
+@end
+
+@implementation PBNewPersonTableViewCell
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *nameTitleL = [UILabel z_labelWithText:@"姓名: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:nameTitleL];
+    [nameTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(8);
+        make.left.equalTo(self.contentView).offset(12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@74);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"张三" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    nameL.layer.cornerRadius = 4;
+    nameL.layer.borderWidth = 1.f;
+    nameL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(nameTitleL);
+        make.height.equalTo(@44);
+        make.left.equalTo(nameTitleL.mas_right);
+        make.right.equalTo(self.contentView).offset(-12);
+    }];
+    UILabel *genderTitleL = [UILabel z_labelWithText:@"性别: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:genderTitleL];
+    [genderTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(nameTitleL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@74);
+    }];
+    UILabel *genderL = [UILabel z_labelWithText:@"男" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    genderL.layer.cornerRadius = 4;
+    genderL.layer.borderWidth = 1.f;
+    genderL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:genderL];
+    [genderL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(genderTitleL);
+        make.height.equalTo(@44);
+        make.left.equalTo(genderTitleL.mas_right);
+        make.right.equalTo(self.contentView).offset(-12);
+    }];
+    UILabel *unitTitleL = [UILabel z_labelWithText:@"单位: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:unitTitleL];
+    [unitTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(genderTitleL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@74);
+    }];
+    UILabel *unitL = [UILabel z_labelWithText:@"建工一集团" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    unitL.layer.cornerRadius = 4;
+    unitL.layer.borderWidth = 1.f;
+    unitL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:unitL];
+    [unitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(unitTitleL);
+        make.height.equalTo(@44);
+        make.left.equalTo(unitTitleL.mas_right);
+        make.right.equalTo(self.contentView).offset(-12);
+    }];
+    UILabel *lotTitleL = [UILabel z_labelWithText:@"标段: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:lotTitleL];
+    [lotTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(unitTitleL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@74);
+    }];
+    UILabel *lotL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    lotL.layer.cornerRadius = 4;
+    lotL.layer.borderWidth = 1.f;
+    lotL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:lotL];
+    [lotL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lotTitleL);
+        make.height.equalTo(@44);
+        make.left.equalTo(lotTitleL.mas_right);
+        make.right.equalTo(self.contentView).offset(-12);
+    }];
+    UILabel *typeTitleL = [UILabel z_labelWithText:@"工种: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:typeTitleL];
+    [typeTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lotTitleL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@74);
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"瓦工" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    typeL.layer.cornerRadius = 4;
+    typeL.layer.borderWidth = 1.f;
+    typeL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeTitleL);
+        make.height.equalTo(@44);
+        make.left.equalTo(typeTitleL.mas_right);
+        make.right.equalTo(self.contentView).offset(-12);
+    }];
+    UILabel *idCardTitleL = [UILabel z_labelWithText:@"身份证号: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:idCardTitleL];
+    [idCardTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeTitleL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@74);
+    }];
+    UILabel *idCardL = [UILabel z_labelWithText:@"11029985985984698496894689648" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    idCardL.layer.cornerRadius = 4;
+    idCardL.layer.borderWidth = 1.f;
+    idCardL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:idCardL];
+    [idCardL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(idCardTitleL);
+        make.height.equalTo(@44);
+        make.left.equalTo(idCardTitleL.mas_right);
+        make.right.equalTo(self.contentView).offset(-12);
+    }];
+    UILabel *telTitleL = [UILabel z_labelWithText:@"联系方式: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:telTitleL];
+    [telTitleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(idCardTitleL.mas_bottom).offset(8);
+        make.left.equalTo(self.contentView).offset(12);
+        make.height.equalTo(@44);
+        make.bottom.equalTo(self.contentView);
+        make.width.equalTo(@74);
+    }];
+    UILabel *telL = [UILabel z_labelWithText:@"1102998598598469849" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    telL.layer.cornerRadius = 4;
+    telL.layer.borderWidth = 1.f;
+    telL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:telL];
+    [telL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(telTitleL);
+        make.height.equalTo(@44);
+        make.left.equalTo(telTitleL.mas_right);
+        make.right.equalTo(self.contentView).offset(-12);
+    }];
+    self.nameL = nameL;
+    self.genderL = genderL;
+    self.unitL = unitL;
+    self.typeL = typeL;
+    self.idCardL = idCardL;
+    self.telL = telL;
+    self.lotL = lotL;
+}
+- (void)setDict:(NSDictionary *)dict {
+    _dict = dict;
+    self.nameL.text = [NSString stringWithFormat:@" %@", [dict valueForKey:@"UserName"]];
+    self.genderL.text = [NSString stringWithFormat:@" %@", [[dict valueForKey:@"Sex"] intValue] == 0 ? @"男" : @"女"];
+    self.unitL.text = [NSString stringWithFormat:@" %@", [dict valueForKey:@"Unit"]];
+    self.typeL.text = [NSString stringWithFormat:@" %@", [dict valueForKey:@"WorkType"]];
+    self.idCardL.text = [NSString stringWithFormat:@" %@", [dict valueForKey:@"IdentityNumber"]];
+    self.telL.text = [NSString stringWithFormat:@" %@", [dict valueForKey:@"Mobile"]];
+    self.lotL.text = [NSString stringWithFormat:@" %@", [dict valueForKey:@"Tenders"]];
+}
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.h
new file mode 100644
index 0000000..7f5b3f6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.h
@@ -0,0 +1,20 @@
+//
+//  PBPlanTaskTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBTaskScheduleModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPlanTaskTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^DeleteBlock)(void);
+@property (nonatomic, copy) void(^ChooseTaskBlock)(void);
+@property (nonatomic, strong) PBTaskScheduleModel *taskScheduleModel;
+@property (nonatomic, assign) NSInteger taskIndex;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.m
new file mode 100644
index 0000000..75b4a96
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBPlanTaskTableViewCell.m
@@ -0,0 +1,413 @@
+//
+//  PBPlanTaskTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBPlanTaskTableViewCell.h"
+#import "PBImageCollectionViewCell.h"
+#import "PBTaskScheduleModel.h"
+#import "PBSchedulePlanModel.h"
+
+static NSString *const cellID = @"cellID";
+@interface PBPlanTaskTableViewCell()<UITextFieldDelegate, UITextViewDelegate>
+@property (nonatomic, weak) UILabel *chooseTaskL; //所选任务
+@property (nonatomic, weak) UILabel *planTimeL; //计划时间
+@property (nonatomic, weak) UILabel *statusL; //任务状态
+@property (nonatomic, weak) UILabel *reasonL;
+@property (nonatomic, weak) UIView *reasonLBgView;
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, weak) UILabel *compalte;
+@property (nonatomic, weak) UILabel *planProportionL; //计划比例
+@property (nonatomic, weak) UILabel *GrandProportionL; //累计比例
+@property (nonatomic, weak) UITextField *todayTF; //今日
+@property (nonatomic, weak) UITextField *tomTF; //明日
+@property (nonatomic, weak) UILabel *taskNameL;
+//@property (nonatomic, strong) UIToolbar *kbToolbar;
+@end
+
+@implementation PBPlanTaskTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UILabel *taskNameL = [UILabel z_labelWithText:@"任务1" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:14];
+    [self.contentView addSubview:taskNameL];
+    [taskNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(deleteBtn);
+        make.left.equalTo(deleteBtn.mas_right).offset(8);
+    }];
+    UIButton *chooseTask = [[UIButton alloc] init];
+    [chooseTask addTarget:self action:@selector(chooseTask) forControlEvents:UIControlEventTouchUpInside];
+    chooseTask.layer.cornerRadius = 4;
+    chooseTask.layer.borderWidth = 1.f;
+    chooseTask.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:chooseTask];
+    [chooseTask mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(deleteBtn.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@44);
+    }];
+    UILabel *chooseTaskL = [UILabel z_labelWithText:@"请选择" Color:[UIColor z_colorWithR:174 G:174 B:174] isBold:NO Font:14];
+    [self.contentView addSubview:chooseTaskL];
+    [chooseTaskL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(chooseTask).offset(12);
+        make.right.equalTo(chooseTask).offset(-44);
+        make.centerY.equalTo(chooseTask);
+    }];
+    UIImageView *chooseImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chooseTask_icon"]];
+    [self.contentView addSubview:chooseImageV];
+    [chooseImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(chooseTask).offset(18);
+        make.right.equalTo(chooseTask).offset(-14);
+        make.size.mas_equalTo(CGSizeMake(12, 10));
+    }];
+    UILabel *planTime = [UILabel z_labelWithText:@"计划时间" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:planTime];
+    [planTime mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(chooseTask.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+    }];
+    UILabel *planTimeL = [UILabel z_labelWithText:@"2022-04-30 ~ 2022-11-29" Color:[UIColor z_colorWithR:174 G:174 B:174] isBold:NO Font:14];
+    [self.contentView addSubview:planTimeL];
+    [planTimeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planTime.mas_bottom).offset(6);
+        make.left.equalTo(planTime).offset(12);
+        make.right.equalTo(chooseTask);
+        make.height.equalTo(@44);
+    }];
+    UILabel *status = [UILabel z_labelWithText:@"任务状态: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:status];
+    [status mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planTimeL.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+        make.height.equalTo(@44);
+    }];
+    UILabel *statusL = [UILabel z_labelWithText:@"滞后" Color:[UIColor z_colorWithR:255 G:107 B:80] isBold:YES Font:14];
+    [self.contentView addSubview:statusL];
+    [statusL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(status);
+        make.left.equalTo(status.mas_right).offset(12);
+    }];
+    
+    UILabel *reasonL = [UILabel z_labelWithText:@"滞后原因及措施" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:reasonL];
+    [reasonL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(statusL.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+    }];
+    UIView *reasonLBgView = [[UIView alloc] init];
+    reasonLBgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:reasonLBgView];
+    [reasonLBgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(reasonL.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@81);
+    }];
+    reasonLBgView.layer.cornerRadius = 4;
+    reasonLBgView.layer.borderWidth = 1;
+    reasonLBgView.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= PBColor(40, 58, 79);
+    textView.font = [UIFont boldSystemFontOfSize:15];
+//    [textView becomeFirstResponder];
+    textView.delegate = self;
+//    textView.text = _text;
+    [reasonLBgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(reasonLBgView).offset(12);
+        make.left.equalTo(reasonLBgView).offset(12);
+        make.right.equalTo(reasonLBgView).offset(-12);
+        make.bottom.equalTo(reasonLBgView).offset(-12);
+    }];
+//    textView.inputAccessoryView = self.kbToolbar;
+
+    UILabel *promptL= [UILabel z_labelWithText:@"请输入" Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [reasonLBgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+    
+    UILabel *compalte = [UILabel z_labelWithText:@"完成比例" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:compalte];
+    [compalte mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(statusL.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+    }];
+    
+    UIView *PlanBgV = [[UIView alloc] init];
+    PlanBgV.backgroundColor = PBColor(243, 243, 243);
+    PlanBgV.layer.cornerRadius = 4;
+    PlanBgV.layer.borderWidth = 1.f;
+    PlanBgV.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    [self.contentView addSubview:PlanBgV];
+    [PlanBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(compalte.mas_bottom).offset(16);
+        make.left.equalTo(compalte).offset(44);
+        make.size.mas_equalTo(CGSizeMake(112, 88));
+        make.bottom.equalTo(self.contentView).offset(-20);
+    }];
+    UIView *planBgLine = [[UIView alloc] init];
+    planBgLine.backgroundColor = PBColor(51, 51, 51);
+    [self.contentView addSubview:planBgLine];
+    [planBgLine mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(PlanBgV).offset(43);
+        make.height.equalTo(@2);
+        make.left.right.equalTo(PlanBgV);
+    }];
+    UILabel *planL = [UILabel z_labelWithText:@"计划: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:planL];
+    [planL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(PlanBgV).offset(14);
+        make.left.equalTo(compalte);
+    }];
+    UILabel *grandL = [UILabel z_labelWithText:@"累计: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:grandL];
+    [grandL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(PlanBgV).offset(-14);
+        make.left.equalTo(compalte);
+    }];
+    UILabel *todayL = [UILabel z_labelWithText:@"今日: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:todayL];
+    [todayL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planL);
+        make.left.equalTo(PlanBgV.mas_right).offset(35);
+    }];
+    UILabel *tomL = [UILabel z_labelWithText:@"明日: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:tomL];
+    [tomL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(grandL);
+        make.left.equalTo(todayL);
+    }];
+    
+    UIView *actualBgV = [[UIView alloc] init];
+    actualBgV.layer.cornerRadius = 4;
+    actualBgV.layer.borderWidth = 1.f;
+    actualBgV.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    [self.contentView addSubview:actualBgV];
+    [actualBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(PlanBgV);
+        make.left.equalTo(PlanBgV.mas_right).offset(81);
+        make.size.mas_equalTo(CGSizeMake(112, 88));
+    }];
+    UIView *actualBgLine = [[UIView alloc] init];
+    actualBgLine.backgroundColor = PBColor(51, 51, 51);
+    [self.contentView addSubview:actualBgLine];
+    [actualBgLine mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(actualBgV).offset(43);
+        make.height.equalTo(@2);
+        make.left.right.equalTo(actualBgV);
+    }];
+    
+    UILabel *planProportionL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:40 G:58 B:79] isBold:YES Font:16];
+    planProportionL.text = @"60%";
+    [self.contentView addSubview:planProportionL];
+    [planProportionL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(PlanBgV);
+        make.bottom.equalTo(planBgLine.mas_top);
+        make.left.equalTo(PlanBgV).offset(12);
+        make.right.equalTo(PlanBgV).offset(-28);
+    }];
+    UILabel *planunitL = [UILabel z_labelWithText:@"%" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+    [self.contentView addSubview:planunitL];
+    [planunitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planL);
+        make.right.equalTo(PlanBgV).offset(-12);
+    }];
+    UILabel *GrandProportionL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:40 G:58 B:79] isBold:YES Font:16];
+    GrandProportionL.text = @"80%";
+    [self.contentView addSubview:GrandProportionL];
+    [GrandProportionL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planBgLine.mas_bottom);
+        make.bottom.equalTo(PlanBgV);
+        make.left.equalTo(PlanBgV).offset(12);
+        make.right.equalTo(PlanBgV).offset(-28);
+    }];
+    UILabel *GrandunitL = [UILabel z_labelWithText:@"%" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+    [self.contentView addSubview:GrandunitL];
+    [GrandunitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(grandL);
+        make.right.equalTo(PlanBgV).offset(-12);
+    }];
+    
+    UITextField *todayTF = [[UITextField alloc] init];
+    todayTF.placeholder = @"请输入";
+    todayTF.textAlignment= NSTextAlignmentLeft;
+    todayTF.textColor = PBColor(40, 58, 79);
+    todayTF.font = [UIFont fontWithName:Coarse size:16.0];
+    todayTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    todayTF.delegate = self;
+//    todayTF.returnKeyType = UIReturnKeyDone;
+    [self.contentView addSubview:todayTF];
+    [todayTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(actualBgV);
+        make.bottom.equalTo(actualBgLine.mas_top);
+        make.left.equalTo(actualBgV).offset(12);
+        make.right.equalTo(actualBgV).offset(-28);
+    }];
+    UILabel *unitL = [UILabel z_labelWithText:@"%" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+    [self.contentView addSubview:unitL];
+    [unitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(todayL);
+        make.right.equalTo(actualBgV).offset(-12);
+    }];
+    UITextField *tomTF = [[UITextField alloc] init];
+    tomTF.placeholder = @"请输入";
+    tomTF.textAlignment= NSTextAlignmentLeft;
+    tomTF.textColor = PBColor(40, 58, 79);
+    tomTF.font = [UIFont fontWithName:Coarse size:16.0];
+    tomTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+//    todayTF.delegate = self;
+//    todayTF.returnKeyType = UIReturnKeyDone;
+    tomTF.delegate = self;
+    [self.contentView addSubview:tomTF];
+    [tomTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(actualBgLine.mas_bottom);
+        make.bottom.equalTo(actualBgV);
+        make.left.equalTo(actualBgV).offset(12);
+        make.right.equalTo(actualBgV).offset(-28);
+    }];
+    UILabel *tomunitL = [UILabel z_labelWithText:@"%" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+    [self.contentView addSubview:tomunitL];
+    [tomunitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(tomL);
+        make.right.equalTo(actualBgV).offset(-12);
+    }];
+
+    self.chooseTaskL = chooseTaskL;
+    self.planTimeL = planTimeL;
+    self.statusL = statusL;
+    self.reasonL = reasonL;
+    self.reasonLBgView = reasonLBgView;
+    self.textView = textView;
+    self.promptL = promptL;
+    self.compalte = compalte;
+    self.planProportionL = planProportionL;
+    self.GrandProportionL = GrandProportionL;
+    self.todayTF = todayTF;
+    self.tomTF = tomTF;
+    self.taskNameL = taskNameL;
+//    self.todayTF.inputAccessoryView = self.kbToolbar;
+//    self.tomTF.inputAccessoryView = self.kbToolbar;
+}
+- (void)chooseTask {
+    if (self.ChooseTaskBlock) {
+        self.ChooseTaskBlock();
+    }
+}
+- (void)deleteAction {
+    if (self.DeleteBlock) {
+        self.DeleteBlock();
+    }
+}
+- (void)setTaskScheduleModel:(PBTaskScheduleModel *)taskScheduleModel {
+    _taskScheduleModel = taskScheduleModel;
+    if (taskScheduleModel.Progress_Name == nil) {
+        self.chooseTaskL.textColor = PBColor(174, 174, 174);
+        self.chooseTaskL.text = @"请选择";
+    }else {
+        self.chooseTaskL.textColor = PBColor(51, 51, 51);
+        self.chooseTaskL.text = taskScheduleModel.Progress_Name;
+    }
+    if (taskScheduleModel.Progress_planstarttime != nil && taskScheduleModel.Progress_plannendtime != nil) {
+        self.planTimeL.text = [NSString stringWithFormat:@"%@ ~ %@", taskScheduleModel.Progress_planstarttime, taskScheduleModel.Progress_plannendtime];
+    }else {
+        self.planTimeL.text = @"请先选择任务";
+    }
+    if ([taskScheduleModel.Progress_state isEqualToString:@"滞后"]) {
+        self.reasonL.hidden = NO;
+        self.reasonLBgView.hidden = NO;
+        self.textView.hidden = NO;
+        self.promptL.hidden = NO;
+        self.textView.text = taskScheduleModel.Progress_MobileReason;
+        if (self.textView.text.length == 0) {
+            self.promptL.hidden = NO;
+        }else {
+            self.promptL.hidden = YES;
+        }
+        [self.compalte mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.statusL.mas_bottom).offset(146);
+        }];
+    }else {
+        self.reasonL.hidden = YES;
+        self.reasonLBgView.hidden = YES;
+        self.textView.hidden = YES;
+        self.promptL.hidden = YES;
+        taskScheduleModel.Progress_MobileReason = @"";
+        self.textView.text = taskScheduleModel.Progress_MobileReason;
+        self.promptL.hidden = NO;
+        [self.compalte mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.statusL.mas_bottom).offset(16);
+        }];
+    }
+    self.statusL.text = taskScheduleModel.Progress_state;
+    self.planProportionL.text = taskScheduleModel.Progress_planratio;
+    self.GrandProportionL.text = taskScheduleModel.Progress_MobileAddratio == nil? @"0": taskScheduleModel.Progress_MobileAddratio;
+    self.todayTF.text = taskScheduleModel.Progress_actualratio;
+    self.tomTF.text = taskScheduleModel.Progress_MobileTomorrowratio;
+}
+
+- (void)setTaskIndex:(NSInteger)taskIndex {
+    _taskIndex = taskIndex;
+    self.taskNameL.text = [NSString stringWithFormat:@"任务%zd",taskIndex];
+}
+//- (UIToolbar *) kbToolbar {
+//    if (_kbToolbar == nil) {
+//        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+//        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+//        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+//    }
+//    return _kbToolbar;
+//}
+//- (void)closeKeyboard {
+//    [self endEditing:YES];
+//}
+
+#pragma mark - UITextFieldDelegate
+- (void)textFieldDidEndEditing:(UITextField *)textField{
+    if (textField == self.todayTF){
+        self.taskScheduleModel.Progress_actualratio = textField.text;
+        NSInteger added = [self.taskScheduleModel.MobileAddratio integerValue];
+        NSInteger total = [self.taskScheduleModel.Progress_actualratio integerValue];
+        self.taskScheduleModel.Progress_MobileAddratio = [NSString stringWithFormat:@"%zd",added + total];
+        self.GrandProportionL.text  = [NSString stringWithFormat:@"%@", self.taskScheduleModel.Progress_MobileAddratio];
+    }else {
+        self.taskScheduleModel.Progress_MobileTomorrowratio = textField.text;
+    }
+}
+#pragma mark - UITextViewDelegate
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    
+    self.taskScheduleModel.Progress_MobileReason = textView.text;
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.h
new file mode 100644
index 0000000..1e52bab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBSafetyTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/31.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSafetyModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSafetyTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^DeleteBlock)(void);
+@property (nonatomic, strong) PBSafetyModel *safetyModel;
+@property (nonatomic, assign) NSInteger safetyIndex;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.m
new file mode 100644
index 0000000..c20bc53
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSafetyTableViewCell.m
@@ -0,0 +1,279 @@
+//
+//  PBSafetyTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/31.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSafetyTableViewCell.h"
+#import "PBSafetyModel.h"
+
+#define maxTextCount 200
+@interface PBSafetyTableViewCell()<UITextViewDelegate>
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UILabel *promptL;
+@property (nonatomic, weak) UITextView *text1View;
+@property (nonatomic, weak) UILabel *prompt1L;
+@property (nonatomic, weak) UILabel *taskNameL;
+//@property (nonatomic, strong) UIToolbar *kbToolbar;
+@end
+@implementation PBSafetyTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UILabel *taskNameL = [UILabel z_labelWithText:@"风险1" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:14];
+    [self.contentView addSubview:taskNameL];
+    [taskNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(deleteBtn);
+        make.left.equalTo(deleteBtn.mas_right).offset(8);
+    }];
+    
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(deleteBtn.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@132);
+    }];
+    bgView.layer.cornerRadius = 4;
+    bgView.layer.borderWidth = 1;
+    bgView.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= PBColor(40, 58, 79);
+    textView.font = [UIFont boldSystemFontOfSize:15];
+//    [textView becomeFirstResponder];
+    textView.delegate = self;
+//    textView.text = _text;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(12);
+        make.left.equalTo(bgView).offset(12);
+        make.right.equalTo(bgView).offset(-12);
+        make.bottom.equalTo(bgView).offset(-12);
+    }];
+//    textView.inputAccessoryView = self.kbToolbar;
+
+    UILabel *promptL= [UILabel z_labelWithText:@"请输入..." Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+    
+    UILabel *measureL = [UILabel z_labelWithText:@"措施" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:measureL];
+    [measureL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView.mas_bottom).offset(20);
+        make.left.equalTo(bgView);
+    }];
+    
+    UIView *bg1View = [[UIView alloc] init];
+    bg1View.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bg1View];
+    [bg1View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(measureL.mas_bottom).offset(6);
+        make.left.equalTo(bgView);
+        make.right.equalTo(bgView);
+        make.height.equalTo(@132);
+        make.bottom.equalTo(self.contentView).offset(-20);
+    }];
+    bg1View.layer.cornerRadius = 4;
+    bg1View.layer.borderWidth = 1;
+    bg1View.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    
+    UITextView *text1View = [[UITextView alloc] init];
+    text1View.textColor= PBColor(40, 58, 79);
+    text1View.font = [UIFont boldSystemFontOfSize:15];
+//    [textView becomeFirstResponder];
+    text1View.delegate = self;
+//    textView.text = _text;
+    [bg1View addSubview:text1View];
+    [text1View mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bg1View).offset(12);
+        make.left.equalTo(bg1View).offset(12);
+        make.right.equalTo(bg1View).offset(-12);
+        make.bottom.equalTo(bg1View).offset(-12);
+    }];
+//    text1View.inputAccessoryView = self.kbToolbar;
+
+    UILabel *prompt1L= [UILabel z_labelWithText:@"请输入..." Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [bg1View addSubview:prompt1L];
+    [prompt1L mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(text1View).offset(8);
+        make.left.equalTo(text1View).offset(6);
+    }];
+    
+    self.textView = textView;
+    self.promptL = promptL;
+    self.text1View = text1View;
+    self.prompt1L = prompt1L;
+    self.taskNameL = taskNameL;
+    
+}
+- (void)deleteAction {
+    if (self.DeleteBlock) {
+        self.DeleteBlock();
+    }
+}
+
+- (void)setSafetyModel:(PBSafetyModel *)safetyModel {
+    _safetyModel = safetyModel;
+    self.textView.text = safetyModel.MobileSafe_Name;
+    if (self.textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    self.text1View.text = safetyModel.MobileSafe_Measure;
+    if (self.text1View.text.length == 0) {
+        self.prompt1L.hidden = NO;
+    }else {
+        self.prompt1L.hidden = YES;
+    }
+    self.textView.editable = YES;
+    self.text1View.editable = YES;
+}
+
+- (void)setSafetyIndex:(NSInteger)safetyIndex {
+    _safetyIndex = safetyIndex;
+    self.taskNameL.text = [NSString stringWithFormat:@"风险%zd",safetyIndex];
+}
+//- (UIToolbar *) kbToolbar {
+//    if (_kbToolbar == nil) {
+//        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+//        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+//        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+//    }
+//    return _kbToolbar;
+//}
+//- (void)closeKeyboard {
+//    [self endEditing:YES];
+//}
+
+#pragma mark - UITextViewDelete
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
+ replacementText:(NSString *)text {
+    NSLog(@"%zd",textView.text.length);
+    NSLog(@"===shouldChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //获取高亮部分内容
+    //NSString * selectedtext = [textView textInRange:selectedRange];
+    //如果有高亮且当前字数开始位置小于最大限制时允许输入
+    if (selectedRange && pos) {
+        NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
+        NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
+        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
+        if (offsetRange.location < maxTextCount) {
+            return YES;
+        }
+        else{
+            return NO;
+        }
+    }
+    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    NSInteger caninputlen = maxTextCount - comcatstr.length;
+    if (caninputlen >= 0){
+        return YES;
+    }else{
+        NSInteger len = text.length + caninputlen;
+        //防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
+        NSRange rg = {0,MAX(len,0)};
+        if (rg.length > 0){
+            NSString *s = @"";
+            //判断是否只普通的字符或asc码(对于中文和表情返回NO)
+            BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
+            if (asc) {
+                s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
+            }else{
+                __block NSInteger idx = 0;
+                __block NSString  *trimString = @"";//截取出的字串
+                //使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
+                [text enumerateSubstringsInRange:NSMakeRange(0, [text length])
+                                         options:NSStringEnumerationByComposedCharacterSequences
+                                      usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
+                                          if (idx >= rg.length) {
+                                              *stop = YES; //取出所需要就break,提高效率
+                                              return ;
+                                          }
+                                          trimString = [trimString stringByAppendingString:substring];
+                                          idx++;
+                                      }];
+                s = trimString;
+            }
+            //rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
+            [textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
+            //既然是超出部分截取了,哪一定是最大限制了。
+//            self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
+        }
+        return NO;
+    }
+}
+
+
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView.text.length == 0) {
+        if (textView == self.textView) {
+            self.promptL.hidden = NO;
+        }else {
+            self.prompt1L.hidden = NO;
+        }
+    }else {
+        if (textView == self.textView) {
+            self.promptL.hidden = YES;
+        }else {
+            self.prompt1L.hidden = YES;
+        }
+    }
+    NSLog(@"===DidChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //如果在变化中是高亮部分在变,就不要计算字符了
+    if (selectedRange && pos) {
+        return;
+    }
+    NSString  *nsTextContent = textView.text;
+    NSInteger existTextNum = nsTextContent.length;
+    if (existTextNum > maxTextCount){
+        //截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
+        NSString *s = [nsTextContent substringToIndex:maxTextCount];
+        [textView setText:s];
+    }
+    if (textView == self.textView) {
+        self.safetyModel.MobileSafe_Name = textView.text;
+    }else {
+        self.safetyModel.MobileSafe_Measure = textView.text;
+    }
+}
+//- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
+//    if (self.endEditBlock) {
+//        self.endEditBlock(textView.text);
+//    }
+//    return YES;
+//}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.h
new file mode 100644
index 0000000..fec6167
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.h
@@ -0,0 +1,21 @@
+//
+//  PBScheduleHeaderView.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScheduleHeaderView : UIView
+@property (nonatomic, copy) void(^ChooseDate)(void);
+@property (nonatomic, copy) void(^Scanning)(void);
+@property (nonatomic, copy) NSString *place;
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, copy) NSString *fillDate;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.m
new file mode 100644
index 0000000..f4e4292
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleHeaderView.m
@@ -0,0 +1,168 @@
+//
+//  PBScheduleHeaderView.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/24.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleHeaderView.h"
+#import "PBSchedulePlanModel.h"
+
+@interface PBScheduleHeaderView()
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *dateL;
+@property (nonatomic, weak) UILabel *placeL;
+@property (nonatomic, copy) NSString *currentDate;
+@end
+@implementation PBScheduleHeaderView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    UIView *iconV = [[UIView alloc] init];
+    iconV.backgroundColor = PBColor(95, 158, 249);
+    [self addSubview:iconV];
+    [iconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(20);
+        make.size.mas_equalTo(CGSizeMake(6, 20));
+        make.left.equalTo(self);
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"基本信息" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:18];
+    [self addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(iconV);
+        make.left.equalTo(iconV.mas_right).offset(5);
+    }];
+//    UILabel *planNameL = [UILabel z_labelWithText:@"计划名称: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+//    [self addSubview:planNameL];
+//    [planNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(iconV.mas_bottom).offset(14);
+//        make.left.equalTo(self).offset(12);
+//        make.height.equalTo(@16);
+//    }];
+//    UILabel *nameL = [UILabel z_labelWithText:@"新建隆子机场总进度" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+//    [self addSubview:nameL];
+//    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(planNameL);
+//        make.left.equalTo(planNameL.mas_right);
+//        make.width.equalTo(@(self.width - 120));
+//        make.height.equalTo(@16);
+//    }];
+//    UIButton *scanBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"scan_img"]];
+//    [scanBtn addTarget:self action:@selector(scanAction) forControlEvents:UIControlEventTouchUpInside];
+//    [self addSubview:scanBtn];
+//    [scanBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.centerY.equalTo(nameL);
+//        make.size.mas_equalTo(CGSizeMake(24, 24));
+//        make.right.equalTo(self).offset(-12);
+//    }];
+    
+//    UILabel *fillDateL = [UILabel z_labelWithText:@"填报日期: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+//    [self addSubview:fillDateL];
+//    [fillDateL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(planNameL.mas_bottom).offset(18);
+//        make.left.equalTo(self).offset(12);
+//        make.height.equalTo(@44);
+//    }];
+//    UIButton *borderV = [[UIButton alloc] init];
+//    [borderV addTarget:self action:@selector(chooseDate) forControlEvents:UIControlEventTouchUpInside];
+//    borderV.layer.cornerRadius = 4;
+//    borderV.layer.borderWidth = 1.f;
+//    borderV.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+//    [self addSubview:borderV];
+//    [borderV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(fillDateL);
+////        make.left.equalTo(fillDateL.mas_right);
+//        make.right.equalTo(self).offset(-12);
+//        make.height.equalTo(@44);
+//        make.width.equalTo(@(self.width - 98));
+//    }];
+//
+//    UILabel *dateL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+//    [self addSubview:dateL];
+//    [dateL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.left.equalTo(borderV).offset(12);
+//        make.centerY.equalTo(borderV);
+//    }];
+//    UIImageView *chooseDateV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"date_btn"]];
+//    [self addSubview:chooseDateV];
+//    [chooseDateV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(borderV).offset(10);
+//        make.right.equalTo(borderV).offset(-10);
+//        make.size.mas_equalTo(CGSizeMake(24, 24));
+//    }];
+    UILabel *fillPlaceL = [UILabel z_labelWithText:@"填报位置: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self addSubview:fillPlaceL];
+    [fillPlaceL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(iconV.mas_bottom).offset(14);
+        make.left.equalTo(self).offset(12);
+        make.height.equalTo(@44);
+    }];
+    UILabel *placeL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    placeL.numberOfLines = 0;
+    placeL.layer.cornerRadius = 4;
+    placeL.layer.borderWidth = 1.f;
+    placeL.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self addSubview:placeL];
+    [placeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(fillPlaceL);
+        make.height.equalTo(@44);
+        make.left.equalTo(fillPlaceL.mas_right);
+        make.width.equalTo(@(self.width - 120));
+    }];
+    
+    UIButton *scanBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"scan_img"]];
+    [scanBtn addTarget:self action:@selector(scanAction) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:scanBtn];
+    [scanBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(placeL);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.right.equalTo(self).offset(-12);
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(243, 243, 244);
+    [self addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@2);
+        make.left.right.bottom.equalTo(self);
+    }];
+//    self.nameL = nameL;
+//    self.dateL = dateL;
+    self.placeL = placeL;
+}
+- (void)chooseDate {
+    if (self.ChooseDate) {
+        self.ChooseDate();
+    }
+}
+- (void)scanAction {
+    if (self.Scanning) {
+        self.Scanning();
+    }
+}
+- (void)setPlace:(NSString *)place {
+    _place = place;
+    self.placeL.text = place;
+}
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel {
+    _schedulePlanModel = schedulePlanModel;
+    self.nameL.text = schedulePlanModel.Name;
+}
+- (void)setFillDate:(NSString *)fillDate {
+    _fillDate = fillDate;
+    self.dateL.text = fillDate;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.h
new file mode 100644
index 0000000..f5cffee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBScheduleImgTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/9.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScheduleImgTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^DeleteImageBlock)(NSInteger index);
+@property (nonatomic, strong) NSMutableArray *imageArr;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.m
new file mode 100644
index 0000000..2333900
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleImgTableViewCell.m
@@ -0,0 +1,104 @@
+//
+//  PBScheduleImgTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/9.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleImgTableViewCell.h"
+#import "PBImgAndNameCollectionViewCell.h"
+#import "PBImageModel.h"
+
+static NSString *const cellID = @"cellID";
+@interface PBScheduleImgTableViewCell()<UICollectionViewDelegate, UICollectionViewDataSource, SDPhotoBrowserDelegate>
+@property (nonatomic, weak) UICollectionView *collectionView; //图片
+@end
+@implementation PBScheduleImgTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout.alloc init];
+    layout.itemSize = CGSizeMake(168, 140);
+    layout.minimumLineSpacing = 10;
+    layout.minimumInteritemSpacing = 0;
+    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+    UICollectionView *collectionView = [UICollectionView.alloc initWithFrame:CGRectZero collectionViewLayout:layout];
+    [collectionView registerClass:[PBImgAndNameCollectionViewCell class] forCellWithReuseIdentifier:cellID];
+    collectionView.delegate = self;
+    collectionView.dataSource = self;
+    collectionView.pagingEnabled = YES;
+//        _collectionView.bounces = NO;
+    collectionView.showsHorizontalScrollIndicator = NO;
+    collectionView.backgroundColor = [UIColor whiteColor];
+//    collectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 100);
+    [self.contentView addSubview:collectionView];
+    [collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.bottom.equalTo(self.contentView);
+        make.height.mas_equalTo(@140);
+    }];
+    self.collectionView = collectionView;
+}
+
+#pragma mark - UICollectionViewDataSource
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.imageArr.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    PBImgAndNameCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
+    PBImageModel *model = self.imageArr[indexPath.row];
+    cell.model = model;
+    cell.DeleteImageBlock = ^{
+        if (model.bf_path) {
+            if (self.DeleteImageBlock){
+                self.DeleteImageBlock(indexPath.item);
+            }
+        }else {
+            [self.imageArr removeObjectAtIndex:indexPath.row];
+            [self.collectionView reloadData];
+        }
+    };
+    return cell;
+}
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    photoBrowser.imageCount = self.imageArr.count;
+//        photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+}
+
+#pragma mark  SDPhotoBrowserDelegate
+// 返回临时占位图片(即原来的小图)
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    PBImgAndNameCollectionViewCell *cell = (PBImgAndNameCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+//    if (self.isAddExamine) {
+        return cell.imageV.image;
+//    }else {
+//        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:cell.imageUrl]];
+//        UIImage *image = [UIImage imageWithData:data];;
+//        return image;
+//    }
+}
+- (void)setImageArr:(NSMutableArray *)imageArr {
+    _imageArr = imageArr;
+    [self.collectionView reloadData];
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.h
new file mode 100644
index 0000000..bc92c92
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.h
@@ -0,0 +1,17 @@
+//
+//  PBSchedulePlanTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSchedulePlanTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBSchedulePlanModel *planModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.m
new file mode 100644
index 0000000..fe2530d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulePlanTableViewCell.m
@@ -0,0 +1,68 @@
+//
+//  PBSchedulePlanTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSchedulePlanTableViewCell.h"
+#import "PBSchedulePlanModel.h"
+
+@interface PBSchedulePlanTableViewCell()
+@property (nonatomic, weak) UILabel *nameL;
+
+@end
+@implementation PBSchedulePlanTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.contentView.backgroundColor = PBColor(243, 243, 244);
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(16);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@56);
+    }];
+    bgView.layer.cornerRadius = 6;
+    [bgView.layer setMasksToBounds:YES];
+    
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:PBColor(51, 51, 51) isBold:YES Font:16];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@16);
+        make.left.equalTo(bgView).offset(20);
+        make.right.equalTo(bgView).offset(-40);
+        make.centerY.equalTo(bgView);
+    }];
+    UIImageView *nextLevel = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nextLevel"]];
+    [self.contentView addSubview:nextLevel];
+    [nextLevel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(bgView);
+        make.right.equalTo(bgView).offset(-20);
+        make.size.mas_equalTo(CGSizeMake(16, 12));
+    }];
+  
+    self.nameL = nameL;
+    
+}
+-(void)setPlanModel:(PBSchedulePlanModel *)planModel {
+    _planModel = planModel;
+    self.nameL.text = planModel.Name;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.h
new file mode 100644
index 0000000..781f568
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBScheduleTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBScheduleListModel;
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScheduleTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBScheduleListModel *scheduleListModel;
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.m
new file mode 100644
index 0000000..a8b9ee3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBScheduleTableViewCell.m
@@ -0,0 +1,163 @@
+//
+//  PBScheduleTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/22.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBScheduleTableViewCell.h"
+#import "PBScheduleListModel.h"
+#import "PBProjectModel.h"
+
+@interface PBScheduleTableViewCell()
+@property (nonatomic, weak) UIImageView *imageV;
+@property (nonatomic, weak) UILabel *imageCoutL;
+@property (nonatomic, weak) UILabel *creatorL;
+@property (nonatomic, weak) UILabel *fillDateL;
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *planDateL;
+@property (nonatomic, weak) UIImageView *statusImageV;
+@end
+
+@implementation PBScheduleTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] init];
+//    imageV.contentMode = UIViewContentModeScaleAspectFill;
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(12);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(88, 88));
+    }];
+    UILabel *imageCoutL = [UILabel z_labelWithText:@"8" Color:[UIColor whiteColor] isBold:YES Font:14];
+    imageCoutL.textAlignment = NSTextAlignmentCenter;
+    imageCoutL.backgroundColor = [UIColor blackColor];
+    [imageCoutL circleViewWithRadius:9];
+    [imageV addSubview:imageCoutL];
+    [imageCoutL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(imageV).offset(-2);
+        make.right.equalTo(imageV).offset(-2);
+        make.size.mas_equalTo(CGSizeMake(32, 18));
+    }];
+    
+    UILabel *creatorL = [UILabel z_labelWithText:@"填报人员: 张丰" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    creatorL.numberOfLines = 0;
+    [self.contentView addSubview:creatorL];
+    [creatorL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV);
+        make.left.equalTo(imageV.mas_right).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@16);
+    }];
+    
+    
+    UILabel *fillDateL = [UILabel z_labelWithText:@"填报日期: 2022-08-22" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    fillDateL.numberOfLines = 0;
+    [self.contentView addSubview:fillDateL];
+    [fillDateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(creatorL.mas_bottom).offset(8);
+        make.left.right.equalTo(creatorL);
+        make.height.equalTo(@16);
+    }];
+    
+    UILabel *planNameL = [UILabel z_labelWithText:@"计划名称: " Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    planNameL.numberOfLines = 0;
+    [self.contentView addSubview:planNameL];
+    [planNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(fillDateL.mas_bottom).offset(8);
+        make.left.equalTo(fillDateL);
+        make.width.equalTo(@70);
+        make.height.equalTo(@16);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"新建西藏隆子机场总进度计划" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:NO Font:14];
+    nameL.numberOfLines = 0;
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planNameL);
+        make.left.equalTo(planNameL.mas_right);
+        make.right.equalTo(creatorL);
+        make.height.equalTo(@16);
+    }];
+    
+    UILabel *planDateL = [UILabel z_labelWithText:@"提交日期: 2022-05-12" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    planDateL.numberOfLines = 0;
+    [self.contentView addSubview:planDateL];
+    [planDateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planNameL.mas_bottom);
+        make.left.equalTo(fillDateL);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.height.equalTo(@34);
+    }];
+
+    UIImageView *statusImageV = [[UIImageView alloc] init];
+    [self.contentView addSubview:statusImageV];
+    [statusImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView);
+        make.right.equalTo(self.contentView).offset(-10);
+        make.height.equalTo(@24);
+    }];
+    
+    self.imageV = imageV;
+    self.imageCoutL = imageCoutL;
+    self.creatorL = creatorL;
+    self.fillDateL = fillDateL;
+    self.nameL = nameL;
+    self.planDateL = planDateL;
+    self.statusImageV = statusImageV;
+}
+
+- (void)setScheduleListModel:(PBScheduleListModel *)scheduleListModel {
+    _scheduleListModel = scheduleListModel;
+    if (_scheduleListModel.Image_Json.count <= 0){
+        self.imageV.image = [UIImage imageNamed:@"schedule_def"];
+        self.imageCoutL.hidden = YES;
+    }else if (_scheduleListModel.Image_Json.count > 99){
+        NSString *imageUrl = [NSString stringWithFormat:@"%@%@",BaseUrl,[_scheduleListModel.Image_Json[0] valueForKey:@"bf_path"]];
+        [self.imageV sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"schedule_def"]];
+        self.imageCoutL.hidden = NO;
+        self.imageCoutL.text = @"99+";
+    }else {
+        NSString *imageUrl = [NSString stringWithFormat:@"%@%@",BaseUrl,[_scheduleListModel.Image_Json[0] valueForKey:@"bf_path"]];
+        [self.imageV sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"schedule_def"]];
+        self.imageCoutL.hidden = NO;
+        self.imageCoutL.text = [NSString stringWithFormat:@"%zd",_scheduleListModel.Image_Json.count];
+    }
+    self.creatorL.text = [NSString stringWithFormat:@"填报人员:  %@", scheduleListModel.MobilePA_CreateUser];
+    self.fillDateL.text = [NSString stringWithFormat:@"填报日期:  %@", scheduleListModel.MobilePA_Unittime];
+    self.nameL.text = scheduleListModel.MobilePA_ProjectName;
+//    self.planDateL.text = [NSString stringWithFormat:@"提交日期:  %@", [scheduleListModel.MobilePA_Insertime isEqualToString:@""]? @"--" : scheduleListModel.MobilePA_Insertime];
+    self.planDateL.text = @"";
+//    if ([_scheduleListModel.MobilePA_state isEqualToString:@"待提交"]) {
+//        self.statusImageV.image = [UIImage imageNamed:@"status_wait"];
+//    }else if([_scheduleListModel.MobilePA_state isEqualToString:@"驳回待提交"]){
+//        self.statusImageV.image = [UIImage imageNamed:@"status_bohui"];
+//    }else if([_scheduleListModel.MobilePA_state isEqualToString:@"待审核"]){
+//        self.statusImageV.image = [UIImage imageNamed:@"status_daishenhe"];
+//    }else if([_scheduleListModel.MobilePA_state isEqualToString:@"已审核"]){
+//        self.statusImageV.image = [UIImage imageNamed:@"status_yishenhe"];
+//    }
+    
+    
+    
+//    if (scheduleListModel.ViewpointID == nil || [scheduleListModel.ViewpointID isEqualToString:@""]) {
+//        [self.imageV sd_setImageWithURL:[NSURL URLWithString:scheduleListModel.bgpicture_src] placeholderImage:[UIImage imageNamed:@"Issue_listimg_defult"]];
+//    }else {
+//        [self.imageV sd_setImageWithURL:[NSURL URLWithString:scheduleListModel.ImageUrl] placeholderImage:[UIImage imageNamed:@"Issue_listimg_defult"]];
+//    }
+    
+}
+
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.h
new file mode 100644
index 0000000..acfe12a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.h
@@ -0,0 +1,18 @@
+//
+//  PBSchedulesElementTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBArtifactsInfoModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSchedulesElementTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^DeleteBlock)(void);
+@property (nonatomic, strong) PBArtifactsInfoModel *artifactsModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.m
new file mode 100644
index 0000000..929fbe6
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSchedulesElementTableViewCell.m
@@ -0,0 +1,57 @@
+//
+//  PBSchedulesElementTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/5.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSchedulesElementTableViewCell.h"
+#import "PBArtifactsInfoModel.h"
+
+@interface PBSchedulesElementTableViewCell()
+@property (nonatomic, weak) UILabel *nameL;
+@end
+@implementation PBSchedulesElementTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UILabel *nameL = [UILabel z_labelWithText:@"构件名称构件名称" Color:PBColor(108, 108, 108) isBold:NO Font:14];
+    [self.contentView addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.equalTo(self.contentView);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-40);
+    }];
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(delete) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView).offset(-12);
+        make.centerY.equalTo(self.contentView);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    self.nameL = nameL;
+}
+
+- (void)setArtifactsModel:(PBArtifactsInfoModel *)artifactsModel {
+    _artifactsModel = artifactsModel;
+    self.nameL.text = artifactsModel.bm_materialname;
+}
+- (void)delete{
+    if (self.DeleteBlock){
+        self.DeleteBlock();
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.h
new file mode 100644
index 0000000..53a5b56
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.h
@@ -0,0 +1,23 @@
+//
+//  PBSitePerTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSitePerModel;
+@class PBSiteMaterialModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSitePerTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^DeleteBlock)(void);
+@property (nonatomic, copy) void(^ChooseTypeBlock)(void);
+@property (nonatomic, strong) PBSitePerModel *sitePerModel;
+@property (nonatomic, assign) NSInteger perIndex;
+@property (nonatomic, strong) PBSiteMaterialModel *siteMaterialModel;
+@property (nonatomic, assign) NSInteger materialIndex;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.m
new file mode 100644
index 0000000..7a466b7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSitePerTableViewCell.m
@@ -0,0 +1,436 @@
+//
+//  PBSitePerTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/30.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSitePerTableViewCell.h"
+#import "PBSitePerModel.h"
+#import "PBSiteMaterialModel.h"
+
+@interface PBSitePerTableViewCell()<UITextFieldDelegate>
+@property (nonatomic, weak) UILabel *chooseTaskL; //所选类型
+@property (nonatomic, weak) UILabel *planProportionL; //计划
+//@property (nonatomic, weak) UILabel *GrandProportionL; //累计
+@property (nonatomic, weak) UIButton *chooseTask;//选择工种
+@property (nonatomic, weak) UITextField *todayTF; //增减
+@property (nonatomic, weak) UITextField *tomTF; //现场
+@property (nonatomic, weak) UILabel *taskNameL; //人员1
+@property (nonatomic, weak) UILabel *typeL;//人员类别 自定义
+@property (nonatomic, weak) UIView *typeBg;//类别输入背景
+@property (nonatomic, weak) UITextField *typeTF;// 人员类别
+@property (nonatomic, weak) UILabel *compalte; // 人员总数
+//@property (nonatomic, strong) UIToolbar *kbToolbar;
+
+@property (nonatomic, weak) UILabel *planunitL;
+//@property (nonatomic, weak) UILabel *GrandunitL;
+@property (nonatomic, weak) UILabel *unitL;
+@property (nonatomic, weak) UILabel *tomunitL;
+@end
+@implementation PBSitePerTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UILabel *taskNameL = [UILabel z_labelWithText:@"人员1" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:14];
+    [self.contentView addSubview:taskNameL];
+    [taskNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(deleteBtn);
+        make.left.equalTo(deleteBtn.mas_right).offset(8);
+    }];
+    UIButton *chooseTask = [[UIButton alloc] init];
+    [chooseTask addTarget:self action:@selector(choosetype) forControlEvents:UIControlEventTouchUpInside];
+    chooseTask.layer.cornerRadius = 4;
+    chooseTask.layer.borderWidth = 1.f;
+    chooseTask.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:chooseTask];
+    [chooseTask mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(deleteBtn.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@44);
+    }];
+    UILabel *chooseTaskL = [UILabel z_labelWithText:@"请选择" Color:[UIColor z_colorWithR:174 G:174 B:174] isBold:NO Font:14];
+    [self.contentView addSubview:chooseTaskL];
+    [chooseTaskL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(chooseTask).offset(12);
+        make.right.equalTo(chooseTask).offset(-44);
+        make.centerY.equalTo(chooseTask);
+    }];
+    UIImageView *chooseImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chooseTask_icon"]];
+    [self.contentView addSubview:chooseImageV];
+    [chooseImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(chooseTask).offset(18);
+        make.right.equalTo(chooseTask).offset(-14);
+        make.size.mas_equalTo(CGSizeMake(12, 10));
+    }];
+    UILabel *typeL = [UILabel z_labelWithText:@"人员类别" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:typeL];
+    [typeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(chooseTask.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+    }];
+    UIView *typeBg = [[UIView alloc] init];
+    typeBg.layer.cornerRadius = 4;
+    typeBg.layer.borderWidth = 1.f;
+    typeBg.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self.contentView addSubview:typeBg];
+    [typeBg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeL.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.height.equalTo(@44);
+    }];
+    UITextField *typeTF = [[UITextField alloc] init];
+    typeTF.placeholder = @"请输入";
+    typeTF.textAlignment= NSTextAlignmentLeft;
+    typeTF.textColor = PBColor(40, 58, 79);
+    typeTF.font = [UIFont fontWithName:Coarse size:16.0];
+    typeTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    typeTF.delegate = self;
+//    todayTF.returnKeyType = UIReturnKeyDone;
+    [self.contentView addSubview:typeTF];
+    [typeTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(typeBg).offset(12);
+        make.right.equalTo(typeBg).offset(-12);
+        make.height.equalTo(@44);
+        make.centerY.equalTo(typeBg);
+    }];
+    
+   
+    UILabel *compalte = [UILabel z_labelWithText:@"人员总数" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:compalte];
+    [compalte mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(typeBg.mas_bottom).offset(16);
+        make.left.equalTo(chooseTask);
+    }];
+    UILabel *todayNum = [UILabel z_labelWithText:@"今日数量" Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:todayNum];
+    [todayNum mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(compalte);
+        make.right.equalTo(self.contentView).offset(-114);
+    }];
+    
+    UIView *PlanBgV = [[UIView alloc] init];
+    PlanBgV.backgroundColor = PBColor(243, 243, 243);
+    PlanBgV.layer.cornerRadius = 4;
+    PlanBgV.layer.borderWidth = 1.f;
+    PlanBgV.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    [self.contentView addSubview:PlanBgV];
+    [PlanBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(compalte.mas_bottom).offset(16);
+        make.left.equalTo(compalte).offset(44);
+        make.size.mas_equalTo(CGSizeMake(112, 88));
+        make.bottom.mas_equalTo(self.contentView).offset(-20);
+    }];
+//    UIView *planBgLine = [[UIView alloc] init];
+//    planBgLine.backgroundColor = PBColor(51, 51, 51);
+//    [self.contentView addSubview:planBgLine];
+//    [planBgLine mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(PlanBgV).offset(43);
+//        make.height.equalTo(@2);
+//        make.left.right.equalTo(PlanBgV);
+//    }];
+    UILabel *planL = [UILabel z_labelWithText:@"计划: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:planL];
+    [planL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(PlanBgV);
+        make.left.equalTo(compalte);
+    }];
+//    UILabel *grandL = [UILabel z_labelWithText:@"累计: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+//    [self.contentView addSubview:grandL];
+//    [grandL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.bottom.equalTo(PlanBgV).offset(-14);
+//        make.left.equalTo(compalte);
+//    }];
+    UILabel *todayL = [UILabel z_labelWithText:@"增减: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:todayL];
+    [todayL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(PlanBgV).offset(14);
+        make.left.equalTo(PlanBgV.mas_right).offset(35);
+    }];
+    UILabel *tomL = [UILabel z_labelWithText:@"现场: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self.contentView addSubview:tomL];
+    [tomL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(PlanBgV).offset(-14);
+        make.left.equalTo(todayL);
+    }];
+    
+    UIView *actualBgV = [[UIView alloc] init];
+    actualBgV.layer.cornerRadius = 4;
+    actualBgV.layer.borderWidth = 1.f;
+    actualBgV.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    [self.contentView addSubview:actualBgV];
+    [actualBgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(PlanBgV);
+        make.left.equalTo(PlanBgV.mas_right).offset(81);
+        make.size.mas_equalTo(CGSizeMake(112, 88));
+    }];
+    UIView *actualBgLine = [[UIView alloc] init];
+    actualBgLine.backgroundColor = PBColor(51, 51, 51);
+    [self.contentView addSubview:actualBgLine];
+    [actualBgLine mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(actualBgV).offset(43);
+        make.height.equalTo(@2);
+        make.left.right.equalTo(actualBgV);
+    }];
+    
+    UILabel *planProportionL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:40 G:58 B:79] isBold:YES Font:16];
+    [self.contentView addSubview:planProportionL];
+    [planProportionL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(PlanBgV);
+        make.left.equalTo(PlanBgV).offset(12);
+        make.right.equalTo(PlanBgV).offset(-28);
+    }];
+    UILabel *planunitL = [UILabel z_labelWithText:@"人" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+    [self.contentView addSubview:planunitL];
+    [planunitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(PlanBgV);
+        make.right.equalTo(PlanBgV).offset(-12);
+    }];
+//    UILabel *GrandProportionL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:40 G:58 B:79] isBold:YES Font:16];
+//    [self.contentView addSubview:GrandProportionL];
+//    [GrandProportionL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(planBgLine.mas_bottom);
+//        make.bottom.equalTo(PlanBgV);
+//        make.left.equalTo(PlanBgV).offset(12);
+//        make.right.equalTo(PlanBgV).offset(-28);
+//    }];
+//    UILabel *GrandunitL = [UILabel z_labelWithText:@"人" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+//    [self.contentView addSubview:GrandunitL];
+//    [GrandunitL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(grandL);
+//        make.right.equalTo(PlanBgV).offset(-12);
+//    }];
+    
+    UITextField *todayTF = [[UITextField alloc] init];
+    todayTF.placeholder = @"请输入";
+    todayTF.textAlignment= NSTextAlignmentLeft;
+    todayTF.textColor = PBColor(40, 58, 79);
+    todayTF.font = [UIFont fontWithName:Coarse size:16.0];
+    todayTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    todayTF.delegate = self;
+//    todayTF.returnKeyType = UIReturnKeyDone;
+    [self.contentView addSubview:todayTF];
+    [todayTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(actualBgV);
+        make.bottom.equalTo(actualBgLine.mas_top);
+        make.left.equalTo(actualBgV).offset(12);
+        make.right.equalTo(actualBgV).offset(-28);
+    }];
+    UILabel *unitL = [UILabel z_labelWithText:@"人" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+    [self.contentView addSubview:unitL];
+    [unitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(todayL);
+        make.right.equalTo(actualBgV).offset(-12);
+    }];
+    UITextField *tomTF = [[UITextField alloc] init];
+    tomTF.placeholder = @"请输入";
+    tomTF.textAlignment= NSTextAlignmentLeft;
+    tomTF.textColor = PBColor(40, 58, 79);
+    tomTF.font = [UIFont fontWithName:Coarse size:16.0];
+    tomTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+//    todayTF.delegate = self;
+//    todayTF.returnKeyType = UIReturnKeyDone;
+    tomTF.delegate = self;
+    [self.contentView addSubview:tomTF];
+    [tomTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(actualBgLine.mas_bottom);
+        make.bottom.equalTo(actualBgV);
+        make.left.equalTo(actualBgV).offset(12);
+        make.right.equalTo(actualBgV).offset(-28);
+    }];
+    UILabel *tomunitL = [UILabel z_labelWithText:@"人" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:YES Font:14];
+    [self.contentView addSubview:tomunitL];
+    [tomunitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(tomL);
+        make.right.equalTo(actualBgV).offset(-12);
+    }];
+
+    self.chooseTaskL = chooseTaskL;
+    self.chooseTask = chooseTask;
+    self.typeL = typeL;
+    self.typeBg = typeBg;
+    self.typeTF = typeTF;
+    self.planProportionL = planProportionL;
+//    self.GrandProportionL = GrandProportionL;
+    self.todayTF = todayTF;
+    self.tomTF = tomTF;
+    self.taskNameL = taskNameL;
+    self.compalte = compalte;
+//    self.todayTF.inputAccessoryView = self.kbToolbar;
+//    self.tomTF.inputAccessoryView = self.kbToolbar;
+//    self.typeTF.inputAccessoryView = self.kbToolbar;
+    
+    self.planunitL = planunitL;
+//    self.GrandunitL = GrandunitL;
+    self.unitL = unitL;
+    self.tomunitL = tomunitL;
+}
+
+- (void)choosetype {
+    if (self.ChooseTypeBlock) {
+        self.ChooseTypeBlock();
+    }
+}
+- (void)deleteAction {
+    if (self.DeleteBlock) {
+        self.DeleteBlock();
+    }
+}
+- (void)setSitePerModel:(PBSitePerModel *)sitePerModel {
+    _sitePerModel = sitePerModel;
+    if ([sitePerModel.MobileUserDetial_Name isEqualToString:@"其他"]) {
+        self.typeL.hidden = NO;
+        self.typeBg.hidden = NO;
+        self.typeTF.hidden = NO;
+        self.typeL.text = @"人员类别";
+        self.typeTF.text = sitePerModel.MobileUserDetial_type;
+        [self.compalte mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.chooseTask.mas_bottom).offset(106);
+        }];
+    } else {
+        self.typeL.hidden = YES;
+        self.typeBg.hidden = YES;
+        self.typeTF.hidden = YES;
+        [self.compalte mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.chooseTask.mas_bottom).offset(16);
+        }];
+    }
+    if (sitePerModel.MobileUserDetial_Name == nil){
+        self.chooseTaskL.textColor = PBColor(174, 174, 174);
+        self.chooseTaskL.text = @"请选择";
+        self.planProportionL.text = nil;
+    } else {
+        self.chooseTaskL.textColor = PBColor(51, 51, 51);
+        self.chooseTaskL.text = sitePerModel.MobileUserDetial_Name;
+        self.planProportionL.text = sitePerModel.MobileUserDetial_PlanNum;
+    }
+    self.compalte.text = @"人员总量";
+    self.planunitL.text = @"人";
+//    self.GrandunitL.text = @"人";
+    self.unitL.text = @"人";
+    self.tomunitL.text = @"人";
+//    self.GrandProportionL.text = sitePerModel.MobileUserDetial_AddNum;
+    self.todayTF.text = sitePerModel.MobileUserDetial_AdddelNum;
+    self.tomTF.text = sitePerModel.MobileUserDetial_NewNum;
+}
+- (void)setSiteMaterialModel:(PBSiteMaterialModel *)siteMaterialModel{
+    _siteMaterialModel = siteMaterialModel;
+    if ([siteMaterialModel.MaterialsDetial_Name isEqualToString:@"其他"]) {
+        self.typeL.hidden = NO;
+        self.typeBg.hidden = NO;
+        self.typeTF.hidden = NO;
+        self.typeL.text = @"机械类别";
+        self.typeTF.text = siteMaterialModel.MaterialsDetial_type;
+        [self.compalte mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.chooseTask.mas_bottom).offset(106);
+        }];
+    } else {
+        self.typeL.hidden = YES;
+        self.typeBg.hidden = YES;
+        self.typeTF.hidden = YES;
+        [self.compalte mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.chooseTask.mas_bottom).offset(16);
+        }];
+    }
+    if (siteMaterialModel.MaterialsDetial_Name == nil){
+        self.chooseTaskL.textColor = PBColor(174, 174, 174);
+        self.chooseTaskL.text = @"请选择";
+        self.planProportionL.text = nil;
+    } else {
+        self.chooseTaskL.textColor = PBColor(51, 51, 51);
+        self.chooseTaskL.text = siteMaterialModel.MaterialsDetial_Name;
+        self.planProportionL.text = siteMaterialModel.MaterialsDetial_PlanNum;
+    }
+    self.compalte.text = @"机械总量";
+    self.planunitL.text = @"台";
+//    self.GrandunitL.text = @"台";
+    self.unitL.text = @"台";
+    self.tomunitL.text = @"台";
+//    self.GrandProportionL.text = siteMaterialModel.MaterialsDetial_AddNum;
+    self.todayTF.text = siteMaterialModel.MaterialsDetial_AdddelNum;
+    self.tomTF.text = siteMaterialModel.MaterialsDetial_NewNum;
+}
+
+- (void)setPerIndex:(NSInteger)perIndex {
+    _perIndex = perIndex;
+    self.taskNameL.text = [NSString stringWithFormat:@"人员%zd",perIndex];
+}
+- (void)setMaterialIndex:(NSInteger)materialIndex {
+    _materialIndex = materialIndex;
+    self.taskNameL.text = [NSString stringWithFormat:@"机械%zd",materialIndex];
+}
+//- (UIToolbar *) kbToolbar {
+//    if (_kbToolbar == nil) {
+//        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+//        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+//        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+//    }
+//    return _kbToolbar;
+//}
+//- (void)closeKeyboard {
+//    [self endEditing:YES];
+//}
+
+#pragma mark - UITextFieldDelegate
+- (void)textFieldDidEndEditing:(UITextField *)textField{
+    if(self.sitePerModel) {
+        if(textField == self.typeTF) {
+            self.sitePerModel.MobileUserDetial_type = textField.text;
+        }else if (textField == self.todayTF){
+            self.sitePerModel.MobileUserDetial_AdddelNum = textField.text;
+            NSInteger planNum = [self.sitePerModel.MobileUserDetial_PlanNum integerValue];
+            NSInteger adddelNum = [self.sitePerModel.MobileUserDetial_AdddelNum integerValue];
+            self.sitePerModel.MobileUserDetial_NewNum = [NSString stringWithFormat:@"%zd", planNum + adddelNum];
+            self.tomTF.text = self.sitePerModel.MobileUserDetial_NewNum;
+        }else {
+            self.sitePerModel.MobileUserDetial_NewNum = textField.text;
+            NSInteger planNum = [self.sitePerModel.MobileUserDetial_PlanNum integerValue];
+            NSInteger newNum = [self.sitePerModel.MobileUserDetial_NewNum integerValue];
+            self.sitePerModel.MobileUserDetial_AdddelNum = [NSString stringWithFormat:@"%zd", newNum - planNum];
+            self.todayTF.text = self.sitePerModel.MobileUserDetial_AdddelNum;
+            
+//            NSInteger site = [textField.text integerValue];
+//            NSInteger addNum = [self.sitePerModel.MobileUserDetial_AddNum integerValue];
+//            self.sitePerModel.MobileUserDetial_AddNum = [NSString stringWithFormat:@"%zd",addNum + site];
+//            self.GrandProportionL.text = self.sitePerModel.MobileUserDetial_AddNum;
+        }
+    }else {
+        if(textField == self.typeTF) {
+            self.siteMaterialModel.MaterialsDetial_type = textField.text;
+        }else if (textField == self.todayTF){
+            self.siteMaterialModel.MaterialsDetial_AdddelNum = textField.text;
+            NSInteger planNum = [self.siteMaterialModel.MaterialsDetial_PlanNum integerValue];
+            NSInteger adddelNum = [self.siteMaterialModel.MaterialsDetial_AdddelNum integerValue];
+            self.siteMaterialModel.MaterialsDetial_NewNum = [NSString stringWithFormat:@"%zd", planNum + adddelNum];
+            self.tomTF.text = self.siteMaterialModel.MaterialsDetial_NewNum;
+        }else {
+            self.siteMaterialModel.MaterialsDetial_NewNum = textField.text;
+            NSInteger planNum = [self.siteMaterialModel.MaterialsDetial_PlanNum integerValue];
+            NSInteger newNum = [self.siteMaterialModel.MaterialsDetial_NewNum integerValue];
+            self.siteMaterialModel.MaterialsDetial_AdddelNum = [NSString stringWithFormat:@"%zd", newNum - planNum];
+            self.todayTF.text = self.siteMaterialModel.MaterialsDetial_AdddelNum;
+            
+//            NSInteger site = [textField.text integerValue];
+//            NSInteger addNum = [self.siteMaterialModel.MaterialsDetial_AddNum integerValue];
+//            self.siteMaterialModel.MaterialsDetial_AddNum = [NSString stringWithFormat:@"%zd",addNum + site];
+//            self.GrandProportionL.text = self.siteMaterialModel.MaterialsDetial_AddNum;
+        }
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.h
new file mode 100644
index 0000000..2d93cab
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBSuperviseTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/1.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSuperviseModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSuperviseTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^DeleteBlock)(void);
+@property (nonatomic, strong) PBSuperviseModel *superviseModel;
+@property (nonatomic, assign) NSInteger superviseIndex;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.m
new file mode 100644
index 0000000..d3f0e72
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBSuperviseTableViewCell.m
@@ -0,0 +1,220 @@
+//
+//  PBSuperviseTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/1.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBSuperviseTableViewCell.h"
+#import "PBSuperviseModel.h"
+
+#define maxTextCount 200
+@interface PBSuperviseTableViewCell()<UITextViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UILabel *promptL;
+//@property (nonatomic, strong) UIToolbar *kbToolbar;
+@property (nonatomic, weak) UILabel *taskNameL;
+@end
+
+@implementation PBSuperviseTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UILabel *taskNameL = [UILabel z_labelWithText:@"1" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:14];
+    [self.contentView addSubview:taskNameL];
+    [taskNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(deleteBtn);
+        make.left.equalTo(deleteBtn.mas_right).offset(8);
+    }];
+    
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(deleteBtn.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.bottom.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@132);
+    }];
+    bgView.layer.cornerRadius = 4;
+    bgView.layer.borderWidth = 1;
+    bgView.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= PBColor(40, 58, 79);
+    textView.font = [UIFont boldSystemFontOfSize:15];
+//    [textView becomeFirstResponder];
+    textView.delegate = self;
+//    textView.text = _text;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(12);
+        make.left.equalTo(bgView).offset(12);
+        make.right.equalTo(bgView).offset(-12);
+        make.bottom.equalTo(bgView).offset(-12);
+    }];
+//    textView.inputAccessoryView = self.kbToolbar;
+
+    UILabel *promptL= [UILabel z_labelWithText:@"请输入..." Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+//    if (_text.length != 0) {
+//        promptL.hidden = YES;
+//    }
+//    self.topView = topView;
+    self.textView = textView;
+    self.promptL = promptL;
+    self.taskNameL = taskNameL;
+}
+- (void)deleteAction {
+    if (self.DeleteBlock) {
+        self.DeleteBlock();
+    }
+}
+#pragma mark - UITextViewDelete
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
+ replacementText:(NSString *)text {
+    NSLog(@"%zd",textView.text.length);
+    NSLog(@"===shouldChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //获取高亮部分内容
+    //NSString * selectedtext = [textView textInRange:selectedRange];
+    //如果有高亮且当前字数开始位置小于最大限制时允许输入
+    if (selectedRange && pos) {
+        NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
+        NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
+        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
+        if (offsetRange.location < maxTextCount) {
+            return YES;
+        }
+        else{
+            return NO;
+        }
+    }
+    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    NSInteger caninputlen = maxTextCount - comcatstr.length;
+    if (caninputlen >= 0){
+        return YES;
+    }else{
+        NSInteger len = text.length + caninputlen;
+        //防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
+        NSRange rg = {0,MAX(len,0)};
+        if (rg.length > 0){
+            NSString *s = @"";
+            //判断是否只普通的字符或asc码(对于中文和表情返回NO)
+            BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
+            if (asc) {
+                s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
+            }else{
+                __block NSInteger idx = 0;
+                __block NSString  *trimString = @"";//截取出的字串
+                //使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
+                [text enumerateSubstringsInRange:NSMakeRange(0, [text length])
+                                         options:NSStringEnumerationByComposedCharacterSequences
+                                      usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
+                                          if (idx >= rg.length) {
+                                              *stop = YES; //取出所需要就break,提高效率
+                                              return ;
+                                          }
+                                          trimString = [trimString stringByAppendingString:substring];
+                                          idx++;
+                                      }];
+                s = trimString;
+            }
+            //rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
+            [textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
+            //既然是超出部分截取了,哪一定是最大限制了。
+//            self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
+        }
+        return NO;
+    }
+}
+
+
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    NSLog(@"===DidChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //如果在变化中是高亮部分在变,就不要计算字符了
+    if (selectedRange && pos) {
+        return;
+    }
+    NSString  *nsTextContent = textView.text;
+    NSInteger existTextNum = nsTextContent.length;
+    if (existTextNum > maxTextCount){
+        //截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
+        NSString *s = [nsTextContent substringToIndex:maxTextCount];
+        [textView setText:s];
+    }
+    self.superviseModel.MobileSupervise_Name = textView.text;
+    //不让显示负数 口口日
+//    self.textLengthL.text = [NSString stringWithFormat:@"%ld/%d",MAX(0,maxTextCount - existTextNum),maxTextCount];
+}
+//- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
+//    if (self.endEditBlock) {
+//        self.endEditBlock(textView.text);
+//    }
+//    return YES;
+//}
+
+
+- (void)setSuperviseModel:(PBSuperviseModel *)superviseModel {
+    _superviseModel = superviseModel;
+    self.textView.text = superviseModel.MobileSupervise_Name;
+    if (self.textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    self.textView.editable = YES;
+}
+- (void)setSuperviseIndex:(NSInteger)superviseIndex {
+    _superviseIndex = superviseIndex;
+    self.taskNameL.text = [NSString stringWithFormat:@"%zd",superviseIndex];
+}
+//- (UIToolbar *) kbToolbar {
+//    if (_kbToolbar == nil) {
+//        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+//        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+//        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+//    }
+//    return _kbToolbar;
+//}
+
+//- (void)closeKeyboard {
+//    [self endEditing:YES];
+//}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.h
new file mode 100644
index 0000000..1850deb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.h
@@ -0,0 +1,21 @@
+//
+//  PBTaskHeaderView.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBSchedulePlanModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBTaskHeaderView : UIView
+@property (nonatomic, copy) void(^ChooseDate)(void);
+@property (nonatomic, copy) void(^textEditBlock)(NSString *text);
+@property (nonatomic, strong) PBSchedulePlanModel *schedulePlanModel;
+@property (nonatomic, copy) NSString *fillDate;
+@property (nonatomic, copy) NSString *unitText;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.m
new file mode 100644
index 0000000..62ada25
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBTaskHeaderView.m
@@ -0,0 +1,160 @@
+//
+//  PBTaskHeaderView.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/9/20.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBTaskHeaderView.h"
+#import "PBSchedulePlanModel.h"
+
+@interface PBTaskHeaderView()<UITextFieldDelegate>
+@property (nonatomic, weak) UILabel *nameL;
+@property (nonatomic, weak) UILabel *dateL;
+@property (nonatomic, copy) NSString *currentDate;
+@property (nonatomic, weak) UITextField *unitTF;
+@end
+@implementation PBTaskHeaderView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    UIView *iconV = [[UIView alloc] init];
+    iconV.backgroundColor = PBColor(95, 158, 249);
+    [self addSubview:iconV];
+    [iconV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(20);
+        make.size.mas_equalTo(CGSizeMake(6, 20));
+        make.left.equalTo(self);
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"基本信息" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:18];
+    [self addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(iconV);
+        make.left.equalTo(iconV.mas_right).offset(5);
+    }];
+    UILabel *planNameL = [UILabel z_labelWithText:@"计划名称: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self addSubview:planNameL];
+    [planNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(iconV.mas_bottom).offset(14);
+        make.left.equalTo(self).offset(12);
+        make.height.equalTo(@16);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"新建隆子机场总进度" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    [self addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planNameL);
+        make.left.equalTo(planNameL.mas_right);
+        make.height.equalTo(@16);
+    }];
+    
+    UILabel *unitL = [UILabel z_labelWithText:@"施工单位: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self addSubview:unitL];
+    [unitL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(planNameL.mas_bottom).offset(8);
+        make.left.equalTo(self).offset(12);
+        make.height.equalTo(@44);
+    }];
+    UITextField *unitTF = [[UITextField alloc] init];
+    unitTF.placeholder = @"请输入...";
+    unitTF.textAlignment= NSTextAlignmentLeft;
+    unitTF.textColor = PBColor(108, 108, 108);
+    unitTF.font = [UIFont fontWithName:Coarse size:14.0];
+    unitTF.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
+    unitTF.delegate = self;
+    unitTF.layer.cornerRadius = 4;
+    unitTF.layer.borderWidth = 1.f;
+    unitTF.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    unitTF.leftViewMode = UITextFieldViewModeAlways;
+    unitTF.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 12, 44)];
+    [self addSubview:unitTF];
+    [unitTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(unitL);
+        make.right.equalTo(self).offset(-12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@(self.width - 98));
+    }];
+    
+    UILabel *fillDateL = [UILabel z_labelWithText:@"填报日期: " Color:[UIColor z_colorWithR:51 G:51 B:51] isBold:YES Font:14];
+    [self addSubview:fillDateL];
+    [fillDateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(unitL.mas_bottom).offset(8);
+        make.left.equalTo(self).offset(12);
+        make.height.equalTo(@44);
+    }];
+    UIButton *borderV = [[UIButton alloc] init];
+    [borderV addTarget:self action:@selector(chooseDate) forControlEvents:UIControlEventTouchUpInside];
+    borderV.layer.cornerRadius = 4;
+    borderV.layer.borderWidth = 1.f;
+    borderV.layer.borderColor = [[UIColor z_colorWithR:108 G:108 B:108] CGColor];
+    [self addSubview:borderV];
+    [borderV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(fillDateL);
+//        make.left.equalTo(fillDateL.mas_right);
+        make.right.equalTo(self).offset(-12);
+        make.height.equalTo(@44);
+        make.width.equalTo(@(self.width - 98));
+    }];
+    
+    UILabel *dateL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:108 G:108 B:108] isBold:NO Font:14];
+    [self addSubview:dateL];
+    [dateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(borderV).offset(12);
+        make.centerY.equalTo(borderV);
+    }];
+    UIImageView *chooseDateV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"date_btn"]];
+    [self addSubview:chooseDateV];
+    [chooseDateV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(borderV).offset(10);
+        make.right.equalTo(borderV).offset(-10);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(243, 243, 244);
+    [self addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.equalTo(@2);
+        make.left.right.bottom.equalTo(self);
+    }];
+    self.nameL = nameL;
+    self.dateL = dateL;
+    self.unitTF = unitTF;
+}
+- (void)chooseDate {
+    if (self.ChooseDate) {
+        self.ChooseDate();
+    }
+}
+- (void)setSchedulePlanModel:(PBSchedulePlanModel *)schedulePlanModel {
+    _schedulePlanModel = schedulePlanModel;
+    self.nameL.text = schedulePlanModel.Name;
+}
+- (void)setFillDate:(NSString *)fillDate {
+    _fillDate = fillDate;
+    self.dateL.text = fillDate;
+}
+- (void)setUnitText:(NSString *)unitText {
+    _unitText = unitText;
+    self.unitTF.text = unitText;
+}
+#pragma mark - UITextFieldDelegate
+- (void)textFieldDidEndEditing:(UITextField *)textField{
+    self.unitText = textField.text;
+    if (self.textEditBlock) {
+        self.textEditBlock(textField.text);
+    }
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.h
new file mode 100644
index 0000000..818fe58
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.h
@@ -0,0 +1,19 @@
+//
+//  PBunPlanTaskTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/29.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBTaskScheduleModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBunPlanTaskTableViewCell : UITableViewCell
+@property (nonatomic, copy) void(^DeleteBlock)(void);
+@property (nonatomic, strong) PBTaskScheduleModel *taskScheduleModel;
+@property (nonatomic, assign) NSInteger taskIndex;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.m
new file mode 100644
index 0000000..190047b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Project/Schedule/Views/PBunPlanTaskTableViewCell.m
@@ -0,0 +1,222 @@
+//
+//  PBunPlanTaskTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/8/29.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "PBunPlanTaskTableViewCell.h"
+#import "PBTaskScheduleModel.h"
+
+#define maxTextCount 200
+@interface PBunPlanTaskTableViewCell()<UITextViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, weak) UITextView *textView;
+@property (nonatomic, weak) UILabel *promptL;
+//@property (nonatomic, strong) UIToolbar *kbToolbar;
+@property (nonatomic, weak) UILabel *taskNameL;
+@end
+@implementation PBunPlanTaskTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIButton *deleteBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete_task"]];
+    [deleteBtn addTarget:self action:@selector(deleteAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.contentView addSubview:deleteBtn];
+    [deleteBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UILabel *taskNameL = [UILabel z_labelWithText:@"任务1" Color:[UIColor z_colorWithR:95 G:158 B:249] isBold:YES Font:14];
+    [self.contentView addSubview:taskNameL];
+    [taskNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(deleteBtn);
+        make.left.equalTo(deleteBtn.mas_right).offset(8);
+    }];
+    
+    UIView *bgView = [[UIView alloc] init];
+    bgView.backgroundColor = [UIColor whiteColor];
+    [self.contentView addSubview:bgView];
+    [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(deleteBtn.mas_bottom).offset(6);
+        make.left.equalTo(self.contentView).offset(12);
+        make.right.equalTo(self.contentView).offset(-12);
+        make.bottom.equalTo(self.contentView).offset(-20);
+        make.height.equalTo(@132);
+    }];
+    bgView.layer.cornerRadius = 4;
+    bgView.layer.borderWidth = 1;
+    bgView.layer.borderColor = PBColor(108, 108, 108).CGColor;
+    
+    UITextView *textView = [[UITextView alloc] init];
+    textView.textColor= PBColor(40, 58, 79);
+    textView.font = [UIFont boldSystemFontOfSize:15];
+//    [textView becomeFirstResponder];
+    textView.delegate = self;
+//    textView.text = _text;
+    [bgView addSubview:textView];
+    [textView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgView).offset(12);
+        make.left.equalTo(bgView).offset(12);
+        make.right.equalTo(bgView).offset(-12);
+        make.bottom.equalTo(bgView).offset(-12);
+    }];
+//    textView.inputAccessoryView = self.kbToolbar;
+
+    UILabel *promptL= [UILabel z_labelWithText:@"请填写计划外的工作内容" Color:PBColor(97, 111, 125) isBold:YES Font:15];
+    [bgView addSubview:promptL];
+    [promptL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(textView).offset(8);
+        make.left.equalTo(textView).offset(6);
+    }];
+//    if (_text.length != 0) {
+//        promptL.hidden = YES;
+//    }
+//    self.topView = topView;
+    self.textView = textView;
+    self.promptL = promptL;
+    self.taskNameL = taskNameL;
+}
+- (void)deleteAction {
+    if (self.DeleteBlock) {
+        self.DeleteBlock();
+    }
+}
+#pragma mark - UITextViewDelete
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
+ replacementText:(NSString *)text {
+    NSLog(@"%zd",textView.text.length);
+    NSLog(@"===shouldChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //获取高亮部分内容
+    //NSString * selectedtext = [textView textInRange:selectedRange];
+    //如果有高亮且当前字数开始位置小于最大限制时允许输入
+    if (selectedRange && pos) {
+        NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
+        NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
+        NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
+        if (offsetRange.location < maxTextCount) {
+            return YES;
+        }
+        else{
+            return NO;
+        }
+    }
+    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
+    NSInteger caninputlen = maxTextCount - comcatstr.length;
+    if (caninputlen >= 0){
+        return YES;
+    }else{
+        NSInteger len = text.length + caninputlen;
+        //防止当text.length + caninputlen < 0时,使得rg.length为一个非法最大正数出错
+        NSRange rg = {0,MAX(len,0)};
+        if (rg.length > 0){
+            NSString *s = @"";
+            //判断是否只普通的字符或asc码(对于中文和表情返回NO)
+            BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
+            if (asc) {
+                s = [text substringWithRange:rg];//因为是ascii码直接取就可以了不会错
+            }else{
+                __block NSInteger idx = 0;
+                __block NSString  *trimString = @"";//截取出的字串
+                //使用字符串遍历,这个方法能准确知道每个emoji是占一个unicode还是两个
+                [text enumerateSubstringsInRange:NSMakeRange(0, [text length])
+                                         options:NSStringEnumerationByComposedCharacterSequences
+                                      usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
+                                          if (idx >= rg.length) {
+                                              *stop = YES; //取出所需要就break,提高效率
+                                              return ;
+                                          }
+                                          trimString = [trimString stringByAppendingString:substring];
+                                          idx++;
+                                      }];
+                s = trimString;
+            }
+            //rang是指从当前光标处进行替换处理(注意如果执行此句后面返回的是YES会触发didchange事件)
+            [textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
+            //既然是超出部分截取了,哪一定是最大限制了。
+//            self.textLengthL.text = [NSString stringWithFormat:@"%d/%ld",0,(long)maxTextCount];
+        }
+        return NO;
+    }
+}
+
+
+- (void)textViewDidChange:(UITextView *)textView{
+    if (textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+    NSLog(@"===DidChangeText");
+    UITextRange *selectedRange = [textView markedTextRange];
+    //获取高亮部分
+    UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
+    //如果在变化中是高亮部分在变,就不要计算字符了
+    if (selectedRange && pos) {
+        return;
+    }
+    NSString  *nsTextContent = textView.text;
+    NSInteger existTextNum = nsTextContent.length;
+    if (existTextNum > maxTextCount){
+        //截取到最大位置的字符(由于超出截部分在should时被处理了所在这里这了提高效率不再判断)
+        NSString *s = [nsTextContent substringToIndex:maxTextCount];
+        [textView setText:s];
+    }
+    self.taskScheduleModel.NoProgress_Name = textView.text;
+    //不让显示负数 口口日
+//    self.textLengthL.text = [NSString stringWithFormat:@"%ld/%d",MAX(0,maxTextCount - existTextNum),maxTextCount];
+}
+//- (BOOL)textViewShouldEndEditing:(UITextView *)textView {
+//    if (self.endEditBlock) {
+//        self.endEditBlock(textView.text);
+//    }
+//    return YES;
+//}
+
+- (void)setTaskScheduleModel:(PBTaskScheduleModel *)taskScheduleModel {
+    _taskScheduleModel = taskScheduleModel;
+    self.textView.text = taskScheduleModel.NoProgress_Name;
+    if (self.textView.text.length == 0) {
+        self.promptL.hidden = NO;
+    }else {
+        self.promptL.hidden = YES;
+    }
+//    if (examineAddModel.isAddExamine) {
+        self.textView.editable = YES;
+//    }else {
+//        self.textView.editable = NO;
+//    }
+}
+- (void)setTaskIndex:(NSInteger)taskIndex {
+    _taskIndex = taskIndex;
+    self.taskNameL.text = [NSString stringWithFormat:@"任务%zd",taskIndex];
+}
+//- (UIToolbar *) kbToolbar {
+//    if (_kbToolbar == nil) {
+//        _kbToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, MainScreenWidth, 44)];
+//        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(closeKeyboard)];
+//        _kbToolbar.items = @[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneItem];
+//    }
+//    return _kbToolbar;
+//}
+
+//- (void)closeKeyboard {
+//    [self endEditing:YES];
+//}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.h
new file mode 100644
index 0000000..3faa21a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.h
@@ -0,0 +1,17 @@
+//
+//  PBAnnotationView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/13.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <MAMapKit/MAMapKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBAnnotationView : MAAnnotationView
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.m
new file mode 100644
index 0000000..dc92e76
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBAnnotationView.m
@@ -0,0 +1,23 @@
+//
+//  PBAnnotationView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/13.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBAnnotationView.h"
+#import "PBProjectModel.h"
+@implementation PBAnnotationView
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.h
new file mode 100644
index 0000000..5d458ac
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.h
@@ -0,0 +1,70 @@
+//
+//  PBProjectModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBProjectModel : NSObject
+@property (nonatomic, copy) NSString *fullname;
+@property (nonatomic, copy) NSString *Description;
+@property (nonatomic, copy) NSString *manager;
+@property (nonatomic, assign) BOOL ispublic;
+@property (nonatomic, copy) NSString *thumbnailurl;
+@property (nonatomic, copy) NSString *BOI_smallimgurl;
+@property (nonatomic, copy) NSString *organizeid;
+@property (nonatomic, copy) NSString *organizeextendid;
+@property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *encode;
+@property (nonatomic, copy) NSString *createdate;
+@property (nonatomic, copy) NSString *BO_CreateDate;
+@property (nonatomic, copy) NSString *managerid;
+@property (nonatomic, copy) NSString *nature;
+@property (nonatomic, copy) NSString *bimcomposerid;
+@property (nonatomic, copy) NSString *status;
+@property (nonatomic, copy) NSString *color;
+@property (nonatomic, copy) NSString *boi_originimg;
+@property (nonatomic, copy) NSString *boi_miniimg;
+@property (nonatomic, assign) float bog_longitude;
+@property (nonatomic, assign) float bog_latitude;
+@property (nonatomic, assign) float bog_height;
+@property (nonatomic, copy) NSString *com_FullName;
+@property (nonatomic, copy) NSString *endTime;
+@property (nonatomic, copy) NSString *bo2_constructionUnit;
+@property (nonatomic, copy) NSString *bo2_monitorUnit;
+@property (nonatomic, copy) NSString *bo2_modelCount;
+@property (nonatomic, assign) BOOL isFavorite;
+@end
+/*
+fullname : "ProBIM"
+description : "请输入项目简介"
+manager : "王海彬"
+ispublic : "0"
+thumbnailurl : "https://www.probim.cn:8080/ProjectImgs/2019_10_22/615da512-a551-4959-969f-64238cd92eca_min.bmp"
+BOI_smallimgurl : ""
+organizeid : "c1baa9d2-abb3-4c4d-88c9-f55b5c0585fc"
+organizeextendid : "c775796c-2ecc-413e-9c45-2c4da6a6336c"
+title : "ProBIM"
+encode : ""
+createdate : "2019-07-02 16:31:59"
+BO_CreateDate : "2019-07-02T16:31:59"
+managerid : "d46634cb-404d-4819-9b94-20208be90e35"
+nature : "Activity"
+bimcomposerid : "734ca1e0-4f4a-e842-6b84-f59cd1c7b218"
+status : "0"
+color : ""
+boi_originimg : "/ProjectImgs/2019_10_22/ccbcfa37-c82e-4196-b413-7c13e657c3d9.bmp"
+boi_miniimg : "/ProjectImgs/2019_10_22/615da512-a551-4959-969f-64238cd92eca_min.bmp"
+bog_longitude : 108.28793935925148
+bog_latitude : 34.9617233071049
+bog_height : 0
+com_FullName : "北京东晨工元科技发展有限公司"
+endTime : ""
+bo2_constructionUnit : ""
+bo2_monitorUnit : ""
+bo2_modelCount : 0
+isFavorite : false
+*/
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.m
new file mode 100644
index 0000000..e57a909
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBProjectModel.m
@@ -0,0 +1,17 @@
+//
+//  PBProjectModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/16.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBProjectModel.h"
+
+@implementation PBProjectModel
++ (NSDictionary *)modelCustomPropertyMapper {
+    return  @{
+              @"Description":@"description"
+              };
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.h
new file mode 100644
index 0000000..8ede416
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.h
@@ -0,0 +1,70 @@
+//
+//  PBUnReadMesModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBUnReadMesModel : NSObject
+@property (nonatomic, copy) NSString *Operator;
+@property (nonatomic, copy) NSString *Op_RealName;
+@property (nonatomic, copy) NSString *BI_IssueId;
+@property (nonatomic, copy) NSString *BI_Title;
+@property (nonatomic, copy) NSString *BIT_ID;
+@property (nonatomic, copy) NSString *BIT_Content;
+@property (nonatomic, copy) NSString *docid;
+@property (nonatomic, copy) NSString *docname;
+@property (nonatomic, copy) NSString *modelid;
+@property (nonatomic, copy) NSString *modelname;
+@property (nonatomic, copy) NSString *orgid;
+@property (nonatomic, copy) NSString *orgm;
+@property (nonatomic, copy) NSString *roleid;
+@property (nonatomic, copy) NSString *rolem;
+@property (nonatomic, copy) NSString *ExamineID;
+@property (nonatomic, copy) NSString *ExamineRemark;
+@property (nonatomic, copy) NSString *isRead;
+@property (nonatomic, copy) NSString *isAlert;
+@property (nonatomic, copy) NSString *ExtDataContent;
+@property (nonatomic, copy) NSString *mme_guid;
+@property (nonatomic, copy) NSString *mu_guid;
+@property (nonatomic, assign) NSInteger LogAndMsgType;
+@property (nonatomic, copy) NSString *ExtData;
+@property (nonatomic, copy) NSString *mm_createdatetimestr;
+@property (nonatomic, copy) NSString *mm_objname;
+@property (nonatomic, copy) NSString *mm_objid;
+@property (nonatomic, copy) NSString *mme_ProjectID;
+@property (nonatomic, copy) NSString *BIMComposerId;
+@end
+/*
+Operator : "d46634cb-404d-4819-9b94-20208be90e35"
+Op_RealName : "王海彬"
+BI_IssueId : "851b99d8-5c4f-4fc4-832f-3cd5d8f1f4f3"
+BI_Title : "Yidong"
+BIT_ID : "60c95e69-e6a0-41b8-9a2c-c917d64b2af8"
+BIT_Content : "@222"
+docid : null
+docname : null
+modelid : null
+modelname : null
+orgid : null
+orgm : null
+roleid : null
+rolem : null
+ExamineID : null
+ExamineRemark : null
+isRead : "0"
+isAlert : "1"
+ExtDataContent : "【王海彬】向问题【Yidong】中添加了评论【@222】"
+mme_guid : "0075911c-3299-4be5-bfdd-92571cbbd266"
+mu_guid : "1356ff7d-4334-4e19-b028-8c4cf4c0596e"
+LogAndMsgType : 7
+ExtData : "【@Operator|d46634cb-404d-4819-9b94-20208be90e35】于【2019-08-22 14:18:49】添加了问题【@IssueId|851b99d8-5c4f-4fc4-832f-3cd5d8f1f4f3】的评论【@CommentID|60c95e69-e6a0-41b8-9a2c-c917d64b2af8】 "
+mm_createdatetimestr : null
+mm_objname : "Yidong"
+mm_objid : "851b99d8-5c4f-4fc4-832f-3cd5d8f1f4f3"
+mme_ProjectID : "f6285707-775c-4d21-ad71-5517708638a8"
+BIMComposerId : "c14075a2-6c91-1fdb-3fbe-76bf898c24cf"
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.m
new file mode 100644
index 0000000..f292142
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Models/PBUnReadMesModel.m
@@ -0,0 +1,13 @@
+//
+//  PBUnReadMesModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBUnReadMesModel.h"
+
+@implementation PBUnReadMesModel
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.h
new file mode 100644
index 0000000..e09934e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.h
@@ -0,0 +1,12 @@
+//
+//  PBChangePWController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/21.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@interface PBChangePWController : UIViewController
+@property (nonatomic, copy) void (^ChangePWCompleteBlock)(void);
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.m
new file mode 100644
index 0000000..d6a802a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBChangePWController.m
@@ -0,0 +1,160 @@
+//
+//  PBChangePWController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/21.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBChangePWController.h"
+#import "PGGCryptoDES.h"
+#import <JPUSHService.h>
+@interface PBChangePWController ()<UITextFieldDelegate>
+@property (nonatomic, weak) UITextField *originalPwTF;
+@property (nonatomic, weak) UITextField *setPwTF;
+@property (nonatomic, weak) UITextField *confirmPwTF;
+@end
+
+@implementation PBChangePWController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.f) {
+        self.edgesForExtendedLayout = UIRectEdgeNone;
+    }
+    [self setupNav];
+    [self setupUI];
+}
+
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+    [self.view endEditing:NO];
+}
+- (void)setupNav {
+    self.title = @"修改密码";
+    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Project_nav_back"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backItem;
+    UIBarButtonItem *saveItem = [[UIBarButtonItem alloc] initWithTitle:@"确认" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
+    self.navigationItem.rightBarButtonItem = saveItem;
+    
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)saveAction {
+    NSString *oldpass = self.originalPwTF.text;
+    NSString *newpass = self.setPwTF.text;
+    NSString *againpass = self.confirmPwTF.text;
+    if ([oldpass isEqualToString:@""] || [newpass isEqualToString:@""] || [againpass isEqualToString:@""]) {
+        [YJProgressHUD showMessage:@"请填写完整" inView:self.view];
+        return;
+    }
+    if ([oldpass isEqualToString:newpass]) {
+        [YJProgressHUD showMessage:@"新密码不能和当前密码相同" inView:self.view];
+        return;
+    }
+    if (![newpass isEqualToString:againpass]) {
+        [YJProgressHUD showMessage:@"两次输入的新密码不同" inView:self.view];
+        return;
+    }
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSString *oldAES = [PGGCryptoDES encryptUseDES:oldpass];
+    NSString *newAES = [PGGCryptoDES encryptUseDES:newpass];
+    [[PBNetworkTools sharedTools] RequestSubmitResetPasswordWithOldPassword:oldAES NewPassword:newAES andCallBack:^(NSURLResponse *response, id responseObject, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"修改失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        NSDictionary *dict = [NSString convertTodictionaryOrArr:str];
+        int type = [[dict valueForKey:@"Type"] intValue];
+        if (type == 1) {
+            [YJProgressHUD showMessage:@"修改成功" inView:self.view];
+            dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC);
+            dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
+                [self.navigationController popViewControllerAnimated:NO];
+                NSFileManager *manager=[NSFileManager defaultManager];
+                NSString *filepath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"login.plist"];//这里就是你将要删除的沙盒路径(.plist文件,名字
+                [manager removeItemAtPath:filepath error:nil];
+                [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
+                    NSLog(@"%zd--%@--%zd",iResCode,iAlias,seq);
+                } seq:10];
+                [self.navigationController popViewControllerAnimated:NO];
+                if (self.ChangePWCompleteBlock){
+                    self.ChangePWCompleteBlock();
+                }  
+            });
+        }else {
+            [YJProgressHUD showMessage:[dict valueForKey:@"Message"] inView:self.view];
+        }
+    }];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    UITextField *originalPwTF = [[UITextField alloc] init];
+    originalPwTF.placeholder = @"请输入原密码";
+    originalPwTF.keyboardType = UIKeyboardTypeASCIICapable;
+    originalPwTF.secureTextEntry = YES;
+    originalPwTF.clearButtonMode = UITextFieldViewModeAlways;
+    originalPwTF.returnKeyType = UIReturnKeyNext;
+    originalPwTF.delegate = self;
+    [originalPwTF becomeFirstResponder];
+    [self.view addSubview:originalPwTF];
+    [originalPwTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(25);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@40);
+    }];
+    
+    UITextField *setPwTF = [[UITextField alloc] init];
+    setPwTF.placeholder = @"请输入新密码";
+    setPwTF.keyboardType = UIKeyboardTypeASCIICapable;
+    setPwTF.secureTextEntry = YES;
+    setPwTF.clearButtonMode = UITextFieldViewModeAlways;
+    setPwTF.returnKeyType = UIReturnKeyNext;
+    setPwTF.delegate = self;
+    [self.view addSubview:setPwTF];
+    [setPwTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(originalPwTF.mas_bottom).offset(10);
+        make.left.right.height.equalTo(originalPwTF);
+    }];
+    UITextField *confirmPwTF = [[UITextField alloc] init];
+    confirmPwTF.placeholder = @"再次输入新密码";
+    
+    confirmPwTF.keyboardType = UIKeyboardTypeASCIICapable;
+    confirmPwTF.secureTextEntry = YES;
+    confirmPwTF.clearButtonMode = UITextFieldViewModeAlways;
+    confirmPwTF.returnKeyType = UIReturnKeyDone;
+    confirmPwTF.delegate = self;
+    [self.view addSubview:confirmPwTF];
+    [confirmPwTF mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(setPwTF.mas_bottom).offset(10);
+        make.left.right.height.equalTo(originalPwTF);
+    }];
+    self.originalPwTF = originalPwTF;
+    self.setPwTF = setPwTF;
+    self.confirmPwTF = confirmPwTF;
+}
+- (BOOL)textFieldShouldReturn:(UITextField *)textField {
+    if (textField == self.originalPwTF) {
+        [self.setPwTF becomeFirstResponder];
+    }else if (textField == self.setPwTF) {
+        [self.confirmPwTF becomeFirstResponder];
+    }else {
+        [self.view endEditing:NO];
+    }
+    return YES;
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.h
new file mode 100644
index 0000000..8aafb77
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBMapViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/12.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBMapViewController : UIViewController
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.m
new file mode 100644
index 0000000..b2eb128
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMapViewController.m
@@ -0,0 +1,173 @@
+//
+//  PBMapViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/12.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBMapViewController.h"
+#import <MAMapKit/MAMapKit.h>
+#import <AMapFoundationKit/AMapFoundationKit.h>
+#import "PBProjectModel.h"
+#import "PBAnnotationView.h"
+#import "PBPointAnnotation.h"
+#import "PBProjectInfoView.h"
+
+@interface PBMapViewController ()<MAMapViewDelegate>
+@property (nonatomic, strong) MAMapView *mapView;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, strong) PBProjectInfoView *projectInfoView;
+@end
+
+@implementation PBMapViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self.navigationController setNavigationBarHidden:YES animated:animated];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupUI];
+    [self loadProjectList];
+}
+- (void)addProjectAnnotation {
+    for (PBProjectModel *obj in self.dataList) {
+        PBPointAnnotation *pointAnnotation = [[PBPointAnnotation alloc] init];
+        pointAnnotation.coordinate = CLLocationCoordinate2DMake(obj.bog_latitude, obj.bog_longitude);
+        pointAnnotation.projectModel = obj;
+        [_mapView addAnnotation:pointAnnotation];
+    };
+}
+- (void)loadProjectList {
+    [YJProgressHUD showProgress:@"正在加载项目数据" inView:self.view];
+    [[PBNetworkTools sharedTools] getProjectListWithKeyword:@"" andIsPublic:@"" andSort:@"CreateDate desc" andSkip:@"0" andtake:@"999" andOnlyFavorite:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if(error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载项目列表失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.dataList = [NSArray yy_modelArrayWithClass:[PBProjectModel class] json:[networkModel.Data valueForKey:@"rows"]];
+            [self addProjectAnnotation];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    [AMapServices sharedServices].enableHTTPS = YES;
+    self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
+    [self.view addSubview:self.mapView];
+    self.mapView.delegate = self;
+    self.mapView.zoomLevel = 3;
+    [self.view addSubview:self.projectInfoView];
+    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.projectInfoView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
+    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+    maskLayer.frame = self.projectInfoView.bounds;
+    maskLayer.path = maskPath.CGPath;
+    self.projectInfoView.layer.mask = maskLayer;
+}
+
+- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation
+{
+    if ([annotation isKindOfClass:[MAPointAnnotation class]])
+    {
+        static NSString *reuseIndetifier = @"annotationReuseIndetifier";
+        PBPointAnnotation *point = annotation;
+        MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];
+        if (annotationView == nil)
+        {
+            annotationView = [[PBAnnotationView alloc] initWithAnnotation:annotation
+reuseIdentifier:reuseIndetifier];
+        }
+        if (point.projectModel.bimcomposerid == nil) {
+            annotationView.image = [UIImage imageNamed:@"blue"];
+        }else {
+            annotationView.image = [UIImage imageNamed:@"red"];
+        }
+        
+        //设置中心点偏移,使得标注底部中间点成为经纬度对应点
+        annotationView.centerOffset = CGPointMake(0, -18);
+        return annotationView;
+    }
+    return nil;
+}
+
+- (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view {
+    NSArray * array = [NSArray arrayWithArray:_mapView.annotations];
+    for (int i=0; i<array.count; i++) {
+       PBPointAnnotation *pointAnnotation = array[i];
+       if (view.annotation.coordinate.latitude == pointAnnotation.coordinate.latitude) {
+           NSLog(@"%@",pointAnnotation.projectModel.fullname);
+//           [PBKeyWindow addSubview:self.projectInfoView];
+//           self.projectInfoView.projectModel = pointAnnotation.projectModel;
+//           [self.projectInfoView show];
+           [self show];
+       }
+    }
+}
+//- (PBProjectInfoView *)projectInfoView {
+//    if (_projectInfoView == nil) {
+//        _projectInfoView = [[PBProjectInfoView alloc] initWithFrame:[UIScreen mainScreen].bounds];
+//        CGFloat height;
+//        if (IS_IPHONE_X) {
+//            height = 192.f + 34.f;
+//        }else {
+//            height = 192.f;
+//        }
+//        _projectInfoView.visualViewHeight = height;
+//    }
+//    return _projectInfoView;
+//}
+
+- (PBProjectInfoView *)projectInfoView {
+    if (_projectInfoView == nil) {
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 192.f + 34.f;
+        }else {
+            height = 192.f;
+        }
+        _projectInfoView = [[PBProjectInfoView alloc] initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, height)];
+    }
+    return _projectInfoView;
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+//        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.projectInfoView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBProjectInfoView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+//        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 192.f + 34.f;
+        }else {
+            height = 192.f;
+        }
+        self.projectInfoView.y = PBScreenHeight - height;
+    }];
+}
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.h
new file mode 100644
index 0000000..e624751
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.h
@@ -0,0 +1,13 @@
+//
+//  PBMessageController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBMessageController : UITableViewController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.m
new file mode 100644
index 0000000..f6bbdd4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBMessageController.m
@@ -0,0 +1,446 @@
+//
+//  PBMessageController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/14.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBMessageController.h"
+#import "PBUnReadTableViewCell.h"
+#import "PBNetworkModel.h"
+#import "PBUnReadMesModel.h"
+#import "PBAddIssueController.h"
+#import "PBNavigationController.h"
+#import "PBProjectModel.h"
+#import "PBIssueListModel.h"
+#import "PBResultModel.h"
+#import "PBAddExamineController.h"
+#import "PBExamineListModel.h"
+#import <JPUSHService.h>
+#import "PBIssueNavModel.h"
+#import "PBProjectModel.h"
+#import "PBIssueListModel.h"
+#import "PBRefreshGifHeader.h"
+#define pageSize 15
+
+static NSString *const cellID = @"cellID";
+@interface PBMessageController ()
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, assign) NSInteger pageIndex;
+@property (nonatomic, assign) NSInteger unReadCount;
+@property (nonatomic, strong) PBRefreshGifHeader *headerView;
+@end
+
+@implementation PBMessageController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self.navigationController setNavigationBarHidden:NO animated:YES];
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupRefresh];
+    [self setupUI];
+    [self loadDate];
+}
+
+- (void)setupRefresh {
+    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+        self.pageIndex = 0;
+        [self.dataList removeAllObjects];
+        [self loadUnReadMessage];
+    }];
+    header.lastUpdatedTimeLabel.hidden = YES;
+    header.stateLabel.textColor = TitleColor;
+    [header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
+    [header setTitle:@"释放更新" forState:MJRefreshStatePulling];
+    [header setTitle:@"加载中..." forState:MJRefreshStateRefreshing];
+    self.tableView.mj_header = header;
+//    self.tableView.mj_header = self.headerView;
+    
+//    MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
+//        [self loadUnReadMessage];
+//    }];
+//
+//    self.tableView.mj_footer = footer;
+//    CGFloat insetBottom;
+//    if (IS_IPHONE_X) {
+//        insetBottom = 34.f;
+//    }else {
+//        insetBottom = 0.f;
+//    }
+//    self.tableView.mj_footer.ignoredScrollViewContentInsetBottom =  insetBottom;
+}
+- (void)loadDate {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+       // 需要延迟执行的代码
+        [self.tableView.mj_header beginRefreshing];
+    });
+}
+- (void)loadUnReadMessage {
+    [[PBNetworkTools sharedTools] RequestGetNotReadMsgWithPageIndex:++self.pageIndex andPageSize:pageSize andIsRead:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        [self.tableView.mj_header endRefreshing];
+//        [self.tableView.mj_footer endRefreshing];
+        if (error) {
+            NSLog(@"%@",error);
+//            --self.pageIndex;
+            [YJProgressHUD showMessage:@"加载失败" inView:nil];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSArray *list = [networkModel.Data valueForKey:@"List"];
+            for (NSDictionary *obj in list) {
+                PBUnReadMesModel *mesModel = [PBUnReadMesModel yy_modelWithDictionary:obj];
+                [self.dataList addObject:mesModel];
+            }
+            [JPUSHService setBadge:0];
+            [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
+//            NSInteger mesCount = [[networkModel.Data valueForKey:@"msgCount"] integerValue];
+//            self.unReadCount = mesCount;
+//            [JPUSHService setBadge:mesCount];
+//            [UIApplication sharedApplication].applicationIconBadgeNumber = mesCount;
+            [self.tableView reloadData];
+//            if ([[networkModel.Data valueForKey:@"msgArr"] count] < pageSize) {
+//                self.tableView.mj_footer.hidden = YES;
+//            }else {
+//                self.tableView.mj_footer.hidden = NO;
+//            }
+        }else {
+//            --self.pageIndex;
+            [YJProgressHUD showMessage:@"加载失败" inView:nil];
+        }
+    }];
+}
+
+- (void)setupUI {
+    self.title = @"消息";
+    PBBackNavItem *backNav = [PBBackNavItem backNacItem];
+    backNav.title = @" ";
+    [backNav addTarget:self action:@selector(backItemAction) forControlEvents:UIControlEventTouchUpInside];
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithCustomView:backNav];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+    UIBarButtonItem *allReadItem = [[UIBarButtonItem alloc] initWithTitle:@"设为已读" style:UIBarButtonItemStylePlain target:self action:@selector(setAllRead)];
+    self.navigationItem.rightBarButtonItem = allReadItem;
+
+    [self.tableView registerClass:[PBUnReadTableViewCell class] forCellReuseIdentifier:cellID];
+    self.tableView.rowHeight = UITableViewAutomaticDimension;
+    self.tableView.estimatedRowHeight = 80.f;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+}
+- (void)backItemAction {
+    [self dismissViewControllerAnimated:YES completion:nil];
+//    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setAllRead {
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"全部设为已读状态" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *setAllRedAction = [UIAlertAction actionWithTitle:@"设为已读" style:(UIAlertActionStyleDestructive) handler:^(UIAlertAction * _Nonnull action) {
+        [YJProgressHUD showProgress:@"" inView:nil];
+        [[PBNetworkTools sharedTools] RequestSetMsgTypeReadWithMsgType:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"全部设为已读设置失败" inView:nil];
+                NSLog(@"%@",error);
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel =[PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                [YJProgressHUD hide];
+                [self.tableView.mj_header beginRefreshing];
+            } else {
+                [YJProgressHUD showMessage:@"全部设为已读设置失败" inView:nil];
+            }
+        }];
+    }];
+    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil];
+    [alertVC addAction:setAllRedAction];
+    [alertVC addAction:cancelAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+#pragma mark - Table view data source
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBUnReadTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    cell.unReadMesModel = self.dataList[indexPath.row];
+    return cell;
+}
+#pragma mark - UITableViewDelegate
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBUnReadMesModel *unReadMesModel = self.dataList[indexPath.row];
+    if ([unReadMesModel.isRead isEqualToString:@"0"]) {
+        [YJProgressHUD showProgress:@"" inView:self.view];
+        PBUnReadMesModel *unReadMesModel = self.dataList[indexPath.row];
+        [[PBNetworkTools sharedTools] RequestSetReadWithMu_guid:unReadMesModel.mu_guid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                [YJProgressHUD showMessage:@"设置失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if (networkModel.Ret == 1) {
+                unReadMesModel.isRead = @"1";
+                [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
+                //加载详情  判断是否是删除
+//                if (unReadMesModel.LogAndMsgType == 4 || unReadMesModel.LogAndMsgType == 5 || unReadMesModel.LogAndMsgType == 7 || unReadMesModel.LogAndMsgType == 8 || unReadMesModel.LogAndMsgType == 9 || unReadMesModel.LogAndMsgType == 10 || unReadMesModel.LogAndMsgType == 1007){
+//                    if (unReadMesModel.mm_objid == nil || [unReadMesModel.mm_objid isEqualToString:@""]) {
+//                        [self presentAlertVC];
+//                    }else {
+//                        [self getProjectParentIdWithModel:unReadMesModel];
+//                    }
+//                }else {
+                    [YJProgressHUD hide];
+                    [self presentAlertVC:unReadMesModel];
+//                }
+            }else {
+                [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+            }
+        }];
+    }else {
+        //加载详情  判断是否是删除
+//        if (unReadMesModel.LogAndMsgType == 4 || unReadMesModel.LogAndMsgType == 5 || unReadMesModel.LogAndMsgType == 7 || unReadMesModel.LogAndMsgType == 8 || unReadMesModel.LogAndMsgType == 9 || unReadMesModel.LogAndMsgType == 10 || unReadMesModel.LogAndMsgType == 1007){
+//            if (unReadMesModel.mm_objid == nil || [unReadMesModel.mm_objid isEqualToString:@""]) {
+//                [self presentAlertVC];
+//            }else {
+//                [self getProjectParentIdWithModel:unReadMesModel];
+//            }
+//        }else {
+//            [self presentAlertVC];
+//        }
+    }
+}
+- (void)getProjectParentIdWithModel:(PBUnReadMesModel *)unReadMesModel {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self.view];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    [[PBNetworkTools sharedTools] getProjectParentIDWithProjectID:unReadMesModel.mme_ProjectID andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1){
+            [self loadTypeAndStatusWith:networkModel.Data andModel:unReadMesModel];
+        }else {
+            [YJProgressHUD showMessage:@"加载状态、类型失败" inView:self.view];
+        }
+    }];
+}
+- (void)loadTypeAndStatusWith:(NSString *)parentId andModel:(PBUnReadMesModel *)unreadMesModel {
+    __block NSArray *statusArr; __block NSArray *typeArr;
+    dispatch_semaphore_t sem = dispatch_semaphore_create(0);
+    NSInteger commandCount = 2;
+    __block NSInteger httpFinishCount = 0;
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        [[PBNetworkTools sharedTools] getIssueStatusWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if ([networkModel.Msg isEqualToString:@"OK"]) {
+                statusArr = networkModel.Data;
+                if (++httpFinishCount == commandCount) {
+                    dispatch_semaphore_signal(sem);
+                }
+            }else {
+                [YJProgressHUD showMessage:@"加载状态失败" inView:self.view];
+                return;
+            }
+        }];
+        
+        [[PBNetworkTools sharedTools] getIssueTypesWithCompanyId:parentId andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+            if (error) {
+                NSLog(@"%@",error);
+                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
+                return;
+            }
+            NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+            PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+            if ([networkModel.Msg isEqualToString:@"OK"]) {
+                typeArr = networkModel.Data;
+                if (++httpFinishCount == commandCount) {
+                    dispatch_semaphore_signal(sem);
+                }
+            }else {
+                [YJProgressHUD showMessage:@"加载类型失败" inView:self.view];
+                return;
+            }
+        }];
+        //如果全部请求没有返回则该线程会一直阻塞
+        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
+        NSLog(@"全部加载完成==================: %@", [NSThread currentThread]);
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSLog(@"更新视图UI update in main thread!:%@",[NSThread currentThread]);
+            [YJProgressHUD hide];
+            NSMutableArray *statusArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *dict in statusArr) {
+                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
+                [statusArrM addObject:issueNavModel];
+            }
+            NSMutableArray *typeArrM = [[NSMutableArray alloc] init];
+            for (NSDictionary *dict in typeArr) {
+                PBIssueNavModel *issueNavModel = [PBIssueNavModel yy_modelWithDictionary:dict];
+                [typeArrM addObject:issueNavModel];
+            }
+            NSDictionary *statusAndTypeData = @{@"IssueStatus":statusArrM.mutableCopy, @"IssueTypes":typeArrM.mutableCopy};
+            PBProjectModel *projectModel = [[PBProjectModel alloc] init];
+            projectModel.organizeid = unreadMesModel.mme_ProjectID;
+            projectModel.bimcomposerid = unreadMesModel.BIMComposerId;
+            PBAddIssueController *detailsVC = [[PBAddIssueController alloc] init];
+            detailsVC.isAddIssue = NO;
+            detailsVC.projectModel = projectModel;
+            PBIssueListModel *issueListModel = [[PBIssueListModel alloc] init];
+            issueListModel.IssueId = unreadMesModel.mm_objid;
+            detailsVC.issueListModel = issueListModel;
+            detailsVC.statusAndTypeData = statusAndTypeData;
+            PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:detailsVC];
+            nav.modalPresentationStyle = UIModalPresentationFullScreen;
+            [self presentViewController:nav animated:YES completion:nil];
+        });
+    });
+}
+- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
+    UITableViewRowAction *deleteAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@"设为已读" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
+        [self deleteMesWithIndexPath:indexPath];
+    }];
+    deleteAction.backgroundColor = WarningColor;
+   return @[deleteAction];
+}
+- (void)deleteMesWithIndexPath:(NSIndexPath *)indexPath {
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    PBUnReadMesModel *unReadMesModel = self.dataList[indexPath.row];
+    [[PBNetworkTools sharedTools] RequestSetReadWithMu_guid:unReadMesModel.mu_guid andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            [YJProgressHUD showMessage:@"设置失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            unReadMesModel.isRead = @"1";
+            [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (NSMutableArray *)dataList {
+    if (_dataList == nil) {
+        _dataList = [[NSMutableArray alloc] init];
+    }
+    return _dataList;
+}
+
+- (void)presentAlertVC:(PBUnReadMesModel *)unReadMesModel {
+    NSString *message = @"我知道了!";
+    if (unReadMesModel.LogAndMsgType == 47 || unReadMesModel.LogAndMsgType == 48 || unReadMesModel.LogAndMsgType == 49) {
+        message = @"您收到一条任务流转提醒,如需处理请到网页端";
+    }
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"" message:message preferredStyle:UIAlertControllerStyleAlert];
+    UIAlertAction *sureAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
+    }];
+    [alertVC addAction:sureAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+- (void)loadExamineDetailWithReadMesModel:(PBUnReadMesModel *)unReadMesModel {
+//    [YJProgressHUD showProgress:@"" inView:nil];
+//    [[PBNetworkTools sharedTools] RequestGetExamineDetailWithExamineID:unReadMesModel.mm_objid andCallBack:^(NSURLResponse *response, id responseObject, NSError *error) {
+//        if (error) {
+//            NSLog(@"%@",error);
+//            [YJProgressHUD showMessage:@"加载检查详情失败" inView:nil];
+//            return;
+//        }
+//        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
+//        PBResultModel *resultModel = [PBResultModel yy_modelWithJSON:str];
+//        if ([resultModel.Message isEqualToString:@"Success"]) {
+//            [YJProgressHUD hide];
+//            if(resultModel.ResultData == nil) {
+//                [YJProgressHUD showMessage:@"此检查已删除" inView:nil];
+//                return;
+//            }
+//            PBAddExamineController *addExamineVC = [[PBAddExamineController alloc] init];
+//            addExamineVC.isAddExamine = NO;
+//            PBProjectModel *projectModel = [[PBProjectModel alloc] init];
+//            projectModel.bimcomposerid = unReadMesModel.mm_organizeid;
+//            addExamineVC.projectModel = projectModel;
+//            addExamineVC.examineListDict = resultModel.ResultData;
+//            addExamineVC.examineListModel = [PBExamineListModel yy_modelWithDictionary:resultModel.ResultData];
+//            PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:addExamineVC];
+//            nav.modalPresentationStyle = UIModalPresentationFullScreen;
+//            [self presentViewController:nav animated:YES completion:nil];
+//        }else {
+//            [YJProgressHUD showMessage:@"加载检查详情失败" inView:nil];
+//            return;
+//        }
+//    }];
+}
+- (PBRefreshGifHeader *)headerView {
+    if(_headerView == nil) {
+        _headerView = [[PBRefreshGifHeader alloc] init];
+        __weak typeof(self) weakSelf = self;
+        [self.headerView setRefreshingBlock:^{
+            weakSelf.pageIndex = 0;
+            [weakSelf.dataList removeAllObjects];
+            [weakSelf loadUnReadMessage];
+        }];
+    }
+    return _headerView;
+}
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.h
new file mode 100644
index 0000000..4651d8d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.h
@@ -0,0 +1,13 @@
+//
+//  PBProjectListViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface PBProjectListViewController : UIViewController
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.m
new file mode 100644
index 0000000..d9f9841
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBProjectListViewController.m
@@ -0,0 +1,263 @@
+//
+//  PBProjectListViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBProjectListViewController.h"
+#import "PBLoginViewController.h"
+#import "PBProjectModel.h"
+#import "PBProjectTableViewCell.h"
+#import "PBMineView.h"
+#import "MenuView.h"
+#import "PBTabBarController.h"
+#import "PBPromptView.h"
+#import "PBMessageController.h"
+#import "PBChangePWController.h"
+#import "PBRefreshGifHeader.h"
+static NSString *const cellID = @"cellID";
+@interface PBProjectListViewController ()<UITableViewDataSource, UITableViewDelegate, HomeMenuViewDelegate, UISearchBarDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, weak) PBMineView *mineView;
+@property (nonatomic, strong) MenuView *menu;
+@property (nonatomic, strong) UISearchBar *searchBar;
+@property (nonatomic, strong) UIButton *maskBtn;
+@property (nonatomic, copy) NSString *fullName;
+@property (nonatomic, strong) PBPromptView *promptView;
+@property (nonatomic, strong) PBRefreshGifHeader *headerView;
+@end
+
+@implementation PBProjectListViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self setupRefresh];
+    if ([NSString getLoginData]) {
+        [self.tableView.mj_header beginRefreshing];
+    }else{
+        [self toLogin];
+    }
+}
+- (void)toLogin {
+    self.dataList = nil;
+    [self.tableView reloadData];
+    PBLoginViewController *loginVC = [[PBLoginViewController alloc] init];
+    loginVC.LoginSuccessfulBlock = ^{
+        self.mineView.realName = Realname;
+        self.searchBar.text = nil;
+        self.fullName = nil;
+        [self.tableView.mj_header beginRefreshing];
+    };
+    loginVC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:loginVC animated:NO completion:nil];
+}
+- (void)setupNav {
+    UIBarButtonItem *leftNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Project_list_mine"] style:UIBarButtonItemStylePlain target:self action:@selector(leftNavItemAction)];
+    UIBarButtonItem *rightNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Project_list_news"] style:UIBarButtonItemStylePlain target:self action:@selector(rightNavItemAction)];
+    self.searchBar = [[UISearchBar alloc] init];
+    self.searchBar.placeholder = @"请搜索项目名称";
+    self.searchBar.delegate = self;
+    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
+    self.navigationItem.leftBarButtonItem = leftNavItem;
+    self.navigationItem.rightBarButtonItem = rightNavItem;
+    self.navigationItem.titleView = self.searchBar;
+}
+- (void)leftNavItemAction {
+    [self.menu show];
+}
+- (void)rightNavItemAction {
+    PBMessageController *mesVC = [[PBMessageController alloc] init];
+    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:mesVC];
+    nav.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:nav animated:YES completion:nil];
+}
+- (void)setupRefresh {
+//    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+//        [self loadProjectList];
+//    }];
+//    header.lastUpdatedTimeLabel.hidden = YES;
+//    header.stateLabel.textColor = TitleColor;
+//    [header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
+//    [header setTitle:@"释放更新" forState:MJRefreshStatePulling];
+//    [header setTitle:@"加载中..." forState:MJRefreshStateRefreshing];
+//    self.tableView.mj_header = header;
+    self.tableView.mj_header = self.headerView;
+}
+
+- (void)loadProjectList {
+    if (self.fullName == nil) {
+        self.fullName = @"";
+    }
+    [[PBNetworkTools sharedTools] getProjectListWithKeyword:self.fullName andIsPublic:@"" andSort:@"CreateDate desc" andSkip:@"0" andtake:@"999" andOnlyFavorite:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if(error) {
+            NSLog(@"%@",error);
+            [self.tableView.mj_header endRefreshing];
+            [YJProgressHUD showMessage:@"加载项目列表失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            self.dataList = [NSArray yy_modelArrayWithClass:[PBProjectModel class] json:[networkModel.Data valueForKey:@"rows"]];
+            [self.tableView.mj_header endRefreshing];
+            [self.tableView reloadData];
+            if (self.dataList.count == 0) {
+                self.promptView.hidden = NO;
+            }else {
+                self.promptView.hidden = YES;
+            }
+        }else {
+            [self.tableView.mj_header endRefreshing];
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - UISearchBarDelegate
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    self.fullName = searchBar.text;
+    [self.tableView.mj_header beginRefreshing];
+    [self.searchBar resignFirstResponder];
+}
+//- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
+//    self.fullName = searchBar.text;
+//    [self.tableView.mj_header beginRefreshing];
+//}
+
+- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
+    [self.view addSubview:self.maskBtn];
+    self.navigationItem.leftBarButtonItem.enabled = NO;
+    self.navigationItem.rightBarButtonItem.enabled = NO;
+    return YES;
+}
+
+- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar {
+    [self.maskBtn removeFromSuperview];
+    self.navigationItem.leftBarButtonItem.enabled = YES;
+    self.navigationItem.rightBarButtonItem.enabled = YES;
+    if ([searchBar.text isEqualToString:@""]) {
+        self.fullName = @"";
+        [self.tableView.mj_header beginRefreshing];
+    }
+}
+
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.tableView = [[UITableView alloc] init];
+    self.tableView.rowHeight = 120;
+    [self.tableView registerClass:[PBProjectTableViewCell class] forCellReuseIdentifier:cellID];
+    self.tableView.delegate = self;
+    self.tableView.dataSource = self;
+    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self.view addSubview:self.tableView];
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.view);
+    }];
+    PBMineView *mineView = [[PBMineView alloc]initWithFrame:CGRectMake(0, 0, MainScreenWidth * 0.82, MainScreenHeight)];
+    mineView.customDelegate = self;
+    mineView.realName = Realname;
+    self.mineView = mineView;
+    self.menu = [[MenuView alloc]initWithDependencyView:self.view MenuView:mineView isShowCoverView:YES];
+    
+    [self.view addSubview:self.promptView];
+    self.promptView.imageV.image = [UIImage imageNamed:@"Doc_unable_preview"];
+    self.promptView.textL.text = @"抱歉,暂时没有项目";
+    self.promptView.hidden = YES;
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBProjectTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
+    cell.projectModel = self.dataList[indexPath.row];
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBTabBarController *tabBarController = [[PBTabBarController alloc] init];
+    tabBarController.projectModel = self.dataList[indexPath.row];
+    tabBarController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:tabBarController animated:YES completion:nil];
+}
+
+#pragma mark - HomeMenuViewDelegate
+- (void)LeftMenuViewClick:(NSInteger)tag{
+    [self.menu hidenWithAnimation];
+    switch (tag) {
+        case 0:{
+            //修改密码
+            PBChangePWController  *changePwVC = [[PBChangePWController alloc] init];
+            changePwVC.ChangePWCompleteBlock = ^{
+                [self toLogin];
+            };
+            [self.navigationController pushViewController:changePwVC animated:YES];
+        }
+            break;
+        case 1:{
+            //清除缓存
+            [self clearCache];
+        }
+            break;
+        case 10:{
+            [self toLogin];
+        }
+            break;
+        default:
+            break;
+    }
+}
+- (void)clearCache {
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"将删除所有缓存数据" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *clearAction = [UIAlertAction actionWithTitle:@"清除缓存" style:(UIAlertActionStyleDestructive) handler:^(UIAlertAction * _Nonnull action) {
+        [YJProgressHUD showProgress:@"正在删除" inView:self.view];
+        NSFileManager *fileManager = [NSFileManager defaultManager];
+        NSString * cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+        NSLog(@"%@",cachePath);
+        NSDirectoryEnumerator *fileEnumerator = [fileManager enumeratorAtPath:cachePath];
+        for (NSString *fileName in fileEnumerator) {
+            NSString *filePath = [cachePath stringByAppendingPathComponent:fileName];
+            [fileManager removeItemAtPath:filePath error:nil];
+        }
+        [YJProgressHUD showMessage:@"删除完成" inView:self.view];
+    }];
+    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil];
+    [alertVC addAction:clearAction];
+    [alertVC addAction:cancelAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+- (UIButton *)maskBtn {
+    if (_maskBtn == nil) {
+        _maskBtn = [[UIButton alloc] initWithFrame:self.view.bounds];
+        _maskBtn.backgroundColor = [UIColor colorWithWhite:0 alpha:0.2];
+        [_maskBtn addTarget:self action:@selector(cancelMaskBtn) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return _maskBtn;
+}
+
+- (void)cancelMaskBtn {
+    [self.searchBar resignFirstResponder];
+}
+- (PBPromptView *)promptView {
+    if (_promptView == nil) {
+        _promptView = [[PBPromptView alloc] initWithFrame:self.view.bounds];
+    }
+    return _promptView;
+}
+- (PBRefreshGifHeader *)headerView {
+    if(_headerView == nil) {
+        _headerView = [[PBRefreshGifHeader alloc] init];
+        __weak typeof(self) weakSelf = self;
+        [self.headerView setRefreshingBlock:^{
+            [weakSelf loadProjectList];
+        }];
+    }
+    return _headerView;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.h
new file mode 100644
index 0000000..8d0b304
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBScanningViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/27.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBScanningViewController : UIViewController
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.m
new file mode 100644
index 0000000..9930659
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBScanningViewController.m
@@ -0,0 +1,217 @@
+//
+//  PBScanningViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/27.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBScanningViewController.h"
+//#import "SGQRCode.h"
+
+@interface PBScanningViewController ()
+//{
+//    SGQRCodeObtain *obtain;
+//}
+//@property (nonatomic, strong) SGQRCodeScanView *scanView;
+//@property (nonatomic, strong) UIButton *flashlightBtn;
+//@property (nonatomic, strong) UILabel *promptLabel;
+//@property (nonatomic, assign) BOOL isSelectedFlashlightBtn;
+//@property (nonatomic, strong) UIView *bottomView;
+@end
+
+@implementation PBScanningViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+
+    /// 二维码开启方法
+//    [obtain startRunningWithBefore:nil completion:nil];
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+//    [self.scanView addTimer];
+}
+
+- (void)viewWillDisappear:(BOOL)animated {
+    [super viewWillDisappear:animated];
+//    [self.scanView removeTimer];
+//    [self removeFlashlightBtn];
+//    [obtain stopRunning];
+}
+
+//- (void)dealloc {
+//    NSLog(@"WCQRCodeVC - dealloc");
+//    [self removeScanningView];
+//}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view from its nib.
+//    self.view.backgroundColor = [UIColor blackColor];
+//    obtain = [SGQRCodeObtain QRCodeObtain];
+//
+//    [self setupQRCodeScan];
+//    [self setupNavigationBar];
+//    [self.view addSubview:self.scanView];
+//    [self.view addSubview:self.promptLabel];
+//    /// 为了 UI 效果
+//    [self.view addSubview:self.bottomView];
+}
+
+//- (void)setupQRCodeScan {
+//    __weak typeof(self) weakSelf = self;
+//
+//    SGQRCodeObtainConfigure *configure = [SGQRCodeObtainConfigure QRCodeObtainConfigure];
+//    configure.sampleBufferDelegate = YES;
+//    [obtain establishQRCodeObtainScanWithController:self configure:configure];
+//    [obtain setBlockWithQRCodeObtainScanResult:^(SGQRCodeObtain *obtain, NSString *result) {
+//        if (result) {
+//            [YJProgressHUD showMessage:result inView:weakSelf.view];
+//            [MBProgressHUD SG_showMBProgressHUDWithModifyStyleMessage:@"正在处理..." toView:weakSelf.view];
+//            [obtain stopRunning];
+//            [obtain playSoundName:@"SGQRCode.bundle/sound.caf"];
+//            ScanSuccessJumpVC *jumpVC = [[ScanSuccessJumpVC alloc] init];
+//            jumpVC.comeFromVC = ScanSuccessJumpComeFromWC;
+//            jumpVC.jump_URL = result;
+//            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//                [MBProgressHUD SG_hideHUDForView:weakSelf.view];
+//                [weakSelf.navigationController pushViewController:jumpVC animated:YES];
+//            });
+//        }
+//    }];
+//    [obtain setBlockWithQRCodeObtainScanBrightness:^(SGQRCodeObtain *obtain, CGFloat brightness) {
+//        if (brightness < - 1) {
+//            [weakSelf.view addSubview:weakSelf.flashlightBtn];
+//        } else {
+//            if (weakSelf.isSelectedFlashlightBtn == NO) {
+//                [weakSelf removeFlashlightBtn];
+//            }
+//        }
+//    }];
+//}
+
+//- (void)setupNavigationBar {
+//    self.navigationItem.title = @"扫一扫";
+////    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"相册" style:(UIBarButtonItemStyleDone) target:self action:@selector(rightBarButtonItenAction)];
+//}
+
+//- (void)rightBarButtonItenAction {
+//    __weak typeof(self) weakSelf = self;
+//
+//    [obtain establishAuthorizationQRCodeObtainAlbumWithController:nil];
+//    if (obtain.isPHAuthorization == YES) {
+//        [self.scanView removeTimer];
+//    }
+//    [obtain setBlockWithQRCodeObtainAlbumDidCancelImagePickerController:^(SGQRCodeObtain *obtain) {
+//        [weakSelf.view addSubview:weakSelf.scanView];
+//    }];
+//    [obtain setBlockWithQRCodeObtainAlbumResult:^(SGQRCodeObtain *obtain, NSString *result) {
+//        [MBProgressHUD SG_showMBProgressHUDWithModifyStyleMessage:@"正在处理..." toView:weakSelf.view];
+//        if (result == nil) {
+//            NSLog(@"暂未识别出二维码");
+//            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//                [MBProgressHUD SG_hideHUDForView:weakSelf.view];
+//                [MBProgressHUD SG_showMBProgressHUDWithOnlyMessage:@"未发现二维码/条形码" delayTime:1.0];
+//            });
+//        } else {
+//            ScanSuccessJumpVC *jumpVC = [[ScanSuccessJumpVC alloc] init];
+//            jumpVC.comeFromVC = ScanSuccessJumpComeFromWC;
+//            if ([result hasPrefix:@"http"]) {
+//                jumpVC.jump_URL = result;
+//            } else {
+//                jumpVC.jump_bar_code = result;
+//            }
+//            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//                [MBProgressHUD SG_hideHUDForView:weakSelf.view];
+//                [weakSelf.navigationController pushViewController:jumpVC animated:YES];
+//            });
+//        }
+//    }];
+//}
+
+//- (SGQRCodeScanView *)scanView {
+//    if (!_scanView) {
+//        _scanView = [[SGQRCodeScanView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 0.9 * self.view.frame.size.height)];
+//    }
+//    return _scanView;
+//}
+//- (void)removeScanningView {
+//    [self.scanView removeTimer];
+//    [self.scanView removeFromSuperview];
+//    self.scanView = nil;
+//}
+//
+//- (UILabel *)promptLabel {
+//    if (!_promptLabel) {
+//        _promptLabel = [[UILabel alloc] init];
+//        _promptLabel.backgroundColor = [UIColor clearColor];
+//        CGFloat promptLabelX = 0;
+//        CGFloat promptLabelY = 0.73 * self.view.frame.size.height;
+//        CGFloat promptLabelW = self.view.frame.size.width;
+//        CGFloat promptLabelH = 25;
+//        _promptLabel.frame = CGRectMake(promptLabelX, promptLabelY, promptLabelW, promptLabelH);
+//        _promptLabel.textAlignment = NSTextAlignmentCenter;
+//        _promptLabel.font = [UIFont boldSystemFontOfSize:13.0];
+//        _promptLabel.textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.6];
+//        _promptLabel.text = @"将二维码/条码放入框内, 即可自动扫描";
+//    }
+//    return _promptLabel;
+//}
+//
+//- (UIView *)bottomView {
+//    if (!_bottomView) {
+//        _bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.scanView.frame), self.view.frame.size.width, self.view.frame.size.height - CGRectGetMaxY(self.scanView.frame))];
+//        _bottomView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+//    }
+//    return _bottomView;
+//}
+//
+//#pragma mark - - - 闪光灯按钮
+//- (UIButton *)flashlightBtn {
+//    if (!_flashlightBtn) {
+//        // 添加闪光灯按钮
+//        _flashlightBtn = [UIButton buttonWithType:(UIButtonTypeCustom)];
+//        CGFloat flashlightBtnW = 30;
+//        CGFloat flashlightBtnH = 30;
+//        CGFloat flashlightBtnX = 0.5 * (self.view.frame.size.width - flashlightBtnW);
+//        CGFloat flashlightBtnY = 0.55 * self.view.frame.size.height;
+//        _flashlightBtn.frame = CGRectMake(flashlightBtnX, flashlightBtnY, flashlightBtnW, flashlightBtnH);
+//        [_flashlightBtn setBackgroundImage:[UIImage imageNamed:@"SGQRCodeFlashlightOpenImage"] forState:(UIControlStateNormal)];
+//        [_flashlightBtn setBackgroundImage:[UIImage imageNamed:@"SGQRCodeFlashlightCloseImage"] forState:(UIControlStateSelected)];
+//        [_flashlightBtn addTarget:self action:@selector(flashlightBtn_action:) forControlEvents:UIControlEventTouchUpInside];
+//    }
+//    return _flashlightBtn;
+//}
+//
+//- (void)flashlightBtn_action:(UIButton *)button {
+//    if (button.selected == NO) {
+//        [obtain openFlashlight];
+//        self.isSelectedFlashlightBtn = YES;
+//        button.selected = YES;
+//    } else {
+//        [self removeFlashlightBtn];
+//    }
+//}
+//
+//- (void)removeFlashlightBtn {
+//    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+//        [obtain closeFlashlight];
+//        self.isSelectedFlashlightBtn = NO;
+//        self.flashlightBtn.selected = NO;
+//        [self.flashlightBtn removeFromSuperview];
+//    });
+//}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.h
new file mode 100644
index 0000000..1c5608a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.h
@@ -0,0 +1,17 @@
+//
+//  PBSetViewController.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/23.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBSetViewController : UIViewController
+@property (nonatomic, copy) void (^ToLoginBlock)(void);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.m
new file mode 100644
index 0000000..261f1a2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/PBSetViewController.m
@@ -0,0 +1,229 @@
+//
+//  PBSetViewController.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/7/23.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBSetViewController.h"
+#import "PBChangePWController.h"
+#import "PBLoginViewController.h"
+#import <JPUSHService.h>
+@interface PBSetViewController ()
+@property (nonatomic, weak) UILabel *cacheSizeL;
+@end
+
+@implementation PBSetViewController
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self.navigationController setNavigationBarHidden:NO animated:animated];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNav];
+    [self setupUI];
+    [self folderSize];
+}
+- (void)setupNav {
+    self.title = @"设置";
+    UIBarButtonItem *backNavItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"arrow_left"] style:UIBarButtonItemStylePlain target:self action:@selector(backItemAction)];
+    self.navigationItem.leftBarButtonItem = backNavItem;
+}
+- (void)backItemAction {
+    [self.navigationController popViewControllerAnimated:YES];
+}
+- (void)setupUI {
+    self.title = @"设置";
+    self.view.backgroundColor = PBColor(244, 245, 246);
+    CGFloat topH = 20.f;
+    if (IS_IPHONE_X) {
+        topH = 20.f + 24.f;
+    }
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"card_bg"]];
+    [self.view addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(topH);
+        make.left.equalTo(self.view).offset(20);
+        make.right.equalTo(self.view).offset(-20);
+        make.height.equalTo(@180);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:Realname Color:[UIColor whiteColor] isBold:YES Font:22];
+    [self.view addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV).offset(20);
+        make.left.equalTo(imageV).offset(20);
+        make.height.equalTo(@30);
+        make.right.equalTo(imageV).offset(-100);
+    }];
+    
+//    UILabel *companyL = [UILabel z_labelWithText:@"北京东晨工元科技发展有限公司" Color:[UIColor whiteColor] isBold:NO Font:14];
+//    [self.view addSubview:companyL];
+//    [companyL mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.bottom.equalTo(imageV).offset(-20);
+//        make.left.equalTo(imageV).offset(20);
+//        make.right.equalTo(imageV).offset(-15);
+//        make.height.equalTo(@20);
+//    }];
+    UIView *bgV = [[UIView alloc] init];
+    bgV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bgV];
+    [bgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV.mas_bottom).offset(20);
+        make.left.equalTo(self.view).offset(12);
+        make.right.equalTo(self.view).offset(-12);
+        make.height.equalTo(@50);
+    }];
+    [bgV circleViewWithRadius:6];
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changepwAction:)];
+    bgV.userInteractionEnabled = YES;
+    [bgV addGestureRecognizer:tap];
+
+    UILabel *changepwL = [UILabel z_labelWithText:@"密码" Color:PBColor(97, 111, 125) isBold:NO Font:15];
+    [self.view addSubview:changepwL];
+    [changepwL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(bgV).offset(15);
+        make.centerY.equalTo(bgV);
+    }];
+    UILabel *titleL = [UILabel z_labelWithText:@"修改密码" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    [self.view addSubview:titleL];
+    [titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(bgV).offset(-36);
+        make.centerY.equalTo(bgV);
+    }];
+    UIImageView *rightImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"set_arrow_right"]];
+    [self.view addSubview:rightImageV];
+    [rightImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(16, 16));
+        make.right.equalTo(bgV).offset(-10);
+        make.centerY.equalTo(bgV);
+    }];
+    UIView *bg1V = [[UIView alloc] init];
+    bg1V.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bg1V];
+    [bg1V mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgV.mas_bottom).offset(8);
+        make.left.equalTo(self.view).offset(12);
+        make.right.equalTo(self.view).offset(-12);
+        make.height.equalTo(@50);
+    }];
+    [bg1V circleViewWithRadius:6];
+    UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cacheAction:)];
+    bg1V.userInteractionEnabled = YES;
+    [bg1V addGestureRecognizer:tap1];
+    
+    UILabel *cacheL = [UILabel z_labelWithText:@"清空缓存" Color:PBColor(97, 111, 125) isBold:NO Font:15];
+    [self.view addSubview:cacheL];
+    [cacheL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(bg1V).offset(15);
+        make.centerY.equalTo(bg1V);
+    }];
+    UILabel *cacheSizeL = [UILabel z_labelWithText:@"34M" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    [self.view addSubview:cacheSizeL];
+    [cacheSizeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(bg1V).offset(-15);
+        make.centerY.equalTo(bg1V);
+    }];
+    
+    UIButton *quitBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"quit"]];
+    [quitBtn addTarget:self action:@selector(quitAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:quitBtn];
+    CGFloat bottom = 10;
+    if (IS_IPHONE_X) {
+        bottom = 10 + IPHONE_X_BOTTOM;
+    }
+    [quitBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.view).offset(-bottom);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@46);
+    }];
+    self.cacheSizeL = cacheSizeL;
+}
+- (void)folderSize{
+    CGFloat folderSize = 0.0;
+    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)firstObject];
+    NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:cachePath];
+    NSLog(@"文件数:%ld",files.count);
+    for(NSString *path in files) {
+        NSString*filePath = [cachePath stringByAppendingString:[NSString stringWithFormat:@"/%@",path]];
+  //累加
+        folderSize += [[NSFileManager defaultManager]attributesOfItemAtPath:filePath error:nil].fileSize;
+    }
+    //转换为M为单位
+    CGFloat sizeM = folderSize /1024.0/1024.0;
+    self.cacheSizeL.text = [NSString stringWithFormat:@"%.2fM", sizeM];
+}
+- (void)changepwAction:(UITapGestureRecognizer *)tap {
+    PBChangePWController  *changePwVC = [[PBChangePWController alloc] init];
+    changePwVC.ChangePWCompleteBlock = ^{
+        [self.navigationController popViewControllerAnimated:NO];
+        if (self.ToLoginBlock) {
+            self.ToLoginBlock();
+        }
+    };
+    [self.navigationController pushViewController:changePwVC animated:YES];
+}
+- (void)cacheAction:(UITapGestureRecognizer *)tap {
+    [self clearCache];
+}
+- (void)quitAction:(UIButton *)btn {
+    [YJProgressHUD showProgress:@"正在退出" inView:self.view];
+    NSFileManager *manager=[NSFileManager defaultManager];
+    NSString *filepath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"login.plist"];//这里就是你将要删除的沙盒路径(.plist文件,名字
+    [manager removeItemAtPath:filepath error:nil];
+    [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
+        NSLog(@"%zd--%@--%zd",iResCode,iAlias,seq);
+    } seq:10];
+    [[PBNetworkTools sharedTools] RemoveTokenAndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"退出登录失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            [self.navigationController popViewControllerAnimated:NO];
+            if (self.ToLoginBlock) {
+                self.ToLoginBlock();
+            }
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+
+- (void)clearCache {
+    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"将删除所有缓存数据" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
+    UIAlertAction *clearAction = [UIAlertAction actionWithTitle:@"清除缓存" style:(UIAlertActionStyleDestructive) handler:^(UIAlertAction * _Nonnull action) {
+        [YJProgressHUD showProgress:@"正在删除" inView:self.view];
+        NSFileManager *fileManager = [NSFileManager defaultManager];
+        NSString * cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
+        NSLog(@"%@",cachePath);
+        NSDirectoryEnumerator *fileEnumerator = [fileManager enumeratorAtPath:cachePath];
+        for (NSString *fileName in fileEnumerator) {
+            NSString *filePath = [cachePath stringByAppendingPathComponent:fileName];
+            [fileManager removeItemAtPath:filePath error:nil];
+        }
+        [YJProgressHUD showMessage:@"删除完成" inView:self.view];
+        self.cacheSizeL.text = @"0M";
+    }];
+    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil];
+    [alertVC addAction:clearAction];
+    [alertVC addAction:cancelAction];
+    [self presentViewController:alertVC animated:YES completion:nil];
+}
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.h
new file mode 100644
index 0000000..3712c25
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.h
@@ -0,0 +1,48 @@
+//
+//  LinPullBottomViewController.h
+//  LINPullTableView
+//
+//  Created by earnestLin on 2019/1/16.
+//  Copyright © 2019年 earnestLin. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+// tool
+#import "JYPulleyViewController.h"
+
+@class LinPullBottomViewController;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol LinPullBottomViewControllerDelegate <NSObject>
+
+@optional
+
+- (void)linPullBottomViewController:(LinPullBottomViewController *)vc
+                  didChangeToClosed:(CGFloat)height;
+
+- (void)linPullBottomViewController:(LinPullBottomViewController *)vc
+          didChangeToPartiallyExpand:(CGFloat)height;
+
+- (void)linPullBottomViewController:(LinPullBottomViewController *)vc
+                  didChangeToExpand:(CGFloat)height;
+
+@end
+
+@interface LinPullBottomViewController : UIViewController <JYPulleyDrawerDataSource, JYPulleyDrawerDelegate>
+
+/// 处理回调代理
+@property (nullable, nonatomic, weak) id<LinPullBottomViewControllerDelegate> delegate;
+
+/// 处理抽屉视图中 scrollView 的代理
+@property (nullable, nonatomic, weak) id<JYPulleyDrawerScrollViewDelegate> drawerScrollDelegate;
+/// 处理页面头像点击事件回调
+@property (nonatomic, copy) void(^jumpToSetVCBlock)(void);
+/// 处理跳转消息页面
+@property (nonatomic, copy) void(^jumpToMessageBlock)(void);
+///全部项目/收藏项目 区分
+@property (nonatomic, assign) BOOL isFavorite;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.m
new file mode 100644
index 0000000..ddba7f8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullBottomViewController.m
@@ -0,0 +1,400 @@
+//
+//  LinPullBottomViewController.m
+//  LINPullTableView
+//
+//  Created by earnestLin on 2019/1/16.
+//  Copyright © 2019年 earnestLin. All rights reserved.
+//
+
+#import "LinPullBottomViewController.h"
+#import "PBProjectModel.h"
+#import "PBProjectTableViewCell.h"
+#import "PBProjectSearchView.h"
+#import "PBTabBarController.h"
+
+//PBTabBarController *tabBarController = [[PBTabBarController alloc] init];
+//tabBarController.projectModel = self.dataList[indexPath.row];
+//tabBarController.modalPresentationStyle = UIModalPresentationFullScreen;
+//[self presentViewController:tabBarController animated:YES completion:nil];
+static NSString *const cellID = @"cellID";
+
+//static CGFloat const kBottomControllerClosedHeight = 141.0f;
+static inline CGFloat kBottomControllerClosedHeight() {
+    if (IS_IPHONE_X) {
+        return 141.0f + IPHONE_X_BOTTOM;
+    }else {
+        return 141.0f;
+    }
+}
+static inline CGFloat kBottomControllerPartiallyExpandHeight() {
+//    return [UIScreen mainScreen].bounds.size.height - 336.0f;
+    if (IS_IPHONE_X) {
+        return 300.0f + IPHONE_X_BOTTOM;
+    }else {
+        return 300.0f;
+    }
+}
+
+@interface LinPullBottomViewController ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, weak) UIButton *topBtn;
+@property (nonatomic, weak) UIView *newsV;
+@property (nonatomic, assign) JYPulleyStatus lastStatus;
+@property (nonatomic, assign) JYPulleyStatus currentStatus;
+@property (nonatomic, strong) PBProjectSearchView *projectSearchV;
+@end
+
+@implementation LinPullBottomViewController
+-(void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    [self loadUnReadMessage];
+}
+- (void)loadUnReadMessage {
+    [[PBNetworkTools sharedTools] RequestGetNotReadMsgWithPageIndex:1 andPageSize:1 andIsRead:@"0" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+//            [YJProgressHUD showMessage:@"加载失败" inView:nil];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            NSArray *list = [networkModel.Data valueForKey:@"List"];
+            if (list.count > 0) {
+                self.newsV.hidden = NO;
+            }else {
+                self.newsV.hidden = YES;
+            }
+        }else {
+//            [YJProgressHUD showMessage:@"加载失败" inView:nil];
+        }
+    }];
+}
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(JPushMessage:) name:@"JPushMessage" object:nil];
+    [PBNoteCenter addObserver:self selector:@selector(jumpBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
+    [self setRoundedCorners];
+    [self setupUI];
+    [self loadProjectList];
+}
+- (void)JPushMessage:(NSNotification *)notification {
+    self.newsV.hidden = NO;
+}
+- (void)jumpBecomeActive:(NSNotification *)notification {
+    [self loadUnReadMessage];
+}
+- (void)setRoundedCorners {
+    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.view.bounds byRoundingCorners:UIRectCornerTopLeft |UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
+    CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
+    //设置大小
+    maskLayer.frame = self.view.bounds;
+    //设置图形样子
+    maskLayer.path = maskPath.CGPath;
+    self.view.layer.mask = maskLayer;
+}
+- (void)loadProjectList {
+    self.dataList = nil;
+    [self.tableView reloadData];
+    [YJProgressHUD showProgress:@"" inView:self.view];
+    NSString *favorite = @"";
+    if (self.isFavorite) {
+        favorite = @"1";
+    }
+    [[PBNetworkTools sharedTools] getProjectListWithKeyword:@"" andIsPublic:@"" andSort:@"CreateDate desc" andSkip:@"0" andtake:@"999" andOnlyFavorite:favorite andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if(error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载项目列表失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.dataList = [NSArray yy_modelArrayWithClass:[PBProjectModel class] json:[networkModel.Data valueForKey:@"rows"]];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - setupUI
+
+- (void)setupUI {
+    self.view.backgroundColor = [UIColor whiteColor];
+    UIButton *topBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"bar"]];
+    [topBtn addTarget:self action:@selector(topBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:topBtn];
+    [topBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(2);
+        make.size.mas_equalTo(CGSizeMake(28, 20));
+        make.centerX.equalTo(self.view);
+    }];
+    UIImageView *searchBg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"search_bg"]];
+    [self.view addSubview:searchBg];
+    [searchBg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(24);
+        make.left.equalTo(self.view).offset(10);
+        make.right.equalTo(self.view).offset(-10);
+        make.height.equalTo(@46);
+    }];
+//    UIButton *iconBtn = [[UIButton alloc] init];
+//    iconBtn.backgroundColor = PBColor(38, 55, 75);
+//    [iconBtn addTarget:self action:@selector(iconBtnAction) forControlEvents:UIControlEventTouchUpInside];
+//    [self.view addSubview:iconBtn];
+//    [iconBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.centerY.equalTo(searchBg);
+//        make.size.mas_equalTo(CGSizeMake(28, 28));
+//        make.left.equalTo(searchBg).offset(10);
+//    }];
+//    [iconBtn circleViewWithRadius:6];
+    
+    UIImageView *iconBtn = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"avatar_bg"]];
+    iconBtn.userInteractionEnabled = YES;
+    [self.view addSubview:iconBtn];
+    [iconBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(searchBg);
+        make.size.mas_equalTo(CGSizeMake(28, 28));
+        make.left.equalTo(searchBg).offset(10);
+    }];
+    UITapGestureRecognizer *iconBtnTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(iconBtnAction)];
+    [iconBtn addGestureRecognizer:iconBtnTap];
+    
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:NO Font:14];
+    nameL.textAlignment = NSTextAlignmentCenter;
+    NSString *name = Realname;
+    BOOL isChiness = [self IsChinese:name];
+    if (isChiness) {
+        nameL.text = [name substringFromIndex:name.length - 1];
+    }else {
+        nameL.text = [name substringToIndex:1];
+    }
+    [self.view addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(iconBtn);
+    }];
+
+    UIButton *newsBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"news"]];
+    [newsBtn addTarget:self action:@selector(newsBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:newsBtn];
+    [newsBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(searchBg);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.right.equalTo(searchBg).offset(-10);
+    }];
+    UIView *newsV = [[UIView alloc] init];
+    newsV.backgroundColor = [UIColor redColor];
+    [self.view addSubview:newsV];
+    newsV.layer.cornerRadius = 3;
+    [newsV.layer setMasksToBounds:YES];
+    [newsV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(5, 5));
+        make.top.equalTo(newsBtn);
+        make.left.equalTo(newsBtn.mas_right);
+    }];
+    self.newsV = newsV;
+    self.newsV.hidden = YES;
+    
+    UILabel *searchTextL = [UILabel z_labelWithText:@"在全部项目中查找" Color:PBColor(97, 111, 125) isBold:NO Font:16];
+    [self.view addSubview:searchTextL];
+    [searchTextL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(searchBg);
+        make.left.equalTo(searchBg).offset(50);
+        make.right.equalTo(newsBtn.mas_left).offset(-10);
+        make.height.equalTo(@40);
+    }];
+    searchTextL.userInteractionEnabled = YES;
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(searchAction)];
+    [searchTextL addGestureRecognizer:tap];
+    self.topBtn = topBtn;
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+#pragma mark - 点击顶部按钮
+- (void)topBtnAction {
+    JYPulleyStatus action = JYPulleyStatusNone;
+    if (self.currentStatus == JYPulleyStatusExpand) {//上
+        action = JYPulleyStatusPartiallyExpand;
+    }else if (self.currentStatus == JYPulleyStatusClosed) {//下
+        action = JYPulleyStatusPartiallyExpand;
+    }else if (self.currentStatus == JYPulleyStatusPartiallyExpand) {//中
+        if (self.lastStatus == JYPulleyStatusExpand) {
+            action = JYPulleyStatusClosed;
+        }else {
+            action = JYPulleyStatusExpand;
+        }
+    }
+    [PBNoteCenter postNotificationName:@"LinPulBottomViewControllerNeedChangeStatus" object:[NSString stringWithFormat:@"%zd",action]];
+}
+#pragma mark - 点击头像方法
+- (void)iconBtnAction {
+    if (self.jumpToSetVCBlock) {
+        self.jumpToSetVCBlock();
+    }   
+}
+#pragma mark - 点击消息方法
+- (void)newsBtnAction {
+    if (self.jumpToMessageBlock) {
+        self.jumpToMessageBlock();
+    }
+}
+#pragma mark - 搜索方法
+- (void)searchAction {
+    __weak typeof(self) weakSelf = self;
+    [PBNoteCenter postNotificationName:@"LinPulBottomViewControllerNeedChangeStatus" object:[NSString stringWithFormat:@"%zd",JYPulleyStatusExpand]];
+    self.projectSearchV.hidden = NO;
+    self.projectSearchV.cancelSearchBlock = ^{
+        [weakSelf cancelSearchWithDrag:NO];
+    };
+//    PBProjectSearchViewController *projectSearchVC = [[PBProjectSearchViewController alloc] init];
+////    projectSearchVC.modalPresentationStyle = UIModalPresentationCustom;
+//    projectSearchVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
+//    [self presentViewController:projectSearchVC animated:NO completion:nil];
+//    [self.navigationController pushViewController:projectSearchVC animated:NO];
+}
+- (void)cancelSearchWithDrag:(BOOL)drag {
+    [self.view endEditing:NO];
+    [self.projectSearchV removeFromSuperview];
+    self.projectSearchV = nil;
+    if (!drag) {
+        [PBNoteCenter postNotificationName:@"LinPulBottomViewControllerNeedChangeStatus" object:[NSString stringWithFormat:@"%zd",JYPulleyStatusPartiallyExpand]];
+    }
+}
+#pragma mark - JYPulleyDrawerDataSource
+
+- (CGFloat)closedHeightInPulleyViewController:(JYPulleyViewController *)pulleyViewController
+{
+    return kBottomControllerClosedHeight();
+}
+
+- (CGFloat)partiallyExpandHeightInPulleyViewController:(JYPulleyViewController *)pulleyViewController
+{
+    return kBottomControllerPartiallyExpandHeight();
+}
+
+#pragma mark - JYPulleyDrawerDelegate
+
+- (void)pulleyViewController:(JYPulleyViewController *)pulleyViewController didChangeStatus:(JYPulleyStatus)status
+{
+    self.lastStatus = self.currentStatus;
+    self.currentStatus = status;
+    if (status == JYPulleyStatusClosed)
+    {
+        self.tableView.scrollEnabled = NO;
+//        self.tableView.contentInset =
+//        UIEdgeInsetsMake(0, 0, kBottomControllerClosedHeight, 0);
+        
+//        if ([self.delegate
+//             respondsToSelector:@selector(linPullBottomViewController:didChangeToClosed:)]) {
+//            [self.delegate linPullBottomViewController:self
+//                                     didChangeToClosed:kBottomControllerClosedHeight()];
+//        }
+        [self cancelSearchWithDrag:YES];
+        [self.topBtn setBackgroundImage:[UIImage imageNamed:@"bar_arrow"] forState:UIControlStateNormal];
+    }
+    if (status == JYPulleyStatusPartiallyExpand)
+    {
+        self.tableView.scrollEnabled = NO;
+//        self.tableView.contentInset =
+//        UIEdgeInsetsMake(0, 0, kBottomControllerPartiallyExpandHeight(), 0);
+//        if ([self.delegate respondsToSelector:@selector(linPullBottomViewController:didChangeToPartiallyExpand:)])
+//        {
+//            [self.delegate linPullBottomViewController:self didChangeToPartiallyExpand:kBottomControllerPartiallyExpandHeight()];
+//        }
+        [self cancelSearchWithDrag:YES];
+        [self.topBtn setBackgroundImage:[UIImage imageNamed:@"bar"] forState:UIControlStateNormal];
+    }
+    
+    if (status == JYPulleyStatusExpand)
+    {
+        self.tableView.scrollEnabled = YES;
+        self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 20, 0);
+//        if ([self.delegate respondsToSelector:@selector(linPullBottomViewController:didChangeToPartiallyExpand:)])
+//        {
+//            [self.delegate linPullBottomViewController:self didChangeToExpand:0];
+//        }
+        [self.topBtn setBackgroundImage:[UIImage imageNamed:@"bar_down"] forState:UIControlStateNormal];
+    }
+}
+
+#pragma mark - tableViewDelegate
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 120;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    static NSString *cellId = @"cellId";
+    PBProjectTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
+    if (!cell)
+        cell = [[PBProjectTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
+    cell.projectModel = self.dataList[indexPath.row];
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBTabBarController *tabBarController = [[PBTabBarController alloc] init];
+    tabBarController.projectModel = self.dataList[indexPath.row];
+    tabBarController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:tabBarController animated:YES completion:nil];
+}
+
+#pragma mark - GET
+- (UITableView *)tableView {
+    if (!_tableView)
+    {
+        CGFloat bottomViewH = 71.f - 20;
+        if (IS_IPHONE_X) {
+            bottomViewH = bottomViewH + IPHONE_X_BOTTOM;
+        }
+        _tableView = [[UITableView alloc] init];
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        [self.view addSubview:_tableView];
+        [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self.view).offset(75 );
+            make.left.right.bottom.equalTo(self.view);
+            make.bottom.equalTo(self.view).offset(-bottomViewH);
+        }];
+    }
+    return _tableView;
+}
+- (PBProjectSearchView *)projectSearchV {
+    __weak typeof(self) weakSelf = self;
+    if (!_projectSearchV) {
+        _projectSearchV = [[PBProjectSearchView alloc] init];
+        [self.view addSubview:_projectSearchV];
+        [_projectSearchV mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.equalTo(self.view);
+            make.top.equalTo(self.view).offset(24);
+        }];
+        _projectSearchV.hidden = YES;
+        _projectSearchV.projectDetailBlock = ^(PBProjectModel * _Nonnull projectModel) {
+            PBTabBarController *tabBarController = [[PBTabBarController alloc] init];
+            tabBarController.projectModel = projectModel;
+            tabBarController.modalPresentationStyle = UIModalPresentationFullScreen;
+            [weakSelf presentViewController:tabBarController animated:YES completion:nil];
+        };
+    }
+    return _projectSearchV;
+}
+- (void)setIsFavorite:(BOOL)isFavorite {
+    _isFavorite = isFavorite;
+    [self loadProjectList];
+}
+- (void)dealloc {
+    [PBNoteCenter removeObserver:self];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.h
new file mode 100644
index 0000000..1ecac50
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.h
@@ -0,0 +1,17 @@
+//
+//  LinPullMainViewController.h
+//  LINPullTableView
+//
+//  Created by earnestLin on 2019/1/16.
+//  Copyright © 2019年 earnestLin. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface LinPullMainViewController : UIViewController
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.m
new file mode 100644
index 0000000..4e0d37c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullMainViewController.m
@@ -0,0 +1,326 @@
+//
+//  LinPullMainViewController.m
+//  LINPullTableView
+//
+//  Created by earnestLin on 2019/1/16.
+//  Copyright © 2019年 earnestLin. All rights reserved.
+//
+
+#import "LinPullMainViewController.h"
+
+#import "LinPullTopViewController.h"
+#import "LinPullBottomViewController.h"
+#import "PBLoginViewController.h"
+#import "PBTabBarController.h"
+// tool
+#import "JYPulleyViewController.h"
+#import "PBProjectInfoView.h"
+#import "PBSetViewController.h"
+#import "PBScanningViewController.h"
+#import "PBMessageController.h"
+#import "PBNavigationController.h"
+@interface LinPullMainViewController ()<LinPullBottomViewControllerDelegate>
+
+@property (nonatomic, strong) JYPulleyViewController *pulleyViewController;
+@property (nonatomic, strong) LinPullTopViewController *topController;
+@property (nonatomic, strong) LinPullBottomViewController *bottomController;
+@property (nonatomic, weak) UIButton *allProjectBtn;
+@property (nonatomic, weak) UIButton *collectionProjectBtn;
+@property (nonatomic, strong) PBProjectInfoView *projectInfoView;
+@end
+
+@implementation LinPullMainViewController
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(reRegister) name:@"PBNoteCenterTokenExpired" object:nil];
+    self.view.backgroundColor = [UIColor whiteColor];
+    if ([NSString getLoginData]) {
+        [self setupUI];
+    }else{
+        [self toLogin];
+    }
+}
+- (void)reRegister {
+    [self toLogin];
+}
+- (void)toLogin {
+//    self.dataList = nil;
+//    [self.tableView reloadData];
+    PBLoginViewController *loginVC = [[PBLoginViewController alloc] init];
+    loginVC.LoginSuccessfulBlock = ^{
+//        self.mineView.realName = Realname;
+//        self.searchBar.text = nil;
+//        self.fullName = nil;
+//        [self.tableView.mj_header beginRefreshing];
+        [self setupUI];
+    };
+    loginVC.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:loginVC animated:YES completion:nil];
+}
+- (void)viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
+    [self.navigationController setNavigationBarHidden:YES animated:animated];
+}
+
+- (void)viewWillDisappear:(BOOL)animated
+{
+    [super viewWillDisappear:animated];
+    
+//    self.navigationController.navigationBarHidden = NO;
+}
+
+#pragma mark - setupUI
+- (void)setupUI {
+    self.title = @"amap";
+    __weak typeof(self) weakSelf = self;
+    self.topController = [[LinPullTopViewController alloc] init];
+    self.topController.OpenDetailsBlock = ^(PBProjectModel * _Nonnull projectModel) {
+        [PBNoteCenter postNotificationName:@"LinPulBottomViewControllerNeedChangeStatus" object:[NSString stringWithFormat:@"%zd",JYPulleyStatusClosed]];
+        weakSelf.projectInfoView.projectModel = projectModel;
+        weakSelf.projectInfoView.IntoProjectBlock = ^(PBProjectModel * _Nonnull projectModel){
+            PBTabBarController *tabBarController = [[PBTabBarController alloc] init];
+            tabBarController.projectModel = projectModel;
+            tabBarController.modalPresentationStyle = UIModalPresentationFullScreen;
+            [weakSelf presentViewController:tabBarController animated:YES completion:nil];
+        };
+        [weakSelf show];
+    };
+    self.topController.ShutDetailsBlock = ^{
+        [weakSelf hidden];
+    };
+    self.bottomController = [[LinPullBottomViewController alloc] init];
+    self.bottomController.jumpToSetVCBlock = ^{
+        PBSetViewController *setVC = [[PBSetViewController alloc] init];
+        setVC.ToLoginBlock = ^{
+            [weakSelf.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
+            [weakSelf toLogin];
+        };
+        [weakSelf.navigationController pushViewController:setVC animated:YES];
+    };
+    self.bottomController.jumpToMessageBlock = ^{
+        PBMessageController *messageVC = [[PBMessageController alloc] init];
+        PBNavigationController *nav = [[PBNavigationController alloc] initWithRootViewController:messageVC];
+        nav.modalPresentationStyle = UIModalPresentationFullScreen;
+        [weakSelf presentViewController:nav animated:YES completion:nil];
+//        [weakSelf.navigationController pushViewController:messageVC animated:YES];
+    };
+    self.bottomController.delegate = self;
+    self.pulleyViewController =
+    [[JYPulleyViewController alloc] initWithContentDataSource:self.topController
+                                             drawerDataSource:self.bottomController];
+    self.pulleyViewController.view.frame = self.view.bounds;
+    self.pulleyViewController.supportedStatus = JYPulleyStatusClosed | JYPulleyStatusExpand | JYPulleyStatusPartiallyExpand;
+    self.pulleyViewController.drawerExpandTopInset = 0;
+    self.pulleyViewController.dimmingView.backgroundColor = [UIColor whiteColor];
+    self.pulleyViewController.dimmingOpacity = 1;
+    self.pulleyViewController.drawerDelegate = self.bottomController;
+    self.bottomController.drawerScrollDelegate = self.pulleyViewController;
+    [self.pulleyViewController addChildViewController:self.topController];
+    [self.pulleyViewController addChildViewController:self.bottomController];
+    [self addChildViewController:self.pulleyViewController];
+    [self.view addSubview:self.pulleyViewController.view];
+    [self.pulleyViewController updateStatus:JYPulleyStatusPartiallyExpand animated:NO];
+    CGFloat bottomSpacing = 0.f;
+    if (IS_IPHONE_X) {
+        bottomSpacing = IPHONE_X_BOTTOM;
+    }
+//    UIImageView *bottomV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab_bar"]];
+//    [self.view addSubview:bottomV];
+//    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.left.right.equalTo(self.view);
+//        make.height.equalTo(@71);
+//        make.bottom.equalTo(self.view).offset(-bottomSpacing);
+//    }];
+    UIView *bottomV = [[UIView alloc] init];
+    bottomV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:bottomV];
+    [bottomV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.equalTo(self.view);
+        make.height.equalTo(@56);
+        make.bottom.equalTo(self.view).offset(-bottomSpacing);
+    }];
+    
+    UIView *supplementV = [[UIView alloc] init];
+    supplementV.backgroundColor = [UIColor whiteColor];
+    [self.view addSubview:supplementV];
+    [supplementV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV.mas_bottom);
+        make.left.right.equalTo(bottomV);
+        make.bottom.equalTo(self.view);
+    }];
+//    UIButton *scanningBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"scan"]];
+//    [scanningBtn addTarget:self action:@selector(scanningAction) forControlEvents:UIControlEventTouchUpInside];
+//    [self.view addSubview:scanningBtn];
+//    [scanningBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(bottomV).offset(10);
+//        make.centerX.equalTo(bottomV);
+//        make.size.mas_equalTo(CGSizeMake(44, 44));
+//    }];
+    UIButton *allProjectBtn = [UIButton z_bgNormalImage:[UIImage imageNamed:@"all_project_nor"] bgSelectedImage:[UIImage imageNamed:@"all_project"]];
+    allProjectBtn.selected = YES;
+    [allProjectBtn addTarget:self action:@selector(allProjectAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:allProjectBtn];
+    [allProjectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(12);
+        make.left.equalTo(bottomV).offset(63);
+        make.size.mas_equalTo(CGSizeMake(28, 42));
+    }];
+    
+    UIButton *collectProjectBtn = [UIButton z_bgNormalImage:[UIImage imageNamed:@"collect_nor"] bgSelectedImage:[UIImage imageNamed:@"collect_select"]];
+    [collectProjectBtn addTarget:self action:@selector(collectionProjectAction) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:collectProjectBtn];
+    [collectProjectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bottomV).offset(12);
+        make.right.equalTo(bottomV).offset(-63);
+        make.size.mas_equalTo(CGSizeMake(28, 42));
+    }];
+    self.allProjectBtn = allProjectBtn;
+    self.collectionProjectBtn = collectProjectBtn;
+    [self.view addSubview:self.projectInfoView];
+    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.projectInfoView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
+    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
+    maskLayer.frame = self.projectInfoView.bounds;
+    maskLayer.path = maskPath.CGPath;
+    self.projectInfoView.layer.mask = maskLayer;
+}
+
+#pragma mark - 扫描二维码
+- (void)scanningAction {
+    PBScanningViewController *scanningVC = [[PBScanningViewController alloc] init];
+    [self QRCodeScanVC:scanningVC];
+}
+- (void)QRCodeScanVC:(UIViewController *)scanVC {
+    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+    if (device) {
+        AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+        switch (status) {
+                case AVAuthorizationStatusNotDetermined: {
+                    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
+                        if (granted) {
+                            dispatch_sync(dispatch_get_main_queue(), ^{
+                                [self.navigationController pushViewController:scanVC animated:YES];
+                            });
+                            NSLog(@"用户第一次同意了访问相机权限 - - %@", [NSThread currentThread]);
+                        } else {
+                            NSLog(@"用户第一次拒绝了访问相机权限 - - %@", [NSThread currentThread]);
+                        }
+                    }];
+                    break;
+                }
+                case AVAuthorizationStatusAuthorized: {
+                    [self.navigationController pushViewController:scanVC animated:YES];
+                    break;
+                }
+                case AVAuthorizationStatusDenied: {
+                    UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"请去-> [设置 - 隐私 - 相机 - SGQRCodeExample] 打开访问开关" preferredStyle:(UIAlertControllerStyleAlert)];
+                    UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
+                        
+                    }];
+                    
+                    [alertC addAction:alertA];
+                    [self presentViewController:alertC animated:YES completion:nil];
+                    break;
+                }
+                case AVAuthorizationStatusRestricted: {
+                    NSLog(@"因为系统原因, 无法访问相册");
+                    break;
+                }
+                
+            default:
+                break;
+        }
+        return;
+    }
+    
+    UIAlertController *alertC = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"未检测到您的摄像头" preferredStyle:(UIAlertControllerStyleAlert)];
+    UIAlertAction *alertA = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
+        
+    }];
+    
+    [alertC addAction:alertA];
+    [self presentViewController:alertC animated:YES completion:nil];
+}
+
+#pragma mark - 全部项目
+- (void)allProjectAction {
+    if (self.allProjectBtn.selected) {
+        return;
+    }
+    self.collectionProjectBtn.selected = NO;
+    self.allProjectBtn.selected = YES;
+    self.bottomController.isFavorite = NO;
+}
+#pragma mark - 收藏项目
+- (void)collectionProjectAction {
+    if (self.collectionProjectBtn.selected) {
+        return;
+    }
+    self.allProjectBtn.selected = NO;
+    self.collectionProjectBtn.selected = YES;
+    self.bottomController.isFavorite = YES;
+}
+#pragma mark - JYEBMonitorEbikeDetailContentVCDelegate
+
+//- (void)linPullBottomViewController:(LinPullBottomViewController *)vc
+//                  didChangeToExpand:(CGFloat)height
+//{
+//    self.navigationController.navigationBarHidden = YES;
+//}
+//
+//- (void)linPullBottomViewController:(LinPullBottomViewController *)vc
+//         didChangeToPartiallyExpand:(CGFloat)height
+//{
+//    self.navigationController.navigationBarHidden = YES;
+//}
+//
+//- (void)linPullBottomViewController:(LinPullBottomViewController *)vc
+//         didChangeToClosed:(CGFloat)height
+//{
+//    self.navigationController.navigationBarHidden = YES;
+//}
+- (PBProjectInfoView *)projectInfoView {
+    if (_projectInfoView == nil) {
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 182.f + IPHONE_X_BOTTOM;
+        }else {
+            height = 182.f;
+        }
+        __weak typeof(self) weakSelf = self;
+        _projectInfoView = [[PBProjectInfoView alloc] initWithFrame:CGRectMake(0, PBScreenHeight, PBScreenWidth, height)];
+        _projectInfoView.packupBlock = ^{
+            [weakSelf hidden];
+        };
+        weakSelf.projectInfoView.SetCollectionState = ^(PBProjectModel * _Nonnull projectModel) {
+            weakSelf.topController.projectModel = projectModel;
+        };
+    }
+    return _projectInfoView;
+}
+- (void)hidden {
+    [UIView animateWithDuration:0.3 animations:^{
+//        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0];
+        self.projectInfoView.y = PBScreenHeight;
+    }completion:^(BOOL finished) {
+        for (UIView *cover in PBKeyWindow.subviews) {
+            if ([cover isKindOfClass:[PBProjectInfoView class]]) {
+                [cover removeFromSuperview];
+            }
+        }
+    }];
+}
+- (void)show {
+    [UIView animateWithDuration:0.3 animations:^{
+//        self.backgroundColor = [[UIColor blackColor]colorWithAlphaComponent:0.5];
+        CGFloat height;
+        if (IS_IPHONE_X) {
+            height = 182.f + IPHONE_X_BOTTOM;
+        }else {
+            height = 182.f;
+        }
+        self.projectInfoView.y = PBScreenHeight - height;
+    }];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.h
new file mode 100644
index 0000000..e023738
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.h
@@ -0,0 +1,22 @@
+//
+//  LinPullTopViewController.h
+//  LINPullTableView
+//
+//  Created by earnestLin on 2019/1/16.
+//  Copyright © 2019年 earnestLin. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "JYPulleyViewController.h"
+@class PBProjectModel;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface LinPullTopViewController : UIViewController <JYPulleyContentDataSource>
+@property (nonatomic, copy) void(^OpenDetailsBlock)(PBProjectModel *projectModel);
+@property (nonatomic, copy) void(^ShutDetailsBlock)(void);
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.m
new file mode 100644
index 0000000..9873eb4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/LinPullTopViewController.m
@@ -0,0 +1,168 @@
+//
+//  LinPullTopViewController.m
+//  LINPullTableView
+//
+//  Created by earnestLin on 2019/1/16.
+//  Copyright © 2019年 earnestLin. All rights reserved.
+//
+
+#import "LinPullTopViewController.h"
+#import <MAMapKit/MAMapKit.h>
+#import <AMapFoundationKit/AMapFoundationKit.h>
+#import "PBProjectModel.h"
+#import "PBAnnotationView.h"
+#import "PBPointAnnotation.h"
+
+
+@interface LinPullTopViewController ()<MAMapViewDelegate, UIGestureRecognizerDelegate>
+@property (nonatomic, strong) UIButton *leftBackButton;
+@property (nonatomic, strong) MAMapView *mapView;
+@property (nonatomic, strong) NSArray *dataList;
+@end
+
+@implementation LinPullTopViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    
+    [self setupUI];
+    [self loadProjectList];
+}
+- (void)addProjectAnnotation {
+    for (PBProjectModel *obj in self.dataList) {
+        PBPointAnnotation *pointAnnotation = [[PBPointAnnotation alloc] init];
+        pointAnnotation.coordinate = CLLocationCoordinate2DMake(obj.bog_latitude, obj.bog_longitude);
+        pointAnnotation.projectModel = obj;
+        [_mapView addAnnotation:pointAnnotation];
+    };
+}
+- (void)loadProjectList {
+    [YJProgressHUD showProgress:@"正在加载项目数据" inView:self.view];
+    [[PBNetworkTools sharedTools] getProjectListWithKeyword:@"" andIsPublic:@"" andSort:@"CreateDate desc" andSkip:@"0" andtake:@"999" andOnlyFavorite:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if(error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载项目列表失败" inView:self.view];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.dataList = [NSArray yy_modelArrayWithClass:[PBProjectModel class] json:[networkModel.Data valueForKey:@"rows"]];
+            [self addProjectAnnotation];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self.view];
+        }
+    }];
+}
+#pragma mark - setupUI
+
+- (void)setupUI {
+//    self.view.backgroundColor = [UIColor whiteColor];
+//    UIImageView *imgView = [[UIImageView alloc] initWithFrame:self.view.bounds];
+//    imgView.image = [UIImage imageNamed:@"topviewBg"];
+//    [self.view addSubview:imgView];
+//    
+//    self.leftBackButton = [[UIButton alloc] init];
+//    self.leftBackButton.imageView.contentMode = UIViewContentModeScaleAspectFill;
+//    [self.leftBackButton setImage:[UIImage imageNamed:@"icon_return"]
+//                     forState:UIControlStateNormal];
+//    
+//    [self.view addSubview:self.leftBackButton];
+//    [self.leftBackButton mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.left.equalTo(self.view).offset(0);
+//        make.top.equalTo(self.view).offset(20);
+//        make.height.width.mas_equalTo(60);
+//    }];
+//    
+//    [self.leftBackButton addTarget:self
+//                        action:@selector(leftBackButtonAction:)
+//              forControlEvents:UIControlEventTouchUpInside];
+//    
+//    
+    
+    [AMapServices sharedServices].enableHTTPS = YES;
+    self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
+    self.mapView.delegate = self;
+    self.mapView.zoomLevel = 3; //3 ~ 9
+    self.mapView.showsCompass = NO;
+    self.mapView.centerCoordinate = CLLocationCoordinate2DMake(23.901512367, 106.631821404);
+    [self.view addSubview:self.mapView];
+    
+    UITapGestureRecognizer *mTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapPress:)];
+    mTap.delegate = self;
+    [self.mapView addGestureRecognizer:mTap];
+}
+
+- (void)tapPress:(UIGestureRecognizer*)gestureRecognizer {
+//    CGPoint touchPoint = [gestureRecognizer locationInView:_mapView];//这里touchPoint是点击的某点在地图控件中的位置
+//    CLLocationCoordinate2D  secondLocation = [_mapView convertPoint:touchPoint toCoordinateFromView:_mapView];//这里touchMapCoordinate就是该点的经纬度了
+//    NSLog(@"%f=======%f",secondLocation.latitude,secondLocation.longitude);
+    if (self.ShutDetailsBlock) {
+        self.ShutDetailsBlock();
+    }
+}
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
+    return YES;
+}
+#pragma mark - event response
+
+//- (void) leftBackButtonAction:(UIButton *)sender
+//{
+//    [self.navigationController popViewControllerAnimated:YES];
+//}
+
+- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation {
+    if ([annotation isKindOfClass:[MAPointAnnotation class]])
+    {
+        static NSString *reuseIndetifier = @"annotationReuseIndetifier";
+        PBPointAnnotation *point = annotation;
+        MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];
+        if (annotationView == nil)
+        {
+            annotationView = [[PBAnnotationView alloc] initWithAnnotation:annotation
+reuseIdentifier:reuseIndetifier];
+        }
+        if (point.projectModel.isFavorite) {
+            annotationView.image = [UIImage imageNamed:@"red"];
+        }else {
+            annotationView.image = [UIImage imageNamed:@"blue"];
+        }
+        
+        //设置中心点偏移,使得标注底部中间点成为经纬度对应点
+        annotationView.centerOffset = CGPointMake(0, -18);
+        return annotationView;
+    }
+    return nil;
+}
+
+- (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view {
+    NSArray * array = [NSArray arrayWithArray:_mapView.annotations];
+    for (int i=0; i<array.count; i++) {
+       PBPointAnnotation *pointAnnotation = array[i];
+       if (view.annotation.coordinate.latitude == pointAnnotation.coordinate.latitude) {
+           NSLog(@"%@",pointAnnotation.projectModel.fullname);
+           [self changeCenterTo:view.annotation.coordinate];
+           if (self.OpenDetailsBlock) {
+               self.OpenDetailsBlock(pointAnnotation.projectModel);
+           }
+       }
+    }
+}
+- (void)changeCenterTo:(CLLocationCoordinate2D)newLoc {
+    [self.mapView setCenterCoordinate:newLoc animated:YES];
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+    for (PBPointAnnotation *annotation in _mapView.annotations) {
+        NSLog(@"%@",annotation.projectModel.bimcomposerid);
+        if([annotation.projectModel.bimcomposerid isEqual:projectModel.bimcomposerid]) {
+            [_mapView removeAnnotation:annotation];
+            PBPointAnnotation *pointAnnotation = [[PBPointAnnotation alloc] init];
+            pointAnnotation.coordinate = CLLocationCoordinate2DMake(projectModel.bog_latitude, projectModel.bog_longitude);
+            pointAnnotation.projectModel = projectModel;
+            [_mapView addAnnotation:pointAnnotation];
+        }
+    }
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.h
new file mode 100755
index 0000000..91f3028
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.h
@@ -0,0 +1,25 @@
+//
+//  JYPulleyScrollView.h
+//  JYPulleyController
+//
+//  Created by JunpuChen on 2018/7/30.
+//  Copyright © 2018年 earnestLin. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class JYPulleyScrollView;
+
+@protocol JYPulleyScrollViewDelegate <NSObject>
+
+- (BOOL)shouldTouchPulleyScrollView:(JYPulleyScrollView *)scrollView point:(CGPoint)point;
+
+- (UIView *)viewToReceiveTouch:(JYPulleyScrollView *)scrollView point:(CGPoint)point;
+
+@end
+
+@interface JYPulleyScrollView : UIScrollView
+
+@property (nullable, nonatomic, weak) id<JYPulleyScrollViewDelegate> touchDelegate;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.m
new file mode 100755
index 0000000..39911d8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyScrollView.m
@@ -0,0 +1,34 @@
+//
+//  JYPulleyScrollView.m
+//  JYPulleyController
+//
+//  Created by JunpuChen on 2018/7/30.
+//  Copyright © 2018年 earnestLin. All rights reserved.
+//
+
+#import "JYPulleyScrollView.h"
+
+@implementation JYPulleyScrollView
+
+#pragma mark - Override
+
+- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
+    if ([self.touchDelegate respondsToSelector:@selector(shouldTouchPulleyScrollView:point:)]) {
+        if ([self.touchDelegate shouldTouchPulleyScrollView:self point:point]) {
+            UIView *view = [self.touchDelegate viewToReceiveTouch:self point:point];
+            CGPoint p = [view convertPoint:point fromView:self];
+            return [view hitTest:p withEvent:event];
+        }
+    }
+    return [super hitTest:point withEvent:event];
+}
+
+/// 如果 scrollView 上有 button,优先滚动
+- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
+    if ([view isKindOfClass:[UIButton class]]) {
+        return YES;
+    }
+    return [super touchesShouldCancelInContentView:view];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.h
new file mode 100755
index 0000000..8676379
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.h
@@ -0,0 +1,169 @@
+//
+//  JYPulleyViewController.h
+//  JYPulleyController
+//
+//  Created by JunpuChen on 2018/7/30.
+//  Copyright © 2018年 earnestLin. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class JYPulleyViewController;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// 伸缩状态
+typedef NS_OPTIONS(NSUInteger, JYPulleyStatus) {
+    JYPulleyStatusNone = 1 << 0,            // 不在可视范围
+    JYPulleyStatusClosed = 1 << 1,          // 收起
+    JYPulleyStatusPartiallyExpand = 1 << 2, // 部分展开
+    JYPulleyStatusExpand = 1 << 3,          // 全部展开
+};
+
+/// 主内容视图数据源协议
+@protocol JYPulleyContentDataSource <NSObject>
+
+/// 主内容试图
+- (UIView *)view;
+
+@end
+
+/// 抽屉视图数据源协议
+@protocol JYPulleyDrawerDataSource <NSObject>
+
+/// 抽屉视图
+- (UIView *)view;
+
+@optional
+
+/// 关闭状态的高度
+- (CGFloat)closedHeightInPulleyViewController:(JYPulleyViewController *)pulleyViewController;
+
+/// 部分展开状态的高度
+- (CGFloat)partiallyExpandHeightInPulleyViewController:
+    (JYPulleyViewController *)pulleyViewController;
+
+/// 全部展开状态的高度
+- (CGFloat)expandHeightInPulleyViewController:(JYPulleyViewController *)pulleyViewController;
+
+@end
+
+/// 抽屉视图代理
+@protocol JYPulleyDrawerDelegate <NSObject>
+
+@optional
+
+/**
+ 当抽屉视图状态改变时回调
+
+ @param pulleyViewController pulleyViewController
+ @param status 改变后的状态,该状态是唯一的,不存在位移
+ */
+- (void)pulleyViewController:(JYPulleyViewController *)pulleyViewController
+             didChangeStatus:(JYPulleyStatus)status;
+
+/**
+ 实时回调抽屉视图的滚动进度
+
+ @param pulleyViewController pulleyViewController
+ @param progress 滚动进度:0 - 1
+ */
+- (void)pulleyViewController:(JYPulleyViewController *)pulleyViewController
+      drawerDraggingProgress:(CGFloat)progress;
+
+@end
+
+/**
+ 处理抽屉视图中 scrollView 的协议
+    * 当抽屉视图即:drawerDataSource.view 中存在 scrollView 时,需要将 scrollView 中 offset 的改变实
+      时传入该方法
+    * 默认 JYPulleyViewController 会遵守该协议,并控制抽屉视图中的 scrollView 的可滚动状态
+    * 以保证 抽屉视图的拉伸 和 抽屉视图中的 scrollView 保持联动
+ */
+@protocol JYPulleyDrawerScrollViewDelegate <NSObject>
+
+/// 抽屉视图中的 scrollView 的 offset 改变时
+- (void)drawerScrollViewDidScroll:(UIScrollView *)scrollView;
+
+@end
+
+/**
+ 提供一种类似 iOS10 以上系统地图相类似的控件,底部拥有一个可上拉的抽屉视图
+ */
+@interface JYPulleyViewController : UIViewController <JYPulleyDrawerScrollViewDelegate>
+
+/// 主内容视图数据源
+@property (nonatomic, strong) id<JYPulleyContentDataSource> contentDataSource;
+
+/// 抽屉视图数据源
+@property (nonatomic, strong) id<JYPulleyDrawerDataSource> drawerDataSource;
+
+/// 抽屉视图代理
+@property (nullable, nonatomic, strong) id<JYPulleyDrawerDelegate> drawerDelegate;
+
+/// 当前状态,注意:当前状态是唯一的,不存在位移
+@property (nonatomic, assign, readonly) JYPulleyStatus currentStatus;
+
+/// 支持的状态,可以同时传入多种状态,默认:全部支持
+@property (nonatomic, assign) JYPulleyStatus supportedStatus;
+
+/**
+ 抽屉视图关闭状态高度
+ 当 drawerDataSource 没有实现 closedHeightInPulleyViewController 时使用该值
+ 默认:68
+ */
+@property (nonatomic, assign) CGFloat drawerClosedHeight;
+
+/**
+ 抽屉视图部分展开状态高度
+ 当 drawerDataSource 没有实现 partiallyExpandHeightInPulleyViewController 时使用该值
+ 默认:264
+ */
+@property (nonatomic, assign) CGFloat drawerPartiallyExpandHeight;
+
+/**
+ 抽屉视图部分展开状态高度
+ 当 drawerDataSource 没有实现 expandHeightInPulleyViewController 时使用该值
+ 默认:占满整个屏幕
+ */
+@property (nonatomic, assign) CGFloat drawerExpandHeight;
+
+/// 抽屉视图展开状态定部内边距,默认:20
+@property (nonatomic, assign) CGFloat drawerExpandTopInset;
+
+/**
+ 背景遮罩,默认为一个普通的 UIView,背景色为 blackColor,可设置为自己的 view
+ 注意:dimmingView 的大小将会盖满整个控件
+ JYPulleyViewController 会自动给自定义的 dimmingView 添加手势以实现点击遮罩隐藏浮层
+ */
+@property (nonatomic, strong) UIView *dimmingView;
+
+/// 背景遮罩点击手势
+@property (nonatomic, strong, readonly) UITapGestureRecognizer *dimmingViewTapGestureRecognizer;
+
+/// 背景遮罩显示时的不透明度,默认:0.5
+@property (nonatomic, assign) CGFloat dimmingOpacity;
+
+/**
+ 带有 主内容视图数据源 和 抽屉视图数据源 的初始化
+
+ @param contentDataSource 主内容视图数据源
+ @param drawerDataSource 抽屉视图数据源
+ @return JYPulleyViewController
+ */
+- (instancetype)initWithContentDataSource:(id<JYPulleyContentDataSource>)contentDataSource
+                         drawerDataSource:(id<JYPulleyDrawerDataSource>)drawerDataSource;
+
+/**
+ 更新当前状态
+
+ @param status 需要更新的状态
+ @param animated 是否需要动画
+
+ @warning 传入的 status 状态必须唯一,不可以位移
+ */
+- (void)updateStatus:(JYPulleyStatus)status animated:(BOOL)animated;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.m
new file mode 100755
index 0000000..3c6171d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/ViewControllers/amapEffect/tool/JYPulleyViewController.m
@@ -0,0 +1,616 @@
+//
+//  JYPulleyViewController.m
+//  JYPulleyController
+//
+//  Created by JunpuChen on 2018/7/30.
+//  Copyright © 2018年 earnestLin. All rights reserved.
+//
+
+#import "JYPulleyViewController.h"
+
+#import "JYPulleyScrollView.h"
+
+@interface JYPulleyViewController () <UIScrollViewDelegate,
+                                      UIGestureRecognizerDelegate,
+                                      JYPulleyScrollViewDelegate>
+
+/// 主内容视图容器
+@property (nonatomic, strong) UIView *contentContainerView;
+/// 抽屉内容视图容器
+@property (nonatomic, strong) UIView *drawerContainerView;
+/// 用于承载 drawerContainerView 和手势传递的 scrollView
+@property (nonatomic, strong) JYPulleyScrollView *scrollView;
+
+/// scrollView 滑动手势
+@property (nonatomic, strong) UIPanGestureRecognizer *scrollViewPanGestureRecognizer;
+/// 背景遮罩点击手势
+@property (nonatomic, strong, readwrite) UITapGestureRecognizer *dimmingViewTapGestureRecognizer;
+
+/// 记录最后一次滑动位置
+@property (nonatomic, assign) CGPoint lastContentOffSet;
+/// 抽屉视图是否可以滚动
+@property (nonatomic, assign) BOOL drawerShouldScroll;
+/// 当前状态
+@property (nonatomic, assign, readwrite) JYPulleyStatus currentStatus;
+
+@end
+
+@implementation JYPulleyViewController
+
+#pragma mark - life cycle
+
+- (instancetype)initWithContentDataSource:(id<JYPulleyContentDataSource>)contentDataSource drawerDataSource:(id<JYPulleyDrawerDataSource>)drawerDataSource {
+    if (self = [self initWithNibName:nil bundle:nil]) {
+        NSParameterAssert(contentDataSource);
+        NSParameterAssert(drawerDataSource);
+        _contentDataSource = contentDataSource;
+        _drawerDataSource = drawerDataSource;
+    }
+    return self;
+}
+
+- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
+    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
+        _drawerClosedHeight = 68.0f;
+        _drawerPartiallyExpandHeight = 264.0f;
+        _drawerExpandTopInset = 20.0f;
+        _dimmingView = [UIView new];
+        _dimmingView.backgroundColor = [UIColor redColor];
+        _dimmingOpacity = 0.5f;
+        _currentStatus = JYPulleyStatusClosed;
+        _supportedStatus = JYPulleyStatusNone
+                         | JYPulleyStatusClosed
+                         | JYPulleyStatusPartiallyExpand
+                         | JYPulleyStatusExpand;
+    }
+    return self;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [PBNoteCenter addObserver:self selector:@selector(needChangeStatus:) name:@"LinPulBottomViewControllerNeedChangeStatus" object:nil];
+    [self setupUI];
+}
+- (void)needChangeStatus:(NSNotification *)noti {
+    JYPulleyStatus status = (JYPulleyStatus)[noti.object integerValue];
+    [self updateStatus:status animated:YES];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+
+}
+
+#pragma mark - UIScrollViewDelegate
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
+
+    if (scrollView != self.scrollView) {
+        return;
+    }
+
+    [self updateDrawerDraggingProgress:scrollView];
+    [self updateDimmingViewAlpha:scrollView];
+
+}
+
+- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
+
+    if (scrollView != self.scrollView) {
+        return;
+    }
+
+    JYPulleyStatus newStatus = [self newStatusFromCurrentStatus:self.currentStatus
+                                              lastContentOffSet:self.lastContentOffSet
+                                                     scrollView:self.scrollView
+                                                supportedStatus:self.supportedStatus];
+    [self updateStatus:newStatus animated:YES];
+
+}
+
+- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
+
+    if (scrollView != self.scrollView) {
+        return;
+    }
+
+    self.lastContentOffSet = CGPointMake(targetContentOffset->x, targetContentOffset->y);
+    *targetContentOffset = scrollView.contentOffset;
+
+}
+
+#pragma mark - JYPulleyScrollViewDelegate
+
+- (BOOL)shouldTouchPulleyScrollView:(JYPulleyScrollView *)scrollView point:(CGPoint)point {
+    CGPoint convertPoint = [self.drawerContainerView convertPoint:point fromView:scrollView];
+    return !CGRectContainsPoint(self.drawerContainerView.bounds, convertPoint);
+}
+
+- (UIView *)viewToReceiveTouch:(JYPulleyScrollView *)scrollView point:(CGPoint)point {
+    if (self.currentStatus == JYPulleyStatusExpand && self.dimmingView) {
+        return self.dimmingView;
+    }
+    return self.contentContainerView;
+}
+
+#pragma mark - JYPulleyDrawerScrollViewDelegate
+
+- (void)drawerScrollViewDidScroll:(UIScrollView *)scrollView {
+    if (scrollView.contentOffset.y <= 0) {
+        self.drawerShouldScroll = YES;
+        scrollView.scrollEnabled = NO;
+    } else {
+        self.drawerShouldScroll = NO;
+        scrollView.scrollEnabled = YES;
+    }
+}
+
+#pragma mark - UIGestureRecognizerDelegate
+
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
+    shouldRecognizeSimultaneouslyWithGestureRecognizer:
+        (UIGestureRecognizer *)otherGestureRecognizer {
+    return YES;
+}
+
+#pragma mark - public method
+
+/**
+ 根据伸缩状态处理悬停动作
+
+ @param status 伸缩状态
+ */
+- (void)updateStatus:(JYPulleyStatus)status animated:(BOOL)animated {
+
+    if (!(self.supportedStatus & status)) {
+        return;
+    }
+
+    CGFloat stopToMoveTo;
+    CGFloat minimumHeight = [self drawerClosedHeight];
+
+    if (status == JYPulleyStatusClosed) {
+
+        stopToMoveTo = minimumHeight;
+
+    } else if (status == JYPulleyStatusPartiallyExpand) {
+
+        stopToMoveTo = [self drawerPartiallyExpandHeight];
+
+    } else if (status == JYPulleyStatusExpand) {
+
+        if ([self drawerExpandHeight] > 0) {
+            stopToMoveTo = [self drawerExpandHeight];
+        } else {
+            stopToMoveTo = self.scrollView.frame.size.height;
+        }
+
+    } else {
+
+        stopToMoveTo = 0.0f;
+    }
+
+    self.currentStatus = status;
+
+    if (animated) {
+
+        [UIView animateWithDuration:0.3
+                              delay:0.0
+             usingSpringWithDamping:0.75
+              initialSpringVelocity:0.0
+                            options:UIViewAnimationOptionCurveEaseInOut
+                         animations:^{
+
+                            [self.scrollView
+                                setContentOffset:CGPointMake(0, stopToMoveTo - minimumHeight)
+                                        animated:NO];
+
+                            if (self.dimmingView) {
+                                self.dimmingView.frame =
+                                    [self dimmingViewFrameForDrawerPosition:stopToMoveTo];
+                            }
+
+                         } completion:nil];
+
+    } else {
+
+        [self.scrollView setContentOffset:CGPointMake(0, stopToMoveTo - minimumHeight)
+                                 animated:NO];
+
+        if (self.dimmingView) {
+            self.dimmingView.frame = [self dimmingViewFrameForDrawerPosition:stopToMoveTo];
+        }
+    }
+
+}
+
+#pragma mark - event response
+
+- (void)didRecognizedScrollViewPanGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer {
+
+    if (!self.drawerShouldScroll) {
+        return;
+    }
+
+    if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {
+
+        CGPoint old = [gestureRecognizer translationInView:self.scrollView];
+
+        if (old.y < 0) {
+            return;
+        }
+
+        CGPoint offSet =
+            CGPointMake(0, self.scrollView.frame.size.height - old.y - [self drawerClosedHeight]);
+        self.lastContentOffSet = offSet;
+        self.scrollView.contentOffset = offSet;
+
+    } else if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
+
+        self.drawerShouldScroll = NO;
+
+        JYPulleyStatus newStatus = [self newStatusFromCurrentStatus:self.currentStatus
+                                                  lastContentOffSet:self.lastContentOffSet
+                                                         scrollView:self.scrollView
+                                                    supportedStatus:self.supportedStatus];
+        [self updateStatus:newStatus animated:YES];
+
+    }
+
+}
+
+- (void)didRecognizedDimmingViewTapGestureRecognizer:(UITapGestureRecognizer *)gestureRecognizer {
+    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
+        [self updateStatus:JYPulleyStatusClosed animated:YES];
+    }
+}
+
+#pragma mark - private method
+
+- (void)updateDrawerDraggingProgress:(UIScrollView *)scrollView {
+
+    CGFloat drawerClosedHeight = [self drawerClosedHeight];
+
+    if ([self.drawerDelegate
+            respondsToSelector:@selector(pulleyViewController:drawerDraggingProgress:)]) {
+
+        CGFloat safeAreaTopInset;
+
+        if (@available(iOS 11.0, *)) {
+            safeAreaTopInset = self.view.safeAreaInsets.top;
+        } else {
+            safeAreaTopInset = self.topLayoutGuide.length;
+        }
+
+        CGFloat spaceToDrag =
+            self.scrollView.bounds.size.height - safeAreaTopInset - drawerClosedHeight;
+
+        CGFloat dragProgress = fabs(scrollView.contentOffset.y) / spaceToDrag;
+        if (dragProgress - 1 > FLT_EPSILON) { //in case greater than 1
+            dragProgress = 1.0f;
+        }
+        // 保留两位小数
+        NSString *progress = [NSString stringWithFormat:@"%.2f", dragProgress];
+        [self.drawerDelegate pulleyViewController:self drawerDraggingProgress:progress.floatValue];
+    }
+}
+
+- (void)updateDimmingViewAlpha:(UIScrollView *)scrollView {
+
+    CGFloat safeAreaBottomInset;
+    CGFloat drawerClosedHeight = [self drawerClosedHeight];
+
+    if (@available(iOS 11.0, *)) {
+        safeAreaBottomInset = self.view.safeAreaInsets.bottom;
+    } else {
+        safeAreaBottomInset = self.bottomLayoutGuide.length;
+    }
+
+    // 背景遮罩颜色变化
+    self.dimmingView.backgroundColor = PBColor(40, 58, 79);
+    if ((scrollView.contentOffset.y - safeAreaBottomInset) >
+        ([self drawerPartiallyExpandHeight] - drawerClosedHeight)) {
+        CGFloat progress;
+        CGFloat fullRevealHeight = self.scrollView.bounds.size.height;
+
+        if (fullRevealHeight == [self drawerPartiallyExpandHeight]) {
+            progress = 1.0;
+        } else {
+            progress = (scrollView.contentOffset.y -
+                        ([self drawerPartiallyExpandHeight] - drawerClosedHeight)) /
+                       (fullRevealHeight - [self drawerPartiallyExpandHeight]);
+        }
+        self.dimmingView.alpha = progress * self.dimmingOpacity * 0.5;
+        self.dimmingView.userInteractionEnabled = YES;
+    } else {
+        if (self.dimmingView.alpha >= 0.01) {
+            self.dimmingView.alpha = 0.0;
+            self.dimmingView.userInteractionEnabled = NO;
+        }
+    }
+
+    self.dimmingView.frame =
+        [self dimmingViewFrameForDrawerPosition:scrollView.contentOffset.y + drawerClosedHeight];
+
+}
+
+- (CGRect)dimmingViewFrameForDrawerPosition:(CGFloat)position {
+    CGRect dimmingViewFrame = self.dimmingView.frame;
+    dimmingViewFrame.origin.y = 0 - position;
+    return dimmingViewFrame;
+}
+
+- (JYPulleyStatus)newStatusFromCurrentStatus:(JYPulleyStatus)currentStatus
+                           lastContentOffSet:(CGPoint)lastContentOffSet
+                                  scrollView:(UIScrollView *)scrollView
+                             supportedStatus:(JYPulleyStatus)supportedStatus {
+
+    NSMutableArray<NSNumber *> *drawerStops = [NSMutableArray array];
+    CGFloat currentDrawerStatusStop = 0.0f;
+
+    if (supportedStatus & JYPulleyStatusClosed) {
+
+        CGFloat collapsedHeight = [self drawerClosedHeight];
+        [drawerStops addObject:@(collapsedHeight)];
+
+        if (currentStatus == JYPulleyStatusClosed) {
+            currentDrawerStatusStop = collapsedHeight;
+        }
+
+    }
+
+    if (supportedStatus & JYPulleyStatusPartiallyExpand) {
+
+        CGFloat partialHeight = [self drawerPartiallyExpandHeight];
+        [drawerStops addObject:@(partialHeight)];
+
+        if (currentStatus == JYPulleyStatusPartiallyExpand) {
+            currentDrawerStatusStop = partialHeight;
+        }
+
+    }
+
+    if (supportedStatus & JYPulleyStatusExpand) {
+
+        CGFloat openHeight = scrollView.bounds.size.height;
+        [drawerStops addObject:@(openHeight)];
+
+        if (currentStatus == JYPulleyStatusExpand) {
+            currentDrawerStatusStop = openHeight;
+        }
+    }
+
+    // 取最小值
+    CGFloat lowestStop = [[drawerStops valueForKeyPath:@"@min.floatValue"] floatValue];
+    CGFloat distanceFromBottomOfView = lowestStop + lastContentOffSet.y;
+    CGFloat currentClosestStop = lowestStop;
+
+    JYPulleyStatus cloestValidDrawerStatus = currentStatus;
+
+    for (NSNumber *currentStop in drawerStops) {
+
+        if (fabs(currentStop.floatValue - distanceFromBottomOfView) <
+            fabs(currentClosestStop - distanceFromBottomOfView)) {
+            currentClosestStop = currentStop.integerValue;
+        }
+
+    }
+
+    if (fabs(currentClosestStop - (scrollView.frame.size.height)) <= FLT_EPSILON &&
+        supportedStatus & JYPulleyStatusExpand) {
+
+        cloestValidDrawerStatus = JYPulleyStatusExpand;
+
+    } else if (fabs(currentClosestStop - [self drawerClosedHeight]) <= FLT_EPSILON &&
+               supportedStatus & JYPulleyStatusClosed) {
+
+        cloestValidDrawerStatus = JYPulleyStatusClosed;
+
+    } else if (supportedStatus & JYPulleyStatusPartiallyExpand){
+
+        cloestValidDrawerStatus = JYPulleyStatusPartiallyExpand;
+
+    }
+
+    return cloestValidDrawerStatus;
+
+}
+
+#pragma mark - set up UI
+
+- (void)setupUI {
+
+    self.view.backgroundColor = [UIColor whiteColor];
+    self.lastContentOffSet = CGPointZero;
+
+    [self.scrollView addSubview:self.drawerContainerView];
+    [self.view addSubview:self.contentContainerView];
+    [self.view addSubview:self.scrollView];
+
+    [self setupDimmingView];
+
+}
+
+- (void)setupDimmingView {
+    self.dimmingView.alpha = 0.0;
+    [self addTapGestureRecognizerToDimmingViewIfNeeded];
+    [self.view insertSubview:self.dimmingView aboveSubview:self.contentContainerView];
+}
+
+// 用户可能创建了自己的 dimmingView,则 tap 手势也要重新添加上去
+- (void)addTapGestureRecognizerToDimmingViewIfNeeded {
+
+    if (!self.dimmingView) {
+        return;
+    }
+
+    if (self.dimmingViewTapGestureRecognizer.view == self.dimmingView) {
+        return;
+    }
+
+    if (!self.dimmingViewTapGestureRecognizer) {
+        self.dimmingViewTapGestureRecognizer =
+            [[UITapGestureRecognizer alloc]
+                initWithTarget:self
+                        action:@selector(didRecognizedDimmingViewTapGestureRecognizer:)];
+    }
+
+    [self.dimmingView addGestureRecognizer:self.dimmingViewTapGestureRecognizer];
+    // UIImageView 默认 userInteractionEnabled 为NO,为了兼容 UIImageView,这里必须主动设置为 YES
+//    self.dimmingView.userInteractionEnabled = YES;
+}
+
+- (void)viewWillLayoutSubviews {
+    [super viewWillLayoutSubviews];
+
+    [self.contentContainerView addSubview:self.contentDataSource.view];
+    [self.contentContainerView sendSubviewToBack:self.contentDataSource.view];
+
+    [self.drawerContainerView addSubview:self.drawerDataSource.view];
+    [self.drawerContainerView sendSubviewToBack:self.drawerDataSource.view];
+
+    self.contentContainerView.frame = self.view.bounds;
+
+    CGFloat safeAreaTopInset;
+    CGFloat safeAreaBottomInset;
+
+    if (@available(iOS 11.0, *)) {
+        safeAreaTopInset = self.view.safeAreaInsets.top;
+        safeAreaBottomInset = self.view.safeAreaInsets.bottom;
+    } else {
+        safeAreaTopInset = self.topLayoutGuide.length;
+        safeAreaBottomInset = self.bottomLayoutGuide.length;
+    }
+
+    if (@available(iOS 11.0, *)) {
+        self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways;
+    } else {
+        self.automaticallyAdjustsScrollViewInsets = NO;
+        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, self.bottomLayoutGuide.length, 0);
+    }
+
+    CGFloat minimumHeight = [self drawerClosedHeight];
+
+    if (self.supportedStatus & JYPulleyStatusExpand) {
+
+        self.scrollView.frame =
+            CGRectMake(0,
+                       self.drawerExpandTopInset + safeAreaTopInset,
+                       self.view.bounds.size.width,
+                       self.view.bounds.size.height - self.drawerExpandTopInset - safeAreaTopInset);
+
+    } else {
+        CGFloat adjustedTopInset = self.supportedStatus & JYPulleyStatusPartiallyExpand
+                                       ? [self drawerPartiallyExpandHeight]
+                                       : [self drawerClosedHeight];
+
+        self.scrollView.frame = CGRectMake(0, self.view.bounds.size.height - adjustedTopInset,
+                                           self.view.bounds.size.width, adjustedTopInset);
+    }
+
+    self.drawerContainerView.frame =
+        CGRectMake(0, self.scrollView.bounds.size.height - minimumHeight,
+                   self.scrollView.bounds.size.width, self.scrollView.bounds.size.height);
+
+    self.scrollView.contentSize =
+        CGSizeMake(self.scrollView.bounds.size.width,
+                   (self.scrollView.bounds.size.height - minimumHeight) +
+                       self.scrollView.bounds.size.height - safeAreaBottomInset);
+
+    self.dimmingView.frame =
+        CGRectMake(0.0, 0.0, self.view.bounds.size.width,
+                   self.view.bounds.size.height + self.scrollView.contentSize.height);
+
+    [self updateStatus:self.currentStatus animated:NO];
+
+}
+
+#pragma mark - setter
+
+- (void)setCurrentStatus:(JYPulleyStatus)currentStatus {
+    _currentStatus = currentStatus;
+
+    // 通知外部状态变化
+    if ([self.drawerDelegate respondsToSelector:@selector(pulleyViewController:didChangeStatus:)]) {
+        [self.drawerDelegate pulleyViewController:self didChangeStatus:currentStatus];
+    }
+}
+
+- (void)setDimmingView:(UIView *)dimmingView {
+    if (![self isViewLoaded]) {
+        _dimmingView = dimmingView;
+    } else {
+        [self.view insertSubview:dimmingView belowSubview:_dimmingView];
+        [_dimmingView removeFromSuperview];
+        _dimmingView = dimmingView;
+        [self.view setNeedsLayout];
+    }
+    [self addTapGestureRecognizerToDimmingViewIfNeeded];
+}
+
+#pragma mark - getter
+
+- (UIView *)contentContainerView {
+    if (!_contentContainerView) {
+        _contentContainerView = [[UIView alloc] initWithFrame:self.view.bounds];
+        _contentContainerView.backgroundColor = [UIColor clearColor];
+    }
+    return _contentContainerView;
+}
+
+- (UIView *)drawerContainerView {
+    if (!_drawerContainerView) {
+        _drawerContainerView = [[UIView alloc] initWithFrame:self.view.bounds];
+        _drawerContainerView.backgroundColor = [UIColor clearColor];
+    }
+    return _drawerContainerView;
+}
+
+- (JYPulleyScrollView *)scrollView {
+    if (!_scrollView) {
+        _scrollView = [[JYPulleyScrollView alloc] initWithFrame:self.drawerContainerView.bounds];
+        _scrollView.backgroundColor = [UIColor clearColor];
+        _scrollView.delegate = self;
+        _scrollView.showsVerticalScrollIndicator = NO;
+        _scrollView.showsHorizontalScrollIndicator = NO;
+        _scrollView.bounces = NO;
+        _scrollView.canCancelContentTouches = YES;
+        _scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
+        _scrollView.touchDelegate = self;
+        [_scrollView addGestureRecognizer:self.scrollViewPanGestureRecognizer];
+    }
+    return _scrollView;
+}
+
+- (UIPanGestureRecognizer *)scrollViewPanGestureRecognizer {
+    if (!_scrollViewPanGestureRecognizer) {
+        _scrollViewPanGestureRecognizer =
+            [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizedScrollViewPanGestureRecognizer:)];
+        _scrollViewPanGestureRecognizer.delegate = self;
+    }
+    return _scrollViewPanGestureRecognizer;
+}
+
+- (CGFloat)drawerClosedHeight {
+    if ([self.drawerDataSource respondsToSelector:@selector(closedHeightInPulleyViewController:)]) {
+        return [self.drawerDataSource closedHeightInPulleyViewController:self];
+    }
+    return _drawerClosedHeight;
+}
+
+- (CGFloat)drawerPartiallyExpandHeight {
+    if ([self.drawerDataSource
+            respondsToSelector:@selector(partiallyExpandHeightInPulleyViewController:)]) {
+        return [self.drawerDataSource partiallyExpandHeightInPulleyViewController:self];
+    }
+    return _drawerPartiallyExpandHeight;
+}
+
+- (CGFloat)drawerExpandHeight {
+    if ([self.drawerDataSource respondsToSelector:@selector(expandHeightInPulleyViewController:)]) {
+        return [self.drawerDataSource expandHeightInPulleyViewController:self];
+    }
+    return _drawerExpandHeight;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.h
new file mode 100755
index 0000000..82e7754
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.h
@@ -0,0 +1,40 @@
+//
+//  MSSAutoresizeLabelFlow.h
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^selectedHandler)(NSUInteger index,NSString *title);
+
+@interface MSSAutoresizeLabelFlow : UIView
+
+- (instancetype)initWithFrame:(CGRect)frame
+                       titles:(NSArray *)titles
+              selectedHandler:(selectedHandler)handler;
+
+- (void)insertLabelWithTitle:(NSString *)title
+                     atIndex:(NSUInteger)index
+                    animated:(BOOL)animated;
+
+- (void)insertLabelsWithTitles:(NSArray *)titles
+                     atIndexes:(NSIndexSet *)indexes
+                      animated:(BOOL)animated;
+
+- (void)deleteLabelAtIndex:(NSUInteger)index
+                  animated:(BOOL)animated;
+
+- (void)deleteLabelsAtIndexes:(NSIndexSet *)indexes
+                     animated:(BOOL)animated;
+
+- (void)reloadAllWithTitles:(NSArray *)titles;
+
+
+@end
+
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.m
new file mode 100755
index 0000000..95f6d83
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlow.m
@@ -0,0 +1,158 @@
+//
+//  MSSAutoresizeLabelFlow.m
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import "MSSAutoresizeLabelFlow.h"
+#import "MSSAutoresizeLabelFlowLayout.h"
+#import "MSSAutoresizeLabelFlowCell.h"
+#import "MSSAutoresizeLabelFlowConfig.h"
+
+static NSString *const cellId = @"cellId";
+
+@interface MSSAutoresizeLabelFlow () <UICollectionViewDataSource,UICollectionViewDelegate,MSSAutoresizeLabelFlowLayoutDataSource,MSSAutoresizeLabelFlowLayoutDelegate>
+@property (nonatomic,strong) UICollectionView *collection;
+@property (nonatomic,strong) NSMutableArray   *data;
+@property (nonatomic,copy) selectedHandler  handler;
+
+@end
+
+@implementation MSSAutoresizeLabelFlow
+
+- (instancetype)initWithFrame:(CGRect)frame titles:(NSArray *)titles selectedHandler:(selectedHandler)handler {
+    self = [super initWithFrame:frame];
+    if (!titles.count) {
+        return self;
+    }
+    if (self) {
+        self.backgroundColor = [UIColor clearColor];
+        self.data = [titles mutableCopy];
+        self.handler = handler;
+        [self setup];
+    }
+    return self;
+}
+
+- (void)setup {
+    MSSAutoresizeLabelFlowLayout *layout = [[MSSAutoresizeLabelFlowLayout alloc]init];
+    layout.delegate = self;
+    layout.dataSource = self;
+    self.collection = [[UICollectionView alloc]initWithFrame:self.bounds collectionViewLayout:layout];
+    self.collection.backgroundColor = [MSSAutoresizeLabelFlowConfig shareConfig].backgroundColor;
+    self.collection.allowsMultipleSelection = YES;
+    self.collection.delegate = self;
+    self.collection.dataSource = self;
+    [self.collection registerClass:[MSSAutoresizeLabelFlowCell class] forCellWithReuseIdentifier:cellId];
+    [self addSubview:self.collection];
+//    [self.collection reloadData];
+//    [self.collection layoutIfNeeded];
+//    self.collection.backgroundColor = [UIColor orangeColor];
+//    CGFloat height = self.collection.contentSize.height;
+//    NSLog(@"===========%f",height);
+//    self.collection.frame = CGRectMake(0, 0, self.bounds.size.width, height);
+}
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return 1;
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.data.count;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    MSSAutoresizeLabelFlowCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];
+    [cell configCellWithTitle:self.data[indexPath.item]];
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.handler) {
+        NSUInteger index = indexPath.item;
+        NSString *title = self.data[index];
+        self.handler(index,title);
+    }
+}
+
+- (NSString *)titleForLabelAtIndexPath:(NSIndexPath *)indexPath {
+    return self.data[indexPath.item];
+}
+
+- (void)layoutFinishWithNumberOfline:(NSInteger)number {
+//    static NSInteger numberCount;
+//    if (numberCount == number) {
+//        return;
+//    }
+//    numberCount = number;
+//    MSSAutoresizeLabelFlowConfig *config = [MSSAutoresizeLabelFlowConfig shareConfig];
+//    CGFloat h = config.contentInsets.top+config.contentInsets.bottom+config.itemHeight*number+config.lineSpace*(number-1);
+//    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, h);
+//    [UIView animateWithDuration:0.2 animations:^{
+//        self.collection.frame = self.bounds;
+//    }];
+}
+
+- (void)insertLabelWithTitle:(NSString *)title atIndex:(NSUInteger)index animated:(BOOL)animated {
+    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:index inSection:0];
+    [self.data insertObject:title atIndex:index];
+    [self performBatchUpdatesWithAction:UICollectionUpdateActionInsert indexPaths:@[indexPath] animated:animated];
+}
+
+- (void)insertLabelsWithTitles:(NSArray *)titles atIndexes:(NSIndexSet *)indexes animated:(BOOL)animated {
+    NSArray *indexPaths = [self indexPathsWithIndexes:indexes];
+    [self.data insertObjects:titles atIndexes:indexes];
+    [self performBatchUpdatesWithAction:UICollectionUpdateActionInsert indexPaths:indexPaths animated:animated];
+}
+
+- (void)deleteLabelAtIndex:(NSUInteger)index animated:(BOOL)animated {
+    [self deleteLabelsAtIndexes:[NSIndexSet indexSetWithIndex:index] animated:animated];
+}
+
+- (void)deleteLabelsAtIndexes:(NSIndexSet *)indexes animated:(BOOL)animated {
+    NSArray *indexPaths = [self indexPathsWithIndexes:indexes];
+    [self.data removeObjectsAtIndexes:indexes];
+    [self performBatchUpdatesWithAction:UICollectionUpdateActionDelete indexPaths:indexPaths animated:animated];
+}
+
+- (void)reloadAllWithTitles:(NSArray *)titles {
+    self.data = [titles mutableCopy];
+    [self.collection reloadData];
+}
+
+- (void)performBatchUpdatesWithAction:(UICollectionUpdateAction)action indexPaths:(NSArray *)indexPaths animated:(BOOL)animated {
+    if (!animated) {
+        [UIView setAnimationsEnabled:NO];
+    }
+    [self.collection performBatchUpdates:^{
+        switch (action) {
+            case UICollectionUpdateActionInsert:
+                [self.collection insertItemsAtIndexPaths:indexPaths];
+                break;
+            case UICollectionUpdateActionDelete:
+                [self.collection deleteItemsAtIndexPaths:indexPaths];
+            default:
+                break;
+        }
+    } completion:^(BOOL finished) {
+        if (!animated) {
+            [UIView setAnimationsEnabled:YES];
+        }
+    }];
+}
+
+- (NSArray *)indexPathsWithIndexes:(NSIndexSet *)set {
+    NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:set.count];
+    [set enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
+        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx inSection:0];
+        [indexPaths addObject:indexPath];
+    }];
+    return [indexPaths copy];
+}
+
+
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.h
new file mode 100755
index 0000000..7393d48
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.h
@@ -0,0 +1,18 @@
+//
+//  MSSAutoresizeLabelFlowCell.h
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface MSSAutoresizeLabelFlowCell : UICollectionViewCell
+
+- (void)configCellWithTitle:(NSString *)title;
+
+@end
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.m
new file mode 100755
index 0000000..054986f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowCell.m
@@ -0,0 +1,48 @@
+//
+//  MSSAutoresizeLabelFlowCell.m
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import "MSSAutoresizeLabelFlowCell.h"
+#import "MSSAutoresizeLabelFlowConfig.h"
+#define JKColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]
+@interface MSSAutoresizeLabelFlowCell ()
+
+@property (nonatomic,strong) UILabel *titleLabel;
+
+@end
+
+@implementation MSSAutoresizeLabelFlowCell
+
+- (UILabel *)titleLabel {
+    if (_titleLabel == nil) {
+        _titleLabel = [[UILabel alloc]init];
+        _titleLabel.backgroundColor = [MSSAutoresizeLabelFlowConfig shareConfig].itemColor;
+        _titleLabel.textColor = [MSSAutoresizeLabelFlowConfig shareConfig].textColor;
+        _titleLabel.font = [MSSAutoresizeLabelFlowConfig shareConfig].textFont;
+        _titleLabel.layer.cornerRadius = [MSSAutoresizeLabelFlowConfig shareConfig].itemCornerRaius;
+        _titleLabel.layer.masksToBounds = YES;
+        _titleLabel.textAlignment = NSTextAlignmentCenter;
+//        _titleLabel.layer.borderColor = JKColor(220, 220, 220, 1.0).CGColor;
+//        _titleLabel.layer.borderWidth = 0.5;
+    }
+    return _titleLabel;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self.contentView addSubview:self.titleLabel];
+    }
+    return self;
+}
+
+- (void)configCellWithTitle:(NSString *)title {
+    self.titleLabel.frame = self.bounds;
+    self.titleLabel.text = title;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.h
new file mode 100755
index 0000000..a337799
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.h
@@ -0,0 +1,27 @@
+//
+//  MSSAutoresizeLabelFlowConfig.h
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@interface MSSAutoresizeLabelFlowConfig : NSObject
+
++ (MSSAutoresizeLabelFlowConfig *)  shareConfig;
+
+@property (nonatomic) UIEdgeInsets  contentInsets;
+@property (nonatomic) CGFloat       textMargin;
+@property (nonatomic) CGFloat       lineSpace;
+@property (nonatomic) CGFloat       itemHeight;
+@property (nonatomic) CGFloat       itemSpace;
+@property (nonatomic) CGFloat       itemCornerRaius;
+@property (nonatomic) UIColor       *itemColor;
+@property (nonatomic) UIColor       *textColor;
+@property (nonatomic) UIFont        *textFont;
+@property (nonatomic) UIColor       *backgroundColor;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.m
new file mode 100755
index 0000000..9cbac57
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowConfig.m
@@ -0,0 +1,44 @@
+//
+//  MSSAutoresizeLabelFlowConfig.m
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import "MSSAutoresizeLabelFlowConfig.h"
+#define JKColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]
+@implementation MSSAutoresizeLabelFlowConfig
+
++ (MSSAutoresizeLabelFlowConfig *)shareConfig {
+    static MSSAutoresizeLabelFlowConfig *config;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        config = [[self alloc]init];
+    });
+    return config;
+}
+
+// default
+
+- (instancetype)init {
+    self = [super init];
+    if (self) {
+        self.contentInsets = UIEdgeInsetsMake(0, 15, 0, 15);
+        self.lineSpace = 12;
+        self.itemHeight = 32;
+        self.itemSpace = 12;
+        self.itemCornerRaius = 3;
+//        self.itemColor = [UIColor whiteColor];
+        self.itemColor = JKColor(244, 245, 246, 1);
+        self.textMargin = 20;
+//        self.textColor = [UIColor darkTextColor];
+        self.textColor = JKColor(97, 111, 125, 1);
+        self.textFont = [UIFont fontWithName:@"PingFangSC-Medium" size:12];
+//        self.backgroundColor = [UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1];
+        self.backgroundColor = [UIColor whiteColor];
+    }
+    return self;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.h
new file mode 100755
index 0000000..217915c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.h
@@ -0,0 +1,30 @@
+//
+//  MSSAutoresizeLabelFlowLayout.h
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@protocol MSSAutoresizeLabelFlowLayoutDelegate <NSObject>
+
+@optional
+
+- (void)layoutFinishWithNumberOfline:(NSInteger)number;
+
+@end
+
+@protocol MSSAutoresizeLabelFlowLayoutDataSource <NSObject>
+
+- (NSString *)titleForLabelAtIndexPath:(NSIndexPath *)indexPath;
+
+@end
+
+@interface MSSAutoresizeLabelFlowLayout : UICollectionViewFlowLayout
+
+@property (nonatomic,weak) id <MSSAutoresizeLabelFlowLayoutDataSource> dataSource;
+@property (nonatomic,weak) id <MSSAutoresizeLabelFlowLayoutDelegate> delegate;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.m
new file mode 100755
index 0000000..2132de4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/AutoFitLabel/MSSAutoresizeLabelFlowLayout.m
@@ -0,0 +1,78 @@
+//
+//  MSSAutoresizeLabelFlowLayout.m
+//  MSSAutoresizeLabelFlow
+//
+//  Created by Mrss on 15/12/26.
+//  Copyright © 2015年 expai. All rights reserved.
+//
+
+#import "MSSAutoresizeLabelFlowLayout.h"
+#import "MSSAutoresizeLabelFlowConfig.h"
+
+typedef struct currentOrigin {
+    CGFloat     lineX;
+    NSInteger   lineNumber;
+}currentOrigin;
+
+@implementation MSSAutoresizeLabelFlowLayout {
+    UIEdgeInsets    contentInsets;
+    CGFloat         itemHeight;
+    CGFloat         itemSpace;
+    CGFloat         lineSpace;
+    CGFloat         itemMargin;
+    UIFont          *titleFont;
+    NSInteger       itemCount;
+    currentOrigin   orgin;
+}
+
+- (void)prepareLayout {
+    [super prepareLayout];
+    MSSAutoresizeLabelFlowConfig *config = [MSSAutoresizeLabelFlowConfig shareConfig];
+    contentInsets = config.contentInsets;
+    titleFont = config.textFont;
+    lineSpace = config.lineSpace;
+    itemHeight = config.itemHeight;
+    itemSpace = config.itemSpace;
+    itemCount = [self.collectionView numberOfItemsInSection:0];
+    itemMargin = config.textMargin;
+    orgin.lineNumber = 0;
+    orgin.lineX = contentInsets.left;
+}
+
+- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
+    NSArray *attributesArray = [super layoutAttributesForElementsInRect:rect];
+    for (NSInteger i = 0; i<attributesArray.count; i++) {
+        UICollectionViewLayoutAttributes *att = attributesArray[i];
+        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];
+        NSString *title = [self.dataSource titleForLabelAtIndexPath:indexPath];
+        CGSize size = [self sizeWithTitle:title font:titleFont];
+        CGFloat itemOrginX = orgin.lineX;
+        CGFloat itemOrginY = orgin.lineNumber*(itemHeight+lineSpace) + contentInsets.top;
+        CGFloat itemWidth = size.width+itemMargin;
+        if (itemWidth > CGRectGetWidth(self.collectionView.frame)-(contentInsets.left+contentInsets.right)) {
+            itemWidth = CGRectGetWidth(self.collectionView.frame)-(contentInsets.left+contentInsets.right);
+        }
+        att.frame = CGRectMake(itemOrginX, itemOrginY, itemWidth, itemHeight);
+        orgin.lineX += itemWidth+itemSpace;
+        if (i < attributesArray.count-1) {
+            NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:i+1 inSection:0];
+            NSString *nextTitle = [self.dataSource titleForLabelAtIndexPath:nextIndexPath];
+            CGSize nextSize = [self sizeWithTitle:nextTitle font:titleFont];
+            if (nextSize.width+itemMargin > CGRectGetWidth(self.collectionView.frame)-contentInsets.right-orgin.lineX) {
+                orgin.lineNumber ++;
+                orgin.lineX = contentInsets.left;
+            }
+        }
+        else {
+            [self.delegate layoutFinishWithNumberOfline:orgin.lineNumber+1];
+        }
+    }
+    return attributesArray;
+}
+
+- (CGSize)sizeWithTitle:(NSString *)title font:(UIFont *)font {
+    CGRect rect = [title boundingRectWithSize:CGSizeMake(1000, itemHeight) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];
+    return rect.size;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.h
new file mode 100755
index 0000000..6b7d720
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.h
@@ -0,0 +1,41 @@
+//
+//  MenuView.h
+//  MenuDemo
+//
+//  Created by Lying on 16/6/9.
+//  Copyright © 2016年 Lying. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+
+@interface MenuView : UIView
+
+ 
++(instancetype)MenuViewWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover;
+
+/**
+ *  初始化方法
+ *
+ *  @param dependencyView 传入需要滑出菜单的控制器的view
+ *  @param leftmenuView   传入需要显示的菜单的view
+ *  @param isCover        bool值,是否有右边遮挡的阴影
+ *
+ *  @return self
+ */
+-(instancetype)initWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover;
+    
+/**
+ *  展开菜单,可放进点击事件内
+ */
+-(void)show;
+/**
+ *  关闭菜单不带动画效果
+ */
+-(void)hidenWithoutAnimation;
+/**
+ *  关闭菜单带动画效果
+ */
+-(void)hidenWithAnimation;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.m
new file mode 100755
index 0000000..a1f9087
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/Menu/MenuView.m
@@ -0,0 +1,350 @@
+//
+//  MenuView.m
+//  MenuDemo
+//
+//  Created by Lying on 16/6/9.
+//  Copyright © 2016年 Lying. All rights reserved.
+//
+
+
+// 获得屏幕尺寸
+#define kSCREEN_WIDTH   [[UIScreen mainScreen] bounds].size.width
+#define kSCREEN_HEIGHT  [[UIScreen mainScreen] bounds].size.height
+
+//#define MenuView_scale_of_Screen        0.8
+#define CoverViewAlpha 0.4
+
+#define CoverViewBackGround [UIColor colorWithRed:52/255.0 green:52/255.0 blue:52/255.0 alpha:1.0]
+
+#import "MenuView.h"
+
+@interface MenuView ()
+
+@property (nonatomic ,assign)CGRect         menuViewframe;
+@property (nonatomic ,assign)CGRect         coverViewframe;
+@property (nonatomic ,strong)UIView         *coverView;
+@property (nonatomic ,strong)UIView         *leftMenuView; 
+@property (nonatomic ,assign)BOOL           isShowCoverView;
+
+@end
+
+
+@implementation MenuView
+
+
+
++(instancetype)MenuViewWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover{
+    
+    MenuView *menu = [[MenuView alloc]initWithDependencyView:dependencyView MenuView:leftmenuView isShowCoverView:isCover];
+    
+    return menu;
+}
+
+
+-(instancetype)initWithDependencyView:(UIView *)dependencyView MenuView:(UIView *)leftmenuView isShowCoverView:(BOOL)isCover{
+    if(self = [super init]){
+        self.isShowCoverView = isCover;
+
+        [self addPanGestureAtDependencyView:dependencyView];
+        self.leftMenuView = leftmenuView;
+//      if((CGRectEqualToRect(_coverViewframe, CGRectZero)) == NO){
+        self.menuViewframe = leftmenuView.frame;
+//      }else{
+//      }
+        self.coverViewframe = CGRectMake(self.menuViewframe.size.width, self.menuViewframe.origin.y, kSCREEN_WIDTH - self.menuViewframe.size.width, self.menuViewframe.size.height);
+    }
+    return self;
+}
+
+-(void)setIsShowCoverView:(BOOL)isShowCoverView
+{
+    _isShowCoverView = isShowCoverView;
+
+    if(self.isShowCoverView){
+        self.coverView.backgroundColor = CoverViewBackGround;
+    }else{
+        self.coverView.backgroundColor = [UIColor clearColor];
+    }
+
+}
+
+-(void)addPanGestureAtDependencyView:(UIView *)dependencyView{
+    
+    // 屏幕边缘pan手势(优先级高于其他手势)
+    UIScreenEdgePanGestureRecognizer *leftEdgeGesture = \
+    [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self
+                                                      action:@selector(handleLeftEdgeGesture:)];
+    leftEdgeGesture.edges                             = UIRectEdgeLeft;// 屏幕左侧边缘响应
+    [dependencyView addGestureRecognizer:leftEdgeGesture]; //
+}
+
+
+//-(void)initView{
+
+//    if(self.isShowCoverView){
+//        self.coverView.backgroundColor = CoverViewBackGround;
+//    }else{
+//        self.coverView.backgroundColor = [UIColor clearColor];
+//    }
+//    
+//    [self setBackgroundColor:[UIColor clearColor]];
+//    [self.leftMenuView setBackgroundColor:MenuViewBackgroundColor];
+//}
+
+
+-(void)show{
+    UIWindow * window = [[UIApplication sharedApplication].delegate window];
+    [window addSubview:self.coverView];
+    [window addSubview:self.leftMenuView];
+    self.leftMenuView.frame = CGRectMake(-self.menuViewframe.size.width, self.menuViewframe.origin.y, self.menuViewframe.size.width, self.menuViewframe.size.height);
+    self.coverView.frame = CGRectMake(0, 0, kSCREEN_WIDTH, self.menuViewframe.size.height);
+    [UIView animateWithDuration:0.3 animations:^{
+        self.leftMenuView.frame = self.menuViewframe;
+        self.coverView.frame    = self.coverViewframe;
+        self.coverView.alpha = CoverViewAlpha;
+    }];
+}
+-(void)hidenWithoutAnimation{
+    
+    [self removeCoverAndMenuView];
+}
+-(void)hidenWithAnimation{
+    
+    [self coverTap];
+}
+
+
+#pragma mark - 屏幕左侧菜单
+-(UIView *)leftMenuView{
+    
+    if(_leftMenuView == nil){
+        
+        UIView *LeftView = [[UIView alloc]initWithFrame:self.menuViewframe];
+        _leftMenuView    = LeftView;
+        
+    }
+    return _leftMenuView;
+}
+
+
+#pragma mark - 遮盖
+-(UIView *)coverView {
+    
+    if (_coverView == nil) {
+        
+        UIView *Cover = [[UIView alloc]initWithFrame:self.coverViewframe];
+        Cover.backgroundColor                     = CoverViewBackGround;
+        Cover.alpha                               = 0;
+        UITapGestureRecognizer *Click             = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(coverTap)];
+        [Cover addGestureRecognizer:Click];
+        
+        UIGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc]
+                                                     initWithTarget:self
+                                                     action:@selector(handleftPan:)];
+        
+        [Cover addGestureRecognizer:panGestureRecognizer];
+        [Click requireGestureRecognizerToFail:panGestureRecognizer];
+        
+        _coverView = Cover;
+    }
+    return _coverView;
+}
+
+#pragma mark - 屏幕往右滑处理
+- (void)handleLeftEdgeGesture:(UIScreenEdgePanGestureRecognizer *)gesture{
+    UIWindow * window = [[UIApplication sharedApplication].delegate window];
+    [window addSubview:self.coverView];
+    [window addSubview:self.leftMenuView];
+    // 根据被触摸手势的view计算得出坐标值
+    CGPoint translation = [gesture translationInView:gesture.view];
+    if(UIGestureRecognizerStateBegan == gesture.state ||
+       UIGestureRecognizerStateChanged == gesture.state){
+        
+        if(translation.x <= self.menuViewframe.size.width){// && self.leftMenuView.frame.origin.x != 0
+            
+            if(translation.x <= 10){
+                self.coverView.frame = CGRectMake(0, self.menuViewframe.origin.y, kSCREEN_WIDTH, self.menuViewframe.size.height);
+            }
+            
+            CGFloat x           = translation.x  - self.menuViewframe.size.width;
+            CGFloat y           = self.menuViewframe.origin.y;
+            CGFloat w           = self.menuViewframe.size.width;
+            CGFloat h           = self.menuViewframe.size.height;
+            self.leftMenuView.frame = CGRectMake(x, y, w, h);
+            
+            self.coverView.frame    = CGRectMake(self.leftMenuView.frame.size.width+x, 0,kSCREEN_WIDTH-self.leftMenuView.frame.size.width-x, h);
+            self.coverView.alpha    = CoverViewAlpha*(translation.x / w);
+        }else{
+            
+            self.leftMenuView.frame = self.menuViewframe;
+            self.coverView.frame = self.coverViewframe;
+        }
+    }
+    else{
+        //结束
+        if(translation.x > self.menuViewframe.size.width/2){
+            // 展开设置
+            [self openMenuView];
+        }else{
+            // 恢复设置
+            [self closeMenuView];
+        }
+    }
+}
+
+
+#pragma mark - coverView往左滑隐藏
+-(void)handleftPan:(UIPanGestureRecognizer*)recognizer{
+    
+    CGPoint translation = [recognizer translationInView:recognizer.view];
+    static CGFloat BeganX;
+    
+    if(UIGestureRecognizerStateBegan == recognizer.state){
+        BeganX = translation.x;
+    }
+    
+    CGFloat Place = (-translation.x) - (-BeganX);
+    
+    if(UIGestureRecognizerStateBegan == recognizer.state ||
+       UIGestureRecognizerStateChanged == recognizer.state){
+
+        CGFloat x           = 0 ;
+        CGFloat y           = self.menuViewframe.origin.y;
+        CGFloat w           = self.menuViewframe.size.width;
+        CGFloat h           = self.menuViewframe.size.height;
+
+        if(Place <= self.leftMenuView.frame.size.width &&  Place >0){
+            
+            x  = 0 - Place;
+
+//            self.leftMenuView.frame = CGRectMake(x, y, w, h);
+
+            self.coverView.frame    = CGRectMake(self.leftMenuView.frame.size.width-Place, 0,kSCREEN_WIDTH-self.leftMenuView.frame.size.width+Place, h);
+            self.coverView.alpha    = CoverViewAlpha*((w - Place) / w);
+
+        }else if(Place >0){
+            
+             x  = - self.menuViewframe.size.width;
+//            CGFloat y           = self.menuViewframe.origin.y;
+//            CGFloat w           = self.menuViewframe.size.width;
+//            CGFloat h           = self.menuViewframe.size.height;
+//            self.leftMenuView.frame = CGRectMake(x, y, w, h);//self.LeftViewFrame;
+            self.coverView.frame    = CGRectMake(0, 0,kSCREEN_WIDTH,h);
+            
+        }else{
+            
+            x = 0;
+//            CGFloat y           = self.menuViewframe.origin.y;
+//            CGFloat w           = self.menuViewframe.size.width;
+//            CGFloat h           = self.menuViewframe.size.height;
+
+            self.coverView.frame    = CGRectMake(self.leftMenuView.frame.size.width, 0,kSCREEN_WIDTH-self.leftMenuView.frame.size.width, h);
+            self.coverView.alpha    = CoverViewAlpha;
+        }
+
+         self.leftMenuView.frame = CGRectMake(x, y, w, h);
+
+        
+    }else{
+        //结束
+        if(Place > self.menuViewframe.size.width/2){
+            // 收起设置
+            [self closeMenuView];
+            
+        }else{
+            // 展开设置
+            [self openMenuView];
+        }
+    }
+    
+}
+
+
+-(void)openMenuView{
+    
+    [UIView animateWithDuration:0.3 animations:^{
+        CGFloat x           = 0;
+        CGFloat y           = self.menuViewframe.origin.y;
+        CGFloat w           = self.menuViewframe.size.width;
+        CGFloat h           = self.menuViewframe.size.height;
+        self.leftMenuView.frame = CGRectMake(x, y, w, h);
+        
+        self.coverView.frame    = self.coverViewframe;
+        self.coverView.alpha    = CoverViewAlpha;
+    }];
+}
+
+-(void)closeMenuView{
+    [UIView animateWithDuration:0.3 animations:^{
+        
+        CGFloat x           = -self.menuViewframe.size.width;
+        CGFloat y           = self.menuViewframe.origin.y;
+        CGFloat w           = self.menuViewframe.size.width;
+        CGFloat h           = self.menuViewframe.size.height;
+        self.leftMenuView.frame = CGRectMake(x, y, w, h);//self.LeftViewFrame;
+        self.coverView.frame    = CGRectMake(0, 0,kSCREEN_WIDTH, self.menuViewframe.size.height);
+    } completion:^(BOOL finished) {
+        [self removeCoverAndMenuView];
+    }];
+}
+#pragma mark - 点击遮盖移除
+-(void)coverTap{
+
+    [UIView animateKeyframesWithDuration:0.3 delay:0 options:UIViewKeyframeAnimationOptionLayoutSubviews animations:^{
+        self.leftMenuView.frame = CGRectMake(-self.menuViewframe.size.width, 0, self.menuViewframe.size.width, self.menuViewframe.size.height);
+        self.coverView.frame    = CGRectMake(0, 0,kSCREEN_WIDTH, kSCREEN_HEIGHT);
+        self.coverView.alpha    = 0.0;
+    } completion:^(BOOL finished) {
+        [self.coverView removeFromSuperview];
+        [self.leftMenuView removeFromSuperview];
+    }];
+    
+}
+
+
+
+
+
+#pragma mark - 移除菜单和遮盖
+-(void)removeCoverAndMenuView{
+    
+    self.leftMenuView.frame = CGRectMake(-self.leftMenuView.frame.size.width, 0, self.leftMenuView.frame.size.width, kSCREEN_HEIGHT);
+    self.coverView.frame    = CGRectMake(0, 0,kSCREEN_WIDTH, kSCREEN_HEIGHT);
+    self.coverView.alpha    = 0.0;
+    
+    [self.coverView removeFromSuperview];
+    [self.leftMenuView removeFromSuperview];
+}
+
+
+// 
+//-(CGRect)menuViewframe{
+//    
+//    if((CGRectEqualToRect(_menuViewframe,CGRectZero)) == YES){
+//        
+//        //设置左侧菜单
+//        CGFloat w                   = kSCREEN_WIDTH * MenuView_scale_of_Screen;
+//        CGFloat h                   = kSCREEN_HEIGHT;
+//        CGFloat x                   = 0;
+//        CGFloat y                   = 0;
+//        _menuViewframe = CGRectMake(x , y , w , h);
+//    }
+//    return _menuViewframe;
+//}
+//
+//
+//
+//-(CGRect)coverViewframe{
+//
+//     if((CGRectEqualToRect(_coverViewframe, CGRectZero)) == YES){
+//         
+//        _coverViewframe = CGRectMake(self.menuViewframe.size.width, self.menuViewframe.origin.y, kSCREEN_WIDTH - self.menuViewframe.size.width, self.menuViewframe.size.height);
+//    }
+//    return _coverViewframe;
+//}
+
+
+
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.h
new file mode 100644
index 0000000..7aa2e74
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.h
@@ -0,0 +1,16 @@
+//
+//  PBMineView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@protocol HomeMenuViewDelegate <NSObject>
+- (void)LeftMenuViewClick:(NSInteger)tag;
+@end
+@interface PBMineView : UIView
+@property (nonatomic ,weak) id <HomeMenuViewDelegate> customDelegate;
+@property (nonatomic, copy) NSString *realName;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.m
new file mode 100644
index 0000000..c75698e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBMineView.m
@@ -0,0 +1,161 @@
+//
+//  PBMineView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBMineView.h"
+#import <JPUSHService.h>
+static NSString *const CellID = @"CellID";
+@interface PBMineView()<UITableViewDataSource, UITableViewDelegate>
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *dataList;
+@property (nonatomic, weak) UILabel *nameL;
+@end
+@implementation PBMineView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    UIImageView *bgImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Mine_img_bg"]];
+    [self addSubview:bgImageV];
+    int bgImageVH;
+    if (IS_IPHONE_X) {
+        bgImageVH = 193 + 44;
+    }else {
+        bgImageVH = 193;
+    }
+    [bgImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.left.right.equalTo(self);
+        make.height.equalTo(@(bgImageVH));
+    }];
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Mine_user_icon"]];
+    int top;
+    if (IS_IPHONE_X) {
+        top = 50 + 44;
+    }else {
+        top = 50;
+    }
+    [self addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(top);
+        make.size.mas_equalTo(CGSizeMake(80, 80));
+        make.centerX.equalTo(self);
+    }];
+    UILabel *nameL = [UILabel z_labelWithText:@"" Color:[UIColor z_colorWithR:65 G:127 B:205] isBold:NO Font:20];
+    self.nameL = nameL;
+    [self addSubview:nameL];
+    [nameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(imageV.mas_bottom).offset(20);
+        make.centerX.equalTo(imageV);
+    }];
+    UIView *lineView = [[UIView alloc] init];
+    lineView.backgroundColor = [UIColor z_colorWithR:215 G:215 B:215];
+    [self addSubview:lineView];
+    [lineView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(bgImageV.mas_bottom);
+        make.left.right.equalTo(self);
+        make.height.equalTo(@1);
+    }];
+    self.tableView = [[UITableView alloc] init];
+    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
+    self.tableView.delegate = self;
+    self.tableView.dataSource = self;
+    self.tableView.rowHeight = 50;
+    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+    [self addSubview:self.tableView];
+    CGFloat height;
+    if (IS_IPHONE_X) {
+        height = 50.f + 34.f;
+    }else {
+        height = 50.0f;
+    }
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(lineView.mas_bottom).offset(20);
+        make.left.right.equalTo(self);
+        make.bottom.equalTo(self).offset(-height);
+    }];
+    UIButton *LogOutBtn = [UIButton z_textButton:@"退出登录" fontSize:20.0 normalColor:SensitiveColor];
+    [LogOutBtn addTarget:self action:@selector(LogOutAction:) forControlEvents:UIControlEventTouchUpInside];
+    LogOutBtn.backgroundColor = [UIColor z_colorWithR:242 G:242 B:242];
+    [self addSubview:LogOutBtn];
+    [LogOutBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.equalTo(self);
+        make.height.equalTo(@50);
+        make.top.equalTo(self.tableView.mas_bottom);
+    }];
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataList.count;
+}
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSDictionary *dict = self.dataList[indexPath.row];
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellID forIndexPath:indexPath];
+    cell.imageView.image = [UIImage imageNamed:[dict valueForKey:@"imageName"]];
+    cell.textLabel.text = [dict valueForKey:@"title"];
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if ([self.customDelegate respondsToSelector:@selector(LeftMenuViewClick:)]) {
+        [self.customDelegate LeftMenuViewClick:indexPath.row];
+    }
+}
+
+- (NSMutableArray *)dataList {
+    if (_dataList == nil) {
+        _dataList = [[NSMutableArray alloc] init];
+        NSDictionary *dict = @{
+                               @"imageName":@"Mine_change_password",
+                               @"title":@"修改密码"
+                               };
+        NSDictionary *dict1 = @{
+                                @"imageName":@"Mine_clear_cache",
+                                @"title":@"清除缓存"
+                                };
+        [_dataList addObject:dict];
+        [_dataList addObject:dict1];
+    }
+    return _dataList;
+}
+
+//退出登录
+- (void)LogOutAction:(UIButton *)button {
+    [YJProgressHUD showProgress:@"正在退出" inView:self];
+    NSFileManager *manager=[NSFileManager defaultManager];
+    NSString *filepath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"login.plist"];//这里就是你将要删除的沙盒路径(.plist文件,名字
+    [manager removeItemAtPath:filepath error:nil];
+    [JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {
+        NSLog(@"%zd--%@--%zd",iResCode,iAlias,seq);
+    } seq:10];
+    [[PBNetworkTools sharedTools] RemoveTokenAndCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"退出登录失败" inView:self];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            if ([self.customDelegate respondsToSelector:@selector(LeftMenuViewClick:)]) {
+                [self.customDelegate LeftMenuViewClick:10];
+            }
+        }else {
+            [YJProgressHUD showMessage:@"退出登录失败" inView:self];
+        }
+    }];
+}
+
+- (void)setRealName:(NSString *)realName {
+    _realName = realName;
+    self.nameL.text = realName;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.h
new file mode 100644
index 0000000..003eac9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.h
@@ -0,0 +1,17 @@
+//
+//  PBPointAnnotation.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/13.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <MAMapKit/MAMapKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBPointAnnotation : MAPointAnnotation
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.m
new file mode 100644
index 0000000..e2c0acc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBPointAnnotation.m
@@ -0,0 +1,15 @@
+//
+//  PBPointAnnotation.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/13.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBPointAnnotation.h"
+
+@implementation PBPointAnnotation
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.h
new file mode 100644
index 0000000..ef5d350
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.h
@@ -0,0 +1,20 @@
+//
+//  PBProjectInfoView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/25.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBProjectInfoView : UIView
+@property (nonatomic, nonnull) PBProjectModel *projectModel;
+@property (nonatomic, copy) void (^packupBlock)(void);
+@property (nonatomic, copy) void (^IntoProjectBlock)(PBProjectModel *projectModel);
+@property (nonatomic, copy) void (^SetCollectionState)(PBProjectModel *projectModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.m
new file mode 100644
index 0000000..3ec4758
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectInfoView.m
@@ -0,0 +1,282 @@
+//
+//  PBProjectInfoView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/5/25.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBProjectInfoView.h"
+#import "PBProjectModel.h"
+@interface PBProjectInfoView()
+@property (nonatomic, weak) UILabel *projectNameL;
+@property (nonatomic, weak) UIImageView *privacyImageV;
+@property (nonatomic, weak) UIImageView *dataIamgeV;
+@property (nonatomic, weak) UILabel *dataL;
+@property (nonatomic, weak) UIView *linV;
+@property (nonatomic, weak) UILabel *companyL;
+@property (nonatomic, weak) UILabel *managerL;
+@property (nonatomic, weak) UIButton * collectionBtn;
+@property (nonatomic, weak) UILabel *collectionL;
+@property (nonatomic, weak) UIButton *intoProjectBtn;
+@end
+@implementation PBProjectInfoView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    UIButton *barBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"bar"]];
+    [barBtn addTarget:self action:@selector(barSelectAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:barBtn];
+    [barBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(2);
+        make.centerX.equalTo(self);
+        make.size.mas_equalTo(CGSizeMake(28, 20));
+    }];
+    
+    UILabel *projectNameL = [UILabel z_labelWithText:@"塔里木油田试用项目" Color:PBColor(40, 58, 79) isBold:YES Font:18];
+    [self addSubview:projectNameL];
+    [projectNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self).offset(26);
+        make.left.equalTo(self).offset(15);
+        make.height.equalTo(@24);
+        make.right.equalTo(self.mas_right).offset(-60);
+    }];
+    
+    UIButton *packupBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"arrow"]];
+    [packupBtn addTarget:self action:@selector(packupBtnAction) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:packupBtn];
+    [packupBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(projectNameL);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.right.equalTo(self).offset(-16);
+    }];
+
+    UIImageView *dataIamgeV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"time"]];
+    [self addSubview:dataIamgeV];
+    [dataIamgeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(projectNameL.mas_bottom).offset(12);
+        make.left.equalTo(self).offset(15);
+        make.size.mas_equalTo(CGSizeMake(20, 20));
+    }];
+    UILabel *dataL = [UILabel z_labelWithText:@"2020年12月23日 到期" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self addSubview:dataL];
+    [dataL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(dataIamgeV);
+        make.left.equalTo(dataIamgeV.mas_right).offset(8);
+        make.height.equalTo(@16);
+    }];
+
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(244, 21, 21);
+    [self addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(dataL);
+        make.left.equalTo(dataL);
+        make.right.equalTo(dataL);
+        make.height.equalTo(@1);
+    }];
+    UIImageView *privacyImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"public"]];
+    [self addSubview:privacyImageV];
+    [privacyImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(50, 20));
+        make.top.equalTo(dataL.mas_bottom).offset(11);
+        make.right.equalTo(self).offset(-15);
+    }];
+    UILabel *managerL = [UILabel z_labelWithText:@"薛友松" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self addSubview:managerL];
+    [managerL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(dataIamgeV.mas_bottom).offset(12);
+        make.left.equalTo(self.mas_right).offset(-142);
+        make.right.equalTo(privacyImageV.mas_left).offset(-20);
+        make.height.equalTo(@18);
+    }];
+    UIImageView *separatedImageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"l"]];
+    [self addSubview:separatedImageV];
+    [separatedImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(managerL);
+        make.right.equalTo(managerL.mas_left).offset(-10);
+        make.size.mas_equalTo(CGSizeMake(2, 10));
+    }];
+    
+    UILabel *companyL = [UILabel z_labelWithText:@"北京东晨工元科技发展有限公司" Color:PBColor(166, 174, 182) isBold:YES Font:13];
+    [self addSubview:companyL];
+    [companyL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(dataIamgeV.mas_bottom).offset(12);
+        make.left.equalTo(self).offset(15);
+        make.right.equalTo(separatedImageV.mas_left).offset(-10);
+        make.height.equalTo(@18);
+    }];
+    UIImageView *bottomLin = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"line"]];
+    [self addSubview:bottomLin];
+    [bottomLin mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(companyL.mas_bottom).offset(12);
+        make.left.equalTo(self).offset(10);
+        make.right.equalTo(self).offset(-10);
+        make.height.equalTo(@1);
+    }];
+    
+    UIButton * collectionBtn = [UIButton z_bgNormalImage:[UIImage imageNamed:@"star"] bgSelectedImage:[UIImage imageNamed:@"star_fill"]];
+    [collectionBtn addTarget:self action:@selector(collectionAction:) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:collectionBtn];
+    [collectionBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.top.equalTo(bottomLin.mas_bottom).offset(19);
+        make.left.equalTo(self).offset(25);
+    }];
+    
+    UILabel *collectionL = [UILabel z_labelWithText:@"收藏" Color:PBColor(40, 58, 79) isBold:YES Font:13];
+    [self addSubview:collectionL];
+    [collectionL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(collectionBtn.mas_right).offset(8);
+        make.centerY.equalTo(collectionBtn);
+    }];
+    UIButton *intoProjectBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"goitm"]];
+    [intoProjectBtn addTarget:self action:@selector(intoProjectAction) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:intoProjectBtn];
+    [intoProjectBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(companyL.mas_bottom).offset(23);
+        make.right.equalTo(self).offset(-25);
+        make.size.mas_equalTo(CGSizeMake(142, 41));
+    }];
+    
+    self.projectNameL = projectNameL;
+    self.dataIamgeV = dataIamgeV;
+    self.dataL = dataL;
+    self.companyL = companyL;
+    self.managerL = managerL;
+    self.collectionBtn = collectionBtn;
+    self.collectionL = collectionL;
+    self.intoProjectBtn = intoProjectBtn;
+    self.linV = linV;
+    self.privacyImageV = privacyImageV;
+}
+- (void)barSelectAction:(UIButton *)sender {
+    
+}
+- (void)intoProjectAction {
+    if (self.IntoProjectBlock) {
+        self.IntoProjectBlock(self.projectModel);
+    }
+}
+- (void)collectionAction:(UIButton *)sender {
+    [YJProgressHUD showProgress:@"" inView:self];
+    NSString *flag = @"";
+    if (!sender.selected) {
+        flag = @"1";
+    }
+    [[PBNetworkTools sharedTools] editFavoriteWithOrganizeId:self.projectModel.organizeid andAddOrRm:flag andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if (error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"收藏失败" inView:self];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        NSLog(@"%@",str);
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            sender.selected = !sender.selected;
+            if (sender.selected) {
+                self.collectionL.text = @"已收藏";
+                self.collectionL.textColor = PBColor(0, 122, 255);
+                self.projectModel.isFavorite = YES;
+            }else {
+                self.collectionL.text = @"收藏";
+                self.collectionL.textColor = PBColor(40, 58, 79);
+                self.projectModel.isFavorite = NO;
+            }
+            if (self.SetCollectionState) {
+                self.SetCollectionState(self.projectModel);
+            }
+        }else {
+            [YJProgressHUD showMessage:@"收藏失败" inView:self];
+        }
+    }];
+}
+- (void)packupBtnAction {
+    if (self.packupBlock) {
+        self.packupBlock();
+    }
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+    self.projectNameL.text = projectModel.fullname;
+    if ([projectModel.com_FullName isEqualToString:@""] || projectModel.com_FullName == nil) {
+        self.companyL.text = @"<无隶属单位>";
+    }else {
+        self.companyL.text = projectModel.com_FullName;
+    }
+    if ([projectModel.endTime isEqualToString:@""] || projectModel.endTime == nil) {
+        self.dataIamgeV.image = [UIImage imageNamed:@"time"];
+        self.dataL.text = @"<未定义到期日期>";
+        self.dataL.textColor = PBColor(97, 111, 125);
+        self.linV.hidden = YES;
+    }else {
+        NSRange tRange = [projectModel.endTime rangeOfString:@" "];
+        NSString *endTime = [projectModel.endTime substringToIndex:tRange.location];
+        self.dataL.text = [NSString stringWithFormat:@"%@ 到期",endTime];
+        NSInteger num = [self compareWithDate:endTime];
+        if (num == 1) {
+            self.dataIamgeV.image = [UIImage imageNamed:@"time_1"];
+            self.dataL.textColor = PBColor(244, 21, 21);
+            self.linV.hidden = NO;
+        }else {
+            self.dataIamgeV.image = [UIImage imageNamed:@"time"];
+            self.dataL.textColor = PBColor(97, 111, 125);
+            self.linV.hidden = YES;
+        }
+    }
+    self.managerL.text = projectModel.manager;
+    if (projectModel.ispublic) {
+        self.privacyImageV.image = [UIImage imageNamed:@"public"];
+    }else {
+        self.privacyImageV.image = [UIImage imageNamed:@"unpublic"];
+    }
+    if (projectModel.isFavorite) {
+        self.collectionBtn.selected = YES;
+        self.collectionL.text = @"已收藏";
+        self.collectionL.textColor = PBColor(0, 122, 255);
+    }else {
+        self.collectionBtn.selected = NO;
+        self.collectionL.text = @"收藏";
+        self.collectionL.textColor = PBColor(40, 58, 79);
+    }
+}
+//比较时间大小
+- (NSInteger)compareWithDate:(NSString*)bDate{
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    NSString*aDate = [formatter stringFromDate:[NSDate date]];
+    NSDateFormatter *dateformater = [[NSDateFormatter alloc] init];
+    [dateformater setDateFormat:@"yyyy-MM-dd"];
+    NSDate*dta = [[NSDate alloc]init];
+    NSDate*dtb = [[NSDate alloc]init];
+    dta = [dateformater dateFromString:aDate];
+    dtb = [dateformater dateFromString:bDate];
+    NSComparisonResult result = [dta compare:dtb];
+    if (result == NSOrderedDescending) {
+    //指定时间 已过期
+       return 1;
+    }else if(result == NSOrderedAscending){
+    //指定时间 没过期
+       return -1;
+    }else{
+    //刚好时间一样.
+       return 0;
+    }
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.h
new file mode 100644
index 0000000..3ae5699
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.h
@@ -0,0 +1,18 @@
+//
+//  PBProjectSearchView.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/6/5.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBProjectSearchView : UIView
+@property (nonatomic, copy) void (^cancelSearchBlock)(void);
+@property (nonatomic, copy) void (^projectDetailBlock)(PBProjectModel* projectModel);
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.m
new file mode 100644
index 0000000..bb0ed23
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectSearchView.m
@@ -0,0 +1,239 @@
+//
+//  PBProjectSearchView.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2020/6/5.
+//  Copyright © 2020 ProBIM. All rights reserved.
+//
+
+#import "PBProjectSearchView.h"
+#import "MSSAutoresizeLabelFlow.h"
+#import "PBProjectTableViewCell.h"
+#import "PBProjectModel.h"
+#import "PBTabBarController.h"
+@interface PBProjectSearchView()<UISearchBarDelegate, UITableViewDataSource, UITableViewDelegate>
+@property(nonatomic,strong)MSSAutoresizeLabelFlow *historicalRecordV;
+@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) NSArray *dataList;
+@property (nonatomic, weak) UISearchBar *searchBar;
+@end
+@implementation PBProjectSearchView
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    self.backgroundColor = [UIColor whiteColor];
+    UIImageView *searchBg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"search_bg"]];
+    [self addSubview:searchBg];
+    [searchBg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self);
+        make.left.equalTo(self).offset(10);
+        make.right.equalTo(self).offset(-10);
+        make.height.equalTo(@46);
+    }];
+    
+    UIButton *backBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"arrow_left"]];
+    [backBtn addTarget:self action:@selector(backActon) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:backBtn];
+    [backBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(searchBg).offset(10);
+        make.left.equalTo(searchBg).offset(10);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    UISearchBar *searchBar = [[UISearchBar alloc] init];
+    [searchBar setImage:[[UIImage alloc] init] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
+    searchBar.backgroundColor = [UIColor clearColor];
+    searchBar.backgroundImage = [[UIImage alloc]init];
+    if (@available(iOS 13.0, *)){
+         searchBar.searchTextField.backgroundColor = UIColor.clearColor;
+    }else{
+        UITextField*searchField = [searchBar valueForKey:@"_searchField"];
+        searchField.backgroundColor = UIColor.clearColor;
+    }
+    searchBar.placeholder = @"搜索";
+    searchBar.delegate = self;
+    [self addSubview:searchBar];
+    [searchBar mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(searchBg);
+        make.left.equalTo(searchBg).offset(34);
+        make.right.equalTo(searchBg).offset(-10);
+        make.height.equalTo(@46);
+    }];
+    [searchBar becomeFirstResponder];
+    self.searchBar = searchBar;
+    UIView *linV = [[UIView alloc] init];
+    linV.backgroundColor = PBColor(244, 245, 246);
+    [self addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(searchBg.mas_bottom).offset(15);
+        make.left.right.equalTo(self);
+        make.height.equalTo(@6);
+    }];
+    UILabel *historyL = [UILabel z_labelWithText:@"搜索历史" Color:PBColor(40, 58, 79) isBold:YES Font:16];
+    [self addSubview:historyL];
+    [historyL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(linV.mas_bottom).offset(15);
+        make.left.equalTo(self).offset(15);
+        make.size.mas_equalTo(CGSizeMake(68, 24));
+    }];
+    UIButton *clearBtn = [UIButton z_bgImageButton:[UIImage imageNamed:@"delete"]];
+    [clearBtn addTarget:self action:@selector(clearhistory) forControlEvents:UIControlEventTouchUpInside];
+    [self addSubview:clearBtn];
+    [clearBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(historyL);
+        make.right.equalTo(self).offset(-18);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+    }];
+    NSArray *array = [self readSearchHistory];
+    _historicalRecordV = [[MSSAutoresizeLabelFlow alloc] initWithFrame:CGRectMake(0, 150, PBScreenWidth, 200) titles:array selectedHandler:^(NSUInteger index, NSString *title) {
+        NSLog(@"%@",title);
+        self.searchBar.text = title;
+        [self searchActionWithTitle:title];
+    }];
+    [self addSubview:_historicalRecordV];
+    [self addSubview:self.tableView];
+    self.tableView.hidden = YES;
+}
+- (void)searchActionWithTitle:(NSString *)title {
+    [self.searchBar resignFirstResponder];
+    self.tableView.hidden = NO;
+    [self loadProjectList];
+    NSArray *arr = [self readSearchHistory];
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (NSString *obj in arr) {
+        if (![obj isEqualToString:title]) {
+            [arrM addObject:obj];
+        }
+    }
+    [arrM insertObject:title atIndex:0];
+    [self writeSearchHistoryWithData:arrM.copy];
+    [self.historicalRecordV reloadAllWithTitles:arrM.copy];
+}
+- (void)backActon {
+    if (self.cancelSearchBlock) {
+        self.cancelSearchBlock();
+    }
+}
+- (void)clearhistory {
+    [self deleteSearchHistory];
+}
+#pragma makr - UISearchBarDelegate
+- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
+    [self searchActionWithTitle:searchBar.text];
+}
+- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
+    if (!self.tableView.hidden) {
+        self.tableView.hidden = YES;
+    }
+}
+- (void)loadProjectList {
+//    [YJProgressHUD showCustomAnimation:@"" inview:self];
+    [YJProgressHUD showProgress:@"" inView:self];
+    [[PBNetworkTools sharedTools] getProjectListWithKeyword:self.searchBar.text andIsPublic:@"" andSort:@"CreateDate desc" andSkip:@"0" andtake:@"999" andOnlyFavorite:@"" andCallBack:^(NSURLSessionDataTask *task, id response, NSError *error) {
+        if(error) {
+            NSLog(@"%@",error);
+            [YJProgressHUD showMessage:@"加载项目列表失败" inView:self];
+            return;
+        }
+        NSString *str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
+        PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+        if (networkModel.Ret == 1) {
+            [YJProgressHUD hide];
+            self.dataList = [NSArray yy_modelArrayWithClass:[PBProjectModel class] json:[networkModel.Data valueForKey:@"rows"]];
+            [self.tableView reloadData];
+        }else {
+            [YJProgressHUD showMessage:networkModel.Msg inView:self];
+        }
+    }];
+}
+#pragma mark - tableViewDelegate
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
+{
+    return 1;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+    return self.dataList.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    return 120;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    static NSString *cellId = @"cellId";
+    PBProjectTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
+    if (!cell)
+        cell = [[PBProjectTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
+    cell.projectModel = self.dataList[indexPath.row];
+    return cell;
+}
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    PBProjectModel *projectModel = self.dataList[indexPath.row];
+    if (self.projectDetailBlock) {
+        self.projectDetailBlock(projectModel);
+    }
+}
+#pragma mark - GET
+
+- (UITableView *)tableView {
+    if (!_tableView)
+    {
+        CGFloat bottomViewH = 71.f - 20;
+        if (IS_IPHONE_X) {
+            bottomViewH = bottomViewH + IPHONE_X_BOTTOM;
+        }
+        _tableView = [[UITableView alloc] init];
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        [self addSubview:_tableView];
+        [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.top.equalTo(self).offset(67);
+            make.left.right.bottom.equalTo(self);
+            make.bottom.equalTo(self).offset(-bottomViewH);
+        }];
+    }
+    return _tableView;
+}
+
+#pragma mark - 读取本地历史记录
+-(NSArray *)readSearchHistory
+{
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"searchHistory.plist"];
+    NSArray *arr = [[NSArray alloc]initWithContentsOfFile:documentPath];
+    return arr;
+}
+#pragma mark - 删除本地历史记录
+-(void)deleteSearchHistory {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"searchHistory.plist"];
+    NSFileManager *fileManager = [NSFileManager defaultManager];
+    [fileManager removeItemAtPath:documentPath error:nil];
+    [self.historicalRecordV reloadAllWithTitles:@[]];
+}
+#pragma mark - 插入本地历史记录
+- (void)writeSearchHistoryWithData:(NSArray *)history {
+    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documents = [array lastObject];
+    NSString *documentPath = [documents stringByAppendingPathComponent:@"searchHistory.plist"];
+    [history writeToFile:documentPath atomically:YES];
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.h
new file mode 100644
index 0000000..a61994b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.h
@@ -0,0 +1,13 @@
+//
+//  PBProjectTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBProjectModel;
+@interface PBProjectTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBProjectModel *projectModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.m
new file mode 100644
index 0000000..3c5d876
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBProjectTableViewCell.m
@@ -0,0 +1,227 @@
+//
+//  PBProjectTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBProjectTableViewCell.h"
+#import "PBProjectModel.h"
+@interface PBProjectTableViewCell()
+@property (nonatomic, weak) UIImageView *projectImageV;
+@property (nonatomic, weak) UILabel *projectNameL;
+@property (nonatomic, weak) UILabel *companyL;
+@property (nonatomic, weak) UILabel *dueDateL;
+@property (nonatomic, weak) UILabel *simpleL;
+@property (nonatomic, weak) UILabel *managerL;
+@property (nonatomic, weak) UIImageView *collectionV;
+@property (nonatomic, weak) UIImageView *publicV;
+@property (nonatomic, weak) UIView *overdueLin;
+
+@end
+@implementation PBProjectTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *projectImageV = [[UIImageView alloc] init];
+    projectImageV.contentMode = UIViewContentModeScaleAspectFill;
+    [self.contentView addSubview:projectImageV];
+    [projectImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(15);
+        make.left.equalTo(self.contentView).offset(15);
+        make.size.mas_equalTo(CGSizeMake(100, 100));
+    }];
+    [projectImageV circleViewWithRadius:6];
+    
+    UILabel *projectNameL = [UILabel z_labelWithText:@"" Color:TitleColor isBold:YES Font:TitleFontSize];
+    [self.contentView addSubview:projectNameL];
+    [projectNameL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(projectImageV);
+        make.left.equalTo(projectImageV.mas_right).offset(8);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.height.equalTo(@18);
+    }];
+    
+    UILabel *companyL = [UILabel z_labelWithText:@"" Color:PBColor(40, 58, 79) isBold:NO Font:13];
+    [self.contentView addSubview:companyL];
+    [companyL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(projectNameL.mas_bottom).offset(14);
+        make.left.right.equalTo(projectNameL);
+        make.height.equalTo(@15);
+    }];
+    UILabel *dueDateL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    [self.contentView addSubview:dueDateL];
+    [dueDateL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(companyL.mas_bottom).offset(6);
+        make.left.equalTo(projectNameL);
+        make.height.equalTo(@16);
+    }];
+    UIView *overdueLin = [[UIView alloc] init];
+    overdueLin.backgroundColor = PBColor(244, 21, 21);
+    [self.contentView addSubview:overdueLin];
+    [overdueLin mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(dueDateL);
+        make.height.equalTo(@1);
+        make.left.right.equalTo(dueDateL);
+    }];
+
+    UIImageView *avatarBg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"avatar_bg"]];
+    [self.contentView addSubview:avatarBg];
+    [avatarBg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(dueDateL.mas_bottom).offset(6);
+        make.size.mas_equalTo(CGSizeMake(24, 24));
+        make.left.equalTo(projectNameL);
+    }];
+    
+    UILabel *simpleL = [UILabel z_labelWithText:@"" Color:[UIColor whiteColor] isBold:YES Font:12];
+    simpleL.textAlignment = NSTextAlignmentCenter;
+    [self.contentView addSubview:simpleL];
+    [simpleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(avatarBg);
+    }];
+    UILabel *managerL = [UILabel z_labelWithText:@"" Color:PBColor(97, 111, 125) isBold:NO Font:13];
+    [self.contentView addSubview:managerL];
+    [managerL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(avatarBg);
+        make.left.equalTo(avatarBg.mas_right).offset(4);
+        make.right.equalTo(self.contentView).offset(135);
+    }];
+    UIImageView *collectionV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"collect"]];
+    [self.contentView addSubview:collectionV];
+    [collectionV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(avatarBg);
+        make.right.mas_equalTo(self.contentView).offset(-75);
+        make.size.mas_equalTo(CGSizeMake(50, 20));
+    }];
+    UIImageView *publicV = [[UIImageView alloc] init];
+    [self.contentView addSubview:publicV];
+    [publicV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(avatarBg);
+        make.right.mas_equalTo(self.contentView).offset(-15);
+        make.size.mas_equalTo(CGSizeMake(50, 20));
+    }];
+    UIImageView *linV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"line"]];
+    [self.contentView addSubview:linV];
+    [linV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(projectImageV.mas_right);
+        make.right.equalTo(self.contentView).offset(-15);
+        make.height.equalTo(@1);
+        make.bottom.equalTo(self.contentView);
+    }];
+    
+    self.projectImageV = projectImageV;
+    self.projectNameL = projectNameL;
+    self.companyL = companyL;
+    self.dueDateL = dueDateL;
+    self.overdueLin = overdueLin;
+    self.managerL = managerL;
+    self.simpleL = simpleL;
+    self.collectionV = collectionV;
+    self.publicV = publicV;
+}
+- (void)setProjectModel:(PBProjectModel *)projectModel {
+    _projectModel = projectModel;
+    
+//    NSString *thumbnail = projectModel.thumbnailurl;
+//    NSRange range = [thumbnail rangeOfString:@"base64,"];
+//    UIImage *image;
+//    if (range.length == 0) {
+//        image = [UIImage imageNamed:@"Project_list_cellImg_bg"];
+//    }else {
+//        thumbnail = [thumbnail substringFromIndex:range.location + range.length];
+//        image = [NSString imageDecoding:thumbnail];
+//    }
+//    self.projectImageV.image = image;
+    [self.projectImageV sd_setImageWithURL:[NSURL URLWithString:projectModel.thumbnailurl] placeholderImage:[UIImage imageNamed:@"logo_unknown"]];
+    self.projectNameL.text = projectModel.fullname;
+    if ([projectModel.com_FullName isEqualToString:@""] || projectModel.com_FullName == nil) {
+        self.companyL.text = @"<无隶属单位>";
+    }else {
+        self.companyL.text = projectModel.com_FullName;
+    }
+    if ([projectModel.endTime isEqualToString:@""] || projectModel.endTime == nil) {
+        self.dueDateL.text = @"<未定义到期日期>";
+        self.dueDateL.textColor = PBColor(97, 111, 125);
+        self.overdueLin.hidden = YES;
+    }else {
+        NSRange tRange = [projectModel.endTime rangeOfString:@" "];
+        NSString *endTime = [projectModel.endTime substringToIndex:tRange.location];
+        self.dueDateL.text = [NSString stringWithFormat:@"%@ 到期",endTime];
+        NSInteger num = [self compareWithDate:endTime];
+        if (num == 1) {
+            self.dueDateL.textColor = PBColor(244, 21, 21);
+            self.overdueLin.hidden = NO;
+        }else {
+            self.dueDateL.textColor = PBColor(97, 111, 125);
+            self.overdueLin.hidden = YES;
+        }
+    }
+    if (projectModel.manager == nil || [projectModel.manager isEqualToString:@""]) {
+        self.simpleL.text = @"";
+    }else {
+        BOOL isChiness = [self IsChinese:projectModel.manager];
+        if (isChiness) {
+            self.simpleL.text = [projectModel.manager substringFromIndex:projectModel.manager.length - 1];
+        }else {
+            self.simpleL.text = [projectModel.manager substringToIndex:1];
+        }
+    }
+    self.managerL.text = projectModel.manager;
+    if (projectModel.ispublic) {
+        self.publicV.image = [UIImage imageNamed:@"public"];
+    }else {
+        self.publicV.image = [UIImage imageNamed:@"unpublic"];
+    }
+    self.collectionV.hidden = YES;
+}
+- (BOOL)IsChinese:(NSString *)str {
+    for(int i=0; i< [str length];i++){
+        int a = [str characterAtIndex:i];
+        if( a > 0x4e00 && a < 0x9fff){
+            return YES;
+        }
+      }
+    return NO;
+}
+
+//比较时间大小
+- (NSInteger)compareWithDate:(NSString*)bDate{
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    NSString*aDate = [formatter stringFromDate:[NSDate date]];
+    NSDateFormatter *dateformater = [[NSDateFormatter alloc] init];
+    [dateformater setDateFormat:@"yyyy-MM-dd"];
+    NSDate*dta = [[NSDate alloc]init];
+    NSDate*dtb = [[NSDate alloc]init];
+    dta = [dateformater dateFromString:aDate];
+    dtb = [dateformater dateFromString:bDate];
+    NSComparisonResult result = [dta compare:dtb];
+    if (result == NSOrderedDescending) {
+    //指定时间 已过期
+       return 1;
+    }else if(result == NSOrderedAscending){
+    //指定时间 没过期
+       return -1;
+    }else{
+    //刚好时间一样.
+       return 0;
+    }
+}
+//正片叠底图片组合模式
+- (UIImage *)drawPiucureFrontImage:(UIImage *)personImage backImage:(UIImage *)hatImage blendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha{
+    CGSize newSize =[personImage size];
+    UIGraphicsBeginImageContext(newSize);
+    [personImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeNormal alpha:1];
+    [hatImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:blendMode alpha:alpha];
+    UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    return newImage;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.h
new file mode 100644
index 0000000..42ad689
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.h
@@ -0,0 +1,14 @@
+//
+//  PBUnReadTableViewCell.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class PBUnReadMesModel;
+
+@interface PBUnReadTableViewCell : UITableViewCell
+@property (nonatomic, strong) PBUnReadMesModel *unReadMesModel;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.m
new file mode 100644
index 0000000..e82afcd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/ProjectList/Views/PBUnReadTableViewCell.m
@@ -0,0 +1,92 @@
+//
+//  PBUnReadTableViewCell.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/9/17.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBUnReadTableViewCell.h"
+#import "PBUnReadMesModel.h"
+@interface PBUnReadTableViewCell()
+@property (nonatomic, weak) UILabel *notifyTypeL;
+@property (nonatomic, weak) UILabel *timeL;
+@property (nonatomic, weak) UILabel *descL;
+@property (nonatomic, weak) UIImageView *imageV;
+@end
+
+@implementation PBUnReadTableViewCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Mes_oval"]];
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left.equalTo(self.contentView).offset(12);
+        make.size.mas_equalTo(CGSizeMake(6, 6));
+    }];
+    UILabel *notifyTypeL = [UILabel z_labelWithText:@"问题追踪" Color:WarningColor isBold:NO Font:TitleFontSize];
+    [self.contentView addSubview:notifyTypeL];
+    [notifyTypeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(10);
+        make.left. equalTo(self.contentView).offset(20);
+        make.size.mas_equalTo(CGSizeMake(200, 20));
+    }];
+    UILabel *timeL = [UILabel z_labelWithText:@"2108-09-43" Color:DescColor isBold:NO Font:DescFontSize];
+    timeL.textAlignment = NSTextAlignmentRight;
+    [self.contentView addSubview:timeL];
+    [timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(notifyTypeL);
+        make.right.equalTo(self.contentView).offset(-16);
+    }];
+    UILabel *descL = [UILabel z_labelWithText:@"xxxxxxxxxxxxxxxxxxxxxxxxxx" Color:DescColor isBold:NO Font:DescFontSize];
+    descL.numberOfLines = 0;
+    [self.contentView addSubview:descL];
+    [descL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(notifyTypeL.mas_bottom).offset(12);
+        make.left.equalTo(self.contentView).offset(16);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.bottom.equalTo(self.contentView).offset(-12);
+    }];
+    self.imageV = imageV;
+    self.notifyTypeL = notifyTypeL;
+    self.timeL = timeL;
+    self.descL = descL;
+}
+
+- (void)setUnReadMesModel:(PBUnReadMesModel *)unReadMesModel {
+    _unReadMesModel = unReadMesModel;
+    if (unReadMesModel.LogAndMsgType == 4 || unReadMesModel.LogAndMsgType == 5 || unReadMesModel.LogAndMsgType == 6 || unReadMesModel.LogAndMsgType == 7 || unReadMesModel.LogAndMsgType == 8 || unReadMesModel.LogAndMsgType == 9 || unReadMesModel.LogAndMsgType == 10 || unReadMesModel.LogAndMsgType == 1007) {
+        self.notifyTypeL.text = @"问题追踪";
+    }else if (unReadMesModel.LogAndMsgType == 21 || unReadMesModel.LogAndMsgType == 22 || unReadMesModel.LogAndMsgType == 23 || unReadMesModel.LogAndMsgType == 24 || unReadMesModel.LogAndMsgType == 25 || unReadMesModel.LogAndMsgType == 26 || unReadMesModel.LogAndMsgType == 27){
+        self.notifyTypeL.text =  @"文档";
+    }else if (unReadMesModel.LogAndMsgType == 44 || unReadMesModel.LogAndMsgType == 45 || unReadMesModel.LogAndMsgType == 46){
+        self.notifyTypeL.text =  @"现场数据";
+    }else if (unReadMesModel.LogAndMsgType == 47 || unReadMesModel.LogAndMsgType == 48 || unReadMesModel.LogAndMsgType == 49){
+        self.notifyTypeL.text =  @"项目流程";
+    }else if (unReadMesModel.LogAndMsgType == 51){
+        self.notifyTypeL.text =  @"项目动态";
+    }else {
+        self.notifyTypeL.text = @"其它";
+    }
+    self.timeL.text = [unReadMesModel.mm_createdatetimestr substringToIndex:unReadMesModel.mm_createdatetimestr.length - 3];
+    self.descL.text = unReadMesModel.ExtDataContent;
+    if ([unReadMesModel.isRead isEqualToString:@"0"]) {
+        self.imageV.hidden = NO;
+    }else {
+        self.imageV.hidden = YES;
+    }
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.h
new file mode 100755
index 0000000..cca3899
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.h
@@ -0,0 +1,16 @@
+//
+//  JHAES.h
+//  测试
+//
+//  Created by CSDC on 2017/2/23.
+//  Copyright © 2017年 jianhekeji. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface JHAES : NSObject
++ (NSString*) AES128Encrypt:(NSString *)plainText key:(NSString *)key iv:(NSString *)iv;
+
++ (NSString*) AES128Decrypt:(NSString *)encryptText key:(NSString *)key iv:(NSString *)iv;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.m
new file mode 100755
index 0000000..fbaf4ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/AES/JHAES.m
@@ -0,0 +1,213 @@
+//
+//  JHAES.m
+//  测试
+//
+//  Created by CSDC on 2017/2/23.
+//  Copyright © 2017年 jianhekeji. All rights reserved.
+//
+
+#import "JHAES.h"
+#import <CommonCrypto/CommonCryptor.h>
+#import "GTMBase64.h"
+
+@implementation JHAES
+
++(NSString *)AES128Encrypt:(NSString *)plainText key:(NSString *)gkey iv:(NSString *)gIv{
+    
+    char keyPtr[kCCKeySizeAES128+1];
+    bzero(keyPtr, sizeof(keyPtr));
+    [gkey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
+
+    char ivPtr[kCCKeySizeAES128+1];
+    memset(ivPtr, 0, sizeof(ivPtr));
+    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
+
+    NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
+
+    NSUInteger dataLength = [data length];
+    size_t bufferSize = dataLength + kCCBlockSizeAES128;
+    void *buffer = malloc(bufferSize);
+    size_t numBytesEncrypted = 0;
+    //kCCOptionPKCS7Padding
+    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
+                                          kCCAlgorithmAES128,
+                                          kCCOptionPKCS7Padding,
+                                          keyPtr,
+                                          kCCBlockSizeAES128,
+                                          ivPtr,
+                                          [data bytes],
+                                          dataLength,
+                                          buffer,
+                                          bufferSize,
+                                          &numBytesEncrypted);
+    if (cryptStatus == kCCSuccess) {
+        NSData *encryptedData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
+        return [self hexStringFromData:encryptedData];
+    }
+    free(buffer);
+    return nil;
+    
+
+    
+    
+    
+    
+//    char keyPtr[kCCKeySizeAES128+1];
+//    memset(keyPtr, 0, sizeof(keyPtr));
+//    [gkey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
+//
+//    char ivPtr[kCCBlockSizeAES128+1];
+//    memset(ivPtr, 0, sizeof(ivPtr));
+//    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
+//
+//    NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
+//    int  dataLength = (int)[data length];
+//    int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);
+//    int newSize = 0;
+//
+//    if(diff > 0)
+//    {
+//        newSize = dataLength + diff;
+//    }
+//
+//    char dataPtr[newSize];
+//    memcpy(dataPtr, [data bytes], [data length]);
+//    for(int i = 0; i < diff; i++)
+//    {
+//        dataPtr[i + dataLength] = 0x00;
+//    }
+//
+//    size_t bufferSize = newSize + kCCBlockSizeAES128;
+//    void *buffer = malloc(bufferSize);
+//    memset(buffer, 0, bufferSize);
+//
+//    size_t numBytesCrypted = 0;
+//    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
+//                                          kCCAlgorithmAES128,
+//                                          kCCOptionPKCS7Padding,
+//                                          keyPtr,
+//                                          kCCKeySizeAES128,
+//                                          ivPtr,
+//                                          dataPtr,
+//                                          sizeof(dataPtr),
+//                                          buffer,
+//                                          bufferSize,
+//                                          &numBytesCrypted);
+//
+//    if (cryptStatus == kCCSuccess) {
+//        NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
+//        return [GTMBase64 stringByEncodingData:resultData];
+//    }
+//    free(buffer);
+//    return nil;
+}
+
++ (NSString *)hexStringFromData:(NSData *)data {
+    Byte *bytes = (Byte *)[data bytes];
+    // 下面是Byte 转换为16进制。
+    NSString *hexStr = @"";
+    for(int i=0; i<[data length]; i++) {
+        NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i] & 0xff]; //16进制数
+        newHexStr = [newHexStr uppercaseString];
+        
+        if([newHexStr length] == 1) {
+            newHexStr = [NSString stringWithFormat:@"0%@",newHexStr];
+        }
+        
+        hexStr = [hexStr stringByAppendingString:newHexStr];
+        
+    }
+    return hexStr;
+}
+
++(NSString *)AES128Decrypt:(NSString *)encryptText key:(NSString *)gkey iv:(NSString *)gIv
+{
+    char keyPtr[kCCKeySizeAES128 + 1];
+    memset(keyPtr, 0, sizeof(keyPtr));
+    [gkey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
+    
+    char ivPtr[kCCBlockSizeAES128 + 1];
+    memset(ivPtr, 0, sizeof(ivPtr));
+    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
+    
+//    NSData *data = [GTMBase64 decodeData:[encryptText dataUsingEncoding:NSUTF8StringEncoding]];
+    NSData *data = [self dataForHexString:encryptText];
+    NSUInteger dataLength = [data length];
+    size_t bufferSize = dataLength + kCCBlockSizeAES128;
+    void *buffer = malloc(bufferSize);
+    
+    size_t numBytesCrypted = 0;
+    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
+                                          kCCAlgorithmAES128,
+                                          kCCOptionPKCS7Padding,
+                                          keyPtr,
+                                          kCCBlockSizeAES128,
+                                          ivPtr,
+                                          [data bytes],
+                                          dataLength,
+                                          buffer,
+                                          bufferSize,
+                                          &numBytesCrypted);
+    if (cryptStatus == kCCSuccess) {
+        NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
+        return [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
+    }
+    free(buffer);
+    return nil;
+}
++ (NSData*)dataForHexString:(NSString*)hexString
+{
+    if (hexString == nil) {
+        return nil;
+    }
+    
+    const char* ch = [[hexString lowercaseString] cStringUsingEncoding:NSUTF8StringEncoding];
+    NSMutableData* data = [NSMutableData data];
+    while (*ch) {
+        if (*ch == ' ') {
+            continue;
+        }
+        char byte = 0;
+        if ('0' <= *ch && *ch <= '9') {
+            
+            byte = *ch - '0';
+        }else if ('a' <= *ch && *ch <= 'f') {
+            
+            byte = *ch - 'a' + 10;
+        }else if ('A' <= *ch && *ch <= 'F') {
+            
+            byte = *ch - 'A' + 10;
+            
+        }
+        
+        ch++;
+        
+        byte = byte << 4;
+        
+        if (*ch) {
+            
+            if ('0' <= *ch && *ch <= '9') {
+                
+                byte += *ch - '0';
+                
+            } else if ('a' <= *ch && *ch <= 'f') {
+                
+                byte += *ch - 'a' + 10;
+                
+            }else if('A' <= *ch && *ch <= 'F'){
+                
+                byte += *ch - 'A' + 10;
+                
+            }
+            
+            ch++;
+            
+        }
+        
+        [data appendBytes:&byte length:1];
+        
+    }
+    
+    return data;
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.h
new file mode 100755
index 0000000..f74af2e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.h
@@ -0,0 +1,237 @@
+//
+//  GTMBase64.h
+//
+//  Copyright 2006-2008 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
+//  use this file except in compliance with the License.  You may obtain a copy
+//  of the License at
+//
+//  GitHub地址  https://github.com/penghero/PGGCrypto.git
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+//  License for the specific language governing permissions and limitations under
+//  the License.
+//
+/*
+ Base64加密方式
+ 
+ Base64是一种加密方法,可逆的加密。
+ 
+ Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符。/ + 填充 =
+ 
+ echo -n BC|base64
+ 
+ base64 ABC -o 123.txt
+ 
+ base64 -D 123.txt -o uio.txt
+ 
+ Base64 iOS7之后加入系统库里的
+ 
+ 类方法加锁,对象方法解密
+ 
+ 1) 字符串转化为base64字符串
+ 
+ NSString * string = @"ABC";
+ 
+ NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
+ 
+ NSString * base64String = [data
+ base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
+ NSLog(@"%@",base64String);
+ 
+ 2)加密后的data转化成加密前的字符串
+ //将普通的data转化为加密后的data
+ 
+ NSData * base64Data = [data base64EncodedDataWithOptions:0];
+ 
+ //加密后的Data转换为普通data
+ 
+ NSData * data2 = [[NSData alloc] initWithBase64EncodedData:base64Data options:0];
+ 
+ NSString * string2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding];
+ 
+ NSLog(@"%@",string2);
+ 
+ 3)加密图片
+ 
+ UIImage * image = [UIImage imageNamed:@"111"];
+ 
+ NSData * data = UIImagePNGRepresentation(image);
+ 
+ NSString * base64String = [data base64EncodedStringWithOptions:0];
+ 
+ //解密图片
+ 
+ NSData * decodeData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
+ 
+ UIImage * decodeImage = [[UIImage alloc] initWithData:decodeData];
+ */
+
+#import <Foundation/Foundation.h>
+#import "GTMDefines.h"
+
+// GTMBase64
+//
+/// Helper for handling Base64 and WebSafeBase64 encodings
+//
+/// The webSafe methods use different character set and also the results aren't
+/// always padded to a multiple of 4 characters.  This is done so the resulting
+/// data can be used in urls and url query arguments without needing any
+/// encoding.  You must use the webSafe* methods together, the data does not
+/// interop with the RFC methods.
+//
+@interface GTMBase64 : NSObject
+
+//
+// Standard Base64 (RFC) handling
+//
+
+// encodeData:
+//
+/// Base64 encodes contents of the NSData object.
+//
+/// Returns:
+///   A new autoreleased NSData with the encoded payload.  nil for any error.
+//
++(NSData *)encodeData:(NSData *)data;
+
+// decodeData:
+//
+/// Base64 decodes contents of the NSData object.
+//
+/// Returns:
+///   A new autoreleased NSData with the decoded payload.  nil for any error.
+//
++(NSData *)decodeData:(NSData *)data;
+
+// encodeBytes:length:
+//
+/// Base64 encodes the data pointed at by |bytes|.
+//
+/// Returns:
+///   A new autoreleased NSData with the encoded payload.  nil for any error.
+//
++(NSData *)encodeBytes:(const void *)bytes length:(NSUInteger)length;
+
+// decodeBytes:length:
+//
+/// Base64 decodes the data pointed at by |bytes|.
+//
+/// Returns:
+///   A new autoreleased NSData with the encoded payload.  nil for any error.
+//
++(NSData *)decodeBytes:(const void *)bytes length:(NSUInteger)length;
+
+// stringByEncodingData:
+//
+/// Base64 encodes contents of the NSData object.
+//
+/// Returns:
+///   A new autoreleased NSString with the encoded payload.  nil for any error.
+//
++(NSString *)stringByEncodingData:(NSData *)data;
+
+// stringByEncodingBytes:length:
+//
+/// Base64 encodes the data pointed at by |bytes|.
+//
+/// Returns:
+///   A new autoreleased NSString with the encoded payload.  nil for any error.
+//
++(NSString *)stringByEncodingBytes:(const void *)bytes length:(NSUInteger)length;
+
+// decodeString:
+//
+/// Base64 decodes contents of the NSString.
+//
+/// Returns:
+///   A new autoreleased NSData with the decoded payload.  nil for any error.
+//
++(NSData *)decodeString:(NSString *)string;
+
+//
+// Modified Base64 encoding so the results can go onto urls.
+//
+// The changes are in the characters generated and also allows the result to
+// not be padded to a multiple of 4.
+// Must use the matching call to encode/decode, won't interop with the
+// RFC versions.
+//
+
+// webSafeEncodeData:padded:
+//
+/// WebSafe Base64 encodes contents of the NSData object.  If |padded| is YES
+/// then padding characters are added so the result length is a multiple of 4.
+//
+/// Returns:
+///   A new autoreleased NSData with the encoded payload.  nil for any error.
+//
++(NSData *)webSafeEncodeData:(NSData *)data
+                      padded:(BOOL)padded;
+
+// webSafeDecodeData:
+//
+/// WebSafe Base64 decodes contents of the NSData object.
+//
+/// Returns:
+///   A new autoreleased NSData with the decoded payload.  nil for any error.
+//
++(NSData *)webSafeDecodeData:(NSData *)data;
+
+// webSafeEncodeBytes:length:padded:
+//
+/// WebSafe Base64 encodes the data pointed at by |bytes|.  If |padded| is YES
+/// then padding characters are added so the result length is a multiple of 4.
+//
+/// Returns:
+///   A new autoreleased NSData with the encoded payload.  nil for any error.
+//
++(NSData *)webSafeEncodeBytes:(const void *)bytes
+                       length:(NSUInteger)length
+                       padded:(BOOL)padded;
+
+// webSafeDecodeBytes:length:
+//
+/// WebSafe Base64 decodes the data pointed at by |bytes|.
+//
+/// Returns:
+///   A new autoreleased NSData with the encoded payload.  nil for any error.
+//
++(NSData *)webSafeDecodeBytes:(const void *)bytes length:(NSUInteger)length;
+
+// stringByWebSafeEncodingData:padded:
+//
+/// WebSafe Base64 encodes contents of the NSData object.  If |padded| is YES
+/// then padding characters are added so the result length is a multiple of 4.
+//
+/// Returns:
+///   A new autoreleased NSString with the encoded payload.  nil for any error.
+//
++(NSString *)stringByWebSafeEncodingData:(NSData *)data
+                                  padded:(BOOL)padded;
+
+// stringByWebSafeEncodingBytes:length:padded:
+//
+/// WebSafe Base64 encodes the data pointed at by |bytes|.  If |padded| is YES
+/// then padding characters are added so the result length is a multiple of 4.
+//
+/// Returns:
+///   A new autoreleased NSString with the encoded payload.  nil for any error.
+//
++(NSString *)stringByWebSafeEncodingBytes:(const void *)bytes
+                                   length:(NSUInteger)length
+                                   padded:(BOOL)padded;
+
+// webSafeDecodeString:
+//
+/// WebSafe Base64 decodes contents of the NSString.
+//
+/// Returns:
+///   A new autoreleased NSData with the decoded payload.  nil for any error.
+//
++(NSData *)webSafeDecodeString:(NSString *)string;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.m
new file mode 100755
index 0000000..2b14326
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMBase64.m
@@ -0,0 +1,694 @@
+//
+//  GTMBase64.m
+//
+//  Copyright 2006-2008 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
+//  use this file except in compliance with the License.  You may obtain a copy
+//  of the License at
+//  GitHub地址  https://github.com/penghero/PGGCrypto.git
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+//  License for the specific language governing permissions and limitations under
+//  the License.
+//
+
+#import "GTMBase64.h"
+#import "GTMDefines.h"
+
+static const char *kBase64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+static const char *kWebSafeBase64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
+static const char kBase64PaddingChar = '=';
+static const char kBase64InvalidChar = 99;
+
+static const char kBase64DecodeChars[] = {
+    // This array was generated by the following code:
+    // #include <sys/time.h>
+    // #include <stdlib.h>
+    // #include <string.h>
+    // main()
+    // {
+    //   static const char Base64[] =
+    //     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+    //   char *pos;
+    //   int idx, i, j;
+    //   printf("    ");
+    //   for (i = 0; i < 255; i += 8) {
+    //     for (j = i; j < i + 8; j++) {
+    //       pos = strchr(Base64, j);
+    //       if ((pos == NULL) || (j == 0))
+    //         idx = 99;
+    //       else
+    //         idx = pos - Base64;
+    //       if (idx == 99)
+    //         printf(" %2d,     ", idx);
+    //       else
+    //         printf(" %2d/*%c*/,", idx, j);
+    //     }
+    //     printf("\n    ");
+    //   }
+    // }
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      62/*+*/, 99,      99,      99,      63/*/ */,
+    52/*0*/, 53/*1*/, 54/*2*/, 55/*3*/, 56/*4*/, 57/*5*/, 58/*6*/, 59/*7*/,
+    60/*8*/, 61/*9*/, 99,      99,      99,      99,      99,      99,
+    99,       0/*A*/,  1/*B*/,  2/*C*/,  3/*D*/,  4/*E*/,  5/*F*/,  6/*G*/,
+    7/*H*/,  8/*I*/,  9/*J*/, 10/*K*/, 11/*L*/, 12/*M*/, 13/*N*/, 14/*O*/,
+    15/*P*/, 16/*Q*/, 17/*R*/, 18/*S*/, 19/*T*/, 20/*U*/, 21/*V*/, 22/*W*/,
+    23/*X*/, 24/*Y*/, 25/*Z*/, 99,      99,      99,      99,      99,
+    99,      26/*a*/, 27/*b*/, 28/*c*/, 29/*d*/, 30/*e*/, 31/*f*/, 32/*g*/,
+    33/*h*/, 34/*i*/, 35/*j*/, 36/*k*/, 37/*l*/, 38/*m*/, 39/*n*/, 40/*o*/,
+    41/*p*/, 42/*q*/, 43/*r*/, 44/*s*/, 45/*t*/, 46/*u*/, 47/*v*/, 48/*w*/,
+    49/*x*/, 50/*y*/, 51/*z*/, 99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99
+};
+
+static const char kWebSafeBase64DecodeChars[] = {
+    // This array was generated by the following code:
+    // #include <sys/time.h>
+    // #include <stdlib.h>
+    // #include <string.h>
+    // main()
+    // {
+    //   static const char Base64[] =
+    //     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
+    //   char *pos;
+    //   int idx, i, j;
+    //   printf("    ");
+    //   for (i = 0; i < 255; i += 8) {
+    //     for (j = i; j < i + 8; j++) {
+    //       pos = strchr(Base64, j);
+    //       if ((pos == NULL) || (j == 0))
+    //         idx = 99;
+    //       else
+    //         idx = pos - Base64;
+    //       if (idx == 99)
+    //         printf(" %2d,     ", idx);
+    //       else
+    //         printf(" %2d/*%c*/,", idx, j);
+    //     }
+    //     printf("\n    ");
+    //   }
+    // }
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      62/*-*/, 99,      99,
+    52/*0*/, 53/*1*/, 54/*2*/, 55/*3*/, 56/*4*/, 57/*5*/, 58/*6*/, 59/*7*/,
+    60/*8*/, 61/*9*/, 99,      99,      99,      99,      99,      99,
+    99,       0/*A*/,  1/*B*/,  2/*C*/,  3/*D*/,  4/*E*/,  5/*F*/,  6/*G*/,
+    7/*H*/,  8/*I*/,  9/*J*/, 10/*K*/, 11/*L*/, 12/*M*/, 13/*N*/, 14/*O*/,
+    15/*P*/, 16/*Q*/, 17/*R*/, 18/*S*/, 19/*T*/, 20/*U*/, 21/*V*/, 22/*W*/,
+    23/*X*/, 24/*Y*/, 25/*Z*/, 99,      99,      99,      99,      63/*_*/,
+    99,      26/*a*/, 27/*b*/, 28/*c*/, 29/*d*/, 30/*e*/, 31/*f*/, 32/*g*/,
+    33/*h*/, 34/*i*/, 35/*j*/, 36/*k*/, 37/*l*/, 38/*m*/, 39/*n*/, 40/*o*/,
+    41/*p*/, 42/*q*/, 43/*r*/, 44/*s*/, 45/*t*/, 46/*u*/, 47/*v*/, 48/*w*/,
+    49/*x*/, 50/*y*/, 51/*z*/, 99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99,
+    99,      99,      99,      99,      99,      99,      99,      99
+};
+
+
+// Tests a character to see if it's a whitespace character.
+//
+// Returns:
+//   YES if the character is a whitespace character.
+//   NO if the character is not a whitespace character.
+//
+GTM_INLINE BOOL IsSpace(unsigned char c) {
+    // we use our own mapping here because we don't want anything w/ locale
+    // support.
+    static BOOL kSpaces[256] = {
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 1,  // 0-9
+        1, 1, 1, 1, 0, 0, 0, 0, 0, 0,  // 10-19
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 20-29
+        0, 0, 1, 0, 0, 0, 0, 0, 0, 0,  // 30-39
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 40-49
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 50-59
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 60-69
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 70-79
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 80-89
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 90-99
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 100-109
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 110-119
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 120-129
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 130-139
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 140-149
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 150-159
+        1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 160-169
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 170-179
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 180-189
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 190-199
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 200-209
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 210-219
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 220-229
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 230-239
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // 240-249
+        0, 0, 0, 0, 0, 1,              // 250-255
+    };
+    return kSpaces[c];
+}
+
+// Calculate how long the data will be once it's base64 encoded.
+//
+// Returns:
+//   The guessed encoded length for a source length
+//
+GTM_INLINE NSUInteger CalcEncodedLength(NSUInteger srcLen, BOOL padded) {
+    NSUInteger intermediate_result = 8 * srcLen + 5;
+    NSUInteger len = intermediate_result / 6;
+    if (padded) {
+        len = ((len + 3) / 4) * 4;
+    }
+    return len;
+}
+
+// Tries to calculate how long the data will be once it's base64 decoded.
+// Unlike the above, this is always an upperbound, since the source data
+// could have spaces and might end with the padding characters on them.
+//
+// Returns:
+//   The guessed decoded length for a source length
+//
+GTM_INLINE NSUInteger GuessDecodedLength(NSUInteger srcLen) {
+    return (srcLen + 3) / 4 * 3;
+}
+
+
+@interface GTMBase64 (PrivateMethods)
+
++(NSData *)baseEncode:(const void *)bytes
+               length:(NSUInteger)length
+              charset:(const char *)charset
+               padded:(BOOL)padded;
+
++(NSData *)baseDecode:(const void *)bytes
+               length:(NSUInteger)length
+              charset:(const char*)charset
+       requirePadding:(BOOL)requirePadding;
+
++(NSUInteger)baseEncode:(const char *)srcBytes
+                 srcLen:(NSUInteger)srcLen
+              destBytes:(char *)destBytes
+                destLen:(NSUInteger)destLen
+                charset:(const char *)charset
+                 padded:(BOOL)padded;
+
++(NSUInteger)baseDecode:(const char *)srcBytes
+                 srcLen:(NSUInteger)srcLen
+              destBytes:(char *)destBytes
+                destLen:(NSUInteger)destLen
+                charset:(const char *)charset
+         requirePadding:(BOOL)requirePadding;
+
+@end
+
+
+@implementation GTMBase64
+
+//
+// Standard Base64 (RFC) handling
+//
+
++(NSData *)encodeData:(NSData *)data {
+    return [self baseEncode:[data bytes]
+                     length:[data length]
+                    charset:kBase64EncodeChars
+                     padded:YES];
+}
+
++(NSData *)decodeData:(NSData *)data {
+    return [self baseDecode:[data bytes]
+                     length:[data length]
+                    charset:kBase64DecodeChars
+             requirePadding:YES];
+}
+
++(NSData *)encodeBytes:(const void *)bytes length:(NSUInteger)length {
+    return [self baseEncode:bytes
+                     length:length
+                    charset:kBase64EncodeChars
+                     padded:YES];
+}
+
++(NSData *)decodeBytes:(const void *)bytes length:(NSUInteger)length {
+    return [self baseDecode:bytes
+                     length:length
+                    charset:kBase64DecodeChars
+             requirePadding:YES];
+}
+
++(NSString *)stringByEncodingData:(NSData *)data {
+    NSString *result = nil;
+    NSData *converted = [self baseEncode:[data bytes]
+                                  length:[data length]
+                                 charset:kBase64EncodeChars
+                                  padded:YES];
+    if (converted) {
+        result = [[NSString alloc] initWithData:converted
+                                        encoding:NSASCIIStringEncoding] ;
+    }
+    return result;
+}
+
++(NSString *)stringByEncodingBytes:(const void *)bytes length:(NSUInteger)length {
+    NSString *result = nil;
+    NSData *converted = [self baseEncode:bytes
+                                  length:length
+                                 charset:kBase64EncodeChars
+                                  padded:YES];
+    if (converted) {
+        result = [[NSString alloc] initWithData:converted
+                                        encoding:NSASCIIStringEncoding] ;
+    }
+    return result;
+}
+
++(NSData *)decodeString:(NSString *)string {
+    NSData *result = nil;
+    NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding];
+    if (data) {
+        result = [self baseDecode:[data bytes]
+                           length:[data length]
+                          charset:kBase64DecodeChars
+                   requirePadding:YES];
+    }
+    return result;
+}
+
+//
+// Modified Base64 encoding so the results can go onto urls.
+//
+// The changes are in the characters generated and also the result isn't
+// padded to a multiple of 4.
+// Must use the matching call to encode/decode, won't interop with the
+// RFC versions.
+//
+
++(NSData *)webSafeEncodeData:(NSData *)data
+                      padded:(BOOL)padded {
+    return [self baseEncode:[data bytes]
+                     length:[data length]
+                    charset:kWebSafeBase64EncodeChars
+                     padded:padded];
+}
+
++(NSData *)webSafeDecodeData:(NSData *)data {
+    return [self baseDecode:[data bytes]
+                     length:[data length]
+                    charset:kWebSafeBase64DecodeChars
+             requirePadding:NO];
+}
+
++(NSData *)webSafeEncodeBytes:(const void *)bytes
+                       length:(NSUInteger)length
+                       padded:(BOOL)padded {
+    return [self baseEncode:bytes
+                     length:length
+                    charset:kWebSafeBase64EncodeChars
+                     padded:padded];
+}
+
++(NSData *)webSafeDecodeBytes:(const void *)bytes length:(NSUInteger)length {
+    return [self baseDecode:bytes
+                     length:length
+                    charset:kWebSafeBase64DecodeChars
+             requirePadding:NO];
+}
+
++(NSString *)stringByWebSafeEncodingData:(NSData *)data
+                                  padded:(BOOL)padded {
+    NSString *result = nil;
+    NSData *converted = [self baseEncode:[data bytes]
+                                  length:[data length]
+                                 charset:kWebSafeBase64EncodeChars
+                                  padded:padded];
+    if (converted) {
+        result = [[NSString alloc] initWithData:converted
+                                        encoding:NSASCIIStringEncoding];
+    }
+    return result;
+}
+
++(NSString *)stringByWebSafeEncodingBytes:(const void *)bytes
+                                   length:(NSUInteger)length
+                                   padded:(BOOL)padded {
+    NSString *result = nil;
+    NSData *converted = [self baseEncode:bytes
+                                  length:length
+                                 charset:kWebSafeBase64EncodeChars
+                                  padded:padded];
+    if (converted) {
+        result = [[NSString alloc] initWithData:converted
+                                        encoding:NSASCIIStringEncoding] ;
+    }
+    return result;
+}
+
++(NSData *)webSafeDecodeString:(NSString *)string {
+    NSData *result = nil;
+    NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding];
+    if (data) {
+        result = [self baseDecode:[data bytes]
+                           length:[data length]
+                          charset:kWebSafeBase64DecodeChars
+                   requirePadding:NO];
+    }
+    return result;
+}
+
+@end
+
+@implementation GTMBase64 (PrivateMethods)
+
+//
+// baseEncode:length:charset:padded:
+//
+// Does the common lifting of creating the dest NSData.  it creates & sizes the
+// data for the results.  |charset| is the characters to use for the encoding
+// of the data.  |padding| controls if the encoded data should be padded to a
+// multiple of 4.
+//
+// Returns:
+//   an autorelease NSData with the encoded data, nil if any error.
+//
++(NSData *)baseEncode:(const void *)bytes
+               length:(NSUInteger)length
+              charset:(const char *)charset
+               padded:(BOOL)padded {
+    // how big could it be?
+    NSUInteger maxLength = CalcEncodedLength(length, padded);
+    // make space
+    NSMutableData *result = [NSMutableData data];
+    [result setLength:maxLength];
+    // do it
+    NSUInteger finalLength = [self baseEncode:bytes
+                                       srcLen:length
+                                    destBytes:[result mutableBytes]
+                                      destLen:[result length]
+                                      charset:charset
+                                       padded:padded];
+    if (finalLength) {
+        _GTMDevAssert(finalLength == maxLength, @"how did we calc the length wrong?");
+    } else {
+        // shouldn't happen, this means we ran out of space
+        result = nil;
+    }
+    return result;
+}
+
+//
+// baseDecode:length:charset:requirePadding:
+//
+// Does the common lifting of creating the dest NSData.  it creates & sizes the
+// data for the results.  |charset| is the characters to use for the decoding
+// of the data.
+//
+// Returns:
+//   an autorelease NSData with the decoded data, nil if any error.
+//
+//
++(NSData *)baseDecode:(const void *)bytes
+               length:(NSUInteger)length
+              charset:(const char *)charset
+       requirePadding:(BOOL)requirePadding {
+    // could try to calculate what it will end up as
+    NSUInteger maxLength = GuessDecodedLength(length);
+    // make space
+    NSMutableData *result = [NSMutableData data];
+    [result setLength:maxLength];
+    // do it
+    NSUInteger finalLength = [self baseDecode:bytes
+                                       srcLen:length
+                                    destBytes:[result mutableBytes]
+                                      destLen:[result length]
+                                      charset:charset
+                               requirePadding:requirePadding];
+    if (finalLength) {
+        if (finalLength != maxLength) {
+            // resize down to how big it was
+            [result setLength:finalLength];
+        }
+    } else {
+        // either an error in the args, or we ran out of space
+        result = nil;
+    }
+    return result;
+}
+
+//
+// baseEncode:srcLen:destBytes:destLen:charset:padded:
+//
+// Encodes the buffer into the larger.  returns the length of the encoded
+// data, or zero for an error.
+// |charset| is the characters to use for the encoding
+// |padded| tells if the result should be padded to a multiple of 4.
+//
+// Returns:
+//   the length of the encoded data.  zero if any error.
+//
++(NSUInteger)baseEncode:(const char *)srcBytes
+                 srcLen:(NSUInteger)srcLen
+              destBytes:(char *)destBytes
+                destLen:(NSUInteger)destLen
+                charset:(const char *)charset
+                 padded:(BOOL)padded {
+    if (!srcLen || !destLen || !srcBytes || !destBytes) {
+        return 0;
+    }
+    
+    char *curDest = destBytes;
+    const unsigned char *curSrc = (const unsigned char *)(srcBytes);
+    
+    // Three bytes of data encodes to four characters of cyphertext.
+    // So we can pump through three-byte chunks atomically.
+    while (srcLen > 2) {
+        // space?
+        _GTMDevAssert(destLen >= 4, @"our calc for encoded length was wrong");
+        curDest[0] = charset[curSrc[0] >> 2];
+        curDest[1] = charset[((curSrc[0] & 0x03) << 4) + (curSrc[1] >> 4)];
+        curDest[2] = charset[((curSrc[1] & 0x0f) << 2) + (curSrc[2] >> 6)];
+        curDest[3] = charset[curSrc[2] & 0x3f];
+        
+        curDest += 4;
+        curSrc += 3;
+        srcLen -= 3;
+        destLen -= 4;
+    }
+    
+    // now deal with the tail (<=2 bytes)
+    switch (srcLen) {
+        case 0:
+            // Nothing left; nothing more to do.
+            break;
+        case 1:
+            // One byte left: this encodes to two characters, and (optionally)
+            // two pad characters to round out the four-character cypherblock.
+            _GTMDevAssert(destLen >= 2, @"our calc for encoded length was wrong");
+            curDest[0] = charset[curSrc[0] >> 2];
+            curDest[1] = charset[(curSrc[0] & 0x03) << 4];
+            curDest += 2;
+            destLen -= 2;
+            if (padded) {
+                _GTMDevAssert(destLen >= 2, @"our calc for encoded length was wrong");
+                curDest[0] = kBase64PaddingChar;
+                curDest[1] = kBase64PaddingChar;
+                curDest += 2;
+            }
+            break;
+        case 2:
+            // Two bytes left: this encodes to three characters, and (optionally)
+            // one pad character to round out the four-character cypherblock.
+            _GTMDevAssert(destLen >= 3, @"our calc for encoded length was wrong");
+            curDest[0] = charset[curSrc[0] >> 2];
+            curDest[1] = charset[((curSrc[0] & 0x03) << 4) + (curSrc[1] >> 4)];
+            curDest[2] = charset[(curSrc[1] & 0x0f) << 2];
+            curDest += 3;
+            destLen -= 3;
+            if (padded) {
+                _GTMDevAssert(destLen >= 1, @"our calc for encoded length was wrong");
+                curDest[0] = kBase64PaddingChar;
+                curDest += 1;
+            }
+            break;
+    }
+    // return the length
+    return (curDest - destBytes);
+}
+
+//
+// baseDecode:srcLen:destBytes:destLen:charset:requirePadding:
+//
+// Decodes the buffer into the larger.  returns the length of the decoded
+// data, or zero for an error.
+// |charset| is the character decoding buffer to use
+//
+// Returns:
+//   the length of the encoded data.  zero if any error.
+//
++(NSUInteger)baseDecode:(const char *)srcBytes
+                 srcLen:(NSUInteger)srcLen
+              destBytes:(char *)destBytes
+                destLen:(NSUInteger)destLen
+                charset:(const char *)charset
+         requirePadding:(BOOL)requirePadding {
+    if (!srcLen || !destLen || !srcBytes || !destBytes) {
+        return 0;
+    }
+    
+    int decode;
+    NSUInteger destIndex = 0;
+    int state = 0;
+    char ch = 0;
+    while (srcLen-- && (ch = *srcBytes++) != 0)  {
+        if (IsSpace(ch))  // Skip whitespace
+            continue;
+        
+        if (ch == kBase64PaddingChar)
+            break;
+        
+        decode = charset[(unsigned int)ch];
+        if (decode == kBase64InvalidChar)
+            return 0;
+        
+        // Four cyphertext characters decode to three bytes.
+        // Therefore we can be in one of four states.
+        switch (state) {
+            case 0:
+                // We're at the beginning of a four-character cyphertext block.
+                // This sets the high six bits of the first byte of the
+                // plaintext block.
+                _GTMDevAssert(destIndex < destLen, @"our calc for decoded length was wrong");
+                destBytes[destIndex] = decode << 2;
+                state = 1;
+                break;
+            case 1:
+                // We're one character into a four-character cyphertext block.
+                // This sets the low two bits of the first plaintext byte,
+                // and the high four bits of the second plaintext byte.
+                _GTMDevAssert((destIndex+1) < destLen, @"our calc for decoded length was wrong");
+                destBytes[destIndex] |= decode >> 4;
+                destBytes[destIndex+1] = (decode & 0x0f) << 4;
+                destIndex++;
+                state = 2;
+                break;
+            case 2:
+                // We're two characters into a four-character cyphertext block.
+                // This sets the low four bits of the second plaintext
+                // byte, and the high two bits of the third plaintext byte.
+                // However, if this is the end of data, and those two
+                // bits are zero, it could be that those two bits are
+                // leftovers from the encoding of data that had a length
+                // of two mod three.
+                _GTMDevAssert((destIndex+1) < destLen, @"our calc for decoded length was wrong");
+                destBytes[destIndex] |= decode >> 2;
+                destBytes[destIndex+1] = (decode & 0x03) << 6;
+                destIndex++;
+                state = 3;
+                break;
+            case 3:
+                // We're at the last character of a four-character cyphertext block.
+                // This sets the low six bits of the third plaintext byte.
+                _GTMDevAssert(destIndex < destLen, @"our calc for decoded length was wrong");
+                destBytes[destIndex] |= decode;
+                destIndex++;
+                state = 0;
+                break;
+        }
+    }
+    
+    // We are done decoding Base-64 chars.  Let's see if we ended
+    //      on a byte boundary, and/or with erroneous trailing characters.
+    if (ch == kBase64PaddingChar) {               // We got a pad char
+        if ((state == 0) || (state == 1)) {
+            return 0;  // Invalid '=' in first or second position
+        }
+        if (srcLen == 0) {
+            if (state == 2) { // We run out of input but we still need another '='
+                return 0;
+            }
+            // Otherwise, we are in state 3 and only need this '='
+        } else {
+            if (state == 2) {  // need another '='
+                while ((ch = *srcBytes++) && (srcLen-- > 0)) {
+                    if (!IsSpace(ch))
+                        break;
+                }
+                if (ch != kBase64PaddingChar) {
+                    return 0;
+                }
+            }
+            // state = 1 or 2, check if all remain padding is space
+            while ((ch = *srcBytes++) && (srcLen-- > 0)) {
+                if (!IsSpace(ch)) {
+                    return 0;
+                }
+            }
+        }
+    } else {
+        // We ended by seeing the end of the string.
+        
+        if (requirePadding) {
+            // If we require padding, then anything but state 0 is an error.
+            if (state != 0) {
+                return 0;
+            }
+        } else {
+            // Make sure we have no partial bytes lying around.  Note that we do not
+            // require trailing '=', so states 2 and 3 are okay too.
+            if (state == 1) {
+                return 0;
+            }
+        }
+    }
+    
+    // If then next piece of output was valid and got written to it means we got a
+    // very carefully crafted input that appeared valid but contains some trailing
+    // bits past the real length, so just toss the thing.
+    if ((destIndex < destLen) &&
+        (destBytes[destIndex] != 0)) {
+        return 0;
+    }
+    
+    return destIndex;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMDefines.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMDefines.h
new file mode 100755
index 0000000..ba88274
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/GTMDefines.h
@@ -0,0 +1,421 @@
+//
+// GTMDefines.h
+//
+//  Copyright 2008 Google Inc.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
+//  use this file except in compliance with the License.  You may obtain a copy
+//  of the License at
+//  GitHub地址  https://github.com/penghero/PGGCrypto.git
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+//  License for the specific language governing permissions and limitations under
+//  the License.
+//
+
+// ============================================================================
+
+#include <AvailabilityMacros.h>
+#include <TargetConditionals.h>
+
+#if TARGET_OS_IPHONE
+#include <Availability.h>
+#endif //  TARGET_OS_IPHONE
+
+// Not all MAC_OS_X_VERSION_10_X macros defined in past SDKs
+#ifndef MAC_OS_X_VERSION_10_5
+#define MAC_OS_X_VERSION_10_5 1050
+#endif
+#ifndef MAC_OS_X_VERSION_10_6
+#define MAC_OS_X_VERSION_10_6 1060
+#endif
+#ifndef MAC_OS_X_VERSION_10_7
+#define MAC_OS_X_VERSION_10_7 1070
+#endif
+
+// Not all __IPHONE_X macros defined in past SDKs
+#ifndef __IPHONE_3_0
+#define __IPHONE_3_0 30000
+#endif
+#ifndef __IPHONE_3_1
+#define __IPHONE_3_1 30100
+#endif
+#ifndef __IPHONE_3_2
+#define __IPHONE_3_2 30200
+#endif
+#ifndef __IPHONE_4_0
+#define __IPHONE_4_0 40000
+#endif
+#ifndef __IPHONE_4_3
+#define __IPHONE_4_3 40300
+#endif
+#ifndef __IPHONE_5_0
+#define __IPHONE_5_0 50000
+#endif
+
+// ----------------------------------------------------------------------------
+// CPP symbols that can be overridden in a prefix to control how the toolbox
+// is compiled.
+// ----------------------------------------------------------------------------
+
+
+// By setting the GTM_CONTAINERS_VALIDATION_FAILED_LOG and
+// GTM_CONTAINERS_VALIDATION_FAILED_ASSERT macros you can control what happens
+// when a validation fails. If you implement your own validators, you may want
+// to control their internals using the same macros for consistency.
+#ifndef GTM_CONTAINERS_VALIDATION_FAILED_ASSERT
+#define GTM_CONTAINERS_VALIDATION_FAILED_ASSERT 0
+#endif
+
+// Give ourselves a consistent way to do inlines.  Apple's macros even use
+// a few different actual definitions, so we're based off of the foundation
+// one.
+#if !defined(GTM_INLINE)
+#if (defined (__GNUC__) && (__GNUC__ == 4)) || defined (__clang__)
+#define GTM_INLINE static __inline__ __attribute__((always_inline))
+#else
+#define GTM_INLINE static __inline__
+#endif
+#endif
+
+// Give ourselves a consistent way of doing externs that links up nicely
+// when mixing objc and objc++
+#if !defined (GTM_EXTERN)
+#if defined __cplusplus
+#define GTM_EXTERN extern "C"
+#define GTM_EXTERN_C_BEGIN extern "C" {
+#define GTM_EXTERN_C_END }
+#else
+#define GTM_EXTERN extern
+#define GTM_EXTERN_C_BEGIN
+#define GTM_EXTERN_C_END
+#endif
+#endif
+
+// Give ourselves a consistent way of exporting things if we have visibility
+// set to hidden.
+#if !defined (GTM_EXPORT)
+#define GTM_EXPORT __attribute__((visibility("default")))
+#endif
+
+// Give ourselves a consistent way of declaring something as unused. This
+// doesn't use __unused because that is only supported in gcc 4.2 and greater.
+#if !defined (GTM_UNUSED)
+#define GTM_UNUSED(x) ((void)(x))
+#endif
+
+// _GTMDevLog & _GTMDevAssert
+//
+// _GTMDevLog & _GTMDevAssert are meant to be a very lightweight shell for
+// developer level errors.  This implementation simply macros to NSLog/NSAssert.
+// It is not intended to be a general logging/reporting system.
+//
+// Please see http://code.google.com/p/google-toolbox-for-mac/wiki/DevLogNAssert
+// for a little more background on the usage of these macros.
+//
+//    _GTMDevLog           log some error/problem in debug builds
+//    _GTMDevAssert        assert if conditon isn't met w/in a method/function
+//                           in all builds.
+//
+// To replace this system, just provide different macro definitions in your
+// prefix header.  Remember, any implementation you provide *must* be thread
+// safe since this could be called by anything in what ever situtation it has
+// been placed in.
+//
+
+// We only define the simple macros if nothing else has defined this.
+#ifndef _GTMDevLog
+
+#ifdef DEBUG
+#define _GTMDevLog(...) NSLog(__VA_ARGS__)
+#else
+#define _GTMDevLog(...) do { } while (0)
+#endif
+
+#endif // _GTMDevLog
+
+#ifndef _GTMDevAssert
+// we directly invoke the NSAssert handler so we can pass on the varargs
+// (NSAssert doesn't have a macro we can use that takes varargs)
+#if !defined(NS_BLOCK_ASSERTIONS)
+#define _GTMDevAssert(condition, ...)                                       \
+do {                                                                      \
+if (!(condition)) {                                                     \
+[[NSAssertionHandler currentHandler]                                  \
+handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] \
+file:[NSString stringWithUTF8String:__FILE__]  \
+lineNumber:__LINE__                                  \
+description:__VA_ARGS__];                             \
+}                                                                       \
+} while(0)
+#else // !defined(NS_BLOCK_ASSERTIONS)
+#define _GTMDevAssert(condition, ...) do { } while (0)
+#endif // !defined(NS_BLOCK_ASSERTIONS)
+
+#endif // _GTMDevAssert
+
+// _GTMCompileAssert
+// _GTMCompileAssert is an assert that is meant to fire at compile time if you
+// want to check things at compile instead of runtime. For example if you
+// want to check that a wchar is 4 bytes instead of 2 you would use
+// _GTMCompileAssert(sizeof(wchar_t) == 4, wchar_t_is_4_bytes_on_OS_X)
+// Note that the second "arg" is not in quotes, and must be a valid processor
+// symbol in it's own right (no spaces, punctuation etc).
+
+// Wrapping this in an #ifndef allows external groups to define their own
+// compile time assert scheme.
+#ifndef _GTMCompileAssert
+// We got this technique from here:
+// http://unixjunkie.blogspot.com/2007/10/better-compile-time-asserts_29.html
+
+#define _GTMCompileAssertSymbolInner(line, msg) _GTMCOMPILEASSERT ## line ## __ ## msg
+#define _GTMCompileAssertSymbol(line, msg) _GTMCompileAssertSymbolInner(line, msg)
+#define _GTMCompileAssert(test, msg) \
+typedef char _GTMCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ]
+#endif // _GTMCompileAssert
+
+// ----------------------------------------------------------------------------
+// CPP symbols defined based on the project settings so the GTM code has
+// simple things to test against w/o scattering the knowledge of project
+// setting through all the code.
+// ----------------------------------------------------------------------------
+
+// Provide a single constant CPP symbol that all of GTM uses for ifdefing
+// iPhone code.
+#if TARGET_OS_IPHONE // iPhone SDK
+// For iPhone specific stuff
+#define GTM_IPHONE_SDK 1
+#if TARGET_IPHONE_SIMULATOR
+#define GTM_IPHONE_SIMULATOR 1
+#else
+#define GTM_IPHONE_DEVICE 1
+#endif  // TARGET_IPHONE_SIMULATOR
+// By default, GTM has provided it's own unittesting support, define this
+// to use the support provided by Xcode, especially for the Xcode4 support
+// for unittesting.
+#ifndef GTM_IPHONE_USE_SENTEST
+#define GTM_IPHONE_USE_SENTEST 0
+#endif
+#else
+// For MacOS specific stuff
+#define GTM_MACOS_SDK 1
+#endif
+
+// Some of our own availability macros
+#if GTM_MACOS_SDK
+#define GTM_AVAILABLE_ONLY_ON_IPHONE UNAVAILABLE_ATTRIBUTE
+#define GTM_AVAILABLE_ONLY_ON_MACOS
+#else
+#define GTM_AVAILABLE_ONLY_ON_IPHONE
+#define GTM_AVAILABLE_ONLY_ON_MACOS UNAVAILABLE_ATTRIBUTE
+#endif
+
+// Provide a symbol to include/exclude extra code for GC support.  (This mainly
+// just controls the inclusion of finalize methods).
+#ifndef GTM_SUPPORT_GC
+#if GTM_IPHONE_SDK
+// iPhone never needs GC
+#define GTM_SUPPORT_GC 0
+#else
+// We can't find a symbol to tell if GC is supported/required, so best we
+// do on Mac targets is include it if we're on 10.5 or later.
+#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
+#define GTM_SUPPORT_GC 0
+#else
+#define GTM_SUPPORT_GC 1
+#endif
+#endif
+#endif
+
+// To simplify support for 64bit (and Leopard in general), we provide the type
+// defines for non Leopard SDKs
+#if !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
+// NSInteger/NSUInteger and Max/Mins
+#ifndef NSINTEGER_DEFINED
+#if __LP64__ || NS_BUILD_32_LIKE_64
+typedef long NSInteger;
+typedef unsigned long NSUInteger;
+#else
+typedef int NSInteger;
+typedef unsigned int NSUInteger;
+#endif
+#define NSIntegerMax    LONG_MAX
+#define NSIntegerMin    LONG_MIN
+#define NSUIntegerMax   ULONG_MAX
+#define NSINTEGER_DEFINED 1
+#endif  // NSINTEGER_DEFINED
+// CGFloat
+#ifndef CGFLOAT_DEFINED
+#if defined(__LP64__) && __LP64__
+// This really is an untested path (64bit on Tiger?)
+typedef double CGFloat;
+#define CGFLOAT_MIN DBL_MIN
+#define CGFLOAT_MAX DBL_MAX
+#define CGFLOAT_IS_DOUBLE 1
+#else /* !defined(__LP64__) || !__LP64__ */
+typedef float CGFloat;
+#define CGFLOAT_MIN FLT_MIN
+#define CGFLOAT_MAX FLT_MAX
+#define CGFLOAT_IS_DOUBLE 0
+#endif /* !defined(__LP64__) || !__LP64__ */
+#define CGFLOAT_DEFINED 1
+#endif // CGFLOAT_DEFINED
+#endif  // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
+
+// Some support for advanced clang static analysis functionality
+// See http://clang-analyzer.llvm.org/annotations.html
+#ifndef __has_feature      // Optional.
+#define __has_feature(x) 0 // Compatibility with non-clang compilers.
+#endif
+
+#ifndef NS_RETURNS_RETAINED
+#if __has_feature(attribute_ns_returns_retained)
+#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained))
+#else
+#define NS_RETURNS_RETAINED
+#endif
+#endif
+
+#ifndef NS_RETURNS_NOT_RETAINED
+#if __has_feature(attribute_ns_returns_not_retained)
+#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained))
+#else
+#define NS_RETURNS_NOT_RETAINED
+#endif
+#endif
+
+#ifndef CF_RETURNS_RETAINED
+#if __has_feature(attribute_cf_returns_retained)
+#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained))
+#else
+#define CF_RETURNS_RETAINED
+#endif
+#endif
+
+#ifndef CF_RETURNS_NOT_RETAINED
+#if __has_feature(attribute_cf_returns_not_retained)
+#define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained))
+#else
+#define CF_RETURNS_NOT_RETAINED
+#endif
+#endif
+
+#ifndef NS_CONSUMED
+#if __has_feature(attribute_ns_consumed)
+#define NS_CONSUMED __attribute__((ns_consumed))
+#else
+#define NS_CONSUMED
+#endif
+#endif
+
+#ifndef CF_CONSUMED
+#if __has_feature(attribute_cf_consumed)
+#define CF_CONSUMED __attribute__((cf_consumed))
+#else
+#define CF_CONSUMED
+#endif
+#endif
+
+#ifndef NS_CONSUMES_SELF
+#if __has_feature(attribute_ns_consumes_self)
+#define NS_CONSUMES_SELF __attribute__((ns_consumes_self))
+#else
+#define NS_CONSUMES_SELF
+#endif
+#endif
+
+// Defined on 10.6 and above.
+#ifndef NS_FORMAT_ARGUMENT
+#define NS_FORMAT_ARGUMENT(A)
+#endif
+
+// Defined on 10.6 and above.
+#ifndef NS_FORMAT_FUNCTION
+#define NS_FORMAT_FUNCTION(F,A)
+#endif
+
+// Defined on 10.6 and above.
+#ifndef CF_FORMAT_ARGUMENT
+#define CF_FORMAT_ARGUMENT(A)
+#endif
+
+// Defined on 10.6 and above.
+#ifndef CF_FORMAT_FUNCTION
+#define CF_FORMAT_FUNCTION(F,A)
+#endif
+
+#ifndef GTM_NONNULL
+#define GTM_NONNULL(x) __attribute__((nonnull(x)))
+#endif
+
+#ifdef __OBJC__
+
+// Declared here so that it can easily be used for logging tracking if
+// necessary. See GTMUnitTestDevLog.h for details.
+@class NSString;
+GTM_EXTERN void _GTMUnitTestDevLog(NSString *format, ...);
+
+// Macro to allow you to create NSStrings out of other macros.
+// #define FOO foo
+// NSString *fooString = GTM_NSSTRINGIFY(FOO);
+#if !defined (GTM_NSSTRINGIFY)
+#define GTM_NSSTRINGIFY_INNER(x) @#x
+#define GTM_NSSTRINGIFY(x) GTM_NSSTRINGIFY_INNER(x)
+#endif
+
+// Macro to allow fast enumeration when building for 10.5 or later, and
+// reliance on NSEnumerator for 10.4.  Remember, NSDictionary w/ FastEnumeration
+// does keys, so pick the right thing, nothing is done on the FastEnumeration
+// side to be sure you're getting what you wanted.
+#ifndef GTM_FOREACH_OBJECT
+#if TARGET_OS_IPHONE || !(MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5)
+#define GTM_FOREACH_ENUMEREE(element, enumeration) \
+for (element in enumeration)
+#define GTM_FOREACH_OBJECT(element, collection) \
+for (element in collection)
+#define GTM_FOREACH_KEY(element, collection) \
+for (element in collection)
+#else
+#define GTM_FOREACH_ENUMEREE(element, enumeration) \
+for (NSEnumerator *_ ## element ## _enum = enumeration; \
+(element = [_ ## element ## _enum nextObject]) != nil; )
+#define GTM_FOREACH_OBJECT(element, collection) \
+GTM_FOREACH_ENUMEREE(element, [collection objectEnumerator])
+#define GTM_FOREACH_KEY(element, collection) \
+GTM_FOREACH_ENUMEREE(element, [collection keyEnumerator])
+#endif
+#endif
+
+// ============================================================================
+
+// To simplify support for both Leopard and Snow Leopard we declare
+// the Snow Leopard protocols that we need here.
+#if !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
+#define GTM_10_6_PROTOCOLS_DEFINED 1
+@protocol NSConnectionDelegate
+@end
+@protocol NSAnimationDelegate
+@end
+@protocol NSImageDelegate
+@end
+@protocol NSTabViewDelegate
+@end
+#endif  // !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
+
+// GTM_SEL_STRING is for specifying selector (usually property) names to KVC
+// or KVO methods.
+// In debug it will generate warnings for undeclared selectors if
+// -Wunknown-selector is turned on.
+// In release it will have no runtime overhead.
+#ifndef GTM_SEL_STRING
+#ifdef DEBUG
+#define GTM_SEL_STRING(selName) NSStringFromSelector(@selector(selName))
+#else
+#define GTM_SEL_STRING(selName) @#selName
+#endif  // DEBUG
+#endif  // GTM_SEL_STRING
+
+#endif // __OBJC__
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.h
new file mode 100644
index 0000000..7b0a813
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.h
@@ -0,0 +1,18 @@
+//
+//  PGGCryptoDES.h
+//  PGGCrypto
+//
+//  Created by 陈鹏 on 2017/10/24.
+//  Copyright © 2017年 penggege.CP. All rights reserved.
+//  GitHub地址  https://github.com/penghero/PGGCrypto.git
+
+
+
+@interface PGGCryptoDES : NSObject
+
+//    加密方法
++(NSString *) encryptUseDES:(NSString *)plainText;
+//    解密方法
++(NSString *)decryptUseDES:(NSString *)cipherText;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.m
new file mode 100644
index 0000000..c7d5990
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/DES/PGGCryptoDES.m
@@ -0,0 +1,70 @@
+//
+//  PGGCryptoDES.m
+//  PGGCrypto
+//
+//  Created by 陈鹏 on 2017/10/24.
+//  Copyright © 2017年 penggege.CP. All rights reserved.
+//  GitHub地址  https://github.com/penghero/PGGCrypto.git
+
+#import "PGGCryptoDES.h"
+#import "GTMBase64.h"
+#import <CommonCrypto/CommonCrypto.h>
+//#define PGGkey @"#probim*"
+//#define PGGiv @"#probim*"
+#define PGGkey @"abcabcabcabcabcabcabcabc"
+#define PGGiv @"1234567890000000"
+
+@implementation PGGCryptoDES
+
+
+//    Des加密
++(NSString *) encryptUseDES:(NSString *)plainText {
+    NSString *ciphertext = nil;
+    NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
+    NSUInteger dataLength = [textData length];
+    unsigned char buffer[1024];
+    memset(buffer, 0, sizeof(char));
+    size_t numBytesEncrypted = 0;
+    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
+                                          kCCAlgorithmDES,
+                                          kCCOptionPKCS7Padding,
+                                          [PGGkey UTF8String],
+                                          kCCKeySizeDES,
+                                          [PGGiv UTF8String],
+                                          [textData bytes],
+                                          dataLength,
+                                          buffer,
+                                          1024,
+                                          &numBytesEncrypted);
+    if (cryptStatus == kCCSuccess) {
+        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
+        ciphertext = [GTMBase64 stringByEncodingData:data];
+    }
+    return ciphertext;
+}
+//    Des解密
++(NSString *)decryptUseDES:(NSString *)cipherText {
+    NSString *plaintext = nil;
+    NSData *cipherdata = [GTMBase64 decodeString:cipherText];
+    unsigned char buffer[1024];
+    memset(buffer, 0, sizeof(char));
+    size_t numBytesDecrypted = 0;
+    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
+                                          kCCAlgorithmDES,
+                                          kCCOptionPKCS7Padding,
+                                          [PGGkey UTF8String],
+                                          kCCKeySizeDES,
+                                          [PGGiv UTF8String],
+                                          [cipherdata bytes],
+                                          [cipherdata length],
+                                          buffer,
+                                          1024,
+                                          &numBytesDecrypted);
+    if(cryptStatus == kCCSuccess){
+        NSData *plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
+        plaintext = [[NSString alloc]initWithData:plaindata encoding:NSUTF8StringEncoding];
+    }
+    return plaintext;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.h
new file mode 100644
index 0000000..06a001b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.h
@@ -0,0 +1,18 @@
+//
+//  CycleCollectionViewCell.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/28.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CycleCollectionViewCell : UICollectionViewCell
+@property (nonatomic, weak) UIImageView *imageV;
+@property(nonatomic,copy) NSString *imageUrl;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.m
new file mode 100644
index 0000000..471fa0d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/CycleCollectionViewCell.m
@@ -0,0 +1,33 @@
+//
+//  CycleCollectionViewCell.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/28.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "CycleCollectionViewCell.h"
+@interface CycleCollectionViewCell()
+
+@end
+@implementation CycleCollectionViewCell
+- (instancetype)initWithFrame:(CGRect)frame {
+    if (self = [super initWithFrame:frame]) {
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+    UIImageView *imageV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Issue_list_add"]];
+    imageV.contentMode = UIViewContentModeScaleToFill;
+    [self.contentView addSubview:imageV];
+    [imageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.bottom.left.right.equalTo(self.contentView);
+    }];
+    self.imageV = imageV;
+}
+- (void)setImageUrl:(NSString *)imageUrl {
+//    _imageV.image = [UIImage imageNamed:imageUrl];
+    [_imageV sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"Doc_unable_preview"]];
+}
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.h
new file mode 100644
index 0000000..7296724
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.h
@@ -0,0 +1,20 @@
+//
+//  HJCycleView.h
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/28.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HJCycleView : UIView
+-(instancetype)initWithFrame:(CGRect)frame andData:(NSArray*)dataArr;
+
+@property (nonatomic,copy)void(^returnBlock)(NSInteger index);
+@property (nonatomic,strong) NSArray *data;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.m
new file mode 100644
index 0000000..606b680
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/HJCycleView.m
@@ -0,0 +1,135 @@
+//
+//  HJCycleView.m
+//  IphoneBIMe
+//
+//  Created by ZhangJF on 2022/10/28.
+//  Copyright © 2022 ProBIM. All rights reserved.
+//
+
+#import "HJCycleView.h"
+#import "CycleCollectionViewCell.h"
+
+#define kSelfWidth self.frame.size.width
+#define kSelfHeight self.frame.size.height
+static NSString *const ImageCellID = @"ImageCellID";
+@interface HJCycleView()<UICollectionViewDelegate,UICollectionViewDataSource,UIScrollViewDelegate, SDPhotoBrowserDelegate>{
+    NSTimer *_timer; //暂时已把定时关闭
+}
+@property(nonatomic,strong)UICollectionView *collectionView;
+@property(nonatomic,strong)UIPageControl *pageControl;
+@property(nonatomic,strong)NSMutableArray *dataArr;
+@end
+
+@implementation HJCycleView
+-(instancetype)initWithFrame:(CGRect)frame andData:(NSArray*)dataArr{
+    if (self = [super initWithFrame:frame]) {
+        self.dataArr = [NSMutableArray arrayWithArray:dataArr];
+        [self setUI];
+    }
+    
+    return self;
+}
+
+- (void)setUI{
+    
+    [self addSubview:self.collectionView];
+    [self addSubview:self.pageControl];
+}
+
+#pragma mark delegate && dataSource
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
+    CycleCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ImageCellID forIndexPath:indexPath];
+    cell.imageUrl = [_dataArr objectAtIndex:indexPath.item];
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath{
+    if (self.returnBlock) {
+        self.returnBlock(indexPath.row);
+    }
+}
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    SDPhotoBrowser *photoBrowser = [SDPhotoBrowser new];
+    photoBrowser.delegate = self;
+    photoBrowser.currentImageIndex = indexPath.item;
+    photoBrowser.imageCount = _dataArr.count;
+//    photoBrowser.sourceImagesContainerView = self.collectionView;
+    [photoBrowser show];
+}
+
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
+    return 1;
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
+    return _dataArr.count;
+}
+
+- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
+//    [_timer setFireDate:[NSDate distantFuture]];
+}
+
+- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
+    NSInteger  page = scrollView.contentOffset.x / kSelfWidth;
+    _pageControl.currentPage = page;
+}
+
+#pragma mark getter
+- (UICollectionView *)collectionView{
+    if (!_collectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.itemSize = CGSizeMake(kSelfWidth, kSelfHeight);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        layout.minimumLineSpacing = 0;
+        _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, kSelfWidth, kSelfHeight) collectionViewLayout:layout];
+        [_collectionView registerClass:[CycleCollectionViewCell class] forCellWithReuseIdentifier:ImageCellID];
+        _collectionView.bounces = YES;
+        _collectionView.showsHorizontalScrollIndicator = NO;
+        _collectionView.pagingEnabled = YES;
+        _collectionView.delegate = self;
+        _collectionView.dataSource = self;
+        _collectionView.backgroundColor = [UIColor whiteColor];
+    }
+    return _collectionView;
+}
+
+- (UIPageControl *)pageControl{
+    if (!_pageControl) {
+        _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, kSelfHeight - 30, kSelfWidth, 10)];
+        _pageControl.currentPage = 0;
+        _pageControl.numberOfPages = self.dataArr.count;
+        _pageControl.backgroundColor = [UIColor clearColor];
+        _pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
+        _pageControl.currentPageIndicatorTintColor = [UIColor colorWithRed:0 green:122 blue:255 alpha:1];
+    }
+    return _pageControl;
+}
+
+- (NSMutableArray *)dataArr{
+    if (!_dataArr) {
+        _dataArr = [NSMutableArray array];
+    }
+    return _dataArr;
+}
+- (void)setData:(NSArray *)data {
+    _data = data;
+    self.dataArr = [NSMutableArray arrayWithArray:data];
+    _pageControl.currentPage = 1;
+    _pageControl.numberOfPages = self.dataArr.count;
+    [_collectionView reloadData];
+}
+-(void)dealloc{
+//    if (_timer) {
+//        [_timer invalidate];
+//        _timer = nil;
+//    }
+}
+#pragma mark - SDPhotoBrowserDelegate
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index {
+    // 不建议用此种方式获取小图,这里只是为了简单实现展示而已
+    CycleCollectionViewCell *cell = (CycleCollectionViewCell *)[self collectionView:self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:index inSection:0]];
+    return cell.imageV.image;
+}
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/DistributionSummary.plist b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/DistributionSummary.plist
new file mode 100644
index 0000000..4bd4b42
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/DistributionSummary.plist
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IphoneBIMe.ipa</key>
+	<array>
+		<dict>
+			<key>architectures</key>
+			<array>
+				<string>arm64</string>
+			</array>
+			<key>buildNumber</key>
+			<string>2.3.1</string>
+			<key>certificate</key>
+			<dict>
+				<key>SHA1</key>
+				<string>69640BFAF53B6195AB82E966B4E2BBEAF287E544</string>
+				<key>dateExpires</key>
+				<string>2023/3/29</string>
+				<key>type</key>
+				<string>Apple Distribution</string>
+			</dict>
+			<key>embeddedBinaries</key>
+			<array>
+				<dict>
+					<key>architectures</key>
+					<array>
+						<string>arm64</string>
+					</array>
+					<key>buildNumber</key>
+					<string>2.3.1</string>
+					<key>certificate</key>
+					<dict>
+						<key>SHA1</key>
+						<string>69640BFAF53B6195AB82E966B4E2BBEAF287E544</string>
+						<key>dateExpires</key>
+						<string>2023/3/29</string>
+						<key>type</key>
+						<string>Apple Distribution</string>
+					</dict>
+					<key>name</key>
+					<string>Shape.framework</string>
+					<key>symbols</key>
+					<true/>
+					<key>team</key>
+					<dict>
+						<key>id</key>
+						<string>PQM7L66DSE</string>
+						<key>name</key>
+						<string>ProBIM Technology Co., Ltd.</string>
+					</dict>
+					<key>versionNumber</key>
+					<string>3.3.1</string>
+				</dict>
+			</array>
+			<key>entitlements</key>
+			<dict>
+				<key>application-identifier</key>
+				<string>PQM7L66DSE.com.probim.IPhoneBIMe</string>
+				<key>aps-environment</key>
+				<string>production</string>
+				<key>beta-reports-active</key>
+				<true/>
+				<key>com.apple.developer.team-identifier</key>
+				<string>PQM7L66DSE</string>
+				<key>get-task-allow</key>
+				<false/>
+			</dict>
+			<key>name</key>
+			<string>IphoneBIMe.app</string>
+			<key>profile</key>
+			<dict>
+				<key>UUID</key>
+				<string>3e891936-a98b-4d27-ab20-e5167c26e305</string>
+				<key>dateExpires</key>
+				<string>2023/3/29</string>
+				<key>name</key>
+				<string>iOS Team Store Provisioning Profile: com.probim.IPhoneBIMe</string>
+			</dict>
+			<key>symbols</key>
+			<true/>
+			<key>team</key>
+			<dict>
+				<key>id</key>
+				<string>PQM7L66DSE</string>
+				<key>name</key>
+				<string>ProBIM Technology Co., Ltd.</string>
+			</dict>
+			<key>versionNumber</key>
+			<string>3.3.1</string>
+		</dict>
+	</array>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/ExportOptions.plist b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/ExportOptions.plist
new file mode 100644
index 0000000..6ac8ea8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/ExportOptions.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>destination</key>
+	<string>export</string>
+	<key>manageAppVersionAndBuildNumber</key>
+	<true/>
+	<key>method</key>
+	<string>app-store</string>
+	<key>signingStyle</key>
+	<string>automatic</string>
+	<key>stripSwiftSymbols</key>
+	<true/>
+	<key>teamID</key>
+	<string>PQM7L66DSE</string>
+	<key>uploadSymbols</key>
+	<true/>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/Packaging.log b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/Packaging.log
new file mode 100644
index 0000000..1059eba
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/HJCycleView/IphoneBIMe 2022-11-21 22-14-31/Packaging.log
@@ -0,0 +1,1914 @@
+2022-11-21 14:14:04 +0000  Initial pipeline context: <IDEDistributionProcessingPipelineContext: 0x7fd86ef9d210; archive(resolved)="<IDEArchive: 0x7fd8a3c89c20>", distributionTask(resolved)="2", distributionDestination(resolved)="1", distributionMethod(resolved)="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team(resolved)="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	Chain (16, self inclusive):
+	<IDEDistributionProcessingPipelineContext: 0x7fd86ef9d210; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionProcessingPipelineContext: 0x7fd86edc0910; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd87146c870; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86ed2adc0; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd870d9d1f0; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86ef5c040; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86ee1b550; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86ee206c0; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86eed7b40; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86eecfaa0; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86ee28ce0; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86ee3a350; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd86eeb36f0; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="<IDEProvisioningDisambiguatableBasicTeam: 0x7fd8a1ac8790; teamID='PQM7L66DSE', teamName='ProBIM Technology Co., Ltd.', teamType='Company', username='develop@probim.com.cn', isFreeProvisioningTeam='0'>">
+	<IDEDistributionContext: 0x7fd870d80f40; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="(null)">
+	<IDEDistributionContext: 0x7fd86ed5dc40; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="<IDEDistributionMethodiOSAppStoreDistribution: 0x7fd8a32ff990>", team="(null)">
+	<IDEDistributionContext: 0x7fd86ed53ac0; archive = "<IDEArchive: 0x7fd8a3c89c20>", distributionMethod="(null)", team="(null)">
+</IDEDistributionProcessingPipelineContext: 0x7fd86ef9d210>
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionCreateDestRootStep
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionCopyItemStep
+2022-11-21 14:14:04 +0000  Running /usr/bin/ditto '-V' '/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app'
+2022-11-21 14:14:04 +0000  >>> Copying /Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app 
+2022-11-21 14:14:04 +0000  copying file ./_CodeSignature/CodeResources ... 
+2022-11-21 14:14:04 +0000  119933 bytes for ./_CodeSignature/CodeResources
+2022-11-21 14:14:04 +0000  copying file ./marker.zip ... 
+2022-11-21 14:14:04 +0000  67582 bytes for ./marker.zip
+copying file ./examineAdd2.plist ... 
+2022-11-21 14:14:04 +0000  1275 bytes for ./examineAdd2.plist
+2022-11-21 14:14:04 +0000  copying file ./LaunchImage-1100-Portrait-2436h@3x.png ... 
+2022-11-21 14:14:04 +0000  113897 bytes for ./LaunchImage-1100-Portrait-2436h@3x.png
+2022-11-21 14:14:04 +0000  copying file ./LaunchImage@2x.png ... 
+2022-11-21 14:14:04 +0000  51649 bytes for ./LaunchImage@2x.png
+copying file ./IphoneBIMe ... 
+2022-11-21 14:14:04 +0000  16121424 bytes for ./IphoneBIMe
+copying file ./examineAdd4.plist ... 
+2022-11-21 14:14:04 +0000  557 bytes for ./examineAdd4.plist
+copying file ./SGQRCode.bundle/sound.caf ... 
+2022-11-21 14:14:04 +0000  129556 bytes for ./SGQRCode.bundle/sound.caf
+2022-11-21 14:14:04 +0000  copying file ./SGQRCode.bundle/QRCodeScanLine@3x.png ... 
+3891 bytes for ./SGQRCode.bundle/QRCodeScanLine@3x.png
+2022-11-21 14:14:04 +0000  copying file ./SGQRCode.bundle/en.lproj/Root.strings ... 
+2022-11-21 14:14:04 +0000  546 bytes for ./SGQRCode.bundle/en.lproj/Root.strings
+2022-11-21 14:14:04 +0000  copying file ./SGQRCode.bundle/QRCodeScanLine@2x.png ... 
+2022-11-21 14:14:04 +0000  2231 bytes for ./SGQRCode.bundle/QRCodeScanLine@2x.png
+copying file ./SGQRCode.bundle/QRCodeScanLineGrid@3x.png ... 
+2022-11-21 14:14:04 +0000  14817 bytes for ./SGQRCode.bundle/QRCodeScanLineGrid@3x.png
+copying file ./SGQRCode.bundle/QRCodeScanLineGrid@2x.png ... 
+2022-11-21 14:14:04 +0000  7999 bytes for ./SGQRCode.bundle/QRCodeScanLineGrid@2x.png
+2022-11-21 14:14:04 +0000  copying file ./SGQRCode.bundle/Root.plist ... 
+1456 bytes for ./SGQRCode.bundle/Root.plist
+2022-11-21 14:14:04 +0000  copying file ./DwgViewController.storyboardc/UIViewController-Chr-87-vXo.nib ... 
+2022-11-21 14:14:04 +0000  919 bytes for ./DwgViewController.storyboardc/UIViewController-Chr-87-vXo.nib
+2022-11-21 14:14:04 +0000  copying file ./DwgViewController.storyboardc/Chr-87-vXo-view-5By-Hi-wEg.nib ... 
+1250 bytes for ./DwgViewController.storyboardc/Chr-87-vXo-view-5By-Hi-wEg.nib
+2022-11-21 14:14:04 +0000  copying file ./DwgViewController.storyboardc/Info.plist ... 
+2022-11-21 14:14:04 +0000  258 bytes for ./DwgViewController.storyboardc/Info.plist
+copying file ./txt.shx ... 
+2022-11-21 14:14:04 +0000  20857 bytes for ./txt.shx
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageAudioToolBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  499 bytes for ./LFMediaEditingController.bundle/EditImageAudioToolBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageMosaicToolBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  138 bytes for ./LFMediaEditingController.bundle/EditImageMosaicToolBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageEmotionToolBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  503 bytes for ./LFMediaEditingController.bundle/EditImageEmotionToolBtn@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect@2x.png ... 
+2022-11-21 14:14:04 +0000  480 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  477 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect_HL@2x.png
+copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageNoSelect@2x.png ... 
+2022-11-21 14:14:04 +0000  915 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageNoSelect@2x.png
+copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect@2x.png ... 
+2022-11-21 14:14:04 +0000  704 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect@2x.png
+copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  1031 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect_HL@2x.png
+copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  679 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect_HL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageSelectd@2x.png ... 
+2022-11-21 14:14:04 +0000  963 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageSelectd@2x.png
+copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  223 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect@2x.png ... 
+2022-11-21 14:14:04 +0000  649 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect@2x.png
+copying file ./LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  198 bytes for ./LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/002.png ... 
+2022-11-21 14:14:04 +0000  3882 bytes for ./LFMediaEditingController.bundle/stickers/002.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/016.png ... 
+2022-11-21 14:14:04 +0000  4627 bytes for ./LFMediaEditingController.bundle/stickers/016.png
+copying file ./LFMediaEditingController.bundle/stickers/017.png ... 
+2022-11-21 14:14:04 +0000  5663 bytes for ./LFMediaEditingController.bundle/stickers/017.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/003.png ... 
+2022-11-21 14:14:04 +0000  2684 bytes for ./LFMediaEditingController.bundle/stickers/003.png
+copying file ./LFMediaEditingController.bundle/stickers/029.png ... 
+2022-11-21 14:14:04 +0000  10273 bytes for ./LFMediaEditingController.bundle/stickers/029.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/015.png ... 
+2022-11-21 14:14:04 +0000  6959 bytes for ./LFMediaEditingController.bundle/stickers/015.png
+copying file ./LFMediaEditingController.bundle/stickers/001.png ... 
+2022-11-21 14:14:04 +0000  4267 bytes for ./LFMediaEditingController.bundle/stickers/001.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/014.png ... 
+2022-11-21 14:14:04 +0000  4643 bytes for ./LFMediaEditingController.bundle/stickers/014.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/028.png ... 
+2022-11-21 14:14:04 +0000  15853 bytes for ./LFMediaEditingController.bundle/stickers/028.png
+copying file ./LFMediaEditingController.bundle/stickers/010.png ... 
+2022-11-21 14:14:04 +0000  10757 bytes for ./LFMediaEditingController.bundle/stickers/010.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/004.png ... 
+2022-11-21 14:14:04 +0000  2792 bytes for ./LFMediaEditingController.bundle/stickers/004.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/038.png ... 
+2022-11-21 14:14:04 +0000  11089 bytes for ./LFMediaEditingController.bundle/stickers/038.png
+copying file ./LFMediaEditingController.bundle/stickers/039.png ... 
+2022-11-21 14:14:04 +0000  13093 bytes for ./LFMediaEditingController.bundle/stickers/039.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/005.png ... 
+2022-11-21 14:14:04 +0000  11071 bytes for ./LFMediaEditingController.bundle/stickers/005.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/011.png ... 
+2022-11-21 14:14:04 +0000  30937 bytes for ./LFMediaEditingController.bundle/stickers/011.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/007.png ... 
+2022-11-21 14:14:04 +0000  2450 bytes for ./LFMediaEditingController.bundle/stickers/007.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/013.png ... 
+2022-11-21 14:14:04 +0000  4489 bytes for ./LFMediaEditingController.bundle/stickers/013.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/012.png ... 
+2022-11-21 14:14:04 +0000  10848 bytes for ./LFMediaEditingController.bundle/stickers/012.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/006.png ... 
+2022-11-21 14:14:04 +0000  1673 bytes for ./LFMediaEditingController.bundle/stickers/006.png
+copying file ./LFMediaEditingController.bundle/stickers/048.png ... 
+2022-11-21 14:14:04 +0000  154931 bytes for ./LFMediaEditingController.bundle/stickers/048.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/040.png ... 
+2022-11-21 14:14:04 +0000  9850 bytes for ./LFMediaEditingController.bundle/stickers/040.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/041.png ... 
+2022-11-21 14:14:04 +0000  16289 bytes for ./LFMediaEditingController.bundle/stickers/041.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/043.png ... 
+2022-11-21 14:14:04 +0000  20973 bytes for ./LFMediaEditingController.bundle/stickers/043.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/042.png ... 
+2022-11-21 14:14:04 +0000  13207 bytes for ./LFMediaEditingController.bundle/stickers/042.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/046.png ... 
+2022-11-21 14:14:04 +0000  17335 bytes for ./LFMediaEditingController.bundle/stickers/046.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/047.png ... 
+2022-11-21 14:14:04 +0000  168510 bytes for ./LFMediaEditingController.bundle/stickers/047.png
+copying file ./LFMediaEditingController.bundle/stickers/045.png ... 
+2022-11-21 14:14:04 +0000  56087 bytes for ./LFMediaEditingController.bundle/stickers/045.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/044.png ... 
+2022-11-21 14:14:04 +0000  17846 bytes for ./LFMediaEditingController.bundle/stickers/044.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/023.png ... 
+2022-11-21 14:14:04 +0000  21646 bytes for ./LFMediaEditingController.bundle/stickers/023.png
+copying file ./LFMediaEditingController.bundle/stickers/037.png ... 
+2022-11-21 14:14:04 +0000  14899 bytes for ./LFMediaEditingController.bundle/stickers/037.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/036.png ... 
+2022-11-21 14:14:04 +0000  11932 bytes for ./LFMediaEditingController.bundle/stickers/036.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/022.png ... 
+2022-11-21 14:14:04 +0000  10855 bytes for ./LFMediaEditingController.bundle/stickers/022.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/008.png ... 
+2022-11-21 14:14:04 +0000  13539 bytes for ./LFMediaEditingController.bundle/stickers/008.png
+copying file ./LFMediaEditingController.bundle/stickers/034.png ... 
+2022-11-21 14:14:04 +0000  17132 bytes for ./LFMediaEditingController.bundle/stickers/034.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/020.png ... 
+2022-11-21 14:14:04 +0000  6481 bytes for ./LFMediaEditingController.bundle/stickers/020.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/021.png ... 
+2022-11-21 14:14:04 +0000  8710 bytes for ./LFMediaEditingController.bundle/stickers/021.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/035.png ... 
+2022-11-21 14:14:04 +0000  4627 bytes for ./LFMediaEditingController.bundle/stickers/035.png
+copying file ./LFMediaEditingController.bundle/stickers/009.png ... 
+2022-11-21 14:14:04 +0000  15121 bytes for ./LFMediaEditingController.bundle/stickers/009.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/031.png ... 
+2022-11-21 14:14:04 +0000  13639 bytes for ./LFMediaEditingController.bundle/stickers/031.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/025.png ... 
+2022-11-21 14:14:04 +0000  12670 bytes for ./LFMediaEditingController.bundle/stickers/025.png
+copying file ./LFMediaEditingController.bundle/stickers/019.png ... 
+2022-11-21 14:14:04 +0000  3857 bytes for ./LFMediaEditingController.bundle/stickers/019.png
+copying file ./LFMediaEditingController.bundle/stickers/018.png ... 
+2022-11-21 14:14:04 +0000  4926 bytes for ./LFMediaEditingController.bundle/stickers/018.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/024.png ... 
+2022-11-21 14:14:04 +0000  22627 bytes for ./LFMediaEditingController.bundle/stickers/024.png
+copying file ./LFMediaEditingController.bundle/stickers/030.png ... 
+2022-11-21 14:14:04 +0000  4709 bytes for ./LFMediaEditingController.bundle/stickers/030.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/026.png ... 
+2022-11-21 14:14:04 +0000  2316 bytes for ./LFMediaEditingController.bundle/stickers/026.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/032.png ... 
+2022-11-21 14:14:04 +0000  17418 bytes for ./LFMediaEditingController.bundle/stickers/032.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/stickers/033.png ... 
+2022-11-21 14:14:04 +0000  12515 bytes for ./LFMediaEditingController.bundle/stickers/033.png
+copying file ./LFMediaEditingController.bundle/stickers/027.png ... 
+2022-11-21 14:14:04 +0000  17781 bytes for ./LFMediaEditingController.bundle/stickers/027.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageTextAlignmentLeft@2x.png ... 
+2022-11-21 14:14:04 +0000  1129 bytes for ./LFMediaEditingController.bundle/EditImageTextAlignmentLeft@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImagePenTool_Fluorescent@2x.png ... 
+2022-11-21 14:14:04 +0000  1710 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Fluorescent@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenToolBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  361 bytes for ./LFMediaEditingController.bundle/EditImagePenToolBtn@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditVideoCropToolBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  123 bytes for ./LFMediaEditingController.bundle/EditVideoCropToolBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTextAlignmentCenter@2x.png ... 
+2022-11-21 14:14:04 +0000  1178 bytes for ./LFMediaEditingController.bundle/EditImageTextAlignmentCenter@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageStickRemove_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  13592 bytes for ./LFMediaEditingController.bundle/EditImageStickRemove_HL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/StickerZoomingViewCircle@2x.png ... 
+2022-11-21 14:14:04 +0000  753 bytes for ./LFMediaEditingController.bundle/StickerZoomingViewCircle@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Highlight_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  2365 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Highlight_HL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageCropToolBtn_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  125 bytes for ./LFMediaEditingController.bundle/EditImageCropToolBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/AlbumCommentLine@2x.png ... 
+2022-11-21 14:14:04 +0000  89 bytes for ./LFMediaEditingController.bundle/AlbumCommentLine@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageTextAlignmentLeft_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  1696 bytes for ./LFMediaEditingController.bundle/EditImageTextAlignmentLeft_HL@2x.png
+copying file ./LFMediaEditingController.bundle/StickerDisplayFail@2x.png ... 
+2022-11-21 14:14:04 +0000  11653 bytes for ./LFMediaEditingController.bundle/StickerDisplayFail@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageTextAlignmentRight_HL@2x.png ... 
+1677 bytes for ./LFMediaEditingController.bundle/EditImageTextAlignmentRight_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageEmotionToolBtn_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  482 bytes for ./LFMediaEditingController.bundle/EditImageEmotionToolBtn_HL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImagePenTool_Eraser_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  2047 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Eraser_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Paint_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  2824 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Paint_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageRevokeBtn@2x.png ... 
+390 bytes for ./LFMediaEditingController.bundle/EditImageRevokeBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageFilterToolBtn@2x.png ... 
+773 bytes for ./LFMediaEditingController.bundle/EditImageFilterToolBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageBrushBlurryBtn@2x.png ... 
+1625 bytes for ./LFMediaEditingController.bundle/EditImageBrushBlurryBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Chalk@2x.png ... 
+923 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Chalk@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageConfirmBtn_HL@2x.png ... 
+466 bytes for ./LFMediaEditingController.bundle/EditImageConfirmBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageCancelBtn_HL@2x.png ... 
+244 bytes for ./LFMediaEditingController.bundle/EditImageCancelBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageCropToolBtn@2x.png ... 
+125 bytes for ./LFMediaEditingController.bundle/EditImageCropToolBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditVideoCropToolBtn_HL@2x.png ... 
+123 bytes for ./LFMediaEditingController.bundle/EditVideoCropToolBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageConfirmBtn@2x.png ... 
+461 bytes for ./LFMediaEditingController.bundle/EditImageConfirmBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageRevokeBtn_HL@2x.png ... 
+330 bytes for ./LFMediaEditingController.bundle/EditImageRevokeBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageRateToolBtn@2x.png ... 
+667 bytes for ./LFMediaEditingController.bundle/EditImageRateToolBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageWaterDrop@2x.png ... 
+514 bytes for ./LFMediaEditingController.bundle/EditImageWaterDrop@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageBrushBlurryBtn_HL@2x.png ... 
+2314 bytes for ./LFMediaEditingController.bundle/EditImageBrushBlurryBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn@2x.png ... 
+112 bytes for ./LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTextBG_HL@2x.png ... 
+1055 bytes for ./LFMediaEditingController.bundle/EditImageTextBG_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTextToolBtn_HL@2x.png ... 
+130 bytes for ./LFMediaEditingController.bundle/EditImageTextToolBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Highlight@2x.png ... 
+1277 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Highlight@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageAudioToolBtn_HL@2x.png ... 
+564 bytes for ./LFMediaEditingController.bundle/EditImageAudioToolBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Chalk_HL@2x.png ... 
+1619 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Chalk_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn_HL@2x.png ... 
+112 bytes for ./LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageRateToolBtn_HL@2x.png ... 
+630 bytes for ./LFMediaEditingController.bundle/EditImageRateToolBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Stamp@2x.png ... 
+1456 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Stamp@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageFilterToolBtn_HL@2x.png ... 
+749 bytes for ./LFMediaEditingController.bundle/EditImageFilterToolBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageCancelBtn@2x.png ... 
+244 bytes for ./LFMediaEditingController.bundle/EditImageCancelBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTextBG@2x.png ... 
+474 bytes for ./LFMediaEditingController.bundle/EditImageTextBG@2x.pn
+2022-11-21 14:14:04 +0000  g
+copying file ./LFMediaEditingController.bundle/EditImageTextAlignmentRight@2x.png ... 
+1138 bytes for ./LFMediaEditingController.bundle/EditImageTextAlignmentRight@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Paint@2x.png ... 
+1447 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Paint@2x.png
+copying file ./LFMediaEditingController.bundle/brush/fruit/5@2x.png ... 
+22705 bytes for ./LFMediaEditingController.bundle/brush/fruit/5@2x.png
+copying file ./LFMediaEditingController.bundle/brush/fruit/1@2x.png ... 
+2022-11-21 14:14:04 +0000  20558 bytes for ./LFMediaEditingController.bundle/brush/fruit/1@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/fruit/3@2x.png ... 
+2022-11-21 14:14:04 +0000  24359 bytes for ./LFMediaEditingController.bundle/brush/fruit/3@2x.png
+copying file ./LFMediaEditingController.bundle/brush/fruit/6@2x.png ... 
+2022-11-21 14:14:04 +0000  21031 bytes for ./LFMediaEditingController.bundle/brush/fruit/6@2x.png
+copying file ./LFMediaEditingController.bundle/brush/fruit/4@2x.png ... 
+2022-11-21 14:14:04 +0000  21530 bytes for ./LFMediaEditingController.bundle/brush/fruit/4@2x.png
+copying file ./LFMediaEditingController.bundle/brush/fruit/2@2x.png ... 
+2022-11-21 14:14:04 +0000  23461 bytes for ./LFMediaEditingController.bundle/brush/fruit/2@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/EditImageStampBrushHeart@2x.png ... 
+2022-11-21 14:14:04 +0000  12914 bytes for ./LFMediaEditingController.bundle/brush/EditImageStampBrushHeart@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/heart/5@2x.png ... 
+2022-11-21 14:14:04 +0000  20030 bytes for ./LFMediaEditingController.bundle/brush/heart/5@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/heart/1@2x.png ... 
+2022-11-21 14:14:04 +0000  24897 bytes for ./LFMediaEditingController.bundle/brush/heart/1@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/heart/3@2x.png ... 
+2022-11-21 14:14:04 +0000  28008 bytes for ./LFMediaEditingController.bundle/brush/heart/3@2x.png
+copying file ./LFMediaEditingController.bundle/brush/heart/4@2x.png ... 
+2022-11-21 14:14:04 +0000  19321 bytes for ./LFMediaEditingController.bundle/brush/heart/4@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/heart/2@2x.png ... 
+2022-11-21 14:14:04 +0000  25859 bytes for ./LFMediaEditingController.bundle/brush/heart/2@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/EditImageStampBrushAnimal@2x.png ... 
+2022-11-21 14:14:04 +0000  11521 bytes for ./LFMediaEditingController.bundle/brush/EditImageStampBrushAnimal@2x.png
+copying file ./LFMediaEditingController.bundle/brush/EditImageChalkBrush@2x.png ... 
+2022-11-21 14:14:04 +0000  4008 bytes for ./LFMediaEditingController.bundle/brush/EditImageChalkBrush@2x.png
+copying file ./LFMediaEditingController.bundle/brush/animal/5@2x.png ... 
+2022-11-21 14:14:04 +0000  13174 bytes for ./LFMediaEditingController.bundle/brush/animal/5@2x.png
+copying file ./LFMediaEditingController.bundle/brush/animal/1@2x.png ... 
+2022-11-21 14:14:04 +0000  11561 bytes for ./LFMediaEditingController.bundle/brush/animal/1@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/animal/3@2x.png ... 
+2022-11-21 14:14:04 +0000  14860 bytes for ./LFMediaEditingController.bundle/brush/animal/3@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/animal/4@2x.png ... 
+2022-11-21 14:14:04 +0000  12720 bytes for ./LFMediaEditingController.bundle/brush/animal/4@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/animal/2@2x.png ... 
+2022-11-21 14:14:04 +0000  10907 bytes for ./LFMediaEditingController.bundle/brush/animal/2@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/EditImageSmearBrush@2x.png ... 
+2022-11-21 14:14:04 +0000  6042 bytes for ./LFMediaEditingController.bundle/brush/EditImageSmearBrush@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/brush/EditImageStampBrushFruit@2x.png ... 
+2022-11-21 14:14:04 +0000  12651 bytes for ./LFMediaEditingController.bundle/brush/EditImageStampBrushFruit@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageMosaicToolBtn_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  138 bytes for ./LFMediaEditingController.bundle/EditImageMosaicToolBtn_HL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageTextStyle@2x.png ... 
+2022-11-21 14:14:04 +0000  172 bytes for ./LFMediaEditingController.bundle/EditImageTextStyle@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenToolBtn_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  363 bytes for ./LFMediaEditingController.bundle/EditImagePenToolBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageStickRemove@2x.png ... 
+2022-11-21 14:14:04 +0000  8857 bytes for ./LFMediaEditingController.bundle/EditImageStickRemove@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageTextToolBtn@2x.png ... 
+130 bytes for ./LFMediaEditingController.bundle/EditImageTextToolBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageBrushMosaicBtn_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  854 bytes for ./LFMediaEditingController.bundle/EditImageBrushMosaicBtn_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTextAlignmentCenter_HL@2x.png ... 
+1737 bytes for ./LFMediaEditingController.bundle/EditImageTextAlignmentCenter_HL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageBrushMosaicBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  871 bytes for ./LFMediaEditingController.bundle/EditImageBrushMosaicBtn@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTextFont_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  2807 bytes for ./LFMediaEditingController.bundle/EditImageTextFont_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Stamp_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  2688 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Stamp_HL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImagePenTool_Eraser@2x.png ... 
+2022-11-21 14:14:04 +0000  1112 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Eraser@2x.png
+copying file ./LFMediaEditingController.bundle/EditImagePenTool_Fluorescent_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  3511 bytes for ./LFMediaEditingController.bundle/EditImagePenTool_Fluorescent_HL@2x.png
+copying file ./LFMediaEditingController.bundle/LFMediaEditingController.strings ... 
+2022-11-21 14:14:04 +0000  1950 bytes for ./LFMediaEditingController.bundle/LFMediaEditingController.strings
+copying file ./LFMediaEditingController.bundle/StickerZoomingViewDelete@2x.png ... 
+2022-11-21 14:14:04 +0000  827 bytes for ./LFMediaEditingController.bundle/StickerZoomingViewDelete@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/StickerDisplayPlaceholder@2x.png ... 
+2022-11-21 14:14:04 +0000  9910 bytes for ./LFMediaEditingController.bundle/StickerDisplayPlaceholder@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFMediaEditingController.bundle/EditImageTextStyle_HL@2x.png ... 
+2022-11-21 14:14:04 +0000  169 bytes for ./LFMediaEditingController.bundle/EditImageTextStyle_HL@2x.png
+copying file ./LFMediaEditingController.bundle/EditImageTextFont@2x.png ... 
+2022-11-21 14:14:04 +0000  1484 bytes for ./LFMediaEditingController.bundle/EditImageTextFont@2x.png
+2022-11-21 14:14:04 +0000  copying file ./MJRefresh.bundle/zh-Hans.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1368 bytes for ./MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./MJRefresh.bundle/en.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1374 bytes for ./MJRefresh.bundle/en.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./MJRefresh.bundle/uk.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1534 bytes for ./MJRefresh.bundle/uk.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./MJRefresh.bundle/arrow@2x.png ... 
+2022-11-21 14:14:04 +0000  1033 bytes for ./MJRefresh.bundle/arrow@2x.png
+2022-11-21 14:14:04 +0000  copying file ./MJRefresh.bundle/ko.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  771 bytes for ./MJRefresh.bundle/ko.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./MJRefresh.bundle/zh-Hant.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  891 bytes for ./MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./MJRefresh.bundle/trail_arrow@2x.png ... 
+2022-11-21 14:14:04 +0000  2322 bytes for ./MJRefresh.bundle/trail_arrow@2x.png
+copying file ./MJRefresh.bundle/ru.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1502 bytes for ./MJRefresh.bundle/ru.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./examineAdd6.plist ... 
+2022-11-21 14:14:04 +0000  1090 bytes for ./examineAdd6.plist
+copying file ./LaunchImage-568h@2x.png ... 
+2022-11-21 14:14:04 +0000  67344 bytes for ./LaunchImage-568h@2x.png
+2022-11-21 14:14:04 +0000  copying file ./AppIcon60x60@2x.png ... 
+2022-11-21 14:14:04 +0000  24225 bytes for ./AppIcon60x60@2x.png
+copying file ./issueAdd.plist ... 
+2022-11-21 14:14:04 +0000  454 bytes for ./issueAdd.plist
+2022-11-21 14:14:04 +0000  copying file ./examineAdd1.plist ... 
+2022-11-21 14:14:04 +0000  701 bytes for ./examineAdd1.plist
+copying file ./examineAdd3.plist ... 
+2022-11-21 14:14:04 +0000  656 bytes for ./examineAdd3.plist
+2022-11-21 14:14:04 +0000  copying file ./LXFCameraController.nib ... 
+2022-11-21 14:14:04 +0000  5208 bytes for ./LXFCameraController.nib
+2022-11-21 14:14:04 +0000  copying file ./LFEasyNoticeBar.bundle/error@2x.png ... 
+2022-11-21 14:14:04 +0000  2274 bytes for ./LFEasyNoticeBar.bundle/error@2x.png
+copying file ./LFEasyNoticeBar.bundle/warning@2x.png ... 
+2022-11-21 14:14:04 +0000  1961 bytes for ./LFEasyNoticeBar.bundle/warning@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFEasyNoticeBar.bundle/success@2x.png ... 
+2022-11-21 14:14:04 +0000  2537 bytes for ./LFEasyNoticeBar.bundle/success@2x.png
+copying file ./LFEasyNoticeBar.bundle/info@2x.png ... 
+2022-11-21 14:14:04 +0000  1814 bytes for ./LFEasyNoticeBar.bundle/info@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LaunchImage-800-667h@2x.png ... 
+2022-11-21 14:14:04 +0000  87737 bytes for ./LaunchImage-800-667h@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/de.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1909 bytes for ./TZImagePickerController.bundle/de.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/ar.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  2237 bytes for ./TZImagePickerController.bundle/ar.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/takePicture@2x.png ... 
+2022-11-21 14:14:04 +0000  3054 bytes for ./TZImagePickerController.bundle/takePicture@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  2892 bytes for ./TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/ja.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  2127 bytes for ./TZImagePickerController.bundle/ja.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/photo_sel_photoPickerVc@2x.png ... 
+2022-11-21 14:14:04 +0000  1006 bytes for ./TZImagePickerController.bundle/photo_sel_photoPickerVc@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/en.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  3760 bytes for ./TZImagePickerController.bundle/en.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png ... 
+2022-11-21 14:14:04 +0000  3645 bytes for ./TZImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/es.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1857 bytes for ./TZImagePickerController.bundle/es.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/photo_sel_previewVc@2x.png ... 
+2022-11-21 14:14:04 +0000  1183 bytes for ./TZImagePickerController.bundle/photo_sel_previewVc@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/MMVideoPreviewPlay@2x.png ... 
+2022-11-21 14:14:04 +0000  3645 bytes for ./TZImagePickerController.bundle/MMVideoPreviewPlay@2x.png
+copying file ./TZImagePickerController.bundle/iCloudError@2x.png ... 
+2022-11-21 14:14:04 +0000  4394 bytes for ./TZImagePickerController.bundle/iCloudError@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/preview_original_def@2x.png ... 
+2022-11-21 14:14:04 +0000  392 bytes for ./TZImagePickerController.bundle/preview_original_def@2x.png
+copying file ./TZImagePickerController.bundle/addMore@2x.png ... 
+2022-11-21 14:14:04 +0000  643 bytes for ./TZImagePickerController.bundle/addMore@2x.png
+copying file ./TZImagePickerController.bundle/photo_def_previewVc@2x.png ... 
+2022-11-21 14:14:04 +0000  1155 bytes for ./TZImagePickerController.bundle/photo_def_previewVc@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/photo_original_sel@2x.png ... 
+2022-11-21 14:14:04 +0000  620 bytes for ./TZImagePickerController.bundle/photo_original_sel@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/ko-KP.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  2021 bytes for ./TZImagePickerController.bundle/ko-KP.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/zh-Hant.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  2892 bytes for ./TZImagePickerController.bundle/zh-Hant.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/takePicture80@2x.png ... 
+2022-11-21 14:14:04 +0000  1285 bytes for ./TZImagePickerController.bundle/takePicture80@2x.png
+copying file ./TZImagePickerController.bundle/photo_def_photoPickerVc@2x.png ... 
+2022-11-21 14:14:04 +0000  1155 bytes for ./TZImagePickerController.bundle/photo_def_photoPickerVc@2x.png
+copying file ./TZImagePickerController.bundle/right_arrow@2x.png ... 
+1259 bytes for ./TZImagePickerController.bundle/right_arrow@2x.png
+copying file ./TZImagePickerController.bundle/preview_number_icon@2x.png ... 
+501 bytes for ./TZImagePickerController.bundle/preview_number_icon@2x.png
+copying file ./TZImagePickerController.bundle/vi.lproj/Localizable.strings ... 
+2073 bytes for ./TZImagePickerController.bundle/vi.lproj/Localizable.strings
+copying file ./TZImagePickerController.bundle/navi_back@2x.png ... 
+116 bytes for ./TZImagePickerController.bundle/navi_back@2x.png
+copying file ./TZImagePickerController.bundle/ru.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  2477 bytes for ./TZImagePickerController.bundle/ru.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/photo_original_def@2x.png ... 
+2022-11-21 14:14:04 +0000  1602 bytes for ./TZImagePickerController.bundle/photo_original_def@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/fr.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1992 bytes for ./TZImagePickerController.bundle/fr.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/pt.lproj/Localizable.strings ... 
+2022-11-21 14:14:04 +0000  1876 bytes for ./TZImagePickerController.bundle/pt.lproj/Localizable.strings
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/photo_number_icon@2x.png ... 
+2022-11-21 14:14:04 +0000  501 bytes for ./TZImagePickerController.bundle/photo_number_icon@2x.png
+copying file ./TZImagePickerController.bundle/VideoSendIcon@2x.png ... 
+2022-11-21 14:14:04 +0000  223 bytes for ./TZImagePickerController.bundle/VideoSendIcon@2x.png
+2022-11-21 14:14:04 +0000  copying file ./TZImagePickerController.bundle/tip@2x.png ... 
+2022-11-21 14:14:04 +0000  671 bytes for ./TZImagePickerController.bundle/tip@2x.png
+copying file ./loading_push.json ... 
+2022-11-21 14:14:04 +0000  2601 bytes for ./loading_push.json
+2022-11-21 14:14:04 +0000  copying file ./STAR_bim365_com_cn.cer ... 
+2022-11-21 14:14:04 +0000  1633 bytes for ./STAR_bim365_com_cn.cer
+copying file ./LaunchImage-1200-Portrait-2688h@3x.png ... 
+2022-11-21 14:14:04 +0000  154463 bytes for ./LaunchImage-1200-Portrait-2688h@3x.png
+2022-11-21 14:14:04 +0000  copying file ./examineAdd5.plist ... 
+966 bytes for ./examineAdd5.plist
+2022-11-21 14:14:04 +0000  copying file ./Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib ... 
+2022-11-21 14:14:04 +0000  916 bytes for ./Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib
+2022-11-21 14:14:04 +0000  copying file ./Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib ... 
+2022-11-21 14:14:04 +0000  1173 bytes for ./Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib
+copying file ./Base.lproj/Main.storyboardc/Info.plist ... 
+2022-11-21 14:14:04 +0000  258 bytes for ./Base.lproj/Main.storyboardc/Info.plist
+2022-11-21 14:14:04 +0000  copying file ./Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib ... 
+2022-11-21 14:14:04 +0000  1173 bytes for ./Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib
+2022-11-21 14:14:04 +0000  copying file ./Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib ... 
+896 bytes for ./Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib
+2022-11-21 14:14:04 +0000  copying file ./Base.lproj/LaunchScreen.storyboardc/Info.plist ... 
+2022-11-21 14:14:04 +0000  258 bytes for ./Base.lproj/LaunchScreen.storyboardc/Info.plist
+2022-11-21 14:14:04 +0000  copying file ./loading_alone.json ... 
+2022-11-21 14:14:04 +0000  5801 bytes for ./loading_alone.json
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/takePicture@2x.png ... 
+2022-11-21 14:14:04 +0000  1588 bytes for ./LFImagePickerController.bundle/takePicture@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/video_pause@2x.png ... 
+2022-11-21 14:14:04 +0000  2209 bytes for ./LFImagePickerController.bundle/video_pause@2x.png
+copying file ./LFImagePickerController.bundle/LFImagePickerController.strings ... 
+2022-11-21 14:14:04 +0000  2572 bytes for ./LFImagePickerController.bundle/LFImagePickerController.strings
+copying file ./LFImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png ... 
+2022-11-21 14:14:04 +0000  2721 bytes for ./LFImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/MMVideoPreviewPlay@2x.png ... 
+2022-11-21 14:14:04 +0000  2733 bytes for ./LFImagePickerController.bundle/MMVideoPreviewPlay@2x.png
+copying file ./LFImagePickerController.bundle/album_list_img_default@2x.png ... 
+2022-11-21 14:14:04 +0000  696 bytes for ./LFImagePickerController.bundle/album_list_img_default@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/photo_album_def@2x.png ... 
+1966 bytes for ./LFImagePickerController.bundle/photo_album_def@2x.png
+copying file ./LFImagePickerController.bundle/titleView_arrow@2x.png ... 
+2022-11-21 14:14:04 +0000  904 bytes for ./LFImagePickerController.bundle/titleView_arrow@2x.png
+copying file ./LFImagePickerController.bundle/photo_original_sel@2x.png ... 
+2022-11-21 14:14:04 +0000  2674 bytes for ./LFImagePickerController.bundle/photo_original_sel@2x.png
+copying file ./LFImagePickerController.bundle/fileicon_piiic_wall@2x.png ... 
+2022-11-21 14:14:04 +0000  2846 bytes for ./LFImagePickerController.bundle/fileicon_piiic_wall@2x.png
+copying file ./LFImagePickerController.bundle/photo_album_sel@2x.png ... 
+2022-11-21 14:14:04 +0000  3415 bytes for ./LFImagePickerController.bundle/photo_album_sel@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/contacts_add_myablum@2x.png ... 
+2022-11-21 14:14:04 +0000  250 bytes for ./LFImagePickerController.bundle/contacts_add_myablum@2x.png
+copying file ./LFImagePickerController.bundle/fileicon_gif_wall@2x.png ... 
+2022-11-21 14:14:04 +0000  2511 bytes for ./LFImagePickerController.bundle/fileicon_gif_wall@2x.png
+copying file ./LFImagePickerController.bundle/navigationbar_back_arrow@2x.png ... 
+2022-11-21 14:14:04 +0000  455 bytes for ./LFImagePickerController.bundle/navigationbar_back_arrow@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/video_play@2x.png ... 
+2022-11-21 14:14:04 +0000  1145 bytes for ./LFImagePickerController.bundle/video_play@2x.png
+copying file ./LFImagePickerController.bundle/photo_original_def@2x.png ... 
+2022-11-21 14:14:04 +0000  1608 bytes for ./LFImagePickerController.bundle/photo_original_def@2x.png
+copying file ./LFImagePickerController.bundle/fileicon_hor_wall@2x.png ... 
+2022-11-21 14:14:04 +0000  3105 bytes for ./LFImagePickerController.bundle/fileicon_hor_wall@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/fileicon_live_wall@2x.png ... 
+2022-11-21 14:14:04 +0000  3128 bytes for ./LFImagePickerController.bundle/fileicon_live_wall@2x.png
+copying file ./LFImagePickerController.bundle/ablum_sel@2x.png ... 
+2022-11-21 14:14:04 +0000  804 bytes for ./LFImagePickerController.bundle/ablum_sel@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFImagePickerController.bundle/fileicon_video_wall@2x.png ... 
+2022-11-21 14:14:04 +0000  233 bytes for ./LFImagePickerController.bundle/fileicon_video_wall@2x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/GNaviConfig.xml ... 
+2022-11-21 14:14:04 +0000  170 bytes for ./AMap.bundle/GNaviConfig.xml
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/res.zip ... 
+2022-11-21 14:14:04 +0000  343780 bytes for ./AMap.bundle/res.zip
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/purplePin@3x.png ... 
+2022-11-21 14:14:04 +0000  2844 bytes for ./AMap.bundle/images/purplePin@3x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/arrow_line_outer.png ... 
+2022-11-21 14:14:04 +0000  1518 bytes for ./AMap.bundle/images/arrow_line_outer.png
+copying file ./AMap.bundle/images/greenPin@3x.png ... 
+2022-11-21 14:14:04 +0000  2844 bytes for ./AMap.bundle/images/greenPin@3x.png
+copying file ./AMap.bundle/images/offline_shouqi_2@2x.png ... 
+2022-11-21 14:14:04 +0000  225 bytes for ./AMap.bundle/images/offline_shouqi_2@2x.png
+copying file ./AMap.bundle/images/particle_fog.png ... 
+2022-11-21 14:14:04 +0000  86051 bytes for ./AMap.bundle/images/particle_fog.png
+copying file ./AMap.bundle/images/lineTexture.png ... 
+2022-11-21 14:14:04 +0000  2830 bytes for ./AMap.bundle/images/lineTexture.png
+copying file ./AMap.bundle/images/greenPin_lift@3x.png ... 
+2022-11-21 14:14:04 +0000  1401 bytes for ./AMap.bundle/images/greenPin_lift@3x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/greenPin_lift@2x.png ... 
+2022-11-21 14:14:04 +0000  960 bytes for ./AMap.bundle/images/greenPin_lift@2x.png
+copying file ./AMap.bundle/images/offline_shouqi@2x.png ... 
+2022-11-21 14:14:04 +0000  197 bytes for ./AMap.bundle/images/offline_shouqi@2x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/offline_zhankai@2x.png ... 
+2022-11-21 14:14:04 +0000  200 bytes for ./AMap.bundle/images/offline_zhankai@2x.png
+copying file ./AMap.bundle/images/particle_rain.png ... 
+2022-11-21 14:14:04 +0000  4954 bytes for ./AMap.bundle/images/particle_rain.png
+copying file ./AMap.bundle/images/calloutArrowMask.png ... 
+2022-11-21 14:14:04 +0000  323 bytes for ./AMap.bundle/images/calloutArrowMask.png
+copying file ./AMap.bundle/images/traffic_texture_red.png ... 
+2022-11-21 14:14:04 +0000  1097 bytes for ./AMap.bundle/images/traffic_texture_red.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/calloutArrowMask@2x.png ... 
+2022-11-21 14:14:04 +0000  572 bytes for ./AMap.bundle/images/calloutArrowMask@2x.png
+copying file ./AMap.bundle/images/greenPin@2x.png ... 
+2022-11-21 14:14:04 +0000  1893 bytes for ./AMap.bundle/images/greenPin@2x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/particle_sun_1.png ... 
+2022-11-21 14:14:04 +0000  3600 bytes for ./AMap.bundle/images/particle_sun_1.png
+copying file ./AMap.bundle/images/particle_sun_0.png ... 
+2022-11-21 14:14:04 +0000  6178 bytes for ./AMap.bundle/images/particle_sun_0.png
+copying file ./AMap.bundle/images/purplePin@2x.png ... 
+2022-11-21 14:14:04 +0000  1873 bytes for ./AMap.bundle/images/purplePin@2x.png
+copying file ./AMap.bundle/images/offline_sousuo@2x.png ... 
+2022-11-21 14:14:04 +0000  587 bytes for ./AMap.bundle/images/offline_sousuo@2x.png
+copying file ./AMap.bundle/images/select_.png ... 
+2022-11-21 14:14:04 +0000  1082 bytes for ./AMap.bundle/images/select_.png
+copying file ./AMap.bundle/images/pin_shadow.png ... 
+2022-11-21 14:14:04 +0000  609 bytes for ./AMap.bundle/images/pin_shadow.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/offline_clear@2x.png ... 
+2022-11-21 14:14:04 +0000  4107 bytes for ./AMap.bundle/images/offline_clear@2x.png
+copying file ./AMap.bundle/images/arrow_line_inner.png ... 
+2022-11-21 14:14:04 +0000  1398 bytes for ./AMap.bundle/images/arrow_line_inner.png
+copying file ./AMap.bundle/images/greenPin.png ... 
+2022-11-21 14:14:04 +0000  988 bytes for ./AMap.bundle/images/greenPin.png
+copying file ./AMap.bundle/images/offline_down@2x.png ... 
+2022-11-21 14:14:04 +0000  548 bytes for ./AMap.bundle/images/offline_down@2x.png
+copying file ./AMap.bundle/images/arrow_line_3d_shadow.png ... 
+2022-11-21 14:14:04 +0000  958 bytes for ./AMap.bundle/images/arrow_line_3d_shadow.png
+copying file ./AMap.bundle/images/purplePin_lift.png ... 
+2022-11-21 14:14:04 +0000  418 bytes for ./AMap.bundle/images/purplePin_lift.png
+copying file ./AMap.bundle/images/redPin_lift@3x.png ... 
+2022-11-21 14:14:04 +0000  1405 bytes for ./AMap.bundle/images/redPin_lift@3x.png
+copying file ./AMap.bundle/images/redPin_lift.png ... 
+2022-11-21 14:14:04 +0000  418 bytes for ./AMap.bundle/images/redPin_lift.png
+copying file ./AMap.bundle/images/particle_haze.png ... 
+2022-11-21 14:14:04 +0000  15547 bytes for ./AMap.bundle/images/particle_haze.png
+copying file ./AMap.bundle/images/lineDashTexture.png ... 
+2022-11-21 14:14:04 +0000  628 bytes for ./AMap.bundle/images/lineDashTexture.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/traffic_texture_blue.png ... 
+2022-11-21 14:14:04 +0000  1121 bytes for ./AMap.bundle/images/traffic_texture_blue.png
+copying file ./AMap.bundle/images/traffic_texture_green.png ... 
+2022-11-21 14:14:04 +0000  1065 bytes for ./AMap.bundle/images/traffic_texture_green.png
+copying file ./AMap.bundle/images/traffic_texture_yellow.png ... 
+2022-11-21 14:14:04 +0000  1076 bytes for ./AMap.bundle/images/traffic_texture_yellow.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/marker_blue@2x.png ... 
+2022-11-21 14:14:04 +0000  2547 bytes for ./AMap.bundle/images/marker_blue@2x.png
+copying file ./AMap.bundle/images/arrow_line_3d_outer.png ... 
+2022-11-21 14:14:04 +0000  347 bytes for ./AMap.bundle/images/arrow_line_3d_outer.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/purplePin.png ... 
+2022-11-21 14:14:04 +0000  988 bytes for ./AMap.bundle/images/purplePin.png
+copying file ./AMap.bundle/images/redPin_lift@2x.png ... 
+2022-11-21 14:14:04 +0000  955 bytes for ./AMap.bundle/images/redPin_lift@2x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/particle_snow.png ... 
+2022-11-21 14:14:04 +0000  17148 bytes for ./AMap.bundle/images/particle_snow.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/traffic_texture_darkred.png ... 
+2022-11-21 14:14:04 +0000  947 bytes for ./AMap.bundle/images/traffic_texture_darkred.png
+copying file ./AMap.bundle/images/select_@3x.png ... 
+2162 bytes for ./AMap.bundle/images/select_@3x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/lineDashTextureDot.png ... 
+1400 bytes for ./AMap.bundle/images/lineDashTextureDot.png
+copying file ./AMap.bundle/images/pin_shadow@2x.png ... 
+1155 bytes for ./AMap.bundle/images/pin_shadow@2x.png
+copying file ./AMap.bundle/images/redPin@3x.png ... 
+2022-11-21 14:14:04 +0000  2848 bytes for ./AMap.bundle/images/redPin@3x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/purplePin_lift@2x.png ... 
+2022-11-21 14:14:04 +0000  960 bytes for ./AMap.bundle/images/purplePin_lift@2x.png
+copying file ./AMap.bundle/images/purplePin_lift@3x.png ... 
+2022-11-21 14:14:04 +0000  1406 bytes for ./AMap.bundle/images/purplePin_lift@3x.png
+copying file ./AMap.bundle/images/lineTextureThin.png ... 
+2022-11-21 14:14:04 +0000  554 bytes for ./AMap.bundle/images/lineTextureThin.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/redPin@2x.png ... 
+2022-11-21 14:14:04 +0000  1878 bytes for ./AMap.bundle/images/redPin@2x.png
+copying file ./AMap.bundle/images/offline_zhankai_2@2x.png ... 
+2022-11-21 14:14:04 +0000  227 bytes for ./AMap.bundle/images/offline_zhankai_2@2x.png
+copying file ./AMap.bundle/images/pin_shadow@3x.png ... 
+2022-11-21 14:14:04 +0000  1817 bytes for ./AMap.bundle/images/pin_shadow@3x.png
+copying file ./AMap.bundle/images/traffic_texture_gray.png ... 
+2022-11-21 14:14:04 +0000  1049 bytes for ./AMap.bundle/images/traffic_texture_gray.png
+copying file ./AMap.bundle/images/arrow_line_3d_inner.png ... 
+2022-11-21 14:14:04 +0000  441 bytes for ./AMap.bundle/images/arrow_line_3d_inner.png
+copying file ./AMap.bundle/images/redPin.png ... 
+2022-11-21 14:14:04 +0000  986 bytes for ./AMap.bundle/images/redPin.png
+copying file ./AMap.bundle/images/select_@2x.png ... 
+2022-11-21 14:14:04 +0000  1082 bytes for ./AMap.bundle/images/select_@2x.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/images/marker_blue.png ... 
+2022-11-21 14:14:04 +0000  1972 bytes for ./AMap.bundle/images/marker_blue.png
+copying file ./AMap.bundle/images/greenPin_lift.png ... 
+2022-11-21 14:14:04 +0000  425 bytes for ./AMap.bundle/images/greenPin_lift.png
+copying file ./AMap.bundle/offline/offlinePackage.plist ... 
+2022-11-21 14:14:04 +0000  108395 bytes for ./AMap.bundle/offline/offlinePackage.plist
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data ... 
+2022-11-21 14:14:04 +0000  1823 bytes for ./AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data
+copying file ./AMap.bundle/AMap3D.bundle/dash.data ... 
+2022-11-21 14:14:04 +0000  241 bytes for ./AMap.bundle/AMap3D.bundle/dash.data
+copying file ./AMap.bundle/AMap3D.bundle/icons_7_16_1560344652.data ... 
+2022-11-21 14:14:04 +0000  23596 bytes for ./AMap.bundle/AMap3D.bundle/icons_7_16_1560344652.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png ... 
+2022-11-21 14:14:04 +0000  82 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png ... 
+2022-11-21 14:14:04 +0000  17123 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png ... 
+2022-11-21 14:14:04 +0000  15480 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png ... 
+2022-11-21 14:14:04 +0000  107287 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png ... 
+2022-11-21 14:14:04 +0000  1523 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/1016_1.png ... 
+2022-11-21 14:14:04 +0000  370 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/1016_1.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/1016_2.png ... 
+2022-11-21 14:14:04 +0000  297 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/1016_2.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png ... 
+2022-11-21 14:14:04 +0000  15480 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png ... 
+2022-11-21 14:14:04 +0000  179 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png ... 
+2022-11-21 14:14:04 +0000  82 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/1015_1.png ... 
+2022-11-21 14:14:04 +0000  1094 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/1015_1.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png ... 
+2022-11-21 14:14:04 +0000  79787 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png ... 
+2022-11-21 14:14:04 +0000  99 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/1015_2.png ... 
+2022-11-21 14:14:04 +0000  108 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/1015_2.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png ... 
+2022-11-21 14:14:04 +0000  175 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png ... 
+2022-11-21 14:14:04 +0000  20699 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png ... 
+2022-11-21 14:14:04 +0000  1523 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png
+copying file ./AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png ... 
+2022-11-21 14:14:04 +0000  82 bytes for ./AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png
+copying file ./AMap.bundle/AMap3D.bundle/icons_3_16_1560517561.data ... 
+2022-11-21 14:14:04 +0000  32309 bytes for ./AMap.bundle/AMap3D.bundle/icons_3_16_1560517561.data
+copying file ./AMap.bundle/AMap3D.bundle/style_5_16_1561711250.data ... 
+2022-11-21 14:14:04 +0000  8775 bytes for ./AMap.bundle/AMap3D.bundle/style_5_16_1561711250.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/bktile_n.data ... 
+2022-11-21 14:14:04 +0000  109 bytes for ./AMap.bundle/AMap3D.bundle/bktile_n.data
+copying file ./AMap.bundle/AMap3D.bundle/bktile.data ... 
+2022-11-21 14:14:04 +0000  109 bytes for ./AMap.bundle/AMap3D.bundle/bktile.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/icons_9_16_1560344664.data ... 
+2022-11-21 14:14:04 +0000  51159 bytes for ./AMap.bundle/AMap3D.bundle/icons_9_16_1560344664.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/icons_6_16_1560344646.data ... 
+2022-11-21 14:14:04 +0000  26238 bytes for ./AMap.bundle/AMap3D.bundle/icons_6_16_1560344646.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/3dportrait.xml ... 
+2022-11-21 14:14:04 +0000  4336 bytes for ./AMap.bundle/AMap3D.bundle/3dportrait.xml
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/3dlandscape.xml ... 
+2022-11-21 14:14:04 +0000  4336 bytes for ./AMap.bundle/AMap3D.bundle/3dlandscape.xml
+copying file ./AMap.bundle/AMap3D.bundle/style_17_16_1561023816.data ... 
+2022-11-21 14:14:04 +0000  273 bytes for ./AMap.bundle/AMap3D.bundle/style_17_16_1561023816.data
+copying file ./AMap.bundle/AMap3D.bundle/dash_cd.data ... 
+1034 bytes for ./AMap.bundle/AMap3D.bundle/dash_cd.data
+copying file ./AMap.bundle/AMap3D.bundle/style_100_16_1561026477.data ... 
+2022-11-21 14:14:04 +0000  4365 bytes for ./AMap.bundle/AMap3D.bundle/style_100_16_1561026477.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/search_scenic_icon.data ... 
+2022-11-21 14:14:04 +0000  38112 bytes for ./AMap.bundle/AMap3D.bundle/search_scenic_icon.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/3d_sky_day.data ... 
+2022-11-21 14:14:04 +0000  57143 bytes for ./AMap.bundle/AMap3D.bundle/3d_sky_day.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/roadarrow.data ... 
+2022-11-21 14:14:04 +0000  446 bytes for ./AMap.bundle/AMap3D.bundle/roadarrow.data
+copying file ./AMap.bundle/AMap3D.bundle/icons_25_16_1560344307.data ... 
+2022-11-21 14:14:04 +0000  17677 bytes for ./AMap.bundle/AMap3D.bundle/icons_25_16_1560344307.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/icons_2_16_1560344131.data ... 
+2022-11-21 14:14:04 +0000  28474 bytes for ./AMap.bundle/AMap3D.bundle/icons_2_16_1560344131.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/style_4_16_1561711243.data ... 
+2022-11-21 14:14:04 +0000  8711 bytes for ./AMap.bundle/AMap3D.bundle/style_4_16_1561711243.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/style_3_16_1561987623.data ... 
+2022-11-21 14:14:04 +0000  13005 bytes for ./AMap.bundle/AMap3D.bundle/style_3_16_1561987623.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/waterline.data ... 
+2022-11-21 14:14:04 +0000  148 bytes for ./AMap.bundle/AMap3D.bundle/waterline.data
+copying file ./AMap.bundle/AMap3D.bundle/building.data ... 
+2022-11-21 14:14:04 +0000  996 bytes for ./AMap.bundle/AMap3D.bundle/building.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/tmc_n_allinone.data ... 
+2022-11-21 14:14:04 +0000  256 bytes for ./AMap.bundle/AMap3D.bundle/tmc_n_allinone.data
+copying file ./AMap.bundle/AMap3D.bundle/config_2_16_1560339691.data ... 
+2022-11-21 14:14:04 +0000  207 bytes for ./AMap.bundle/AMap3D.bundle/config_2_16_1560339691.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/tmc_allinone.data ... 
+2022-11-21 14:14:04 +0000  1171 bytes for ./AMap.bundle/AMap3D.bundle/tmc_allinone.data
+copying file ./AMap.bundle/AMap3D.bundle/crossing_nigth_bk.data ... 
+2022-11-21 14:14:04 +0000  18794 bytes for ./AMap.bundle/AMap3D.bundle/crossing_nigth_bk.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/styleiconslist.data ... 
+868 bytes for ./AMap.bundle/AMap3D.bundle/styleiconslist.data
+copying file ./AMap.bundle/AMap3D.bundle/3d_sky_night.data ... 
+2022-11-21 14:14:04 +0000  49684 bytes for ./AMap.bundle/AMap3D.bundle/3d_sky_night.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/lineround.data ... 
+2022-11-21 14:14:04 +0000  450 bytes for ./AMap.bundle/AMap3D.bundle/lineround.data
+copying file ./AMap.bundle/AMap3D.bundle/mapprofile_1_16_1560563265.data ... 
+2022-11-21 14:14:04 +0000  1779 bytes for ./AMap.bundle/AMap3D.bundle/mapprofile_1_16_1560563265.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/style_6_16_1562032423.data ... 
+2022-11-21 14:14:04 +0000  16123 bytes for ./AMap.bundle/AMap3D.bundle/style_6_16_1562032423.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/style_0_16_1561381751.data ... 
+2022-11-21 14:14:04 +0000  6619 bytes for ./AMap.bundle/AMap3D.bundle/style_0_16_1561381751.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/icons_8_16_1560344658.data ... 
+2022-11-21 14:14:04 +0000  16283 bytes for ./AMap.bundle/AMap3D.bundle/icons_8_16_1560344658.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/icons_4_16_1560344142.data ... 
+2022-11-21 14:14:04 +0000  29374 bytes for ./AMap.bundle/AMap3D.bundle/icons_4_16_1560344142.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/mapprofile_2_16_1560563265.data ... 
+2022-11-21 14:14:04 +0000  1768 bytes for ./AMap.bundle/AMap3D.bundle/mapprofile_2_16_1560563265.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/style_50_16_1501671321.data ... 
+2022-11-21 14:14:04 +0000  1606 bytes for ./AMap.bundle/AMap3D.bundle/style_50_16_1501671321.data
+copying file ./AMap.bundle/AMap3D.bundle/tmc_l_allinone.data ... 
+2022-11-21 14:14:04 +0000  1305 bytes for ./AMap.bundle/AMap3D.bundle/tmc_l_allinone.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/yunqian.png ... 
+2022-11-21 14:14:04 +0000  90355 bytes for ./AMap.bundle/AMap3D.bundle/weather/yunqian.png
+copying file ./AMap.bundle/AMap3D.bundle/weather/rainmask.png ... 
+2022-11-21 14:14:04 +0000  96 bytes for ./AMap.bundle/AMap3D.bundle/weather/rainmask.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/fog.png ... 
+2022-11-21 14:14:04 +0000  86051 bytes for ./AMap.bundle/AMap3D.bundle/weather/fog.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/shanbai.png ... 
+2022-11-21 14:14:04 +0000  5057 bytes for ./AMap.bundle/AMap3D.bundle/weather/shanbai.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/haze.png ... 
+2022-11-21 14:14:04 +0000  15547 bytes for ./AMap.bundle/AMap3D.bundle/weather/haze.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/snow.png ... 
+2022-11-21 14:14:04 +0000  17148 bytes for ./AMap.bundle/AMap3D.bundle/weather/snow.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/snow_far.png ... 
+2022-11-21 14:14:04 +0000  17637 bytes for ./AMap.bundle/AMap3D.bundle/weather/snow_far.png
+copying file ./AMap.bundle/AMap3D.bundle/weather/snowmask.png ... 
+2022-11-21 14:14:04 +0000  21837 bytes for ./AMap.bundle/AMap3D.bundle/weather/snowmask.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/yunhou.png ... 
+2022-11-21 14:14:04 +0000  149750 bytes for ./AMap.bundle/AMap3D.bundle/weather/yunhou.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/weather/shandianyun.png ... 
+2022-11-21 14:14:04 +0000  58874 bytes for ./AMap.bundle/AMap3D.bundle/weather/shandianyun.png
+copying file ./AMap.bundle/AMap3D.bundle/weather/rain.png ... 
+2022-11-21 14:14:04 +0000  3196 bytes for ./AMap.bundle/AMap3D.bundle/weather/rain.png
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/config_1_16_1560339683.data ... 
+2022-11-21 14:14:04 +0000  489 bytes for ./AMap.bundle/AMap3D.bundle/config_1_16_1560339683.data
+copying file ./AMap.bundle/AMap3D.bundle/dash_tq.data ... 
+2022-11-21 14:14:04 +0000  249 bytes for ./AMap.bundle/AMap3D.bundle/dash_tq.data
+copying file ./AMap.bundle/AMap3D.bundle/icons_50_16_1541648499.data ... 
+2022-11-21 14:14:04 +0000  25385 bytes for ./AMap.bundle/AMap3D.bundle/icons_50_16_1541648499.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/icons-for_custom_5_14.data ... 
+2022-11-21 14:14:04 +0000  2628 bytes for ./AMap.bundle/AMap3D.bundle/icons-for_custom_5_14.data
+copying file ./AMap.bundle/AMap3D.bundle/icons_1_16_1561444603.data ... 
+2022-11-21 14:14:04 +0000  29587 bytes for ./AMap.bundle/AMap3D.bundle/icons_1_16_1561444603.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/style_1_16_1562032355.data ... 
+2022-11-21 14:14:04 +0000  18639 bytes for ./AMap.bundle/AMap3D.bundle/style_1_16_1562032355.data
+2022-11-21 14:14:04 +0000  copying file ./AMap.bundle/AMap3D.bundle/icons_5_16_1561028345.data ... 
+2022-11-21 14:14:04 +0000  65548 bytes for ./AMap.bundle/AMap3D.bundle/icons_5_16_1561028345.data
+copying file ./AMap.bundle/AMap3D.bundle/style-for_custom_0_16_1561381751.data ... 
+2022-11-21 14:14:04 +0000  6609 bytes for ./AMap.bundle/AMap3D.bundle/style-for_custom_0_16_1561381751.data
+copying file ./AMap.bundle/AMap3D.bundle/crossing_day_bk.data ... 
+2022-11-21 14:14:04 +0000  25317 bytes for ./AMap.bundle/AMap3D.bundle/crossing_day_bk.data
+2022-11-21 14:14:04 +0000  copying file ./Assets.car ... 
+2022-11-21 14:14:04 +0000  4779640 bytes for ./Assets.car
+copying file ./AppIcon76x76@2x~ipad.png ... 
+2022-11-21 14:14:04 +0000  34789 bytes for ./AppIcon76x76@2x~ipad.png
+copying file ./LaunchImage-800-Portrait-736h@3x.png ... 
+2022-11-21 14:14:04 +0000  114556 bytes for ./LaunchImage-800-Portrait-736h@3x.png
+copying file ./LaunchImage-700@2x.png ... 
+51649 bytes for ./LaunchImage-700@2x.png
+copying file ./adinit.dat ... 
+2022-11-21 14:14:04 +0000  260531 bytes for ./adinit.dat
+2022-11-21 14:14:04 +0000  copying file ./include.dsp ... 
+2022-11-21 14:14:04 +0000  23083 bytes for ./include.dsp
+2022-11-21 14:14:04 +0000  copying file ./LaunchImage-700-568h@2x.png ... 
+2022-11-21 14:14:04 +0000  67344 bytes for ./LaunchImage-700-568h@2x.png
+copying file ./hztxt.shx ... 
+2022-11-21 14:14:04 +0000  1171617 bytes for ./hztxt.shx
+copying file ./BackNavItem.nib ... 
+2022-11-21 14:14:04 +0000  4128 bytes for ./BackNavItem.nib
+copying file ./LaunchImage-1200-Portrait-1792h@2x.png ... 
+2022-11-21 14:14:04 +0000  91487 bytes for ./LaunchImage-1200-Portrait-1792h@2x.png
+2022-11-21 14:14:04 +0000  copying file ./STAR_probim_cn.cer ... 
+2022-11-21 14:14:04 +0000  1621 bytes for ./STAR_probim_cn.cer
+copying file ./examineAdd.plist ... 
+2022-11-21 14:14:04 +0000  839 bytes for ./examineAdd.plist
+2022-11-21 14:14:04 +0000  copying file ./LFTipsGuideView.bundle/whiteMask@2x.png ... 
+2022-11-21 14:14:04 +0000  2089 bytes for ./LFTipsGuideView.bundle/whiteMask@2x.png
+copying file ./LFTipsGuideView.bundle/okBtn@2x.png ... 
+2022-11-21 14:14:04 +0000  22971 bytes for ./LFTipsGuideView.bundle/okBtn@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFTipsGuideView.bundle/right_top@2x.png ... 
+2022-11-21 14:14:04 +0000  2499 bytes for ./LFTipsGuideView.bundle/right_top@2x.png
+copying file ./LFTipsGuideView.bundle/left_top@2x.png ... 
+2022-11-21 14:14:04 +0000  2333 bytes for ./LFTipsGuideView.bundle/left_top@2x.png
+copying file ./LFTipsGuideView.bundle/left_down@2x.png ... 
+2022-11-21 14:14:04 +0000  2470 bytes for ./LFTipsGuideView.bundle/left_down@2x.png
+copying file ./LFTipsGuideView.bundle/whiteMask2@2x.png ... 
+2022-11-21 14:14:04 +0000  1160 bytes for ./LFTipsGuideView.bundle/whiteMask2@2x.png
+2022-11-21 14:14:04 +0000  copying file ./LFTipsGuideView.bundle/right_down@2x.png ... 
+2022-11-21 14:14:04 +0000  1934 bytes for ./LFTipsGuideView.bundle/right_down@2x.png
+2022-11-21 14:14:04 +0000  copying file ./images.bundle/fail@3x.png ... 
+2022-11-21 14:14:04 +0000  1584 bytes for ./images.bundle/fail@3x.png
+copying file ./images.bundle/loading@2x.png ... 
+2022-11-21 14:14:04 +0000  1126 bytes for ./images.bundle/loading@2x.png
+2022-11-21 14:14:04 +0000  copying file ./images.bundle/en.lproj/Root.strings ... 
+2022-11-21 14:14:04 +0000  546 bytes for ./images.bundle/en.lproj/Root.strings
+2022-11-21 14:14:04 +0000  copying file ./images.bundle/fail@2x.png ... 
+2022-11-21 14:14:04 +0000  1584 bytes for ./images.bundle/fail@2x.png
+copying file ./images.bundle/loading@3x.png ... 
+2022-11-21 14:14:04 +0000  1126 bytes for ./images.bundle/loading@3x.png
+2022-11-21 14:14:04 +0000  copying file ./images.bundle/success@2x.png ... 
+2022-11-21 14:14:04 +0000  1497 bytes for ./images.bundle/success@2x.png
+copying file ./images.bundle/success@3x.png ... 
+2022-11-21 14:14:04 +0000  1497 bytes for ./images.bundle/success@3x.png
+2022-11-21 14:14:04 +0000  copying file ./images.bundle/success.png ... 
+2022-11-21 14:14:04 +0000  1211 bytes for ./images.bundle/success.png
+copying file ./images.bundle/Root.plist ... 
+2022-11-21 14:14:04 +0000  1456 bytes for ./images.bundle/Root.plist
+copying file ./images.bundle/loading.png ... 
+2022-11-21 14:14:04 +0000  1126 bytes for ./images.bundle/loading.png
+2022-11-21 14:14:04 +0000  copying file ./images.bundle/fail.png ... 
+2022-11-21 14:14:04 +0000  1584 bytes for ./images.bundle/fail.png
+2022-11-21 14:14:04 +0000  copying file ./Frameworks/Shape.framework/_CodeSignature/CodeResources ... 
+2022-11-21 14:14:04 +0000  2086 bytes for ./Frameworks/Shape.framework/_CodeSignature/CodeResources
+2022-11-21 14:14:04 +0000  copying file ./Frameworks/Shape.framework/Shape ... 
+2022-11-21 14:14:04 +0000  31338208 bytes for ./Frameworks/Shape.framework/Shape
+copying file ./Frameworks/Shape.framework/include.dsp ... 
+2022-11-21 14:14:04 +0000  23083 bytes for ./Frameworks/Shape.framework/include.dsp
+copying file ./Frameworks/Shape.framework/Info.plist ... 
+2022-11-21 14:14:04 +0000  727 bytes for ./Frameworks/Shape.framework/Info.plist
+copying file ./loading_refresh.json ... 
+2022-11-21 14:14:04 +0000  5840 bytes for ./loading_refresh.json
+copying file ./LaunchImage.png ... 
+2022-11-21 14:14:04 +0000  19348 bytes for ./LaunchImage.png
+copying file ./embedded.mobileprovision ... 
+2022-11-21 14:14:04 +0000  14903 bytes for ./embedded.mobileprovision
+copying file ./PBShareBtn.nib ... 
+2022-11-21 14:14:04 +0000  4163 bytes for ./PBShareBtn.nib
+copying file ./Info.plist ... 
+3137 bytes for ./Info.plist
+copying file ./issueAdd2.plist ... 
+2022-11-21 14:14:04 +0000  628 bytes for ./issueAdd2.plist
+copying file ./PkgInfo ... 
+2022-11-21 14:14:04 +0000  8 bytes for ./PkgInfo
+2022-11-21 14:14:04 +0000  /usr/bin/ditto exited with 0
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionEmbedProfileStep
+2022-11-21 14:14:04 +0000  Skipping profile for item: <IDEDistributionItem: 0x7fd872459160; bundleID='com.jiankeyan.Shape', path='<DVTFilePath:0x7fd8714c7060:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd872458960; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd86eebb9d0; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='(null)', teamID='PQM7L66DSE', identifier='com.jiankeyan.Shape', executablePath='<DVTFilePath:0x7fd86ee6c480:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework/Shape'>', hardenedRuntime='0'>'>
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionInfoPlistStep
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionItemRemovalStep
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionAppThinningPlistStep
+2022-11-21 14:14:04 +0000  Skipping step: IDEDistributionAppThinningPlistStep because it said so
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionCompileBitcodeStep
+2022-11-21 14:14:04 +0000  Skipping step: IDEDistributionCompileBitcodeStep because it said so
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionCodeSlimmingStep
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionCopyBCSymbolMapsStep
+2022-11-21 14:14:04 +0000  Processing step: IDEDistributionSymbolsStep
+2022-11-21 14:14:04 +0000  Processing symbols for Shape.framework
+2022-11-21 14:14:04 +0000  Running /usr/bin/rsync '-8aPhhE' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/Frameworks/Shape.framework' '--link-dest' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/Frameworks' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd'
+2022-11-21 14:14:04 +0000  building file list ... 
+2022-11-21 14:14:04 +0000   0 files...
2022-11-21 14:14:04 +0000  6 files to consider
+2022-11-21 14:14:04 +0000  Shape.framework/
+2022-11-21 14:14:04 +0000  Shape.framework/_CodeSignature/
+2022-11-21 14:14:04 +0000  
+sent 234 bytes  received 32 bytes  532.00 bytes/sec
+total size is 29.91M  speedup is 117910.19
+2022-11-21 14:14:04 +0000  /usr/bin/rsync exited with 0
+2022-11-21 14:14:04 +0000  Running /usr/bin/rsync '-8aPhhE' '/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/dSYMs/' '--link-dest' '/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/dSYMs/' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd'
+2022-11-21 14:14:04 +0000  building file list ... 
+2022-11-21 14:14:04 +0000   0 files...
2022-11-21 14:14:04 +0000  7 files to consider
+2022-11-21 14:14:04 +0000  ./
+2022-11-21 14:14:04 +0000  IphoneBIMe.app.dSYM/
+IphoneBIMe.app.dSYM/Contents/
+IphoneBIMe.app.dSYM/Contents/Resources/
+2022-11-21 14:14:04 +0000  IphoneBIMe.app.dSYM/Contents/Resources/DWARF/
+2022-11-21 14:14:04 +0000  
+sent 258 bytes  received 50 bytes  616.00 bytes/sec
+total size is 23.64M  speedup is 80474.56
+2022-11-21 14:14:04 +0000  /usr/bin/rsync exited with 0
+2022-11-21 14:14:04 +0000  Running /Applications/Xcode.app/Contents/Developer/usr/bin/symbols '-noTextInSOD' '-noDaemon' '-arch' 'all' '-symbolsPackageDir' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Symbols' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Shape.framework/Shape'
+2022-11-21 14:14:10 +0000  /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Shape.framework/Shape [arm64, 5.204224 seconds]:
+2022-11-21 14:14:10 +0000  /Applications/Xcode.app/Contents/Developer/usr/bin/symbols exited with 0
+2022-11-21 14:14:10 +0000  Processing symbols for IphoneBIMe.app
+2022-11-21 14:14:10 +0000  Running /usr/bin/rsync '-8aPhhE' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app' '--link-dest' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd'
+2022-11-21 14:14:10 +0000  building file list ... 
+2022-11-21 14:14:10 +0000   0 files...
2022-11-21 14:14:10 +0000   100 files...
2022-11-21 14:14:10 +0000   200 files...
2022-11-21 14:14:10 +0000   300 files...
2022-11-21 14:14:10 +0000   400 files...
2022-11-21 14:14:10 +0000  467 files to consider
+2022-11-21 14:14:10 +0000  IphoneBIMe.app/
+2022-11-21 14:14:10 +0000  IphoneBIMe.app/AMap.bundle/
+IphoneBIMe.app/AMap.bundle/AMap3D.bundle/
+IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/
+IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/
+IphoneBIMe.app/AMap.bundle/images/
+IphoneBIMe.app/AMap.bundle/offline/
+IphoneBIMe.app/Base.lproj/
+IphoneBIMe.app/Base.lproj/LaunchScreen.storyboardc/
+IphoneBIMe.app/Base.lproj/Main.storyboardc/
+IphoneBIMe.app/DwgViewController.storyboardc/
+IphoneBIMe.app/Frameworks/
+IphoneBIMe.app/Frameworks/Shape.framework/
+IphoneBIMe.app/Frameworks/Shape.framework/_CodeSignature/
+IphoneBIMe.app/LFEasyNoticeBar.bundle/
+IphoneBIMe.app/LFImagePickerController.bundle/
+IphoneBIMe.app/LFMediaEditingController.bundle/
+IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/
+IphoneBIMe.app/LFMediaEditingController.bundle/brush/
+IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/
+IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/
+IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/
+IphoneBIMe.app/LFMediaEditingController.bundle/stickers/
+IphoneBIMe.app/LFTipsGuideView.bundle/
+IphoneBIMe.app/MJRefresh.bundle/
+IphoneBIMe.app/MJRefresh.bundle/en.lproj/
+IphoneBIMe.app/MJRefresh.bundle/ko.lproj/
+IphoneBIMe.app/MJRefresh.bundle/ru.lproj/
+IphoneBIMe.app/MJRefresh.bundle/uk.lproj/
+IphoneBIMe.app/MJRefresh.bundle/zh-Hans.lproj/
+IphoneBIMe.app/MJRefresh.bundle/zh-Hant.lproj/
+IphoneBIMe.app/SGQRCode.bundle/
+IphoneBIMe.app/SGQRCode.bundle/en.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/
+IphoneBIMe.app/TZImagePickerController.bundle/ar.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/de.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/en.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/es.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/fr.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/ja.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/ko-KP.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/pt.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/ru.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/vi.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/zh-Hans.lproj/
+IphoneBIMe.app/TZImagePickerController.bundle/zh-Hant.lproj/
+IphoneBIMe.app/_CodeSignature/
+IphoneBIMe.app/images.bundle/
+IphoneBIMe.app/images.bundle/en.lproj/
+2022-11-21 14:14:10 +0000  
+sent 12.89K bytes  received 314 bytes  26.40K bytes/sec
+total size is 55.84M  speedup is 4331.91
+2022-11-21 14:14:10 +0000  /usr/bin/rsync exited with 0
+2022-11-21 14:14:10 +0000  Running /usr/bin/rsync '-8aPhhE' '/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/dSYMs/' '--link-dest' '/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/dSYMs/' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd'
+2022-11-21 14:14:10 +0000  building file list ... 
+2022-11-21 14:14:10 +0000   0 files...
2022-11-21 14:14:10 +0000  7 files to consider
+2022-11-21 14:14:10 +0000  ./
+2022-11-21 14:14:10 +0000  IphoneBIMe.app.dSYM/
+IphoneBIMe.app.dSYM/Contents/
+IphoneBIMe.app.dSYM/Contents/Resources/
+IphoneBIMe.app.dSYM/Contents/Resources/DWARF/
+2022-11-21 14:14:10 +0000  
+sent 270 bytes  received 62 bytes  664.00 bytes/sec
+total size is 23.64M  speedup is 74657.12
+2022-11-21 14:14:10 +0000  /usr/bin/rsync exited with 0
+2022-11-21 14:14:10 +0000  Running /Applications/Xcode.app/Contents/Developer/usr/bin/symbols '-noTextInSOD' '-noDaemon' '-arch' 'all' '-symbolsPackageDir' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Symbols' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/IphoneBIMe.app.dSYM/Contents/Resources/Dwarf/IphoneBIMe'
+2022-11-21 14:14:11 +0000  /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/IphoneBIMe.app.dSYM/Contents/Resources/Dwarf/IphoneBIMe [arm64, 0.671427 seconds]:
+2022-11-21 14:14:11 +0000  /Applications/Xcode.app/Contents/Developer/usr/bin/symbols exited with 0
+2022-11-21 14:14:11 +0000  Processing step: IDEDistributionCopyAppleProvidedContentStep
+2022-11-21 14:14:11 +0000  Processing step: IDEDistributionAppThinningStep
+2022-11-21 14:14:11 +0000  Skipping step: IDEDistributionAppThinningStep because it said so
+2022-11-21 14:14:11 +0000  Processing step: IDEDistributionArchThinningStep
+2022-11-21 14:14:11 +0000  Running /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/Frameworks/Shape.framework/Shape' '-verify_arch' 'arm64e'
+2022-11-21 14:14:11 +0000  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo exited with 1
+2022-11-21 14:14:11 +0000  Skipping architecture thinning for item "Shape" because arch "arm64e" wasn't found
+2022-11-21 14:14:11 +0000  Running /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/IphoneBIMe' '-verify_arch' 'arm64e'
+2022-11-21 14:14:11 +0000  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo exited with 1
+2022-11-21 14:14:11 +0000  Skipping architecture thinning for item "IphoneBIMe" because arch "arm64e" wasn't found
+2022-11-21 14:14:11 +0000  Processing step: IDEDistributionODRStep
+2022-11-21 14:14:11 +0000  Processing step: IDEDistributionStripXattrsStep
+2022-11-21 14:14:11 +0000  Skipping stripping extended attributes of item: <IDEDistributionItem: 0x7fd872459160; bundleID='com.jiankeyan.Shape', path='<DVTFilePath:0x7fd8714c7060:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd872458960; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd8720559c0; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='(null)', teamID='PQM7L66DSE', identifier='com.jiankeyan.Shape', executablePath='<DVTFilePath:0x7fd86ee6c480:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework/Shape'>', hardenedRuntime='0'>'>
+2022-11-21 14:14:11 +0000  Running /usr/bin/xattr '-crs' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app'
+2022-11-21 14:14:11 +0000  /usr/bin/xattr exited with 0
+2022-11-21 14:14:11 +0000  Processing step: IDEDistributionCodesignStep
+2022-11-21 14:14:11 +0000  Entitlements for <IDEDistributionItem: 0x7fd872459160; bundleID='com.jiankeyan.Shape', path='<DVTFilePath:0x7fd8714c7060:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd872458960; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd86eeb89b0; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='(null)', teamID='PQM7L66DSE', identifier='com.jiankeyan.Shape', executablePath='<DVTFilePath:0x7fd86ee6c480:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework/Shape'>', hardenedRuntime='0'>'>: {
+}
+2022-11-21 14:14:11 +0000  Entitlements for <IDEDistributionItem: 0x7fd872459160; bundleID='com.jiankeyan.Shape', path='<DVTFilePath:0x7fd8714c7060:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd872458960; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd86edb6d10; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='(null)', teamID='PQM7L66DSE', identifier='com.jiankeyan.Shape', executablePath='<DVTFilePath:0x7fd86ee6c480:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework/Shape'>', hardenedRuntime='0'>'> are: {
+}
+2022-11-21 14:14:11 +0000  Writing entitlements for <IDEDistributionItem: 0x7fd872459160; bundleID='com.jiankeyan.Shape', path='<DVTFilePath:0x7fd8714c7060:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd872458960; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd86ed34b20; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='(null)', teamID='PQM7L66DSE', identifier='com.jiankeyan.Shape', executablePath='<DVTFilePath:0x7fd86ee6c480:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/Frameworks/Shape.framework/Shape'>', hardenedRuntime='0'>'> to: /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/entitlements~~~W1tICH
+2022-11-21 14:14:11 +0000  Running /usr/bin/codesign '-vvv' '--force' '--sign' '69640BFAF53B6195AB82E966B4E2BBEAF287E544' '--entitlements' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/entitlements~~~W1tICH' '--generate-entitlement-der' '--preserve-metadata=identifier,flags,runtime' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/Frameworks/Shape.framework'
+2022-11-21 14:14:11 +0000  /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/Frameworks/Shape.framework: replacing existing signature
+2022-11-21 14:14:11 +0000  /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/Frameworks/Shape.framework: signed bundle with Mach-O universal (arm64) [com.jiankeyan.Shape]
+2022-11-21 14:14:11 +0000  /usr/bin/codesign exited with 0
+2022-11-21 14:14:11 +0000  Entitlements for <IDEDistributionItem: 0x7fd86eed56d0; bundleID='com.probim.IPhoneBIMe', path='<DVTFilePath:0x7fd8a531c910:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd8a4ec2d40; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd86eeb7d80; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='{
+    "application-identifier" = "PQM7L66DSE.com.probim.IPhoneBIMe";
+    "aps-environment" = development;
+    "com.apple.developer.team-identifier" = PQM7L66DSE;
+    "get-task-allow" = 1;
+}', teamID='PQM7L66DSE', identifier='com.probim.IPhoneBIMe', executablePath='<DVTFilePath:0x7fd8714a5570:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/IphoneBIMe'>', hardenedRuntime='0'>'>: {
+    "application-identifier" = "PQM7L66DSE.com.probim.IPhoneBIMe";
+    "aps-environment" = production;
+    "beta-reports-active" = 1;
+    "com.apple.developer.team-identifier" = PQM7L66DSE;
+    "get-task-allow" = 0;
+}
+2022-11-21 14:14:11 +0000  Entitlements for <IDEDistributionItem: 0x7fd86eed56d0; bundleID='com.probim.IPhoneBIMe', path='<DVTFilePath:0x7fd8a531c910:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd8a4ec2d40; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd8714d8370; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='{
+    "application-identifier" = "PQM7L66DSE.com.probim.IPhoneBIMe";
+    "aps-environment" = development;
+    "com.apple.developer.team-identifier" = PQM7L66DSE;
+    "get-task-allow" = 1;
+}', teamID='PQM7L66DSE', identifier='com.probim.IPhoneBIMe', executablePath='<DVTFilePath:0x7fd8714a5570:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/IphoneBIMe'>', hardenedRuntime='0'>'> are: {
+    "application-identifier" = "PQM7L66DSE.com.probim.IPhoneBIMe";
+    "aps-environment" = production;
+    "beta-reports-active" = 1;
+    "com.apple.developer.team-identifier" = PQM7L66DSE;
+    "get-task-allow" = 0;
+}
+2022-11-21 14:14:11 +0000  Writing entitlements for <IDEDistributionItem: 0x7fd86eed56d0; bundleID='com.probim.IPhoneBIMe', path='<DVTFilePath:0x7fd8a531c910:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app'>', codeSigningInfo='<_DVTCodeSigningInformation_Path: 0x7fd8a4ec2d40; isSigned='1', isAdHocSigned='0', signingCertificate='<DVTSigningCertificate: 0x7fd86efcc540; name='Apple Development: Zhang JingFang (G75H54H5L4)', hash='A91839012EC4A3BE395E6E3EFBE6B0BFEE1D2A5D', serialNumber='270C04695F493F645C9F8B1033357C19', certificateKinds='(
+    "1.2.840.113635.100.6.1.12",
+    "1.2.840.113635.100.6.1.2"
+), issueDate='2022-03-29 03:05:12 +0000''>', entitlements='{
+    "application-identifier" = "PQM7L66DSE.com.probim.IPhoneBIMe";
+    "aps-environment" = development;
+    "com.apple.developer.team-identifier" = PQM7L66DSE;
+    "get-task-allow" = 1;
+}', teamID='PQM7L66DSE', identifier='com.probim.IPhoneBIMe', executablePath='<DVTFilePath:0x7fd8714a5570:'/Users/zhangjf/Library/Developer/Xcode/Archives/2022-11-21/IphoneBIMe 2022-11-21, 10.13 PM.xcarchive/Products/Applications/IphoneBIMe.app/IphoneBIMe'>', hardenedRuntime='0'>'> to: /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/entitlements~~~1n19hD
+2022-11-21 14:14:11 +0000  Running /usr/bin/codesign '-vvv' '--force' '--sign' '69640BFAF53B6195AB82E966B4E2BBEAF287E544' '--entitlements' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/entitlements~~~1n19hD' '--generate-entitlement-der' '--preserve-metadata=identifier,flags,runtime' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app'
+2022-11-21 14:14:11 +0000  /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app: replacing existing signature
+2022-11-21 14:14:12 +0000  /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app: signed app bundle with Mach-O thin (arm64) [com.probim.IPhoneBIMe]
+2022-11-21 14:14:12 +0000  /usr/bin/codesign exited with 0
+2022-11-21 14:14:12 +0000  Processing step: IDEDistributionZipODRItemStep
+2022-11-21 14:14:12 +0000  Skipping step: IDEDistributionZipODRItemStep because it said so
+2022-11-21 14:14:12 +0000  Skipping step: IDEDistributionZipODRItemStep because it said so
+2022-11-21 14:14:12 +0000  Processing step: IDEDistributionCreateIPAStep
+2022-11-21 14:14:12 +0000  Running /usr/bin/rsync '-8aPhhE' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Symbols' '--link-dest' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root'
+2022-11-21 14:14:12 +0000  building file list ... 
+2022-11-21 14:14:12 +0000   0 files...
2022-11-21 14:14:12 +0000  3 files to consider
+2022-11-21 14:14:12 +0000  Symbols/
+2022-11-21 14:14:12 +0000  
+sent 200 bytes  received 26 bytes  452.00 bytes/sec
+total size is 24.52M  speedup is 113787.08
+2022-11-21 14:14:12 +0000  /usr/bin/rsync exited with 0
+2022-11-21 14:14:12 +0000  Running /usr/bin/ditto '-V' '-c' '-k' '--norsrc' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root' '/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Packages/IphoneBIMe.ipa'
+2022-11-21 14:14:12 +0000  >>> Copying /var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root 
+2022-11-21 14:14:12 +0000  copying file ./Payload/IphoneBIMe.app/_CodeSignature/CodeResources ... 
+2022-11-21 14:14:12 +0000  119933 bytes for ./Payload/IphoneBIMe.app/_CodeSignature/CodeResources
+2022-11-21 14:14:12 +0000  copying file ./Payload/IphoneBIMe.app/marker.zip ... 
+2022-11-21 14:14:12 +0000  67582 bytes for ./Payload/IphoneBIMe.app/marker.zip
+2022-11-21 14:14:12 +0000  copying file ./Payload/IphoneBIMe.app/examineAdd2.plist ... 
+2022-11-21 14:14:12 +0000  1275 bytes for ./Payload/IphoneBIMe.app/examineAdd2.plist
+copying file ./Payload/IphoneBIMe.app/LaunchImage-1100-Portrait-2436h@3x.png ... 
+2022-11-21 14:14:12 +0000  113897 bytes for ./Payload/IphoneBIMe.app/LaunchImage-1100-Portrait-2436h@3x.png
+2022-11-21 14:14:12 +0000  copying file ./Payload/IphoneBIMe.app/LaunchImage@2x.png ... 
+2022-11-21 14:14:12 +0000  51649 bytes for ./Payload/IphoneBIMe.app/LaunchImage@2x.png
+copying file ./Payload/IphoneBIMe.app/IphoneBIMe ... 
+2022-11-21 14:14:13 +0000  16121504 bytes for ./Payload/IphoneBIMe.app/IphoneBIMe
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/examineAdd4.plist ... 
+557 bytes for ./Payload/IphoneBIMe.app/examineAdd4.plist
+copying file ./Payload/IphoneBIMe.app/SGQRCode.bundle/sound.caf ... 
+2022-11-21 14:14:13 +0000  129556 bytes for ./Payload/IphoneBIMe.app/SGQRCode.bundle/sound.caf
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLine@3x.png ... 
+3891 bytes for ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLine@3x.png
+copying file ./Payload/IphoneBIMe.app/SGQRCode.bundle/en.lproj/Root.strings ... 
+2022-11-21 14:14:13 +0000  546 bytes for ./Payload/IphoneBIMe.app/SGQRCode.bundle/en.lproj/Root.strings
+copying file ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLine@2x.png ... 
+2022-11-21 14:14:13 +0000  2231 bytes for ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLine@2x.png
+copying file ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLineGrid@3x.png ... 
+2022-11-21 14:14:13 +0000  14817 bytes for ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLineGrid@3x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLineGrid@2x.png ... 
+2022-11-21 14:14:13 +0000  7999 bytes for ./Payload/IphoneBIMe.app/SGQRCode.bundle/QRCodeScanLineGrid@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/SGQRCode.bundle/Root.plist ... 
+2022-11-21 14:14:13 +0000  1456 bytes for ./Payload/IphoneBIMe.app/SGQRCode.bundle/Root.plist
+copying file ./Payload/IphoneBIMe.app/DwgViewController.storyboardc/UIViewController-Chr-87-vXo.nib ... 
+2022-11-21 14:14:13 +0000  919 bytes for ./Payload/IphoneBIMe.app/DwgViewController.storyboardc/UIViewController-Chr-87-vXo.nib
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/DwgViewController.storyboardc/Chr-87-vXo-view-5By-Hi-wEg.nib ... 
+2022-11-21 14:14:13 +0000  1250 bytes for ./Payload/IphoneBIMe.app/DwgViewController.storyboardc/Chr-87-vXo-view-5By-Hi-wEg.nib
+copying file ./Payload/IphoneBIMe.app/DwgViewController.storyboardc/Info.plist ... 
+2022-11-21 14:14:13 +0000  258 bytes for ./Payload/IphoneBIMe.app/DwgViewController.storyboardc/Info.plist
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/txt.shx ... 
+2022-11-21 14:14:13 +0000  20857 bytes for ./Payload/IphoneBIMe.app/txt.shx
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageAudioToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  499 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageAudioToolBtn@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageMosaicToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  138 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageMosaicToolBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageEmotionToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  503 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageEmotionToolBtn@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect@2x.png ... 
+2022-11-21 14:14:13 +0000  480 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  477 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAllSelect_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageNoSelect@2x.png ... 
+2022-11-21 14:14:13 +0000  915 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageNoSelect@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect@2x.png ... 
+2022-11-21 14:14:13 +0000  704 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  1031 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageUnSelect_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  679 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageSelectd@2x.png ... 
+2022-11-21 14:14:13 +0000  963 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageSelectd@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  223 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect@2x.png ... 
+2022-11-21 14:14:13 +0000  649 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageInverseSelect@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  198 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AudioTrack/EditImageAddBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/002.png ... 
+2022-11-21 14:14:13 +0000  3882 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/002.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/016.png ... 
+2022-11-21 14:14:13 +0000  4627 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/016.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/017.png ... 
+2022-11-21 14:14:13 +0000  5663 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/017.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/003.png ... 
+2022-11-21 14:14:13 +0000  2684 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/003.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/029.png ... 
+2022-11-21 14:14:13 +0000  10273 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/029.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/015.png ... 
+2022-11-21 14:14:13 +0000  6959 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/015.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/001.png ... 
+2022-11-21 14:14:13 +0000  4267 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/001.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/014.png ... 
+2022-11-21 14:14:13 +0000  4643 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/014.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/028.png ... 
+2022-11-21 14:14:13 +0000  15853 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/028.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/010.png ... 
+2022-11-21 14:14:13 +0000  10757 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/010.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/004.png ... 
+2022-11-21 14:14:13 +0000  2792 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/004.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/038.png ... 
+2022-11-21 14:14:13 +0000  11089 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/038.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/039.png ... 
+2022-11-21 14:14:13 +0000  13093 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/039.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/005.png ... 
+2022-11-21 14:14:13 +0000  11071 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/005.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/011.png ... 
+2022-11-21 14:14:13 +0000  30937 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/011.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/007.png ... 
+2022-11-21 14:14:13 +0000  2450 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/007.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/013.png ... 
+2022-11-21 14:14:13 +0000  4489 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/013.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/012.png ... 
+2022-11-21 14:14:13 +0000  10848 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/012.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/006.png ... 
+2022-11-21 14:14:13 +0000  1673 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/006.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/048.png ... 
+2022-11-21 14:14:13 +0000  154931 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/048.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/040.png ... 
+9850 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/040.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/041.png ... 
+2022-11-21 14:14:13 +0000  16289 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/041.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/043.png ... 
+2022-11-21 14:14:13 +0000  20973 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/043.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/042.png ... 
+2022-11-21 14:14:13 +0000  13207 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/042.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/046.png ... 
+2022-11-21 14:14:13 +0000  17335 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/046.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/047.png ... 
+2022-11-21 14:14:13 +0000  168510 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/047.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/045.png ... 
+2022-11-21 14:14:13 +0000  56087 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/045.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/044.png ... 
+2022-11-21 14:14:13 +0000  17846 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/044.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/023.png ... 
+2022-11-21 14:14:13 +0000  21646 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/023.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/037.png ... 
+2022-11-21 14:14:13 +0000  14899 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/037.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/036.png ... 
+2022-11-21 14:14:13 +0000  11932 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/036.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/022.png ... 
+2022-11-21 14:14:13 +0000  10855 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/022.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/008.png ... 
+2022-11-21 14:14:13 +0000  13539 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/008.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/034.png ... 
+2022-11-21 14:14:13 +0000  17132 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/034.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/020.png ... 
+6481 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/020.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/021.png ... 
+2022-11-21 14:14:13 +0000  8710 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/021.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/035.png ... 
+2022-11-21 14:14:13 +0000  4627 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/035.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/009.png ... 
+2022-11-21 14:14:13 +0000  15121 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/009.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/031.png ... 
+2022-11-21 14:14:13 +0000  13639 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/031.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/025.png ... 
+2022-11-21 14:14:13 +0000  12670 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/025.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/019.png ... 
+2022-11-21 14:14:13 +0000  3857 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/019.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/018.png ... 
+2022-11-21 14:14:13 +0000  4926 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/018.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/024.png ... 
+2022-11-21 14:14:13 +0000  22627 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/024.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/030.png ... 
+2022-11-21 14:14:13 +0000  4709 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/030.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/026.png ... 
+2022-11-21 14:14:13 +0000  2316 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/026.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/032.png ... 
+2022-11-21 14:14:13 +0000  17418 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/032.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/033.png ... 
+2022-11-21 14:14:13 +0000  12515 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/033.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/027.png ... 
+2022-11-21 14:14:13 +0000  17781 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/stickers/027.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentLeft@2x.png ... 
+2022-11-21 14:14:13 +0000  1129 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentLeft@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Fluorescent@2x.png ... 
+2022-11-21 14:14:13 +0000  1710 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Fluorescent@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  361 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenToolBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditVideoCropToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  123 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditVideoCropToolBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentCenter@2x.png ... 
+2022-11-21 14:14:13 +0000  1178 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentCenter@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageStickRemove_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  13592 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageStickRemove_HL@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerZoomingViewCircle@2x.png ... 
+2022-11-21 14:14:13 +0000  753 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerZoomingViewCircle@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Highlight_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  2365 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Highlight_HL@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCropToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  125 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCropToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AlbumCommentLine@2x.png ... 
+2022-11-21 14:14:13 +0000  89 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/AlbumCommentLine@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentLeft_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  1696 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentLeft_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerDisplayFail@2x.png ... 
+2022-11-21 14:14:13 +0000  11653 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerDisplayFail@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentRight_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  1677 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentRight_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageEmotionToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  482 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageEmotionToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Eraser_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  2047 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Eraser_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Paint_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  2824 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Paint_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRevokeBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  390 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRevokeBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageFilterToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  773 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageFilterToolBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushBlurryBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  1625 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushBlurryBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Chalk@2x.png ... 
+2022-11-21 14:14:13 +0000  923 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Chalk@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageConfirmBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  466 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageConfirmBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCancelBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  244 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCancelBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCropToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  125 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCropToolBtn@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditVideoCropToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  123 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditVideoCropToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageConfirmBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  461 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageConfirmBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRevokeBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  330 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRevokeBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRateToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  667 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRateToolBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageWaterDrop@2x.png ... 
+2022-11-21 14:14:13 +0000  514 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageWaterDrop@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushBlurryBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  2314 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushBlurryBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  112 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextBG_HL@2x.png ... 
+1055 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextBG_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  130 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Highlight@2x.png ... 
+2022-11-21 14:14:13 +0000  1277 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Highlight@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageAudioToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  564 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageAudioToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Chalk_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  1619 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Chalk_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  112 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTraditionalMosaicBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRateToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  630 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageRateToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Stamp@2x.png ... 
+2022-11-21 14:14:13 +0000  1456 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Stamp@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageFilterToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  749 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageFilterToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCancelBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  244 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageCancelBtn@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextBG@2x.png ... 
+2022-11-21 14:14:13 +0000  474 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextBG@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentRight@2x.png ... 
+2022-11-21 14:14:13 +0000  1138 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentRight@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Paint@2x.png ... 
+2022-11-21 14:14:13 +0000  1447 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Paint@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/5@2x.png ... 
+2022-11-21 14:14:13 +0000  22705 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/5@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/1@2x.png ... 
+2022-11-21 14:14:13 +0000  20558 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/1@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/3@2x.png ... 
+2022-11-21 14:14:13 +0000  24359 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/3@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/6@2x.png ... 
+2022-11-21 14:14:13 +0000  21031 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/6@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/4@2x.png ... 
+2022-11-21 14:14:13 +0000  21530 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/4@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/2@2x.png ... 
+2022-11-21 14:14:13 +0000  23461 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/fruit/2@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageStampBrushHeart@2x.png ... 
+2022-11-21 14:14:13 +0000  12914 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageStampBrushHeart@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/5@2x.png ... 
+2022-11-21 14:14:13 +0000  20030 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/5@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/1@2x.png ... 
+2022-11-21 14:14:13 +0000  24897 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/1@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/3@2x.png ... 
+2022-11-21 14:14:13 +0000  28008 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/3@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/4@2x.png ... 
+2022-11-21 14:14:13 +0000  19321 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/4@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/2@2x.png ... 
+2022-11-21 14:14:13 +0000  25859 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/heart/2@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageStampBrushAnimal@2x.png ... 
+2022-11-21 14:14:13 +0000  11521 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageStampBrushAnimal@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageChalkBrush@2x.png ... 
+2022-11-21 14:14:13 +0000  4008 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageChalkBrush@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/5@2x.png ... 
+2022-11-21 14:14:13 +0000  13174 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/5@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/1@2x.png ... 
+2022-11-21 14:14:13 +0000  11561 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/1@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/3@2x.png ... 
+2022-11-21 14:14:13 +0000  14860 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/3@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/4@2x.png ... 
+2022-11-21 14:14:13 +0000  12720 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/4@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/2@2x.png ... 
+2022-11-21 14:14:13 +0000  10907 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/animal/2@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageSmearBrush@2x.png ... 
+2022-11-21 14:14:13 +0000  6042 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageSmearBrush@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageStampBrushFruit@2x.png ... 
+2022-11-21 14:14:13 +0000  12651 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/brush/EditImageStampBrushFruit@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageMosaicToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  138 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageMosaicToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextStyle@2x.png ... 
+2022-11-21 14:14:13 +0000  172 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextStyle@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenToolBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  363 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenToolBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageStickRemove@2x.png ... 
+2022-11-21 14:14:13 +0000  8857 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageStickRemove@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextToolBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  130 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextToolBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushMosaicBtn_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  854 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushMosaicBtn_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentCenter_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  1737 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextAlignmentCenter_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushMosaicBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  871 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageBrushMosaicBtn@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextFont_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  2807 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextFont_HL@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Stamp_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  2688 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Stamp_HL@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Eraser@2x.png ... 
+2022-11-21 14:14:13 +0000  1112 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Eraser@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Fluorescent_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  3511 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImagePenTool_Fluorescent_HL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/LFMediaEditingController.strings ... 
+2022-11-21 14:14:13 +0000  1950 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/LFMediaEditingController.strings
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerZoomingViewDelete@2x.png ... 
+2022-11-21 14:14:13 +0000  827 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerZoomingViewDelete@2x.png
+copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerDisplayPlaceholder@2x.png ... 
+2022-11-21 14:14:13 +0000  9910 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/StickerDisplayPlaceholder@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextStyle_HL@2x.png ... 
+2022-11-21 14:14:13 +0000  169 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextStyle_HL@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextFont@2x.png ... 
+2022-11-21 14:14:13 +0000  1484 bytes for ./Payload/IphoneBIMe.app/LFMediaEditingController.bundle/EditImageTextFont@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1368 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/en.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1374 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/en.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/uk.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1534 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/uk.lproj/Localizable.strings
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/arrow@2x.png ... 
+2022-11-21 14:14:13 +0000  1033 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/arrow@2x.png
+copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/ko.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  771 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/ko.lproj/Localizable.strings
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  891 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/trail_arrow@2x.png ... 
+2022-11-21 14:14:13 +0000  2322 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/trail_arrow@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/MJRefresh.bundle/ru.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1502 bytes for ./Payload/IphoneBIMe.app/MJRefresh.bundle/ru.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/examineAdd6.plist ... 
+2022-11-21 14:14:13 +0000  1090 bytes for ./Payload/IphoneBIMe.app/examineAdd6.plist
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LaunchImage-568h@2x.png ... 
+2022-11-21 14:14:13 +0000  67344 bytes for ./Payload/IphoneBIMe.app/LaunchImage-568h@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AppIcon60x60@2x.png ... 
+2022-11-21 14:14:13 +0000  24225 bytes for ./Payload/IphoneBIMe.app/AppIcon60x60@2x.png
+copying file ./Payload/IphoneBIMe.app/issueAdd.plist ... 
+2022-11-21 14:14:13 +0000  454 bytes for ./Payload/IphoneBIMe.app/issueAdd.plist
+copying file ./Payload/IphoneBIMe.app/examineAdd1.plist ... 
+2022-11-21 14:14:13 +0000  701 bytes for ./Payload/IphoneBIMe.app/examineAdd1.plist
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/examineAdd3.plist ... 
+2022-11-21 14:14:13 +0000  656 bytes for ./Payload/IphoneBIMe.app/examineAdd3.plist
+copying file ./Payload/IphoneBIMe.app/LXFCameraController.nib ... 
+2022-11-21 14:14:13 +0000  5208 bytes for ./Payload/IphoneBIMe.app/LXFCameraController.nib
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/error@2x.png ... 
+2022-11-21 14:14:13 +0000  2274 bytes for ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/error@2x.png
+copying file ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/warning@2x.png ... 
+2022-11-21 14:14:13 +0000  1961 bytes for ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/warning@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/success@2x.png ... 
+2022-11-21 14:14:13 +0000  2537 bytes for ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/success@2x.png
+copying file ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/info@2x.png ... 
+2022-11-21 14:14:13 +0000  1814 bytes for ./Payload/IphoneBIMe.app/LFEasyNoticeBar.bundle/info@2x.png
+copying file ./Payload/IphoneBIMe.app/LaunchImage-800-667h@2x.png ... 
+2022-11-21 14:14:13 +0000  87737 bytes for ./Payload/IphoneBIMe.app/LaunchImage-800-667h@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/de.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1909 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/de.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ar.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  2237 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ar.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/takePicture@2x.png ... 
+2022-11-21 14:14:13 +0000  3054 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/takePicture@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  2892 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/zh-Hans.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ja.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  2127 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ja.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_sel_photoPickerVc@2x.png ... 
+2022-11-21 14:14:13 +0000  1006 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_sel_photoPickerVc@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/en.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  3760 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/en.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png ... 
+2022-11-21 14:14:13 +0000  3645 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/es.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1857 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/es.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_sel_previewVc@2x.png ... 
+2022-11-21 14:14:13 +0000  1183 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_sel_previewVc@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/MMVideoPreviewPlay@2x.png ... 
+2022-11-21 14:14:13 +0000  3645 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/MMVideoPreviewPlay@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/iCloudError@2x.png ... 
+2022-11-21 14:14:13 +0000  4394 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/iCloudError@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/preview_original_def@2x.png ... 
+2022-11-21 14:14:13 +0000  392 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/preview_original_def@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/addMore@2x.png ... 
+2022-11-21 14:14:13 +0000  643 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/addMore@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_def_previewVc@2x.png ... 
+2022-11-21 14:14:13 +0000  1155 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_def_previewVc@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_original_sel@2x.png ... 
+2022-11-21 14:14:13 +0000  620 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_original_sel@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ko-KP.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  2021 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ko-KP.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/zh-Hant.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  2892 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/zh-Hant.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/takePicture80@2x.png ... 
+2022-11-21 14:14:13 +0000  1285 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/takePicture80@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_def_photoPickerVc@2x.png ... 
+2022-11-21 14:14:13 +0000  1155 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_def_photoPickerVc@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/right_arrow@2x.png ... 
+2022-11-21 14:14:13 +0000  1259 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/right_arrow@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/preview_number_icon@2x.png ... 
+2022-11-21 14:14:13 +0000  501 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/preview_number_icon@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/vi.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  2073 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/vi.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/navi_back@2x.png ... 
+2022-11-21 14:14:13 +0000  116 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/navi_back@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ru.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  2477 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/ru.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_original_def@2x.png ... 
+2022-11-21 14:14:13 +0000  1602 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_original_def@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/fr.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1992 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/fr.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/pt.lproj/Localizable.strings ... 
+2022-11-21 14:14:13 +0000  1876 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/pt.lproj/Localizable.strings
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_number_icon@2x.png ... 
+2022-11-21 14:14:13 +0000  501 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/photo_number_icon@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/VideoSendIcon@2x.png ... 
+2022-11-21 14:14:13 +0000  223 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/VideoSendIcon@2x.png
+copying file ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/tip@2x.png ... 
+2022-11-21 14:14:13 +0000  671 bytes for ./Payload/IphoneBIMe.app/TZImagePickerController.bundle/tip@2x.png
+copying file ./Payload/IphoneBIMe.app/loading_push.json ... 
+2022-11-21 14:14:13 +0000  2601 bytes for ./Payload/IphoneBIMe.app/loading_push.json
+copying file ./Payload/IphoneBIMe.app/STAR_bim365_com_cn.cer ... 
+2022-11-21 14:14:13 +0000  1633 bytes for ./Payload/IphoneBIMe.app/STAR_bim365_com_cn.cer
+copying file ./Payload/IphoneBIMe.app/LaunchImage-1200-Portrait-2688h@3x.png ... 
+2022-11-21 14:14:13 +0000  154463 bytes for ./Payload/IphoneBIMe.app/LaunchImage-1200-Portrait-2688h@3x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/examineAdd5.plist ... 
+966 bytes for ./Payload/IphoneBIMe.app/examineAdd5.plist
+copying file ./Payload/IphoneBIMe.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib ... 
+2022-11-21 14:14:13 +0000  916 bytes for ./Payload/IphoneBIMe.app/Base.lproj/Main.storyboardc/UIViewController-BYZ-38-t0r.nib
+copying file ./Payload/IphoneBIMe.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib ... 
+2022-11-21 14:14:13 +0000  1173 bytes for ./Payload/IphoneBIMe.app/Base.lproj/Main.storyboardc/BYZ-38-t0r-view-8bC-Xf-vdC.nib
+copying file ./Payload/IphoneBIMe.app/Base.lproj/Main.storyboardc/Info.plist ... 
+2022-11-21 14:14:13 +0000  258 bytes for ./Payload/IphoneBIMe.app/Base.lproj/Main.storyboardc/Info.plist
+copying file ./Payload/IphoneBIMe.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib ... 
+2022-11-21 14:14:13 +0000  1173 bytes for ./Payload/IphoneBIMe.app/Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib
+copying file ./Payload/IphoneBIMe.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib ... 
+2022-11-21 14:14:13 +0000  896 bytes for ./Payload/IphoneBIMe.app/Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib
+copying file ./Payload/IphoneBIMe.app/Base.lproj/LaunchScreen.storyboardc/Info.plist ... 
+2022-11-21 14:14:13 +0000  258 bytes for ./Payload/IphoneBIMe.app/Base.lproj/LaunchScreen.storyboardc/Info.plist
+copying file ./Payload/IphoneBIMe.app/loading_alone.json ... 
+2022-11-21 14:14:13 +0000  5801 bytes for ./Payload/IphoneBIMe.app/loading_alone.json
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/takePicture@2x.png ... 
+2022-11-21 14:14:13 +0000  1588 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/takePicture@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/video_pause@2x.png ... 
+2022-11-21 14:14:13 +0000  2209 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/video_pause@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/LFImagePickerController.strings ... 
+2022-11-21 14:14:13 +0000  2572 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/LFImagePickerController.strings
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png ... 
+2022-11-21 14:14:13 +0000  2721 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/MMVideoPreviewPlayHL@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/MMVideoPreviewPlay@2x.png ... 
+2022-11-21 14:14:13 +0000  2733 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/MMVideoPreviewPlay@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/album_list_img_default@2x.png ... 
+2022-11-21 14:14:13 +0000  696 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/album_list_img_default@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_album_def@2x.png ... 
+2022-11-21 14:14:13 +0000  1966 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_album_def@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/titleView_arrow@2x.png ... 
+2022-11-21 14:14:13 +0000  904 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/titleView_arrow@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_original_sel@2x.png ... 
+2022-11-21 14:14:13 +0000  2674 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_original_sel@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_piiic_wall@2x.png ... 
+2022-11-21 14:14:13 +0000  2846 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_piiic_wall@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_album_sel@2x.png ... 
+2022-11-21 14:14:13 +0000  3415 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_album_sel@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/contacts_add_myablum@2x.png ... 
+2022-11-21 14:14:13 +0000  250 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/contacts_add_myablum@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_gif_wall@2x.png ... 
+2022-11-21 14:14:13 +0000  2511 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_gif_wall@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/navigationbar_back_arrow@2x.png ... 
+2022-11-21 14:14:13 +0000  455 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/navigationbar_back_arrow@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/video_play@2x.png ... 
+2022-11-21 14:14:13 +0000  1145 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/video_play@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_original_def@2x.png ... 
+2022-11-21 14:14:13 +0000  1608 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/photo_original_def@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_hor_wall@2x.png ... 
+2022-11-21 14:14:13 +0000  3105 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_hor_wall@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_live_wall@2x.png ... 
+2022-11-21 14:14:13 +0000  3128 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_live_wall@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/ablum_sel@2x.png ... 
+2022-11-21 14:14:13 +0000  804 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/ablum_sel@2x.png
+copying file ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_video_wall@2x.png ... 
+2022-11-21 14:14:13 +0000  233 bytes for ./Payload/IphoneBIMe.app/LFImagePickerController.bundle/fileicon_video_wall@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/GNaviConfig.xml ... 
+2022-11-21 14:14:13 +0000  170 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/GNaviConfig.xml
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/res.zip ... 
+2022-11-21 14:14:13 +0000  343780 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/res.zip
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin@3x.png ... 
+2022-11-21 14:14:13 +0000  2844 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin@3x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_outer.png ... 
+2022-11-21 14:14:13 +0000  1518 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_outer.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin@3x.png ... 
+2022-11-21 14:14:13 +0000  2844 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin@3x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_shouqi_2@2x.png ... 
+2022-11-21 14:14:13 +0000  225 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_shouqi_2@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_fog.png ... 
+2022-11-21 14:14:13 +0000  86051 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_fog.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/lineTexture.png ... 
+2022-11-21 14:14:13 +0000  2830 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/lineTexture.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin_lift@3x.png ... 
+2022-11-21 14:14:13 +0000  1401 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin_lift@3x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin_lift@2x.png ... 
+2022-11-21 14:14:13 +0000  960 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin_lift@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_shouqi@2x.png ... 
+2022-11-21 14:14:13 +0000  197 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_shouqi@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_zhankai@2x.png ... 
+2022-11-21 14:14:13 +0000  200 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_zhankai@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_rain.png ... 
+2022-11-21 14:14:13 +0000  4954 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_rain.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/calloutArrowMask.png ... 
+2022-11-21 14:14:13 +0000  323 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/calloutArrowMask.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_red.png ... 
+2022-11-21 14:14:13 +0000  1097 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_red.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/calloutArrowMask@2x.png ... 
+2022-11-21 14:14:13 +0000  572 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/calloutArrowMask@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin@2x.png ... 
+2022-11-21 14:14:13 +0000  1893 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_sun_1.png ... 
+2022-11-21 14:14:13 +0000  3600 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_sun_1.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_sun_0.png ... 
+2022-11-21 14:14:13 +0000  6178 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_sun_0.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin@2x.png ... 
+2022-11-21 14:14:13 +0000  1873 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_sousuo@2x.png ... 
+2022-11-21 14:14:13 +0000  587 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_sousuo@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/select_.png ... 
+2022-11-21 14:14:13 +0000  1082 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/select_.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/pin_shadow.png ... 
+2022-11-21 14:14:13 +0000  609 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/pin_shadow.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_clear@2x.png ... 
+2022-11-21 14:14:13 +0000  4107 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_clear@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_inner.png ... 
+2022-11-21 14:14:13 +0000  1398 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_inner.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin.png ... 
+2022-11-21 14:14:13 +0000  988 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_down@2x.png ... 
+2022-11-21 14:14:13 +0000  548 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_down@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_3d_shadow.png ... 
+2022-11-21 14:14:13 +0000  958 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_3d_shadow.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin_lift.png ... 
+2022-11-21 14:14:13 +0000  418 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin_lift.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin_lift@3x.png ... 
+2022-11-21 14:14:13 +0000  1405 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin_lift@3x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin_lift.png ... 
+2022-11-21 14:14:13 +0000  418 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin_lift.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_haze.png ... 
+2022-11-21 14:14:13 +0000  15547 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_haze.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/lineDashTexture.png ... 
+2022-11-21 14:14:13 +0000  628 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/lineDashTexture.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_blue.png ... 
+2022-11-21 14:14:13 +0000  1121 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_blue.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_green.png ... 
+2022-11-21 14:14:13 +0000  1065 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_green.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_yellow.png ... 
+2022-11-21 14:14:13 +0000  1076 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_yellow.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/marker_blue@2x.png ... 
+2022-11-21 14:14:13 +0000  2547 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/marker_blue@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_3d_outer.png ... 
+2022-11-21 14:14:13 +0000  347 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_3d_outer.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin.png ... 
+2022-11-21 14:14:13 +0000  988 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin_lift@2x.png ... 
+2022-11-21 14:14:13 +0000  955 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin_lift@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_snow.png ... 
+2022-11-21 14:14:13 +0000  17148 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/particle_snow.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_darkred.png ... 
+2022-11-21 14:14:13 +0000  947 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_darkred.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/select_@3x.png ... 
+2022-11-21 14:14:13 +0000  2162 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/select_@3x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/lineDashTextureDot.png ... 
+2022-11-21 14:14:13 +0000  1400 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/lineDashTextureDot.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/pin_shadow@2x.png ... 
+2022-11-21 14:14:13 +0000  1155 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/pin_shadow@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin@3x.png ... 
+2022-11-21 14:14:13 +0000  2848 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin@3x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin_lift@2x.png ... 
+2022-11-21 14:14:13 +0000  960 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin_lift@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin_lift@3x.png ... 
+2022-11-21 14:14:13 +0000  1406 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/purplePin_lift@3x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/lineTextureThin.png ... 
+2022-11-21 14:14:13 +0000  554 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/lineTextureThin.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin@2x.png ... 
+2022-11-21 14:14:13 +0000  1878 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_zhankai_2@2x.png ... 
+2022-11-21 14:14:13 +0000  227 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/offline_zhankai_2@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/pin_shadow@3x.png ... 
+2022-11-21 14:14:13 +0000  1817 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/pin_shadow@3x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_gray.png ... 
+2022-11-21 14:14:13 +0000  1049 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/traffic_texture_gray.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_3d_inner.png ... 
+2022-11-21 14:14:13 +0000  441 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/arrow_line_3d_inner.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin.png ... 
+2022-11-21 14:14:13 +0000  986 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/redPin.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/select_@2x.png ... 
+2022-11-21 14:14:13 +0000  1082 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/select_@2x.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/marker_blue.png ... 
+2022-11-21 14:14:13 +0000  1972 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/marker_blue.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin_lift.png ... 
+2022-11-21 14:14:13 +0000  425 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/images/greenPin_lift.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/offline/offlinePackage.plist ... 
+2022-11-21 14:14:13 +0000  108395 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/offline/offlinePackage.plist
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data ... 
+2022-11-21 14:14:13 +0000  1823 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3d_navi_sky_day.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/dash.data ... 
+2022-11-21 14:14:13 +0000  241 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/dash.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_7_16_1560344652.data ... 
+2022-11-21 14:14:13 +0000  23596 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_7_16_1560344652.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png ... 
+2022-11-21 14:14:13 +0000  82 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/grass_night.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png ... 
+2022-11-21 14:14:13 +0000  17123 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_night.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png ... 
+2022-11-21 14:14:13 +0000  15480 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_night.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png ... 
+2022-11-21 14:14:13 +0000  107287 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_day.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png ... 
+2022-11-21 14:14:13 +0000  1523 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_day.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1016_1.png ... 
+2022-11-21 14:14:13 +0000  370 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1016_1.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1016_2.png ... 
+2022-11-21 14:14:13 +0000  297 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1016_2.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png ... 
+2022-11-21 14:14:13 +0000  15480 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/d_yellow_day.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png ... 
+2022-11-21 14:14:13 +0000  179 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_secondary_day.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png ... 
+2022-11-21 14:14:13 +0000  82 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/grass_day.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1015_1.png ... 
+2022-11-21 14:14:13 +0000  1094 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1015_1.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png ... 
+2022-11-21 14:14:13 +0000  79787 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_bk_grass_night.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png ... 
+2022-11-21 14:14:13 +0000  99 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_day.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1015_2.png ... 
+2022-11-21 14:14:13 +0000  108 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/1015_2.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png ... 
+2022-11-21 14:14:13 +0000  175 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/exit_label_bk_main_day.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png ... 
+2022-11-21 14:14:13 +0000  20699 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/cross_sky_day.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png ... 
+2022-11-21 14:14:13 +0000  1523 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/road_bottom_night.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png ... 
+2022-11-21 14:14:13 +0000  82 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/VM3DRes/roadbk_main_night.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_3_16_1560517561.data ... 
+2022-11-21 14:14:13 +0000  32309 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_3_16_1560517561.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_5_16_1561711250.data ... 
+2022-11-21 14:14:13 +0000  8775 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_5_16_1561711250.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/bktile_n.data ... 
+2022-11-21 14:14:13 +0000  109 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/bktile_n.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/bktile.data ... 
+2022-11-21 14:14:13 +0000  109 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/bktile.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_9_16_1560344664.data ... 
+2022-11-21 14:14:13 +0000  51159 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_9_16_1560344664.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_6_16_1560344646.data ... 
+2022-11-21 14:14:13 +0000  26238 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_6_16_1560344646.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3dportrait.xml ... 
+2022-11-21 14:14:13 +0000  4336 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3dportrait.xml
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3dlandscape.xml ... 
+2022-11-21 14:14:13 +0000  4336 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3dlandscape.xml
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_17_16_1561023816.data ... 
+273 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_17_16_1561023816.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/dash_cd.data ... 
+2022-11-21 14:14:13 +0000  1034 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/dash_cd.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_100_16_1561026477.data ... 
+2022-11-21 14:14:13 +0000  4365 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_100_16_1561026477.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/search_scenic_icon.data ... 
+2022-11-21 14:14:13 +0000  38112 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/search_scenic_icon.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3d_sky_day.data ... 
+2022-11-21 14:14:13 +0000  57143 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3d_sky_day.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/roadarrow.data ... 
+2022-11-21 14:14:13 +0000  446 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/roadarrow.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_25_16_1560344307.data ... 
+2022-11-21 14:14:13 +0000  17677 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_25_16_1560344307.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_2_16_1560344131.data ... 
+2022-11-21 14:14:13 +0000  28474 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_2_16_1560344131.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_4_16_1561711243.data ... 
+2022-11-21 14:14:13 +0000  8711 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_4_16_1561711243.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_3_16_1561987623.data ... 
+2022-11-21 14:14:13 +0000  13005 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_3_16_1561987623.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/waterline.data ... 
+2022-11-21 14:14:13 +0000  148 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/waterline.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/building.data ... 
+2022-11-21 14:14:13 +0000  996 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/building.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/tmc_n_allinone.data ... 
+2022-11-21 14:14:13 +0000  256 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/tmc_n_allinone.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/config_2_16_1560339691.data ... 
+2022-11-21 14:14:13 +0000  207 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/config_2_16_1560339691.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/tmc_allinone.data ... 
+2022-11-21 14:14:13 +0000  1171 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/tmc_allinone.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/crossing_nigth_bk.data ... 
+2022-11-21 14:14:13 +0000  18794 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/crossing_nigth_bk.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/styleiconslist.data ... 
+2022-11-21 14:14:13 +0000  868 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/styleiconslist.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3d_sky_night.data ... 
+2022-11-21 14:14:13 +0000  49684 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/3d_sky_night.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/lineround.data ... 
+2022-11-21 14:14:13 +0000  450 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/lineround.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/mapprofile_1_16_1560563265.data ... 
+2022-11-21 14:14:13 +0000  1779 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/mapprofile_1_16_1560563265.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_6_16_1562032423.data ... 
+2022-11-21 14:14:13 +0000  16123 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_6_16_1562032423.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_0_16_1561381751.data ... 
+2022-11-21 14:14:13 +0000  6619 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_0_16_1561381751.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_8_16_1560344658.data ... 
+2022-11-21 14:14:13 +0000  16283 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_8_16_1560344658.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_4_16_1560344142.data ... 
+2022-11-21 14:14:13 +0000  29374 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_4_16_1560344142.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/mapprofile_2_16_1560563265.data ... 
+2022-11-21 14:14:13 +0000  1768 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/mapprofile_2_16_1560563265.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_50_16_1501671321.data ... 
+2022-11-21 14:14:13 +0000  1606 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_50_16_1501671321.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/tmc_l_allinone.data ... 
+2022-11-21 14:14:13 +0000  1305 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/tmc_l_allinone.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/yunqian.png ... 
+2022-11-21 14:14:13 +0000  90355 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/yunqian.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/rainmask.png ... 
+2022-11-21 14:14:13 +0000  96 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/rainmask.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/fog.png ... 
+2022-11-21 14:14:13 +0000  86051 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/fog.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/shanbai.png ... 
+2022-11-21 14:14:13 +0000  5057 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/shanbai.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/haze.png ... 
+2022-11-21 14:14:13 +0000  15547 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/haze.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/snow.png ... 
+2022-11-21 14:14:13 +0000  17148 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/snow.png
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/snow_far.png ... 
+2022-11-21 14:14:13 +0000  17637 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/snow_far.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/snowmask.png ... 
+2022-11-21 14:14:13 +0000  21837 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/snowmask.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/yunhou.png ... 
+2022-11-21 14:14:13 +0000  149750 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/yunhou.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/shandianyun.png ... 
+2022-11-21 14:14:13 +0000  58874 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/shandianyun.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/rain.png ... 
+2022-11-21 14:14:13 +0000  3196 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/weather/rain.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/config_1_16_1560339683.data ... 
+2022-11-21 14:14:13 +0000  489 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/config_1_16_1560339683.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/dash_tq.data ... 
+2022-11-21 14:14:13 +0000  249 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/dash_tq.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_50_16_1541648499.data ... 
+2022-11-21 14:14:13 +0000  25385 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_50_16_1541648499.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons-for_custom_5_14.data ... 
+2022-11-21 14:14:13 +0000  2628 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons-for_custom_5_14.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_1_16_1561444603.data ... 
+2022-11-21 14:14:13 +0000  29587 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_1_16_1561444603.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_1_16_1562032355.data ... 
+2022-11-21 14:14:13 +0000  18639 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style_1_16_1562032355.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_5_16_1561028345.data ... 
+2022-11-21 14:14:13 +0000  65548 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/icons_5_16_1561028345.data
+copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style-for_custom_0_16_1561381751.data ... 
+2022-11-21 14:14:13 +0000  6609 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/style-for_custom_0_16_1561381751.data
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/crossing_day_bk.data ... 
+2022-11-21 14:14:13 +0000  25317 bytes for ./Payload/IphoneBIMe.app/AMap.bundle/AMap3D.bundle/crossing_day_bk.data
+copying file ./Payload/IphoneBIMe.app/Assets.car ... 
+2022-11-21 14:14:13 +0000  4779640 bytes for ./Payload/IphoneBIMe.app/Assets.car
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/AppIcon76x76@2x~ipad.png ... 
+2022-11-21 14:14:13 +0000  34789 bytes for ./Payload/IphoneBIMe.app/AppIcon76x76@2x~ipad.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LaunchImage-800-Portrait-736h@3x.png ... 
+2022-11-21 14:14:13 +0000  114556 bytes for ./Payload/IphoneBIMe.app/LaunchImage-800-Portrait-736h@3x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LaunchImage-700@2x.png ... 
+2022-11-21 14:14:13 +0000  51649 bytes for ./Payload/IphoneBIMe.app/LaunchImage-700@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/adinit.dat ... 
+2022-11-21 14:14:13 +0000  260531 bytes for ./Payload/IphoneBIMe.app/adinit.dat
+copying file ./Payload/IphoneBIMe.app/include.dsp ... 
+2022-11-21 14:14:13 +0000  23083 bytes for ./Payload/IphoneBIMe.app/include.dsp
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LaunchImage-700-568h@2x.png ... 
+2022-11-21 14:14:13 +0000  67344 bytes for ./Payload/IphoneBIMe.app/LaunchImage-700-568h@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/hztxt.shx ... 
+2022-11-21 14:14:13 +0000  1171617 bytes for ./Payload/IphoneBIMe.app/hztxt.shx
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/BackNavItem.nib ... 
+2022-11-21 14:14:13 +0000  4128 bytes for ./Payload/IphoneBIMe.app/BackNavItem.nib
+copying file ./Payload/IphoneBIMe.app/LaunchImage-1200-Portrait-1792h@2x.png ... 
+2022-11-21 14:14:13 +0000  91487 bytes for ./Payload/IphoneBIMe.app/LaunchImage-1200-Portrait-1792h@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/STAR_probim_cn.cer ... 
+2022-11-21 14:14:13 +0000  1621 bytes for ./Payload/IphoneBIMe.app/STAR_probim_cn.cer
+copying file ./Payload/IphoneBIMe.app/examineAdd.plist ... 
+2022-11-21 14:14:13 +0000  839 bytes for ./Payload/IphoneBIMe.app/examineAdd.plist
+copying file ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/whiteMask@2x.png ... 
+2022-11-21 14:14:13 +0000  2089 bytes for ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/whiteMask@2x.png
+copying file ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/okBtn@2x.png ... 
+2022-11-21 14:14:13 +0000  22971 bytes for ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/okBtn@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/right_top@2x.png ... 
+2022-11-21 14:14:13 +0000  2499 bytes for ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/right_top@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/left_top@2x.png ... 
+2022-11-21 14:14:13 +0000  2333 bytes for ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/left_top@2x.png
+copying file ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/left_down@2x.png ... 
+2022-11-21 14:14:13 +0000  2470 bytes for ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/left_down@2x.png
+copying file ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/whiteMask2@2x.png ... 
+2022-11-21 14:14:13 +0000  1160 bytes for ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/whiteMask2@2x.png
+copying file ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/right_down@2x.png ... 
+2022-11-21 14:14:13 +0000  1934 bytes for ./Payload/IphoneBIMe.app/LFTipsGuideView.bundle/right_down@2x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/images.bundle/fail@3x.png ... 
+2022-11-21 14:14:13 +0000  1584 bytes for ./Payload/IphoneBIMe.app/images.bundle/fail@3x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/images.bundle/loading@2x.png ... 
+2022-11-21 14:14:13 +0000  1126 bytes for ./Payload/IphoneBIMe.app/images.bundle/loading@2x.png
+copying file ./Payload/IphoneBIMe.app/images.bundle/en.lproj/Root.strings ... 
+2022-11-21 14:14:13 +0000  546 bytes for ./Payload/IphoneBIMe.app/images.bundle/en.lproj/Root.strings
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/images.bundle/fail@2x.png ... 
+2022-11-21 14:14:13 +0000  1584 bytes for ./Payload/IphoneBIMe.app/images.bundle/fail@2x.png
+copying file ./Payload/IphoneBIMe.app/images.bundle/loading@3x.png ... 
+2022-11-21 14:14:13 +0000  1126 bytes for ./Payload/IphoneBIMe.app/images.bundle/loading@3x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/images.bundle/success@2x.png ... 
+2022-11-21 14:14:13 +0000  1497 bytes for ./Payload/IphoneBIMe.app/images.bundle/success@2x.png
+copying file ./Payload/IphoneBIMe.app/images.bundle/success@3x.png ... 
+2022-11-21 14:14:13 +0000  1497 bytes for ./Payload/IphoneBIMe.app/images.bundle/success@3x.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/images.bundle/success.png ... 
+2022-11-21 14:14:13 +0000  1211 bytes for ./Payload/IphoneBIMe.app/images.bundle/success.png
+copying file ./Payload/IphoneBIMe.app/images.bundle/Root.plist ... 
+2022-11-21 14:14:13 +0000  1456 bytes for ./Payload/IphoneBIMe.app/images.bundle/Root.plist
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/images.bundle/loading.png ... 
+2022-11-21 14:14:13 +0000  1126 bytes for ./Payload/IphoneBIMe.app/images.bundle/loading.png
+copying file ./Payload/IphoneBIMe.app/images.bundle/fail.png ... 
+2022-11-21 14:14:13 +0000  1584 bytes for ./Payload/IphoneBIMe.app/images.bundle/fail.png
+2022-11-21 14:14:13 +0000  copying file ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/_CodeSignature/CodeResources ... 
+2022-11-21 14:14:13 +0000  2086 bytes for ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/_CodeSignature/CodeResources
+copying file ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/Shape ... 
+2022-11-21 14:14:15 +0000  31338528 bytes for ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/Shape
+2022-11-21 14:14:15 +0000  copying file ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/include.dsp ... 
+23083 bytes for ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/include.dsp
+2022-11-21 14:14:15 +0000  copying file ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/Info.plist ... 
+733 bytes for ./Payload/IphoneBIMe.app/Frameworks/Shape.framework/Info.plist
+copying file ./Payload/IphoneBIMe.app/loading_refresh.json ... 
+2022-11-21 14:14:15 +0000  5840 bytes for ./Payload/IphoneBIMe.app/loading_refresh.json
+copying file ./Payload/IphoneBIMe.app/LaunchImage.png ... 
+2022-11-21 14:14:15 +0000  19348 bytes for ./Payload/IphoneBIMe.app/LaunchImage.png
+2022-11-21 14:14:15 +0000  copying file ./Payload/IphoneBIMe.app/embedded.mobileprovision ... 
+2022-11-21 14:14:15 +0000  14248 bytes for ./Payload/IphoneBIMe.app/embedded.mobileprovision
+2022-11-21 14:14:15 +0000  copying file ./Payload/IphoneBIMe.app/PBShareBtn.nib ... 
+2022-11-21 14:14:15 +0000  4163 bytes for ./Payload/IphoneBIMe.app/PBShareBtn.nib
+copying file ./Payload/IphoneBIMe.app/Info.plist ... 
+2022-11-21 14:14:15 +0000  3137 bytes for ./Payload/IphoneBIMe.app/Info.plist
+copying file ./Payload/IphoneBIMe.app/issueAdd2.plist ... 
+2022-11-21 14:14:15 +0000  628 bytes for ./Payload/IphoneBIMe.app/issueAdd2.plist
+2022-11-21 14:14:15 +0000  copying file ./Payload/IphoneBIMe.app/PkgInfo ... 
+2022-11-21 14:14:15 +0000  8 bytes for ./Payload/IphoneBIMe.app/PkgInfo
+copying file ./Symbols/C201A1B8-D628-3B65-A5C1-19CC36635AC0.symbols ... 
+2022-11-21 14:14:15 +0000  14459532 bytes for ./Symbols/C201A1B8-D628-3B65-A5C1-19CC36635AC0.symbols
+2022-11-21 14:14:15 +0000  copying file ./Symbols/41882249-F42C-3EA1-9330-5C36A03E420F.symbols ... 
+2022-11-21 14:14:16 +0000  11256348 bytes for ./Symbols/41882249-F42C-3EA1-9330-5C36A03E420F.symbols
+2022-11-21 14:14:16 +0000  /usr/bin/ditto exited with 0
+2022-11-21 14:14:16 +0000  Processing step: IDEDistributionAppStoreInformationStep
+2022-11-21 14:14:16 +0000  Skipping step: IDEDistributionAppStoreInformationStep because it said so
+2022-11-21 14:14:16 +0000  Processing step: IDEDistributionGenerateProcessedDistributionItems
+2022-11-21 14:14:16 +0000  IDEDistributionItem init <DVTFilePath:0x7fd8a9bee9f0:'/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app/Frameworks/Shape.framework'>
+2022-11-21 14:14:16 +0000  IDEDistributionItem init <DVTFilePath:0x7fd891b927e0:'/var/folders/jx/6fb7zpcn4_1bb73820gqyy3w0000gn/T/XcodeDistPipeline.~~~iJvuLd/Root/Payload/IphoneBIMe.app'>
+2022-11-21 14:14:16 +0000  Processing step: IDEDistributionCreateManifestStep
+2022-11-21 14:14:16 +0000  Skipping step: IDEDistributionCreateManifestStep because it said so
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.h
new file mode 100644
index 0000000..f165d85
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.h
@@ -0,0 +1,47 @@
+//
+// IQNSArray+Sort.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <Foundation/NSArray.h>
+
+@class UIView;
+
+/**
+ UIView.subviews sorting category.
+ */
+@interface NSArray (IQ_NSArray_Sort)
+
+///--------------
+/// @name Sorting
+///--------------
+
+/**
+ Returns the array by sorting the UIView's by their tag property.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSArray<__kindof UIView*> * sortedArrayByTag;
+
+/**
+ Returns the array by sorting the UIView's by their tag property.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSArray<__kindof UIView*> * sortedArrayByPosition;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.m
new file mode 100644
index 0000000..7ca0cdd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQNSArray+Sort.m
@@ -0,0 +1,71 @@
+//
+// IQNSArray+Sort.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQNSArray+Sort.h"
+#import "IQUIView+Hierarchy.h"
+
+#import <UIKit/UIView.h>
+
+@implementation NSArray (IQ_NSArray_Sort)
+
+- (NSArray<UIView*>*)sortedArrayByTag
+{
+    return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) {
+        
+        if ([view1 respondsToSelector:@selector(tag)] && [view2 respondsToSelector:@selector(tag)])
+        {
+            if ([view1 tag] < [view2 tag])	return NSOrderedAscending;
+            
+            else if ([view1 tag] > [view2 tag])	return NSOrderedDescending;
+            
+            else	return NSOrderedSame;
+        }
+        else
+            return NSOrderedSame;
+    }];
+}
+
+- (NSArray<UIView*>*)sortedArrayByPosition
+{
+    return [self sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) {
+        
+        CGFloat x1 = CGRectGetMinX(view1.frame);
+        CGFloat y1 = CGRectGetMinY(view1.frame);
+        CGFloat x2 = CGRectGetMinX(view2.frame);
+        CGFloat y2 = CGRectGetMinY(view2.frame);
+        
+        if (y1 < y2)  return NSOrderedAscending;
+        
+        else if (y1 > y2) return NSOrderedDescending;
+        
+        //Else both y are same so checking for x positions
+        else if (x1 < x2)  return NSOrderedAscending;
+        
+        else if (x1 > x2) return NSOrderedDescending;
+        
+        else    return NSOrderedSame;
+    }];
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.h
new file mode 100644
index 0000000..42c7950
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.h
@@ -0,0 +1,60 @@
+//
+// IQUIScrollView+Additions.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <UIKit/UITableView.h>
+#import <UIKit/UICollectionView.h>
+
+
+@interface UIScrollView (Additions)
+
+/**
+ If YES, then scrollview will ignore scrolling (simply not scroll it) for adjusting textfield position. Default is NO.
+ */
+@property(nonatomic, assign) BOOL shouldIgnoreScrollingAdjustment;
+
+/**
+ If YES, then scrollview will ignore content inset adjustment (simply not updating it) when keyboard is shown. Default is NO.
+ */
+@property(nonatomic, assign) BOOL shouldIgnoreContentInsetAdjustment;
+
+/**
+ Restore scrollViewContentOffset when resigning from scrollView. Default is NO.
+ */
+@property(nonatomic, assign) BOOL shouldRestoreScrollViewContentOffset;
+
+
+@end
+
+@interface UITableView (PreviousNextIndexPath)
+
+-(nullable NSIndexPath*)previousIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath;
+//-(nullable NSIndexPath*)nextIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath;
+
+@end
+
+@interface UICollectionView (PreviousNextIndexPath)
+
+-(nullable NSIndexPath*)previousIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath;
+//-(nullable NSIndexPath*)nextIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.m
new file mode 100644
index 0000000..528214b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIScrollView+Additions.m
@@ -0,0 +1,161 @@
+//
+// IQUIScrollView+Additions.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQUIScrollView+Additions.h"
+#import <objc/runtime.h>
+
+@implementation UIScrollView (Additions)
+
+-(void)setShouldIgnoreScrollingAdjustment:(BOOL)shouldIgnoreScrollingAdjustment
+{
+    objc_setAssociatedObject(self, @selector(shouldIgnoreScrollingAdjustment), @(shouldIgnoreScrollingAdjustment), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(BOOL)shouldIgnoreScrollingAdjustment
+{
+    NSNumber *shouldIgnoreScrollingAdjustment = objc_getAssociatedObject(self, @selector(shouldIgnoreScrollingAdjustment));
+    
+    return [shouldIgnoreScrollingAdjustment boolValue];
+}
+
+-(void)setShouldIgnoreContentInsetAdjustment:(BOOL)shouldIgnoreContentInsetAdjustment
+{
+    objc_setAssociatedObject(self, @selector(shouldIgnoreContentInsetAdjustment), @(shouldIgnoreContentInsetAdjustment), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(BOOL)shouldIgnoreContentInsetAdjustment
+{
+    NSNumber *shouldIgnoreContentInsetAdjustment = objc_getAssociatedObject(self, @selector(shouldIgnoreContentInsetAdjustment));
+    
+    return [shouldIgnoreContentInsetAdjustment boolValue];
+}
+
+-(void)setShouldRestoreScrollViewContentOffset:(BOOL)shouldRestoreScrollViewContentOffset
+{
+    objc_setAssociatedObject(self, @selector(shouldRestoreScrollViewContentOffset), @(shouldRestoreScrollViewContentOffset), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(BOOL)shouldRestoreScrollViewContentOffset
+{
+    NSNumber *shouldRestoreScrollViewContentOffset = objc_getAssociatedObject(self, @selector(shouldRestoreScrollViewContentOffset));
+    
+    return [shouldRestoreScrollViewContentOffset boolValue];
+}
+
+@end
+
+@implementation UITableView (PreviousNextIndexPath)
+
+-(nullable NSIndexPath*)previousIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath
+{
+    NSInteger previousRow = indexPath.row - 1;
+    NSInteger previousSection = indexPath.section;
+    
+    //Fixing indexPath
+    if (previousRow < 0)
+    {
+        previousSection -= 1;
+        
+        if (previousSection >= 0)
+        {
+            previousRow = [self numberOfRowsInSection:previousSection]-1;
+        }
+    }
+    
+    if (previousRow >= 0 && previousSection >= 0)
+    {
+        return [NSIndexPath indexPathForRow:previousRow inSection:previousSection];
+    }
+    
+    return nil;
+}
+
+//-(nullable NSIndexPath*)nextIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath
+//{
+//    NSInteger nextRow = indexPath.row + 1;
+//    NSInteger nextSection = indexPath.section;
+//
+//    //Fixing indexPath
+//    if (nextRow >= [self numberOfRowsInSection:nextSection])
+//    {
+//        nextRow = 0;
+//        nextSection += 1;
+//    }
+//
+//    if (self.numberOfSections > nextSection && [self numberOfRowsInSection:nextSection] > nextRow)
+//    {
+//        return [NSIndexPath indexPathForItem:nextRow inSection:nextSection];
+//    }
+//
+//    return nil;
+//}
+//
+@end
+
+@implementation UICollectionView (PreviousNextIndexPath)
+
+-(nullable NSIndexPath*)previousIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath
+{
+    NSInteger previousRow = indexPath.row - 1;
+    NSInteger previousSection = indexPath.section;
+    
+    //Fixing indexPath
+    if (previousRow < 0)
+    {
+        previousSection -= 1;
+        
+        if (previousSection >= 0)
+        {
+            previousRow = [self numberOfItemsInSection:previousSection]-1;
+        }
+    }
+    
+    if (previousRow >= 0 && previousSection >= 0)
+    {
+        return [NSIndexPath indexPathForItem:previousRow inSection:previousSection];
+    }
+    
+    return nil;
+}
+
+//-(nullable NSIndexPath*)nextIndexPathOfIndexPath:(nonnull NSIndexPath*)indexPath
+//{
+//    NSInteger nextRow = indexPath.row + 1;
+//    NSInteger nextSection = indexPath.section;
+//    
+//    //Fixing indexPath
+//    if (nextRow >= [self numberOfItemsInSection:nextSection])
+//    {
+//        nextRow = 0;
+//        nextSection += 1;
+//    }
+//    
+//    if (self.numberOfSections > nextSection && [self numberOfItemsInSection:nextSection] > nextRow)
+//    {
+//        return [NSIndexPath indexPathForItem:nextRow inSection:nextSection];
+//    }
+//    
+//    return nil;
+//}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h
new file mode 100644
index 0000000..db6d93d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.h
@@ -0,0 +1,62 @@
+//
+// IQUITextFieldView+Additions.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <UIKit/UIView.h>
+#import "IQKeyboardManagerConstants.h"
+
+/**
+ UIView category for managing UITextField/UITextView
+ */
+
+@interface UIView (Additions)
+
+/**
+ To set customized distance from keyboard for textField/textView. Can't be less than zero
+ */
+@property(nonatomic, assign) CGFloat keyboardDistanceFromTextField;
+
+/**
+ If shouldIgnoreSwitchingByNextPrevious is YES then library will ignore this textField/textView while moving to other textField/textView using keyboard toolbar next previous buttons. Default is NO
+ */
+@property(nonatomic, assign) BOOL ignoreSwitchingByNextPrevious;
+
+///**
+// Override Enable/disable managing distance between keyboard and textField behaviour for this particular textField.
+// */
+@property(nonatomic, assign) IQEnableMode enableMode;
+
+/**
+ Override resigns Keyboard on touching outside of UITextField/View behaviour for this particular textField.
+ */
+@property(nonatomic, assign) IQEnableMode shouldResignOnTouchOutsideMode;
+
+@end
+
+///-------------------------------------------
+/// @name Custom KeyboardDistanceFromTextField
+///-------------------------------------------
+
+/**
+ Uses default keyboard distance for textField.
+ */
+extern CGFloat const kIQUseDefaultKeyboardDistance;
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m
new file mode 100644
index 0000000..24fa62b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUITextFieldView+Additions.m
@@ -0,0 +1,90 @@
+//
+// IQUITextFieldView+Additions.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQUITextFieldView+Additions.h"
+#import <objc/runtime.h>
+
+@implementation UIView (Additions)
+
+-(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField
+{
+    //Can't be less than zero. Minimum is zero.
+    keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0);
+    
+    objc_setAssociatedObject(self, @selector(keyboardDistanceFromTextField), @(keyboardDistanceFromTextField), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(CGFloat)keyboardDistanceFromTextField
+{
+    NSNumber *keyboardDistanceFromTextField = objc_getAssociatedObject(self, @selector(keyboardDistanceFromTextField));
+    
+    return (keyboardDistanceFromTextField != nil)?[keyboardDistanceFromTextField floatValue]:kIQUseDefaultKeyboardDistance;
+}
+
+-(void)setIgnoreSwitchingByNextPrevious:(BOOL)ignoreSwitchingByNextPrevious
+{
+    objc_setAssociatedObject(self, @selector(ignoreSwitchingByNextPrevious), @(ignoreSwitchingByNextPrevious), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(BOOL)ignoreSwitchingByNextPrevious
+{
+    NSNumber *ignoreSwitchingByNextPrevious = objc_getAssociatedObject(self, @selector(ignoreSwitchingByNextPrevious));
+    
+    return [ignoreSwitchingByNextPrevious boolValue];
+}
+
+-(void)setEnableMode:(IQEnableMode)enableMode
+{
+    objc_setAssociatedObject(self, @selector(enableMode), @(enableMode), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(IQEnableMode)enableMode
+{
+    NSNumber *enableMode = objc_getAssociatedObject(self, @selector(enableMode));
+    
+    return [enableMode unsignedIntegerValue];
+}
+
+-(void)setShouldResignOnTouchOutsideMode:(IQEnableMode)shouldResignOnTouchOutsideMode
+{
+    objc_setAssociatedObject(self, @selector(shouldResignOnTouchOutsideMode), @(shouldResignOnTouchOutsideMode), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(IQEnableMode)shouldResignOnTouchOutsideMode
+{
+    NSNumber *shouldResignOnTouchOutsideMode = objc_getAssociatedObject(self, @selector(shouldResignOnTouchOutsideMode));
+    
+    return [shouldResignOnTouchOutsideMode unsignedIntegerValue];
+}
+
+@end
+
+///------------------------------------
+/// @name keyboardDistanceFromTextField
+///------------------------------------
+
+/**
+ Uses default keyboard distance for textField.
+ */
+CGFloat const kIQUseDefaultKeyboardDistance = CGFLOAT_MAX;
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.h
new file mode 100644
index 0000000..be53ca7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.h
@@ -0,0 +1,133 @@
+//
+// IQUIView+Hierarchy.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <UIKit/UIView.h>
+#import <UIKit/UIViewController.h>
+#import "IQKeyboardManagerConstants.h"
+
+@class UICollectionView, UIScrollView, UITableView, UISearchBar, NSArray;
+
+/**
+ UIView hierarchy category.
+ */
+@interface UIView (IQ_UIView_Hierarchy)
+
+///----------------------
+/// @name viewControllers
+///----------------------
+
+/**
+ Returns the UIViewController object that manages the receiver.
+ */
+@property (nullable, nonatomic, readonly, strong) UIViewController *viewContainingController;
+
+/**
+ Returns the topMost UIViewController object in hierarchy.
+ */
+@property (nullable, nonatomic, readonly, strong) UIViewController *topMostController;
+
+/**
+ Returns the UIViewController object that is actually the parent of this object. Most of the time it's the viewController object which actually contains it, but result may be different if it's viewController is added as childViewController of another viewController.
+ */
+@property (nullable, nonatomic, readonly, strong) UIViewController *parentContainerViewController;
+
+///-----------------------------------
+/// @name Superviews/Subviews/Siglings
+///-----------------------------------
+
+/**
+ Returns the superView of provided class type.
+
+ @param classType class type of the object which is to be search in above hierarchy and return
+
+ @param belowView view object in upper hierarchy where method should stop searching and return nil
+ */
+-(nullable __kindof UIView*)superviewOfClassType:(nonnull Class)classType belowView:(nullable UIView*)belowView;
+-(nullable __kindof UIView*)superviewOfClassType:(nonnull Class)classType;
+
+/**
+ Returns all siblings of the receiver which canBecomeFirstResponder.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSArray<__kindof UIView*> *responderSiblings;
+
+/**
+ Returns all deep subViews of the receiver which canBecomeFirstResponder.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSArray<__kindof UIView*> *deepResponderViews;
+
+///-------------------------
+/// @name Special TextFields
+///-------------------------
+
+/**
+ Returns searchBar if receiver object is UISearchBarTextField, otherwise return nil.
+ */
+@property (nullable, nonatomic, readonly) UISearchBar *textFieldSearchBar;
+
+/**
+ Returns YES if the receiver object is UIAlertSheetTextField, otherwise return NO.
+ */
+@property (nonatomic, getter=isAlertViewTextField, readonly) BOOL alertViewTextField;
+
+///----------------
+/// @name Transform
+///----------------
+
+/**
+ Returns current view transform with respect to the 'toView'.
+ */
+-(CGAffineTransform)convertTransformToView:(nullable UIView*)toView;
+
+///-----------------
+/// @name Hierarchy
+///-----------------
+
+/**
+ Returns a string that represent the information about it's subview's hierarchy. You can use this method to debug the subview's positions.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSString *subHierarchy;
+
+/**
+ Returns an string that represent the information about it's upper hierarchy. You can use this method to debug the superview's positions.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSString *superHierarchy;
+
+/**
+ Returns an string that represent the information about it's frame positions. You can use this method to debug self positions.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSString *debugHierarchy;
+
+@end
+
+
+/**
+ NSObject category to used for logging purposes
+ */
+@interface NSObject (IQ_Logging)
+
+/**
+ Short description for logging purpose.
+ */
+@property (nonnull, nonatomic, readonly, copy) NSString *_IQDescription;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.m
new file mode 100644
index 0000000..eabb4b3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIView+Hierarchy.m
@@ -0,0 +1,439 @@
+//
+// IQUIView+Hierarchy.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQUIView+Hierarchy.h"
+#import "IQUITextFieldView+Additions.h"
+#import "IQUIViewController+Additions.h"
+
+#import <UIKit/UICollectionView.h>
+#import <UIKit/UIAlertController.h>
+#import <UIKit/UITableView.h>
+#import <UIKit/UITextView.h>
+#import <UIKit/UITextField.h>
+#import <UIKit/UISearchBar.h>
+#import <UIKit/UINavigationController.h>
+#import <UIKit/UITabBarController.h>
+#import <UIKit/UISplitViewController.h>
+#import <UIKit/UIWindow.h>
+
+#import <objc/runtime.h>
+
+#import "IQNSArray+Sort.h"
+
+@implementation UIView (IQ_UIView_Hierarchy)
+
+-(UIViewController*)viewContainingController
+{
+    UIResponder *nextResponder =  self;
+    
+    do
+    {
+        nextResponder = [nextResponder nextResponder];
+
+        if ([nextResponder isKindOfClass:[UIViewController class]])
+            return (UIViewController*)nextResponder;
+
+    } while (nextResponder);
+
+    return nil;
+}
+
+-(UIViewController *)topMostController
+{
+    NSMutableArray<UIViewController*> *controllersHierarchy = [[NSMutableArray alloc] init];
+    
+    UIViewController *topController = self.window.rootViewController;
+    
+    if (topController)
+    {
+        [controllersHierarchy addObject:topController];
+    }
+    
+    while ([topController presentedViewController]) {
+        
+        topController = [topController presentedViewController];
+        [controllersHierarchy addObject:topController];
+    }
+    
+    UIViewController *matchController = [self viewContainingController];
+    
+    while (matchController && [controllersHierarchy containsObject:matchController] == NO)
+    {
+        do
+        {
+            matchController = (UIViewController*)[matchController nextResponder];
+            
+        } while (matchController && [matchController isKindOfClass:[UIViewController class]] == NO);
+    }
+    
+    return matchController;
+}
+
+-(UIViewController *)parentContainerViewController
+{
+    UIViewController *matchController = [self viewContainingController];
+    
+    UIViewController *parentContainerViewController = nil;
+    
+    if (matchController.navigationController)
+    {
+        UINavigationController *navController = matchController.navigationController;
+        
+        while (navController.navigationController) {
+            navController = navController.navigationController;
+        }
+        
+        UIViewController *parentController = navController;
+        
+        UIViewController *parentParentController = parentController.parentViewController;
+        
+        while (parentParentController &&
+               ([parentParentController isKindOfClass:[UINavigationController class]] == NO &&
+                [parentParentController isKindOfClass:[UITabBarController class]] == NO &&
+                [parentParentController isKindOfClass:[UISplitViewController class]] == NO))
+        {
+            parentController = parentParentController;
+            parentParentController = parentController.parentViewController;
+        }
+
+        if (navController == parentController)
+        {
+            parentContainerViewController = navController.topViewController;
+        }
+        else
+        {
+            parentContainerViewController = parentController;
+        }
+    }
+    else if (matchController.tabBarController)
+    {
+        if ([matchController.tabBarController.selectedViewController isKindOfClass:[UINavigationController class]])
+        {
+            parentContainerViewController = [(UINavigationController*)matchController.tabBarController.selectedViewController topViewController];
+        }
+        else
+        {
+            parentContainerViewController = matchController.tabBarController.selectedViewController;
+        }
+    }
+    else
+    {
+        UIViewController *matchParentController = matchController.parentViewController;
+
+        while (matchParentController &&
+               ([matchParentController isKindOfClass:[UINavigationController class]] == NO &&
+                [matchParentController isKindOfClass:[UITabBarController class]] == NO &&
+                [matchParentController isKindOfClass:[UISplitViewController class]] == NO))
+        {
+            matchController = matchParentController;
+            matchParentController = matchController.parentViewController;
+        }
+        
+        parentContainerViewController = matchController;
+    }
+    
+    UIViewController *finalController = [parentContainerViewController parentIQContainerViewController] ?: parentContainerViewController;
+    
+    return finalController;
+}
+
+-(UIView*)superviewOfClassType:(nonnull Class)classType
+{
+    return [self superviewOfClassType:classType belowView:nil];
+}
+
+-(nullable __kindof UIView*)superviewOfClassType:(nonnull Class)classType belowView:(nullable UIView*)belowView
+{
+    UIView *superview = self.superview;
+    
+    while (superview)
+    {
+        if ([superview isKindOfClass:classType])
+        {
+            //If it's UIScrollView, then validating for special cases
+            if ([superview isKindOfClass:[UIScrollView class]])
+            {
+                NSString *classNameString = NSStringFromClass([superview class]);
+
+                //  If it's not UITableViewWrapperView class, this is internal class which is actually manage in UITableview. The speciality of this class is that it's superview is UITableView.
+                //  If it's not UITableViewCellScrollView class, this is internal class which is actually manage in UITableviewCell. The speciality of this class is that it's superview is UITableViewCell.
+                //If it's not _UIQueuingScrollView class, actually we validate for _ prefix which usually used by Apple internal classes
+                if ([superview.superview isKindOfClass:[UITableView class]] == NO &&
+                    [superview.superview isKindOfClass:[UITableViewCell class]] == NO &&
+                    [classNameString hasPrefix:@"_"] == NO)
+                {
+                    return superview;
+                }
+            }
+            else
+            {
+                return superview;
+            }
+        }
+        else if (belowView == superview)
+        {
+            return nil;
+        }
+        
+        superview = superview.superview;
+    }
+    
+    return nil;
+}
+
+-(BOOL)_IQcanBecomeFirstResponder
+{
+    BOOL _IQcanBecomeFirstResponder = NO;
+    
+    if ([self conformsToProtocol:@protocol(UITextInput)]) {
+        if ([self respondsToSelector:@selector(isEditable)] && [self isKindOfClass:[UIScrollView class]])
+        {
+            _IQcanBecomeFirstResponder = [(UITextView*)self isEditable];
+        }
+        else if ([self respondsToSelector:@selector(isEnabled)])
+        {
+            _IQcanBecomeFirstResponder = [(UITextField*)self isEnabled];
+        }
+    }
+    
+    if (_IQcanBecomeFirstResponder == YES)
+    {
+        _IQcanBecomeFirstResponder = ([self isUserInteractionEnabled] && ![self isHidden] && [self alpha]!=0.0 && ![self isAlertViewTextField]  && !self.textFieldSearchBar);
+    }
+    
+    return _IQcanBecomeFirstResponder;
+}
+
+- (NSArray<UIView*>*)responderSiblings
+{
+    //	Getting all siblings
+    NSArray<UIView*> *siblings = self.superview.subviews;
+    
+    //Array of (UITextField/UITextView's).
+    NSMutableArray<UIView*> *tempTextFields = [[NSMutableArray alloc] init];
+    
+    for (UIView *textField in siblings)
+        if ((textField == self || textField.ignoreSwitchingByNextPrevious == NO) && [textField _IQcanBecomeFirstResponder])
+            [tempTextFields addObject:textField];
+    
+    return tempTextFields;
+}
+
+- (NSArray<UIView*>*)deepResponderViews
+{
+    NSMutableArray<UIView*> *textFields = [[NSMutableArray alloc] init];
+    
+    for (UIView *textField in self.subviews)
+    {
+        if ((textField == self || textField.ignoreSwitchingByNextPrevious == NO) && [textField _IQcanBecomeFirstResponder])
+        {
+            [textFields addObject:textField];
+        }
+        //Sometimes there are hidden or disabled views and textField inside them still recorded, so we added some more validations here (Bug ID: #458)
+        //Uncommented else (Bug ID: #625)
+        else if (textField.subviews.count && [textField isUserInteractionEnabled] && ![textField isHidden] && [textField alpha]!=0.0)
+        {
+            [textFields addObjectsFromArray:[textField deepResponderViews]];
+        }
+    }
+
+    //subviews are returning in incorrect order. Sorting according the frames 'y'.
+    return [textFields sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) {
+        
+        CGRect frame1 = [view1 convertRect:view1.bounds toView:self];
+        CGRect frame2 = [view2 convertRect:view2.bounds toView:self];
+        
+        CGFloat x1 = CGRectGetMinX(frame1);
+        CGFloat y1 = CGRectGetMinY(frame1);
+        CGFloat x2 = CGRectGetMinX(frame2);
+        CGFloat y2 = CGRectGetMinY(frame2);
+        
+        if (y1 < y2)  return NSOrderedAscending;
+        
+        else if (y1 > y2) return NSOrderedDescending;
+        
+        //Else both y are same so checking for x positions
+        else if (x1 < x2)  return NSOrderedAscending;
+        
+        else if (x1 > x2) return NSOrderedDescending;
+        
+        else    return NSOrderedSame;
+    }];
+
+    return textFields;
+}
+
+-(CGAffineTransform)convertTransformToView:(UIView*)toView
+{
+    if (toView == nil)
+    {
+        toView = self.window;
+    }
+    
+    CGAffineTransform myTransform = CGAffineTransformIdentity;
+    
+    //My Transform
+    {
+        UIView *superView = [self superview];
+        
+        if (superView)  myTransform = CGAffineTransformConcat(self.transform, [superView convertTransformToView:nil]);
+        else            myTransform = self.transform;
+    }
+    
+    CGAffineTransform viewTransform = CGAffineTransformIdentity;
+    
+    //view Transform
+    {
+        UIView *superView = [toView superview];
+        
+        if (superView)  viewTransform = CGAffineTransformConcat(toView.transform, [superView convertTransformToView:nil]);
+        else if (toView)  viewTransform = toView.transform;
+    }
+    
+    return CGAffineTransformConcat(myTransform, CGAffineTransformInvert(viewTransform));
+}
+
+
+- (NSInteger)depth
+{
+    NSInteger depth = 0;
+    
+    if ([self superview])
+    {
+        depth = [[self superview] depth] + 1;
+    }
+    
+    return depth;
+}
+
+- (NSString *)subHierarchy
+{
+    NSMutableString *debugInfo = [[NSMutableString alloc] initWithString:@"\n"];
+    NSInteger depth = [self depth];
+    
+    for (int counter = 0; counter < depth; counter ++)  [debugInfo appendString:@"|  "];
+    
+    [debugInfo appendString:[self debugHierarchy]];
+    
+    for (UIView *subview in self.subviews)
+    {
+        [debugInfo appendString:[subview subHierarchy]];
+    }
+    
+    return debugInfo;
+}
+
+- (NSString *)superHierarchy
+{
+    NSMutableString *debugInfo = [[NSMutableString alloc] init];
+
+    if (self.superview)
+    {
+        [debugInfo appendString:[self.superview superHierarchy]];
+    }
+    else
+    {
+        [debugInfo appendString:@"\n"];
+    }
+    
+    NSInteger depth = [self depth];
+    
+    for (int counter = 0; counter < depth; counter ++)  [debugInfo appendString:@"|  "];
+    
+    [debugInfo appendString:[self debugHierarchy]];
+
+    [debugInfo appendString:@"\n"];
+    
+    return debugInfo;
+}
+
+-(NSString *)debugHierarchy
+{
+    NSMutableString *debugInfo = [[NSMutableString alloc] init];
+
+    [debugInfo appendFormat:@"%@: ( %.0f, %.0f, %.0f, %.0f )",NSStringFromClass([self class]), CGRectGetMinX(self.frame), CGRectGetMinY(self.frame), CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)];
+    
+    if ([self isKindOfClass:[UIScrollView class]])
+    {
+        UIScrollView *scrollView = (UIScrollView*)self;
+        [debugInfo appendFormat:@"%@: ( %.0f, %.0f )",NSStringFromSelector(@selector(contentSize)),scrollView.contentSize.width,scrollView.contentSize.height];
+    }
+    
+    if (CGAffineTransformEqualToTransform(self.transform, CGAffineTransformIdentity) == false)
+    {
+        [debugInfo appendFormat:@"%@: %@",NSStringFromSelector(@selector(transform)),NSStringFromCGAffineTransform(self.transform)];
+    }
+    
+    return debugInfo;
+}
+
+-(UISearchBar *)textFieldSearchBar
+{
+    UIResponder *searchBar = [self nextResponder];
+    
+    while (searchBar)
+    {
+        if ([searchBar isKindOfClass:[UISearchBar class]])
+        {
+            return (UISearchBar*)searchBar;
+        }
+        else if ([searchBar isKindOfClass:[UIViewController class]])    //If found viewcontroller but still not found UISearchBar then it's not the search bar textfield
+        {
+            break;
+        }
+        
+        searchBar = [searchBar nextResponder];
+    }
+    
+    return nil;
+}
+
+-(BOOL)isAlertViewTextField
+{
+    UIResponder *alertViewController = [self viewContainingController];
+    
+    BOOL isAlertViewTextField = NO;
+    while (alertViewController && isAlertViewTextField == NO)
+    {
+        if ([alertViewController isKindOfClass:[UIAlertController class]])
+        {
+            isAlertViewTextField = YES;
+            break;
+        }
+
+        alertViewController = [alertViewController nextResponder];
+    }
+    
+    return isAlertViewTextField;
+}
+
+@end
+
+@implementation NSObject (IQ_Logging)
+
+-(NSString *)_IQDescription
+{
+    return [NSString stringWithFormat:@"<%@ %p>",NSStringFromClass([self class]),self];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.h
new file mode 100644
index 0000000..5318b43
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.h
@@ -0,0 +1,42 @@
+//
+// IQUIViewController+Additions.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <UIKit/UIViewController.h>
+
+@class NSLayoutConstraint;
+
+@interface UIViewController (Additions)
+
+/**
+ This method is provided to override by viewController's if the library lifts a viewController which you doesn't want to lift . This may happen if you have implemented side menu feature in your app and the library try to lift the side menu controller. Overriding this method in side menu class to return correct controller should fix the problem.
+*/
+-(nullable UIViewController*)parentIQContainerViewController;
+
+/**
+ Top/Bottom Layout constraint which help library to manage keyboardTextField distance
+
+ @deprecated    Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview.
+*/
+@property(nullable, nonatomic, strong) IBOutlet NSLayoutConstraint *IQLayoutGuideConstraint __attribute__((deprecated("Due to change in core-logic of handling distance between textField and keyboard distance, this layout contraint tweak is no longer needed and things will just work out of the box regardless of constraint pinned with safeArea/layoutGuide/superview.")));
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.m
new file mode 100644
index 0000000..8c08fa5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Categories/IQUIViewController+Additions.m
@@ -0,0 +1,45 @@
+//
+// IQUIViewController+Additions.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQUIViewController+Additions.h"
+#import <UIKit/NSLayoutConstraint.h>
+#import <objc/runtime.h>
+
+@implementation UIViewController (Additions)
+
+-(nullable UIViewController*)parentIQContainerViewController
+{
+    return self;
+}
+
+-(void)setIQLayoutGuideConstraint:(NSLayoutConstraint *)IQLayoutGuideConstraint
+{
+    objc_setAssociatedObject(self, @selector(IQLayoutGuideConstraint), IQLayoutGuideConstraint, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+-(NSLayoutConstraint *)IQLayoutGuideConstraint
+{
+    return objc_getAssociatedObject(self, @selector(IQLayoutGuideConstraint));
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h
new file mode 100644
index 0000000..548f16f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstants.h
@@ -0,0 +1,156 @@
+//
+// IQKeyboardManagerConstants.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef IQKeyboardManagerConstants_h
+#define IQKeyboardManagerConstants_h
+
+#import <Foundation/NSObjCRuntime.h>
+
+///-----------------------------------
+/// @name IQAutoToolbarManageBehaviour
+///-----------------------------------
+
+/**
+ `IQAutoToolbarBySubviews`
+ Creates Toolbar according to subview's hirarchy of Textfield's in view.
+ 
+ `IQAutoToolbarByTag`
+ Creates Toolbar according to tag property of TextField's.
+ 
+ `IQAutoToolbarByPosition`
+ Creates Toolbar according to the y,x position of textField in it's superview coordinate.
+ */
+typedef NS_ENUM(NSInteger, IQAutoToolbarManageBehaviour) {
+    IQAutoToolbarBySubviews,
+    IQAutoToolbarByTag,
+    IQAutoToolbarByPosition,
+};
+
+/**
+ `IQPreviousNextDisplayModeDefault`
+ Show NextPrevious when there are more than 1 textField otherwise hide.
+ 
+ `IQPreviousNextDisplayModeAlwaysHide`
+ Do not show NextPrevious buttons in any case.
+ 
+ `IQPreviousNextDisplayModeAlwaysShow`
+ Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled.
+ */
+typedef NS_ENUM(NSUInteger, IQPreviousNextDisplayMode) {
+    IQPreviousNextDisplayModeDefault,
+    IQPreviousNextDisplayModeAlwaysHide,
+    IQPreviousNextDisplayModeAlwaysShow,
+};
+
+/**
+ `IQEnableModeDefault`
+ Pick default settings.
+ 
+ `IQEnableModeEnabled`
+ setting is enabled.
+ 
+ `IQEnableModeDisabled`
+ setting is disabled.
+ */
+typedef NS_ENUM(NSUInteger, IQEnableMode) {
+    IQEnableModeDefault,
+    IQEnableModeEnabled,
+    IQEnableModeDisabled,
+};
+
+#endif
+
+/*
+ 
+ /---------------------------------------------------------------------------------------------------\
+ \---------------------------------------------------------------------------------------------------/
+ |                                   iOS NSNotification Mechanism                                    |
+ /---------------------------------------------------------------------------------------------------\
+ \---------------------------------------------------------------------------------------------------/
+
+ 
+ ------------------------------------------------------------
+ When UITextField become first responder
+ ------------------------------------------------------------
+ - UITextFieldTextDidBeginEditingNotification (UITextField)
+ - UIKeyboardWillShowNotification
+ - UIKeyboardDidShowNotification
+ 
+ ------------------------------------------------------------
+ When UITextView become first responder
+ ------------------------------------------------------------
+ - UIKeyboardWillShowNotification
+ - UITextViewTextDidBeginEditingNotification (UITextView)
+ - UIKeyboardDidShowNotification
+
+ ------------------------------------------------------------
+ When switching focus from UITextField to another UITextField
+ ------------------------------------------------------------
+ - UITextFieldTextDidEndEditingNotification (UITextField1)
+ - UITextFieldTextDidBeginEditingNotification (UITextField2)
+ - UIKeyboardWillShowNotification
+ - UIKeyboardDidShowNotification
+
+ ------------------------------------------------------------
+ When switching focus from UITextView to another UITextView
+ ------------------------------------------------------------
+ - UITextViewTextDidEndEditingNotification : (UITextView1)
+ - UIKeyboardWillShowNotification
+ - UITextViewTextDidBeginEditingNotification : (UITextView2)
+ - UIKeyboardDidShowNotification
+ 
+ ------------------------------------------------------------
+ When switching focus from UITextField to UITextView
+ ------------------------------------------------------------
+ - UITextFieldTextDidEndEditingNotification (UITextField)
+ - UIKeyboardWillShowNotification
+ - UITextViewTextDidBeginEditingNotification (UITextView)
+ - UIKeyboardDidShowNotification
+
+ ------------------------------------------------------------
+ When switching focus from UITextView to UITextField
+ ------------------------------------------------------------
+ - UITextViewTextDidEndEditingNotification (UITextView)
+ - UITextFieldTextDidBeginEditingNotification (UITextField)
+ - UIKeyboardWillShowNotification
+ - UIKeyboardDidShowNotification
+
+ ------------------------------------------------------------
+ When opening/closing UIKeyboard Predictive bar
+ ------------------------------------------------------------
+ - UIKeyboardWillShowNotification
+ - UIKeyboardDidShowNotification
+
+ ------------------------------------------------------------
+ On orientation change
+ ------------------------------------------------------------
+ - UIApplicationWillChangeStatusBarOrientationNotification
+ - UIKeyboardWillHideNotification
+ - UIKeyboardDidHideNotification
+ - UIApplicationDidChangeStatusBarOrientationNotification
+ - UIKeyboardWillShowNotification
+ - UIKeyboardDidShowNotification
+ - UIKeyboardWillShowNotification
+ - UIKeyboardDidShowNotification
+ 
+ */
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h
new file mode 100644
index 0000000..0ae4ac4
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/Constants/IQKeyboardManagerConstantsInternal.h
@@ -0,0 +1,28 @@
+//
+// IQKeyboardManagerConstantsInternal.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#ifndef IQKeyboardManagerConstantsInternal_h
+#define IQKeyboardManagerConstantsInternal_h
+
+
+#endif
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.h
new file mode 100755
index 0000000..1579947
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.h
@@ -0,0 +1,347 @@
+//
+// IQKeyboardManager.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQKeyboardManagerConstants.h"
+#import "IQUIView+IQKeyboardToolbar.h"
+#import "IQPreviousNextView.h"
+#import "IQUIViewController+Additions.h"
+#import "IQKeyboardReturnKeyHandler.h"
+#import "IQTextView.h"
+#import "IQToolbar.h"
+#import "IQUIScrollView+Additions.h"
+#import "IQUITextFieldView+Additions.h"
+#import "IQBarButtonItem.h"
+#import "IQTitleBarButtonItem.h"
+#import "IQUIView+Hierarchy.h"
+
+#import <CoreGraphics/CGBase.h>
+
+#import <Foundation/NSObject.h>
+#import <Foundation/NSObjCRuntime.h>
+#import <Foundation/NSSet.h>
+
+#import <UIKit/UITextInputTraits.h>
+
+@class UIFont, UIColor, UITapGestureRecognizer, UIView, UIImage;
+
+@class NSString;
+
+///---------------------
+/// @name IQToolbar tags
+///---------------------
+
+/**
+ Default tag for toolbar with Done button   -1002.
+ */
+extern NSInteger const kIQDoneButtonToolbarTag;
+
+/**
+ Default tag for toolbar with Previous/Next buttons -1005.
+ */
+extern NSInteger const kIQPreviousNextButtonToolbarTag;
+
+
+
+/**
+ Codeless drop-in universal library allows to prevent issues of keyboard sliding up and cover UITextField/UITextView. Neither need to write any code nor any setup required and much more. A generic version of KeyboardManagement. https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html
+ */
+@interface IQKeyboardManager : NSObject
+
+///--------------------------
+/// @name UIKeyboard handling
+///--------------------------
+
+/**
+ Returns the default singleton instance. You are not allowed to create your own instances of this class.
+ */
++ (nonnull instancetype)sharedManager;
+
+/**
+ Enable/disable managing distance between keyboard and textField. Default is YES(Enabled when class loads in `+(void)load` method).
+ */
+@property(nonatomic, assign, getter = isEnabled) BOOL enable;
+
+/**
+ To set keyboard distance from textField. can't be less than zero. Default is 10.0.
+ */
+@property(nonatomic, assign) CGFloat keyboardDistanceFromTextField;
+
+/**
+ Refreshes textField/textView position if any external changes is explicitly made by user.
+ */
+- (void)reloadLayoutIfNeeded;
+
+/** 
+ Boolean to know if keyboard is showing.
+ */
+@property(nonatomic, assign, readonly, getter = isKeyboardShowing) BOOL  keyboardShowing;
+
+/**
+ moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value.
+ */
+@property(nonatomic, assign, readonly) CGFloat movedDistance;
+
+/**
+ Will be called then movedDistance will be changed.
+ */
+@property(nullable, nonatomic, copy) void (^movedDistanceChanged)(CGFloat movedDistance);
+
+///-------------------------
+/// @name IQToolbar handling
+///-------------------------
+
+/**
+ Automatic add IQToolbar functionality. Default is YES.
+ */
+@property(nonatomic, assign, getter = isEnableAutoToolbar) BOOL enableAutoToolbar;
+
+/**
+ IQAutoToolbarBySubviews:   Creates Toolbar according to subview's hirarchy of Textfield's in view.
+ IQAutoToolbarByTag:        Creates Toolbar according to tag property of TextField's.
+ IQAutoToolbarByPosition:   Creates Toolbar according to the y,x position of textField in it's superview coordinate.
+
+ Default is IQAutoToolbarBySubviews.
+*/
+@property(nonatomic, assign) IQAutoToolbarManageBehaviour toolbarManageBehaviour;
+
+/**
+ If YES, then uses textField's tintColor property for IQToolbar, otherwise tint color is nil. Default is NO.
+ */
+@property(nonatomic, assign) BOOL shouldToolbarUsesTextFieldTintColor;
+
+/**
+ This is used for toolbar.tintColor when textfield.keyboardAppearance is UIKeyboardAppearanceDefault. If shouldToolbarUsesTextFieldTintColor is YES then this property is ignored. Default is nil.
+ */
+@property(nullable, nonatomic, strong) UIColor *toolbarTintColor;
+
+/**
+ This is used for toolbar.barTintColor. Default is nil.
+ */
+@property(nullable, nonatomic, strong) UIColor *toolbarBarTintColor;
+
+/**
+ IQPreviousNextDisplayModeDefault:      Show NextPrevious when there are more than 1 textField otherwise hide.
+ IQPreviousNextDisplayModeAlwaysHide:   Do not show NextPrevious buttons in any case.
+ IQPreviousNextDisplayModeAlwaysShow:   Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled.
+ */
+@property(nonatomic, assign) IQPreviousNextDisplayMode previousNextDisplayMode;
+
+/**
+ Toolbar previous/next/done button icon, If nothing is provided then check toolbarDoneBarButtonItemText to draw done button.
+ */
+@property(nullable, nonatomic, strong) UIImage *toolbarPreviousBarButtonItemImage;
+@property(nullable, nonatomic, strong) UIImage *toolbarNextBarButtonItemImage;
+@property(nullable, nonatomic, strong) UIImage *toolbarDoneBarButtonItemImage;
+
+/**
+ Toolbar previous/next/done button text, If nothing is provided then system default 'UIBarButtonSystemItemDone' will be used.
+ */
+@property(nullable, nonatomic, strong) NSString *toolbarPreviousBarButtonItemText;
+@property(nullable, nonatomic, strong) NSString *toolbarPreviousBarButtonItemAccessibilityLabel;
+@property(nullable, nonatomic, strong) NSString *toolbarNextBarButtonItemText;
+@property(nullable, nonatomic, strong) NSString *toolbarNextBarButtonItemAccessibilityLabel;
+@property(nullable, nonatomic, strong) NSString *toolbarDoneBarButtonItemText;
+@property(nullable, nonatomic, strong) NSString *toolbarDoneBarButtonItemAccessibilityLabel;
+
+/**
+ If YES, then it add the textField's placeholder text on IQToolbar. Default is YES.
+ */
+@property(nonatomic, assign) BOOL shouldShowToolbarPlaceholder;
+
+/**
+ Placeholder Font. Default is nil.
+ */
+@property(nullable, nonatomic, strong) UIFont *placeholderFont;
+
+/**
+ Placeholder Color. Default is nil. Which means lightGray
+ */
+@property(nullable, nonatomic, strong) UIColor *placeholderColor;
+
+/**
+ Placeholder Button Color when it's treated as button. Default is nil
+ */
+@property(nullable, nonatomic, strong) UIColor *placeholderButtonColor;
+
+/**
+ Reload all toolbar buttons on the fly.
+ */
+- (void)reloadInputViews;
+
+///---------------------------------------
+/// @name UIKeyboard appearance overriding
+///---------------------------------------
+
+/**
+ Override the keyboardAppearance for all textField/textView. Default is NO.
+ */
+@property(nonatomic, assign) BOOL overrideKeyboardAppearance;
+
+/**
+ If overrideKeyboardAppearance is YES, then all the textField keyboardAppearance is set using this property.
+ */
+@property(nonatomic, assign) UIKeyboardAppearance keyboardAppearance;
+
+///-----------------------------------------------------------
+/// @name UITextField/UITextView Next/Previous/Resign handling
+///-----------------------------------------------------------
+
+/**
+ Resigns Keyboard on touching outside of UITextField/View. Default is NO.
+ */
+@property(nonatomic, assign) BOOL shouldResignOnTouchOutside;
+
+/** TapGesture to resign keyboard on view's touch. It's a readonly property and exposed only for adding/removing dependencies if your added gesture does have collision with this one */
+@property(nonnull, nonatomic, strong, readonly) UITapGestureRecognizer  *resignFirstResponderGesture;
+
+/**
+ Resigns currently first responder field.
+ */
+- (BOOL)resignFirstResponder;
+
+/**
+ Returns YES if can navigate to previous responder textField/textView, otherwise NO.
+ */
+@property (nonatomic, readonly) BOOL canGoPrevious;
+
+/**
+ Returns YES if can navigate to next responder textField/textView, otherwise NO.
+ */
+@property (nonatomic, readonly) BOOL canGoNext;
+
+/**
+ Navigate to previous responder textField/textView.
+ */
+- (BOOL)goPrevious;
+
+/**
+ Navigate to next responder textField/textView.
+ */
+- (BOOL)goNext;
+
+///-----------------------
+/// @name UISound handling
+///-----------------------
+
+/**
+ If YES, then it plays inputClick sound on next/previous/done click. Default is YES.
+ */
+@property(nonatomic, assign) BOOL shouldPlayInputClicks;
+
+///---------------------------
+/// @name UIAnimation handling
+///---------------------------
+
+/**
+ If YES, then calls 'setNeedsLayout' and 'layoutIfNeeded' on any frame update of to viewController's view.
+ */
+@property(nonatomic, assign) BOOL layoutIfNeededOnUpdate;
+
+///---------------------------------------------
+/// @name Class Level enabling/disabling methods
+///---------------------------------------------
+
+/**
+ Disable distance handling within the scope of disabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is [UITableViewController, UIAlertController, _UIAlertControllerTextFieldViewController].
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *disabledDistanceHandlingClasses;
+
+/**
+ Enable distance handling within the scope of enabled distance handling viewControllers classes. Within this scope, 'enabled' property is ignored. Class should be kind of UIViewController. Default is [].
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *enabledDistanceHandlingClasses;
+
+/**
+ Disable automatic toolbar creation within the scope of disabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is [UIAlertController, _UIAlertControllerTextFieldViewController].
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *disabledToolbarClasses;
+
+/**
+ Enable automatic toolbar creation within the scope of enabled toolbar viewControllers classes. Within this scope, 'enableAutoToolbar' property is ignored. Class should be kind of UIViewController. Default is [].
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *enabledToolbarClasses;
+
+/**
+ Allowed subclasses of UIView to add all inner textField, this will allow to navigate between textField contains in different superview. Class should be kind of UIView. Default is [UITableView, UICollectionView, IQPreviousNextView].
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *toolbarPreviousNextAllowedClasses;
+
+/**
+ Disabled classes to ignore 'shouldResignOnTouchOutside' property, Class should be kind of UIViewController. Default is [UIAlertController, UIAlertControllerTextFieldViewController]
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *disabledTouchResignedClasses;
+
+/**
+ Enabled classes to forcefully enable 'shouldResignOnTouchOutsite' property. Class should be kind of UIViewController. Default is [].
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *enabledTouchResignedClasses;
+
+/**
+ if shouldResignOnTouchOutside is enabled then you can customise the behaviour to not recognise gesture touches on some specific view subclasses. Class should be kind of UIView. Default is [UIControl, UINavigationBar]
+ */
+@property(nonatomic, strong, nonnull, readonly) NSMutableSet<Class> *touchResignedGestureIgnoreClasses;
+
+///-------------------------------------------
+/// @name Third Party Library support
+/// Add TextField/TextView Notifications customised NSNotifications. For example while using YYTextView https://github.com/ibireme/YYText
+///-------------------------------------------
+
+/**
+ Add/Remove customised Notification for third party customised TextField/TextView. Please be aware that the NSNotification object must be identical to UITextField/UITextView NSNotification objects and customised TextField/TextView support must be identical to UITextField/UITextView.
+ @param didBeginEditingNotificationName This should be identical to UITextViewTextDidBeginEditingNotification
+ @param didEndEditingNotificationName This should be identical to UITextViewTextDidEndEditingNotification
+ */
+-(void)registerTextFieldViewClass:(nonnull Class)aClass
+  didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName
+    didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName;
+-(void)unregisterTextFieldViewClass:(nonnull Class)aClass
+    didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName
+      didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName;
+
+///----------------------------------------
+/// @name Debugging & Developer options
+///----------------------------------------
+
+@property(nonatomic, assign) BOOL enableDebugging;
+
+/**
+ @warning Use these methods to completely enable/disable notifications registered by library internally. Please keep in mind that library is totally dependent on NSNotification of UITextField, UITextField, Keyboard etc. If you do unregisterAllNotifications then library will not work at all. You should only use below methods if you want to completely disable all library functions. You should use below methods at your own risk.
+ */
+-(void)registerAllNotifications;
+-(void)unregisterAllNotifications;
+
+///----------------------------------------
+/// @name Must not be used for subclassing.
+///----------------------------------------
+
+/**
+ Unavailable. Please use sharedManager method
+ */
+-(nonnull instancetype)init NS_UNAVAILABLE;
+
+/**
+ Unavailable. Please use sharedManager method
+ */
++ (nonnull instancetype)new NS_UNAVAILABLE;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.m
new file mode 100644
index 0000000..7a54e69
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardManager.m
@@ -0,0 +1,2461 @@
+//
+// IQKeyboardManager.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQKeyboardManager.h"
+#import "IQUIView+Hierarchy.h"
+#import "IQUIView+IQKeyboardToolbar.h"
+#import "IQNSArray+Sort.h"
+#import "IQKeyboardManagerConstantsInternal.h"
+#import "IQUIScrollView+Additions.h"
+#import "IQUITextFieldView+Additions.h"
+#import "IQUIViewController+Additions.h"
+#import "IQPreviousNextView.h"
+
+#import <QuartzCore/CABase.h>
+
+#import <objc/runtime.h>
+
+#import <UIKit/UIAlertController.h>
+#import <UIKit/UISearchBar.h>
+#import <UIKit/UIScreen.h>
+#import <UIKit/UINavigationBar.h>
+#import <UIKit/UITapGestureRecognizer.h>
+#import <UIKit/UITextField.h>
+#import <UIKit/UITextView.h>
+#import <UIKit/UITableViewController.h>
+#import <UIKit/UICollectionViewController.h>
+#import <UIKit/UICollectionViewCell.h>
+#import <UIKit/UICollectionViewLayout.h>
+#import <UIKit/UINavigationController.h>
+#import <UIKit/UITouch.h>
+#import <UIKit/UIWindow.h>
+#import <UIKit/UIStackView.h>
+#import <UIKit/NSLayoutConstraint.h>
+#import <UIKit/UIStackView.h>
+#import <UIKit/UIAccessibility.h>
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+#import <UIKit/UIWindowScene.h>
+#import <UIKit/UIStatusBarManager.h>
+#endif
+
+NSInteger const kIQDoneButtonToolbarTag             =   -1002;
+NSInteger const kIQPreviousNextButtonToolbarTag     =   -1005;
+
+#define kIQCGPointInvalid CGPointMake(CGFLOAT_MAX, CGFLOAT_MAX)
+
+@interface IQKeyboardManager()<UIGestureRecognizerDelegate>
+
+/*******************************************/
+
+/** used to adjust contentInset of UITextView. */
+@property(nonatomic, assign) UIEdgeInsets     startingTextViewContentInsets;
+
+/** used to adjust scrollIndicatorInsets of UITextView. */
+@property(nonatomic, assign) UIEdgeInsets   startingTextViewScrollIndicatorInsets;
+
+/** used with textView to detect a textFieldView contentInset is changed or not. (Bug ID: #92)*/
+@property(nonatomic, assign) BOOL    isTextViewContentInsetChanged;
+
+/*******************************************/
+
+/** To save UITextField/UITextView object voa textField/textView notifications. */
+@property(nullable, nonatomic, weak) UIView       *textFieldView;
+
+/** To save rootViewController.view.frame.origin. */
+@property(nonatomic, assign) CGPoint    topViewBeginOrigin;
+
+/** To save rootViewController */
+@property(nullable, nonatomic, weak) UIViewController *rootViewController;
+
+/** To overcome with popGestureRecognizer issue Bug ID: #1361 */
+@property(nullable, nonatomic, weak) UIViewController *rootViewControllerWhilePopGestureRecognizerActive;
+@property(nonatomic, assign) CGPoint    topViewBeginOriginWhilePopGestureRecognizerActive;
+
+/** To know if we have any pending request to adjust view position. */
+@property(nonatomic, assign) BOOL   hasPendingAdjustRequest;
+
+/*******************************************/
+
+/** Variable to save lastScrollView that was scrolled. */
+@property(nullable, nonatomic, weak) UIScrollView     *lastScrollView;
+
+/** LastScrollView's initial contentInsets. */
+@property(nonatomic, assign) UIEdgeInsets   startingContentInsets;
+
+/** LastScrollView's initial scrollIndicatorInsets. */
+@property(nonatomic, assign) UIEdgeInsets   startingScrollIndicatorInsets;
+
+/** LastScrollView's initial contentOffset. */
+@property(nonatomic, assign) CGPoint        startingContentOffset;
+
+/*******************************************/
+
+/** To save keyboard animation duration. */
+@property(nonatomic, assign) CGFloat    animationDuration;
+
+/** To mimic the keyboard animation */
+@property(nonatomic, assign) NSInteger  animationCurve;
+
+/*******************************************/
+
+/** TapGesture to resign keyboard on view's touch. It's a readonly property and exposed only for adding/removing dependencies if your added gesture does have collision with this one */
+@property(nonnull, nonatomic, strong, readwrite) UITapGestureRecognizer  *resignFirstResponderGesture;
+
+/**
+ moved distance to the top used to maintain distance between keyboard and textField. Most of the time this will be a positive value.
+ */
+@property(nonatomic, assign, readwrite) CGFloat movedDistance;
+
+/*******************************************/
+
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *disabledDistanceHandlingClasses;
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *enabledDistanceHandlingClasses;
+
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *disabledToolbarClasses;
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *enabledToolbarClasses;
+
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *toolbarPreviousNextAllowedClasses;
+
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *disabledTouchResignedClasses;
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *enabledTouchResignedClasses;
+@property(nonatomic, strong, nonnull, readwrite) NSMutableSet<Class> *touchResignedGestureIgnoreClasses;
+
+/*******************************************/
+
+@end
+
+@implementation IQKeyboardManager
+{
+	@package
+
+    /*******************************************/
+    
+    /** To save keyboardWillShowNotification. Needed for enable keyboard functionality. */
+    NSNotification          *_kbShowNotification;
+    
+    /** To save keyboard size. */
+    CGRect                   _kbFrame;
+    
+    /*******************************************/
+}
+
+//UIKeyboard handling
+@synthesize enable                              =   _enable;
+@synthesize keyboardDistanceFromTextField       =   _keyboardDistanceFromTextField;
+
+//Keyboard Appearance handling
+@synthesize overrideKeyboardAppearance          =   _overrideKeyboardAppearance;
+@synthesize keyboardAppearance                  =   _keyboardAppearance;
+
+//IQToolbar handling
+@synthesize enableAutoToolbar                   =   _enableAutoToolbar;
+@synthesize toolbarManageBehaviour              =   _toolbarManageBehaviour;
+
+@synthesize shouldToolbarUsesTextFieldTintColor =   _shouldToolbarUsesTextFieldTintColor;
+@synthesize toolbarTintColor                    =   _toolbarTintColor;
+@synthesize toolbarBarTintColor                 =   _toolbarBarTintColor;
+@synthesize shouldShowToolbarPlaceholder        =   _shouldShowToolbarPlaceholder;
+@synthesize placeholderFont                     =   _placeholderFont;
+@synthesize placeholderColor                    =   _placeholderColor;
+@synthesize placeholderButtonColor              =   _placeholderButtonColor;
+
+//Resign handling
+@synthesize shouldResignOnTouchOutside          =   _shouldResignOnTouchOutside;
+@synthesize resignFirstResponderGesture         =   _resignFirstResponderGesture;
+
+//Sound handling
+@synthesize shouldPlayInputClicks               =   _shouldPlayInputClicks;
+
+//Animation handling
+@synthesize layoutIfNeededOnUpdate              =   _layoutIfNeededOnUpdate;
+
+#pragma mark - Initializing functions
+
+/**
+ Override +load method to enable KeyboardManager when class loader load IQKeyboardManager. Enabling when app starts (No need to write any code)
+ 
+ @Note: If you want to disable `+ (void)load` method, you can add build setting in configurations. Like that:
+       `{ 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) IQ_KEYBOARD_MANAGER_LOAD_METHOD_DISABLE=1' }`
+ */
+#if !IQ_KEYBOARD_MANAGER_LOAD_METHOD_DISABLE
++(void)load
+{
+    //Enabling IQKeyboardManager. Loading asynchronous on main thread
+    [self performSelectorOnMainThread:@selector(sharedManager) withObject:nil waitUntilDone:NO];
+}
+#endif
+
+/*  Singleton Object Initialization. */
+-(instancetype)init
+{
+	if (self = [super init])
+    {
+        __weak __typeof__(self) weakSelf = self;
+        
+        static dispatch_once_t onceToken;
+        dispatch_once(&onceToken, ^{
+            
+            __strong __typeof__(self) strongSelf = weakSelf;
+            
+            [strongSelf registerAllNotifications];
+
+            //Creating gesture for @shouldResignOnTouchOutside. (Enhancement ID: #14)
+            strongSelf.resignFirstResponderGesture = [[UITapGestureRecognizer alloc] initWithTarget:strongSelf action:@selector(tapRecognized:)];
+            strongSelf.resignFirstResponderGesture.cancelsTouchesInView = NO;
+            [strongSelf.resignFirstResponderGesture setDelegate:strongSelf];
+            strongSelf.resignFirstResponderGesture.enabled = strongSelf.shouldResignOnTouchOutside;
+            strongSelf.topViewBeginOrigin = kIQCGPointInvalid;
+            strongSelf.topViewBeginOriginWhilePopGestureRecognizerActive = kIQCGPointInvalid;
+            
+            //Setting it's initial values
+            strongSelf.animationDuration = 0.25;
+            strongSelf.animationCurve = UIViewAnimationCurveEaseInOut;
+            [strongSelf setEnable:YES];
+			[strongSelf setKeyboardDistanceFromTextField:10.0];
+            [strongSelf setShouldPlayInputClicks:YES];
+            [strongSelf setShouldResignOnTouchOutside:NO];
+            [strongSelf setOverrideKeyboardAppearance:NO];
+            [strongSelf setKeyboardAppearance:UIKeyboardAppearanceDefault];
+            [strongSelf setEnableAutoToolbar:YES];
+            [strongSelf setShouldShowToolbarPlaceholder:YES];
+            [strongSelf setToolbarManageBehaviour:IQAutoToolbarBySubviews];
+            [strongSelf setLayoutIfNeededOnUpdate:NO];
+            [strongSelf setShouldToolbarUsesTextFieldTintColor:NO];
+
+            //Loading IQToolbar, IQTitleBarButtonItem, IQBarButtonItem to fix first time keyboard appearance delay (Bug ID: #550)
+            {
+                //If you experience exception breakpoint issue at below line then try these solutions https://stackoverflow.com/questions/27375640/all-exception-break-point-is-stopping-for-no-reason-on-simulator
+                UITextField *view = [[UITextField alloc] init];
+                [view addDoneOnKeyboardWithTarget:nil action:nil];
+                [view addPreviousNextDoneOnKeyboardWithTarget:nil previousAction:nil nextAction:nil doneAction:nil];
+            }
+            
+            //Initializing disabled classes Set.
+            strongSelf.disabledDistanceHandlingClasses = [[NSMutableSet alloc] initWithObjects:[UITableViewController class],[UIAlertController class], nil];
+            strongSelf.enabledDistanceHandlingClasses = [[NSMutableSet alloc] init];
+            
+            strongSelf.disabledToolbarClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil];
+            strongSelf.enabledToolbarClasses = [[NSMutableSet alloc] init];
+            
+            strongSelf.toolbarPreviousNextAllowedClasses = [[NSMutableSet alloc] initWithObjects:[UITableView class],[UICollectionView class],[IQPreviousNextView class], nil];
+            
+            strongSelf.disabledTouchResignedClasses = [[NSMutableSet alloc] initWithObjects:[UIAlertController class], nil];
+            strongSelf.enabledTouchResignedClasses = [[NSMutableSet alloc] init];
+            strongSelf.touchResignedGestureIgnoreClasses = [[NSMutableSet alloc] initWithObjects:[UIControl class],[UINavigationBar class], nil];
+        });
+    }
+    return self;
+}
+
+/*  Automatically called from the `+(void)load` method. */
++ (IQKeyboardManager*)sharedManager
+{
+	//Singleton instance
+	static IQKeyboardManager *kbManager;
+	
+	static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        
+        kbManager = [[self alloc] init];
+    });
+	
+	return kbManager;
+}
+
+#pragma mark - Dealloc
+-(void)dealloc
+{
+    //  Disable the keyboard manager.
+	[self setEnable:NO];
+    
+    //Removing notification observers on dealloc.
+	[[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+#pragma mark - Property functions
+-(void)setEnable:(BOOL)enable
+{
+	// If not enabled, enable it.
+    if (enable == YES &&
+        _enable == NO)
+    {
+		//Setting YES to _enable.
+		_enable = enable;
+        
+		//If keyboard is currently showing. Sending a fake notification for keyboardWillShow to adjust view according to keyboard.
+		if (_kbShowNotification)	[self keyboardWillShow:_kbShowNotification];
+
+        [self showLog:@"Enabled"];
+    }
+	//If not disable, desable it.
+    else if (enable == NO &&
+             _enable == YES)
+    {
+		//Sending a fake notification for keyboardWillHide to retain view's original position.
+		[self keyboardWillHide:nil];
+        
+		//Setting NO to _enable.
+		_enable = enable;
+		
+        [self showLog:@"Disabled"];
+    }
+	//If already disabled.
+	else if (enable == NO &&
+             _enable == NO)
+	{
+        [self showLog:@"Already Disabled"];
+	}
+	//If already enabled.
+	else if (enable == YES &&
+             _enable == YES)
+	{
+        [self showLog:@"Already Enabled"];
+	}
+}
+
+-(BOOL)privateIsEnabled
+{
+    BOOL enable = _enable;
+    
+    IQEnableMode enableMode = _textFieldView.enableMode;
+
+    if (enableMode == IQEnableModeEnabled)
+    {
+        enable = YES;
+    }
+    else if (enableMode == IQEnableModeDisabled)
+    {
+        enable = NO;
+    }
+    else
+    {
+        __strong __typeof__(UIView) *strongTextFieldView = _textFieldView;
+
+        UIViewController *textFieldViewController = [strongTextFieldView viewContainingController];
+        
+        if (textFieldViewController)
+        {
+            //If it is searchBar textField embedded in Navigation Bar
+            if ([strongTextFieldView textFieldSearchBar] != nil && [textFieldViewController isKindOfClass:[UINavigationController class]]) {
+                
+                UINavigationController *navController = (UINavigationController*)textFieldViewController;
+                if (navController.topViewController) {
+                    textFieldViewController = navController.topViewController;
+                }
+            }
+
+            if (enable == NO)
+            {
+                //If viewController is kind of enable viewController class, then assuming it's enabled.
+                for (Class enabledClass in _enabledDistanceHandlingClasses)
+                {
+                    if ([textFieldViewController isKindOfClass:enabledClass])
+                    {
+                        enable = YES;
+                        break;
+                    }
+                }
+            }
+            
+            if (enable)
+            {
+                //If viewController is kind of disable viewController class, then assuming it's disable.
+                for (Class disabledClass in _disabledDistanceHandlingClasses)
+                {
+                    if ([textFieldViewController isKindOfClass:disabledClass])
+                    {
+                        enable = NO;
+                        break;
+                    }
+                }
+                
+                //Special Controllers
+                if (enable == YES)
+                {
+                    NSString *classNameString = NSStringFromClass([textFieldViewController class]);
+                    
+                    //_UIAlertControllerTextFieldViewController
+                    if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"])
+                    {
+                        enable = NO;
+                    }
+                }
+            }
+        }
+    }
+    
+    return enable;
+}
+
+//	Setting keyboard distance from text field.
+-(void)setKeyboardDistanceFromTextField:(CGFloat)keyboardDistanceFromTextField
+{
+    //Can't be less than zero. Minimum is zero.
+	_keyboardDistanceFromTextField = MAX(keyboardDistanceFromTextField, 0);
+
+    [self showLog:[NSString stringWithFormat:@"keyboardDistanceFromTextField: %.2f",_keyboardDistanceFromTextField]];
+}
+
+/** Enabling/disable gesture on touching. */
+-(void)setShouldResignOnTouchOutside:(BOOL)shouldResignOnTouchOutside
+{
+    [self showLog:[NSString stringWithFormat:@"shouldResignOnTouchOutside: %@",shouldResignOnTouchOutside?@"Yes":@"No"]];
+    
+    _shouldResignOnTouchOutside = shouldResignOnTouchOutside;
+    
+    //Enable/Disable gesture recognizer   (Enhancement ID: #14)
+    [_resignFirstResponderGesture setEnabled:[self privateShouldResignOnTouchOutside]];
+}
+
+-(BOOL)privateShouldResignOnTouchOutside
+{
+    BOOL shouldResignOnTouchOutside = _shouldResignOnTouchOutside;
+    
+    __strong __typeof__(UIView) *strongTextFieldView = _textFieldView;
+
+    IQEnableMode enableMode = strongTextFieldView.shouldResignOnTouchOutsideMode;
+    
+    if (enableMode == IQEnableModeEnabled)
+    {
+        shouldResignOnTouchOutside = YES;
+    }
+    else if (enableMode == IQEnableModeDisabled)
+    {
+        shouldResignOnTouchOutside = NO;
+    }
+    else
+    {
+        UIViewController *textFieldViewController = [strongTextFieldView viewContainingController];
+        
+        if (textFieldViewController)
+        {
+            //If it is searchBar textField embedded in Navigation Bar
+            if ([strongTextFieldView textFieldSearchBar] != nil && [textFieldViewController isKindOfClass:[UINavigationController class]]) {
+                
+                UINavigationController *navController = (UINavigationController*)textFieldViewController;
+                if (navController.topViewController) {
+                    textFieldViewController = navController.topViewController;
+                }
+            }
+
+            if (shouldResignOnTouchOutside == NO)
+            {
+                //If viewController is kind of enable viewController class, then assuming shouldResignOnTouchOutside is enabled.
+                for (Class enabledClass in _enabledTouchResignedClasses)
+                {
+                    if ([textFieldViewController isKindOfClass:enabledClass])
+                    {
+                        shouldResignOnTouchOutside = YES;
+                        break;
+                    }
+                }
+            }
+            
+            if (shouldResignOnTouchOutside)
+            {
+                //If viewController is kind of disable viewController class, then assuming shouldResignOnTouchOutside is disable.
+                for (Class disabledClass in _disabledTouchResignedClasses)
+                {
+                    if ([textFieldViewController isKindOfClass:disabledClass])
+                    {
+                        shouldResignOnTouchOutside = NO;
+                        break;
+                    }
+                }
+                
+                //Special Controllers
+                if (shouldResignOnTouchOutside == YES)
+                {
+                    NSString *classNameString = NSStringFromClass([textFieldViewController class]);
+                    
+                    //_UIAlertControllerTextFieldViewController
+                    if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"])
+                    {
+                        shouldResignOnTouchOutside = NO;
+                    }
+                }
+            }
+        }
+    }
+    
+    return shouldResignOnTouchOutside;
+}
+
+/** Setter of movedDistance property. */
+-(void)setMovedDistance:(CGFloat)movedDistance
+{
+    _movedDistance = movedDistance;
+    if (self.movedDistanceChanged != nil) {
+        self.movedDistanceChanged(movedDistance);
+    }
+}
+
+/** Enable/disable autotoolbar. Adding and removing toolbar if required. */
+-(void)setEnableAutoToolbar:(BOOL)enableAutoToolbar
+{
+    _enableAutoToolbar = enableAutoToolbar;
+    
+    [self showLog:[NSString stringWithFormat:@"enableAutoToolbar: %@",enableAutoToolbar?@"Yes":@"No"]];
+
+    //If enabled then adding toolbar.
+    if ([self privateIsEnableAutoToolbar] == YES)
+    {
+        [self addToolbarIfRequired];
+    }
+    //Else removing toolbar.
+    else
+    {
+        [self removeToolbarIfRequired];
+    }
+}
+
+-(BOOL)privateIsEnableAutoToolbar
+{
+    BOOL enableAutoToolbar = _enableAutoToolbar;
+    
+    __strong __typeof__(UIView) *strongTextFieldView = _textFieldView;
+
+    UIViewController *textFieldViewController = [strongTextFieldView viewContainingController];
+    
+    if (textFieldViewController)
+    {
+        //If it is searchBar textField embedded in Navigation Bar
+        if ([strongTextFieldView textFieldSearchBar] != nil && [textFieldViewController isKindOfClass:[UINavigationController class]]) {
+            
+            UINavigationController *navController = (UINavigationController*)textFieldViewController;
+            if (navController.topViewController) {
+                textFieldViewController = navController.topViewController;
+            }
+        }
+
+        if (enableAutoToolbar == NO)
+        {
+            //If found any toolbar enabled classes then return.
+            for (Class enabledToolbarClass in _enabledToolbarClasses)
+            {
+                if ([textFieldViewController isKindOfClass:enabledToolbarClass])
+                {
+                    enableAutoToolbar = YES;
+                    break;
+                }
+            }
+        }
+        
+        if (enableAutoToolbar)
+        {
+            //If found any toolbar disabled classes then return.
+            for (Class disabledToolbarClass in _disabledToolbarClasses)
+            {
+                if ([textFieldViewController isKindOfClass:disabledToolbarClass])
+                {
+                    enableAutoToolbar = NO;
+                    break;
+                }
+            }
+            
+            
+            //Special Controllers
+            if (enableAutoToolbar == YES)
+            {
+                NSString *classNameString = NSStringFromClass([textFieldViewController class]);
+                
+                //_UIAlertControllerTextFieldViewController
+                if ([classNameString containsString:@"UIAlertController"] && [classNameString hasSuffix:@"TextFieldViewController"])
+                {
+                    enableAutoToolbar = NO;
+                }
+            }
+        }
+    }
+    
+    return enableAutoToolbar;
+}
+
+#pragma mark - Private Methods
+
+/** Getting keyWindow. */
+-(UIWindow *)keyWindow
+{
+    UIView *textFieldView = _textFieldView;
+
+    if (textFieldView.window)
+    {
+        return textFieldView.window;
+    }
+    else
+    {
+        static __weak UIWindow *cachedKeyWindow = nil;
+        
+        /*  (Bug ID: #23, #25, #73)   */
+        UIWindow *originalKeyWindow = nil;
+
+        #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+        if (@available(iOS 13.0, *)) {
+            NSSet<UIScene *> *connectedScenes = [UIApplication sharedApplication].connectedScenes;
+            for (UIScene *scene in connectedScenes) {
+                if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) {
+                    UIWindowScene *windowScene = (UIWindowScene *)scene;
+                    for (UIWindow *window in windowScene.windows) {
+                        if (window.isKeyWindow) {
+                            originalKeyWindow = window;
+                            break;
+                        }
+                    }
+                }
+            }
+        } else
+        #endif
+        {
+        #if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
+            originalKeyWindow = [UIApplication sharedApplication].keyWindow;
+        #endif
+        }
+
+        //If original key window is not nil and the cached keywindow is also not original keywindow then changing keywindow.
+        if (originalKeyWindow)
+        {
+            cachedKeyWindow = originalKeyWindow;
+        }
+        
+        return cachedKeyWindow;
+    }
+}
+
+-(void)optimizedAdjustPosition
+{
+    if (_hasPendingAdjustRequest == NO)
+    {
+        _hasPendingAdjustRequest = YES;
+        
+        __weak __typeof__(self) weakSelf = self;
+
+        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
+            
+            __strong __typeof__(self) strongSelf = weakSelf;
+
+            [strongSelf adjustPosition];
+            strongSelf.hasPendingAdjustRequest = NO;
+        }];
+    }
+}
+
+/* Adjusting RootViewController's frame according to interface orientation. */
+-(void)adjustPosition
+{
+    UIView *textFieldView = _textFieldView;
+
+    //  Getting RootViewController.  (Bug ID: #1, #4)
+    UIViewController *rootController = _rootViewController;
+    
+    //  Getting KeyWindow object.
+    UIWindow *keyWindow = [self keyWindow];
+    
+    //  We are unable to get textField object while keyboard showing on WKWebView's textField.  (Bug ID: #11)
+    if (_hasPendingAdjustRequest == NO ||
+        textFieldView == nil ||
+        rootController == nil ||
+        keyWindow == nil)
+        return;
+    
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    //  Converting Rectangle according to window bounds.
+    CGRect textFieldViewRectInWindow = [[textFieldView superview] convertRect:textFieldView.frame toView:keyWindow];
+    CGRect textFieldViewRectInRootSuperview = [[textFieldView superview] convertRect:textFieldView.frame toView:rootController.view.superview];
+    //  Getting RootView origin.
+    CGPoint rootViewOrigin = rootController.view.frame.origin;
+
+    //Maintain keyboardDistanceFromTextField
+    CGFloat specialKeyboardDistanceFromTextField = textFieldView.keyboardDistanceFromTextField;
+
+    {
+        UISearchBar *searchBar = textFieldView.textFieldSearchBar;
+        
+        if (searchBar)
+        {
+            specialKeyboardDistanceFromTextField = searchBar.keyboardDistanceFromTextField;
+        }
+    }
+    
+    CGFloat keyboardDistanceFromTextField = (specialKeyboardDistanceFromTextField == kIQUseDefaultKeyboardDistance)?_keyboardDistanceFromTextField:specialKeyboardDistanceFromTextField;
+
+    CGSize kbSize;
+    
+    {
+        CGRect kbFrame = _kbFrame;
+        
+        kbFrame.origin.y -= keyboardDistanceFromTextField;
+        kbFrame.size.height += keyboardDistanceFromTextField;
+        
+        //Calculating actual keyboard displayed size, keyboard frame may be different when hardware keyboard is attached (Bug ID: #469) (Bug ID: #381) (Bug ID: #1506)
+        CGRect intersectRect = CGRectIntersection(kbFrame, keyWindow.frame);
+        
+        if (CGRectIsNull(intersectRect))
+        {
+            kbSize = CGSizeMake(kbFrame.size.width, 0);
+        }
+        else
+        {
+            kbSize = intersectRect.size;
+        }
+    }
+
+
+    CGFloat navigationBarAreaHeight = 0;
+
+    if (rootController.navigationController != nil) {
+        navigationBarAreaHeight = CGRectGetMaxY(rootController.navigationController.navigationBar.frame);
+    } else {
+        CGFloat statusBarHeight = 0;
+    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+        if (@available(iOS 13.0, *)) {
+            statusBarHeight = [self keyWindow].windowScene.statusBarManager.statusBarFrame.size.height;
+
+        } else
+    #endif
+        {
+    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
+            statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
+    #endif
+        }
+
+        navigationBarAreaHeight = statusBarHeight;
+    }
+
+    CGFloat layoutAreaHeight = rootController.view.layoutMargins.top;
+    
+    CGFloat topLayoutGuide = MAX(navigationBarAreaHeight, layoutAreaHeight) + 5;
+    CGFloat bottomLayoutGuide = ([textFieldView respondsToSelector:@selector(isEditable)] && [textFieldView isKindOfClass:[UIScrollView class]]) ? 0 : rootController.view.layoutMargins.bottom; //Validation of textView for case where there is a tab bar at the bottom or running on iPhone X and textView is at the bottom.
+
+    //  +Move positive = textField is hidden.
+    //  -Move negative = textField is showing.
+    //  Calculating move position. Common for both normal and special cases.
+    CGFloat move = MIN(CGRectGetMinY(textFieldViewRectInRootSuperview)-topLayoutGuide, CGRectGetMaxY(textFieldViewRectInWindow)-(CGRectGetHeight(keyWindow.frame)-kbSize.height)+bottomLayoutGuide);
+
+    [self showLog:[NSString stringWithFormat:@"Need to move: %.2f",move]];
+
+    UIScrollView *superScrollView = nil;
+    UIScrollView *superView = (UIScrollView*)[textFieldView superviewOfClassType:[UIScrollView class]];
+
+    //Getting UIScrollView whose scrolling is enabled.    //  (Bug ID: #285)
+    while (superView)
+    {
+        if (superView.isScrollEnabled && superView.shouldIgnoreScrollingAdjustment == NO)
+        {
+            superScrollView = superView;
+            break;
+        }
+        else
+        {
+            //  Getting it's superScrollView.   //  (Enhancement ID: #21, #24)
+            superView = (UIScrollView*)[superView superviewOfClassType:[UIScrollView class]];
+        }
+    }
+    
+    __strong __typeof__(UIScrollView) *strongLastScrollView = _lastScrollView;
+
+    //If there was a lastScrollView.    //  (Bug ID: #34)
+    if (strongLastScrollView)
+    {
+        //If we can't find current superScrollView, then setting lastScrollView to it's original form.
+        if (superScrollView == nil)
+        {
+            if (UIEdgeInsetsEqualToEdgeInsets(strongLastScrollView.contentInset, _startingContentInsets) == NO)
+            {
+                [self showLog:[NSString stringWithFormat:@"Restoring ScrollView contentInset to : %@",NSStringFromUIEdgeInsets(_startingContentInsets)]];
+                
+                __weak __typeof__(self) weakSelf = self;
+
+                [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                    
+                    __strong __typeof__(self) strongSelf = weakSelf;
+                    
+                    [strongLastScrollView setContentInset:strongSelf.startingContentInsets];
+                    strongLastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets;
+                } completion:NULL];
+            }
+            
+            if (strongLastScrollView.shouldRestoreScrollViewContentOffset && CGPointEqualToPoint(strongLastScrollView.contentOffset, _startingContentOffset) == NO)
+            {
+                [self showLog:[NSString stringWithFormat:@"Restoring ScrollView contentOffset to : %@",NSStringFromCGPoint(_startingContentOffset)]];
+                
+                BOOL animatedContentOffset = ([textFieldView superviewOfClassType:[UIStackView class] belowView:strongLastScrollView] != nil);   //  (Bug ID: #1365, #1508, #1541)
+
+                if (animatedContentOffset) {
+                    [strongLastScrollView setContentOffset:_startingContentOffset animated:UIView.areAnimationsEnabled];
+                } else {
+                    strongLastScrollView.contentOffset = _startingContentOffset;
+                }
+            }
+
+            _startingContentInsets = UIEdgeInsetsZero;
+            _startingScrollIndicatorInsets = UIEdgeInsetsZero;
+            _startingContentOffset = CGPointZero;
+            _lastScrollView = nil;
+            strongLastScrollView = _lastScrollView;
+        }
+        //If both scrollView's are different, then reset lastScrollView to it's original frame and setting current scrollView as last scrollView.
+        else if (superScrollView != strongLastScrollView)
+        {
+            if (UIEdgeInsetsEqualToEdgeInsets(strongLastScrollView.contentInset, _startingContentInsets) == NO)
+            {
+                [self showLog:[NSString stringWithFormat:@"Restoring ScrollView contentInset to : %@",NSStringFromUIEdgeInsets(_startingContentInsets)]];
+
+                __weak __typeof__(self) weakSelf = self;
+                
+                [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                    
+                    __strong __typeof__(self) strongSelf = weakSelf;
+                    
+                    [strongLastScrollView setContentInset:strongSelf.startingContentInsets];
+                    strongLastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets;
+                } completion:NULL];
+            }
+
+            if (strongLastScrollView.shouldRestoreScrollViewContentOffset && CGPointEqualToPoint(strongLastScrollView.contentOffset, _startingContentOffset) == NO)
+            {
+                [self showLog:[NSString stringWithFormat:@"Restoring ScrollView contentOffset to : %@",NSStringFromCGPoint(_startingContentOffset)]];
+
+                BOOL animatedContentOffset = ([textFieldView superviewOfClassType:[UIStackView class] belowView:strongLastScrollView] != nil);   //  (Bug ID: #1365, #1508, #1541)
+
+                if (animatedContentOffset) {
+                    [strongLastScrollView setContentOffset:_startingContentOffset animated:UIView.areAnimationsEnabled];
+                } else {
+                    strongLastScrollView.contentOffset = _startingContentOffset;
+                }
+            }
+            
+            _lastScrollView = superScrollView;
+            strongLastScrollView = _lastScrollView;
+            _startingContentInsets = superScrollView.contentInset;
+            _startingContentOffset = superScrollView.contentOffset;
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+            if (@available(iOS 11.1, *)) {
+                _startingScrollIndicatorInsets = superScrollView.verticalScrollIndicatorInsets;
+            } else
+#endif
+            {
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
+                _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets;
+#endif
+            }
+
+            [self showLog:[NSString stringWithFormat:@"Saving New contentInset: %@ and contentOffset : %@",NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]];
+        }
+        //Else the case where superScrollView == lastScrollView means we are on same scrollView after switching to different textField. So doing nothing
+    }
+    //If there was no lastScrollView and we found a current scrollView. then setting it as lastScrollView.
+    else if(superScrollView)
+    {
+        _lastScrollView = superScrollView;
+        strongLastScrollView = _lastScrollView;
+        _startingContentInsets = superScrollView.contentInset;
+        _startingContentOffset = superScrollView.contentOffset;
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+        if (@available(iOS 11.1, *)) {
+            _startingScrollIndicatorInsets = superScrollView.verticalScrollIndicatorInsets;
+        } else
+#endif
+        {
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
+            _startingScrollIndicatorInsets = superScrollView.scrollIndicatorInsets;
+#endif
+        }
+
+        [self showLog:[NSString stringWithFormat:@"Saving contentInset: %@ and contentOffset : %@",NSStringFromUIEdgeInsets(_startingContentInsets),NSStringFromCGPoint(_startingContentOffset)]];
+    }
+    
+    //  Special case for ScrollView.
+    {
+        //  If we found lastScrollView then setting it's contentOffset to show textField.
+        if (strongLastScrollView)
+        {
+            //Saving
+            UIView *lastView = textFieldView;
+            superScrollView = strongLastScrollView;
+
+            //Looping in upper hierarchy until we don't found any scrollView in it's upper hirarchy till UIWindow object.
+            while (superScrollView)
+            {
+                BOOL shouldContinue = NO;
+                
+                if (move > 0)
+                {
+                    shouldContinue = move > (-superScrollView.contentOffset.y-superScrollView.contentInset.top);
+                }
+                else
+                {
+                    //Special treatment for UITableView due to their cell reusing logic
+                    if ([superScrollView isKindOfClass:[UITableView class]])
+                    {
+                        shouldContinue = superScrollView.contentOffset.y>0;
+
+                        UITableView *tableView = (UITableView*)superScrollView;
+                        UITableViewCell *tableCell = nil;
+                        NSIndexPath *indexPath = nil;
+                        NSIndexPath *previousIndexPath = nil;
+
+                        if (shouldContinue &&
+                            (tableCell = (UITableViewCell*)[textFieldView superviewOfClassType:[UITableViewCell class]]) &&
+                            (indexPath = [tableView indexPathForCell:tableCell]) &&
+                            (previousIndexPath = [tableView previousIndexPathOfIndexPath:indexPath]))
+                        {
+                            CGRect previousCellRect = [tableView rectForRowAtIndexPath:previousIndexPath];
+                            if (CGRectIsEmpty(previousCellRect) == NO)
+                            {
+                                CGRect previousCellRectInRootSuperview = [tableView convertRect:previousCellRect toView:rootController.view.superview];
+                                move = MIN(0, CGRectGetMaxY(previousCellRectInRootSuperview) - topLayoutGuide);
+                            }
+                        }
+                    }
+                    //Special treatment for UICollectionView due to their cell reusing logic
+                    else if ([superScrollView isKindOfClass:[UICollectionView class]])
+                    {
+                        shouldContinue = superScrollView.contentOffset.y>0;
+                        
+                        UICollectionView *collectionView = (UICollectionView*)superScrollView;
+                        UICollectionViewCell *collectionCell = nil;
+                        NSIndexPath *indexPath = nil;
+                        NSIndexPath *previousIndexPath = nil;
+
+                        if (shouldContinue &&
+                            (collectionCell = (UICollectionViewCell*)[textFieldView superviewOfClassType:[UICollectionViewCell class]]) &&
+                            (indexPath = [collectionView indexPathForCell:collectionCell]) &&
+                            (previousIndexPath = [collectionView previousIndexPathOfIndexPath:indexPath]))
+                        {
+                            UICollectionViewLayoutAttributes *attributes = [collectionView layoutAttributesForItemAtIndexPath:previousIndexPath];
+                            
+                            CGRect previousCellRect = attributes.frame;
+                            if (CGRectIsEmpty(previousCellRect) == NO)
+                            {
+                                CGRect previousCellRectInRootSuperview = [collectionView convertRect:previousCellRect toView:rootController.view.superview];
+                                move = MIN(0, CGRectGetMaxY(previousCellRectInRootSuperview) - topLayoutGuide);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        //If the textField is hidden at the top
+                        shouldContinue = textFieldViewRectInRootSuperview.origin.y < topLayoutGuide;
+                        
+                        if (shouldContinue) {
+                            move = MIN(0, textFieldViewRectInRootSuperview.origin.y - topLayoutGuide);
+                        }
+                    }
+                }
+                
+                if (shouldContinue == NO)
+                {
+                    move = 0;
+                    break;
+                }
+
+                UIScrollView *nextScrollView = nil;
+                UIScrollView *tempScrollView = (UIScrollView*)[superScrollView superviewOfClassType:[UIScrollView class]];
+                
+                //Getting UIScrollView whose scrolling is enabled.    //  (Bug ID: #285)
+                while (tempScrollView)
+                {
+                    if (tempScrollView.isScrollEnabled && tempScrollView.shouldIgnoreScrollingAdjustment == NO)
+                    {
+                        nextScrollView = tempScrollView;
+                        break;
+                    }
+                    else
+                    {
+                        //  Getting it's superScrollView.   //  (Enhancement ID: #21, #24)
+                        tempScrollView = (UIScrollView*)[tempScrollView superviewOfClassType:[UIScrollView class]];
+                    }
+                }
+
+                //Getting lastViewRect.
+                CGRect lastViewRect = [[lastView superview] convertRect:lastView.frame toView:superScrollView];
+                
+                //Calculating the expected Y offset from move and scrollView's contentOffset.
+                CGFloat shouldOffsetY = superScrollView.contentOffset.y - MIN(superScrollView.contentOffset.y,-move);
+                
+                //Rearranging the expected Y offset according to the view.
+                shouldOffsetY = MIN(shouldOffsetY, lastViewRect.origin.y);
+                
+                //[textFieldView isKindOfClass:[UITextView class]] If is a UITextView type
+                //[superScrollView superviewOfClassType:[UIScrollView class]] == nil    If processing scrollView is last scrollView in upper hierarchy (there is no other scrollView upper hierarchy.)
+                //shouldOffsetY >= 0     shouldOffsetY must be greater than in order to keep distance from navigationBar (Bug ID: #92)
+                if ([textFieldView respondsToSelector:@selector(isEditable)]  && [textFieldView isKindOfClass:[UIScrollView class]] &&
+                    nextScrollView == nil &&
+                    (shouldOffsetY >= 0))
+                {
+                    //  Converting Rectangle according to window bounds.
+                    CGRect currentTextFieldViewRect = [[textFieldView superview] convertRect:textFieldView.frame toView:keyWindow];
+                    
+                    //Calculating expected fix distance which needs to be managed from navigation bar
+                    CGFloat expectedFixDistance = CGRectGetMinY(currentTextFieldViewRect) - topLayoutGuide;
+                    
+                    //Now if expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance) is lower than current shouldOffsetY, which means we're in a position where navigationBar up and hide, then reducing shouldOffsetY with expectedOffsetY (superScrollView.contentOffset.y + expectedFixDistance)
+                    shouldOffsetY = MIN(shouldOffsetY, superScrollView.contentOffset.y + expectedFixDistance);
+                    
+                    //Setting move to 0 because now we don't want to move any view anymore (All will be managed by our contentInset logic. 
+                    move = 0;
+                }
+                else
+                {
+                    //Subtracting the Y offset from the move variable, because we are going to change scrollView's contentOffset.y to shouldOffsetY.
+                    move -= (shouldOffsetY-superScrollView.contentOffset.y);
+                }
+
+                
+                CGPoint newContentOffset = CGPointMake(superScrollView.contentOffset.x, shouldOffsetY);
+                
+                if (CGPointEqualToPoint(superScrollView.contentOffset, newContentOffset) == NO)
+                {
+                    __weak __typeof__(self) weakSelf = self;
+
+                    //Getting problem while using `setContentOffset:animated:`, So I used animation API.
+                    [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                        
+                        __strong __typeof__(self) strongSelf = weakSelf;
+
+                        [strongSelf showLog:[NSString stringWithFormat:@"Adjusting %.2f to %@ ContentOffset",(superScrollView.contentOffset.y-shouldOffsetY),[superScrollView _IQDescription]]];
+                        [strongSelf showLog:[NSString stringWithFormat:@"Remaining Move: %.2f",move]];
+                        
+                        BOOL animatedContentOffset = ([textFieldView superviewOfClassType:[UIStackView class] belowView:superScrollView] != nil);   //  (Bug ID: #1365, #1508, #1541)
+
+                        if (animatedContentOffset) {
+                            [superScrollView setContentOffset:newContentOffset animated:UIView.areAnimationsEnabled];
+                        } else {
+                            superScrollView.contentOffset = newContentOffset;
+                        }
+                    } completion:^(BOOL finished){
+                        
+                        __strong __typeof__(self) strongSelf = weakSelf;
+
+                        if ([superScrollView isKindOfClass:[UITableView class]] || [superScrollView isKindOfClass:[UICollectionView class]])
+                        {
+                            //This will update the next/previous states
+                            [strongSelf addToolbarIfRequired];
+                        }
+                    }];
+                }
+
+                //  Getting next lastView & superScrollView.
+                lastView = superScrollView;
+                superScrollView = nextScrollView;
+            }
+            
+            //Updating contentInset
+            if (strongLastScrollView.shouldIgnoreContentInsetAdjustment == false)
+            {
+                CGRect lastScrollViewRect = [[strongLastScrollView superview] convertRect:strongLastScrollView.frame toView:keyWindow];
+
+                CGFloat bottomInset = (kbSize.height)-(CGRectGetHeight(keyWindow.frame)-CGRectGetMaxY(lastScrollViewRect));
+                CGFloat bottomScrollIndicatorInset = bottomInset - keyboardDistanceFromTextField;
+
+                // Update the insets so that the scroll vew doesn't shift incorrectly when the offset is near the bottom of the scroll view.
+                bottomInset = MAX(_startingContentInsets.bottom, bottomInset);
+                bottomScrollIndicatorInset = MAX(_startingScrollIndicatorInsets.bottom, bottomScrollIndicatorInset);
+
+                if (@available(iOS 11, *)) {
+                    bottomInset -= strongLastScrollView.safeAreaInsets.bottom;
+                    bottomScrollIndicatorInset -= strongLastScrollView.safeAreaInsets.bottom;
+                }
+
+                UIEdgeInsets movedInsets = strongLastScrollView.contentInset;
+                movedInsets.bottom = bottomInset;
+
+                if (UIEdgeInsetsEqualToEdgeInsets(strongLastScrollView.contentInset, movedInsets) == NO)
+                {
+                    [self showLog:[NSString stringWithFormat:@"old ContentInset : %@ new ContentInset : %@", NSStringFromUIEdgeInsets(strongLastScrollView.contentInset), NSStringFromUIEdgeInsets(movedInsets)]];
+                    
+                    [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                        
+                        strongLastScrollView.contentInset = movedInsets;
+                        UIEdgeInsets newScrollIndicatorInset;
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+                        if (@available(iOS 11.1, *)) {
+                            newScrollIndicatorInset = strongLastScrollView.verticalScrollIndicatorInsets;
+                        } else
+#endif
+                        {
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
+                            newScrollIndicatorInset = strongLastScrollView.scrollIndicatorInsets;
+#endif
+                        }
+
+                        newScrollIndicatorInset.bottom = bottomScrollIndicatorInset;
+                        strongLastScrollView.scrollIndicatorInsets = newScrollIndicatorInset;
+                        
+                    } completion:NULL];
+                }
+            }
+        }
+        //Going ahead. No else if.
+    }
+    
+    {
+        //Special case for UITextView(Readjusting textView.contentInset when textView hight is too big to fit on screen)
+        //_lastScrollView       If not having inside any scrollView, (now contentInset manages the full screen textView.
+        //[textFieldView isKindOfClass:[UITextView class]] If is a UITextView type
+        if ([textFieldView isKindOfClass:[UIScrollView class]] && [(UIScrollView*)textFieldView isScrollEnabled] && [textFieldView respondsToSelector:@selector(isEditable)])
+        {
+            UIScrollView *textView = (UIScrollView*)textFieldView;
+
+            CGFloat keyboardYPosition = CGRectGetHeight(keyWindow.frame)-(kbSize.height-keyboardDistanceFromTextField);
+
+            CGRect rootSuperViewFrameInWindow = [rootController.view.superview convertRect:rootController.view.superview.bounds toView:keyWindow];
+
+            CGFloat keyboardOverlapping = CGRectGetMaxY(rootSuperViewFrameInWindow) - keyboardYPosition;
+
+            CGFloat textViewHeight = MIN(CGRectGetHeight(textFieldView.frame), (CGRectGetHeight(rootSuperViewFrameInWindow)-topLayoutGuide-keyboardOverlapping));
+            
+            if (textFieldView.frame.size.height-textView.contentInset.bottom>textViewHeight)
+            {
+                //_isTextViewContentInsetChanged,  If frame is not change by library in past, then saving user textView properties  (Bug ID: #92)
+                if (self.isTextViewContentInsetChanged == NO)
+                {
+                    self.startingTextViewContentInsets = textView.contentInset;
+                    
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+                    if (@available(iOS 11.1, *)) {
+                        self.startingTextViewScrollIndicatorInsets = textView.verticalScrollIndicatorInsets;
+                    } else
+#endif
+                    {
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
+                        self.startingTextViewScrollIndicatorInsets = textView.scrollIndicatorInsets;
+#endif
+                    }
+                }
+
+                CGFloat bottomInset = textFieldView.frame.size.height-textViewHeight;
+
+                if (@available(iOS 11, *)) {
+                    bottomInset -= textFieldView.safeAreaInsets.bottom;
+                }
+
+                UIEdgeInsets newContentInset = textView.contentInset;
+                newContentInset.bottom = bottomInset;
+
+                self.isTextViewContentInsetChanged = YES;
+
+                if (UIEdgeInsetsEqualToEdgeInsets(textView.contentInset, newContentInset) == NO)
+                {
+                    __weak __typeof__(self) weakSelf = self;
+                    
+                    [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                        
+                        __strong __typeof__(self) strongSelf = weakSelf;
+                        
+                        [strongSelf showLog:[NSString stringWithFormat:@"Old UITextView.contentInset : %@ New UITextView.contentInset : %@", NSStringFromUIEdgeInsets(textView.contentInset), NSStringFromUIEdgeInsets(textView.contentInset)]];
+                        
+                        textView.contentInset = newContentInset;
+                        textView.scrollIndicatorInsets = newContentInset;
+                    } completion:NULL];
+                }
+            }
+        }
+
+        {
+            __weak __typeof__(self) weakSelf = self;
+
+            //  +Positive or zero.
+            if (move>=0)
+            {
+                rootViewOrigin.y -= move;
+                
+                //  From now prevent keyboard manager to slide up the rootView to more than keyboard height. (Bug ID: #93)
+                rootViewOrigin.y = MAX(rootViewOrigin.y, MIN(0, -(kbSize.height-keyboardDistanceFromTextField)));
+
+                [self showLog:@"Moving Upward"];
+                //  Setting adjusted rootViewOrigin.ty
+                
+                //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations.
+                [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                    
+                    __strong __typeof__(self) strongSelf = weakSelf;
+                    
+                    //  Setting it's new frame
+                    CGRect rect = rootController.view.frame;
+                    rect.origin = rootViewOrigin;
+                    rootController.view.frame = rect;
+                    
+                    //Animating content if needed (Bug ID: #204)
+                    if (strongSelf.layoutIfNeededOnUpdate)
+                    {
+                        //Animating content (Bug ID: #160)
+                        [rootController.view setNeedsLayout];
+                        [rootController.view layoutIfNeeded];
+                    }
+                    
+                    [strongSelf showLog:[NSString stringWithFormat:@"Set %@ origin to : %@",rootController,NSStringFromCGPoint(rootViewOrigin)]];
+                } completion:NULL];
+
+                self.movedDistance = (_topViewBeginOrigin.y-rootViewOrigin.y);
+            }
+            //  -Negative
+            else
+            {
+                CGFloat disturbDistance = rootController.view.frame.origin.y-_topViewBeginOrigin.y;
+                
+                //  disturbDistance Negative = frame disturbed. Pull Request #3
+                //  disturbDistance positive = frame not disturbed.
+                if(disturbDistance<=0)
+                {
+                    rootViewOrigin.y -= MAX(move, disturbDistance);
+                    
+                    [self showLog:@"Moving Downward"];
+                    //  Setting adjusted rootViewRect
+                    
+                    //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations.
+                    [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                        
+                        __strong __typeof__(self) strongSelf = weakSelf;
+                        
+                        //  Setting it's new frame
+                        CGRect rect = rootController.view.frame;
+                        rect.origin = rootViewOrigin;
+                        rootController.view.frame = rect;
+                        
+                        //Animating content if needed (Bug ID: #204)
+                        if (strongSelf.layoutIfNeededOnUpdate)
+                        {
+                            //Animating content (Bug ID: #160)
+                            [rootController.view setNeedsLayout];
+                            [rootController.view layoutIfNeeded];
+                        }
+                        
+                        [strongSelf showLog:[NSString stringWithFormat:@"Set %@ origin to : %@",rootController,NSStringFromCGPoint(rootViewOrigin)]];
+                    } completion:NULL];
+
+                    self.movedDistance = (_topViewBeginOrigin.y-rootController.view.frame.origin.y);
+                }
+            }
+        }
+    }
+    
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+-(void)restorePosition
+{
+    _hasPendingAdjustRequest = NO;
+
+    //  Setting rootViewController frame to it's original position. //  (Bug ID: #18)
+    if (_rootViewController && CGPointEqualToPoint(_topViewBeginOrigin, kIQCGPointInvalid) == false)
+    {
+        __weak __typeof__(self) weakSelf = self;
+        
+        //Used UIViewAnimationOptionBeginFromCurrentState to minimize strange animations.
+        [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+            
+            __strong __typeof__(self) strongSelf = weakSelf;
+            UIViewController *strongRootController = strongSelf.rootViewController;
+            
+            {
+                [strongSelf showLog:[NSString stringWithFormat:@"Restoring %@ origin to : %@",strongRootController,NSStringFromCGPoint(strongSelf.topViewBeginOrigin)]];
+                
+                //Restoring
+                CGRect rect = strongRootController.view.frame;
+                rect.origin = strongSelf.topViewBeginOrigin;
+                strongRootController.view.frame = rect;
+
+                strongSelf.movedDistance = 0;
+                
+                if (strongRootController.navigationController.interactivePopGestureRecognizer.state == UIGestureRecognizerStateBegan) {
+                    strongSelf.rootViewControllerWhilePopGestureRecognizerActive = strongRootController;
+                    strongSelf.topViewBeginOriginWhilePopGestureRecognizerActive = strongSelf.topViewBeginOrigin;
+                }
+                
+                //Animating content if needed (Bug ID: #204)
+                if (strongSelf.layoutIfNeededOnUpdate)
+                {
+                    //Animating content (Bug ID: #160)
+                    [strongRootController.view setNeedsLayout];
+                    [strongRootController.view layoutIfNeeded];
+                }
+            }
+            
+        } completion:NULL];
+        _rootViewController = nil;
+    }
+}
+
+#pragma mark - Public Methods
+
+/*  Refreshes textField/textView position if any external changes is explicitly made by user.   */
+- (void)reloadLayoutIfNeeded
+{
+    if ([self privateIsEnabled] == YES)
+    {
+        UIView *textFieldView = _textFieldView;
+        
+        if (textFieldView &&
+            _keyboardShowing == YES &&
+            CGPointEqualToPoint(_topViewBeginOrigin, kIQCGPointInvalid) == false &&
+            [textFieldView isAlertViewTextField] == NO)
+        {
+            [self optimizedAdjustPosition];
+        }
+    }
+}
+
+#pragma mark - UIKeyboad Notification methods
+/*  UIKeyboardWillShowNotification. */
+-(void)keyboardWillShow:(NSNotification*)aNotification
+{
+    _kbShowNotification = aNotification;
+	
+    //  Boolean to know keyboard is showing/hiding
+    _keyboardShowing = YES;
+    
+    //  Getting keyboard animation.
+    NSInteger curve = [[aNotification userInfo][UIKeyboardAnimationCurveUserInfoKey] integerValue];
+    _animationCurve = curve<<16;
+
+    //  Getting keyboard animation duration
+    CGFloat duration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue];
+    
+    //Saving animation duration
+    if (duration != 0.0)    _animationDuration = duration;
+    
+    CGRect oldKBFrame = _kbFrame;
+    
+    //  Getting UIKeyboardSize.
+    _kbFrame = [[aNotification userInfo][UIKeyboardFrameEndUserInfoKey] CGRectValue];
+
+    if ([self privateIsEnabled] == NO)
+    {
+        [self restorePosition];
+        _topViewBeginOrigin = kIQCGPointInvalid;
+        return;
+    }
+	
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    UIView *textFieldView = _textFieldView;
+
+    if (textFieldView && CGPointEqualToPoint(_topViewBeginOrigin, kIQCGPointInvalid))    //  (Bug ID: #5)
+    {
+        //  keyboard is not showing(At the beginning only). We should save rootViewRect.
+        UIViewController *rootController = [textFieldView parentContainerViewController];
+        _rootViewController = rootController;
+        
+        if (_rootViewControllerWhilePopGestureRecognizerActive == rootController)
+        {
+            _topViewBeginOrigin = _topViewBeginOriginWhilePopGestureRecognizerActive;
+        }
+        else
+        {
+            _topViewBeginOrigin = rootController.view.frame.origin;
+        }
+        
+        _rootViewControllerWhilePopGestureRecognizerActive = nil;
+        _topViewBeginOriginWhilePopGestureRecognizerActive = kIQCGPointInvalid;
+        
+        [self showLog:[NSString stringWithFormat:@"Saving %@ beginning origin: %@",rootController,NSStringFromCGPoint(_topViewBeginOrigin)]];
+    }
+
+    //If last restored keyboard size is different(any orientation accure), then refresh. otherwise not.
+    if (!CGRectEqualToRect(_kbFrame, oldKBFrame))
+    {
+        //If _textFieldView is inside AlertView then do nothing. (Bug ID: #37, #74, #76)
+        //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is AlertView textField then do not affect anything (Bug ID: #70).
+        if (_keyboardShowing == YES &&
+            textFieldView &&
+            [textFieldView isAlertViewTextField] == NO)
+        {
+            [self optimizedAdjustPosition];
+        }
+    }
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+/*  UIKeyboardDidShowNotification. */
+- (void)keyboardDidShow:(NSNotification*)aNotification
+{
+    if ([self privateIsEnabled] == NO)	return;
+    
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+    
+    UIView *textFieldView = _textFieldView;
+
+    //  Getting topMost ViewController.
+    UIViewController *controller = [textFieldView topMostController];
+
+    //If _textFieldView viewController is presented as formSheet, then adjustPosition again because iOS internally update formSheet frame on keyboardShown. (Bug ID: #37, #74, #76)
+    if (_keyboardShowing == YES &&
+        textFieldView &&
+        (controller.modalPresentationStyle == UIModalPresentationFormSheet || controller.modalPresentationStyle == UIModalPresentationPageSheet) &&
+        [textFieldView isAlertViewTextField] == NO)
+    {
+        [self optimizedAdjustPosition];
+    }
+    
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+/*  UIKeyboardWillHideNotification. So setting rootViewController to it's default frame. */
+- (void)keyboardWillHide:(NSNotification*)aNotification
+{
+    //If it's not a fake notification generated by [self setEnable:NO].
+    if (aNotification)	_kbShowNotification = nil;
+    
+    //  Boolean to know keyboard is showing/hiding
+    _keyboardShowing = NO;
+    
+    //  Getting keyboard animation duration
+    CGFloat aDuration = [[aNotification userInfo][UIKeyboardAnimationDurationUserInfoKey] floatValue];
+    if (aDuration!= 0.0f)
+    {
+        _animationDuration = aDuration;
+    }
+    
+    //If not enabled then do nothing.
+    if ([self privateIsEnabled] == NO)	return;
+    
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    //Commented due to #56. Added all the conditions below to handle WKWebView's textFields.    (Bug ID: #56)
+    //  We are unable to get textField object while keyboard showing on WKWebView's textField.  (Bug ID: #11)
+//    if (_textFieldView == nil)   return;
+
+    //Restoring the contentOffset of the lastScrollView
+    __strong __typeof__(UIScrollView) *strongLastScrollView = _lastScrollView;
+
+    if (strongLastScrollView)
+    {
+        __weak __typeof__(self) weakSelf = self;
+        __weak __typeof__(UIView) *weakTextFieldView = self.textFieldView;
+
+        [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+            
+            __strong __typeof__(self) strongSelf = weakSelf;
+            __strong __typeof__(UIView) *strongTextFieldView = weakTextFieldView;
+
+            if (UIEdgeInsetsEqualToEdgeInsets(strongLastScrollView.contentInset, strongSelf.startingContentInsets) == NO)
+            {
+                [strongSelf showLog:[NSString stringWithFormat:@"Restoring ScrollView contentInset to : %@",NSStringFromUIEdgeInsets(strongSelf.startingContentInsets)]];
+
+                strongLastScrollView.contentInset = strongSelf.startingContentInsets;
+                strongLastScrollView.scrollIndicatorInsets = strongSelf.startingScrollIndicatorInsets;
+            }
+            
+            if (strongLastScrollView.shouldRestoreScrollViewContentOffset && CGPointEqualToPoint(strongLastScrollView.contentOffset, strongSelf.startingContentOffset) == NO)
+            {
+                [strongSelf showLog:[NSString stringWithFormat:@"Restoring ScrollView contentOffset to : %@",NSStringFromCGPoint(strongSelf.startingContentOffset)]];
+
+                BOOL animatedContentOffset = ([strongTextFieldView superviewOfClassType:[UIStackView class] belowView:strongLastScrollView] != nil);   //  (Bug ID: #1365, #1508, #1541)
+
+                if (animatedContentOffset) {
+                    [strongLastScrollView setContentOffset:strongSelf.startingContentOffset animated:UIView.areAnimationsEnabled];
+                } else {
+                    strongLastScrollView.contentOffset = strongSelf.startingContentOffset;
+                }
+            }
+            
+            // TODO: restore scrollView state
+            // This is temporary solution. Have to implement the save and restore scrollView state
+            UIScrollView *superscrollView = strongLastScrollView;
+            do
+            {
+                CGSize contentSize = CGSizeMake(MAX(superscrollView.contentSize.width, CGRectGetWidth(superscrollView.frame)), MAX(superscrollView.contentSize.height, CGRectGetHeight(superscrollView.frame)));
+                
+                CGFloat minimumY = contentSize.height-CGRectGetHeight(superscrollView.frame);
+                
+                if (minimumY<superscrollView.contentOffset.y)
+                {
+                    CGPoint newContentOffset = CGPointMake(superscrollView.contentOffset.x, minimumY);
+                    if (CGPointEqualToPoint(superscrollView.contentOffset, newContentOffset) == NO)
+                    {
+                        [self showLog:[NSString stringWithFormat:@"Restoring contentOffset to : %@",NSStringFromCGPoint(newContentOffset)]];
+
+                        BOOL animatedContentOffset = ([strongSelf.textFieldView superviewOfClassType:[UIStackView class] belowView:superscrollView] != nil);   //  (Bug ID: #1365, #1508, #1541)
+
+                        if (animatedContentOffset) {
+                            [superscrollView setContentOffset:newContentOffset animated:UIView.areAnimationsEnabled];
+                        } else {
+                            superscrollView.contentOffset = newContentOffset;
+                        }
+                    }
+                }
+            } while ((superscrollView = (UIScrollView*)[superscrollView superviewOfClassType:[UIScrollView class]]));
+
+        } completion:NULL];
+    }
+    
+    [self restorePosition];
+
+    //Reset all values
+    _lastScrollView = nil;
+    _kbFrame = CGRectZero;
+    _startingContentInsets = UIEdgeInsetsZero;
+    _startingScrollIndicatorInsets = UIEdgeInsetsZero;
+    _startingContentOffset = CGPointZero;
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+/*  UIKeyboardDidHideNotification. So topViewBeginRect can be set to CGRectZero. */
+- (void)keyboardDidHide:(NSNotification*)aNotification
+{
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    _topViewBeginOrigin = kIQCGPointInvalid;
+
+    _kbFrame = CGRectZero;
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+#pragma mark - UITextFieldView Delegate methods
+/**  UITextFieldTextDidBeginEditingNotification, UITextViewTextDidBeginEditingNotification. Fetching UITextFieldView object. */
+-(void)textFieldViewDidBeginEditing:(NSNotification*)notification
+{
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    //  Getting object
+    _textFieldView = notification.object;
+    
+    UIView *textFieldView = _textFieldView;
+
+    if (_overrideKeyboardAppearance == YES)
+    {
+        UITextField *textField = (UITextField*)textFieldView;
+        
+        if ([textField respondsToSelector:@selector(keyboardAppearance)])
+        {
+            //If keyboard appearance is not like the provided appearance
+            if (textField.keyboardAppearance != _keyboardAppearance)
+            {
+                //Setting textField keyboard appearance and reloading inputViews.
+                textField.keyboardAppearance = _keyboardAppearance;
+                [textField reloadInputViews];
+            }
+        }
+    }
+    
+	//If autoToolbar enable, then add toolbar on all the UITextField/UITextView's if required.
+	if ([self privateIsEnableAutoToolbar])
+    {
+        //UITextView special case. Keyboard Notification is firing before textView notification so we need to reload it's inputViews.
+        if ([textFieldView respondsToSelector:@selector(isEditable)] && [textFieldView isKindOfClass:[UIScrollView class]] &&
+            textFieldView.inputAccessoryView == nil)
+        {
+            __weak __typeof__(self) weakSelf = self;
+
+            [UIView animateWithDuration:0.00001 delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+
+                __strong __typeof__(self) strongSelf = weakSelf;
+
+                [strongSelf addToolbarIfRequired];
+            } completion:^(BOOL finished) {
+
+                __strong __typeof__(self) strongSelf = weakSelf;
+
+                //On textView toolbar didn't appear on first time, so forcing textView to reload it's inputViews.
+                [strongSelf.textFieldView reloadInputViews];
+            }];
+        }
+        //Else adding toolbar
+        else
+        {
+            [self addToolbarIfRequired];
+        }
+    }
+    else
+    {
+        [self removeToolbarIfRequired];
+    }
+    
+    //Adding Geture recognizer to window    (Enhancement ID: #14)
+    [_resignFirstResponderGesture setEnabled:[self privateShouldResignOnTouchOutside]];
+    [textFieldView.window addGestureRecognizer:_resignFirstResponderGesture];
+
+    if ([self privateIsEnabled] == NO)
+    {
+        [self restorePosition];
+        _topViewBeginOrigin = kIQCGPointInvalid;
+    }
+    else
+    {
+        if (CGPointEqualToPoint(_topViewBeginOrigin, kIQCGPointInvalid))    //  (Bug ID: #5)
+        {
+            //  keyboard is not showing(At the beginning only).
+            UIViewController *rootController = [textFieldView parentContainerViewController];
+            _rootViewController = rootController;
+            
+            if (_rootViewControllerWhilePopGestureRecognizerActive == rootController)
+            {
+                _topViewBeginOrigin = _topViewBeginOriginWhilePopGestureRecognizerActive;
+            }
+            else
+            {
+                _topViewBeginOrigin = rootController.view.frame.origin;
+            }
+            
+            _rootViewControllerWhilePopGestureRecognizerActive = nil;
+            _topViewBeginOriginWhilePopGestureRecognizerActive = kIQCGPointInvalid;
+            
+            [self showLog:[NSString stringWithFormat:@"Saving %@ beginning origin: %@",rootController, NSStringFromCGPoint(_topViewBeginOrigin)]];
+        }
+        
+        //If textFieldView is inside AlertView then do nothing. (Bug ID: #37, #74, #76)
+        //See notes:- https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html If it is AlertView textField then do not affect anything (Bug ID: #70).
+        if (_keyboardShowing == YES &&
+            textFieldView &&
+            [textFieldView isAlertViewTextField] == NO)
+        {
+            //  keyboard is already showing. adjust frame.
+            [self optimizedAdjustPosition];
+        }
+    }
+    
+//    if ([textFieldView isKindOfClass:[UITextField class]])
+//    {
+//        [(UITextField*)textFieldView addTarget:self action:@selector(editingDidEndOnExit:) forControlEvents:UIControlEventEditingDidEndOnExit];
+//    }
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+/**  UITextFieldTextDidEndEditingNotification, UITextViewTextDidEndEditingNotification. Removing fetched object. */
+-(void)textFieldViewDidEndEditing:(NSNotification*)notification
+{
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    UIView *textFieldView = _textFieldView;
+
+    //Removing gesture recognizer   (Enhancement ID: #14)
+    [textFieldView.window removeGestureRecognizer:_resignFirstResponderGesture];
+    
+//    if ([textFieldView isKindOfClass:[UITextField class]])
+//    {
+//        [(UITextField*)textFieldView removeTarget:self action:@selector(editingDidEndOnExit:) forControlEvents:UIControlEventEditingDidEndOnExit];
+//    }
+
+    // We check if there's a change in original frame or not.
+    if(_isTextViewContentInsetChanged == YES &&
+       [textFieldView respondsToSelector:@selector(isEditable)] && [textFieldView isKindOfClass:[UIScrollView class]])
+    {
+        UIScrollView *textView = (UIScrollView*)textFieldView;
+        self.isTextViewContentInsetChanged = NO;
+        if (UIEdgeInsetsEqualToEdgeInsets(textView.contentInset, self.startingTextViewContentInsets) == NO)
+        {
+            __weak __typeof__(self) weakSelf = self;
+            
+            [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                
+                __strong __typeof__(self) strongSelf = weakSelf;
+                
+                [strongSelf showLog:[NSString stringWithFormat:@"Restoring textView.contentInset to : %@",NSStringFromUIEdgeInsets(strongSelf.startingTextViewContentInsets)]];
+                
+                //Setting textField to it's initial contentInset
+                textView.contentInset = strongSelf.startingTextViewContentInsets;
+                textView.scrollIndicatorInsets = strongSelf.startingTextViewScrollIndicatorInsets;
+                
+            } completion:NULL];
+        }
+    }
+    
+    //Setting object to nil
+    _textFieldView = nil;
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+//-(void)editingDidEndOnExit:(UITextField*)textField
+//{
+//    [self showLog:[NSString stringWithFormat:@"ReturnKey %@",NSStringFromSelector(_cmd)]];
+//}
+
+#pragma mark - UIStatusBar Notification methods
+/**  UIApplicationWillChangeStatusBarOrientationNotification. Need to set the textView to it's original position. If any frame changes made. (Bug ID: #92)*/
+- (void)willChangeStatusBarOrientation:(NSNotification*)aNotification
+{
+    UIInterfaceOrientation currentStatusBarOrientation = UIInterfaceOrientationUnknown;
+
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+    if (@available(iOS 13.0, *)) {
+        currentStatusBarOrientation = [self keyWindow].windowScene.interfaceOrientation;
+    } else
+#endif
+    {
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
+        currentStatusBarOrientation = UIApplication.sharedApplication.statusBarOrientation;
+#endif
+    }
+    
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    UIInterfaceOrientation statusBarOrientation = [aNotification.userInfo[UIApplicationStatusBarOrientationUserInfoKey] integerValue];
+#pragma clang diagnostic pop
+    
+    if (statusBarOrientation != currentStatusBarOrientation) {
+        return;
+    }
+    
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    __strong __typeof__(UIView) *strongTextFieldView = _textFieldView;
+
+    //If textViewContentInsetChanged is changed then restore it.
+    if (_isTextViewContentInsetChanged == YES &&
+        [strongTextFieldView respondsToSelector:@selector(isEditable)] && [strongTextFieldView isKindOfClass:[UIScrollView class]])
+    {
+        UIScrollView *textView = (UIScrollView*)strongTextFieldView;
+        self.isTextViewContentInsetChanged = NO;
+        if (UIEdgeInsetsEqualToEdgeInsets(textView.contentInset, self.startingTextViewContentInsets) == NO)
+        {
+            __weak __typeof__(self) weakSelf = self;
+            
+            //Due to orientation callback we need to set it's original position.
+            [UIView animateWithDuration:_animationDuration delay:0 options:(_animationCurve|UIViewAnimationOptionBeginFromCurrentState) animations:^{
+                
+                __strong __typeof__(self) strongSelf = weakSelf;
+                
+                [strongSelf showLog:[NSString stringWithFormat:@"Restoring textView.contentInset to : %@",NSStringFromUIEdgeInsets(strongSelf.startingTextViewContentInsets)]];
+                
+                //Setting textField to it's initial contentInset
+                textView.contentInset = strongSelf.startingTextViewContentInsets;
+                textView.scrollIndicatorInsets = strongSelf.startingTextViewScrollIndicatorInsets;
+            } completion:NULL];
+        }
+    }
+
+    [self restorePosition];
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+#pragma mark AutoResign methods
+
+/** Resigning on tap gesture. */
+- (void)tapRecognized:(UITapGestureRecognizer*)gesture  // (Enhancement ID: #14)
+{
+    if (gesture.state == UIGestureRecognizerStateEnded)
+    {
+        //Resigning currently responder textField.
+        [self resignFirstResponder];
+    }
+}
+
+/** Note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES. */
+- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
+{
+    return NO;
+}
+
+/** To not detect touch events in a subclass of UIControl, these may have added their own selector for specific work */
+-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
+{
+    //  Should not recognize gesture if the clicked view is either UIControl or UINavigationBar(<Back button etc...)    (Bug ID: #145)
+    for (Class aClass in self.touchResignedGestureIgnoreClasses)
+    {
+        if ([[touch view] isKindOfClass:aClass])
+        {
+            return NO;
+        }
+    }
+
+    return YES;
+}
+
+/** Resigning textField. */
+- (BOOL)resignFirstResponder
+{
+    UIView *textFieldView = _textFieldView;
+
+    if (textFieldView)
+    {
+        //  Retaining textFieldView
+        UIView *textFieldRetain = textFieldView;
+        
+        //Resigning first responder
+        BOOL isResignFirstResponder = [textFieldView resignFirstResponder];
+        
+        //  If it refuses then becoming it as first responder again.    (Bug ID: #96)
+        if (isResignFirstResponder == NO)
+        {
+            //If it refuses to resign then becoming it first responder again for getting notifications callback.
+            [textFieldRetain becomeFirstResponder];
+            
+            [self showLog:[NSString stringWithFormat:@"Refuses to Resign first responder: %@",textFieldView]];
+        }
+        
+        return isResignFirstResponder;
+    }
+    else
+    {
+        return NO;
+    }
+}
+
+/** Returns YES if can navigate to previous responder textField/textView, otherwise NO. */
+-(BOOL)canGoPrevious
+{
+    //Getting all responder view's.
+    NSArray<UIView*> *textFields = [self responderViews];
+
+    //Getting index of current textField.
+    NSUInteger index = [textFields indexOfObject:_textFieldView];
+
+    //If it is not first textField. then it's previous object can becomeFirstResponder.
+    if (index != NSNotFound &&
+        index > 0)
+    {
+        return YES;
+    }
+    else
+    {
+        return NO;
+    }
+}
+
+/** Returns YES if can navigate to next responder textField/textView, otherwise NO. */
+-(BOOL)canGoNext
+{
+    //Getting all responder view's.
+    NSArray<UIView*> *textFields = [self responderViews];
+    
+    //Getting index of current textField.
+    NSUInteger index = [textFields indexOfObject:_textFieldView];
+    
+    //If it is not last textField. then it's next object becomeFirstResponder.
+    if (index != NSNotFound &&
+        index < textFields.count-1)
+    {
+        return YES;
+    }
+    else
+    {
+        return NO;
+    }
+}
+
+/** Navigate to previous responder textField/textView.  */
+-(BOOL)goPrevious
+{
+    //Getting all responder view's.
+    NSArray<__kindof UIView*> *textFields = [self responderViews];
+    
+    //Getting index of current textField.
+    NSUInteger index = [textFields indexOfObject:_textFieldView];
+    
+    //If it is not first textField. then it's previous object becomeFirstResponder.
+    if (index != NSNotFound &&
+        index > 0)
+    {
+        UITextField *nextTextField = textFields[index-1];
+        
+        //  Retaining textFieldView
+        UIView *textFieldRetain = _textFieldView;
+        
+        BOOL isAcceptAsFirstResponder = [nextTextField becomeFirstResponder];
+        
+        //  If it refuses then becoming previous textFieldView as first responder again.    (Bug ID: #96)
+        if (isAcceptAsFirstResponder == NO)
+        {
+            //If next field refuses to become first responder then restoring old textField as first responder.
+            [textFieldRetain becomeFirstResponder];
+            
+            [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",nextTextField]];
+        }
+        
+        return isAcceptAsFirstResponder;
+    }
+    else
+    {
+        return NO;
+    }
+}
+
+/** Navigate to next responder textField/textView.  */
+-(BOOL)goNext
+{
+    //Getting all responder view's.
+    NSArray<__kindof UIView*> *textFields = [self responderViews];
+    
+    //Getting index of current textField.
+    NSUInteger index = [textFields indexOfObject:_textFieldView];
+    
+    //If it is not last textField. then it's next object becomeFirstResponder.
+    if (index != NSNotFound &&
+        index < textFields.count-1)
+    {
+        UITextField *nextTextField = textFields[index+1];
+        
+        //  Retaining textFieldView
+        UIView *textFieldRetain = _textFieldView;
+        
+        BOOL isAcceptAsFirstResponder = [nextTextField becomeFirstResponder];
+        
+        //  If it refuses then becoming previous textFieldView as first responder again.    (Bug ID: #96)
+        if (isAcceptAsFirstResponder == NO)
+        {
+            //If next field refuses to become first responder then restoring old textField as first responder.
+            [textFieldRetain becomeFirstResponder];
+            
+            [self showLog:[NSString stringWithFormat:@"Refuses to become first responder: %@",nextTextField]];
+        }
+        
+        return isAcceptAsFirstResponder;
+    }
+    else
+    {
+        return NO;
+    }
+}
+
+#pragma mark AutoToolbar methods
+
+/**    Get all UITextField/UITextView siblings of textFieldView. */
+-(NSArray<__kindof UIView*>*)responderViews
+{
+    UIView *superConsideredView;
+    
+    UIView *textFieldView = _textFieldView;
+
+    //If find any consider responderView in it's upper hierarchy then will get deepResponderView.
+    for (Class consideredClass in _toolbarPreviousNextAllowedClasses)
+    {
+        superConsideredView = [textFieldView superviewOfClassType:consideredClass];
+        
+        if (superConsideredView)
+            break;
+    }
+    
+    //If there is a superConsideredView in view's hierarchy, then fetching all it's subview that responds. No sorting for superConsideredView, it's by subView position.    (Enhancement ID: #22)
+    if (superConsideredView)
+    {
+        return [superConsideredView deepResponderViews];
+    }
+    //Otherwise fetching all the siblings
+    else
+    {
+        NSArray<UIView*> *textFields = [textFieldView responderSiblings];
+        
+        //Sorting textFields according to behaviour
+        switch (_toolbarManageBehaviour)
+        {
+                //If autoToolbar behaviour is bySubviews, then returning it.
+            case IQAutoToolbarBySubviews:
+                return textFields;
+                break;
+                
+                //If autoToolbar behaviour is by tag, then sorting it according to tag property.
+            case IQAutoToolbarByTag:
+                return [textFields sortedArrayByTag];
+                break;
+                
+                //If autoToolbar behaviour is by tag, then sorting it according to tag property.
+            case IQAutoToolbarByPosition:
+                return [textFields sortedArrayByPosition];
+                break;
+            default:
+                return nil;
+                break;
+        }
+    }
+}
+
+/** Add toolbar if it is required to add on textFields and it's siblings. */
+-(void)addToolbarIfRequired
+{
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+    
+    //    Getting all the sibling textFields.
+    NSArray<UIView*> *siblings = [self responderViews];
+    
+    [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]];
+
+    UIView *textFieldView = _textFieldView;
+
+    //Either there is no inputAccessoryView or if accessoryView is not appropriate for current situation(There is Previous/Next/Done toolbar).
+    //setInputAccessoryView: check   (Bug ID: #307)
+    if ([textFieldView respondsToSelector:@selector(setInputAccessoryView:)])
+    {
+        if ([textFieldView inputAccessoryView] == nil ||
+            [[textFieldView inputAccessoryView] tag] == kIQPreviousNextButtonToolbarTag ||
+            [[textFieldView inputAccessoryView] tag] == kIQDoneButtonToolbarTag)
+        {
+            UITextField *textField = (UITextField*)textFieldView;
+
+            IQBarButtonItemConfiguration *rightConfiguration = nil;
+            
+            //Supporting Custom Done button image (Enhancement ID: #366)
+            if (_toolbarDoneBarButtonItemImage)
+            {
+                rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:_toolbarDoneBarButtonItemImage action:@selector(doneAction:)];
+            }
+            //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376)
+            else if (_toolbarDoneBarButtonItemText)
+            {
+                rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:_toolbarDoneBarButtonItemText action:@selector(doneAction:)];
+            }
+            else
+            {
+                rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:@selector(doneAction:)];
+            }
+            rightConfiguration.accessibilityLabel = _toolbarDoneBarButtonItemAccessibilityLabel ? : @"Done";
+
+            //    If only one object is found, then adding only Done button.
+            if ((siblings.count <= 1 && self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysHide)
+            {
+                [textField addKeyboardToolbarWithTarget:self titleText:(_shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder : nil) rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil];
+
+                textField.inputAccessoryView.tag = kIQDoneButtonToolbarTag; //  (Bug ID: #78)
+            }
+            //If there is multiple siblings of textField
+            else if ((self.previousNextDisplayMode == IQPreviousNextDisplayModeDefault) || self.previousNextDisplayMode == IQPreviousNextDisplayModeAlwaysShow)
+            {
+                IQBarButtonItemConfiguration *prevConfiguration = nil;
+                
+                //Supporting Custom Done button image (Enhancement ID: #366)
+                if (_toolbarPreviousBarButtonItemImage)
+                {
+                    prevConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:_toolbarPreviousBarButtonItemImage action:@selector(previousAction:)];
+                }
+                //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376)
+                else if (_toolbarPreviousBarButtonItemText)
+                {
+                    prevConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:_toolbarPreviousBarButtonItemText action:@selector(previousAction:)];
+                }
+                else
+                {
+                    prevConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:@selector(previousAction:)];
+                }
+                prevConfiguration.accessibilityLabel = _toolbarPreviousBarButtonItemAccessibilityLabel ? : @"Previous";
+                
+                IQBarButtonItemConfiguration *nextConfiguration = nil;
+                
+                //Supporting Custom Done button image (Enhancement ID: #366)
+                if (_toolbarNextBarButtonItemImage)
+                {
+                    nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:_toolbarNextBarButtonItemImage action:@selector(nextAction:)];
+                }
+                //Supporting Custom Done button text (Enhancement ID: #209, #411, Bug ID: #376)
+                else if (_toolbarNextBarButtonItemText)
+                {
+                    nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:_toolbarNextBarButtonItemText action:@selector(nextAction:)];
+                }
+                else
+                {
+                    nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:@selector(nextAction:)];
+                }
+                nextConfiguration.accessibilityLabel = _toolbarNextBarButtonItemAccessibilityLabel ? : @"Next";
+
+                [textField addKeyboardToolbarWithTarget:self titleText:(_shouldShowToolbarPlaceholder ? textField.drawingToolbarPlaceholder : nil) rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:prevConfiguration nextBarButtonConfiguration:nextConfiguration];
+
+                textField.inputAccessoryView.tag = kIQPreviousNextButtonToolbarTag; //  (Bug ID: #78)
+            }
+            
+            IQToolbar *toolbar = textField.keyboardToolbar;
+            
+            //Bar style according to keyboard appearance
+            if ([textField respondsToSelector:@selector(keyboardAppearance)])
+            {
+                //Setting toolbar tintColor //  (Enhancement ID: #30)
+                if (_shouldToolbarUsesTextFieldTintColor)
+                {
+                    toolbar.tintColor = [textField tintColor];
+                }
+                else if (_toolbarTintColor)
+                {
+                    toolbar.tintColor = _toolbarTintColor;
+                }
+                else
+                {
+                    toolbar.tintColor = nil;
+                }
+
+                switch ([textField keyboardAppearance])
+                {
+                    case UIKeyboardAppearanceDark:
+                    {
+                        toolbar.barStyle = UIBarStyleBlack;
+                        [toolbar setBarTintColor:nil];
+                    }
+                        break;
+                    default:
+                    {
+                        toolbar.barStyle = UIBarStyleDefault;
+                        toolbar.barTintColor = _toolbarBarTintColor;
+                    }
+                        break;
+                }
+                
+                //If need to show placeholder
+                if (_shouldShowToolbarPlaceholder &&
+                    textField.shouldHideToolbarPlaceholder == NO)
+                {
+                    //Updating placeholder     //(Bug ID: #148, #272)
+                    if (toolbar.titleBarButton.title == nil ||
+                        [toolbar.titleBarButton.title isEqualToString:textField.drawingToolbarPlaceholder] == NO)
+                    {
+                        [toolbar.titleBarButton setTitle:textField.drawingToolbarPlaceholder];
+                    }
+                    
+                    //Setting toolbar title font.   //  (Enhancement ID: #30)
+                    if (_placeholderFont &&
+                        [_placeholderFont isKindOfClass:[UIFont class]])
+                    {
+                        [toolbar.titleBarButton setTitleFont:_placeholderFont];
+                    }
+
+                    //Setting toolbar title color.   //  (Enhancement ID: #880)
+                    if (_placeholderColor)
+                    {
+                        [toolbar.titleBarButton setTitleColor:_placeholderColor];
+                    }
+
+                    //Setting toolbar button title color.   //  (Enhancement ID: #880)
+                    if (_placeholderButtonColor)
+                    {
+                        [toolbar.titleBarButton setSelectableTitleColor:_placeholderButtonColor];
+                    }
+                }
+                else
+                {
+                    //Updating placeholder     //(Bug ID: #272)
+                    toolbar.titleBarButton.title = nil;
+                }
+            }
+
+            //In case of UITableView (Special), the next/previous buttons has to be refreshed everytime.    (Bug ID: #56)
+            //    If firstTextField, then previous should not be enabled.
+            if (siblings.firstObject == textField)
+            {
+                if (siblings.count == 1)
+                {
+                    textField.keyboardToolbar.previousBarButton.enabled = NO;
+                    textField.keyboardToolbar.nextBarButton.enabled = NO;
+                }
+                else
+                {
+                    textField.keyboardToolbar.previousBarButton.enabled = NO;
+                    textField.keyboardToolbar.nextBarButton.enabled = YES;
+                }
+            }
+            //    If lastTextField then next should not be enaled.
+            else if ([siblings lastObject] == textField)
+            {
+                textField.keyboardToolbar.previousBarButton.enabled = YES;
+                textField.keyboardToolbar.nextBarButton.enabled = NO;
+            }
+            else
+            {
+                textField.keyboardToolbar.previousBarButton.enabled = YES;
+                textField.keyboardToolbar.nextBarButton.enabled = YES;
+            }
+        }
+    }
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+/** Remove any toolbar if it is IQToolbar. */
+-(void)removeToolbarIfRequired  //  (Bug ID: #18)
+{
+    CFTimeInterval startTime = CACurrentMediaTime();
+    [self showLog:[NSString stringWithFormat:@"****** %@ started ******",NSStringFromSelector(_cmd)] indentation:1];
+
+    //    Getting all the sibling textFields.
+    NSArray<UIView*> *siblings = [self responderViews];
+    
+    [self showLog:[NSString stringWithFormat:@"Found %lu responder sibling(s)",(unsigned long)siblings.count]];
+
+    for (UITextField *textField in siblings)
+    {
+        UIView *toolbar = [textField inputAccessoryView];
+        
+        //  (Bug ID: #78)
+        //setInputAccessoryView: check   (Bug ID: #307)
+        if ([textField respondsToSelector:@selector(setInputAccessoryView:)] &&
+            ([toolbar isKindOfClass:[IQToolbar class]] && (toolbar.tag == kIQDoneButtonToolbarTag || toolbar.tag == kIQPreviousNextButtonToolbarTag)))
+        {
+            textField.inputAccessoryView = nil;
+            [textField reloadInputViews];
+        }
+    }
+
+    CFTimeInterval elapsedTime = CACurrentMediaTime() - startTime;
+    [self showLog:[NSString stringWithFormat:@"****** %@ ended: %g seconds ******",NSStringFromSelector(_cmd),elapsedTime] indentation:-1];
+}
+
+/**    reloadInputViews to reload toolbar buttons enable/disable state on the fly Enhancement ID #434. */
+- (void)reloadInputViews
+{
+    //If enabled then adding toolbar.
+    if ([self privateIsEnableAutoToolbar] == YES)
+    {
+        [self addToolbarIfRequired];
+    }
+    //Else removing toolbar.
+    else
+    {
+        [self removeToolbarIfRequired];
+    }
+}
+
+#pragma mark previous/next/done functionality
+/**    previousAction. */
+-(void)previousAction:(IQBarButtonItem*)barButton
+{
+    //If user wants to play input Click sound. Then Play Input Click Sound.
+    if (_shouldPlayInputClicks)
+    {
+        [[UIDevice currentDevice] playInputClick];
+    }
+
+    if ([self canGoPrevious])
+    {
+        UIView *currentTextFieldView = _textFieldView;
+        BOOL isAcceptAsFirstResponder = [self goPrevious];
+        
+        NSInvocation *invocation = barButton.invocation;
+        UIView *sender = currentTextFieldView;
+
+        //Handling search bar special case
+        {
+            UISearchBar *searchBar = currentTextFieldView.textFieldSearchBar;
+            
+            if (searchBar)
+            {
+                invocation = searchBar.keyboardToolbar.previousBarButton.invocation;
+                sender = searchBar;
+            }
+        }
+
+        if (isAcceptAsFirstResponder == YES && invocation)
+        {
+            if (invocation.methodSignature.numberOfArguments > 2)
+            {
+                [invocation setArgument:&sender atIndex:2];
+            }
+
+            [invocation invoke];
+        }
+    }
+}
+
+/**    nextAction. */
+-(void)nextAction:(IQBarButtonItem*)barButton
+{
+    //If user wants to play input Click sound. Then Play Input Click Sound.
+    if (_shouldPlayInputClicks)
+    {
+        [[UIDevice currentDevice] playInputClick];
+    }
+
+    if ([self canGoNext])
+    {
+        UIView *currentTextFieldView = _textFieldView;
+        BOOL isAcceptAsFirstResponder = [self goNext];
+        
+        NSInvocation *invocation = barButton.invocation;
+        UIView *sender = currentTextFieldView;
+
+        //Handling search bar special case
+        {
+            UISearchBar *searchBar = currentTextFieldView.textFieldSearchBar;
+            
+            if (searchBar)
+            {
+                invocation = searchBar.keyboardToolbar.nextBarButton.invocation;
+                sender = searchBar;
+            }
+        }
+
+        if (isAcceptAsFirstResponder == YES && invocation)
+        {
+            if (invocation.methodSignature.numberOfArguments > 2)
+            {
+                [invocation setArgument:&sender atIndex:2];
+            }
+
+            [invocation invoke];
+        }
+    }
+}
+
+/**    doneAction. Resigning current textField. */
+-(void)doneAction:(IQBarButtonItem*)barButton
+{
+    //If user wants to play input Click sound. Then Play Input Click Sound.
+    if (_shouldPlayInputClicks)
+    {
+        [[UIDevice currentDevice] playInputClick];
+    }
+
+    UIView *currentTextFieldView = _textFieldView;
+    BOOL isResignedFirstResponder = [self resignFirstResponder];
+    
+    NSInvocation *invocation = barButton.invocation;
+    UIView *sender = currentTextFieldView;
+
+    //Handling search bar special case
+    {
+        UISearchBar *searchBar = currentTextFieldView.textFieldSearchBar;
+        
+        if (searchBar)
+        {
+            invocation = searchBar.keyboardToolbar.doneBarButton.invocation;
+            sender = searchBar;
+        }
+    }
+
+    if (isResignedFirstResponder == YES && invocation)
+    {
+        if (invocation.methodSignature.numberOfArguments > 2)
+        {
+            [invocation setArgument:&sender atIndex:2];
+        }
+
+        [invocation invoke];
+    }
+}
+
+#pragma mark - Customised textField/textView support.
+
+/**
+ Add customised Notification for third party customised TextField/TextView.
+ */
+-(void)registerTextFieldViewClass:(nonnull Class)aClass
+  didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName
+    didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName
+{
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidBeginEditing:) name:didBeginEditingNotificationName object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldViewDidEndEditing:) name:didEndEditingNotificationName object:nil];
+}
+
+/**
+ Remove customised Notification for third party customised TextField/TextView.
+ */
+-(void)unregisterTextFieldViewClass:(nonnull Class)aClass
+    didBeginEditingNotificationName:(nonnull NSString *)didBeginEditingNotificationName
+      didEndEditingNotificationName:(nonnull NSString *)didEndEditingNotificationName
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:didBeginEditingNotificationName object:nil];
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:didEndEditingNotificationName object:nil];
+}
+
+-(void)registerAllNotifications
+{
+    //  Registering for keyboard notification.
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
+    
+    //  Registering for UITextField notification.
+    [self registerTextFieldViewClass:[UITextField class]
+     didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification
+       didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification];
+    
+    //  Registering for UITextView notification.
+    [self registerTextFieldViewClass:[UITextView class]
+     didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification
+       didEndEditingNotificationName:UITextViewTextDidEndEditingNotification];
+    
+    //  Registering for orientation changes notification
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willChangeStatusBarOrientation:) name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]];
+#pragma clang diagnostic pop
+}
+
+-(void)unregisterAllNotifications
+{
+    //  Unregistering for keyboard notification.
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
+
+    //  Unregistering for UITextField notification.
+    [self unregisterTextFieldViewClass:[UITextField class]
+     didBeginEditingNotificationName:UITextFieldTextDidBeginEditingNotification
+       didEndEditingNotificationName:UITextFieldTextDidEndEditingNotification];
+    
+    //  Unregistering for UITextView notification.
+    [self unregisterTextFieldViewClass:[UITextView class]
+     didBeginEditingNotificationName:UITextViewTextDidBeginEditingNotification
+       didEndEditingNotificationName:UITextViewTextDidEndEditingNotification];
+    
+    //  Unregistering for orientation changes notification
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillChangeStatusBarOrientationNotification object:[UIApplication sharedApplication]];
+#pragma clang diagnostic pop
+}
+
+-(void)showLog:(NSString*)logString
+{
+    [self showLog:logString indentation:0];
+}
+
+-(void)showLog:(NSString*)logString indentation:(NSInteger)indent
+{
+    static NSInteger indentation = 0;
+    
+    if (indent < 0)
+    {
+        indentation = MAX(0, indentation + indent);
+    }
+    
+    if (_enableDebugging)
+    {
+        NSMutableString *preLog = [[NSMutableString alloc] init];
+        
+        for (int i = 0; i<=indentation; i++) {
+            [preLog appendString:@"|\t"];
+        }
+
+        [preLog appendString:logString];
+        NSLog(@"%@",preLog);
+    }
+    
+    if (indent > 0)
+    {
+        indentation += indent;
+    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.h
new file mode 100644
index 0000000..81cdd4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.h
@@ -0,0 +1,99 @@
+//
+// IQKeyboardReturnKeyHandler.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQKeyboardManagerConstants.h"
+
+#import <Foundation/NSObject.h>
+#import <Foundation/NSObjCRuntime.h>
+
+#import <UIKit/UITextInputTraits.h>
+
+@class UITextField, UIView, UIViewController;
+@protocol UITextFieldDelegate, UITextViewDelegate;
+
+/**
+ Manages the return key to work like next/done in a view hierarchy.
+ */
+@interface IQKeyboardReturnKeyHandler : NSObject
+
+///----------------------
+/// @name Initializations
+///----------------------
+
+/**
+ Add all the textFields available in UIViewController's view.
+ */
+-(nonnull instancetype)initWithViewController:(nullable UIViewController*)controller NS_DESIGNATED_INITIALIZER;
+
+/**
+ Unavailable. Please use initWithViewController: or init method
+ */
+-(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE;
+
+///---------------
+/// @name Settings
+///---------------
+
+/**
+ Delegate of textField/textView.
+ */
+@property(nullable, nonatomic, weak) id<UITextFieldDelegate,UITextViewDelegate> delegate;
+
+/**
+ Set the last textfield return key type. Default is UIReturnKeyDefault.
+ */
+@property(nonatomic, assign) UIReturnKeyType lastTextFieldReturnKeyType;
+
+///----------------------------------------------
+/// @name Registering/Unregistering textFieldView
+///----------------------------------------------
+
+/**
+ Should pass UITextField/UITextView instance. Assign textFieldView delegate to self, change it's returnKeyType.
+ 
+ @param textFieldView UITextField/UITextView object to register.
+ */
+-(void)addTextFieldView:(nonnull UIView*)textFieldView;
+
+/**
+ Should pass UITextField/UITextView instance. Restore it's textFieldView delegate and it's returnKeyType.
+
+ @param textFieldView UITextField/UITextView object to unregister.
+ */
+-(void)removeTextFieldView:(nonnull UIView*)textFieldView;
+
+/**
+ Add all the UITextField/UITextView responderView's.
+ 
+ @param view object to register all it's responder subviews.
+ */
+-(void)addResponderFromView:(nonnull UIView*)view;
+
+/**
+ Remove all the UITextField/UITextView responderView's.
+ 
+ @param view object to unregister all it's responder subviews.
+ */
+-(void)removeResponderFromView:(nonnull UIView*)view;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.m
new file mode 100644
index 0000000..ef88900
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQKeyboardReturnKeyHandler.m
@@ -0,0 +1,615 @@
+//
+// IQKeyboardReturnKeyHandler.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQKeyboardReturnKeyHandler.h"
+#import "IQKeyboardManager.h"
+#import "IQUIView+Hierarchy.h"
+#import "IQNSArray+Sort.h"
+
+#import <UIKit/UITextField.h>
+#import <UIKit/UITextView.h>
+#import <UIKit/UIViewController.h>
+
+@interface IQTextFieldViewInfoModal : NSObject
+
+@property(nullable, nonatomic, weak) UIView *textFieldView;
+@property(nullable, nonatomic, weak) id<UITextFieldDelegate> textFieldDelegate;
+@property(nullable, nonatomic, weak) id<UITextViewDelegate> textViewDelegate;
+@property(nonatomic) UIReturnKeyType originalReturnKeyType;
+
+@end
+
+@implementation IQTextFieldViewInfoModal
+
+-(instancetype)initWithTextFieldView:(UIView*)textFieldView textFieldDelegate:(id<UITextFieldDelegate>)textFieldDelegate textViewDelegate:(id<UITextViewDelegate>)textViewDelegate originalReturnKey:(UIReturnKeyType)returnKeyType
+{
+    self = [super init];
+    
+    if (self)
+    {
+        _textFieldView = textFieldView;
+        _textFieldDelegate = textFieldDelegate;
+        _textViewDelegate = textViewDelegate;
+        _originalReturnKeyType = returnKeyType;
+    }
+    
+    return self;
+}
+
+@end
+
+
+@interface IQKeyboardReturnKeyHandler ()<UITextFieldDelegate,UITextViewDelegate>
+
+-(void)updateReturnKeyTypeOnTextField:(UIView*)textField;
+
+@end
+
+@implementation IQKeyboardReturnKeyHandler
+{
+    NSMutableSet<IQTextFieldViewInfoModal*> *textFieldInfoCache;
+}
+
+@synthesize lastTextFieldReturnKeyType = _lastTextFieldReturnKeyType;
+@synthesize delegate = _delegate;
+
+- (instancetype)init
+{
+    self = [self initWithViewController:nil];
+    return self;
+}
+
+-(instancetype)initWithViewController:(nullable UIViewController*)controller
+{
+    self = [super init];
+    
+    if (self)
+    {
+        textFieldInfoCache = [[NSMutableSet alloc] init];
+        
+        if (controller.view)
+        {
+            [self addResponderFromView:controller.view];
+        }
+    }
+    
+    return self;
+}
+
+-(IQTextFieldViewInfoModal*)textFieldViewCachedInfo:(UIView*)textField
+{
+    for (IQTextFieldViewInfoModal *modal in textFieldInfoCache)
+        if (modal.textFieldView == textField)  return modal;
+    
+    return nil;
+}
+
+#pragma mark - Add/Remove TextFields
+-(void)addResponderFromView:(UIView*)view
+{
+    NSArray<UIView*> *textFields = [view deepResponderViews];
+    
+    for (UIView *textField in textFields)  [self addTextFieldView:textField];
+}
+
+-(void)removeResponderFromView:(UIView*)view
+{
+    NSArray<UIView*> *textFields = [view deepResponderViews];
+    
+    for (UIView *textField in textFields)  [self removeTextFieldView:textField];
+}
+
+-(void)removeTextFieldView:(UIView*)view
+{
+    IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:view];
+    
+    if (modal)
+    {
+        UITextField *textField = (UITextField*)view;
+
+        if ([view respondsToSelector:@selector(setReturnKeyType:)])
+        {
+            textField.returnKeyType = modal.originalReturnKeyType;
+        }
+
+        if ([view respondsToSelector:@selector(setDelegate:)])
+        {
+            textField.delegate = modal.textFieldDelegate;
+        }
+        
+        [textFieldInfoCache removeObject:modal];
+    }
+}
+
+-(void)addTextFieldView:(UIView*)view
+{
+    IQTextFieldViewInfoModal *modal = [[IQTextFieldViewInfoModal alloc] initWithTextFieldView:view textFieldDelegate:nil textViewDelegate:nil originalReturnKey:UIReturnKeyDefault];
+    
+    UITextField *textField = (UITextField*)view;
+
+    if ([view respondsToSelector:@selector(setReturnKeyType:)])
+    {
+        modal.originalReturnKeyType = textField.returnKeyType;
+    }
+
+    if ([view respondsToSelector:@selector(setDelegate:)])
+    {
+        modal.textFieldDelegate = textField.delegate;
+        [textField setDelegate:self];
+    }
+
+    [textFieldInfoCache addObject:modal];
+}
+
+-(void)updateReturnKeyTypeOnTextField:(UIView*)textField
+{
+    UIView *superConsideredView;
+    
+    //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347)
+    for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses])
+    {
+        superConsideredView = [textField superviewOfClassType:consideredClass];
+        
+        if (superConsideredView)
+            break;
+    }
+
+    NSArray<UIView*> *textFields = nil;
+
+    //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position.
+    if (superConsideredView)  //     //   (Enhancement ID: #22)
+    {
+        textFields = [superConsideredView deepResponderViews];
+    }
+    //Otherwise fetching all the siblings
+    else
+    {
+        textFields = [textField responderSiblings];
+        
+        //Sorting textFields according to behaviour
+        switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour])
+        {
+                //If needs to sort it by tag
+            case IQAutoToolbarByTag:
+                textFields = [textFields sortedArrayByTag];
+                break;
+                
+                //If needs to sort it by Position
+            case IQAutoToolbarByPosition:
+                textFields = [textFields sortedArrayByPosition];
+                break;
+                
+            default:
+                break;
+        }
+    }
+    
+    //If it's the last textField in responder view, else next
+    [(UITextField*)textField setReturnKeyType:(([textFields lastObject] == textField)    ?   self.lastTextFieldReturnKeyType :   UIReturnKeyNext)];
+}
+
+#pragma mark - Goto next or Resign.
+
+-(BOOL)goToNextResponderOrResign:(UIView*)textField
+{
+    UIView *superConsideredView;
+    
+    //If find any consider responderView in it's upper hierarchy then will get deepResponderView. (Bug ID: #347)
+    for (Class consideredClass in [[IQKeyboardManager sharedManager] toolbarPreviousNextAllowedClasses])
+    {
+        superConsideredView = [textField superviewOfClassType:consideredClass];
+        
+        if (superConsideredView)
+            break;
+    }
+    
+    NSArray<UIView*> *textFields = nil;
+    
+    //If there is a tableView in view's hierarchy, then fetching all it's subview that responds. No sorting for tableView, it's by subView position.
+    if (superConsideredView)  //     //   (Enhancement ID: #22)
+    {
+        textFields = [superConsideredView deepResponderViews];
+    }
+    //Otherwise fetching all the siblings
+    else
+    {
+        textFields = [textField responderSiblings];
+        
+        //Sorting textFields according to behaviour
+        switch ([[IQKeyboardManager sharedManager] toolbarManageBehaviour])
+        {
+                //If needs to sort it by tag
+            case IQAutoToolbarByTag:
+                textFields = [textFields sortedArrayByTag];
+                break;
+                
+                //If needs to sort it by Position
+            case IQAutoToolbarByPosition:
+                textFields = [textFields sortedArrayByPosition];
+                break;
+                
+            default:
+                break;
+        }
+    }
+        
+    //Getting index of current textField.
+    NSUInteger index = [textFields indexOfObject:textField];
+    
+    //If it is not last textField. then it's next object becomeFirstResponder.
+    if (index != NSNotFound && index < textFields.count-1)
+    {
+        [textFields[index+1] becomeFirstResponder];
+        return NO;
+    }
+    else
+    {
+        [textField resignFirstResponder];
+        return YES;
+    }
+}
+
+#pragma mark - TextField delegate
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
+{
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textFieldShouldBeginEditing:)])
+        return [delegate textFieldShouldBeginEditing:textField];
+    else
+        return YES;
+}
+
+- (void)textFieldDidBeginEditing:(UITextField *)textField
+{
+    [self updateReturnKeyTypeOnTextField:textField];
+
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textFieldDidBeginEditing:)])
+        [delegate textFieldDidBeginEditing:textField];
+}
+
+- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
+{
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+
+    if ([delegate respondsToSelector:@selector(textFieldShouldEndEditing:)])
+        return [delegate textFieldShouldEndEditing:textField];
+    else
+        return YES;
+}
+
+- (void)textFieldDidEndEditing:(UITextField *)textField
+{
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:)])
+        [delegate textFieldDidEndEditing:textField];
+}
+
+- (void)textFieldDidEndEditing:(UITextField *)textField reason:(UITextFieldDidEndEditingReason)reason NS_AVAILABLE_IOS(10_0);
+{
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+    
+    if (@available(iOS 10.0, *)) {
+        if ([delegate respondsToSelector:@selector(textFieldDidEndEditing:reason:)])
+            [delegate textFieldDidEndEditing:textField reason:reason];
+    }
+}
+
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
+{
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)])
+        return [delegate textField:textField shouldChangeCharactersInRange:range replacementString:string];
+    else
+        return YES;
+}
+
+- (BOOL)textFieldShouldClear:(UITextField *)textField
+{
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textFieldShouldClear:)])
+        return [delegate textFieldShouldClear:textField];
+    else
+        return YES;
+}
+
+-(BOOL)textFieldShouldReturn:(UITextField *)textField
+{
+    id<UITextFieldDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textField];
+        delegate = modal.textFieldDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textFieldShouldReturn:)])
+    {
+        BOOL shouldReturn = [delegate textFieldShouldReturn:textField];
+
+        if (shouldReturn)
+        {
+            shouldReturn = [self goToNextResponderOrResign:textField];
+        }
+        
+        return shouldReturn;
+    }
+    else
+    {
+        return [self goToNextResponderOrResign:textField];
+    }
+}
+
+
+#pragma mark - TextView delegate
+- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textViewShouldBeginEditing:)])
+        return [delegate textViewShouldBeginEditing:textView];
+    else
+        return YES;
+}
+
+- (BOOL)textViewShouldEndEditing:(UITextView *)textView
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textViewShouldEndEditing:)])
+        return [delegate textViewShouldEndEditing:textView];
+    else
+        return YES;
+}
+
+- (void)textViewDidBeginEditing:(UITextView *)textView
+{
+    [self updateReturnKeyTypeOnTextField:textView];
+
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textViewDidBeginEditing:)])
+        [delegate textViewDidBeginEditing:textView];
+}
+
+- (void)textViewDidEndEditing:(UITextView *)textView
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textViewDidEndEditing:)])
+        [delegate textViewDidEndEditing:textView];
+}
+
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    BOOL shouldReturn = YES;
+    
+    if ([delegate respondsToSelector:@selector(textView:shouldChangeTextInRange:replacementText:)])
+        shouldReturn = [delegate textView:textView shouldChangeTextInRange:range replacementText:text];
+    
+    if (shouldReturn && [text isEqualToString:@"\n"])
+    {
+        shouldReturn = [self goToNextResponderOrResign:textView];
+    }
+    
+    return shouldReturn;
+}
+
+- (void)textViewDidChange:(UITextView *)textView
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textViewDidChange:)])
+        [delegate textViewDidChange:textView];
+}
+
+- (void)textViewDidChangeSelection:(UITextView *)textView
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textViewDidChangeSelection:)])
+        [delegate textViewDidChangeSelection:textView];
+}
+
+- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction NS_AVAILABLE_IOS(10_0);
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if (@available(iOS 10.0, *)) {
+        if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:interaction:)])
+            return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange interaction:interaction];
+    }
+
+    return YES;
+}
+
+- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction NS_AVAILABLE_IOS(10_0);
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if (@available(iOS 10.0, *)) {
+    if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:interaction:)])
+        return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange interaction:interaction];
+    }
+
+    return YES;
+}
+
+#if __IPHONE_OS_VERSION_MIN_REQUIRED < 100000
+- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textView:shouldInteractWithURL:inRange:)])
+        return [delegate textView:textView shouldInteractWithURL:URL inRange:characterRange];
+    else
+        return YES;
+}
+
+- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange
+{
+    id<UITextViewDelegate> delegate = self.delegate;
+    
+    if (delegate == nil)
+    {
+        IQTextFieldViewInfoModal *modal = [self textFieldViewCachedInfo:textView];
+        delegate = modal.textViewDelegate;
+    }
+    
+    if ([delegate respondsToSelector:@selector(textView:shouldInteractWithTextAttachment:inRange:)])
+        return [delegate textView:textView shouldInteractWithTextAttachment:textAttachment inRange:characterRange];
+    else
+        return YES;
+}
+#endif
+
+-(void)dealloc
+{
+    for (IQTextFieldViewInfoModal *modal in textFieldInfoCache)
+    {
+        UITextField *textField = (UITextField*)modal.textFieldView;
+
+        if ([textField respondsToSelector:@selector(setReturnKeyType:)])
+        {
+            textField.returnKeyType = modal.originalReturnKeyType;
+        }
+
+        if ([textField respondsToSelector:@selector(setDelegate:)])
+        {
+            textField.delegate = modal.textFieldDelegate;
+        }
+    }
+
+    [textFieldInfoCache removeAllObjects];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.h
new file mode 100644
index 0000000..99a9bfa
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.h
@@ -0,0 +1,52 @@
+//
+// IQTextView.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQKeyboardManagerConstants.h"
+
+#import <UIKit/UITextView.h>
+
+/**
+ UITextView with placeholder support
+ */
+@interface IQTextView : UITextView
+
+/**
+ Set textView's placeholder text. Default is nil.
+ */
+@property(nullable, nonatomic,copy) IBInspectable NSString    *placeholder;
+
+/**
+ Set textView's placeholder attributed text. Default is nil.
+ */
+@property(nullable, nonatomic,copy) IBInspectable NSAttributedString    *attributedPlaceholder;
+
+/**
+ To set textView's placeholder text color. Default is nil.
+ */
+@property(nullable, nonatomic,copy) IBInspectable UIColor    *placeholderTextColor;
+
+@end
+
+
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.m
new file mode 100644
index 0000000..931d735
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQTextView/IQTextView.m
@@ -0,0 +1,209 @@
+//
+// IQTextView.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQTextView.h"
+
+#import <UIKit/NSTextContainer.h>
+#import <UIKit/UIAccessibility.h>
+#import <UIKit/UILabel.h>
+#import <UIKit/UINibLoading.h>
+
+@interface IQTextView ()
+
+@property(nullable, nonatomic, strong) UILabel *IQ_PlaceholderLabel;
+
+@end
+
+@implementation IQTextView
+
+@synthesize placeholder = _placeholder;
+@synthesize IQ_PlaceholderLabel = _IQ_PlaceholderLabel;
+@synthesize placeholderTextColor = _placeholderTextColor;
+
+-(void)initialize
+{
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshPlaceholder) name:UITextViewTextDidChangeNotification object:self];
+}
+
+-(void)dealloc
+{
+    [_IQ_PlaceholderLabel removeFromSuperview];
+    _IQ_PlaceholderLabel = nil;
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        [self initialize];
+    }
+    return self;
+}
+
+-(void)awakeFromNib
+{
+    [super awakeFromNib];
+    [self initialize];
+}
+
+-(void)refreshPlaceholder
+{
+    if([[self text] length] || [[self attributedText] length])
+    {
+        if (self.IQ_PlaceholderLabel.alpha != 0) {
+            [self.IQ_PlaceholderLabel setAlpha:0];
+            [self setNeedsLayout];
+            [self layoutIfNeeded];
+        }
+    }
+    else if(self.IQ_PlaceholderLabel.alpha != 1)
+    {
+        [self.IQ_PlaceholderLabel setAlpha:1];
+        [self setNeedsLayout];
+        [self layoutIfNeeded];
+    }
+}
+
+- (void)setText:(NSString *)text
+{
+    [super setText:text];
+    [self refreshPlaceholder];
+}
+
+-(void)setAttributedText:(NSAttributedString *)attributedText
+{
+    [super setAttributedText:attributedText];
+    [self refreshPlaceholder];
+}
+
+-(void)setFont:(UIFont *)font
+{
+    [super setFont:font];
+    self.IQ_PlaceholderLabel.font = self.font;
+    
+    [self setNeedsLayout];
+    [self layoutIfNeeded];
+}
+
+-(void)setTextAlignment:(NSTextAlignment)textAlignment
+{
+    [super setTextAlignment:textAlignment];
+    self.IQ_PlaceholderLabel.textAlignment = textAlignment;
+    
+    [self setNeedsLayout];
+    [self layoutIfNeeded];
+}
+
+-(void)layoutSubviews
+{
+    [super layoutSubviews];
+    self.IQ_PlaceholderLabel.frame = [self placeholderExpectedFrame];
+}
+
+-(void)setPlaceholder:(NSString *)placeholder
+{
+    _placeholder = placeholder;
+    
+    self.IQ_PlaceholderLabel.text = placeholder;
+    [self refreshPlaceholder];
+}
+
+-(void)setAttributedPlaceholder:(NSAttributedString *)attributedPlaceholder
+{
+    _attributedPlaceholder = attributedPlaceholder;
+    
+    self.IQ_PlaceholderLabel.attributedText = attributedPlaceholder;
+    [self refreshPlaceholder];
+}
+
+-(void)setPlaceholderTextColor:(UIColor*)placeholderTextColor
+{
+    _placeholderTextColor = placeholderTextColor;
+    self.IQ_PlaceholderLabel.textColor = placeholderTextColor;
+}
+
+-(UIEdgeInsets)placeholderInsets
+{
+    return UIEdgeInsetsMake(self.textContainerInset.top, self.textContainerInset.left + self.textContainer.lineFragmentPadding, self.textContainerInset.bottom, self.textContainerInset.right + self.textContainer.lineFragmentPadding);
+}
+
+-(CGRect)placeholderExpectedFrame
+{
+    UIEdgeInsets placeholderInsets = [self placeholderInsets];
+    CGFloat maxWidth = CGRectGetWidth(self.frame)-placeholderInsets.left-placeholderInsets.right;
+    
+    CGSize expectedSize = [self.IQ_PlaceholderLabel sizeThatFits:CGSizeMake(maxWidth, CGRectGetHeight(self.frame)-placeholderInsets.top-placeholderInsets.bottom)];
+    
+    return CGRectMake(placeholderInsets.left, placeholderInsets.top, maxWidth, expectedSize.height);
+}
+
+-(UILabel*)IQ_PlaceholderLabel
+{
+    if (_IQ_PlaceholderLabel == nil)
+    {
+        _IQ_PlaceholderLabel = [[UILabel alloc] init];
+        _IQ_PlaceholderLabel.autoresizingMask = (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight);
+        _IQ_PlaceholderLabel.lineBreakMode = NSLineBreakByWordWrapping;
+        _IQ_PlaceholderLabel.numberOfLines = 0;
+        _IQ_PlaceholderLabel.font = self.font;
+        _IQ_PlaceholderLabel.textAlignment = self.textAlignment;
+        _IQ_PlaceholderLabel.backgroundColor = [UIColor clearColor];
+        _IQ_PlaceholderLabel.isAccessibilityElement = NO;
+        #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+            if (@available(iOS 13.0, *)) {
+                _IQ_PlaceholderLabel.textColor = [UIColor systemGrayColor];
+            } else
+        #endif
+            {
+                _IQ_PlaceholderLabel.textColor = [UIColor lightTextColor];
+            }
+        _IQ_PlaceholderLabel.alpha = 0;
+        [self addSubview:_IQ_PlaceholderLabel];
+    }
+    
+    return _IQ_PlaceholderLabel;
+}
+
+//When any text changes on textField, the delegate getter is called. At this time we refresh the textView's placeholder
+-(id<UITextViewDelegate>)delegate
+{
+    [self refreshPlaceholder];
+    return [super delegate];
+}
+
+-(CGSize)intrinsicContentSize
+{
+    if (self.hasText) {
+        return [super intrinsicContentSize];
+    }
+    
+    UIEdgeInsets placeholderInsets = [self placeholderInsets];
+    CGSize newSize = [super intrinsicContentSize];
+    
+    newSize.height = [self placeholderExpectedFrame].size.height + placeholderInsets.top + placeholderInsets.bottom;
+    
+    return newSize;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.h
new file mode 100644
index 0000000..25bf9ad
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.h
@@ -0,0 +1,51 @@
+//
+// IQBarButtonItem.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <UIKit/UIBarButtonItem.h>
+
+@class NSInvocation;
+
+/**
+ IQBarButtonItem used for IQToolbar.
+ */
+@interface IQBarButtonItem : UIBarButtonItem
+
+/**
+ Boolean to know if it's a system item or custom item
+ */
+@property (nonatomic, readonly) BOOL isSystemItem;
+
+/**
+ Additional target & action to do get callback action. Note that setting custom target & selector doesn't affect native functionality, this is just an additional target to get a callback.
+ 
+ @param target Target object.
+ @param action Target Selector.
+ */
+-(void)setTarget:(nullable id)target action:(nullable SEL)action;
+
+/**
+ Customized Invocation to be called when button is pressed. invocation is internally created using setTarget:action: method.
+ */
+@property (nullable, strong, nonatomic) NSInvocation *invocation;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.m
new file mode 100644
index 0000000..9526456
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQBarButtonItem.m
@@ -0,0 +1,98 @@
+//
+// IQBarButtonItem.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQBarButtonItem.h"
+#import "IQKeyboardManagerConstantsInternal.h"
+#import <UIKit/NSAttributedString.h>
+
+@implementation IQBarButtonItem
+
++(void)initialize
+{
+    [super initialize];
+
+    IQBarButtonItem *appearanceProxy = [self appearance];
+
+    NSArray <NSNumber*> *states = @[@(UIControlStateNormal),@(UIControlStateHighlighted),@(UIControlStateDisabled),@(UIControlStateSelected),@(UIControlStateApplication),@(UIControlStateReserved)];
+    
+    for (NSNumber *state in states)
+    {
+        UIControlState controlState = [state unsignedIntegerValue];
+
+        [appearanceProxy setBackgroundImage:nil forState:controlState barMetrics:UIBarMetricsDefault];
+        [appearanceProxy setBackgroundImage:nil forState:controlState style:UIBarButtonItemStyleDone barMetrics:UIBarMetricsDefault];
+        [appearanceProxy setBackgroundImage:nil forState:controlState style:UIBarButtonItemStylePlain barMetrics:UIBarMetricsDefault];
+        [appearanceProxy setBackButtonBackgroundImage:nil forState:controlState barMetrics:UIBarMetricsDefault];
+    }
+
+    [appearanceProxy setTitlePositionAdjustment:UIOffsetZero forBarMetrics:UIBarMetricsDefault];
+    [appearanceProxy setBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault];
+    [appearanceProxy setBackButtonBackgroundVerticalPositionAdjustment:0 forBarMetrics:UIBarMetricsDefault];
+}
+
+-(void)setTintColor:(UIColor *)tintColor
+{
+    [super setTintColor:tintColor];
+    
+    //titleTextAttributes tweak is to overcome an issue comes with iOS11 where appearanceProxy set for NSForegroundColorAttributeName and bar button texts start appearing in appearance proxy color
+    NSMutableDictionary *textAttributes = [[self titleTextAttributesForState:UIControlStateNormal] mutableCopy]?:[NSMutableDictionary new];
+    
+    textAttributes[NSForegroundColorAttributeName] = tintColor;
+    
+    [self setTitleTextAttributes:textAttributes forState:UIControlStateNormal];
+}
+
+- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(nullable id)target action:(nullable SEL)action
+{
+    self = [super initWithBarButtonSystemItem:systemItem target:target action:action];
+    
+    if (self)
+    {
+        _isSystemItem = YES;
+    }
+    
+    return self;
+}
+
+
+-(void)setTarget:(nullable id)target action:(nullable SEL)action
+{
+    NSInvocation *invocation = nil;
+    
+    if (target && action)
+    {
+        invocation = [NSInvocation invocationWithMethodSignature:[target methodSignatureForSelector:action]];
+        invocation.target = target;
+        invocation.selector = action;
+    }
+    
+    self.invocation = invocation;
+}
+
+-(void)dealloc
+{
+    self.target = nil;
+    self.invocation = nil;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.h
new file mode 100644
index 0000000..aa282ee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.h
@@ -0,0 +1,30 @@
+//
+// IQPreviousNextView.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <UIKit/UIView.h>
+/**
+ If you need to enable previous/next toolbar button with some complex hierarchy where your textFields are not in same view, then make the top view as IQPreviousNextView.
+ */
+@interface IQPreviousNextView : UIView
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.m
new file mode 100644
index 0000000..207d115
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQPreviousNextView.m
@@ -0,0 +1,28 @@
+//
+// IQPreviousNextView.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQPreviousNextView.h"
+
+@implementation IQPreviousNextView
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h
new file mode 100644
index 0000000..bd16835
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.h
@@ -0,0 +1,71 @@
+//
+// IQTitleBarButtonItem.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQKeyboardManagerConstants.h"
+#import "IQBarButtonItem.h"
+
+#import <Foundation/NSObjCRuntime.h>
+
+/**
+ BarButtonItem with title text.
+ */
+@interface IQTitleBarButtonItem : IQBarButtonItem
+
+/**
+ Font to be used in bar button. Default is (system font 12.0 bold).
+ */
+@property(nullable, nonatomic, strong) UIFont *titleFont;
+
+/**
+ titleColor to be used for displaying button text when displaying title (disabled state).
+ */
+@property(nullable, nonatomic, strong) UIColor *titleColor;
+
+/**
+ selectableTitleColor to be used for displaying button text when button is enabled.
+ */
+@property(nullable, nonatomic, strong) UIColor *selectableTitleColor;
+
+/**
+ Initialize with frame and title.
+ 
+ @param title Title of barButtonItem.
+ */
+-(nonnull instancetype)initWithTitle:(nullable NSString *)title NS_DESIGNATED_INITIALIZER;
+
+/**
+ Unavailable. Please use initWithFrame:title: method
+ */
+-(nonnull instancetype)init NS_UNAVAILABLE;
+
+/**
+ Unavailable. Please use initWithFrame:title: method
+ */
+-(nonnull instancetype)initWithCoder:(nullable NSCoder *)aDecoder NS_UNAVAILABLE;
+
+/**
+ Unavailable. Please use initWithFrame:title: method
+ */
++ (nonnull instancetype)new NS_UNAVAILABLE;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m
new file mode 100644
index 0000000..efd6bdc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQTitleBarButtonItem.m
@@ -0,0 +1,165 @@
+//
+// IQTitleBarButtonItem.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQTitleBarButtonItem.h"
+#import "IQKeyboardManagerConstants.h"
+#import "IQKeyboardManagerConstantsInternal.h"
+
+#import <UIKit/UILabel.h>
+#import <UIKit/UIButton.h>
+
+@interface IQTitleBarButtonItem ()
+
+@property(nullable, nonatomic, strong) UIView *titleView;
+@property(nullable, nonatomic, strong) UIButton *titleButton;
+
+@end
+
+@implementation IQTitleBarButtonItem
+
+-(nonnull instancetype)initWithTitle:(nullable NSString *)title
+{
+    self = [super init];
+    if (self)
+    {
+        _titleView = [[UIView alloc] init];
+        _titleView.backgroundColor = [UIColor clearColor];
+
+        _titleButton = [UIButton buttonWithType:UIButtonTypeSystem];
+        _titleButton.enabled = NO;
+        _titleButton.titleLabel.numberOfLines = 3;
+        #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+        if (@available(iOS 13.0, *)) {
+            [_titleButton setTitleColor:[UIColor systemBlueColor] forState:UIControlStateNormal];
+        } else
+        #endif
+        {
+            [_titleButton setTitleColor:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal];
+        }
+        [_titleButton setTitleColor:[UIColor lightGrayColor] forState:UIControlStateDisabled];
+        [_titleButton setBackgroundColor:[UIColor clearColor]];
+        [_titleButton.titleLabel setTextAlignment:NSTextAlignmentCenter];
+        [self setTitle:title];
+        [self setTitleFont:[UIFont systemFontOfSize:13.0]];
+        [_titleView addSubview:_titleButton];
+        
+        if (@available(iOS 11.0, *))
+        {
+            CGFloat layoutDefaultLowPriority = UILayoutPriorityDefaultLow-1;
+            CGFloat layoutDefaultHighPriority = UILayoutPriorityDefaultHigh-1;
+
+            _titleView.translatesAutoresizingMaskIntoConstraints = NO;
+            [_titleView setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisVertical];
+            [_titleView setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisHorizontal];
+            [_titleView setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisVertical];
+            [_titleView setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisHorizontal];
+            
+            _titleButton.translatesAutoresizingMaskIntoConstraints = NO;
+            [_titleButton setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisVertical];
+            [_titleButton setContentHuggingPriority:layoutDefaultLowPriority forAxis:UILayoutConstraintAxisHorizontal];
+            [_titleButton setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisVertical];
+            [_titleButton setContentCompressionResistancePriority:layoutDefaultHighPriority forAxis:UILayoutConstraintAxisHorizontal];
+
+            NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeTop multiplier:1 constant:0];
+            NSLayoutConstraint *bottom = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeBottom multiplier:1 constant:0];
+            NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeLeading multiplier:1 constant:0];
+            NSLayoutConstraint *trailing = [NSLayoutConstraint constraintWithItem:_titleButton attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:_titleView attribute:NSLayoutAttributeTrailing multiplier:1 constant:0];
+            [_titleView addConstraints:@[top,bottom,leading,trailing]];
+        }
+        else
+        {
+            _titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
+            _titleButton.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
+        }
+
+        self.customView = _titleView;
+    }
+    return self;
+}
+
+-(void)setTitleFont:(UIFont *)titleFont
+{
+    _titleFont = titleFont;
+    
+    if (titleFont)
+    {
+        _titleButton.titleLabel.font = titleFont;
+    }
+    else
+    {
+        _titleButton.titleLabel.font = [UIFont systemFontOfSize:13];
+    }
+}
+
+-(void)setTitle:(NSString *)title
+{
+    [super setTitle:title];
+    [_titleButton setTitle:title forState:UIControlStateNormal];
+}
+
+-(void)setTitleColor:(UIColor*)titleColor
+{
+    _titleColor = titleColor;
+    [_titleButton setTitleColor:_titleColor?:[UIColor lightGrayColor] forState:UIControlStateDisabled];
+}
+
+-(void)setSelectableTitleColor:(UIColor*)selectableTitleColor
+{
+    _selectableTitleColor = selectableTitleColor;
+    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
+    if (@available(iOS 13.0, *)) {
+        [_titleButton setTitleColor:_selectableTitleColor?:[UIColor systemBlueColor] forState:UIControlStateNormal];
+    } else
+    #endif
+    {
+        [_titleButton setTitleColor:_selectableTitleColor?:[UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0] forState:UIControlStateNormal];
+    }
+}
+
+-(void)setInvocation:(NSInvocation *)invocation
+{
+    [super setInvocation:invocation];
+    
+    if (invocation.target == nil || invocation.selector == NULL)
+    {
+        self.enabled = NO;
+        _titleButton.enabled = NO;
+        [_titleButton removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
+    }
+    else
+    {
+        self.enabled = YES;
+        _titleButton.enabled = YES;
+        [_titleButton addTarget:invocation.target action:invocation.selector forControlEvents:UIControlEventTouchUpInside];
+    }
+}
+
+-(void)dealloc
+{
+    self.customView = nil;
+    [_titleButton removeTarget:nil action:NULL forControlEvents:UIControlEventTouchUpInside];
+    _titleView = nil;
+    _titleButton = nil;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.h
new file mode 100644
index 0000000..3ab3aee
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.h
@@ -0,0 +1,60 @@
+//
+// IQToolbar.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQTitleBarButtonItem.h"
+
+#import <UIKit/UIToolbar.h>
+#import <UIKit/UIDevice.h>
+
+/**
+ IQToolbar for IQKeyboardManager.
+ */
+@interface IQToolbar : UIToolbar <UIInputViewAudioFeedback>
+
+/**
+ Previous bar button of toolbar.
+ */
+@property(nonnull, nonatomic, strong) IQBarButtonItem *previousBarButton;
+
+/**
+ Next bar button of toolbar.
+ */
+@property(nonnull, nonatomic, strong) IQBarButtonItem *nextBarButton;
+
+/**
+ Title bar button of toolbar.
+ */
+@property(nonnull, nonatomic, strong, readonly) IQTitleBarButtonItem *titleBarButton;
+
+/**
+ Done bar button of toolbar.
+ */
+@property(nonnull, nonatomic, strong) IQBarButtonItem *doneBarButton;
+
+/**
+ Fixed space bar button of toolbar.
+ */
+@property(nonnull, nonatomic, strong) IQBarButtonItem *fixedSpaceBarButton;
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.m
new file mode 100644
index 0000000..0a06217
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQToolbar.m
@@ -0,0 +1,262 @@
+//
+// IQToolbar.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQToolbar.h"
+#import "IQKeyboardManagerConstantsInternal.h"
+#import "IQUIView+Hierarchy.h"
+
+#import <UIKit/UIButton.h>
+#import <UIKit/UIAccessibility.h>
+#import <UIKit/UIViewController.h>
+
+@implementation IQToolbar
+@synthesize previousBarButton = _previousBarButton;
+@synthesize nextBarButton = _nextBarButton;
+@synthesize titleBarButton = _titleBarButton;
+@synthesize doneBarButton = _doneBarButton;
+@synthesize fixedSpaceBarButton = _fixedSpaceBarButton;
+
++(void)initialize
+{
+    [super initialize];
+
+    IQToolbar *appearanceProxy = [self appearance];
+    
+    NSArray <NSNumber*> *positions = @[@(UIBarPositionAny),@(UIBarPositionBottom),@(UIBarPositionTop),@(UIBarPositionTopAttached)];
+
+    for (NSNumber *position in positions)
+    {
+        UIToolbarPosition toolbarPosition = [position unsignedIntegerValue];
+
+        [appearanceProxy setBackgroundImage:nil forToolbarPosition:toolbarPosition barMetrics:UIBarMetricsDefault];
+        [appearanceProxy setShadowImage:nil forToolbarPosition:toolbarPosition];
+    }
+}
+
+-(void)initialize
+{
+    [self sizeToFit];
+    self.autoresizingMask = UIViewAutoresizingFlexibleWidth;// | UIViewAutoresizingFlexibleHeight;
+    self.translucent = YES;
+}
+
+- (instancetype)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self)
+    {
+        [self initialize];
+    }
+    return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)coder
+{
+    self = [super initWithCoder:coder];
+    if (self)
+    {
+        [self initialize];
+    }
+    return self;
+}
+
+-(void)dealloc
+{
+    self.items = nil;
+}
+
+-(IQBarButtonItem *)previousBarButton
+{
+    if (_previousBarButton == nil)
+    {
+        _previousBarButton = [[IQBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStylePlain target:nil action:nil];
+    }
+    
+    return _previousBarButton;
+}
+
+-(IQBarButtonItem *)nextBarButton
+{
+    if (_nextBarButton == nil)
+    {
+        _nextBarButton = [[IQBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStylePlain target:nil action:nil];
+    }
+    
+    return _nextBarButton;
+}
+
+-(IQTitleBarButtonItem *)titleBarButton
+{
+    if (_titleBarButton == nil)
+    {
+        _titleBarButton = [[IQTitleBarButtonItem alloc] initWithTitle:nil];
+        _titleBarButton.accessibilityLabel = @"Title";
+        _titleBarButton.accessibilityIdentifier = _titleBarButton.accessibilityLabel;
+    }
+    
+    return _titleBarButton;
+}
+
+-(IQBarButtonItem *)doneBarButton
+{
+    if (_doneBarButton == nil)
+    {
+        _doneBarButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:nil];
+    }
+    
+    return _doneBarButton;
+}
+
+-(IQBarButtonItem *)fixedSpaceBarButton
+{
+    if (_fixedSpaceBarButton == nil)
+    {
+        _fixedSpaceBarButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
+        if (@available(iOS 10.0, *))
+        {
+            [_fixedSpaceBarButton setWidth:6];
+        }
+        else
+        {
+            [_fixedSpaceBarButton setWidth:20];
+        }
+    }
+    
+    return _fixedSpaceBarButton;
+}
+
+-(CGSize)sizeThatFits:(CGSize)size
+{
+    CGSize sizeThatFit = [super sizeThatFits:size];
+
+    sizeThatFit.height = 44;
+    
+    return sizeThatFit;
+}
+
+-(void)setTintColor:(UIColor *)tintColor
+{
+    [super setTintColor:tintColor];
+
+    for (UIBarButtonItem *item in self.items)
+    {
+        [item setTintColor:tintColor];
+    }
+}
+
+-(void)layoutSubviews
+{
+    [super layoutSubviews];
+
+    if (@available(iOS 11.0, *)) {}
+    else {
+        CGRect leftRect = CGRectNull;
+        CGRect rightRect = CGRectNull;
+        
+        BOOL isTitleBarButtonFound = NO;
+        
+        NSArray<UIView*> *subviews = [self.subviews sortedArrayUsingComparator:^NSComparisonResult(UIView *view1, UIView *view2) {
+            
+            CGFloat x1 = CGRectGetMinX(view1.frame);
+            CGFloat y1 = CGRectGetMinY(view1.frame);
+            CGFloat x2 = CGRectGetMinX(view2.frame);
+            CGFloat y2 = CGRectGetMinY(view2.frame);
+            
+            if (x1 < x2)  return NSOrderedAscending;
+            
+            else if (x1 > x2) return NSOrderedDescending;
+            
+            //Else both y are same so checking for x positions
+            else if (y1 < y2)  return NSOrderedAscending;
+            
+            else if (y1 > y2) return NSOrderedDescending;
+            
+            else    return NSOrderedSame;
+        }];
+        
+        for (UIView *barButtonItemView in subviews)
+        {
+            if (isTitleBarButtonFound == YES)
+            {
+                rightRect = barButtonItemView.frame;
+                break;
+            }
+            else if (barButtonItemView == self.titleBarButton.customView)
+            {
+                isTitleBarButtonFound = YES;
+            }
+            //If it's UIToolbarButton or UIToolbarTextButton (which actually UIBarButtonItem)
+            else if ([barButtonItemView isKindOfClass:[UIControl class]])
+            {
+                leftRect = barButtonItemView.frame;
+            }
+        }
+        
+        CGFloat titleMargin = 16;
+
+        CGFloat maxWidth = CGRectGetWidth(self.frame) - titleMargin*2 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect));
+        CGFloat maxHeight = self.frame.size.height;
+
+        CGSize sizeThatFits = [self.titleBarButton.customView sizeThatFits:CGSizeMake(maxWidth, maxHeight)];
+
+        CGRect titleRect = CGRectZero;
+
+        CGFloat x = titleMargin;
+
+        if (sizeThatFits.width > 0 && sizeThatFits.height > 0)
+        {
+            CGFloat width = MIN(sizeThatFits.width, maxWidth);
+            CGFloat height = MIN(sizeThatFits.height, maxHeight);
+            
+            if (CGRectIsNull(leftRect) == false)
+            {
+                x = titleMargin + CGRectGetMaxX(leftRect) + ((maxWidth - width)/2);
+            }
+            
+            CGFloat y = (maxHeight - height)/2;
+            
+            titleRect = CGRectMake(x, y, width, height);
+        }
+        else
+        {
+            if (CGRectIsNull(leftRect) == false)
+            {
+                x = titleMargin + CGRectGetMaxX(leftRect);
+            }
+            
+            CGFloat width = CGRectGetWidth(self.frame) - titleMargin*2 - (CGRectIsNull(leftRect)?0:CGRectGetMaxX(leftRect)) - (CGRectIsNull(rightRect)?0:CGRectGetWidth(self.frame)-CGRectGetMinX(rightRect));
+            
+            titleRect = CGRectMake(x, 0, width, maxHeight);
+        }
+        
+        self.titleBarButton.customView.frame = titleRect;
+    }
+}
+
+#pragma mark - UIInputViewAudioFeedback delegate
+- (BOOL) enableInputClicksWhenVisible
+{
+	return YES;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h
new file mode 100644
index 0000000..c3fc572
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.h
@@ -0,0 +1,147 @@
+//
+// IQUIView+IQKeyboardToolbar.h
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "IQToolbar.h"
+
+#import <UIKit/UIView.h>
+#import <UIKit/UIImage.h>
+
+@interface IQBarButtonItemConfiguration : NSObject
+
+-(nonnull instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)barButtonSystemItem action:(nullable SEL)action;
+-(nonnull instancetype)initWithImage:(nonnull UIImage*)image action:(nullable SEL)action;
+-(nonnull instancetype)initWithTitle:(nonnull NSString*)title action:(nullable SEL)action;
+
+@property (readonly, nonatomic) UIBarButtonSystemItem barButtonSystemItem; //System Item to be used to instantiate bar button
+@property (readonly, nonatomic, nullable) UIImage *image;    //Image to show on bar button item if it's not a system item.
+@property (readonly, nonatomic, nullable) NSString *title; //Title to show on bar button item if it's not a system item.
+@property (readonly, nonatomic, nullable) SEL action;  //action for bar button item. Usually 'doneAction:(IQBarButtonItem*)item'.
+
+@end
+
+@interface UIImage (IQKeyboardToolbarNextPreviousImage)
+
++(nullable UIImage*)keyboardLeftImage;
++(nullable UIImage*)keyboardRightImage;
++(nullable UIImage*)keyboardUpImage;
++(nullable UIImage*)keyboardDownImage;
+
++(nullable UIImage*)keyboardPreviousImage;
++(nullable UIImage*)keyboardNextImage;
+
+@end
+
+/**
+ UIView category methods to add IQToolbar on UIKeyboard.
+ */
+@interface UIView (IQToolbarAddition)
+
+///-------------------------
+/// @name Toolbar Title
+///-------------------------
+
+/**
+ IQToolbar references for better customization control.
+ */
+@property (readonly, nonatomic, nonnull) IQToolbar *keyboardToolbar;
+
+/**
+ If `shouldHideToolbarPlaceholder` is YES, then title will not be added to the toolbar. Default to NO.
+ */
+@property (assign, nonatomic) BOOL shouldHideToolbarPlaceholder;
+
+/**
+ `toolbarPlaceholder` to override default `placeholder` text when drawing text on toolbar.
+ */
+@property (nullable, strong, nonatomic) NSString* toolbarPlaceholder;
+
+/**
+ `drawingToolbarPlaceholder` will be actual text used to draw on toolbar. This would either `placeholder` or `toolbarPlaceholder`.
+ */
+@property (nullable, strong, nonatomic, readonly) NSString* drawingToolbarPlaceholder;
+
+///-------------
+/// MARK: Common
+///-------------
+
+- (void)addKeyboardToolbarWithTarget:(nullable id)target titleText:(nullable NSString*)titleText rightBarButtonConfiguration:(nullable IQBarButtonItemConfiguration*)rightBarButtonConfiguration previousBarButtonConfiguration:(nullable IQBarButtonItemConfiguration*)previousBarButtonConfiguration nextBarButtonConfiguration:(nullable IQBarButtonItemConfiguration*)nextBarButtonConfiguration;
+
+///------------
+/// @name Done
+///------------
+
+- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action;
+- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addDoneOnKeyboardWithTarget:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText;
+
+///------------
+/// @name Right
+///------------
+
+- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action;
+- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addRightButtonOnKeyboardWithText:(nullable NSString*)text target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText;
+
+- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action;
+- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addRightButtonOnKeyboardWithImage:(nullable UIImage*)image target:(nullable id)target action:(nullable SEL)action titleText:(nullable NSString*)titleText;
+
+///------------------
+/// @name Cancel/Done
+///------------------
+
+- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction;
+- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addCancelDoneOnKeyboardWithTarget:(nullable id)target cancelAction:(nullable SEL)cancelAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText;
+
+///-----------------
+/// @name Right/Left
+///-----------------
+
+- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction;
+- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addLeftRightOnKeyboardWithTarget:(nullable id)target leftButtonTitle:(nullable NSString*)leftButtonTitle rightButtonTitle:(nullable NSString*)rightButtonTitle leftButtonAction:(nullable SEL)leftButtonAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText;
+
+///-------------------------
+/// @name Previous/Next/Done
+///-------------------------
+
+- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction;
+- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addPreviousNextDoneOnKeyboardWithTarget:(nullable id)target previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction doneAction:(nullable SEL)doneAction titleText:(nullable NSString*)titleText;
+
+///--------------------------
+/// @name Previous/Next/Right
+///--------------------------
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction;
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonTitle:(nullable NSString*)rightButtonTitle previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText;
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction;
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder;
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction titleText:(nullable NSString*)titleText;
+
+@end
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m
new file mode 100644
index 0000000..b35d8bd
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/IQKeyboardManager/IQToolbar/IQUIView+IQKeyboardToolbar.m
@@ -0,0 +1,615 @@
+//
+// IQUIView+IQKeyboardToolbar.m
+// https://github.com/hackiftekhar/IQKeyboardManager
+// Copyright (c) 2013-16 Iftekhar Qurashi.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+
+#import "IQUIView+IQKeyboardToolbar.h"
+#import "IQKeyboardManagerConstantsInternal.h"
+#import "IQKeyboardManager.h"
+
+#import <objc/runtime.h>
+
+#import <Foundation/NSData.h>
+
+#import <UIKit/UIImage.h>
+#import <UIKit/UILabel.h>
+#import <UIKit/UIScreen.h>
+#import <UIKit/UIAccessibility.h>
+
+@implementation IQBarButtonItemConfiguration
+
+-(instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)barButtonSystemItem action:(SEL)action
+{
+    self = [super init];
+    if (self) {
+        _barButtonSystemItem = barButtonSystemItem;
+        _action = action;
+    }
+    return self;
+}
+
+-(instancetype)initWithImage:(UIImage *)image action:(SEL)action
+{
+    self = [super init];
+    if (self) {
+        _image = image;
+        _action = action;
+    }
+    return self;
+}
+
+-(instancetype)initWithTitle:(NSString *)title action:(SEL)action
+{
+    self = [super init];
+    if (self) {
+        _title = title;
+        _action = action;
+    }
+    return self;
+}
+
+@end
+
+@implementation UIImage (IQKeyboardToolbarNextPreviousImage)
+
++(UIImage*)keyboardLeftImage
+{
+    static UIImage *keyboardLeftImage = nil;
+    
+    if (keyboardLeftImage == nil)
+    {
+        NSString *base64Data = @"iVBORw0KGgoAAAANSUhEUgAAACQAAAA/CAYAAACIEWrAAAAAAXNSR0IArs4c6QAABtFJREFUaAXFmV1oHFUUx++d3SSbj/0k6Uc2u7Ob7QeVSqBSP7AUm1JpS0tb+6nFYhELxfahDxVU9KmgD0UU7ENRLLRQodRqNbVJY5IGXwRBEPHBh2x2ZpPQaDC7W2qSzc5c/3ebDTN3d5Pd7Gw6L3PPOcM5vzn33I+5Q8gTvJqbm52RYPAdIEg5DFuusdz3dq/X7XA6ewiVTvrcnvBkMvE9GNgTAQoGg16pztFLKX02mwhKOrwe99rJZPL2sgO1tbX5aiWpDzDPGHuFEvq01+2ZpEZltdutra3NjpranxC0Q4zFCLsVVZRjdtFQLTmycuUKZq/pA8zGvBiM3IiqynHoM8sCFGoJrSIO1o9u2SDCIDPXAXMCeo3bqg4UCARaJYkMEELXiTCEkauAOQm9nrPNj/+cwso7aiZQS6VBdFMeDDLz1ZAaM8Hw2FXLUHj1apnaawYIpWHxJRkjl5GZ09Az0VYVIFmWw6iXAWRGFgMynV2KxpWzhWD4s5Z3GeaZNXZGeTflwzDyGWDOFIPhQJZmqN3vX0clG7qJtHLnpktnFwFz3qQrIFgGJK+WN+D1+jGaVolxGNM/jsbVd0V9IdkSoEggsJFJlE96K8Qgus4uDMfVD0R9MbniGgr7/R1YsXkB58FgEH04HFdKhuGQFWUIo2kTZaQXQ9snvjGG9nsY2h+J+sXkJQO1BwKbMYv0YNX2ikF0ws4Pq8pFUV+KvCSgkD/0PCaMbnSTWwyCzJwDzKeivlS5bCBsOV/EsL6LAE5jEMYvSs4C5pJRX267LKBwILAVw/oOgjQZAz1mYaejinrZqF9Ku+QdY0SWOzkMaqbRGAgwOjJzKqqqXxj1S22jDBa/wsHgDqxNtwFTb3w6C0PYyWFVvWrUV9JetMsibfIuRuktkDuMgQCjYRdzYnhEvW7UV9peEKg9GNyDOeYmYOpMgRjLYD9zHDA3THoLhKIzdSgQ2k+p9A1imGEImUXNHEM3WQ7D36dghlAzhyRKeFfU8IcMV1rTtSOxePy2QWdpMw8oEggdwxp0DVFE2wy66SBg+LCv2mUa9mFZfhORrmA0mWCwz5zWdW0/uolPiFW95msIMGckQr8EjAkSo2mKMH0vMtNTVZI559lMtAdC5zCSPhEDAuaRppG9yqg6INqqJVNk5m1k5nMxAGAYYLYro8qywXAGiWYyvYSxUREIXUdtdnIKelM9ic9ZLWeXDnxdRmppdnMeEAMgUTex0XoN+lnRVg05C8Qd828pW5FvKUwD3w0pylE8lq4GhNHnPBBX+v3+tjpbTT+lZK3xId5GprqQqUNozog2K2UTEHfMDwdqJBtOKsh6MRAmxru6Ql+Jkdi0aLNKzgPijvnxia2e9WFhfUoMhC1qb1rP7BsZGZkSbVbI8xOj0Vnsn9gDMjO9DcH/MOp5G925o1aydeFko0G0WSEXBOKOh8bH/57OpDuxbPwuBsKM0Omw195taWkxbWXF55YiFwXizsbGxibSWqYTFf2b6ByZ2uqsb+jmZ82irRK5YA2JDkOekEdykXuA2CzaMP5+YanUzujkZDLfVr6mJCDu1ufzubxOZzeq6AUxDGrtVz1FXo4lYgnRVq5cMhB3zLvH1dD4I2poS14gdOuMru3A6Ps3z1aGYsEaEv1MTEw8fDQzvRP6QdGG4bep1mbv52fRebYyFGUBcb/j4+OPpmbTuzFz4yzIfCHdHQ6cK/IzabOldKlsIO4ao++/tK7tQe3cE0OhOzcSh+N+9mxaNJYgl1VDBfzVtcsyvtnobtGG+euvWV3rjMfjY6JtIXlJGTI4nMH/iQPI1A8GXbaJN13Pz6j5gi3aFpIrBeK+01E1dhAL77d5gShd47DZB/mZdZ6tiKLSLjO6tUeCoes4qjlsVPI2uk/RCNumKMqwaBNlKzKU85nBr4JXkamvc4rcHW8t87NrvjPN6YrdrQTiMTTU1OtY+67lBaQk+9+Dn2Xn2QwKq4G4a21IVd5Apq4Y4jxuUuonNvv97Jl2nnHukSJ6K9Q0EpQvYwZ/S3SGmhrPMH27qqp/ijbTV6porFTGT90u/NxdgXnKtEtATTXZKD3scTb1JFKpcWOcqgLxQIC643F7fNi6PGcMjHYjZvUjrkZPb/Jh8kHOVnUgHiiRTHQjUy5kyrx1obSBSuSI1+Xqm0ylsjP6sgBxKGTqHn6D1yNTpq0LslSPXxNH3c6mAXTfqJUTI4+76IXT3AvY5L1f4MFUhrBdy5ahHAAy1e91uzD46Es53dydYv7qWnYgHhxQgx6XexZQ2+dgZojGDuCf2p0nAsQhEqnkzz63awpz0hacve+LjqjZA7H/AWSbJ/TPf3CuAAAAAElFTkSuQmCC";
+        
+        NSData *data = [[NSData alloc] initWithBase64EncodedString:base64Data options:NSDataBase64DecodingIgnoreUnknownCharacters];
+        keyboardLeftImage = [UIImage imageWithData:data scale:3];
+
+        //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+        keyboardLeftImage = [keyboardLeftImage imageFlippedForRightToLeftLayoutDirection];
+    }
+    
+    return keyboardLeftImage;
+}
+
++(UIImage*)keyboardRightImage
+{
+    static UIImage *keyboardRightImage = nil;
+    
+    if (keyboardRightImage == nil)
+    {
+        NSString *base64Data = @"iVBORw0KGgoAAAANSUhEUgAAACQAAAA/CAYAAACIEWrAAAAAAXNSR0IArs4c6QAABu5JREFUaAXFmXtsFEUcx2f3rj0Kvd29k9LHtXfXqyjGV2J8EF/hIQgp4VnahPgIxviH0ZgYNSbGmBg1McaYGGOM+o8k+EINMQjIo6UoBAVEEBGQXnvbS1ttw91epUDbu/E7lb3bm22Pu97uOQnszO+3ne/nvjM7sw9CMsXRFAi83jhnTnUmVPqacEXSGfIHPhMEoYUSejpJyKJIJNJfehxCRIiWwZktDIYBCESY56BCZ319ve9/AQr5/c8CY7VRXBDIXJfo6Kyrq2swxktRZ0NWFgoEPocza3lBDF9P6rKwsGegp4fP2dVmQzYWjkTaCCVf8iKADIou0un3+0N8zq42A2JlvEvt2QBHPv2vmfkfFvrLiNAZqq+fm4naV9OBmEISTj0MpzaZ5AShXhAd+xrr6q435SwO6Je9sVsRc+ojDNdjxiCrw8GBcUoXq6p6is9Z1TY6pPeZglOPQ/1DPaAfAVnjFMQODN/Neszqo2OqDmNa/DuPJM/G+nSn8RxYOgux9Upl5a748PBfxpwV9SmBWOexhLbdIyserEvzs8QEYSYRxFZJUfZommbpip4TaAJKi+/0SnIlEYS7jVBwqQJutXkkqT2WSPQZc8XUrwo0AZXQdntkaQYg7jWKYU4hJrZJlXKnNqxFjbnp1vMCmoDStL2KJDsBdT8n5hJFoRXAP8Q0TeVyBTfzBmI9xxNah1eRU9j7FnJKLrTbZLf7QDyRiHC5gpoFAbGe4cJ+TPRRTPTFRiU4V45/rV5FOYRzuo25QuoFA7HOsST8qCjyBcyhpUYxAJVRSloVSToMp7qMuXzr0wJincc17SCc0uDUMqMYg8JEb/W65aNYNs4Zc/nUpw3EOodTh+DUEFb15QDBKpAuTiJi8ZSl4wA/m47mUSkKiPUPwcNeWR6ghDRzUA60W+DUSTh1Og+WiVOKBmK9YBIfVRQlCqdW8FC4J16nyPJpgOe1IVsCxKAgeAxOReDUyiwoTCik13olz9lYIn6SnZurWAbERODUcY+idMGpVYBK30mwOm5d1sCpMMBPlAzoCtRvsiSdEdmDAweF/Go4pcKpX6eCstQhXQRr0O9w6hTWqTWIpTXYUMKpVXCqD079op9vPKZPNgatqGP4/pAl9wlRENnTTFqHQaG9wiN5/oZTR3it9Il8woo2nDrjUeRjcGod+nPqfTIoYDVjnToPp37W4+xoKxATgFN/ym7lCKZ4C6xJQ7EcqJZjsx7BOQdZmxXbgZhIPBE/h9uTn1BdD4gyFssUYQmgkoDaz2IlAWJCEAxLlcpBDFULoMpZLFOERdgXBWxF+4z7TyZvYy1YH1wginQvoNLrlC6XIvT5rDHVEzYeRYdINhrXJ10LK7yapPSbUgI58AC6CQAbdAj9SCntpmOjC9X+/kipgJxN/uBmALTqEOkjpecujY8t6uvv72WxUgBNvO6B1iSve8jxkdHLSwYGBgZ1QLuByuHMFoit1AUzR3psNJl8ADDnMzF7HXLhveXXuB9qNgqyOubMkXFCl0aj0Rifs8WhIAnOcPjJVsA8yAsC5xAZTixTYzHNnLPBIbwsrcA68y0u7Qd4QThzIDFyYflQLDbM5/S2pQ5VV1fPcjkc27BLLdAF9CMej/YPXxxpHhoa+kePTXa0DKiqqqpylqtiO0TuMwvRDlzaKwYHB0fMueyIJUBer1eSKmbuwJzJekPCpODM7tFUclVfX9/FbOnJW0UDhTwembil79H9XWYJujOlCmuiJHrJnJs8UhQQXhd7MF92YYe+ne8eE3hbWI20IH6Zz+Vqm3bcXCcbcz6f7xo8M7Nd2wSDgdoKGHaXWBAM639aDtXU1FS5nGV78Pe3sE6MBc58BRi2gY4Z4/nWCwZin6/EctdeCNxoEqHkC8A8hPi4KZdnoCCgQCBQi/nSjnkzj+8fzmwGzKOIJ/lcIe285xD7XOUgwj48QZhgUpR8AphHioVh4HkBsc9U7HMV3LnO9Gsp/bhb7dmIOF71FV+uOmSNtbUBwVnWgb2pkZejNPVBWFWfRBx3oNaUnEDssxTuxdvhTMAkl6LvhXvVp03xIgNTDhnmzLXss9RkMHg+f6erN2I5DPstkzrEPkOJoqMdw1TH/+AUpW91q5EX+LhVbRNQoDZwA54t2aVdYxahbwDmJXPcukgWUFNDw01UxHZAyBxeArv2q7i0X+HjVrfTQI0+3634wrMHMLPNIvRlwLxmjlsfmQDCCnwb3iTtxpzx8hK4tF/Epf0mH7er7Qw1NNyBzndh11Z4kVSKPtfdq77Nx+1sO7GiVeCNpBN3e9mFpp4BzLvZQftbExhNfv89mD87IOfGJollhjwV7o28b798DoWgLzgfD3bnAfdEjtNsT/0LGvgrBSkuN9gAAAAASUVORK5CYII=";
+        
+        NSData *data = [[NSData alloc] initWithBase64EncodedString:base64Data options:NSDataBase64DecodingIgnoreUnknownCharacters];
+        keyboardRightImage = [UIImage imageWithData:data scale:3];
+
+        //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+        keyboardRightImage = [keyboardRightImage imageFlippedForRightToLeftLayoutDirection];
+    }
+    
+    return keyboardRightImage;
+}
+
++(UIImage*)keyboardUpImage
+{
+    static UIImage *keyboardUpImage = nil;
+    
+    if (keyboardUpImage == nil)
+    {
+        NSString *base64Data = @"iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGmklEQVRoBd1ZWWwbRRie2bVz27s2adPGxzqxqAQCIRA3CDVJGxpKaEtRoSAVISQQggdeQIIHeIAHkOCBFyQeKlARhaYHvUJa0ksVoIgKUKFqKWqdeG2nR1Lsdeo0h73D54iku7NO6ySOk3alyPN//+zM/81/7MyEkDl66j2eJXWK8vocTT82rTgXk/t8vqBNEI9QSp9zOeVkPJnomgs7ik5eUZQ6OxGOEEq9WcKUksdlWbqU0LRfi70ARSXv8Xi8dkE8CsJ+I1FK6BNYgCgW4A8jPtvtopFHqNeWCLbDIF6fkxQjK91O1z9IgRM59bMAFoV8YEFgka1EyBJfMhkH5L9ACFstS9IpRMDJyfoVEp918sGamoVCme0QyN3GG87wAKcTOBYA4hrJKf+VSCb+nsBnqYHVnr2ntra2mpWWH0BVu52fhRH2XSZDmsA/xensokC21Pv9T3J4wcWrq17gob1er7tEhMcJuYsfGoS3hdTweuBpxaM0iCJph8fLuX7DJMPWnI2GOzi8YOKseD4gB+RSQezMRRx5vRPEn88Sz7IIx8KHgT3FCBniWJUyke6o8/uXc3jBxIKTd7vdTsFJfkSo38NbCY/vPRsOPwt81KgLqeoBXc+sBjZsxLF4ZfgM7goqSqMRL1S7oOSrq6sdLodjH0rYfbyByPEOePwZ4CO8Liv3RCL70Wctr8+mA2NkT53P91iu92aCFYx8TU1NpbOi8gfs2R7iDYLxnXqYPg3c5Fm+Xygcbs/omXXATZGBBagQqNAe9Psf4d+ZiVwQ8qjqFVVl5dmi9ShvDEL90IieXtVDevic5ruOyYiAXYiA9YSxsZow0YnSKkKFjoAn8OAENsPGjKs9qnp5iSDuBXFLXsLjR4fSIy29vb2DU7UThW4d8n0zxjXtRVAYNaJnlocikWNTHZPvP1PPl2LLujM3cfbzwJXUyukQzxrZraptRCcbEDm60Wh4S0IE7McByVJQjf3yac+EfEm9ouxAcWu2TsS6koOplr6+vstWXf5IKBrejBR4ybIAlLpE1JE6j8eyh8h/dEKmS95e7w9sy57G+MkQ6sdYMrmiv79/gNdNR0YEbGKUvIIFQMRffRBtbkG0HQj6fHdcRafWmg55Gzy+BR5vtUzF2O96kjSH4nHNopsB0B0Ob6SEvcYvAPYS1UwQDyqLFcu5IZ/pTMUkjxfEoD/wLVY9+z02PXDL8RE9s0y9qMZNigIJcU37TZblfj7aUAMqURLXuqqq9sQHBi5NZbqpkBfh8a9BPLtDMz3wyImh9GhTLBab0uSmQfIQcNQ95pJkDVG3wtgdC1KFA+HaSodjdzKZ/Neou1Y7X/JC0K98BeIvWAdjp+jwUKN6/nyfVVd4JK4lunDrkwJhc6Gl1GGjwhqnLO3UNC2Rz8z5kKfw+EYQf5EfEKF+Wh+kDd0XYxd43WzKiIBfEAEjiIAm0zyUSFiU1XJF+feJy5evW3euR57C41+A+MumSbICY2dGmd6gnlPPWXRFABABP7llCXsA2mCcDjVAJoK4qryycsfAwEDSqOPb1yQPj38O4q/yL4F4aCiTXhqNRmMWXREBFMGjslOywUbToQeyyy4IrVVO53bUgEk/uZOSr/MHPsOd0hs8F4R6mI2ONKi9vRFeNxdyIqkddknOMhA2nyuy+wAqtEol8rbEYCLnZisneXj8UxB/00KGkUiGsqU90WiPRTeHACLgoNsp4eBDHzaagRS4RbCzle6ysq3xVIq/LiMW8ti5fYRVfMs4yFibsdgI05eqqhqy6OYBEE9qnSiCLhRB7tRHFzDR1oIasBU1wHTAMpHHjcmHIP4OzwXf8XMkk24IR6NneN18klEE97mc0gJwuN9oF+SFNlF8vNJR1YYacGVcN0Eet6XvY6Pw3rhi/Bc5fiEzShp7eiOnx7H5/IsI6EAELEIE3Gu0EymwyCbQZocktWEfMHa3MEa+zqe8KwjCB8bO/7f70kxvVGPqyRy6eQshAtpdsuTDN/9us5F0MQ4zTS5BaIsPDQ3jO+5/G+fjj82dIDF2CZeKjd3R6J8W3Y0BYFca+JJQssFqLuvSUqlmESHSiZywGzsgx+OZNFnWE4scN+I3WJshAnYjAm5FBNxptp16y+y2hICLEtOVMXJcI0xvDveGi/ofU7NxBZN0XIpuIIy0mUZkZNNZVf1kDAt6lZagEhjGnxbweh8wdbw5hOwdxHbwY/j9BpTM9xi4MGzFvZhpk3Bz8J5gkb19ym7cJr5w/wEmUjzJqoNVhwAAAABJRU5ErkJggg==";
+        
+        NSData *data = [[NSData alloc] initWithBase64EncodedString:base64Data options:NSDataBase64DecodingIgnoreUnknownCharacters];
+        keyboardUpImage = [UIImage imageWithData:data scale:3];
+
+        //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+        keyboardUpImage = [keyboardUpImage imageFlippedForRightToLeftLayoutDirection];
+    }
+    
+    return keyboardUpImage;
+}
+
++(UIImage*)keyboardDownImage
+{
+    static UIImage *keyboardDownImage = nil;
+    
+    if (keyboardDownImage == nil)
+    {
+        NSString *base64Data = @"iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGp0lEQVRoBd1ZCWhcRRiemff25WrydmOtuXbfZlMo4lEpKkppm6TpZUovC4UqKlQoUhURqQcUBcWDIkhVUCuI9SpJa+2h0VZjUawUEUUUirLNXqmxSnc32WaT7O4bv0nd5R1bc+2maR8s7z9m5v+/+f/5Z94sIf89jW73Yp/bfUuWvwLfDp/H8zhwObLYmCCaPJ6FjLJPCWNHNU1bkFVeQW/Zp2l7KWUvNmlaB3DJAhvz1ntvI5R1EUpnUUKdEifHGuvr519BwKUmj/cDYNtwARNd5/NoH4GWKIhzlFKXCSzn/xCut/jD4V9N8suPYYj4ewC+2e46f55Rwp/geExKSmdzJn2l1WrXmuSXF8MQ8XfyAeeEn9KTyV3MHwq9RTh50IqLEjJHUkh3Y13dPKvuMuApIr6bUHKP1VeE+Y8MIa09Z8/+JQlltD/+Q7VaFcW6X2VsjFmbRRnbUFFZeai/v/+cUTeDaYqIv4GlfL/NR879I3qmORwOnxG6UfCCiMbjJ51VagKdlgs+91BaKVO6oVJVD8bj8WhOPkMJn1t7jTL6gNU9pHpgKJ1q7u3tjWR1OfBCEOuPf+9Sq4YwAW3ZBqNvSqsYpeuc5WUHYolE3KSbQYzP430FwB+yuoSCFtKHaXP4z3DIqDOBFwpkwHfVThXLgrYaG6IGOAmT1pZVVHw8MDDQb9TNBLrJre0E8EdtvnAeSRPeHOwN9lh1NvCiASbgG5fqRLDJEmMHsSU6GFuDGrAfNWDAqLuUNE5uL6A2bbf5wPkZrmdaAuGw36aDIC940TAajx1HBijIgEWmjpRWS4ytrnKq+1EDEibdJWAa3dqzjLGnrKaxxvt4OtXS09v7u1WX5S8KXjRABnQ7VbUCEV+Y7SDeWAJX4dfuLCnZFzt//rxRN500jqo74NvTVptY42fTnLcGI5FTVp2R/1/womEsHj/mwgxg27vd2BH8bCrLq0rKyjoTicSgUTcdNIrbkwD+nM2WOJ3qmaVI9d9sOotgTPCiPTLgi+oqdTbOAbea+lM6xyHLK8pnVXSiCCZNuiIyjZr2GArSS1YTOKie45n0UqT6L1ZdPn5c4EVHHIS6sA3WYLZvNg6E9L9GZmwZzgEdqAFDRl0xaET8EQB/2To21ngsQ0kbIv6zVXcxftzgxQDIgM+qVbUeGbDAPCCtxbfxUhdjHdGhoWGzrnAcIr4NwHflGbGf6PqyQCj0Yx7dRUUTAi9GwQQccapOL7bBm4yjIiPqSElpC5VYRzKZLPgE4M5hK0rt67CDZDM9A+k0XxmIhE6apONgJgxejBmLxw65VHUu/LjRaANeNZQpyhJZUToGBwdHjLqp0Ij4FgB/0wocaxw7DV8F4CcmM/6kwMMQRwYcrFad87DvXW8yTKlbkZVFSmlJB3bBlEk3CQYRvxfA3wbw0Vun7BAAPqjrmfaecPjbrGyib2sKTbS/LG5F4NhGe0d+fDiTuSMSiUx6F8Bn6V343N6TB3gSyb/aHwx22+2OX2KazfF3y7VMnw4FcUvCP8lJcgRtVph0yEu8pTnRBAiv270JwN+1AscQw5zr66YKXLgyVfBijBQc2YQ0PCIY4wPH2yQPERNTYpSPRSPid0qUvY/+1mU5QjJ8PVL96FhjjEdfCPDCzggyAKnPP7cZpWQFlsZ+yPGdMPaDiK/F6fEjbKeypXVK5/pGfyTYZZFPmi0UeOHAcCZI1+Oa6JjVG0SwHbcrnZDn7sytbQSPiLdLTBJXy+Z2nKcR8U09odDhfP0mKyskeBIggaERPb0WGfC1zSFK1gDcXsitER1t6m3wrkTEbRmC5ZTRCd+MiB+wjTlFwVSrfV7zdXV15aWy0oWKvNjWgJMOfyiAIklwYXLhwfd4G/47OAxnTMVRAKec3u0PB8SkFfyxFpSCGMBHTkpWHPsU2bEEKe8xDUrJdfhKnItzgiiEXKvXWhijR9CuzNgOwHWc1+87HQ5+aJQXki4KeOGgOOFJDkdnqeJowSGlweg00vsGHJAa1UpnTJKIAF5u1AM4R8S3APgeo7zQdFHS3uikz+VSSWXVlwBo+hoUbUR0ITfVHQEcEd+K4rbbOE4xaJPhYhg4HY3GcYG4HFB/so5vBT6q53TbdAAXtooe+SzghoaGakWSu2FwflZmfWMffxjAX7XKi8VPG3gBoKam5uoKpeQEDjBz7YD4dpwUd9rlxZMUPe2Nrvf19f2dTKdasap7jHIsiR3TDdxsfxq5xtpazad5g02al+Na6plpND0zTHk8Hp+4iLyU3vwLp0orLWXqrZQAAAAASUVORK5CYII=";
+        
+        NSData *data = [[NSData alloc] initWithBase64EncodedString:base64Data options:NSDataBase64DecodingIgnoreUnknownCharacters];
+        keyboardDownImage = [UIImage imageWithData:data scale:3];
+        
+        //Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
+        keyboardDownImage = [keyboardDownImage imageFlippedForRightToLeftLayoutDirection];
+    }
+    
+    return keyboardDownImage;
+}
+
++(UIImage*)keyboardPreviousImage
+{
+    if (@available(iOS 10.0, *))
+    {
+        return [UIImage keyboardUpImage];
+    }
+    else
+    {
+        return [UIImage keyboardLeftImage];
+    }
+}
+
++(UIImage*)keyboardNextImage
+{
+    if (@available(iOS 10.0, *))
+    {
+        return [UIImage keyboardDownImage];
+    }
+    else
+    {
+        return [UIImage keyboardRightImage];
+    }
+}
+
+@end
+
+
+/*UIKeyboardToolbar Category implementation*/
+@implementation UIView (IQToolbarAddition)
+
+-(IQToolbar *)keyboardToolbar
+{
+    IQToolbar *keyboardToolbar = nil;
+    if ([[self inputAccessoryView] isKindOfClass:[IQToolbar class]])
+    {
+        keyboardToolbar = [self inputAccessoryView];
+    }
+    else
+    {
+        keyboardToolbar = objc_getAssociatedObject(self, @selector(keyboardToolbar));
+        
+        if (keyboardToolbar == nil)
+        {
+            CGRect frame = CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, 44);
+
+            keyboardToolbar = [[IQToolbar alloc] initWithFrame:frame];
+            
+            objc_setAssociatedObject(self, @selector(keyboardToolbar), keyboardToolbar, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+        }
+    }
+    
+    return keyboardToolbar;
+}
+
+-(void)setShouldHideToolbarPlaceholder:(BOOL)shouldHideToolbarPlaceholder
+{
+    objc_setAssociatedObject(self, @selector(shouldHideToolbarPlaceholder), @(shouldHideToolbarPlaceholder), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+
+    self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder;
+}
+
+-(BOOL)shouldHideToolbarPlaceholder
+{
+    NSNumber *shouldHideToolbarPlaceholder = objc_getAssociatedObject(self, @selector(shouldHideToolbarPlaceholder));
+    return [shouldHideToolbarPlaceholder boolValue];
+}
+
+-(void)setToolbarPlaceholder:(NSString *)toolbarPlaceholder
+{
+    objc_setAssociatedObject(self, @selector(toolbarPlaceholder), toolbarPlaceholder, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+
+    self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder;
+}
+
+-(NSString *)toolbarPlaceholder
+{
+    NSString *toolbarPlaceholder = objc_getAssociatedObject(self, @selector(toolbarPlaceholder));
+    return toolbarPlaceholder;
+}
+
+-(NSString *)drawingToolbarPlaceholder
+{
+    if (self.shouldHideToolbarPlaceholder)
+    {
+        return nil;
+    }
+    else if (self.toolbarPlaceholder.length != 0)
+    {
+        return self.toolbarPlaceholder;
+    }
+    else if ([self respondsToSelector:@selector(placeholder)])
+    {
+        return [(UITextField*)self placeholder];
+    }
+    else
+    {
+        return nil;
+    }
+}
+
+#pragma mark - Private helper
+
++(IQBarButtonItem*)flexibleBarButtonItem
+{
+    static IQBarButtonItem *nilButton = nil;
+    
+    if (nilButton == nil)
+    {
+        nilButton = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
+    }
+    
+    return nilButton;
+}
+
+#pragma mark - Common
+
+- (void)addKeyboardToolbarWithTarget:(id)target titleText:(NSString*)titleText rightBarButtonConfiguration:(IQBarButtonItemConfiguration*)rightBarButtonConfiguration previousBarButtonConfiguration:(IQBarButtonItemConfiguration*)previousBarButtonConfiguration nextBarButtonConfiguration:(IQBarButtonItemConfiguration*)nextBarButtonConfiguration
+{
+    //If can't set InputAccessoryView. Then return
+    if (![self respondsToSelector:@selector(setInputAccessoryView:)])    return;
+    
+    //  Creating a toolBar for phoneNumber keyboard
+    IQToolbar *toolbar = self.keyboardToolbar;
+    
+    NSMutableArray<UIBarButtonItem*> *items = [[NSMutableArray alloc] init];
+    
+    if(previousBarButtonConfiguration)
+    {
+        IQBarButtonItem *prev = toolbar.previousBarButton;
+        
+        if (prev.isSystemItem == NO && (previousBarButtonConfiguration.image || previousBarButtonConfiguration.title))
+        {
+            prev.title = previousBarButtonConfiguration.title;
+            prev.accessibilityLabel = previousBarButtonConfiguration.accessibilityLabel;
+            prev.accessibilityIdentifier = prev.accessibilityLabel;
+            prev.image = previousBarButtonConfiguration.image;
+            prev.target = target;
+            prev.action = previousBarButtonConfiguration.action;
+        }
+        else if (previousBarButtonConfiguration.image)
+        {
+            prev = [[IQBarButtonItem alloc] initWithImage:previousBarButtonConfiguration.image style:UIBarButtonItemStylePlain target:target action:previousBarButtonConfiguration.action];
+            prev.invocation = toolbar.previousBarButton.invocation;
+            prev.accessibilityLabel = previousBarButtonConfiguration.accessibilityLabel;
+            prev.accessibilityIdentifier = prev.accessibilityLabel;
+            prev.enabled = toolbar.previousBarButton.enabled;
+            prev.tag = toolbar.previousBarButton.tag;
+            toolbar.previousBarButton = prev;
+        }
+        else if (previousBarButtonConfiguration.title)
+        {
+            prev = [[IQBarButtonItem alloc] initWithTitle:previousBarButtonConfiguration.title style:UIBarButtonItemStylePlain target:target action:previousBarButtonConfiguration.action];
+            prev.invocation = toolbar.previousBarButton.invocation;
+            prev.accessibilityLabel = previousBarButtonConfiguration.accessibilityLabel;
+            prev.accessibilityIdentifier = prev.accessibilityLabel;
+            prev.enabled = toolbar.previousBarButton.enabled;
+            prev.tag = toolbar.previousBarButton.tag;
+            toolbar.previousBarButton = prev;
+        }
+        else
+        {
+            prev = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:previousBarButtonConfiguration.barButtonSystemItem target:target action:previousBarButtonConfiguration.action];
+            prev.invocation = toolbar.previousBarButton.invocation;
+            prev.accessibilityLabel = previousBarButtonConfiguration.accessibilityLabel;
+            prev.accessibilityIdentifier = prev.accessibilityLabel;
+            prev.enabled = toolbar.previousBarButton.enabled;
+            prev.tag = toolbar.previousBarButton.tag;
+            toolbar.previousBarButton = prev;
+        }
+        
+        [items addObject:prev];
+    }
+    
+    if (previousBarButtonConfiguration != nil && nextBarButtonConfiguration != nil)
+    {
+        [items addObject:toolbar.fixedSpaceBarButton];
+    }
+
+    if(nextBarButtonConfiguration)
+    {
+        IQBarButtonItem *next = toolbar.nextBarButton;
+        
+        if (next.isSystemItem == NO && (nextBarButtonConfiguration.image || nextBarButtonConfiguration.title))
+        {
+            next.title = nextBarButtonConfiguration.title;
+            next.accessibilityLabel = nextBarButtonConfiguration.accessibilityLabel;
+            next.accessibilityIdentifier = next.accessibilityLabel;
+            next.image = nextBarButtonConfiguration.image;
+            next.target = target;
+            next.action = nextBarButtonConfiguration.action;
+        }
+        else if (nextBarButtonConfiguration.image)
+        {
+            next = [[IQBarButtonItem alloc] initWithImage:nextBarButtonConfiguration.image style:UIBarButtonItemStylePlain target:target action:nextBarButtonConfiguration.action];
+            next.invocation = toolbar.nextBarButton.invocation;
+            next.accessibilityLabel = nextBarButtonConfiguration.accessibilityLabel;
+            next.accessibilityIdentifier = next.accessibilityLabel;
+            next.enabled = toolbar.nextBarButton.enabled;
+            next.tag = toolbar.nextBarButton.tag;
+            toolbar.nextBarButton = next;
+        }
+        else if (nextBarButtonConfiguration.title)
+        {
+            next = [[IQBarButtonItem alloc] initWithTitle:nextBarButtonConfiguration.title style:UIBarButtonItemStylePlain target:target action:nextBarButtonConfiguration.action];
+            next.invocation = toolbar.nextBarButton.invocation;
+            next.accessibilityLabel = nextBarButtonConfiguration.accessibilityLabel;
+            next.accessibilityIdentifier = next.accessibilityLabel;
+            next.enabled = toolbar.nextBarButton.enabled;
+            next.tag = toolbar.nextBarButton.tag;
+            toolbar.nextBarButton = next;
+        }
+        else
+        {
+            next = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:nextBarButtonConfiguration.barButtonSystemItem target:target action:nextBarButtonConfiguration.action];
+            next.invocation = toolbar.nextBarButton.invocation;
+            next.accessibilityLabel = nextBarButtonConfiguration.accessibilityLabel;
+            next.accessibilityIdentifier = next.accessibilityLabel;
+            next.enabled = toolbar.nextBarButton.enabled;
+            next.tag = toolbar.nextBarButton.tag;
+            toolbar.nextBarButton = next;
+        }
+        
+        [items addObject:next];
+    }
+    
+    //Title
+    {
+        //Flexible space
+        [items addObject:[[self class] flexibleBarButtonItem]];
+        
+        //Title button
+        toolbar.titleBarButton.title = titleText;
+        if (@available(iOS 11.0, *)) {}
+        else
+        {
+            toolbar.titleBarButton.customView.frame = CGRectZero;
+        }
+        [items addObject:toolbar.titleBarButton];
+        
+        //Flexible space
+        [items addObject:[[self class] flexibleBarButtonItem]];
+    }
+    
+    if(rightBarButtonConfiguration)
+    {
+        IQBarButtonItem *done = toolbar.doneBarButton;
+        
+        if (done.isSystemItem == NO && (rightBarButtonConfiguration.image || rightBarButtonConfiguration.title))
+        {
+            done.title = rightBarButtonConfiguration.title;
+            done.accessibilityLabel = rightBarButtonConfiguration.accessibilityLabel;
+            done.accessibilityIdentifier = done.accessibilityLabel;
+            done.image = rightBarButtonConfiguration.image;
+            done.target = target;
+            done.action = rightBarButtonConfiguration.action;
+        }
+        else if (rightBarButtonConfiguration.image)
+        {
+            done = [[IQBarButtonItem alloc] initWithImage:rightBarButtonConfiguration.image style:UIBarButtonItemStylePlain target:target action:rightBarButtonConfiguration.action];
+            done.invocation = toolbar.doneBarButton.invocation;
+            done.accessibilityLabel = rightBarButtonConfiguration.accessibilityLabel;
+            done.accessibilityIdentifier = done.accessibilityLabel;
+            done.enabled = toolbar.doneBarButton.enabled;
+            done.tag = toolbar.doneBarButton.tag;
+            toolbar.doneBarButton = done;
+        }
+        else if (rightBarButtonConfiguration.title)
+        {
+            done = [[IQBarButtonItem alloc] initWithTitle:rightBarButtonConfiguration.title style:UIBarButtonItemStylePlain target:target action:rightBarButtonConfiguration.action];
+            done.invocation = toolbar.doneBarButton.invocation;
+            done.accessibilityLabel = rightBarButtonConfiguration.accessibilityLabel;
+            done.accessibilityIdentifier = done.accessibilityLabel;
+            done.enabled = toolbar.doneBarButton.enabled;
+            done.tag = toolbar.doneBarButton.tag;
+            toolbar.doneBarButton = done;
+        }
+        else
+        {
+            done = [[IQBarButtonItem alloc] initWithBarButtonSystemItem:rightBarButtonConfiguration.barButtonSystemItem target:target action:rightBarButtonConfiguration.action];
+            done.invocation = toolbar.doneBarButton.invocation;
+            done.accessibilityLabel = rightBarButtonConfiguration.accessibilityLabel;
+            done.accessibilityIdentifier = done.accessibilityLabel;
+            done.enabled = toolbar.doneBarButton.enabled;
+            done.tag = toolbar.doneBarButton.tag;
+            toolbar.doneBarButton = done;
+        }
+        
+        [items addObject:done];
+    }
+
+    //  Adding button to toolBar.
+    [toolbar setItems:items];
+    
+    //  Setting toolbar to keyboard.
+    [(UITextField*)self setInputAccessoryView:toolbar];
+
+    
+    if ([self respondsToSelector:@selector(keyboardAppearance)])
+    {
+        switch ([(UITextField*)self keyboardAppearance])
+        {
+            case UIKeyboardAppearanceDark:  toolbar.barStyle = UIBarStyleBlack;     break;
+            default:                        toolbar.barStyle = UIBarStyleDefault;   break;
+        }
+    }
+}
+
+#pragma mark - Right
+
+- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action
+{
+    [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:nil];
+}
+
+- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addRightButtonOnKeyboardWithText:text target:target action:action titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addRightButtonOnKeyboardWithText:(NSString*)text target:(id)target action:(SEL)action titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:text action:action];
+    
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil];
+}
+
+
+- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action
+{
+    [self addRightButtonOnKeyboardWithImage:image target:target action:action titleText:nil];
+}
+
+- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addRightButtonOnKeyboardWithImage:image target:target action:action titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addRightButtonOnKeyboardWithImage:(UIImage*)image target:(id)target action:(SEL)action titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:image action:action];
+    
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil];
+}
+
+
+-(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action
+{
+    [self addDoneOnKeyboardWithTarget:target action:action titleText:nil];
+}
+
+-(void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addDoneOnKeyboardWithTarget:target action:action titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addDoneOnKeyboardWithTarget:(id)target action:(SEL)action titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:action];
+    
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:nil nextBarButtonConfiguration:nil];
+}
+
+
+- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction
+{
+    [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:nil];
+}
+
+- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addLeftRightOnKeyboardWithTarget:target leftButtonTitle:leftTitle rightButtonTitle:rightTitle leftButtonAction:leftAction rightButtonAction:rightAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addLeftRightOnKeyboardWithTarget:(id)target leftButtonTitle:(NSString*)leftTitle rightButtonTitle:(NSString*)rightTitle leftButtonAction:(SEL)leftAction rightButtonAction:(SEL)rightAction titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *leftConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:leftTitle action:leftAction];
+    
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:rightTitle action:rightAction];
+
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:leftConfiguration nextBarButtonConfiguration:nil];
+}
+
+
+-(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction
+{
+    [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:nil];
+}
+
+-(void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addCancelDoneOnKeyboardWithTarget:target cancelAction:cancelAction doneAction:doneAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addCancelDoneOnKeyboardWithTarget:(id)target cancelAction:(SEL)cancelAction doneAction:(SEL)doneAction titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *leftConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel action:cancelAction];
+    
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:doneAction];
+    
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:leftConfiguration nextBarButtonConfiguration:nil];
+}
+
+
+-(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction
+{
+    [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:nil];
+}
+
+-(void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addPreviousNextDoneOnKeyboardWithTarget:target previousAction:previousAction nextAction:nextAction doneAction:doneAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addPreviousNextDoneOnKeyboardWithTarget:(id)target previousAction:(SEL)previousAction nextAction:(SEL)nextAction doneAction:(SEL)doneAction titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *previousConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:previousAction];
+    
+    IQBarButtonItemConfiguration *nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:nextAction];
+    
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone action:doneAction];
+    
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:previousConfiguration nextBarButtonConfiguration:nextConfiguration];
+}
+
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction
+{
+    [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonImage:rightButtonImage previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:nil];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(nullable id)target rightButtonImage:(nullable UIImage*)rightButtonImage previousAction:(nullable SEL)previousAction nextAction:(nullable SEL)nextAction rightButtonAction:(nullable SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonImage:rightButtonImage previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonImage:(UIImage*)rightButtonImage previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *previousConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:previousAction];
+    
+    IQBarButtonItemConfiguration *nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:nextAction];
+    
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:rightButtonImage action:rightButtonAction];
+    
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:previousConfiguration nextBarButtonConfiguration:nextConfiguration];
+}
+
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction
+{
+    [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:nil];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction shouldShowPlaceholder:(BOOL)shouldShowPlaceholder
+{
+    [self addPreviousNextRightOnKeyboardWithTarget:target rightButtonTitle:rightButtonTitle previousAction:previousAction nextAction:nextAction rightButtonAction:rightButtonAction titleText:(shouldShowPlaceholder?[self drawingToolbarPlaceholder]:nil)];
+}
+
+- (void)addPreviousNextRightOnKeyboardWithTarget:(id)target rightButtonTitle:(NSString*)rightButtonTitle previousAction:(SEL)previousAction nextAction:(SEL)nextAction rightButtonAction:(SEL)rightButtonAction titleText:(NSString*)titleText
+{
+    IQBarButtonItemConfiguration *previousConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardPreviousImage] action:previousAction];
+    
+    IQBarButtonItemConfiguration *nextConfiguration = [[IQBarButtonItemConfiguration alloc] initWithImage:[UIImage keyboardNextImage] action:nextAction];
+    
+    IQBarButtonItemConfiguration *rightConfiguration = [[IQBarButtonItemConfiguration alloc] initWithTitle:rightButtonTitle action:rightButtonAction];
+    
+    [self addKeyboardToolbarWithTarget:target titleText:titleText rightBarButtonConfiguration:rightConfiguration previousBarButtonConfiguration:previousConfiguration nextBarButtonConfiguration:nextConfiguration];
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.h
new file mode 100644
index 0000000..8c99e66
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.h
@@ -0,0 +1,43 @@
+//
+//  LXFCameraButton.h
+//  
+//
+//  Created by xf-ling on 2017/6/1.
+//  Copyright © 2017年 LXF. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^TapEventBlock)(UITapGestureRecognizer *tapGestureRecognizer);
+typedef void(^LongPressEventBlock)(UILongPressGestureRecognizer *longPressGestureRecognizer);
+
+@interface LXFCameraButton : UIView
+
+/**
+ *  设置进度条的录制视频时长百分比 = 当前录制时间 / 最大录制时间
+ */
+@property (nonatomic, assign) CGFloat progressPercentage;
+
++ (instancetype)defaultCameraButton;
+
+/**
+ *  配置点击事件
+ */
+- (void)configureTapCameraButtonEventWithBlock:(TapEventBlock)tapEventBlock;
+
+/**
+ *  配置按压事件
+ */
+- (void)configureLongPressCameraButtonEventWithBlock:(LongPressEventBlock)longPressEventBlock;
+
+/**
+ *  开始录制前的准备动画
+ */
+- (void)startShootAnimationWithDuration:(NSTimeInterval)duration;
+
+/**
+ *  结束摄影动画
+ */
+- (void)stopShootAnimation;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.m
new file mode 100644
index 0000000..7ca139d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraButton/LXFCameraButton.m
@@ -0,0 +1,187 @@
+//
+//  LXFCameraButton.m
+//  
+//
+//  Created by xf-ling on 2017/6/1.
+//  Copyright © 2017年 LXF. All rights reserved.
+//
+
+#import "LXFCameraButton.h"
+
+// 默认按钮大小
+#define CAMERABUTTONWIDTH 75
+#define TOUCHVIEWWIDTH 55
+
+// 录制时按钮的缩放比
+#define SHOOTCAMERABUTTONSCALE 1.6f
+#define SHOOTTOUCHVIEWSCALE 0.5f
+
+// 录制按钮动画轨道宽度
+#define PROGRESSLINEWIDTH 3
+
+#define RGB(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
+
+@interface LXFCameraButton ()
+
+@property (weak, nonatomic) UIView *touchView;
+@property (strong, nonatomic) CAShapeLayer *trackLayer;
+@property (strong, nonatomic) CAShapeLayer *progressLayer;
+
+@property (copy, nonatomic) TapEventBlock tapEventBlock;
+@property (copy, nonatomic) LongPressEventBlock longPressEventBlock;
+
+@end
+
+@implementation LXFCameraButton
+
+#pragma mark - 工厂方法
+
++ (instancetype)defaultCameraButton
+{
+    // 设置camera view
+    LXFCameraButton *cameraButton = [[LXFCameraButton alloc] initWithFrame:CGRectMake(0, 0, CAMERABUTTONWIDTH, CAMERABUTTONWIDTH)];
+    [cameraButton.layer setCornerRadius:(CAMERABUTTONWIDTH / 2)];
+    cameraButton.backgroundColor = [UIColor colorWithRed:225/255.0f green:225/255.0f blue:230/255.0f alpha:1.0f];
+    
+    // 设置camera view的点击按钮
+    CGFloat touchViewX = (CAMERABUTTONWIDTH - TOUCHVIEWWIDTH) / 2;
+    CGFloat touchViewY = (CAMERABUTTONWIDTH - TOUCHVIEWWIDTH) / 2;
+    UIView *touchView = [[UIView alloc] initWithFrame:CGRectMake(touchViewX, touchViewY, TOUCHVIEWWIDTH, TOUCHVIEWWIDTH)];
+    cameraButton.touchView = touchView;
+    [cameraButton addSubview:touchView];
+    [cameraButton.touchView.layer setCornerRadius:(cameraButton.touchView.bounds.size.width / 2)];
+    touchView.backgroundColor = [UIColor whiteColor];
+    
+    [cameraButton initCircleAnimationLayer];
+    
+    return cameraButton;
+}
+
+
+#pragma mark - 点击事件与长按事件
+
+/**
+ *  配置点击事件
+ */
+- (void)configureTapCameraButtonEventWithBlock:(TapEventBlock)tapEventBlock
+{
+    self.tapEventBlock = tapEventBlock;
+    
+    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapCameraButtonEvent:)];
+    
+    [self.touchView addGestureRecognizer:tapGestureRecognizer];
+}
+
+- (void)tapCameraButtonEvent:(UITapGestureRecognizer *)tapGestureRecognizer
+{
+    if (self.tapEventBlock)
+    {
+        self.tapEventBlock(tapGestureRecognizer);
+    }
+}
+
+/**
+ *  配置按压事件
+ */
+- (void)configureLongPressCameraButtonEventWithBlock:(LongPressEventBlock)longPressEventBlock
+{
+    self.longPressEventBlock = longPressEventBlock;
+    
+    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressCameraButtonEvent:)];
+    
+    [self.touchView addGestureRecognizer:longPressGestureRecognizer];
+}
+
+- (void)longPressCameraButtonEvent:(UILongPressGestureRecognizer *)longPressGestureRecognizer
+{
+    if (self.longPressEventBlock)
+    {
+        self.longPressEventBlock(longPressGestureRecognizer);
+    }
+}
+
+#pragma mark - 录制视频按钮动画
+
+// 初始化按钮路径
+- (void)initCircleAnimationLayer
+{
+    float centerX = self.bounds.size.width / 2.0;
+    float centerY = self.bounds.size.height / 2.0;
+    //半径
+    float radius = (self.bounds.size.width - PROGRESSLINEWIDTH) / 2.0;
+    
+    //创建贝塞尔路径
+    UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(centerX, centerY) radius:radius startAngle:(-0.5f * M_PI) endAngle:(1.5f * M_PI) clockwise:YES];
+    
+    //添加背景圆环
+    CAShapeLayer *backLayer = [CAShapeLayer layer];
+    backLayer.frame = self.bounds;
+    backLayer.fillColor =  [[UIColor clearColor] CGColor];
+    backLayer.strokeColor  = [RGB(225, 225, 230, 1.0f) CGColor];
+    backLayer.lineWidth = PROGRESSLINEWIDTH;
+    backLayer.path = [path CGPath];
+    backLayer.strokeEnd = 1;
+    [self.layer addSublayer:backLayer];
+    
+    //创建进度layer
+    _progressLayer = [CAShapeLayer layer];
+    _progressLayer.frame = self.bounds;
+    _progressLayer.fillColor =  [[UIColor clearColor] CGColor];
+    //指定path的渲染颜色
+    _progressLayer.strokeColor  = [[UIColor blackColor] CGColor];
+    _progressLayer.lineCap = kCALineCapSquare;//kCALineCapRound;
+    _progressLayer.lineWidth = PROGRESSLINEWIDTH;
+    _progressLayer.path = [path CGPath];
+    _progressLayer.strokeEnd = 0;
+    
+    //设置渐变颜色
+    CAGradientLayer *gradientLayer =  [CAGradientLayer layer];
+    gradientLayer.frame = self.bounds;
+    
+    // 渐变颜色
+    [gradientLayer setColors:[NSArray arrayWithObjects:(id)[RGB(76, 192, 29, 1.0f) CGColor], (id)[RGB(76, 192, 29, 1.0f) CGColor],  nil]];
+//    [gradientLayer setColors:[NSArray arrayWithObjects:(id)[RGB(28, 178, 29, 1.0f) CGColor], (id)[RGB(255, 203, 0, 1.0f) CGColor],  nil]];
+    
+    gradientLayer.startPoint = CGPointMake(0, 0);
+    gradientLayer.endPoint = CGPointMake(0, 1);
+    [gradientLayer setMask:_progressLayer];     //用progressLayer来截取渐变层
+    [self.layer addSublayer:gradientLayer];
+    
+}
+
+// 设置按钮百分比
+- (void)setProgressPercentage:(CGFloat)progressPercentage
+{
+    _progressPercentage = progressPercentage;
+    _progressLayer.strokeEnd = progressPercentage;
+    [_progressLayer removeAllAnimations];
+}
+
+/**
+ *  开始录制前的准备动画
+ */
+- (void)startShootAnimationWithDuration:(NSTimeInterval)duration
+{
+    __weak typeof(self) weakSelf = self;
+    
+    [UIView animateWithDuration:duration animations:^{
+        
+        weakSelf.transform = CGAffineTransformMakeScale(SHOOTCAMERABUTTONSCALE, SHOOTCAMERABUTTONSCALE);
+        weakSelf.touchView.transform = CGAffineTransformMakeScale(SHOOTTOUCHVIEWSCALE, SHOOTTOUCHVIEWSCALE);
+        
+    } completion:^(BOOL finished) {
+        // nothing
+    }];
+}
+
+/**
+ *  结束摄影动画
+ */
+- (void)stopShootAnimation
+{
+    self.transform = CGAffineTransformIdentity;
+    self.touchView.transform = CGAffineTransformIdentity;
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.h
new file mode 100644
index 0000000..d8155af
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.h
@@ -0,0 +1,51 @@
+//
+//  LXFCameraController.h
+//
+//
+//  Created by xf-ling on 2017/6/1.
+//  Copyright © 2017年 LXF. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+/**
+ *  拍照完成后的Block回调
+ *
+ *  @param image 拍照后返回的image
+ */
+typedef void(^TakePhotosCompletionBlock)(UIImage *image, NSError *error);
+
+/**
+ *  拍摄完成后的Block回调
+ *
+ *  @param videoUrl 拍摄后返回的小视频地址
+ *  @param videoTimeLength 小视频时长
+ *  @param thumbnailImage 小视频缩略图
+ */
+typedef void(^ShootCompletionBlock)(NSURL *videoUrl, CGFloat videoTimeLength, UIImage *thumbnailImage, NSError *error);
+
+@interface LXFCameraController : UIViewController
+
+/**
+ *  拍照完成后的Block回调
+ */
+@property (copy, nonatomic) TakePhotosCompletionBlock takePhotosCompletionBlock;
+
+/**
+ *  拍摄完成后的Block回调
+ */
+@property (copy, nonatomic) ShootCompletionBlock shootCompletionBlock;
+
+/**
+ *  自定义APP相册名字,如果为空则默认为APP的名字
+ */
+@property (strong, nonatomic) NSString *assetCollectionName;
+
+/**
+ *  视频文件保存文件夹,如果没有定义,默认在document/video文件夹下面
+ */
+@property (strong, nonatomic) NSString *videoFilePath;
+
++ (instancetype)defaultCameraController;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.m
new file mode 100644
index 0000000..3a35882
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.m
@@ -0,0 +1,1744 @@
+//
+//  LXFCameraController.m
+//
+//
+//  Created by xf-ling on 2017/6/1.
+//  Copyright © 2017年 LXF. All rights reserved.
+//
+
+#import "LXFCameraController.h"
+#import <AVFoundation/AVFoundation.h>
+#import <AssetsLibrary/AssetsLibrary.h>
+#import "LXFCameraButton.h"
+#import "LXFPhotoLibraryManager.h"
+#import <Photos/Photos.h>
+#import <CoreMotion/CoreMotion.h>
+
+#define kScreenWidth [UIScreen mainScreen].bounds.size.width
+#define kScreenHeight [UIScreen mainScreen].bounds.size.height
+#define SafeViewBottomHeight (kScreenHeight == 812.0 ? 34.0 : 0.0)
+#define VIDEO_FILEPATH                                              @"video"
+#define TIMER_INTERVAL 0.01f                                        // 定时器记录视频间隔
+#define VIDEO_RECORDER_MAX_TIME 10.0f                               // 视频最大时长 (单位/秒)
+#define VIDEO_RECORDER_MIN_TIME 1.0f                                // 最短视频时长 (单位/秒)
+#define START_VIDEO_ANIMATION_DURATION 0.3f                         // 录制视频前的动画时间
+#define DEFAULT_VIDEO_ZOOM_FACTOR 3.0f                              // 默认放大倍数
+
+typedef void(^PropertyChangeBlock)(AVCaptureDevice *captureDevice);
+
+@interface LXFCameraController() <AVCapturePhotoCaptureDelegate, AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate, UIGestureRecognizerDelegate>
+
+@property (nonatomic, strong) dispatch_queue_t videoQueue;
+
+@property (strong, nonatomic) AVCaptureSession *captureSession;                          //负责输入和输出设备之间的数据传递
+
+@property (nonatomic, strong) AVCaptureDeviceInput *videoInput;                          //视频输入
+@property (nonatomic, strong) AVCaptureDeviceInput *audioInput;                          //声音输入
+@property (nonatomic, strong) AVCaptureVideoDataOutput *videoOutput;
+@property (nonatomic, strong) AVCaptureAudioDataOutput *audioOutput;
+
+@property (strong, nonatomic) AVCapturePhotoOutput *capturePhotoOutput;        //照片输出流
+
+@property (nonatomic, strong) AVAssetWriter *assetWriter;
+@property (nonatomic, strong) AVAssetWriterInput *assetWriterVideoInput;
+@property (nonatomic, strong) AVAssetWriterInput *assetWriterAudioInput;
+@property (nonatomic, strong) NSDictionary *videoCompressionSettings;
+@property (nonatomic, strong) NSDictionary *audioCompressionSettings;
+@property (nonatomic, assign) BOOL canWrite;
+
+@property (strong, nonatomic) AVCaptureVideoPreviewLayer *captureVideoPreviewLayer;      //预览图层
+
+@property (nonatomic, strong) NSTimer *timer;                                            //记录录制时间
+
+@property (weak, nonatomic) IBOutlet UIView *viewContainer;
+@property (weak, nonatomic) IBOutlet UIButton *rotateCameraButton;
+@property (weak, nonatomic) IBOutlet UIButton *takeButton;                               //拍摄按钮
+@property (weak, nonatomic) IBOutlet UIButton *closeButton;
+@property (weak, nonatomic) IBOutlet UILabel *tipLabel;
+@property (strong, nonatomic) LXFCameraButton *cameraButton;                              //拍摄按钮
+
+@property (weak, nonatomic) IBOutlet UIImageView *focusImageView;                        //聚焦视图
+@property (assign, nonatomic) Boolean isFocusing;                                        //镜头正在聚焦
+@property (assign, nonatomic) Boolean isShooting;                                        //正在拍摄
+@property (assign, nonatomic) Boolean isRotatingCamera;                                  //正在旋转摄像头
+
+//捏合缩放摄像头
+@property (nonatomic,assign) CGFloat beginGestureScale;                                  //记录开始的缩放比例
+@property (nonatomic,assign) CGFloat effectiveScale;                                     //最后的缩放比例
+
+// 拍照摄像后的预览模块
+@property (weak, nonatomic) IBOutlet UIButton *cancelButton;
+@property (weak, nonatomic) IBOutlet UIButton *confirmButton;
+@property (strong, nonatomic) UIView *photoPreviewContainerView;                         //相片预览ContainerView
+@property (strong, nonatomic) UIImageView *photoPreviewImageView;                        //相片预览ImageView
+@property (strong, nonatomic) UIView *videoPreviewContainerView;                         //视频预览View
+@property (strong, nonatomic) NSURL *videoURL;                                           //视频文件地址
+@property (strong, nonatomic) AVPlayerLayer *playerLayer;
+@property (strong, nonatomic) AVPlayer *player;
+@property (strong, nonatomic) AVPlayerItem *playerItem;
+@property (assign, nonatomic) CGFloat currentVideoTimeLength;                             //当前小视频总时长
+
+@property (assign, nonatomic) UIDeviceOrientation shootingOrientation;                 //拍摄中的手机方向
+@property (strong, nonatomic) CMMotionManager *motionManager;
+
+@end
+
+@implementation LXFCameraController{
+    
+    CGFloat timeLength;             //时间长度
+    
+}
+
+#pragma mark - 工厂方法
+
++ (instancetype)defaultCameraController
+{
+    LXFCameraController *cameraController = [[LXFCameraController alloc] initWithNibName:NSStringFromClass([LXFCameraController class]) bundle:nil];
+    
+    return cameraController;
+}
+
+#pragma mark - 控制器方法
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    
+    _isFocusing = NO;
+    _isShooting = NO;
+    _isRotatingCamera = NO;
+    _canWrite = NO;
+    _beginGestureScale = 1.0f;
+    _effectiveScale = 1.0f;
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+    
+    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+    if (authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied)
+    {
+        [self requestAuthorizationForVideo];
+    }
+    
+    //判断用户是否允许访问麦克风权限
+    authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
+    if (authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied)
+    {
+        [self requestAuthorizationForVideo];
+    }
+    [self requestAuthorizationForPhotoLibrary];
+    
+    [self initAVCaptureSession];
+    
+    [self configDefaultUIDisplay];
+    
+    [self addTapGenstureRecognizerForCamera];
+    
+}
+
+- (void)viewDidAppear:(BOOL)animated
+{
+    [super viewDidAppear:animated];
+    
+    [self startSession];
+    
+    [self setFocusCursorWithPoint:self.viewContainer.center];
+    
+    [self tipLabelAnimation];
+    
+}
+
+- (void)viewWillDisappear:(BOOL)animated
+{
+    [super viewWillDisappear:animated];
+}
+
+- (void)viewDidDisappear:(BOOL)animated
+{
+    [super viewDidDisappear:animated];
+    
+    [self stopSession];
+    
+    [self stopUpdateAccelerometer];
+}
+
+- (void)dealloc
+{
+    NSLog(@"dealloc");
+}
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+}
+
+- (BOOL)prefersStatusBarHidden {
+    return YES;
+}
+
+#pragma mark - 控件方法
+
+/**
+ *  关闭当前界面
+ */
+- (IBAction)closeBtnFunc:(id)sender
+{
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+
+/**
+ *  切换前后摄像头
+ */
+- (IBAction)rotateCameraBtnFunc:(id)sender
+{
+    _isRotatingCamera = YES;
+    
+    AVCaptureDevice *currentDevice = [self.videoInput device];
+    AVCaptureDevicePosition currentPosition = [currentDevice position];
+    
+    AVCaptureDevice *toChangeDevice;
+    AVCaptureDevicePosition toChangePosition = AVCaptureDevicePositionFront;
+    if (currentPosition == AVCaptureDevicePositionUnspecified || currentPosition == AVCaptureDevicePositionFront)
+    {
+        toChangePosition = AVCaptureDevicePositionBack;
+    }
+    toChangeDevice = [self getCameraDeviceWithPosition:toChangePosition];
+    
+    //获得要调整的设备输入对象
+    AVCaptureDeviceInput *toChangeDeviceInput = [[AVCaptureDeviceInput alloc] initWithDevice:toChangeDevice error:nil];
+    
+    //改变会话的配置前一定要先开启配置,配置完成后提交配置改变
+    [self.captureSession beginConfiguration];
+    //移除原有输入对象
+    [self.captureSession removeInput:self.videoInput];
+    //添加新的输入对象
+    if ([self.captureSession canAddInput:toChangeDeviceInput])
+    {
+        [self.captureSession addInput:toChangeDeviceInput];
+        self.videoInput = toChangeDeviceInput;
+    }
+    
+    //提交会话配置
+    [self.captureSession commitConfiguration];
+    
+    _isRotatingCamera = NO;
+}
+
+- (IBAction)cancelBtnfunc:(id)sender
+{
+    [self removePlayerItemNotification];
+    
+    [self startAnimationGroup];
+}
+
+/**
+ *  确认按钮并返回代理
+ */
+- (IBAction)confirmBtnFunc:(id)sender
+{
+    __weak typeof(self) weakSelf = self;
+    if (self.photoPreviewImageView)
+    {
+        UIImage *finalImage = [self cutImageWithView:self.photoPreviewImageView];
+        
+        [LXFPhotoLibraryManager savePhotoWithImage:finalImage andAssetCollectionName:self.assetCollectionName withCompletion:^(UIImage *image, NSError *error) {
+            
+            if (self.takePhotosCompletionBlock)
+            {
+                if (error)
+                {
+                    NSLog(@"保存照片失败!");
+                    weakSelf.takePhotosCompletionBlock(nil, error);
+                }
+                else
+                {
+                    NSLog(@"保存照片成功!");
+                    weakSelf.takePhotosCompletionBlock(image, nil);
+                }
+            }
+            
+        }];
+        
+        self.confirmButton.userInteractionEnabled = NO;
+        
+    }
+    else
+    {
+        [weakSelf cropWithVideoUrlStr:weakSelf.videoURL start:0 end:weakSelf.currentVideoTimeLength completion:^(NSURL *outputURL, Float64 videoDuration, BOOL isSuccess) {
+            
+            if (isSuccess)
+            {
+                [LXFPhotoLibraryManager saveVideoWithVideoUrl:outputURL andAssetCollectionName:nil withCompletion:^(NSURL *videoUrl, NSError *error) {
+                    
+                    if (self.shootCompletionBlock)
+                    {
+                        if (error)
+                        {
+                            NSLog(@"保存视频失败!");
+                            weakSelf.shootCompletionBlock(nil, 0, nil, error);
+                        }
+                        else
+                        {
+                            NSLog(@"保存视频成功!");
+                            
+                            // 获取视频的第一帧图片
+                            UIImage *image = [weakSelf thumbnailImageRequestWithVideoUrl:videoUrl andTime:0.01f];
+                            
+                            weakSelf.shootCompletionBlock(videoUrl, videoDuration, image, nil);
+                            
+                            [[NSFileManager defaultManager] removeItemAtURL:weakSelf.videoURL error:nil];
+                            weakSelf.videoURL = nil;
+                        }
+                    }
+                    
+                    weakSelf.confirmButton.userInteractionEnabled = NO;
+                    
+                }];
+            }
+            else
+            {
+                NSLog(@"保存视频失败!");
+                [[NSFileManager defaultManager] removeItemAtURL:weakSelf.videoURL error:nil];
+                weakSelf.videoURL = nil;
+                [[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil];
+            }
+            
+            
+        }];
+        
+    }
+}
+
+#pragma mark - 懒加载
+- (AVCaptureSession *)captureSession
+{
+    if (_captureSession == nil)
+    {
+        _captureSession = [[AVCaptureSession alloc] init];
+        
+        if ([_captureSession canSetSessionPreset:AVCaptureSessionPresetHigh])
+        {
+            _captureSession.sessionPreset = AVCaptureSessionPresetHigh;
+        }
+    }
+    
+    return _captureSession;
+}
+
+- (dispatch_queue_t)videoQueue
+{
+    if (!_videoQueue)
+    {
+        _videoQueue = dispatch_queue_create("XFCameraController", DISPATCH_QUEUE_SERIAL); // dispatch_get_main_queue();
+    }
+    
+    return _videoQueue;
+}
+
+- (CMMotionManager *)motionManager
+{
+    if (!_motionManager)
+    {
+        _motionManager = [[CMMotionManager alloc] init];
+    }
+    return _motionManager;
+}
+
+#pragma mark - 私有方法
+
+/**
+ *  初始化AVCapture会话
+ */
+- (void)initAVCaptureSession
+{
+    //1、添加 "视频" 与 "音频" 输入流到session
+    [self setupVideo];
+    
+    [self setupAudio];
+    
+    //2、添加图片,movie输出流到session
+    [self setupCaptureStillImageOutput];
+    
+    //3、创建视频预览层,用于实时展示摄像头状态
+    [self setupCaptureVideoPreviewLayer];
+    
+    //设置静音状态也可播放声音
+    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
+    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
+}
+
+/**
+ *  设置视频输入
+ */
+- (void)setupVideo
+{
+    AVCaptureDevice *captureDevice = [self getCameraDeviceWithPosition:AVCaptureDevicePositionBack];
+    if (!captureDevice)
+    {
+        NSLog(@"取得后置摄像头时出现问题.");
+        
+        return;
+    }
+    
+    NSError *error = nil;
+    self.videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:captureDevice error:&error];
+    if (error)
+    {
+        NSLog(@"取得设备输入videoInput对象时出错,错误原因:%@", error);
+        
+        return;
+    }
+    
+    //3、将设备输出添加到会话中
+    if ([self.captureSession canAddInput:self.videoInput])
+    {
+        [self.captureSession addInput:self.videoInput];
+    }
+    
+    self.videoOutput = [[AVCaptureVideoDataOutput alloc] init];
+    self.videoOutput.alwaysDiscardsLateVideoFrames = YES; //立即丢弃旧帧,节省内存,默认YES
+    [self.videoOutput setSampleBufferDelegate:self queue:self.videoQueue];
+    if ([self.captureSession canAddOutput:self.videoOutput])
+    {
+        [self.captureSession addOutput:self.videoOutput];
+    }
+}
+
+/**
+ *  设置音频录入
+ */
+- (void)setupAudio
+{
+    NSError *error = nil;
+    self.audioInput = [[AVCaptureDeviceInput alloc] initWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio] error:&error];
+    if (error)
+    {
+        NSLog(@"取得设备输入audioInput对象时出错,错误原因:%@", error);
+        
+        return;
+    }
+    if ([self.captureSession canAddInput:self.audioInput])
+    {
+        [self.captureSession addInput:self.audioInput];
+    }
+    
+    self.audioOutput = [[AVCaptureAudioDataOutput alloc] init];
+    [self.audioOutput setSampleBufferDelegate:self queue:self.videoQueue];
+    if([self.captureSession canAddOutput:self.audioOutput])
+    {
+        [self.captureSession addOutput:self.audioOutput];
+    }
+}
+
+/**
+ *  设置图片输出
+ */
+- (void)setupCaptureStillImageOutput
+{
+    self.capturePhotoOutput = [[AVCapturePhotoOutput alloc] init];
+    
+    if ([self.captureSession canAddOutput:self.capturePhotoOutput])
+    {
+        [self.captureSession addOutput:self.capturePhotoOutput];
+    }
+}
+
+/**
+ *  设置预览layer
+ */
+- (void)setupCaptureVideoPreviewLayer
+{
+    _captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
+    
+    CALayer *layer = self.viewContainer.layer;
+    
+    _captureVideoPreviewLayer.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);
+    _captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspect;           //填充模式
+    
+    [layer addSublayer:_captureVideoPreviewLayer];
+}
+
+/**
+ *  开启会话
+ */
+- (void)startSession
+{
+    if (![self.captureSession isRunning])
+    {
+        [self.captureSession startRunning];
+    }
+}
+
+/**
+ *  停止会话
+ */
+- (void)stopSession
+{
+    if ([self.captureSession isRunning])
+    {
+        [self.captureSession stopRunning];
+    }
+}
+
+/**
+ *  开始拍照录像动画组合
+ */
+- (void)startAnimationGroup
+{
+    [self configDefaultUIDisplay];
+    
+    [self setFocusCursorWithPoint:self.viewContainer.center];
+    
+    [self tipLabelAnimation];
+}
+
+/**
+ *  配置默认UI信息
+ */
+- (void)configDefaultUIDisplay
+{
+    if (self.photoPreviewImageView)
+    {
+        [self.photoPreviewImageView removeFromSuperview];
+        [self.photoPreviewContainerView removeFromSuperview];
+        self.photoPreviewImageView = nil;
+        self.photoPreviewContainerView = nil;
+    }
+    if (self.videoPreviewContainerView)
+    {
+        [self.player pause];
+        self.player = nil;
+        self.playerItem = nil;
+        [self.playerLayer removeFromSuperlayer];
+        self.playerLayer = nil;
+        self.cameraButton.progressPercentage = 0.0f;
+        [self.videoPreviewContainerView removeFromSuperview];
+        self.videoPreviewContainerView = nil;
+        [[NSFileManager defaultManager] removeItemAtURL:self.videoURL error:nil];
+        self.videoURL = nil;
+    }
+    
+    [self.view bringSubviewToFront:self.rotateCameraButton];
+    [self.view bringSubviewToFront:self.closeButton];
+    [self.rotateCameraButton setHidden:NO];
+    [self.closeButton setHidden:NO];
+    
+    [self.view bringSubviewToFront:self.tipLabel];
+    [self.tipLabel setAlpha:0];
+    
+    [self.cancelButton setHidden:YES];
+    [self.confirmButton setHidden:YES];
+    
+    // 设置拍照按钮
+    if (_cameraButton == nil)
+    {
+        LXFCameraButton *cameraButton = [LXFCameraButton defaultCameraButton];
+        _cameraButton = cameraButton;
+        
+        [self.view addSubview:cameraButton];
+        CGFloat cameraBtnX = (kScreenWidth - cameraButton.bounds.size.width) / 2;
+        CGFloat cameraBtnY = kScreenHeight - cameraButton.bounds.size.height - 60 - SafeViewBottomHeight;    //距离底部60
+        cameraButton.frame = CGRectMake(cameraBtnX, cameraBtnY, cameraButton.bounds.size.width, cameraButton.bounds.size.height);
+        [self.view bringSubviewToFront:cameraButton];
+        
+        // 设置拍照按钮点击事件
+        __weak typeof(self) weakSelf = self;
+        // 配置拍照方法
+        [cameraButton configureTapCameraButtonEventWithBlock:^(UITapGestureRecognizer *tapGestureRecognizer) {
+            [weakSelf takePhotos:tapGestureRecognizer];
+        }];
+        // 配置拍摄方法
+        [cameraButton configureLongPressCameraButtonEventWithBlock:^(UILongPressGestureRecognizer *longPressGestureRecognizer) {
+            [weakSelf longPressCameraButtonFunc:longPressGestureRecognizer];
+        }];
+    }
+    [self.cameraButton setHidden:NO];
+    [self.view bringSubviewToFront:self.cameraButton];
+    
+    // 对焦imageView
+    [self.view bringSubviewToFront:self.focusImageView];
+    [self.focusImageView setAlpha:0];
+    
+    // 监听屏幕方向
+    [self startUpdateAccelerometer];
+}
+
+/**
+ *  提示语动画
+ */
+- (void)tipLabelAnimation
+{
+    [self.view bringSubviewToFront:self.tipLabel];
+    
+    __weak typeof(self) weakSelf = self;
+    [UIView animateWithDuration:1.0f delay:0.5f options:UIViewAnimationOptionCurveEaseInOut animations:^{
+        
+        [weakSelf.tipLabel setAlpha:1];
+        
+    } completion:^(BOOL finished) {
+        
+        [UIView animateWithDuration:1.0f delay:3.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{
+            
+            [weakSelf.tipLabel setAlpha:0];
+            
+        } completion:nil];
+        
+    }];
+}
+
+/**
+ *  取得指定位置的摄像头
+ *
+ *  @param position 摄像头位置
+ *
+ *  @return 摄像头设备
+ */
+- (AVCaptureDevice *)getCameraDeviceWithPosition:(AVCaptureDevicePosition )position
+{
+    AVCaptureDeviceDiscoverySession *deviceDiscoverySession =  [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[AVCaptureDeviceTypeBuiltInWideAngleCamera] mediaType:AVMediaTypeVideo position:position];
+    for (AVCaptureDevice *device in deviceDiscoverySession.devices)
+    {
+        if ([device position] == position)
+        {
+            return device;
+        }
+    }
+    return nil;
+}
+
+/**
+ *  改变设备属性的统一操作方法
+ *
+ *  @param propertyChange 属性改变操作
+ */
+- (void)changeDeviceProperty:(PropertyChangeBlock)propertyChange
+{
+    AVCaptureDevice *captureDevice = [self.videoInput device];
+    NSError *error;
+    
+    //注意改变设备属性前一定要首先调用lockForConfiguration:调用完之后使用unlockForConfiguration方法解锁
+    if ([captureDevice lockForConfiguration:&error])
+    {
+        propertyChange(captureDevice);
+        [captureDevice unlockForConfiguration];
+    }
+    else
+    {
+        NSLog(@"设置设备属性过程发生错误,错误信息:%@",error.localizedDescription);
+    }
+}
+
+#pragma mark - 拍照功能
+
+/**
+ *  拍照方法
+ */
+- (void)takePhotos:(UITapGestureRecognizer *)tapGestureRecognizer
+{
+    //根据设备输出获得连接
+//    AVCaptureConnection *captureConnection = [self.capturePhotoOutput connectionWithMediaType:AVMediaTypeVideo];
+    
+//    [captureConnection setVideoScaleAndCropFactor:self.effectiveScale];
+    
+    //根据连接取得设备输出的数据
+    AVCapturePhotoSettings *settings = [AVCapturePhotoSettings photoSettings];
+//    [settings];
+    [self.capturePhotoOutput capturePhotoWithSettings:settings delegate:self];
+}
+
+/**
+ *  预览图片
+ */
+- (void)previewPhotoWithImage:(UIImage *)image
+{
+    [self stopUpdateAccelerometer];
+    
+    [self.cameraButton setHidden:YES];
+    [self.closeButton setHidden:YES];
+    [self.rotateCameraButton setHidden:YES];
+    
+    UIImage *finalImage = nil;
+    if (self.shootingOrientation == UIDeviceOrientationLandscapeRight)
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationDown];
+    }
+    else if (self.shootingOrientation == UIDeviceOrientationLandscapeLeft)
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationUp];
+    }
+    else if (self.shootingOrientation == UIDeviceOrientationPortraitUpsideDown)
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationLeft];
+    }
+    else
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationRight];
+    }
+//    NSLog(@"image %@",NSStringFromCGSize(image.size));
+//    NSLog(@"finalImage %@",NSStringFromCGSize(finalImage.size));
+    
+    self.photoPreviewImageView = [[UIImageView alloc] init];
+    float videoRatio = finalImage.size.width / finalImage.size.height; //得到的图片 高/宽
+    if (self.shootingOrientation == UIDeviceOrientationLandscapeRight || self.shootingOrientation == UIDeviceOrientationLandscapeLeft)
+    {
+        CGFloat height = kScreenWidth * videoRatio;
+        CGFloat y = (kScreenHeight - height) / 2;
+        [self.photoPreviewImageView setFrame:CGRectMake(0, y, kScreenWidth, height)];
+    }
+    else
+    {
+        [self.photoPreviewImageView setFrame:CGRectMake(0, 0, kScreenWidth, kScreenWidth*videoRatio)];
+    }
+    self.photoPreviewImageView.image = finalImage;
+    
+    self.photoPreviewContainerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight)];
+    self.photoPreviewContainerView.backgroundColor = [UIColor blackColor];
+    [self.photoPreviewContainerView addSubview:self.photoPreviewImageView];
+    [self.view addSubview:self.photoPreviewContainerView];
+    self.photoPreviewImageView.center = self.view.center;
+    [self.view bringSubviewToFront:self.photoPreviewImageView];
+    [self.view bringSubviewToFront:self.cancelButton];
+    [self.view bringSubviewToFront:self.confirmButton];
+    [self.cancelButton setHidden:NO];
+    [self.confirmButton setHidden:NO];
+}
+
+- (UIImage *)cutImageWithView:(UIView *)view
+{
+    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0);
+    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
+    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    
+    return image;
+}
+
+#pragma mark - 视频录制
+
+/**
+ *  录制视频方法
+ */
+- (void)longPressCameraButtonFunc:(UILongPressGestureRecognizer *)sender
+{
+    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+    if (authStatus == AVAuthorizationStatusRestricted || authStatus ==AVAuthorizationStatusDenied)
+    {
+        return;
+    }
+    
+    //判断用户是否允许访问麦克风权限
+    authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
+    if (authStatus == AVAuthorizationStatusRestricted || authStatus ==AVAuthorizationStatusDenied)
+    {
+        return;
+    }
+    
+    switch (sender.state) {
+        case UIGestureRecognizerStateBegan:
+            [self startVideoRecorder];
+            break;
+        case UIGestureRecognizerStateCancelled:
+            [self stopVideoRecorder];
+            break;
+        case UIGestureRecognizerStateEnded:
+            [self stopVideoRecorder];
+            break;
+        case UIGestureRecognizerStateFailed:
+            [self stopVideoRecorder];
+            break;
+        default:
+            break;
+    }
+    
+}
+
+/**
+ *  开始录制视频
+ */
+- (void)startVideoRecorder
+{
+    _isShooting = YES;
+    
+    [self stopUpdateAccelerometer];
+    
+    [self.cameraButton startShootAnimationWithDuration:START_VIDEO_ANIMATION_DURATION];
+    
+    __weak typeof(self) weakSelf = self;
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(START_VIDEO_ANIMATION_DURATION * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        
+        NSURL *url = [NSURL fileURLWithPath:[weakSelf createVideoFilePath]];
+        self.videoURL = url;
+        
+        [self setUpWriter];
+        
+        [weakSelf timerFired];
+        
+    });
+}
+
+/**
+ *  结束录制视频
+ */
+- (void)stopVideoRecorder
+{
+    if (_isShooting)
+    {
+        _isShooting = NO;
+        self.cameraButton.progressPercentage = 0.0f;
+        [self.cameraButton stopShootAnimation];
+        [self timerStop];
+        
+        __weak __typeof(self)weakSelf = self;
+        if(_assetWriter && _assetWriter.status == AVAssetWriterStatusWriting)
+        {
+//            dispatch_async(self.videoQueue, ^{
+                [_assetWriter finishWritingWithCompletionHandler:^{
+                    weakSelf.canWrite = NO;
+                    weakSelf.assetWriter = nil;
+                    weakSelf.assetWriterAudioInput = nil;
+                    weakSelf.assetWriterVideoInput = nil;
+                }];
+//            });
+        }
+        
+        if (timeLength < VIDEO_RECORDER_MIN_TIME)
+        {
+            return;
+        }
+        
+        [self.cameraButton setHidden:YES];
+        
+        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+            
+            [weakSelf previewVideoAfterShoot];
+            
+        });
+    }
+    else
+    {
+        // nothing
+    }
+}
+
+/**
+ *  设置写入视频属性
+ */
+- (void)setUpWriter
+{
+    if (self.videoURL == nil)
+    {
+        return;
+    }
+    
+    self.assetWriter = [AVAssetWriter assetWriterWithURL:self.videoURL fileType:AVFileTypeMPEG4 error:nil];
+    //写入视频大小
+    NSInteger numPixels = kScreenWidth * kScreenHeight;
+    
+    //每像素比特
+    CGFloat bitsPerPixel = 12.0;
+    NSInteger bitsPerSecond = numPixels * bitsPerPixel;
+    
+    // 码率和帧率设置
+    NSDictionary *compressionProperties = @{ AVVideoAverageBitRateKey : @(bitsPerSecond),
+                                             AVVideoExpectedSourceFrameRateKey : @(15),
+                                             AVVideoMaxKeyFrameIntervalKey : @(15),
+                                             AVVideoProfileLevelKey : AVVideoProfileLevelH264BaselineAutoLevel };
+    CGFloat width = kScreenHeight;
+    CGFloat height = kScreenWidth;
+    //视频属性
+    if (@available(iOS 11.0, *)) {
+        self.videoCompressionSettings = @{ AVVideoCodecKey : AVVideoCodecTypeH264,
+                                           AVVideoWidthKey : @(width * 2),
+                                           AVVideoHeightKey : @(height * 2),
+                                           AVVideoScalingModeKey : AVVideoScalingModeResizeAspect,
+                                           AVVideoCompressionPropertiesKey : compressionProperties };
+    } else {
+        // Fallback on earlier versions
+    }
+    
+    _assetWriterVideoInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:self.videoCompressionSettings];
+    //expectsMediaDataInRealTime 必须设为yes,需要从capture session 实时获取数据
+    _assetWriterVideoInput.expectsMediaDataInRealTime = YES;
+    
+    if (self.shootingOrientation == UIDeviceOrientationLandscapeRight)
+    {
+        _assetWriterVideoInput.transform = CGAffineTransformMakeRotation(M_PI);
+    }
+    else if (self.shootingOrientation == UIDeviceOrientationLandscapeLeft)
+    {
+        _assetWriterVideoInput.transform = CGAffineTransformMakeRotation(0);
+    }
+    else if (self.shootingOrientation == UIDeviceOrientationPortraitUpsideDown)
+    {
+        _assetWriterVideoInput.transform = CGAffineTransformMakeRotation(M_PI + (M_PI / 2.0));
+    }
+    else
+    {
+        _assetWriterVideoInput.transform = CGAffineTransformMakeRotation(M_PI / 2.0);
+    }
+    
+    // 音频设置
+    self.audioCompressionSettings = @{ AVEncoderBitRatePerChannelKey : @(28000),
+                                       AVFormatIDKey : @(kAudioFormatMPEG4AAC),
+                                       AVNumberOfChannelsKey : @(1),
+                                       AVSampleRateKey : @(22050) };
+    
+    _assetWriterAudioInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:self.audioCompressionSettings];
+    _assetWriterAudioInput.expectsMediaDataInRealTime = YES;
+    
+    if ([_assetWriter canAddInput:_assetWriterVideoInput])
+    {
+        [_assetWriter addInput:_assetWriterVideoInput];
+    }
+    else
+    {
+        NSLog(@"AssetWriter videoInput append Failed");
+    }
+    
+    if ([_assetWriter canAddInput:_assetWriterAudioInput])
+    {
+        [_assetWriter addInput:_assetWriterAudioInput];
+    }
+    else
+    {
+        NSLog(@"AssetWriter audioInput Append Failed");
+    }
+    
+    _canWrite = NO;
+}
+
+- (NSString *)createVideoFilePath
+{
+    // 创建视频文件的存储路径
+    NSString *filePath = [self createVideoFolderPath];
+    if (filePath == nil)
+    {
+        return nil;
+    }
+    
+    NSString *videoType = @".mp4";
+    NSString *videoDestDateString = [self createFileNamePrefix];
+    NSString *videoFileName = [videoDestDateString stringByAppendingString:videoType];
+    
+    NSUInteger idx = 1;
+    /*We only allow 10000 same file name*/
+    NSString *finalPath = [NSString stringWithFormat:@"%@/%@", filePath, videoFileName];
+    
+    while (idx % 10000 && [[NSFileManager defaultManager] fileExistsAtPath:finalPath])
+    {
+        finalPath = [NSString stringWithFormat:@"%@/%@_(%lu)%@", filePath, videoDestDateString, (unsigned long)idx++, videoType];
+    }
+    
+    return finalPath;
+}
+
+- (NSString *)createVideoFolderPath
+{
+    NSFileManager *fileManager = [NSFileManager defaultManager];
+    NSString *homePath = NSHomeDirectory();
+    
+    NSString *tmpFilePath;
+    
+    if (homePath.length > 0)
+    {
+        NSString *documentPath = [homePath stringByAppendingString:@"/Documents"];
+        if ([fileManager fileExistsAtPath:documentPath isDirectory:NULL] == YES)
+        {
+            BOOL success = NO;
+            
+            NSArray *paths = [fileManager contentsOfDirectoryAtPath:documentPath error:nil];
+            
+            //offline file folder
+            tmpFilePath = [documentPath stringByAppendingString:[NSString stringWithFormat:@"/%@", VIDEO_FILEPATH]];
+            if ([paths containsObject:VIDEO_FILEPATH] == NO)
+            {
+                success = [fileManager createDirectoryAtPath:tmpFilePath withIntermediateDirectories:YES attributes:nil error:nil];
+                if (!success)
+                {
+                    tmpFilePath = nil;
+                }
+            }
+            return tmpFilePath;
+        }
+    }
+    
+    return false;
+}
+
+/**
+ *  创建文件名
+ */
+- (NSString *)createFileNamePrefix
+{
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];
+    
+    NSString *destDateString = [dateFormatter stringFromDate:[NSDate date]];
+    destDateString = [destDateString stringByReplacingOccurrencesOfString:@" " withString:@"-"];
+    destDateString = [destDateString stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
+    destDateString = [destDateString stringByReplacingOccurrencesOfString:@":" withString:@"-"];
+    
+    return destDateString;
+}
+
+/**
+ *  开启定时器
+ */
+- (void)timerFired
+{
+    timeLength = 0;
+    self.timer = [NSTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(timerRecord) userInfo:nil repeats:YES];
+}
+
+/**
+ *  绿色转圈百分比计算
+ */
+- (void)timerRecord
+{
+    if (!_isShooting)
+    {
+        [self timerStop];
+        return ;
+    }
+    
+    // 时间大于VIDEO_RECORDER_MAX_TIME则停止录制
+    if (timeLength > VIDEO_RECORDER_MAX_TIME)
+    {
+        [self stopVideoRecorder];
+    }
+    
+    timeLength += TIMER_INTERVAL;
+    
+    //    NSLog(@"%lf", timeLength / VIDEO_RECORDER_MAX_TIME);
+    
+    self.cameraButton.progressPercentage = timeLength / VIDEO_RECORDER_MAX_TIME;
+    
+}
+
+/**
+ *  停止定时器
+ */
+- (void)timerStop
+{
+    if ([self.timer isValid])
+    {
+        [self.timer invalidate];
+        self.timer = nil;
+    }
+}
+
+/**
+ *  预览录制的视频
+ */
+- (void)previewVideoAfterShoot
+{
+    if (self.videoURL == nil || self.videoPreviewContainerView != nil)
+    {
+        return;
+    }
+    
+    AVURLAsset *asset = [AVURLAsset assetWithURL:self.videoURL];
+    
+    //获取视频总时长
+    Float64 duration = CMTimeGetSeconds(asset.duration);
+    
+    self.currentVideoTimeLength = duration;
+    
+    // 初始化AVPlayer
+    self.videoPreviewContainerView = [[UIView alloc] init];
+    self.videoPreviewContainerView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);
+    self.videoPreviewContainerView.backgroundColor = [UIColor blackColor];
+    
+    self.playerItem = [AVPlayerItem playerItemWithAsset:asset];
+    self.player = [[AVPlayer alloc] initWithPlayerItem:_playerItem];
+    
+    self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
+    self.playerLayer.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);
+    
+    self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
+    
+    [self.videoPreviewContainerView.layer addSublayer:self.playerLayer];
+    
+    // 其余UI布局设置
+    [self.viewContainer addSubview:self.videoPreviewContainerView];
+    [self.viewContainer bringSubviewToFront:self.videoPreviewContainerView];
+    [self.viewContainer bringSubviewToFront:self.cancelButton];
+    [self.viewContainer bringSubviewToFront:self.confirmButton];
+    [self.cameraButton setHidden:YES];
+    [self.closeButton setHidden:YES];
+    [self.rotateCameraButton setHidden:YES];
+    [self.cancelButton setHidden:NO];
+    [self.confirmButton setHidden:NO];
+    
+    // 重复播放预览视频
+    [self addNotificationWithPlayerItem];
+    
+    // 开始播放
+    [self.player play];
+}
+
+/**
+ *  截取指定时间的视频缩略图
+ *
+ *  @param timeBySecond 时间点,单位:s
+ */
+- (UIImage *)thumbnailImageRequestWithVideoUrl:(NSURL *)videoUrl andTime:(CGFloat)timeBySecond
+{
+    if (self.videoURL == nil)
+    {
+        return nil;
+    }
+    
+    AVURLAsset *urlAsset = [AVURLAsset assetWithURL:videoUrl];
+    
+    //根据AVURLAsset创建AVAssetImageGenerator
+    AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:urlAsset];
+    /*截图
+     * requestTime:缩略图创建时间
+     * actualTime:缩略图实际生成的时间
+     */
+    NSError *error = nil;
+    CMTime requestTime = CMTimeMakeWithSeconds(timeBySecond, 10); //CMTime是表示电影时间信息的结构体,第一个参数表示是视频第几秒,第二个参数表示每秒帧数.(如果要活的某一秒的第几帧可以使用CMTimeMake方法)
+    CMTime actualTime;
+    CGImageRef cgImage = [imageGenerator copyCGImageAtTime:requestTime actualTime:&actualTime error:&error];
+    if(error)
+    {
+        NSLog(@"截取视频缩略图时发生错误,错误信息:%@", error.localizedDescription);
+        return nil;
+    }
+    
+    CMTimeShow(actualTime);
+    UIImage *image = [UIImage imageWithCGImage:cgImage];
+    CGImageRelease(cgImage);
+    
+    UIImage *finalImage = nil;
+    if (self.shootingOrientation == UIDeviceOrientationLandscapeRight)
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationDown];
+    }
+    else if (self.shootingOrientation == UIDeviceOrientationLandscapeLeft)
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationUp];
+    }
+    else if (self.shootingOrientation == UIDeviceOrientationPortraitUpsideDown)
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationLeft];
+    }
+    else
+    {
+        finalImage = [self rotateImage:image withOrientation:UIImageOrientationRight];
+    }
+    
+    return finalImage;
+}
+
+/**
+ *  图片旋转
+ */
+- (UIImage *)rotateImage:(UIImage *)image withOrientation:(UIImageOrientation)orientation
+{
+    long double rotate = 0.0;
+    CGRect rect;
+    float translateX = 0;
+    float translateY = 0;
+    float scaleX = 1.0;
+    float scaleY = 1.0;
+    
+    switch (orientation)
+    {
+        case UIImageOrientationLeft:
+            rotate = M_PI_2;
+            rect = CGRectMake(0, 0, image.size.height, image.size.width);
+            translateX = 0;
+            translateY = -rect.size.width;
+            scaleY = rect.size.width/rect.size.height;
+            scaleX = rect.size.height/rect.size.width;
+            break;
+        case UIImageOrientationRight:
+            rotate = 3 * M_PI_2;
+            rect = CGRectMake(0, 0, image.size.height, image.size.width);
+            translateX = -rect.size.height;
+            translateY = 0;
+            scaleY = rect.size.width/rect.size.height;
+            scaleX = rect.size.height/rect.size.width;
+            break;
+        case UIImageOrientationDown:
+            rotate = M_PI;
+            rect = CGRectMake(0, 0, image.size.width, image.size.height);
+            translateX = -rect.size.width;
+            translateY = -rect.size.height;
+            break;
+        default:
+            rotate = 0.0;
+            rect = CGRectMake(0, 0, image.size.width, image.size.height);
+            translateX = 0;
+            translateY = 0;
+            break;
+    }
+    
+    UIGraphicsBeginImageContext(rect.size);
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    //做CTM变换
+    CGContextTranslateCTM(context, 0.0, rect.size.height);
+    CGContextScaleCTM(context, 1.0, -1.0);
+    CGContextRotateCTM(context, rotate);
+    CGContextTranslateCTM(context, translateX, translateY);
+    
+    CGContextScaleCTM(context, scaleX, scaleY);
+    //绘制图片
+    CGContextDrawImage(context, CGRectMake(0, 0, rect.size.width, rect.size.height), image.CGImage);
+    
+    UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
+    
+    return newPic;
+}
+
+#pragma mark - 截取视频方法
+
+- (void)cropWithVideoUrlStr:(NSURL *)videoUrl start:(CGFloat)startTime end:(CGFloat)endTime completion:(void (^)(NSURL *outputURL, Float64 videoDuration, BOOL isSuccess))completionHandle
+{
+    AVURLAsset *asset =[[AVURLAsset alloc] initWithURL:videoUrl options:nil];
+    
+    //获取视频总时长
+    Float64 duration = CMTimeGetSeconds(asset.duration);
+    
+    if (duration > VIDEO_RECORDER_MAX_TIME)
+    {
+        duration = VIDEO_RECORDER_MAX_TIME;
+    }
+    
+    startTime = 0;
+    endTime = duration;
+    
+    NSString *outputFilePath = [self createVideoFilePath];
+    NSURL *outputFileUrl = [NSURL fileURLWithPath:outputFilePath];
+    
+    NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:asset];
+    if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality])
+    {
+        
+        AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
+                                               initWithAsset:asset presetName:AVAssetExportPresetPassthrough];
+        
+        NSURL *outputURL = outputFileUrl;
+        
+        exportSession.outputURL = outputURL;
+        exportSession.outputFileType = AVFileTypeMPEG4;
+        exportSession.shouldOptimizeForNetworkUse = YES;
+        
+        CMTime start = CMTimeMakeWithSeconds(startTime, asset.duration.timescale);
+        CMTime duration = CMTimeMakeWithSeconds(endTime - startTime,asset.duration.timescale);
+        CMTimeRange range = CMTimeRangeMake(start, duration);
+        exportSession.timeRange = range;
+        
+        [exportSession exportAsynchronouslyWithCompletionHandler:^{
+            switch ([exportSession status]) {
+                case AVAssetExportSessionStatusFailed:
+                {
+                    NSLog(@"合成失败:%@", [[exportSession error] description]);
+                    completionHandle(outputURL, endTime, NO);
+                }
+                    break;
+                case AVAssetExportSessionStatusCancelled:
+                {
+                    completionHandle(outputURL, endTime, NO);
+                }
+                    break;
+                case AVAssetExportSessionStatusCompleted:
+                {
+                    completionHandle(outputURL, endTime, YES);
+                }
+                    break;
+                default:
+                {
+                    completionHandle(outputURL, endTime, NO);
+                } break;
+            }
+        }];
+    }
+}
+
+#pragma mark - 预览视频通知
+/**
+ *  添加播放器通知
+ */
+-(void)addNotificationWithPlayerItem
+{
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playVideoFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.playerItem];
+}
+
+-(void)removePlayerItemNotification
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+/**
+ *  播放完成通知
+ *
+ *  @param notification 通知对象
+ */
+-(void)playVideoFinished:(NSNotification *)notification
+{
+    //    NSLog(@"视频播放完成.");
+    
+    // 播放完成后重复播放
+    // 跳到最新的时间点开始播放
+    [self.player seekToTime:CMTimeMake(0, 1)];
+    [self.player play];
+}
+
+#pragma mark - AVCapturePhotoCaptureDelegate
+
+- (void)captureOutput:(AVCapturePhotoOutput *)output didFinishProcessingPhoto:(AVCapturePhoto *)photo error:(NSError *)error  API_AVAILABLE(ios(11.0)){
+    if (!error) {
+        NSData *data = [photo fileDataRepresentation];
+        UIImage *image = [UIImage imageWithData:data];
+        [self previewPhotoWithImage:image];
+    }
+}
+
+#pragma mark - AVCaptureVideoDataOutputSampleBufferDelegate AVCaptureAudioDataOutputSampleBufferDelegate
+
+- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
+{
+    if (_isRotatingCamera)
+    {
+        return;
+    }
+    
+    @autoreleasepool
+    {
+        //视频
+        if (connection == [self.videoOutput connectionWithMediaType:AVMediaTypeVideo])
+        {
+            @synchronized(self)
+            {
+                if (_isShooting)
+                {
+                    [self appendSampleBuffer:sampleBuffer ofMediaType:AVMediaTypeVideo];
+                }
+            }
+        }
+        
+        //音频
+        if (connection == [self.audioOutput connectionWithMediaType:AVMediaTypeAudio])
+        {
+            @synchronized(self)
+            {
+                if (_isShooting)
+                {
+                    [self appendSampleBuffer:sampleBuffer ofMediaType:AVMediaTypeAudio];
+                }
+            }
+        }
+    }
+}
+
+
+/**
+ *  开始写入数据
+ */
+- (void)appendSampleBuffer:(CMSampleBufferRef)sampleBuffer ofMediaType:(NSString *)mediaType
+{
+    if (sampleBuffer == NULL)
+    {
+        NSLog(@"empty sampleBuffer");
+        return;
+    }
+    
+//    CFRetain(sampleBuffer);
+//    dispatch_async(self.videoQueue, ^{
+        @autoreleasepool
+        {
+            if (!self.canWrite && mediaType == AVMediaTypeVideo)
+            {
+                [self.assetWriter startWriting];
+                [self.assetWriter startSessionAtSourceTime:CMSampleBufferGetPresentationTimeStamp(sampleBuffer)];
+                self.canWrite = YES;
+            }
+            
+            //写入视频数据
+            if (mediaType == AVMediaTypeVideo)
+            {
+                if (self.assetWriterVideoInput.readyForMoreMediaData)
+                {
+                    BOOL success = [self.assetWriterVideoInput appendSampleBuffer:sampleBuffer];
+                    if (!success)
+                    {
+                        @synchronized (self)
+                        {
+                            [self stopVideoRecorder];
+                        }
+                    }
+                }
+            }
+            
+            //写入音频数据
+            if (mediaType == AVMediaTypeAudio)
+            {
+                if (self.assetWriterAudioInput.readyForMoreMediaData)
+                {
+                    BOOL success = [self.assetWriterAudioInput appendSampleBuffer:sampleBuffer];
+                    if (!success)
+                    {
+                        @synchronized (self)
+                        {
+                            [self stopVideoRecorder];
+                        }
+                    }
+                }
+            }
+//            CFRelease(sampleBuffer);
+        }
+//    });
+}
+
+#pragma mark - 摄像头聚焦,与缩放
+
+/**
+ *  添加点按手势
+ */
+- (void)addTapGenstureRecognizerForCamera
+{
+    UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
+    
+    pinchGesture.delegate = self;
+    
+    [self.viewContainer addGestureRecognizer:pinchGesture];
+}
+
+/**
+ *  点击屏幕,聚焦事件
+ */
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
+{
+    // 不聚焦的情况:聚焦中,旋转摄像头中,查看录制的视频中,查看照片中
+    if (_isFocusing || touches.count == 0 || _isRotatingCamera || _videoPreviewContainerView || _photoPreviewImageView)
+    {
+        return;
+    }
+    
+    UITouch *touch = nil;
+    
+    for (UITouch *t in touches)
+    {
+        touch = t;
+        break;
+    }
+    
+    CGPoint point = [touch locationInView:self.viewContainer];;
+    
+    if (point.y > CGRectGetMaxY(self.tipLabel.frame))
+    {
+        return;
+    }
+    
+    [self setFocusCursorWithPoint:point];
+}
+
+/**
+ *  设置聚焦光标位置
+ *
+ *  @param point 光标位置
+ */
+- (void)setFocusCursorWithPoint:(CGPoint)point
+{
+    self.isFocusing = YES;
+    
+    self.focusImageView.center = point;
+    self.focusImageView.transform = CGAffineTransformMakeScale(1.5, 1.5);
+    self.focusImageView.alpha = 1;
+    
+    //将UI坐标转化为摄像头坐标
+    CGPoint cameraPoint = [self.captureVideoPreviewLayer captureDevicePointOfInterestForPoint:point];
+    [self focusWithPoint:cameraPoint];
+    
+    __weak typeof(self) weakSelf = self;
+    [UIView animateWithDuration:1.0 animations:^{
+        
+        weakSelf.focusImageView.transform = CGAffineTransformIdentity;
+        
+    } completion:^(BOOL finished) {
+        
+        weakSelf.focusImageView.alpha = 0;
+        weakSelf.isFocusing = NO;
+        
+    }];
+}
+
+/**
+ *  设置聚焦点
+ *
+ *  @param point 聚焦点
+ */
+-(void)focusWithPoint:(CGPoint)point
+{
+    [self changeDeviceProperty:^(AVCaptureDevice *captureDevice)
+     {
+         // 聚焦
+         if ([captureDevice isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus])
+         {
+             [captureDevice setFocusMode:AVCaptureFocusModeContinuousAutoFocus];
+         }
+         if ([captureDevice isFocusPointOfInterestSupported])
+         {
+             [captureDevice setFocusPointOfInterest:point];
+         }
+         // 曝光
+         if ([captureDevice isExposureModeSupported:AVCaptureExposureModeContinuousAutoExposure])
+         {
+             [captureDevice setExposureMode:AVCaptureExposureModeContinuousAutoExposure];
+         }
+         if ([captureDevice isExposurePointOfInterestSupported])
+         {
+             [captureDevice setExposurePointOfInterest:point];
+         }
+     }];
+}
+
+- (void)handlePinchGesture:(UIPinchGestureRecognizer *)recognizer
+{
+    if (_isShooting)
+    {
+        return;
+    }
+    
+    BOOL allTouchesAreOnTheCaptureVideoPreviewLayer = YES;
+    
+    NSUInteger numTouches = [recognizer numberOfTouches], i;
+    for ( i = 0; i < numTouches; ++i)
+    {
+        CGPoint location = [recognizer locationOfTouch:i inView:self.viewContainer];
+        CGPoint convertedLocation = [self.captureVideoPreviewLayer convertPoint:location fromLayer:self.captureVideoPreviewLayer.superlayer];
+        if (![self.captureVideoPreviewLayer containsPoint:convertedLocation])
+        {
+            allTouchesAreOnTheCaptureVideoPreviewLayer = NO;
+            break;
+        }
+    }
+    
+    if (allTouchesAreOnTheCaptureVideoPreviewLayer)
+    {
+        CGFloat videoMaxZoomFactor = self.videoInput.device.activeFormat.videoMaxZoomFactor;
+        CGFloat maxScaleAndCropFactor = videoMaxZoomFactor<DEFAULT_VIDEO_ZOOM_FACTOR?videoMaxZoomFactor:DEFAULT_VIDEO_ZOOM_FACTOR;
+        CGFloat currentScale = self.beginGestureScale * recognizer.scale;
+        if ((currentScale > 1.0f) && (currentScale < maxScaleAndCropFactor))
+        {
+            self.effectiveScale = self.beginGestureScale * recognizer.scale;
+            if ((self.effectiveScale < videoMaxZoomFactor) && (self.effectiveScale > 1.0f))
+            {
+                [self changeDeviceProperty:^(AVCaptureDevice *captureDevice) {
+                    [captureDevice rampToVideoZoomFactor:self.effectiveScale withRate:10.0f];
+                }];
+            }
+        }
+    }
+}
+
+#pragma mark - UIGestureRecognizerDelegate
+
+- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
+{
+    if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]])
+    {
+        self.beginGestureScale = self.effectiveScale;
+    }
+    
+    return YES;
+}
+
+#pragma mark - 重力感应相关
+
+/**
+ *  开始监听屏幕方向
+ */
+- (void)startUpdateAccelerometer
+{
+    if ([self.motionManager isAccelerometerAvailable] == YES)
+    {
+        __weak typeof(self) weakSelf = self;
+        //回调会一直调用,建议获取到就调用下面的停止方法,需要再重新开始,当然如果需求是实时不间断的话可以等离开页面之后再stop
+        [self.motionManager setAccelerometerUpdateInterval:1.0];
+        [self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error)
+         {
+             double x = accelerometerData.acceleration.x;
+             double y = accelerometerData.acceleration.y;
+             if ((fabs(y) + 0.1f) >= fabs(x))
+             {
+                 //                 NSLog(@"y:%lf", y);
+                 if (y >= 0.1f)
+                 {
+                     // Down
+                     NSLog(@"Down");
+                     weakSelf.shootingOrientation = UIDeviceOrientationPortraitUpsideDown;
+                 }
+                 else
+                 {
+                     // Portrait
+                     NSLog(@"Portrait");
+                     weakSelf.shootingOrientation = UIDeviceOrientationPortrait;
+                 }
+             }
+             else
+             {
+                 //                 NSLog(@"x:%lf", x);
+                 if (x >= 0.1f)
+                 {
+                     // Right
+                     NSLog(@"Right");
+                     weakSelf.shootingOrientation = UIDeviceOrientationLandscapeRight;
+                 }
+                 else if (x <= 0.1f)
+                 {
+                     // Left
+                     NSLog(@"Left");
+                     weakSelf.shootingOrientation = UIDeviceOrientationLandscapeLeft;
+                 }
+                 else
+                 {
+                     // Portrait
+                     NSLog(@"Portrait");
+                     weakSelf.shootingOrientation = UIDeviceOrientationPortrait;
+                 }
+             }
+         }];
+    }
+}
+
+/**
+ *  停止监听屏幕方向
+ */
+- (void)stopUpdateAccelerometer
+{
+    if ([self.motionManager isAccelerometerActive] == YES)
+    {
+        [self.motionManager stopAccelerometerUpdates];
+        _motionManager = nil;
+    }
+}
+
+#pragma mark - 判断是否有权限
+
+/**
+ *  请求权限
+ */
+- (void)requestAuthorizationForVideo
+{
+    __weak typeof(self) weakSelf = self;
+    
+    // 请求相机权限
+    AVAuthorizationStatus videoAuthStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+    if (videoAuthStatus != AVAuthorizationStatusAuthorized)
+    {
+        NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+        
+        NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
+        if (appName == nil)
+        {
+            appName = @"APP";
+        }
+        NSString *message = [NSString stringWithFormat:@"允许%@访问你的相机?", appName];
+        
+        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"警告" message:message preferredStyle:UIAlertControllerStyleAlert];
+        
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            [weakSelf dismissViewControllerAnimated:YES completion:nil];
+        }];
+        
+        UIAlertAction *setAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
+            if ([[UIApplication sharedApplication] canOpenURL:url])
+            {
+                [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
+            }
+            [weakSelf dismissViewControllerAnimated:YES completion:nil];
+        }];
+        
+        [alertController addAction:okAction];
+        [alertController addAction:setAction];
+        
+        [self presentViewController:alertController animated:YES completion:nil];
+    }
+    
+    // 请求麦克风权限
+    AVAuthorizationStatus audioAuthStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
+    if (audioAuthStatus != AVAuthorizationStatusAuthorized)
+    {
+        NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+        
+        NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
+        if (appName == nil)
+        {
+            appName = @"APP";
+        }
+        NSString *message = [NSString stringWithFormat:@"允许%@访问你的麦克风?", appName];
+        
+        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"警告" message:message preferredStyle:UIAlertControllerStyleAlert];
+        
+        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            [weakSelf dismissViewControllerAnimated:YES completion:nil];
+        }];
+        
+        UIAlertAction *setAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+            NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
+            if ([[UIApplication sharedApplication] canOpenURL:url])
+            {
+                [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
+            }
+            [weakSelf dismissViewControllerAnimated:YES completion:nil];
+        }];
+        
+        [alertController addAction:okAction];
+        [alertController addAction:setAction];
+        
+        [self presentViewController:alertController animated:YES completion:nil];
+    }
+    
+    
+}
+
+- (void)requestAuthorizationForPhotoLibrary
+{
+    __weak typeof(self) weakSelf = self;
+    
+    // 请求照片权限
+    [LXFPhotoLibraryManager requestALAssetsLibraryAuthorizationWithCompletion:^(Boolean isAuth) {
+        
+        if (!isAuth)
+        {
+            NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+            
+            NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
+            if (appName == nil)
+            {
+                appName = @"APP";
+            }
+            NSString *message = [NSString stringWithFormat:@"允许%@访问你的相册?", appName];
+            
+            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"警告" message:message preferredStyle:UIAlertControllerStyleAlert];
+            
+            UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+                [weakSelf dismissViewControllerAnimated:YES completion:nil];
+            }];
+            
+            UIAlertAction *setAction = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
+                NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
+                if ([[UIApplication sharedApplication] canOpenURL:url])
+                {
+                    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
+                }
+                [weakSelf dismissViewControllerAnimated:YES completion:nil];
+            }];
+            
+            [alertController addAction:okAction];
+            [alertController addAction:setAction];
+            
+            [weakSelf presentViewController:alertController animated:YES completion:nil];
+            
+        }
+    }];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.xib b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.xib
new file mode 100644
index 0000000..be0dcb8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/LXFCameraController.xib
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="QXCameraController">
+            <connections>
+                <outlet property="cancelButton" destination="t5x-fn-77d" id="sHN-Lx-9Lh"/>
+                <outlet property="closeButton" destination="pjC-ZM-eD4" id="Ojd-nv-wN0"/>
+                <outlet property="confirmButton" destination="q3i-Ao-Rf9" id="ald-El-Az5"/>
+                <outlet property="focusImageView" destination="cDi-p1-6Ox" id="XV1-1E-oXu"/>
+                <outlet property="rotateCameraButton" destination="Gww-tC-G56" id="7T0-7W-Hy1"/>
+                <outlet property="takeButton" destination="VBb-wh-QTG" id="9TQ-RR-Fqj"/>
+                <outlet property="tipLabel" destination="eSc-bP-yDA" id="qwh-94-ix8"/>
+                <outlet property="view" destination="Rcc-g1-Gwv" id="ghA-gY-bGN"/>
+                <outlet property="viewContainer" destination="Rcc-g1-Gwv" id="5Kf-Ym-SqA"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="Rcc-g1-Gwv">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <subviews>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VBb-wh-QTG">
+                    <rect key="frame" x="127.5" y="511" width="120" height="120"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="120" id="6Vq-pe-KiW"/>
+                        <constraint firstAttribute="height" constant="120" id="Vo0-Cg-m6S"/>
+                    </constraints>
+                </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pjC-ZM-eD4">
+                    <rect key="frame" x="54.5" y="555" width="33" height="32"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                    <state key="normal" title="取消"/>
+                    <connections>
+                        <action selector="closeBtnFunc:" destination="-1" eventType="touchUpInside" id="f7I-lc-uNy"/>
+                    </connections>
+                </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gww-tC-G56">
+                    <rect key="frame" x="297.5" y="560" width="26" height="22"/>
+                    <state key="normal" image="icon_change"/>
+                    <connections>
+                        <action selector="rotateCameraBtnFunc:" destination="-1" eventType="touchUpInside" id="Lwn-B8-vHA"/>
+                    </connections>
+                </button>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="点击拍照,长按摄像" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eSc-bP-yDA">
+                    <rect key="frame" x="123" y="484" width="129" height="17"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="sight_video_focus" translatesAutoresizingMaskIntoConstraints="NO" id="cDi-p1-6Ox">
+                    <rect key="frame" x="157" y="303" width="60" height="60"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                </imageView>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="t5x-fn-77d">
+                    <rect key="frame" x="40" y="531" width="76" height="76"/>
+                    <state key="normal" image="icon_return_n"/>
+                    <state key="highlighted" image="icon_return_p"/>
+                    <connections>
+                        <action selector="cancelBtnfunc:" destination="-1" eventType="touchUpInside" id="OR6-5Y-0Kl"/>
+                    </connections>
+                </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="q3i-Ao-Rf9">
+                    <rect key="frame" x="259" y="531" width="76" height="76"/>
+                    <state key="normal" image="icon_finish_p"/>
+                    <connections>
+                        <action selector="confirmBtnFunc:" destination="-1" eventType="touchUpInside" id="wIP-aa-UUf"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" systemColor="darkTextColor"/>
+            <constraints>
+                <constraint firstItem="Gww-tC-G56" firstAttribute="leading" secondItem="VBb-wh-QTG" secondAttribute="trailing" constant="50" id="5YP-gE-nk4"/>
+                <constraint firstAttribute="bottom" secondItem="q3i-Ao-Rf9" secondAttribute="bottom" constant="60" id="7mE-lr-tsA"/>
+                <constraint firstItem="t5x-fn-77d" firstAttribute="leading" secondItem="Rcc-g1-Gwv" secondAttribute="leading" constant="40" id="8K4-nl-leS"/>
+                <constraint firstAttribute="bottom" secondItem="VBb-wh-QTG" secondAttribute="bottom" constant="36" id="CaZ-uQ-hRv"/>
+                <constraint firstAttribute="bottom" secondItem="t5x-fn-77d" secondAttribute="bottom" constant="60" id="GCx-2F-ur9"/>
+                <constraint firstItem="VBb-wh-QTG" firstAttribute="centerX" secondItem="eSc-bP-yDA" secondAttribute="centerX" id="T8h-f0-n73"/>
+                <constraint firstItem="VBb-wh-QTG" firstAttribute="centerY" secondItem="Gww-tC-G56" secondAttribute="centerY" id="Un0-4d-Flg"/>
+                <constraint firstItem="VBb-wh-QTG" firstAttribute="top" secondItem="eSc-bP-yDA" secondAttribute="bottom" constant="10" id="dAy-aj-jwJ"/>
+                <constraint firstItem="VBb-wh-QTG" firstAttribute="centerX" secondItem="Rcc-g1-Gwv" secondAttribute="centerX" id="h90-Ju-sbR"/>
+                <constraint firstItem="VBb-wh-QTG" firstAttribute="leading" secondItem="pjC-ZM-eD4" secondAttribute="trailing" constant="40" id="kKG-aY-rY5"/>
+                <constraint firstItem="VBb-wh-QTG" firstAttribute="centerY" secondItem="pjC-ZM-eD4" secondAttribute="centerY" id="lFa-Se-NKA"/>
+                <constraint firstAttribute="trailing" secondItem="q3i-Ao-Rf9" secondAttribute="trailing" constant="40" id="seU-jH-g83"/>
+            </constraints>
+            <nil key="simulatedStatusBarMetrics"/>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="-99.5" y="20.5"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="icon_change" width="26.5" height="20"/>
+        <image name="icon_finish_p" width="76" height="76"/>
+        <image name="icon_return_n" width="76" height="76"/>
+        <image name="icon_return_p" width="76" height="76"/>
+        <image name="sight_video_focus" width="66" height="66"/>
+        <systemColor name="darkTextColor">
+            <color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.h
new file mode 100644
index 0000000..94281a3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.h
@@ -0,0 +1,20 @@
+//
+//  PBModelsModel.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PBResultVideo : NSObject
+/** 封面图片 */
+@property (nonatomic, strong) UIImage *coverImage;
+/** 视频数据 */
+@property (nonatomic, strong) NSData *data;
+/** 视频地址 */
+@property (nonatomic, strong) NSURL *url;
+/** 视频时长 */
+@property (nonatomic, assign) NSTimeInterval *duration;
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.m
new file mode 100644
index 0000000..40e7ba7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFAVFoundation/PBResultVideo.m
@@ -0,0 +1,13 @@
+//
+//  PBModelsModel.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/20.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBResultVideo.h"
+
+@implementation PBResultVideo
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.h
new file mode 100644
index 0000000..07a5f08
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.h
@@ -0,0 +1,38 @@
+//
+//  LXFPhotoLibraryManager.h
+//  WeChatVideoDemo
+//
+//  Created by xf-ling on 2017/6/15.
+//  Copyright © 2017年 LXF. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^RequestAssetsLibraryAuthCompletion)(Boolean isAuth);
+typedef void(^SavePhotoCompletionBlock)(UIImage *image, NSError *error);
+typedef void(^SaveVideoCompletionBlock)(NSURL *vedioUrl, NSError *error);
+
+@interface LXFPhotoLibraryManager : NSObject
+
+/**
+ *  请求照片权限,注意,强烈要求用户获得照片权限,否则视频写入照片会有崩溃
+ */
++ (void)requestALAssetsLibraryAuthorizationWithCompletion:(RequestAssetsLibraryAuthCompletion) requestAssetsLibraryAuthCompletion;
+
+/**
+ *  保存照片
+ *
+ *  @param image                UImage
+ *  @param assetCollectionName  相册名字,不填默认为app名字+相册
+ */
++ (void)savePhotoWithImage:(UIImage *)image andAssetCollectionName:(NSString *)assetCollectionName withCompletion:(SavePhotoCompletionBlock)savePhotoCompletionBlock;
+
+/**
+ *  保存视频
+ *
+ *  @param videoUrl             视频地址
+ *  @param assetCollectionName  相册名字,不填默认为app名字
+ */
++ (void)saveVideoWithVideoUrl:(NSURL *)videoUrl andAssetCollectionName:(NSString *)assetCollectionName withCompletion:(SaveVideoCompletionBlock)saveVideoCompletionBlock;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.m
new file mode 100644
index 0000000..735e75a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/LXFPhotoLibraryManager/LXFPhotoLibraryManager.m
@@ -0,0 +1,340 @@
+//
+//  XFPhotoLibraryManager.m
+//  WeChatVideoDemo
+//
+//  Created by xf-ling on 2017/6/15.
+//  Copyright © 2017年 LXF. All rights reserved.
+//
+
+#import "LXFPhotoLibraryManager.h"
+#import <Photos/Photos.h>
+#import <AssetsLibrary/AssetsLibrary.h>
+
+@implementation LXFPhotoLibraryManager
+
+/**
+ *  请求照片权限,注意,强烈要求用户获得照片权限,否则视频写入照片会有崩溃
+ */
++ (void)requestALAssetsLibraryAuthorizationWithCompletion:(RequestAssetsLibraryAuthCompletion)requestAssetsLibraryAuthCompletion
+{
+    PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus];
+    if (authStatus != PHAuthorizationStatusAuthorized) // 未授权
+    {
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if (status != PHAuthorizationStatusAuthorized)  //已授权
+            {
+                NSLog(@"用户拒绝访问相册!");
+                if (requestAssetsLibraryAuthCompletion)
+                {
+                    requestAssetsLibraryAuthCompletion(NO);
+                }
+            }
+            else
+            {
+                NSLog(@"用户允许访问相册!");
+                if (requestAssetsLibraryAuthCompletion)
+                {
+                    requestAssetsLibraryAuthCompletion(YES);
+                }
+            }
+        }];
+    }
+    else
+    {
+        // nothing
+    }
+}
+
+/**
+ *  保存照片
+ *
+ *  @param image                UImage
+ *  @param assetCollectionName  相册名字,不填默认为app名字+相册
+ */
++ (void)savePhotoWithImage:(UIImage *)image andAssetCollectionName:(NSString *)assetCollectionName withCompletion:(SavePhotoCompletionBlock)savePhotoCompletionBlock
+{
+    if (assetCollectionName == nil)
+    {
+        NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+        
+        assetCollectionName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
+        
+        if (assetCollectionName == nil)
+        {
+            assetCollectionName = @"管理平台";
+        }
+    }
+    __block NSString *blockAssetCollectionName = assetCollectionName;
+    __block UIImage *blockImage = image;
+    PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
+    dispatch_async(dispatch_get_main_queue(), ^{
+        NSError *error = nil;
+        __block NSString *assetId = nil;
+        __block NSString *assetCollectionId = nil;
+        // 1. 存储图片到"相机胶卷"管理平台
+        [library performChangesAndWait:^{
+            assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:blockImage].placeholderForCreatedAsset.localIdentifier;
+        } error:&error];
+        NSLog(@"error1: %@", error);
+        
+        // 2. 获得相册对象
+        // 获取曾经创建过的自定义视频相册名字
+        PHAssetCollection *createdAssetCollection = nil;
+        PHFetchResult <PHAssetCollection*> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
+        for (PHAssetCollection *assetCollection in assetCollections)
+        {
+            if ([assetCollection.localizedTitle isEqualToString:blockAssetCollectionName])
+            {
+                createdAssetCollection = assetCollection;
+                break;
+            }
+        }
+        //如果这个自定义框架没有创建过
+        if (createdAssetCollection == nil)
+        {
+            //创建新的[自定义的 Album](相簿\相册)
+            [library performChangesAndWait:^{
+                
+                assetCollectionId = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:blockAssetCollectionName].placeholderForCreatedAssetCollection.localIdentifier;
+                
+            } error:&error];
+            
+            NSLog(@"error2: %@", error);
+            
+            //抓取刚创建完的视频相册对象
+            createdAssetCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[assetCollectionId] options:nil].firstObject;
+        }
+        // 将【Camera Roll】(相机胶卷)的视频 添加到【自定义Album】(相簿\相册)中
+        [library performChangesAndWait:^{
+            PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdAssetCollection];
+            
+            [request addAssets:[PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil]];
+            
+        } error:&error];
+        NSLog(@"error3: %@", error);
+        // 提示信息
+        if (savePhotoCompletionBlock)
+        {
+            if (error)
+            {
+                NSLog(@"保存照片失败!");
+                
+                savePhotoCompletionBlock(nil, error);
+            }
+            else
+            {
+                NSLog(@"保存照片成功!");
+                
+                savePhotoCompletionBlock(blockImage, nil);
+            }
+        }
+    });
+}
+//+ (void)savePhotoWithImage:(UIImage *)image andAssetCollectionName:(NSString *)assetCollectionName withCompletion:(SavePhotoCompletionBlock)savePhotoCompletionBlock
+//{
+//    if (assetCollectionName == nil)
+//    {
+//        NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+//
+//        assetCollectionName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
+//
+//        if (assetCollectionName == nil)
+//        {
+//            assetCollectionName = @"视频相册";
+//        }
+//    }
+//
+//    __block NSString *blockAssetCollectionName = assetCollectionName;
+//    __block UIImage *blockImage = image;
+//    __block NSString *assetId = nil;
+//
+//    PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
+//
+//    // 1. 存储图片到"相机胶卷"
+//    [library performChanges:^{ // 这个block里保存一些"修改"性质的代码
+//        // 新建一个PHAssetCreationRequest对象, 保存图片到"相机胶卷"
+//        // 返回PHAsset(图片)的字符串标识
+//        assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:blockImage].placeholderForCreatedAsset.localIdentifier;
+//    } completionHandler:^(BOOL success, NSError * _Nullable error) {
+//        if (error) {
+//            NSLog(@"error1%@", error);
+//            return;
+//        }
+//
+//        NSLog(@"成功保存图片到相机胶卷中");
+//
+//        // 2. 获得相册对象
+//        // 获取曾经创建过的自定义视频相册名字
+//        PHAssetCollection *createdAssetCollection = nil;
+//        PHFetchResult <PHAssetCollection*> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
+//        for (PHAssetCollection *assetCollection in assetCollections)
+//        {
+//            if ([assetCollection.localizedTitle isEqualToString:blockAssetCollectionName])
+//            {
+//                createdAssetCollection = assetCollection;
+//                break;
+//            }
+//        }
+//
+//        //如果这个自定义框架没有创建过
+//        if (createdAssetCollection == nil)
+//        {
+//            //创建新的[自定义的 Album](相簿\相册)
+//            [library performChangesAndWait:^{
+//
+//                assetId = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:blockAssetCollectionName].placeholderForCreatedAssetCollection.localIdentifier;
+//
+//            } error:&error];
+//
+//            NSLog(@"error2: %@", error);
+//
+//            //抓取刚创建完的视频相册对象
+//            createdAssetCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[assetId] options:nil].firstObject;
+//
+//        }
+//
+//        // 3. 将“相机胶卷”中的图片添加到新的相册
+////        [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
+////            PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdAssetCollection];
+////
+////            // 根据唯一标示获得相片对象
+////            PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil].firstObject;
+////            // 添加图片到相册中
+////            [request addAssets:@[asset]];
+////        } completionHandler:^(BOOL success, NSError * _Nullable error) {
+////            if (error)
+////            {
+////                NSLog(@"添加图片到相册中失败");
+////                return;
+////            }
+////
+////            NSLog(@"成功添加图片到相册中");
+////        }];
+//
+//        // 将【Camera Roll】(相机胶卷)的视频 添加到【自定义Album】(相簿\相册)中
+//        [library performChangesAndWait:^{
+//            PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdAssetCollection];
+//
+//            [request addAssets:[PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil]];
+//
+//        } error:&error];
+//        NSLog(@"error3: %@", error);
+//        // 提示信息
+//        if (savePhotoCompletionBlock)
+//        {
+//            if (error)
+//            {
+//                NSLog(@"保存照片失败!");
+//
+//                savePhotoCompletionBlock(nil, error);
+//            }
+//            else
+//            {
+//                NSLog(@"保存照片成功!");
+//
+//                savePhotoCompletionBlock(blockImage, nil);
+//            }
+//        }
+//
+//    }];
+//}
+
+/**
+ *  保存视频
+ *
+ *  @param videoUrl             视频地址
+ *  @param assetCollectionName  相册名字,不填默认为app名字+视频
+ */
++ (void)saveVideoWithVideoUrl:(NSURL *)videoUrl andAssetCollectionName:(NSString *)assetCollectionName withCompletion:(SaveVideoCompletionBlock)saveVideoCompletionBlock
+{
+    if (assetCollectionName == nil)
+    {
+        NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+        
+        assetCollectionName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
+        
+        if (assetCollectionName == nil)
+        {
+            assetCollectionName = @"管理平台";
+        }
+    }
+    
+    __block NSString *blockAssetCollectionName = assetCollectionName;
+    __block NSURL *blockVideoUrl = videoUrl;
+    PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
+    
+    dispatch_async(dispatch_get_main_queue(), ^{
+    
+        NSError *error = nil;
+        __block NSString *assetId = nil;
+        __block NSString *assetCollectionId = nil;
+        
+        // 保存视频到【Camera Roll】(相机胶卷)
+        [library performChangesAndWait:^{
+            
+            assetId = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:blockVideoUrl].placeholderForCreatedAsset.localIdentifier;
+            
+        } error:&error];
+        
+        NSLog(@"error1: %@", error);
+        
+        // 获取曾经创建过的自定义视频相册名字
+        PHAssetCollection *createdAssetCollection = nil;
+        PHFetchResult <PHAssetCollection*> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
+        for (PHAssetCollection *assetCollection in assetCollections)
+        {
+            if ([assetCollection.localizedTitle isEqualToString:blockAssetCollectionName])
+            {
+                createdAssetCollection = assetCollection;
+                break;
+            }
+        }
+        
+        //如果这个自定义框架没有创建过
+        if (createdAssetCollection == nil)
+        {
+            //创建新的[自定义的 Album](相簿\相册)
+            [library performChangesAndWait:^{
+                
+                assetCollectionId = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:blockAssetCollectionName].placeholderForCreatedAssetCollection.localIdentifier;
+                
+            } error:&error];
+            
+            NSLog(@"error2: %@", error);
+            
+            //抓取刚创建完的视频相册对象
+            createdAssetCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[assetCollectionId] options:nil].firstObject;
+            
+        }
+        
+        // 将【Camera Roll】(相机胶卷)的视频 添加到【自定义Album】(相簿\相册)中
+        [library performChangesAndWait:^{
+            PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdAssetCollection];
+            
+            [request addAssets:[PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil]];
+            
+        } error:&error];
+        NSLog(@"error3: %@", error);
+        
+        // 提示信息
+        if (saveVideoCompletionBlock)
+        {
+            if (error)
+            {
+                NSLog(@"保存视频失败!");
+                
+                saveVideoCompletionBlock(nil, error);
+            }
+            else
+            {
+                NSLog(@"保存视频成功!");
+                
+                saveVideoCompletionBlock(blockVideoUrl, nil);
+            }
+        }
+        
+    });
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.h
new file mode 100644
index 0000000..682f7a1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.h
@@ -0,0 +1,40 @@
+//
+//  PBAVPlayerManager.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/3.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+typedef enum : NSUInteger {
+    ETPlayer_Original,
+    ETPlayer_UnkonwError,
+    ETPlayer_ReadyToPlay,
+    ETPlayer_Playing,
+    ETPlayer_PlayFailed,
+    ETPlayer_Pause,
+    ETPlayer_Stop,
+    ETPlayer_Loading,
+    ETPlayer_FinishedPlay,
+} ETPlayerStatus;
+@protocol ETPlayerDelagate <NSObject>
+@optional
+- (void)currentPlayerStatus:(ETPlayerStatus)playerStatus;
+@end
+
+@interface PBAVPlayerManager : NSObject
+
+@property (nonatomic, assign) ETPlayerStatus status;
+@property (nonatomic, weak) id<ETPlayerDelagate> delegate;
+//  单例全局访问点
++ (instancetype)sharedManager;
+// 播放本地录音
+- (void)playItemWithName:(NSString *)recodingName;
+// 播放网络音频
+- (void)playItemWithUrl:(NSString *)recordingUrl;
+// 停止播放
+- (void)stopPlay;
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.m
new file mode 100644
index 0000000..afd706a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBAVPlayerManager.m
@@ -0,0 +1,200 @@
+//
+//  PBAVPlayerManager.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2019/1/3.
+//  Copyright © 2019 ProBIM. All rights reserved.
+//
+
+#import "PBAVPlayerManager.h"
+
+@interface PBAVPlayerManager()<AVPlayerItemOutputPullDelegate>
+@property (nonatomic, strong) AVPlayer *player;
+@property (nonatomic, strong) AVPlayerItem *item;
+@end
+
+@implementation PBAVPlayerManager
++ (instancetype)sharedManager{
+    static PBAVPlayerManager *manager;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        manager = [[PBAVPlayerManager alloc] init];
+    });
+    return manager;
+}
+- (instancetype)init {
+    self = [super init];
+    if (self) {
+        _player = [[AVPlayer alloc] init];
+    }
+    return self;
+}
+#pragma mark - 播放本地录音
+- (void)playItemWithName:(NSString *)recodingName {
+    if (recodingName != nil) {
+        //真机必须添加此代码
+        AVAudioSession *session = [AVAudioSession sharedInstance];
+        [session setCategory:AVAudioSessionCategoryPlayback error:nil];
+        [session setActive:YES error:nil];
+        NSURL *sourceMovieUrl = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:recodingName]];
+        AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:sourceMovieUrl options:nil];
+        AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:movieAsset];
+        if (self.item) {
+            [self removeObserverFromPlayerItem:self.item];
+            [_player  replaceCurrentItemWithPlayerItem:playerItem];
+        }else {
+            _player = [AVPlayer playerWithPlayerItem:playerItem];
+        }
+        self.item = playerItem;
+//        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:_player.currentItem];
+        [self addObserverToPlayerItem:self.item];
+        [_player play];
+    }else {
+        [YJProgressHUD showMessage:@"没有找到此音频文件" inView:nil];
+    }
+}
+
+#pragma mark - 播放网络音频
+- (void)playItemWithUrl:(NSString *)recordingUrl {
+    AVAudioSession *session = [AVAudioSession sharedInstance];
+    [session setCategory:AVAudioSessionCategoryPlayback error:nil];
+    [session setActive:YES error:nil];
+    //    NSURL *sourceMovieUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",BaseUrl,recordingUrl]];
+    NSURL *sourceMovieUrl = [NSURL URLWithString:recordingUrl];
+    AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:sourceMovieUrl options:nil];
+    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:movieAsset];
+    if (self.item) {
+        [self removeObserverFromPlayerItem:self.item];
+        [_player  replaceCurrentItemWithPlayerItem:playerItem];
+    } else {
+        _player = [AVPlayer playerWithPlayerItem:playerItem];
+    }
+    self.item = playerItem;
+    [_player replaceCurrentItemWithPlayerItem:playerItem];
+//    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:_player.currentItem];
+    [self addObserverToPlayerItem:self.item];
+    [_player play];
+}
+/**
+ *  给AVPlayerItem添加监控
+ *
+ *  @param playerItem AVPlayerItem对象
+ */
+- (void)addObserverToPlayerItem:(AVPlayerItem *)playerItem
+{
+    if (playerItem) {
+        [playerItem addObserver:self
+                     forKeyPath:@"status"
+                        options:NSKeyValueObservingOptionNew
+                        context:nil];
+        //监控网络加载情况属性
+        [playerItem addObserver:self
+                     forKeyPath:@"loadedTimeRanges"
+                        options:NSKeyValueObservingOptionNew
+                        context:nil];
+        //给AVPlayerItem添加播放完成通知
+        [[NSNotificationCenter defaultCenter] addObserver:self
+                                                 selector:@selector(playbackFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:_player.currentItem];
+    }
+}
+
+- (void)removeObserverFromPlayerItem:(AVPlayerItem *)playerItem
+{
+    if (playerItem) {
+        [playerItem removeObserver:self forKeyPath:@"status"];
+        [playerItem removeObserver:self forKeyPath:@"loadedTimeRanges"];
+        [[NSNotificationCenter defaultCenter]removeObserver:self
+                                                       name:AVPlayerItemDidPlayToEndTimeNotification
+                                                     object:playerItem];
+    }
+}
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
+    AVPlayerItem *playerItem = object;
+    if ([keyPath isEqualToString:@"status"]) {
+        AVPlayerStatus status = [[change objectForKey:@"new"] intValue];
+        switch (status) {
+            case AVPlayerStatusUnknown:{
+                self.status = ETPlayer_UnkonwError;
+                if ([self respondsDelegate]) {
+                    [self.delegate currentPlayerStatus:ETPlayer_UnkonwError];
+                }
+                break;
+            }
+            case AVPlayerStatusReadyToPlay:{
+                self.status = ETPlayer_ReadyToPlay;
+                if ([self respondsDelegate]) {
+                    [self.delegate currentPlayerStatus:ETPlayer_ReadyToPlay];
+                }
+                CMTime time = _player.currentItem.duration;
+                float value1 = time.value / time.timescale;
+                float value2 = CMTimeGetSeconds(self.player.currentItem.asset.duration);
+                NSLog(@"正在播放,_player.currentItem.duration 总长度:%.2f", value1);
+                NSLog(@"正在播放,_player.currentItem.asset.duration总长度:%.2f", value2);
+                break;
+            }
+            case AVPlayerStatusFailed: {
+                self.status = ETPlayer_PlayFailed;
+                if ([self respondsDelegate]) {
+                    [self.delegate currentPlayerStatus:ETPlayer_PlayFailed];
+                }
+                [PBNoteCenter postNotificationName:PBNoteCenterPlayOver object:nil];
+                [YJProgressHUD showMessage:@"加载音频失败" inView:nil];
+                break;
+            }
+            default:
+                break;
+        }
+    }else if([keyPath isEqualToString:@"loadedTimeRanges"]) {
+        double timeInterval = [self availableDuration];
+        CMTime duration = playerItem.duration;
+        double totalDuration = CMTimeGetSeconds(duration);
+        NSLog(@"timeInterval:%f",timeInterval);
+        NSLog(@"totalDuration:%f",totalDuration);
+        if (timeInterval < 1.5 * totalDuration) {
+            self.status = ETPlayer_Loading;
+            if ([self respondsDelegate]) { [self.delegate currentPlayerStatus:ETPlayer_Loading]; }
+        }else if ([self isPlaying]) {
+            self.status = ETPlayer_Playing;
+            if ([self respondsDelegate]) { [self.delegate currentPlayerStatus:ETPlayer_Playing]; }
+        } else {
+            self.status = ETPlayer_Loading;
+            if ([self respondsDelegate]) { [self.delegate currentPlayerStatus:ETPlayer_Loading]; }
+        }
+    }
+}
+- (BOOL)respondsDelegate {
+    if (self.delegate && [self.delegate respondsToSelector:@selector(currentPlayerStatus:)]) {
+        return YES;
+    }
+    return NO;
+}
+- (BOOL)isPlaying
+{
+    // 可以根据值去判断播放还是暂停
+    if (_player.rate == 0.0) {
+        return NO;
+    }
+    return YES;
+}
+- (double)availableDuration{
+    NSArray *loadedTimeRanges = self.player.currentItem.loadedTimeRanges;
+    NSValue *value = loadedTimeRanges.firstObject;
+    CMTimeRange timeRange = value.CMTimeRangeValue;
+    double startSeconds = CMTimeGetSeconds(timeRange.duration);
+    double durationSeconds = CMTimeGetSeconds(timeRange.duration);
+    return startSeconds + durationSeconds;
+}
+- (void)playbackFinished:(NSNotification *)noti {
+    [PBNoteCenter postNotificationName:PBNoteCenterPlayOver object:nil];
+}
+
+- (void)stopPlay {
+    [_player pause];
+}
+
+
+
+
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.h
new file mode 100644
index 0000000..b9d7c4b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.h
@@ -0,0 +1,368 @@
+//
+//  PBNetworkTools.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import <AFNetworking/AFNetworking.h>
+typedef enum : NSUInteger {
+    GET,
+    POST
+} RequestType;
+@interface PBNetworkTools : AFHTTPSessionManager
++ (instancetype)sharedTools;
+
+#pragma mark =================================新接口=======================================
+// 登录
+- (void)loginWithUserName:(NSString *)userName andPassword:(NSString *)password andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+//账号注销
+- (void)RemoveTokenAndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取某人指定项目的权限数据
+- (void)GetUserOrgFuncAuthWithOrganizeID:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 测试token验证
+- (void)getOnlyTestTokenAndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 通过项目ID获取机构ID
+- (void)getProjectParentIDWithProjectID:(NSString *)projectId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取此项目下问题追踪的状态
+- (void)getIssueStatusWithCompanyId:(NSString *)companyId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取此项目下问题追踪的类型
+- (void)getIssueTypesWithCompanyId:(NSString *)companyId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack ;
+// 获取问题列表
+- (void)getIssueListWithOrganizeId:(NSString *)organizeId andIssueStatusId:(NSString *)statuId andIssueTypeId:(NSString *)typeId andArchiveId:(NSString *)archiveId andKeyword:(NSString *)keyword andUserType:(NSString *)userType andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSize andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 文档文件夹一级目录
+- (void)GetDocRolesAuthByNameWithOrgID:(NSString *)orgId andBIMComposerID:(NSString *)bimcomposerId andFolderID:(NSString *)folderId andAuthName:(NSString *)authName andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 问题归档
+- (void)SetIssueDeleteMarkWithIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+
+
+
+
+
+
+
+
+
+
+
+// 根据企业编码获取服务地址
+- (void)RequestGetUrlsByCodeWithCode:(NSString *)code andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 登录
+- (void)RequestLoginWithUserName:(NSString *)userName andPassword:(NSString *)password andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 修改密码
+- (void)RequestSubmitResetPasswordWithOldPassword:(NSString *)oldPassword NewPassword:(NSString *)newPassword andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+
+#pragma makr - 项目 模型 相关接口
+// 获取项目列表
+- (void)getProjectListWithKeyword:(NSString *)keyword andIsPublic:(NSString *)isPublic andSort:(NSString *)sort andSkip:(NSString *)skip andtake:(NSString *)take andOnlyFavorite:(NSString *)onlyFavorite andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 设置添加或移除项目收藏
+- (void)editFavoriteWithOrganizeId:(NSString *)organizeId andAddOrRm:(NSString *)addOrRm andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取登陆人在此项目下权限信息(Access)
+- (void)RequestGetAccessWithOrganizeId:(NSString *)organizeId andisPublic:(BOOL)isPublic andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取项目的项目阶段
+- (void)RequestGetProjectConfigWithProjectID:(NSString *)projectID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取项目所有模型
+- (void)RequestGetProjectAllModelsWithProjectID:(NSString *)projectID andKeyword:(NSString *)keyword andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取指定阶段所有模型
+- (void)RequestGetProjectStageAllModelsWithProjectID:(NSString *)projectID andPhase:(NSString *)Phase andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取模型的所有视图
+- (void)RequestGetAllViewsWithProjectID:(NSString *)projectID andModelID:(NSString *)modelID  andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+//  获取模型文件 - 二维图纸
+- (void)RequestGetFIleWithProjectID:(NSString *)projectID andModelID:(NSString *)modelID andVersionNO:(NSString *)versionNO andFileType:(NSString *)fileType andFileName:(NSString *)fileName andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取模型下所有视点
+- (void)RequestGetAllViewpointWithProjectId:(NSString *)ProjectId andModelId:(NSString *)modelId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取视点信息(大图)
+- (void)RequestGetFullViewpointWithProjectID:(NSString *)projectID andViewpointID:(NSString *)viewpointID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 设置模型默认视点
+- (void)RequestSetDefaultViewpointWithProjectID:(NSString *)projectID andModelId:(NSString *)modelId andViewpointID:(NSString *)viewpointID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 设置模型默认视图
+- (void)RequestSetDefaultViewsWithProjectID:(NSString *)projectID andModelId:(NSString *)modelId andViewID:(NSString *)ViewID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 删除视点
+- (void)RequestDeleteViewpointWithProjectID:(NSString *)projectID andViewpointID:(NSString *)viewpointID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 加载模型获取session
+//- (void)RequestGetSessionIDWithProjectID:(NSString *)projectID andBIM365ProjectID:(NSString *)BIM365ProjectID andProjectType:(NSString *)projectType andModelID:(NSString *)modelID andProjectName:(NSString *)projectName andVersionNO:(NSString *)versionNO andViewpointID:(NSString *)viewpointID andSnapshot:(NSString *)snapshot andTexture:(NSString *)texture andUserName:(NSString *)userName andUserNameCN:(NSString *)userNameCN andViewID:(NSString *)viewID andAccess:(NSString *)access andWorkflow:(NSString *)workflow andMarkupCategory:(NSString *)markupCategory andViewpointCategory:(NSString *)viewpointCategory andCategory:(NSString *)category andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+//根据modelID获取模型信息
+- (void)RequestGetModelWithProjectID:(NSString *)projectID andModelID:(NSString *)modelID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+#pragma mark- 文档相关接口
+// 获取项目角色
+- (void)RequestGetserProjectRoleWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 获取指定项目的所有一级子项
+- (void)RequestGetAllFolderAndFileByProjectIDWithProjectID:(NSString *)projectID andLikeName:(NSString *)likeName andNormalOrDrawings:(NSString *)normalOrDrawings andRoleId:(NSString *)roleId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取指定文件夹的所有一级子项
+- (void)RequestGetAllFolderAndFileByFolderIDWithProjectID:(NSString *)projectID andFolderID:(NSString *)folderID andLikeName:(NSString *)likeName andNormalOrDrawings:(NSString *)normalOrDrawings andRoleId:(NSString *)roleId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取 文件/ 文件夹 权限
+- (void)RequestGetprivilegeListWithProjectID:(NSString *)projectID andFileID:(NSString *)fileId andRoleId:(NSString *)roleId andCategory:(NSString *)category andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 删除文件或文件夹
+- (void)RequestDeleteFileOrFolderWithIsFolder:(BOOL)isFolder andProjectID:(NSString *)project andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 文件搜索
+- (void)RequestDocSearchWithProjectID:(NSString *)projectID andLikeName:(NSString *)likeName andNormalOrDrawings:(NSString *)normalOrDrawings andRoleId:(NSString *)roleId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// dwg文件下载
+- (void)RequestDownLoadDwgFileWithProjectID:(NSString *)projectID andFileID:(NSString *)fileID andExtension:(NSString *)extension andCallBack:(void (^) (NSURLResponse *response, NSURL *filePath, NSError *error))callBack;
+// 文件查看请求信息
+//- (void)RequestGetDocumentVersionWithProjectID:(NSString *)projectID andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+- (void)RequestGetDocumentVersionWithProjectID:(NSString *)projectID andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 文件下载(问题追踪附件dwg)
+- (void)RequestDownLoadIssueDwgFileWithProjectID:(NSString *)projectID andFileID:(NSString *)fileID andExtension:(NSString *)extension andCallBack:(void (^) (NSURLResponse *response, NSURL *filePath, NSError *error))callBack;
+#pragma mark - 问题追踪相关接口
+// 获取 状态、类型 相关数据
+- (void)RequestGetIssueConditionItemsWithProjectID:(NSString *)projectID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取问题追踪列表
+- (void)RequestGetIssueListWithProjectID:(NSString *)projectID andIssueTypeId:(NSString *)issueTypeId andIssueStatusId:(NSString *)issueStatusId andKeyword:(NSString *)keyword andUserType:(NSString *)userType andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSize andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 删除问题追踪
+- (void)RequestDeleteIssueWithIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取项目内所有人员
+- (void)RequestGetToAddIssueJoinersWithProjectID:(NSString *)projectID andEncodedKeyWord:(NSString *)encodedKeyWord andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+- (void)RequestGetToAddIssueJoiners_WithOperatorWithProjectID:(NSString *)projectID andEncodedKeyWord:(NSString *)encodedKeyWord andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 上传文档到隐藏文档库
+//- (void)UploadFileToHideFolderWithProjectID:(NSString *)projectID andFileType:(NSString*)fileType andFiles:(NSArray *)files andAudioFileName:(NSString *)audioFileName andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+//// 上传文档到隐藏文档库(质检安检上传)
+//- (void)Upload1FileToHideFolderWithProjectID:(NSString *)projectID andFileType:(NSString*)fileType andFiles:(NSArray *)files andAudioFileName:(NSString *)audioFileName andExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLSessionDataTask *task,id response,NSMutableArray *fileInfoArr,NSError *error))callBack;
+// 新增问题追踪
+- (void)RequestSaveIssueWithData:(NSMutableDictionary *)dataM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 新建问题需将图片上传
+- (void)UploadImagesWithFiles:(NSArray *)files andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 删除关联图片
+- (void)RemoveIssueDocRelWithIssueID:(NSString *)issueId andFileId:(NSString *)FileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取问题详情
+- (void)RequestGetIssueDetailByIdWithIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取问题标签数据
+- (void)RequestGetIssueOrganizeTags:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 修改问题分类
+- (void)ModifyIssueTypeWithIssueID:(NSString *)IssueId andID:(NSString *)typeID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 修改问题状态
+- (void)ModifyIssueStatusWithIssueID:(NSString *)IssueId andID:(NSString *)statuID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 添加参与人
+- (void)AddIssueJoinerWithIssueID:(NSString *)IssueId andID:(NSString *)JoinerID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 移除参与人
+- (void)RemoveIssueJoinerWithIssueID:(NSString *)IssueId andID:(NSString *)JoinerID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 修改问题截止日期
+- (void)ModifyIssueEndDateWithIssueID:(NSString *)IssueId andEndData:(NSString *)endData andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 设置问题的标签
+- (void)OverrideIssueTagWithIssueID:(NSString *)IssueId andRit_tagIds:(NSString *)rit_tagIds andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+
+
+
+
+
+
+
+
+
+
+// 根据文档关联ID获取文档详情
+- (void)RequestGetAllDocInfoByIDsByRelationIDsWithProjectID:(NSString *)projectId andFileIDs:(NSString *)fileIDs andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 批量新增关联
+- (void)RequestSaveRelationMultWithArr:(NSArray *)arr andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 删除关联
+- (void)RequestDeleteRelationWithRelationID:(NSString *)relationID andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 修改问题文本数据
+- (void)RequestUpdateIssueWithIssueID:(NSString *)issueId andIssueStatusID:(NSString *)IssueStatusID andIssueTypeID:(NSString *)IssueTypeID andRUserIDStr:(NSString *)RUserIDStr andLUserIDStr:(NSString *)LUserIDStr  andEndDate:(NSString *)EndDate andViewPoint:(NSDictionary *)viewPointDic andDraw:(NSDictionary *)drawDic andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack ;
+// 获取评论列表
+- (void)RequestGetIssueCommentsByIdWithIssueId:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// issue删除评论
+- (void)RequestDeleteMessageWithMessageID:(NSString *)messageID andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+//  新增文字评论
+- (void)AddCommentWithIssueId:(NSString *)issueId andOrganizeId:(NSString *)organizeId andText:(NSString *)text andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 新增图片评论
+- (void)AddImageCommentWithIssueId:(NSString *)issueId andFileID:(NSString *)fileId andFielName:(NSString *)name andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 评论图片上传
+- (void)UploadFileToHideFolder_MulPropWithImage:(UIImage *)image andProjectID:(NSString *)ProjectID andFileType:(NSString *)type andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+// 获取通知列表
+- (void)RequestGetNotReadMsgWithPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSize andIsRead:(NSString *)isRead andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 将消息设为已读
+- (void)RequestSetReadWithMu_guid:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+//未读消息列表全部标为已读
+- (void)RequestSetMsgTypeReadWithMsgType:(NSString *)mesType andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+//删除单条消息
+- (void)RequestComm_DeleteWithmuguid:(NSString *)muguid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 模型分享时获取URL
+- (void)RequestShareUrlWithProjectId:(NSString *)ProjectId andModelId:(NSString *)modelId andViewID:(NSString *)viewID andViewpointID:(NSString *)ViewpointID andHasRandomPwd:(NSString *)hasRandomPwd andDaycount:(NSString *)daycount andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 文档分享时获取URL
+- (void)RequestShareUrlWithBIMComposerID:(NSString *)BIMComposerID andPrivilegeStr:(NSString *)privilegeStr andDocIds:(NSString *)DocIds andHasRandomPwd:(NSString *)hasRandomPwd andDaycount:(NSString *)daycount andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 分享文档时DWG Url
+- (void)RequestIDocViewWithProjectID:(NSString *)ProjectId andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 文档分享时获取文档分享信息
+- (void)GetDocumentVersionWithProjectID:(NSString *)projectID andFileID:(NSString *)fileID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+#pragma mark - 现场数据接口
+//现场数据列表
+- (void)RequestExamineListWithBIMComposerId:(NSString *)bimComposerId andSearchValue:(NSString *)searchValue andStateType:(NSString *)stateType andAuthorType:(NSString *)authorType andSeveritylevel:(NSString *)severitylevel andTypes:(NSString *)types andSortField:(NSString *)sortField andSortIsAsc:(NSString *)sortIsAsc andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSise andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 移除现场数据
+- (void)RequestRemoveItemsWithId:(NSString *)examineId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 关闭现场数据
+- (void)RequestCloseItemsWithId:(NSString *)examineId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取某项目的现场分类数据
+- (void)RequestExam_GetExamTypesWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 现场数据详情
+- (void)RequestGetItemWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 检查人修改整改的信息
+- (void)modifyMissionMemberWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andData:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 检查人修改严重等级信息
+- (void)ModifySeveritylevelWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andSeveritylevel:(NSString *)severitylevel andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 检查人提交接口
+- (void)checkMissionWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andData:(NSMutableDictionary *)dictM andImageArr:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 申请验收
+- (void)ApplyToAcceptanceWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andRectificationRemark:(NSString *)rectificationRemark andImageArr:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 验收情况
+- (void)tryToAcceptanceWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andRectificationRemark:(NSString *)rectificationRemark andIsPassed:(NSString *)isPassed andImageArr:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取项目人员数据(分组)
+- (void)GetProjectUserSortByLetterRoleId:(NSString *)roleId andOrganizeID:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取指定项目的所有有效角色及相关人员
+- (void)GetProjectRolesAndUsersOrganizeID:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取根基任务
+- (void)GetCheckTaskWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取任务内部数据
+- (void)GetTaskItemDataWithPlanId:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取根基构件
+- (void)GetCategoriesWithOrganizeId:(NSString *)organizeId andBaseCode:(NSString *)baseCode andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 构件内数据
+- (void)GetMaterialListWithOrganizeId:(NSString *)organizeId andBc_guid:(NSString *)guid andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+//发起检查任务
+- (void)AddMissionWithDictM:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 修改检查任务
+- (void)ModifyMissionInfoWithDictM:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 修改检查人
+- (void)ModifyMissionCheckerWithExamineID:(NSString *)examineId  andOrganizeId:(NSString *)organizeId andCheckerUserId:(NSString *)checkerUserId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 根据构件ID获取所有上层分类(按编码排序)
+- (void)GetCategoryArrayByBmGuidWithGuid:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+
+
+
+
+
+
+// 现场数据添加验收记录或整改记录
+- (void)RequestExam_AddRecordWithExamineID:(NSString *)examineID andResult:(NSString *)result andRemark:(NSString *)remark andFlag:(NSString *)flag andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 加载某项目下现场数据结构的第一级
+- (void)RequestGetQualitySafeCategoriesWithOrganizeId:(NSString *)organizeId andType:(NSString *)type andLikepara:(NSString *)likepara andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 新增现场数据
+- (void)RequestAddItemsWithData:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 修改现场数据
+- (void)RequestModifyItemWithData:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 现场数据详情图片删除
+- (void)RequestExam_RmAttachmentsWithAttachmentIDs:(NSString *)attachmentIds andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 现场数据详情图片添加
+- (void)RequestExam_AddAttachmentsWithData:(NSMutableDictionary *)dictM andIamges:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+
+
+
+
+
+
+
+// 获取质量检查列表
+- (void)RequestExamineListWithProjectId:(NSString *)ProjectId andLinkType:(NSString *)linkType TypeValue:(NSString *)typeValue andSearchValue:(NSString *)searchValue andExamineResult:(NSString *)examineResult andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSise andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 保存质量检查接口
+- (void)Greate_2ExamineWithData:(NSDictionary *)data andDrawPosData:(NSArray *)drawPosData andExamineAttachment:(NSArray *)attachment andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 删除某条质检信息
+- (void)RequestDeleteExamineWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 获取检查图纸定位信息
+- (void)RequestGetdrawposWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 删除某条检查图纸信息
+- (void)RequestDeleteDrawposWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 新增某条检查的图纸信息
+- (void)RequestCreateDrawposWithDrawposData:(NSDictionary *)drawposData andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 根据ExamineID获取详情
+- (void)RequestGetExamineDetailWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 获取检查附件信息
+- (void)RequestGetexamineattachWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 删除检查附件
+- (void)RequestDeleteExamineattachWithExamineID:(NSString *)examineID andExamineAttachmentID:(NSString *)examineAttachmentID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 新增检查附件(需先上传到文件库 在关联)
+- (void)RequestExamineattachCreate_2WithAttachArr:(NSArray *)attachArr andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 修改检查文本数据
+- (void)RequestModifyExamineWithExamineModifyData:(NSDictionary *)modifydata andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+
+
+
+// 获取整改记录
+- (void)RequestGetExaminerectificationListWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 提交申请/复检整改信息接口
+- (void)RequestExaminerectificationCreateWithFlag:(NSString *)flag andExamineID:(NSString *)ExamineID andRectificationID:(NSString *)rectificationID andRectificationCheckDate:(NSString *)RectificationCheckDate andRectificationCheckResult:(NSString *)RectificationCheckResult  andRectificationRemark:(NSString *)RectificationRemark andCreateDate:(NSString *)createDate andAttachment:(NSArray *)attachment andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+
+
+#pragma mark ======================流程 相关接口========================
+- (void)GetFlowInstances_CondWithOrganizeId:(NSString *)organizeId andAuthorType:(NSString *)authorType andKeyword:(NSString *)keyword andStartTime:(NSString *)startTime andEndTime:(NSString *)endTime andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 进度计划列表
+- (void)GetSchedualTreeWithOrganizeId:(NSString *)organizeId andUid:(NSString *)uid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取任务计划累计
+- (void)GetMobileAddWithTreeID:(NSString *)treeId andPlanId:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 任务计划保存
+- (void)AddMobileJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSDictionary *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取任务计划信息
+- (void)GetMobileJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 任务进度计划图片上传
+- (void)scheduleUploadImagesWithFiles:(NSArray *)files andNames:(NSArray *)names andPlanID:(NSString *)planId andUnittime:(NSString *)unittime andorganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBackk;
+// 任务删除图片
+- (void)DelteImageWithGuid:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 督导会保存
+- (void)AddMobileSuperviseJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取督导会信息
+- (void)GetMobileSuperviseJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 质量安全保存
+- (void)AddMobileSafeJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取质量安全信息
+- (void)GetMobileSafeJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取人员清单
+- (void)GetMobileUserWithOrganizeId:(NSString *)organizeId andMobileUserDetial_ProjectID:(NSString *)planID andMobile_UserType:(NSString *)usertype andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 现场人员保存
+- (void)AddMobileUserJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取现场人员信息
+- (void)GetMobileUserJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取现场人员扫描信息
+- (void)GetFillUserInfoWithID:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 现场人员填报
+- (void)aEntryOrExitWithOrganizeId:(NSString *)organizeId andFillingUserId:(NSString *)fillingUserId andProgressParentId:(NSString *)progressParentId andProgressTreeId:(NSString *)progressTreeId andProgressProjectId:(NSString *)progressProjectId andAddress:(NSString *)address andType:(NSInteger)type andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack;
+// 获取现场人员列表
+- (void)GetFillingUserLogPagedWithPageIndex:(NSString *)pageIndex andPageSize:(NSString *)pageSize  andOrganizeId:(NSString *)organizeId andProgressProjectId:(NSString *)progressProjectId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取视频列表
+- (void)GetVideoWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取机械清单(organizeId有值为机械列表 其它值不传 则没有累计数据)
+- (void)GetMaterialsWithOrganizeId:(NSString *)organizeId andMobileUserDetial_ProjectID:(NSString *)planID andMobile_UserType:(NSString *)usertype andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 现场机械保存
+- (void)AddMaterialsJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取现场机械信息
+- (void)GetMaterialsJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+// 获取材料清单(organizeId有值为机械列表 其它值不传 则没有累计数据)
+- (void)GetMachineWithOrganizeId:(NSString *)organizeId andMobileUserDetial_ProjectID:(NSString *)planID andMobile_UserType:(NSString *)usertype andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 现场材料保存
+- (void)AddMachineJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取现场机械信息
+- (void)GetMachineJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取总列表
+- (void)GetMobilePASONWithOrganizeId:(NSString *)organizeId andMobilePA_ProjectID:(NSString *)planId andMobilePA_state:(NSString *)state AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 列表数据删除
+- (void)DelMobilePAWithPlanId:(NSString *)planId andCreateuserId:(NSString *)CreateuserId andUnittime:(NSString *)Unittime andOrganizeId:(NSString *)organizeId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取列表 填写状态
+- (void)GetSearchstateWithPlanId:(NSString *)planid andUnittime:(NSString *)Unittime andCreateuserid:(NSString *)Createuserid AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 预览发布
+- (void)UpdateStatesWithPlanId:(NSString *)planid andUnittime:(NSString *)Unittime andCreateUserId:(NSString *)createUserId andStatus:(NSString *)status andOrganizeId:(NSString *)organizeId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+#pragma mark ======================全景图 相关接口========================
+// 获取全景图集
+- (void)GetListByLabelGroupWithOrganizeId:(NSString *)organizeId andLabelId:(NSString *)labelId andPbName:(NSString *)pbName AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取全景图label
+- (void)GetLabelListWithOrganizeId:(NSString *)organizeId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取制定全景图集下所有图
+- (void)GetScenesByPbGuidWithPb_guid:(NSString *)pb_guid AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+- (void)GetPanoramaSceneListWithPb_guid:(NSString *)pb_guid AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+
+// 删除指定全景图集
+- (void)RemoveItemWithPbGuid:(NSString *)PbGuid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 删除指定全景图item
+- (void)RemoveSceneWithPbGuid:(NSString *)PbGuid andSceneName:(NSString *)scenename andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 获取标签绑定图片列表
+- (void)GetLabelFileWithOrganizeId:(NSString *)organizeId andLabelId:(NSString *)labelId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+// 上传全景图
+- (void)UploadPanoramaImagesWithFile:(NSData *)file andfileName:(NSString *)fileName andTargetPatchGuid:(NSString *)targetPatchGuid andOrganizeId:(NSString *)organizeId andPbname:(NSString *)Pbname andLabelId:(NSString *)labelId andModelId:(NSString *)modelId andViewId:(NSString *)viewId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack;
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.m
new file mode 100644
index 0000000..8427f14
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBNetworkTools.m
@@ -0,0 +1,2175 @@
+//
+//  PBNetworkTools.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#import "PBNetworkTools.h"
+#import "AppDelegate.h"
+//#define Url @"https://www.probim.cn:8080"
+#define CodeIP @"https://www.probim.cn:8080"
+static BOOL isSetCode;
+static dispatch_once_t onceToken;
+@implementation PBNetworkTools
+#pragma mark - 单例模式
++ (instancetype)sharedTools{
+    static PBNetworkTools *tools;
+    
+    dispatch_once(&onceToken, ^{
+//        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];//证书验证模式
+//        securityPolicy.allowInvalidCertificates = YES;//是否允许自建的证书
+//        securityPolicy.validatesDomainName = YES;//是否验证域名
+//        NSString *starName;
+//        if (isSetCode) {
+//            starName = @"STAR_probim_cn";
+//        }else {
+//            starName = STARNAME;
+//        }
+//        NSString *cerPath = [[NSBundle mainBundle]
+//                             pathForResource:starName ofType:@"cer"];
+//        NSData *certData = [NSData dataWithContentsOfFile:cerPath];
+//        securityPolicy.pinnedCertificates = [NSSet setWithObject:certData];
+//        tools = [[PBNetworkTools alloc] init];
+//        [tools setSecurityPolicy:securityPolicy];
+//        tools.requestSerializer = [AFHTTPRequestSerializer serializer];
+//        tools.responseSerializer = [AFHTTPResponseSerializer serializer];
+//        tools.requestSerializer.timeoutInterval = 20.0;
+//        tools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/json",@"text/html",@"application/json",@"text/plain",nil];
+        AFSecurityPolicy * securityPolicy = [AFSecurityPolicy defaultPolicy];
+        securityPolicy.allowInvalidCertificates = YES;//是否允许自建的证书
+        securityPolicy.validatesDomainName = NO;
+        tools = [[PBNetworkTools alloc] init];
+        [tools setSecurityPolicy:securityPolicy];
+        tools.requestSerializer = [AFHTTPRequestSerializer serializer];
+        tools.responseSerializer = [AFHTTPResponseSerializer serializer];
+        tools.requestSerializer.timeoutInterval = 20.0;
+        tools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/json",@"text/html",@"application/json",@"text/plain",nil];
+    });
+   
+    return tools;
+}
+#pragma mark - 封装请求方法
+- (void)RequestWithType: (RequestType)type andCookie:(BOOL)hasCookie andUrl: (NSString *)url andParams: (id)params andCallBack: (void (^) (NSURLSessionDataTask *task, id response, NSError *error))callBack {
+//    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+//    if (appDelegate.reachabilityStates == AFNetworkReachabilityStatusNotReachable) {
+//        [YJProgressHUD showMessage:@"请检查网络" inView:nil];
+//        return;
+//    }
+    if (hasCookie) {
+        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+        NSString *cookie = [defaults valueForKey:@"cookie"];
+        [self.requestSerializer setValue:cookie forHTTPHeaderField:@"Cookie"];
+    }
+    if (type == GET) {
+        [self GET:url parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+            callBack(task,responseObject, nil);
+            [self tokenExpired:responseObject];
+        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+            callBack(nil,nil, error);
+        }];
+    } else {
+        [self POST:url parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+            callBack(task, responseObject, nil);
+            [self tokenExpired:responseObject];
+        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+            callBack(nil, nil, error);
+        }];
+    }
+}
+
+- (void)BodyRequestWithType: (RequestType)type andCookie:(BOOL)hasCookie andUrl: (NSString *)url andParams:(id)params andCallBack: (void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+//    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+//    if (appDelegate.reachabilityStates == AFNetworkReachabilityStatusNotReachable) {
+//        [YJProgressHUD showMessage:@"请检查网络" inView:nil];
+//        return;
+//    }
+    if (hasCookie) {
+        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+        NSString *cookie = [defaults valueForKey:@"cookie"];
+        [self.requestSerializer setValue:cookie forHTTPHeaderField:@"Cookie"];
+    }
+    NSString *typeStr = type == POST ? @"POST":@"GET";
+    NSError *error;
+    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&error];
+    NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:typeStr URLString:url parameters:nil error:nil];
+    [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
+    [req setHTTPBody:jsonData];
+    [[self dataTaskWithRequest:req uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
+        callBack(response,responseObject,error);
+        if (!error) {
+            [self tokenExpired:responseObject];
+        }
+    }]resume];
+}
+//x-www-form-urlencoded
+- (void)BodyRequestUrlEncodedWithType: (RequestType)type andCookie:(BOOL)hasCookie andUrl: (NSString *)url andParams:(id)params andCallBack: (void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+//    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+//    if (appDelegate.reachabilityStates == AFNetworkReachabilityStatusNotReachable) {
+//        [YJProgressHUD showMessage:@"请检查网络" inView:nil];
+//        return;
+//    }
+    if (hasCookie) {
+        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+        NSString *cookie = [defaults valueForKey:@"cookie"];
+        [self.requestSerializer setValue:cookie forHTTPHeaderField:@"Cookie"];
+    }
+    NSString *typeStr = type == POST ? @"POST":@"GET";
+    NSMutableData *postBody=[NSMutableData data];
+    [postBody appendData:[params dataUsingEncoding:NSUTF8StringEncoding]];
+  
+//    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
+//                                                               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
+//                                                           timeoutInterval:30];
+    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
+    [request setValue: @"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];//请求头
+    [request setHTTPMethod:typeStr];//POST请求
+    [request setHTTPBody:postBody];//body 数据
+//    [[self dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
+//        callBack(response,responseObject,error);
+//    }]resume];
+    
+    //1.创建Session
+        NSURLSession *session=[NSURLSession sharedSession];
+        //2.根据会话创建任务
+        NSURLSessionDataTask *dataTask= [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
+//            callBack(response,data,error);
+            if(error==nil){
+//                id objc=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
+                NSLog(@"%@",data);
+            }
+            
+        }];
+        //3.启动任务
+        [dataTask resume];
+
+    
+}
+- (void)tokenExpired:(NSData *)responseObject {
+    NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
+    PBNetworkModel *networkModel = [PBNetworkModel yy_modelWithJSON:str];
+    if ([networkModel.Msg isEqualToString:@"Token已过期"]) {
+        [PBNoteCenter postNotificationName: PBNoteCenterDismissTabBarController object:nil];
+        [PBNoteCenter postNotificationName:@"PBNoteCenterTokenExpired" object:nil];
+    }
+}
+#pragma mark =================================新接口=======================================
+#pragma mark - 登录
+- (void)loginWithUserName:(NSString *)userName andPassword:(NSString *)password andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSString *PW = [NSString stringWithFormat:@"%@%@",password, AES_Key];
+    NSString *encryptionPW = [JHAES AES128Encrypt:PW key:AES_Key iv:AES_Iv];
+    NSDictionary *data = @{
+                           @"UserName":userName,
+                           @"Password":encryptionPW
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Home/Login",BaseUrl];
+    onceToken = 0;//重新走 sharedTools 方法,获取STARNAME
+    isSetCode = NO;
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+//账号注销
+- (void)RemoveTokenAndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Home/RemoveToken",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 获取项目列表
+- (void)getProjectListWithKeyword:(NSString *)keyword andIsPublic:(NSString *)isPublic andSort:(NSString *)sort andSkip:(NSString *)skip andtake:(NSString *)take andOnlyFavorite:(NSString *)onlyFavorite andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"keyword":keyword,
+                           @"isPublic":isPublic,
+                           @"sort":sort,
+                           @"skip":skip,
+                           @"take":take,
+                           @"OnlyFavorite": onlyFavorite    //1 返回已收藏。传其他或不传 返回全部
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Project/GetProjects_WithEndTime",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 设置添加或移除项目收藏
+- (void)editFavoriteWithOrganizeId:(NSString *)organizeId andAddOrRm:(NSString *)addOrRm andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token": Token,
+                           @"OrganizeId": organizeId ,
+                           @"AddOrRm": addOrRm // 1为添加。其他为移除
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Project/EditFavorite",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 测试token验证
+- (void)getOnlyTestTokenAndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Home/OnlyTestToken",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取某人指定项目的权限数据
+- (void)GetUserOrgFuncAuthWithOrganizeID:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"OrganizeId":organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Role/GetOrgFuncAuth",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 通过项目ID获取机构ID
+- (void)getProjectParentIDWithProjectID:(NSString *)projectId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"organizeId":projectId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Project/GetProjectParentId",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取此项目下问题追踪的状态
+- (void)getIssueStatusWithCompanyId:(NSString *)companyId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"CompanyId":companyId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/GetIssueStatus_ByCompany",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取此项目下问题追踪的类型
+- (void)getIssueTypesWithCompanyId:(NSString *)companyId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"CompanyId":companyId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/GetIssueTypes_ByCompanyId",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 获取问题列表
+- (void)getIssueListWithOrganizeId:(NSString *)organizeId andIssueStatusId:(NSString *)statuId andIssueTypeId:(NSString *)typeId andArchiveId:(NSString *)archiveId andKeyword:(NSString *)keyword andUserType:(NSString *)userType andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSize andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack{
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"OrganizeId":organizeId,
+                           @"IssueStatusId":statuId, //可选参数,如果不传、传空、空字符串、空白字符串则忽略
+                           @"IssueTypeId":typeId, //可选参数,如果不传、传空、空字符串、空白字符串则忽略
+                           @"keyword":keyword,//可选参数,如果不传、传空、空字符串、空白字符串则忽略
+                           @"UserType":userType,//可选参数,如果不传、传空、空字符串、空白字符串则视为全部。// Manager表示负责人,Creator表示创建人,Joiner表示参与人
+                           @"PageIndex":[NSString stringWithFormat:@"%zd",pageIndex],//表示取哪一页的数据,从第一页开始计算 必传参数
+                           @"PageSize":[NSString stringWithFormat:@"%zd",pageSize],//指定每页多少条,必传参数
+                           @"ContainsArchive":archiveId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/GetIssueList",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 文档文件夹权限
+- (void)GetDocRolesAuthByNameWithOrgID:(NSString *)orgId andBIMComposerID:(NSString *)bimcomposerId andFolderID:(NSString *)folderId andAuthName:(NSString *)authName andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack{
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"OrgId":orgId,
+                           @"BIMComposerId":bimcomposerId,
+                           @"FolderId":folderId,
+                           @"authName":authName,
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Document/Doc/GetDocRolesAuthByName",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];   
+}
+#pragma mark - 问题归档
+- (void)SetIssueDeleteMarkWithIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack{
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"Id":issueId,
+                           @"IntVal":@"2"  //1为已删除 0 正常 2归档
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/SetIssueDeleteMark",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma mark =================================旧接口=======================================
+#pragma mark ======================登录/密码 相关接口========================
+#pragma mark - 根据企业编码获取服务地址
+- (void)RequestGetUrlsByCodeWithCode:(NSString *)code andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Code":code
+                           };
+    onceToken = 0;
+    isSetCode = YES;
+    NSString *url = [NSString stringWithFormat:@"%@/api/UserControllers/Cfg/GetUrlsByCode",CodeIP];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 登陆
+- (void)RequestLoginWithUserName:(NSString *)userName andPassword:(NSString *)password andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"password":password,
+                           @"userName":userName
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/user/logon",BaseUrl];
+    onceToken = 0;//重新走 sharedTools 方法,获取STARNAME
+    isSetCode = NO;
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 修改密码
+- (void)RequestSubmitResetPasswordWithOldPassword:(NSString *)oldPassword NewPassword:(NSString *)newPassword andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"userId":UserID,
+                           @"oldPassword":oldPassword,
+                           @"newPassword":newPassword,
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/user/SubmitResetPassword",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark ======================项目/模型 相关接口========================
+#pragma mark - 获取项目列表
+//- (void)RequestProjectListWithFullName:(NSString *)fullName andSidx:(NSString *)sidx andSord:(NSString *)sord andIsPublic:(NSString *)isPublic andAccountEqual:(NSString *)accountEqual andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+//    NSDictionary *data = @{
+//                           @"Account":Account,
+//                           @"FullName":fullName,
+//                           @"Sidx":sidx,//CreateDate
+//                           @"Sord":sord,//DESC
+//                           @"IsPublic":isPublic
+//                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/project/list2",BaseUrl];
+//    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+//}
+
+- (void)RequestProjectListWithFullName:(NSString *)fullName andSidx:(NSString *)sidx andSord:(NSString *)sord andIsPublic:(NSString *)isPublic andAccountEqual:(NSString *)accountEqual andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"UserId":UserID,
+                           @"Keyword":fullName,
+                           @"Sort":@"CreateDate desc",//CreateDate asc
+                           @"IsPublic":isPublic,
+                           @"Skip":@"0",
+                           @"Take":@"999"
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/Project/GetProjects",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+//#pragma mark - 获取登陆人在此项目下权限信息(Access)
+//- (void)RequestGetAccessWithOrganizeId:(NSString *)organizeId andisPublic:(BOOL)isPublic andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+//    NSString *userId = UserID;
+//    NSString *result = isPublic ? @"true":@"false";
+//    NSString *url = [NSString stringWithFormat:@"%@/AuthorizeThird/GetAuthorizeDataJson",WebUrl];
+//    [[PBNetworkTools sharedTools] POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+//        [formData appendPartWithFormData:[userId dataUsingEncoding:NSUTF8StringEncoding] name:@"userId"];
+//        [formData appendPartWithFormData:[organizeId dataUsingEncoding:NSUTF8StringEncoding] name:@"projectId"];
+//        [formData appendPartWithFormData:[result dataUsingEncoding:NSUTF8StringEncoding] name:@"isPublic"];
+//    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+//        callBack(task,responseObject, nil);
+//    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+//        callBack(nil,nil,error);
+//    }];
+//}
+
+#pragma mark - 获取项目的项目阶段
+- (void)RequestGetProjectConfigWithProjectID:(NSString *)projectID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/prj/GetProjectConfig",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取项目所有模型
+- (void)RequestGetProjectAllModelsWithProjectID:(NSString *)projectID andKeyword:(NSString *)keyword andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"keyword":keyword
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/GetAllModels",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取指定阶段所有模型
+- (void)RequestGetProjectStageAllModelsWithProjectID:(NSString *)projectID andPhase:(NSString *)Phase andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"Phase":Phase,
+                           @"sign": @"0"
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/GetAllModels",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 获取模型的所有视图
+- (void)RequestGetAllViewsWithProjectID:(NSString *)projectID andModelID:(NSString *)modelID  andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"ModelID":modelID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/prj/GetAllViews",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark -  获取模型文件 - 二维图纸
+- (void)RequestGetFIleWithProjectID:(NSString *)projectID andModelID:(NSString *)modelID andVersionNO:(NSString *)versionNO andFileType:(NSString *)fileType andFileName:(NSString *)fileName andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"ModelID":modelID,
+                           @"VersionNO":versionNO,
+                           @"FileType":fileType,
+                           @"FileName":fileName
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Model/GetFile",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 获取模型下所有视点
+- (void)RequestGetAllViewpointWithProjectId:(NSString *)ProjectId andModelId:(NSString *)modelId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":ProjectId,
+                           @"ModelID":modelId,
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/GetAllViewpoint",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取视点信息(大图)
+- (void)RequestGetFullViewpointWithProjectID:(NSString *)projectID andViewpointID:(NSString *)viewpointID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"ViewpointID":viewpointID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/GetFullViewpoint",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 设置模型默认视点
+- (void)RequestSetDefaultViewpointWithProjectID:(NSString *)projectID andModelId:(NSString *)modelId andViewpointID:(NSString *)viewpointID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"ModelID":modelId,
+                           @"ViewpointID":viewpointID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/SetDefaultViewpoint",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 设置模型默认视图
+- (void)RequestSetDefaultViewsWithProjectID:(NSString *)projectID andModelId:(NSString *)modelId andViewID:(NSString *)ViewID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"ModelID":modelId,
+                           @"ViewID":ViewID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/SetDefaultView",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 删除视点
+- (void)RequestDeleteViewpointWithProjectID:(NSString *)projectID andViewpointID:(NSString *)viewpointID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"ViewpointID":viewpointID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/DeleteViewpoint",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+//#pragma mark - 加载模型获取session
+//- (void)RequestGetSessionIDWithProjectID:(NSString *)projectID andBIM365ProjectID:(NSString *)BIM365ProjectID andProjectType:(NSString *)projectType andModelID:(NSString *)modelID andProjectName:(NSString *)projectName andVersionNO:(NSString *)versionNO andViewpointID:(NSString *)viewpointID andSnapshot:(NSString *)snapshot andTexture:(NSString *)texture andUserName:(NSString *)userName andUserNameCN:(NSString *)userNameCN andViewID:(NSString *)viewID andAccess:(NSString *)access andWorkflow:(NSString *)workflow andMarkupCategory:(NSString *)markupCategory andViewpointCategory:(NSString *)viewpointCategory andCategory:(NSString *)category andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+//    NSDictionary *dict = @{
+//                           @"ProjectID":projectID,
+//                           @"BIM365ProjectID":BIM365ProjectID,
+//                           @"ProjectType":projectType,
+//                           @"ModelID":modelID,
+//                           @"ProjectName":projectName,
+//                           @"VersionNO":versionNO,
+//                           @"ViewpointID":viewpointID,
+//                           @"Snapshot":snapshot,
+//                           @"Texture":texture,
+//                           @"UserName":userName,
+//                           @"UserNameCN":userNameCN,
+//                           @"ViewID":viewID,
+//                           @"Access":access,
+//                           @"Workflow":workflow,
+//                           @"MarkupCategory":markupCategory,
+//                           @"ViewpointCategory":viewpointCategory,
+//                           @"category":category
+//                           };
+//    NSError *error;
+//    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:&error];
+//    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
+//    NSString *url = [NSString stringWithFormat:@"%@/api/Sys/PostURLParameters",BimUrl];
+//    PBNetworkTools *tool = [PBNetworkTools sharedTools];
+//    [tool POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+//        [formData appendPartWithFormData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] name:@"Params"];
+//    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+//        callBack(task,responseObject, nil);
+//    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+//        callBack(nil,nil,error);
+//    }];
+//}
+#pragma mark - 根据modelID获取模型信息
+- (void)RequestGetModelWithProjectID:(NSString *)projectID andModelID:(NSString *)modelID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"ModelID":modelID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Prj/GetModel",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+
+
+
+#pragma mark ======================文档 相关接口========================
+#pragma mark - 获取项目角色
+- (void)RequestGetserProjectRoleWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"UserId":UserID,
+                           @"OrganizeId":organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/user/projectrole",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取指定项目的所有一级子项
+- (void)RequestGetAllFolderAndFileByProjectIDWithProjectID:(NSString *)projectID andLikeName:(NSString *)likeName andNormalOrDrawings:(NSString *)normalOrDrawings andRoleId:(NSString *)roleId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSMutableDictionary *dataM = [[NSMutableDictionary alloc] init];
+    [dataM setObject:projectID forKey:@"ProjectID"];
+    [dataM setObject:likeName forKey:@"LikeName"];
+    [dataM setObject:normalOrDrawings forKey:@"NormalOrDrawings"];
+//    if (![roleId isEqualToString:@""]) {
+//        [dataM setObject:roleId forKey:@"RoleId"];
+//    }
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetAllFolderAndFileByProjectID",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dataM.copy andCallBack:callBack];
+}
+
+#pragma mark -   获取指定文件夹的所有一级子项
+- (void)RequestGetAllFolderAndFileByFolderIDWithProjectID:(NSString *)projectID andFolderID:(NSString *)folderID andLikeName:(NSString *)likeName andNormalOrDrawings:(NSString *)normalOrDrawings andRoleId:(NSString *)roleId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSMutableDictionary *dataM = [[NSMutableDictionary alloc] init];
+    [dataM setObject:projectID forKey:@"ProjectID"];
+    [dataM setObject:folderID forKey:@"FolderID"];
+    [dataM setObject:likeName forKey:@"LikeName"];
+    [dataM setObject:normalOrDrawings forKey:@"NormalOrDrawings"];
+//    if (![roleId isEqualToString:@""]) {
+        [dataM setObject:roleId forKey:@"RoleId"];
+//    }
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetAllFolderAndFileByFolderID",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dataM.copy andCallBack:callBack];
+}
+
+#pragma mark - 获取 文件/ 文件夹 权限
+- (void)RequestGetprivilegeListWithProjectID:(NSString *)projectID andFileID:(NSString *)fileId andRoleId:(NSString *)roleId andCategory:(NSString *)category andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSMutableDictionary *dataM = [[NSMutableDictionary alloc] init];
+    [dataM setObject:projectID forKey:@"ProjectID"];
+    [dataM setObject:fileId forKey:@"ObjectId"];
+    [dataM setObject:category forKey:@"Category"];
+    if (![roleId isEqualToString:@""]) {
+        [dataM setObject:roleId forKey:@"RoleId"];
+    }
+    NSString *url = [NSString stringWithFormat:@"%@/api/privilege/list",BimUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dataM.copy andCallBack:callBack];
+}
+#pragma mark - 删除文件或文件夹
+- (void)RequestDeleteFileOrFolderWithIsFolder:(BOOL)isFolder andProjectID:(NSString *)project andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    if (![fileId isEqualToString:@""]) {
+        NSString *apiName; NSString *keyName;
+        if (isFolder) {
+            apiName = @"/api/Doc/DeleteFolder_Mult";
+            keyName = @"FolderIDs";
+        }else {
+            apiName = @"/api/Doc/DeleteFileByID_Mult";
+            keyName = @"FileIDs";
+        }
+        NSDictionary *data = @{
+                               @"ProjectID":project,
+                               keyName:fileId
+                               };
+        NSString *url = [NSString stringWithFormat:@"%@%@",BimUrl, apiName];
+        [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+    }
+}
+#pragma mark - 文件搜索
+- (void)RequestDocSearchWithProjectID:(NSString *)projectID andLikeName:(NSString *)likeName andNormalOrDrawings:(NSString *)normalOrDrawings andRoleId:(NSString *)roleId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSMutableDictionary *dataM = [[NSMutableDictionary alloc] init];
+    [dataM setObject:projectID forKey:@"ProjectID"];
+    [dataM setObject:likeName forKey:@"LikeName"];
+    [dataM setObject:normalOrDrawings forKey:@"NormalOrDrawings"];
+    if (![roleId isEqualToString:@""]) {
+        [dataM setObject:roleId forKey:@"RoleId"];
+    }
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetAllFileAndFolderByFolderID",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dataM.copy andCallBack:callBack];
+}
+#pragma mark - 文件下载
+- (void)RequestDownLoadDwgFileWithProjectID:(NSString *)projectID andFileID:(NSString *)fileID andExtension:(NSString *)extension andCallBack:(void (^) (NSURLResponse *response, NSURL *filePath, NSError *error))callBack{
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetFile?ProjectID=%@&FileKind=File&keyValue=%@&FileInfoVersionId=",BimUrl,projectID,fileID];
+    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
+    //1.创建会话管理者
+    AFHTTPSessionManager *manager =[PBNetworkTools sharedTools];
+    NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
+        NSLog(@"%f",1.0 *downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
+    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
+        NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",fileID, extension]];
+        NSLog(@"fullPath:%@",fullPath);
+        return [NSURL fileURLWithPath:fullPath];
+    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
+        NSLog(@"%@",filePath);
+        callBack(response, filePath, error);
+    }];
+    [download resume];
+}
+#pragma mark - 文件查看请求信息
+//- (void)RequestGetDocumentVersionWithProjectID:(NSString *)projectID andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+//    NSDictionary *data = @{
+//                           @"ProjectID":projectID,
+//                           @"FileID":fileId
+//                           };
+//    NSString *str = [NSString stringWithFormat:@"FileID=%@&ProjectID=%@", fileId, projectID];
+//    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetDocumentVersion",@"https://bimcomposer.probim.cn"];
+////    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+//    [[PBNetworkTools sharedTools] BodyRequestUrlEncodedWithType:POST andCookie:NO andUrl:url andParams:str andCallBack:callBack];
+//
+//
+//}
+
+#pragma mark -
+- (void)RequestGetDocumentVersionWithProjectID:(NSString *)projectID andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectID,
+                           @"FileID":fileId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetDocumentVersion",BimUrl];
+//    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+    
+    
+    
+    AFHTTPSessionManager * manager = [PBNetworkTools sharedTools];
+    [manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
+    [manager POST:url parameters:data headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task, responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil, nil, error);
+    }];
+}
+
+#pragma mark ======================问题追踪 相关接口========================
+#pragma mark - 文件下载(问题追踪附件dwg)
+- (void)RequestDownLoadIssueDwgFileWithProjectID:(NSString *)projectID andFileID:(NSString *)fileID andExtension:(NSString *)extension andCallBack:(void (^) (NSURLResponse *response, NSURL *filePath, NSError *error))callBack{
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetHideFile?ProjectID=%@&FileId=%@&FileType=Issue",BimUrl,projectID,fileID];
+    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
+    //1.创建会话管理者
+    AFHTTPSessionManager *manager =[PBNetworkTools sharedTools];
+    NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
+        NSLog(@"%f",1.0 *downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
+    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
+        NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",fileID, extension]];
+        NSLog(@"fullPath:%@",fullPath);
+        return [NSURL fileURLWithPath:fullPath];
+    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
+        NSLog(@"%@",filePath);
+        callBack(response, filePath, error);
+    }];
+    [download resume];
+}
+#pragma mark - 获取 状态、类型 相关数据
+- (void)RequestGetIssueConditionItemsWithProjectID:(NSString *)projectID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"OrganizeId":projectID,
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Issue/GetIssueConditionItems",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Migration/MIssue/GetIssueConditionItems",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取问题追踪列表
+- (void)RequestGetIssueListWithProjectID:(NSString *)projectID andIssueTypeId:(NSString *)issueTypeId andIssueStatusId:(NSString *)issueStatusId andKeyword:(NSString *)keyword andUserType:(NSString *)userType andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSize andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"OrganizeId":projectID,
+                           @"IssueTypeId":issueTypeId,//可选参数,如果不传、传空、空字符串、空白字符串则忽略
+                           @"IssueStatusId":issueStatusId,//可选参数,如果不传、传空、空字符串、空白字符串则忽略
+                           @"keyword":keyword,//可选参数,如果不传、传空、空字符串、空白字符串则忽略
+                           @"UserId":UserID,//当前操作人 必传参数
+                           @"UserType":userType,//可选参数,如果不传、传空、空字符串、空白字符串则视为全部。// Manager表示负责人,Creator表示创建人,Joiner表示参与人
+                           @"PageIndex":[NSString stringWithFormat:@"%zd",pageIndex],//表示取哪一页的数据,从第一页开始计算 必传参数
+                           @"PageSize":[NSString stringWithFormat:@"%zd",pageSize],//指定每页多少条,必传参数
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Issue/GetIssueList",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Migration/MIssue/GetIssueList",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 删除问题追踪
+- (void)RequestDeleteIssueWithIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"IssueId":issueId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/RemoveIssue",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取项目内所有人员
+//- (void)RequestGetProjectRoleUserWithBIMComposerID:(NSString *)bimComposerID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+//    NSDictionary *data = @{
+//                           @"BIMComposerID":bimComposerID,
+//                           @"UserLikeName":@""
+//                           };
+////    NSString *url = [NSString stringWithFormat:@"%@/Issue/GetProjectRoleUser",BaseUrl];
+//    NSString *url = [NSString stringWithFormat:@"%@/api/Migration/MIssue/GetProjectRoleUser",BaseUrl];
+//    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+//}
+//返回不返回操作人
+- (void)RequestGetToAddIssueJoinersWithProjectID:(NSString *)projectID andEncodedKeyWord:(NSString *)encodedKeyWord andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"RoleId":@"-1",
+                           @"ProjectID":projectID,
+                           @"encodedKeyWord":encodedKeyWord
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Issue/GetProjectRoleUser",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/User/GetToAddIssueJoiners",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+//返回包含操作人
+- (void)RequestGetToAddIssueJoiners_WithOperatorWithProjectID:(NSString *)projectID andEncodedKeyWord:(NSString *)encodedKeyWord andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"RoleId":@"-1",
+                           @"ProjectID":projectID,
+                           @"encodedKeyWord":encodedKeyWord
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Issue/GetProjectRoleUser",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/User/GetToAddIssueJoiners_WithOperator",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+//#pragma mark - 上传文档到隐藏文档库
+//- (void)UploadFileToHideFolderWithProjectID:(NSString *)projectID andFileType:(NSString*)fileType andFiles:(NSArray *)files andAudioFileName:(NSString *)audioFileName andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+//    NSDictionary *dict = @{
+//                           @"ProjectID":projectID,
+//                           @"CreateUserID":UserID,
+//                           @"CreateUserName":Realname,
+//                           @"FileType":fileType
+//                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/UploadFileToHideFolder",BimUrl];
+//    [[PBNetworkTools sharedTools] POST:url parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+//        NSInteger imgCount = 0;
+//        for (UIImage *image in files) {
+//            NSData *imageData = UIImageJPEGRepresentation(image,1);
+//            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+//            formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+//            NSString *fileName = [NSString stringWithFormat:@"%@.png",[formatter stringFromDate:[NSDate date]]];
+//            [formData appendPartWithFileData:imageData name:@"" fileName:fileName mimeType:@"image/png"];
+//            imgCount++;
+//        }
+//        if (audioFileName != nil){
+//            //音频信息
+//            NSURL *fileUrl = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:audioFileName]];
+//            NSString *fileName = [NSString stringWithFormat:@"%@$%@",audioFileName,[NSString getUniqueStrByUUID]];
+//            [formData appendPartWithFileURL:fileUrl name:@"" fileName:fileName mimeType:@"application/octet-stream" error:nil];
+//        }
+//    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+//        callBack(task,responseObject, nil);
+//    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+//        callBack(nil,nil, error);
+//    }];
+//}
+
+//#pragma mark - 上传文档到隐藏文档库(质检安检上传)
+//- (void)Upload1FileToHideFolderWithProjectID:(NSString *)projectID andFileType:(NSString*)fileType andFiles:(NSArray *)files andAudioFileName:(NSString *)audioFileName andExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLSessionDataTask *task,id response,NSMutableArray *fileInfoArr,NSError *error))callBack {
+//    NSDictionary *dict = @{
+//                           @"ProjectID":projectID,
+//                           @"CreateUserID":UserID,
+//                           @"CreateUserName":Realname,
+//                           @"FileType":fileType
+//                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/UploadFileToHideFolder",BimUrl];
+//    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+//    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+//    formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
+//    NSString *uploadDate = [formatter stringFromDate:[NSDate date]];
+//
+//    [[PBNetworkTools sharedTools] POST:url parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+//        NSInteger imgCount = 0;
+//        for (UIImage *image in files) {
+//            NSData *imageData = UIImageJPEGRepresentation(image,0.7);
+//            NSString *date = [uploadDate stringByReplacingOccurrencesOfString:@"-" withString:@""];
+//            date = [date stringByReplacingOccurrencesOfString:@":" withString:@""];
+//            date = [date stringByReplacingOccurrencesOfString:@" " withString:@""];
+//            NSString *fileName = [NSString stringWithFormat:@"%@%ld.png",date, (long)imgCount];
+//            [formData appendPartWithFileData:imageData name:@"" fileName:fileName mimeType:@"image/png"];
+//            NSDictionary *dict = @{
+//                                   @"ExamineID": examineID,
+//                                   @"AttachmentType": @".png",
+//                                   @"AttachmentName": fileName,
+//                                   @"AttachmentUrl": @"",
+//                                   @"UploadDate": uploadDate,
+//                                   @"CheckFlag": @"1",
+//                                   @"IsDel": @"0"
+//                                   };
+//            [arrM addObject:dict];
+//            imgCount++;
+//        }
+//        if (audioFileName != nil){
+//            //音频信息
+//            NSURL *fileUrl = [NSURL fileURLWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:audioFileName]];
+//            [formData appendPartWithFileURL:fileUrl name:@"" fileName:audioFileName mimeType:@"application/octet-stream" error:nil];
+//            NSDictionary *dict = @{
+//                                   @"ExamineID": examineID,
+//                                   @"AttachmentType": @".mp3",
+//                                   @"AttachmentName": audioFileName,
+//                                   @"AttachmentUrl": @"",
+//                                   @"UploadDate": uploadDate,
+//                                   @"CheckFlag": @"1",
+//                                   @"IsDel": @"0"
+//                                   };
+//            [arrM addObject:dict];
+//        }
+//    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+//        callBack(task, responseObject, arrM, nil);
+//    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+//        callBack(nil, nil, nil, error);
+//    }];
+//}
+
+
+#pragma mark - 新建问题需将图片上传
+- (void)UploadImagesWithFiles:(NSArray *)files andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    [dictM setObject:Token forKey:@"Token"];
+    if (issueId != nil) {
+        [dictM setObject:issueId forKey:@"IssueId"];
+    }
+    NSString *url = [NSString stringWithFormat:@"%@/api/Tool/File/UploadImages",BaseUrl];
+    [[PBNetworkTools sharedTools] POST:url parameters:dictM.copy headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+//        NSInteger imgCount = 0;
+//        for (UIImage *image in files) {
+//            NSData *imageData = UIImageJPEGRepresentation(image,1);
+//            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+//            formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+//            NSString *fileName = [NSString stringWithFormat:@"%@.png",[formatter stringFromDate:[NSDate date]]];
+//            [formData appendPartWithFileData:imageData name:@"" fileName:fileName mimeType:@"image/png"];
+//            imgCount++;
+//        }
+        
+        for (NSInteger i = 0; i < files.count; i++) {
+            id obj = files[i];
+            if ([obj isKindOfClass:[PBResultVideo class]]) {
+                PBResultVideo *video = (PBResultVideo *)obj;
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.mp4",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:video.data name:[NSString stringWithFormat:@"video%zd",i] fileName:fileName mimeType:@"video/mpeg4"];
+                
+//                NSData *imageData = UIImageJPEGRepresentation(video.coverImage,1);
+//                NSString *imageFileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+//                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"video%zd_image",i] fileName:imageFileName mimeType:@"image/png"];
+
+            }else {
+                UIImage *image = (UIImage *)obj;
+                NSData *imageData = UIImageJPEGRepresentation(image,1);
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%zd",i] fileName:fileName mimeType:@"image/png"];
+            }
+        }
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];
+}
+#pragma mark - 删除关联图片
+- (void)RemoveIssueDocRelWithIssueID:(NSString *)issueId andFileId:(NSString *)FileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"IssueId":issueId,
+                            @"FileId":FileId
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/RemoveIssueDocRel",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 新增问题追踪
+- (void)RequestSaveIssueWithData:(NSMutableDictionary *)dataM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    [dataM setObject:Token forKey:@"Token"];
+    [dataM setObject:@"" forKey:@"FileIds"];
+    [dataM setObject:Realname forKey:@"RealName"];
+//    [dataM setObject:@"" forKey:@"RelationIssueId"];
+//    [dataM setObject:@"" forKey:@"AtUserIds"];
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/AddIssue",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dataM.copy andCallBack:callBack];
+}
+#pragma mark - 获取问题追踪详情
+- (void)RequestGetIssueDetailByIdWithIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"IssueId":issueId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/GetIssueDetail",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取问题标签数据
+- (void)RequestGetIssueOrganizeTags:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                          @"organizeId":organizeId
+                          };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/GetIssueOrganizeTags",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 修改问题分类
+- (void)ModifyIssueTypeWithIssueID:(NSString *)IssueId andID:(NSString *)typeID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                          @"Token":Token,
+                          @"IssueId":IssueId,
+                          @"Id":typeID
+                          };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/ModifyIssueType",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 修改问题状态
+- (void)ModifyIssueStatusWithIssueID:(NSString *)IssueId andID:(NSString *)statuID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                          @"Token":Token,
+                          @"IssueId":IssueId,
+                          @"Id":statuID
+                          };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/ModifyIssueStatus",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 添加参与人
+- (void)AddIssueJoinerWithIssueID:(NSString *)IssueId andID:(NSString *)JoinerID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                          @"Token":Token,
+                          @"IssueId":IssueId,
+                          @"Id":JoinerID
+                          };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/AddIssueJoiner",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 移除参与人
+- (void)RemoveIssueJoinerWithIssueID:(NSString *)IssueId andID:(NSString *)JoinerID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"IssueId":IssueId,
+                            @"Id":JoinerID
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/RemoveIssueJoiner",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 修改问题截止日期
+- (void)ModifyIssueEndDateWithIssueID:(NSString *)IssueId andEndData:(NSString *)endData andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"IssueId":IssueId,
+                            @"EndDate":endData
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/ModifyIssueEndDate",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 设置问题的标签
+- (void)OverrideIssueTagWithIssueID:(NSString *)IssueId andRit_tagIds:(NSString *)rit_tagIds andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"IssueId":IssueId,
+                            @"rit_tagIds":rit_tagIds
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/Tag_OverrideIssueTag",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+
+
+
+
+
+#pragma mark - 根据文档关联ID获取文档详情
+- (void)RequestGetAllDocInfoByIDsByRelationIDsWithProjectID:(NSString *)projectId andFileIDs:(NSString *)fileIDs andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"ProjectID":projectId,
+                           @"FileIDs":fileIDs
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetAllDocInfoByIDs",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 批量新增关联
+- (void)RequestSaveRelationMultWithArr:(NSArray *)arr andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Relations": arr,
+                           @"issueId": issueId,
+                           @"userId": UserID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Relation/SaveRelationMult",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Migration/MRelation/SaveRelationMult",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 删除关联
+- (void)RequestDeleteRelationWithRelationID:(NSString *)relationID andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"RelationId":relationID,
+                           @"issueId": issueId,
+                           @"userId" : UserID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Relation/DeleteRelation",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Migration/MRelation/DeleteRelation",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+
+#pragma mark - 修改问题文本数据
+- (void)RequestUpdateIssueWithIssueID:(NSString *)issueId andIssueStatusID:(NSString *)IssueStatusID andIssueTypeID:(NSString *)IssueTypeID andRUserIDStr:(NSString *)RUserIDStr andLUserIDStr:(NSString *)LUserIDStr  andEndDate:(NSString *)EndDate andViewPoint:(NSDictionary *)viewPointDic andDraw:(NSDictionary *)drawDic andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    [dictM setObject:issueId forKey:@"IssueID"];
+    if (IssueStatusID != nil) {
+        [dictM setObject:IssueStatusID forKey:@"IssueStatusID"];
+    }
+    if (IssueTypeID != nil) {
+        [dictM setObject:IssueTypeID forKey:@"IssueTypeID"];
+    }
+    if (RUserIDStr != nil){
+        [dictM setObject:RUserIDStr forKey:@"RUserIDStr"];
+    }
+    if (LUserIDStr != nil){
+        [dictM setObject:LUserIDStr forKey:@"LUserIDStr"];
+    }
+    if (EndDate != nil){
+        [dictM setObject:EndDate forKey:@"EndDate"];
+    }
+    if (viewPointDic != nil) {
+        [dictM setObject:[viewPointDic valueForKey:@"viewPointID"] forKey:@"ViewPointID"];
+        [dictM setObject:[viewPointDic valueForKey:@"modelID"] forKey:@"ModelID"];
+    }
+    if (drawDic != nil) {
+        [dictM setObject:[drawDic valueForKey:@"modelID"] forKey:@"Image2D_ModelID"];
+        [dictM setObject:[drawDic valueForKey:@"imageID"] forKey:@"Image2DID"];
+        [dictM setObject:[drawDic valueForKey:@"position"] forKey:@"Image2D_Position"];
+    }
+    [dictM setObject:UserID forKey:@"UserId"];
+    NSString *url = [NSString stringWithFormat:@"%@/Issue/UpdateIssue",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dictM.copy andCallBack:callBack];
+}
+#pragma mark - 获取评论列表
+- (void)RequestGetIssueCommentsByIdWithIssueId:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"IssueId":issueId
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Issue/GetIssueCommentsById",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Migration/MIssue/GetIssueCommentsById",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - issue删除评论
+- (void)RequestDeleteMessageWithMessageID:(NSString *)messageID andIssueID:(NSString *)issueId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"IssueId":issueId,
+                           @"Issue_TalkId":messageID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/RemoveComment",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 新增文字评论
+- (void)AddCommentWithIssueId:(NSString *)issueId andOrganizeId:(NSString *)organizeId andText:(NSString *)text andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"organizeId":organizeId,
+                           @"RelationIssueId":issueId,
+                           @"Title":text,
+                           @"AtUserIds":@""
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/AddComment",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 新增图片评论
+- (void)AddImageCommentWithIssueId:(NSString *)issueId andFileID:(NSString *)fileId andFielName:(NSString *)name andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"Name":name,
+                           @"Id":fileId,
+                           @"IssueId":issueId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Issue/AddImageComment",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 评论图片上传
+- (void)UploadFileToHideFolder_MulPropWithImage:(UIImage *)image andProjectID:(NSString *)ProjectID andFileType:(NSString *)type andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"ProjectID":ProjectID,
+                            @"CreateUserID":@"",
+                            @"CreateUserName":@"",
+                            @"FileType":type
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/UploadFileToHideFolder_MulProp",BimUrl];
+    [[PBNetworkTools sharedTools] POST:url parameters:data headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        NSData *imageData = UIImageJPEGRepresentation(image,1);
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+        NSString *fileName = [NSString stringWithFormat:@"%@.png",[formatter stringFromDate:[NSDate date]]];
+        [formData appendPartWithFileData:imageData name:@"" fileName:fileName mimeType:@"image/png"];
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];
+    
+    
+    
+}
+
+#pragma mark - 获取通知消息列表
+- (void)RequestGetNotReadMsgWithPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSize andIsRead:(NSString *)isRead andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"isRead":isRead,//0为未读,空为全部
+                           @"buttonSign":@"全部",
+                           @"fucSign":@"全部"
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Message/JPush/CurMsg_WithNum",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 将消息设为已读
+- (void)RequestSetReadWithMu_guid:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"mu_guids":guid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Message/JPush/SetMsgRead",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark -未读消息列表全部标为已读
+- (void)RequestSetMsgTypeReadWithMsgType:(NSString *)mesType andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Message/JPush/SetUpdateReadByTypeAll",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 删除单条消息
+- (void)RequestComm_DeleteWithmuguid:(NSString *)muguid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"mu_guid":muguid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/msg_user/Comm_Delete",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 模型分享时获取URL
+- (void)RequestShareUrlWithProjectId:(NSString *)ProjectId andModelId:(NSString *)modelId andViewID:(NSString *)viewID andViewpointID:(NSString *)ViewpointID andHasRandomPwd:(NSString *)hasRandomPwd andDaycount:(NSString *)daycount andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"ProjectId":ProjectId,
+                           @"modelId":modelId,
+                           @"ViewID":viewID,
+                           @"ViewpointID":ViewpointID,
+                           @"hasRandomPwd":hasRandomPwd,
+                           @"daycount":daycount
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Model/CreateModelShare",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 文档分享时获取URL
+- (void)RequestShareUrlWithBIMComposerID:(NSString *)BIMComposerID andPrivilegeStr:(NSString *)privilegeStr andDocIds:(NSString *)DocIds andHasRandomPwd:(NSString *)hasRandomPwd andDaycount:(NSString *)daycount andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"Token":Token,
+                           @"BIMComposerID":BIMComposerID,
+                           @"DocIds":DocIds,
+                           @"PrivilegeStr":privilegeStr,
+                           @"EndTime":daycount,
+                           @"HasPwd":hasRandomPwd
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/Document/CreateDocShare",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 分享文档时DWG Url
+- (void)RequestIDocViewWithProjectID:(NSString *)ProjectId andFileID:(NSString *)fileId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                           @"DocID":fileId,
+                           @"OrganizeId":ProjectId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/BJYMig/Public/IDocView",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 文档分享时获取文档分享信息
+- (void)GetDocumentVersionWithProjectID:(NSString *)projectID andFileID:(NSString *)fileID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"ProjectID":projectID,
+                            @"FileID":fileID
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Doc/GetDocumentVersion",BimUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+    //https://bimcomposer.probim.cn/api/Doc/GetDocumentVersion
+}
+
+#pragma mark ==================================现场数据 相关接口=================================
+#pragma mark - 现场数据列表
+- (void)RequestExamineListWithBIMComposerId:(NSString *)bimComposerId andSearchValue:(NSString *)searchValue andStateType:(NSString *)stateType andAuthorType:(NSString *)authorType andSeveritylevel:(NSString *)severitylevel andTypes:(NSString *)types andSortField:(NSString *)sortField andSortIsAsc:(NSString *)sortIsAsc andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSise andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSInteger skip = pageIndex * pageSise;
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"keyword":searchValue,
+                            @"bimcomposerId":bimComposerId,
+                            @"StateType":stateType,//A_ToBeCheck(待检查) B_ToBeRectified(待整改) C_ToBeRecheck(待验收) D_Qualified(已合格)
+                            @"AuthorType":authorType,//传空字符串或以下其中之一,可选值:AsChecker(我检查)AsRechecker(我复检)AsRectifier(我整改) ,
+                            @"Severitylevel":severitylevel,//一般、严重、非常严重
+                            @"Types":types,//Exam_GetExamTypes 接口返回的数据中的 aedt_guid 字段
+                            @"SortField":sortField,//排序依赖的字段,有:创建时间 CreateDate/'', 结束时间 RectificateDate, 状态 State ,
+                            @"SortIsAsc":sortIsAsc,//传1为正序,其它为倒序
+                            @"Skip":[NSString stringWithFormat:@"%zd",skip],//跳过多少条数据。若转换失败则取全部 ,
+                            @"Take":[NSString stringWithFormat:@"%zd",pageSise],//取多少条数据
+                            };
+
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/GetMissions",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 移除现场数据
+- (void)RequestRemoveItemsWithId:(NSString *)examineId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"Ids":examineId
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/RemoveItems",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 关闭现场数据
+- (void)RequestCloseItemsWithId:(NSString *)examineId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"Ids":examineId
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/UpdateItems",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 获取某项目的现场分类数据
+- (void)RequestExam_GetExamTypesWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"organizeId":organizeId
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/Exam_GetExamTypes",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+
+#pragma mark - 现场数据详情
+- (void)RequestGetItemWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineID":examineID
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/GetMission?ExamineID=%@&Token=%@",BaseUrl,examineID,Token];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:nil andCallBack:callBack];
+}
+#pragma mark - 检查人修改整改的信息
+- (void)modifyMissionMemberWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andData:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineID":examineID,
+                            @"OrganizeId":organizeId
+                            };
+    [dictM addEntriesFromDictionary:data];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/ModifyMissionMember",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dictM.copy andCallBack:callBack];
+}
+#pragma mark - 检查人修改严重等级信息
+- (void)ModifySeveritylevelWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andSeveritylevel:(NSString *)severitylevel andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineID":examineID,
+                            @"OrganizeId":organizeId,
+                            @"aede_severitylevel":severitylevel
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/ModifySeveritylevel",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 检查人检查内容提交接口
+- (void)checkMissionWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andData:(NSMutableDictionary *)dictM andImageArr:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineID":examineID,
+                            @"OrganizeId":organizeId
+                           };
+    [dictM addEntriesFromDictionary:data];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/CheckMission",BaseUrl];
+    [[PBNetworkTools sharedTools] POST:url parameters:dictM.copy headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        for (NSInteger i = 0; i < imageArr.count; i++) {
+            id obj = imageArr[i];
+            if ([obj isKindOfClass:[PBResultVideo class]]) {
+                PBResultVideo *video = (PBResultVideo *)obj;
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.mp4",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:video.data name:[NSString stringWithFormat:@"video%zd",i] fileName:fileName mimeType:@"video/mpeg4"];
+                
+                NSData *imageData = UIImageJPEGRepresentation(video.coverImage,1);
+                NSString *imageFileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"video%zd_image",i] fileName:imageFileName mimeType:@"image/png"];
+
+            }else {
+                UIImage *image = (UIImage *)obj;
+                NSData *imageData = UIImageJPEGRepresentation(image,1);
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%zd",i] fileName:fileName mimeType:@"image/png"];
+            }
+        }
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];
+}
+
+#pragma mark - 申请验收
+- (void)ApplyToAcceptanceWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andRectificationRemark:(NSString *)rectificationRemark andImageArr:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineID":examineID,
+                            @"OrganizeId":organizeId,
+                            @"RectificationRemark":rectificationRemark
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/ApplyToAcceptance",BaseUrl];
+    [[PBNetworkTools sharedTools] POST:url parameters:data headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        for (NSInteger i = 0; i < imageArr.count; i++) {
+            id obj = imageArr[i];
+            if ([obj isKindOfClass:[PBResultVideo class]]) {
+                PBResultVideo *video = (PBResultVideo *)obj;
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.mp4",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:video.data name:[NSString stringWithFormat:@"video%zd",i] fileName:fileName mimeType:@"video/mpeg4"];
+                NSData *imageData = UIImageJPEGRepresentation(video.coverImage,1);
+                NSString *imageFileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"video%zd_image",i] fileName:imageFileName mimeType:@"image/png"];
+            }else {
+                UIImage *image = (UIImage *)obj;
+                NSData *imageData = UIImageJPEGRepresentation(image,1);
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%zd",i] fileName:fileName mimeType:@"image/png"];
+            }
+        }
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];
+}
+#pragma mark - 验收情况
+- (void)tryToAcceptanceWithExamineID:(NSString *)examineID andOrganizeId:(NSString *)organizeId andRectificationRemark:(NSString *)rectificationRemark andIsPassed:(NSString *)isPassed andImageArr:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineID":examineID,
+                            @"OrganizeId":organizeId,
+                            @"RectificationRemark":rectificationRemark,
+                            @"IsPassed":isPassed
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/TryToAcceptance",BaseUrl];
+    [[PBNetworkTools sharedTools] POST:url parameters:data headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        for (NSInteger i = 0; i < imageArr.count; i++) {
+            id obj = imageArr[i];
+            if ([obj isKindOfClass:[PBResultVideo class]]) {
+                PBResultVideo *video = (PBResultVideo *)obj;
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.mp4",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:video.data name:[NSString stringWithFormat:@"video%zd",i] fileName:fileName mimeType:@"video/mpeg4"];
+                NSData *imageData = UIImageJPEGRepresentation(video.coverImage,1);
+                NSString *imageFileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"video%zd_image",i] fileName:imageFileName mimeType:@"image/png"];
+            }else {
+                UIImage *image = (UIImage *)obj;
+                NSData *imageData = UIImageJPEGRepresentation(image,1);
+                NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+                formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+                NSString *fileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], i];
+                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%zd",i] fileName:fileName mimeType:@"image/png"];
+            }
+        }
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];
+}
+#pragma mark - 获取项目人员数据(分组)
+- (void)GetProjectUserSortByLetterRoleId:(NSString *)roleId andOrganizeID:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId,
+                           @"RoleId":roleId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/User/GetProjectUserSortByLetter",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取指定项目的所有有效角色及相关人员
+- (void)GetProjectRolesAndUsersOrganizeID:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/User/User/GetProjectRolesAndUsers",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取根基任务
+- (void)GetCheckTaskWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Plus/PlusProject/NewComm_GetListByOrganizeId",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取任务内部数据
+- (void)GetTaskItemDataWithPlanId:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"planId":planId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Plus/PlusProject/GetPlanTaskListByPlanId",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取根基构件
+- (void)GetCategoriesWithOrganizeId:(NSString *)organizeId andBaseCode:(NSString *)baseCode andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId,
+                           @"baseCode":baseCode,
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Material/MaterialCategory/GetCategories",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 构件内数据
+- (void)GetMaterialListWithOrganizeId:(NSString *)organizeId andBc_guid:(NSString *)guid andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                          @"bc_guid_materialtype": guid,
+                          @"bm_materialcode": @"",
+                          @"bm_materialname": @"",
+                          @"statusIdlistjson": @"",
+                          @"ifhasrelation": @"",
+                          @"updatetimestart": @"",
+                          @"updatetimeend": @"",
+                          @"SortField": @"bm_updatetime",
+                          @"SortType": @"desc",
+                          @"organizeId": organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Material/Mtr/GetMaterialList_Condition2",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 发起检查任务
+- (void)AddMissionWithDictM:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    [dictM setObject:Token forKey:@"Token"];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/AddMission",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dictM.copy andCallBack:callBack];
+}
+#pragma mark - 修改检查任务
+- (void)ModifyMissionInfoWithDictM:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    [dictM setObject:Token forKey:@"Token"];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/ModifyMissionInfo",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dictM.copy andCallBack:callBack];
+}
+#pragma mark - 修改检查人
+- (void)ModifyMissionCheckerWithExamineID:(NSString *)examineId  andOrganizeId:(NSString *)organizeId andCheckerUserId:(NSString *)checkerUserId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                          @"Token": Token,
+                          @"ExamineID": examineId,
+                          @"OrganizeId": organizeId,
+                          @"CheckerUserId": checkerUserId
+    };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/ModifyMissionChecker",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 根据构件ID获取所有上层分类(按编码排序)
+- (void)GetCategoryArrayByBmGuidWithGuid:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                          @"bm_guid": guid
+    };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Material/Mtr/GetCategoryArrayByBmGuid",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#pragma mark - 现场数据添加验收记录或整改记录
+- (void)RequestExam_AddRecordWithExamineID:(NSString *)examineID andResult:(NSString *)result andRemark:(NSString *)remark andFlag:(NSString *)flag andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineID":examineID,
+                            @"RectificationCheckResult":result,
+                            @"RectificationRemark":remark,
+                            @"RectificationOperateFlag":flag
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/Exam_AddRecord",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 加载某项目下现场数据结构的第一级
+- (void)RequestGetQualitySafeCategoriesWithOrganizeId:(NSString *)organizeId andType:(NSString *)type andLikepara:(NSString *)likepara andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"organizeId":organizeId,
+                            @"type":type,
+                            @"likepara":likepara
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/GetQualitySafeCategories",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 新增现场数据
+- (void)RequestAddItemsWithData:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    [dictM setValue:Token forKey:@"Token"];
+    [dictM setValue:@"1" forKey:@"LinkType"];
+    [dictM setValue:@"" forKey:@"FileIds"];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/AddItem",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dictM.copy andCallBack:callBack];
+}
+#pragma mark - 修改现场数据
+- (void)RequestModifyItemWithData:(NSMutableDictionary *)dictM andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    [dictM setValue:Token forKey:@"Token"];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/ModifyItem",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dictM.copy andCallBack:callBack];
+}
+#pragma mark - 现场数据详情图片删除
+- (void)RequestExam_RmAttachmentsWithAttachmentIDs:(NSString *)attachmentIds andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *data = @{
+                            @"Token":Token,
+                            @"ExamineAttachmentIDs":attachmentIds
+                            };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/Exam_RmAttachments",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 现场数据详情图片添加
+- (void)RequestExam_AddAttachmentsWithData:(NSMutableDictionary *)dictM andIamges:(NSArray *)imageArr andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    [dictM setValue:Token forKey:@"Token"];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Examine/Exam/Exam_AddAttachments",BaseUrl];
+    [[PBNetworkTools sharedTools] POST:url parameters:dictM.copy headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        NSInteger imgCount = 0;
+        for (UIImage *image in imageArr) {
+            NSData *imageData = UIImageJPEGRepresentation(image,1);
+            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+            formatter.dateFormat = @"yyyyMMddHHmmssSSS";
+            NSString *fileName = [NSString stringWithFormat:@"%@.png",[formatter stringFromDate:[NSDate date]]];
+            [formData appendPartWithFileData:imageData name:@"" fileName:fileName mimeType:@"image/png"];
+            imgCount++;
+        }
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];  
+}
+
+
+#pragma mark - 获取质量检查列表
+- (void)RequestExamineListWithProjectId:(NSString *)ProjectId andLinkType:(NSString *)linkType TypeValue:(NSString *)typeValue andSearchValue:(NSString *)searchValue andExamineResult:(NSString *)examineResult andPageIndex:(NSInteger)pageIndex andPageSize:(NSInteger)pageSise andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSString *examinerID = @""; NSString *principalID = @""; NSString *relationMemberID = @""; NSString *hasDataAuthorize = @"";
+    //全部
+    if ([typeValue isEqualToString:@""]) {
+        hasDataAuthorize = @"False";
+    //我创建
+    }else if ([typeValue isEqualToString:@"creat"]) {
+        examinerID = UserID;
+    //我负责
+    }else if ([typeValue isEqualToString:@"responsible"]) {
+        principalID = UserID;
+    //我相关
+    }else if ([typeValue isEqualToString:@"related"]) {
+        relationMemberID = UserID;
+    }
+    NSDictionary *data = @{
+                           @"ProjectID":ProjectId,
+                           @"LinkType":linkType,
+                           @"HasDataAuthorize":hasDataAuthorize,
+                           @"Account": UserID,
+                           @"PrincipalID":principalID,
+                           @"RelationMemberID":relationMemberID,
+                           @"ExaminerID":examinerID,
+                           @"KeyValue":searchValue,
+                           @"ExamineResult":examineResult,
+                           @"PageIndex":[NSString stringWithFormat:@"%zd",pageIndex],
+                           @"PageSize":[NSString stringWithFormat:@"%zd",pageSise]
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Examine/List",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/MExamine/List",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:data andCallBack:callBack];
+}
+#pragma mark - 新增质量检查接口
+- (void)Greate_2ExamineWithData:(NSDictionary *)data andDrawPosData:(NSArray *)drawPosData andExamineAttachment:(NSArray *)attachment andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineData":data,
+                           @"DrawPosData":drawPosData.count == 0 ? @"" :drawPosData,
+                           @"ExamineAttachment":attachment
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Examine/Create_2",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/MExamine/Create_2",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 删除某条质检信息
+- (void)RequestDeleteExamineWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":examineID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Examine/Delete",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/MExamine/Delete",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+#pragma mark - 获取检查图纸定位信息
+- (void)RequestGetdrawposWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":examineID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/drawpos/list",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/Mdrawpos/list",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+    
+}
+
+#pragma mark - 删除某条检查图纸信息
+- (void)RequestDeleteDrawposWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":examineID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/drawpos/delete",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/Mdrawpos/delete",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 新增某条检查的图纸信息
+- (void)RequestCreateDrawposWithDrawposData:(NSDictionary *)drawposData andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+//    NSString *url = [NSString stringWithFormat:@"%@/drawpos/create",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/Mdrawpos/create",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:drawposData andCallBack:callBack];
+}
+
+#pragma mark - 根据ExamineID获取详情
+- (void)RequestGetExamineDetailWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":examineID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Examine/detail",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/MExamine/detail",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+#pragma mark - 获取检查附件信息
+- (void)RequestGetexamineattachWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":examineID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/examineattach/list",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/Mexamineattach/list",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 删除检查附件
+- (void)RequestDeleteExamineattachWithExamineID:(NSString *)examineID andExamineAttachmentID:(NSString *)examineAttachmentID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":examineID,
+                           @"ExamineAttachmentIds":examineAttachmentID //为所有要删除的附件的ExamineAttachmentID 拼接 以 ,隔开
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/examineattach/delete",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/Mexamineattach/delete",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 新增检查附件(需先上传到文件库 在关联)
+- (void)RequestExamineattachCreate_2WithAttachArr:(NSArray *)attachArr andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineAttachment":attachArr
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/examineattach/Create_2",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/Mexamineattach/Create_2",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 修改检查文本数据
+- (void)RequestModifyExamineWithExamineModifyData:(NSDictionary *)modifydata andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+//    NSString *url = [NSString stringWithFormat:@"%@/Examine/Modify2",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/MExamine/Modify2",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:modifydata andCallBack:callBack];
+}
+
+
+
+
+
+
+
+
+
+#pragma mark - 获取整改记录
+- (void)RequestGetExaminerectificationListWithExamineID:(NSString *)examineID andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":examineID
+                           };
+//    NSString *url = [NSString stringWithFormat:@"%@/Examinerectification/List_2",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/MExaminerectification/List_2",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 提交申请/复检整改信息接口
+- (void)RequestExaminerectificationCreateWithFlag:(NSString *)flag andExamineID:(NSString *)ExamineID andRectificationID:(NSString *)rectificationID andRectificationCheckDate:(NSString *)RectificationCheckDate andRectificationCheckResult:(NSString *)RectificationCheckResult  andRectificationRemark:(NSString *)RectificationRemark andCreateDate:(NSString *)createDate andAttachment:(NSArray *)attachment andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ExamineID":ExamineID,
+                           @"RectificationID":rectificationID,
+                           @"RectificationOperatorID":UserID,
+                           @"RectificationOperator":Realname,
+                           @"RectificationOperateFlag":flag,//1检查人,2负责人
+                           @"RectificationCheckDate":RectificationCheckDate,
+                           @"RectificationCheckResult":RectificationCheckResult,
+                           @"RectificationRemark":RectificationRemark,
+                           @"IsDel":@"0",
+                           @"CreateDate":createDate
+                           };
+    NSDictionary *dict1 = @{
+                            @"ExamineRectification":dict,
+                            @"ExamineAttachment":attachment
+                            }  ;
+//    NSString *url = [NSString stringWithFormat:@"%@/ExamineRectification/Create_2",BaseUrl];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Megration/MExamineRectification/Create_2",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict1 andCallBack:callBack];
+}
+
+
+
+#pragma mark ======================进程 相关接口========================
+- (void)GetFlowInstances_CondWithOrganizeId:(NSString *)organizeId andAuthorType:(NSString *)authorType andKeyword:(NSString *)keyword andStartTime:(NSString *)startTime andEndTime:(NSString *)endTime andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    /**
+     AuthorType: tobedone
+     StatusType:
+     pageIndex: 1
+     pageSize: 50
+     
+     organizeId: 48617e7b-07f2-4748-9199-238af8f2bfc6
+     wftc_guid: -1000
+     wft_guid:
+     keyword:
+     starttime:
+     endtime:
+     */
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"organizeId":organizeId,
+                           @"wft_guid":@"",
+                           @"wftc_guid":@"-1000",
+                           @"AuthorType":@"tobedone",
+                           @"StatusType":@"",
+                           @"pageIndex":@"1",
+                           @"pageSize":@"100",
+                           @"keyword":keyword,
+                           @"starttime":startTime,
+                           @"endtime":endTime
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/FlowForm/Flow/GetFlowInstances_Cond",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取任务计划tree
+- (void)GetSchedualTreeWithOrganizeId:(NSString *)organizeId andUid:(NSString *)uid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId,
+                           @"uid": uid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Schedual/Schedual/GetTree",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取任务计划累计
+- (void)GetMobileAddWithTreeID:(NSString *)treeId andPlanId:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"Progress_treeID":treeId,
+                           @"Progress_ProjectID":planId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMobileAdd",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 任务计划保存
+- (void)AddMobileJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSDictionary *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack  {
+    NSString *jsonStr = [NSString convertToJson:mobile];
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"organizeId": organizeId,
+                           @"MobileJson": jsonStr
+                         };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/AddMobileJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取任务计划信息
+- (void)GetMobileJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"Progress_ProjectID":planId,
+                           @"Progress_createuserid":createuserId,
+                           @"Progress_unittime":unittime
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMobileJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+#pragma mark - 任务进度计划图片上传
+- (void)scheduleUploadImagesWithFiles:(NSArray *)files andNames:(NSArray *)names andPlanID:(NSString *)planId andUnittime:(NSString *)unittime andorganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSMutableDictionary *dictM = [[NSMutableDictionary alloc] init];
+    [dictM setObject:Token forKey:@"Token"];
+    [dictM setObject:planId forKey:@"Progress_ProjectID"];
+    [dictM setObject:unittime forKey:@"Progress_unittime"];
+    [dictM setObject:names forKey:@"Progress_imageName"];
+    [dictM setObject:organizeId forKey:@"organizeId"];
+    
+    NSString *url = [NSString stringWithFormat:@"%@/api/Tool/File/UploadImageMobile",BaseUrl];
+    [[PBNetworkTools sharedTools] POST:url parameters:dictM.copy headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        for (NSInteger M = 0; M < files.count; M++) {
+            UIImage *image = files[M];
+            NSData *imageData = UIImageJPEGRepresentation(image,0.7);
+            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+            formatter.dateFormat = @"yyyyMMddssss";
+            NSString *fileName = [NSString stringWithFormat:@"%@%zd.png",[formatter stringFromDate:[NSDate date]], M];
+            [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%zd", M] fileName:fileName mimeType:@"image/png"];
+        }
+        
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];
+}
+#pragma mark - 任务删除图片
+- (void)DelteImageWithGuid:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"bf_Guid":guid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/DelteImage",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 督导会保存
+- (void)AddMobileSuperviseJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSString *jsonStr = [NSString arrConvertToJson:mobile];
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"organizeId":organizeId,
+                           @"MobileJSON":jsonStr
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/AddMobileSuperviseJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取督导会信息
+- (void)GetMobileSuperviseJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"MobileSupervise_ProjectID":planId,
+                           @"MobileSupervise_CreateuserId":createuserId,
+                           @"MobileSupervise_Unittime":unittime
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMobileSuperviseJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 质量安全保存
+- (void)AddMobileSafeJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSString *jsonStr = [NSString arrConvertToJson:mobile];
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"organizeId":organizeId,
+                           @"MobileJSON":jsonStr
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/AddMobileSafeJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取质量安全信息
+- (void)GetMobileSafeJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"MobileSafe_ProjectID":planId,
+                           @"MobileSafe_CreateuserId":createuserId,
+                           @"MobileSafe_Unittime":unittime
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMobileSafeJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取人员清单(organizeId有值为人员列表 其它值不传 则没有累计数据)
+- (void)GetMobileUserWithOrganizeId:(NSString *)organizeId andMobileUserDetial_ProjectID:(NSString *)planID andMobile_UserType:(NSString *)usertype andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId,
+                           @"MobileUserDetial_ProjectID":planID,
+                           @"Mobile_UserType":usertype
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMobileUser",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+#pragma mark - 现场人员保存
+- (void)AddMobileUserJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSString *jsonStr = [NSString arrConvertToJson:mobile];
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"organizeId":organizeId,
+                           @"MobileJSON":jsonStr
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/AddMobileUserJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取现场人员信息
+- (void)GetMobileUserJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"MobileUserDetial_Unittime":unittime,
+                           @"MobileUserDetial_ProjectID":planId,
+                           @"MobileUserDetial_createuserid":createuserId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMobileUserJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取现场人员扫描信息
+- (void)GetFillUserInfoWithID:(NSString *)guid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"id":guid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Filling/FillingUser/GetFillUserInfo",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 现场人员填报
+- (void)aEntryOrExitWithOrganizeId:(NSString *)organizeId andFillingUserId:(NSString *)fillingUserId andProgressParentId:(NSString *)progressParentId andProgressTreeId:(NSString *)progressTreeId andProgressProjectId:(NSString *)progressProjectId andAddress:(NSString *)address andType:(NSInteger)type andCallBack:(void (^) (NSURLResponse *response, id responseObject, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"OrganizeId": organizeId,
+                           @"FillingUserId": fillingUserId,
+                           @"ProgressParentId": progressParentId,
+                           @"ProgressTreeId": progressTreeId,
+                           @"ProgressProjectId": progressProjectId,
+                           @"Address": address,
+                           @"Token": Token,
+                           @"Type": [NSNumber numberWithInteger:type]
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Filling/FillingUserLog/EntryOrExit",BaseUrl];
+    [[PBNetworkTools sharedTools] BodyRequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取现场人员列表
+- (void)GetFillingUserLogPagedWithPageIndex:(NSString *)pageIndex andPageSize:(NSString *)pageSize  andOrganizeId:(NSString *)organizeId andProgressProjectId:(NSString *)progressProjectId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"pageIndex": pageIndex,
+                           @"pageSize": pageSize,
+                           @"organizeId": organizeId,
+                           @"progressProjectId": progressProjectId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Filling/FillingUserLog/GetFillingUserLogPaged",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取视频列表
+- (void)GetVideoWithOrganizeId:(NSString *)organizeId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId": organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Daxing/Video/GetVideo",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取机械清单(organizeId有值为机械列表 其它值不传 则没有累计数据)
+- (void)GetMaterialsWithOrganizeId:(NSString *)organizeId andMobileUserDetial_ProjectID:(NSString *)planID andMobile_UserType:(NSString *)usertype andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId,
+                           @"MobileUserDetial_ProjectID":planID,
+                           @"Mobile_UserType":usertype
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMaterials",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+#pragma mark - 现场机械保存
+- (void)AddMaterialsJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSString *jsonStr = [NSString arrConvertToJson:mobile];
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"organizeId":organizeId,
+                           @"MobileJSON":jsonStr
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/AddMaterialsJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取现场机械信息
+- (void)GetMaterialsJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"MaterialsDetial_Unittime":unittime,
+                           @"MaterialsDetial_ProjectID":planId,
+                           @"MaterialsDetial_createuserid":createuserId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMaterialsJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+#pragma mark - 获取材料清单(organizeId有值为机械列表 其它值不传 则没有累计数据)
+- (void)GetMachineWithOrganizeId:(NSString *)organizeId andMobileUserDetial_ProjectID:(NSString *)planID andMobile_UserType:(NSString *)usertype andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId":organizeId,
+                           @"MaterialsDetial_ProjectID":planID,
+                           @"Machine_Name":usertype
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMachine",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+
+#pragma mark - 现场材料保存
+- (void)AddMachineJSONWithOrganizeId:(NSString *)organizeId andMobile:(NSArray *)mobile andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSString *jsonStr = [NSString arrConvertToJson:mobile];
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"organizeId":organizeId,
+                           @"MobileJSON":jsonStr
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/AddMachineJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取现场材料信息
+- (void)GetMachineJSONWithUnittime:(NSString *)unittime andCreateuserId:(NSString *)createuserId andPlanID:(NSString *)planId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"MachineDetial_Unittime":unittime,
+                           @"MachineDetial_ProjectID":planId,
+                           @"MachineDetial_Createuserid":createuserId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMachineJSON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取总列表
+- (void)GetMobilePASONWithOrganizeId:(NSString *)organizeId andMobilePA_ProjectID:(NSString *)planId andMobilePA_state:(NSString *)state AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"MobilePA_ProjectID": planId,
+                           @"MobilePA_state": state,
+                           @"organizeId": organizeId,
+                           @"MobilePA_Createuserid":UserID
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetMobilePASON",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 列表数据删除
+- (void)DelMobilePAWithPlanId:(NSString *)planId andCreateuserId:(NSString *)CreateuserId andUnittime:(NSString *)Unittime andOrganizeId:(NSString *)organizeId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"Token":Token,
+                           @"ProjectID":planId,
+                           @"CreateuserId":CreateuserId,
+                           @"Unittime":Unittime,
+                           @"organizeId":organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/DelMobilePA",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取列表 填写状态
+- (void)GetSearchstateWithPlanId:(NSString *)planid andUnittime:(NSString *)Unittime andCreateuserid:(NSString *)Createuserid AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"ProjectID": planid,
+                           @"Createuserid": Createuserid,
+                           @"Unititime": Unittime
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/GetSearchstate",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 预览发布
+- (void)UpdateStatesWithPlanId:(NSString *)planid andUnittime:(NSString *)Unittime andCreateUserId:(NSString *)createUserId andStatus:(NSString *)status andOrganizeId:(NSString *)organizeId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"Token": Token,
+                           @"ProjectID": planid,
+                           @"organizeId": organizeId,
+                           @"Unittime": Unittime,
+                           @"State": status,
+                           @"CreateUserId": createUserId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/MobileNew/MobileNew/UpdateStates",BaseUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark ---------------------------------全景图--------------------------------------
+
+#pragma mark - 获取全景图集
+- (void)GetListByLabelGroupWithOrganizeId:(NSString *)organizeId andLabelId:(NSString *)labelId andPbName:(NSString *)pbName AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId": organizeId,
+                           @"labelId": labelId,
+                           @"pbName": pbName
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/File/GetListByLabelGroup",PanoramaUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取全景图label
+- (void)GetLabelListWithOrganizeId:(NSString *)organizeId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"OrganizeId": organizeId
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/Label/GetList",PanoramaUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 获取制定全景图集下所有图
+- (void)GetScenesByPbGuidWithPb_guid:(NSString *)pb_guid AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"pb_guid": pb_guid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/File/GetScenesByPbGuid",PanoramaUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+- (void)GetPanoramaSceneListWithPb_guid:(NSString *)pb_guid AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"pbGuid": pb_guid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/PanoramaScene/GetPanoramaSceneList",PanoramaUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 删除指定全景图集
+- (void)RemoveItemWithPbGuid:(NSString *)PbGuid andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"PbGuid":PbGuid
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/File/RemoveItem",PanoramaUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 删除指定全景图item
+- (void)RemoveSceneWithPbGuid:(NSString *)PbGuid andSceneName:(NSString *)scenename andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+//    NSDictionary *dict = @{
+//                           @"pbguid":PbGuid,
+//                           @"scenename":scenename
+//                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/File/RemoveScene?pbguid=%@&scenename=%@",PanoramaUrl, PbGuid, scenename];
+    [[PBNetworkTools sharedTools] RequestWithType:POST andCookie:NO andUrl:url andParams:nil andCallBack:callBack];
+}
+#pragma mark - 获取标签绑定图片列表
+- (void)GetLabelFileWithOrganizeId:(NSString *)organizeId andLabelId:(NSString *)labelId AndCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    NSDictionary *dict = @{
+                           @"organizeId": organizeId,
+                           @"labelId": labelId,
+                           @"fileName": @""
+                           };
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/Label/GetLabelFile",PanoramaUrl];
+    [[PBNetworkTools sharedTools] RequestWithType:GET andCookie:NO andUrl:url andParams:dict andCallBack:callBack];
+}
+#pragma mark - 上传全景图
+- (void)UploadPanoramaImagesWithFile:(NSData *)file andfileName:(NSString *)fileName andTargetPatchGuid:(NSString *)targetPatchGuid andOrganizeId:(NSString *)organizeId andPbname:(NSString *)Pbname andLabelId:(NSString *)labelId andModelId:(NSString *)modelId andViewId:(NSString *)viewId andCallBack:(void (^) (NSURLSessionDataTask *task,id response, NSError *error))callBack {
+    
+    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
+    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSDate *newDate = [NSDate date];
+    NSString * collectDate = [formatter stringFromDate:newDate];
+    
+    NSString *guid = [NSString getUniqueStrByUUID];
+    NSString *url = [NSString stringWithFormat:@"%@/api/Home/File/UploadImages?pbguid=%@&willappend=0",PanoramaUrl, guid];
+    [[PBNetworkTools sharedTools] POST:url parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        if (targetPatchGuid) {
+            [formData appendPartWithFormData:[targetPatchGuid dataUsingEncoding:NSUTF8StringEncoding] name:@"targetPatchGuid"];
+        } else {
+            [formData appendPartWithFormData:[organizeId dataUsingEncoding:NSUTF8StringEncoding] name:@"organizeId"];
+            [formData appendPartWithFormData:[@"" dataUsingEncoding:NSUTF8StringEncoding] name:@"gisinfo"];
+            [formData appendPartWithFormData:[Pbname dataUsingEncoding:NSUTF8StringEncoding] name:@"pbname"];
+            [formData appendPartWithFormData:[labelId dataUsingEncoding:NSUTF8StringEncoding] name:@"labelId"];
+        }
+        [formData appendPartWithFormData:[collectDate dataUsingEncoding:NSUTF8StringEncoding] name:@"collectDate"];
+        if (modelId != nil && viewId != nil) {
+            [formData appendPartWithFormData:[modelId dataUsingEncoding:NSUTF8StringEncoding] name:@"ModelId"];
+            [formData appendPartWithFormData:[viewId dataUsingEncoding:NSUTF8StringEncoding] name:@"ViewId"];
+        }
+        [formData appendPartWithFileData:file name:@"File0" fileName:fileName mimeType:@"image"];
+
+    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+        callBack(task,responseObject, nil);
+    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+        callBack(nil,nil, error);
+    }];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.h
new file mode 100644
index 0000000..bad7170
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.h
@@ -0,0 +1,17 @@
+//
+//  PBRefreshGifHeader.h
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/2/3.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "MJRefreshGifHeader.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PBRefreshGifHeader : MJRefreshGifHeader
+- (void)setJsonName:(NSString *)jsonName;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.m
new file mode 100644
index 0000000..8c5fb61
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/PBRefreshGifHeader.m
@@ -0,0 +1,122 @@
+//
+//  PBRefreshGifHeader.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2021/2/3.
+//  Copyright © 2021 ProBIM. All rights reserved.
+//
+
+#import "PBRefreshGifHeader.h"
+#import <AudioToolbox/AudioToolbox.h>//轻抖动
+#import <Lottie/Lottie.h>
+
+@interface PBRefreshGifHeader ()
+
+@property(nonatomic, strong) LOTAnimationView *loadingView;
+//@property(nonatomic, strong) NSString *jsonString;
+
+@end
+
+@implementation PBRefreshGifHeader
+
+- (instancetype)init {
+    if (self = [super init]) {
+        self.lastUpdatedTimeLabel.hidden = YES;
+        self.stateLabel.hidden = YES;
+        [self setupUI];
+    }
+    return self;
+}
+- (void)setupUI {
+//    self.backgroundColor = [UIColor redColor];
+    [self addSubview:self.loadingView];
+}
+- (void)setJsonName:(NSString *)jsonName {
+////    self.jsonString = jsonName;
+//    [self addSubview:self.loadingView];
+}
+
+- (LOTAnimationView *)loadingView {
+    if(_loadingView == nil) {
+        //1.加载本地json
+        _loadingView = [[LOTAnimationView alloc] init];
+        //2.加载后台给的json(url)
+        //_loadingView = [[LOTAnimationView alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]];
+        _loadingView.frame = CGRectMake(([UIScreen mainScreen].bounds.size.width / 2.0) - 15, 20, 30, 30);
+        _loadingView.loopAnimation = YES;
+        _loadingView.contentMode = UIViewContentModeScaleAspectFill;
+        _loadingView.animationSpeed = 1.0;
+        _loadingView.loopAnimation = YES;
+    }
+    return _loadingView;
+}
+
+#pragma mark - innerMethod
+
+- (void)beginRefreshing {
+    if (@available(iOS 10.0, *)) {//轻抖动
+        UIImpactFeedbackGenerator *impactLight = [[UIImpactFeedbackGenerator alloc]initWithStyle:UIImpactFeedbackStyleMedium];
+        [impactLight impactOccurred];
+    } else {
+        AudioServicesPlaySystemSound(1520);
+    }
+    [super beginRefreshing];
+}
+
+- (void)endRefreshing {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [super endRefreshing];
+    });
+}
+
+#pragma mark - 监听控件的刷新状态
+
+- (void)setState:(MJRefreshState)state {
+    MJRefreshCheckState;
+//    if(self.jsonString.length > 0) {
+        switch (state) {
+            case MJRefreshStateIdle:{//普通闲置状态
+                [self.loadingView stop];
+                [self.loadingView setAnimationNamed:@"loading_push"];
+                //self.loadingView.hidden = YES;
+                break;}
+            case MJRefreshStatePulling:{//松开就可以进行刷新的状态
+                //self.loadingView.hidden = NO;
+                break;}
+            case MJRefreshStateRefreshing:{//正在刷新中的状态
+                NSLog(@"Refreshing=====");
+                [self.loadingView setAnimationNamed:@"loading_refresh"];
+                self.loadingView.animationProgress = 0;
+                [self.loadingView play];
+                break;}
+            default:
+                break;
+        }
+//    }
+}
+
+#pragma mark - 实时监听控件 scrollViewContentOffset
+
+- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change {
+    [super scrollViewContentOffsetDidChange:change];
+//    if(self.jsonString.length > 0) {
+        CGPoint point;
+        id newVelue = [change valueForKey:NSKeyValueChangeNewKey];
+        [(NSValue *)newVelue getValue:&point];
+        
+        //id newVelue1 = [change objectForKey:NSKeyValueChangeNewKey];
+        //CGPoint point1 = ((NSValue *)newVelue1).CGPointValue;//可以取值
+        
+        //id newVelue2 = [change objectForKey:@"new"];
+        //CGPoint point2 = *((__bridge CGPoint *)(newVelue2));//无法取到值
+    NSLog(@"=================%f",point.y);
+    self.loadingView.hidden = !(self.pullingPercent);
+    CGFloat progress = point.y/ ([UIScreen mainScreen].bounds.size.height / 10.0);
+    if(self.state != MJRefreshStateRefreshing) {
+        self.loadingView.animationProgress = -progress;
+    }
+        
+//    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.h
new file mode 100755
index 0000000..e5d88e5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.h
@@ -0,0 +1,27 @@
+//
+//  SDBrowserImageView.h
+//  SDPhotoBrowser
+//
+//  Created by aier on 15-2-6.
+//  Copyright (c) 2015年 GSD. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "SDWaitingView.h"
+
+
+@interface SDBrowserImageView : UIImageView <UIGestureRecognizerDelegate>
+
+@property (nonatomic, assign) CGFloat progress;
+@property (nonatomic, assign, readonly) BOOL isScaled;
+@property (nonatomic, assign) BOOL hasLoadedImage;
+
+- (void)eliminateScale; // 清除缩放
+
+- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder;
+
+- (void)doubleTapToZommWithScale:(CGFloat)scale;
+
+- (void)clear;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.m
new file mode 100755
index 0000000..158a831
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDBrowserImageView.m
@@ -0,0 +1,236 @@
+//
+//  SDBrowserImageView.m
+//  SDPhotoBrowser
+//
+//  Created by aier on 15-2-6.
+//  Copyright (c) 2015年 GSD. All rights reserved.
+//
+
+#import "SDBrowserImageView.h"
+#import "UIImageView+WebCache.h"
+#import "SDPhotoBrowserConfig.h"
+
+@implementation SDBrowserImageView
+{
+    __weak SDWaitingView *_waitingView;
+    BOOL _didCheckSize;
+    UIScrollView *_scroll;
+    UIImageView *_scrollImageView;
+    UIScrollView *_zoomingScroolView;
+    UIImageView *_zoomingImageView;
+    CGFloat _totalScale;
+}
+
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.userInteractionEnabled = YES;
+        self.contentMode = UIViewContentModeScaleAspectFit;
+        _totalScale = 1.0;
+        
+        // 捏合手势缩放图片
+        UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(zoomImage:)];
+        pinch.delegate = self;
+        [self addGestureRecognizer:pinch];
+        
+
+    
+    }
+    return self;
+}
+
+- (BOOL)isScaled
+{
+    return  1.0 != _totalScale;
+}
+
+- (void)layoutSubviews
+{
+    [super layoutSubviews];
+    _waitingView.center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
+    
+    CGSize imageSize = self.image.size;
+    
+    if (self.bounds.size.width * (imageSize.height / imageSize.width) > self.bounds.size.height) {
+        if (!_scroll) {
+            UIScrollView *scroll = [[UIScrollView alloc] init];
+            scroll.backgroundColor = [UIColor whiteColor];
+            UIImageView *imageView = [[UIImageView alloc] init];
+            imageView.image = self.image;
+            _scrollImageView = imageView;
+            [scroll addSubview:imageView];
+            scroll.backgroundColor = SDPhotoBrowserBackgrounColor;
+            _scroll = scroll;
+            [self addSubview:scroll];
+            if (_waitingView) {
+                [self bringSubviewToFront:_waitingView];
+            }
+        }
+        _scroll.frame = self.bounds;
+
+        CGFloat imageViewH = self.bounds.size.width * (imageSize.height / imageSize.width);
+
+        _scrollImageView.bounds = CGRectMake(0, 0, _scroll.frame.size.width, imageViewH);
+        _scrollImageView.center = CGPointMake(_scroll.frame.size.width * 0.5, _scrollImageView.frame.size.height * 0.5);
+        _scroll.contentSize = CGSizeMake(0, _scrollImageView.bounds.size.height);
+        
+    } else {
+        if (_scroll) [_scroll removeFromSuperview]; // 防止旋转时适配的scrollView的影响
+    }
+    
+}
+
+
+
+- (void)setProgress:(CGFloat)progress
+{
+    _progress = progress;
+    _waitingView.progress = progress;
+
+}
+
+- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
+{
+    SDWaitingView *waiting = [[SDWaitingView alloc] init];
+    waiting.bounds = CGRectMake(0, 0, 100, 100);
+    waiting.mode = SDWaitingViewProgressMode;
+    _waitingView = waiting;
+    [self addSubview:waiting];
+    
+    
+    __weak SDBrowserImageView *imageViewWeak = self;
+   
+    [self sd_setImageWithURL:url placeholderImage:placeholder options:SDWebImageRetryFailed progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
+        imageViewWeak.progress = (CGFloat)receivedSize / expectedSize;
+        
+    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
+        [imageViewWeak removeWaitingView];
+        
+        
+        if (error) {
+            UILabel *label = [[UILabel alloc] init];
+            label.bounds = CGRectMake(0, 0, 160, 30);
+            label.center = CGPointMake(imageViewWeak.bounds.size.width * 0.5, imageViewWeak.bounds.size.height * 0.5);
+            label.text = @"图片加载失败";
+            label.font = [UIFont systemFontOfSize:16];
+            label.textColor = [UIColor whiteColor];
+            label.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.8];
+            label.layer.cornerRadius = 5;
+            label.clipsToBounds = YES;
+            label.textAlignment = NSTextAlignmentCenter;
+            [imageViewWeak addSubview:label];
+        } else {
+            _scrollImageView.image = image;
+            [_scrollImageView setNeedsDisplay];
+        }
+   
+    }];
+}
+
+- (void)zoomImage:(UIPinchGestureRecognizer *)recognizer
+{
+    [self prepareForImageViewScaling];
+    CGFloat scale = recognizer.scale;
+    CGFloat temp = _totalScale + (scale - 1);
+    [self setTotalScale:temp];
+    recognizer.scale = 1.0;
+}
+
+- (void)setTotalScale:(CGFloat)totalScale
+{
+    if ((_totalScale < 0.5 && totalScale < _totalScale) || (_totalScale > 2.0 && totalScale > _totalScale)) return; // 最大缩放 2倍,最小0.5倍
+    
+    [self zoomWithScale:totalScale];
+}
+
+- (void)zoomWithScale:(CGFloat)scale
+{
+    _totalScale = scale;
+    
+    _zoomingImageView.transform = CGAffineTransformMakeScale(scale, scale);
+    
+    if (scale > 1) {
+        CGFloat contentW = _zoomingImageView.frame.size.width;
+        CGFloat contentH = MAX(_zoomingImageView.frame.size.height, self.frame.size.height);
+        
+        _zoomingImageView.center = CGPointMake(contentW * 0.5, contentH * 0.5);
+        _zoomingScroolView.contentSize = CGSizeMake(contentW, contentH);
+
+        
+        CGPoint offset = _zoomingScroolView.contentOffset;
+        offset.x = (contentW - _zoomingScroolView.frame.size.width) * 0.5;
+//        offset.y = (contentH - _zoomingImageView.frame.size.height) * 0.5;
+        _zoomingScroolView.contentOffset = offset;
+        
+    } else {
+        _zoomingScroolView.contentSize = _zoomingScroolView.frame.size;
+        _zoomingScroolView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
+        _zoomingImageView.center = _zoomingScroolView.center;
+    }
+}
+
+- (void)doubleTapToZommWithScale:(CGFloat)scale
+{
+    [self prepareForImageViewScaling];
+    [UIView animateWithDuration:0.5 animations:^{
+        [self zoomWithScale:scale];
+    } completion:^(BOOL finished) {
+        if (scale == 1) {
+            [self clear];
+        }
+    }];
+}
+
+- (void)prepareForImageViewScaling
+{
+    if (!_zoomingScroolView) {
+        _zoomingScroolView = [[UIScrollView alloc] initWithFrame:self.bounds];
+        _zoomingScroolView.backgroundColor = SDPhotoBrowserBackgrounColor;
+        _zoomingScroolView.contentSize = self.bounds.size;
+        UIImageView *zoomingImageView = [[UIImageView alloc] initWithImage:self.image];
+        CGSize imageSize = zoomingImageView.image.size;
+        CGFloat imageViewH = self.bounds.size.height;
+        if (imageSize.width > 0) {
+            imageViewH = self.bounds.size.width * (imageSize.height / imageSize.width);
+        }
+        zoomingImageView.bounds = CGRectMake(0, 0, self.bounds.size.width, imageViewH);
+        zoomingImageView.center = _zoomingScroolView.center;
+        zoomingImageView.contentMode = UIViewContentModeScaleAspectFit;
+        _zoomingImageView = zoomingImageView;
+        [_zoomingScroolView addSubview:zoomingImageView];
+        [self addSubview:_zoomingScroolView];
+    }
+}
+
+- (void)scaleImage:(CGFloat)scale
+{
+    [self prepareForImageViewScaling];
+    [self setTotalScale:scale];
+}
+
+// 清除缩放
+- (void)eliminateScale
+{
+    [self clear];
+    _totalScale = 1.0;
+}
+
+- (void)clear
+{
+    [_zoomingScroolView removeFromSuperview];
+    _zoomingScroolView = nil;
+    _zoomingImageView = nil;
+
+}
+
+- (void)removeWaitingView
+{
+    [_waitingView removeFromSuperview];
+}
+
+
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.h
new file mode 100755
index 0000000..9fe04fe
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.h
@@ -0,0 +1,37 @@
+//
+//  SDPhotoBrowser.h
+//  photobrowser
+//
+//  Created by aier on 15-2-3.
+//  Copyright (c) 2015年 aier. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+
+@class SDButton, SDPhotoBrowser;
+
+@protocol SDPhotoBrowserDelegate <NSObject>
+
+@required
+
+- (UIImage *)photoBrowser:(SDPhotoBrowser *)browser placeholderImageForIndex:(NSInteger)index;
+
+@optional
+
+- (NSURL *)photoBrowser:(SDPhotoBrowser *)browser highQualityImageURLForIndex:(NSInteger)index;
+
+@end
+
+
+@interface SDPhotoBrowser : UIView <UIScrollViewDelegate>
+
+@property (nonatomic, weak) UIView *sourceImagesContainerView;
+@property (nonatomic, assign) NSInteger currentImageIndex;
+@property (nonatomic, assign) NSInteger imageCount;
+
+@property (nonatomic, weak) id<SDPhotoBrowserDelegate> delegate;
+
+- (void)show;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.m
new file mode 100755
index 0000000..1a420e2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowser.m
@@ -0,0 +1,364 @@
+//
+//  SDPhotoBrowser.m
+//  photobrowser
+//
+//  Created by aier on 15-2-3.
+//  Copyright (c) 2015年 aier. All rights reserved.
+//
+
+#import "SDPhotoBrowser.h"
+#import "UIImageView+WebCache.h"
+#import "SDBrowserImageView.h"
+
+ 
+//  ============在这里方便配置样式相关设置===========
+
+//                      ||
+//                      ||
+//                      ||
+//                     \\//
+//                      \/
+
+#import "SDPhotoBrowserConfig.h"
+
+//  =============================================
+
+@implementation SDPhotoBrowser 
+{
+    UIScrollView *_scrollView;
+    BOOL _hasShowedFistView;
+    UILabel *_indexLabel;
+    UIButton *_saveButton;
+    UIActivityIndicatorView *_indicatorView;
+    BOOL _willDisappear;
+}
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = SDPhotoBrowserBackgrounColor;
+    }
+    return self;
+}
+
+
+- (void)didMoveToSuperview
+{
+    [self setupScrollView];
+    
+    [self setupToolbars];
+}
+
+- (void)dealloc
+{
+    [[UIApplication sharedApplication].keyWindow removeObserver:self forKeyPath:@"frame"];
+}
+
+- (void)setupToolbars
+{
+    // 1. 序标
+    UILabel *indexLabel = [[UILabel alloc] init];
+    indexLabel.bounds = CGRectMake(0, 0, 80, 30);
+    indexLabel.textAlignment = NSTextAlignmentCenter;
+    indexLabel.textColor = [UIColor whiteColor];
+    indexLabel.font = [UIFont boldSystemFontOfSize:20];
+    indexLabel.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
+    indexLabel.layer.cornerRadius = indexLabel.bounds.size.height * 0.5;
+    indexLabel.clipsToBounds = YES;
+    if (self.imageCount > 1) {
+        indexLabel.text = [NSString stringWithFormat:@"1/%ld", (long)self.imageCount];
+    }
+    _indexLabel = indexLabel;
+    [self addSubview:indexLabel];
+    
+    // 2.保存按钮
+    UIButton *saveButton = [[UIButton alloc] init];
+    [saveButton setTitle:@"保存" forState:UIControlStateNormal];
+    [saveButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
+    saveButton.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f];
+    saveButton.layer.cornerRadius = 5;
+    saveButton.clipsToBounds = YES;
+    [saveButton addTarget:self action:@selector(saveImage) forControlEvents:UIControlEventTouchUpInside];
+    _saveButton = saveButton;
+    [self addSubview:saveButton];
+}
+
+- (void)saveImage
+{
+    int index = _scrollView.contentOffset.x / _scrollView.bounds.size.width;
+    UIImageView *currentImageView = _scrollView.subviews[index];
+    
+    UIImageWriteToSavedPhotosAlbum(currentImageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
+    
+    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] init];
+    indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
+    indicator.center = self.center;
+    _indicatorView = indicator;
+    [[UIApplication sharedApplication].keyWindow addSubview:indicator];
+    [indicator startAnimating];
+}
+
+- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo;
+{
+    [_indicatorView removeFromSuperview];
+    
+    UILabel *label = [[UILabel alloc] init];
+    label.textColor = [UIColor whiteColor];
+    label.backgroundColor = [UIColor colorWithRed:0.1f green:0.1f blue:0.1f alpha:0.90f];
+    label.layer.cornerRadius = 5;
+    label.clipsToBounds = YES;
+    label.bounds = CGRectMake(0, 0, 150, 30);
+    label.center = self.center;
+    label.textAlignment = NSTextAlignmentCenter;
+    label.font = [UIFont boldSystemFontOfSize:17];
+    [[UIApplication sharedApplication].keyWindow addSubview:label];
+    [[UIApplication sharedApplication].keyWindow bringSubviewToFront:label];
+    if (error) {
+        label.text = SDPhotoBrowserSaveImageFailText;
+    }   else {
+        label.text = SDPhotoBrowserSaveImageSuccessText;
+    }
+    [label performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:1.0];
+}
+
+- (void)setupScrollView
+{
+    _scrollView = [[UIScrollView alloc] init];
+    _scrollView.delegate = self;
+    _scrollView.showsHorizontalScrollIndicator = NO;
+    _scrollView.showsVerticalScrollIndicator = NO;
+    _scrollView.pagingEnabled = YES;
+    [self addSubview:_scrollView];
+    
+    for (int i = 0; i < self.imageCount; i++) {
+        SDBrowserImageView *imageView = [[SDBrowserImageView alloc] init];
+        imageView.tag = i;
+
+        // 单击图片
+        UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(photoClick:)];
+        
+        // 双击放大图片
+        UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageViewDoubleTaped:)];
+        doubleTap.numberOfTapsRequired = 2;
+        
+        [singleTap requireGestureRecognizerToFail:doubleTap];
+        
+        [imageView addGestureRecognizer:singleTap];
+        [imageView addGestureRecognizer:doubleTap];
+        [_scrollView addSubview:imageView];
+    }
+    
+    [self setupImageOfImageViewForIndex:self.currentImageIndex];
+    
+}
+
+// 加载图片
+- (void)setupImageOfImageViewForIndex:(NSInteger)index
+{
+    SDBrowserImageView *imageView = _scrollView.subviews[index];
+    self.currentImageIndex = index;
+    if (imageView.hasLoadedImage) return;
+    if ([self highQualityImageURLForIndex:index]) {
+        [imageView setImageWithURL:[self highQualityImageURLForIndex:index] placeholderImage:[self placeholderImageForIndex:index]];
+    } else {
+        imageView.image = [self placeholderImageForIndex:index];
+    }
+    imageView.hasLoadedImage = YES;
+}
+
+- (void)photoClick:(UITapGestureRecognizer *)recognizer
+{
+    _scrollView.hidden = YES;
+    _willDisappear = YES;
+    
+    SDBrowserImageView *currentImageView = (SDBrowserImageView *)recognizer.view;
+    NSInteger currentIndex = currentImageView.tag;
+    
+    UIView *sourceView = nil;
+    if ([self.sourceImagesContainerView isKindOfClass:UICollectionView.class]) {
+        UICollectionView *view = (UICollectionView *)self.sourceImagesContainerView;
+        NSIndexPath *path = [NSIndexPath indexPathForItem:currentIndex inSection:0];
+        sourceView = [view cellForItemAtIndexPath:path];
+    }else {
+        sourceView = self.sourceImagesContainerView.subviews[currentIndex];
+    }
+    
+    
+    
+    CGRect targetTemp = [self.sourceImagesContainerView convertRect:sourceView.frame toView:self];
+    
+    UIImageView *tempView = [[UIImageView alloc] init];
+    tempView.contentMode = sourceView.contentMode;
+    tempView.clipsToBounds = YES;
+    tempView.image = currentImageView.image;
+    CGFloat h = (self.bounds.size.width / currentImageView.image.size.width) * currentImageView.image.size.height;
+    
+    if (!currentImageView.image) { // 防止 因imageview的image加载失败 导致 崩溃
+        h = self.bounds.size.height;
+    }
+    
+    tempView.bounds = CGRectMake(0, 0, self.bounds.size.width, h);
+    tempView.center = self.center;
+    
+    [self addSubview:tempView];
+
+    _saveButton.hidden = YES;
+    
+    [UIView animateWithDuration:SDPhotoBrowserHideImageAnimationDuration animations:^{
+        tempView.frame = targetTemp;
+        self.backgroundColor = [UIColor clearColor];
+        _indexLabel.alpha = 0.1;
+    } completion:^(BOOL finished) {
+        [self removeFromSuperview];
+    }];
+}
+
+- (void)imageViewDoubleTaped:(UITapGestureRecognizer *)recognizer
+{
+    SDBrowserImageView *imageView = (SDBrowserImageView *)recognizer.view;
+    CGFloat scale;
+    if (imageView.isScaled) {
+        scale = 1.0;
+    } else {
+        scale = 2.0;
+    }
+    
+    SDBrowserImageView *view = (SDBrowserImageView *)recognizer.view;
+
+    [view doubleTapToZommWithScale:scale];
+}
+
+- (void)layoutSubviews
+{
+    [super layoutSubviews];
+    
+    CGRect rect = self.bounds;
+    rect.size.width += SDPhotoBrowserImageViewMargin * 2;
+    
+    _scrollView.bounds = rect;
+    _scrollView.center = self.center;
+    
+    CGFloat y = 0;
+    CGFloat w = _scrollView.frame.size.width - SDPhotoBrowserImageViewMargin * 2;
+    CGFloat h = _scrollView.frame.size.height;
+    
+    
+    
+    [_scrollView.subviews enumerateObjectsUsingBlock:^(SDBrowserImageView *obj, NSUInteger idx, BOOL *stop) {
+        CGFloat x = SDPhotoBrowserImageViewMargin + idx * (SDPhotoBrowserImageViewMargin * 2 + w);
+        obj.frame = CGRectMake(x, y, w, h);
+    }];
+    
+    _scrollView.contentSize = CGSizeMake(_scrollView.subviews.count * _scrollView.frame.size.width, 0);
+    _scrollView.contentOffset = CGPointMake(self.currentImageIndex * _scrollView.frame.size.width, 0);
+    
+    
+    if (!_hasShowedFistView) {
+        [self showFirstImage];
+    }
+    
+    _indexLabel.center = CGPointMake(self.bounds.size.width * 0.5, 35);
+    _saveButton.frame = CGRectMake(30, self.bounds.size.height - 70, 50, 25);
+}
+
+- (void)show
+{
+    UIWindow *window = [UIApplication sharedApplication].keyWindow;
+    self.frame = window.bounds;
+    [window addObserver:self forKeyPath:@"frame" options:0 context:nil];
+    [window addSubview:self];
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(UIView *)object change:(NSDictionary *)change context:(void *)context
+{
+    if ([keyPath isEqualToString:@"frame"]) {
+        self.frame = object.bounds;
+        SDBrowserImageView *currentImageView = _scrollView.subviews[_currentImageIndex];
+        if ([currentImageView isKindOfClass:[SDBrowserImageView class]]) {
+            [currentImageView clear];
+        }
+    }
+}
+
+- (void)showFirstImage
+{
+    UIView *sourceView = nil;
+    
+    if ([self.sourceImagesContainerView isKindOfClass:UICollectionView.class]) {
+        UICollectionView *view = (UICollectionView *)self.sourceImagesContainerView;
+        NSIndexPath *path = [NSIndexPath indexPathForItem:self.currentImageIndex inSection:0];
+        sourceView = [view cellForItemAtIndexPath:path];
+    }else {
+        sourceView = self.sourceImagesContainerView.subviews[self.currentImageIndex];
+    }
+    CGRect rect = [self.sourceImagesContainerView convertRect:sourceView.frame toView:self];
+    
+    UIImageView *tempView = [[UIImageView alloc] init];
+    tempView.image = [self placeholderImageForIndex:self.currentImageIndex];
+    
+    [self addSubview:tempView];
+    
+    CGRect targetTemp = [_scrollView.subviews[self.currentImageIndex] bounds];
+    
+    tempView.frame = rect;
+    tempView.contentMode = [_scrollView.subviews[self.currentImageIndex] contentMode];
+    _scrollView.hidden = YES;
+    
+    
+    [UIView animateWithDuration:SDPhotoBrowserShowImageAnimationDuration animations:^{
+        tempView.center = self.center;
+        tempView.bounds = (CGRect){CGPointZero, targetTemp.size};
+    } completion:^(BOOL finished) {
+        _hasShowedFistView = YES;
+        [tempView removeFromSuperview];
+        _scrollView.hidden = NO;
+    }];
+}
+
+- (UIImage *)placeholderImageForIndex:(NSInteger)index
+{
+    if ([self.delegate respondsToSelector:@selector(photoBrowser:placeholderImageForIndex:)]) {
+        return [self.delegate photoBrowser:self placeholderImageForIndex:index];
+    }
+    return nil;
+}
+
+- (NSURL *)highQualityImageURLForIndex:(NSInteger)index
+{
+    if ([self.delegate respondsToSelector:@selector(photoBrowser:highQualityImageURLForIndex:)]) {
+        return [self.delegate photoBrowser:self highQualityImageURLForIndex:index];
+    }
+    return nil;
+}
+
+#pragma mark - scrollview代理方法
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView
+{
+    int index = (scrollView.contentOffset.x + _scrollView.bounds.size.width * 0.5) / _scrollView.bounds.size.width;
+    
+    // 有过缩放的图片在拖动一定距离后清除缩放
+    CGFloat margin = 150;
+    CGFloat x = scrollView.contentOffset.x;
+    if ((x - index * self.bounds.size.width) > margin || (x - index * self.bounds.size.width) < - margin) {
+        SDBrowserImageView *imageView = _scrollView.subviews[index];
+        if (imageView.isScaled) {
+            [UIView animateWithDuration:0.5 animations:^{
+                imageView.transform = CGAffineTransformIdentity;
+            } completion:^(BOOL finished) {
+                [imageView eliminateScale];
+            }];
+        }
+    }
+    
+    
+    if (!_willDisappear) {
+        _indexLabel.text = [NSString stringWithFormat:@"%d/%ld", index + 1, (long)self.imageCount];
+    }
+    [self setupImageOfImageViewForIndex:index];
+}
+
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowserConfig.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowserConfig.h
new file mode 100755
index 0000000..443b558
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDPhotoBrowserConfig.h
@@ -0,0 +1,42 @@
+//
+//  SDPhotoBrowserConfig.h
+//  SDPhotoBrowser
+//
+//  Created by aier on 15-2-9.
+//  Copyright (c) 2015年 GSD. All rights reserved.
+//
+
+
+typedef enum {
+    SDWaitingViewModeLoopDiagram, // 环形
+    SDWaitingViewModePieDiagram // 饼型
+} SDWaitingViewMode;
+
+// 图片保存成功提示文字
+#define SDPhotoBrowserSaveImageSuccessText @" ^_^ 保存成功 ";
+
+// 图片保存失败提示文字
+#define SDPhotoBrowserSaveImageFailText @" >_< 保存失败 ";
+
+// browser背景颜色
+#define SDPhotoBrowserBackgrounColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.95]
+
+// browser中图片间的margin
+#define SDPhotoBrowserImageViewMargin 10
+
+// browser中显示图片动画时长
+#define SDPhotoBrowserShowImageAnimationDuration 0.4f
+
+// browser中显示图片动画时长
+#define SDPhotoBrowserHideImageAnimationDuration 0.4f
+
+// 图片下载进度指示进度显示样式(SDWaitingViewModeLoopDiagram 环形,SDWaitingViewModePieDiagram 饼型)
+#define SDWaitingViewProgressMode SDWaitingViewModeLoopDiagram
+
+// 图片下载进度指示器背景色
+#define SDWaitingViewBackgroundColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]
+
+// 图片下载进度指示器内部控件间的间距
+#define SDWaitingViewItemMargin 10
+
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.h
new file mode 100755
index 0000000..d688e1e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.h
@@ -0,0 +1,17 @@
+//
+//  SDWaitingView.h
+//  SDPhotoBrowser
+//
+//  Created by aier on 15-2-6.
+//  Copyright (c) 2015年 GSD. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "SDPhotoBrowserConfig.h"
+
+@interface SDWaitingView : UIView
+
+@property (nonatomic, assign) CGFloat progress;
+@property (nonatomic, assign) int mode;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.m
new file mode 100755
index 0000000..ca8ae36
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SDK/SDPhotoBrowserSDK/SDWaitingView.m
@@ -0,0 +1,93 @@
+//
+//  SDWaitingView.m
+//  SDPhotoBrowser
+//
+//  Created by aier on 15-2-6.
+//  Copyright (c) 2015年 GSD. All rights reserved.
+//
+
+#import "SDWaitingView.h"
+
+//// 图片下载进度指示器背景色
+//#define SDWaitingViewBackgroundColor [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7]
+//
+//// 图片下载进度指示器内部控件间的间距
+//
+//#define SDWaitingViewItemMargin 10
+
+
+@implementation SDWaitingView
+
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = SDWaitingViewBackgroundColor;
+        self.layer.cornerRadius = 5;
+        self.clipsToBounds = YES;
+        self.mode = SDWaitingViewModeLoopDiagram;
+    }
+    return self;
+}
+
+- (void)setProgress:(CGFloat)progress
+{
+    _progress = progress;
+//    NSLog(@"%@",[NSThread currentThread]);
+    //将重绘操作放在主线程,解决自动布局控制台报错的问题
+    dispatch_async(dispatch_get_main_queue(), ^{
+        
+        [self setNeedsDisplay];
+        if (progress >= 1) {
+            [self removeFromSuperview];
+        }
+    });
+}
+
+- (void)drawRect:(CGRect)rect
+{
+    CGContextRef ctx = UIGraphicsGetCurrentContext();
+    
+    CGFloat xCenter = rect.size.width * 0.5;
+    CGFloat yCenter = rect.size.height * 0.5;
+    [[UIColor whiteColor] set];
+    
+    switch (self.mode) {
+        case SDWaitingViewModePieDiagram:
+            {
+                CGFloat radius = MIN(rect.size.width * 0.5, rect.size.height * 0.5) - SDWaitingViewItemMargin;
+                
+                
+                CGFloat w = radius * 2 + SDWaitingViewItemMargin;
+                CGFloat h = w;
+                CGFloat x = (rect.size.width - w) * 0.5;
+                CGFloat y = (rect.size.height - h) * 0.5;
+                CGContextAddEllipseInRect(ctx, CGRectMake(x, y, w, h));
+                CGContextFillPath(ctx);
+                
+                [SDWaitingViewBackgroundColor set];
+                CGContextMoveToPoint(ctx, xCenter, yCenter);
+                CGContextAddLineToPoint(ctx, xCenter, 0);
+                CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.001; // 初始值
+                CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 1);
+                CGContextClosePath(ctx);
+                
+                CGContextFillPath(ctx);
+            }
+            break;
+            
+        default:
+            {
+                CGContextSetLineWidth(ctx, 15);
+                CGContextSetLineCap(ctx, kCGLineCapRound);
+                CGFloat to = - M_PI * 0.5 + self.progress * M_PI * 2 + 0.05; // 初始值0.05
+                CGFloat radius = MIN(rect.size.width, rect.size.height) * 0.5 - SDWaitingViewItemMargin;
+                CGContextAddArc(ctx, xCenter, yCenter, radius, - M_PI * 0.5, to, 0);
+                CGContextStrokePath(ctx);
+            }
+            break;
+    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.h
new file mode 100644
index 0000000..eddea0f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.h
@@ -0,0 +1,53 @@
+//
+//  SGPermission.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class SGPermission;
+
+typedef enum : NSUInteger {
+    /// 相机
+    SGPermissionTypeCamera,
+    /// 相册
+    SGPermissionTypePhoto,
+} SGPermissionType;
+
+typedef enum : NSUInteger {
+    /// 未授权
+    SGPermissionStatusNotDetermined,
+    /// 已授权
+    SGPermissionStatusAuthorized,
+    /// 已拒绝
+    SGPermissionStatusDenied,
+    /// 受限制
+    SGPermissionStatusRestricted,
+} SGPermissionStatus;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^SGPermissionBlock)(SGPermission *permission, SGPermissionStatus status);
+
+@interface SGPermission : NSObject
+/// 对象方法获取权限状态
+///
+/// @param type        权限类型
+/// @param block       权限状态回调
+- (void)initWithType:(SGPermissionType)type completion:(SGPermissionBlock)block;
+
+/// 类方法获取权限状态
+///
+/// @param type        权限类型
+/// @param block       权限状态回调
++ (void)permissionWithType:(SGPermissionType)type completion:(SGPermissionBlock)block;
+
+/// 权限状态为:SGPermissionStatusNotDetermined时,需请求授权
+- (void)request:(void (^)(BOOL granted))handler;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.m
new file mode 100644
index 0000000..8ab6dc3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermission.m
@@ -0,0 +1,50 @@
+//
+//  SGPermission.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "SGPermission.h"
+#import "SGPermissionCamera.h"
+#import "SGPermissionPhoto.h"
+
+@interface SGPermission ()
+@property (nonatomic, assign) SGPermissionType type;
+@end
+
+@implementation SGPermission
+
+- (void)initWithType:(SGPermissionType)type completion:(SGPermissionBlock)block {
+    [SGPermission permissionWithType:type completion:block];
+}
+
++ (void)permissionWithType:(SGPermissionType)type completion:(SGPermissionBlock)block {
+    SGPermission *permission = [[SGPermission alloc] init];
+    permission.type = type;
+    
+    if (type == SGPermissionTypeCamera) {
+        [SGPermissionCamera camera:^(SGPermissionCamera * _Nonnull camera, SGPermissionStatus status) {
+            if (block) {
+                block(permission, status);
+            }
+        }];
+    } else if (type == SGPermissionTypePhoto) {
+        [SGPermissionPhoto photo:^(SGPermissionPhoto * _Nonnull photos, SGPermissionStatus status) {
+            if (block) {
+                block(permission, status);
+            }
+        }];
+    }
+}
+
+- (void)request:(void (^)(BOOL))handler {
+    if (self.type == SGPermissionTypeCamera) {
+        [SGPermissionCamera request:handler];
+    } else if (self.type == SGPermissionTypePhoto) {
+        [SGPermissionPhoto request:handler];
+    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.h
new file mode 100644
index 0000000..84b4787
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.h
@@ -0,0 +1,23 @@
+//
+//  SGPermissionCamera.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "SGPermission.h"
+
+@class SGPermissionCamera;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^SGPermissionCameraBlock)(SGPermissionCamera *camera, SGPermissionStatus status);
+
+@interface SGPermissionCamera : NSObject
++ (void)camera:(SGPermissionCameraBlock)block;
++ (void)request:(void (^)(BOOL granted))handler;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.m
new file mode 100644
index 0000000..8701574
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionCamera.m
@@ -0,0 +1,51 @@
+//
+//  SGPermissionCamera.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "SGPermissionCamera.h"
+#import <AVFoundation/AVFoundation.h>
+
+@implementation SGPermissionCamera
+
++ (void)camera:(SGPermissionCameraBlock)block {
+    SGPermissionCamera *camera = [[SGPermissionCamera alloc] init];
+    
+    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+    if (status == AVAuthorizationStatusNotDetermined) {
+        if (block) {
+            block(camera, SGPermissionStatusNotDetermined);
+        }
+    } else if (status == AVAuthorizationStatusAuthorized) {
+        if (block) {
+            block(camera, SGPermissionStatusAuthorized);
+        }
+    } else if (status == AVAuthorizationStatusDenied) {
+        if (block) {
+            block(camera, SGPermissionStatusDenied);
+        }
+    } else if (status == AVAuthorizationStatusRestricted) {
+        if (block) {
+            block(camera, SGPermissionStatusRestricted);
+        }
+    }
+}
+
++ (void)request:(void (^)(BOOL granted))handler {
+    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
+        if (granted) {
+            dispatch_async(dispatch_get_main_queue(), ^{
+                handler(YES);
+            });
+        } else {
+            dispatch_async(dispatch_get_main_queue(), ^{
+                handler(NO);
+            });
+        }
+    }];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.h
new file mode 100644
index 0000000..7aefe2c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.h
@@ -0,0 +1,23 @@
+//
+//  SGPermissionPhoto.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "SGPermission.h"
+
+@class SGPermissionPhoto;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^SGPermissionPhotoBlock)(SGPermissionPhoto *photos, SGPermissionStatus status);
+
+@interface SGPermissionPhoto : NSObject
++ (void)photo:(SGPermissionPhotoBlock)block;
++ (void)request:(void (^)(BOOL granted))handler;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.m
new file mode 100644
index 0000000..06cb25c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Permission/SGPermissionPhoto.m
@@ -0,0 +1,53 @@
+//
+//  SGPermissionPhoto.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "SGPermissionPhoto.h"
+#import <Photos/Photos.h>
+
+@implementation SGPermissionPhoto
+
++ (void)photo:(SGPermissionPhotoBlock)block {
+    SGPermissionPhoto *photo = [[SGPermissionPhoto alloc] init];
+
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            if (block) {
+                block(photo, SGPermissionStatusNotDetermined);
+            }
+        });
+    } else if (status == PHAuthorizationStatusAuthorized) {
+        if (block) {
+            block(photo, SGPermissionStatusAuthorized);
+        }
+    } else if (status == PHAuthorizationStatusDenied) {
+        if (block) {
+            block(photo, SGPermissionStatusDenied);
+        }
+    } else if (status == PHAuthorizationStatusRestricted) {
+        if (block) {
+            block(photo, SGPermissionStatusRestricted);
+        }
+    }
+}
+
++ (void)request:(void (^)(BOOL granted))handler {
+    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+        if (status == PHAuthorizationStatusAuthorized) {
+            dispatch_async(dispatch_get_main_queue(), ^{
+                handler(YES);
+            });
+        } else {
+            dispatch_async(dispatch_get_main_queue(), ^{
+                handler(NO);
+            });
+        }
+    }];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.h
new file mode 100644
index 0000000..ee72a8d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.h
@@ -0,0 +1,46 @@
+//
+//  SGGenerateQRCode.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2021/7/5.
+//  Copyright © 2021 kingsic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SGGenerateQRCode : NSObject
+/// 生成二维码
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size;
+
+/// 生成二维码(自定义颜色)
+///
+/// @param data     二维码数据
+/// @param size     二维码大小
+/// @param color    二维码颜色
+/// @param backgroundColor    二维码背景颜色
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor;
+
+/// 生成带 logo 的二维码(推荐使用)
+///
+/// @param data     二维码数据
+/// @param size     二维码大小
+/// @param logoImage    logo
+/// @param ratio        logo 相对二维码的比例(取值范围 0.0 ~ 0.5f)
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size logoImage:(UIImage *)logoImage ratio:(CGFloat)ratio;
+
+/// 生成带 logo 的二维码(拓展)
+///
+/// @param data     二维码数据
+/// @param size     二维码大小
+/// @param logoImage    logo
+/// @param ratio        logo 相对二维码的比例(取值范围 0.0 ~ 0.5f)
+/// @param logoImageCornerRadius    logo 外边框圆角(取值范围 0.0 ~ 10.0f)
+/// @param logoImageBorderWidth     logo 外边框宽度(取值范围 0.0 ~ 10.0f)
+/// @param logoImageBorderColor     logo 外边框颜色
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size logoImage:(UIImage *)logoImage ratio:(CGFloat)ratio logoImageCornerRadius:(CGFloat)logoImageCornerRadius logoImageBorderWidth:(CGFloat)logoImageBorderWidth logoImageBorderColor:(UIColor *)logoImageBorderColor;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.m
new file mode 100644
index 0000000..5e191c3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGGenerateQRCode.m
@@ -0,0 +1,71 @@
+//
+//  SGGenerateQRCode.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2021/7/5.
+//  Copyright © 2021 kingsic. All rights reserved.
+//
+
+#import "SGGenerateQRCode.h"
+
+@implementation SGGenerateQRCode
+
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size {
+    return [self generateQRCodeWithData:data size:size color:[UIColor blackColor] backgroundColor:[UIColor whiteColor]];
+}
+
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size color:(UIColor *)color backgroundColor:(UIColor *)backgroundColor {
+    NSData *string_data = [data dataUsingEncoding:NSUTF8StringEncoding];
+    // 1、二维码滤镜
+    CIFilter *fileter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
+    [fileter setValue:string_data forKey:@"inputMessage"];
+    [fileter setValue:@"H" forKey:@"inputCorrectionLevel"];
+    CIImage *ciImage = fileter.outputImage;
+    // 2、颜色滤镜
+    CIFilter *color_filter = [CIFilter filterWithName:@"CIFalseColor"];
+    [color_filter setValue:ciImage forKey:@"inputImage"];
+    [color_filter setValue:[CIColor colorWithCGColor:color.CGColor] forKey:@"inputColor0"];
+    [color_filter setValue:[CIColor colorWithCGColor:backgroundColor.CGColor] forKey:@"inputColor1"];
+    // 3、生成处理
+    CIImage *outImage = color_filter.outputImage;
+    CGFloat scale = size / outImage.extent.size.width;
+    outImage = [outImage imageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)];
+    return [UIImage imageWithCIImage:outImage];
+}
+
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size logoImage:(UIImage *)logoImage ratio:(CGFloat)ratio {
+    return [self generateQRCodeWithData:data size:size logoImage:logoImage ratio:ratio logoImageCornerRadius:5 logoImageBorderWidth:5 logoImageBorderColor:[UIColor whiteColor]];
+}
+
++ (UIImage *)generateQRCodeWithData:(NSString *)data size:(CGFloat)size logoImage:(UIImage *)logoImage ratio:(CGFloat)ratio logoImageCornerRadius:(CGFloat)logoImageCornerRadius logoImageBorderWidth:(CGFloat)logoImageBorderWidth logoImageBorderColor:(UIColor *)logoImageBorderColor {
+    UIImage *image = [self generateQRCodeWithData:data size:size color:[UIColor blackColor] backgroundColor:[UIColor whiteColor]];
+    if (logoImage == nil) return image;
+    if (ratio < 0.0 || ratio > 0.5) {
+        ratio = 0.25;
+    }
+    CGFloat logoImageW = ratio * size;
+    CGFloat logoImageH = logoImageW;
+    CGFloat logoImageX = 0.5 * (image.size.width - logoImageW);
+    CGFloat logoImageY = 0.5 * (image.size.height - logoImageH);
+    CGRect logoImageRect = CGRectMake(logoImageX, logoImageY, logoImageW, logoImageH);
+    // 绘制logo
+    UIGraphicsBeginImageContextWithOptions(image.size, false, [UIScreen mainScreen].scale);
+    [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
+    if (logoImageCornerRadius < 0.0 || logoImageCornerRadius > 10) {
+        logoImageCornerRadius = 5;
+    }
+    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:logoImageRect cornerRadius:logoImageCornerRadius];
+    if (logoImageBorderWidth < 0.0 || logoImageBorderWidth > 10) {
+        logoImageBorderWidth = 5;
+    }
+    path.lineWidth = logoImageBorderWidth;
+    [logoImageBorderColor setStroke];
+    [path stroke];
+    [path addClip];
+    [logoImage drawInRect:logoImageRect];
+    UIImage *QRCodeImage = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    return QRCodeImage;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.h
new file mode 100644
index 0000000..7b4f94c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.h
@@ -0,0 +1,49 @@
+//
+//  SGScanCode.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2016/8/16.
+//  Copyright © 2016年 kingsic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "SGScanCodeDelegate.h"
+
+@interface SGScanCode : NSObject
+/// 类方法创建
++ (instancetype)scanCode;
+
+/// 预览视图,必须设置(传外界控制器视图)
+@property (nonatomic, strong) UIView *preview;
+
+/// 扫描区域,以屏幕右上角为坐标原点,取值范围:0~1,默认为整个屏幕
+@property (nonatomic, assign) CGRect rectOfInterest;
+
+/// 扫描二维码数据代理
+@property (nonatomic, weak) id<SGScanCodeDelegate> delegate;
+
+/// 采样缓冲区代理
+@property (nonatomic, weak) id<SGScanCodeSampleBufferDelegate> sampleBufferDelegate;
+
+
+/// 读取图片中的二维码
+///
+/// @param image            图片
+/// @param completion       回调方法,读取成功时,回调参数 result 等于二维码数据,否则等于 nil
+- (void)readQRCode:(UIImage *)image completion:(void (^)(NSString *result))completion;
+
+/// 设置视频缩放因子(捕获内容)
+- (void)setVideoZoomFactor:(CGFloat)factor;
+
+/// 检测后置摄像头是否可用
+- (BOOL)checkCameraDeviceRearAvailable;
+
+/// 开启扫描
+- (void)startRunning;
+/// 停止扫描
+- (void)stopRunning;
+
+/// 播放音效
+- (void)playSoundEffect:(NSString *)name;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.m
new file mode 100644
index 0000000..d4a4063
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCode.m
@@ -0,0 +1,280 @@
+//
+//  SGScanCode.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2016/8/16.
+//  Copyright © 2016年 kingsic. All rights reserved.
+//
+
+#import "SGScanCode.h"
+#import <AVFoundation/AVFoundation.h>
+#import "SGSoundEffect.h"
+#import "SGQRCodeLog.h"
+
+@interface SGScanCode () <AVCaptureMetadataOutputObjectsDelegate, AVCaptureVideoDataOutputSampleBufferDelegate>
+{
+    SGSoundEffect *soundEffect;
+}
+@property (nonatomic, strong) AVCaptureDevice *device;
+@property (nonatomic, strong) AVCaptureDeviceInput *deviceInput;
+@property (nonatomic, strong) AVCaptureMetadataOutput *metadataOutput;
+@property (nonatomic, strong) AVCaptureVideoDataOutput *videoDataOutput;
+@property (nonatomic, strong) AVCaptureSession *session;
+@property (nonatomic, strong) NSArray *metadataObjectTypes;
+@property (nonatomic, strong) AVCaptureVideoPreviewLayer *videoPreviewLayer;
+@property (nonatomic, strong) dispatch_queue_t captureQueue;
+@end
+
+@implementation SGScanCode
+
+- (void)dealloc {
+    if ([SGQRCodeLog sharedQRCodeLog].log) {
+        NSLog(@"SGScanCode - - dealloc");
+    }
+}
+
++ (instancetype)scanCode {
+    return [[self alloc] init];
+}
+
+- (instancetype)init {
+    if ([super init]) {
+        self.captureQueue = dispatch_queue_create("com.SGQRCode.captureQueue", DISPATCH_QUEUE_CONCURRENT);
+        
+        /// 将设备输入对象添加到会话对象中
+        if ([self.session canAddInput:self.deviceInput]) {
+            [self.session addInput:self.deviceInput];
+        }
+        
+    }
+    return self;
+}
+
+
+#pragma mark - - .h公开的属性
+- (void)setPreview:(UIView *)preview {
+    _preview = preview;
+    [preview.layer insertSublayer:self.videoPreviewLayer atIndex:0];
+}
+
+- (void)setDelegate:(id<SGScanCodeDelegate>)delegate {
+    _delegate = delegate;
+    
+    /// 将元数据输出对象添加到会话对象中
+    if ([_session canAddOutput:self.metadataOutput]) {
+        [_session addOutput:self.metadataOutput];
+    }
+    
+    /// 元数据输出对象的二维码识数据别类型
+    _metadataOutput.metadataObjectTypes = self.metadataObjectTypes;
+}
+
+- (void)setSampleBufferDelegate:(id<SGScanCodeSampleBufferDelegate>)sampleBufferDelegate {
+    _sampleBufferDelegate = sampleBufferDelegate;
+    
+    /// 添加捕获输出流到会话对象;构成识了别光线强弱
+    if ([_session canAddOutput:self.videoDataOutput]) {
+        [_session addOutput:self.videoDataOutput];
+    }
+}
+
+- (void)setRectOfInterest:(CGRect)rectOfInterest {
+    _rectOfInterest = rectOfInterest;
+    _metadataOutput.rectOfInterest = rectOfInterest;
+}
+
+
+#pragma mark - - .h公开的方法
+- (void)readQRCode:(UIImage *)image completion:(void (^)(NSString *result))completion {
+    CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyHigh}];
+    // 获取识别结果
+    NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
+    
+    NSString *tempMessageString = nil;
+    if (features.count > 0) {
+        CIQRCodeFeature *feature = features[0];
+        tempMessageString = feature.messageString;
+    }
+    
+    if (completion) {
+        completion(tempMessageString);
+    }
+    
+    if ([SGQRCodeLog sharedQRCodeLog].log) {
+        NSLog(@"图片中的二维码数据:%@", tempMessageString);
+    }
+}
+
+- (void)setVideoZoomFactor:(CGFloat)factor {
+    if (factor > self.device.maxAvailableVideoZoomFactor) {
+        factor = self.device.maxAvailableVideoZoomFactor;
+    } else if (factor < 1) {
+        factor = 1;
+    }
+    // 设置焦距大小
+    if ([self.device lockForConfiguration:nil]) {
+        [self.device rampToVideoZoomFactor:factor withRate:10];
+        [self.device unlockForConfiguration];
+    }
+}
+
+- (BOOL)checkCameraDeviceRearAvailable {
+    BOOL isRearCamera = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
+    return isRearCamera;
+}
+
+- (void)startRunning {
+    if (![self.session isRunning]) {
+        [self.session startRunning];
+    }
+}
+
+- (void)stopRunning {
+    if ([self.session isRunning]) {
+        [self.session stopRunning];
+    }
+}
+
+- (void)playSoundEffect:(NSString *)name {
+    /// 静态库 path 的获取
+    NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:nil];
+    if (!path) {
+        /// 动态库 path 的获取
+        path = [[NSBundle bundleForClass:[self class]] pathForResource:name ofType:nil];
+    }
+    
+    soundEffect = [SGSoundEffect soundEffectWithFilepath:path];
+    [soundEffect play];
+}
+
+
+#pragma mark - - 内部属性
+- (AVCaptureSession *)session {
+    if (!_session) {
+        _session = [[AVCaptureSession alloc] init];
+        _session.sessionPreset = [self sessionPreset];
+    }
+    return _session;
+}
+
+- (AVCaptureDevice *)device {
+    if (!_device) {
+        _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+    }
+    return _device;
+}
+
+- (AVCaptureDeviceInput *)deviceInput {
+    if (!_deviceInput) {
+        _deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];
+    }
+    return _deviceInput;
+}
+
+- (AVCaptureMetadataOutput *)metadataOutput {
+    if (!_metadataOutput) {
+        _metadataOutput = [[AVCaptureMetadataOutput alloc] init];
+        [_metadataOutput setMetadataObjectsDelegate:self queue:self.captureQueue];
+    }
+    return _metadataOutput;
+}
+
+- (AVCaptureVideoDataOutput *)videoDataOutput {
+    if (!_videoDataOutput) {
+        _videoDataOutput = [[AVCaptureVideoDataOutput alloc] init];
+        [_videoDataOutput setSampleBufferDelegate:self queue:self.captureQueue];
+    }
+    return _videoDataOutput;
+}
+
+- (AVCaptureVideoPreviewLayer *)videoPreviewLayer {
+    if (!_videoPreviewLayer) {
+        _videoPreviewLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
+        _videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
+        _videoPreviewLayer.frame = self.preview.frame;
+    }
+    return _videoPreviewLayer;
+}
+
+- (NSArray *)metadataObjectTypes {
+    if (!_metadataObjectTypes) {
+        _metadataObjectTypes = @[
+            AVMetadataObjectTypeUPCECode,
+            AVMetadataObjectTypeCode39Code,
+            AVMetadataObjectTypeCode39Mod43Code,
+            AVMetadataObjectTypeEAN13Code,
+            AVMetadataObjectTypeEAN8Code,
+            AVMetadataObjectTypeCode93Code,
+            AVMetadataObjectTypeCode128Code,
+            AVMetadataObjectTypePDF417Code,
+            AVMetadataObjectTypeQRCode,
+            AVMetadataObjectTypeAztecCode,
+            AVMetadataObjectTypeInterleaved2of5Code,
+            AVMetadataObjectTypeITF14Code,
+            AVMetadataObjectTypeDataMatrixCode,
+        ];
+    }
+    return _metadataObjectTypes;
+}
+
+- (NSString *)sessionPreset {
+    if ([self.device supportsAVCaptureSessionPreset:AVCaptureSessionPreset3840x2160]) {
+        return AVCaptureSessionPreset3840x2160;
+    }
+    if ([self.device supportsAVCaptureSessionPreset:AVCaptureSessionPreset1920x1080]) {
+        return AVCaptureSessionPreset1920x1080;
+    }
+    if ([self.device supportsAVCaptureSessionPreset:AVCaptureSessionPreset1280x720]) {
+        return AVCaptureSessionPreset1280x720;
+    }
+    if ([self.device supportsAVCaptureSessionPreset:AVCaptureSessionPreset640x480]) {
+        return AVCaptureSessionPreset640x480;
+    }
+    if ([self.device supportsAVCaptureSessionPreset:AVCaptureSessionPreset352x288]) {
+        return AVCaptureSessionPreset352x288;
+    }
+    if ([self.device supportsAVCaptureSessionPreset:AVCaptureSessionPresetHigh]) {
+        return AVCaptureSessionPresetHigh;
+    }
+    if ([self.device supportsAVCaptureSessionPreset:AVCaptureSessionPresetMedium]) {
+        return AVCaptureSessionPresetMedium;
+    }
+    
+    return AVCaptureSessionPresetLow;
+}
+
+#pragma mark - - AVCaptureMetadataOutputObjectsDelegate 的方法
+- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
+    if (metadataObjects != nil && metadataObjects.count > 0) {
+        AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];
+        NSString *resultString = obj.stringValue;
+
+        dispatch_async(dispatch_get_main_queue(), ^{
+            if (self.delegate && [self.delegate respondsToSelector:@selector(scanCode:result:)]) {
+                [self.delegate scanCode:self result:resultString];
+            }
+        });
+
+        if ([SGQRCodeLog sharedQRCodeLog].log) {
+            NSLog(@"扫描的二维码数据:%@", obj);
+        }
+    }
+}
+
+#pragma mark - - AVCaptureVideoDataOutputSampleBufferDelegate 的方法
+- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
+    CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL, sampleBuffer, kCMAttachmentMode_ShouldPropagate);
+    NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict];
+    CFRelease(metadataDict);
+    NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];
+    CGFloat brightnessValue = [[exifMetadata objectForKey:(NSString *)kCGImagePropertyExifBrightnessValue] floatValue];
+    
+    dispatch_async(dispatch_get_main_queue(), ^{
+        if (self.sampleBufferDelegate && [self.sampleBufferDelegate respondsToSelector:@selector(scanCode:brightness:)]) {
+            [self.sampleBufferDelegate scanCode:self brightness:brightnessValue];
+        }
+    });
+}
+
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCodeDelegate.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCodeDelegate.h
new file mode 100644
index 0000000..661bffb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/QRCode/SGScanCodeDelegate.h
@@ -0,0 +1,30 @@
+//
+//  SGScanCodeDelegate.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+@class SGScanCode;
+
+@protocol SGScanCodeDelegate <NSObject>
+/// 扫描二维码结果函数
+///
+/// @param scanCode     SGScanCode 对象
+/// @param result       扫描二维码数据
+- (void)scanCode:(SGScanCode *)scanCode result:(NSString *)result;
+
+@end
+
+
+@protocol SGScanCodeSampleBufferDelegate <NSObject>
+/// 扫描时捕获外界光线强弱函数
+///
+/// @param scanCode     SGScanCode 对象
+/// @param brightness   光线强弱值
+- (void)scanCode:(SGScanCode *)scanCode brightness:(CGFloat)brightness;
+
+@end
+
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/Root.plist b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/Root.plist
new file mode 100755
index 0000000..b1b6fea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/Root.plist
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>StringsTable</key>
+	<string>Root</string>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+			<key>Title</key>
+			<string>Group</string>
+		</dict>
+		<dict>
+			<key>Type</key>
+			<string>PSTextFieldSpecifier</string>
+			<key>Title</key>
+			<string>Name</string>
+			<key>Key</key>
+			<string>name_preference</string>
+			<key>DefaultValue</key>
+			<string></string>
+			<key>IsSecure</key>
+			<false/>
+			<key>KeyboardType</key>
+			<string>Alphabet</string>
+			<key>AutocapitalizationType</key>
+			<string>None</string>
+			<key>AutocorrectionType</key>
+			<string>No</string>
+		</dict>
+		<dict>
+			<key>Type</key>
+			<string>PSToggleSwitchSpecifier</string>
+			<key>Title</key>
+			<string>Enabled</string>
+			<key>Key</key>
+			<string>enabled_preference</string>
+			<key>DefaultValue</key>
+			<true/>
+		</dict>
+		<dict>
+			<key>Type</key>
+			<string>PSSliderSpecifier</string>
+			<key>Key</key>
+			<string>slider_preference</string>
+			<key>DefaultValue</key>
+			<real>0.5</real>
+			<key>MinimumValue</key>
+			<integer>0</integer>
+			<key>MaximumValue</key>
+			<integer>1</integer>
+			<key>MinimumValueImage</key>
+			<string></string>
+			<key>MaximumValueImage</key>
+			<string></string>
+		</dict>
+	</array>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/en.lproj/Root.strings b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/en.lproj/Root.strings
new file mode 100755
index 0000000..8cd87b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/en.lproj/Root.strings
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_end_sound.caf b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_end_sound.caf
new file mode 100755
index 0000000..4428bcc
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_end_sound.caf
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@2x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@2x.png
new file mode 100755
index 0000000..c301db7
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@3x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@3x.png
new file mode 100755
index 0000000..89b3b0e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_qq.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_qq.png
new file mode 100644
index 0000000..6b153de
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_qq.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@2x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@2x.png
new file mode 100644
index 0000000..4929bd1
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@3x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@3x.png
new file mode 100644
index 0000000..93d32eb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wb@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wc.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wc.png
new file mode 100644
index 0000000..f73eef9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.bundle/scan_scanline_wc.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.h
new file mode 100755
index 0000000..1bef63a
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCode.h
@@ -0,0 +1,19 @@
+//
+//  SGQRCode.h
+//  Version 4.1.0
+//  https://github.com/kingsic/SGQRCode
+//
+//  Created by kingsic on 2016/8/16.
+//  Copyright © 2016年 kingsic. All rights reserved.
+//
+
+#import "SGQRCodeLog.h"
+#import "SGGenerateQRCode.h"
+#import "SGScanCode.h"
+#import "SGScanCodeDelegate.h"
+#import "SGScanView.h"
+#import "SGScanViewConfigure.h"
+#import "SGPermission.h"
+#import "SGSoundEffect.h"
+#import "SGTorch.h"
+#import "SGWeakProxy.h"
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.h
new file mode 100644
index 0000000..87293b5
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.h
@@ -0,0 +1,24 @@
+//
+//  SGQRCodeLog.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/15.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SGQRCodeLog : NSObject
+/// 单例创建 SGQRCodeLog
++ (instancetype)sharedQRCodeLog;
+
+/// 是否需要打印日志信息,默认为:NO
+///
+/// SGScanCode 和 SGScanView 的 dealloc 方法打印,扫描和读取图片中的二维码信息打印
+@property (nonatomic, assign) BOOL log;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.m
new file mode 100644
index 0000000..938e6f0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SGQRCodeLog.m
@@ -0,0 +1,37 @@
+//
+//  SGQRCodeLog.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/15.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "SGQRCodeLog.h"
+
+static SGQRCodeLog *singleton = nil;
+
+@implementation SGQRCodeLog
+
++ (instancetype)sharedQRCodeLog {
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        if (singleton == nil) {
+            singleton = [[super allocWithZone:NULL] init];
+        }
+    });
+    return singleton;
+}
+
++ (instancetype)allocWithZone:(struct _NSZone *)zone {
+    return [[self class] sharedQRCodeLog];
+}
+
+- (id)copyWithZone:(NSZone *)zone {
+    return [[self class] sharedQRCodeLog];
+}
+
+- (id)mutableCopyWithZone:(NSZone *)zone {
+    return [[self class] sharedQRCodeLog];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.h
new file mode 100644
index 0000000..8535c7e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.h
@@ -0,0 +1,48 @@
+//
+//  SGScanView.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2017/8/23.
+//  Copyright © 2017年 kingsic All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class SGScanViewConfigure;
+
+typedef void(^SGScanViewDoubleTapBlock)(BOOL selected);
+
+@interface SGScanView : UIView
+/// 对象方法创建 SGScanView
+///
+/// @param frame           SGScanView 的 frame
+/// @param configure       SGScanView 的配置类 SGScanViewConfigure
+- (instancetype)initWithFrame:(CGRect)frame configure:(SGScanViewConfigure *)configure;
+
+/// 类方法创建 SGScanView
+///
+/// @param frame           SGScanView 的 frame
+/// @param configure       SGScanView 的配置类 SGScanViewConfigure
++ (instancetype)scanViewWithFrame:(CGRect)frame configure:(SGScanViewConfigure *)configure;
+
+/// 辅助扫描边框区域的frame
+/// 
+/// 默认x为:0.5 * (self.frame.size.width - w)
+/// 默认y为:0.5 * (self.frame.size.height - w)
+/// 默认width和height为:0.7 * self.frame.size.width
+@property (nonatomic, assign) CGRect borderFrame;
+
+/// 扫描区域的frame
+@property (nonatomic, assign) CGRect scanFrame;
+
+/// 双击回调方法
+@property (nonatomic, copy) SGScanViewDoubleTapBlock doubleTapBlock;
+
+
+/// 开始扫描
+- (void)startScanning;
+
+/// 停止扫描
+- (void)stopScanning;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.m
new file mode 100644
index 0000000..9a95d01
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanView.m
@@ -0,0 +1,338 @@
+//
+//  SGScanView.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2017/8/23.
+//  Copyright © 2017年 kingsic All rights reserved.
+//
+
+#import "SGScanView.h"
+#import "SGScanViewConfigure.h"
+#import "SGWeakProxy.h"
+#import "SGQRCodeLog.h"
+
+@interface SGScanView ()
+@property (nonatomic, strong) SGScanViewConfigure *configure;
+@property (nonatomic, strong) UIView *contentView;
+@property (nonatomic, strong) UIImageView *scanlineImgView;
+@property (nonatomic, strong) CADisplayLink *link;
+@property (nonatomic, assign) BOOL isTop;
+@property (nonatomic, assign) BOOL isSelected;
+@end
+
+@implementation SGScanView
+
+- (void)dealloc {
+    if ([SGQRCodeLog sharedQRCodeLog].log) {
+        NSLog(@"SGScanView - - dealloc");
+    }
+}
+
+- (instancetype)initWithFrame:(CGRect)frame configure:(SGScanViewConfigure *)configure {
+    if (self = [super initWithFrame:frame]) {
+        self.configure = configure;
+        
+        self.backgroundColor = [UIColor clearColor];
+
+        [self initialization];
+        [self addSubview:self.contentView];
+        
+        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap_action)];
+        tap.numberOfTapsRequired = 2;
+        [self addGestureRecognizer:tap];
+    }
+    return self;
+}
+
++ (instancetype)scanViewWithFrame:(CGRect)frame configure:(SGScanViewConfigure *)configure {
+    return [[SGScanView alloc] initWithFrame:frame configure:configure];
+}
+
+- (void)initialization {
+    CGFloat w = 0.7 * self.frame.size.width;
+    CGFloat h = w;
+    CGFloat x = 0.5 * (self.frame.size.width - w);
+    CGFloat y = 0.5 * (self.frame.size.height - h);
+    _borderFrame = CGRectMake(x, y, w, h);
+    _scanFrame = CGRectMake(x, y, w, h);
+    
+    self.isTop = YES;
+}
+
+- (UIView *)contentView {
+    if (!_contentView) {
+        CGFloat x = _scanFrame.origin.x;
+        CGFloat y = _scanFrame.origin.y;
+        CGFloat w = _scanFrame.size.width;
+        CGFloat h = _scanFrame.size.height;
+        _contentView = [[UIView alloc] initWithFrame:CGRectMake(x, y, w, h)];
+        _contentView.backgroundColor = [UIColor clearColor];
+        _contentView.clipsToBounds = YES;
+    }
+    return _contentView;
+}
+
+- (UIImageView *)scanlineImgView {
+    if (!_scanlineImgView) {
+        _scanlineImgView = [[UIImageView alloc] init];
+        
+        /// 静态库 url 的获取
+        NSURL *url = [[NSBundle mainBundle] URLForResource:@"SGQRCode" withExtension:@"bundle"];
+        if (!url) {
+            /// 动态库 url 的获取
+            url = [[NSBundle bundleForClass:[self class]] URLForResource:@"SGQRCode" withExtension:@"bundle"];
+        }
+        NSBundle *bundle = [NSBundle bundleWithURL:url];
+        
+        UIImage *image = [UIImage imageNamed:self.configure.scanline inBundle:bundle compatibleWithTraitCollection:nil];
+        if (!image) {
+            image = [UIImage imageNamed:self.configure.scanline];
+        }
+        _scanlineImgView.image = image;
+        
+        if (image) {
+            [self updateScanLineFrame];
+        }
+    }
+    return _scanlineImgView;
+}
+
+- (void)tap_action {
+    if (self.isSelected) {
+        self.isSelected = NO;
+    } else {
+        self.isSelected = YES;
+    }
+    
+    if (self.doubleTapBlock) {
+        self.doubleTapBlock(self.isSelected);
+    }
+}
+
+- (void)drawRect:(CGRect)rect {
+    [super drawRect:rect];
+    
+    if (self.configure.isShowBorder == NO) {
+        return;
+    }
+    
+    /// 边框 frame
+    CGFloat borderW = self.borderFrame.size.width;
+    CGFloat borderH = self.borderFrame.size.height;
+    CGFloat borderX = self.borderFrame.origin.x;
+    CGFloat borderY = self.borderFrame.origin.y;
+    CGFloat borderLineW = self.configure.borderWidth;
+
+    /// 空白区域设置
+    [self.configure.color setFill];
+    UIRectFill(rect);
+    // 获取上下文,并设置混合模式 -> kCGBlendModeDestinationOut
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    CGContextSetBlendMode(context, kCGBlendModeDestinationOut);
+    // 设置空白区
+    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRect:CGRectMake(borderX + 0.5 * borderLineW, borderY + 0.5 *borderLineW, borderW - borderLineW, borderH - borderLineW)];
+    [bezierPath fill];
+    // 执行混合模式
+    CGContextSetBlendMode(context, kCGBlendModeNormal);
+    
+    
+    /// 边框设置
+    UIBezierPath *borderPath = [UIBezierPath bezierPathWithRect:CGRectMake(borderX, borderY, borderW, borderH)];
+    borderPath.lineCapStyle = kCGLineCapButt;
+    borderPath.lineWidth = borderLineW;
+    [self.configure.borderColor set];
+    [borderPath stroke];
+    
+    
+    CGFloat cornerLength = self.configure.cornerLength;
+    CGFloat insideExcess = fabs(0.5 * (self.configure.cornerWidth - borderLineW));
+    CGFloat outsideExcess = 0.5 * (borderLineW + self.configure.cornerWidth);
+    
+    /// 左上角小图标
+    [self leftTop:borderX borderY:borderY cornerLength:cornerLength insideExcess:insideExcess outsideExcess:outsideExcess];
+    
+    /// 左下角小图标
+    [self leftBottom:borderX borderY:borderY borderH:borderH cornerLength:cornerLength insideExcess:insideExcess outsideExcess:outsideExcess];
+    
+    /// 右上角小图标
+    [self rightTop:borderX borderY:borderY borderW:borderW cornerLength:cornerLength insideExcess:insideExcess outsideExcess:outsideExcess];
+    
+    /// 右下角小图标
+    [self rightBottom:borderX borderY:borderY borderW:borderW borderH:borderH cornerLength:cornerLength insideExcess:insideExcess outsideExcess:outsideExcess];
+}
+
+- (void)leftTop:(CGFloat)borderX borderY:(CGFloat)borderY cornerLength:(CGFloat)cornerLength insideExcess:(CGFloat) insideExcess outsideExcess:(CGFloat)outsideExcess {
+    UIBezierPath *leftTopPath = [UIBezierPath bezierPath];
+    leftTopPath.lineWidth = self.configure.cornerWidth;
+    [self.configure.cornerColor set];
+
+    if (self.configure.cornerLocation == SGCornerLoactionInside) {
+        [leftTopPath moveToPoint:CGPointMake(borderX + insideExcess, borderY + cornerLength + insideExcess)];
+        [leftTopPath addLineToPoint:CGPointMake(borderX + insideExcess, borderY + insideExcess)];
+        [leftTopPath addLineToPoint:CGPointMake(borderX + cornerLength + insideExcess, borderY + insideExcess)];
+    } else if (self.configure.cornerLocation == SGCornerLoactionOutside) {
+        [leftTopPath moveToPoint:CGPointMake(borderX - outsideExcess, borderY + cornerLength - outsideExcess)];
+        [leftTopPath addLineToPoint:CGPointMake(borderX - outsideExcess, borderY - outsideExcess)];
+        [leftTopPath addLineToPoint:CGPointMake(borderX + cornerLength - outsideExcess, borderY - outsideExcess)];
+    } else {
+        [leftTopPath moveToPoint:CGPointMake(borderX, borderY + cornerLength)];
+        [leftTopPath addLineToPoint:CGPointMake(borderX, borderY)];
+        [leftTopPath addLineToPoint:CGPointMake(borderX + cornerLength, borderY)];
+    }
+
+    [leftTopPath stroke];
+}
+
+- (void)rightTop:(CGFloat)borderX borderY:(CGFloat)borderY borderW:(CGFloat)borderW cornerLength:(CGFloat)cornerLength insideExcess:(CGFloat) insideExcess outsideExcess:(CGFloat)outsideExcess {
+    UIBezierPath *rightTopPath = [UIBezierPath bezierPath];
+    rightTopPath.lineWidth = self.configure.cornerWidth;
+    [self.configure.cornerColor set];
+    
+    if (self.configure.cornerLocation == SGCornerLoactionInside) {
+        [rightTopPath moveToPoint:CGPointMake(borderX + borderW - cornerLength - insideExcess, borderY + insideExcess)];
+        [rightTopPath addLineToPoint:CGPointMake(borderX + borderW - insideExcess, borderY + insideExcess)];
+        [rightTopPath addLineToPoint:CGPointMake(borderX + borderW - insideExcess, borderY + cornerLength + insideExcess)];
+    } else if (self.configure.cornerLocation == SGCornerLoactionOutside) {
+        [rightTopPath moveToPoint:CGPointMake(borderX + borderW - cornerLength + outsideExcess, borderY - outsideExcess)];
+        [rightTopPath addLineToPoint:CGPointMake(borderX + borderW + outsideExcess, borderY - outsideExcess)];
+        [rightTopPath addLineToPoint:CGPointMake(borderX + borderW + outsideExcess, borderY + cornerLength - outsideExcess)];
+    } else {
+        [rightTopPath moveToPoint:CGPointMake(borderX + borderW - cornerLength, borderY)];
+        [rightTopPath addLineToPoint:CGPointMake(borderX + borderW, borderY)];
+        [rightTopPath addLineToPoint:CGPointMake(borderX + borderW, borderY + cornerLength)];
+    }
+
+    [rightTopPath stroke];
+}
+
+- (void)leftBottom:(CGFloat)borderX borderY:(CGFloat)borderY borderH:(CGFloat)borderH cornerLength:(CGFloat)cornerLength insideExcess:(CGFloat) insideExcess outsideExcess:(CGFloat)outsideExcess {
+    UIBezierPath *leftBottomPath = [UIBezierPath bezierPath];
+    leftBottomPath.lineWidth = self.configure.cornerWidth;
+    [self.configure.cornerColor set];
+    
+    if (self.configure.cornerLocation == SGCornerLoactionInside) {
+        [leftBottomPath moveToPoint:CGPointMake(borderX + cornerLength + insideExcess, borderY + borderH - insideExcess)];
+        [leftBottomPath addLineToPoint:CGPointMake(borderX + insideExcess, borderY + borderH - insideExcess)];
+        [leftBottomPath addLineToPoint:CGPointMake(borderX + insideExcess, borderY + borderH - cornerLength - insideExcess)];
+    } else if (self.configure.cornerLocation == SGCornerLoactionOutside) {
+        [leftBottomPath moveToPoint:CGPointMake(borderX + cornerLength - outsideExcess, borderY + borderH + outsideExcess)];
+        [leftBottomPath addLineToPoint:CGPointMake(borderX - outsideExcess, borderY + borderH + outsideExcess)];
+        [leftBottomPath addLineToPoint:CGPointMake(borderX - outsideExcess, borderY + borderH - cornerLength + outsideExcess)];
+    } else {
+        [leftBottomPath moveToPoint:CGPointMake(borderX + cornerLength, borderY + borderH)];
+        [leftBottomPath addLineToPoint:CGPointMake(borderX, borderY + borderH)];
+        [leftBottomPath addLineToPoint:CGPointMake(borderX, borderY + borderH - cornerLength)];
+    }
+
+    [leftBottomPath stroke];
+}
+
+- (void)rightBottom:(CGFloat)borderX borderY:(CGFloat)borderY borderW:(CGFloat)borderW borderH:(CGFloat)borderH cornerLength:(CGFloat)cornerLength insideExcess:(CGFloat) insideExcess outsideExcess:(CGFloat)outsideExcess {
+    UIBezierPath *rightBottomPath = [UIBezierPath bezierPath];
+    rightBottomPath.lineWidth = self.configure.cornerWidth;
+    [self.configure.cornerColor set];
+    
+    if (self.configure.cornerLocation == SGCornerLoactionInside) {
+        [rightBottomPath moveToPoint:CGPointMake(borderX + borderW - insideExcess, borderY + borderH - cornerLength - insideExcess)];
+        [rightBottomPath addLineToPoint:CGPointMake(borderX + borderW - insideExcess, borderY + borderH - insideExcess)];
+        [rightBottomPath addLineToPoint:CGPointMake(borderX + borderW - cornerLength - insideExcess, borderY + borderH - insideExcess)];
+    } else if (self.configure.cornerLocation == SGCornerLoactionOutside) {
+        [rightBottomPath moveToPoint:CGPointMake(borderX + borderW + outsideExcess, borderY + borderH - cornerLength + outsideExcess)];
+        [rightBottomPath addLineToPoint:CGPointMake(borderX + borderW + outsideExcess, borderY + borderH + outsideExcess)];
+        [rightBottomPath addLineToPoint:CGPointMake(borderX + borderW - cornerLength + outsideExcess, borderY + borderH + outsideExcess)];
+    } else {
+        [rightBottomPath moveToPoint:CGPointMake(borderX + borderW, borderY + borderH - cornerLength)];
+        [rightBottomPath addLineToPoint:CGPointMake(borderX + borderW, borderY + borderH)];
+        [rightBottomPath addLineToPoint:CGPointMake(borderX + borderW - cornerLength, borderY + borderH)];
+    }
+
+    [rightBottomPath stroke];
+}
+
+- (void)setBorderFrame:(CGRect)borderFrame {
+    _borderFrame = borderFrame;
+}
+
+- (void)setScanFrame:(CGRect)scanFrame {
+    _scanFrame = scanFrame;
+    
+    self.contentView.frame = scanFrame;
+    
+    if (self.scanlineImgView.image) {
+        [self updateScanLineFrame];
+    }
+}
+    
+- (void)updateScanLineFrame {
+    CGFloat w = _contentView.frame.size.width;
+    CGFloat h = (w * self.scanlineImgView.image.size.height) / self.scanlineImgView.image.size.width;
+    CGFloat x = 0;
+    CGFloat y = self.configure.isFromTop ? -h : 0;
+    self.scanlineImgView.frame = CGRectMake(x, y, w, h);
+}
+
+- (void)startScanning {
+    if (self.scanlineImgView.image == nil) {
+        return;
+    }
+    
+    [self.contentView addSubview:self.scanlineImgView];
+    
+    if (self.link == nil) {
+        self.link = [CADisplayLink displayLinkWithTarget:[SGWeakProxy weakProxyWithTarget:self] selector:@selector(updateUI)];
+        [self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
+    }
+}
+
+- (void)stopScanning {
+    if (self.scanlineImgView.image == nil) {
+        return;
+    }
+    
+    // 此代码防止由于外界逻辑,可能会导致多次停止
+    if (self.link == nil) {
+        return;
+    }
+    
+    [self.scanlineImgView removeFromSuperview];
+    self.scanlineImgView = nil;
+    
+    [self.link invalidate];
+    self.link = nil;
+}
+
+- (void)updateUI {
+    CGRect frame = self.scanlineImgView.frame;
+    CGFloat contentViewHeight = CGRectGetHeight(self.contentView.frame);
+    
+    CGFloat scanlineY = self.scanlineImgView.frame.origin.y + (self.configure.isFromTop ? 0 : self.scanlineImgView.frame.size.height);
+    
+    if (self.configure.autoreverses) {
+        if (self.isTop) {
+            frame.origin.y += self.configure.scanlineStep;
+            self.scanlineImgView.frame = frame;
+            
+            if (contentViewHeight <= scanlineY) {
+                self.isTop = NO;
+            }
+        } else {
+            frame.origin.y -= self.configure.scanlineStep;
+            self.scanlineImgView.frame = frame;
+            
+            if (scanlineY <= self.scanlineImgView.frame.size.height) {
+                self.isTop = YES;
+            }
+        }
+    } else {
+        if (contentViewHeight <= scanlineY) {
+            CGFloat scanlineH = self.scanlineImgView.frame.size.height;
+            frame.origin.y = -scanlineH + (self.configure.isFromTop ? 0 : scanlineH);
+            self.scanlineImgView.frame = frame;
+        } else {
+            frame.origin.y += self.configure.scanlineStep;
+            self.scanlineImgView.frame = frame;
+        }
+    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.h
new file mode 100644
index 0000000..a37ed46
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.h
@@ -0,0 +1,64 @@
+//
+//  SGScanViewConfigure.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/9.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef enum : NSUInteger {
+    /// 默认与边框线同中心点
+    SGCornerLoactionDefault,
+    /// 在边框线内部
+    SGCornerLoactionInside,
+    /// 在边框线外部
+    SGCornerLoactionOutside
+} SGCornerLoaction;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SGScanViewConfigure : NSObject
+/// 类方法创建
++ (instancetype)configure;
+
+/// 扫描线
+@property (nonatomic, copy) NSString *scanline;
+
+/// 扫描线每次移动的步长,默认为:3.5f
+@property (nonatomic, assign) CGFloat scanlineStep;
+
+/// 扫描线是否执行逆动画,默认为:NO
+@property (nonatomic, assign) BOOL autoreverses;
+
+/// 扫描线是否从扫描框顶部开始扫描,默认为:NO
+@property (nonatomic, assign) BOOL isFromTop;
+
+/// SGScanView 背景色,默认为:[[UIColor blackColor] colorWithAlphaComponent:0.5]
+@property (nonatomic, strong) UIColor *color;
+
+/// 是否需要辅助扫描框,默认为:NO
+@property (nonatomic, assign) BOOL isShowBorder;
+
+/// 辅助扫描框的颜色,默认为:[UIColor whiteColor]
+@property (nonatomic, strong) UIColor *borderColor;
+
+/// 辅助扫描框的宽度,默认为:0.2f
+@property (nonatomic, assign) CGFloat borderWidth;
+
+/// 辅助扫描边角位置,默认为:SGCornerLoactionDefault
+@property (nonatomic, assign) SGCornerLoaction cornerLocation;
+
+/// 辅助扫描边角颜色,默认为:[UIColor greenColor]
+@property (nonatomic, strong) UIColor *cornerColor;
+
+/// 辅助扫描边角宽度,默认为:2.0f
+@property (nonatomic, assign) CGFloat cornerWidth;
+
+/// 辅助扫描边角长度,默认为:20.0f
+@property (nonatomic, assign) CGFloat cornerLength;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.m
new file mode 100644
index 0000000..5d35101
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/ScanView/SGScanViewConfigure.m
@@ -0,0 +1,87 @@
+//
+//  SGScanViewConfigure.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/9.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "SGScanViewConfigure.h"
+
+@implementation SGScanViewConfigure
+
+- (instancetype)init {
+    if (self = [super init]) {
+        _isShowBorder = NO;
+    }
+    return self;
+}
+
++ (instancetype)configure {
+    return [[self alloc] init];
+}
+
+- (NSString *)scanline {
+    if (!_scanline) {
+        return @"scan_scanline_wc";
+    }
+    return _scanline;
+}
+
+- (CGFloat)scanlineStep {
+    if (!_scanlineStep) {
+        return 3.5;
+    }
+    return _scanlineStep;
+}
+
+- (UIColor *)color {
+    if (!_color) {
+        return [[UIColor blackColor] colorWithAlphaComponent:0.5];
+    }
+    return _color;
+}
+
+- (UIColor *)borderColor {
+    if (!_borderColor) {
+        return [UIColor whiteColor];
+    }
+    return _borderColor;
+}
+
+- (CGFloat)borderWidth {
+    if (!_borderWidth) {
+        return 0.2;
+    }
+    return _borderWidth;
+}
+
+- (SGCornerLoaction)cornerLocation {
+    if (!_cornerLocation) {
+        return SGCornerLoactionDefault;
+    }
+    return _cornerLocation;
+}
+
+- (UIColor *)cornerColor {
+    if (!_cornerColor) {
+        _cornerColor = [UIColor greenColor];
+    }
+    return _cornerColor;
+}
+
+- (CGFloat)cornerWidth {
+    if (!_cornerWidth) {
+        return 2.0;
+    }
+    return _cornerWidth;
+}
+
+- (CGFloat)cornerLength {
+    if (!_cornerLength) {
+        return 20.0;
+    }
+    return _cornerLength;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.h
new file mode 100644
index 0000000..2e28408
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.h
@@ -0,0 +1,25 @@
+//
+//  SGSoundEffect.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SGSoundEffect : NSObject
+/// 对象方法获取音效文件
+- (id)initWithFilepath:(NSString *)path;
+
+/// 类方法获取音效文件
++ (id)soundEffectWithFilepath:(NSString *)path;
+
+/// 开始播放音效
+- (void)play;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.m
new file mode 100644
index 0000000..c5d382d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/SoundEffect/SGSoundEffect.m
@@ -0,0 +1,71 @@
+//
+//  SGSoundEffect.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/8.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "SGSoundEffect.h"
+#import <AudioToolbox/AudioServices.h>
+
+@interface SGSoundEffect ()
+{
+    SystemSoundID _soundID;
+}
+@end
+
+@implementation SGSoundEffect
+
+- (id)initWithFilepath:(NSString *)path {
+    self = [super init];
+    
+    if (self != nil) {
+    
+        // 获取声音文件路径
+        NSURL *aFileURL = [NSURL fileURLWithPath:path isDirectory:NO];
+        
+        // 判断声音文件是否存在
+        if (aFileURL != nil) {
+            // 定义SystemSoundID
+            SystemSoundID aSoundID;
+            
+            // 允许应用程序指定由系统声音服务器播放的音频文件
+            /*
+             参数1:A CFURLRef for an AudioFile ,一个CFURLRef类型的音频文件
+             参数2:Returns a SystemSoundID,返回一个SystemSoundID
+             */
+            OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)aFileURL, &aSoundID);
+            // 判断 error 是否等于无错误!
+            if (error == kAudioServicesNoError) {
+                // 赋值:
+                _soundID = aSoundID;
+            } else {
+                NSLog(@"Error :loading sound path, %d, %@", (int)error, path);
+                self = nil;
+            }
+        } else {
+            NSLog(@"URL is nil for path %@", path);
+            self = nil;
+        }
+    }
+    
+    return self;
+}
+
++ (id)soundEffectWithFilepath:(NSString *)path {
+    if (path) {
+        return [[SGSoundEffect alloc] initWithFilepath:path];
+    }
+    return nil;
+}
+
+- (void)play {
+    AudioServicesPlaySystemSound(_soundID);
+}
+
+- (void)dealloc {
+    AudioServicesDisposeSystemSoundID(_soundID);
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.h
new file mode 100644
index 0000000..c9d9013
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.h
@@ -0,0 +1,22 @@
+//
+//  SGTorch.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/9.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SGTorch : NSObject
+/// 打开手电筒
++ (void)turnOnTorch;
+
+/// 关闭手电筒
++ (void)turnOffTorch;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.m
new file mode 100644
index 0000000..016a15f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/Torch/SGTorch.m
@@ -0,0 +1,35 @@
+//
+//  SGTorch.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/9.
+//  Copyright © 2022 kingsic. All rights reserved.
+//
+
+#import "SGTorch.h"
+#import <AVFoundation/AVFoundation.h>
+
+@implementation SGTorch
+
++ (void)turnOnTorch {
+    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+    if ([device hasTorch]) {
+        BOOL locked = [device lockForConfiguration:nil];
+        if (locked) {
+            [device setTorchMode:AVCaptureTorchModeOn];
+            [device unlockForConfiguration];
+        }
+    }
+}
+
++ (void)turnOffTorch {
+    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+
+    if ([device hasTorch]) {
+        [device lockForConfiguration:nil];
+        [device setTorchMode:AVCaptureTorchModeOff];
+        [device unlockForConfiguration];
+    }
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.h
new file mode 100644
index 0000000..f1e31b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.h
@@ -0,0 +1,18 @@
+//
+//  SGWeakProxy.h
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/2.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SGWeakProxy : NSProxy
+/// 类方法创建 SGWeakProxy
++ (instancetype)weakProxyWithTarget:(id)aTarget;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.m
new file mode 100644
index 0000000..b500701
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/SGQRCode/WeakProxy/SGWeakProxy.m
@@ -0,0 +1,36 @@
+//
+//  SGWeakProxy.m
+//  SGQRCodeExample
+//
+//  Created by kingsic on 2022/7/2.
+//
+
+#import "SGWeakProxy.h"
+
+@interface SGWeakProxy ()
+@property (nonatomic, weak) id target;
+@end
+
+@implementation SGWeakProxy
+
++ (instancetype)weakProxyWithTarget:(id)aTarget {
+    SGWeakProxy *weakProxy = [SGWeakProxy alloc];
+    weakProxy.target = aTarget;
+    return weakProxy;
+}
+
+
+- (id)forwardingTargetForSelector:(SEL)selector {
+    return _target;
+}
+
+- (void)forwardInvocation:(NSInvocation *)invocation {
+    void *nullPointer = NULL;
+    [invocation setReturnValue:&nullPointer];
+}
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector {
+    return [NSObject instanceMethodSignatureForSelector:@selector(init)];
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.h b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.h
new file mode 100644
index 0000000..d33d9b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.h
@@ -0,0 +1,76 @@
+//
+//  YJProgressHUD.h
+//  PictureHouseKeeper
+//
+//  Created by 李亚军 on 16/8/19.
+//  Copyright © 2016年 zyyj. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <MBProgressHUD/MBProgressHUD.h>
+
+typedef NS_ENUM(NSInteger,YJProgressMode){
+    YJProgressModeOnlyText,           //文字
+    YJProgressModeLoading,               //加载菊花
+    YJProgressModeCircle,                //加载环形
+    YJProgressModeCircleLoading,         //加载圆形-要处理进度值
+    YJProgressModeCustomAnimation,       //自定义加载动画(序列帧实现)
+    YJProgressModeSuccess,                //成功
+    YJProgressModeFailed,                 //失败
+    YJProgressModeCustomerImage           //自定义图片
+    
+};
+
+@interface YJProgressHUD : NSObject
+
+/*===============================   属性   ================================================*/
+
+@property (nonatomic,strong) MBProgressHUD  *hud;
+
+
+/*=============================  本类自己调用 方法   =====================================*/
+
++(instancetype)shareinstance;
+
+//显示
++(void)show:(NSString *)msg inView:(UIView *)view mode:(YJProgressMode)myMode;
+
+
+
+/*=========================  自己可调用 方法   ================================*/
+
+//显示提示(1秒后消失)
++(void)showMessage:(NSString *)msg inView:(UIView *)view;
+
+//显示提示(N秒后消失)
++(void)showMessage:(NSString *)msg inView:(UIView *)view afterDelayTime:(NSInteger)delay;
+
+//在最上层显示 - 不需要指定showview
++(void)showMsgWithoutView:(NSString *)msg;
+
+
+//显示进度(菊花)
++(void)showProgress:(NSString *)msg inView:(UIView *)view;
+
+//显示进度(环形)
++(void)showProgressCircleNoValue:(NSString *)msg inView:(UIView *)view ;
+
+//显示进度(转圈-要处理数据加载进度)
++(MBProgressHUD *)showProgressCircle:(NSString *)msg inView:(UIView *)view;
+
+//显示成功提示
++(void)showSuccess:(NSString *)msg inview:(UIView *)view;
+
+//显示失败提示
++(void)showFailed:(NSString *)msg inview:(UIView *)view;
+
+//显示提示、带静态图片,比如失败,用失败图片即可,警告用警告图片等
++(void)showMsgWithImage:(NSString *)msg imageName:(NSString *)imageName inview:(UIView *)view;
+
+//显示自定义动画(自定义动画序列帧  找UI做就可以了)
++(void)showCustomAnimation:(NSString *)msg inview:(UIView *)view;
+
+//隐藏
++(void)hide;
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.m b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.m
new file mode 100644
index 0000000..17c59ca
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/YJProgressHUD.m
@@ -0,0 +1,193 @@
+//
+//  YJProgressHUD.m
+//  PictureHouseKeeper
+//
+//  Created by 李亚军 on 16/8/19.
+//  Copyright © 2016年 zyyj. All rights reserved.
+//
+
+#import "YJProgressHUD.h"
+
+@implementation YJProgressHUD
+
++(instancetype)shareinstance{
+    
+    static YJProgressHUD *instance = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        instance = [[YJProgressHUD alloc] init];
+    });
+    
+    return instance;
+    
+}
+
++(void)show:(NSString *)msg inView:(UIView *)view mode:(YJProgressMode)myMode{
+    [self show:msg inView:view mode:myMode customImgView:nil];
+}
+
++(void)show:(NSString *)msg inView:(UIView *)view mode:(YJProgressMode)myMode customImgView:(UIImageView *)customImgView{
+    //如果为nil ,在最上层windows显示
+    if (view == nil) {
+        view = [[UIApplication sharedApplication].windows lastObject];
+    }
+    //如果已有弹框,先消失
+    if ([YJProgressHUD shareinstance].hud != nil) {
+        [[YJProgressHUD shareinstance].hud hideAnimated:YES];
+        [YJProgressHUD shareinstance].hud = nil;
+    }
+    
+    //4\4s屏幕避免键盘存在时遮挡
+    if ([UIScreen mainScreen].bounds.size.height == 480) {
+        [view endEditing:YES];
+    }
+    
+    [YJProgressHUD shareinstance].hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
+    
+    //这里设置是否显示遮罩层
+    //[YJProgressHUD shareinstance].hud.dimBackground = YES;    //是否显示透明背景
+    
+    //是否设置黑色背景,这两句配合使用
+    [YJProgressHUD shareinstance].hud.bezelView.color = [UIColor blackColor];
+    [YJProgressHUD shareinstance].hud.contentColor = [UIColor blackColor];
+    
+    [[YJProgressHUD shareinstance].hud setMargin:10];
+    [[YJProgressHUD shareinstance].hud setRemoveFromSuperViewOnHide:YES];
+    [YJProgressHUD shareinstance].hud.detailsLabel.text = msg;
+    
+    [YJProgressHUD shareinstance].hud.detailsLabel.font = [UIFont systemFontOfSize:14];
+    switch ((NSInteger)myMode) {
+        case YJProgressModeOnlyText:
+            [YJProgressHUD shareinstance].hud.mode = MBProgressHUDModeText;
+            break;
+            
+        case YJProgressModeLoading:
+            [YJProgressHUD shareinstance].hud.mode = MBProgressHUDModeIndeterminate;
+            break;
+            
+        case YJProgressModeCircle:{
+            [YJProgressHUD shareinstance].hud.mode = MBProgressHUDModeCustomView;
+            UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"loading"]];
+            CABasicAnimation *animation= [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
+            animation.toValue = [NSNumber numberWithFloat:M_PI*2];
+            animation.duration = 1.0;
+            animation.repeatCount = 100;
+            [img.layer addAnimation:animation forKey:nil];
+            [YJProgressHUD shareinstance].hud.customView = img;
+            
+            
+            break;
+        }
+        case YJProgressModeCustomerImage:
+            [YJProgressHUD shareinstance].hud.mode = MBProgressHUDModeCustomView;
+            [YJProgressHUD shareinstance].hud.customView = customImgView;
+            break;
+            
+        case YJProgressModeCustomAnimation:
+            //这里设置动画的背景色
+            [YJProgressHUD shareinstance].hud.bezelView.color = [UIColor blackColor];
+            [YJProgressHUD shareinstance].hud.mode = MBProgressHUDModeCustomView;
+            [YJProgressHUD shareinstance].hud.customView = customImgView;
+            
+            break;
+            
+        case YJProgressModeSuccess:
+            [YJProgressHUD shareinstance].hud.mode = MBProgressHUDModeCustomView;
+            [YJProgressHUD shareinstance].hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"success"]];
+            break;
+            
+        case YJProgressModeFailed:
+            [YJProgressHUD shareinstance].hud.mode = MBProgressHUDModeCustomView;
+            [YJProgressHUD shareinstance].hud.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"fail"]];
+            break;
+        default:
+            break;
+    }
+
+}
+
+
++(void)hide{
+    if ([YJProgressHUD shareinstance].hud != nil) {
+        [[YJProgressHUD shareinstance].hud hideAnimated:YES];
+    }
+}
+
+
++(void)showMessage:(NSString *)msg inView:(UIView *)view{
+    [self show:msg inView:view mode:YJProgressModeOnlyText];
+    [[YJProgressHUD shareinstance].hud hideAnimated:YES afterDelay:1.5];
+}
+
+
++(void)showMessage:(NSString *)msg inView:(UIView *)view afterDelayTime:(NSInteger)delay{
+    [self show:msg inView:view mode:YJProgressModeOnlyText];
+    [[YJProgressHUD shareinstance].hud hideAnimated:YES afterDelay:delay];
+}
+
++(void)showSuccess:(NSString *)msg inview:(UIView *)view{
+    [self show:msg inView:view mode:YJProgressModeSuccess];
+    [[YJProgressHUD shareinstance].hud hideAnimated:YES afterDelay:1.5];
+    
+}
+
++(void)showFailed:(NSString *)msg inview:(UIView *)view {
+    [self show:msg inView:view mode:YJProgressModeFailed];
+    [[YJProgressHUD shareinstance].hud hideAnimated:YES afterDelay:1.5];
+}
+
++(void)showMsgWithImage:(NSString *)msg imageName:(NSString *)imageName inview:(UIView *)view{
+    UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
+    [self show:msg inView:view mode:YJProgressModeCustomerImage customImgView:img];
+    [[YJProgressHUD shareinstance].hud hideAnimated:YES afterDelay:1.0];
+}
+
+
++(void)showProgress:(NSString *)msg inView:(UIView *)view{
+    [self show:msg inView:view mode:YJProgressModeLoading];
+}
+
++(MBProgressHUD *)showProgressCircle:(NSString *)msg inView:(UIView *)view{
+    if (view == nil) view = (UIView*)[UIApplication sharedApplication].delegate.window;
+    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
+    hud.mode = MBProgressHUDModeAnnularDeterminate;
+    hud.detailsLabel.text = msg;
+    return hud;
+    
+    
+}
+
++(void)showProgressCircleNoValue:(NSString *)msg inView:(UIView *)view{
+    [self show:msg inView:view mode:YJProgressModeCircle];
+    
+}
+
+
++(void)showMsgWithoutView:(NSString *)msg{
+    UIWindow *view = [[UIApplication sharedApplication].windows lastObject];
+    [self show:msg inView:view mode:YJProgressModeOnlyText];
+    [[YJProgressHUD shareinstance].hud hideAnimated:YES afterDelay:1.0];
+    
+}
+
++(void)showCustomAnimation:(NSString *)msg inview:(UIView *)view{
+    NSArray *imgArry = [self getImages];
+    UIImageView *showImageView = [[UIImageView alloc] init];
+    showImageView.animationImages = imgArry;
+    [showImageView setAnimationRepeatCount:0];
+    [showImageView setAnimationDuration:(imgArry.count + 1) * 0.075];
+    [showImageView startAnimating];
+    
+    [self show:msg inView:view mode:YJProgressModeCustomAnimation customImgView:showImageView];
+    
+    
+}
++ (NSArray *)getImages {
+    NSMutableArray *arrM = [[NSMutableArray alloc] init];
+    for (int i = 1; i < 18; i ++) {
+        [arrM addObject:[UIImage imageNamed:[NSString stringWithFormat:@"loading_%d",i]]];
+    }
+    return arrM.copy;
+}
+
+@end
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/Root.plist b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/Root.plist
new file mode 100644
index 0000000..b1b6fea
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/Root.plist
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>StringsTable</key>
+	<string>Root</string>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+			<key>Title</key>
+			<string>Group</string>
+		</dict>
+		<dict>
+			<key>Type</key>
+			<string>PSTextFieldSpecifier</string>
+			<key>Title</key>
+			<string>Name</string>
+			<key>Key</key>
+			<string>name_preference</string>
+			<key>DefaultValue</key>
+			<string></string>
+			<key>IsSecure</key>
+			<false/>
+			<key>KeyboardType</key>
+			<string>Alphabet</string>
+			<key>AutocapitalizationType</key>
+			<string>None</string>
+			<key>AutocorrectionType</key>
+			<string>No</string>
+		</dict>
+		<dict>
+			<key>Type</key>
+			<string>PSToggleSwitchSpecifier</string>
+			<key>Title</key>
+			<string>Enabled</string>
+			<key>Key</key>
+			<string>enabled_preference</string>
+			<key>DefaultValue</key>
+			<true/>
+		</dict>
+		<dict>
+			<key>Type</key>
+			<string>PSSliderSpecifier</string>
+			<key>Key</key>
+			<string>slider_preference</string>
+			<key>DefaultValue</key>
+			<real>0.5</real>
+			<key>MinimumValue</key>
+			<integer>0</integer>
+			<key>MaximumValue</key>
+			<integer>1</integer>
+			<key>MinimumValueImage</key>
+			<string></string>
+			<key>MaximumValueImage</key>
+			<string></string>
+		</dict>
+	</array>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/en.lproj/Root.strings b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/en.lproj/Root.strings
new file mode 100644
index 0000000..8cd87b9
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/en.lproj/Root.strings
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail.png
new file mode 100644
index 0000000..64b040e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@2x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@2x.png
new file mode 100644
index 0000000..64b040e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@3x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@3x.png
new file mode 100644
index 0000000..64b040e
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/fail@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading.png
new file mode 100644
index 0000000..8fe5437
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@2x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@2x.png
new file mode 100644
index 0000000..8fe5437
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@3x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@3x.png
new file mode 100644
index 0000000..8fe5437
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/loading@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success.png
new file mode 100644
index 0000000..f330b70
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@2x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@2x.png
new file mode 100644
index 0000000..2cb680b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@2x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@3x.png b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@3x.png
new file mode 100644
index 0000000..2cb680b
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Classes/Tools/YJProgressHUDK/images.bundle/success@3x.png
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/Info.plist b/IphoneBIMe/IphoneBIMe/Info.plist
new file mode 100644
index 0000000..7f75bb8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/Info.plist
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>CN</string>
+	<key>CFBundleDisplayName</key>
+	<string>管理平台</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>$(MARKETING_VERSION)</string>
+	<key>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>WeChat</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>wx0553fe2b259ca859</string>
+			</array>
+		</dict>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>qq</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>tencent101511727</string>
+			</array>
+		</dict>
+	</array>
+	<key>CFBundleVersion</key>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>LSApplicationCategoryType</key>
+	<string></string>
+	<key>LSApplicationQueriesSchemes</key>
+	<array>
+		<string>wechat</string>
+		<string>weixin</string>
+		<string>mqqapi</string>
+		<string>mqq</string>
+		<string>mqqOpensdkSSoLogin</string>
+		<string>mqqconnect</string>
+		<string>mqqopensdkdataline</string>
+		<string>mqqopensdkgrouptribeshare</string>
+		<string>mqqopensdkfriend</string>
+		<string>mqqopensdkapi</string>
+		<string>mqqopensdkapiV2</string>
+		<string>mqqopensdkapiV3</string>
+		<string>mqqopensdkapiV4</string>
+		<string>mqzoneopensdk</string>
+		<string>wtloginmqq</string>
+		<string>wtloginmqq2</string>
+		<string>mqqwpa</string>
+		<string>mqzone</string>
+		<string>mqzonev2</string>
+		<string>mqzoneshare</string>
+		<string>wtloginqzone</string>
+		<string>mqzonewx</string>
+		<string>mqzoneopensdkapiV2</string>
+		<string>mqzoneopensdkapi19</string>
+		<string>mqzoneopensdkapi</string>
+		<string>mqqbrowser</string>
+		<string>mttbrowser</string>
+		<string>tim</string>
+		<string>timapi</string>
+		<string>timopensdkfriend</string>
+		<string>timwpa</string>
+		<string>timgamebindinggroup</string>
+		<string>timapiwallet</string>
+		<string>timOpensdkSSoLogin</string>
+		<string>wtlogintim</string>
+		<string>timopensdkgrouptribeshare</string>
+		<string>timopensdkapiV4</string>
+		<string>timgamebindinggroup</string>
+		<string>timopensdkdataline</string>
+		<string>wtlogintimV1</string>
+		<string>timapiV1</string>
+	</array>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
+	<key>NSCameraUsageDescription</key>
+	<string>此App会在新建服务中访问你的相机以拍照</string>
+	<key>NSLocationWhenInUseUsageDescription</key>
+	<string>是否允许在使用过程中获取您的定位信息用于现场人员填报位置录入?</string>
+	<key>NSMicrophoneUsageDescription</key>
+	<string>此App会在新建服务中访问你的麦克风权限以添加音频</string>
+	<key>NSPhotoLibraryUsageDescription</key>
+	<string>此App会在新建服务中访问你的相册权限以添加照片</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UIUserInterfaceStyle</key>
+	<string>Light</string>
+	<key>UIViewControllerBasedStatusBarAppearance</key>
+	<false/>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/IphoneBIMe.entitlements b/IphoneBIMe/IphoneBIMe/IphoneBIMe.entitlements
new file mode 100644
index 0000000..903def2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/IphoneBIMe.entitlements
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>aps-environment</key>
+	<string>development</string>
+</dict>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/PrefixHeader.pch b/IphoneBIMe/IphoneBIMe/PrefixHeader.pch
new file mode 100644
index 0000000..c1cacc3
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/PrefixHeader.pch
@@ -0,0 +1,112 @@
+//
+//  PrefixHeader.pch
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+//
+
+#ifndef PrefixHeader_pch
+#define PrefixHeader_pch
+
+// Include any system framework and library headers here that should be included in all compilation units.
+// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
+#ifdef  __OBJC__
+
+//颜色宏
+#define PBColor(r, g, b)  [UIColor colorWithRed:(r / 255.0) green:(g / 255.0) blue:(b / 255.0) alpha:1.0]
+#define TitleColor [UIColor z_colorWithR:40.0 G:58.0 B:79.0]
+#define DescColor [UIColor z_colorWithR:97.0 G:111.0 B:125.0]
+#define PromptColor [UIColor z_colorWithR:153.0 G:153.0 B:153.0]
+#define IgnoreColor [UIColor z_colorWithR:189.0 G:189.0 B:189.0]
+
+#define SensitiveColor [UIColor z_colorWithR:220.0 G:99.0 B:70.0]
+#define IndicatedColor [UIColor z_colorWithR:65.0 G:127.0 B:205.0]
+#define WarningColor [UIColor z_colorWithR:247.0 G:165.0 B:0.0]
+#define DisableColor [UIColor z_colorWithR:199.0 G:198.0 B:203.0]
+#define ErrorColor [UIColor z_colorWithR:253.0 G:59.0 B:49.0]
+//字体宏
+#define MarkedFontSize 18.0
+#define TitleFontSize 16.0
+#define DescFontSize 14.0
+#define CommentsSize 15.0
+
+//字体
+#define Coarse @"PingFangSC-Medium"
+#define Conventional @"PingFangSC-Regular"
+//机型
+#define IS_IPHONE_X (PBScreenHeight >= 812.0f) ? YES : NO
+#define IPHONE_X_TOP 44
+#define IPHONE_X_BOTTOM 34
+//打印宏
+#ifdef DEBUG
+#define PBNSLog(fmt, ...)  fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:fmt, ##__VA_ARGS__] UTF8String]);
+#else
+#define NSLog(...)
+#endif
+
+#define AES_Key @"MK4ZJF10PRO19*#8"
+#define AES_Iv @"*BIM19FF4KMY0R8*"
+
+#define BaseUrl [[NSString getApiData] valueForKey:@"NewApi"]
+#define BimUrl  [[NSString getApiData] valueForKey:@"ModelApi"]
+#define WebUrl  [[NSString getApiData] valueForKey:@"NewWeb"]
+#define PanoramaUrl [[NSString getApiData] valueForKey:@"Panorama"]
+#define Realname [[NSString getLoginData] valueForKey:@"RealName"]
+#define UserID [[NSString getLoginData] valueForKey:@"UserId"]
+#define Account [[NSString getLoginData] valueForKey:@"Account"]
+#define Token [NSString getToken]
+
+
+//https 证书名称切换
+
+#define STARNAME  [[NSString getApiData] valueForKey:@"StarName"]
+
+//通知宏
+#define PBNoteCenter [NSNotificationCenter defaultCenter]
+
+// 屏幕宽高宏
+#define MainScreenWidth  [UIScreen mainScreen].bounds.size.width
+#define MainScreenHeight [UIScreen mainScreen].bounds.size.height
+#import "PBBackNavItem.h"
+#import "PBResultVideo.h"
+//类库
+#import <UIKit/UIKit.h>
+#import <Foundation/Foundation.h>
+//分类
+#import "PBAdditonal.h"
+#import "AppDelegate.h"
+//第三方类库
+#import <YYModel.h>
+#import <Masonry.h>
+#import <MBProgressHUD.h>
+#import <MJRefresh.h>
+#import <UIImageView+WebCache.h>
+#import <TZImagePickerController.h>
+#import <TZLocationManager.h>
+#import <TZImageManager.h>
+#import <LFImagePickerController.h>
+#import <Photos/PHPhotoLibrary.h>
+#import "SDPhotoBrowser.h"
+#import <UMShare/UMShare.h>
+#import <UMCommon/UMCommon.h>
+
+//加密
+#import "JHAES.h"
+#import "PBNetworkModel.h"
+//#import <FMDB.h>
+//网络请求类
+#import "PBNetworkTools.h"
+#import "YJProgressHUD.h"
+#import "PBAVPlayerManager.h"
+//公共播放器
+//#import "PBAVPlayerManager.h"
+
+//本地数据库操作类
+//#import "PBDatebaseQueueManager.h"
+//公共类
+#import "PBComon.h"
+//加密类
+//#import "PGGCryptoDES.h"
+#endif
+#endif /* PrefixHeader_pch */
diff --git a/IphoneBIMe/IphoneBIMe/STAR_bim365_com_cn.cer b/IphoneBIMe/IphoneBIMe/STAR_bim365_com_cn.cer
new file mode 100644
index 0000000..0d312b8
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/STAR_bim365_com_cn.cer
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/STAR_probim_cn.cer b/IphoneBIMe/IphoneBIMe/STAR_probim_cn.cer
new file mode 100644
index 0000000..940aabb
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/STAR_probim_cn.cer
Binary files differ
diff --git a/IphoneBIMe/IphoneBIMe/examineAdd.plist b/IphoneBIMe/IphoneBIMe/examineAdd.plist
new file mode 100644
index 0000000..339efc2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/examineAdd.plist
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>ExamineRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入检查情况</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>工程结构(选填)</string>
+		<key>key</key>
+		<string>CategoryID</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择工程结构</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查日期(不可更改)</string>
+		<key>key</key>
+		<string>ExamineDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查方(不可更改)</string>
+		<key>key</key>
+		<string>ExaminerID</string>
+		<key>cellType</key>
+		<string>text</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查结果</string>
+		<key>key</key>
+		<string>ExamineResult</string>
+		<key>cellType</key>
+		<string>result</string>
+		<key>prompt</key>
+		<string>请选择检查结果</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>限期整改时间</string>
+		<key>key</key>
+		<string>RectificateDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择时间</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>整改人</string>
+		<key>key</key>
+		<string>PrincipalID</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择整改人</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>验收人(无验收人则检查方作为验收人)</string>
+		<key>key</key>
+		<string>aede_checkeruserids</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择验收人</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查类别</string>
+		<key>key</key>
+		<string>aedt_guid</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择检查类别</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>严重等级</string>
+		<key>key</key>
+		<string>aede_severitylevel</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择严重等级</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/examineAdd1.plist b/IphoneBIMe/IphoneBIMe/examineAdd1.plist
new file mode 100644
index 0000000..c2a49ff
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/examineAdd1.plist
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>ExamineRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入标题</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>基本信息</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>开始日期</string>
+		<key>key</key>
+		<string>ExamineDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择开始日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>截止日期</string>
+		<key>key</key>
+		<string>RectificateDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择截止日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查人</string>
+		<key>key</key>
+		<string>CheckerUserId</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请指定检查人</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>监理方确认</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>监理方</string>
+		<key>key</key>
+		<string>isSupervisor</string>
+		<key>cellType</key>
+		<string>checkbox</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联内容</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联构件</string>
+		<key>key</key>
+		<string>rel_materialjson</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>请选择关联构件</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联任务</string>
+		<key>key</key>
+		<string>rel_taskjson</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>请选择关联任务</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/examineAdd2.plist b/IphoneBIMe/IphoneBIMe/examineAdd2.plist
new file mode 100644
index 0000000..4acb778
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/examineAdd2.plist
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>检查标题</string>
+		<key>key</key>
+		<string>Title</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入检查标题</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>ExamineRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>描述(选填)</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>语音描述</string>
+		<key>key</key>
+		<string>RecordingDesc</string>
+		<key>cellType</key>
+		<string>recording</string>
+		<key>prompt</key>
+		<string>语音描述(选填)</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>定位(选填)</string>
+		<key>key</key>
+		<string>positioning</string>
+		<key>cellType</key>
+		<string>positioning</string>
+		<key>prompt</key>
+		<string>请选择定位</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>单位工程</string>
+		<key>key</key>
+		<string>ConstructUnit</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>分部工程</string>
+		<key>key</key>
+		<string>SubConstructUnit</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>分项工程</string>
+		<key>key</key>
+		<string>Subdivisional</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检验批</string>
+		<key>key</key>
+		<string>VerifyBatch</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>轴网(选填)</string>
+		<key>key</key>
+		<string>Axis</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择轴网</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>流水段(选填)</string>
+		<key>key</key>
+		<string>FlowPhase</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择流水段</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>施工班组(选填)</string>
+		<key>key</key>
+		<string>ConstructionTeam</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择施工班组</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>专业(选填)</string>
+		<key>key</key>
+		<string>Professional</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择专业</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>负责人</string>
+		<key>key</key>
+		<string>Principal</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择负责人</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>参与人(选填)</string>
+		<key>key</key>
+		<string>RelationMember</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择参与人</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>验收日期(不可更改)</string>
+		<key>key</key>
+		<string>ExamineDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查人员(不可更改)</string>
+		<key>key</key>
+		<string>Examiner</string>
+		<key>cellType</key>
+		<string>text</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查结果</string>
+		<key>key</key>
+		<string>ExamineResult</string>
+		<key>cellType</key>
+		<string>result</string>
+		<key>prompt</key>
+		<string>请选择检查结果</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>限期整改时间</string>
+		<key>key</key>
+		<string>RectificateDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择时间</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/examineAdd3.plist b/IphoneBIMe/IphoneBIMe/examineAdd3.plist
new file mode 100644
index 0000000..e14e6c0
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/examineAdd3.plist
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>ExamineRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入任务标题</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>基本信息</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>开始日期</string>
+		<key>key</key>
+		<string>ExamineDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选选择开始日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>截止日期</string>
+		<key>key</key>
+		<string>RectificateDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择截止日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查人</string>
+		<key>key</key>
+		<string>CheckerName</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请指定检查人</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联内容</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联构件</string>
+		<key>key</key>
+		<string>Materials</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>无关联构件</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联任务</string>
+		<key>key</key>
+		<string>Tasks</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>无关联任务</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>类型</string>
+		<key>key</key>
+		<string>aedt_name</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择检查类型</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/examineAdd4.plist b/IphoneBIMe/IphoneBIMe/examineAdd4.plist
new file mode 100644
index 0000000..f511fb2
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/examineAdd4.plist
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>RectificationRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入检查内容</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>严重等级</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>严重等级</string>
+		<key>key</key>
+		<string>aede_severitylevel</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>状态</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>状态</string>
+		<key>key</key>
+		<string>IsPassed</string>
+		<key>cellType</key>
+		<string>statu</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>人员</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>instructions</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>instructions</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>整改人</string>
+		<key>key</key>
+		<string>RelationMemberID</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>验收人</string>
+		<key>key</key>
+		<string>PrincipalID</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择(非必选)</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/examineAdd5.plist b/IphoneBIMe/IphoneBIMe/examineAdd5.plist
new file mode 100644
index 0000000..135df56
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/examineAdd5.plist
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>ExamineRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入任务标题</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>基本信息</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>开始日期</string>
+		<key>key</key>
+		<string>ExamineDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选选择开始日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>截止日期</string>
+		<key>key</key>
+		<string>RectificateDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择截止日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查人</string>
+		<key>key</key>
+		<string>CheckerName</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请指定检查人</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查情况</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查情况</string>
+		<key>key</key>
+		<string>RecordWithAttachments</string>
+		<key>cellType</key>
+		<string>checkTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查情况</string>
+		<key>key</key>
+		<string>RecordWithAttachments</string>
+		<key>cellType</key>
+		<string>image</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>严重等级</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>严重等级</string>
+		<key>key</key>
+		<string>aede_severitylevel</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>人员</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>整改人</string>
+		<key>key</key>
+		<string>RelationMember_Users</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>验收人</string>
+		<key>key</key>
+		<string>Principal_Users</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择(非必选)</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联内容</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联构件</string>
+		<key>key</key>
+		<string>Materials</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>无关联构件</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联任务</string>
+		<key>key</key>
+		<string>Tasks</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>无关联任务</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/examineAdd6.plist b/IphoneBIMe/IphoneBIMe/examineAdd6.plist
new file mode 100644
index 0000000..718ef9f
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/examineAdd6.plist
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>ExamineRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入标题</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>基本信息</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>开始日期</string>
+		<key>key</key>
+		<string>ExamineDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择开始日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>截止日期</string>
+		<key>key</key>
+		<string>RectificateDate</string>
+		<key>cellType</key>
+		<string>time</string>
+		<key>prompt</key>
+		<string>请选择截止日期</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查人</string>
+		<key>key</key>
+		<string>CheckerUserId</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请指定检查人</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联内容</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联构件</string>
+		<key>key</key>
+		<string>rel_materialjson</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>请选择关联构件</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>关联任务</string>
+		<key>key</key>
+		<string>rel_taskjson</string>
+		<key>cellType</key>
+		<string>list</string>
+		<key>prompt</key>
+		<string>请选择关联任务</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>类型</string>
+		<key>key</key>
+		<string>aedt_guid</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择类型</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>检查描述</string>
+		<key>key</key>
+		<string>RectificationRemark</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入检查内容</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>严重等级</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>严重等级</string>
+		<key>key</key>
+		<string>aede_severitylevel</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>状态</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>状态</string>
+		<key>key</key>
+		<string>IsPassed</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>人员</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>classTitle</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>instructions</string>
+		<key>key</key>
+		<string></string>
+		<key>cellType</key>
+		<string>instructions</string>
+		<key>prompt</key>
+		<string></string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>整改人</string>
+		<key>key</key>
+		<string>RelationMemberID</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择</string>
+		<key>isMandatory</key>
+		<true/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>验收人</string>
+		<key>key</key>
+		<string>PrincipalID</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择(非必选)</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>类型</string>
+		<key>key</key>
+		<string>aedt_guid</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择类型</string>
+		<key>isMandatory</key>
+		<false/>
+		<key>optional</key>
+		<true/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/issueAdd.plist b/IphoneBIMe/IphoneBIMe/issueAdd.plist
new file mode 100644
index 0000000..3203c50
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/issueAdd.plist
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>标题</string>
+		<key>key</key>
+		<string>Title</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入标题</string>
+		<key>isMandatory</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>状态</string>
+		<key>key</key>
+		<string>IssueStatusID</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择状态</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>类型</string>
+		<key>key</key>
+		<string>IssueTypeId</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择类型</string>
+		<key>isMandatory</key>
+		<string>YES</string>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>参与人(选填)</string>
+		<key>key</key>
+		<string>JoinerIds</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择参与人</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>截止日期</string>
+		<key>key</key>
+		<string>EndDateStr</string>
+		<key>cellType</key>
+		<string>date</string>
+		<key>prompt</key>
+		<string>请选择截止日期</string>
+		<key>isMandatory</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>标签(选填)</string>
+		<key>key</key>
+		<string>Tag</string>
+		<key>cellType</key>
+		<string>label</string>
+		<key>prompt</key>
+		<string>请添加标签</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/issueAdd2.plist b/IphoneBIMe/IphoneBIMe/issueAdd2.plist
new file mode 100644
index 0000000..4608ddf
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/issueAdd2.plist
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<dict>
+		<key>title</key>
+		<string>视点定位(选填)</string>
+		<key>key</key>
+		<string>viewPoint</string>
+		<key>cellType</key>
+		<string>position</string>
+		<key>prompt</key>
+		<string>选择视点</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>图纸定位(选填)</string>
+		<key>key</key>
+		<string>draw</string>
+		<key>cellType</key>
+		<string>position</string>
+		<key>prompt</key>
+		<string>选择图纸</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>标题</string>
+		<key>key</key>
+		<string>Title</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>请输入标题</string>
+		<key>isMandatory</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>描述</string>
+		<key>key</key>
+		<string>Content</string>
+		<key>cellType</key>
+		<string>input</string>
+		<key>prompt</key>
+		<string>描述(选填)</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>状态</string>
+		<key>key</key>
+		<string>IssueStatusID</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择状态</string>
+		<key>isMandatory</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>类型</string>
+		<key>key</key>
+		<string>IssueTypeID</string>
+		<key>cellType</key>
+		<string>choose</string>
+		<key>prompt</key>
+		<string>请选择类型</string>
+		<key>isMandatory</key>
+		<string>YES</string>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>负责人</string>
+		<key>key</key>
+		<string>RUserIDStr</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择负责人</string>
+		<key>isMandatory</key>
+		<true/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>参与人(选填)</string>
+		<key>key</key>
+		<string>LUserIDStr</string>
+		<key>cellType</key>
+		<string>person</string>
+		<key>prompt</key>
+		<string>请选择参与人</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+	<dict>
+		<key>title</key>
+		<string>截止日期(选填)</string>
+		<key>key</key>
+		<string>EndDate</string>
+		<key>cellType</key>
+		<string>date</string>
+		<key>prompt</key>
+		<string>请选择截止日期</string>
+		<key>isMandatory</key>
+		<false/>
+	</dict>
+</array>
+</plist>
diff --git a/IphoneBIMe/IphoneBIMe/loading_alone.json b/IphoneBIMe/IphoneBIMe/loading_alone.json
new file mode 100644
index 0000000..5a58d66
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/loading_alone.json
@@ -0,0 +1 @@
+{"v":"5.6.10","fr":25,"ip":0,"op":50,"w":200,"h":200,"nm":"1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"“1”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sy":[{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":75,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":5,"ix":8},"d":{"a":0,"k":5,"ix":6},"ch":{"a":0,"k":0,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"lc":{"a":0,"k":1,"ix":10},"ty":1,"nm":"投影"},{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":75,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":5,"ix":8},"d":{"a":0,"k":5,"ix":6},"ch":{"a":0,"k":0,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"ty":2,"nm":"内阴影"},{"c":{"a":0,"k":[1,1,0.745098039216,1],"ix":5},"o":{"a":0,"k":75,"ix":2},"s":{"a":0,"k":5,"ix":10},"r":{"a":0,"k":50,"ix":11},"ch":{"a":0,"k":0,"ix":9},"bm":{"a":0,"k":11,"ix":1},"no":{"a":0,"k":0,"ix":3},"j":{"a":0,"k":0,"ix":12},"ty":3,"nm":"外发光"},{"c":{"a":0,"k":[1,1,0.745098039216,1],"ix":5},"o":{"a":0,"k":75,"ix":2},"s":{"a":0,"k":5,"ix":11},"r":{"a":0,"k":50,"ix":12},"sr":{"a":0,"k":1,"ix":9},"ch":{"a":0,"k":0,"ix":10},"bm":{"a":0,"k":11,"ix":1},"no":{"a":0,"k":0,"ix":3},"j":{"a":0,"k":0,"ix":13},"ty":4,"nm":"内发光"},{"c":{"a":0,"k":[1,0,0,1],"ix":2},"s":{"a":0,"k":3,"ix":3},"ty":0,"nm":"描边"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[37.5,-10.417],[0,10.417],[-37.5,-10.417]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[0]},{"t":24,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[98]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[0]},{"t":34,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100,102],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"V","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,33.333],[75,-29.167],[0,-75],[-75,-29.167],[-75,33.333],[0,75]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[14]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[14]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[14]},{"t":50,"s":[14]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"t":50,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100,100],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"6","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-37.5,-8.333],[0,12.5],[75,-29.166],[0,-75],[-75,-29.166],[-75,33.334],[0,75],[75,33.334]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[24]},{"t":50,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100,99.999],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"E","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":750,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/loading_push.json b/IphoneBIMe/IphoneBIMe/loading_push.json
new file mode 100644
index 0000000..288d80c
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/loading_push.json
@@ -0,0 +1 @@
+{"v":"5.6.10","fr":25,"ip":0,"op":26,"w":200,"h":200,"nm":"1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"“1”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sy":[{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":75,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":5,"ix":8},"d":{"a":0,"k":5,"ix":6},"ch":{"a":0,"k":0,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"lc":{"a":0,"k":1,"ix":10},"ty":1,"nm":"投影"},{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":75,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":5,"ix":8},"d":{"a":0,"k":5,"ix":6},"ch":{"a":0,"k":0,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"ty":2,"nm":"内阴影"},{"c":{"a":0,"k":[1,1,0.745098039216,1],"ix":5},"o":{"a":0,"k":75,"ix":2},"s":{"a":0,"k":5,"ix":10},"r":{"a":0,"k":50,"ix":11},"ch":{"a":0,"k":0,"ix":9},"bm":{"a":0,"k":11,"ix":1},"no":{"a":0,"k":0,"ix":3},"j":{"a":0,"k":0,"ix":12},"ty":3,"nm":"外发光"},{"c":{"a":0,"k":[1,1,0.745098039216,1],"ix":5},"o":{"a":0,"k":75,"ix":2},"s":{"a":0,"k":5,"ix":11},"r":{"a":0,"k":50,"ix":12},"sr":{"a":0,"k":1,"ix":9},"ch":{"a":0,"k":0,"ix":10},"bm":{"a":0,"k":11,"ix":1},"no":{"a":0,"k":0,"ix":3},"j":{"a":0,"k":0,"ix":13},"ty":4,"nm":"内发光"},{"c":{"a":0,"k":[1,0,0,1],"ix":2},"s":{"a":0,"k":3,"ix":3},"ty":0,"nm":"描边"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-37.5,-8.333],[0,12.5],[75,-29.166],[0,-75],[-75,-29.166],[-75,33.334],[0,75],[75,33.334]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100,99.999],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"E","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":25,"s":[100]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":750,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/loading_refresh.json b/IphoneBIMe/IphoneBIMe/loading_refresh.json
new file mode 100644
index 0000000..325de6d
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/loading_refresh.json
@@ -0,0 +1 @@
+{"v":"5.6.10","fr":25,"ip":0,"op":50,"w":200,"h":200,"nm":"1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"“1”轮廓","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,100,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sy":[{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":75,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":5,"ix":8},"d":{"a":0,"k":5,"ix":6},"ch":{"a":0,"k":0,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"lc":{"a":0,"k":1,"ix":10},"ty":1,"nm":"投影"},{"c":{"a":0,"k":[0,0,0,1],"ix":2},"o":{"a":0,"k":75,"ix":3},"a":{"a":0,"k":120,"ix":5},"s":{"a":0,"k":5,"ix":8},"d":{"a":0,"k":5,"ix":6},"ch":{"a":0,"k":0,"ix":7},"bm":{"a":0,"k":5,"ix":1},"no":{"a":0,"k":0,"ix":9},"ty":2,"nm":"内阴影"},{"c":{"a":0,"k":[1,1,0.745098039216,1],"ix":5},"o":{"a":0,"k":75,"ix":2},"s":{"a":0,"k":5,"ix":10},"r":{"a":0,"k":50,"ix":11},"ch":{"a":0,"k":0,"ix":9},"bm":{"a":0,"k":11,"ix":1},"no":{"a":0,"k":0,"ix":3},"j":{"a":0,"k":0,"ix":12},"ty":3,"nm":"外发光"},{"c":{"a":0,"k":[1,1,0.745098039216,1],"ix":5},"o":{"a":0,"k":75,"ix":2},"s":{"a":0,"k":5,"ix":11},"r":{"a":0,"k":50,"ix":12},"sr":{"a":0,"k":1,"ix":9},"ch":{"a":0,"k":0,"ix":10},"bm":{"a":0,"k":11,"ix":1},"no":{"a":0,"k":0,"ix":3},"j":{"a":0,"k":0,"ix":13},"ty":4,"nm":"内发光"},{"c":{"a":0,"k":[1,0,0,1],"ix":2},"s":{"a":0,"k":3,"ix":3},"ty":0,"nm":"描边"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[37.5,-10.417],[0,10.417],[-37.5,-10.417]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[0]},{"t":24,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[98]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[0]},{"t":34,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100,102],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"V","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[75,33.333],[75,-29.167],[0,-75],[-75,-29.167],[-75,33.333],[0,75]],"c":true},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[14]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[14]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[14]},{"t":50,"s":[14]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"t":50,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100,100],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"6","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-37.5,-8.333],[0,12.5],[75,-29.166],[0,-75],[-75,-29.166],[-75,33.334],[0,75],[75,33.334]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[24]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[24]},{"t":50,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.478431373835,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":16,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[100,99.999],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[90,90],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"E","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":750,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/IphoneBIMe/IphoneBIMe/main.m b/IphoneBIMe/IphoneBIMe/main.m
new file mode 100644
index 0000000..3b185de
--- /dev/null
+++ b/IphoneBIMe/IphoneBIMe/main.m
@@ -0,0 +1,15 @@
+
+//  main.m
+//  IphoneBIMe
+//
+//  Created by zjf on 2018/7/13.
+//  Copyright © 2018年 ProBIM. All rights reserved.
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}
diff --git a/IphoneBIMe/Podfile b/IphoneBIMe/Podfile
new file mode 100644
index 0000000..1cc823e
--- /dev/null
+++ b/IphoneBIMe/Podfile
@@ -0,0 +1,24 @@
+# Uncomment the next line to define a global platform for your project
+platform :ios, '12.0'
+
+target 'IphoneBIMe' do
+pod 'YYModel'
+pod 'AFNetworking'
+pod 'SDWebImage'
+pod 'Masonry'
+pod 'MJRefresh'
+pod 'FMDB'
+pod 'TZImagePickerController'
+pod 'MBProgressHUD'
+pod 'JPush','~> 3.3.2'
+pod 'Bugly','~> 2.5'
+pod 'UMCCommon','~> 2.1.4'
+pod 'UMCSecurityPlugins','~> 1.0.6'
+pod 'UMCShare/Social/ReducedWeChat','~> 6.9.8'
+pod 'UMCShare/Social/ReducedQQ','~> 6.9.8'
+pod 'LFImagePickerController/LFMediaEdit'
+pod 'AMap3DMap','~> 7.4.0'
+pod 'AMapLocation'
+pod 'lottie-ios','~> 2.5'
+
+end

--
Gitblit v1.9.3